@dollhousemcp/mcp-server 1.5.2 → 1.6.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 (272) hide show
  1. package/CHANGELOG.md +56 -0
  2. package/README.md +494 -111
  3. package/data/agents/code-reviewer.md +8 -1
  4. package/data/agents/research-assistant.md +8 -1
  5. package/data/agents/task-manager.md +8 -1
  6. package/data/ensembles/business-advisor.md +8 -1
  7. package/data/ensembles/creative-studio.md +8 -1
  8. package/data/ensembles/development-team.md +8 -1
  9. package/data/ensembles/security-analysis-team.md +8 -1
  10. package/data/memories/conversation-history.md +8 -1
  11. package/data/memories/learning-progress.md +8 -1
  12. package/data/memories/project-context.md +8 -1
  13. package/data/personas/business-consultant.md +8 -1
  14. package/data/personas/creative-writer.md +8 -1
  15. package/data/personas/debug-detective.md +8 -1
  16. package/data/personas/eli5-explainer.md +8 -1
  17. package/data/personas/security-analyst.md +8 -1
  18. package/data/personas/technical-analyst.md +8 -1
  19. package/data/skills/code-review.md +8 -1
  20. package/data/skills/creative-writing.md +8 -1
  21. package/data/skills/data-analysis.md +8 -1
  22. package/data/skills/penetration-testing.md +8 -1
  23. package/data/skills/research.md +8 -1
  24. package/data/skills/threat-modeling.md +8 -1
  25. package/data/skills/translation.md +8 -1
  26. package/data/templates/code-documentation.md +8 -1
  27. package/data/templates/email-professional.md +8 -1
  28. package/data/templates/meeting-notes.md +8 -1
  29. package/data/templates/penetration-test-report.md +8 -1
  30. package/data/templates/project-brief.md +8 -1
  31. package/data/templates/report-executive.md +8 -1
  32. package/data/templates/security-vulnerability-report.md +8 -1
  33. package/data/templates/threat-assessment-report.md +8 -1
  34. package/dist/auth/GitHubAuthManager.d.ts +6 -1
  35. package/dist/auth/GitHubAuthManager.d.ts.map +1 -1
  36. package/dist/auth/GitHubAuthManager.js +45 -18
  37. package/dist/benchmarks/IndexPerformanceBenchmark.d.ts +98 -0
  38. package/dist/benchmarks/IndexPerformanceBenchmark.d.ts.map +1 -0
  39. package/dist/benchmarks/IndexPerformanceBenchmark.js +531 -0
  40. package/dist/cache/CollectionCache.d.ts.map +1 -1
  41. package/dist/cache/CollectionCache.js +13 -3
  42. package/dist/cache/CollectionIndexCache.d.ts +77 -0
  43. package/dist/cache/CollectionIndexCache.d.ts.map +1 -0
  44. package/dist/cache/CollectionIndexCache.js +349 -0
  45. package/dist/cache/LRUCache.d.ts +93 -0
  46. package/dist/cache/LRUCache.d.ts.map +1 -0
  47. package/dist/cache/LRUCache.js +299 -0
  48. package/dist/cache/index.d.ts +1 -0
  49. package/dist/cache/index.d.ts.map +1 -1
  50. package/dist/cache/index.js +2 -1
  51. package/dist/collection/CollectionBrowser.d.ts +21 -1
  52. package/dist/collection/CollectionBrowser.d.ts.map +1 -1
  53. package/dist/collection/CollectionBrowser.js +130 -10
  54. package/dist/collection/CollectionIndexManager.d.ts +151 -0
  55. package/dist/collection/CollectionIndexManager.d.ts.map +1 -0
  56. package/dist/collection/CollectionIndexManager.js +499 -0
  57. package/dist/collection/CollectionSearch.d.ts +55 -0
  58. package/dist/collection/CollectionSearch.d.ts.map +1 -1
  59. package/dist/collection/CollectionSearch.js +338 -13
  60. package/dist/collection/CollectionSeeder.d.ts.map +1 -1
  61. package/dist/collection/CollectionSeeder.js +38 -1
  62. package/dist/collection/ElementInstaller.d.ts +31 -0
  63. package/dist/collection/ElementInstaller.d.ts.map +1 -1
  64. package/dist/collection/ElementInstaller.js +77 -15
  65. package/dist/collection/PersonaSubmitter.d.ts +1 -1
  66. package/dist/collection/PersonaSubmitter.d.ts.map +1 -1
  67. package/dist/collection/PersonaSubmitter.js +2 -2
  68. package/dist/collection/index.d.ts +1 -0
  69. package/dist/collection/index.d.ts.map +1 -1
  70. package/dist/collection/index.js +2 -1
  71. package/dist/config/ConfigManager.d.ts +78 -0
  72. package/dist/config/ConfigManager.d.ts.map +1 -0
  73. package/dist/config/ConfigManager.js +216 -0
  74. package/dist/config/element-types.d.ts +135 -0
  75. package/dist/config/element-types.d.ts.map +1 -0
  76. package/dist/config/element-types.js +108 -0
  77. package/dist/config/index.d.ts +2 -0
  78. package/dist/config/index.d.ts.map +1 -1
  79. package/dist/config/index.js +3 -1
  80. package/dist/config/portfolio-constants.d.ts +83 -0
  81. package/dist/config/portfolio-constants.d.ts.map +1 -0
  82. package/dist/config/portfolio-constants.js +99 -0
  83. package/dist/elements/BaseElement.d.ts +14 -2
  84. package/dist/elements/BaseElement.d.ts.map +1 -1
  85. package/dist/elements/BaseElement.js +88 -6
  86. package/dist/elements/agents/Agent.d.ts +10 -1
  87. package/dist/elements/agents/Agent.d.ts.map +1 -1
  88. package/dist/elements/agents/Agent.js +66 -19
  89. package/dist/elements/agents/AgentManager.d.ts +2 -0
  90. package/dist/elements/agents/AgentManager.d.ts.map +1 -1
  91. package/dist/elements/agents/AgentManager.js +12 -10
  92. package/dist/elements/skills/Skill.d.ts +10 -1
  93. package/dist/elements/skills/Skill.d.ts.map +1 -1
  94. package/dist/elements/skills/Skill.js +40 -3
  95. package/dist/elements/skills/SkillManager.d.ts +1 -0
  96. package/dist/elements/skills/SkillManager.d.ts.map +1 -1
  97. package/dist/elements/skills/SkillManager.js +10 -4
  98. package/dist/elements/templates/Template.d.ts +10 -1
  99. package/dist/elements/templates/Template.d.ts.map +1 -1
  100. package/dist/elements/templates/Template.js +35 -18
  101. package/dist/elements/templates/TemplateManager.d.ts +1 -1
  102. package/dist/elements/templates/TemplateManager.d.ts.map +1 -1
  103. package/dist/elements/templates/TemplateManager.js +6 -5
  104. package/dist/generated/version.d.ts +2 -2
  105. package/dist/generated/version.js +3 -3
  106. package/dist/index.barrel.d.ts +1 -2
  107. package/dist/index.barrel.d.ts.map +1 -1
  108. package/dist/index.barrel.js +2 -4
  109. package/dist/index.d.ts +143 -25
  110. package/dist/index.d.ts.map +1 -1
  111. package/dist/index.js +1883 -310
  112. package/dist/persona/PersonaElement.d.ts +10 -0
  113. package/dist/persona/PersonaElement.d.ts.map +1 -1
  114. package/dist/persona/PersonaElement.js +55 -32
  115. package/dist/persona/PersonaElementManager.d.ts.map +1 -1
  116. package/dist/persona/PersonaElementManager.js +13 -11
  117. package/dist/persona/PersonaLoader.d.ts.map +1 -1
  118. package/dist/persona/PersonaLoader.js +8 -2
  119. package/dist/persona/export-import/PersonaImporter.d.ts.map +1 -1
  120. package/dist/persona/export-import/PersonaImporter.js +24 -5
  121. package/dist/persona/export-import/PersonaSharer.d.ts +21 -0
  122. package/dist/persona/export-import/PersonaSharer.d.ts.map +1 -1
  123. package/dist/persona/export-import/PersonaSharer.js +198 -22
  124. package/dist/portfolio/DefaultElementProvider.d.ts +90 -0
  125. package/dist/portfolio/DefaultElementProvider.d.ts.map +1 -1
  126. package/dist/portfolio/DefaultElementProvider.js +499 -7
  127. package/dist/portfolio/GitHubPortfolioIndexer.d.ts +129 -0
  128. package/dist/portfolio/GitHubPortfolioIndexer.d.ts.map +1 -0
  129. package/dist/portfolio/GitHubPortfolioIndexer.js +475 -0
  130. package/dist/portfolio/MigrationManager.d.ts.map +1 -1
  131. package/dist/portfolio/MigrationManager.js +136 -3
  132. package/dist/portfolio/PortfolioIndexManager.d.ts +130 -0
  133. package/dist/portfolio/PortfolioIndexManager.d.ts.map +1 -0
  134. package/dist/portfolio/PortfolioIndexManager.js +478 -0
  135. package/dist/portfolio/PortfolioManager.d.ts +5 -0
  136. package/dist/portfolio/PortfolioManager.d.ts.map +1 -1
  137. package/dist/portfolio/PortfolioManager.js +61 -20
  138. package/dist/portfolio/PortfolioRepoManager.d.ts +75 -0
  139. package/dist/portfolio/PortfolioRepoManager.d.ts.map +1 -0
  140. package/dist/portfolio/PortfolioRepoManager.js +337 -0
  141. package/dist/portfolio/UnifiedIndexManager.d.ts +388 -0
  142. package/dist/portfolio/UnifiedIndexManager.d.ts.map +1 -0
  143. package/dist/portfolio/UnifiedIndexManager.js +1434 -0
  144. package/dist/portfolio/index.d.ts +15 -0
  145. package/dist/portfolio/index.d.ts.map +1 -0
  146. package/dist/portfolio/index.js +15 -0
  147. package/dist/portfolio/types.d.ts +7 -0
  148. package/dist/portfolio/types.d.ts.map +1 -1
  149. package/dist/portfolio/types.js +6 -1
  150. package/dist/security/InputValidator.d.ts.map +1 -1
  151. package/dist/security/InputValidator.js +50 -48
  152. package/dist/security/audit/SecurityAuditor.d.ts.map +1 -1
  153. package/dist/security/audit/SecurityAuditor.js +17 -9
  154. package/dist/security/audit/config/suppressions.d.ts.map +1 -1
  155. package/dist/security/audit/config/suppressions.js +19 -3
  156. package/dist/security/contentValidator.d.ts +2 -0
  157. package/dist/security/contentValidator.d.ts.map +1 -1
  158. package/dist/security/contentValidator.js +115 -4
  159. package/dist/security/secureYamlParser.d.ts +1 -0
  160. package/dist/security/secureYamlParser.d.ts.map +1 -1
  161. package/dist/security/secureYamlParser.js +29 -7
  162. package/dist/security/securityMonitor.d.ts +1 -1
  163. package/dist/security/securityMonitor.d.ts.map +1 -1
  164. package/dist/security/securityMonitor.js +1 -1
  165. package/dist/security/tokenManager.d.ts +1 -1
  166. package/dist/security/tokenManager.d.ts.map +1 -1
  167. package/dist/security/tokenManager.js +30 -10
  168. package/dist/server/ServerSetup.d.ts +22 -2
  169. package/dist/server/ServerSetup.d.ts.map +1 -1
  170. package/dist/server/ServerSetup.js +77 -12
  171. package/dist/server/tools/AuthTools.d.ts.map +1 -1
  172. package/dist/server/tools/AuthTools.js +33 -1
  173. package/dist/server/tools/BuildInfoTools.d.ts +25 -0
  174. package/dist/server/tools/BuildInfoTools.d.ts.map +1 -0
  175. package/dist/server/tools/BuildInfoTools.js +36 -0
  176. package/dist/server/tools/CollectionTools.d.ts.map +1 -1
  177. package/dist/server/tools/CollectionTools.js +55 -46
  178. package/dist/server/tools/ConfigTools.d.ts.map +1 -1
  179. package/dist/server/tools/ConfigTools.js +29 -1
  180. package/dist/server/tools/PersonaTools.d.ts +4 -2
  181. package/dist/server/tools/PersonaTools.d.ts.map +1 -1
  182. package/dist/server/tools/PersonaTools.js +5 -152
  183. package/dist/server/tools/PortfolioTools.d.ts +12 -0
  184. package/dist/server/tools/PortfolioTools.d.ts.map +1 -0
  185. package/dist/server/tools/PortfolioTools.js +221 -0
  186. package/dist/server/tools/index.d.ts +3 -1
  187. package/dist/server/tools/index.d.ts.map +1 -1
  188. package/dist/server/tools/index.js +4 -2
  189. package/dist/server/types.d.ts +40 -5
  190. package/dist/server/types.d.ts.map +1 -1
  191. package/dist/server/types.js +1 -1
  192. package/dist/services/BuildInfoService.d.ts +84 -0
  193. package/dist/services/BuildInfoService.d.ts.map +1 -0
  194. package/dist/services/BuildInfoService.js +271 -0
  195. package/dist/tools/portfolio/PortfolioElementAdapter.d.ts +54 -0
  196. package/dist/tools/portfolio/PortfolioElementAdapter.d.ts.map +1 -0
  197. package/dist/tools/portfolio/PortfolioElementAdapter.js +229 -0
  198. package/dist/tools/portfolio/submitToPortfolioTool.d.ts +164 -0
  199. package/dist/tools/portfolio/submitToPortfolioTool.d.ts.map +1 -0
  200. package/dist/tools/portfolio/submitToPortfolioTool.js +1523 -0
  201. package/dist/tools/portfolio/types.d.ts +41 -0
  202. package/dist/tools/portfolio/types.d.ts.map +1 -0
  203. package/dist/tools/portfolio/types.js +15 -0
  204. package/dist/types/collection.d.ts +51 -0
  205. package/dist/types/collection.d.ts.map +1 -1
  206. package/dist/types/collection.js +1 -1
  207. package/dist/utils/EarlyTerminationSearch.d.ts +41 -0
  208. package/dist/utils/EarlyTerminationSearch.d.ts.map +1 -0
  209. package/dist/utils/EarlyTerminationSearch.js +164 -0
  210. package/dist/utils/ErrorHandler.d.ts +86 -0
  211. package/dist/utils/ErrorHandler.d.ts.map +1 -0
  212. package/dist/utils/ErrorHandler.js +201 -0
  213. package/dist/utils/FileDiscoveryUtil.d.ts +53 -0
  214. package/dist/utils/FileDiscoveryUtil.d.ts.map +1 -0
  215. package/dist/utils/FileDiscoveryUtil.js +169 -0
  216. package/dist/utils/GitHubRateLimiter.d.ts +88 -0
  217. package/dist/utils/GitHubRateLimiter.d.ts.map +1 -0
  218. package/dist/utils/GitHubRateLimiter.js +315 -0
  219. package/dist/utils/PerformanceMonitor.d.ts +134 -0
  220. package/dist/utils/PerformanceMonitor.d.ts.map +1 -0
  221. package/dist/utils/PerformanceMonitor.js +347 -0
  222. package/dist/utils/RateLimiter.d.ts.map +1 -0
  223. package/dist/utils/RateLimiter.js +172 -0
  224. package/dist/utils/SecureDownloader.d.ts +241 -0
  225. package/dist/utils/SecureDownloader.d.ts.map +1 -0
  226. package/dist/utils/SecureDownloader.js +759 -0
  227. package/dist/utils/ToolCache.d.ts +82 -0
  228. package/dist/utils/ToolCache.d.ts.map +1 -0
  229. package/dist/utils/ToolCache.js +196 -0
  230. package/dist/utils/errorCodes.d.ts +136 -0
  231. package/dist/utils/errorCodes.d.ts.map +1 -0
  232. package/dist/utils/errorCodes.js +87 -0
  233. package/dist/utils/index.d.ts +3 -0
  234. package/dist/utils/index.d.ts.map +1 -1
  235. package/dist/utils/index.js +4 -1
  236. package/dist/utils/installation.d.ts +1 -1
  237. package/dist/utils/installation.d.ts.map +1 -1
  238. package/dist/utils/installation.js +9 -8
  239. package/dist/utils/searchUtils.d.ts +31 -0
  240. package/dist/utils/searchUtils.d.ts.map +1 -1
  241. package/dist/utils/searchUtils.js +62 -1
  242. package/package.json +17 -7
  243. package/dist/config/updateConfig.d.ts +0 -84
  244. package/dist/config/updateConfig.d.ts.map +0 -1
  245. package/dist/config/updateConfig.js +0 -148
  246. package/dist/server/tools/UpdateTools.d.ts +0 -10
  247. package/dist/server/tools/UpdateTools.d.ts.map +0 -1
  248. package/dist/server/tools/UpdateTools.js +0 -85
  249. package/dist/update/BackupManager.d.ts +0 -63
  250. package/dist/update/BackupManager.d.ts.map +0 -1
  251. package/dist/update/BackupManager.js +0 -370
  252. package/dist/update/DependencyChecker.d.ts +0 -41
  253. package/dist/update/DependencyChecker.d.ts.map +0 -1
  254. package/dist/update/DependencyChecker.js +0 -132
  255. package/dist/update/RateLimiter.d.ts.map +0 -1
  256. package/dist/update/RateLimiter.js +0 -172
  257. package/dist/update/SignatureVerifier.d.ts +0 -71
  258. package/dist/update/SignatureVerifier.d.ts.map +0 -1
  259. package/dist/update/SignatureVerifier.js +0 -214
  260. package/dist/update/UpdateChecker.d.ts +0 -132
  261. package/dist/update/UpdateChecker.d.ts.map +0 -1
  262. package/dist/update/UpdateChecker.js +0 -506
  263. package/dist/update/UpdateManager.d.ts +0 -60
  264. package/dist/update/UpdateManager.d.ts.map +0 -1
  265. package/dist/update/UpdateManager.js +0 -730
  266. package/dist/update/VersionManager.d.ts +0 -31
  267. package/dist/update/VersionManager.d.ts.map +0 -1
  268. package/dist/update/VersionManager.js +0 -181
  269. package/dist/update/index.d.ts +0 -9
  270. package/dist/update/index.d.ts.map +0 -1
  271. package/dist/update/index.js +0 -9
  272. /package/dist/{update → utils}/RateLimiter.d.ts +0 -0
