ts-procedures 5.13.0 → 5.15.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 (249) hide show
  1. package/agent_config/claude-code/agents/ts-procedures-architect.md +0 -1
  2. package/agent_config/claude-code/skills/ts-procedures/anti-patterns.md +0 -25
  3. package/agent_config/claude-code/skills/ts-procedures/api-reference.md +26 -4
  4. package/agent_config/claude-code/skills/ts-procedures/patterns.md +2 -1
  5. package/agent_config/claude-code/skills/ts-procedures-scaffold/templates/client.md +3 -0
  6. package/agent_config/claude-code/skills/ts-procedures-scaffold/templates/hono-api.md +1 -1
  7. package/agent_config/copilot/copilot-instructions.md +2 -2
  8. package/agent_config/cursor/cursorrules +2 -2
  9. package/build/codegen/bin/cli.d.ts +2 -0
  10. package/build/codegen/bin/cli.js +11 -0
  11. package/build/codegen/bin/cli.js.map +1 -1
  12. package/build/codegen/bin/cli.test.js +30 -0
  13. package/build/codegen/bin/cli.test.js.map +1 -1
  14. package/build/codegen/index.d.ts +1 -0
  15. package/build/codegen/index.js +1 -0
  16. package/build/codegen/index.js.map +1 -1
  17. package/build/codegen/pipeline.d.ts +1 -0
  18. package/build/codegen/pipeline.js +8 -2
  19. package/build/codegen/pipeline.js.map +1 -1
  20. package/build/codegen/pipeline.test.js +34 -1
  21. package/build/codegen/pipeline.test.js.map +1 -1
  22. package/build/implementations/http/hono-api/index.d.ts +15 -3
  23. package/build/implementations/http/hono-api/index.js +3 -32
  24. package/build/implementations/http/hono-api/index.js.map +1 -1
  25. package/build/implementations/http/hono-api/index.test.js +6 -6
  26. package/build/implementations/http/hono-api/index.test.js.map +1 -1
  27. package/docs/client-and-codegen.md +2 -0
  28. package/package.json +2 -3
  29. package/src/codegen/bin/cli.test.ts +35 -0
  30. package/src/codegen/bin/cli.ts +11 -0
  31. package/src/codegen/index.ts +2 -0
  32. package/src/codegen/pipeline.test.ts +46 -1
  33. package/src/codegen/pipeline.ts +9 -2
  34. package/src/implementations/http/README.md +2 -0
  35. package/src/implementations/http/hono-api/index.test.ts +6 -6
  36. package/src/implementations/http/hono-api/index.ts +17 -36
  37. package/build/src/client/call.d.ts +0 -14
  38. package/build/src/client/call.js +0 -47
  39. package/build/src/client/call.js.map +0 -1
  40. package/build/src/client/call.test.d.ts +0 -1
  41. package/build/src/client/call.test.js +0 -124
  42. package/build/src/client/call.test.js.map +0 -1
  43. package/build/src/client/errors.d.ts +0 -25
  44. package/build/src/client/errors.js +0 -33
  45. package/build/src/client/errors.js.map +0 -1
  46. package/build/src/client/errors.test.d.ts +0 -1
  47. package/build/src/client/errors.test.js +0 -41
  48. package/build/src/client/errors.test.js.map +0 -1
  49. package/build/src/client/fetch-adapter.d.ts +0 -12
  50. package/build/src/client/fetch-adapter.js +0 -156
  51. package/build/src/client/fetch-adapter.js.map +0 -1
  52. package/build/src/client/fetch-adapter.test.d.ts +0 -1
  53. package/build/src/client/fetch-adapter.test.js +0 -271
  54. package/build/src/client/fetch-adapter.test.js.map +0 -1
  55. package/build/src/client/hooks.d.ts +0 -17
  56. package/build/src/client/hooks.js +0 -40
  57. package/build/src/client/hooks.js.map +0 -1
  58. package/build/src/client/hooks.test.d.ts +0 -1
  59. package/build/src/client/hooks.test.js +0 -163
  60. package/build/src/client/hooks.test.js.map +0 -1
  61. package/build/src/client/index.d.ts +0 -22
  62. package/build/src/client/index.js +0 -67
  63. package/build/src/client/index.js.map +0 -1
  64. package/build/src/client/index.test.d.ts +0 -1
  65. package/build/src/client/index.test.js +0 -231
  66. package/build/src/client/index.test.js.map +0 -1
  67. package/build/src/client/request-builder.d.ts +0 -13
  68. package/build/src/client/request-builder.js +0 -53
  69. package/build/src/client/request-builder.js.map +0 -1
  70. package/build/src/client/request-builder.test.d.ts +0 -1
  71. package/build/src/client/request-builder.test.js +0 -160
  72. package/build/src/client/request-builder.test.js.map +0 -1
  73. package/build/src/client/stream.d.ts +0 -27
  74. package/build/src/client/stream.js +0 -118
  75. package/build/src/client/stream.js.map +0 -1
  76. package/build/src/client/stream.test.d.ts +0 -1
  77. package/build/src/client/stream.test.js +0 -228
  78. package/build/src/client/stream.test.js.map +0 -1
  79. package/build/src/client/types.d.ts +0 -78
  80. package/build/src/client/types.js +0 -3
  81. package/build/src/client/types.js.map +0 -1
  82. package/build/src/codegen/bin/cli.d.ts +0 -45
  83. package/build/src/codegen/bin/cli.js +0 -246
  84. package/build/src/codegen/bin/cli.js.map +0 -1
  85. package/build/src/codegen/bin/cli.test.d.ts +0 -1
  86. package/build/src/codegen/bin/cli.test.js +0 -220
  87. package/build/src/codegen/bin/cli.test.js.map +0 -1
  88. package/build/src/codegen/constants.d.ts +0 -1
  89. package/build/src/codegen/constants.js +0 -2
  90. package/build/src/codegen/constants.js.map +0 -1
  91. package/build/src/codegen/e2e.test.d.ts +0 -1
  92. package/build/src/codegen/e2e.test.js +0 -464
  93. package/build/src/codegen/e2e.test.js.map +0 -1
  94. package/build/src/codegen/emit-client-runtime.d.ts +0 -9
  95. package/build/src/codegen/emit-client-runtime.js +0 -99
  96. package/build/src/codegen/emit-client-runtime.js.map +0 -1
  97. package/build/src/codegen/emit-client-runtime.test.d.ts +0 -1
  98. package/build/src/codegen/emit-client-runtime.test.js +0 -78
  99. package/build/src/codegen/emit-client-runtime.test.js.map +0 -1
  100. package/build/src/codegen/emit-client-types.d.ts +0 -8
  101. package/build/src/codegen/emit-client-types.js +0 -25
  102. package/build/src/codegen/emit-client-types.js.map +0 -1
  103. package/build/src/codegen/emit-client-types.test.d.ts +0 -1
  104. package/build/src/codegen/emit-client-types.test.js +0 -33
  105. package/build/src/codegen/emit-client-types.test.js.map +0 -1
  106. package/build/src/codegen/emit-errors.d.ts +0 -19
  107. package/build/src/codegen/emit-errors.js +0 -59
  108. package/build/src/codegen/emit-errors.js.map +0 -1
  109. package/build/src/codegen/emit-errors.test.d.ts +0 -1
  110. package/build/src/codegen/emit-errors.test.js +0 -175
  111. package/build/src/codegen/emit-errors.test.js.map +0 -1
  112. package/build/src/codegen/emit-index.d.ts +0 -12
  113. package/build/src/codegen/emit-index.js +0 -41
  114. package/build/src/codegen/emit-index.js.map +0 -1
  115. package/build/src/codegen/emit-index.test.d.ts +0 -1
  116. package/build/src/codegen/emit-index.test.js +0 -106
  117. package/build/src/codegen/emit-index.test.js.map +0 -1
  118. package/build/src/codegen/emit-scope.d.ts +0 -15
  119. package/build/src/codegen/emit-scope.js +0 -299
  120. package/build/src/codegen/emit-scope.js.map +0 -1
  121. package/build/src/codegen/emit-scope.test.d.ts +0 -1
  122. package/build/src/codegen/emit-scope.test.js +0 -559
  123. package/build/src/codegen/emit-scope.test.js.map +0 -1
  124. package/build/src/codegen/emit-types.d.ts +0 -43
  125. package/build/src/codegen/emit-types.js +0 -111
  126. package/build/src/codegen/emit-types.js.map +0 -1
  127. package/build/src/codegen/emit-types.test.d.ts +0 -1
  128. package/build/src/codegen/emit-types.test.js +0 -184
  129. package/build/src/codegen/emit-types.test.js.map +0 -1
  130. package/build/src/codegen/group-routes.d.ts +0 -23
  131. package/build/src/codegen/group-routes.js +0 -46
  132. package/build/src/codegen/group-routes.js.map +0 -1
  133. package/build/src/codegen/group-routes.test.d.ts +0 -1
  134. package/build/src/codegen/group-routes.test.js +0 -131
  135. package/build/src/codegen/group-routes.test.js.map +0 -1
  136. package/build/src/codegen/index.d.ts +0 -15
  137. package/build/src/codegen/index.js +0 -16
  138. package/build/src/codegen/index.js.map +0 -1
  139. package/build/src/codegen/naming.d.ts +0 -7
  140. package/build/src/codegen/naming.js +0 -21
  141. package/build/src/codegen/naming.js.map +0 -1
  142. package/build/src/codegen/naming.test.d.ts +0 -1
  143. package/build/src/codegen/naming.test.js +0 -40
  144. package/build/src/codegen/naming.test.js.map +0 -1
  145. package/build/src/codegen/pipeline.d.ts +0 -17
  146. package/build/src/codegen/pipeline.js +0 -78
  147. package/build/src/codegen/pipeline.js.map +0 -1
  148. package/build/src/codegen/pipeline.test.d.ts +0 -1
  149. package/build/src/codegen/pipeline.test.js +0 -269
  150. package/build/src/codegen/pipeline.test.js.map +0 -1
  151. package/build/src/codegen/resolve-envelope.d.ts +0 -7
  152. package/build/src/codegen/resolve-envelope.js +0 -46
  153. package/build/src/codegen/resolve-envelope.js.map +0 -1
  154. package/build/src/codegen/resolve-envelope.test.d.ts +0 -1
  155. package/build/src/codegen/resolve-envelope.test.js +0 -69
  156. package/build/src/codegen/resolve-envelope.test.js.map +0 -1
  157. package/build/src/errors.d.ts +0 -33
  158. package/build/src/errors.js +0 -91
  159. package/build/src/errors.js.map +0 -1
  160. package/build/src/errors.test.d.ts +0 -1
  161. package/build/src/errors.test.js +0 -122
  162. package/build/src/errors.test.js.map +0 -1
  163. package/build/src/exports.d.ts +0 -7
  164. package/build/src/exports.js +0 -8
  165. package/build/src/exports.js.map +0 -1
  166. package/build/src/implementations/http/doc-registry.d.ts +0 -12
  167. package/build/src/implementations/http/doc-registry.js +0 -114
  168. package/build/src/implementations/http/doc-registry.js.map +0 -1
  169. package/build/src/implementations/http/doc-registry.test.d.ts +0 -1
  170. package/build/src/implementations/http/doc-registry.test.js +0 -347
  171. package/build/src/implementations/http/doc-registry.test.js.map +0 -1
  172. package/build/src/implementations/http/express-rpc/index.d.ts +0 -94
  173. package/build/src/implementations/http/express-rpc/index.js +0 -185
  174. package/build/src/implementations/http/express-rpc/index.js.map +0 -1
  175. package/build/src/implementations/http/express-rpc/index.test.d.ts +0 -1
  176. package/build/src/implementations/http/express-rpc/index.test.js +0 -684
  177. package/build/src/implementations/http/express-rpc/index.test.js.map +0 -1
  178. package/build/src/implementations/http/express-rpc/types.d.ts +0 -11
  179. package/build/src/implementations/http/express-rpc/types.js +0 -2
  180. package/build/src/implementations/http/express-rpc/types.js.map +0 -1
  181. package/build/src/implementations/http/hono-api/index.d.ts +0 -102
  182. package/build/src/implementations/http/hono-api/index.js +0 -341
  183. package/build/src/implementations/http/hono-api/index.js.map +0 -1
  184. package/build/src/implementations/http/hono-api/index.test.d.ts +0 -1
  185. package/build/src/implementations/http/hono-api/index.test.js +0 -992
  186. package/build/src/implementations/http/hono-api/index.test.js.map +0 -1
  187. package/build/src/implementations/http/hono-api/types.d.ts +0 -13
  188. package/build/src/implementations/http/hono-api/types.js +0 -2
  189. package/build/src/implementations/http/hono-api/types.js.map +0 -1
  190. package/build/src/implementations/http/hono-rpc/index.d.ts +0 -92
  191. package/build/src/implementations/http/hono-rpc/index.js +0 -161
  192. package/build/src/implementations/http/hono-rpc/index.js.map +0 -1
  193. package/build/src/implementations/http/hono-rpc/index.test.d.ts +0 -1
  194. package/build/src/implementations/http/hono-rpc/index.test.js +0 -803
  195. package/build/src/implementations/http/hono-rpc/index.test.js.map +0 -1
  196. package/build/src/implementations/http/hono-rpc/types.d.ts +0 -11
  197. package/build/src/implementations/http/hono-rpc/types.js +0 -2
  198. package/build/src/implementations/http/hono-rpc/types.js.map +0 -1
  199. package/build/src/implementations/http/hono-stream/index.d.ts +0 -120
  200. package/build/src/implementations/http/hono-stream/index.js +0 -309
  201. package/build/src/implementations/http/hono-stream/index.js.map +0 -1
  202. package/build/src/implementations/http/hono-stream/index.test.d.ts +0 -1
  203. package/build/src/implementations/http/hono-stream/index.test.js +0 -1356
  204. package/build/src/implementations/http/hono-stream/index.test.js.map +0 -1
  205. package/build/src/implementations/http/hono-stream/types.d.ts +0 -15
  206. package/build/src/implementations/http/hono-stream/types.js +0 -2
  207. package/build/src/implementations/http/hono-stream/types.js.map +0 -1
  208. package/build/src/implementations/types.d.ts +0 -142
  209. package/build/src/implementations/types.js +0 -2
  210. package/build/src/implementations/types.js.map +0 -1
  211. package/build/src/index.d.ts +0 -165
  212. package/build/src/index.js +0 -253
  213. package/build/src/index.js.map +0 -1
  214. package/build/src/index.test.d.ts +0 -1
  215. package/build/src/index.test.js +0 -890
  216. package/build/src/index.test.js.map +0 -1
  217. package/build/src/schema/compute-schema.d.ts +0 -35
  218. package/build/src/schema/compute-schema.js +0 -41
  219. package/build/src/schema/compute-schema.js.map +0 -1
  220. package/build/src/schema/compute-schema.test.d.ts +0 -1
  221. package/build/src/schema/compute-schema.test.js +0 -107
  222. package/build/src/schema/compute-schema.test.js.map +0 -1
  223. package/build/src/schema/extract-json-schema.d.ts +0 -2
  224. package/build/src/schema/extract-json-schema.js +0 -12
  225. package/build/src/schema/extract-json-schema.js.map +0 -1
  226. package/build/src/schema/extract-json-schema.test.d.ts +0 -1
  227. package/build/src/schema/extract-json-schema.test.js +0 -23
  228. package/build/src/schema/extract-json-schema.test.js.map +0 -1
  229. package/build/src/schema/parser.d.ts +0 -28
  230. package/build/src/schema/parser.js +0 -170
  231. package/build/src/schema/parser.js.map +0 -1
  232. package/build/src/schema/parser.test.d.ts +0 -1
  233. package/build/src/schema/parser.test.js +0 -120
  234. package/build/src/schema/parser.test.js.map +0 -1
  235. package/build/src/schema/resolve-schema-lib.d.ts +0 -12
  236. package/build/src/schema/resolve-schema-lib.js +0 -11
  237. package/build/src/schema/resolve-schema-lib.js.map +0 -1
  238. package/build/src/schema/resolve-schema-lib.test.d.ts +0 -1
  239. package/build/src/schema/resolve-schema-lib.test.js +0 -17
  240. package/build/src/schema/resolve-schema-lib.test.js.map +0 -1
  241. package/build/src/schema/types.d.ts +0 -8
  242. package/build/src/schema/types.js +0 -2
  243. package/build/src/schema/types.js.map +0 -1
  244. package/build/src/stack-utils.d.ts +0 -25
  245. package/build/src/stack-utils.js +0 -95
  246. package/build/src/stack-utils.js.map +0 -1
  247. package/build/src/stack-utils.test.d.ts +0 -1
  248. package/build/src/stack-utils.test.js +0 -80
  249. package/build/src/stack-utils.test.js.map +0 -1
@@ -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":"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"}
@@ -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":"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"}
@@ -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 {};