@gusnips/sdkgen 0.2.0 → 0.2.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +13 -3
- package/dist/index.d.ts +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js.map +1 -1
- package/dist/methods.d.ts +14 -0
- package/dist/methods.d.ts.map +1 -1
- package/dist/methods.js +17 -6
- package/dist/methods.js.map +1 -1
- package/dist/transport.d.ts +10 -2
- package/dist/transport.d.ts.map +1 -1
- package/dist/transport.js +23 -4
- package/dist/transport.js.map +1 -1
- package/package.json +1 -1
- package/src/index.ts +1 -0
- package/src/methods.test.ts +40 -5
- package/src/methods.ts +33 -7
- package/src/readme.test.ts +3 -2
- package/src/transport.test.ts +55 -0
- package/src/transport.ts +35 -6
package/README.md
CHANGED
|
@@ -105,7 +105,7 @@ const { members } = sdkMethods([
|
|
|
105
105
|
/**
|
|
106
106
|
* Check the API is up.
|
|
107
107
|
*/
|
|
108
|
-
health(opts?: RequestOptions): Promise<HealthDto> {
|
|
108
|
+
health(opts?: Omit<RequestOptions, "idempotencyKey">): Promise<HealthDto> {
|
|
109
109
|
return this.request({ method: "GET", path: "/health" }, undefined, opts);
|
|
110
110
|
}
|
|
111
111
|
```
|
|
@@ -123,6 +123,10 @@ through the transport, below. `sdkMethods` also returns:
|
|
|
123
123
|
operation's `input` schema. A path slot is filled from the field of its name, or the one
|
|
124
124
|
`params` maps to it.
|
|
125
125
|
- `paramTypes` and `returnTypes`: the names your file has to import.
|
|
126
|
+
- `routes`: where each generated method sends its call, keyed by the method. Here that is
|
|
127
|
+
`{ health: { method: "GET", path: "/health", pathParams: [] } }`. A slot in `path` carries the
|
|
128
|
+
argument's name, and `pathParams` lists those arguments in path order. Use it for a docs page
|
|
129
|
+
that shows a REST call beside the SDK call that makes it.
|
|
126
130
|
|
|
127
131
|
Four options:
|
|
128
132
|
|
|
@@ -188,7 +192,7 @@ export class Example extends GeneratedOperations {
|
|
|
188
192
|
| `baseUrl` | required | Where the API lives, with its base path. |
|
|
189
193
|
| `error(failure)` | required | Builds your SDK's error. The transport throws what it returns. |
|
|
190
194
|
| `headers` | none | Sent on every call. |
|
|
191
|
-
| `fetch` | global |
|
|
195
|
+
| `fetch` | global | `(url, init) => Promise<Response>`, such as a fake one in tests. |
|
|
192
196
|
| `timeoutMs(spec, params)` | 30,000 ms | How long one try waits for an answer. A call's `opts.timeoutMs` wins. |
|
|
193
197
|
| `maxRetries` | 2 | Extra tries after a failure worth repeating. |
|
|
194
198
|
| `durableCodes` | none | Error codes that waiting does not fix, such as a spent monthly quota. |
|
|
@@ -211,6 +215,11 @@ A failed call is tried again:
|
|
|
211
215
|
It waits what the `Retry-After` header says, in seconds or as a date, then what
|
|
212
216
|
`details.retryAfterSecs` says. With neither, it waits about 1 second, then 2.
|
|
213
217
|
|
|
218
|
+
Every method's last argument takes `timeoutMs` for that one call, and `signal` to stop it. A call
|
|
219
|
+
that reads an `Idempotency-Key` also takes `idempotencyKey`. A call stopped by its `signal` throws
|
|
220
|
+
the signal's reason rather than your SDK's error, because nothing failed, and it is not tried
|
|
221
|
+
again, even partway through a wait. `signal` needs `AbortSignal.any`, which Node has from 18.17 and 20.3.
|
|
222
|
+
|
|
214
223
|
## Keep the SDK current
|
|
215
224
|
|
|
216
225
|
```ts
|
|
@@ -246,7 +255,8 @@ error and not "out of date".
|
|
|
246
255
|
- **A call with a missing path value throws a TypeError** before anything is sent, rather than
|
|
247
256
|
calling `/numbers//pair`.
|
|
248
257
|
- **An idempotency key on a call that takes none throws.** The API would ignore it, so it could not
|
|
249
|
-
stop the call running twice.
|
|
258
|
+
stop the call running twice. The method's type refuses it first: only a call that takes a key
|
|
259
|
+
accepts `idempotencyKey` in its options.
|
|
250
260
|
|
|
251
261
|
## Why it exists
|
|
252
262
|
|
package/dist/index.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
export { liftContract, type LiftOptions } from "./contract.ts";
|
|
2
|
-
export { retrySource, sdkMethods, transportSource, type InjectedMember, type SdkMethods, type SdkMethodsOptions, type SdkOperation, type SdkPlacement, } from "./methods.ts";
|
|
2
|
+
export { retrySource, sdkMethods, transportSource, type InjectedMember, type SdkMethods, type SdkMethodsOptions, type SdkOperation, type SdkPlacement, type SdkRoute, } from "./methods.ts";
|
|
3
3
|
export { camelCase, docComment, fieldsOf, inputJsonSchema, paramsInterface, pascalCase, typeNames, typeOf, wrapLines, type JsonObject, type SchemaSource, type StandardJsonSchema, } from "./types.ts";
|
|
4
4
|
export { writeGenerated, type GeneratedFiles, type WriteOptions, type WriteResult, } from "./write.ts";
|
|
5
5
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,KAAK,WAAW,EAAE,MAAM,eAAe,CAAC;AAC/D,OAAO,EACL,WAAW,EACX,UAAU,EACV,eAAe,EACf,KAAK,cAAc,EACnB,KAAK,UAAU,EACf,KAAK,iBAAiB,EACtB,KAAK,YAAY,EACjB,KAAK,YAAY,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,KAAK,WAAW,EAAE,MAAM,eAAe,CAAC;AAC/D,OAAO,EACL,WAAW,EACX,UAAU,EACV,eAAe,EACf,KAAK,cAAc,EACnB,KAAK,UAAU,EACf,KAAK,iBAAiB,EACtB,KAAK,YAAY,EACjB,KAAK,YAAY,EACjB,KAAK,QAAQ,GACd,MAAM,cAAc,CAAC;AACtB,OAAO,EACL,SAAS,EACT,UAAU,EACV,QAAQ,EACR,eAAe,EACf,eAAe,EACf,UAAU,EACV,SAAS,EACT,MAAM,EACN,SAAS,EACT,KAAK,UAAU,EACf,KAAK,YAAY,EACjB,KAAK,kBAAkB,GACxB,MAAM,YAAY,CAAC;AACpB,OAAO,EACL,cAAc,EACd,KAAK,cAAc,EACnB,KAAK,YAAY,EACjB,KAAK,WAAW,GACjB,MAAM,YAAY,CAAC"}
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAoB,MAAM,eAAe,CAAC;AAC/D,OAAO,EACL,WAAW,EACX,UAAU,EACV,eAAe,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAoB,MAAM,eAAe,CAAC;AAC/D,OAAO,EACL,WAAW,EACX,UAAU,EACV,eAAe,GAOhB,MAAM,cAAc,CAAC;AACtB,OAAO,EACL,SAAS,EACT,UAAU,EACV,QAAQ,EACR,eAAe,EACf,eAAe,EACf,UAAU,EACV,SAAS,EACT,MAAM,EACN,SAAS,GAIV,MAAM,YAAY,CAAC;AACpB,OAAO,EACL,cAAc,GAIf,MAAM,YAAY,CAAC"}
|
package/dist/methods.d.ts
CHANGED
|
@@ -77,6 +77,20 @@ export interface SdkMethods {
|
|
|
77
77
|
paramTypes: string[];
|
|
78
78
|
/** The declared types the `returns` name, sorted, for their import from the contract. */
|
|
79
79
|
returnTypes: string[];
|
|
80
|
+
/**
|
|
81
|
+
* Each generated method's route as the SDK spells it, keyed by the method: `numbers.get` →
|
|
82
|
+
* `{ method: "GET", path: "/numbers/:numberId", pathParams: ["numberId"] }`. For a page that
|
|
83
|
+
* shows a REST call beside the SDK call that makes it. Hand-written members have none.
|
|
84
|
+
*/
|
|
85
|
+
routes: Record<string, SdkRoute>;
|
|
86
|
+
}
|
|
87
|
+
/** Where a generated method sends its call. */
|
|
88
|
+
export interface SdkRoute {
|
|
89
|
+
method: "GET" | "POST" | "PUT" | "PATCH" | "DELETE";
|
|
90
|
+
/** The path with each slot named for the argument that fills it: `/numbers/:numberId`. */
|
|
91
|
+
path: string;
|
|
92
|
+
/** The arguments that fill the path, in the order the path has them. */
|
|
93
|
+
pathParams: string[];
|
|
80
94
|
}
|
|
81
95
|
/**
|
|
82
96
|
* The SDK's methods for every operation that names an `sdk` place, with the params interfaces they
|
package/dist/methods.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"methods.d.ts","sourceRoot":"","sources":["../src/methods.ts"],"names":[],"mappings":"AAmBA,OAAO,EAOL,KAAK,YAAY,EAClB,MAAM,YAAY,CAAC;AAEpB,iDAAiD;AACjD,MAAM,WAAW,YAAY;IAC3B,gFAAgF;IAChF,MAAM,EAAE,MAAM,CAAC;IACf,6FAA6F;IAC7F,OAAO,EAAE,MAAM,CAAC;IAChB;;;OAGG;IACH,UAAU,CAAC,EAAE,OAAO,CAAC;CACtB;AAED;;;GAGG;AACH,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,KAAK,GAAG,MAAM,GAAG,KAAK,GAAG,OAAO,GAAG,QAAQ,CAAC;IACpD,yDAAyD;IACzD,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,gFAAgF;IAChF,KAAK,CAAC,EAAE,YAAY,CAAC;IACrB,iFAAiF;IACjF,MAAM,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;IAC1C,iEAAiE;IACjE,KAAK,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IAC1B,2FAA2F;IAC3F,OAAO,CAAC,EAAE,SAAS;QAAE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;IAC/C,+EAA+E;IAC/E,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,UAAU,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,KAAK,MAAM,EAAE,EAAE,OAAO,CAAC,CAAC,CAAC;IACtD,sEAAsE;IACtE,GAAG,CAAC,EAAE,YAAY,CAAC;CACpB;AAED,6FAA6F;AAC7F,MAAM,WAAW,cAAc;IAC7B,+CAA+C;IAC/C,MAAM,EAAE,MAAM,CAAC;IACf,8FAA8F;IAC9F,SAAS,EAAE,MAAM,CAAC;IAClB,uDAAuD;IACvD,IAAI,EAAE,MAAM,CAAC;IACb,iDAAiD;IACjD,GAAG,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;CACzB;AAED,MAAM,WAAW,iBAAiB;IAChC;;;OAGG;IACH,UAAU,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IAC/B;;;OAGG;IACH,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,YAAY,KAAK,SAAS,CAAC,MAAM,GAAG,SAAS,CAAC,EAAE,CAAC;IAC5D,gGAAgG;IAChG,SAAS,CAAC,EAAE,CAAC,EAAE,EAAE,YAAY,KAAK,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,GAAG,SAAS,CAAC;IAChF,2EAA2E;IAC3E,MAAM,CAAC,EAAE,SAAS,cAAc,EAAE,CAAC;CACpC;AAED,MAAM,WAAW,UAAU;IACzB,mGAAmG;IACnG,MAAM,EAAE,MAAM,CAAC;IACf;;;OAGG;IACH,OAAO,EAAE,MAAM,CAAC;IAChB,6EAA6E;IAC7E,UAAU,EAAE,MAAM,EAAE,CAAC;IACrB,yFAAyF;IACzF,WAAW,EAAE,MAAM,EAAE,CAAC;
|
|
1
|
+
{"version":3,"file":"methods.d.ts","sourceRoot":"","sources":["../src/methods.ts"],"names":[],"mappings":"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"}
|
package/dist/methods.js
CHANGED
|
@@ -25,6 +25,7 @@ const RESERVED = new Set(["request", "constructor"]);
|
|
|
25
25
|
/** The spec fields the generator writes, which `specExtra` must not overwrite. */
|
|
26
26
|
const SPEC_FIELDS = new Set(["method", "path", "keyed", "repeatable"]);
|
|
27
27
|
const IDENTIFIER = /^[A-Za-z_$][\w$]*$/;
|
|
28
|
+
const VERB = { get: "GET", post: "POST", put: "PUT", patch: "PATCH", delete: "DELETE" };
|
|
28
29
|
/**
|
|
29
30
|
* The SDK's methods for every operation that names an `sdk` place, with the params interfaces they
|
|
30
31
|
* take.
|
|
@@ -42,6 +43,7 @@ export function sdkMethods(operations, options = {}) {
|
|
|
42
43
|
const params = [];
|
|
43
44
|
const paramTypes = [];
|
|
44
45
|
const returnTypes = new Set();
|
|
46
|
+
const routes = {};
|
|
45
47
|
for (const op of operations) {
|
|
46
48
|
const sdk = op.sdk;
|
|
47
49
|
if (sdk === undefined)
|
|
@@ -64,11 +66,16 @@ export function sdkMethods(operations, options = {}) {
|
|
|
64
66
|
const required = new Set(Array.isArray(listed)
|
|
65
67
|
? listed.filter((f) => typeof f === "string" && !fixed.includes(f))
|
|
66
68
|
: []);
|
|
67
|
-
const
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
69
|
+
const method = VERB[op.method];
|
|
70
|
+
const path = sdkPath(op, required, where);
|
|
71
|
+
routes[sdk.method] = {
|
|
72
|
+
method,
|
|
73
|
+
path,
|
|
74
|
+
pathParams: [...path.matchAll(/:(\w+)/g)].flatMap((match) => match[1] ?? []),
|
|
75
|
+
};
|
|
76
|
+
const fields = [`method: "${method}"`, `path: ${JSON.stringify(path)}`];
|
|
77
|
+
const keyed = op.headers?.some((h) => h.name.toLowerCase() === "idempotency-key") === true;
|
|
78
|
+
if (keyed)
|
|
72
79
|
fields.push("keyed: true");
|
|
73
80
|
if (sdk.repeatable !== undefined)
|
|
74
81
|
fields.push(`repeatable: ${sdk.repeatable}`);
|
|
@@ -80,11 +87,14 @@ export function sdkMethods(operations, options = {}) {
|
|
|
80
87
|
fields.push(`${propertyKey(key)}: ${JSON.stringify(value)}`);
|
|
81
88
|
}
|
|
82
89
|
const argument = iface === null ? "" : `params${iface.optional ? "?" : ""}: ${typeName}, `;
|
|
90
|
+
// A key on a call that takes none is refused by the transport at runtime; the type refuses it
|
|
91
|
+
// first, where the caller's editor shows it.
|
|
92
|
+
const options = keyed ? "RequestOptions" : `Omit<RequestOptions, "idempotencyKey">`;
|
|
83
93
|
members.push({
|
|
84
94
|
where,
|
|
85
95
|
...place(sdk.method, where),
|
|
86
96
|
doc: doc(op),
|
|
87
|
-
signature: `(${argument}opts?:
|
|
97
|
+
signature: `(${argument}opts?: ${options}): Promise<${sdk.returns}>`,
|
|
88
98
|
call: `this.request({ ${fields.join(", ")} }, ${iface === null ? "undefined" : "params"}, opts)`,
|
|
89
99
|
});
|
|
90
100
|
}
|
|
@@ -103,6 +113,7 @@ export function sdkMethods(operations, options = {}) {
|
|
|
103
113
|
members: writeMembers(members, options.namespaces),
|
|
104
114
|
paramTypes: paramTypes.sort(),
|
|
105
115
|
returnTypes: [...returnTypes].sort(),
|
|
116
|
+
routes,
|
|
106
117
|
};
|
|
107
118
|
}
|
|
108
119
|
/** `numbers.pair` → its namespace and name, each checked to be a name a class member can have. */
|
package/dist/methods.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"methods.js","sourceRoot":"","sources":["../src/methods.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"methods.js","sourceRoot":"","sources":["../src/methods.ts"],"names":[],"mappings":"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"}
|
package/dist/transport.d.ts
CHANGED
|
@@ -18,6 +18,11 @@ export interface RequestOptions {
|
|
|
18
18
|
idempotencyKey?: string;
|
|
19
19
|
/** How long one attempt waits for an answer, in milliseconds. Overrides the SDK's. */
|
|
20
20
|
timeoutMs?: number;
|
|
21
|
+
/**
|
|
22
|
+
* Stops the call, and any retry of it, when it aborts. The call then throws the signal's reason
|
|
23
|
+
* rather than the SDK's error, because nothing failed: you asked it to stop.
|
|
24
|
+
*/
|
|
25
|
+
signal?: AbortSignal;
|
|
21
26
|
}
|
|
22
27
|
/** The `error` of the envelope, as the answer carried it. */
|
|
23
28
|
export interface EnvelopeError {
|
|
@@ -58,8 +63,11 @@ export interface Transport {
|
|
|
58
63
|
baseUrl: string;
|
|
59
64
|
/** Sent on every call, such as the credential and the SDK's version. */
|
|
60
65
|
headers?: Readonly<Record<string, string>>;
|
|
61
|
-
/**
|
|
62
|
-
|
|
66
|
+
/**
|
|
67
|
+
* Default: the global `fetch`. Typed as the one way the transport calls it, so a test's fake
|
|
68
|
+
* needs no cast.
|
|
69
|
+
*/
|
|
70
|
+
fetch?: (url: string, init: RequestInit) => Promise<Response>;
|
|
63
71
|
/** How long one attempt of this call waits for an answer, in milliseconds. Default 30,000. */
|
|
64
72
|
timeoutMs?: (spec: RequestSpec, params: object) => number;
|
|
65
73
|
/** Extra attempts after a failure the retry rule says is worth repeating. Default 2. */
|
package/dist/transport.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"transport.d.ts","sourceRoot":"","sources":["../src/transport.ts"],"names":[],"mappings":"AAsBA,MAAM,MAAM,UAAU,GAAG,KAAK,GAAG,MAAM,GAAG,KAAK,GAAG,OAAO,GAAG,QAAQ,CAAC;AAErE,uEAAuE;AACvE,MAAM,WAAW,WAAW;IAC1B,MAAM,EAAE,UAAU,CAAC;IACnB,4FAA4F;IAC5F,IAAI,EAAE,MAAM,CAAC;IACb,mGAAmG;IACnG,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,iGAAiG;IACjG,UAAU,CAAC,EAAE,OAAO,CAAC;CACtB;AAED,mDAAmD;AACnD,MAAM,WAAW,cAAc;IAC7B;;;OAGG;IACH,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,sFAAsF;IACtF,SAAS,CAAC,EAAE,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"transport.d.ts","sourceRoot":"","sources":["../src/transport.ts"],"names":[],"mappings":"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"}
|
package/dist/transport.js
CHANGED
|
@@ -43,10 +43,14 @@ export async function send(transport, spec, params = {}, opts = {}) {
|
|
|
43
43
|
// A local, never `transport.fetch(...)`: called as a method, a browser's fetch gets the
|
|
44
44
|
// settings object as `this` and throws "Illegal invocation".
|
|
45
45
|
const fetchImpl = transport.fetch ?? globalThis.fetch;
|
|
46
|
+
const { signal } = opts;
|
|
47
|
+
signal?.throwIfAborted();
|
|
46
48
|
for (let attempt = 0;; attempt++) {
|
|
47
|
-
const outcome = await once(fetchImpl, request, timeoutMs);
|
|
49
|
+
const outcome = await once(fetchImpl, request, timeoutMs, signal);
|
|
48
50
|
if (outcome.ok)
|
|
49
51
|
return outcome.answer;
|
|
52
|
+
// The caller stopped it, so there is nothing to report and nothing to retry.
|
|
53
|
+
signal?.throwIfAborted();
|
|
50
54
|
const failure = { ...outcome.failure, idempotencyKey: key };
|
|
51
55
|
// The rule reads these fields as the answer sent them: the header's wait apart from the
|
|
52
56
|
// body's, and `details` untouched, so an explicit `retryAfterSecs: null` still says never.
|
|
@@ -60,9 +64,23 @@ export async function send(transport, spec, params = {}, opts = {}) {
|
|
|
60
64
|
shouldRetry(answer, { repeatable, durableCodes: transport.durableCodes });
|
|
61
65
|
if (!again)
|
|
62
66
|
throw transport.error(failure);
|
|
63
|
-
await
|
|
67
|
+
await sleep(retryDelayMs(attempt, answer), signal);
|
|
64
68
|
}
|
|
65
69
|
}
|
|
70
|
+
/** Waits `ms`, or rejects with the signal's reason the moment it aborts. */
|
|
71
|
+
function sleep(ms, signal) {
|
|
72
|
+
return new Promise((resolve, reject) => {
|
|
73
|
+
const timer = setTimeout(() => {
|
|
74
|
+
signal?.removeEventListener("abort", stop);
|
|
75
|
+
resolve();
|
|
76
|
+
}, ms);
|
|
77
|
+
function stop() {
|
|
78
|
+
clearTimeout(timer);
|
|
79
|
+
reject(signal?.reason);
|
|
80
|
+
}
|
|
81
|
+
signal?.addEventListener("abort", stop, { once: true });
|
|
82
|
+
});
|
|
83
|
+
}
|
|
66
84
|
/** The request every attempt sends: the path filled in, the rest in the query or the body. */
|
|
67
85
|
function prepare(transport, spec, params, key) {
|
|
68
86
|
const values = new Map(Object.entries(params));
|
|
@@ -108,7 +126,8 @@ function prepare(transport, spec, params, key) {
|
|
|
108
126
|
};
|
|
109
127
|
}
|
|
110
128
|
/** One attempt. Never throws: a failure is a value, so the loop can ask the rule about it. */
|
|
111
|
-
async function once(fetchImpl, request, timeoutMs) {
|
|
129
|
+
async function once(fetchImpl, request, timeoutMs, signal) {
|
|
130
|
+
const timeout = AbortSignal.timeout(timeoutMs);
|
|
112
131
|
const base = { method: request.method, path: request.path, timeoutMs };
|
|
113
132
|
let response;
|
|
114
133
|
let text;
|
|
@@ -117,7 +136,7 @@ async function once(fetchImpl, request, timeoutMs) {
|
|
|
117
136
|
method: request.method,
|
|
118
137
|
headers: request.headers,
|
|
119
138
|
body: request.body,
|
|
120
|
-
signal: AbortSignal.timeout
|
|
139
|
+
signal: signal === undefined ? timeout : AbortSignal.any([signal, timeout]),
|
|
121
140
|
});
|
|
122
141
|
// Inside the try: a connection that drops halfway through the body is no answer either.
|
|
123
142
|
text = await response.text();
|
package/dist/transport.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"transport.js","sourceRoot":"","sources":["../src/transport.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AACH,OAAO,EAAE,eAAe,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;
|
|
1
|
+
{"version":3,"file":"transport.js","sourceRoot":"","sources":["../src/transport.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@gusnips/sdkgen",
|
|
3
|
-
"version": "0.2.
|
|
3
|
+
"version": "0.2.2",
|
|
4
4
|
"description": "The pieces of an SDK generator: copy your API's types with their comments, write a schema as a TypeScript type, and keep the output current.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"license": "MIT",
|
package/src/index.ts
CHANGED
package/src/methods.test.ts
CHANGED
|
@@ -89,7 +89,7 @@ describe("sdkMethods", () => {
|
|
|
89
89
|
/**
|
|
90
90
|
* Read a number.
|
|
91
91
|
*/
|
|
92
|
-
get: (params: GetNumberParams, opts?: RequestOptions): Promise<NumberDto> =>
|
|
92
|
+
get: (params: GetNumberParams, opts?: Omit<RequestOptions, "idempotencyKey">): Promise<NumberDto> =>
|
|
93
93
|
this.request({ method: "GET", path: "/numbers/:numberId" }, params, opts),
|
|
94
94
|
};
|
|
95
95
|
`);
|
|
@@ -131,9 +131,11 @@ export interface DeleteNumberParams {
|
|
|
131
131
|
it("makes params optional when nothing in them is required, and takes none without input", () => {
|
|
132
132
|
const { members } = sdkMethods([LIST_NUMBERS, HEALTH]);
|
|
133
133
|
expect(members).toContain(
|
|
134
|
-
|
|
134
|
+
'list: (params?: ListNumbersParams, opts?: Omit<RequestOptions, "idempotencyKey">): Promise<Page<NumberDto>> =>',
|
|
135
|
+
);
|
|
136
|
+
expect(members).toContain(
|
|
137
|
+
'health(opts?: Omit<RequestOptions, "idempotencyKey">): Promise<HealthDto> {',
|
|
135
138
|
);
|
|
136
|
-
expect(members).toContain("health(opts?: RequestOptions): Promise<HealthDto> {");
|
|
137
139
|
expect(members).toContain(`this.request({ method: "GET", path: "/health" }, undefined, opts);`);
|
|
138
140
|
});
|
|
139
141
|
|
|
@@ -179,12 +181,35 @@ export interface DeleteNumberParams {
|
|
|
179
181
|
" /**\n * Check the API is up.\n *\n * `GET /v1/health`\n */\n",
|
|
180
182
|
);
|
|
181
183
|
expect(sdkMethods([HEALTH], { doc: () => [] }).members).toBe(`
|
|
182
|
-
health(opts?: RequestOptions): Promise<HealthDto> {
|
|
184
|
+
health(opts?: Omit<RequestOptions, "idempotencyKey">): Promise<HealthDto> {
|
|
183
185
|
return this.request({ method: "GET", path: "/health" }, undefined, opts);
|
|
184
186
|
}
|
|
185
187
|
`);
|
|
186
188
|
});
|
|
187
189
|
|
|
190
|
+
it("hands back each generated method's route, with the arguments that fill its path", () => {
|
|
191
|
+
const renamed: SdkOperation = {
|
|
192
|
+
...GET_NUMBER,
|
|
193
|
+
name: "pairNumber",
|
|
194
|
+
method: "post",
|
|
195
|
+
path: "/numbers/:id/pair/:slot{[0-9]+}",
|
|
196
|
+
input: z.object({ numberId: z.string(), slot: z.number() }),
|
|
197
|
+
params: { numberId: "id" },
|
|
198
|
+
sdk: { method: "numbers.pair", returns: "NumberDto" },
|
|
199
|
+
};
|
|
200
|
+
const { routes } = sdkMethods([renamed, HEALTH, INTERNAL], {
|
|
201
|
+
inject: [{ method: "numbers.watch", signature: "(): void", call: "undefined" }],
|
|
202
|
+
});
|
|
203
|
+
expect(routes).toEqual({
|
|
204
|
+
"numbers.pair": {
|
|
205
|
+
method: "POST",
|
|
206
|
+
path: "/numbers/:numberId/pair/:slot",
|
|
207
|
+
pathParams: ["numberId", "slot"],
|
|
208
|
+
},
|
|
209
|
+
health: { method: "GET", path: "/health", pathParams: [] },
|
|
210
|
+
});
|
|
211
|
+
});
|
|
212
|
+
|
|
188
213
|
it("adds the spec fields the hook gives, quoting a key that needs it", () => {
|
|
189
214
|
const specExtra = () => ({ proxy: ["country", "city"], "x-cost": 2, skipped: undefined });
|
|
190
215
|
expect(sdkMethods([SEND], { specExtra }).members).toContain(
|
|
@@ -411,6 +436,16 @@ ${members}}
|
|
|
411
436
|
`,
|
|
412
437
|
"retry.ts": retrySource(),
|
|
413
438
|
"transport.ts": transportSource(),
|
|
439
|
+
"uses.ts": `import type { Example } from "./client.ts";
|
|
440
|
+
|
|
441
|
+
// What a caller may pass, and what it may not. Typechecked, never run.
|
|
442
|
+
export function uses(client: Example): void {
|
|
443
|
+
void client.sendMessage({ to: "a", text: "hi" }, { idempotencyKey: "k", timeoutMs: 5_000 });
|
|
444
|
+
void client.numbers.get({ numberId: "n1" }, { timeoutMs: 5_000 });
|
|
445
|
+
// @ts-expect-error numbers.get takes no key, and the transport would throw on one
|
|
446
|
+
void client.numbers.get({ numberId: "n1" }, { idempotencyKey: "k" });
|
|
447
|
+
}
|
|
448
|
+
`,
|
|
414
449
|
"client.ts": `import { GeneratedOperations } from "./operations.ts";
|
|
415
450
|
import { send, type Failure, type RequestOptions, type RequestSpec, type Transport } from "./transport.ts";
|
|
416
451
|
|
|
@@ -455,7 +490,7 @@ export class Example extends GeneratedOperations {
|
|
|
455
490
|
const dir = await sdk();
|
|
456
491
|
// The flags the SDKs on this stack publish with. DOM and no Node types: an SDK runs wherever
|
|
457
492
|
// fetch does, so the transport may lean on nothing only Node has.
|
|
458
|
-
const errors = typeErrors(join(dir, "
|
|
493
|
+
const errors = typeErrors(join(dir, "uses.ts"), {
|
|
459
494
|
lib: ["lib.esnext.d.ts", "lib.dom.d.ts"],
|
|
460
495
|
types: [],
|
|
461
496
|
noImplicitOverride: true,
|
package/src/methods.ts
CHANGED
|
@@ -107,6 +107,21 @@ export interface SdkMethods {
|
|
|
107
107
|
paramTypes: string[];
|
|
108
108
|
/** The declared types the `returns` name, sorted, for their import from the contract. */
|
|
109
109
|
returnTypes: string[];
|
|
110
|
+
/**
|
|
111
|
+
* Each generated method's route as the SDK spells it, keyed by the method: `numbers.get` →
|
|
112
|
+
* `{ method: "GET", path: "/numbers/:numberId", pathParams: ["numberId"] }`. For a page that
|
|
113
|
+
* shows a REST call beside the SDK call that makes it. Hand-written members have none.
|
|
114
|
+
*/
|
|
115
|
+
routes: Record<string, SdkRoute>;
|
|
116
|
+
}
|
|
117
|
+
|
|
118
|
+
/** Where a generated method sends its call. */
|
|
119
|
+
export interface SdkRoute {
|
|
120
|
+
method: "GET" | "POST" | "PUT" | "PATCH" | "DELETE";
|
|
121
|
+
/** The path with each slot named for the argument that fills it: `/numbers/:numberId`. */
|
|
122
|
+
path: string;
|
|
123
|
+
/** The arguments that fill the path, in the order the path has them. */
|
|
124
|
+
pathParams: string[];
|
|
110
125
|
}
|
|
111
126
|
|
|
112
127
|
/** Success statuses with no body (RFC 9110), the same three the server's reference documents so. */
|
|
@@ -120,6 +135,8 @@ const SPEC_FIELDS = new Set(["method", "path", "keyed", "repeatable"]);
|
|
|
120
135
|
|
|
121
136
|
const IDENTIFIER = /^[A-Za-z_$][\w$]*$/;
|
|
122
137
|
|
|
138
|
+
const VERB = { get: "GET", post: "POST", put: "PUT", patch: "PATCH", delete: "DELETE" } as const;
|
|
139
|
+
|
|
123
140
|
interface Member {
|
|
124
141
|
/** Who asked for it, for an error message. */
|
|
125
142
|
where: string;
|
|
@@ -150,6 +167,7 @@ export function sdkMethods(
|
|
|
150
167
|
const params: string[] = [];
|
|
151
168
|
const paramTypes: string[] = [];
|
|
152
169
|
const returnTypes = new Set<string>();
|
|
170
|
+
const routes: Record<string, SdkRoute> = {};
|
|
153
171
|
|
|
154
172
|
for (const op of operations) {
|
|
155
173
|
const sdk = op.sdk;
|
|
@@ -176,12 +194,16 @@ export function sdkMethods(
|
|
|
176
194
|
? listed.filter((f): f is string => typeof f === "string" && !fixed.includes(f))
|
|
177
195
|
: [],
|
|
178
196
|
);
|
|
179
|
-
const
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
197
|
+
const method = VERB[op.method];
|
|
198
|
+
const path = sdkPath(op, required, where);
|
|
199
|
+
routes[sdk.method] = {
|
|
200
|
+
method,
|
|
201
|
+
path,
|
|
202
|
+
pathParams: [...path.matchAll(/:(\w+)/g)].flatMap((match) => match[1] ?? []),
|
|
203
|
+
};
|
|
204
|
+
const fields = [`method: "${method}"`, `path: ${JSON.stringify(path)}`];
|
|
205
|
+
const keyed = op.headers?.some((h) => h.name.toLowerCase() === "idempotency-key") === true;
|
|
206
|
+
if (keyed) fields.push("keyed: true");
|
|
185
207
|
if (sdk.repeatable !== undefined) fields.push(`repeatable: ${sdk.repeatable}`);
|
|
186
208
|
for (const [key, value] of Object.entries(specExtra?.(op) ?? {})) {
|
|
187
209
|
if (SPEC_FIELDS.has(key)) {
|
|
@@ -193,11 +215,14 @@ export function sdkMethods(
|
|
|
193
215
|
}
|
|
194
216
|
|
|
195
217
|
const argument = iface === null ? "" : `params${iface.optional ? "?" : ""}: ${typeName}, `;
|
|
218
|
+
// A key on a call that takes none is refused by the transport at runtime; the type refuses it
|
|
219
|
+
// first, where the caller's editor shows it.
|
|
220
|
+
const options = keyed ? "RequestOptions" : `Omit<RequestOptions, "idempotencyKey">`;
|
|
196
221
|
members.push({
|
|
197
222
|
where,
|
|
198
223
|
...place(sdk.method, where),
|
|
199
224
|
doc: doc(op),
|
|
200
|
-
signature: `(${argument}opts?:
|
|
225
|
+
signature: `(${argument}opts?: ${options}): Promise<${sdk.returns}>`,
|
|
201
226
|
call: `this.request({ ${fields.join(", ")} }, ${iface === null ? "undefined" : "params"}, opts)`,
|
|
202
227
|
});
|
|
203
228
|
}
|
|
@@ -217,6 +242,7 @@ export function sdkMethods(
|
|
|
217
242
|
members: writeMembers(members, options.namespaces),
|
|
218
243
|
paramTypes: paramTypes.sort(),
|
|
219
244
|
returnTypes: [...returnTypes].sort(),
|
|
245
|
+
routes,
|
|
220
246
|
};
|
|
221
247
|
}
|
|
222
248
|
|
package/src/readme.test.ts
CHANGED
|
@@ -28,7 +28,7 @@ describe("README", () => {
|
|
|
28
28
|
expect(
|
|
29
29
|
fieldsOf({ type: "object", properties: { "content-type": { type: "string" } } }, ""),
|
|
30
30
|
).toBe('"content-type"?: string;\n');
|
|
31
|
-
const { members } = sdkMethods([
|
|
31
|
+
const { members, routes } = sdkMethods([
|
|
32
32
|
{
|
|
33
33
|
name: "health",
|
|
34
34
|
method: "get",
|
|
@@ -41,9 +41,10 @@ describe("README", () => {
|
|
|
41
41
|
/**
|
|
42
42
|
* Check the API is up.
|
|
43
43
|
*/
|
|
44
|
-
health(opts?: RequestOptions): Promise<HealthDto> {
|
|
44
|
+
health(opts?: Omit<RequestOptions, "idempotencyKey">): Promise<HealthDto> {
|
|
45
45
|
return this.request({ method: "GET", path: "/health" }, undefined, opts);
|
|
46
46
|
}
|
|
47
47
|
`);
|
|
48
|
+
expect(routes).toEqual({ health: { method: "GET", path: "/health", pathParams: [] } });
|
|
48
49
|
});
|
|
49
50
|
});
|
package/src/transport.test.ts
CHANGED
|
@@ -424,3 +424,58 @@ describe("send: the answer", () => {
|
|
|
424
424
|
});
|
|
425
425
|
});
|
|
426
426
|
});
|
|
427
|
+
|
|
428
|
+
describe("send: the caller's signal", () => {
|
|
429
|
+
const reason = new Error("The reader closed the page.");
|
|
430
|
+
|
|
431
|
+
it("sends nothing when the signal has already aborted, and throws its reason", async () => {
|
|
432
|
+
const controller = new AbortController();
|
|
433
|
+
controller.abort(reason);
|
|
434
|
+
const { calls, outcome } = await call(GET, [ok({})], { opts: { signal: controller.signal } });
|
|
435
|
+
expect(calls).toHaveLength(0);
|
|
436
|
+
expect(outcome).toEqual({ ok: false, error: reason });
|
|
437
|
+
});
|
|
438
|
+
|
|
439
|
+
it("stops a call that is out, throws the reason rather than the SDK's error, and never retries", async () => {
|
|
440
|
+
const controller = new AbortController();
|
|
441
|
+
let sent = 0;
|
|
442
|
+
// A fetch as the transport calls it: two arguments, no cast.
|
|
443
|
+
const fetch = (_url: string, init: RequestInit) => {
|
|
444
|
+
sent++;
|
|
445
|
+
return new Promise<Response>((_resolve, reject) => {
|
|
446
|
+
init.signal?.addEventListener("abort", () => reject(init.signal?.reason));
|
|
447
|
+
controller.abort(reason);
|
|
448
|
+
});
|
|
449
|
+
};
|
|
450
|
+
const { outcome } = await call(GET, [ok({})], {
|
|
451
|
+
opts: { signal: controller.signal },
|
|
452
|
+
transport: { fetch },
|
|
453
|
+
});
|
|
454
|
+
expect(outcome).toEqual({ ok: false, error: reason });
|
|
455
|
+
expect(sent).toBe(1);
|
|
456
|
+
});
|
|
457
|
+
|
|
458
|
+
it("stops during the wait before a retry, without waiting it out", async () => {
|
|
459
|
+
const controller = new AbortController();
|
|
460
|
+
const start = Date.now();
|
|
461
|
+
const unavailable: Reply = () => {
|
|
462
|
+
setTimeout(() => controller.abort(reason), 100);
|
|
463
|
+
return refuse(503)();
|
|
464
|
+
};
|
|
465
|
+
const { calls, outcome } = await call(GET, [unavailable, ok({})], {
|
|
466
|
+
opts: { signal: controller.signal },
|
|
467
|
+
});
|
|
468
|
+
expect(outcome).toEqual({ ok: false, error: reason });
|
|
469
|
+
expect(calls).toHaveLength(1);
|
|
470
|
+
expect(Date.now() - start).toBe(100);
|
|
471
|
+
});
|
|
472
|
+
|
|
473
|
+
it("still times an attempt out, and reports it as the SDK's error", async () => {
|
|
474
|
+
const controller = new AbortController();
|
|
475
|
+
const timeout: Reply = () => {
|
|
476
|
+
throw new DOMException("The operation timed out.", "TimeoutError");
|
|
477
|
+
};
|
|
478
|
+
const { outcome } = await call(WRITE, [timeout], { opts: { signal: controller.signal } });
|
|
479
|
+
expect(failureOf(outcome)).toMatchObject({ status: 0, timedOut: true });
|
|
480
|
+
});
|
|
481
|
+
});
|
package/src/transport.ts
CHANGED
|
@@ -42,6 +42,11 @@ export interface RequestOptions {
|
|
|
42
42
|
idempotencyKey?: string;
|
|
43
43
|
/** How long one attempt waits for an answer, in milliseconds. Overrides the SDK's. */
|
|
44
44
|
timeoutMs?: number;
|
|
45
|
+
/**
|
|
46
|
+
* Stops the call, and any retry of it, when it aborts. The call then throws the signal's reason
|
|
47
|
+
* rather than the SDK's error, because nothing failed: you asked it to stop.
|
|
48
|
+
*/
|
|
49
|
+
signal?: AbortSignal;
|
|
45
50
|
}
|
|
46
51
|
|
|
47
52
|
/** The `error` of the envelope, as the answer carried it. */
|
|
@@ -85,8 +90,11 @@ export interface Transport {
|
|
|
85
90
|
baseUrl: string;
|
|
86
91
|
/** Sent on every call, such as the credential and the SDK's version. */
|
|
87
92
|
headers?: Readonly<Record<string, string>>;
|
|
88
|
-
/**
|
|
89
|
-
|
|
93
|
+
/**
|
|
94
|
+
* Default: the global `fetch`. Typed as the one way the transport calls it, so a test's fake
|
|
95
|
+
* needs no cast.
|
|
96
|
+
*/
|
|
97
|
+
fetch?: (url: string, init: RequestInit) => Promise<Response>;
|
|
90
98
|
/** How long one attempt of this call waits for an answer, in milliseconds. Default 30,000. */
|
|
91
99
|
timeoutMs?: (spec: RequestSpec, params: object) => number;
|
|
92
100
|
/** Extra attempts after a failure the retry rule says is worth repeating. Default 2. */
|
|
@@ -140,10 +148,14 @@ export async function send<T = unknown, M = unknown>(
|
|
|
140
148
|
// A local, never `transport.fetch(...)`: called as a method, a browser's fetch gets the
|
|
141
149
|
// settings object as `this` and throws "Illegal invocation".
|
|
142
150
|
const fetchImpl = transport.fetch ?? globalThis.fetch;
|
|
151
|
+
const { signal } = opts;
|
|
152
|
+
signal?.throwIfAborted();
|
|
143
153
|
|
|
144
154
|
for (let attempt = 0; ; attempt++) {
|
|
145
|
-
const outcome = await once<T, M>(fetchImpl, request, timeoutMs);
|
|
155
|
+
const outcome = await once<T, M>(fetchImpl, request, timeoutMs, signal);
|
|
146
156
|
if (outcome.ok) return outcome.answer;
|
|
157
|
+
// The caller stopped it, so there is nothing to report and nothing to retry.
|
|
158
|
+
signal?.throwIfAborted();
|
|
147
159
|
const failure: Failure = { ...outcome.failure, idempotencyKey: key };
|
|
148
160
|
// The rule reads these fields as the answer sent them: the header's wait apart from the
|
|
149
161
|
// body's, and `details` untouched, so an explicit `retryAfterSecs: null` still says never.
|
|
@@ -157,10 +169,25 @@ export async function send<T = unknown, M = unknown>(
|
|
|
157
169
|
attempt < maxRetries &&
|
|
158
170
|
shouldRetry(answer, { repeatable, durableCodes: transport.durableCodes });
|
|
159
171
|
if (!again) throw transport.error(failure);
|
|
160
|
-
await
|
|
172
|
+
await sleep(retryDelayMs(attempt, answer), signal);
|
|
161
173
|
}
|
|
162
174
|
}
|
|
163
175
|
|
|
176
|
+
/** Waits `ms`, or rejects with the signal's reason the moment it aborts. */
|
|
177
|
+
function sleep(ms: number, signal: AbortSignal | undefined): Promise<void> {
|
|
178
|
+
return new Promise((resolve, reject) => {
|
|
179
|
+
const timer = setTimeout(() => {
|
|
180
|
+
signal?.removeEventListener("abort", stop);
|
|
181
|
+
resolve();
|
|
182
|
+
}, ms);
|
|
183
|
+
function stop() {
|
|
184
|
+
clearTimeout(timer);
|
|
185
|
+
reject(signal?.reason);
|
|
186
|
+
}
|
|
187
|
+
signal?.addEventListener("abort", stop, { once: true });
|
|
188
|
+
});
|
|
189
|
+
}
|
|
190
|
+
|
|
164
191
|
interface Prepared {
|
|
165
192
|
method: HttpMethod;
|
|
166
193
|
path: string;
|
|
@@ -223,10 +250,12 @@ function prepare(
|
|
|
223
250
|
|
|
224
251
|
/** One attempt. Never throws: a failure is a value, so the loop can ask the rule about it. */
|
|
225
252
|
async function once<T, M>(
|
|
226
|
-
fetchImpl:
|
|
253
|
+
fetchImpl: NonNullable<Transport["fetch"]>,
|
|
227
254
|
request: Prepared,
|
|
228
255
|
timeoutMs: number,
|
|
256
|
+
signal: AbortSignal | undefined,
|
|
229
257
|
): Promise<Outcome<T, M>> {
|
|
258
|
+
const timeout = AbortSignal.timeout(timeoutMs);
|
|
230
259
|
const base = { method: request.method, path: request.path, timeoutMs };
|
|
231
260
|
let response: Response;
|
|
232
261
|
let text: string;
|
|
@@ -235,7 +264,7 @@ async function once<T, M>(
|
|
|
235
264
|
method: request.method,
|
|
236
265
|
headers: request.headers,
|
|
237
266
|
body: request.body,
|
|
238
|
-
signal: AbortSignal.timeout
|
|
267
|
+
signal: signal === undefined ? timeout : AbortSignal.any([signal, timeout]),
|
|
239
268
|
});
|
|
240
269
|
// Inside the try: a connection that drops halfway through the body is no answer either.
|
|
241
270
|
text = await response.text();
|