ts-procedures 5.14.0 → 5.16.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 (277) hide show
  1. package/agent_config/claude-code/skills/ts-procedures/SKILL.md +1 -1
  2. package/agent_config/claude-code/skills/ts-procedures/api-reference.md +59 -4
  3. package/agent_config/claude-code/skills/ts-procedures/patterns.md +103 -3
  4. package/agent_config/claude-code/skills/ts-procedures-scaffold/templates/client.md +36 -5
  5. package/agent_config/copilot/copilot-instructions.md +56 -7
  6. package/agent_config/cursor/cursorrules +56 -7
  7. package/build/client/call.d.ts +18 -9
  8. package/build/client/call.js +25 -19
  9. package/build/client/call.js.map +1 -1
  10. package/build/client/call.test.js +167 -17
  11. package/build/client/call.test.js.map +1 -1
  12. package/build/client/index.d.ts +1 -1
  13. package/build/client/index.js +18 -3
  14. package/build/client/index.js.map +1 -1
  15. package/build/client/index.test.js +104 -0
  16. package/build/client/index.test.js.map +1 -1
  17. package/build/client/resolve-options.d.ts +45 -0
  18. package/build/client/resolve-options.js +82 -0
  19. package/build/client/resolve-options.js.map +1 -0
  20. package/build/client/resolve-options.test.js +158 -0
  21. package/build/client/resolve-options.test.js.map +1 -0
  22. package/build/client/stream.d.ts +18 -9
  23. package/build/client/stream.js +24 -19
  24. package/build/client/stream.js.map +1 -1
  25. package/build/client/stream.test.js +102 -46
  26. package/build/client/stream.test.js.map +1 -1
  27. package/build/client/types.d.ts +68 -1
  28. package/build/client/types.js +1 -1
  29. package/build/codegen/bin/cli.d.ts +2 -0
  30. package/build/codegen/bin/cli.js +11 -0
  31. package/build/codegen/bin/cli.js.map +1 -1
  32. package/build/codegen/bin/cli.test.js +30 -0
  33. package/build/codegen/bin/cli.test.js.map +1 -1
  34. package/build/codegen/e2e.test.js +141 -0
  35. package/build/codegen/e2e.test.js.map +1 -1
  36. package/build/codegen/emit-client-runtime.js +3 -0
  37. package/build/codegen/emit-client-runtime.js.map +1 -1
  38. package/build/codegen/index.d.ts +1 -0
  39. package/build/codegen/index.js +1 -0
  40. package/build/codegen/index.js.map +1 -1
  41. package/build/codegen/pipeline.d.ts +1 -0
  42. package/build/codegen/pipeline.js +8 -2
  43. package/build/codegen/pipeline.js.map +1 -1
  44. package/build/codegen/pipeline.test.js +34 -1
  45. package/build/codegen/pipeline.test.js.map +1 -1
  46. package/docs/client-and-codegen.md +125 -2
  47. package/package.json +1 -1
  48. package/src/client/call.test.ts +202 -29
  49. package/src/client/call.ts +41 -28
  50. package/src/client/index.test.ts +117 -0
  51. package/src/client/index.ts +25 -8
  52. package/src/client/resolve-options.test.ts +205 -0
  53. package/src/client/resolve-options.ts +113 -0
  54. package/src/client/stream.test.ts +132 -107
  55. package/src/client/stream.ts +40 -25
  56. package/src/client/types.ts +74 -2
  57. package/src/codegen/bin/cli.test.ts +35 -0
  58. package/src/codegen/bin/cli.ts +11 -0
  59. package/src/codegen/e2e.test.ts +151 -0
  60. package/src/codegen/emit-client-runtime.ts +3 -0
  61. package/src/codegen/index.ts +2 -0
  62. package/src/codegen/pipeline.test.ts +46 -1
  63. package/src/codegen/pipeline.ts +9 -2
  64. package/src/implementations/http/README.md +11 -1
  65. package/build/src/client/call.d.ts +0 -14
  66. package/build/src/client/call.js +0 -47
  67. package/build/src/client/call.js.map +0 -1
  68. package/build/src/client/call.test.js +0 -124
  69. package/build/src/client/call.test.js.map +0 -1
  70. package/build/src/client/errors.d.ts +0 -25
  71. package/build/src/client/errors.js +0 -33
  72. package/build/src/client/errors.js.map +0 -1
  73. package/build/src/client/errors.test.d.ts +0 -1
  74. package/build/src/client/errors.test.js +0 -41
  75. package/build/src/client/errors.test.js.map +0 -1
  76. package/build/src/client/fetch-adapter.d.ts +0 -12
  77. package/build/src/client/fetch-adapter.js +0 -156
  78. package/build/src/client/fetch-adapter.js.map +0 -1
  79. package/build/src/client/fetch-adapter.test.d.ts +0 -1
  80. package/build/src/client/fetch-adapter.test.js +0 -271
  81. package/build/src/client/fetch-adapter.test.js.map +0 -1
  82. package/build/src/client/hooks.d.ts +0 -17
  83. package/build/src/client/hooks.js +0 -40
  84. package/build/src/client/hooks.js.map +0 -1
  85. package/build/src/client/hooks.test.d.ts +0 -1
  86. package/build/src/client/hooks.test.js +0 -163
  87. package/build/src/client/hooks.test.js.map +0 -1
  88. package/build/src/client/index.d.ts +0 -22
  89. package/build/src/client/index.js +0 -67
  90. package/build/src/client/index.js.map +0 -1
  91. package/build/src/client/index.test.d.ts +0 -1
  92. package/build/src/client/index.test.js +0 -231
  93. package/build/src/client/index.test.js.map +0 -1
  94. package/build/src/client/request-builder.d.ts +0 -13
  95. package/build/src/client/request-builder.js +0 -53
  96. package/build/src/client/request-builder.js.map +0 -1
  97. package/build/src/client/request-builder.test.d.ts +0 -1
  98. package/build/src/client/request-builder.test.js +0 -160
  99. package/build/src/client/request-builder.test.js.map +0 -1
  100. package/build/src/client/stream.d.ts +0 -27
  101. package/build/src/client/stream.js +0 -118
  102. package/build/src/client/stream.js.map +0 -1
  103. package/build/src/client/stream.test.d.ts +0 -1
  104. package/build/src/client/stream.test.js +0 -228
  105. package/build/src/client/stream.test.js.map +0 -1
  106. package/build/src/client/types.d.ts +0 -78
  107. package/build/src/client/types.js +0 -3
  108. package/build/src/client/types.js.map +0 -1
  109. package/build/src/codegen/bin/cli.d.ts +0 -45
  110. package/build/src/codegen/bin/cli.js +0 -246
  111. package/build/src/codegen/bin/cli.js.map +0 -1
  112. package/build/src/codegen/bin/cli.test.d.ts +0 -1
  113. package/build/src/codegen/bin/cli.test.js +0 -220
  114. package/build/src/codegen/bin/cli.test.js.map +0 -1
  115. package/build/src/codegen/constants.d.ts +0 -1
  116. package/build/src/codegen/constants.js +0 -2
  117. package/build/src/codegen/constants.js.map +0 -1
  118. package/build/src/codegen/e2e.test.d.ts +0 -1
  119. package/build/src/codegen/e2e.test.js +0 -464
  120. package/build/src/codegen/e2e.test.js.map +0 -1
  121. package/build/src/codegen/emit-client-runtime.d.ts +0 -9
  122. package/build/src/codegen/emit-client-runtime.js +0 -99
  123. package/build/src/codegen/emit-client-runtime.js.map +0 -1
  124. package/build/src/codegen/emit-client-runtime.test.d.ts +0 -1
  125. package/build/src/codegen/emit-client-runtime.test.js +0 -78
  126. package/build/src/codegen/emit-client-runtime.test.js.map +0 -1
  127. package/build/src/codegen/emit-client-types.d.ts +0 -8
  128. package/build/src/codegen/emit-client-types.js +0 -25
  129. package/build/src/codegen/emit-client-types.js.map +0 -1
  130. package/build/src/codegen/emit-client-types.test.d.ts +0 -1
  131. package/build/src/codegen/emit-client-types.test.js +0 -33
  132. package/build/src/codegen/emit-client-types.test.js.map +0 -1
  133. package/build/src/codegen/emit-errors.d.ts +0 -19
  134. package/build/src/codegen/emit-errors.js +0 -59
  135. package/build/src/codegen/emit-errors.js.map +0 -1
  136. package/build/src/codegen/emit-errors.test.d.ts +0 -1
  137. package/build/src/codegen/emit-errors.test.js +0 -175
  138. package/build/src/codegen/emit-errors.test.js.map +0 -1
  139. package/build/src/codegen/emit-index.d.ts +0 -12
  140. package/build/src/codegen/emit-index.js +0 -41
  141. package/build/src/codegen/emit-index.js.map +0 -1
  142. package/build/src/codegen/emit-index.test.d.ts +0 -1
  143. package/build/src/codegen/emit-index.test.js +0 -106
  144. package/build/src/codegen/emit-index.test.js.map +0 -1
  145. package/build/src/codegen/emit-scope.d.ts +0 -15
  146. package/build/src/codegen/emit-scope.js +0 -299
  147. package/build/src/codegen/emit-scope.js.map +0 -1
  148. package/build/src/codegen/emit-scope.test.d.ts +0 -1
  149. package/build/src/codegen/emit-scope.test.js +0 -559
  150. package/build/src/codegen/emit-scope.test.js.map +0 -1
  151. package/build/src/codegen/emit-types.d.ts +0 -43
  152. package/build/src/codegen/emit-types.js +0 -111
  153. package/build/src/codegen/emit-types.js.map +0 -1
  154. package/build/src/codegen/emit-types.test.d.ts +0 -1
  155. package/build/src/codegen/emit-types.test.js +0 -184
  156. package/build/src/codegen/emit-types.test.js.map +0 -1
  157. package/build/src/codegen/group-routes.d.ts +0 -23
  158. package/build/src/codegen/group-routes.js +0 -46
  159. package/build/src/codegen/group-routes.js.map +0 -1
  160. package/build/src/codegen/group-routes.test.d.ts +0 -1
  161. package/build/src/codegen/group-routes.test.js +0 -131
  162. package/build/src/codegen/group-routes.test.js.map +0 -1
  163. package/build/src/codegen/index.d.ts +0 -15
  164. package/build/src/codegen/index.js +0 -16
  165. package/build/src/codegen/index.js.map +0 -1
  166. package/build/src/codegen/naming.d.ts +0 -7
  167. package/build/src/codegen/naming.js +0 -21
  168. package/build/src/codegen/naming.js.map +0 -1
  169. package/build/src/codegen/naming.test.d.ts +0 -1
  170. package/build/src/codegen/naming.test.js +0 -40
  171. package/build/src/codegen/naming.test.js.map +0 -1
  172. package/build/src/codegen/pipeline.d.ts +0 -17
  173. package/build/src/codegen/pipeline.js +0 -78
  174. package/build/src/codegen/pipeline.js.map +0 -1
  175. package/build/src/codegen/pipeline.test.d.ts +0 -1
  176. package/build/src/codegen/pipeline.test.js +0 -269
  177. package/build/src/codegen/pipeline.test.js.map +0 -1
  178. package/build/src/codegen/resolve-envelope.d.ts +0 -7
  179. package/build/src/codegen/resolve-envelope.js +0 -46
  180. package/build/src/codegen/resolve-envelope.js.map +0 -1
  181. package/build/src/codegen/resolve-envelope.test.d.ts +0 -1
  182. package/build/src/codegen/resolve-envelope.test.js +0 -69
  183. package/build/src/codegen/resolve-envelope.test.js.map +0 -1
  184. package/build/src/errors.d.ts +0 -33
  185. package/build/src/errors.js +0 -91
  186. package/build/src/errors.js.map +0 -1
  187. package/build/src/errors.test.d.ts +0 -1
  188. package/build/src/errors.test.js +0 -122
  189. package/build/src/errors.test.js.map +0 -1
  190. package/build/src/exports.d.ts +0 -7
  191. package/build/src/exports.js +0 -8
  192. package/build/src/exports.js.map +0 -1
  193. package/build/src/implementations/http/doc-registry.d.ts +0 -12
  194. package/build/src/implementations/http/doc-registry.js +0 -114
  195. package/build/src/implementations/http/doc-registry.js.map +0 -1
  196. package/build/src/implementations/http/doc-registry.test.d.ts +0 -1
  197. package/build/src/implementations/http/doc-registry.test.js +0 -347
  198. package/build/src/implementations/http/doc-registry.test.js.map +0 -1
  199. package/build/src/implementations/http/express-rpc/index.d.ts +0 -94
  200. package/build/src/implementations/http/express-rpc/index.js +0 -185
  201. package/build/src/implementations/http/express-rpc/index.js.map +0 -1
  202. package/build/src/implementations/http/express-rpc/index.test.d.ts +0 -1
  203. package/build/src/implementations/http/express-rpc/index.test.js +0 -684
  204. package/build/src/implementations/http/express-rpc/index.test.js.map +0 -1
  205. package/build/src/implementations/http/express-rpc/types.d.ts +0 -11
  206. package/build/src/implementations/http/express-rpc/types.js +0 -2
  207. package/build/src/implementations/http/express-rpc/types.js.map +0 -1
  208. package/build/src/implementations/http/hono-api/index.d.ts +0 -102
  209. package/build/src/implementations/http/hono-api/index.js +0 -341
  210. package/build/src/implementations/http/hono-api/index.js.map +0 -1
  211. package/build/src/implementations/http/hono-api/index.test.d.ts +0 -1
  212. package/build/src/implementations/http/hono-api/index.test.js +0 -992
  213. package/build/src/implementations/http/hono-api/index.test.js.map +0 -1
  214. package/build/src/implementations/http/hono-api/types.d.ts +0 -13
  215. package/build/src/implementations/http/hono-api/types.js +0 -2
  216. package/build/src/implementations/http/hono-api/types.js.map +0 -1
  217. package/build/src/implementations/http/hono-rpc/index.d.ts +0 -92
  218. package/build/src/implementations/http/hono-rpc/index.js +0 -161
  219. package/build/src/implementations/http/hono-rpc/index.js.map +0 -1
  220. package/build/src/implementations/http/hono-rpc/index.test.d.ts +0 -1
  221. package/build/src/implementations/http/hono-rpc/index.test.js +0 -803
  222. package/build/src/implementations/http/hono-rpc/index.test.js.map +0 -1
  223. package/build/src/implementations/http/hono-rpc/types.d.ts +0 -11
  224. package/build/src/implementations/http/hono-rpc/types.js +0 -2
  225. package/build/src/implementations/http/hono-rpc/types.js.map +0 -1
  226. package/build/src/implementations/http/hono-stream/index.d.ts +0 -120
  227. package/build/src/implementations/http/hono-stream/index.js +0 -309
  228. package/build/src/implementations/http/hono-stream/index.js.map +0 -1
  229. package/build/src/implementations/http/hono-stream/index.test.d.ts +0 -1
  230. package/build/src/implementations/http/hono-stream/index.test.js +0 -1356
  231. package/build/src/implementations/http/hono-stream/index.test.js.map +0 -1
  232. package/build/src/implementations/http/hono-stream/types.d.ts +0 -15
  233. package/build/src/implementations/http/hono-stream/types.js +0 -2
  234. package/build/src/implementations/http/hono-stream/types.js.map +0 -1
  235. package/build/src/implementations/types.d.ts +0 -142
  236. package/build/src/implementations/types.js +0 -2
  237. package/build/src/implementations/types.js.map +0 -1
  238. package/build/src/index.d.ts +0 -165
  239. package/build/src/index.js +0 -253
  240. package/build/src/index.js.map +0 -1
  241. package/build/src/index.test.d.ts +0 -1
  242. package/build/src/index.test.js +0 -890
  243. package/build/src/index.test.js.map +0 -1
  244. package/build/src/schema/compute-schema.d.ts +0 -35
  245. package/build/src/schema/compute-schema.js +0 -41
  246. package/build/src/schema/compute-schema.js.map +0 -1
  247. package/build/src/schema/compute-schema.test.d.ts +0 -1
  248. package/build/src/schema/compute-schema.test.js +0 -107
  249. package/build/src/schema/compute-schema.test.js.map +0 -1
  250. package/build/src/schema/extract-json-schema.d.ts +0 -2
  251. package/build/src/schema/extract-json-schema.js +0 -12
  252. package/build/src/schema/extract-json-schema.js.map +0 -1
  253. package/build/src/schema/extract-json-schema.test.d.ts +0 -1
  254. package/build/src/schema/extract-json-schema.test.js +0 -23
  255. package/build/src/schema/extract-json-schema.test.js.map +0 -1
  256. package/build/src/schema/parser.d.ts +0 -28
  257. package/build/src/schema/parser.js +0 -170
  258. package/build/src/schema/parser.js.map +0 -1
  259. package/build/src/schema/parser.test.d.ts +0 -1
  260. package/build/src/schema/parser.test.js +0 -120
  261. package/build/src/schema/parser.test.js.map +0 -1
  262. package/build/src/schema/resolve-schema-lib.d.ts +0 -12
  263. package/build/src/schema/resolve-schema-lib.js +0 -11
  264. package/build/src/schema/resolve-schema-lib.js.map +0 -1
  265. package/build/src/schema/resolve-schema-lib.test.d.ts +0 -1
  266. package/build/src/schema/resolve-schema-lib.test.js +0 -17
  267. package/build/src/schema/resolve-schema-lib.test.js.map +0 -1
  268. package/build/src/schema/types.d.ts +0 -8
  269. package/build/src/schema/types.js +0 -2
  270. package/build/src/schema/types.js.map +0 -1
  271. package/build/src/stack-utils.d.ts +0 -25
  272. package/build/src/stack-utils.js +0 -95
  273. package/build/src/stack-utils.js.map +0 -1
  274. package/build/src/stack-utils.test.d.ts +0 -1
  275. package/build/src/stack-utils.test.js +0 -80
  276. package/build/src/stack-utils.test.js.map +0 -1
  277. /package/build/{src/client/call.test.d.ts → client/resolve-options.test.d.ts} +0 -0
