ts-procedures 6.2.0 → 7.0.0-beta.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.
- package/README.md +2 -0
- package/agent_config/claude-code/skills/ts-procedures/SKILL.md +2 -1
- package/agent_config/claude-code/skills/ts-procedures/anti-patterns.md +38 -1
- package/agent_config/claude-code/skills/ts-procedures/api-reference.md +215 -3
- package/agent_config/claude-code/skills/ts-procedures/patterns.md +60 -2
- package/agent_config/claude-code/skills/ts-procedures-scaffold/templates/client.md +1 -1
- package/agent_config/copilot/copilot-instructions.md +3 -0
- package/agent_config/cursor/cursorrules +3 -0
- package/build/client/augment-error-map.test-d.d.ts +10 -0
- package/build/client/augment-error-map.test-d.js +14 -0
- package/build/client/augment-error-map.test-d.js.map +1 -0
- package/build/client/call.d.ts +14 -2
- package/build/client/call.js +96 -9
- package/build/client/call.js.map +1 -1
- package/build/client/call.test.js +50 -1
- package/build/client/call.test.js.map +1 -1
- package/build/client/classify-error.d.ts +11 -0
- package/build/client/classify-error.js +49 -0
- package/build/client/classify-error.js.map +1 -0
- package/build/client/classify-error.test.d.ts +1 -0
- package/build/client/classify-error.test.js +55 -0
- package/build/client/classify-error.test.js.map +1 -0
- package/build/client/error-dispatch.d.ts +1 -1
- package/build/client/error-dispatch.js +1 -1
- package/build/client/errors.d.ts +55 -4
- package/build/client/errors.js +54 -7
- package/build/client/errors.js.map +1 -1
- package/build/client/errors.test.js +89 -4
- package/build/client/errors.test.js.map +1 -1
- package/build/client/fetch-adapter.d.ts +2 -1
- package/build/client/fetch-adapter.js +2 -1
- package/build/client/fetch-adapter.js.map +1 -1
- package/build/client/fetch-adapter.test.js +12 -0
- package/build/client/fetch-adapter.test.js.map +1 -1
- package/build/client/index.d.ts +5 -3
- package/build/client/index.js +15 -3
- package/build/client/index.js.map +1 -1
- package/build/client/resolve-options.d.ts +32 -1
- package/build/client/resolve-options.js +32 -16
- package/build/client/resolve-options.js.map +1 -1
- package/build/client/resolve-options.test.js +67 -6
- package/build/client/resolve-options.test.js.map +1 -1
- package/build/client/result-type.test-d.d.ts +1 -0
- package/build/client/result-type.test-d.js +28 -0
- package/build/client/result-type.test-d.js.map +1 -0
- package/build/client/safe-call.test.d.ts +1 -0
- package/build/client/safe-call.test.js +137 -0
- package/build/client/safe-call.test.js.map +1 -0
- package/build/client/stream.d.ts +1 -1
- package/build/client/stream.js +22 -8
- package/build/client/stream.js.map +1 -1
- package/build/client/stream.test.js +11 -1
- package/build/client/stream.test.js.map +1 -1
- package/build/client/types.d.ts +96 -3
- package/build/codegen/bundle-size.test.d.ts +1 -0
- package/build/codegen/bundle-size.test.js +68 -0
- package/build/codegen/bundle-size.test.js.map +1 -0
- package/build/codegen/e2e.test.js +103 -1
- package/build/codegen/e2e.test.js.map +1 -1
- package/build/codegen/emit-client-runtime.js +7 -0
- package/build/codegen/emit-client-runtime.js.map +1 -1
- package/build/codegen/emit-client-runtime.test.js +6 -2
- package/build/codegen/emit-client-runtime.test.js.map +1 -1
- package/build/codegen/emit-client-types.d.ts +7 -2
- package/build/codegen/emit-client-types.js +29 -8
- package/build/codegen/emit-client-types.js.map +1 -1
- package/build/codegen/emit-client-types.test.js +20 -8
- package/build/codegen/emit-client-types.test.js.map +1 -1
- package/build/codegen/emit-errors.d.ts +1 -1
- package/build/codegen/emit-errors.js +1 -1
- package/build/codegen/emit-index.js +1 -1
- package/build/codegen/emit-index.js.map +1 -1
- package/build/codegen/emit-scope.js +94 -26
- package/build/codegen/emit-scope.js.map +1 -1
- package/build/codegen/emit-scope.test.js +297 -2
- package/build/codegen/emit-scope.test.js.map +1 -1
- package/docs/client-and-codegen.md +77 -7
- package/docs/client-error-handling.md +357 -0
- package/docs/superpowers/plans/2026-04-29-safe-result-api.md +2293 -0
- package/docs/superpowers/specs/2026-04-29-safe-result-api-design.md +324 -0
- package/package.json +1 -1
- package/src/client/augment-error-map.test-d.ts +22 -0
- package/src/client/call.test.ts +65 -1
- package/src/client/call.ts +111 -9
- package/src/client/classify-error.test.ts +65 -0
- package/src/client/classify-error.ts +59 -0
- package/src/client/error-dispatch.ts +1 -1
- package/src/client/errors.test.ts +108 -4
- package/src/client/errors.ts +70 -7
- package/src/client/fetch-adapter.test.ts +15 -0
- package/src/client/fetch-adapter.ts +5 -2
- package/src/client/index.ts +39 -3
- package/src/client/resolve-options.test.ts +83 -5
- package/src/client/resolve-options.ts +61 -16
- package/src/client/result-type.test-d.ts +51 -0
- package/src/client/safe-call.test.ts +157 -0
- package/src/client/stream.test.ts +13 -1
- package/src/client/stream.ts +25 -8
- package/src/client/types.ts +112 -3
- package/src/codegen/bundle-size.test.ts +74 -0
- package/src/codegen/e2e.test.ts +108 -1
- package/src/codegen/emit-client-runtime.test.ts +7 -2
- package/src/codegen/emit-client-runtime.ts +7 -0
- package/src/codegen/emit-client-types.test.ts +22 -7
- package/src/codegen/emit-client-types.ts +35 -10
- package/src/codegen/emit-errors.ts +1 -1
- package/src/codegen/emit-index.ts +1 -1
- package/src/codegen/emit-scope.test.ts +324 -2
- package/src/codegen/emit-scope.ts +98 -36
|
@@ -0,0 +1,137 @@
|
|
|
1
|
+
import { describe, it, expect, vi } from 'vitest';
|
|
2
|
+
import { executeSafeCall } from './call.js';
|
|
3
|
+
import { ClientHttpError, ClientNetworkError, ClientTimeoutError, ClientAbortError, ClientPathParamError, } from './errors.js';
|
|
4
|
+
const baseDescriptor = {
|
|
5
|
+
name: 'GetUser', scope: 'users', path: '/users/:id', method: 'GET',
|
|
6
|
+
kind: 'rpc', params: { id: '42' },
|
|
7
|
+
};
|
|
8
|
+
const ok = (body) => ({
|
|
9
|
+
request: vi.fn(async () => ({ status: 200, headers: {}, body })),
|
|
10
|
+
stream: vi.fn(async () => { throw new Error('n/a'); }),
|
|
11
|
+
});
|
|
12
|
+
const failWith = (err) => ({
|
|
13
|
+
request: vi.fn(async () => { throw err; }),
|
|
14
|
+
stream: vi.fn(async () => { throw new Error('n/a'); }),
|
|
15
|
+
});
|
|
16
|
+
describe('executeSafeCall', () => {
|
|
17
|
+
it('returns ok=true with value on success', async () => {
|
|
18
|
+
const r = await executeSafeCall({
|
|
19
|
+
descriptor: baseDescriptor,
|
|
20
|
+
basePath: 'https://api.x',
|
|
21
|
+
adapter: ok({ id: '42' }),
|
|
22
|
+
hooks: {},
|
|
23
|
+
});
|
|
24
|
+
expect(r.ok).toBe(true);
|
|
25
|
+
if (r.ok)
|
|
26
|
+
expect(r.value).toEqual({ id: '42' });
|
|
27
|
+
});
|
|
28
|
+
it("returns kind='http' on non-2xx without registry match", async () => {
|
|
29
|
+
const r = await executeSafeCall({
|
|
30
|
+
descriptor: baseDescriptor,
|
|
31
|
+
basePath: 'https://api.x',
|
|
32
|
+
adapter: {
|
|
33
|
+
request: vi.fn(async () => ({ status: 500, headers: {}, body: { msg: 'oops' } })),
|
|
34
|
+
stream: vi.fn(async () => { throw new Error('n/a'); }),
|
|
35
|
+
},
|
|
36
|
+
hooks: {},
|
|
37
|
+
});
|
|
38
|
+
expect(r.ok).toBe(false);
|
|
39
|
+
if (!r.ok) {
|
|
40
|
+
expect(r.kind).toBe('http');
|
|
41
|
+
expect(r.error).toBeInstanceOf(ClientHttpError);
|
|
42
|
+
}
|
|
43
|
+
});
|
|
44
|
+
it("returns kind='network' on TypeError", async () => {
|
|
45
|
+
const r = await executeSafeCall({
|
|
46
|
+
descriptor: baseDescriptor,
|
|
47
|
+
basePath: 'https://api.x',
|
|
48
|
+
adapter: failWith(new TypeError('Failed to fetch')),
|
|
49
|
+
hooks: {},
|
|
50
|
+
});
|
|
51
|
+
expect(r.ok).toBe(false);
|
|
52
|
+
if (!r.ok) {
|
|
53
|
+
expect(r.kind).toBe('network');
|
|
54
|
+
expect(r.error).toBeInstanceOf(ClientNetworkError);
|
|
55
|
+
}
|
|
56
|
+
});
|
|
57
|
+
it("returns kind='timeout' when timeout fires", async () => {
|
|
58
|
+
// Simulate fetch-style abort wait, mirroring Task 6's fix
|
|
59
|
+
const r = await executeSafeCall({
|
|
60
|
+
descriptor: baseDescriptor,
|
|
61
|
+
basePath: 'https://api.x',
|
|
62
|
+
adapter: {
|
|
63
|
+
request: vi.fn(async (req) => {
|
|
64
|
+
await new Promise((_resolve, reject) => {
|
|
65
|
+
req.signal?.addEventListener('abort', () => reject(new DOMException('aborted', 'AbortError')), { once: true });
|
|
66
|
+
});
|
|
67
|
+
throw new Error('unreachable');
|
|
68
|
+
}),
|
|
69
|
+
stream: vi.fn(async () => { throw new Error('n/a'); }),
|
|
70
|
+
},
|
|
71
|
+
hooks: {},
|
|
72
|
+
options: { timeout: 1 },
|
|
73
|
+
});
|
|
74
|
+
expect(r.ok).toBe(false);
|
|
75
|
+
if (!r.ok) {
|
|
76
|
+
expect(r.kind).toBe('timeout');
|
|
77
|
+
expect(r.error).toBeInstanceOf(ClientTimeoutError);
|
|
78
|
+
}
|
|
79
|
+
});
|
|
80
|
+
it("returns kind='aborted' when user signal fires", async () => {
|
|
81
|
+
const ctrl = new AbortController();
|
|
82
|
+
ctrl.abort('user');
|
|
83
|
+
const r = await executeSafeCall({
|
|
84
|
+
descriptor: baseDescriptor,
|
|
85
|
+
basePath: 'https://api.x',
|
|
86
|
+
adapter: failWith(new DOMException('aborted', 'AbortError')),
|
|
87
|
+
hooks: {},
|
|
88
|
+
options: { signal: ctrl.signal },
|
|
89
|
+
});
|
|
90
|
+
if (!r.ok) {
|
|
91
|
+
expect(r.kind).toBe('aborted');
|
|
92
|
+
expect(r.error).toBeInstanceOf(ClientAbortError);
|
|
93
|
+
}
|
|
94
|
+
});
|
|
95
|
+
it("returns kind='usage' on pre-adapter ClientPathParamError, does NOT invoke onError", async () => {
|
|
96
|
+
// Spec contract: pre-adapter usage errors bypass the classifier AND the
|
|
97
|
+
// onError hook entirely. Path 1 of the three failure-source paths.
|
|
98
|
+
const seen = [];
|
|
99
|
+
const r = await executeSafeCall({
|
|
100
|
+
// path requires :id but params don't supply it
|
|
101
|
+
descriptor: { ...baseDescriptor, params: {} },
|
|
102
|
+
basePath: 'https://api.x',
|
|
103
|
+
adapter: ok({}),
|
|
104
|
+
hooks: { onError: ({ error }) => { seen.push(error); } },
|
|
105
|
+
});
|
|
106
|
+
if (!r.ok) {
|
|
107
|
+
expect(r.kind).toBe('usage');
|
|
108
|
+
expect(r.error).toBeInstanceOf(ClientPathParamError);
|
|
109
|
+
}
|
|
110
|
+
// onError must NOT fire — by design (per spec architectural decision #1).
|
|
111
|
+
expect(seen).toEqual([]);
|
|
112
|
+
});
|
|
113
|
+
it("returns kind='unknown' for unrecognized throws", async () => {
|
|
114
|
+
const r = await executeSafeCall({
|
|
115
|
+
descriptor: baseDescriptor,
|
|
116
|
+
basePath: 'https://api.x',
|
|
117
|
+
adapter: failWith('weird-string-throw'),
|
|
118
|
+
hooks: {},
|
|
119
|
+
});
|
|
120
|
+
if (!r.ok) {
|
|
121
|
+
expect(r.kind).toBe('unknown');
|
|
122
|
+
expect(r.error).toBe('weird-string-throw');
|
|
123
|
+
}
|
|
124
|
+
});
|
|
125
|
+
it('invokes onError hook on failure (cross-cutting telemetry)', async () => {
|
|
126
|
+
const seen = [];
|
|
127
|
+
const r = await executeSafeCall({
|
|
128
|
+
descriptor: baseDescriptor,
|
|
129
|
+
basePath: 'https://api.x',
|
|
130
|
+
adapter: failWith(new TypeError('x')),
|
|
131
|
+
hooks: { onError: ({ error }) => { seen.push(error); } },
|
|
132
|
+
});
|
|
133
|
+
expect(r.ok).toBe(false);
|
|
134
|
+
expect(seen[0]).toBeInstanceOf(ClientNetworkError);
|
|
135
|
+
});
|
|
136
|
+
});
|
|
137
|
+
//# sourceMappingURL=safe-call.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"safe-call.test.js","sourceRoot":"","sources":["../../src/client/safe-call.test.ts"],"names":[],"mappings":"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"}
|
package/build/client/stream.d.ts
CHANGED
|
@@ -31,7 +31,7 @@ export interface ExecuteStreamConfig {
|
|
|
31
31
|
* 4. Call adapter.stream()
|
|
32
32
|
* 5. On adapter error: run onError hooks, re-throw
|
|
33
33
|
* 6. Run onAfterResponse immediately (before iteration), body is null
|
|
34
|
-
* 7. If non-2xx: throw
|
|
34
|
+
* 7. If non-2xx: throw ClientHttpError
|
|
35
35
|
* 8. Return createTypedStream(streamResponse.body, descriptor.streamMode)
|
|
36
36
|
*/
|
|
37
37
|
export declare function executeStream<TYield, TReturn = void>(config: ExecuteStreamConfig): Promise<TypedStream<TYield, TReturn>>;
|
package/build/client/stream.js
CHANGED
|
@@ -1,8 +1,9 @@
|
|
|
1
1
|
import { buildAdapterRequest } from './request-builder.js';
|
|
2
2
|
import { runBeforeRequest, runAfterResponse, runOnError } from './hooks.js';
|
|
3
3
|
import { applyRequestOptions, resolveBasePath } from './resolve-options.js';
|
|
4
|
-
import {
|
|
4
|
+
import { ClientHttpError } from './errors.js';
|
|
5
5
|
import { dispatchTypedError } from './error-dispatch.js';
|
|
6
|
+
import { defaultClassifyError } from './classify-error.js';
|
|
6
7
|
// ── createTypedStream ─────────────────────────────────────
|
|
7
8
|
/**
|
|
8
9
|
* Wraps an AsyncIterable into a TypedStream.
|
|
@@ -77,7 +78,7 @@ export function createTypedStream(source, streamMode) {
|
|
|
77
78
|
* 4. Call adapter.stream()
|
|
78
79
|
* 5. On adapter error: run onError hooks, re-throw
|
|
79
80
|
* 6. Run onAfterResponse immediately (before iteration), body is null
|
|
80
|
-
* 7. If non-2xx: throw
|
|
81
|
+
* 7. If non-2xx: throw ClientHttpError
|
|
81
82
|
* 8. Return createTypedStream(streamResponse.body, descriptor.streamMode)
|
|
82
83
|
*/
|
|
83
84
|
export async function executeStream(config) {
|
|
@@ -86,7 +87,9 @@ export async function executeStream(config) {
|
|
|
86
87
|
const resolvedBasePath = resolveBasePath(defaults, options, basePath);
|
|
87
88
|
let request = buildAdapterRequest(descriptor, resolvedBasePath);
|
|
88
89
|
// 2. Apply request-level options (headers, signal, timeout, meta)
|
|
89
|
-
|
|
90
|
+
const applied = applyRequestOptions(request, defaults, options);
|
|
91
|
+
request = applied.request;
|
|
92
|
+
const signalSources = applied.signalSources;
|
|
90
93
|
// 3. Run before-request hooks
|
|
91
94
|
const beforeCtx = await runBeforeRequest({ procedureName: descriptor.name, scope: descriptor.scope, request }, hooks, options);
|
|
92
95
|
request = beforeCtx.request;
|
|
@@ -95,10 +98,21 @@ export async function executeStream(config) {
|
|
|
95
98
|
try {
|
|
96
99
|
streamResponse = await adapter.stream(request);
|
|
97
100
|
}
|
|
98
|
-
catch (
|
|
99
|
-
// 5. On adapter error:
|
|
100
|
-
|
|
101
|
-
|
|
101
|
+
catch (rawErr) {
|
|
102
|
+
// 5. On adapter error: classify (adapter > default > fallthrough), then run
|
|
103
|
+
// onError hooks with the normalized error, then throw.
|
|
104
|
+
const classifyCtx = {
|
|
105
|
+
procedureName: descriptor.name,
|
|
106
|
+
scope: descriptor.scope,
|
|
107
|
+
timeoutSignal: signalSources.timeoutSignal,
|
|
108
|
+
userSignal: signalSources.userSignal,
|
|
109
|
+
timeoutMs: signalSources.timeoutMs,
|
|
110
|
+
};
|
|
111
|
+
const classified = adapter.classifyError?.(rawErr, classifyCtx) ??
|
|
112
|
+
defaultClassifyError(rawErr, classifyCtx);
|
|
113
|
+
const finalError = classified?.error ?? rawErr;
|
|
114
|
+
await runOnError({ procedureName: descriptor.name, scope: descriptor.scope, request, error: finalError }, hooks, options);
|
|
115
|
+
throw finalError;
|
|
102
116
|
}
|
|
103
117
|
// Build an AdapterResponse shape for the hooks. For success the body is null
|
|
104
118
|
// (the actual data flows through the async iterable); for non-2xx the adapter
|
|
@@ -119,7 +133,7 @@ export async function executeStream(config) {
|
|
|
119
133
|
});
|
|
120
134
|
if (typed)
|
|
121
135
|
throw typed;
|
|
122
|
-
throw new
|
|
136
|
+
throw new ClientHttpError({
|
|
123
137
|
status: responseForHooks.status,
|
|
124
138
|
headers: responseForHooks.headers,
|
|
125
139
|
body: responseForHooks.body,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"stream.js","sourceRoot":"","sources":["../../src/client/stream.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,MAAM,sBAAsB,CAAA;AAC1D,OAAO,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,UAAU,EAAE,MAAM,YAAY,CAAA;AAC3E,OAAO,EAAE,mBAAmB,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAA;AAC3E,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"stream.js","sourceRoot":"","sources":["../../src/client/stream.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { describe, it, expect, vi } from 'vitest';
|
|
2
2
|
import { createTypedStream, executeStream } from './stream.js';
|
|
3
|
-
import { ClientRequestError } from './errors.js';
|
|
3
|
+
import { ClientRequestError, ClientNetworkError } from './errors.js';
|
|
4
4
|
// ── helpers ───────────────────────────────────────────────
|
|
5
5
|
function makeDescriptor(overrides) {
|
|
6
6
|
return {
|
|
@@ -281,4 +281,14 @@ describe('executeStream', () => {
|
|
|
281
281
|
expect(observedMeta).toEqual({ traceId: 'stream-trace' });
|
|
282
282
|
});
|
|
283
283
|
});
|
|
284
|
+
// ── executeStream classifier integration ──────────────────
|
|
285
|
+
describe('executeStream classifier integration', () => {
|
|
286
|
+
it('classifies pre-stream TypeError as ClientNetworkError', async () => {
|
|
287
|
+
const adapter = {
|
|
288
|
+
request: vi.fn(async () => { throw new Error('n/a'); }),
|
|
289
|
+
stream: vi.fn(async () => { throw new TypeError('Failed to fetch'); }),
|
|
290
|
+
};
|
|
291
|
+
await expect(run({ adapter })).rejects.toBeInstanceOf(ClientNetworkError);
|
|
292
|
+
});
|
|
293
|
+
});
|
|
284
294
|
//# sourceMappingURL=stream.test.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"stream.test.js","sourceRoot":"","sources":["../../src/client/stream.test.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"stream.test.js","sourceRoot":"","sources":["../../src/client/stream.test.ts"],"names":[],"mappings":"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"}
|
package/build/client/types.d.ts
CHANGED
|
@@ -27,9 +27,42 @@
|
|
|
27
27
|
*/
|
|
28
28
|
export interface RequestMeta {
|
|
29
29
|
}
|
|
30
|
+
/**
|
|
31
|
+
* Classification context — supplies provenance the classifier needs that's
|
|
32
|
+
* not derivable from the raw error itself.
|
|
33
|
+
*
|
|
34
|
+
* `timeoutSignal` and `userSignal` let the classifier distinguish a timeout
|
|
35
|
+
* abort from a user-initiated abort when an `AbortError` lands.
|
|
36
|
+
*/
|
|
37
|
+
export interface ClassifyErrorContext {
|
|
38
|
+
procedureName: string;
|
|
39
|
+
scope: string;
|
|
40
|
+
timeoutSignal?: AbortSignal;
|
|
41
|
+
userSignal?: AbortSignal;
|
|
42
|
+
timeoutMs?: number;
|
|
43
|
+
}
|
|
44
|
+
/**
|
|
45
|
+
* The output shape of a successful classification. Contract: `error` is
|
|
46
|
+
* always an `Error` subclass (the framework class). Non-`Error` values fall
|
|
47
|
+
* through to `null` (handled by `executeCall` as `kind: 'unknown'`).
|
|
48
|
+
*/
|
|
49
|
+
export interface ClassifiedError {
|
|
50
|
+
kind: string;
|
|
51
|
+
error: Error;
|
|
52
|
+
}
|
|
53
|
+
/**
|
|
54
|
+
* Adapter-provided classifier — runs before `defaultClassifyError`. Return
|
|
55
|
+
* `null` to fall through to the default. Adapter authors should compose with
|
|
56
|
+
* the default explicitly:
|
|
57
|
+
*
|
|
58
|
+
* classifyError: (e, ctx) => myClassify(e, ctx) ?? defaultClassifyError(e, ctx)
|
|
59
|
+
*/
|
|
60
|
+
export type ErrorClassifier = (raw: unknown, ctx: ClassifyErrorContext) => ClassifiedError | null;
|
|
30
61
|
export interface ClientAdapter {
|
|
31
62
|
request(config: AdapterRequest): Promise<AdapterResponse>;
|
|
32
63
|
stream(config: AdapterRequest): Promise<AdapterStreamResponse>;
|
|
64
|
+
/** Optional adapter-level error classifier — composes with `defaultClassifyError`. */
|
|
65
|
+
classifyError?: ErrorClassifier;
|
|
33
66
|
}
|
|
34
67
|
export interface AdapterRequest {
|
|
35
68
|
url: string;
|
|
@@ -55,7 +88,7 @@ export interface AdapterStreamResponse {
|
|
|
55
88
|
/**
|
|
56
89
|
* Populated when `status` is non-2xx — the parsed response body. Surfaced so
|
|
57
90
|
* `executeStream` can dispatch typed errors via the error registry instead
|
|
58
|
-
* of always falling back to `
|
|
91
|
+
* of always falling back to `ClientHttpError` with `body: null`.
|
|
59
92
|
*/
|
|
60
93
|
errorBody?: unknown;
|
|
61
94
|
}
|
|
@@ -148,7 +181,7 @@ export interface ErrorFactory {
|
|
|
148
181
|
/**
|
|
149
182
|
* Maps `body.name` values (taxonomy keys) to error class factories. When the
|
|
150
183
|
* client sees a non-2xx response whose body has a `name` matching a registry
|
|
151
|
-
* entry, it throws the typed error instead of a generic `
|
|
184
|
+
* entry, it throws the typed error instead of a generic `ClientHttpError`.
|
|
152
185
|
*/
|
|
153
186
|
export type ErrorRegistry = Record<string, ErrorFactory>;
|
|
154
187
|
export interface ClientInstance {
|
|
@@ -159,6 +192,7 @@ export interface ClientInstance {
|
|
|
159
192
|
/** Optional registry for runtime dispatch of typed errors by `body.name`. */
|
|
160
193
|
errorRegistry?: ErrorRegistry;
|
|
161
194
|
call<TResponse>(descriptor: CallDescriptor, options?: ProcedureCallOptions): Promise<TResponse>;
|
|
195
|
+
safeCall<TResponse, ETyped = never>(descriptor: CallDescriptor, options?: ProcedureCallOptions): Promise<Result<TResponse, ETyped>>;
|
|
162
196
|
stream<TYield, TReturn>(descriptor: StreamDescriptor, options?: ProcedureCallOptions): TypedStream<TYield, TReturn>;
|
|
163
197
|
}
|
|
164
198
|
export interface CreateClientConfig<TScopes> {
|
|
@@ -176,7 +210,66 @@ export interface CreateClientConfig<TScopes> {
|
|
|
176
210
|
* Optional error-dispatch registry. When a non-2xx response body has a
|
|
177
211
|
* `name` field matching a registry key, the client throws the typed error
|
|
178
212
|
* constructed via that entry's `fromResponse`. When absent or when no key
|
|
179
|
-
* matches, falls back to `
|
|
213
|
+
* matches, falls back to `ClientHttpError` (transport error shape).
|
|
180
214
|
*/
|
|
181
215
|
errorRegistry?: ErrorRegistry;
|
|
182
216
|
}
|
|
217
|
+
import type { ClientHttpError, ClientNetworkError, ClientTimeoutError, ClientAbortError, ClientParseError, ClientPathParamError } from './errors.js';
|
|
218
|
+
/**
|
|
219
|
+
* Augmentable map of `kind` discriminant → error class for the framework's
|
|
220
|
+
* non-typed failure categories. Mirrors the `RequestMeta` augmentation
|
|
221
|
+
* pattern: extend via TypeScript declaration merging.
|
|
222
|
+
*
|
|
223
|
+
* @example
|
|
224
|
+
* ```ts
|
|
225
|
+
* declare module 'ts-procedures/client' {
|
|
226
|
+
* interface ClientErrorMap {
|
|
227
|
+
* rateLimited: MyRateLimitError
|
|
228
|
+
* paymentRequired: MyPaymentError
|
|
229
|
+
* }
|
|
230
|
+
* }
|
|
231
|
+
* ```
|
|
232
|
+
*
|
|
233
|
+
* **`'typed'` is reserved** — it's the discriminant used by `Result` for
|
|
234
|
+
* route-declared errors and is not part of `ClientErrorMap`. Attempting to
|
|
235
|
+
* register it produces a TS error about overlapping discriminants.
|
|
236
|
+
*/
|
|
237
|
+
export interface ClientErrorMap {
|
|
238
|
+
http: ClientHttpError;
|
|
239
|
+
network: ClientNetworkError;
|
|
240
|
+
timeout: ClientTimeoutError;
|
|
241
|
+
aborted: ClientAbortError;
|
|
242
|
+
parse: ClientParseError;
|
|
243
|
+
usage: ClientPathParamError;
|
|
244
|
+
unknown: unknown;
|
|
245
|
+
}
|
|
246
|
+
/** Distributed union of every framework failure kind. */
|
|
247
|
+
export type FrameworkFailure = {
|
|
248
|
+
[K in keyof ClientErrorMap]: {
|
|
249
|
+
ok: false;
|
|
250
|
+
kind: K;
|
|
251
|
+
error: ClientErrorMap[K];
|
|
252
|
+
};
|
|
253
|
+
}[keyof ClientErrorMap];
|
|
254
|
+
/**
|
|
255
|
+
* Discriminated result type for the `.safe()` form. `kind: 'typed'` carries
|
|
256
|
+
* route-declared errors (registry-dispatched); other kinds carry framework
|
|
257
|
+
* failures. Use `ResultNoTyped<T>` for routes without declared errors.
|
|
258
|
+
*/
|
|
259
|
+
export type Result<T, ETyped> = {
|
|
260
|
+
ok: true;
|
|
261
|
+
value: T;
|
|
262
|
+
} | {
|
|
263
|
+
ok: false;
|
|
264
|
+
kind: 'typed';
|
|
265
|
+
error: ETyped;
|
|
266
|
+
} | FrameworkFailure;
|
|
267
|
+
/**
|
|
268
|
+
* `Result` for routes that don't declare typed errors. Omits the `'typed'`
|
|
269
|
+
* arm entirely so IDE hovers stay clean (TS doesn't collapse `never`-payload
|
|
270
|
+
* arms in tooltip output).
|
|
271
|
+
*/
|
|
272
|
+
export type ResultNoTyped<T> = {
|
|
273
|
+
ok: true;
|
|
274
|
+
value: T;
|
|
275
|
+
} | FrameworkFailure;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
import { describe, it, expect, beforeAll } from 'vitest';
|
|
2
|
+
import { generateClient } from './index.js';
|
|
3
|
+
import * as path from 'node:path';
|
|
4
|
+
import * as os from 'node:os';
|
|
5
|
+
import * as fs from 'node:fs/promises';
|
|
6
|
+
function makeEnvelope(routeCount) {
|
|
7
|
+
const routes = Array.from({ length: routeCount }, (_, i) => ({
|
|
8
|
+
kind: 'rpc',
|
|
9
|
+
name: `Op${i}`,
|
|
10
|
+
scope: 'ops',
|
|
11
|
+
method: 'post',
|
|
12
|
+
path: `/ops/op${i}`,
|
|
13
|
+
version: 1,
|
|
14
|
+
jsonSchema: {
|
|
15
|
+
body: { type: 'object', properties: { x: { type: 'string' } } },
|
|
16
|
+
response: { type: 'object', properties: { y: { type: 'string' } } },
|
|
17
|
+
},
|
|
18
|
+
errors: [],
|
|
19
|
+
}));
|
|
20
|
+
return { basePath: '/api', headers: [], errors: [], routes };
|
|
21
|
+
}
|
|
22
|
+
describe('bundle size budget', () => {
|
|
23
|
+
let perRouteDelta;
|
|
24
|
+
let totalChars;
|
|
25
|
+
beforeAll(async () => {
|
|
26
|
+
const tmp = await fs.mkdtemp(path.join(os.tmpdir(), 'tsproc-bundle-'));
|
|
27
|
+
await generateClient({
|
|
28
|
+
envelope: makeEnvelope(100),
|
|
29
|
+
outDir: tmp,
|
|
30
|
+
selfContained: false,
|
|
31
|
+
});
|
|
32
|
+
const scopeFile = await fs.readFile(path.join(tmp, 'ops.ts'), 'utf-8');
|
|
33
|
+
// Strip whitespace, line comments, block comments. This is a stable proxy
|
|
34
|
+
// for minification — actual minified bytes will be lower, but the *delta*
|
|
35
|
+
// between commits is what this test guards against.
|
|
36
|
+
const stripped = scopeFile
|
|
37
|
+
.replace(/\/\*[\s\S]*?\*\//g, '') // block comments
|
|
38
|
+
.replace(/\/\/.*$/gm, '') // line comments
|
|
39
|
+
.replace(/\s+/g, ' '); // collapse whitespace
|
|
40
|
+
totalChars = stripped.length;
|
|
41
|
+
perRouteDelta = totalChars / 100;
|
|
42
|
+
});
|
|
43
|
+
it('stays within 1500 chars per route post-strip', () => {
|
|
44
|
+
// Initial budget — refine after first measurement. The .safe sibling adds
|
|
45
|
+
// roughly 400 chars of unminified emission per route (Object.assign wrapper
|
|
46
|
+
// + duplicated descriptor literal). Post-strip should land well under 1500.
|
|
47
|
+
//
|
|
48
|
+
// RELATIONSHIP TO SPEC TARGET: The spec sets a "200 bytes per route
|
|
49
|
+
// post-minify" goal. This whitespace-strip proxy is a coarse stand-in
|
|
50
|
+
// chosen to avoid an esbuild dep — actual minified bytes will be lower
|
|
51
|
+
// than `perRouteDelta` here. If a future task swaps in real esbuild
|
|
52
|
+
// minification, tighten the budget to ~250 bytes (200 + 25% headroom)
|
|
53
|
+
// and link back to spec section "Tests / item 10". For now this guard
|
|
54
|
+
// catches catastrophic regressions only, not subtle bloat.
|
|
55
|
+
//
|
|
56
|
+
// PERROUTEDELTA_BASELINE: 613.2
|
|
57
|
+
expect(perRouteDelta).toBeLessThan(1500);
|
|
58
|
+
});
|
|
59
|
+
it('logs the baseline measurement for review', () => {
|
|
60
|
+
// This isn't a strict assertion — it surfaces the actual numbers to the
|
|
61
|
+
// test output so reviewers can update PERROUTEDELTA_BASELINE in the
|
|
62
|
+
// comment above without having to re-run locally.
|
|
63
|
+
// eslint-disable-next-line no-console
|
|
64
|
+
console.log(`[bundle-size] 100 routes, scope file = ${totalChars} chars stripped, per-route = ${perRouteDelta.toFixed(1)}`);
|
|
65
|
+
expect(totalChars).toBeGreaterThan(0);
|
|
66
|
+
});
|
|
67
|
+
});
|
|
68
|
+
//# sourceMappingURL=bundle-size.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"bundle-size.test.js","sourceRoot":"","sources":["../../src/codegen/bundle-size.test.ts"],"names":[],"mappings":"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"}
|