@@ -0,0 +1,41 @@
1
+ /**
2
+ * Type definitions for portfolio tools
3
+ * This file provides shared types to avoid circular dependencies
4
+ *
5
+ * SECURITY NOTE: This file contains only TypeScript type definitions.
6
+ * No actual user input processing occurs here. Any security scanner
7
+ * warnings about Unicode normalization are false positives as these
8
+ * are compile-time type definitions, not runtime code.
9
+ *
10
+ * FIXES IMPLEMENTED (PR #503):
11
+ * 1. TYPE SAFETY: Created shared type definitions to resolve circular dependencies
12
+ * 2. FALSE POSITIVE: Added documentation to clarify no user input processing
13
+ */
14
+ import { ElementType } from '../../portfolio/types.js';
15
+ import { IElementMetadata } from '../../types/elements/IElement.js';
16
+ /**
17
+ * Simple portfolio element for submission
18
+ * This is a simplified version that doesn't require full IElement implementation
19
+ */
20
+ export interface SimplePortfolioElement {
21
+ type: ElementType;
22
+ metadata: Partial<IElementMetadata>;
23
+ content: string;
24
+ }
25
+ /**
26
+ * Parameters for submitting content to portfolio
27
+ */
28
+ export interface SubmitToPortfolioParams {
29
+ name: string;
30
+ type?: ElementType;
31
+ }
32
+ /**
33
+ * Result from portfolio submission
34
+ */
35
+ export interface SubmitToPortfolioResult {
36
+ success: boolean;
37
+ message: string;
38
+ url?: string;
39
+ error?: string;
40
+ }
41
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/tools/portfolio/types.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,OAAO,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AACvD,OAAO,EAAE,gBAAgB,EAAE,MAAM,kCAAkC,CAAC;AAEpE;;;GAGG;AACH,MAAM,WAAW,sBAAsB;IACrC,IAAI,EAAE,WAAW,CAAC;IAClB,QAAQ,EAAE,OAAO,CAAC,gBAAgB,CAAC,CAAC;IACpC,OAAO,EAAE,MAAM,CAAC;CACjB;AAED;;GAEG;AACH,MAAM,WAAW,uBAAuB;IACtC,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,WAAW,CAAC;CACpB;AAED;;GAEG;AACH,MAAM,WAAW,uBAAuB;IACtC,OAAO,EAAE,OAAO,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB"}
@@ -0,0 +1,15 @@
1
+ /**
2
+ * Type definitions for portfolio tools
3
+ * This file provides shared types to avoid circular dependencies
4
+ *
5
+ * SECURITY NOTE: This file contains only TypeScript type definitions.
6
+ * No actual user input processing occurs here. Any security scanner
7
+ * warnings about Unicode normalization are false positives as these
8
+ * are compile-time type definitions, not runtime code.
9
+ *
10
+ * FIXES IMPLEMENTED (PR #503):
11
+ * 1. TYPE SAFETY: Created shared type definitions to resolve circular dependencies
12
+ * 2. FALSE POSITIVE: Added documentation to clarify no user input processing
13
+ */
14
+ export {};
15
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvdG9vbHMvcG9ydGZvbGlvL3R5cGVzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7R0FZRyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogVHlwZSBkZWZpbml0aW9ucyBmb3IgcG9ydGZvbGlvIHRvb2xzXG4gKiBUaGlzIGZpbGUgcHJvdmlkZXMgc2hhcmVkIHR5cGVzIHRvIGF2b2lkIGNpcmN1bGFyIGRlcGVuZGVuY2llc1xuICogXG4gKiBTRUNVUklUWSBOT1RFOiBUaGlzIGZpbGUgY29udGFpbnMgb25seSBUeXBlU2NyaXB0IHR5cGUgZGVmaW5pdGlvbnMuXG4gKiBObyBhY3R1YWwgdXNlciBpbnB1dCBwcm9jZXNzaW5nIG9jY3VycyBoZXJlLiBBbnkgc2VjdXJpdHkgc2Nhbm5lclxuICogd2FybmluZ3MgYWJvdXQgVW5pY29kZSBub3JtYWxpemF0aW9uIGFyZSBmYWxzZSBwb3NpdGl2ZXMgYXMgdGhlc2VcbiAqIGFyZSBjb21waWxlLXRpbWUgdHlwZSBkZWZpbml0aW9ucywgbm90IHJ1bnRpbWUgY29kZS5cbiAqIFxuICogRklYRVMgSU1QTEVNRU5URUQgKFBSICM1MDMpOlxuICogMS4gVFlQRSBTQUZFVFk6IENyZWF0ZWQgc2hhcmVkIHR5cGUgZGVmaW5pdGlvbnMgdG8gcmVzb2x2ZSBjaXJjdWxhciBkZXBlbmRlbmNpZXNcbiAqIDIuIEZBTFNFIFBPU0lUSVZFOiBBZGRlZCBkb2N1bWVudGF0aW9uIHRvIGNsYXJpZnkgbm8gdXNlciBpbnB1dCBwcm9jZXNzaW5nXG4gKi9cblxuaW1wb3J0IHsgRWxlbWVudFR5cGUgfSBmcm9tICcuLi8uLi9wb3J0Zm9saW8vdHlwZXMuanMnO1xuaW1wb3J0IHsgSUVsZW1lbnRNZXRhZGF0YSB9IGZyb20gJy4uLy4uL3R5cGVzL2VsZW1lbnRzL0lFbGVtZW50LmpzJztcblxuLyoqXG4gKiBTaW1wbGUgcG9ydGZvbGlvIGVsZW1lbnQgZm9yIHN1Ym1pc3Npb25cbiAqIFRoaXMgaXMgYSBzaW1wbGlmaWVkIHZlcnNpb24gdGhhdCBkb2Vzbid0IHJlcXVpcmUgZnVsbCBJRWxlbWVudCBpbXBsZW1lbnRhdGlvblxuICovXG5leHBvcnQgaW50ZXJmYWNlIFNpbXBsZVBvcnRmb2xpb0VsZW1lbnQge1xuICB0eXBlOiBFbGVtZW50VHlwZTtcbiAgbWV0YWRhdGE6IFBhcnRpYWw8SUVsZW1lbnRNZXRhZGF0YT47XG4gIGNvbnRlbnQ6IHN0cmluZztcbn1cblxuLyoqXG4gKiBQYXJhbWV0ZXJzIGZvciBzdWJtaXR0aW5nIGNvbnRlbnQgdG8gcG9ydGZvbGlvXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgU3VibWl0VG9Qb3J0Zm9saW9QYXJhbXMge1xuICBuYW1lOiBzdHJpbmc7XG4gIHR5cGU/OiBFbGVtZW50VHlwZTtcbn1cblxuLyoqXG4gKiBSZXN1bHQgZnJvbSBwb3J0Zm9saW8gc3VibWlzc2lvblxuICovXG5leHBvcnQgaW50ZXJmYWNlIFN1Ym1pdFRvUG9ydGZvbGlvUmVzdWx0IHtcbiAgc3VjY2VzczogYm9vbGVhbjtcbiAgbWVzc2FnZTogc3RyaW5nO1xuICB1cmw/OiBzdHJpbmc7XG4gIGVycm9yPzogc3RyaW5nO1xufSJdfQ==
@@ -20,4 +20,55 @@ export interface CollectionSearchResult {
20
20
  property: string;
21
21
  }>;