@@ -1,163 +0,0 @@
1
- import { describe, it, expect } from 'vitest';
2
- import { runBeforeRequest, runAfterResponse, runOnError } from './hooks.js';
3
- // ── helpers ───────────────────────────────────────────────
4
- function makeBeforeCtx(overrides) {
5
- return {
6
- procedureName: 'TestProcedure',
7
- scope: 'test',
8
- request: { url: 'https://example.com', method: 'GET' },
9
- ...overrides,
10
- };
11
- }
12
- function makeAfterCtx(overrides) {
13
- return {
14
- procedureName: 'TestProcedure',
15
- scope: 'test',
16
- request: { url: 'https://example.com', method: 'GET' },
17
- response: { status: 200, headers: {}, body: null },
18
- ...overrides,
19
- };
20
- }
21
- function makeErrorCtx(overrides) {
22
- return {
23
- procedureName: 'TestProcedure',
24
- scope: 'test',
25
- request: { url: 'https://example.com', method: 'GET' },
26
- error: new Error('something went wrong'),
27
- ...overrides,
28
- };
29
- }
30
- // ── runBeforeRequest ──────────────────────────────────────
31
- describe('runBeforeRequest', () => {
32
- it('runs global hook then local hook in order', async () => {
33
- const order = [];
34
- const globalHooks = {
35
- onBeforeRequest: (ctx) => { order.push('global'); return ctx; },
36
- };
37
- const localHooks = {
38
- onBeforeRequest: (ctx) => { order.push('local'); return ctx; },
39
- };
40
- const ctx = makeBeforeCtx();
41
- await runBeforeRequest(ctx, globalHooks, localHooks);
42
- expect(order).toEqual(['global', 'local']);
43
- });
44
- it('passes the (possibly mutated) context from global to local', async () => {
45
- const globalHooks = {
46
- onBeforeRequest: (ctx) => ({
47
- ...ctx,
48
- request: { ...ctx.request, url: 'https://mutated.example.com' },
49
- }),
50
- };
51
- let receivedUrl = '';
52
- const localHooks = {
53
- onBeforeRequest: (ctx) => { receivedUrl = ctx.request.url; return ctx; },
54
- };
55
- const ctx = makeBeforeCtx();
56
- await runBeforeRequest(ctx, globalHooks, localHooks);
57
- expect(receivedUrl).toBe('https://mutated.example.com');
58
- });
59
- it('returns the final mutated context', async () => {
60
- const globalHooks = {
61
- onBeforeRequest: (ctx) => ({ ...ctx, scope: 'mutated-by-global' }),
62
- };
63
- const localHooks = {
64
- onBeforeRequest: (ctx) => ({ ...ctx, scope: ctx.scope + '-then-local' }),
65
- };
66
- const ctx = makeBeforeCtx();
67
- const result = await runBeforeRequest(ctx, globalHooks, localHooks);
68
- expect(result.scope).toBe('mutated-by-global-then-local');
69
- });
70
- it('handles async hooks', async () => {
71
- const order = [];
72
- const globalHooks = {
73
- onBeforeRequest: async (ctx) => { order.push('global'); return ctx; },
74
- };
75
- const localHooks = {
76
- onBeforeRequest: async (ctx) => { order.push('local'); return ctx; },
77
- };
78
- await runBeforeRequest(makeBeforeCtx(), globalHooks, localHooks);
79
- expect(order).toEqual(['global', 'local']);
80
- });
81
- it('skips undefined global hook gracefully', async () => {
82
- const localHooks = {
83
- onBeforeRequest: (ctx) => ({ ...ctx, scope: 'local-only' }),
84
- };
85
- const result = await runBeforeRequest(makeBeforeCtx(), {}, localHooks);
86
- expect(result.scope).toBe('local-only');
87
- });
88
- it('skips undefined local hook gracefully', async () => {
89
- const globalHooks = {
90
- onBeforeRequest: (ctx) => ({ ...ctx, scope: 'global-only' }),
91
- };
92
- const result = await runBeforeRequest(makeBeforeCtx(), globalHooks, undefined);
93
- expect(result.scope).toBe('global-only');
94
- });
95
- it('skips both hooks gracefully when neither defined', async () => {
96
- const ctx = makeBeforeCtx();
97
- const result = await runBeforeRequest(ctx, {}, undefined);
98
- expect(result).toEqual(ctx);
99
- });
100
- });
101
- // ── runAfterResponse ──────────────────────────────────────
102
- describe('runAfterResponse', () => {
103
- it('runs global then local hook', async () => {
104
- const order = [];
105
- const globalHooks = { onAfterResponse: () => { order.push('global'); } };
106
- const localHooks = { onAfterResponse: () => { order.push('local'); } };
107
- await runAfterResponse(makeAfterCtx(), globalHooks, localHooks);
108
- expect(order).toEqual(['global', 'local']);
109
- });
110
- it('handles async hooks', async () => {
111
- const order = [];
112
- const globalHooks = {
113
- onAfterResponse: async () => { order.push('global'); },
114
- };
115
- const localHooks = {
116
- onAfterResponse: async () => { order.push('local'); },
117
- };
118
- await runAfterResponse(makeAfterCtx(), globalHooks, localHooks);
119
- expect(order).toEqual(['global', 'local']);
120
- });
121
- it('skips undefined hooks gracefully', async () => {
122
- // Should not throw
123
- await runAfterResponse(makeAfterCtx(), {}, undefined);
124
- });
125
- it('returns void', async () => {
126
- const result = await runAfterResponse(makeAfterCtx(), {}, undefined);
127
- expect(result).toBeUndefined();
128
- });
129
- });
130
- // ── runOnError ────────────────────────────────────────────
131
- describe('runOnError', () => {
132
- it('runs global then local hook', async () => {
133
- const order = [];
134
- const globalHooks = { onError: () => { order.push('global'); } };
135
- const localHooks = { onError: () => { order.push('local'); } };
136
- await runOnError(makeErrorCtx(), globalHooks, localHooks);
137
- expect(order).toEqual(['global', 'local']);
138
- });
139
- it('handles async hooks', async () => {
140
- const order = [];
141
- const globalHooks = { onError: async () => { order.push('global'); } };
142
- const localHooks = { onError: async () => { order.push('local'); } };
143
- await runOnError(makeErrorCtx(), globalHooks, localHooks);
144
- expect(order).toEqual(['global', 'local']);
145
- });
146
- it('skips undefined hooks gracefully', async () => {
147
- await runOnError(makeErrorCtx(), {}, undefined);
148
- });
149
- it('returns void', async () => {
150
- const result = await runOnError(makeErrorCtx(), {}, undefined);
151
- expect(result).toBeUndefined();
152
- });
153
- it('receives the error in context', async () => {
154
- const receivedErrors = [];
155
- const globalHooks = {
156
- onError: (ctx) => { receivedErrors.push(ctx.error); },
157
- };
158
- const err = new Error('boom');
159
- await runOnError(makeErrorCtx({ error: err }), globalHooks, undefined);
160
- expect(receivedErrors[0]).toBe(err);
161
- });
162
- });
163
- //# sourceMappingURL=hooks.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"hooks.test.js","sourceRoot":"","sources":["../../../src/client/hooks.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,EAAM,MAAM,QAAQ,CAAA;AACjD,OAAO,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,UAAU,EAAE,MAAM,YAAY,CAAA;AAQ3E,6DAA6D;AAE7D,SAAS,aAAa,CAAC,SAAyC;IAC9D,OAAO;QACL,aAAa,EAAE,eAAe;QAC9B,KAAK,EAAE,MAAM;QACb,OAAO,EAAE,EAAE,GAAG,EAAE,qBAAqB,EAAE,MAAM,EAAE,KAAK,EAAE;QACtD,GAAG,SAAS;KACb,CAAA;AACH,CAAC;AAED,SAAS,YAAY,CAAC,SAAyC;IAC7D,OAAO;QACL,aAAa,EAAE,eAAe;QAC9B,KAAK,EAAE,MAAM;QACb,OAAO,EAAE,EAAE,GAAG,EAAE,qBAAqB,EAAE,MAAM,EAAE,KAAK,EAAE;QACtD,QAAQ,EAAE,EAAE,MAAM,EAAE,GAAG,EAAE,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE;QAClD,GAAG,SAAS;KACb,CAAA;AACH,CAAC;AAED,SAAS,YAAY,CAAC,SAAiC;IACrD,OAAO;QACL,aAAa,EAAE,eAAe;QAC9B,KAAK,EAAE,MAAM;QACb,OAAO,EAAE,EAAE,GAAG,EAAE,qBAAqB,EAAE,MAAM,EAAE,KAAK,EAAE;QACtD,KAAK,EAAE,IAAI,KAAK,CAAC,sBAAsB,CAAC;QACxC,GAAG,SAAS;KACb,CAAA;AACH,CAAC;AAED,6DAA6D;AAE7D,QAAQ,CAAC,kBAAkB,EAAE,GAAG,EAAE;IAChC,EAAE,CAAC,2CAA2C,EAAE,KAAK,IAAI,EAAE;QACzD,MAAM,KAAK,GAAa,EAAE,CAAA;QAC1B,MAAM,WAAW,GAAgB;YAC/B,eAAe,EAAE,CAAC,GAAG,EAAE,EAAE,GAAG,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,OAAO,GAAG,CAAA,CAAC,CAAC;SAC/D,CAAA;QACD,MAAM,UAAU,GAAgB;YAC9B,eAAe,EAAE,CAAC,GAAG,EAAE,EAAE,GAAG,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO,GAAG,CAAA,CAAC,CAAC;SAC9D,CAAA;QACD,MAAM,GAAG,GAAG,aAAa,EAAE,CAAA;QAC3B,MAAM,gBAAgB,CAAC,GAAG,EAAE,WAAW,EAAE,UAAU,CAAC,CAAA;QACpD,MAAM,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC,CAAA;IAC5C,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,4DAA4D,EAAE,KAAK,IAAI,EAAE;QAC1E,MAAM,WAAW,GAAgB;YAC/B,eAAe,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;gBACzB,GAAG,GAAG;gBACN,OAAO,EAAE,EAAE,GAAG,GAAG,CAAC,OAAO,EAAE,GAAG,EAAE,6BAA6B,EAAE;aAChE,CAAC;SACH,CAAA;QACD,IAAI,WAAW,GAAG,EAAE,CAAA;QACpB,MAAM,UAAU,GAAgB;YAC9B,eAAe,EAAE,CAAC,GAAG,EAAE,EAAE,GAAG,WAAW,GAAG,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,OAAO,GAAG,CAAA,CAAC,CAAC;SACxE,CAAA;QACD,MAAM,GAAG,GAAG,aAAa,EAAE,CAAA;QAC3B,MAAM,gBAAgB,CAAC,GAAG,EAAE,WAAW,EAAE,UAAU,CAAC,CAAA;QACpD,MAAM,CAAC,WAAW,CAAC,CAAC,IAAI,CAAC,6BAA6B,CAAC,CAAA;IACzD,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,mCAAmC,EAAE,KAAK,IAAI,EAAE;QACjD,MAAM,WAAW,GAAgB;YAC/B,eAAe,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,EAAE,GAAG,GAAG,EAAE,KAAK,EAAE,mBAAmB,EAAE,CAAC;SACnE,CAAA;QACD,MAAM,UAAU,GAAgB;YAC9B,eAAe,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,EAAE,GAAG,GAAG,EAAE,KAAK,EAAE,GAAG,CAAC,KAAK,GAAG,aAAa,EAAE,CAAC;SACzE,CAAA;QACD,MAAM,GAAG,GAAG,aAAa,EAAE,CAAA;QAC3B,MAAM,MAAM,GAAG,MAAM,gBAAgB,CAAC,GAAG,EAAE,WAAW,EAAE,UAAU,CAAC,CAAA;QACnE,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,8BAA8B,CAAC,CAAA;IAC3D,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,qBAAqB,EAAE,KAAK,IAAI,EAAE;QACnC,MAAM,KAAK,GAAa,EAAE,CAAA;QAC1B,MAAM,WAAW,GAAgB;YAC/B,eAAe,EAAE,KAAK,EAAE,GAAG,EAAE,EAAE,GAAG,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,OAAO,GAAG,CAAA,CAAC,CAAC;SACrE,CAAA;QACD,MAAM,UAAU,GAAgB;YAC9B,eAAe,EAAE,KAAK,EAAE,GAAG,EAAE,EAAE,GAAG,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO,GAAG,CAAA,CAAC,CAAC;SACpE,CAAA;QACD,MAAM,gBAAgB,CAAC,aAAa,EAAE,EAAE,WAAW,EAAE,UAAU,CAAC,CAAA;QAChE,MAAM,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC,CAAA;IAC5C,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,wCAAwC,EAAE,KAAK,IAAI,EAAE;QACtD,MAAM,UAAU,GAAgB;YAC9B,eAAe,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,EAAE,GAAG,GAAG,EAAE,KAAK,EAAE,YAAY,EAAE,CAAC;SAC5D,CAAA;QACD,MAAM,MAAM,GAAG,MAAM,gBAAgB,CAAC,aAAa,EAAE,EAAE,EAAE,EAAE,UAAU,CAAC,CAAA;QACtE,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,YAAY,CAAC,CAAA;IACzC,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,uCAAuC,EAAE,KAAK,IAAI,EAAE;QACrD,MAAM,WAAW,GAAgB;YAC/B,eAAe,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,EAAE,GAAG,GAAG,EAAE,KAAK,EAAE,aAAa,EAAE,CAAC;SAC7D,CAAA;QACD,MAAM,MAAM,GAAG,MAAM,gBAAgB,CAAC,aAAa,EAAE,EAAE,WAAW,EAAE,SAAS,CAAC,CAAA;QAC9E,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,CAAA;IAC1C,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,kDAAkD,EAAE,KAAK,IAAI,EAAE;QAChE,MAAM,GAAG,GAAG,aAAa,EAAE,CAAA;QAC3B,MAAM,MAAM,GAAG,MAAM,gBAAgB,CAAC,GAAG,EAAE,EAAE,EAAE,SAAS,CAAC,CAAA;QACzD,MAAM,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,CAAA;IAC7B,CAAC,CAAC,CAAA;AACJ,CAAC,CAAC,CAAA;AAEF,6DAA6D;AAE7D,QAAQ,CAAC,kBAAkB,EAAE,GAAG,EAAE;IAChC,EAAE,CAAC,6BAA6B,EAAE,KAAK,IAAI,EAAE;QAC3C,MAAM,KAAK,GAAa,EAAE,CAAA;QAC1B,MAAM,WAAW,GAAgB,EAAE,eAAe,EAAE,GAAG,EAAE,GAAG,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAA,CAAC,CAAC,EAAE,CAAA;QACpF,MAAM,UAAU,GAAgB,EAAE,eAAe,EAAE,GAAG,EAAE,GAAG,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA,CAAC,CAAC,EAAE,CAAA;QAClF,MAAM,gBAAgB,CAAC,YAAY,EAAE,EAAE,WAAW,EAAE,UAAU,CAAC,CAAA;QAC/D,MAAM,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC,CAAA;IAC5C,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,qBAAqB,EAAE,KAAK,IAAI,EAAE;QACnC,MAAM,KAAK,GAAa,EAAE,CAAA;QAC1B,MAAM,WAAW,GAAgB;YAC/B,eAAe,EAAE,KAAK,IAAI,EAAE,GAAG,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAA,CAAC,CAAC;SACtD,CAAA;QACD,MAAM,UAAU,GAAgB;YAC9B,eAAe,EAAE,KAAK,IAAI,EAAE,GAAG,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA,CAAC,CAAC;SACrD,CAAA;QACD,MAAM,gBAAgB,CAAC,YAAY,EAAE,EAAE,WAAW,EAAE,UAAU,CAAC,CAAA;QAC/D,MAAM,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC,CAAA;IAC5C,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,kCAAkC,EAAE,KAAK,IAAI,EAAE;QAChD,mBAAmB;QACnB,MAAM,gBAAgB,CAAC,YAAY,EAAE,EAAE,EAAE,EAAE,SAAS,CAAC,CAAA;IACvD,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,cAAc,EAAE,KAAK,IAAI,EAAE;QAC5B,MAAM,MAAM,GAAG,MAAM,gBAAgB,CAAC,YAAY,EAAE,EAAE,EAAE,EAAE,SAAS,CAAC,CAAA;QACpE,MAAM,CAAC,MAAM,CAAC,CAAC,aAAa,EAAE,CAAA;IAChC,CAAC,CAAC,CAAA;AACJ,CAAC,CAAC,CAAA;AAEF,6DAA6D;AAE7D,QAAQ,CAAC,YAAY,EAAE,GAAG,EAAE;IAC1B,EAAE,CAAC,6BAA6B,EAAE,KAAK,IAAI,EAAE;QAC3C,MAAM,KAAK,GAAa,EAAE,CAAA;QAC1B,MAAM,WAAW,GAAgB,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAA,CAAC,CAAC,EAAE,CAAA;QAC5E,MAAM,UAAU,GAAgB,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA,CAAC,CAAC,EAAE,CAAA;QAC1E,MAAM,UAAU,CAAC,YAAY,EAAE,EAAE,WAAW,EAAE,UAAU,CAAC,CAAA;QACzD,MAAM,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC,CAAA;IAC5C,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,qBAAqB,EAAE,KAAK,IAAI,EAAE;QACnC,MAAM,KAAK,GAAa,EAAE,CAAA;QAC1B,MAAM,WAAW,GAAgB,EAAE,OAAO,EAAE,KAAK,IAAI,EAAE,GAAG,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAA,CAAC,CAAC,EAAE,CAAA;QAClF,MAAM,UAAU,GAAgB,EAAE,OAAO,EAAE,KAAK,IAAI,EAAE,GAAG,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA,CAAC,CAAC,EAAE,CAAA;QAChF,MAAM,UAAU,CAAC,YAAY,EAAE,EAAE,WAAW,EAAE,UAAU,CAAC,CAAA;QACzD,MAAM,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC,CAAA;IAC5C,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,kCAAkC,EAAE,KAAK,IAAI,EAAE;QAChD,MAAM,UAAU,CAAC,YAAY,EAAE,EAAE,EAAE,EAAE,SAAS,CAAC,CAAA;IACjD,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,cAAc,EAAE,KAAK,IAAI,EAAE;QAC5B,MAAM,MAAM,GAAG,MAAM,UAAU,CAAC,YAAY,EAAE,EAAE,EAAE,EAAE,SAAS,CAAC,CAAA;QAC9D,MAAM,CAAC,MAAM,CAAC,CAAC,aAAa,EAAE,CAAA;IAChC,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,+BAA+B,EAAE,KAAK,IAAI,EAAE;QAC7C,MAAM,cAAc,GAAc,EAAE,CAAA;QACpC,MAAM,WAAW,GAAgB;YAC/B,OAAO,EAAE,CAAC,GAAG,EAAE,EAAE,GAAG,cAAc,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAA,CAAC,CAAC;SACrD,CAAA;QACD,MAAM,GAAG,GAAG,IAAI,KAAK,CAAC,MAAM,CAAC,CAAA;QAC7B,MAAM,UAAU,CAAC,YAAY,CAAC,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC,EAAE,WAAW,EAAE,SAAS,CAAC,CAAA;QACtE,MAAM,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;IACrC,CAAC,CAAC,CAAA;AACJ,CAAC,CAAC,CAAA"}
@@ -1,22 +0,0 @@
1
- import type { CreateClientConfig } from './types.js';
2
- /**
3
- * Creates a typed client from a config object.
4
- *
5
- * The `scopes` callback receives a `ClientInstance` and returns the typed
6
- * scope bindings (e.g., `{ users: { getUser, createUser }, posts: { ... } }`).
7
- * The return value of `createClient` is the scopes object.
8
- *
9
- * `client.stream()` must return `TypedStream` synchronously even though
10
- * `executeStream` is async. We achieve this by creating a deferred TypedStream:
11
- * - A deferred async generator awaits `executeStream` internally, then forwards
12
- * yields from the inner stream.
13
- * - The outer `.result` is wired up to the inner stream's `.result`.
14
- */
15
- export declare function createClient<TScopes>(config: CreateClientConfig<TScopes>): TScopes;
16
- export type { ClientAdapter, AdapterRequest, AdapterResponse, AdapterStreamResponse, ClientHooks, BeforeRequestContext, AfterResponseContext, ErrorContext, CallDescriptor, StreamDescriptor, TypedStream, ClientInstance, ProcedureCallOptions, CreateClientConfig, } from './types.js';
17
- export { ClientRequestError, ClientPathParamError, ClientStreamError } from './errors.js';
18
- export { createTypedStream } from './stream.js';
19
- export { executeCall } from './call.js';
20
- export { executeStream } from './stream.js';
21
- export { createFetchAdapter } from './fetch-adapter.js';
22
- export type { FetchAdapterConfig } from './fetch-adapter.js';
@@ -1,67 +0,0 @@
1
- import { executeCall } from './call.js';
2
- import { executeStream } from './stream.js';
3
- // ── createClient ──────────────────────────────────────────
4
- /**
5
- * Creates a typed client from a config object.
6
- *
7
- * The `scopes` callback receives a `ClientInstance` and returns the typed
8
- * scope bindings (e.g., `{ users: { getUser, createUser }, posts: { ... } }`).
9
- * The return value of `createClient` is the scopes object.
10
- *
11
- * `client.stream()` must return `TypedStream` synchronously even though
12
- * `executeStream` is async. We achieve this by creating a deferred TypedStream:
13
- * - A deferred async generator awaits `executeStream` internally, then forwards
14
- * yields from the inner stream.
15
- * - The outer `.result` is wired up to the inner stream's `.result`.
16
- */
17
- export function createClient(config) {
18
- const { adapter, basePath, hooks: globalHooks = {}, scopes } = config;
19
- const instance = {
20
- basePath,
21
- adapter,
22
- hooks: globalHooks,
23
- call(descriptor, options) {
24
- return executeCall(descriptor, basePath, adapter, globalHooks, options);
25
- },
26
- stream(descriptor, options) {
27
- // executeStream is async but stream() must be synchronous.
28
- // Create a deferred TypedStream that wraps the async executeStream call.
29
- let resolveResult;
30
- let rejectResult;
31
- const resultPromise = new Promise((resolve, reject) => {
32
- resolveResult = resolve;
33
- rejectResult = reject;
34
- });
35
- // The deferred async generator: awaits executeStream, then forwards
36
- async function* deferredGenerator() {
37
- let innerStream;
38
- try {
39
- innerStream = await executeStream(descriptor, basePath, adapter, globalHooks, options);
40
- }
41
- catch (err) {
42
- rejectResult(err);
43
- throw err;
44
- }
45
- // Wire up .result from the inner stream
46
- innerStream.result.then(resolveResult, rejectResult);
47
- for await (const item of innerStream) {
48
- yield item;
49
- }
50
- }
51
- const iterator = deferredGenerator();
52
- return {
53
- [Symbol.asyncIterator]() {
54
- return iterator;
55
- },
56
- result: resultPromise,
57
- };
58
- },
59
- };
60
- return scopes(instance);
61
- }
62
- export { ClientRequestError, ClientPathParamError, ClientStreamError } from './errors.js';
63
- export { createTypedStream } from './stream.js';
64
- export { executeCall } from './call.js';
65
- export { executeStream } from './stream.js';
66
- export { createFetchAdapter } from './fetch-adapter.js';
67
- //# sourceMappingURL=index.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/client/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,WAAW,CAAA;AACvC,OAAO,EAAE,aAAa,EAAqB,MAAM,aAAa,CAAA;AAU9D,6DAA6D;AAE7D;;;;;;;;;;;;GAYG;AACH,MAAM,UAAU,YAAY,CAAU,MAAmC;IACvE,MAAM,EAAE,OAAO,EAAE,QAAQ,EAAE,KAAK,EAAE,WAAW,GAAG,EAAE,EAAE,MAAM,EAAE,GAAG,MAAM,CAAA;IAErE,MAAM,QAAQ,GAAmB;QAC/B,QAAQ;QACR,OAAO;QACP,KAAK,EAAE,WAAW;QAElB,IAAI,CACF,UAA0B,EAC1B,OAA8B;YAE9B,OAAO,WAAW,CAAY,UAAU,EAAE,QAAQ,EAAE,OAAO,EAAE,WAAW,EAAE,OAAO,CAAC,CAAA;QACpF,CAAC;QAED,MAAM,CACJ,UAA4B,EAC5B,OAA8B;YAE9B,2DAA2D;YAC3D,yEAAyE;YAEzE,IAAI,aAAuC,CAAA;YAC3C,IAAI,YAAuC,CAAA;YAE3C,MAAM,aAAa,GAAG,IAAI,OAAO,CAAU,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;gBAC7D,aAAa,GAAG,OAAO,CAAA;gBACvB,YAAY,GAAG,MAAM,CAAA;YACvB,CAAC,CAAC,CAAA;YAEF,oEAAoE;YACpE,KAAK,SAAS,CAAC,CAAC,iBAAiB;gBAC/B,IAAI,WAAyC,CAAA;gBAC7C,IAAI,CAAC;oBACH,WAAW,GAAG,MAAM,aAAa,CAC/B,UAAU,EACV,QAAQ,EACR,OAAO,EACP,WAAW,EACX,OAAO,CACR,CAAA;gBACH,CAAC;gBAAC,OAAO,GAAG,EAAE,CAAC;oBACb,YAAY,CAAC,GAAG,CAAC,CAAA;oBACjB,MAAM,GAAG,CAAA;gBACX,CAAC;gBAED,wCAAwC;gBACxC,WAAW,CAAC,MAAM,CAAC,IAAI,CAAC,aAAa,EAAE,YAAY,CAAC,CAAA;gBAEpD,IAAI,KAAK,EAAE,MAAM,IAAI,IAAI,WAAW,EAAE,CAAC;oBACrC,MAAM,IAAI,CAAA;gBACZ,CAAC;YACH,CAAC;YAED,MAAM,QAAQ,GAAG,iBAAiB,EAAE,CAAA;YAEpC,OAAO;gBACL,CAAC,MAAM,CAAC,aAAa,CAAC;oBACpB,OAAO,QAAQ,CAAA;gBACjB,CAAC;gBACD,MAAM,EAAE,aAAa;aACtB,CAAA;QACH,CAAC;KACF,CAAA;IAED,OAAO,MAAM,CAAC,QAAQ,CAAC,CAAA;AACzB,CAAC;AAqBD,OAAO,EAAE,kBAAkB,EAAE,oBAAoB,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAA;AAEzF,OAAO,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAA;AAC/C,OAAO,EAAE,WAAW,EAAE,MAAM,WAAW,CAAA;AACvC,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAA;AAE3C,OAAO,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAA"}
@@ -1 +0,0 @@
1
- export {};
@@ -1,231 +0,0 @@
1
- import { describe, it, expect, vi } from 'vitest';
2
- import { createClient } from './index.js';
3
- import { ClientRequestError } from './errors.js';
4
- // ── helpers ───────────────────────────────────────────────
5
- async function* makeAsyncIterable(items) {
6
- for (const item of items) {
7
- yield item;
8
- }
9
- }
10
- function makeAdapter(responseBody = { ok: true }, streamItems = []) {
11
- return {
12
- request: vi.fn(async (_req) => ({
13
- status: 200,
14
- headers: {},
15
- body: responseBody,
16
- })),
17
- stream: vi.fn(async (_req) => ({
18
- status: 200,
19
- headers: {},
20
- body: makeAsyncIterable(streamItems),
21
- })),
22
- };
23
- }
24
- function makeCallDescriptor(overrides) {
25
- return {
26
- name: 'GetUser',
27
- scope: 'users',
28
- path: '/users',
29
- method: 'GET',
30
- kind: 'rpc',
31
- params: { id: '1' },
32
- ...overrides,
33
- };
34
- }
35
- function makeStreamDescriptor(overrides) {
36
- return {
37
- name: 'WatchUsers',
38
- scope: 'users',
39
- path: '/stream/users',
40
- method: 'POST',
41
- kind: 'stream',
42
- streamMode: 'sse',
43
- params: {},
44
- ...overrides,
45
- };
46
- }
47
- // ── createClient ──────────────────────────────────────────
48
- describe('createClient', () => {
49
- it('creates a client with typed scope callables', () => {
50
- const adapter = makeAdapter();
51
- const client = createClient({
52
- adapter,
53
- basePath: 'https://api.example.com',
54
- scopes: (instance) => ({
55
- users: {
56
- getUser: (id) => instance.call(makeCallDescriptor({ params: { id } })),
57
- },
58
- }),
59
- });
60
- expect(client).toHaveProperty('users');
61
- expect(client.users).toHaveProperty('getUser');
62
- expect(typeof client.users.getUser).toBe('function');
63
- });
64
- it('executes procedure calls through the adapter', async () => {
65
- const adapter = makeAdapter({ id: '1', name: 'Alice' });
66
- const client = createClient({
67
- adapter,
68
- basePath: 'https://api.example.com',
69
- scopes: (instance) => ({
70
- users: {
71
- getUser: (id) => instance.call(makeCallDescriptor({ params: { id } })),
72
- },
73
- }),
74
- });
75
- const result = await client.users.getUser('1');
76
- expect(adapter.request).toHaveBeenCalledOnce();
77
- expect(result).toEqual({ id: '1', name: 'Alice' });
78
- });
79
- it('throws ClientRequestError on non-2xx from scope callable', async () => {
80
- const adapter = {
81
- request: vi.fn(async () => ({
82
- status: 404,
83
- headers: {},
84
- body: { message: 'Not Found' },
85
- })),
86
- stream: vi.fn(async () => ({
87
- status: 200,
88
- headers: {},
89
- body: makeAsyncIterable([]),
90
- })),
91
- };
92
- const client = createClient({
93
- adapter,
94
- basePath: 'https://api.example.com',
95
- scopes: (instance) => ({
96
- users: {
97
- getUser: (id) => instance.call(makeCallDescriptor({ params: { id } })),
98
- },
99
- }),
100
- });
101
- await expect(client.users.getUser('99')).rejects.toThrow(ClientRequestError);
102
- });
103
- it('applies global hooks to all calls', async () => {
104
- const capturedHeaders = [];
105
- const adapter = {
106
- request: vi.fn(async (req) => {
107
- capturedHeaders.push(req.headers ?? {});
108
- return { status: 200, headers: {}, body: {} };
109
- }),
110
- stream: vi.fn(async () => ({
111
- status: 200,
112
- headers: {},
113
- body: makeAsyncIterable([]),
114
- })),
115
- };
116
- const globalHooks = {
117
- onBeforeRequest: (ctx) => ({
118
- ...ctx,
119
- request: { ...ctx.request, headers: { 'x-api-key': 'secret' } },
120
- }),
121
- };
122
- const client = createClient({
123
- adapter,
124
- basePath: 'https://api.example.com',
125
- hooks: globalHooks,
126
- scopes: (instance) => ({
127
- users: {
128
- getUser: () => instance.call(makeCallDescriptor()),
129
- },
130
- }),
131
- });
132
- await client.users.getUser();
133
- expect(capturedHeaders[0]?.['x-api-key']).toBe('secret');
134
- });
135
- it('streaming works — SSE yield and return via client.stream()', async () => {
136
- const sseItems = [
137
- { data: { n: 1 }, event: 'tick' },
138
- { data: { n: 2 }, event: 'tick' },
139
- { data: { total: 2 }, event: 'return' },
140
- ];
141
- const adapter = makeAdapter({}, sseItems);
142
- const client = createClient({
143
- adapter,
144
- basePath: 'https://api.example.com',
145
- scopes: (instance) => ({
146
- updates: {
147
- watch: () => instance.stream(makeStreamDescriptor({ streamMode: 'sse' })),
148
- },
149
- }),
150
- });
151
- const stream = client.updates.watch();
152
- const yielded = [];
153
- for await (const item of stream) {
154
- yielded.push(item);
155
- }
156
- expect(yielded).toEqual([{ n: 1 }, { n: 2 }]);
157
- await expect(stream.result).resolves.toEqual({ total: 2 });
158
- });
159
- it('streaming works — text mode yields raw chunks', async () => {
160
- const chunks = ['line1\n', 'line2\n'];
161
- const adapter = makeAdapter({}, chunks);
162
- const client = createClient({
163
- adapter,
164
- basePath: 'https://api.example.com',
165
- scopes: (instance) => ({
166
- logs: {
167
- tail: () => instance.stream(makeStreamDescriptor({ streamMode: 'text', name: 'TailLogs', scope: 'logs' })),
168
- },
169
- }),
170
- });
171
- const stream = client.logs.tail();
172
- const received = [];
173
- for await (const chunk of stream) {
174
- received.push(chunk);
175
- }
176
- expect(received).toEqual(chunks);
177
- await expect(stream.result).resolves.toBeUndefined();
178
- });
179
- it('stream() is synchronous — returns TypedStream immediately (no await needed)', () => {
180
- const adapter = makeAdapter({}, []);
181
- const client = createClient({
182
- adapter,
183
- basePath: 'https://api.example.com',
184
- scopes: (instance) => ({
185
- updates: {
186
- watch: () => instance.stream(makeStreamDescriptor()),
187
- },
188
- }),
189
- });
190
- // Must be synchronous — no await
191
- const stream = client.updates.watch();
192
- expect(typeof stream[Symbol.asyncIterator]).toBe('function');
193
- expect(stream).toHaveProperty('result');
194
- expect(stream.result).toBeInstanceOf(Promise);
195
- });
196
- it('applies global hooks to streams', async () => {
197
- const capturedHeaders = [];
198
- const adapter = {
199
- request: vi.fn(async () => { throw new Error('not expected'); }),
200
- stream: vi.fn(async (req) => {
201
- capturedHeaders.push(req.headers ?? {});
202
- return { status: 200, headers: {}, body: makeAsyncIterable([]) };
203
- }),
204
- };
205
- const globalHooks = {
206
- onBeforeRequest: (ctx) => ({
207
- ...ctx,
208
- request: { ...ctx.request, headers: { 'x-stream-key': 'stream-secret' } },
209
- }),
210
- };
211
- const client = createClient({
212
- adapter,
213
- basePath: 'https://api.example.com',
214
- hooks: globalHooks,
215
- scopes: (instance) => ({
216
- updates: {
217
- watch: () => instance.stream(makeStreamDescriptor()),
218
- },
219
- }),
220
- });
221
- const stream = client.updates.watch();
222
- for await (const _ of stream) { /* drain */ }
223
- expect(capturedHeaders[0]?.['x-stream-key']).toBe('stream-secret');
224
- });
225
- it('barrel exports: re-exports ClientRequestError', async () => {
226
- // This verifies the exports are accessible — the import at the top covers this
227
- const { ClientRequestError: CRE } = await import('./index.js');
228
- expect(CRE).toBeDefined();
229
- });
230
- });
231
- //# sourceMappingURL=index.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.test.js","sourceRoot":"","sources":["../../../src/client/index.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAA;AACjD,OAAO,EAAE,YAAY,EAAE,MAAM,YAAY,CAAA;AACzC,OAAO,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAA;AAYhD,6DAA6D;AAE7D,KAAK,SAAS,CAAC,CAAC,iBAAiB,CAAI,KAAU;IAC7C,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,MAAM,IAAI,CAAA;IACZ,CAAC;AACH,CAAC;AAED,SAAS,WAAW,CAClB,eAAwB,EAAE,EAAE,EAAE,IAAI,EAAE,EACpC,cAAyB,EAAE;IAE3B,OAAO;QACL,OAAO,EAAE,EAAE,CAAC,EAAE,CAAC,KAAK,EAAE,IAAoB,EAA4B,EAAE,CAAC,CAAC;YACxE,MAAM,EAAE,GAAG;YACX,OAAO,EAAE,EAAE;YACX,IAAI,EAAE,YAAY;SACnB,CAAC,CAAC;QACH,MAAM,EAAE,EAAE,CAAC,EAAE,CAAC,KAAK,EAAE,IAAoB,EAAkC,EAAE,CAAC,CAAC;YAC7E,MAAM,EAAE,GAAG;YACX,OAAO,EAAE,EAAE;YACX,IAAI,EAAE,iBAAiB,CAAC,WAAW,CAAC;SACrC,CAAC,CAAC;KACJ,CAAA;AACH,CAAC;AAED,SAAS,kBAAkB,CAAC,SAAmC;IAC7D,OAAO;QACL,IAAI,EAAE,SAAS;QACf,KAAK,EAAE,OAAO;QACd,IAAI,EAAE,QAAQ;QACd,MAAM,EAAE,KAAK;QACb,IAAI,EAAE,KAAK;QACX,MAAM,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE;QACnB,GAAG,SAAS;KACb,CAAA;AACH,CAAC;AAED,SAAS,oBAAoB,CAAC,SAAqC;IACjE,OAAO;QACL,IAAI,EAAE,YAAY;QAClB,KAAK,EAAE,OAAO;QACd,IAAI,EAAE,eAAe;QACrB,MAAM,EAAE,MAAM;QACd,IAAI,EAAE,QAAQ;QACd,UAAU,EAAE,KAAK;QACjB,MAAM,EAAE,EAAE;QACV,GAAG,SAAS;KACb,CAAA;AACH,CAAC;AAED,6DAA6D;AAE7D,QAAQ,CAAC,cAAc,EAAE,GAAG,EAAE;IAC5B,EAAE,CAAC,6CAA6C,EAAE,GAAG,EAAE;QACrD,MAAM,OAAO,GAAG,WAAW,EAAE,CAAA;QAE7B,MAAM,MAAM,GAAG,YAAY,CAAC;YAC1B,OAAO;YACP,QAAQ,EAAE,yBAAyB;YACnC,MAAM,EAAE,CAAC,QAAwB,EAAE,EAAE,CAAC,CAAC;gBACrC,KAAK,EAAE;oBACL,OAAO,EAAE,CAAC,EAAU,EAAE,EAAE,CACtB,QAAQ,CAAC,IAAI,CACX,kBAAkB,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,CACvC;iBACJ;aACF,CAAC;SACH,CAAC,CAAA;QAEF,MAAM,CAAC,MAAM,CAAC,CAAC,cAAc,CAAC,OAAO,CAAC,CAAA;QACtC,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,cAAc,CAAC,SAAS,CAAC,CAAA;QAC9C,MAAM,CAAC,OAAO,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,CAAA;IACtD,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,8CAA8C,EAAE,KAAK,IAAI,EAAE;QAC5D,MAAM,OAAO,GAAG,WAAW,CAAC,EAAE,EAAE,EAAE,GAAG,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC,CAAA;QAEvD,MAAM,MAAM,GAAG,YAAY,CAAC;YAC1B,OAAO;YACP,QAAQ,EAAE,yBAAyB;YACnC,MAAM,EAAE,CAAC,QAAwB,EAAE,EAAE,CAAC,CAAC;gBACrC,KAAK,EAAE;oBACL,OAAO,EAAE,CAAC,EAAU,EAAE,EAAE,CACtB,QAAQ,CAAC,IAAI,CACX,kBAAkB,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,CACvC;iBACJ;aACF,CAAC;SACH,CAAC,CAAA;QAEF,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,CAAA;QAC9C,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,oBAAoB,EAAE,CAAA;QAC9C,MAAM,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,EAAE,EAAE,EAAE,GAAG,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC,CAAA;IACpD,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,0DAA0D,EAAE,KAAK,IAAI,EAAE;QACxE,MAAM,OAAO,GAAkB;YAC7B,OAAO,EAAE,EAAE,CAAC,EAAE,CAAC,KAAK,IAA8B,EAAE,CAAC,CAAC;gBACpD,MAAM,EAAE,GAAG;gBACX,OAAO,EAAE,EAAE;gBACX,IAAI,EAAE,EAAE,OAAO,EAAE,WAAW,EAAE;aAC/B,CAAC,CAAC;YACH,MAAM,EAAE,EAAE,CAAC,EAAE,CAAC,KAAK,IAAoC,EAAE,CAAC,CAAC;gBACzD,MAAM,EAAE,GAAG;gBACX,OAAO,EAAE,EAAE;gBACX,IAAI,EAAE,iBAAiB,CAAC,EAAE,CAAC;aAC5B,CAAC,CAAC;SACJ,CAAA;QAED,MAAM,MAAM,GAAG,YAAY,CAAC;YAC1B,OAAO;YACP,QAAQ,EAAE,yBAAyB;YACnC,MAAM,EAAE,CAAC,QAAwB,EAAE,EAAE,CAAC,CAAC;gBACrC,KAAK,EAAE;oBACL,OAAO,EAAE,CAAC,EAAU,EAAE,EAAE,CACtB,QAAQ,CAAC,IAAI,CAAU,kBAAkB,CAAC,EAAE,MAAM,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC;iBACjE;aACF,CAAC;SACH,CAAC,CAAA;QAEF,MAAM,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,kBAAkB,CAAC,CAAA;IAC9E,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,mCAAmC,EAAE,KAAK,IAAI,EAAE;QACjD,MAAM,eAAe,GAA6B,EAAE,CAAA;QACpD,MAAM,OAAO,GAAkB;YAC7B,OAAO,EAAE,EAAE,CAAC,EAAE,CAAC,KAAK,EAAE,GAAmB,EAA4B,EAAE;gBACrE,eAAe,CAAC,IAAI,CAAC,GAAG,CAAC,OAAO,IAAI,EAAE,CAAC,CAAA;gBACvC,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE,CAAA;YAC/C,CAAC,CAAC;YACF,MAAM,EAAE,EAAE,CAAC,EAAE,CAAC,KAAK,IAAoC,EAAE,CAAC,CAAC;gBACzD,MAAM,EAAE,GAAG;gBACX,OAAO,EAAE,EAAE;gBACX,IAAI,EAAE,iBAAiB,CAAC,EAAE,CAAC;aAC5B,CAAC,CAAC;SACJ,CAAA;QAED,MAAM,WAAW,GAAgB;YAC/B,eAAe,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;gBACzB,GAAG,GAAG;gBACN,OAAO,EAAE,EAAE,GAAG,GAAG,CAAC,OAAO,EAAE,OAAO,EAAE,EAAE,WAAW,EAAE,QAAQ,EAAE,EAAE;aAChE,CAAC;SACH,CAAA;QAED,MAAM,MAAM,GAAG,YAAY,CAAC;YAC1B,OAAO;YACP,QAAQ,EAAE,yBAAyB;YACnC,KAAK,EAAE,WAAW;YAClB,MAAM,EAAE,CAAC,QAAwB,EAAE,EAAE,CAAC,CAAC;gBACrC,KAAK,EAAE;oBACL,OAAO,EAAE,GAAG,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAU,kBAAkB,EAAE,CAAC;iBAC5D;aACF,CAAC;SACH,CAAC,CAAA;QAEF,MAAM,MAAM,CAAC,KAAK,CAAC,OAAO,EAAE,CAAA;QAC5B,MAAM,CAAC,eAAe,CAAC,CAAC,CAAC,EAAE,CAAC,WAAW,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAA;IAC1D,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,4DAA4D,EAAE,KAAK,IAAI,EAAE;QAC1E,MAAM,QAAQ,GAAG;YACf,EAAE,IAAI,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE;YACjC,EAAE,IAAI,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE;YACjC,EAAE,IAAI,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE,KAAK,EAAE,QAAQ,EAAE;SACxC,CAAA;QACD,MAAM,OAAO,GAAG,WAAW,CAAC,EAAE,EAAE,QAAQ,CAAC,CAAA;QAEzC,MAAM,MAAM,GAAG,YAAY,CAAC;YAC1B,OAAO;YACP,QAAQ,EAAE,yBAAyB;YACnC,MAAM,EAAE,CAAC,QAAwB,EAAE,EAAE,CAAC,CAAC;gBACrC,OAAO,EAAE;oBACP,KAAK,EAAE,GAAG,EAAE,CAAC,QAAQ,CAAC,MAAM,CAC1B,oBAAoB,CAAC,EAAE,UAAU,EAAE,KAAK,EAAE,CAAC,CAC5C;iBACF;aACF,CAAC;SACH,CAAC,CAAA;QAEF,MAAM,MAAM,GAAG,MAAM,CAAC,OAAO,CAAC,KAAK,EAAE,CAAA;QAErC,MAAM,OAAO,GAAoB,EAAE,CAAA;QACnC,IAAI,KAAK,EAAE,MAAM,IAAI,IAAI,MAAM,EAAE,CAAC;YAChC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;QACpB,CAAC;QAED,MAAM,CAAC,OAAO,CAAC,CAAC,OAAO,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAA;QAC7C,MAAM,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC,CAAA;IAC5D,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,+CAA+C,EAAE,KAAK,IAAI,EAAE;QAC7D,MAAM,MAAM,GAAG,CAAC,SAAS,EAAE,SAAS,CAAC,CAAA;QACrC,MAAM,OAAO,GAAG,WAAW,CAAC,EAAE,EAAE,MAAM,CAAC,CAAA;QAEvC,MAAM,MAAM,GAAG,YAAY,CAAC;YAC1B,OAAO;YACP,QAAQ,EAAE,yBAAyB;YACnC,MAAM,EAAE,CAAC,QAAwB,EAAE,EAAE,CAAC,CAAC;gBACrC,IAAI,EAAE;oBACJ,IAAI,EAAE,GAAG,EAAE,CAAC,QAAQ,CAAC,MAAM,CACzB,oBAAoB,CAAC,EAAE,UAAU,EAAE,MAAM,EAAE,IAAI,EAAE,UAAU,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,CAC9E;iBACF;aACF,CAAC;SACH,CAAC,CAAA;QAEF,MAAM,MAAM,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,EAAE,CAAA;QACjC,MAAM,QAAQ,GAAa,EAAE,CAAA;QAC7B,IAAI,KAAK,EAAE,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;YACjC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;QACtB,CAAC;QACD,MAAM,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,CAAA;QAChC,MAAM,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,QAAQ,CAAC,aAAa,EAAE,CAAA;IACtD,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,6EAA6E,EAAE,GAAG,EAAE;QACrF,MAAM,OAAO,GAAG,WAAW,CAAC,EAAE,EAAE,EAAE,CAAC,CAAA;QAEnC,MAAM,MAAM,GAAG,YAAY,CAAC;YAC1B,OAAO;YACP,QAAQ,EAAE,yBAAyB;YACnC,MAAM,EAAE,CAAC,QAAwB,EAAE,EAAE,CAAC,CAAC;gBACrC,OAAO,EAAE;oBACP,KAAK,EAAE,GAAG,EAAE,CAAC,QAAQ,CAAC,MAAM,CAAe,oBAAoB,EAAE,CAAC;iBACnE;aACF,CAAC;SACH,CAAC,CAAA;QAEF,iCAAiC;QACjC,MAAM,MAAM,GAAG,MAAM,CAAC,OAAO,CAAC,KAAK,EAAE,CAAA;QACrC,MAAM,CAAC,OAAO,MAAM,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,CAAA;QAC5D,MAAM,CAAC,MAAM,CAAC,CAAC,cAAc,CAAC,QAAQ,CAAC,CAAA;QACvC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,cAAc,CAAC,OAAO,CAAC,CAAA;IAC/C,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,iCAAiC,EAAE,KAAK,IAAI,EAAE;QAC/C,MAAM,eAAe,GAA6B,EAAE,CAAA;QACpD,MAAM,OAAO,GAAkB;YAC7B,OAAO,EAAE,EAAE,CAAC,EAAE,CAAC,KAAK,IAAoB,EAAE,GAAG,MAAM,IAAI,KAAK,CAAC,cAAc,CAAC,CAAA,CAAC,CAAC,CAAC;YAC/E,MAAM,EAAE,EAAE,CAAC,EAAE,CAAC,KAAK,EAAE,GAAmB,EAAkC,EAAE;gBAC1E,eAAe,CAAC,IAAI,CAAC,GAAG,CAAC,OAAO,IAAI,EAAE,CAAC,CAAA;gBACvC,OAAO,EAAE,MAAM,EAAE,GAAG,EAAE,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,iBAAiB,CAAC,EAAE,CAAC,EAAE,CAAA;YAClE,CAAC,CAAC;SACH,CAAA;QAED,MAAM,WAAW,GAAgB;YAC/B,eAAe,EAAE,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;gBACzB,GAAG,GAAG;gBACN,OAAO,EAAE,EAAE,GAAG,GAAG,CAAC,OAAO,EAAE,OAAO,EAAE,EAAE,cAAc,EAAE,eAAe,EAAE,EAAE;aAC1E,CAAC;SACH,CAAA;QAED,MAAM,MAAM,GAAG,YAAY,CAAC;YAC1B,OAAO;YACP,QAAQ,EAAE,yBAAyB;YACnC,KAAK,EAAE,WAAW;YAClB,MAAM,EAAE,CAAC,QAAwB,EAAE,EAAE,CAAC,CAAC;gBACrC,OAAO,EAAE;oBACP,KAAK,EAAE,GAAG,EAAE,CAAC,QAAQ,CAAC,MAAM,CAAe,oBAAoB,EAAE,CAAC;iBACnE;aACF,CAAC;SACH,CAAC,CAAA;QAEF,MAAM,MAAM,GAAG,MAAM,CAAC,OAAO,CAAC,KAAK,EAAE,CAAA;QACrC,IAAI,KAAK,EAAE,MAAM,CAAC,IAAI,MAAM,EAAE,CAAC,CAAC,WAAW,CAAC,CAAC;QAE7C,MAAM,CAAC,eAAe,CAAC,CAAC,CAAC,EAAE,CAAC,cAAc,CAAC,CAAC,CAAC,IAAI,CAAC,eAAe,CAAC,CAAA;IACpE,CAAC,CAAC,CAAA;IAEF,EAAE,CAAC,+CAA+C,EAAE,KAAK,IAAI,EAAE;QAC7D,+EAA+E;QAC/E,MAAM,EAAE,kBAAkB,EAAE,GAAG,EAAE,GAAG,MAAM,MAAM,CAAC,YAAY,CAAC,CAAA;QAC9D,MAAM,CAAC,GAAG,CAAC,CAAC,WAAW,EAAE,CAAA;IAC3B,CAAC,CAAC,CAAA;AACJ,CAAC,CAAC,CAAA"}
@@ -1,13 +0,0 @@
1
- import type { AdapterRequest, CallDescriptor } from './types.js';
2
- /**
3
- * Replaces `:paramName` segments in `path` with URI-encoded values from `params`.
4
- * Throws `ClientPathParamError` if a required segment is missing from `params`.
5
- */
6
- export declare function interpolatePath(path: string, params: Record<string, unknown>, procedureName: string): string;
7
- /**
8
- * Builds an `AdapterRequest` from a `CallDescriptor` and a base URL.
9
- *
10
- * - `kind === 'rpc'` or `kind === 'stream'`: params are flat — sent as the JSON body.
11
- * - `kind === 'api'`: params are structured channels — `pathParams`, `query`, `body`, `headers`.
12
- */
13
- export declare function buildAdapterRequest(descriptor: CallDescriptor, basePath: string): AdapterRequest;
@@ -1,53 +0,0 @@
1
- import { ClientPathParamError } from './errors.js';
2
- /**
3
- * Replaces `:paramName` segments in `path` with URI-encoded values from `params`.
4
- * Throws `ClientPathParamError` if a required segment is missing from `params`.
5
- */
6
- export function interpolatePath(path, params, procedureName) {
7
- return path.replace(/:([A-Za-z_][A-Za-z0-9_]*)/g, (_match, key) => {
8
- const value = params[key];
9
- if (value === undefined || value === null) {
10
- throw new ClientPathParamError(key, path, procedureName);
11
- }
12
- return encodeURIComponent(String(value));
13
- });
14
- }
15
- /**
16
- * Builds an `AdapterRequest` from a `CallDescriptor` and a base URL.
17
- *
18
- * - `kind === 'rpc'` or `kind === 'stream'`: params are flat — sent as the JSON body.
19
- * - `kind === 'api'`: params are structured channels — `pathParams`, `query`, `body`, `headers`.
20
- */
21
- export function buildAdapterRequest(descriptor, basePath) {
22
- const { name, path, method, kind, params } = descriptor;
23
- if (kind === 'rpc' || kind === 'stream') {
24
- return {
25
- url: `${basePath}${path}`,
26
- method,
27
- body: params,
28
- };
29
- }
30
- // kind === 'api' — params are structured channels
31
- const structured = (params ?? {});
32
- // Interpolate path params
33
- const interpolatedPath = structured.pathParams
34
- ? interpolatePath(path, structured.pathParams, name)
35
- : path;
36
- // Build query string
37
- let url = `${basePath}${interpolatedPath}`;
38
- if (structured.query && Object.keys(structured.query).length > 0) {
39
- const searchParams = new URLSearchParams(Object.entries(structured.query).map(([k, v]) => [k, String(v)]));
40
- url = `${url}?${searchParams.toString()}`;
41
- }
42
- // Build headers
43
- const headers = structured.headers && Object.keys(structured.headers).length > 0
44
- ? structured.headers
45
- : undefined;
46
- return {
47
- url,
48
- method,
49
- headers,
50
- body: structured.body,
51
- };
52
- }
53
- //# sourceMappingURL=request-builder.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"request-builder.js","sourceRoot":"","sources":["../../../src/client/request-builder.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAA;AAGlD;;;GAGG;AACH,MAAM,UAAU,eAAe,CAC7B,IAAY,EACZ,MAA+B,EAC/B,aAAqB;IAErB,OAAO,IAAI,CAAC,OAAO,CAAC,4BAA4B,EAAE,CAAC,MAAM,EAAE,GAAW,EAAE,EAAE;QACxE,MAAM,KAAK,GAAG,MAAM,CAAC,GAAG,CAAC,CAAA;QACzB,IAAI,KAAK,KAAK,SAAS,IAAI,KAAK,KAAK,IAAI,EAAE,CAAC;YAC1C,MAAM,IAAI,oBAAoB,CAAC,GAAG,EAAE,IAAI,EAAE,aAAa,CAAC,CAAA;QAC1D,CAAC;QACD,OAAO,kBAAkB,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAA;IAC1C,CAAC,CAAC,CAAA;AACJ,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,mBAAmB,CAAC,UAA0B,EAAE,QAAgB;IAC9E,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,UAAU,CAAA;IAEvD,IAAI,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,QAAQ,EAAE,CAAC;QACxC,OAAO;YACL,GAAG,EAAE,GAAG,QAAQ,GAAG,IAAI,EAAE;YACzB,MAAM;YACN,IAAI,EAAE,MAAM;SACb,CAAA;IACH,CAAC;IAED,kDAAkD;IAClD,MAAM,UAAU,GAAG,CAAC,MAAM,IAAI,EAAE,CAK/B,CAAA;IAED,0BAA0B;IAC1B,MAAM,gBAAgB,GAAG,UAAU,CAAC,UAAU;QAC5C,CAAC,CAAC,eAAe,CAAC,IAAI,EAAE,UAAU,CAAC,UAAU,EAAE,IAAI,CAAC;QACpD,CAAC,CAAC,IAAI,CAAA;IAER,qBAAqB;IACrB,IAAI,GAAG,GAAG,GAAG,QAAQ,GAAG,gBAAgB,EAAE,CAAA;IAC1C,IAAI,UAAU,CAAC,KAAK,IAAI,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACjE,MAAM,YAAY,GAAG,IAAI,eAAe,CACtC,MAAM,CAAC,OAAO,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CACjE,CAAA;QACD,GAAG,GAAG,GAAG,GAAG,IAAI,YAAY,CAAC,QAAQ,EAAE,EAAE,CAAA;IAC3C,CAAC;IAED,gBAAgB;IAChB,MAAM,OAAO,GACX,UAAU,CAAC,OAAO,IAAI,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,MAAM,GAAG,CAAC;QAC9D,CAAC,CAAC,UAAU,CAAC,OAAO;QACpB,CAAC,CAAC,SAAS,CAAA;IAEf,OAAO;QACL,GAAG;QACH,MAAM;QACN,OAAO;QACP,IAAI,EAAE,UAAU,CAAC,IAAI;KACtB,CAAA;AACH,CAAC"}
@@ -1 +0,0 @@
1
- export {};