@orpc/openapi 0.0.0-next.ff68fdb → 0.0.0-next.ff7ad2e
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 +30 -22
- package/dist/adapters/aws-lambda/index.d.mts +19 -0
- package/dist/adapters/aws-lambda/index.d.ts +19 -0
- package/dist/adapters/aws-lambda/index.mjs +18 -0
- package/dist/adapters/fetch/index.d.mts +14 -8
- package/dist/adapters/fetch/index.d.ts +14 -8
- package/dist/adapters/fetch/index.mjs +14 -7
- package/dist/adapters/node/index.d.mts +14 -8
- package/dist/adapters/node/index.d.ts +14 -8
- package/dist/adapters/node/index.mjs +9 -24
- package/dist/adapters/standard/index.d.mts +10 -15
- package/dist/adapters/standard/index.d.ts +10 -15
- package/dist/adapters/standard/index.mjs +5 -3
- package/dist/index.d.mts +38 -47
- package/dist/index.d.ts +38 -47
- package/dist/index.mjs +30 -292
- package/dist/plugins/index.d.mts +69 -0
- package/dist/plugins/index.d.ts +69 -0
- package/dist/plugins/index.mjs +108 -0
- package/dist/shared/openapi.1iT1iSZi.mjs +750 -0
- package/dist/shared/{openapi.CJTe38Ya.mjs → openapi.BVXcB0u4.mjs} +56 -14
- package/dist/shared/openapi.CQmjvnb0.d.mts +31 -0
- package/dist/shared/openapi.CQmjvnb0.d.ts +31 -0
- package/dist/shared/openapi.CfjfVeBJ.d.mts +108 -0
- package/dist/shared/openapi.CfjfVeBJ.d.ts +108 -0
- package/package.json +20 -23
- package/dist/adapters/hono/index.d.mts +0 -6
- package/dist/adapters/hono/index.d.ts +0 -6
- package/dist/adapters/hono/index.mjs +0 -11
- package/dist/adapters/next/index.d.mts +0 -6
- package/dist/adapters/next/index.d.ts +0 -6
- package/dist/adapters/next/index.mjs +0 -11
- package/dist/shared/openapi.CbzTVvGL.mjs +0 -31
- package/dist/shared/openapi.DZzpQAb-.mjs +0 -231
|
@@ -0,0 +1,108 @@
|
|
|
1
|
+
import { stringifyJSON, once, value } from '@orpc/shared';
|
|
2
|
+
import { O as OpenAPIGenerator } from '../shared/openapi.1iT1iSZi.mjs';
|
|
3
|
+
import '@orpc/client';
|
|
4
|
+
import '@orpc/client/standard';
|
|
5
|
+
import '@orpc/contract';
|
|
6
|
+
import '@orpc/openapi-client/standard';
|
|
7
|
+
import '@orpc/server';
|
|
8
|
+
import '@orpc/interop/json-schema-typed/draft-2020-12';
|
|
9
|
+
|
|
10
|
+
class OpenAPIReferencePlugin {
|
|
11
|
+
generator;
|
|
12
|
+
specGenerateOptions;
|
|
13
|
+
specPath;
|
|
14
|
+
docsPath;
|
|
15
|
+
docsTitle;
|
|
16
|
+
docsHead;
|
|
17
|
+
docsScriptUrl;
|
|
18
|
+
docsConfig;
|
|
19
|
+
renderDocsHtml;
|
|
20
|
+
constructor(options = {}) {
|
|
21
|
+
this.specGenerateOptions = options.specGenerateOptions;
|
|
22
|
+
this.docsPath = options.docsPath ?? "/";
|
|
23
|
+
this.docsTitle = options.docsTitle ?? "API Reference";
|
|
24
|
+
this.docsConfig = options.docsConfig ?? void 0;
|
|
25
|
+
this.docsScriptUrl = options.docsScriptUrl ?? "https://cdn.jsdelivr.net/npm/@scalar/api-reference";
|
|
26
|
+
this.docsHead = options.docsHead ?? "";
|
|
27
|
+
this.specPath = options.specPath ?? "/spec.json";
|
|
28
|
+
this.generator = new OpenAPIGenerator(options);
|
|
29
|
+
const esc = (s) => s.replace(/&/g, "&").replace(/"/g, """).replace(/</g, "<").replace(/>/g, ">");
|
|
30
|
+
this.renderDocsHtml = options.renderDocsHtml ?? ((specUrl, title, head, scriptUrl, config, spec) => {
|
|
31
|
+
const finalConfig = {
|
|
32
|
+
content: stringifyJSON(spec),
|
|
33
|
+
...config
|
|
34
|
+
};
|
|
35
|
+
return `
|
|
36
|
+
<!doctype html>
|
|
37
|
+
<html>
|
|
38
|
+
<head>
|
|
39
|
+
<meta charset="utf-8" />
|
|
40
|
+
<meta name="viewport" content="width=device-width, initial-scale=1" />
|
|
41
|
+
<title>${esc(title)}</title>
|
|
42
|
+
${head}
|
|
43
|
+
</head>
|
|
44
|
+
<body>
|
|
45
|
+
<div id="app" data-config="${esc(stringifyJSON(finalConfig))}"></div>
|
|
46
|
+
|
|
47
|
+
<script src="${esc(scriptUrl)}"><\/script>
|
|
48
|
+
|
|
49
|
+
<script>
|
|
50
|
+
Scalar.createApiReference('#app', JSON.parse(document.getElementById('app').dataset.config))
|
|
51
|
+
<\/script>
|
|
52
|
+
</body>
|
|
53
|
+
</html>
|
|
54
|
+
`;
|
|
55
|
+
});
|
|
56
|
+
}
|
|
57
|
+
init(options, router) {
|
|
58
|
+
options.interceptors ??= [];
|
|
59
|
+
options.interceptors.push(async (options2) => {
|
|
60
|
+
const res = await options2.next();
|
|
61
|
+
if (res.matched || options2.request.method !== "GET") {
|
|
62
|
+
return res;
|
|
63
|
+
}
|
|
64
|
+
const prefix = options2.prefix ?? "";
|
|
65
|
+
const requestPathname = options2.request.url.pathname.replace(/\/$/, "") || "/";
|
|
66
|
+
const docsUrl = new URL(`${prefix}${this.docsPath}`.replace(/\/$/, ""), options2.request.url.origin);
|
|
67
|
+
const specUrl = new URL(`${prefix}${this.specPath}`.replace(/\/$/, ""), options2.request.url.origin);
|
|
68
|
+
const generateSpec = once(async () => {
|
|
69
|
+
return await this.generator.generate(router, {
|
|
70
|
+
servers: [{ url: new URL(prefix, options2.request.url.origin).toString() }],
|
|
71
|
+
...await value(this.specGenerateOptions, options2)
|
|
72
|
+
});
|
|
73
|
+
});
|
|
74
|
+
if (requestPathname === specUrl.pathname) {
|
|
75
|
+
const spec = await generateSpec();
|
|
76
|
+
return {
|
|
77
|
+
matched: true,
|
|
78
|
+
response: {
|
|
79
|
+
status: 200,
|
|
80
|
+
headers: {},
|
|
81
|
+
body: new File([stringifyJSON(spec)], "spec.json", { type: "application/json" })
|
|
82
|
+
}
|
|
83
|
+
};
|
|
84
|
+
}
|
|
85
|
+
if (requestPathname === docsUrl.pathname) {
|
|
86
|
+
const html = this.renderDocsHtml(
|
|
87
|
+
specUrl.toString(),
|
|
88
|
+
await value(this.docsTitle, options2),
|
|
89
|
+
await value(this.docsHead, options2),
|
|
90
|
+
await value(this.docsScriptUrl, options2),
|
|
91
|
+
await value(this.docsConfig, options2),
|
|
92
|
+
await generateSpec()
|
|
93
|
+
);
|
|
94
|
+
return {
|
|
95
|
+
matched: true,
|
|
96
|
+
response: {
|
|
97
|
+
status: 200,
|
|
98
|
+
headers: {},
|
|
99
|
+
body: new File([html], "api-reference.html", { type: "text/html" })
|
|
100
|
+
}
|
|
101
|
+
};
|
|
102
|
+
}
|
|
103
|
+
return res;
|
|
104
|
+
});
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
|
|
108
|
+
export { OpenAPIReferencePlugin };
|