ts-procedures 5.10.0 → 5.10.2

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 (233) hide show
  1. package/agent_config/bin/postinstall.mjs +3 -3
  2. package/agent_config/bin/setup.mjs +22 -11
  3. package/agent_config/claude-code/agents/ts-procedures-architect.md +2 -2
  4. package/agent_config/claude-code/skills/{guide → ts-procedures}/SKILL.md +1 -1
  5. package/agent_config/claude-code/skills/{review → ts-procedures-review}/SKILL.md +3 -3
  6. package/agent_config/claude-code/skills/{scaffold → ts-procedures-scaffold}/SKILL.md +2 -2
  7. package/agent_config/lib/install-claude.mjs +35 -87
  8. package/build/src/client/call.d.ts +14 -0
  9. package/build/src/client/call.js +47 -0
  10. package/build/src/client/call.js.map +1 -0
  11. package/build/src/client/call.test.d.ts +1 -0
  12. package/build/src/client/call.test.js +124 -0
  13. package/build/src/client/call.test.js.map +1 -0
  14. package/build/src/client/errors.d.ts +25 -0
  15. package/build/src/client/errors.js +33 -0
  16. package/build/src/client/errors.js.map +1 -0
  17. package/build/src/client/errors.test.d.ts +1 -0
  18. package/build/src/client/errors.test.js +41 -0
  19. package/build/src/client/errors.test.js.map +1 -0
  20. package/build/src/client/fetch-adapter.d.ts +12 -0
  21. package/build/src/client/fetch-adapter.js +156 -0
  22. package/build/src/client/fetch-adapter.js.map +1 -0
  23. package/build/src/client/fetch-adapter.test.d.ts +1 -0
  24. package/build/src/client/fetch-adapter.test.js +271 -0
  25. package/build/src/client/fetch-adapter.test.js.map +1 -0
  26. package/build/src/client/hooks.d.ts +17 -0
  27. package/build/src/client/hooks.js +40 -0
  28. package/build/src/client/hooks.js.map +1 -0
  29. package/build/src/client/hooks.test.d.ts +1 -0
  30. package/build/src/client/hooks.test.js +163 -0
  31. package/build/src/client/hooks.test.js.map +1 -0
  32. package/build/src/client/index.d.ts +22 -0
  33. package/build/src/client/index.js +67 -0
  34. package/build/src/client/index.js.map +1 -0
  35. package/build/src/client/index.test.d.ts +1 -0
  36. package/build/src/client/index.test.js +231 -0
  37. package/build/src/client/index.test.js.map +1 -0
  38. package/build/src/client/request-builder.d.ts +13 -0
  39. package/build/src/client/request-builder.js +53 -0
  40. package/build/src/client/request-builder.js.map +1 -0
  41. package/build/src/client/request-builder.test.d.ts +1 -0
  42. package/build/src/client/request-builder.test.js +160 -0
  43. package/build/src/client/request-builder.test.js.map +1 -0
  44. package/build/src/client/stream.d.ts +27 -0
  45. package/build/src/client/stream.js +118 -0
  46. package/build/src/client/stream.js.map +1 -0
  47. package/build/src/client/stream.test.d.ts +1 -0
  48. package/build/src/client/stream.test.js +228 -0
  49. package/build/src/client/stream.test.js.map +1 -0
  50. package/build/src/client/types.d.ts +78 -0
  51. package/build/src/client/types.js +3 -0
  52. package/build/src/client/types.js.map +1 -0
  53. package/build/src/codegen/bin/cli.d.ts +45 -0
  54. package/build/src/codegen/bin/cli.js +246 -0
  55. package/build/src/codegen/bin/cli.js.map +1 -0
  56. package/build/src/codegen/bin/cli.test.d.ts +1 -0
  57. package/build/src/codegen/bin/cli.test.js +220 -0
  58. package/build/src/codegen/bin/cli.test.js.map +1 -0
  59. package/build/src/codegen/constants.d.ts +1 -0
  60. package/build/src/codegen/constants.js +2 -0
  61. package/build/src/codegen/constants.js.map +1 -0
  62. package/build/src/codegen/e2e.test.d.ts +1 -0
  63. package/build/src/codegen/e2e.test.js +464 -0
  64. package/build/src/codegen/e2e.test.js.map +1 -0
  65. package/build/src/codegen/emit-client-runtime.d.ts +9 -0
  66. package/build/src/codegen/emit-client-runtime.js +99 -0
  67. package/build/src/codegen/emit-client-runtime.js.map +1 -0
  68. package/build/src/codegen/emit-client-runtime.test.d.ts +1 -0
  69. package/build/src/codegen/emit-client-runtime.test.js +78 -0
  70. package/build/src/codegen/emit-client-runtime.test.js.map +1 -0
  71. package/build/src/codegen/emit-client-types.d.ts +8 -0
  72. package/build/src/codegen/emit-client-types.js +25 -0
  73. package/build/src/codegen/emit-client-types.js.map +1 -0
  74. package/build/src/codegen/emit-client-types.test.d.ts +1 -0
  75. package/build/src/codegen/emit-client-types.test.js +33 -0
  76. package/build/src/codegen/emit-client-types.test.js.map +1 -0
  77. package/build/src/codegen/emit-errors.d.ts +19 -0
  78. package/build/src/codegen/emit-errors.js +59 -0
  79. package/build/src/codegen/emit-errors.js.map +1 -0
  80. package/build/src/codegen/emit-errors.test.d.ts +1 -0
  81. package/build/src/codegen/emit-errors.test.js +175 -0
  82. package/build/src/codegen/emit-errors.test.js.map +1 -0
  83. package/build/src/codegen/emit-index.d.ts +12 -0
  84. package/build/src/codegen/emit-index.js +41 -0
  85. package/build/src/codegen/emit-index.js.map +1 -0
  86. package/build/src/codegen/emit-index.test.d.ts +1 -0
  87. package/build/src/codegen/emit-index.test.js +106 -0
  88. package/build/src/codegen/emit-index.test.js.map +1 -0
  89. package/build/src/codegen/emit-scope.d.ts +15 -0
  90. package/build/src/codegen/emit-scope.js +299 -0
  91. package/build/src/codegen/emit-scope.js.map +1 -0
  92. package/build/src/codegen/emit-scope.test.d.ts +1 -0
  93. package/build/src/codegen/emit-scope.test.js +559 -0
  94. package/build/src/codegen/emit-scope.test.js.map +1 -0
  95. package/build/src/codegen/emit-types.d.ts +43 -0
  96. package/build/src/codegen/emit-types.js +111 -0
  97. package/build/src/codegen/emit-types.js.map +1 -0
  98. package/build/src/codegen/emit-types.test.d.ts +1 -0
  99. package/build/src/codegen/emit-types.test.js +184 -0
  100. package/build/src/codegen/emit-types.test.js.map +1 -0
  101. package/build/src/codegen/group-routes.d.ts +23 -0
  102. package/build/src/codegen/group-routes.js +46 -0
  103. package/build/src/codegen/group-routes.js.map +1 -0
  104. package/build/src/codegen/group-routes.test.d.ts +1 -0
  105. package/build/src/codegen/group-routes.test.js +131 -0
  106. package/build/src/codegen/group-routes.test.js.map +1 -0
  107. package/build/src/codegen/index.d.ts +15 -0
  108. package/build/src/codegen/index.js +16 -0
  109. package/build/src/codegen/index.js.map +1 -0
  110. package/build/src/codegen/naming.d.ts +7 -0
  111. package/build/src/codegen/naming.js +21 -0
  112. package/build/src/codegen/naming.js.map +1 -0
  113. package/build/src/codegen/naming.test.d.ts +1 -0
  114. package/build/src/codegen/naming.test.js +40 -0
  115. package/build/src/codegen/naming.test.js.map +1 -0
  116. package/build/src/codegen/pipeline.d.ts +17 -0
  117. package/build/src/codegen/pipeline.js +78 -0
  118. package/build/src/codegen/pipeline.js.map +1 -0
  119. package/build/src/codegen/pipeline.test.d.ts +1 -0
  120. package/build/src/codegen/pipeline.test.js +269 -0
  121. package/build/src/codegen/pipeline.test.js.map +1 -0
  122. package/build/src/codegen/resolve-envelope.d.ts +7 -0
  123. package/build/src/codegen/resolve-envelope.js +46 -0
  124. package/build/src/codegen/resolve-envelope.js.map +1 -0
  125. package/build/src/codegen/resolve-envelope.test.d.ts +1 -0
  126. package/build/src/codegen/resolve-envelope.test.js +69 -0
  127. package/build/src/codegen/resolve-envelope.test.js.map +1 -0
  128. package/build/src/errors.d.ts +33 -0
  129. package/build/src/errors.js +91 -0
  130. package/build/src/errors.js.map +1 -0
  131. package/build/src/errors.test.d.ts +1 -0
  132. package/build/src/errors.test.js +122 -0
  133. package/build/src/errors.test.js.map +1 -0
  134. package/build/src/exports.d.ts +7 -0
  135. package/build/src/exports.js +8 -0
  136. package/build/src/exports.js.map +1 -0
  137. package/build/src/implementations/http/doc-registry.d.ts +12 -0
  138. package/build/src/implementations/http/doc-registry.js +114 -0
  139. package/build/src/implementations/http/doc-registry.js.map +1 -0
  140. package/build/src/implementations/http/doc-registry.test.d.ts +1 -0
  141. package/build/src/implementations/http/doc-registry.test.js +347 -0
  142. package/build/src/implementations/http/doc-registry.test.js.map +1 -0
  143. package/build/src/implementations/http/express-rpc/index.d.ts +94 -0
  144. package/build/src/implementations/http/express-rpc/index.js +185 -0
  145. package/build/src/implementations/http/express-rpc/index.js.map +1 -0
  146. package/build/src/implementations/http/express-rpc/index.test.d.ts +1 -0
  147. package/build/src/implementations/http/express-rpc/index.test.js +684 -0
  148. package/build/src/implementations/http/express-rpc/index.test.js.map +1 -0
  149. package/build/src/implementations/http/express-rpc/types.d.ts +11 -0
  150. package/build/src/implementations/http/express-rpc/types.js +2 -0
  151. package/build/src/implementations/http/express-rpc/types.js.map +1 -0
  152. package/build/src/implementations/http/hono-api/index.d.ts +102 -0
  153. package/build/src/implementations/http/hono-api/index.js +341 -0
  154. package/build/src/implementations/http/hono-api/index.js.map +1 -0
  155. package/build/src/implementations/http/hono-api/index.test.d.ts +1 -0
  156. package/build/src/implementations/http/hono-api/index.test.js +992 -0
  157. package/build/src/implementations/http/hono-api/index.test.js.map +1 -0
  158. package/build/src/implementations/http/hono-api/types.d.ts +13 -0
  159. package/build/src/implementations/http/hono-api/types.js +2 -0
  160. package/build/src/implementations/http/hono-api/types.js.map +1 -0
  161. package/build/src/implementations/http/hono-rpc/index.d.ts +92 -0
  162. package/build/src/implementations/http/hono-rpc/index.js +161 -0
  163. package/build/src/implementations/http/hono-rpc/index.js.map +1 -0
  164. package/build/src/implementations/http/hono-rpc/index.test.d.ts +1 -0
  165. package/build/src/implementations/http/hono-rpc/index.test.js +803 -0
  166. package/build/src/implementations/http/hono-rpc/index.test.js.map +1 -0
  167. package/build/src/implementations/http/hono-rpc/types.d.ts +11 -0
  168. package/build/src/implementations/http/hono-rpc/types.js +2 -0
  169. package/build/src/implementations/http/hono-rpc/types.js.map +1 -0
  170. package/build/src/implementations/http/hono-stream/index.d.ts +120 -0
  171. package/build/src/implementations/http/hono-stream/index.js +309 -0
  172. package/build/src/implementations/http/hono-stream/index.js.map +1 -0
  173. package/build/src/implementations/http/hono-stream/index.test.d.ts +1 -0
  174. package/build/src/implementations/http/hono-stream/index.test.js +1356 -0
  175. package/build/src/implementations/http/hono-stream/index.test.js.map +1 -0
  176. package/build/src/implementations/http/hono-stream/types.d.ts +15 -0
  177. package/build/src/implementations/http/hono-stream/types.js +2 -0
  178. package/build/src/implementations/http/hono-stream/types.js.map +1 -0
  179. package/build/src/implementations/types.d.ts +142 -0
  180. package/build/src/implementations/types.js +2 -0
  181. package/build/src/implementations/types.js.map +1 -0
  182. package/build/src/index.d.ts +165 -0
  183. package/build/src/index.js +253 -0
  184. package/build/src/index.js.map +1 -0
  185. package/build/src/index.test.d.ts +1 -0
  186. package/build/src/index.test.js +890 -0
  187. package/build/src/index.test.js.map +1 -0
  188. package/build/src/schema/compute-schema.d.ts +35 -0
  189. package/build/src/schema/compute-schema.js +41 -0
  190. package/build/src/schema/compute-schema.js.map +1 -0
  191. package/build/src/schema/compute-schema.test.d.ts +1 -0
  192. package/build/src/schema/compute-schema.test.js +107 -0
  193. package/build/src/schema/compute-schema.test.js.map +1 -0
  194. package/build/src/schema/extract-json-schema.d.ts +2 -0
  195. package/build/src/schema/extract-json-schema.js +12 -0
  196. package/build/src/schema/extract-json-schema.js.map +1 -0
  197. package/build/src/schema/extract-json-schema.test.d.ts +1 -0
  198. package/build/src/schema/extract-json-schema.test.js +23 -0
  199. package/build/src/schema/extract-json-schema.test.js.map +1 -0
  200. package/build/src/schema/parser.d.ts +28 -0
  201. package/build/src/schema/parser.js +170 -0
  202. package/build/src/schema/parser.js.map +1 -0
  203. package/build/src/schema/parser.test.d.ts +1 -0
  204. package/build/src/schema/parser.test.js +120 -0
  205. package/build/src/schema/parser.test.js.map +1 -0
  206. package/build/src/schema/resolve-schema-lib.d.ts +12 -0
  207. package/build/src/schema/resolve-schema-lib.js +11 -0
  208. package/build/src/schema/resolve-schema-lib.js.map +1 -0
  209. package/build/src/schema/resolve-schema-lib.test.d.ts +1 -0
  210. package/build/src/schema/resolve-schema-lib.test.js +17 -0
  211. package/build/src/schema/resolve-schema-lib.test.js.map +1 -0
  212. package/build/src/schema/types.d.ts +8 -0
  213. package/build/src/schema/types.js +2 -0
  214. package/build/src/schema/types.js.map +1 -0
  215. package/build/src/stack-utils.d.ts +25 -0
  216. package/build/src/stack-utils.js +95 -0
  217. package/build/src/stack-utils.js.map +1 -0
  218. package/build/src/stack-utils.test.d.ts +1 -0
  219. package/build/src/stack-utils.test.js +80 -0
  220. package/build/src/stack-utils.test.js.map +1 -0
  221. package/docs/ai-agent-setup.md +7 -6
  222. package/package.json +1 -1
  223. /package/agent_config/claude-code/skills/{guide → ts-procedures}/anti-patterns.md +0 -0
  224. /package/agent_config/claude-code/skills/{guide → ts-procedures}/api-reference.md +0 -0
  225. /package/agent_config/claude-code/skills/{guide → ts-procedures}/patterns.md +0 -0
  226. /package/agent_config/claude-code/skills/{review → ts-procedures-review}/checklist.md +0 -0
  227. /package/agent_config/claude-code/skills/{scaffold → ts-procedures-scaffold}/templates/client.md +0 -0
  228. /package/agent_config/claude-code/skills/{scaffold → ts-procedures-scaffold}/templates/express-rpc.md +0 -0
  229. /package/agent_config/claude-code/skills/{scaffold → ts-procedures-scaffold}/templates/hono-api.md +0 -0
  230. /package/agent_config/claude-code/skills/{scaffold → ts-procedures-scaffold}/templates/hono-rpc.md +0 -0
  231. /package/agent_config/claude-code/skills/{scaffold → ts-procedures-scaffold}/templates/hono-stream.md +0 -0
  232. /package/agent_config/claude-code/skills/{scaffold → ts-procedures-scaffold}/templates/procedure.md +0 -0
  233. /package/agent_config/claude-code/skills/{scaffold → ts-procedures-scaffold}/templates/stream-procedure.md +0 -0
