@aklinker1/zeta 1.2.2 → 1.2.4
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/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@aklinker1/zeta",
|
|
3
3
|
"description": "Composable, testable, OpenAPI-first backend framework with validation built-in",
|
|
4
|
-
"version": "1.2.
|
|
4
|
+
"version": "1.2.4",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"license": "MIT",
|
|
7
7
|
"packageManager": "bun@1.3.2",
|
|
@@ -19,7 +19,8 @@
|
|
|
19
19
|
"files": [
|
|
20
20
|
"src/*.ts",
|
|
21
21
|
"src/adapters/*.ts",
|
|
22
|
-
"src/internal/*.ts"
|
|
22
|
+
"src/internal/*.ts",
|
|
23
|
+
"src/transports/*.ts"
|
|
23
24
|
],
|
|
24
25
|
"publishConfig": {
|
|
25
26
|
"access": "public"
|
package/src/open-api.ts
CHANGED
|
@@ -35,7 +35,11 @@ export function buildOpenApiDocs(
|
|
|
35
35
|
};
|
|
36
36
|
for (const [method, methodEntry] of Object.entries(app["~zeta"].routes)) {
|
|
37
37
|
for (const [path, routerData] of Object.entries(methodEntry)) {
|
|
38
|
-
const openApiPath = path
|
|
38
|
+
const openApiPath = path
|
|
39
|
+
// Replace parameters with OpenAPI format
|
|
40
|
+
.replace(/\/:([^/]+)/g, "/{$1}")
|
|
41
|
+
// Remove trailing slash
|
|
42
|
+
.replace(/\/$/, "");
|
|
39
43
|
const { headers, params, query, body, responses, ...openApiOperation } =
|
|
40
44
|
routerData.def ?? {};
|
|
41
45
|
docs.paths ??= {};
|
|
@@ -139,9 +143,10 @@ function mapParameters(
|
|
|
139
143
|
|
|
140
144
|
return adapter
|
|
141
145
|
.parseParamsRecord(schema)
|
|
142
|
-
.map(({ schema, optional,
|
|
143
|
-
|
|
146
|
+
.map(({ schema, optional, description, name }) => ({
|
|
147
|
+
name,
|
|
144
148
|
in: _in,
|
|
149
|
+
description,
|
|
145
150
|
schema: adapter.toJsonSchema(schema),
|
|
146
151
|
required: !optional,
|
|
147
152
|
}));
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import type { Transport } from "../types";
|
|
2
|
+
// @ts-ignore: Bun types may not be available
|
|
3
|
+
import type { ServeFunctionOptions } from "@types/bun";
|
|
4
|
+
|
|
5
|
+
export function createBunTransport(
|
|
6
|
+
options: Omit<ServeFunctionOptions<any, any>, "fetch" | "port">,
|
|
7
|
+
): Transport {
|
|
8
|
+
const listen: Transport["listen"] = (port, fetch, cb) => {
|
|
9
|
+
// @ts-ignore: Bun types may not be available
|
|
10
|
+
Bun.serve({ ...options, port, fetch });
|
|
11
|
+
if (cb) setTimeout(cb, 0);
|
|
12
|
+
};
|
|
13
|
+
|
|
14
|
+
return {
|
|
15
|
+
listen,
|
|
16
|
+
};
|
|
17
|
+
}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import type { Transport } from "../types";
|
|
2
|
+
|
|
3
|
+
export function createDenoTransport(): Transport {
|
|
4
|
+
const listen: Transport["listen"] = (port, fetch, cb) => {
|
|
5
|
+
// @ts-ignore: Deno types may not be available
|
|
6
|
+
Deno.serve({ port, fetch });
|
|
7
|
+
if (cb) setTimeout(cb, 0);
|
|
8
|
+
};
|
|
9
|
+
|
|
10
|
+
return {
|
|
11
|
+
listen,
|
|
12
|
+
};
|
|
13
|
+
}
|