22
22
  }
23
+ export interface IndexEntry {
24
+ path: string;
25
+ type: string;
26
+ name: string;
27
+ description: string;
28
+ version: string;
29
+ author: string;
30
+ tags: string[];
31
+ sha: string;
32
+ category?: string;
33
+ created: string;
34
+ license?: string;
35
+ }
36
+ export interface CollectionIndex {
37
+ version: string;
38
+ generated: string;
39
+ total_elements: number;
40
+ index: {
41
+ [elementType: string]: IndexEntry[];
42
+ };
43
+ metadata: {
44
+ build_time_ms: number;
45
+ file_count: number;
46
+ skipped_files: number;
47
+ categories: number;
48
+ nodejs_version: string;
49
+ builder_version: string;
50
+ };
51
+ }
52
+ export interface CachedIndex {
53
+ data: CollectionIndex;
54
+ fetchedAt: Date;
55
+ etag?: string;
56
+ lastModified?: string;
57
+ }
58
+ export interface SearchResults {
59
+ items: IndexEntry[];
60
+ total: number;
61
+ page: number;
62
+ pageSize: number;
63
+ hasMore: boolean;
64
+ query: string;
65
+ searchTime: number;
66
+ }
67
+ export interface SearchOptions {
68
+ page?: number;
69
+ pageSize?: number;
70
+ elementType?: string;
71
+ sortBy?: 'relevance' | 'name' | 'date';
72
+ category?: string;
73
+ }
23
74
  //# sourceMappingURL=collection.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"collection.d.ts","sourceRoot":"","sources":["../../src/types/collection.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,MAAM,WAAW,iBAAiB;IAChC,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,MAAM,CAAC;IACb,YAAY,EAAE,MAAM,CAAC;IACrB,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,sBAAsB;IACrC,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE;QACV,SAAS,EAAE,MAAM,CAAC;KACnB,CAAC;IACF,YAAY,CAAC,EAAE,KAAK,CAAC;QACnB,QAAQ,EAAE,MAAM,CAAC;QACjB,QAAQ,EAAE,MAAM,CAAC;KAClB,CAAC,CAAC;CACJ"}
