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 CHANGED
@@ -1,15 +1,15 @@
1
- # ts-kit
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 ts-kit
8
+ npm install semola
9
9
  ```
10
10
 
11
11
  ```bash
12
- bun add ts-kit
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 "ts-kit/policy";
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 "ts-kit/policy";
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 "ts-kit/i18n";
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 "ts-kit/i18n";
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 "ts-kit/cache";
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 "ts-kit/cache";
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 "ts-kit/errors";
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 "ts-kit/errors";
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/ts-kit/releases)
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/ts-kit](https://github.com/leonardodipace/ts-kit)
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.2.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/ts-kit"
44
+ "url": "git+https://github.com/leonardodipace/semola.git"
45
45
  },
46
46
  "devDependencies": {
47
47
  "@biomejs/biome": "2.3.10",
@@ -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"}
@@ -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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"}
@@ -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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"}
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=types.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/lib/http/types.ts"],"names":[],"mappings":""}