@zerolith/client 0.1.0-alpha.7 → 0.1.0-alpha.9
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 +4 -4
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +13 -1
- package/dist/cli.js.map +1 -1
- package/dist/generate.d.ts.map +1 -1
- package/dist/generate.js +7 -1
- package/dist/generate.js.map +1 -1
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/dist/production/generate.js +16 -0
- package/dist/production/generate.js.map +1 -0
- package/dist/production/index.js +2 -0
- package/dist/production/index.js.map +1 -0
- package/dist/production/port.js +2 -0
- package/dist/production/port.js.map +1 -0
- package/package.json +11 -8
- package/src/cli.ts +17 -1
- package/src/generate.ts +10 -1
- package/src/index.ts +1 -1
package/README.md
CHANGED
|
@@ -17,15 +17,15 @@ const notes = api.query("listNotes", () => ({ query: { q: search.get() } }));
|
|
|
17
17
|
|
|
18
18
|
A response outside 2xx rejects with a `ProblemError` carrying the RFC 9457 problem the server sent, or one built from the status line. `query` wraps an operation in a resource that calls again when the signals it reads change. A custom `transport` answers requests in process, for tests or an Electron bridge, and the client never assumes which server produced the document.
|
|
19
19
|
|
|
20
|
-
The guide is on the [docs site](https://
|
|
20
|
+
The guide is on the [docs site](https://zerolith.dev/guide/client/).
|
|
21
21
|
|
|
22
22
|
Status: alpha. Install with `npm install @zerolith/client@alpha`; the API may change before 1.0.
|
|
23
23
|
|
|
24
24
|
## Documentation
|
|
25
25
|
|
|
26
|
-
- The [typed client guide](https://
|
|
27
|
-
- The [reference](https://
|
|
28
|
-
- New to zerolith? The [tutorial](https://
|
|
26
|
+
- The [typed client guide](https://zerolith.dev/guide/client/) explains it with examples that run as tests.
|
|
27
|
+
- The [reference](https://zerolith.dev/reference/zerolith-client/) lists every export, generated from the source.
|
|
28
|
+
- New to zerolith? The [tutorial](https://zerolith.dev/learn/) builds an app step by step, and the [playground](https://zerolith.dev/playground/) runs code in the browser.
|
|
29
29
|
|
|
30
30
|
## License
|
|
31
31
|
|
package/dist/cli.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";
|
|
1
|
+
{"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";AAoDA,2EAA2E;AAC3E,wBAAsB,IAAI,CAAC,IAAI,EAAE,SAAS,MAAM,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC,CAoCnE"}
|
package/dist/cli.js
CHANGED
|
@@ -4,7 +4,9 @@
|
|
|
4
4
|
* module for an OpenAPI document to a file, or to standard output.
|
|
5
5
|
*/
|
|
6
6
|
import { readFile, writeFile } from "node:fs/promises";
|
|
7
|
+
import { realpathSync } from "node:fs";
|
|
7
8
|
import process from "node:process";
|
|
9
|
+
import { pathToFileURL } from "node:url";
|
|
8
10
|
import { generateClient } from "./generate.js";
|
|
9
11
|
const USAGE = "usage: zerolith-client <openapi.json> [--out <file.ts>] [--name <Api>]\n";
|
|
10
12
|
function parse(argv) {
|
|
@@ -61,7 +63,17 @@ export async function main(argv) {
|
|
|
61
63
|
}
|
|
62
64
|
return 0;
|
|
63
65
|
}
|
|
64
|
-
|
|
66
|
+
/** True when node started this module, directly or through the bin link npm installs, which it resolves the way node resolves its entry. */
|
|
67
|
+
function started() {
|
|
68
|
+
const entry = process.argv[1];
|
|
69
|
+
try {
|
|
70
|
+
return entry !== undefined && pathToFileURL(realpathSync(entry)).href === import.meta.url;
|
|
71
|
+
}
|
|
72
|
+
catch {
|
|
73
|
+
return false;
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
if (started()) {
|
|
65
77
|
process.exitCode = await main(process.argv.slice(2));
|
|
66
78
|
}
|
|
67
79
|
//# sourceMappingURL=cli.js.map
|
package/dist/cli.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
|
package/dist/generate.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"generate.d.ts","sourceRoot":"","sources":["../src/generate.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"generate.d.ts","sourceRoot":"","sources":["../src/generate.ts"],"names":[],"mappings":"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"}
|
package/dist/generate.js
CHANGED
|
@@ -29,6 +29,12 @@ function typeName(text) {
|
|
|
29
29
|
function key(name) {
|
|
30
30
|
return IDENTIFIER.test(name) ? name : JSON.stringify(name);
|
|
31
31
|
}
|
|
32
|
+
/** Line breaks, CR LF counted once, which would end a `//` comment and turn the rest of its line into code. */
|
|
33
|
+
const LINE_BREAKS = new RegExp(`${String.fromCodePoint(13, 10)}|[${String.fromCodePoint(10, 13, 0x2028, 0x2029)}]`, "g");
|
|
34
|
+
/** Text for a `//` comment, kept on one line, so it cannot end the comment. */
|
|
35
|
+
function commentText(text) {
|
|
36
|
+
return text.replace(LINE_BREAKS, " ");
|
|
37
|
+
}
|
|
32
38
|
function comment(text, indent) {
|
|
33
39
|
if (text === undefined || text.trim() === "") {
|
|
34
40
|
return "";
|
|
@@ -395,7 +401,7 @@ function writeModule(context, specifier, types) {
|
|
|
395
401
|
builtInsUsed = new Set();
|
|
396
402
|
const out = [];
|
|
397
403
|
const title = document.info?.title === undefined ? "an OpenAPI document" : `${document.info.title}${document.info.version === undefined ? "" : ` ${document.info.version}`}`;
|
|
398
|
-
out.push(`// Generated by @zerolith/client from ${title}. Do not edit; regenerate instead.`);
|
|
404
|
+
out.push(`// Generated by @zerolith/client from ${commentText(title)}. Do not edit; regenerate instead.`);
|
|
399
405
|
out.push(`import type { RouteTable } from ${JSON.stringify(specifier)};`);
|
|
400
406
|
out.push("");
|
|
401
407
|
const schemas = Object.entries(document.components?.schemas ?? {}).toSorted(([a], [b]) => a.localeCompare(b));
|
package/dist/generate.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"generate.js","sourceRoot":"","sources":["../src/generate.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"generate.js","sourceRoot":"","sources":["../src/generate.ts"],"names":[],"mappings":"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"}
|
package/dist/index.js
CHANGED
|
@@ -35,7 +35,7 @@ function searchOf(query) {
|
|
|
35
35
|
return search.size > 0 ? `?${search.toString()}` : "";
|
|
36
36
|
}
|
|
37
37
|
function buildRequest(route, input, options, client) {
|
|
38
|
-
const path = route.path.replace(/\{([^}]+)\}/g, (_match, name) => {
|
|
38
|
+
const path = route.path.replace(/\{([^{}]+)\}/g, (_match, name) => {
|
|
39
39
|
const value = input.params?.[name];
|
|
40
40
|
if (value === undefined) {
|
|
41
41
|
throw new TypeError(`zerolith/client: ${route.method.toUpperCase()} ${route.path} needs the path parameter "${name}"`);
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,OAAO,EAAE,kBAAkB,EAA+B,SAAS,EAAE,QAAQ,EAAE,MAAM,UAAU,CAAC;AA+DhG,iHAAiH;AACjH,MAAM,OAAO,YAAa,SAAQ,KAAK;IAEnC,wLAAwL;IAC/K,OAAO,CAAU;IAC1B,0HAA0H;IACjH,QAAQ,CAAW;IAE5B,kIAAkI;IAClI,YAAY,OAAgB,EAAE,QAAkB;QAE5C,KAAK,CAAC,OAAO,CAAC,KAAK,IAAI,QAAQ,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC;QAClD,IAAI,CAAC,IAAI,GAAG,cAAc,CAAC;QAC3B,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;QACvB,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;IAC7B,CAAC;CACJ;AAoBD,SAAS,SAAS,CAAC,IAAa;IAE5B,OAAO,OAAO,IAAI,KAAK,QAAQ,IAAI,IAAI,YAAY,QAAQ,IAAI,IAAI,YAAY,eAAe,IAAI,IAAI,YAAY,IAAI,IAAI,IAAI,YAAY,WAAW,IAAI,WAAW,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,IAAI,YAAY,cAAc,CAAC;AACxN,CAAC;AAED,SAAS,QAAQ,CAAC,KAA8B;IAE5C,MAAM,MAAM,GAAG,IAAI,eAAe,EAAE,CAAC;IACrC,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,EAChD,CAAC;QACG,IAAI,KAAK,KAAK,SAAS,IAAI,KAAK,KAAK,IAAI,EACzC,CAAC;YACG,SAAS;QACb,CAAC;QACD,KAAK,MAAM,IAAI,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,EACzD,CAAC;YACG,MAAM,CAAC,MAAM,CAAC,GAAG,EAAE,OAAO,IAAI,KAAK,QAAQ,IAAI,IAAI,KAAK,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC;QACxG,CAAC;IACL,CAAC;IACD,OAAO,MAAM,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,MAAM,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;AAC1D,CAAC;AAED,SAAS,YAAY,CAAC,KAAuC,EAAE,KAAiB,EAAE,OAAoB,EAAE,MAAqB;IAEzH,MAAM,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
const e=[`get`,`put`,`post`,`delete`,`options`,`head`,`patch`,`query`],t=new Set([`connect`,`trace`,`track`]),n=/^[A-Za-z_$][A-Za-z0-9_$]*$/;function r(e){throw Error(`zerolith/client: ${e}`)}function i(e){return e.replace(/([a-z0-9])([A-Z])/g,`$1 $2`).split(/[^A-Za-z0-9]+/).filter(e=>e!==``)}function a(e){return i(e).map(e=>e.charAt(0).toUpperCase()+e.slice(1)).join(``)}function o(e){let t=a(e);return t.charAt(0).toLowerCase()+t.slice(1)}function s(e){let t=a(e);return/^[0-9]/.test(t)?`_${t}`:t===``?`_`:t}function c(e){return n.test(e)?e:JSON.stringify(e)}const l=RegExp(`${String.fromCodePoint(13,10)}|[${String.fromCodePoint(10,13,8232,8233)}]`,`g`);function u(e){return e.replace(l,` `)}function d(e,t){if(e===void 0||e.trim()===``)return``;let n=e.trim().replace(/\*\//g,`* /`).split(/\r?\n/);return n.length===1?`${t}/** ${n[0]} */\n`:`${t}/**\n${n.map(e=>`${t} * ${e}`.trimEnd()).join(`
|
|
2
|
+
`)}\n${t} */\n`}function f(e,t){return e.split(`
|
|
3
|
+
`).map((e,n)=>n===0?e:`${t}${e}`).join(`
|
|
4
|
+
`)}function p(e,t,n){let i=`#/components/${n}/`;t.startsWith(i)||r(`only local references into components are supported, found ${t}`);let a=decodeURIComponent(t.slice(i.length).replace(/~1/g,`/`).replace(/~0/g,`~`)),o=e.document.components?.[n]?.[a];return o===void 0&&r(`${t} does not exist`),o}function m(e,t,n){let i=t;for(let t=0;i.$ref!==void 0;t++)t>16&&r(`reference loop at ${i.$ref}`),i=p(e,i.$ref,n);return i}let h=new Map,g=new Set;function _(e){return g.add(e),e}function v(e){e.startsWith(`#/components/schemas/`)||r(`only local schema references are supported, found ${e}`);let t=decodeURIComponent(e.slice(21));return h.get(t)??s(t)}function y(e){return e===void 0?`undefined`:JSON.stringify(e)}const b=new Set([`$ref`,`allOf`,`oneOf`,`anyOf`]),x=new Set([`const`,`enum`,`type`,`properties`,`additionalProperties`,`items`,`prefixItems`]);function S(e,t){if(e===void 0)return`unknown`;let n=Object.keys(e);if(n.some(e=>b.has(e))&&n.some(e=>x.has(e))){let n=t=>Object.fromEntries(Object.entries(e).filter(([e])=>t(e)));return`${C(S(n(e=>!x.has(e)),t))} & ${C(S(n(e=>!b.has(e)),t))}`}if(e.$ref!==void 0)return v(e.$ref);let r=[];if(e.const!==void 0)r.push(y(e.const));else if(e.enum!==void 0)r.push(e.enum.map(y).join(` | `));else if(e.oneOf!==void 0||e.anyOf!==void 0)r.push((e.oneOf??e.anyOf??[]).map(e=>S(e,t)).join(` | `));else if(e.allOf!==void 0)r.push(e.allOf.map(e=>C(S(e,t))).join(` & `));else{let n=Array.isArray(e.type)?e.type:e.type===void 0?[]:[e.type];n.length===0&&(e.properties!==void 0||e.additionalProperties!==void 0)&&n.push(`object`),n.length===0&&(e.items!==void 0||e.prefixItems!==void 0)&&n.push(`array`),n.length===0&&r.push(`unknown`);for(let i of n)r.push(w(i,e,t))}return e.nullable===!0&&!r.includes(`null`)&&r.push(`null`),[...new Set(r)].join(` | `)}function C(e){return e.includes(` | `)?`(${e})`:e}function w(e,t,n){switch(e){case`string`:return`string`;case`number`:case`integer`:return`number`;case`boolean`:return`boolean`;case`null`:return`null`;case`array`:if(t.prefixItems!==void 0){let e=t.items===void 0?``:`, ...${C(S(t.items,n))}[]`;return`[${t.prefixItems.map(e=>S(e,n)).join(`, `)}${e}]`}return`${C(S(t.items,n))}[]`;case`object`:return T(t,n);default:return`unknown`}}function T(e,t){let n=Object.entries(e.properties??{}),r=new Set(e.required??[]),i=e.additionalProperties,a=i===void 0||i===!1?void 0:`${_(`Record`)}<string, ${i===!0?`unknown`:S(i,t)}>`;if(n.length===0)return a??`${_(`Record`)}<string, ${i===!1?`never`:`unknown`}>`;let o=`${t} `,s=`{\n${n.map(([e,t])=>{let n=r.has(e)?``:`?`;return`${d(t.description,o)}${o}${c(e)}${n}: ${f(S(t,o),``)};`}).join(`
|
|
5
|
+
`)}\n${t}}`;return a===void 0?s:`${s} & ${a}`}function E(e){if(e===void 0||Object.keys(e).length===0)return{kind:`none`};for(let[t,n]of Object.entries(e)){let e=t.split(`;`)[0]?.trim().toLowerCase()??``;if(e===`application/json`||e.endsWith(`+json`))return{kind:`json`,schema:n.schema}}let t=Object.keys(e).map(e=>e.split(`;`)[0]?.trim().toLowerCase()??``);return t.includes(`multipart/form-data`)?{kind:`form`}:t.includes(`application/x-www-form-urlencoded`)?{kind:`urlencoded`}:t.some(e=>e.startsWith(`text/`))?{kind:`text`}:{kind:`other`}}function D(e,t,n){return e.operationId!==void 0&&e.operationId.trim()!==``?o(e.operationId):o(`${t} ${n.split(`/`).filter(e=>e!==``).map(e=>{let t=/^\{(.+)\}$/.exec(e);return t===null?a(e):`By${a(t[1]??``)}`}).join(` `)}`)}function O(e,t,n){let i=new Map;for(let a of[t.parameters??[],n.parameters??[]])for(let t of a){let n=m(e,t,`parameters`);(n.name===void 0||n.in===void 0)&&r(`a parameter needs a name and a location`),i.set(`${n.in}:${n.name}`,n)}let a=[],o=[],s=!1;for(let e of i.values()){let t=e.name??``,n=S(e.schema??(e.content===void 0?void 0:Object.values(e.content)[0]?.schema),` `),r=d(e.description,` `);if(e.in===`path`)a.push(`${r} ${c(t)}: ${n};`);else if(e.in===`query`){let i=e.required===!0;s||=i,o.push(`${r} ${c(t)}${i?``:`?`}: ${n}${i?``:` | undefined`};`)}else e.in===`querystring`&&(s||=e.required===!0,o.push(`${r} [name: string]: unknown;`))}return{params:a,query:o,queryRequired:s}}function k(e,t){if(t.requestBody===void 0)return;let n=m(e,t.requestBody,`requestBodies`),r=E(n.content),i=n.required===!0;switch(r.kind){case`json`:return{type:S(r.schema,` `),required:i};case`form`:return{type:_(`FormData`),required:i};case`urlencoded`:return{type:_(`URLSearchParams`),required:i};case`text`:return{type:`string`,required:i};case`none`:return;default:return{type:_(`BodyInit`),required:i}}}function A(e,t){let n=Object.entries(t.responses??{}),r=n.filter(([e])=>/^2(\d\d|XX)$/.test(e)).toSorted(([e],[t])=>e.localeCompare(t)),i=r.length>0?r:n.filter(([e])=>e==="default");if(i.length===0)return`unknown`;let a=new Set;for(let[,t]of i){let n=E(m(e,t,`responses`).content);switch(n.kind){case`json`:a.add(S(n.schema,` `));break;case`text`:a.add(`string`);break;case`none`:a.add(`undefined`);break;default:a.add(_(`Blob`))}}return[...a].join(` | `)}function j(e,t,n,r,i){let{params:a,query:o,queryRequired:s}=O(e,n,i),c=[` method: ${JSON.stringify(r)};`,` path: ${JSON.stringify(t)};`];a.length>0&&c.push(` params: {\n${a.join(`
|
|
6
|
+
`)}\n };`),o.length>0&&c.push(` query${s?``:`?`}: {\n${o.join(`
|
|
7
|
+
`)}\n };`);let l=k(e,i);l!==void 0&&c.push(` body${l.required?``:`?`}: ${l.type}${l.required?``:` | undefined`};`),c.push(` output: ${A(e,i)};`);let u=[i.summary,i.description,i.deprecated===!0?`@deprecated`:void 0].filter(e=>e!==void 0&&e!==``).join(`
|
|
8
|
+
|
|
9
|
+
`);return{name:D(i,r,t),method:r,path:t,lines:c,doc:u===``?void 0:u}}const M=new Map([[`Record`,`TypeScript's Record type`],[`Blob`,`the global Blob type`],[`FormData`,`the global FormData type`],[`URLSearchParams`,`the global URLSearchParams type`],[`BodyInit`,`the global BodyInit type`]]);function N(e,t){let n=new Map([[`RouteTable`,`the RouteTable type the module imports`],[e,`the interface of the operations, which apiName renames`]]);for(let[e,r]of M)t.has(e)&&n.set(e,`${r}, which this module uses`);return n}function P(e,t){let n=new Map(t),r=new Map;for(let t of e){let e=s(t);n.has(e)||(n.set(e,`the type of the schema ${JSON.stringify(t)}`),r.set(t,{type:e}))}for(let t of e){if(r.has(t))continue;let e=s(t),i=2;for(;n.has(`${e}${i}`);)i++;let a=`${e}${i}`;r.set(t,{type:a,reason:`named ${a} because ${e} is already ${n.get(e)??`taken`}`}),n.set(a,`the type of the schema ${JSON.stringify(t)}`)}return r}export function generateClient(e,t={}){typeof e.openapi==`string`&&e.openapi.startsWith(`3.`)||r(`expected an OpenAPI 3.x document, found openapi: ${JSON.stringify(e.openapi)}`);let n={document:e,apiName:t.apiName??`Api`},i=t.clientSpecifier??`@zerolith/client`,a=Object.keys(e.components?.schemas??{}).toSorted((e,t)=>e.localeCompare(t)),o=F(n,i,P(a,N(n.apiName,new Set)));return[...o.types.values()].some(({type:e})=>o.used.has(e))?F(n,i,P(a,N(n.apiName,o.used))).code:o.code}function F(n,i,a){let{document:o}=n;g=new Set;let l=[],f=o.info?.title===void 0?`an OpenAPI document`:`${o.info.title}${o.info.version===void 0?``:` ${o.info.version}`}`;l.push(`// Generated by @zerolith/client from ${u(f)}. Do not edit; regenerate instead.`),l.push(`import type { RouteTable } from ${JSON.stringify(i)};`),l.push(``);let p=Object.entries(o.components?.schemas??{}).toSorted(([e],[t])=>e.localeCompare(t));h=new Map(Array.from(a,([e,{type:t}])=>[e,t]));for(let[e,t]of p){let{type:n,reason:r}=a.get(e)??{type:s(e)},i=r===void 0?void 0:`The schema ${JSON.stringify(e)}, ${r}.`,o=[t.description??t.title,i].filter(e=>e!==void 0&&e.trim()!==``).join(`
|
|
10
|
+
|
|
11
|
+
`);l.push(`${d(o,``)}export type ${n} = ${S(t,``)};`),l.push(``)}let _=[],v=new Set;for(let[i,a]of Object.entries(o.paths??{}).toSorted(([e],[t])=>e.localeCompare(t))){let o=m(n,a,`pathItems`),s=[];for(let t of e){let e=o[t];e!==void 0&&s.push([t,e])}for(let[e,n]of Object.entries(o.additionalOperations??{}))/^[a-z0-9!#$%&'*+.^_`|~-]+$/i.test(e)||r(`${JSON.stringify(i)} has the additional operation ${JSON.stringify(e)}, which is not an HTTP method name`),t.has(e.toLowerCase())||s.push([e.toLowerCase(),n]);for(let[e,t]of s){let a=j(n,i,o,e,t);v.has(a.name)&&r(`two operations resolve to the name "${a.name}"; give them distinct operationId values`),v.add(a.name),_.push(a)}}return l.push(`export interface ${n.apiName}\n{`),l.push(_.map(e=>`${d(e.doc,` `)} ${c(e.name)}: {\n${e.lines.join(`
|
|
12
|
+
`)}\n };`).join(`
|
|
13
|
+
`)),l.push(`}`),l.push(``),l.push(`export const routes = {`),l.push(_.map(e=>` ${c(e.name)}: { method: ${JSON.stringify(e.method)}, path: ${JSON.stringify(e.path)} }`).join(`,
|
|
14
|
+
`)),l.push(`} as const satisfies RouteTable<${n.apiName}>;`),l.push(``),{code:l.join(`
|
|
15
|
+
`),used:g,types:a}}
|
|
16
|
+
//# sourceMappingURL=generate.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"generate.js","sources":["../../src/generate.ts"],"sourcesContent":["/**\n * Generates the contract module from an OpenAPI 3.x document: one type per\n * component schema, an `Api` interface with one entry per operation, and\n * the `routes` table the client runs on. Pure string work, so it runs\n * anywhere; the `zerolith-client` command wraps it for the shell.\n */\n\n/** A JSON Schema object as OpenAPI 3.1 and later carry it (draft 2020-12 plus the OAS vocabulary). */\nexport interface SchemaObject\n{\n /** A reference to `#/components/schemas/<name>`, rendered as that component's generated type, intersected with the keywords beside it that shape a type, such as `properties`, as OpenAPI 3.1 allows; any other target fails generation. */\n $ref?: string;\n /** The JSON type, or since OpenAPI 3.1 an array of types rendered as a union; `integer` renders as `number`, and when it is absent the object or array keywords imply one, else the type is `unknown`. */\n type?: string | string[];\n /** The OpenAPI 3.0 flag that also allows `null`; when `true`, `null` joins the type. */\n nullable?: boolean;\n /** The allowed values, rendered as a union of their literal types; it takes precedence over `type`, and intersects with a composition keyword or `$ref` beside it. */\n enum?: unknown[];\n /** The single allowed value (OpenAPI 3.1 and later), rendered as its literal type; it takes precedence over `enum` and `type`, and intersects with a composition keyword or `$ref` beside it. */\n const?: unknown;\n /** The object's properties, each generated as a member that is optional unless `required` lists it, with the property's `description` as its doc comment. */\n properties?: Record<string, SchemaObject>;\n /** The names in `properties` that must be present; every other property is generated as optional. */\n required?: string[];\n /** The schema of keys beyond `properties`, rendered as a `Record<string, ...>` joined to them with `&`; `true` allows `unknown` values, and `false` makes an object without properties `Record<string, never>`. */\n additionalProperties?: boolean | SchemaObject;\n /** The schema of each array element, rendered as `T[]`, or `unknown[]` without it; beside `prefixItems` it types the elements after the tuple. */\n items?: SchemaObject;\n /** The schemas of the leading array elements by position (OpenAPI 3.1 and later), rendered as a tuple; without `items` the tuple has no rest element. */\n prefixItems?: SchemaObject[];\n /** Alternatives of which exactly one matches, rendered as a union; it takes precedence over `anyOf` and `allOf`, and the keywords beside it that shape a type, such as `properties`, intersect with it. */\n oneOf?: SchemaObject[];\n /** Alternatives of which at least one matches, rendered as a union unless `oneOf` is present; the keywords beside it that shape a type, such as `properties`, intersect with it. */\n anyOf?: SchemaObject[];\n /** Schemas that all match, rendered as an intersection unless `oneOf` or `anyOf` is present; the keywords beside it that shape a type, such as `properties`, join the intersection. */\n allOf?: SchemaObject[];\n /** Becomes the doc comment on a component schema's generated type, ahead of `title`, and on an object property's member. */\n description?: string;\n /** The doc comment on a component schema's generated type when `description` is absent; the type's name comes from the component's key, not from `title`. */\n title?: string;\n}\n\n/** A Parameter Object or a reference to one. */\nexport interface ParameterObject\n{\n /** A reference to `#/components/parameters/<name>`, which replaces this object; any other target, or a missing one, fails generation. */\n $ref?: string;\n /** The member's key in the generated `params` or `query`, matching the `{name}` placeholder for a path parameter; a parameter without `name` or `in` fails generation. */\n name?: string;\n /** Where the parameter travels: `path` fills `params`, `query` adds a member to `query`, `querystring` (OpenAPI 3.2) lets `query` take any key, and `header` and `cookie` are left out. */\n in?: \"query\" | \"querystring\" | \"header\" | \"path\" | \"cookie\";\n /** Makes a query parameter's member, and the whole `query` input, required; path parameters are generated as required either way, since OpenAPI demands `true` for them. */\n required?: boolean;\n /** The doc comment on the parameter's generated member. */\n description?: string;\n /** The schema of the value, rendered as the member's type; without it or `content`, the type is `unknown`. */\n schema?: SchemaObject;\n /** The single media type entry OpenAPI allows in place of `schema`; when `schema` is absent, the entry's `schema` gives the member's type. */\n content?: Record<string, MediaTypeObject>;\n}\n\n/** A Media Type Object. */\nexport interface MediaTypeObject\n{\n /** The content's schema, read for a JSON media type in a body and for any media type in a parameter's `content`; when absent, the type is `unknown`. */\n schema?: SchemaObject;\n}\n\n/** A Request Body Object or a reference to one. */\nexport interface RequestBodyObject\n{\n /** A reference to `#/components/requestBodies/<name>`, which replaces this object; any other target, or a missing one, fails generation. */\n $ref?: string;\n /** A brief description of the body; the generator does not carry it into the output. */\n description?: string;\n /** Makes the generated `body` input required; OpenAPI's default is `false`, which generates it as optional. */\n required?: boolean;\n /** The body by media type, where a JSON type takes precedence and gives its schema's type; otherwise `multipart/form-data` gives `FormData`, `application/x-www-form-urlencoded` gives `URLSearchParams`, `text/*` gives `string`, and any other type gives `BodyInit`. */\n content?: Record<string, MediaTypeObject>;\n}\n\n/** A Response Object or a reference to one. */\nexport interface ResponseObject\n{\n /** A reference to `#/components/responses/<name>`, which replaces this object; any other target, or a missing one, fails generation. */\n $ref?: string;\n /** A description of the response; the generator does not carry it into the output. */\n description?: string;\n /** The response body by media type: a JSON type, when present, gives its schema's type, `text/*` gives `string`, any other type gives `Blob`, as the client reads it, and no content gives `undefined`. */\n content?: Record<string, MediaTypeObject>;\n}\n\n/** An Operation Object. */\nexport interface OperationObject\n{\n /** Names the operation's entry in `Api` and `routes`, in camelCase; without it the name comes from the method and path, such as `putNotesById` for `PUT /notes/{id}`, and two entries with one name fail generation. */\n operationId?: string;\n /** The first paragraph of the doc comment on the operation's entry in `Api`. */\n summary?: string;\n /** Follows `summary` in the doc comment on the operation's entry in `Api`. */\n description?: string;\n /** When `true`, the doc comment on the operation's entry ends with `@deprecated`. */\n deprecated?: boolean;\n /** The operation's parameters, merged with the path item's; one with the same `name` and `in` as a path item parameter replaces it. */\n parameters?: ParameterObject[];\n /** The request body, generated as the entry's `body` input; without it the entry has no `body`. */\n requestBody?: RequestBodyObject;\n /** The responses by status code; `output` is the union of every 2xx response, including `2XX`, or of `default` when there is none, and `unknown` without either. */\n responses?: Record<string, ResponseObject>;\n}\n\n/** A Path Item Object. */\nexport interface PathItemObject\n{\n /** A reference to `#/components/pathItems/<name>`, which replaces this item; any other target, or a missing one, fails generation. */\n $ref?: string;\n /** A summary meant for every operation on the path; the generator does not carry it into the output. */\n summary?: string;\n /** A description meant for every operation on the path; the generator does not carry it into the output. */\n description?: string;\n /** Parameters shared by every operation on the path; an operation's own parameter with the same `name` and `in` replaces one. */\n parameters?: ParameterObject[];\n /** The `GET` operation on this path. */\n get?: OperationObject;\n /** The `PUT` operation on this path. */\n put?: OperationObject;\n /** The `POST` operation on this path. */\n post?: OperationObject;\n /** The `DELETE` operation on this path. */\n delete?: OperationObject;\n /** The `OPTIONS` operation on this path. */\n options?: OperationObject;\n /** The `HEAD` operation on this path. */\n head?: OperationObject;\n /** The `PATCH` operation on this path. */\n patch?: OperationObject;\n /** The `TRACE` operation on this path. */\n trace?: OperationObject;\n /** The `QUERY` operation on this path (OpenAPI 3.2): a safe, idempotent request that carries a body. */\n query?: OperationObject;\n /** Operations for other HTTP methods (OpenAPI 3.2), keyed by method name such as `COPY`; each key is lowercased, and one that is not a valid method token fails generation. */\n additionalOperations?: Record<string, OperationObject>;\n}\n\n/** The parts of an OpenAPI document the generator reads. */\nexport interface OpenApiDocument\n{\n /** The OpenAPI version, such as `3.1.0`; a value that does not start with `3.` fails generation. */\n openapi: string;\n /** The API's title and version, which the generated file's header comment names as its source. */\n info?: { title?: string; version?: string };\n /** Path templates mapped to their items; every operation under them becomes an entry of `Api` and `routes`, sorted by path. */\n paths?: Record<string, PathItemObject>;\n /** Reusable objects: each entry of `schemas` becomes an exported type named after its key, and `$ref` values resolve into the other sections. */\n components?: {\n schemas?: Record<string, SchemaObject>;\n parameters?: Record<string, ParameterObject>;\n requestBodies?: Record<string, RequestBodyObject>;\n responses?: Record<string, ResponseObject>;\n pathItems?: Record<string, PathItemObject>;\n };\n}\n\n/** Options for `generateClient`. */\nexport interface GenerateOptions\n{\n /** The module the generated file imports `RouteTable` from. Defaults to `@zerolith/client`. */\n clientSpecifier?: string;\n /** The name of the generated contract interface. Defaults to `Api`. */\n apiName?: string;\n}\n\n/** The methods a Path Item names that the client can send; `trace` is left out, since `fetch` refuses TRACE. */\nconst METHODS = [\"get\", \"put\", \"post\", \"delete\", \"options\", \"head\", \"patch\", \"query\"] as const;\n\n/** Methods `fetch` refuses to send, left out of `additionalOperations` too. */\nconst FORBIDDEN_METHODS: ReadonlySet<string> = new Set([\"connect\", \"trace\", \"track\"]);\nconst IDENTIFIER = /^[A-Za-z_$][A-Za-z0-9_$]*$/;\n\ninterface Context\n{\n document: OpenApiDocument;\n apiName: string;\n}\n\nfunction fail(message: string): never\n{\n throw new Error(`zerolith/client: ${message}`);\n}\n\nfunction words(text: string): string[]\n{\n return text.replace(/([a-z0-9])([A-Z])/g, \"$1 $2\").split(/[^A-Za-z0-9]+/).filter((word) => word !== \"\");\n}\n\nfunction pascal(text: string): string\n{\n return words(text).map((word) => word.charAt(0).toUpperCase() + word.slice(1)).join(\"\");\n}\n\nfunction camel(text: string): string\n{\n const name = pascal(text);\n return name.charAt(0).toLowerCase() + name.slice(1);\n}\n\nfunction typeName(text: string): string\n{\n const name = pascal(text);\n return /^[0-9]/.test(name) ? `_${name}` : name === \"\" ? \"_\" : name;\n}\n\nfunction key(name: string): string\n{\n return IDENTIFIER.test(name) ? name : JSON.stringify(name);\n}\n\n/** Line breaks, CR LF counted once, which would end a `//` comment and turn the rest of its line into code. */\nconst LINE_BREAKS = new RegExp(`${String.fromCodePoint(13, 10)}|[${String.fromCodePoint(10, 13, 0x2028, 0x2029)}]`, \"g\");\n\n/** Text for a `//` comment, kept on one line, so it cannot end the comment. */\nfunction commentText(text: string): string\n{\n return text.replace(LINE_BREAKS, \" \");\n}\n\nfunction comment(text: string | undefined, indent: string): string\n{\n if (text === undefined || text.trim() === \"\")\n {\n return \"\";\n }\n const lines = text.trim().replace(/\\*\\//g, \"* /\").split(/\\r?\\n/);\n return lines.length === 1 ? `${indent}/** ${lines[0]} */\\n` : `${indent}/**\\n${lines.map((line) => `${indent} * ${line}`.trimEnd()).join(\"\\n\")}\\n${indent} */\\n`;\n}\n\nfunction indentLines(text: string, indent: string): string\n{\n return text.split(\"\\n\").map((line, index) => (index === 0 ? line : `${indent}${line}`)).join(\"\\n\");\n}\n\nfunction resolveRef<T>(context: Context, ref: string, section: string): T\n{\n const prefix = `#/components/${section}/`;\n if (!ref.startsWith(prefix))\n {\n fail(`only local references into components are supported, found ${ref}`);\n }\n const name = decodeURIComponent(ref.slice(prefix.length).replace(/~1/g, \"/\").replace(/~0/g, \"~\"));\n const table = (context.document.components as Record<string, Record<string, T> | undefined> | undefined)?.[section];\n const found = table?.[name];\n if (found === undefined)\n {\n fail(`${ref} does not exist`);\n }\n return found;\n}\n\nfunction deref<T extends { $ref?: string }>(context: Context, value: T, section: string): T\n{\n let current = value;\n for (let depth = 0; current.$ref !== undefined; depth++)\n {\n if (depth > 16)\n {\n fail(`reference loop at ${current.$ref}`);\n }\n current = resolveRef<T>(context, current.$ref, section);\n }\n return current;\n}\n\n/** The type name each schema of the document being generated is written under, by schema name, which a `$ref` to the schema uses; `writeModule` sets it before it writes a type. */\nlet schemaTypes: ReadonlyMap<string, string> = new Map();\n\n/** The built-in type names the module being generated writes, as `Record` for an object of free keys or `Blob` for a binary response; `writeModule` empties it before it writes. */\nlet builtInsUsed = new Set<string>();\n\n/** A built-in type name, recorded as written by the module being generated. */\nfunction builtIn(name: string): string\n{\n builtInsUsed.add(name);\n return name;\n}\n\nfunction schemaRefName(ref: string): string\n{\n const prefix = \"#/components/schemas/\";\n if (!ref.startsWith(prefix))\n {\n fail(`only local schema references are supported, found ${ref}`);\n }\n const name = decodeURIComponent(ref.slice(prefix.length));\n return schemaTypes.get(name) ?? typeName(name);\n}\n\nfunction literal(value: unknown): string\n{\n return value === undefined ? \"undefined\" : JSON.stringify(value);\n}\n\n/** Renders a schema as a TypeScript type. `indent` is the current indentation for nested object types. */\n/** The keywords that combine other schemas; the type they give is intersected with the schema's own keywords. */\nconst COMPOSITION_KEYWORDS: ReadonlySet<string> = new Set([\"$ref\", \"allOf\", \"oneOf\", \"anyOf\"]);\n\n/** The keywords that shape a type on their own, beside a composition keyword. */\nconst OWN_KEYWORDS: ReadonlySet<string> = new Set([\"const\", \"enum\", \"type\", \"properties\", \"additionalProperties\", \"items\", \"prefixItems\"]);\n\nfunction typeOf(schema: SchemaObject | undefined, indent: string): string\n{\n if (schema === undefined)\n {\n return \"unknown\";\n }\n const keywords = Object.keys(schema);\n if (keywords.some((keyword) => COMPOSITION_KEYWORDS.has(keyword)) && keywords.some((keyword) => OWN_KEYWORDS.has(keyword)))\n {\n const part = (keep: (keyword: string) => boolean): SchemaObject => Object.fromEntries(Object.entries(schema).filter(([keyword]) => keep(keyword))) as SchemaObject;\n return `${wrap(typeOf(part((keyword) => !OWN_KEYWORDS.has(keyword)), indent))} & ${wrap(typeOf(part((keyword) => !COMPOSITION_KEYWORDS.has(keyword)), indent))}`;\n }\n if (schema.$ref !== undefined)\n {\n return schemaRefName(schema.$ref);\n }\n const parts: string[] = [];\n if (schema.const !== undefined)\n {\n parts.push(literal(schema.const));\n }\n else if (schema.enum !== undefined)\n {\n parts.push(schema.enum.map(literal).join(\" | \"));\n }\n else if (schema.oneOf !== undefined || schema.anyOf !== undefined)\n {\n parts.push((schema.oneOf ?? schema.anyOf ?? []).map((option) => typeOf(option, indent)).join(\" | \"));\n }\n else if (schema.allOf !== undefined)\n {\n parts.push(schema.allOf.map((option) => wrap(typeOf(option, indent))).join(\" & \"));\n }\n else\n {\n const types = Array.isArray(schema.type) ? schema.type : schema.type === undefined ? [] : [schema.type];\n if (types.length === 0 && (schema.properties !== undefined || schema.additionalProperties !== undefined))\n {\n types.push(\"object\");\n }\n if (types.length === 0 && (schema.items !== undefined || schema.prefixItems !== undefined))\n {\n types.push(\"array\");\n }\n if (types.length === 0)\n {\n parts.push(\"unknown\");\n }\n for (const type of types)\n {\n parts.push(primitive(type, schema, indent));\n }\n }\n if (schema.nullable === true && !parts.includes(\"null\"))\n {\n parts.push(\"null\");\n }\n return [...new Set(parts)].join(\" | \");\n}\n\nfunction wrap(type: string): string\n{\n return type.includes(\" | \") ? `(${type})` : type;\n}\n\nfunction primitive(type: string, schema: SchemaObject, indent: string): string\n{\n switch (type)\n {\n case \"string\":\n return \"string\";\n case \"number\":\n case \"integer\":\n return \"number\";\n case \"boolean\":\n return \"boolean\";\n case \"null\":\n return \"null\";\n case \"array\":\n if (schema.prefixItems !== undefined)\n {\n const rest = schema.items === undefined ? \"\" : `, ...${wrap(typeOf(schema.items, indent))}[]`;\n return `[${schema.prefixItems.map((item) => typeOf(item, indent)).join(\", \")}${rest}]`;\n }\n return `${wrap(typeOf(schema.items, indent))}[]`;\n case \"object\":\n return objectType(schema, indent);\n default:\n return \"unknown\";\n }\n}\n\nfunction objectType(schema: SchemaObject, indent: string): string\n{\n const properties = Object.entries(schema.properties ?? {});\n const required = new Set(schema.required ?? []);\n const extra = schema.additionalProperties;\n const record = extra === undefined || extra === false ? undefined : `${builtIn(\"Record\")}<string, ${extra === true ? \"unknown\" : typeOf(extra, indent)}>`;\n if (properties.length === 0)\n {\n return record ?? `${builtIn(\"Record\")}<string, ${extra === false ? \"never\" : \"unknown\"}>`;\n }\n const inner = `${indent} `;\n const lines = properties.map(([name, property]) =>\n {\n const optional = required.has(name) ? \"\" : \"?\";\n return `${comment(property.description, inner)}${inner}${key(name)}${optional}: ${indentLines(typeOf(property, inner), \"\")};`;\n });\n const body = `{\\n${lines.join(\"\\n\")}\\n${indent}}`;\n return record === undefined ? body : `${body} & ${record}`;\n}\n\nfunction jsonSchemaOf(content: Record<string, MediaTypeObject> | undefined): { kind: \"json\"; schema: SchemaObject | undefined } | { kind: \"form\" } | { kind: \"urlencoded\" } | { kind: \"text\" } | { kind: \"none\" } | { kind: \"other\" }\n{\n if (content === undefined || Object.keys(content).length === 0)\n {\n return { kind: \"none\" };\n }\n for (const [type, media] of Object.entries(content))\n {\n const bare = type.split(\";\")[0]?.trim().toLowerCase() ?? \"\";\n if (bare === \"application/json\" || bare.endsWith(\"+json\"))\n {\n return { kind: \"json\", schema: media.schema };\n }\n }\n const types = Object.keys(content).map((type) => type.split(\";\")[0]?.trim().toLowerCase() ?? \"\");\n if (types.includes(\"multipart/form-data\"))\n {\n return { kind: \"form\" };\n }\n if (types.includes(\"application/x-www-form-urlencoded\"))\n {\n return { kind: \"urlencoded\" };\n }\n if (types.some((type) => type.startsWith(\"text/\")))\n {\n return { kind: \"text\" };\n }\n return { kind: \"other\" };\n}\n\ninterface Entry\n{\n name: string;\n method: string;\n path: string;\n lines: string[];\n doc: string | undefined;\n}\n\nfunction operationName(operation: OperationObject, method: string, path: string): string\n{\n if (operation.operationId !== undefined && operation.operationId.trim() !== \"\")\n {\n return camel(operation.operationId);\n }\n const segments = path.split(\"/\").filter((segment) => segment !== \"\").map((segment) =>\n {\n const match = /^\\{(.+)\\}$/.exec(segment);\n return match === null ? pascal(segment) : `By${pascal(match[1] ?? \"\")}`;\n });\n return camel(`${method} ${segments.join(\" \")}`);\n}\n\nfunction parameterGroups(context: Context, item: PathItemObject, operation: OperationObject): { params: string[]; query: string[]; queryRequired: boolean }\n{\n const merged = new Map<string, ParameterObject>();\n for (const list of [item.parameters ?? [], operation.parameters ?? []])\n {\n for (const raw of list)\n {\n const parameter = deref(context, raw, \"parameters\");\n if (parameter.name === undefined || parameter.in === undefined)\n {\n fail(`a parameter needs a name and a location`);\n }\n merged.set(`${parameter.in}:${parameter.name}`, parameter);\n }\n }\n const params: string[] = [];\n const query: string[] = [];\n let queryRequired = false;\n for (const parameter of merged.values())\n {\n const name = parameter.name ?? \"\";\n const schema = parameter.schema ?? (parameter.content === undefined ? undefined : Object.values(parameter.content)[0]?.schema);\n const type = typeOf(schema, \" \");\n const doc = comment(parameter.description, \" \");\n if (parameter.in === \"path\")\n {\n params.push(`${doc} ${key(name)}: ${type};`);\n }\n else if (parameter.in === \"query\")\n {\n const required = parameter.required === true;\n queryRequired ||= required;\n query.push(`${doc} ${key(name)}${required ? \"\" : \"?\"}: ${type}${required ? \"\" : \" | undefined\"};`);\n }\n else if (parameter.in === \"querystring\")\n {\n queryRequired ||= parameter.required === true;\n query.push(`${doc} [name: string]: unknown;`);\n }\n }\n return { params, query, queryRequired };\n}\n\nfunction bodyType(context: Context, operation: OperationObject): { type: string; required: boolean } | undefined\n{\n if (operation.requestBody === undefined)\n {\n return undefined;\n }\n const body = deref(context, operation.requestBody, \"requestBodies\");\n const content = jsonSchemaOf(body.content);\n const required = body.required === true;\n switch (content.kind)\n {\n case \"json\":\n return { type: typeOf(content.schema, \" \"), required };\n case \"form\":\n return { type: builtIn(\"FormData\"), required };\n case \"urlencoded\":\n return { type: builtIn(\"URLSearchParams\"), required };\n case \"text\":\n return { type: \"string\", required };\n case \"none\":\n return undefined;\n default:\n return { type: builtIn(\"BodyInit\"), required };\n }\n}\n\nfunction outputType(context: Context, operation: OperationObject): string\n{\n const responses = Object.entries(operation.responses ?? {});\n const successful = responses.filter(([status]) => /^2(\\d\\d|XX)$/.test(status)).toSorted(([a], [b]) => a.localeCompare(b));\n const chosen = successful.length > 0 ? successful : responses.filter(([status]) => status === \"default\");\n if (chosen.length === 0)\n {\n return \"unknown\";\n }\n const types = new Set<string>();\n for (const [, raw] of chosen)\n {\n const response = deref(context, raw, \"responses\");\n const content = jsonSchemaOf(response.content);\n switch (content.kind)\n {\n case \"json\":\n types.add(typeOf(content.schema, \" \"));\n break;\n case \"text\":\n types.add(\"string\");\n break;\n case \"none\":\n types.add(\"undefined\");\n break;\n default:\n types.add(builtIn(\"Blob\"));\n }\n }\n return [...types].join(\" | \");\n}\n\nfunction entryOf(context: Context, path: string, item: PathItemObject, method: string, operation: OperationObject): Entry\n{\n const { params, query, queryRequired } = parameterGroups(context, item, operation);\n const lines = [` method: ${JSON.stringify(method)};`, ` path: ${JSON.stringify(path)};`];\n if (params.length > 0)\n {\n lines.push(` params: {\\n${params.join(\"\\n\")}\\n };`);\n }\n if (query.length > 0)\n {\n lines.push(` query${queryRequired ? \"\" : \"?\"}: {\\n${query.join(\"\\n\")}\\n };`);\n }\n const body = bodyType(context, operation);\n if (body !== undefined)\n {\n lines.push(` body${body.required ? \"\" : \"?\"}: ${body.type}${body.required ? \"\" : \" | undefined\"};`);\n }\n lines.push(` output: ${outputType(context, operation)};`);\n const doc = [operation.summary, operation.description, operation.deprecated === true ? \"@deprecated\" : undefined].filter((part) => part !== undefined && part !== \"\").join(\"\\n\\n\");\n return { name: operationName(operation, method, path), method, path, lines, doc: doc === \"\" ? undefined : doc };\n}\n\n/** The built-in types a generated module may write, with what each is. */\nconst BUILT_INS: ReadonlyMap<string, string> = new Map([\n [\"Record\", \"TypeScript's Record type\"],\n [\"Blob\", \"the global Blob type\"],\n [\"FormData\", \"the global FormData type\"],\n [\"URLSearchParams\", \"the global URLSearchParams type\"],\n [\"BodyInit\", \"the global BodyInit type\"]\n]);\n\n/** The type names no schema can take in a module, with what each is: the interface of the operations, the `RouteTable` the module imports, and the built-in types in `used`, which the module writes. A built-in the module does not write is left to a schema of that name. */\nfunction reservedTypeNames(apiName: string, used: ReadonlySet<string>): Map<string, string>\n{\n const reserved = new Map([\n [\"RouteTable\", \"the RouteTable type the module imports\"],\n [apiName, \"the interface of the operations, which apiName renames\"]\n ]);\n for (const [name, what] of BUILT_INS)\n {\n if (used.has(name))\n {\n reserved.set(name, `${what}, which this module uses`);\n }\n }\n return reserved;\n}\n\n/**\n * The type name every schema is written under, by schema name, with the\n * reason for a name that is not the schema's own. A schema keeps its own\n * name, as `note-item` gives `NoteItem`, unless `reserved` holds it or a\n * schema earlier in sorted order takes it; then it gets the first free\n * name with a number added, as `Record2`.\n */\nfunction schemaTypeNames(names: readonly string[], reserved: ReadonlyMap<string, string>): Map<string, { type: string; reason?: string }>\n{\n const holders = new Map(reserved);\n const assigned = new Map<string, { type: string; reason?: string }>();\n for (const name of names)\n {\n const type = typeName(name);\n if (!holders.has(type))\n {\n holders.set(type, `the type of the schema ${JSON.stringify(name)}`);\n assigned.set(name, { type });\n }\n }\n for (const name of names)\n {\n if (assigned.has(name))\n {\n continue;\n }\n const base = typeName(name);\n let suffix = 2;\n while (holders.has(`${base}${suffix}`))\n {\n suffix++;\n }\n const type = `${base}${suffix}`;\n assigned.set(name, { type, reason: `named ${type} because ${base} is already ${holders.get(base) ?? \"taken\"}` });\n holders.set(type, `the type of the schema ${JSON.stringify(name)}`);\n }\n return assigned;\n}\n\n/**\n * Generates the contract module for an OpenAPI 3.x document given as a\n * parsed object (JSON; convert YAML first). Schemas under\n * `components.schemas` become exported types, every operation becomes an\n * entry of the `Api` interface named by its `operationId` (or by its\n * method and path), and `routes` carries the method and path of each.\n * Header and cookie parameters, security, and non-local references are\n * left out; the client sends headers through its options. A schema whose\n * type name would clash is written under the first free name with a\n * number added, as `Record2`, with a comment that says why, and every\n * `$ref` to it uses that name: one that another schema takes first, as\n * `note-item` and `note_item` both give `NoteItem`, one named like the\n * interface of the operations or the `RouteTable` the module imports, and\n * one named like a built-in type the module writes, such as `Record` for\n * an object of free keys or `Blob` for a binary response. A schema named\n * like a built-in the module does not write keeps its name.\n */\nexport function generateClient(document: OpenApiDocument, options: GenerateOptions = {}): string\n{\n if (typeof document.openapi !== \"string\" || !document.openapi.startsWith(\"3.\"))\n {\n fail(`expected an OpenAPI 3.x document, found openapi: ${JSON.stringify(document.openapi)}`);\n }\n const context: Context = { document, apiName: options.apiName ?? \"Api\" };\n const specifier = options.clientSpecifier ?? \"@zerolith/client\";\n const names = Object.keys(document.components?.schemas ?? {}).toSorted((a, b) => a.localeCompare(b));\n const first = writeModule(context, specifier, schemaTypeNames(names, reservedTypeNames(context.apiName, new Set())));\n if (![...first.types.values()].some(({ type }) => first.used.has(type)))\n {\n return first.code;\n }\n return writeModule(context, specifier, schemaTypeNames(names, reservedTypeNames(context.apiName, first.used))).code;\n}\n\n/** The module text for the given schema type names, with the built-in types it writes, which a second pass reserves when a schema took one of their names. */\nfunction writeModule(context: Context, specifier: string, types: Map<string, { type: string; reason?: string }>): { code: string; used: ReadonlySet<string>; types: Map<string, { type: string; reason?: string }> }\n{\n const { document } = context;\n builtInsUsed = new Set();\n const out: string[] = [];\n const title = document.info?.title === undefined ? \"an OpenAPI document\" : `${document.info.title}${document.info.version === undefined ? \"\" : ` ${document.info.version}`}`;\n out.push(`// Generated by @zerolith/client from ${commentText(title)}. Do not edit; regenerate instead.`);\n out.push(`import type { RouteTable } from ${JSON.stringify(specifier)};`);\n out.push(\"\");\n\n const schemas = Object.entries(document.components?.schemas ?? {}).toSorted(([a], [b]) => a.localeCompare(b));\n schemaTypes = new Map(Array.from(types, ([name, { type }]) => [name, type]));\n for (const [name, schema] of schemas)\n {\n const { type, reason } = types.get(name) ?? { type: typeName(name) };\n const note = reason === undefined ? undefined : `The schema ${JSON.stringify(name)}, ${reason}.`;\n const text = [schema.description ?? schema.title, note].filter((part) => part !== undefined && part.trim() !== \"\").join(\"\\n\\n\");\n out.push(`${comment(text, \"\")}export type ${type} = ${typeOf(schema, \"\")};`);\n out.push(\"\");\n }\n\n const entries: Entry[] = [];\n const seen = new Set<string>();\n for (const [path, rawItem] of Object.entries(document.paths ?? {}).toSorted(([a], [b]) => a.localeCompare(b)))\n {\n const item = deref(context, rawItem, \"pathItems\");\n const operations: [string, OperationObject][] = [];\n for (const method of METHODS)\n {\n const operation = item[method];\n if (operation !== undefined)\n {\n operations.push([method, operation]);\n }\n }\n for (const [method, operation] of Object.entries(item.additionalOperations ?? {}))\n {\n if (!/^[a-z0-9!#$%&'*+.^_`|~-]+$/i.test(method))\n {\n fail(`${JSON.stringify(path)} has the additional operation ${JSON.stringify(method)}, which is not an HTTP method name`);\n }\n if (FORBIDDEN_METHODS.has(method.toLowerCase()))\n {\n continue;\n }\n operations.push([method.toLowerCase(), operation]);\n }\n for (const [method, operation] of operations)\n {\n const entry = entryOf(context, path, item, method, operation);\n if (seen.has(entry.name))\n {\n fail(`two operations resolve to the name \"${entry.name}\"; give them distinct operationId values`);\n }\n seen.add(entry.name);\n entries.push(entry);\n }\n }\n\n out.push(`export interface ${context.apiName}\\n{`);\n out.push(entries.map((entry) => `${comment(entry.doc, \" \")} ${key(entry.name)}: {\\n${entry.lines.join(\"\\n\")}\\n };`).join(\"\\n\"));\n out.push(\"}\");\n out.push(\"\");\n out.push(\"export const routes = {\");\n out.push(entries.map((entry) => ` ${key(entry.name)}: { method: ${JSON.stringify(entry.method)}, path: ${JSON.stringify(entry.path)} }`).join(\",\\n\"));\n out.push(`} as const satisfies RouteTable<${context.apiName}>;`);\n out.push(\"\");\n return { code: out.join(\"\\n\"), used: builtInsUsed, types };\n}\n"],"names":["METHODS","FORBIDDEN_METHODS","IDENTIFIER","fail","message","words","text","word","pascal","camel","name","typeName","key","LINE_BREAKS","commentText","comment","lines","indent","line","indentLines","index","resolveRef","prefix","section","ref","found","context","deref","current","value","depth","schemaTypes","builtInsUsed","builtIn","schemaRefName","literal","COMPOSITION_KEYWORDS","OWN_KEYWORDS","typeOf","schema","keywords","keyword","part","keep","wrap","parts","option","types","type","primitive","rest","item","objectType","properties","required","extra","record","inner","body","property","optional","jsonSchemaOf","content","media","bare","operationName","operation","method","path","segment","match","parameterGroups","merged","list","raw","parameter","params","query","queryRequired","doc","bodyType","outputType","responses","successful","status","a","b","chosen","entryOf","BUILT_INS","reservedTypeNames","reserved","apiName","what","used","schemaTypeNames","holders","assigned","names","base","suffix","document","options","specifier","first","writeModule","out","title","schemas","note","reason","entries","seen","rawItem","operations","entry"],"mappings":"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"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{PROBLEM_MEDIA_TYPE as e,isProblem as t,resource as n}from"zerolith";export class ProblemError extends Error{problem;response;constructor(e,t){super(e.title??`HTTP ${t.status}`),this.name=`ProblemError`,this.problem=e,this.response=t}}function r(e){return typeof e==`string`||e instanceof FormData||e instanceof URLSearchParams||e instanceof Blob||e instanceof ArrayBuffer||ArrayBuffer.isView(e)||e instanceof ReadableStream}function i(e){let t=new URLSearchParams;for(let[n,r]of Object.entries(e))if(r!=null)for(let e of Array.isArray(r)?r:[r])t.append(n,typeof e==`object`&&e?JSON.stringify(e):String(e));return t.size>0?`?${t.toString()}`:``}function a(t,n,a,o){let s=t.path.replace(/\{([^{}]+)\}/g,(e,r)=>{let i=n.params?.[r];if(i===void 0)throw TypeError(`zerolith/client: ${t.method.toUpperCase()} ${t.path} needs the path parameter "${r}"`);let a=encodeURIComponent(String(i));if(a===`.`||a===`..`)throw TypeError(`zerolith/client: ${t.method.toUpperCase()} ${t.path} got "${a}" for the path parameter "${r}", which would move the request to another path`);return a}),c=(o.baseUrl??``).replace(/\/$/,``),l=new Headers(typeof o.headers==`function`?o.headers():o.headers);new Headers(a.headers).forEach((e,t)=>l.set(t,e)),l.has(`accept`)||l.set(`accept`,`application/json, ${e}`);let u={method:t.method.toUpperCase(),headers:l};return a.signal!==void 0&&(u.signal=a.signal),n.body!==void 0&&(r(n.body)?(u.body=n.body,n.body instanceof ReadableStream&&(u.duplex=`half`)):(u.body=JSON.stringify(n.body),l.has(`content-type`)||l.set(`content-type`,`application/json`))),new Request(`${c}${s}${i(n.query??{})}`,u)}async function o(e){if(e.status===204||e.status===205)return;let t=(e.headers.get(`content-type`)??``).toLowerCase();if(t.includes(`json`))return e.json();if(t===``||t.startsWith(`text/`)){let t=await e.text();return t===``?void 0:t}return e.blob()}async function s(e,t,n){if(t===void 0)return n(e);let r=new AbortController,i=()=>r.abort();(e.aborted||t.aborted)&&r.abort(),e.addEventListener(`abort`,i),t.addEventListener(`abort`,i);try{return await n(r.signal)}finally{e.removeEventListener(`abort`,i),t.removeEventListener(`abort`,i)}}async function c(e){if(e.ok)return o(e);let n;if((e.headers.get(`content-type`)??``).includes(`json`)){let r=await e.json().catch(()=>void 0);t(r)&&(n={status:e.status,...r})}throw new ProblemError(n??{status:e.status,title:e.statusText===``?`HTTP ${e.status}`:e.statusText},e)}export function createClient(e,t={}){let r=t.transport??(e=>fetch(e)),i=(n,r,i)=>{let o=e[n];if(o===void 0)throw TypeError(`zerolith/client: unknown operation "${String(n)}"`);return a(o,r??{},i??{},t)},o=async(e,t,n)=>c(await r(i(e,t,n)));return{call(e,...t){return o(e,t[0],t[1])},query(e,t,r={}){return n({params:t,loader:({params:t,abort:n})=>s(n,r.signal,n=>o(e,t,{...r,signal:n}))})},request(e,...t){return i(e,t[0],t[1])}}}
|
|
2
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../../src/index.ts"],"sourcesContent":["/**\n * @zerolith/client: a typed HTTP client over a neutral contract. The route\n * table and the types come from `@zerolith/client/generate`, which reads an\n * OpenAPI document; the client itself knows nothing about the server beyond\n * its paths. Failures are RFC 9457 problems, thrown as `ProblemError`.\n */\nimport { PROBLEM_MEDIA_TYPE, type Problem, type Resource, isProblem, resource } from \"zerolith\";\n\n/**\n * The HTTP method of an operation, in lowercase: one OpenAPI names, `query`\n * being the HTTP QUERY method, or any other method token, as an OpenAPI 3.2\n * `additionalOperations` entry such as `copy` gives.\n */\nexport type Method = \"get\" | \"put\" | \"post\" | \"delete\" | \"options\" | \"head\" | \"patch\" | \"query\" | (string & {});\n\n/** One operation as the generated `Api` interface describes it. */\nexport interface Operation\n{\n /** The HTTP method in lowercase, such as `get`; the request sends it uppercased. */\n readonly method: Method;\n /** The path template, such as `/notes/{id}`, whose placeholders the client fills from `params` with URI-encoded values. */\n readonly path: string;\n /** Path parameters, by the name inside the braces. */\n readonly params?: Record<string, string | number | boolean>;\n /** Query parameters; arrays repeat the key, objects are JSON. */\n readonly query?: Record<string, unknown>;\n /** The request body; JSON unless it is a `FormData`, `URLSearchParams`, `Blob`, `ArrayBuffer`, `ReadableStream`, or string, which are sent as they are. */\n readonly body?: unknown;\n /** What a successful call resolves to. */\n readonly output: unknown;\n}\n\n/** What a generated `Api` interface satisfies: every member is an operation. */\nexport type Contract<A> = { readonly [K in keyof A]: Operation };\n\n/** The runtime half of a contract: the method and path of every operation. */\nexport type RouteTable<A extends Contract<A>> = { readonly [K in keyof A]: { readonly method: A[K][\"method\"]; readonly path: A[K][\"path\"] } };\n\n/** What a call takes: the operation's `params`, `query`, and `body`, as optional as the contract makes them. */\nexport type Input<Op extends Operation> = Omit<Op, \"method\" | \"path\" | \"output\">;\n\n/** What a call resolves to. */\nexport type Output<Op extends Operation> = Op[\"output\"];\n\n/** Per-call options. */\nexport interface CallOptions\n{\n /** Becomes the request's `signal`, so aborting it rejects the call under `fetch` or `portTransport`; `query` replaces it with the resource's own signal. */\n signal?: AbortSignal;\n /** Headers for this call, set over the client's `headers` so that a name in both takes this value. */\n headers?: HeadersInit;\n}\n\ntype InputArgs<Op extends Operation> = Record<never, never> extends Input<Op> ? [input?: Input<Op>, options?: CallOptions] : [input: Input<Op>, options?: CallOptions];\n\n/** Sends a request. The default is `fetch`; a test or an Electron bridge can answer in process. */\nexport type Transport = (request: Request) => Promise<Response>;\n\n/** Options for `createClient`. */\nexport interface ClientOptions\n{\n /** Prepended to every path. Defaults to \"\", the page's origin in a browser; pass an absolute URL elsewhere. */\n baseUrl?: string;\n /** Sends every request the client builds and resolves with the response. Defaults to the global `fetch`, looked up on each call. */\n transport?: Transport;\n /** Headers sent with every request, or a function returning them, for values such as a bearer token. */\n headers?: HeadersInit | (() => HeadersInit);\n}\n\n/** Thrown for a response outside 2xx, carrying the problem the server sent or one built from the status line. */\nexport class ProblemError extends Error\n{\n /** The problem the server sent, with `status` filled from the response when the body omits it; a body that is not a JSON problem yields `status` and a `title` from the status line. */\n readonly problem: Problem;\n /** The response outside 2xx, for its status and headers; its body has already been read when the content type is JSON. */\n readonly response: Response;\n\n /** Wraps `problem` and the `response` it came from; the message is the problem's `title`, or `HTTP <status>` when it has none. */\n constructor(problem: Problem, response: Response)\n {\n super(problem.title ?? `HTTP ${response.status}`);\n this.name = \"ProblemError\";\n this.problem = problem;\n this.response = response;\n }\n}\n\n/** The client for one contract. */\nexport interface Client<A extends Contract<A>>\n{\n /** Calls an operation and resolves with its output, or rejects with a `ProblemError` for a response outside 2xx. */\n call<K extends keyof A>(name: K, ...args: InputArgs<A[K]>): Promise<Output<A[K]>>;\n /** A resource over an operation: it calls again when the signals read by `input` change, and is idle while `input` returns undefined. */\n query<K extends keyof A>(name: K, input: () => Input<A[K]> | undefined, options?: CallOptions): Resource<Output<A[K]>>;\n /** The `Request` a call would send, for tests and custom transports. */\n request<K extends keyof A>(name: K, ...args: InputArgs<A[K]>): Request;\n}\n\ninterface LooseInput\n{\n params?: Record<string, string | number | boolean>;\n query?: Record<string, unknown>;\n body?: unknown;\n}\n\nfunction isRawBody(body: unknown): body is BodyInit\n{\n return typeof body === \"string\" || body instanceof FormData || body instanceof URLSearchParams || body instanceof Blob || body instanceof ArrayBuffer || ArrayBuffer.isView(body) || body instanceof ReadableStream;\n}\n\nfunction searchOf(query: Record<string, unknown>): string\n{\n const search = new URLSearchParams();\n for (const [key, value] of Object.entries(query))\n {\n if (value === undefined || value === null)\n {\n continue;\n }\n for (const item of Array.isArray(value) ? value : [value])\n {\n search.append(key, typeof item === \"object\" && item !== null ? JSON.stringify(item) : String(item));\n }\n }\n return search.size > 0 ? `?${search.toString()}` : \"\";\n}\n\nfunction buildRequest(route: { method: Method; path: string }, input: LooseInput, options: CallOptions, client: ClientOptions): Request\n{\n const path = route.path.replace(/\\{([^{}]+)\\}/g, (_match, name: string) =>\n {\n const value = input.params?.[name];\n if (value === undefined)\n {\n throw new TypeError(`zerolith/client: ${route.method.toUpperCase()} ${route.path} needs the path parameter \"${name}\"`);\n }\n const segment = encodeURIComponent(String(value));\n if (segment === \".\" || segment === \"..\")\n {\n throw new TypeError(`zerolith/client: ${route.method.toUpperCase()} ${route.path} got \"${segment}\" for the path parameter \"${name}\", which would move the request to another path`);\n }\n return segment;\n });\n const base = (client.baseUrl ?? \"\").replace(/\\/$/, \"\");\n const headers = new Headers(typeof client.headers === \"function\" ? client.headers() : client.headers);\n new Headers(options.headers).forEach((value, key) => headers.set(key, value));\n if (!headers.has(\"accept\"))\n {\n headers.set(\"accept\", `application/json, ${PROBLEM_MEDIA_TYPE}`);\n }\n const init: RequestInit = { method: route.method.toUpperCase(), headers };\n if (options.signal !== undefined)\n {\n init.signal = options.signal;\n }\n if (input.body !== undefined)\n {\n if (isRawBody(input.body))\n {\n init.body = input.body;\n if (input.body instanceof ReadableStream)\n {\n (init as RequestInit & { duplex: \"half\" }).duplex = \"half\";\n }\n }\n else\n {\n init.body = JSON.stringify(input.body);\n if (!headers.has(\"content-type\"))\n {\n headers.set(\"content-type\", \"application/json\");\n }\n }\n }\n return new Request(`${base}${path}${searchOf(input.query ?? {})}`, init);\n}\n\n/** A successful response's body: JSON parsed, text for `text/*` or no type, a `Blob` for any other type, such as an image, and `undefined` when it is empty. */\nasync function readBody(response: Response): Promise<unknown>\n{\n if (response.status === 204 || response.status === 205)\n {\n return undefined;\n }\n const type = (response.headers.get(\"content-type\") ?? \"\").toLowerCase();\n if (type.includes(\"json\"))\n {\n return response.json();\n }\n if (type === \"\" || type.startsWith(\"text/\"))\n {\n const text = await response.text();\n return text === \"\" ? undefined : text;\n }\n return response.blob();\n}\n\n/** Calls `run` with a signal that aborts when either `own` or `caller` does, and stops listening to the caller once the call settles. */\nasync function withSignals<T>(own: AbortSignal, caller: AbortSignal | undefined, run: (signal: AbortSignal) => Promise<T>): Promise<T>\n{\n if (caller === undefined)\n {\n return run(own);\n }\n const combined = new AbortController();\n const abort = (): void => combined.abort();\n if (own.aborted || caller.aborted)\n {\n combined.abort();\n }\n own.addEventListener(\"abort\", abort);\n caller.addEventListener(\"abort\", abort);\n try\n {\n return await run(combined.signal);\n }\n finally\n {\n own.removeEventListener(\"abort\", abort);\n caller.removeEventListener(\"abort\", abort);\n }\n}\n\nasync function settle(response: Response): Promise<unknown>\n{\n if (response.ok)\n {\n return readBody(response);\n }\n let problem: Problem | undefined;\n if ((response.headers.get(\"content-type\") ?? \"\").includes(\"json\"))\n {\n const body: unknown = await response.json().catch(() => undefined);\n if (isProblem(body))\n {\n problem = { status: response.status, ...body };\n }\n }\n throw new ProblemError(problem ?? { status: response.status, title: response.statusText === \"\" ? `HTTP ${response.status}` : response.statusText }, response);\n}\n\n/**\n * Creates a client for a generated route table. `routes` and the `Api`\n * type parameter come from the same generated module, so an operation\n * name, its parameters, its body, and its output are checked together.\n */\nexport function createClient<A extends Contract<A>>(routes: RouteTable<A>, options: ClientOptions = {}): Client<A>\n{\n const transport: Transport = options.transport ?? ((request) => fetch(request));\n const request = (name: keyof A, input: LooseInput | undefined, callOptions: CallOptions | undefined): Request =>\n {\n const route = routes[name] as { method: Method; path: string } | undefined;\n if (route === undefined)\n {\n throw new TypeError(`zerolith/client: unknown operation \"${String(name)}\"`);\n }\n return buildRequest(route, input ?? {}, callOptions ?? {}, options);\n };\n const call = async (name: keyof A, input: LooseInput | undefined, callOptions: CallOptions | undefined): Promise<unknown> =>\n {\n return settle(await transport(request(name, input, callOptions)));\n };\n return {\n call<K extends keyof A>(name: K, ...args: InputArgs<A[K]>): Promise<Output<A[K]>>\n {\n return call(name, args[0] as LooseInput | undefined, args[1]) as Promise<Output<A[K]>>;\n },\n query<K extends keyof A>(name: K, input: () => Input<A[K]> | undefined, callOptions: CallOptions = {}): Resource<Output<A[K]>>\n {\n return resource<Input<A[K]>, Output<A[K]>>({\n params: input,\n loader: ({ params, abort }) => withSignals(abort, callOptions.signal, (signal) => call(name, params as LooseInput, { ...callOptions, signal }) as Promise<Output<A[K]>>)\n });\n },\n request<K extends keyof A>(name: K, ...args: InputArgs<A[K]>): Request\n {\n return request(name, args[0] as LooseInput | undefined, args[1]);\n }\n };\n}\n"],"names":["problem","response","isRawBody","body","searchOf","search","key","value","query","item","buildRequest","path","route","input","name","segment","base","client","headers","options","PROBLEM_MEDIA_TYPE","init","readBody","type","text","withSignals","caller","run","own","combined","abort","settle","isProblem","transport","request","routes","callOptions","call","args","resource","params"],"mappings":"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"}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
function e(e,t){if(typeof e.addEventListener==`function`)e.addEventListener(`message`,e=>t(e.data));else if(typeof e.on==`function`)e.on(`message`,e=>t(e.data));else throw TypeError(`zerolith/client: the port has neither addEventListener nor on`);e.start?.()}export function portTransport(t){let n=new Map,r=1;return e(t,e=>{let t=e;if(typeof t!=`object`||!t||t.kind!==`zerolith:response`||typeof t.id!=`number`)return;let r=n.get(t.id);r!==void 0&&(n.delete(t.id),r.resolve(new Response(t.body??null,{status:t.status??200,statusText:t.statusText??``,headers:t.headers??[]})))}),async e=>{let i=r++,a=e.method===`GET`||e.method===`HEAD`?null:await e.text(),o={kind:`zerolith:request`,id:i,url:e.url,method:e.method,headers:[...e.headers],body:a===``?null:a};return new Promise((r,a)=>{e.signal.aborted?a(e.signal.reason??new DOMException(`The request was aborted`,`AbortError`)):(n.set(i,{resolve:r,reject:a}),e.signal.addEventListener(`abort`,()=>{n.delete(i)&&a(e.signal.reason??new DOMException(`The request was aborted`,`AbortError`))}),t.postMessage(o))})}}export function servePort(t,n){e(t,e=>{let r=e;if(typeof r!=`object`||!r||r.kind!==`zerolith:request`||typeof r.id!=`number`||typeof r.url!=`string`)return;let i=r.id;(async()=>{let e;try{e=await n(new Request(r.url??``,{method:r.method??`GET`,headers:r.headers??[],body:r.body??null}))}catch(t){typeof reportError==`function`?reportError(t):console.error(`zerolith/client: a servePort handler threw`,t),e=new Response(JSON.stringify({title:`The handler failed`,status:500}),{status:500,headers:{"content-type":`application/problem+json`}})}let a=await e.text(),o={kind:`zerolith:response`,id:i,status:e.status,statusText:e.statusText,headers:[...e.headers],body:a===``?null:a};t.postMessage(o)})()})}
|
|
2
|
+
//# sourceMappingURL=port.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"port.js","sources":["../../src/port.ts"],"sourcesContent":["/**\n * A transport over a message port, for the places `fetch` cannot reach the\n * server: an Electron renderer behind `contextBridge`, a worker, a test.\n * `portTransport` runs where the client runs; `servePort` runs where the\n * handler runs. Bodies travel as text, which covers JSON and encoded forms.\n */\nimport type { Transport } from \"./index.js\";\n\n/** The port shapes supported: a DOM `MessagePort`, Node's, or Electron's `MessagePortMain`. */\nexport interface PortLike\n{\n /** Sends a message to the other end; `portTransport` posts each `PortRequest` through it and `servePort` each `PortResponse`. */\n postMessage(message: unknown): void;\n /** Starts delivering messages; called, when present, right after the listener is attached, since a DOM `MessagePort` and Electron's `MessagePortMain` queue messages until it runs. */\n start?(): void;\n /** Receives messages the `EventTarget` way, as a DOM `MessagePort` does; used in preference to `on` when both exist. */\n addEventListener?(type: \"message\", listener: (event: { data: unknown }) => void): void;\n /** Receives messages the `EventEmitter` way, as Electron's `MessagePortMain` does; used when `addEventListener` is absent, and a port with neither throws a `TypeError`. */\n on?(type: \"message\", listener: (event: { data: unknown }) => void): void;\n}\n\n/** What crosses the port for a request. */\nexport interface PortRequest\n{\n /** Tags the message as a request, so `servePort` ignores other traffic on the port. */\n kind: \"zerolith:request\";\n /** Pairs the request with its response; each `portTransport` numbers its requests from 1. */\n id: number;\n /** The request's absolute URL, from which `servePort` builds the `Request` its handler receives. */\n url: string;\n /** The request method as `Request.method` reports it, such as `POST`. */\n method: string;\n /** The request headers as `[name, value]` pairs with lowercase names, as iterating a `Headers` yields them. */\n headers: [string, string][];\n /** The body as UTF-8 text, or `null` for a `GET` or `HEAD` request or an empty body. */\n body: string | null;\n}\n\n/** What crosses the port for a response. */\nexport interface PortResponse\n{\n /** Tags the message as a response, so `portTransport` ignores other traffic on the port. */\n kind: \"zerolith:response\";\n /** The `id` of the request this answers; an answer with no pending request, such as one whose call was aborted, is dropped. */\n id: number;\n /** The status code of the handler's response, or 500 when the handler threw. */\n status: number;\n /** The status text of the handler's response, empty when none was set. */\n statusText: string;\n /** The response headers as `[name, value]` pairs with lowercase names, as iterating a `Headers` yields them. */\n headers: [string, string][];\n /** The body as UTF-8 text, or `null` when it is empty, as for a 204. */\n body: string | null;\n}\n\nfunction listen(port: PortLike, handler: (data: unknown) => void): void\n{\n if (typeof port.addEventListener === \"function\")\n {\n port.addEventListener(\"message\", (event) => handler(event.data));\n }\n else if (typeof port.on === \"function\")\n {\n port.on(\"message\", (event) => handler(event.data));\n }\n else\n {\n throw new TypeError(\"zerolith/client: the port has neither addEventListener nor on\");\n }\n port.start?.();\n}\n\n/**\n * A `Transport` that sends each request over the port as a message and\n * resolves with the response that comes back under the same id. Aborting\n * the request's signal rejects the call; the message already sent is\n * answered and ignored.\n */\nexport function portTransport(port: PortLike): Transport\n{\n const pending = new Map<number, { resolve: (response: Response) => void; reject: (reason: unknown) => void }>();\n let next = 1;\n listen(port, (data) =>\n {\n const message = data as Partial<PortResponse> | null;\n if (message === null || typeof message !== \"object\" || message.kind !== \"zerolith:response\" || typeof message.id !== \"number\")\n {\n return;\n }\n const waiting = pending.get(message.id);\n if (waiting === undefined)\n {\n return;\n }\n pending.delete(message.id);\n waiting.resolve(new Response(message.body ?? null, { status: message.status ?? 200, statusText: message.statusText ?? \"\", headers: message.headers ?? [] }));\n });\n return async (request) =>\n {\n const id = next++;\n const body = request.method === \"GET\" || request.method === \"HEAD\" ? null : await request.text();\n const message: PortRequest = { kind: \"zerolith:request\", id, url: request.url, method: request.method, headers: [...request.headers], body: body === \"\" ? null : body };\n return new Promise<Response>((resolve, reject) =>\n {\n if (request.signal.aborted)\n {\n reject(request.signal.reason ?? new DOMException(\"The request was aborted\", \"AbortError\"));\n return;\n }\n pending.set(id, { resolve, reject });\n request.signal.addEventListener(\"abort\", () =>\n {\n if (pending.delete(id))\n {\n reject(request.signal.reason ?? new DOMException(\"The request was aborted\", \"AbortError\"));\n }\n });\n port.postMessage(message);\n });\n };\n}\n\n/**\n * Answers the requests `portTransport` sends by building a `Request`,\n * calling `handler`, and posting the response back. A handler that throws\n * answers with a 500 problem so the client sees a `ProblemError`.\n */\nexport function servePort(port: PortLike, handler: (request: Request) => Response | Promise<Response>): void\n{\n listen(port, (data) =>\n {\n const message = data as Partial<PortRequest> | null;\n if (message === null || typeof message !== \"object\" || message.kind !== \"zerolith:request\" || typeof message.id !== \"number\" || typeof message.url !== \"string\")\n {\n return;\n }\n const id = message.id;\n const answer = async (): Promise<void> =>\n {\n let response: Response;\n try\n {\n response = await handler(new Request(message.url ?? \"\", { method: message.method ?? \"GET\", headers: message.headers ?? [], body: message.body ?? null }));\n }\n catch (error)\n {\n if (typeof reportError === \"function\")\n {\n reportError(error);\n }\n else\n {\n console.error(\"zerolith/client: a servePort handler threw\", error);\n }\n response = new Response(JSON.stringify({ title: \"The handler failed\", status: 500 }), { status: 500, headers: { \"content-type\": \"application/problem+json\" } });\n }\n const text = await response.text();\n const reply: PortResponse = { kind: \"zerolith:response\", id, status: response.status, statusText: response.statusText, headers: [...response.headers], body: text === \"\" ? null : text };\n port.postMessage(reply);\n };\n void answer();\n });\n}\n"],"names":["listen","port","handler","event","pending","next","message","data","waiting","id","body","request","reject","response","error","text","reply"],"mappings":"AAuDA,SAASA,EAAO,EAAgB,EAAgC,CAE5D,GAAI,OAAOC,EAAK,kBAAqB,WAEjCA,EAAK,iBAAiB,UAAY,GAAUC,EAAQC,EAAM,IAAI,CAAC,OAE9D,GAAI,OAAOF,EAAK,IAAO,WAExBA,EAAK,GAAG,UAAY,GAAUC,EAAQC,EAAM,IAAI,CAAC,OAIjD,MAAU,UAAU,+DAA+D,EAEvFF,EAAK,QAAO,CAChB,CAQA,OAAM,SAAU,cAAc,EAAc,CAExC,IAAMG,EAAU,IAAI,IAChBC,EAAO,EAgBX,OAfAL,EAAOC,EAAO,GAAQ,CAElB,IAAMK,EAAUC,EAChB,GAAwB,OAAOD,GAAY,WAAvCA,GAAmDA,EAAQ,OAAS,qBAAuB,OAAOA,EAAQ,IAAO,SAEjH,OAEJ,IAAME,EAAUJ,EAAQ,IAAIE,EAAQ,EAAE,EAClCE,IAAY,SAIhBJ,EAAQ,OAAOE,EAAQ,EAAE,EACzBE,EAAQ,QAAQ,IAAI,SAASF,EAAQ,MAAQ,KAAM,CAAE,OAAQA,EAAQ,QAAU,IAAK,WAAYA,EAAQ,YAAc,GAAI,QAASA,EAAQ,SAAW,CAAA,CAAE,CAAE,CAAC,EAC/J,CAAC,EACM,KAAO,IAAW,CAErB,IAAMG,EAAK,IACLC,EAAOC,EAAQ,SAAW,OAASA,EAAQ,SAAW,OAAS,KAAO,MAAMA,EAAQ,KAAI,EACxFL,EAAuB,CAAE,KAAM,mBAAoB,KAAI,IAAKK,EAAQ,IAAK,OAAQA,EAAQ,OAAQ,QAAS,CAAC,GAAGA,EAAQ,OAAO,EAAG,KAAMD,IAAS,GAAK,KAAOA,CAAI,EACrK,OAAO,IAAI,SAAmB,EAAS,IAAU,CAEzCC,EAAQ,OAAO,QAEfC,EAAOD,EAAQ,OAAO,QAAU,IAAI,aAAa,0BAA2B,YAAY,CAAC,GAG7FP,EAAQ,IAAIK,EAAI,CAAE,UAAS,QAAM,CAAE,EACnCE,EAAQ,OAAO,iBAAiB,YAAc,CAEtCP,EAAQ,OAAOK,CAAE,GAEjBG,EAAOD,EAAQ,OAAO,QAAU,IAAI,aAAa,0BAA2B,YAAY,CAAC,CAEjG,CAAC,EACDV,EAAK,YAAYK,CAAO,EAC5B,CAAC,CACL,CACJ,CAOA,OAAM,SAAU,UAAU,EAAgB,EAA2D,CAEjGN,EAAOC,EAAO,GAAQ,CAElB,IAAMK,EAAUC,EAChB,GAAwB,OAAOD,GAAY,WAAvCA,GAAmDA,EAAQ,OAAS,oBAAsB,OAAOA,EAAQ,IAAO,UAAY,OAAOA,EAAQ,KAAQ,SAEnJ,OAEJ,IAAMG,EAAKH,EAAQ,IAwBd,SAvBoC,CAErC,IAAIO,EACJ,GACA,CACI,EAAW,MAAMX,EAAQ,IAAI,QAAQI,EAAQ,KAAO,GAAI,CAAE,OAAQA,EAAQ,QAAU,MAAO,QAASA,EAAQ,SAAW,CAAA,EAAI,KAAMA,EAAQ,MAAQ,IAAI,CAAE,CAAC,CAC5J,OACOQ,EACP,CACQ,OAAO,aAAgB,WAEvB,YAAYA,CAAK,EAIjB,QAAQ,MAAM,6CAA8CA,CAAK,EAErE,EAAW,IAAI,SAAS,KAAK,UAAU,CAAE,MAAO,qBAAsB,OAAQ,GAAG,CAAE,EAAG,CAAE,OAAQ,IAAK,QAAS,CAAE,eAAgB,0BAA0B,CAAE,CAAE,CAClK,CACA,IAAMC,EAAO,MAAMF,EAAS,KAAI,EAC1BG,EAAsB,CAAE,KAAM,oBAAqB,KAAI,OAAQH,EAAS,OAAQ,WAAYA,EAAS,WAAY,QAAS,CAAC,GAAGA,EAAS,OAAO,EAAG,KAAME,IAAS,GAAK,KAAOA,CAAI,EACtLd,EAAK,YAAYe,CAAK,CAC1B,EACW,CAAA,CACf,CAAC,CACL"}
|
package/package.json
CHANGED
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@zerolith/client",
|
|
3
|
-
"version": "0.1.0-alpha.
|
|
3
|
+
"version": "0.1.0-alpha.9",
|
|
4
4
|
"description": "A typed HTTP client for zerolith over a neutral contract: generate the route table and types from an OpenAPI document, call operations with checked inputs, and read failures as RFC 9457 problems",
|
|
5
5
|
"license": "Apache-2.0",
|
|
6
6
|
"author": "molexxxx",
|
|
7
|
-
"homepage": "https://
|
|
7
|
+
"homepage": "https://zerolith.dev/",
|
|
8
8
|
"repository": {
|
|
9
9
|
"type": "git",
|
|
10
10
|
"url": "git+https://github.com/molexxxx/zerolith.git",
|
|
@@ -30,15 +30,18 @@
|
|
|
30
30
|
"exports": {
|
|
31
31
|
".": {
|
|
32
32
|
"types": "./dist/index.d.ts",
|
|
33
|
-
"
|
|
33
|
+
"development": "./dist/index.js",
|
|
34
|
+
"default": "./dist/production/index.js"
|
|
34
35
|
},
|
|
35
36
|
"./generate": {
|
|
36
37
|
"types": "./dist/generate.d.ts",
|
|
37
|
-
"
|
|
38
|
+
"development": "./dist/generate.js",
|
|
39
|
+
"default": "./dist/production/generate.js"
|
|
38
40
|
},
|
|
39
41
|
"./port": {
|
|
40
42
|
"types": "./dist/port.d.ts",
|
|
41
|
-
"
|
|
43
|
+
"development": "./dist/port.js",
|
|
44
|
+
"default": "./dist/production/port.js"
|
|
42
45
|
},
|
|
43
46
|
"./package.json": "./package.json"
|
|
44
47
|
},
|
|
@@ -49,12 +52,12 @@
|
|
|
49
52
|
"README.md"
|
|
50
53
|
],
|
|
51
54
|
"scripts": {
|
|
52
|
-
"build": "tsc -p tsconfig.build.json"
|
|
55
|
+
"build": "tsc -p tsconfig.build.json && node ../../scripts/production.ts"
|
|
53
56
|
},
|
|
54
57
|
"peerDependencies": {
|
|
55
|
-
"zerolith": "^0.1.0-alpha.
|
|
58
|
+
"zerolith": "^0.1.0-alpha.9"
|
|
56
59
|
},
|
|
57
60
|
"devDependencies": {
|
|
58
|
-
"zerolith": "^0.1.0-alpha.
|
|
61
|
+
"zerolith": "^0.1.0-alpha.9"
|
|
59
62
|
}
|
|
60
63
|
}
|
package/src/cli.ts
CHANGED
|
@@ -4,7 +4,9 @@
|
|
|
4
4
|
* module for an OpenAPI document to a file, or to standard output.
|
|
5
5
|
*/
|
|
6
6
|
import { readFile, writeFile } from "node:fs/promises";
|
|
7
|
+
import { realpathSync } from "node:fs";
|
|
7
8
|
import process from "node:process";
|
|
9
|
+
import { pathToFileURL } from "node:url";
|
|
8
10
|
import { type OpenApiDocument, generateClient } from "./generate.js";
|
|
9
11
|
|
|
10
12
|
const USAGE = "usage: zerolith-client <openapi.json> [--out <file.ts>] [--name <Api>]\n";
|
|
@@ -87,7 +89,21 @@ export async function main(argv: readonly string[]): Promise<number>
|
|
|
87
89
|
return 0;
|
|
88
90
|
}
|
|
89
91
|
|
|
90
|
-
|
|
92
|
+
/** True when node started this module, directly or through the bin link npm installs, which it resolves the way node resolves its entry. */
|
|
93
|
+
function started(): boolean
|
|
94
|
+
{
|
|
95
|
+
const entry = process.argv[1];
|
|
96
|
+
try
|
|
97
|
+
{
|
|
98
|
+
return entry !== undefined && pathToFileURL(realpathSync(entry)).href === import.meta.url;
|
|
99
|
+
}
|
|
100
|
+
catch
|
|
101
|
+
{
|
|
102
|
+
return false;
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
if (started())
|
|
91
107
|
{
|
|
92
108
|
process.exitCode = await main(process.argv.slice(2));
|
|
93
109
|
}
|
package/src/generate.ts
CHANGED
|
@@ -215,6 +215,15 @@ function key(name: string): string
|
|
|
215
215
|
return IDENTIFIER.test(name) ? name : JSON.stringify(name);
|
|
216
216
|
}
|
|
217
217
|
|
|
218
|
+
/** Line breaks, CR LF counted once, which would end a `//` comment and turn the rest of its line into code. */
|
|
219
|
+
const LINE_BREAKS = new RegExp(`${String.fromCodePoint(13, 10)}|[${String.fromCodePoint(10, 13, 0x2028, 0x2029)}]`, "g");
|
|
220
|
+
|
|
221
|
+
/** Text for a `//` comment, kept on one line, so it cannot end the comment. */
|
|
222
|
+
function commentText(text: string): string
|
|
223
|
+
{
|
|
224
|
+
return text.replace(LINE_BREAKS, " ");
|
|
225
|
+
}
|
|
226
|
+
|
|
218
227
|
function comment(text: string | undefined, indent: string): string
|
|
219
228
|
{
|
|
220
229
|
if (text === undefined || text.trim() === "")
|
|
@@ -691,7 +700,7 @@ function writeModule(context: Context, specifier: string, types: Map<string, { t
|
|
|
691
700
|
builtInsUsed = new Set();
|
|
692
701
|
const out: string[] = [];
|
|
693
702
|
const title = document.info?.title === undefined ? "an OpenAPI document" : `${document.info.title}${document.info.version === undefined ? "" : ` ${document.info.version}`}`;
|
|
694
|
-
out.push(`// Generated by @zerolith/client from ${title}. Do not edit; regenerate instead.`);
|
|
703
|
+
out.push(`// Generated by @zerolith/client from ${commentText(title)}. Do not edit; regenerate instead.`);
|
|
695
704
|
out.push(`import type { RouteTable } from ${JSON.stringify(specifier)};`);
|
|
696
705
|
out.push("");
|
|
697
706
|
|
package/src/index.ts
CHANGED
|
@@ -127,7 +127,7 @@ function searchOf(query: Record<string, unknown>): string
|
|
|
127
127
|
|
|
128
128
|
function buildRequest(route: { method: Method; path: string }, input: LooseInput, options: CallOptions, client: ClientOptions): Request
|
|
129
129
|
{
|
|
130
|
-
const path = route.path.replace(/\{([^}]+)\}/g, (_match, name: string) =>
|
|
130
|
+
const path = route.path.replace(/\{([^{}]+)\}/g, (_match, name: string) =>
|
|
131
131
|
{
|
|
132
132
|
const value = input.params?.[name];
|
|
133
133
|
if (value === undefined)
|