bun-crumb 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,7 +1,7 @@
1
1
  # <div align='center'> <a> **Bun Crumb** </a> </div>
2
2
 
3
3
  <div align='center'>
4
- [![CI](https://github.com/a-marigold/crumb/actions/workflows/ci.yaml/badge.svg)](https://github.com/a-marigold/crumb/actions) [![bun](https://img.shields.io/badge/Bun-000?logo=bun&logoColor=fff)](https://bun.com) [![npm](https://img.shields.io/npm/v/bun-crumb)](https://npmjs.com/package/bun-crumb)
4
+ [![CI](https://github.com/a-marigold/crumb/actions/workflows/ci.yaml/badge.svg)](https://github.com/a-marigold/crumb/actions) [![bun](https://img.shields.io/badge/Bun-000?logo=bun&logoColor=fff)](https://bun.com) [![npm](https://img.shields.io/npm/v/bun-crumb)](https://npmjs.com/package/bun-crumb) [![Status](https://img.shields.io/badge/BETA-darkgreen?style=for-the-badge)](https://npmjs.com/package/bun-crumb)
5
5
 
6
6
  </div>
7
7
 
@@ -24,7 +24,7 @@ bun add bun-crumb
24
24
  Handling Requests
25
25
 
26
26
  ```typescript
27
- import { createRoute, type RouteResponse } from 'crumb-bun';
27
+ import { createRoute, type RouteResponse } from 'bun-crumb';
28
28
 
29
29
  type Product = { title: string; price: number; id: number };
30
30
 
@@ -50,7 +50,7 @@ createRoute({
50
50
  Middleware / Pre-handlers
51
51
 
52
52
  ```typescript
53
- import { createRoute, type RouteResponse } from 'crumb-bun';
53
+ import { createRoute, type RouteResponse } from 'bun-crumb';
54
54
 
55
55
  type Product = { title: string; price: number; id: number };
56
56
 
@@ -80,7 +80,7 @@ createRoute({
80
80
  Setting Headers and Status
81
81
 
82
82
  ```typescript
83
- import { createRoute } from 'crumb-bun';
83
+ import { createRoute } from 'bun-crumb';
84
84
 
85
85
  createRoute({
86
86
  url: '/auth',
package/dist/index.d.ts CHANGED
@@ -89,7 +89,7 @@ interface RouteResponse<T extends {
89
89
  send: (data: T['body'], options?: ResponseOptions) => void;
90
90
  }
91
91
  type Route = Partial<Record<HttpMethod, RouteOptions>>;
92
- type RouteHandler = (request: RouteRequest, response: RouteResponse) => void;
92
+ type RouteHandler = (request: RouteRequest, response: RouteResponse) => Promise<void> | void;
93
93
  type RouteOptions = {
94
94
  url: string;
95
95
  method: HttpMethod;
package/dist/index.js CHANGED
@@ -1 +1 @@
1
- import{serve as t}from"bun";class e extends Error{status;constructor(t,e){super(e),this.status=t,this.name="HttpError"}}const n=new Map,s=(t,n,s,r)=>{const o={"application/json":t=>t.json().catch(t=>{throw new e(400,t)}).then(t=>{if(s&&r&&!r(t,s))throw new e(400,"Request does not match schema");return t}),"text/plain":t=>t.text().catch(t=>{throw new e(400,t)}).then(t=>{if(s&&r&&!r(t,s))throw new e(400,"Request does not match schema");return t})};return n in o?o[n](t):Promise.reject(new e(415,"Unsupported media type"))},r=(t,n)=>r=>{const o=r.headers.get("Content-Type")??"text/plain";return s(r,o,t.schema,n).then(e=>{const n=r;return n.parsedBody=e,((t,e)=>{let n,s,r=null;const o={},a={setHeader:(t,e)=>{o[t]=e},send:(t,e)=>{"object"==typeof t?o["Content-Type"]="application/json":"string"==typeof t&&(o["Content-Type"]="text/plain"),r=t,n=e?.status,s=e?.statusText}};return e.onRequest?.(t,a),e.preHandler?.(t,a),e.handler(t,a),new Response(null==r?null:JSON.stringify(r),{headers:o,status:n,statusText:s})})(n,t)}).catch(t=>t instanceof e?new Response(t.message,{status:t.status}):new Response("Internal server error",{status:500}))},o=(t,e)=>{const n={};for(const s in t)Object.hasOwn(t,s)&&(n[s]=r(t[s],e));return n},a=(t,e)=>{const n={};for(const s of t)n[s[0]]=o(s[1],e);return t.clear(),n},c=e=>{t({port:e.port,hostname:e.hostname,development:e.development??!1,routes:a(n,e?.schemaValidator)})},u=t=>{const e=n.get(t.url);e?e[t.method]=t:n.set(t.url,{[t.method]:t})};export{n as _routes,u as createRoute,s as handleBody,c as listen,o as prepareRoute,a as prepareRoutes,r as wrapRouteCallback};
1
+ import{serve as t}from"bun";class e extends Error{status;constructor(t,e){super(e),this.status=t,this.name="HttpError"}}const n=new Map,s=(t,n,s,o)=>{const r={"application/json":t=>t.json().catch(t=>{throw new e(400,t)}).then(t=>{if(s&&o&&!o(t,s))throw new e(400,"Request does not match schema");return t}),"text/plain":t=>t.text().catch(t=>{throw new e(400,t)}).then(t=>{if(s&&o&&!o(t,s))throw new e(400,"Request does not match schema");return t})};return n in r?r[n](t):Promise.reject(new e(415,"Unsupported media type"))},o=(t,n)=>o=>{const r=o.headers.get("Content-Type")??"text/plain",a=o;return a.handleBody=()=>s(o,r,t.schema,n).then(t=>t),Promise.resolve(((t,e)=>{let n,s,o=null;const r={},a={setHeader:(t,e)=>{r[t]=e},send:(t,e)=>{"object"==typeof t?r["Content-Type"]="application/json":"string"==typeof t&&(r["Content-Type"]="text/plain"),o=t,n=e?.status,s=e?.statusText}};return Promise.all([e.onRequest?.(t,a),e.preHandler?.(t,a),e.handler(t,a)]).then(()=>new Response(null==o?null:JSON.stringify(o),{headers:r,status:n,statusText:s}))})(a,t)).then(t=>t).catch(t=>t instanceof e?new Response(t.message,{status:t.status}):new Response("Internal server error",{status:500}))},r=(t,e)=>{const n={};for(const s in t)Object.hasOwn(t,s)&&(n[s]=o(t[s],e));return n},a=(t,e)=>{const n={};for(const s of t)n[s[0]]=r(s[1],e);return t.clear(),n},c=e=>{t({port:e.port,hostname:e.hostname,development:e.development??!1,routes:a(n,e?.schemaValidator)})},h=t=>{const e=n.get(t.url);e?e[t.method]=t:n.set(t.url,{[t.method]:t})};export{n as _routes,h as createRoute,s as handleBody,c as listen,r as prepareRoute,a as prepareRoutes,o as wrapRouteCallback};
@@ -49,7 +49,7 @@ export interface RouteResponse<T extends {
49
49
  send: (data: T['body'], options?: ResponseOptions) => void;
50
50
  }
51
51
  export type Route = Partial<Record<HttpMethod, RouteOptions>>;
52
- export type RouteHandler = (request: RouteRequest, response: RouteResponse) => void;
52
+ export type RouteHandler = (request: RouteRequest, response: RouteResponse) => Promise<void> | void;
53
53
  export type RouteOptions = {
54
54
  url: string;
55
55
  method: HttpMethod;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "bun-crumb",
3
- "version": "0.2.0",
3
+ "version": "0.3.0",
4
4
  "author": "marigold",
5
5
  "module": "dist/index.js",
6
6
  "license": "UNLICENSED",