@@ -0,0 +1,156 @@
1
+ /**
2
+ * Parses an SSE message block (the text between double-newlines).
3
+ * Returns null if there is no data field (e.g., comment-only blocks).
4
+ */
5
+ function parseSSEBlock(block) {
6
+ const lines = block.split('\n');
7
+ let event;
8
+ let id;
9
+ const dataParts = [];
10
+ for (const line of lines) {
11
+ if (line.startsWith('event:')) {
12
+ event = line.slice('event:'.length).trim();
13
+ }
14
+ else if (line.startsWith('data:')) {
15
+ dataParts.push(line.slice('data:'.length).trimStart());
16
+ }
17
+ else if (line.startsWith('id:')) {
18
+ id = line.slice('id:'.length).trim();
19
+ }
20
+ // Lines starting with ':' are comments — skip them
21
+ }
22
+ if (dataParts.length === 0) {
23
+ return null;
24
+ }
25
+ const dataStr = dataParts.join('\n');
26
+ let data;
27
+ try {
28
+ data = JSON.parse(dataStr);
29
+ }
30
+ catch {
31
+ data = dataStr;
32
+ }
33
+ return { data, event, id };
34
+ }
35
+ /**
36
+ * Async generator that reads a ReadableStream<Uint8Array>, buffers text,
37
+ * splits on double-newline SSE boundaries, and yields parsed SSE events.
38
+ */
39
+ async function* parseSseStream(readableStream) {
40
+ const reader = readableStream.getReader();
41
+ const decoder = new TextDecoder();
42
+ let buffer = '';
43
+ try {
44
+ while (true) {
45
+ const { done, value } = await reader.read();
46
+ if (value) {
47
+ buffer += decoder.decode(value, { stream: !done });
48
+ }
49
+ // Process all complete SSE message blocks (split on \n\n)
50
+ let boundary;
51
+ while ((boundary = buffer.indexOf('\n\n')) !== -1) {
52
+ const block = buffer.slice(0, boundary).trim();
53
+ buffer = buffer.slice(boundary + 2);
54
+ if (block.length > 0) {
55
+ const event = parseSSEBlock(block);
56
+ if (event !== null) {
57
+ yield event;
58
+ }
59
+ }
60
+ }
61
+ if (done)
62
+ break;
63
+ }
64
+ // Handle any remaining buffer content (no trailing \n\n)
65
+ const remaining = buffer.trim();
66
+ if (remaining.length > 0) {
67
+ const event = parseSSEBlock(remaining);
68
+ if (event !== null) {
69
+ yield event;
70
+ }
71
+ }
72
+ }
73
+ finally {
74
+ reader.releaseLock();
75
+ }
76
+ }
77
+ // ── Adapter ───────────────────────────────────────────────
78
+ /**
79
+ * Extracts response headers as a plain Record<string, string>.
80
+ */
81
+ function extractHeaders(response) {
82
+ const headers = {};
83
+ response.headers.forEach((value, key) => {
84
+ headers[key] = value;
85
+ });
86
+ return headers;
87
+ }
88
+ /**
89
+ * Attempts to parse the response body as JSON, then as text, then returns null.
90
+ */
91
+ async function parseResponseBody(response) {
92
+ // Clone so we can attempt multiple reads
93
+ const clone = response.clone();
94
+ try {
95
+ return await clone.json();
96
+ }
97
+ catch {
98
+ try {
99
+ const text = await response.text();
100
+ return text || null;
101
+ }
102
+ catch {
103
+ return null;
104
+ }
105
+ }
106
+ }
107
+ /**
108
+ * Creates a fetch-based ClientAdapter.
109
+ *
110
+ * - `config.headers` are default headers applied to every request.
111
+ * - Per-request headers override config headers (spread order).
112
+ * - Works in Node.js 18+ and browsers (uses standard fetch + ReadableStream).
113
+ */
114
+ export function createFetchAdapter(config) {
115
+ const configHeaders = config?.headers ?? {};
116
+ return {
117
+ async request(req) {
118
+ const mergedHeaders = {
119
+ ...configHeaders,
120
+ ...(req.headers ?? {}),
121
+ };
122
+ const response = await fetch(req.url, {
123
+ method: req.method,
124
+ headers: mergedHeaders,
125
+ body: req.body !== undefined ? JSON.stringify(req.body) : undefined,
126
+ signal: req.signal,
127
+ });
128
+ const headers = extractHeaders(response);
129
+ const body = await parseResponseBody(response);
130
+ return { status: response.status, headers, body };
131
+ },
132
+ async stream(req) {
133
+ const mergedHeaders = {
134
+ ...configHeaders,
135
+ ...(req.headers ?? {}),
136
+ };
137
+ const response = await fetch(req.url, {
138
+ method: req.method,
139
+ headers: mergedHeaders,
140
+ body: req.body !== undefined ? JSON.stringify(req.body) : undefined,
141
+ signal: req.signal,
142
+ });
143
+ const headers = extractHeaders(response);
144
+ if (!response.body) {
145
+ // No body — return an empty async iterable
146
+ const emptyBody = {
147
+ [Symbol.asyncIterator]: async function* () { },
148
+ };
149
+ return { status: response.status, headers, body: emptyBody };
150
+ }
151
+ const body = parseSseStream(response.body);
152
+ return { status: response.status, headers, body };
153
+ },
154
+ };
155
+ }
156
+ //# sourceMappingURL=fetch-adapter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fetch-adapter.js","sourceRoot":"","sources":["../../../src/client/fetch-adapter.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1 @@
1
+ export {};
@@ -0,0 +1,271 @@
1
+ import { describe, it, expect, vi, beforeEach, afterEach } from 'vitest';
2
+ import { createFetchAdapter } from './fetch-adapter.js';
3
+ // ── helpers ───────────────────────────────────────────────
4
+ function mockSSEResponse(sseText) {
5
+ const encoder = new TextEncoder();
6
+ const stream = new ReadableStream({
7
+ start(controller) {
8
+ controller.enqueue(encoder.encode(sseText));
9
+ controller.close();
10
+ },
11
+ });
12
+ return new Response(stream, {
13
+ status: 200,
14
+ headers: { 'content-type': 'text/event-stream' },
15
+ });
16
+ }
17
+ function mockSSEResponseChunked(chunks) {
18
+ const encoder = new TextEncoder();
19
+ const stream = new ReadableStream({
20
+ start(controller) {
21
+ for (const chunk of chunks) {
22
+ controller.enqueue(encoder.encode(chunk));
23
+ }
24
+ controller.close();
25
+ },
26
+ });
27
+ return new Response(stream, {
28
+ status: 200,
29
+ headers: { 'content-type': 'text/event-stream' },
30
+ });
31
+ }
32
+ async function collectStream(stream) {
33
+ const items = [];
34
+ for await (const item of stream) {
35
+ items.push(item);
36
+ }
37
+ return items;
38
+ }
39
+ // ── request() tests ───────────────────────────────────────
40
+ describe('createFetchAdapter — request()', () => {
41
+ beforeEach(() => {
42
+ vi.stubGlobal('fetch', vi.fn());
43
+ });
44
+ afterEach(() => {
45
+ vi.unstubAllGlobals();
46
+ });
47
+ it('makes fetch call with correct URL, method, body', async () => {
48
+ const mockFetch = vi.mocked(globalThis.fetch);
49
+ mockFetch.mockResolvedValueOnce(new Response(JSON.stringify({ id: 1 }), { status: 200 }));
50
+ const adapter = createFetchAdapter();
51
+ await adapter.request({
52
+ url: 'https://api.example.com/users',
53
+ method: 'POST',
54
+ body: { name: 'Alice' },
55
+ });
56
+ expect(mockFetch).toHaveBeenCalledOnce();
57
+ const [url, init] = mockFetch.mock.calls[0];
58
+ expect(url).toBe('https://api.example.com/users');
59
+ expect(init.method).toBe('POST');
60
+ expect(init.body).toBe(JSON.stringify({ name: 'Alice' }));
61
+ });
62
+ it('merges config headers with request headers (request wins)', async () => {
63
+ const mockFetch = vi.mocked(globalThis.fetch);
64
+ mockFetch.mockResolvedValueOnce(new Response(JSON.stringify({}), { status: 200 }));
65
+ const adapter = createFetchAdapter({
66
+ headers: {
67
+ 'x-api-key': 'default-key',
68
+ 'x-source': 'config',
69
+ },
70
+ });
71
+ await adapter.request({
72
+ url: 'https://api.example.com/data',
73
+ method: 'GET',
74
+ headers: {
75
+ 'x-api-key': 'override-key', // should win
76
+ 'x-request-id': 'abc123',
77
+ },
78
+ });
79
+ const [, init] = mockFetch.mock.calls[0];
80
+ const headers = init.headers;
81
+ expect(headers['x-api-key']).toBe('override-key');
82
+ expect(headers['x-source']).toBe('config');
83
+ expect(headers['x-request-id']).toBe('abc123');
84
+ });
85
+ it('parses JSON response body', async () => {
86
+ const mockFetch = vi.mocked(globalThis.fetch);
87
+ mockFetch.mockResolvedValueOnce(new Response(JSON.stringify({ result: 'ok' }), { status: 200 }));
88
+ const adapter = createFetchAdapter();
89
+ const response = await adapter.request({
90
+ url: 'https://api.example.com/ping',
91
+ method: 'GET',
92
+ });
93
+ expect(response.status).toBe(200);
94
+ expect(response.body).toEqual({ result: 'ok' });
95
+ });
96
+ it('handles empty/non-JSON response body gracefully (e.g. 204 No Content)', async () => {
97
+ const mockFetch = vi.mocked(globalThis.fetch);
98
+ mockFetch.mockResolvedValueOnce(new Response(null, { status: 204 }));
99
+ const adapter = createFetchAdapter();
100
+ const response = await adapter.request({
101
+ url: 'https://api.example.com/delete',
102
+ method: 'DELETE',
103
+ });
104
+ expect(response.status).toBe(204);
105
+ // body should be null (or empty string) — not throw
106
+ expect(response.body === null || response.body === '').toBe(true);
107
+ });
108
+ it('passes signal to fetch', async () => {
109
+ const mockFetch = vi.mocked(globalThis.fetch);
110
+ mockFetch.mockResolvedValueOnce(new Response(JSON.stringify({}), { status: 200 }));
111
+ const controller = new AbortController();
112
+ const adapter = createFetchAdapter();
113
+ await adapter.request({
114
+ url: 'https://api.example.com/slow',
115
+ method: 'GET',
116
+ signal: controller.signal,
117
+ });
118
+ const [, init] = mockFetch.mock.calls[0];
119
+ expect(init.signal).toBe(controller.signal);
120
+ });
121
+ it('returns response headers as Record<string, string>', async () => {
122
+ const mockFetch = vi.mocked(globalThis.fetch);
123
+ mockFetch.mockResolvedValueOnce(new Response(JSON.stringify({}), {
124
+ status: 200,
125
+ headers: { 'content-type': 'application/json', 'x-request-id': 'xyz' },
126
+ }));
127
+ const adapter = createFetchAdapter();
128
+ const response = await adapter.request({
129
+ url: 'https://api.example.com/data',
130
+ method: 'GET',
131
+ });
132
+ expect(response.headers['content-type']).toBe('application/json');
133
+ expect(response.headers['x-request-id']).toBe('xyz');
134
+ });
135
+ it('sends no body when body is undefined', async () => {
136
+ const mockFetch = vi.mocked(globalThis.fetch);
137
+ mockFetch.mockResolvedValueOnce(new Response(JSON.stringify({}), { status: 200 }));
138
+ const adapter = createFetchAdapter();
139
+ await adapter.request({
140
+ url: 'https://api.example.com/items',
141
+ method: 'GET',
142
+ });
143
+ const [, init] = mockFetch.mock.calls[0];
144
+ expect(init.body).toBeUndefined();
145
+ });
146
+ });
147
+ // ── stream() tests ────────────────────────────────────────
148
+ describe('createFetchAdapter — stream()', () => {
149
+ beforeEach(() => {
150
+ vi.stubGlobal('fetch', vi.fn());
151
+ });
152
+ afterEach(() => {
153
+ vi.unstubAllGlobals();
154
+ });
155
+ it('parses SSE events from stream', async () => {
156
+ const mockFetch = vi.mocked(globalThis.fetch);
157
+ const sseText = 'event: message\ndata: {"count":1}\nid: 0\n\nevent: message\ndata: {"count":2}\nid: 1\n\n';
158
+ mockFetch.mockResolvedValueOnce(mockSSEResponse(sseText));
159
+ const adapter = createFetchAdapter();
160
+ const response = await adapter.stream({
161
+ url: 'https://api.example.com/stream',
162
+ method: 'GET',
163
+ });
164
+ expect(response.status).toBe(200);
165
+ const items = await collectStream(response.body);
166
+ expect(items).toEqual([
167
+ { data: { count: 1 }, event: 'message', id: '0' },
168
+ { data: { count: 2 }, event: 'message', id: '1' },
169
+ ]);
170
+ });
171
+ it('handles multi-line data fields (multiple data: lines joined with newline)', async () => {
172
+ const mockFetch = vi.mocked(globalThis.fetch);
173
+ // Multi-line data: per SSE spec, multiple data: lines are joined with \n
174
+ const sseText = 'event: multi\ndata: {"line":\ndata: "hello"}\n\n';
175
+ mockFetch.mockResolvedValueOnce(mockSSEResponse(sseText));
176
+ const adapter = createFetchAdapter();
177
+ const response = await adapter.stream({
178
+ url: 'https://api.example.com/stream',
179
+ method: 'GET',
180
+ });
181
+ const items = await collectStream(response.body);
182
+ expect(items).toHaveLength(1);
183
+ const item = items[0];
184
+ expect(item.event).toBe('multi');
185
+ // data is parsed from joined lines: '{"line":\n"hello"}'
186
+ expect(item.data).toEqual({ line: 'hello' });
187
+ });
188
+ it('handles chunked SSE data (message split across multiple chunks)', async () => {
189
+ const mockFetch = vi.mocked(globalThis.fetch);
190
+ // Split the SSE message across 3 chunks
191
+ const chunks = [
192
+ 'event: tick\nda',
193
+ 'ta: {"n":42}\n',
194
+ '\n',
195
+ ];
196
+ mockFetch.mockResolvedValueOnce(mockSSEResponseChunked(chunks));
197
+ const adapter = createFetchAdapter();
198
+ const response = await adapter.stream({
199
+ url: 'https://api.example.com/stream',
200
+ method: 'GET',
201
+ });
202
+ const items = await collectStream(response.body);
203
+ expect(items).toEqual([{ data: { n: 42 }, event: 'tick', id: undefined }]);
204
+ });
205
+ it('yields parsed objects with event and id', async () => {
206
+ const mockFetch = vi.mocked(globalThis.fetch);
207
+ const sseText = 'event: update\ndata: {"value":7}\nid: evt-99\n\n';
208
+ mockFetch.mockResolvedValueOnce(mockSSEResponse(sseText));
209
+ const adapter = createFetchAdapter();
210
+ const response = await adapter.stream({
211
+ url: 'https://api.example.com/stream',
212
+ method: 'GET',
213
+ });
214
+ const items = await collectStream(response.body);
215
+ expect(items).toEqual([{ data: { value: 7 }, event: 'update', id: 'evt-99' }]);
216
+ });
217
+ it('handles event: return correctly (just another SSE event)', async () => {
218
+ const mockFetch = vi.mocked(globalThis.fetch);
219
+ const sseText = 'event: message\ndata: {"n":1}\n\nevent: return\ndata: {"total":10}\n\n';
220
+ mockFetch.mockResolvedValueOnce(mockSSEResponse(sseText));
221
+ const adapter = createFetchAdapter();
222
+ const response = await adapter.stream({
223
+ url: 'https://api.example.com/stream',
224
+ method: 'GET',
225
+ });
226
+ // The adapter yields all SSE events as-is — createTypedStream handles 'return' semantics
227
+ const items = await collectStream(response.body);
228
+ expect(items).toEqual([
229
+ { data: { n: 1 }, event: 'message', id: undefined },
230
+ { data: { total: 10 }, event: 'return', id: undefined },
231
+ ]);
232
+ });
233
+ it('returns response headers from stream response', async () => {
234
+ const mockFetch = vi.mocked(globalThis.fetch);
235
+ mockFetch.mockResolvedValueOnce(mockSSEResponse('event: ping\ndata: {}\n\n'));
236
+ const adapter = createFetchAdapter();
237
+ const response = await adapter.stream({
238
+ url: 'https://api.example.com/stream',
239
+ method: 'GET',
240
+ });
241
+ expect(response.headers['content-type']).toContain('text/event-stream');
242
+ });
243
+ it('passes signal to fetch for streams', async () => {
244
+ const mockFetch = vi.mocked(globalThis.fetch);
245
+ mockFetch.mockResolvedValueOnce(mockSSEResponse('event: ping\ndata: {}\n\n'));
246
+ const controller = new AbortController();
247
+ const adapter = createFetchAdapter();
248
+ await adapter.stream({
249
+ url: 'https://api.example.com/stream',
250
+ method: 'GET',
251
+ signal: controller.signal,
252
+ });
253
+ const [, init] = mockFetch.mock.calls[0];
254
+ expect(init.signal).toBe(controller.signal);
255
+ });
256
+ it('handles SSE events without data field gracefully (skips them)', async () => {
257
+ const mockFetch = vi.mocked(globalThis.fetch);
258
+ // Comment-only message (no data field) — should be skipped
259
+ const sseText = ': keep-alive\n\nevent: message\ndata: {"ok":true}\n\n';
260
+ mockFetch.mockResolvedValueOnce(mockSSEResponse(sseText));
261
+ const adapter = createFetchAdapter();
262
+ const response = await adapter.stream({
263
+ url: 'https://api.example.com/stream',
264
+ method: 'GET',
265
+ });
266
+ const items = await collectStream(response.body);
267
+ // Only the message with data is yielded; comment-only block is skipped
268
+ expect(items).toEqual([{ data: { ok: true }, event: 'message', id: undefined }]);
269
+ });
270
+ });
271
+ //# sourceMappingURL=fetch-adapter.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"fetch-adapter.test.js","sourceRoot":"","sources":["../../../src/client/fetch-adapter.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,17 @@
1
+ import type { BeforeRequestContext, AfterResponseContext, ErrorContext, ClientHooks } from './types.js';
2
+ /**
3
+ * Runs `onBeforeRequest` hooks: global first, then per-procedure.
4
+ * Each hook receives the (possibly mutated) context from the previous hook.
5
+ * Returns the final context.
6
+ */
7
+ export declare function runBeforeRequest(ctx: BeforeRequestContext, globalHooks: ClientHooks, localHooks: ClientHooks | undefined): Promise<BeforeRequestContext>;
8
+ /**
9
+ * Runs `onAfterResponse` hooks: global first, then per-procedure.
10
+ * Returns void.
11
+ */
12
+ export declare function runAfterResponse(ctx: AfterResponseContext, globalHooks: ClientHooks, localHooks: ClientHooks | undefined): Promise<void>;
13
+ /**
14
+ * Runs `onError` hooks: global first, then per-procedure.
15
+ * Returns void.
16
+ */
17
+ export declare function runOnError(ctx: ErrorContext, globalHooks: ClientHooks, localHooks: ClientHooks | undefined): Promise<void>;
@@ -0,0 +1,40 @@
1
+ /**
2
+ * Runs `onBeforeRequest` hooks: global first, then per-procedure.
3
+ * Each hook receives the (possibly mutated) context from the previous hook.
4
+ * Returns the final context.
5
+ */
6
+ export async function runBeforeRequest(ctx, globalHooks, localHooks) {
7
+ let current = ctx;
8
+ if (globalHooks.onBeforeRequest) {
9
+ current = await globalHooks.onBeforeRequest(current);
10
+ }
11
+ if (localHooks?.onBeforeRequest) {
12
+ current = await localHooks.onBeforeRequest(current);
13
+ }
14
+ return current;
15
+ }
16
+ /**
17
+ * Runs `onAfterResponse` hooks: global first, then per-procedure.
18
+ * Returns void.
19
+ */
20
+ export async function runAfterResponse(ctx, globalHooks, localHooks) {
21
+ if (globalHooks.onAfterResponse) {
22
+ await globalHooks.onAfterResponse(ctx);
23
+ }
24
+ if (localHooks?.onAfterResponse) {
25
+ await localHooks.onAfterResponse(ctx);
26
+ }
27
+ }
28
+ /**
29
+ * Runs `onError` hooks: global first, then per-procedure.
30
+ * Returns void.
31
+ */
32
+ export async function runOnError(ctx, globalHooks, localHooks) {
33
+ if (globalHooks.onError) {
34
+ await globalHooks.onError(ctx);
35
+ }
36
+ if (localHooks?.onError) {
37
+ await localHooks.onError(ctx);
38
+ }
39
+ }
40
+ //# sourceMappingURL=hooks.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hooks.js","sourceRoot":"","sources":["../../../src/client/hooks.ts"],"names":[],"mappings":"AAOA;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,gBAAgB,CACpC,GAAyB,EACzB,WAAwB,EACxB,UAAmC;IAEnC,IAAI,OAAO,GAAG,GAAG,CAAA;IAEjB,IAAI,WAAW,CAAC,eAAe,EAAE,CAAC;QAChC,OAAO,GAAG,MAAM,WAAW,CAAC,eAAe,CAAC,OAAO,CAAC,CAAA;IACtD,CAAC;IAED,IAAI,UAAU,EAAE,eAAe,EAAE,CAAC;QAChC,OAAO,GAAG,MAAM,UAAU,CAAC,eAAe,CAAC,OAAO,CAAC,CAAA;IACrD,CAAC;IAED,OAAO,OAAO,CAAA;AAChB,CAAC;AAED;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,gBAAgB,CACpC,GAAyB,EACzB,WAAwB,EACxB,UAAmC;IAEnC,IAAI,WAAW,CAAC,eAAe,EAAE,CAAC;QAChC,MAAM,WAAW,CAAC,eAAe,CAAC,GAAG,CAAC,CAAA;IACxC,CAAC;IAED,IAAI,UAAU,EAAE,eAAe,EAAE,CAAC;QAChC,MAAM,UAAU,CAAC,eAAe,CAAC,GAAG,CAAC,CAAA;IACvC,CAAC;AACH,CAAC;AAED;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,UAAU,CAC9B,GAAiB,EACjB,WAAwB,EACxB,UAAmC;IAEnC,IAAI,WAAW,CAAC,OAAO,EAAE,CAAC;QACxB,MAAM,WAAW,CAAC,OAAO,CAAC,GAAG,CAAC,CAAA;IAChC,CAAC;IAED,IAAI,UAAU,EAAE,OAAO,EAAE,CAAC;QACxB,MAAM,UAAU,CAAC,OAAO,CAAC,GAAG,CAAC,CAAA;IAC/B,CAAC;AACH,CAAC"}
@@ -0,0 +1 @@
1
+ export {};