semola 0.2.0 → 0.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +13 -13
- package/package.json +2 -2
- package/dist/lib/http/index.d.ts +0 -29
- package/dist/lib/http/index.d.ts.map +0 -1
- package/dist/lib/http/index.js +0 -641
- package/dist/lib/http/index.js.map +0 -1
- package/dist/lib/http/types.d.ts +0 -175
- package/dist/lib/http/types.d.ts.map +0 -1
- package/dist/lib/http/types.js +0 -2
- package/dist/lib/http/types.js.map +0 -1
package/README.md
CHANGED
|
@@ -1,15 +1,15 @@
|
|
|
1
|
-
#
|
|
1
|
+
# semola
|
|
2
2
|
|
|
3
3
|
A TypeScript utility kit providing type-safe error handling, caching, internationalization, policy-based authorization, and developer tools.
|
|
4
4
|
|
|
5
5
|
## Installation
|
|
6
6
|
|
|
7
7
|
```bash
|
|
8
|
-
npm install
|
|
8
|
+
npm install semola
|
|
9
9
|
```
|
|
10
10
|
|
|
11
11
|
```bash
|
|
12
|
-
bun add
|
|
12
|
+
bun add semola
|
|
13
13
|
```
|
|
14
14
|
|
|
15
15
|
## Features
|
|
@@ -21,7 +21,7 @@ A type-safe policy-based authorization system for defining and enforcing access
|
|
|
21
21
|
#### Import
|
|
22
22
|
|
|
23
23
|
```typescript
|
|
24
|
-
import { Policy } from "
|
|
24
|
+
import { Policy } from "semola/policy";
|
|
25
25
|
```
|
|
26
26
|
|
|
27
27
|
#### API
|
|
@@ -135,7 +135,7 @@ type CanResult = {
|
|
|
135
135
|
#### Usage Example
|
|
136
136
|
|
|
137
137
|
```typescript
|
|
138
|
-
import { Policy } from "
|
|
138
|
+
import { Policy } from "semola/policy";
|
|
139
139
|
|
|
140
140
|
type Post = {
|
|
141
141
|
id: number;
|
|
@@ -226,7 +226,7 @@ A fully type-safe internationalization utility with compile-time validation of t
|
|
|
226
226
|
#### Import
|
|
227
227
|
|
|
228
228
|
```typescript
|
|
229
|
-
import { I18n } from "
|
|
229
|
+
import { I18n } from "semola/i18n";
|
|
230
230
|
```
|
|
231
231
|
|
|
232
232
|
#### API
|
|
@@ -326,7 +326,7 @@ The type system extracts these at compile time and enforces them in the `transla
|
|
|
326
326
|
#### Usage Example
|
|
327
327
|
|
|
328
328
|
```typescript
|
|
329
|
-
import { I18n } from "
|
|
329
|
+
import { I18n } from "semola/i18n";
|
|
330
330
|
|
|
331
331
|
const translations = {
|
|
332
332
|
en: {
|
|
@@ -380,7 +380,7 @@ A type-safe Redis cache wrapper with TTL support and result-based error handling
|
|
|
380
380
|
#### Import
|
|
381
381
|
|
|
382
382
|
```typescript
|
|
383
|
-
import { Cache } from "
|
|
383
|
+
import { Cache } from "semola/cache";
|
|
384
384
|
```
|
|
385
385
|
|
|
386
386
|
#### API
|
|
@@ -451,7 +451,7 @@ if (error) {
|
|
|
451
451
|
#### Usage Example
|
|
452
452
|
|
|
453
453
|
```typescript
|
|
454
|
-
import { Cache } from "
|
|
454
|
+
import { Cache } from "semola/cache";
|
|
455
455
|
|
|
456
456
|
type User = {
|
|
457
457
|
id: number;
|
|
@@ -507,7 +507,7 @@ Result-based error handling inspired by functional programming patterns. Avoid t
|
|
|
507
507
|
#### Import
|
|
508
508
|
|
|
509
509
|
```typescript
|
|
510
|
-
import { ok, err, mightThrow, mightThrowSync } from "
|
|
510
|
+
import { ok, err, mightThrow, mightThrowSync } from "semola/errors";
|
|
511
511
|
```
|
|
512
512
|
|
|
513
513
|
#### API
|
|
@@ -580,7 +580,7 @@ console.log("Parsed:", data);
|
|
|
580
580
|
#### Usage Example
|
|
581
581
|
|
|
582
582
|
```typescript
|
|
583
|
-
import { ok, err, mightThrow } from "
|
|
583
|
+
import { ok, err, mightThrow } from "semola/errors";
|
|
584
584
|
|
|
585
585
|
async function getUser(id: string) {
|
|
586
586
|
if (!id) {
|
|
@@ -633,7 +633,7 @@ This package uses GitHub Actions to automatically publish to npm. To publish a n
|
|
|
633
633
|
```
|
|
634
634
|
|
|
635
635
|
2. Create a new release on GitHub:
|
|
636
|
-
- Go to the [Releases page](https://github.com/leonardodipace/
|
|
636
|
+
- Go to the [Releases page](https://github.com/leonardodipace/semola/releases)
|
|
637
637
|
- Click "Create a new release"
|
|
638
638
|
- Create a new tag (e.g., `v0.3.0`)
|
|
639
639
|
- Publish the release
|
|
@@ -666,4 +666,4 @@ MIT © Leonardo Dipace
|
|
|
666
666
|
|
|
667
667
|
## Repository
|
|
668
668
|
|
|
669
|
-
[https://github.com/leonardodipace/
|
|
669
|
+
[https://github.com/leonardodipace/semola](https://github.com/leonardodipace/semola)
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "semola",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.3.0",
|
|
4
4
|
"description": "A TypeScript utility kit",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"exports": {
|
|
@@ -41,7 +41,7 @@
|
|
|
41
41
|
"license": "MIT",
|
|
42
42
|
"repository": {
|
|
43
43
|
"type": "git",
|
|
44
|
-
"url": "https://github.com/leonardodipace/
|
|
44
|
+
"url": "git+https://github.com/leonardodipace/semola.git"
|
|
45
45
|
},
|
|
46
46
|
"devDependencies": {
|
|
47
47
|
"@biomejs/biome": "2.3.10",
|
package/dist/lib/http/index.d.ts
DELETED
|
@@ -1,29 +0,0 @@
|
|
|
1
|
-
import type { Server } from "bun";
|
|
2
|
-
import type { AppConfig, HttpMethod, OpenAPIDocument, RequestConfig, ResponseConfig, RouteConfig } from "./types.js";
|
|
3
|
-
export declare class App<_TPrefix extends string = ""> {
|
|
4
|
-
private server;
|
|
5
|
-
private registry;
|
|
6
|
-
private config;
|
|
7
|
-
private requestHandler;
|
|
8
|
-
constructor(config: AppConfig);
|
|
9
|
-
/**
|
|
10
|
-
* Define a new route
|
|
11
|
-
*/
|
|
12
|
-
defineRoute<Path extends string, Method extends HttpMethod, Req extends RequestConfig, Res extends ResponseConfig>(config: RouteConfig<Path, Method, Req, Res>): void;
|
|
13
|
-
/**
|
|
14
|
-
* Start the HTTP server
|
|
15
|
-
*/
|
|
16
|
-
start(): Promise<Server<unknown>>;
|
|
17
|
-
/**
|
|
18
|
-
* Stop the HTTP server
|
|
19
|
-
*/
|
|
20
|
-
stop(): Promise<void>;
|
|
21
|
-
/**
|
|
22
|
-
* Generate OpenAPI documentation as an object (for JSON) or string (for YAML)
|
|
23
|
-
*/
|
|
24
|
-
getOpenAPIDocs(options?: {
|
|
25
|
-
format?: "json" | "yaml";
|
|
26
|
-
}): OpenAPIDocument | string;
|
|
27
|
-
}
|
|
28
|
-
export type * from "./types.js";
|
|
29
|
-
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/lib/http/index.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,KAAK,CAAC;AAClC,OAAO,KAAK,EACV,SAAS,EAIT,UAAU,EAEV,eAAe,EACf,aAAa,EACb,cAAc,EACd,WAAW,EAGZ,MAAM,YAAY,CAAC;AAkvBpB,qBAAa,GAAG,CAAC,QAAQ,SAAS,MAAM,GAAG,EAAE;IAC3C,OAAO,CAAC,MAAM,CAAgC;IAC9C,OAAO,CAAC,QAAQ,CAAgB;IAChC,OAAO,CAAC,MAAM,CAAY;IAC1B,OAAO,CAAC,cAAc,CAAiB;gBAE3B,MAAM,EAAE,SAAS;IAiB7B;;OAEG;IACH,WAAW,CACT,IAAI,SAAS,MAAM,EACnB,MAAM,SAAS,UAAU,EACzB,GAAG,SAAS,aAAa,EACzB,GAAG,SAAS,cAAc,EAC1B,MAAM,EAAE,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,GAAG,CAAC,GAAG,IAAI;IAIpD;;OAEG;IACG,KAAK,IAAI,OAAO,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IAcvC;;OAEG;IACG,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAS3B;;OAEG;IACH,cAAc,CAAC,OAAO,CAAC,EAAE;QACvB,MAAM,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;KAC1B,GAAG,eAAe,GAAG,MAAM;CAK7B;AAGD,mBAAmB,YAAY,CAAC"}
|
package/dist/lib/http/index.js
DELETED
|
@@ -1,641 +0,0 @@
|
|
|
1
|
-
// ============================================================================
|
|
2
|
-
// Route Registry - Manages route compilation and matching
|
|
3
|
-
// ============================================================================
|
|
4
|
-
class RouteRegistry {
|
|
5
|
-
routes = new Map();
|
|
6
|
-
/**
|
|
7
|
-
* Register a new route with compiled regex pattern
|
|
8
|
-
*/
|
|
9
|
-
register(config) {
|
|
10
|
-
const method = config.method;
|
|
11
|
-
const compiledRoute = this.compileRoute(config);
|
|
12
|
-
if (!this.routes.has(method)) {
|
|
13
|
-
this.routes.set(method, []);
|
|
14
|
-
}
|
|
15
|
-
const methodRoutes = this.routes.get(method);
|
|
16
|
-
if (methodRoutes) {
|
|
17
|
-
// Insert static routes before dynamic routes for priority matching
|
|
18
|
-
const isDynamic = config.path.includes(":");
|
|
19
|
-
if (isDynamic) {
|
|
20
|
-
methodRoutes.push(compiledRoute);
|
|
21
|
-
}
|
|
22
|
-
else {
|
|
23
|
-
methodRoutes.unshift(compiledRoute);
|
|
24
|
-
}
|
|
25
|
-
}
|
|
26
|
-
}
|
|
27
|
-
/**
|
|
28
|
-
* Find matching route for a request
|
|
29
|
-
*/
|
|
30
|
-
match(method, pathname) {
|
|
31
|
-
const methodRoutes = this.routes.get(method);
|
|
32
|
-
if (!methodRoutes) {
|
|
33
|
-
return null;
|
|
34
|
-
}
|
|
35
|
-
for (const route of methodRoutes) {
|
|
36
|
-
const match = pathname.match(route.pattern);
|
|
37
|
-
if (match) {
|
|
38
|
-
const params = {};
|
|
39
|
-
for (let i = 0; i < route.paramNames.length; i++) {
|
|
40
|
-
const paramName = route.paramNames[i];
|
|
41
|
-
if (paramName) {
|
|
42
|
-
params[paramName] = match[i + 1] || "";
|
|
43
|
-
}
|
|
44
|
-
}
|
|
45
|
-
return { route, params };
|
|
46
|
-
}
|
|
47
|
-
}
|
|
48
|
-
return null;
|
|
49
|
-
}
|
|
50
|
-
/**
|
|
51
|
-
* Get all registered routes
|
|
52
|
-
*/
|
|
53
|
-
getAll() {
|
|
54
|
-
const allRoutes = [];
|
|
55
|
-
for (const routes of this.routes.values()) {
|
|
56
|
-
allRoutes.push(...routes);
|
|
57
|
-
}
|
|
58
|
-
return allRoutes;
|
|
59
|
-
}
|
|
60
|
-
/**
|
|
61
|
-
* Compile route pattern to regex with parameter extraction
|
|
62
|
-
*/
|
|
63
|
-
compileRoute(config) {
|
|
64
|
-
const paramNames = [];
|
|
65
|
-
let pattern = config.path;
|
|
66
|
-
// Extract parameter names and convert :param to regex capture groups
|
|
67
|
-
pattern = pattern.replace(/:([^/]+)/g, (_match, paramName) => {
|
|
68
|
-
paramNames.push(paramName);
|
|
69
|
-
return "([^/]+)";
|
|
70
|
-
});
|
|
71
|
-
// Ensure exact match
|
|
72
|
-
const regex = new RegExp(`^${pattern}$`);
|
|
73
|
-
return {
|
|
74
|
-
pattern: regex,
|
|
75
|
-
paramNames,
|
|
76
|
-
config,
|
|
77
|
-
originalPath: config.path,
|
|
78
|
-
};
|
|
79
|
-
}
|
|
80
|
-
}
|
|
81
|
-
// ============================================================================
|
|
82
|
-
// Validation Helper - Standard Schema validation
|
|
83
|
-
// ============================================================================
|
|
84
|
-
/**
|
|
85
|
-
* Validate data against a Standard Schema
|
|
86
|
-
*/
|
|
87
|
-
async function validateSchema(schema, data) {
|
|
88
|
-
if (!schema) {
|
|
89
|
-
return { success: true, data };
|
|
90
|
-
}
|
|
91
|
-
try {
|
|
92
|
-
const result = await schema["~standard"].validate(data);
|
|
93
|
-
if (result.issues) {
|
|
94
|
-
return {
|
|
95
|
-
success: false,
|
|
96
|
-
issues: result.issues.map((issue) => ({
|
|
97
|
-
message: issue.message,
|
|
98
|
-
path: issue.path ? Array.from(issue.path) : undefined,
|
|
99
|
-
})),
|
|
100
|
-
};
|
|
101
|
-
}
|
|
102
|
-
return { success: true, data: result.value };
|
|
103
|
-
}
|
|
104
|
-
catch (error) {
|
|
105
|
-
return {
|
|
106
|
-
success: false,
|
|
107
|
-
issues: [
|
|
108
|
-
{
|
|
109
|
-
message: error instanceof Error ? error.message : "Validation failed",
|
|
110
|
-
},
|
|
111
|
-
],
|
|
112
|
-
};
|
|
113
|
-
}
|
|
114
|
-
}
|
|
115
|
-
/**
|
|
116
|
-
* Validate all request parts in parallel
|
|
117
|
-
*/
|
|
118
|
-
async function validateRequest(request, data) {
|
|
119
|
-
if (!request) {
|
|
120
|
-
return { success: true, data };
|
|
121
|
-
}
|
|
122
|
-
const results = await Promise.all([
|
|
123
|
-
validateSchema(request.query, data.query),
|
|
124
|
-
validateSchema(request.body, data.body),
|
|
125
|
-
validateSchema(request.params, data.params),
|
|
126
|
-
validateSchema(request.headers, data.headers),
|
|
127
|
-
]);
|
|
128
|
-
const allIssues = [];
|
|
129
|
-
const validatedData = { ...data };
|
|
130
|
-
const [queryResult, bodyResult, paramsResult, headersResult] = results;
|
|
131
|
-
if (!queryResult?.success) {
|
|
132
|
-
allIssues.push(...queryResult.issues.map((issue) => ({
|
|
133
|
-
...issue,
|
|
134
|
-
path: ["query", ...(issue.path || [])],
|
|
135
|
-
})));
|
|
136
|
-
}
|
|
137
|
-
else {
|
|
138
|
-
validatedData.query = queryResult.data;
|
|
139
|
-
}
|
|
140
|
-
if (!bodyResult?.success) {
|
|
141
|
-
allIssues.push(...bodyResult.issues.map((issue) => ({
|
|
142
|
-
...issue,
|
|
143
|
-
path: ["body", ...(issue.path || [])],
|
|
144
|
-
})));
|
|
145
|
-
}
|
|
146
|
-
else {
|
|
147
|
-
validatedData.body = bodyResult.data;
|
|
148
|
-
}
|
|
149
|
-
if (!paramsResult?.success) {
|
|
150
|
-
allIssues.push(...paramsResult.issues.map((issue) => ({
|
|
151
|
-
...issue,
|
|
152
|
-
path: ["params", ...(issue.path || [])],
|
|
153
|
-
})));
|
|
154
|
-
}
|
|
155
|
-
else {
|
|
156
|
-
validatedData.params = paramsResult.data;
|
|
157
|
-
}
|
|
158
|
-
if (!headersResult?.success) {
|
|
159
|
-
allIssues.push(...headersResult.issues.map((issue) => ({
|
|
160
|
-
...issue,
|
|
161
|
-
path: ["headers", ...(issue.path || [])],
|
|
162
|
-
})));
|
|
163
|
-
}
|
|
164
|
-
else {
|
|
165
|
-
validatedData.headers = headersResult.data;
|
|
166
|
-
}
|
|
167
|
-
if (allIssues.length > 0) {
|
|
168
|
-
return { success: false, issues: allIssues };
|
|
169
|
-
}
|
|
170
|
-
return { success: true, data: validatedData };
|
|
171
|
-
}
|
|
172
|
-
// ============================================================================
|
|
173
|
-
// OpenAPI Generator - Generate OpenAPI documentation
|
|
174
|
-
// ============================================================================
|
|
175
|
-
class OpenAPIGenerator {
|
|
176
|
-
routes;
|
|
177
|
-
config;
|
|
178
|
-
constructor(routes, config) {
|
|
179
|
-
this.routes = routes;
|
|
180
|
-
this.config = config;
|
|
181
|
-
}
|
|
182
|
-
/**
|
|
183
|
-
* Generate OpenAPI documentation
|
|
184
|
-
*/
|
|
185
|
-
generate(format = "json") {
|
|
186
|
-
const version = this.config.openapi?.version || "3.0";
|
|
187
|
-
const doc = this.generateDocument(version);
|
|
188
|
-
if (format === "yaml") {
|
|
189
|
-
return this.toYAML(doc);
|
|
190
|
-
}
|
|
191
|
-
// Return object for JSON format
|
|
192
|
-
return doc;
|
|
193
|
-
}
|
|
194
|
-
/**
|
|
195
|
-
* Generate OpenAPI document structure
|
|
196
|
-
*/
|
|
197
|
-
generateDocument(version) {
|
|
198
|
-
const openapi = version === "3.1" ? "3.1.0" : "3.0.3";
|
|
199
|
-
const doc = {
|
|
200
|
-
openapi,
|
|
201
|
-
info: {
|
|
202
|
-
title: this.config.openapi?.info?.title || "API Documentation",
|
|
203
|
-
version: this.config.openapi?.info?.version || "1.0.0",
|
|
204
|
-
description: this.config.openapi?.info?.description,
|
|
205
|
-
},
|
|
206
|
-
paths: {},
|
|
207
|
-
};
|
|
208
|
-
for (const route of this.routes) {
|
|
209
|
-
const path = this.convertPathToOpenAPI(route.originalPath);
|
|
210
|
-
const method = route.config.method.toLowerCase();
|
|
211
|
-
if (!doc.paths[path]) {
|
|
212
|
-
doc.paths[path] = {};
|
|
213
|
-
}
|
|
214
|
-
doc.paths[path][method] = this.generateOperation(route);
|
|
215
|
-
}
|
|
216
|
-
return doc;
|
|
217
|
-
}
|
|
218
|
-
/**
|
|
219
|
-
* Convert Express-style path to OpenAPI path
|
|
220
|
-
* Example: /users/:id -> /users/{id}
|
|
221
|
-
*/
|
|
222
|
-
convertPathToOpenAPI(path) {
|
|
223
|
-
return path.replace(/:([^/]+)/g, "{$1}");
|
|
224
|
-
}
|
|
225
|
-
/**
|
|
226
|
-
* Generate OpenAPI operation object
|
|
227
|
-
*/
|
|
228
|
-
generateOperation(route) {
|
|
229
|
-
const operation = {
|
|
230
|
-
summary: route.config.openapi?.summary,
|
|
231
|
-
description: route.config.openapi?.description,
|
|
232
|
-
tags: route.config.openapi?.tags,
|
|
233
|
-
operationId: route.config.openapi?.operationId,
|
|
234
|
-
deprecated: route.config.openapi?.deprecated,
|
|
235
|
-
};
|
|
236
|
-
// Remove undefined fields
|
|
237
|
-
Object.keys(operation).forEach((key) => {
|
|
238
|
-
if (operation[key] === undefined) {
|
|
239
|
-
delete operation[key];
|
|
240
|
-
}
|
|
241
|
-
});
|
|
242
|
-
// Add parameters
|
|
243
|
-
const parameters = [];
|
|
244
|
-
if (route.config.request?.params) {
|
|
245
|
-
const schema = this.schemaToJSON(route.config.request.params);
|
|
246
|
-
if (schema.properties) {
|
|
247
|
-
for (const [name, propSchema] of Object.entries(schema.properties)) {
|
|
248
|
-
parameters.push({
|
|
249
|
-
name,
|
|
250
|
-
in: "path",
|
|
251
|
-
required: true,
|
|
252
|
-
schema: propSchema,
|
|
253
|
-
});
|
|
254
|
-
}
|
|
255
|
-
}
|
|
256
|
-
}
|
|
257
|
-
if (route.config.request?.query) {
|
|
258
|
-
const schema = this.schemaToJSON(route.config.request.query);
|
|
259
|
-
if (schema.properties) {
|
|
260
|
-
for (const [name, propSchema] of Object.entries(schema.properties)) {
|
|
261
|
-
parameters.push({
|
|
262
|
-
name,
|
|
263
|
-
in: "query",
|
|
264
|
-
required: schema.required?.includes(name) || false,
|
|
265
|
-
schema: propSchema,
|
|
266
|
-
});
|
|
267
|
-
}
|
|
268
|
-
}
|
|
269
|
-
}
|
|
270
|
-
if (route.config.request?.headers) {
|
|
271
|
-
const schema = this.schemaToJSON(route.config.request.headers);
|
|
272
|
-
if (schema.properties) {
|
|
273
|
-
for (const [name, propSchema] of Object.entries(schema.properties)) {
|
|
274
|
-
parameters.push({
|
|
275
|
-
name,
|
|
276
|
-
in: "header",
|
|
277
|
-
required: schema.required?.includes(name) || false,
|
|
278
|
-
schema: propSchema,
|
|
279
|
-
});
|
|
280
|
-
}
|
|
281
|
-
}
|
|
282
|
-
}
|
|
283
|
-
if (parameters.length > 0) {
|
|
284
|
-
operation.parameters = parameters;
|
|
285
|
-
}
|
|
286
|
-
// Add request body
|
|
287
|
-
if (route.config.request?.body) {
|
|
288
|
-
operation.requestBody = {
|
|
289
|
-
required: true,
|
|
290
|
-
content: {
|
|
291
|
-
"application/json": {
|
|
292
|
-
schema: this.schemaToJSON(route.config.request.body),
|
|
293
|
-
},
|
|
294
|
-
},
|
|
295
|
-
};
|
|
296
|
-
}
|
|
297
|
-
// Add responses
|
|
298
|
-
const responses = {};
|
|
299
|
-
for (const [status, schema] of Object.entries(route.config.response)) {
|
|
300
|
-
responses[status] = {
|
|
301
|
-
description: `Response for status ${status}`,
|
|
302
|
-
content: {
|
|
303
|
-
"application/json": {
|
|
304
|
-
schema: this.schemaToJSON(schema),
|
|
305
|
-
},
|
|
306
|
-
},
|
|
307
|
-
};
|
|
308
|
-
}
|
|
309
|
-
operation.responses = responses;
|
|
310
|
-
return operation;
|
|
311
|
-
}
|
|
312
|
-
/**
|
|
313
|
-
* Convert Standard Schema to JSON Schema
|
|
314
|
-
*/
|
|
315
|
-
schemaToJSON(schema) {
|
|
316
|
-
// Check if schema has Standard Schema interface
|
|
317
|
-
if ("~standard" in schema && typeof schema["~standard"] === "object") {
|
|
318
|
-
const standard = schema["~standard"];
|
|
319
|
-
// Try to use jsonSchema.output() function if available (Zod v4+)
|
|
320
|
-
if (standard &&
|
|
321
|
-
typeof standard === "object" &&
|
|
322
|
-
"jsonSchema" in standard &&
|
|
323
|
-
typeof standard.jsonSchema === "object") {
|
|
324
|
-
const jsonSchemaObj = standard.jsonSchema;
|
|
325
|
-
// Call output() function to get the JSON Schema
|
|
326
|
-
if (typeof jsonSchemaObj.output === "function") {
|
|
327
|
-
try {
|
|
328
|
-
const result = jsonSchemaObj.output();
|
|
329
|
-
// Remove $schema property as it's not needed in OpenAPI
|
|
330
|
-
const { $schema, ...rest } = result;
|
|
331
|
-
return rest;
|
|
332
|
-
}
|
|
333
|
-
catch (error) {
|
|
334
|
-
console.warn("Failed to generate JSON Schema from output():", error);
|
|
335
|
-
}
|
|
336
|
-
}
|
|
337
|
-
// Fallback: if jsonSchema is directly a schema object
|
|
338
|
-
if (jsonSchemaObj.type) {
|
|
339
|
-
return jsonSchemaObj;
|
|
340
|
-
}
|
|
341
|
-
}
|
|
342
|
-
}
|
|
343
|
-
// Fallback: Basic schema
|
|
344
|
-
return {
|
|
345
|
-
type: "object",
|
|
346
|
-
description: "Schema conversion not available",
|
|
347
|
-
};
|
|
348
|
-
}
|
|
349
|
-
/**
|
|
350
|
-
* Convert JSON to YAML (simple implementation)
|
|
351
|
-
*/
|
|
352
|
-
toYAML(obj, indent = 0) {
|
|
353
|
-
const spaces = " ".repeat(indent);
|
|
354
|
-
if (obj === null || obj === undefined) {
|
|
355
|
-
return "null";
|
|
356
|
-
}
|
|
357
|
-
if (typeof obj === "string") {
|
|
358
|
-
return obj.includes("\n") ? `|\n${obj}` : `"${obj}"`;
|
|
359
|
-
}
|
|
360
|
-
if (typeof obj === "number" || typeof obj === "boolean") {
|
|
361
|
-
return String(obj);
|
|
362
|
-
}
|
|
363
|
-
if (Array.isArray(obj)) {
|
|
364
|
-
if (obj.length === 0) {
|
|
365
|
-
return "[]";
|
|
366
|
-
}
|
|
367
|
-
return obj
|
|
368
|
-
.map((item) => `\n${spaces}- ${this.toYAML(item, indent + 1)}`)
|
|
369
|
-
.join("");
|
|
370
|
-
}
|
|
371
|
-
if (typeof obj === "object") {
|
|
372
|
-
const entries = Object.entries(obj);
|
|
373
|
-
if (entries.length === 0) {
|
|
374
|
-
return "{}";
|
|
375
|
-
}
|
|
376
|
-
return entries
|
|
377
|
-
.map(([key, value]) => {
|
|
378
|
-
const yamlValue = this.toYAML(value, indent + 1);
|
|
379
|
-
if (typeof value === "object" &&
|
|
380
|
-
value !== null &&
|
|
381
|
-
!Array.isArray(value)) {
|
|
382
|
-
return `\n${spaces}${key}:${yamlValue}`;
|
|
383
|
-
}
|
|
384
|
-
return `\n${spaces}${key}: ${yamlValue}`;
|
|
385
|
-
})
|
|
386
|
-
.join("");
|
|
387
|
-
}
|
|
388
|
-
return String(obj);
|
|
389
|
-
}
|
|
390
|
-
}
|
|
391
|
-
// ============================================================================
|
|
392
|
-
// Request Handler - Process incoming requests
|
|
393
|
-
// ============================================================================
|
|
394
|
-
class RequestHandler {
|
|
395
|
-
registry;
|
|
396
|
-
config;
|
|
397
|
-
constructor(registry, config) {
|
|
398
|
-
this.registry = registry;
|
|
399
|
-
this.config = config;
|
|
400
|
-
}
|
|
401
|
-
/**
|
|
402
|
-
* Handle incoming HTTP request
|
|
403
|
-
*/
|
|
404
|
-
async handle(request) {
|
|
405
|
-
try {
|
|
406
|
-
const url = new URL(request.url);
|
|
407
|
-
let pathname = url.pathname;
|
|
408
|
-
// Check and remove prefix if configured
|
|
409
|
-
if (this.config.prefix) {
|
|
410
|
-
if (!pathname.startsWith(this.config.prefix)) {
|
|
411
|
-
return this.handleError(request, {
|
|
412
|
-
type: "ROUTE_NOT_FOUND",
|
|
413
|
-
message: `Route not found: ${request.method} ${pathname}`,
|
|
414
|
-
status: 404,
|
|
415
|
-
});
|
|
416
|
-
}
|
|
417
|
-
pathname = pathname.slice(this.config.prefix.length) || "/";
|
|
418
|
-
}
|
|
419
|
-
const method = request.method;
|
|
420
|
-
// Find matching route
|
|
421
|
-
const match = this.registry.match(method, pathname);
|
|
422
|
-
if (!match) {
|
|
423
|
-
return this.handleError(request, {
|
|
424
|
-
type: "ROUTE_NOT_FOUND",
|
|
425
|
-
message: `Route not found: ${method} ${pathname}`,
|
|
426
|
-
status: 404,
|
|
427
|
-
});
|
|
428
|
-
}
|
|
429
|
-
// Parse request data
|
|
430
|
-
const requestData = await this.parseRequest(request, match);
|
|
431
|
-
// Validate request if enabled
|
|
432
|
-
const shouldValidateInput = this.config.validation?.input !== false;
|
|
433
|
-
if (shouldValidateInput) {
|
|
434
|
-
const validationResult = await validateRequest(match.route.config.request, requestData);
|
|
435
|
-
if (!validationResult.success) {
|
|
436
|
-
return this.handleError(request, {
|
|
437
|
-
type: "VALIDATION_ERROR",
|
|
438
|
-
message: "Request validation failed",
|
|
439
|
-
issues: validationResult.issues,
|
|
440
|
-
status: 400,
|
|
441
|
-
});
|
|
442
|
-
}
|
|
443
|
-
requestData.query = validationResult.data.query;
|
|
444
|
-
requestData.body = validationResult.data.body;
|
|
445
|
-
requestData.params = validationResult.data.params;
|
|
446
|
-
requestData.headers = validationResult.data.headers;
|
|
447
|
-
}
|
|
448
|
-
// Create context
|
|
449
|
-
const context = this.createContext(request, requestData, match.route.config.response);
|
|
450
|
-
// Execute handler
|
|
451
|
-
const response = await match.route.config.handler(context);
|
|
452
|
-
// Validate response if enabled
|
|
453
|
-
const shouldValidateOutput = this.config.validation?.output !== false;
|
|
454
|
-
if (shouldValidateOutput) {
|
|
455
|
-
await this.validateResponse(response, match.route.config.response);
|
|
456
|
-
}
|
|
457
|
-
return response;
|
|
458
|
-
}
|
|
459
|
-
catch (error) {
|
|
460
|
-
return this.handleError(request, {
|
|
461
|
-
type: "INTERNAL_ERROR",
|
|
462
|
-
message: error instanceof Error ? error.message : "Internal server error",
|
|
463
|
-
status: 500,
|
|
464
|
-
}, error);
|
|
465
|
-
}
|
|
466
|
-
}
|
|
467
|
-
/**
|
|
468
|
-
* Parse request data
|
|
469
|
-
*/
|
|
470
|
-
async parseRequest(request, match) {
|
|
471
|
-
const url = new URL(request.url);
|
|
472
|
-
// Parse query parameters
|
|
473
|
-
const query = {};
|
|
474
|
-
for (const [key, value] of url.searchParams.entries()) {
|
|
475
|
-
query[key] = value;
|
|
476
|
-
}
|
|
477
|
-
// Parse body
|
|
478
|
-
let body;
|
|
479
|
-
if (request.method !== "GET" &&
|
|
480
|
-
request.method !== "HEAD" &&
|
|
481
|
-
request.headers.get("content-type")?.includes("application/json")) {
|
|
482
|
-
try {
|
|
483
|
-
body = await request.json();
|
|
484
|
-
}
|
|
485
|
-
catch {
|
|
486
|
-
body = undefined;
|
|
487
|
-
}
|
|
488
|
-
}
|
|
489
|
-
// Parse headers
|
|
490
|
-
const headers = {};
|
|
491
|
-
for (const [key, value] of request.headers.entries()) {
|
|
492
|
-
headers[key] = value;
|
|
493
|
-
}
|
|
494
|
-
return {
|
|
495
|
-
query,
|
|
496
|
-
body,
|
|
497
|
-
params: match.params,
|
|
498
|
-
headers,
|
|
499
|
-
};
|
|
500
|
-
}
|
|
501
|
-
/**
|
|
502
|
-
* Create handler context
|
|
503
|
-
*/
|
|
504
|
-
createContext(request, requestData, _responseConfig) {
|
|
505
|
-
const context = {
|
|
506
|
-
request: requestData,
|
|
507
|
-
raw: request,
|
|
508
|
-
json: (status, data) => {
|
|
509
|
-
return Response.json(data, { status });
|
|
510
|
-
},
|
|
511
|
-
};
|
|
512
|
-
return context;
|
|
513
|
-
}
|
|
514
|
-
/**
|
|
515
|
-
* Validate response against schema
|
|
516
|
-
*/
|
|
517
|
-
async validateResponse(response, responseConfig) {
|
|
518
|
-
const status = response.status;
|
|
519
|
-
const schema = responseConfig[status];
|
|
520
|
-
if (!schema) {
|
|
521
|
-
console.warn(`Warning: Response status ${status} not defined in response config`);
|
|
522
|
-
return;
|
|
523
|
-
}
|
|
524
|
-
// Only validate JSON responses
|
|
525
|
-
const contentType = response.headers.get("content-type");
|
|
526
|
-
if (!contentType?.includes("application/json")) {
|
|
527
|
-
return;
|
|
528
|
-
}
|
|
529
|
-
try {
|
|
530
|
-
// Clone response to read body without consuming it
|
|
531
|
-
const clone = response.clone();
|
|
532
|
-
const data = await clone.json();
|
|
533
|
-
const result = await validateSchema(schema, data);
|
|
534
|
-
if (!result.success) {
|
|
535
|
-
console.error("Response validation failed:", result.issues);
|
|
536
|
-
}
|
|
537
|
-
}
|
|
538
|
-
catch (error) {
|
|
539
|
-
console.error("Failed to validate response:", error);
|
|
540
|
-
}
|
|
541
|
-
}
|
|
542
|
-
/**
|
|
543
|
-
* Handle errors
|
|
544
|
-
*/
|
|
545
|
-
async handleError(request, error, originalError) {
|
|
546
|
-
// Log internal errors
|
|
547
|
-
if (error.type === "INTERNAL_ERROR") {
|
|
548
|
-
console.error("Internal error:", originalError);
|
|
549
|
-
}
|
|
550
|
-
// Use custom error handler if provided
|
|
551
|
-
if (this.config.onError) {
|
|
552
|
-
try {
|
|
553
|
-
const context = {
|
|
554
|
-
request: {
|
|
555
|
-
query: undefined,
|
|
556
|
-
body: undefined,
|
|
557
|
-
params: undefined,
|
|
558
|
-
headers: undefined,
|
|
559
|
-
},
|
|
560
|
-
raw: request,
|
|
561
|
-
json: (status, data) => {
|
|
562
|
-
return Response.json(data, { status });
|
|
563
|
-
},
|
|
564
|
-
};
|
|
565
|
-
return await this.config.onError(context, error);
|
|
566
|
-
}
|
|
567
|
-
catch (handlerError) {
|
|
568
|
-
console.error("Error handler failed:", handlerError);
|
|
569
|
-
}
|
|
570
|
-
}
|
|
571
|
-
// Default error response
|
|
572
|
-
return Response.json({
|
|
573
|
-
error: error.type,
|
|
574
|
-
message: error.message,
|
|
575
|
-
issues: error.issues,
|
|
576
|
-
}, { status: error.status || 500 });
|
|
577
|
-
}
|
|
578
|
-
}
|
|
579
|
-
// ============================================================================
|
|
580
|
-
// App - Main HTTP application class
|
|
581
|
-
// ============================================================================
|
|
582
|
-
export class App {
|
|
583
|
-
server = null;
|
|
584
|
-
registry;
|
|
585
|
-
config;
|
|
586
|
-
requestHandler;
|
|
587
|
-
constructor(config) {
|
|
588
|
-
this.config = {
|
|
589
|
-
...config,
|
|
590
|
-
validation: {
|
|
591
|
-
input: config.validation?.input !== false,
|
|
592
|
-
output: config.validation?.output !== false,
|
|
593
|
-
},
|
|
594
|
-
openapi: {
|
|
595
|
-
version: config.openapi?.version || "3.0",
|
|
596
|
-
info: config.openapi?.info,
|
|
597
|
-
},
|
|
598
|
-
};
|
|
599
|
-
this.registry = new RouteRegistry();
|
|
600
|
-
this.requestHandler = new RequestHandler(this.registry, this.config);
|
|
601
|
-
}
|
|
602
|
-
/**
|
|
603
|
-
* Define a new route
|
|
604
|
-
*/
|
|
605
|
-
defineRoute(config) {
|
|
606
|
-
this.registry.register(config);
|
|
607
|
-
}
|
|
608
|
-
/**
|
|
609
|
-
* Start the HTTP server
|
|
610
|
-
*/
|
|
611
|
-
async start() {
|
|
612
|
-
if (this.server) {
|
|
613
|
-
throw new Error("Server is already running");
|
|
614
|
-
}
|
|
615
|
-
this.server = Bun.serve({
|
|
616
|
-
port: this.config.port,
|
|
617
|
-
hostname: this.config.hostname,
|
|
618
|
-
fetch: (request) => this.requestHandler.handle(request),
|
|
619
|
-
});
|
|
620
|
-
return this.server;
|
|
621
|
-
}
|
|
622
|
-
/**
|
|
623
|
-
* Stop the HTTP server
|
|
624
|
-
*/
|
|
625
|
-
async stop() {
|
|
626
|
-
if (!this.server) {
|
|
627
|
-
throw new Error("Server is not running");
|
|
628
|
-
}
|
|
629
|
-
this.server.stop();
|
|
630
|
-
this.server = null;
|
|
631
|
-
}
|
|
632
|
-
/**
|
|
633
|
-
* Generate OpenAPI documentation as an object (for JSON) or string (for YAML)
|
|
634
|
-
*/
|
|
635
|
-
getOpenAPIDocs(options) {
|
|
636
|
-
const routes = this.registry.getAll();
|
|
637
|
-
const generator = new OpenAPIGenerator(routes, this.config);
|
|
638
|
-
return generator.generate(options?.format);
|
|
639
|
-
}
|
|
640
|
-
}
|
|
641
|
-
//# sourceMappingURL=index.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/lib/http/index.ts"],"names":[],"mappings":"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"}
|
package/dist/lib/http/types.d.ts
DELETED
|
@@ -1,175 +0,0 @@
|
|
|
1
|
-
import type { StandardSchemaV1 } from "@standard-schema/spec";
|
|
2
|
-
/**
|
|
3
|
-
* Infer the input type from a Standard Schema
|
|
4
|
-
*/
|
|
5
|
-
export type InferSchemaInput<S> = S extends StandardSchemaV1<infer In, unknown> ? In : unknown;
|
|
6
|
-
/**
|
|
7
|
-
* Infer the output type from a Standard Schema
|
|
8
|
-
*/
|
|
9
|
-
export type InferSchemaOutput<S> = S extends StandardSchemaV1<unknown, infer Out> ? Out : unknown;
|
|
10
|
-
export type HttpMethod = "GET" | "POST" | "PUT" | "DELETE" | "PATCH" | "HEAD" | "OPTIONS";
|
|
11
|
-
/**
|
|
12
|
-
* Extract path parameter names from a route pattern
|
|
13
|
-
* Example: "/users/:id/posts/:postId" -> "id" | "postId"
|
|
14
|
-
*/
|
|
15
|
-
export type ExtractPathParams<P extends string> = P extends `${infer _Start}:${infer Param}/${infer Rest}` ? Param | ExtractPathParams<`/${Rest}`> : P extends `${infer _Start}:${infer Param}` ? Param : never;
|
|
16
|
-
/**
|
|
17
|
-
* Configuration for request validation schemas
|
|
18
|
-
*/
|
|
19
|
-
export type RequestConfig = {
|
|
20
|
-
query?: StandardSchemaV1;
|
|
21
|
-
body?: StandardSchemaV1;
|
|
22
|
-
params?: StandardSchemaV1;
|
|
23
|
-
headers?: StandardSchemaV1;
|
|
24
|
-
};
|
|
25
|
-
/**
|
|
26
|
-
* Extract validated request data types from RequestConfig
|
|
27
|
-
*/
|
|
28
|
-
export type InferRequestData<R extends RequestConfig> = {
|
|
29
|
-
query: R["query"] extends StandardSchemaV1 ? InferSchemaOutput<R["query"]> : undefined;
|
|
30
|
-
body: R["body"] extends StandardSchemaV1 ? InferSchemaOutput<R["body"]> : undefined;
|
|
31
|
-
params: R["params"] extends StandardSchemaV1 ? InferSchemaOutput<R["params"]> : undefined;
|
|
32
|
-
headers: R["headers"] extends StandardSchemaV1 ? InferSchemaOutput<R["headers"]> : undefined;
|
|
33
|
-
};
|
|
34
|
-
/**
|
|
35
|
-
* Configuration for response schemas mapped by status code
|
|
36
|
-
*/
|
|
37
|
-
export type ResponseConfig = {
|
|
38
|
-
[status: number]: StandardSchemaV1;
|
|
39
|
-
};
|
|
40
|
-
/**
|
|
41
|
-
* Extract valid status codes from ResponseConfig
|
|
42
|
-
*/
|
|
43
|
-
export type ResponseStatus<R extends ResponseConfig> = Extract<keyof R, number>;
|
|
44
|
-
/**
|
|
45
|
-
* Map a status code to its corresponding data type
|
|
46
|
-
*/
|
|
47
|
-
export type ResponseDataForStatus<R extends ResponseConfig, S extends ResponseStatus<R>> = S extends keyof R ? InferSchemaOutput<R[S]> : never;
|
|
48
|
-
/**
|
|
49
|
-
* OpenAPI metadata for a route
|
|
50
|
-
*/
|
|
51
|
-
export type OpenAPIMetadata = {
|
|
52
|
-
summary?: string;
|
|
53
|
-
description?: string;
|
|
54
|
-
tags?: string[];
|
|
55
|
-
operationId?: string;
|
|
56
|
-
deprecated?: boolean;
|
|
57
|
-
[key: string]: unknown;
|
|
58
|
-
};
|
|
59
|
-
/**
|
|
60
|
-
* Type-safe JSON response helper
|
|
61
|
-
*/
|
|
62
|
-
export type JsonResponder<R extends ResponseConfig> = <S extends ResponseStatus<R>>(status: S, data: ResponseDataForStatus<R, S>) => Response;
|
|
63
|
-
/**
|
|
64
|
-
* Handler context with validated request data and type-safe response methods
|
|
65
|
-
*/
|
|
66
|
-
export type Context<Req extends RequestConfig = RequestConfig, Res extends ResponseConfig = ResponseConfig> = {
|
|
67
|
-
request: InferRequestData<Req>;
|
|
68
|
-
json: JsonResponder<Res>;
|
|
69
|
-
raw: Request;
|
|
70
|
-
};
|
|
71
|
-
/**
|
|
72
|
-
* Route handler function
|
|
73
|
-
*/
|
|
74
|
-
export type RouteHandler<Req extends RequestConfig, Res extends ResponseConfig> = (context: Context<Req, Res>) => Promise<Response> | Response;
|
|
75
|
-
/**
|
|
76
|
-
* Complete route definition
|
|
77
|
-
*/
|
|
78
|
-
export type RouteConfig<Path extends string = string, Method extends HttpMethod = HttpMethod, Req extends RequestConfig = RequestConfig, Res extends ResponseConfig = ResponseConfig> = {
|
|
79
|
-
path: Path;
|
|
80
|
-
method: Method;
|
|
81
|
-
request?: Req;
|
|
82
|
-
response: Res;
|
|
83
|
-
handler: RouteHandler<Req, Res>;
|
|
84
|
-
openapi?: OpenAPIMetadata;
|
|
85
|
-
};
|
|
86
|
-
/**
|
|
87
|
-
* HTTP error types
|
|
88
|
-
*/
|
|
89
|
-
export type HttpErrorType = "VALIDATION_ERROR" | "ROUTE_NOT_FOUND" | "METHOD_NOT_ALLOWED" | "INTERNAL_ERROR";
|
|
90
|
-
/**
|
|
91
|
-
* Standard Schema validation issue
|
|
92
|
-
*/
|
|
93
|
-
export type ValidationIssue = {
|
|
94
|
-
message: string;
|
|
95
|
-
path?: (string | number)[];
|
|
96
|
-
[key: string]: unknown;
|
|
97
|
-
};
|
|
98
|
-
/**
|
|
99
|
-
* HTTP error object
|
|
100
|
-
*/
|
|
101
|
-
export type HttpError = {
|
|
102
|
-
type: HttpErrorType;
|
|
103
|
-
message: string;
|
|
104
|
-
issues?: ValidationIssue[];
|
|
105
|
-
status?: number;
|
|
106
|
-
};
|
|
107
|
-
/**
|
|
108
|
-
* Error handler callback
|
|
109
|
-
*/
|
|
110
|
-
export type ErrorHandler = (context: Context, error: HttpError) => Response | Promise<Response>;
|
|
111
|
-
/**
|
|
112
|
-
* App configuration
|
|
113
|
-
*/
|
|
114
|
-
export type AppConfig = {
|
|
115
|
-
port: number;
|
|
116
|
-
hostname?: string;
|
|
117
|
-
prefix?: string;
|
|
118
|
-
onError?: ErrorHandler;
|
|
119
|
-
validation?: {
|
|
120
|
-
input?: boolean;
|
|
121
|
-
output?: boolean;
|
|
122
|
-
};
|
|
123
|
-
openapi?: {
|
|
124
|
-
version?: "3.0" | "3.1";
|
|
125
|
-
info?: {
|
|
126
|
-
title?: string;
|
|
127
|
-
version?: string;
|
|
128
|
-
description?: string;
|
|
129
|
-
};
|
|
130
|
-
};
|
|
131
|
-
};
|
|
132
|
-
/**
|
|
133
|
-
* Compiled route with regex pattern for matching
|
|
134
|
-
*/
|
|
135
|
-
export type CompiledRoute = {
|
|
136
|
-
pattern: RegExp;
|
|
137
|
-
paramNames: string[];
|
|
138
|
-
config: RouteConfig;
|
|
139
|
-
originalPath: string;
|
|
140
|
-
};
|
|
141
|
-
/**
|
|
142
|
-
* Route match result
|
|
143
|
-
*/
|
|
144
|
-
export type RouteMatch = {
|
|
145
|
-
route: CompiledRoute;
|
|
146
|
-
params: Record<string, string>;
|
|
147
|
-
};
|
|
148
|
-
/**
|
|
149
|
-
* JSON Schema representation
|
|
150
|
-
*/
|
|
151
|
-
export type JSONSchema = {
|
|
152
|
-
type?: string;
|
|
153
|
-
properties?: Record<string, JSONSchema>;
|
|
154
|
-
items?: JSONSchema;
|
|
155
|
-
required?: string[];
|
|
156
|
-
enum?: unknown[];
|
|
157
|
-
description?: string;
|
|
158
|
-
[key: string]: unknown;
|
|
159
|
-
};
|
|
160
|
-
/**
|
|
161
|
-
* OpenAPI document structure
|
|
162
|
-
*/
|
|
163
|
-
export type OpenAPIDocument = {
|
|
164
|
-
openapi: string;
|
|
165
|
-
info: {
|
|
166
|
-
title: string;
|
|
167
|
-
version: string;
|
|
168
|
-
description?: string;
|
|
169
|
-
};
|
|
170
|
-
paths: Record<string, Record<string, unknown>>;
|
|
171
|
-
components?: {
|
|
172
|
-
schemas?: Record<string, JSONSchema>;
|
|
173
|
-
};
|
|
174
|
-
};
|
|
175
|
-
//# sourceMappingURL=types.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/lib/http/types.ts"],"names":[],"mappings":"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"}
|
package/dist/lib/http/types.js
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/lib/http/types.ts"],"names":[],"mappings":""}
|