@mcpmesh/sdk 0.8.0-beta.1

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 (145) hide show
  1. package/dist/__tests__/claude-handler.test.d.ts +7 -0
  2. package/dist/__tests__/claude-handler.test.d.ts.map +1 -0
  3. package/dist/__tests__/claude-handler.test.js +455 -0
  4. package/dist/__tests__/claude-handler.test.js.map +1 -0
  5. package/dist/__tests__/config.test.d.ts +7 -0
  6. package/dist/__tests__/config.test.d.ts.map +1 -0
  7. package/dist/__tests__/config.test.js +156 -0
  8. package/dist/__tests__/config.test.js.map +1 -0
  9. package/dist/__tests__/errors.test.d.ts +7 -0
  10. package/dist/__tests__/errors.test.d.ts.map +1 -0
  11. package/dist/__tests__/errors.test.js +170 -0
  12. package/dist/__tests__/errors.test.js.map +1 -0
  13. package/dist/__tests__/generic-handler.test.d.ts +7 -0
  14. package/dist/__tests__/generic-handler.test.d.ts.map +1 -0
  15. package/dist/__tests__/generic-handler.test.js +243 -0
  16. package/dist/__tests__/generic-handler.test.js.map +1 -0
  17. package/dist/__tests__/llm-provider.test.d.ts +7 -0
  18. package/dist/__tests__/llm-provider.test.d.ts.map +1 -0
  19. package/dist/__tests__/llm-provider.test.js +217 -0
  20. package/dist/__tests__/llm-provider.test.js.map +1 -0
  21. package/dist/__tests__/openai-handler.test.d.ts +7 -0
  22. package/dist/__tests__/openai-handler.test.d.ts.map +1 -0
  23. package/dist/__tests__/openai-handler.test.js +359 -0
  24. package/dist/__tests__/openai-handler.test.js.map +1 -0
  25. package/dist/__tests__/provider-handler-registry.test.d.ts +9 -0
  26. package/dist/__tests__/provider-handler-registry.test.d.ts.map +1 -0
  27. package/dist/__tests__/provider-handler-registry.test.js +187 -0
  28. package/dist/__tests__/provider-handler-registry.test.js.map +1 -0
  29. package/dist/__tests__/response-parser.test.d.ts +7 -0
  30. package/dist/__tests__/response-parser.test.d.ts.map +1 -0
  31. package/dist/__tests__/response-parser.test.js +360 -0
  32. package/dist/__tests__/response-parser.test.js.map +1 -0
  33. package/dist/__tests__/route.test.d.ts +7 -0
  34. package/dist/__tests__/route.test.d.ts.map +1 -0
  35. package/dist/__tests__/route.test.js +281 -0
  36. package/dist/__tests__/route.test.js.map +1 -0
  37. package/dist/__tests__/sse.test.d.ts +7 -0
  38. package/dist/__tests__/sse.test.d.ts.map +1 -0
  39. package/dist/__tests__/sse.test.js +172 -0
  40. package/dist/__tests__/sse.test.js.map +1 -0
  41. package/dist/__tests__/template.test.d.ts +7 -0
  42. package/dist/__tests__/template.test.d.ts.map +1 -0
  43. package/dist/__tests__/template.test.js +176 -0
  44. package/dist/__tests__/template.test.js.map +1 -0
  45. package/dist/__tests__/tracing.test.d.ts +7 -0
  46. package/dist/__tests__/tracing.test.d.ts.map +1 -0
  47. package/dist/__tests__/tracing.test.js +264 -0
  48. package/dist/__tests__/tracing.test.js.map +1 -0
  49. package/dist/agent.d.ts +165 -0
  50. package/dist/agent.d.ts.map +1 -0
  51. package/dist/agent.js +626 -0
  52. package/dist/agent.js.map +1 -0
  53. package/dist/api-runtime.d.ts +166 -0
  54. package/dist/api-runtime.d.ts.map +1 -0
  55. package/dist/api-runtime.js +459 -0
  56. package/dist/api-runtime.js.map +1 -0
  57. package/dist/config.d.ts +31 -0
  58. package/dist/config.d.ts.map +1 -0
  59. package/dist/config.js +60 -0
  60. package/dist/config.js.map +1 -0
  61. package/dist/debug.d.ts +47 -0
  62. package/dist/debug.d.ts.map +1 -0
  63. package/dist/debug.js +86 -0
  64. package/dist/debug.js.map +1 -0
  65. package/dist/errors.d.ts +99 -0
  66. package/dist/errors.d.ts.map +1 -0
  67. package/dist/errors.js +110 -0
  68. package/dist/errors.js.map +1 -0
  69. package/dist/express.d.ts +146 -0
  70. package/dist/express.d.ts.map +1 -0
  71. package/dist/express.js +371 -0
  72. package/dist/express.js.map +1 -0
  73. package/dist/index.d.ts +96 -0
  74. package/dist/index.d.ts.map +1 -0
  75. package/dist/index.js +107 -0
  76. package/dist/index.js.map +1 -0
  77. package/dist/llm-agent.d.ts +193 -0
  78. package/dist/llm-agent.d.ts.map +1 -0
  79. package/dist/llm-agent.js +634 -0
  80. package/dist/llm-agent.js.map +1 -0
  81. package/dist/llm-provider.d.ts +323 -0
  82. package/dist/llm-provider.d.ts.map +1 -0
  83. package/dist/llm-provider.js +446 -0
  84. package/dist/llm-provider.js.map +1 -0
  85. package/dist/llm.d.ts +194 -0
  86. package/dist/llm.d.ts.map +1 -0
  87. package/dist/llm.js +304 -0
  88. package/dist/llm.js.map +1 -0
  89. package/dist/provider-handlers/claude-handler.d.ts +98 -0
  90. package/dist/provider-handlers/claude-handler.d.ts.map +1 -0
  91. package/dist/provider-handlers/claude-handler.js +268 -0
  92. package/dist/provider-handlers/claude-handler.js.map +1 -0
  93. package/dist/provider-handlers/gemini-handler.d.ts +82 -0
  94. package/dist/provider-handlers/gemini-handler.d.ts.map +1 -0
  95. package/dist/provider-handlers/gemini-handler.js +152 -0
  96. package/dist/provider-handlers/gemini-handler.js.map +1 -0
  97. package/dist/provider-handlers/generic-handler.d.ts +78 -0
  98. package/dist/provider-handlers/generic-handler.d.ts.map +1 -0
  99. package/dist/provider-handlers/generic-handler.js +152 -0
  100. package/dist/provider-handlers/generic-handler.js.map +1 -0
  101. package/dist/provider-handlers/index.d.ts +29 -0
  102. package/dist/provider-handlers/index.d.ts.map +1 -0
  103. package/dist/provider-handlers/index.js +32 -0
  104. package/dist/provider-handlers/index.js.map +1 -0
  105. package/dist/provider-handlers/openai-handler.d.ts +86 -0
  106. package/dist/provider-handlers/openai-handler.d.ts.map +1 -0
  107. package/dist/provider-handlers/openai-handler.js +160 -0
  108. package/dist/provider-handlers/openai-handler.js.map +1 -0
  109. package/dist/provider-handlers/provider-handler-registry.d.ts +124 -0
  110. package/dist/provider-handlers/provider-handler-registry.d.ts.map +1 -0
  111. package/dist/provider-handlers/provider-handler-registry.js +180 -0
  112. package/dist/provider-handlers/provider-handler-registry.js.map +1 -0
  113. package/dist/provider-handlers/provider-handler.d.ts +245 -0
  114. package/dist/provider-handlers/provider-handler.d.ts.map +1 -0
  115. package/dist/provider-handlers/provider-handler.js +238 -0
  116. package/dist/provider-handlers/provider-handler.js.map +1 -0
  117. package/dist/proxy.d.ts +44 -0
  118. package/dist/proxy.d.ts.map +1 -0
  119. package/dist/proxy.js +324 -0
  120. package/dist/proxy.js.map +1 -0
  121. package/dist/response-parser.d.ts +103 -0
  122. package/dist/response-parser.d.ts.map +1 -0
  123. package/dist/response-parser.js +232 -0
  124. package/dist/response-parser.js.map +1 -0
  125. package/dist/route.d.ts +185 -0
  126. package/dist/route.d.ts.map +1 -0
  127. package/dist/route.js +310 -0
  128. package/dist/route.js.map +1 -0
  129. package/dist/sse.d.ts +45 -0
  130. package/dist/sse.d.ts.map +1 -0
  131. package/dist/sse.js +77 -0
  132. package/dist/sse.js.map +1 -0
  133. package/dist/template.d.ts +86 -0
  134. package/dist/template.d.ts.map +1 -0
  135. package/dist/template.js +206 -0
  136. package/dist/template.js.map +1 -0
  137. package/dist/tracing.d.ts +88 -0
  138. package/dist/tracing.d.ts.map +1 -0
  139. package/dist/tracing.js +193 -0
  140. package/dist/tracing.js.map +1 -0
  141. package/dist/types.d.ts +618 -0
  142. package/dist/types.d.ts.map +1 -0
  143. package/dist/types.js +5 -0
  144. package/dist/types.js.map +1 -0
  145. package/package.json +68 -0