1
+ {"version":3,"file":"collection.d.ts","sourceRoot":"","sources":["../../src/types/collection.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,MAAM,WAAW,iBAAiB;IAChC,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,MAAM,CAAC;IACb,YAAY,EAAE,MAAM,CAAC;IACrB,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,sBAAsB;IACrC,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE;QACV,SAAS,EAAE,MAAM,CAAC;KACnB,CAAC;IACF,YAAY,CAAC,EAAE,KAAK,CAAC;QACnB,QAAQ,EAAE,MAAM,CAAC;QACjB,QAAQ,EAAE,MAAM,CAAC;KAClB,CAAC,CAAC;CACJ;AAGD,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,EAAE,CAAC;IACf,GAAG,EAAE,MAAM,CAAC;IACZ,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,eAAe;IAC9B,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,cAAc,EAAE,MAAM,CAAC;IACvB,KAAK,EAAE;QACL,CAAC,WAAW,EAAE,MAAM,GAAG,UAAU,EAAE,CAAC;KACrC,CAAC;IACF,QAAQ,EAAE;QACR,aAAa,EAAE,MAAM,CAAC;QACtB,UAAU,EAAE,MAAM,CAAC;QACnB,aAAa,EAAE,MAAM,CAAC;QACtB,UAAU,EAAE,MAAM,CAAC;QACnB,cAAc,EAAE,MAAM,CAAC;QACvB,eAAe,EAAE,MAAM,CAAC;KACzB,CAAC;CACH;AAED,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,eAAe,CAAC;IACtB,SAAS,EAAE,IAAI,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED,MAAM,WAAW,aAAa;IAC5B,KAAK,EAAE,UAAU,EAAE,CAAC;IACpB,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,OAAO,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,aAAa;IAC5B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,MAAM,CAAC,EAAE,WAAW,GAAG,MAAM,GAAG,MAAM,CAAC;IACvC,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB"}
@@ -2,4 +2,4 @@
2
2
  * Type definitions for collection functionality
3
3
  */
4
4
  export {};
5
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29sbGVjdGlvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy90eXBlcy9jb2xsZWN0aW9uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztHQUVHIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBUeXBlIGRlZmluaXRpb25zIGZvciBjb2xsZWN0aW9uIGZ1bmN0aW9uYWxpdHlcbiAqL1xuXG5leHBvcnQgaW50ZXJmYWNlIENvbGxlY3Rpb25Db250ZW50IHtcbiAgbmFtZTogc3RyaW5nO1xuICBwYXRoOiBzdHJpbmc7XG4gIHNoYTogc3RyaW5nO1xuICBzaXplOiBudW1iZXI7XG4gIGRvd25sb2FkX3VybDogc3RyaW5nO1xuICBodG1sX3VybDogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIENvbGxlY3Rpb25TZWFyY2hSZXN1bHQge1xuICBwYXRoOiBzdHJpbmc7XG4gIGh0bWxfdXJsOiBzdHJpbmc7XG4gIHJlcG9zaXRvcnk6IHtcbiAgICBmdWxsX25hbWU6IHN0cmluZztcbiAgfTtcbiAgdGV4dF9tYXRjaGVzPzogQXJyYXk8e1xuICAgIGZyYWdtZW50OiBzdHJpbmc7XG4gICAgcHJvcGVydHk6IHN0cmluZztcbiAgfT47XG59Il19
5
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29sbGVjdGlvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy90eXBlcy9jb2xsZWN0aW9uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztHQUVHIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBUeXBlIGRlZmluaXRpb25zIGZvciBjb2xsZWN0aW9uIGZ1bmN0aW9uYWxpdHlcbiAqL1xuXG5leHBvcnQgaW50ZXJmYWNlIENvbGxlY3Rpb25Db250ZW50IHtcbiAgbmFtZTogc3RyaW5nO1xuICBwYXRoOiBzdHJpbmc7XG4gIHNoYTogc3RyaW5nO1xuICBzaXplOiBudW1iZXI7XG4gIGRvd25sb2FkX3VybDogc3RyaW5nO1xuICBodG1sX3VybDogc3RyaW5nO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIENvbGxlY3Rpb25TZWFyY2hSZXN1bHQge1xuICBwYXRoOiBzdHJpbmc7XG4gIGh0bWxfdXJsOiBzdHJpbmc7XG4gIHJlcG9zaXRvcnk6IHtcbiAgICBmdWxsX25hbWU6IHN0cmluZztcbiAgfTtcbiAgdGV4dF9tYXRjaGVzPzogQXJyYXk8e1xuICAgIGZyYWdtZW50OiBzdHJpbmc7XG4gICAgcHJvcGVydHk6IHN0cmluZztcbiAgfT47XG59XG5cbi8vIENvbGxlY3Rpb24gSW5kZXggVHlwZXNcbmV4cG9ydCBpbnRlcmZhY2UgSW5kZXhFbnRyeSB7XG4gIHBhdGg6IHN0cmluZztcbiAgdHlwZTogc3RyaW5nO1xuICBuYW1lOiBzdHJpbmc7XG4gIGRlc2NyaXB0aW9uOiBzdHJpbmc7XG4gIHZlcnNpb246IHN0cmluZztcbiAgYXV0aG9yOiBzdHJpbmc7XG4gIHRhZ3M6IHN0cmluZ1tdO1xuICBzaGE6IHN0cmluZztcbiAgY2F0ZWdvcnk/OiBzdHJpbmc7XG4gIGNyZWF0ZWQ6IHN0cmluZztcbiAgbGljZW5zZT86IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBDb2xsZWN0aW9uSW5kZXgge1xuICB2ZXJzaW9uOiBzdHJpbmc7XG4gIGdlbmVyYXRlZDogc3RyaW5nO1xuICB0b3RhbF9lbGVtZW50czogbnVtYmVyO1xuICBpbmRleDoge1xuICAgIFtlbGVtZW50VHlwZTogc3RyaW5nXTogSW5kZXhFbnRyeVtdO1xuICB9O1xuICBtZXRhZGF0YToge1xuICAgIGJ1aWxkX3RpbWVfbXM6IG51bWJlcjtcbiAgICBmaWxlX2NvdW50OiBudW1iZXI7XG4gICAgc2tpcHBlZF9maWxlczogbnVtYmVyO1xuICAgIGNhdGVnb3JpZXM6IG51bWJlcjtcbiAgICBub2RlanNfdmVyc2lvbjogc3RyaW5nO1xuICAgIGJ1aWxkZXJfdmVyc2lvbjogc3RyaW5nO1xuICB9O1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIENhY2hlZEluZGV4IHtcbiAgZGF0YTogQ29sbGVjdGlvbkluZGV4O1xuICBmZXRjaGVkQXQ6IERhdGU7XG4gIGV0YWc/OiBzdHJpbmc7XG4gIGxhc3RNb2RpZmllZD86IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBTZWFyY2hSZXN1bHRzIHtcbiAgaXRlbXM6IEluZGV4RW50cnlbXTtcbiAgdG90YWw6IG51bWJlcjtcbiAgcGFnZTogbnVtYmVyO1xuICBwYWdlU2l6ZTogbnVtYmVyO1xuICBoYXNNb3JlOiBib29sZWFuO1xuICBxdWVyeTogc3RyaW5nO1xuICBzZWFyY2hUaW1lOiBudW1iZXI7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgU2VhcmNoT3B0aW9ucyB7XG4gIHBhZ2U/OiBudW1iZXI7XG4gIHBhZ2VTaXplPzogbnVtYmVyO1xuICBlbGVtZW50VHlwZT86IHN0cmluZztcbiAgc29ydEJ5PzogJ3JlbGV2YW5jZScgfCAnbmFtZScgfCAnZGF0ZSc7XG4gIGNhdGVnb3J5Pzogc3RyaW5nO1xufSJdfQ==
@@ -0,0 +1,41 @@
1
+ /**
2
+ * EarlyTerminationSearch - Utility for parallel searches with early termination
3
+ *
4
+ * Optimizes search operations by terminating when exact matches are found,
5
+ * while still providing comprehensive results for diagnostics.
6
+ */
7
+ export interface SearchResult<T> {
8
+ success: boolean;
9
+ result: T | null;
10
+ error?: string;
11
+ }
12
+ export interface EarlyTerminationResult<T> {
13
+ matches: T[];
14
+ exactMatch?: T;
15
+ totalSearches: number;
16
+ completedSearches: number;
17
+ failures: Array<{
18
+ index: number;
19
+ error: string;
20
+ }>;
21
+ earlyTerminationTriggered: boolean;
22
+ performanceGain?: string;
23
+ }
24
+ export declare class EarlyTerminationSearch {
25
+ /**
26
+ * Perform parallel searches with early termination when exact match found
27
+ * @param searches Array of search functions to execute
28
+ * @param isExactMatch Function to determine if a result is an exact match
29
+ * @param options Configuration options
30
+ */
31
+ static executeWithEarlyTermination<T>(searches: Array<() => Promise<T | null>>, isExactMatch: (result: T) => boolean, options?: {
32
+ operationName: string;
33
+ timeoutAfterExactMatch?: number;
34
+ maxParallelSearches?: number;
35
+ }): Promise<EarlyTerminationResult<T>>;
36
+ /**
37
+ * Process batch results and update the main results object
38
+ */
39
+ private static processBatchResults;
40
+ }
41
+ //# sourceMappingURL=EarlyTerminationSearch.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"EarlyTerminationSearch.d.ts","sourceRoot":"","sources":["../../src/utils/EarlyTerminationSearch.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAIH,MAAM,WAAW,YAAY,CAAC,CAAC;IAC7B,OAAO,EAAE,OAAO,CAAC;IACjB,MAAM,EAAE,CAAC,GAAG,IAAI,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,sBAAsB,CAAC,CAAC;IACvC,OAAO,EAAE,CAAC,EAAE,CAAC;IACb,UAAU,CAAC,EAAE,CAAC,CAAC;IACf,aAAa,EAAE,MAAM,CAAC;IACtB,iBAAiB,EAAE,MAAM,CAAC;IAC1B,QAAQ,EAAE,KAAK,CAAC;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAClD,yBAAyB,EAAE,OAAO,CAAC;IACnC,eAAe,CAAC,EAAE,MAAM,CAAC;CAC1B;AAED,qBAAa,sBAAsB;IACjC;;;;;OAKG;WACU,2BAA2B,CAAC,CAAC,EACxC,QAAQ,EAAE,KAAK,CAAC,MAAM,OAAO,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,EACxC,YAAY,EAAE,CAAC,MAAM,EAAE,CAAC,KAAK,OAAO,EACpC,OAAO,GAAE;QACP,aAAa,EAAE,MAAM,CAAC;QACtB,sBAAsB,CAAC,EAAE,MAAM,CAAC;QAChC,mBAAmB,CAAC,EAAE,MAAM,CAAC;KACA,GAC9B,OAAO,CAAC,sBAAsB,CAAC,CAAC,CAAC,CAAC;IA8IrC;;OAEG;IACH,OAAO,CAAC,MAAM,CAAC,mBAAmB;CAwBnC"}
@@ -0,0 +1,164 @@
1
+ /**
2
+ * EarlyTerminationSearch - Utility for parallel searches with early termination
3
+ *
4
+ * Optimizes search operations by terminating when exact matches are found,
5
+ * while still providing comprehensive results for diagnostics.
6
+ */
7
+ import { logger } from './logger.js';
8
+ export class EarlyTerminationSearch {
9
+ /**
10
+ * Perform parallel searches with early termination when exact match found
11
+ * @param searches Array of search functions to execute
12
+ * @param isExactMatch Function to determine if a result is an exact match
13
+ * @param options Configuration options
14
+ */
15
+ static async executeWithEarlyTermination(searches, isExactMatch, options = { operationName: 'search' }) {
16
+ const { operationName, timeoutAfterExactMatch = 1000, maxParallelSearches = 10 } = options;
17
+ const startTime = Date.now();
18
+ const results = {
19
+ matches: [],
20
+ totalSearches: searches.length,
21
+ completedSearches: 0,
22
+ failures: [],
23
+ earlyTerminationTriggered: false
24
+ };
25
+ if (searches.length === 0) {
26
+ logger.debug(`${operationName}: No searches to execute`);
27
+ return results;
28
+ }
29
+ // Execute searches in batches if there are many
30
+ const batches = [];
31
+ for (let i = 0; i < searches.length; i += maxParallelSearches) {
32
+ batches.push(searches.slice(i, i + maxParallelSearches));
33
+ }
34
+ let exactMatchFound = false;
35
+ let exactMatch = null;
36
+ for (const batch of batches) {
37
+ // Create promises for the current batch
38
+ const batchPromises = batch.map(async (search, batchIndex) => {
39
+ const globalIndex = batches.indexOf(batch) * maxParallelSearches + batchIndex;
40
+ try {
41
+ const result = await search();
42
+ if (result) {
43
+ // Check if this is an exact match
44
+ if (!exactMatchFound && isExactMatch(result)) {
45
+ exactMatchFound = true;
46
+ exactMatch = result;
47
+ logger.debug(`${operationName}: Exact match found at index ${globalIndex}`, {
48
+ operationName,
49
+ exactMatchIndex: globalIndex,
50
+ timeToExactMatch: Date.now() - startTime
51
+ });
52
+ }
53
+ return { success: true, result, index: globalIndex };
54
+ }
55
+ return { success: true, result: null, index: globalIndex };
56
+ }
57
+ catch (error) {
58
+ return {
59
+ success: false,
60
+ result: null,
61
+ error: error?.message || String(error),
62
+ index: globalIndex
63
+ };
64
+ }
65
+ });
66
+ // If we found an exact match in a previous batch, use timeout for remaining batches
67
+ if (exactMatchFound && timeoutAfterExactMatch > 0) {
68
+ logger.debug(`${operationName}: Using early termination timeout for remaining searches`, {
69
+ operationName,
70
+ timeoutMs: timeoutAfterExactMatch,
71
+ remainingBatches: batches.length - batches.indexOf(batch)
72
+ });
73
+ try {
74
+ // Race between batch completion and timeout
75
+ const batchResults = await Promise.race([
76
+ Promise.allSettled(batchPromises),
77
+ new Promise((_, reject) => {
78
+ setTimeout(() => {
79
+ reject(new Error('Early termination timeout'));
80
+ }, timeoutAfterExactMatch);
81
+ })
82
+ ]);
83
+ this.processBatchResults(batchResults, results);
84
+ }
85
+ catch (error) {
86
+ if (error.message === 'Early termination timeout') {
87
+ results.earlyTerminationTriggered = true;
88
+ results.performanceGain = `Terminated early after exact match, saving ${searches.length - results.completedSearches} searches`;
89
+ logger.info(`${operationName}: Early termination triggered`, {
90
+ operationName,
91
+ exactMatch: exactMatch ? 'found' : 'none',
92
+ completedSearches: results.completedSearches,
93
+ totalSearches: results.totalSearches,
94
+ timeSaved: `${Date.now() - startTime}ms`
95
+ });
96
+ break;
97
+ }
98
+ throw error;
99
+ }
100
+ }
101
+ else {
102
+ // Normal execution without timeout
103
+ const batchResults = await Promise.allSettled(batchPromises);
104
+ this.processBatchResults(batchResults, results);
105
+ }
106
+ // If we found an exact match and this is the first batch, we can potentially terminate
107
+ if (exactMatchFound && batches.indexOf(batch) === 0 && batches.length > 1) {
108
+ logger.debug(`${operationName}: Considering early termination after first batch`, {
109
+ operationName,
110
+ exactMatchFound: true,
111
+ remainingBatches: batches.length - 1
112
+ });
113
+ // Continue to next batch with timeout
114
+ }
115
+ }
116
+ // Add exact match to results if found
117
+ if (exactMatch) {
118
+ results.exactMatch = exactMatch;
119
+ // Ensure exact match is in matches array
120
+ if (!results.matches.some(m => m === exactMatch)) {
121
+ results.matches.unshift(exactMatch); // Put exact match first
122
+ }
123
+ }
124
+ const totalTime = Date.now() - startTime;
125
+ logger.debug(`${operationName}: Search operation completed`, {
126
+ operationName,
127
+ totalTime: `${totalTime}ms`,
128
+ totalSearches: results.totalSearches,
129
+ completedSearches: results.completedSearches,
130
+ matches: results.matches.length,
131
+ failures: results.failures.length,
132
+ exactMatchFound: !!results.exactMatch,
133
+ earlyTerminationTriggered: results.earlyTerminationTriggered,
134
+ performanceGain: results.performanceGain
135
+ });
136
+ return results;
137
+ }
138
+ /**
139
+ * Process batch results and update the main results object
140
+ */
141
+ static processBatchResults(batchResults, results) {
142
+ for (const promiseResult of batchResults) {
143
+ if (promiseResult.status === 'fulfilled') {
144
+ const { success, result, error, index } = promiseResult.value;
145
+ results.completedSearches++;
146
+ if (success && result) {
147
+ results.matches.push(result);
148
+ }
149
+ else if (!success && error) {
150
+ results.failures.push({ index, error });
151
+ }
152
+ }
153
+ else {
154
+ // Promise itself was rejected
155
+ results.completedSearches++;
156
+ results.failures.push({
157
+ index: -1, // Unknown index for rejected promise
158
+ error: promiseResult.reason?.message || String(promiseResult.reason)
159
+ });
160
+ }
161
+ }
162
+ }
163
+ }
164
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiRWFybHlUZXJtaW5hdGlvblNlYXJjaC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy91dGlscy9FYXJseVRlcm1pbmF0aW9uU2VhcmNoLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7OztHQUtHO0FBRUgsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLGFBQWEsQ0FBQztBQWtCckMsTUFBTSxPQUFPLHNCQUFzQjtJQUNqQzs7Ozs7T0FLRztJQUNILE1BQU0sQ0FBQyxLQUFLLENBQUMsMkJBQTJCLENBQ3RDLFFBQXdDLEVBQ3hDLFlBQW9DLEVBQ3BDLFVBSUksRUFBRSxhQUFhLEVBQUUsUUFBUSxFQUFFO1FBRS9CLE1BQU0sRUFDSixhQUFhLEVBQ2Isc0JBQXNCLEdBQUcsSUFBSSxFQUM3QixtQkFBbUIsR0FBRyxFQUFFLEVBQ3pCLEdBQUcsT0FBTyxDQUFDO1FBRVosTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDO1FBQzdCLE1BQU0sT0FBTyxHQUE4QjtZQUN6QyxPQUFPLEVBQUUsRUFBRTtZQUNYLGFBQWEsRUFBRSxRQUFRLENBQUMsTUFBTTtZQUM5QixpQkFBaUIsRUFBRSxDQUFDO1lBQ3BCLFFBQVEsRUFBRSxFQUFFO1lBQ1oseUJBQXlCLEVBQUUsS0FBSztTQUNqQyxDQUFDO1FBRUYsSUFBSSxRQUFRLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRSxDQUFDO1lBQzFCLE1BQU0sQ0FBQyxLQUFLLENBQUMsR0FBRyxhQUFhLDBCQUEwQixDQUFDLENBQUM7WUFDekQsT0FBTyxPQUFPLENBQUM7UUFDakIsQ0FBQztRQUVELGdEQUFnRDtRQUNoRCxNQUFNLE9BQU8sR0FBMEMsRUFBRSxDQUFDO1FBQzFELEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxRQUFRLENBQUMsTUFBTSxFQUFFLENBQUMsSUFBSSxtQkFBbUIsRUFBRSxDQUFDO1lBQzlELE9BQU8sQ0FBQyxJQUFJLENB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LEtBQUssQ0FBQztnQkFDOUQsT0FBTyxDQUFDLGlCQUFpQixFQUFFLENBQUM7Z0JBRTVCLElBQUksT0FBTyxJQUFJLE1BQU0sRUFBRSxDQUFDO29CQUN0QixPQUFPLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztnQkFDL0IsQ0FBQztxQkFBTSxJQUFJLENBQUMsT0FBTyxJQUFJLEtBQUssRUFBRSxDQUFDO29CQUM3QixPQUFPLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDO2dCQUMxQyxDQUFDO1lBQ0gsQ0FBQztpQkFBTSxDQUFDO2dCQUNOLDhCQUE4QjtnQkFDOUIsT0FBTyxDQUFDLGlCQUFpQixFQUFFLENBQUM7Z0JBQzVCLE9BQU8sQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDO29CQUNwQixLQUFLLEVBQUUsQ0FBQyxDQUFDLEVBQUUscUNBQXFDO29CQUNoRCxLQUFLLEVBQUUsYUFBYSxDQUFDLE1BQU0sRUFBRSxPQUFPLElBQUksTUFBTSxDQUFDLGFBQWEsQ0FBQyxNQUFNLENBQUM7aUJBQ3JFLENBQUMsQ0FBQztZQUNMLENBQUM7UUFDSCxDQUFDO0lBQ0gsQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBFYXJseVRlcm1pbmF0aW9uU2VhcmNoIC0gVXRpbGl0eSBmb3IgcGFyYWxsZWwgc2VhcmNoZXMgd2l0aCBlYXJseSB0ZXJtaW5hdGlvblxuICogXG4gKiBPcHRpbWl6ZXMgc2VhcmNoIG9wZXJhdGlvbnMgYnkgdGVybWluYXRpbmcgd2hlbiBleGFjdCBtYXRjaGVzIGFyZSBmb3VuZCxcbiAqIHdoaWxlIHN0aWxsIHByb3ZpZGluZyBjb21wcmVoZW5zaXZlIHJlc3VsdHMgZm9yIGRpYWdub3N0aWNzLlxuICovXG5cbmltcG9ydCB7IGxvZ2dlciB9IGZyb20gJy4vbG9nZ2VyLmpzJztcblxuZXhwb3J0IGludGVyZmFjZSBTZWFyY2hSZXN1bHQ8VD4ge1xuICBzdWNjZXNzOiBib29sZWFuO1xuICByZXN1bHQ6IFQgfCBudWxsO1xuICBlcnJvcj86IHN0cmluZztcbn1cblxuZXhwb3J0IGludGVyZmFjZSBFYXJseVRlcm1pbmF0aW9uUmVzdWx0PFQ+IHtcbiAgbWF0Y2hlczogVFtdO1xuICBleGFjdE1hdGNoPzogVDtcbiAgdG90YWxTZWFyY2hlczogbnVtYmVyO1xuICBjb21wbGV0ZWRTZWFyY2hlczogbnVtYmVyO1xuICBmYWlsdXJlczogQXJyYXk8eyBpbmRleDogbnVtYmVyOyBlcnJvcjogc3RyaW5nIH0+O1xuICBlYXJseVRlcm1pbmF0aW9uVHJpZ2dlcmVkOiBib29sZWFuO1xuICBwZXJmb3JtYW5jZUdhaW4/OiBzdHJpbmc7XG59XG5cbmV4cG9ydCBjbGFzcyBFYXJseVRlcm1pbmF0aW9uU2VhcmNoIHtcbiAgLyoqXG4gICAqIFBlcmZvcm0gcGFyYWxsZWwgc2VhcmNoZXMgd2l0aCBlYXJseSB0ZXJtaW5hdGlvbiB3aGVuIGV4YWN0IG1hdGNoIGZvdW5kXG4gICAqIEBwYXJhbSBzZWFyY2hlcyBBcnJheSBvZiBzZWFyY2ggZnVuY3Rpb25zIHRvIGV4ZWN1dGVcbiAgICogQHBhcmFtIGlzRXhhY3RNYXRjaCBGdW5jdGlvbiB0byBkZXRlcm1pbmUgaWYgYSByZXN1bHQgaXMgYW4gZXhhY3QgbWF0Y2hcbiAgICogQHBhcmFtIG9wdGlvbnMgQ29uZmlndXJhdGlvbiBvcHRpb25zXG4gICAqL1xuICBzdGF0aWMgYXN5bmMgZXhlY3V0ZVdpdGhFYXJseVRlcm1pbmF0aW9uPFQ+KFxuICAgIHNlYXJjaGVzOiBBcnJheTwoKSA9PiBQcm9taXNlPFQgfCBudWxsPj4sXG4gICAgaXNFeGFjdE1hdGNoOiAocmVzdWx0OiBUKSA9PiBib29sZWFuLFxuICAgIG9wdGlvbnM6IHtcbiAgICAgIG9wZXJhdGlvbk5hbWU6IHN0cmluZztcbiAgICAgIHRpbWVvdXRBZnRlckV4YWN0TWF0Y2g/OiBudW1iZXI7IC8vIG1zIHRvIHdhaXQgZm9yIG90aGVyIHNlYXJjaGVzIGFmdGVyIGV4YWN0IG1hdGNoXG4gICAgICBtYXhQYXJhbGxlbFNlYXJjaGVzPzogbnVtYmVyOyAvLyBsaW1pdCBjb25jdXJyZW50IHNlYXJjaGVzXG4gICAgfSA9IHsgb3BlcmF0aW9uTmFtZTogJ3NlYXJjaCcgfVxuICApOiBQcm9taXNlPEVhcmx5VGVybWluYXRpb25SZXN1bHQ8VD4+IHtcbiAgICBjb25zdCB7XG4gICAgICBvcGVyYXRpb25OYW1lLFxuICAgICAgdGltZW91dEFmdGVyRXhhY3RNYXRjaCA9IDEwMDAsXG4gICAgICBtYXhQYXJhbGxlbFNlYXJjaGVzID0gMTBcbiAgICB9ID0gb3B0aW9ucztcblxuICAgIGNvbnN0IHN0YXJ0VGltZSA9IERhdGUubm93KCk7XG4gICAgY29uc3QgcmVzdWx0czogRWFybHlUZXJtaW5hdGlvblJlc3VsdDxUPiA9IHtcbiAgICAgIG1hdGNoZXM6IFtdLFxuICAgICAgdG90YWxTZWFyY2hlczogc2VhcmNoZXMubGVuZ3RoLFxuICAgICAgY29tcGxldGVkU2VhcmNoZXM6IDAsXG4gICAgICBmYWlsdXJlczogW10sXG4gICAgICBlYXJseVRlcm1pbmF0aW9uVHJpZ2dlcmVkOiBmYWxzZVxuICAgIH07XG5cbiAgICBpZiAoc2VhcmNoZXMubGVuZ3RoID09PSAwKSB7XG4gICAgICBsb2dnZXIuZGVidWcoYCR7b3BlcmF0aW9uTmFtZX06IE5vIHNlYXJjaGVzIHRvIGV4ZWN1dGVgKTtcbiAgICAgIHJldHVybiByZXN1bHRzO1xuICAgIH1cblxuICAgIC8vIEV4ZWN1dGUgc2VhcmNoZXMgaW4gYmF0Y2hlcyBpZiB0aGVyZSBhcmUgbWFueVxuICAgIGNvbnN0IGJhdGNoZXM6IEFycmF5PEFycmF5PCgpID0+IFByb21pc2U8VCB8IG51bGw+Pj4gPSBbXTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHNlYXJjaGVzLmxlbmd0aDsgaSArPSBtYXhQYXJhbGxlbFNlYXJjaGVzKSB7XG4gICAgICBiYXRjaGVzLnB1c2goc2VhcmNoZXMuc2xpY2UoaSwgaSArIG1heFBhcmFsbGVsU2VhcmNoZXMpKTtcbiAgICB9XG5cbiAgICBsZXQgZXhhY3RNYXRjaEZvdW5kID0gZmFsc2U7XG4gICAgbGV0IGV4YWN0TWF0Y2g6IFQgfCBudWxsID0gbnVsbDtcblxuICAgIGZvciAoY29uc3QgYmF0Y2ggb2YgYmF0Y2hlcykge1xuICAgICAgLy8gQ3JlYXRlIHByb21pc2VzIGZvciB0aGUgY3VycmVudCBiYXRjaFxuICAgICAgY29uc3QgYmF0Y2hQcm9taXNlcyA9IGJhdGNoLm1hcChhc3luYyAoc2VhcmNoLCBiYXRjaEluZGV4KSA9PiB7XG4gICAgICAgIGNvbnN0IGdsb2JhbEluZGV4ID0gYmF0Y2hlcy5pbmRleE9mKGJhdGNoKSAqIG1heFBhcmFsbGVsU2VhcmNoZXMgKyBiYXRjaEluZGV4O1xuICAgICAgICBcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBzZWFyY2goKTtcbiAgICAgICAgICBcbiAgICAgICAgICBpZiAocmVzdWx0KSB7XG4gICAgICAgICAgICAvLyBDaGVjayBpZiB0aGlzIGlzIGFuIGV4YWN0IG1hdGNoXG4gICAgICAgICAgICBpZiAoIWV4YWN0TWF0Y2hGb3VuZCAmJiBpc0V4YWN0TWF0Y2gocmVzdWx0KSkge1xuICAgICAgICAgICAgICBleGFjdE1hdGNoRm91bmQgPSB0cnVlO1xuICAgICAgICAgICAgICBleGFjdE1hdGNoID0gcmVzdWx0O1xuICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgbG9nZ2VyLmRlYnVnKGAke29wZXJhdGlvbk5hbWV9OiBFeGFjdCBtYXRjaCBmb3VuZCBhdCBpbmRleCAke2dsb2JhbEluZGV4fWAsIHtcbiAgICAgICAgICAgICAgICBvcGVyYXRpb25OYW1lLFxuICAgICAgICAgICAgICAgIGV4YWN0TWF0Y2hJbmRleDogZ2xvYmFsSW5kZXgsXG4gICAgICAgICAgICAgICAgdGltZVRvRXhhY3RNYXRjaDogRGF0ZS5ub3coKSAtIHN0YXJ0VGltZVxuICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIFxuICAgICAgICAgICAgcmV0dXJuIHsgc3VjY2VzczogdHJ1ZSwgcmVzdWx0LCBpbmRleDogZ2xvYmFsSW5kZXggfTtcbiAgICAgICAgICB9XG4gICAgICAgICAgXG4gICAgICAgICAgcmV0dXJuIHsgc3VjY2VzczogdHJ1ZSwgcmVzdWx0OiBudWxsLCBpbmRleDogZ2xvYmFsSW5kZXggfTtcbiAgICAgICAgfSBjYXRjaCAoZXJyb3I6IGFueSkge1xuICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICBzdWNjZXNzOiBmYWxzZSxcbiAgICAgICAgICAgIHJlc3VsdDogbnVsbCxcbiAgICAgICAgICAgIGVycm9yOiBlcnJvcj8ubWVzc2FnZSB8fCBTdHJpbmcoZXJyb3IpLFxuICAgICAgICAgICAgaW5kZXg6IGdsb2JhbEluZGV4XG4gICAgICAgICAgfTtcbiAgICAgICAgfVxuICAgICAgfSk7XG5cbiAgICAgIC8vIElmIHdlIGZvdW5kIGFuIGV4YWN0IG1hdGNoIGluIGEgcHJldmlvdXMgYmF0Y2gsIHVzZSB0aW1lb3V0IGZvciByZW1haW5pbmcgYmF0Y2hlc1xuICAgICAgaWYgKGV4YWN0TWF0Y2hGb3VuZCAmJiB0aW1lb3V0QWZ0ZXJFeGFjdE1hdGNoID4gMCkge1xuICAgICAgICBsb2dnZXIuZGVidWcoYCR7b3BlcmF0aW9uTmFtZX06IFVzaW5nIGVhcmx5IHRlcm1pbmF0aW9uIHRpbWVvdXQgZm9yIHJlbWFpbmluZyBzZWFyY2hlc2AsIHtcbiAgICAgICAgICBvcGVyYXRpb25OYW1lLFxuICAgICAgICAgIHRpbWVvdXRNczogdGltZW91dEFmdGVyRXhhY3RNYXRjaCxcbiAgICAgICAgICByZW1haW5pbmdCYXRjaGVzOiBiYXRjaGVzLmxlbmd0aCAtIGJhdGNoZXMuaW5kZXhPZihiYXRjaClcbiAgICAgICAgfSk7XG5cbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAvLyBSYWNlIGJldHdlZW4gYmF0Y2ggY29tcGxldGlvbiBhbmQgdGltZW91dFxuICAgICAgICAgIGNvbnN0IGJhdGNoUmVzdWx0cyA9IGF3YWl0IFByb21pc2UucmFjZShbXG4gICAgICAgICAgICBQcm9taXNlLmFsbFNldHRsZWQoYmF0Y2hQcm9taXNlcyksXG4gICAgICAgICAgICBuZXcgUHJvbWlzZTxuZXZlcj4oKF8sIHJlamVjdCkgPT4ge1xuICAgICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgICAgICByZWplY3QobmV3IEVycm9yKCdFYXJseSB0ZXJtaW5hdGlvbiB0aW1lb3V0JykpO1xuICAgICAgICAgICAgICB9LCB0aW1lb3V0QWZ0ZXJFeGFjdE1hdGNoKTtcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgXSk7XG5cbiAgICAgICAgICB0aGlzLnByb2Nlc3NCYXRjaFJlc3VsdHMoYmF0Y2hSZXN1bHRzLCByZXN1bHRzKTtcbiAgICAgICAgfSBjYXRjaCAoZXJyb3I6IGFueSkge1xuICAgICAgICAgIGlmIChlcnJvci5tZXNzYWdlID09PSAnRWFybHkgdGVybWluYXRpb24gdGltZW91dCcpIHtcbiAgICAgICAgICAgIHJlc3VsdHMuZWFybHlUZXJtaW5hdGlvblRyaWdnZXJlZCA9IHRydWU7XG4gICAgICAgICAgICByZXN1bHRzLnBlcmZvcm1hbmNlR2FpbiA9IGBUZXJtaW5hdGVkIGVhcmx5IGFmdGVyIGV4YWN0IG1hdGNoLCBzYXZpbmcgJHtzZWFyY2hlcy5sZW5ndGggLSByZXN1bHRzLmNvbXBsZXRlZFNlYXJjaGVzfSBzZWFyY2hlc2A7XG4gICAgICAgICAgICBsb2dnZXIuaW5mbyhgJHtvcGVyYXRpb25OYW1lfTogRWFybHkgdGVybWluYXRpb24gdHJpZ2dlcmVkYCwge1xuICAgICAgICAgICAgICBvcGVyYXRpb25OYW1lLFxuICAgICAgICAgICAgICBleGFjdE1hdGNoOiBleGFjdE1hdGNoID8gJ2ZvdW5kJyA6ICdub25lJyxcbiAgICAgICAgICAgICAgY29tcGxldGVkU2VhcmNoZXM6IHJlc3VsdHMuY29tcGxldGVkU2VhcmNoZXMsXG4gICAgICAgICAgICAgIHRvdGFsU2VhcmNoZXM6IHJlc3VsdHMudG90YWxTZWFyY2hlcyxcbiAgICAgICAgICAgICAgdGltZVNhdmVkOiBgJHtEYXRlLm5vdygpIC0gc3RhcnRUaW1lfW1zYFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBicmVhaztcbiAgICAgICAgICB9XG4gICAgICAgICAgdGhyb3cgZXJyb3I7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vIE5vcm1hbCBleGVjdXRpb24gd2l0aG91dCB0aW1lb3V0XG4gICAgICAgIGNvbnN0IGJhdGNoUmVzdWx0cyA9IGF3YWl0IFByb21pc2UuYWxsU2V0dGxlZChiYXRjaFByb21pc2VzKTtcbiAgICAgICAgdGhpcy5wcm9jZXNzQmF0Y2hSZXN1bHRzKGJhdGNoUmVzdWx0cywgcmVzdWx0cyk7XG4gICAgICB9XG5cbiAgICAgIC8vIElmIHdlIGZvdW5kIGFuIGV4YWN0IG1hdGNoIGFuZCB0aGlzIGlzIHRoZSBmaXJzdCBiYXRjaCwgd2UgY2FuIHBvdGVudGlhbGx5IHRlcm1pbmF0ZVxuICAgICAgaWYgKGV4YWN0TWF0Y2hGb3VuZCAmJiBiYXRjaGVzLmluZGV4T2YoYmF0Y2gpID09PSAwICYmIGJhdGNoZXMubGVuZ3RoID4gMSkge1xuICAgICAgICBsb2dnZXIuZGVidWcoYCR7b3BlcmF0aW9uTmFtZX06IENvbnNpZGVyaW5nIGVhcmx5IHRlcm1pbmF0aW9uIGFmdGVyIGZpcnN0IGJhdGNoYCwge1xuICAgICAgICAgIG9wZXJhdGlvbk5hbWUsXG4gICAgICAgICAgZXhhY3RNYXRjaEZvdW5kOiB0cnVlLFxuICAgICAgICAgIHJlbWFpbmluZ0JhdGNoZXM6IGJhdGNoZXMubGVuZ3RoIC0gMVxuICAgICAgICB9KTtcbiAgICAgICAgLy8gQ29udGludWUgdG8gbmV4dCBiYXRjaCB3aXRoIHRpbWVvdXRcbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBBZGQgZXhhY3QgbWF0Y2ggdG8gcmVzdWx0cyBpZiBmb3VuZFxuICAgIGlmIChleGFjdE1hdGNoKSB7XG4gICAgICByZXN1bHRzLmV4YWN0TWF0Y2ggPSBleGFjdE1hdGNoO1xuICAgICAgLy8gRW5zdXJlIGV4YWN0IG1hdGNoIGlzIGluIG1hdGNoZXMgYXJyYXlcbiAgICAgIGlmICghcmVzdWx0cy5tYXRjaGVzLnNvbWUobSA9PiBtID09PSBleGFjdE1hdGNoKSkge1xuICAgICAgICByZXN1bHRzLm1hdGNoZXMudW5zaGlmdChleGFjdE1hdGNoKTsgLy8gUHV0IGV4YWN0IG1hdGNoIGZpcnN0XG4gICAgICB9XG4gICAgfVxuXG4gICAgY29uc3QgdG90YWxUaW1lID0gRGF0ZS5ub3coKSAtIHN0YXJ0VGltZTtcbiAgICBsb2dnZXIuZGVidWcoYCR7b3BlcmF0aW9uTmFtZX06IFNlYXJjaCBvcGVyYXRpb24gY29tcGxldGVkYCwge1xuICAgICAgb3BlcmF0aW9uTmFtZSxcbiAgICAgIHRvdGFsVGltZTogYCR7dG90YWxUaW1lfW1zYCxcbiAgICAgIHRvdGFsU2VhcmNoZXM6IHJlc3VsdHMudG90YWxTZWFyY2hlcyxcbiAgICAgIGNvbXBsZXRlZFNlYXJjaGVzOiByZXN1bHRzLmNvbXBsZXRlZFNlYXJjaGVzLFxuICAgICAgbWF0Y2hlczogcmVzdWx0cy5tYXRjaGVzLmxlbmd0aCxcbiAgICAgIGZhaWx1cmVzOiByZXN1bHRzLmZhaWx1cmVzLmxlbmd0aCxcbiAgICAgIGV4YWN0TWF0Y2hGb3VuZDogISFyZXN1bHRzLmV4YWN0TWF0Y2gsXG4gICAgICBlYXJseVRlcm1pbmF0aW9uVHJpZ2dlcmVkOiByZXN1bHRzLmVhcmx5VGVybWluYXRpb25UcmlnZ2VyZWQsXG4gICAgICBwZXJmb3JtYW5jZUdhaW46IHJlc3VsdHMucGVyZm9ybWFuY2VHYWluXG4gICAgfSk7XG5cbiAgICByZXR1cm4gcmVzdWx0cztcbiAgfVxuXG4gIC8qKlxuICAgKiBQcm9jZXNzIGJhdGNoIHJlc3VsdHMgYW5kIHVwZGF0ZSB0aGUgbWFpbiByZXN1bHRzIG9iamVjdFxuICAgKi9cbiAgcHJpdmF0ZSBzdGF0aWMgcHJvY2Vzc0JhdGNoUmVzdWx0czxUPihcbiAgICBiYXRjaFJlc3VsdHM6IFByb21pc2VTZXR0bGVkUmVzdWx0PHsgc3VjY2VzczogYm9vbGVhbjsgcmVzdWx0OiBUIHwgbnVsbDsgZXJyb3I/OiBzdHJpbmc7IGluZGV4OiBudW1iZXIgfT5bXSxcbiAgICByZXN1bHRzOiBFYXJseVRlcm1pbmF0aW9uUmVzdWx0PFQ+XG4gICk6IHZvaWQge1xuICAgIGZvciAoY29uc3QgcHJvbWlzZVJlc3VsdCBvZiBiYXRjaFJlc3VsdHMpIHtcbiAgICAgIGlmIChwcm9taXNlUmVzdWx0LnN0YXR1cyA9PT0gJ2Z1bGZpbGxlZCcpIHtcbiAgICAgICAgY29uc3QgeyBzdWNjZXNzLCByZXN1bHQsIGVycm9yLCBpbmRleCB9ID0gcHJvbWlzZVJlc3VsdC52YWx1ZTtcbiAgICAgICAgcmVzdWx0cy5jb21wbGV0ZWRTZWFyY2hlcysrO1xuICAgICAgICBcbiAgICAgICAgaWYgKHN1Y2Nlc3MgJiYgcmVzdWx0KSB7XG4gICAgICAgICAgcmVzdWx0cy5tYXRjaGVzLnB1c2gocmVzdWx0KTtcbiAgICAgICAgfSBlbHNlIGlmICghc3VjY2VzcyAmJiBlcnJvcikge1xuICAgICAgICAgIHJlc3VsdHMuZmFpbHVyZXMucHVzaCh7IGluZGV4LCBlcnJvciB9KTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gUHJvbWlzZSBpdHNlbGYgd2FzIHJlamVjdGVkXG4gICAgICAgIHJlc3VsdHMuY29tcGxldGVkU2VhcmNoZXMrKztcbiAgICAgICAgcmVzdWx0cy5mYWlsdXJlcy5wdXNoKHsgXG4gICAgICAgICAgaW5kZXg6IC0xLCAvLyBVbmtub3duIGluZGV4IGZvciByZWplY3RlZCBwcm9taXNlXG4gICAgICAgICAgZXJyb3I6IHByb21pc2VSZXN1bHQucmVhc29uPy5tZXNzYWdlIHx8IFN0cmluZyhwcm9taXNlUmVzdWx0LnJlYXNvbilcbiAgICAgICAgfSk7XG4gICAgICB9XG4gICAgfVxuICB9XG59Il19
@@ -0,0 +1,86 @@
1
+ /**
2
+ * Centralized error handling utilities for consistent error processing
3
+ * Preserves stack traces and provides user-friendly messages
4
+ */
5
+ /**
6
+ * Error categories for better error handling
7
+ */
8
+ export declare enum ErrorCategory {
9
+ USER_ERROR = "USER_ERROR",// User input issues
10
+ SYSTEM_ERROR = "SYSTEM_ERROR",// Internal system failures
11
+ NETWORK_ERROR = "NETWORK_ERROR",// API/network issues
12
+ AUTH_ERROR = "AUTH_ERROR",// Authentication/authorization
13
+ VALIDATION_ERROR = "VALIDATION_ERROR"
14
+ }
15
+ /**
16
+ * Structured error information
17
+ */
18
+ export interface ErrorInfo {
19
+ message: string;
20
+ category: ErrorCategory;
21
+ code?: string;
22
+ details?: Record<string, unknown>;
23
+ stack?: string;
24
+ originalError?: Error;
25
+ }
26
+ /**
27
+ * Custom error class with additional context
28
+ */
29
+ export declare class ApplicationError extends Error {
30
+ readonly category: ErrorCategory;
31
+ readonly code?: string;
32
+ readonly details?: Record<string, unknown>;
33
+ readonly originalError?: Error;
34
+ constructor(message: string, category?: ErrorCategory, code?: string, details?: Record<string, unknown>, originalError?: Error);
35
+ }
36
+ /**
37
+ * Utility class for consistent error handling
38
+ */
39
+ export declare class ErrorHandler {
40
+ /**
41
+ * Maximum stack trace depth to prevent memory issues
42
+ */
43
+ private static readonly MAX_STACK_DEPTH;
44
+ /**
45
+ * Maximum length for stack trace strings
46
+ */
47
+ private static readonly MAX_STACK_LENGTH;
48
+ /**
49
+ * Truncate stack trace to prevent memory issues
50
+ */
51
+ static truncateStack(stack?: string): string | undefined;
52
+ /**
53
+ * Extract error information while preserving context
54
+ */
55
+ static extractErrorInfo(error: unknown): ErrorInfo;
56
+ /**
57
+ * Get user-friendly error message
58
+ */
59
+ static getUserMessage(error: unknown): string;
60
+ /**
61
+ * Log error with appropriate level and context
62
+ */
63
+ static logError(context: string, error: unknown, additionalInfo?: Record<string, unknown>): void;
64
+ /**
65
+ * Create an error with context preservation
66
+ */
67
+ static createError(message: string, category?: ErrorCategory, code?: string, originalError?: unknown): ApplicationError;
68
+ /**
69
+ * Wrap an error with additional context
70
+ */
71
+ static wrapError(error: unknown, context: string, category?: ErrorCategory): ApplicationError;
72
+ /**
73
+ * Check if error is of a specific category
74
+ */
75
+ static isErrorCategory(error: unknown, category: ErrorCategory): boolean;
76
+ /**
77
+ * Format error for API response
78
+ */
79
+ static formatForResponse(error: unknown): {
80
+ success: false;
81
+ message: string;
82
+ error: string;
83
+ details?: Record<string, unknown>;
84
+ };
85
+ }
86
+ //# sourceMappingURL=ErrorHandler.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ErrorHandler.d.ts","sourceRoot":"","sources":["../../src/utils/ErrorHandler.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAIH;;GAEG;AACH,oBAAY,aAAa;IACvB,UAAU,eAAe,CAAS,oBAAoB;IACtD,YAAY,iBAAiB,CAAK,2BAA2B;IAC7D,aAAa,kBAAkB,CAAG,qBAAqB;IACvD,UAAU,eAAe,CAAS,+BAA+B;IACjE,gBAAgB,qBAAqB;CACtC;AAED;;GAEG;AACH,MAAM,WAAW,SAAS;IACxB,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,aAAa,CAAC;IACxB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAClC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,aAAa,CAAC,EAAE,KAAK,CAAC;CACvB;AAED;;GAEG;AACH,qBAAa,gBAAiB,SAAQ,KAAK;IACzC,SAAgB,QAAQ,EAAE,aAAa,CAAC;IACxC,SAAgB,IAAI,CAAC,EAAE,MAAM,CAAC;IAC9B,SAAgB,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAClD,SAAgB,aAAa,CAAC,EAAE,KAAK,CAAC;gBAGpC,OAAO,EAAE,MAAM,EACf,QAAQ,GAAE,aAA0C,EACpD,IAAI,CAAC,EAAE,MAAM,EACb,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EACjC,aAAa,CAAC,EAAE,KAAK;CAexB;AAED;;GAEG;AACH,qBAAa,YAAY;IACvB;;OAEG;IACH,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,eAAe,CAAM;IAE7C;;OAEG;IACH,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,gBAAgB,CAAQ;IAEhD;;OAEG;WACW,aAAa,CAAC,KAAK,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS;IAiB/D;;OAEG;IACH,MAAM,CAAC,gBAAgB,CAAC,KAAK,EAAE,OAAO,GAAG,SAAS;IAuClD;;OAEG;IACH,MAAM,CAAC,cAAc,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM;IAmB7C;;OAEG;IACH,MAAM,CAAC,QAAQ,CACb,OAAO,EAAE,MAAM,EACf,KAAK,EAAE,OAAO,EACd,cAAc,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GACvC,IAAI;IAwCP;;OAEG;IACH,MAAM,CAAC,WAAW,CAChB,OAAO,EAAE,MAAM,EACf,QAAQ,GAAE,aAA0C,EACpD,IAAI,CAAC,EAAE,MAAM,EACb,aAAa,CAAC,EAAE,OAAO,GACtB,gBAAgB;IAKnB;;OAEG;IACH,MAAM,CAAC,SAAS,CACd,KAAK,EAAE,OAAO,EACd,OAAO,EAAE,MAAM,EACf,QAAQ,CAAC,EAAE,aAAa,GACvB,gBAAgB;IAWnB;;OAEG;IACH,MAAM,CAAC,eAAe,CAAC,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,aAAa,GAAG,OAAO;IAKxE;;OAEG;IACH,MAAM,CAAC,iBAAiB,CAAC,KAAK,EAAE,OAAO,GAAG;QACxC,OAAO,EAAE,KAAK,CAAC;QACf,OAAO,EAAE,MAAM,CAAC;QAChB,KAAK,EAAE,MAAM,CAAC;QACd,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;KACnC;CAYF"}