@@ -0,0 +1,187 @@
1
+ /**
2
+ * Unit tests for provider-handler-registry.ts
3
+ *
4
+ * Tests the ProviderHandlerRegistry singleton that manages vendor-specific handlers.
5
+ */
6
+ import { describe, it, expect, beforeEach, afterEach } from "vitest";
7
+ import { ProviderHandlerRegistry } from "../provider-handlers/provider-handler-registry.js";
8
+ import { ClaudeHandler } from "../provider-handlers/claude-handler.js";
9
+ // Import handlers to register them (side effect registration)
10
+ import "../provider-handlers/openai-handler.js";
11
+ import "../provider-handlers/gemini-handler.js";
12
+ import "../provider-handlers/generic-handler.js";
13
+ describe("ProviderHandlerRegistry", () => {
14
+ beforeEach(() => {
15
+ // Clear cache before each test to ensure clean state
16
+ ProviderHandlerRegistry.clearCache();
17
+ });
18
+ describe("getHandler", () => {
19
+ it("should return ClaudeHandler for anthropic vendor", () => {
20
+ const handler = ProviderHandlerRegistry.getHandler("anthropic");
21
+ expect(handler).toBeDefined();
22
+ expect(handler.vendor).toBe("anthropic");
23
+ expect(handler.constructor.name).toBe("ClaudeHandler");
24
+ });
25
+ it("should return OpenAIHandler for openai vendor", () => {
26
+ const handler = ProviderHandlerRegistry.getHandler("openai");
27
+ expect(handler).toBeDefined();
28
+ expect(handler.vendor).toBe("openai");
29
+ expect(handler.constructor.name).toBe("OpenAIHandler");
30
+ });
31
+ it("should return GeminiHandler for google vendor", () => {
32
+ // Vercel AI SDK extracts "google" from model strings like "google/gemini-2.0-flash"
33
+ const handler = ProviderHandlerRegistry.getHandler("google");
34
+ expect(handler).toBeDefined();
35
+ expect(handler.vendor).toBe("google");
36
+ expect(handler.constructor.name).toBe("GeminiHandler");
37
+ });
38
+ it("should return GenericHandler for unknown vendor", () => {
39
+ const handler = ProviderHandlerRegistry.getHandler("unknown");
40
+ expect(handler).toBeDefined();
41
+ expect(handler.constructor.name).toBe("GenericHandler");
42
+ });
43
+ it("should return GenericHandler for null vendor", () => {
44
+ const handler = ProviderHandlerRegistry.getHandler(null);
45
+ expect(handler).toBeDefined();
46
+ expect(handler.constructor.name).toBe("GenericHandler");
47
+ });
48
+ it("should return GenericHandler for undefined vendor", () => {
49
+ const handler = ProviderHandlerRegistry.getHandler(undefined);
50
+ expect(handler).toBeDefined();
51
+ expect(handler.constructor.name).toBe("GenericHandler");
52
+ });
53
+ it("should return GenericHandler for unregistered vendor", () => {
54
+ const handler = ProviderHandlerRegistry.getHandler("some-custom-vendor");
55
+ expect(handler).toBeDefined();
56
+ expect(handler.constructor.name).toBe("GenericHandler");
57
+ });
58
+ it("should normalize vendor name to lowercase", () => {
59
+ const handler1 = ProviderHandlerRegistry.getHandler("ANTHROPIC");
60
+ const handler2 = ProviderHandlerRegistry.getHandler("Anthropic");
61
+ const handler3 = ProviderHandlerRegistry.getHandler("anthropic");
62
+ expect(handler1.vendor).toBe("anthropic");
63
+ expect(handler2.vendor).toBe("anthropic");
64
+ expect(handler3.vendor).toBe("anthropic");
65
+ });
66
+ it("should trim whitespace from vendor name", () => {
67
+ const handler = ProviderHandlerRegistry.getHandler(" openai ");
68
+ expect(handler.vendor).toBe("openai");
69
+ });
70
+ it("should cache handler instances (singleton per vendor)", () => {
71
+ const handler1 = ProviderHandlerRegistry.getHandler("anthropic");
72
+ const handler2 = ProviderHandlerRegistry.getHandler("anthropic");
73
+ expect(handler1).toBe(handler2);
74
+ });
75
+ it("should return different instances for different vendors", () => {
76
+ const anthropicHandler = ProviderHandlerRegistry.getHandler("anthropic");
77
+ const openaiHandler = ProviderHandlerRegistry.getHandler("openai");
78
+ expect(anthropicHandler).not.toBe(openaiHandler);
79
+ });
80
+ });
81
+ describe("register", () => {
82
+ afterEach(() => {
83
+ // Restore original ClaudeHandler after tests that may override it
84
+ ProviderHandlerRegistry.register("anthropic", ClaudeHandler);
85
+ ProviderHandlerRegistry.clearCache();
86
+ });
87
+ it("should register custom handler", () => {
88
+ class CustomHandler {
89
+ vendor = "custom";
90
+ prepareRequest(messages) {
91
+ return { messages: messages };
92
+ }
93
+ formatSystemPrompt(basePrompt) {
94
+ return basePrompt;
95
+ }
96
+ getCapabilities() {
97
+ return {
98
+ nativeToolCalling: false,
99
+ structuredOutput: false,
100
+ streaming: false,
101
+ vision: false,
102
+ jsonMode: false,
103
+ };
104
+ }
105
+ determineOutputMode() {
106
+ return "text";
107
+ }
108
+ }
109
+ ProviderHandlerRegistry.register("custom", CustomHandler);
110
+ const handler = ProviderHandlerRegistry.getHandler("custom");
111
+ expect(handler).toBeDefined();
112
+ expect(handler.vendor).toBe("custom");
113
+ expect(handler.constructor.name).toBe("CustomHandler");
114
+ });
115
+ it("should clear cached instance when re-registering", () => {
116
+ // Get initial handler
117
+ const handler1 = ProviderHandlerRegistry.getHandler("anthropic");
118
+ // Register a new handler for the same vendor
119
+ class ReplacementHandler {
120
+ vendor = "anthropic";
121
+ prepareRequest(messages) {
122
+ return { messages: messages };
123
+ }
124
+ formatSystemPrompt(basePrompt) {
125
+ return basePrompt;
126
+ }
127
+ getCapabilities() {
128
+ return {
129
+ nativeToolCalling: false,
130
+ structuredOutput: false,
131
+ streaming: false,
132
+ vision: false,
133
+ jsonMode: false,
134
+ };
135
+ }
136
+ determineOutputMode() {
137
+ return "text";
138
+ }
139
+ }
140
+ ProviderHandlerRegistry.register("anthropic", ReplacementHandler);
141
+ const handler2 = ProviderHandlerRegistry.getHandler("anthropic");
142
+ expect(handler2.constructor.name).toBe("ReplacementHandler");
143
+ expect(handler1).not.toBe(handler2);
144
+ });
145
+ });
146
+ describe("listVendors", () => {
147
+ it("should list registered vendors", () => {
148
+ const vendors = ProviderHandlerRegistry.listVendors();
149
+ expect(vendors.has("anthropic")).toBe(true);
150
+ expect(vendors.has("openai")).toBe(true);
151
+ expect(vendors.has("google")).toBe(true);
152
+ expect(vendors.get("anthropic")).toBe("ClaudeHandler");
153
+ expect(vendors.get("openai")).toBe("OpenAIHandler");
154
+ expect(vendors.get("google")).toBe("GeminiHandler");
155
+ });
156
+ });
157
+ describe("hasHandler", () => {
158
+ it("should return true for registered vendors", () => {
159
+ expect(ProviderHandlerRegistry.hasHandler("anthropic")).toBe(true);
160
+ expect(ProviderHandlerRegistry.hasHandler("openai")).toBe(true);
161
+ expect(ProviderHandlerRegistry.hasHandler("google")).toBe(true);
162
+ });
163
+ it("should return false for unregistered vendors", () => {
164
+ expect(ProviderHandlerRegistry.hasHandler("unregistered")).toBe(false);
165
+ expect(ProviderHandlerRegistry.hasHandler("cohere")).toBe(false);
166
+ });
167
+ it("should normalize vendor name for lookup", () => {
168
+ expect(ProviderHandlerRegistry.hasHandler("ANTHROPIC")).toBe(true);
169
+ expect(ProviderHandlerRegistry.hasHandler(" openai ")).toBe(true);
170
+ });
171
+ });
172
+ describe("clearCache", () => {
173
+ it("should clear all cached instances", () => {
174
+ // Get handlers to populate cache
175
+ const handler1 = ProviderHandlerRegistry.getHandler("anthropic");
176
+ const handler2 = ProviderHandlerRegistry.getHandler("openai");
177
+ // Clear cache
178
+ ProviderHandlerRegistry.clearCache();
179
+ // Get handlers again - should be new instances
180
+ const handler3 = ProviderHandlerRegistry.getHandler("anthropic");
181
+ const handler4 = ProviderHandlerRegistry.getHandler("openai");
182
+ expect(handler1).not.toBe(handler3);
183
+ expect(handler2).not.toBe(handler4);
184
+ });
185
+ });
186
+ });
187
+ //# sourceMappingURL=provider-handler-registry.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"provider-handler-registry.test.js","sourceRoot":"","sources":["../../src/__tests__/provider-handler-registry.test.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,QAAQ,CAAC;AAErE,OAAO,EAAE,uBAAuB,EAAE,MAAM,mDAAmD,CAAC;AAC5F,OAAO,EAAE,aAAa,EAAE,MAAM,wCAAwC,CAAC;AAEvE,8DAA8D;AAC9D,OAAO,wCAAwC,CAAC;AAChD,OAAO,wCAAwC,CAAC;AAChD,OAAO,yCAAyC,CAAC;AAEjD,QAAQ,CAAC,yBAAyB,EAAE,GAAG,EAAE;IACvC,UAAU,CAAC,GAAG,EAAE;QACd,qDAAqD;QACrD,uBAAuB,CAAC,UAAU,EAAE,CAAC;IACvC,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,YAAY,EAAE,GAAG,EAAE;QAC1B,EAAE,CAAC,kDAAkD,EAAE,GAAG,EAAE;YAC1D,MAAM,OAAO,GAAG,uBAAuB,CAAC,UAAU,CAAC,WAAW,CAAC,CAAC;YAEhE,MAAM,CAAC,OAAO,CAAC,CAAC,WAAW,EAAE,CAAC;YAC9B,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;YACzC,MAAM,CAAC,OAAO,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;QACzD,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,+CAA+C,EAAE,GAAG,EAAE;YACvD,MAAM,OAAO,GAAG,uBAAuB,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC;YAE7D,MAAM,CAAC,OAAO,CAAC,CAAC,WAAW,EAAE,CAAC;YAC9B,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;YACtC,MAAM,CAAC,OAAO,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;QACzD,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,+CAA+C,EAAE,GAAG,EAAE;YACvD,oFAAoF;YACpF,MAAM,OAAO,GAAG,uBAAuB,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC;YAE7D,MAAM,CAAC,OAAO,CAAC,CAAC,WAAW,EAAE,CAAC;YAC9B,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;YACtC,MAAM,CAAC,OAAO,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;QACzD,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,iDAAiD,EAAE,GAAG,EAAE;YACzD,MAAM,OAAO,GAAG,uBAAuB,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC;YAE9D,MAAM,CAAC,OAAO,CAAC,CAAC,WAAW,EAAE,CAAC;YAC9B,MAAM,CAAC,OAAO,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;QAC1D,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,8CAA8C,EAAE,GAAG,EAAE;YACtD,MAAM,OAAO,GAAG,uBAAuB,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;YAEzD,MAAM,CAAC,OAAO,CAAC,CAAC,WAAW,EAAE,CAAC;YAC9B,MAAM,CAAC,OAAO,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;QAC1D,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,mDAAmD,EAAE,GAAG,EAAE;YAC3D,MAAM,OAAO,GAAG,uBAAuB,CAAC,UAAU,CAAC,SAAqC,CAAC,CAAC;YAE1F,MAAM,CAAC,OAAO,CAAC,CAAC,WAAW,EAAE,CAAC;YAC9B,MAAM,CAAC,OAAO,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;QAC1D,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,sDAAsD,EAAE,GAAG,EAAE;YAC9D,MAAM,OAAO,GAAG,uBAAuB,CAAC,UAAU,CAAC,oBAAoB,CAAC,CAAC;YAEzE,MAAM,CAAC,OAAO,CAAC,CAAC,WAAW,EAAE,CAAC;YAC9B,MAAM,CAAC,OAAO,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;QAC1D,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,2CAA2C,EAAE,GAAG,EAAE;YACnD,MAAM,QAAQ,GAAG,uBAAuB,CAAC,UAAU,CAAC,WAAW,CAAC,CAAC;YACjE,MAAM,QAAQ,GAAG,uBAAuB,CAAC,UAAU,CAAC,WAAW,CAAC,CAAC;YACjE,MAAM,QAAQ,GAAG,uBAAuB,CAAC,UAAU,CAAC,WAAW,CAAC,CAAC;YAEjE,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;YAC1C,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;YAC1C,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;QAC5C,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,yCAAyC,EAAE,GAAG,EAAE;YACjD,MAAM,OAAO,GAAG,uBAAuB,CAAC,UAAU,CAAC,YAAY,CAAC,CAAC;YAEjE,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QACxC,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,uDAAuD,EAAE,GAAG,EAAE;YAC/D,MAAM,QAAQ,GAAG,uBAAuB,CAAC,UAAU,CAAC,WAAW,CAAC,CAAC;YACjE,MAAM,QAAQ,GAAG,uBAAuB,CAAC,UAAU,CAAC,WAAW,CAAC,CAAC;YAEjE,MAAM,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QAClC,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,yDAAyD,EAAE,GAAG,EAAE;YACjE,MAAM,gBAAgB,GAAG,uBAAuB,CAAC,UAAU,CAAC,WAAW,CAAC,CAAC;YACzE,MAAM,aAAa,GAAG,uBAAuB,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC;YAEnE,MAAM,CAAC,gBAAgB,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;QACnD,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,UAAU,EAAE,GAAG,EAAE;QACxB,SAAS,CAAC,GAAG,EAAE;YACb,kEAAkE;YAClE,uBAAuB,CAAC,QAAQ,CAAC,WAAW,EAAE,aAAa,CAAC,CAAC;YAC7D,uBAAuB,CAAC,UAAU,EAAE,CAAC;QACvC,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,gCAAgC,EAAE,GAAG,EAAE;YACxC,MAAM,aAAa;gBACR,MAAM,GAAG,QAAQ,CAAC;gBAE3B,cAAc,CAAC,QAAmB;oBAChC,OAAO,EAAE,QAAQ,EAAE,QAAuC,EAAE,CAAC;gBAC/D,CAAC;gBAED,kBAAkB,CAAC,UAAkB;oBACnC,OAAO,UAAU,CAAC;gBACpB,CAAC;gBAED,eAAe;oBACb,OAAO;wBACL,iBAAiB,EAAE,KAAK;wBACxB,gBAAgB,EAAE,KAAK;wBACvB,SAAS,EAAE,KAAK;wBAChB,MAAM,EAAE,KAAK;wBACb,QAAQ,EAAE,KAAK;qBAChB,CAAC;gBACJ,CAAC;gBAED,mBAAmB;oBACjB,OAAO,MAAM,CAAC;gBAChB,CAAC;aACF;YAED,uBAAuB,CAAC,QAAQ,CAAC,QAAQ,EAAE,aAAa,CAAC,CAAC;YAC1D,MAAM,OAAO,GAAG,uBAAuB,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC;YAE7D,MAAM,CAAC,OAAO,CAAC,CAAC,WAAW,EAAE,CAAC;YAC9B,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;YACtC,MAAM,CAAC,OAAO,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;QACzD,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,kDAAkD,EAAE,GAAG,EAAE;YAC1D,sBAAsB;YACtB,MAAM,QAAQ,GAAG,uBAAuB,CAAC,UAAU,CAAC,WAAW,CAAC,CAAC;YAEjE,6CAA6C;YAC7C,MAAM,kBAAkB;gBACb,MAAM,GAAG,WAAW,CAAC;gBAE9B,cAAc,CAAC,QAAmB;oBAChC,OAAO,EAAE,QAAQ,EAAE,QAAuC,EAAE,CAAC;gBAC/D,CAAC;gBAED,kBAAkB,CAAC,UAAkB;oBACnC,OAAO,UAAU,CAAC;gBACpB,CAAC;gBAED,eAAe;oBACb,OAAO;wBACL,iBAAiB,EAAE,KAAK;wBACxB,gBAAgB,EAAE,KAAK;wBACvB,SAAS,EAAE,KAAK;wBAChB,MAAM,EAAE,KAAK;wBACb,QAAQ,EAAE,KAAK;qBAChB,CAAC;gBACJ,CAAC;gBAED,mBAAmB;oBACjB,OAAO,MAAM,CAAC;gBAChB,CAAC;aACF;YAED,uBAAuB,CAAC,QAAQ,CAAC,WAAW,EAAE,kBAAkB,CAAC,CAAC;YAClE,MAAM,QAAQ,GAAG,uBAAuB,CAAC,UAAU,CAAC,WAAW,CAAC,CAAC;YAEjE,MAAM,CAAC,QAAQ,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,oBAAoB,CAAC,CAAC;YAC7D,MAAM,CAAC,QAAQ,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QACtC,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,aAAa,EAAE,GAAG,EAAE;QAC3B,EAAE,CAAC,gCAAgC,EAAE,GAAG,EAAE;YACxC,MAAM,OAAO,GAAG,uBAAuB,CAAC,WAAW,EAAE,CAAC;YAEtD,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAC5C,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACzC,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACzC,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;YACvD,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;YACpD,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;QACtD,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,YAAY,EAAE,GAAG,EAAE;QAC1B,EAAE,CAAC,2CAA2C,EAAE,GAAG,EAAE;YACnD,MAAM,CAAC,uBAAuB,CAAC,UAAU,CAAC,WAAW,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACnE,MAAM,CAAC,uBAAuB,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAChE,MAAM,CAAC,uBAAuB,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAClE,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,8CAA8C,EAAE,GAAG,EAAE;YACtD,MAAM,CAAC,uBAAuB,CAAC,UAAU,CAAC,cAAc,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YACvE,MAAM,CAAC,uBAAuB,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACnE,CAAC,CAAC,CAAC;QAEH,EAAE,CAAC,yCAAyC,EAAE,GAAG,EAAE;YACjD,MAAM,CAAC,uBAAuB,CAAC,UAAU,CAAC,WAAW,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACnE,MAAM,CAAC,uBAAuB,CAAC,UAAU,CAAC,YAAY,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACtE,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,YAAY,EAAE,GAAG,EAAE;QAC1B,EAAE,CAAC,mCAAmC,EAAE,GAAG,EAAE;YAC3C,iCAAiC;YACjC,MAAM,QAAQ,GAAG,uBAAuB,CAAC,UAAU,CAAC,WAAW,CAAC,CAAC;YACjE,MAAM,QAAQ,GAAG,uBAAuB,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC;YAE9D,cAAc;YACd,uBAAuB,CAAC,UAAU,EAAE,CAAC;YAErC,+CAA+C;YAC/C,MAAM,QAAQ,GAAG,uBAAuB,CAAC,UAAU,CAAC,WAAW,CAAC,CAAC;YACjE,MAAM,QAAQ,GAAG,uBAAuB,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC;YAE9D,MAAM,CAAC,QAAQ,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;YACpC,MAAM,CAAC,QAAQ,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QACtC,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
@@ -0,0 +1,7 @@
1
+ /**
2
+ * Unit tests for response-parser.ts
3
+ *
4
+ * Tests JSON extraction and Zod schema validation from LLM responses.
5
+ */
6
+ export {};
7
+ //# sourceMappingURL=response-parser.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"response-parser.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/response-parser.test.ts"],"names":[],"mappings":"AAAA;;;;GAIG"}
@@ -0,0 +1,360 @@
1
+ /**
2
+ * Unit tests for response-parser.ts
3
+ *
4
+ * Tests JSON extraction and Zod schema validation from LLM responses.
5
+ */
6
+ import { describe, it, expect } from "vitest";
7
+ import { z } from "zod";
8
+ import { extractJson, ResponseParser, createResponseParser, zodSchemaToPromptDescription, formatZodError, ResponseParseError, } from "../response-parser.js";
9
+ describe("extractJson", () => {
10
+ describe("markdown code blocks", () => {
11
+ it("should extract JSON from ```json code block", () => {
12
+ const content = `Here's the result:
13
+ \`\`\`json
14
+ {"name": "test", "value": 42}
15
+ \`\`\`
16
+ That's all.`;
17
+ const result = extractJson(content);
18
+ expect(result).toBe('{"name": "test", "value": 42}');
19
+ });
20
+ it("should extract JSON from plain ``` code block", () => {
21
+ const content = `\`\`\`
22
+ {"items": [1, 2, 3]}
23
+ \`\`\``;
24
+ const result = extractJson(content);
25
+ expect(result).toBe('{"items": [1, 2, 3]}');
26
+ });
27
+ it("should handle multiline JSON in code block", () => {
28
+ const content = `\`\`\`json
29
+ {
30
+ "name": "test",
31
+ "nested": {
32
+ "value": 123
33
+ }
34
+ }
35
+ \`\`\``;
36
+ const result = extractJson(content);
37
+ expect(result).toBeTruthy();
38
+ expect(JSON.parse(result)).toEqual({
39
+ name: "test",
40
+ nested: { value: 123 },
41
+ });
42
+ });
43
+ });
44
+ describe("raw JSON extraction", () => {
45
+ it("should extract JSON object without code block", () => {
46
+ const content = 'The answer is {"result": true}';
47
+ const result = extractJson(content);
48
+ expect(result).toBe('{"result": true}');
49
+ });
50
+ it("should extract JSON array without code block", () => {
51
+ const content = "Here are the items: [1, 2, 3, 4, 5]";
52
+ const result = extractJson(content);
53
+ expect(result).toBe("[1, 2, 3, 4, 5]");
54
+ });
55
+ it("should extract JSON with nested braces", () => {
56
+ const content = 'Result: {"outer": {"inner": {"deep": 1}}}';
57
+ const result = extractJson(content);
58
+ expect(result).toBe('{"outer": {"inner": {"deep": 1}}}');
59
+ });
60
+ it("should handle braces inside string values", () => {
61
+ const content = 'Output: {"message": "Hello {name}!"}';
62
+ const result = extractJson(content);
63
+ expect(result).toBe('{"message": "Hello {name}!"}');
64
+ expect(JSON.parse(result)).toEqual({ message: "Hello {name}!" });
65
+ });
66
+ it("should handle brackets inside strings in arrays", () => {
67
+ const content = 'Items: ["[tag]", "normal", "[other]"]';
68
+ const result = extractJson(content);
69
+ expect(result).toBe('["[tag]", "normal", "[other]"]');
70
+ });
71
+ it("should extract first valid JSON when multiple are present", () => {
72
+ const content = '{"first": 1} and then {"second": 2}';
73
+ const result = extractJson(content);
74
+ expect(result).toBe('{"first": 1}');
75
+ });
76
+ });
77
+ describe("edge cases", () => {
78
+ it("should return null for content without JSON", () => {
79
+ const content = "This is just plain text without any JSON.";
80
+ const result = extractJson(content);
81
+ expect(result).toBeNull();
82
+ });
83
+ it("should return null for invalid JSON-like content", () => {
84
+ const content = "This {is not valid} JSON";
85
+ const result = extractJson(content);
86
+ // The progressive parser will try but fail to parse
87
+ expect(result).toBeNull();
88
+ });
89
+ it("should prefer code block over raw JSON", () => {
90
+ const content = `{"ignored": true}
91
+ \`\`\`json
92
+ {"preferred": true}
93
+ \`\`\``;
94
+ const result = extractJson(content);
95
+ expect(result).toBe('{"preferred": true}');
96
+ });
97
+ it("should handle empty code block", () => {
98
+ const content = "```json\n\n```";
99
+ const result = extractJson(content);
100
+ expect(result).toBe("");
101
+ });
102
+ });
103
+ });
104
+ describe("ResponseParser", () => {
105
+ describe("without schema", () => {
106
+ it("should return raw string when no schema provided", () => {
107
+ const parser = new ResponseParser();
108
+ const result = parser.parse("Hello world");
109
+ expect(result).toBe("Hello world");
110
+ });
111
+ it("should have hasSchema() return false", () => {
112
+ const parser = new ResponseParser();
113
+ expect(parser.hasSchema()).toBe(false);
114
+ });
115
+ it("should have getSchema() return null", () => {
116
+ const parser = new ResponseParser();
117
+ expect(parser.getSchema()).toBeNull();
118
+ });
119
+ });
120
+ describe("with schema", () => {
121
+ const testSchema = z.object({
122
+ name: z.string(),
123
+ age: z.number(),
124
+ });
125
+ it("should parse and validate JSON matching schema", () => {
126
+ const parser = new ResponseParser(testSchema);
127
+ const result = parser.parse('{"name": "John", "age": 30}');
128
+ expect(result).toEqual({ name: "John", age: 30 });
129
+ });
130
+ it("should extract JSON from code block and validate", () => {
131
+ const parser = new ResponseParser(testSchema);
132
+ const result = parser.parse(`Here's the data:
133
+ \`\`\`json
134
+ {"name": "Jane", "age": 25}
135
+ \`\`\`
136
+ That's it.`);
137
+ expect(result).toEqual({ name: "Jane", age: 25 });
138
+ });
139
+ it("should throw ResponseParseError for invalid JSON", () => {
140
+ const parser = new ResponseParser(testSchema);
141
+ expect(() => parser.parse("{invalid json}")).toThrow(ResponseParseError);
142
+ });
143
+ it("should throw ResponseParseError for schema validation failure", () => {
144
+ const parser = new ResponseParser(testSchema);
145
+ // Missing required field
146
+ expect(() => parser.parse('{"name": "John"}')).toThrow(ResponseParseError);
147
+ });
148
+ it("should throw ResponseParseError with validation details", () => {
149
+ const parser = new ResponseParser(testSchema);
150
+ try {
151
+ parser.parse('{"name": 123, "age": "not a number"}');
152
+ expect.fail("Should have thrown");
153
+ }
154
+ catch (err) {
155
+ expect(err).toBeInstanceOf(ResponseParseError);
156
+ const parseError = err;
157
+ expect(parseError.message).toContain("Schema validation failed");
158
+ expect(parseError.rawContent).toBe('{"name": 123, "age": "not a number"}');
159
+ }
160
+ });
161
+ it("should throw ResponseParseError when no JSON found", () => {
162
+ const parser = new ResponseParser(testSchema);
163
+ expect(() => parser.parse("No JSON here")).toThrow(ResponseParseError);
164
+ });
165
+ it("should have hasSchema() return true", () => {
166
+ const parser = new ResponseParser(testSchema);
167
+ expect(parser.hasSchema()).toBe(true);
168
+ });
169
+ it("should return schema from getSchema()", () => {
170
+ const parser = new ResponseParser(testSchema);
171
+ expect(parser.getSchema()).toBe(testSchema);
172
+ });
173
+ });
174
+ describe("tryParse", () => {
175
+ const schema = z.object({ value: z.number() });
176
+ it("should return parsed result on success", () => {
177
+ const parser = new ResponseParser(schema);
178
+ const result = parser.tryParse('{"value": 42}');
179
+ expect(result).toEqual({ value: 42 });
180
+ });
181
+ it("should return null on parse failure", () => {
182
+ const parser = new ResponseParser(schema);
183
+ const result = parser.tryParse("invalid");
184
+ expect(result).toBeNull();
185
+ });
186
+ it("should return null on schema validation failure", () => {
187
+ const parser = new ResponseParser(schema);
188
+ const result = parser.tryParse('{"value": "not a number"}');
189
+ expect(result).toBeNull();
190
+ });
191
+ });
192
+ describe("complex schemas", () => {
193
+ it("should handle nested objects", () => {
194
+ const schema = z.object({
195
+ user: z.object({
196
+ name: z.string(),
197
+ email: z.string().email(),
198
+ }),
199
+ metadata: z.object({
200
+ created: z.string(),
201
+ }),
202
+ });
203
+ const parser = new ResponseParser(schema);
204
+ const result = parser.parse(`{
205
+ "user": {"name": "Test", "email": "test@example.com"},
206
+ "metadata": {"created": "2024-01-01"}
207
+ }`);
208
+ expect(result.user.name).toBe("Test");
209
+ expect(result.user.email).toBe("test@example.com");
210
+ });
211
+ it("should handle arrays", () => {
212
+ const schema = z.object({
213
+ items: z.array(z.object({ id: z.number(), name: z.string() })),
214
+ });
215
+ const parser = new ResponseParser(schema);
216
+ const result = parser.parse(`{
217
+ "items": [
218
+ {"id": 1, "name": "first"},
219
+ {"id": 2, "name": "second"}
220
+ ]
221
+ }`);
222
+ expect(result.items).toHaveLength(2);
223
+ expect(result.items[0].id).toBe(1);
224
+ });
225
+ it("should handle optional fields", () => {
226
+ const schema = z.object({
227
+ required: z.string(),
228
+ optional: z.string().optional(),
229
+ });
230
+ const parser = new ResponseParser(schema);
231
+ const result = parser.parse('{"required": "value"}');
232
+ expect(result.required).toBe("value");
233
+ expect(result.optional).toBeUndefined();
234
+ });
235
+ it("should handle default values", () => {
236
+ const schema = z.object({
237
+ value: z.number().default(42),
238
+ });
239
+ const parser = new ResponseParser(schema);
240
+ const result = parser.parse("{}");
241
+ expect(result.value).toBe(42);
242
+ });
243
+ it("should handle unions", () => {
244
+ const schema = z.object({
245
+ data: z.union([z.string(), z.number()]),
246
+ });
247
+ const parser = new ResponseParser(schema);
248
+ expect(parser.parse('{"data": "text"}').data).toBe("text");
249
+ expect(parser.parse('{"data": 123}').data).toBe(123);
250
+ });
251
+ });
252
+ });
253
+ describe("createResponseParser", () => {
254
+ it("should create parser without schema", () => {
255
+ const parser = createResponseParser();
256
+ expect(parser.hasSchema()).toBe(false);
257
+ expect(parser.parse("test")).toBe("test");
258
+ });
259
+ it("should create parser with schema", () => {
260
+ const schema = z.object({ value: z.string() });
261
+ const parser = createResponseParser(schema);
262
+ expect(parser.hasSchema()).toBe(true);
263
+ expect(parser.parse('{"value": "test"}')).toEqual({ value: "test" });
264
+ });
265
+ });
266
+ describe("zodSchemaToPromptDescription", () => {
267
+ it("should describe object with fields", () => {
268
+ const schema = z.object({
269
+ name: z.string(),
270
+ age: z.number(),
271
+ });
272
+ const desc = zodSchemaToPromptDescription(schema);
273
+ expect(desc).toContain("JSON object");
274
+ expect(desc).toContain("name:");
275
+ expect(desc).toContain("age:");
276
+ expect(desc).toContain("string");
277
+ expect(desc).toContain("number");
278
+ });
279
+ it("should include field descriptions if available", () => {
280
+ const schema = z.object({
281
+ name: z.string().describe("The user's full name"),
282
+ email: z.string().describe("Contact email address"),
283
+ });
284
+ const desc = zodSchemaToPromptDescription(schema);
285
+ expect(desc).toContain("The user's full name");
286
+ expect(desc).toContain("Contact email address");
287
+ });
288
+ it("should handle schema with top-level description", () => {
289
+ const schema = z.object({ value: z.string() }).describe("A simple value object");
290
+ const desc = zodSchemaToPromptDescription(schema);
291
+ expect(desc).toBe("A simple value object");
292
+ });
293
+ it("should handle array types", () => {
294
+ const schema = z.array(z.string());
295
+ const desc = zodSchemaToPromptDescription(schema);
296
+ expect(desc).toContain("array");
297
+ });
298
+ it("should handle primitive types", () => {
299
+ const stringSchema = z.string();
300
+ const numberSchema = z.number();
301
+ expect(zodSchemaToPromptDescription(stringSchema)).toContain("string");
302
+ expect(zodSchemaToPromptDescription(numberSchema)).toContain("number");
303
+ });
304
+ });
305
+ describe("formatZodError", () => {
306
+ it("should format single issue", () => {
307
+ const schema = z.object({ value: z.number() });
308
+ const result = schema.safeParse({ value: "not a number" });
309
+ if (!result.success) {
310
+ const formatted = formatZodError(result.error);
311
+ expect(formatted).toContain("value");
312
+ expect(formatted).toContain("Expected number");
313
+ }
314
+ });
315
+ it("should format multiple issues", () => {
316
+ const schema = z.object({
317
+ name: z.string().min(1),
318
+ age: z.number().positive(),
319
+ });
320
+ const result = schema.safeParse({ name: "", age: -5 });
321
+ if (!result.success) {
322
+ const formatted = formatZodError(result.error);
323
+ expect(formatted).toContain("name");
324
+ expect(formatted).toContain("age");
325
+ }
326
+ });
327
+ it("should handle nested path issues", () => {
328
+ const schema = z.object({
329
+ user: z.object({
330
+ email: z.string().email(),
331
+ }),
332
+ });
333
+ const result = schema.safeParse({ user: { email: "invalid" } });
334
+ if (!result.success) {
335
+ const formatted = formatZodError(result.error);
336
+ expect(formatted).toContain("user.email");
337
+ }
338
+ });
339
+ });
340
+ describe("ResponseParseError", () => {
341
+ it("should store raw content", () => {
342
+ const error = new ResponseParseError("Test error", "raw content");
343
+ expect(error.rawContent).toBe("raw content");
344
+ expect(error.message).toBe("Test error");
345
+ });
346
+ it("should store Zod error if provided", () => {
347
+ const schema = z.object({ value: z.number() });
348
+ const result = schema.safeParse({ value: "bad" });
349
+ if (!result.success) {
350
+ const error = new ResponseParseError("Validation failed", "content", result.error);
351
+ expect(error.zodError).toBe(result.error);
352
+ }
353
+ });
354
+ it("should be instance of Error", () => {
355
+ const error = new ResponseParseError("Test", "content");
356
+ expect(error).toBeInstanceOf(Error);
357
+ expect(error.name).toBe("ResponseParseError");
358
+ });
359
+ });
360
+ //# sourceMappingURL=response-parser.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"response-parser.test.js","sourceRoot":"","sources":["../../src/__tests__/response-parser.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ /**
2
+ * Unit tests for route.ts
3
+ *
4
+ * Tests mesh.route() Express middleware and RouteRegistry.
5
+ */
6
+ export {};
7
+ //# sourceMappingURL=route.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"route.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/route.test.ts"],"names":[],"mappings":"AAAA;;;;GAIG"}