@niledatabase/express 5.0.0-alpha.5 → 5.0.0-alpha.6

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/CHANGELOG.md CHANGED
@@ -3,6 +3,12 @@
3
3
  All notable changes to this project will be documented in this file.
4
4
  See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
5
5
 
6
+ # [5.0.0-alpha.6](https://github.com/niledatabase/nile-js/compare/v5.0.0-alpha.5...v5.0.0-alpha.6) (2025-06-11)
7
+
8
+ ### Bug Fixes
9
+
10
+ - **server:** move logging to the config object ([6e3e380](https://github.com/niledatabase/nile-js/commit/6e3e38014f5b9795552af0a7b97e2d3fe6cd1a88))
11
+
6
12
  # [5.0.0-alpha.5](https://github.com/niledatabase/nile-js/compare/v5.0.0-alpha.4...v5.0.0-alpha.5) (2025-06-10)
7
13
 
8
14
  **Note:** Version bump only for package @niledatabase/express
package/dist/index.js CHANGED
@@ -1,2 +1,2 @@
1
- "use strict";var R=Object.defineProperty;var x=Object.getOwnPropertyDescriptor;var P=Object.getOwnPropertyNames;var E=Object.prototype.hasOwnProperty;var T=(n,e)=>{for(var r in e)R(n,r,{get:e[r],enumerable:!0})},S=(n,e,r,p)=>{if(e&&typeof e=="object"||typeof e=="function")for(let i of P(e))!E.call(n,i)&&i!==r&&R(n,i,{get:()=>e[i],enumerable:!(p=x(e,i))||p.enumerable});return n};var U=n=>S(R({},"__esModule",{value:!0}),n);var C={};T(C,{NileExpressHandler:()=>j,cleaner:()=>d,expressPaths:()=>b});module.exports=U(C);function d(n){return n.replaceAll(/\{([^}]+)\}/g,":$1")}function b(n){let e=n.getPaths();return{paths:{get:e.get.map(d),post:e.post.map(d),put:e.put.map(d),delete:e.delete.map(d)}}}async function j(n,e){let r=e?.logger?.error??console.error;async function p(t,u){let h=new Headers;if(!t||typeof t!="object")return null;if(!("url"in t)||typeof t?.url!="string")return r("A url is necessary for the nile express handler"),null;let f="method"in t&&typeof t.method=="string"?t.method:"GET";"headers"in t&&typeof t.headers=="object"&&t.headers&&"cookie"in t.headers&&typeof t.headers.cookie=="string"&&h.set("cookie",t.headers.cookie);let g={method:f,...e?.init};"body"in t&&(f==="POST"||f==="PUT")&&(h.set("content-type","application/json"),g.body=JSON.stringify(t.body)),g.headers=h;let y=t.protocol+"://"+t.get("host")+t.originalUrl;try{new URL(y)}catch(s){return r("Invalid URL",{url:y,error:s}),null}let w=new Request(y,g),o;try{o=await n.handlers[f](w)}catch(s){r(s)}let a;if(o instanceof Response){try{a=await(await o.clone()).json()}catch{a=await o.text()}let s={};if(o.headers.forEach((c,l)=>{if(!["content-length","transfer-encoding"].includes(l.toLowerCase()))if(s[l]){let m=s[l];Array.isArray(m)?s[l]=[...m,c]:s[l]=[m,c]}else s[l]=c}),e?.muteResponse!==!0){u&&(u.status(o.status).set(s),typeof a=="string"?u.send(a):u.json(a??{}));return}return{body:a,status:o.status,headers:s,response:o}}else{r("Bad response",{response:o});return}}let{paths:i}=b(n);return{handler:p,paths:i}}0&&(module.exports={NileExpressHandler,cleaner,expressPaths});
1
+ "use strict";var R=Object.defineProperty;var x=Object.getOwnPropertyDescriptor;var P=Object.getOwnPropertyNames;var E=Object.prototype.hasOwnProperty;var T=(n,e)=>{for(var r in e)R(n,r,{get:e[r],enumerable:!0})},S=(n,e,r,d)=>{if(e&&typeof e=="object"||typeof e=="function")for(let i of P(e))!E.call(n,i)&&i!==r&&R(n,i,{get:()=>e[i],enumerable:!(d=x(e,i))||d.enumerable});return n};var U=n=>S(R({},"__esModule",{value:!0}),n);var C={};T(C,{NileExpressHandler:()=>j,cleaner:()=>p,expressPaths:()=>b});module.exports=U(C);function p(n){return n.replaceAll(/\{([^}]+)\}/g,":$1")}function b(n){let e=n.getPaths();return{paths:{get:e.get.map(p),post:e.post.map(p),put:e.put.map(p),delete:e.delete.map(p)}}}async function j(n,e){let r=e?.logger?e?.logger("express").error:()=>null;async function d(t,u){let f=new Headers;if(!t||typeof t!="object")return null;if(!("url"in t)||typeof t?.url!="string")return r("A url is necessary for the nile express handler"),null;let h="method"in t&&typeof t.method=="string"?t.method:"GET";"headers"in t&&typeof t.headers=="object"&&t.headers&&"cookie"in t.headers&&typeof t.headers.cookie=="string"&&f.set("cookie",t.headers.cookie);let g={method:h,...e?.init};"body"in t&&(h==="POST"||h==="PUT")&&(f.set("content-type","application/json"),g.body=JSON.stringify(t.body)),g.headers=f;let y=t.protocol+"://"+t.get("host")+t.originalUrl;try{new URL(y)}catch(s){return r("Invalid URL",{url:y,error:s}),null}let w=new Request(y,g),o;try{o=await n.handlers[h](w)}catch(s){r(s)}let a;if(o instanceof Response){try{a=await(await o.clone()).json()}catch{a=await o.text()}let s={};if(o.headers.forEach((c,l)=>{if(!["content-length","transfer-encoding"].includes(l.toLowerCase()))if(s[l]){let m=s[l];Array.isArray(m)?s[l]=[...m,c]:s[l]=[m,c]}else s[l]=c}),e?.muteResponse!==!0){u&&(u.status(o.status).set(s),typeof a=="string"?u.send(a):u.json(a??{}));return}return{body:a,status:o.status,headers:s,response:o}}else{r("Bad response",{response:o});return}}let{paths:i}=b(n);return{handler:d,paths:i}}0&&(module.exports={NileExpressHandler,cleaner,expressPaths});
2
2
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/index.ts"],"sourcesContent":["import { NileConfig, Server } from '@niledatabase/server';\n\nexport function cleaner(val: string) {\n return val.replaceAll(/\\{([^}]+)\\}/g, ':$1');\n}\n\nexport function expressPaths(nile: Server) {\n const nilePaths = nile.getPaths();\n const paths = {\n get: nilePaths.get.map(cleaner),\n post: nilePaths.post.map(cleaner),\n put: nilePaths.put.map(cleaner),\n delete: nilePaths.delete.map(cleaner),\n };\n return {\n paths,\n };\n}\n\ntype HandlerConfig = { muteResponse?: boolean; init?: RequestInit };\nexport async function NileExpressHandler(\n nile: Server,\n config?: HandlerConfig & NileConfig\n) {\n // eslint-disable-next-line no-console\n const error = config?.logger?.error ?? console.error;\n async function handler(\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n req: any,\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n res?: any\n ): Promise<\n | {\n body: string;\n status: number;\n headers: Record<string, string | string[]>;\n response: Response;\n }\n | null\n | undefined\n > {\n const headers = new Headers();\n if (!req || typeof req !== 'object') {\n return null;\n }\n if (!('url' in req) || typeof req?.url !== 'string') {\n error('A url is necessary for the nile express handler');\n return null;\n }\n const method =\n 'method' in req && typeof req.method === 'string' ? req.method : 'GET';\n\n if (\n 'headers' in req &&\n typeof req.headers === 'object' &&\n req.headers &&\n 'cookie' in req.headers &&\n typeof req.headers.cookie === 'string'\n ) {\n headers.set('cookie', req.headers.cookie);\n }\n const _init: RequestInit = { method, ...config?.init };\n\n if ('body' in req) {\n if (method === 'POST' || method === 'PUT') {\n headers.set('content-type', 'application/json');\n _init.body = JSON.stringify(req.body);\n }\n }\n\n _init.headers = headers;\n\n const reqUrl = req.protocol + '://' + req.get('host') + req.originalUrl;\n\n // be sure its a valid url\n try {\n new URL(reqUrl);\n } catch (e) {\n error('Invalid URL', {\n url: reqUrl,\n error: e,\n });\n return null;\n }\n const proxyRequest = new Request(reqUrl, _init);\n let response;\n try {\n response = await nile.handlers[\n method as 'GET' | 'POST' | 'PUT' | 'DELETE'\n ](proxyRequest);\n } catch (e) {\n error(e);\n }\n\n let body;\n\n if (response instanceof Response) {\n try {\n const tryJson = await response.clone();\n body = await tryJson.json();\n } catch (e) {\n body = await response.text();\n }\n const newHeaders: Record<string, string | string[]> = {};\n response.headers.forEach((value, key) => {\n if (\n !['content-length', 'transfer-encoding'].includes(key.toLowerCase())\n ) {\n if (newHeaders[key]) {\n const prev = newHeaders[key];\n if (Array.isArray(prev)) {\n newHeaders[key] = [...prev, value];\n } else {\n newHeaders[key] = [prev, value];\n }\n } else {\n newHeaders[key] = value;\n }\n }\n });\n\n if (config?.muteResponse !== true) {\n if (res) {\n res.status(response.status).set(newHeaders);\n if (typeof body === 'string') {\n res.send(body);\n } else {\n res.json(body ?? {});\n }\n }\n return;\n }\n\n return {\n body,\n status: response.status,\n headers: newHeaders,\n response,\n };\n } else {\n error('Bad response', { response });\n return;\n }\n }\n const { paths } = expressPaths(nile);\n return { handler, paths };\n}\n"],"mappings":"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","names":["index_exports","__export","NileExpressHandler","cleaner","expressPaths","__toCommonJS","val","nile","nilePaths","config","error","handler","req","res","headers","method","_init","reqUrl","e","proxyRequest","response","body","newHeaders","value","key","prev","paths"]}
1
+ {"version":3,"sources":["../src/index.ts"],"sourcesContent":["import { NileConfig, Server } from '@niledatabase/server';\n\nexport function cleaner(val: string) {\n return val.replaceAll(/\\{([^}]+)\\}/g, ':$1');\n}\n\nexport function expressPaths(nile: Server) {\n const nilePaths = nile.getPaths();\n const paths = {\n get: nilePaths.get.map(cleaner),\n post: nilePaths.post.map(cleaner),\n put: nilePaths.put.map(cleaner),\n delete: nilePaths.delete.map(cleaner),\n };\n return {\n paths,\n };\n}\n\ntype HandlerConfig = { muteResponse?: boolean; init?: RequestInit };\nexport async function NileExpressHandler(\n nile: Server,\n config?: HandlerConfig & NileConfig\n) {\n const error = config?.logger ? config?.logger('express').error : () => null;\n async function handler(\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n req: any,\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n res?: any\n ): Promise<\n | {\n body: string;\n status: number;\n headers: Record<string, string | string[]>;\n response: Response;\n }\n | null\n | undefined\n > {\n const headers = new Headers();\n if (!req || typeof req !== 'object') {\n return null;\n }\n if (!('url' in req) || typeof req?.url !== 'string') {\n error('A url is necessary for the nile express handler');\n return null;\n }\n const method =\n 'method' in req && typeof req.method === 'string' ? req.method : 'GET';\n\n if (\n 'headers' in req &&\n typeof req.headers === 'object' &&\n req.headers &&\n 'cookie' in req.headers &&\n typeof req.headers.cookie === 'string'\n ) {\n headers.set('cookie', req.headers.cookie);\n }\n const _init: RequestInit = { method, ...config?.init };\n\n if ('body' in req) {\n if (method === 'POST' || method === 'PUT') {\n headers.set('content-type', 'application/json');\n _init.body = JSON.stringify(req.body);\n }\n }\n\n _init.headers = headers;\n\n const reqUrl = req.protocol + '://' + req.get('host') + req.originalUrl;\n\n // be sure its a valid url\n try {\n new URL(reqUrl);\n } catch (e) {\n error('Invalid URL', {\n url: reqUrl,\n error: e,\n });\n return null;\n }\n const proxyRequest = new Request(reqUrl, _init);\n let response;\n try {\n response = await nile.handlers[\n method as 'GET' | 'POST' | 'PUT' | 'DELETE'\n ](proxyRequest);\n } catch (e) {\n error(e);\n }\n\n let body;\n\n if (response instanceof Response) {\n try {\n const tryJson = await response.clone();\n body = await tryJson.json();\n } catch (e) {\n body = await response.text();\n }\n const newHeaders: Record<string, string | string[]> = {};\n response.headers.forEach((value, key) => {\n if (\n !['content-length', 'transfer-encoding'].includes(key.toLowerCase())\n ) {\n if (newHeaders[key]) {\n const prev = newHeaders[key];\n if (Array.isArray(prev)) {\n newHeaders[key] = [...prev, value];\n } else {\n newHeaders[key] = [prev, value];\n }\n } else {\n newHeaders[key] = value;\n }\n }\n });\n\n if (config?.muteResponse !== true) {\n if (res) {\n res.status(response.status).set(newHeaders);\n if (typeof body === 'string') {\n res.send(body);\n } else {\n res.json(body ?? {});\n }\n }\n return;\n }\n\n return {\n body,\n status: response.status,\n headers: newHeaders,\n response,\n };\n } else {\n error('Bad response', { response });\n return;\n }\n }\n const { paths } = expressPaths(nile);\n return { handler, paths };\n}\n"],"mappings":"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","names":["index_exports","__export","NileExpressHandler","cleaner","expressPaths","__toCommonJS","val","nile","nilePaths","config","error","handler","req","res","headers","method","_init","reqUrl","e","proxyRequest","response","body","newHeaders","value","key","prev","paths"]}
package/dist/index.mjs CHANGED
@@ -1,2 +1,2 @@
1
- function p(r){return r.replaceAll(/\{([^}]+)\}/g,":$1")}function b(r){let s=r.getPaths();return{paths:{get:s.get.map(p),post:s.post.map(p),put:s.put.map(p),delete:s.delete.map(p)}}}async function w(r,s){let a=s?.logger?.error??console.error;async function y(e,c){let u=new Headers;if(!e||typeof e!="object")return null;if(!("url"in e)||typeof e?.url!="string")return a("A url is necessary for the nile express handler"),null;let d="method"in e&&typeof e.method=="string"?e.method:"GET";"headers"in e&&typeof e.headers=="object"&&e.headers&&"cookie"in e.headers&&typeof e.headers.cookie=="string"&&u.set("cookie",e.headers.cookie);let f={method:d,...s?.init};"body"in e&&(d==="POST"||d==="PUT")&&(u.set("content-type","application/json"),f.body=JSON.stringify(e.body)),f.headers=u;let h=e.protocol+"://"+e.get("host")+e.originalUrl;try{new URL(h)}catch(t){return a("Invalid URL",{url:h,error:t}),null}let R=new Request(h,f),n;try{n=await r.handlers[d](R)}catch(t){a(t)}let o;if(n instanceof Response){try{o=await(await n.clone()).json()}catch{o=await n.text()}let t={};if(n.headers.forEach((l,i)=>{if(!["content-length","transfer-encoding"].includes(i.toLowerCase()))if(t[i]){let g=t[i];Array.isArray(g)?t[i]=[...g,l]:t[i]=[g,l]}else t[i]=l}),s?.muteResponse!==!0){c&&(c.status(n.status).set(t),typeof o=="string"?c.send(o):c.json(o??{}));return}return{body:o,status:n.status,headers:t,response:n}}else{a("Bad response",{response:n});return}}let{paths:m}=b(r);return{handler:y,paths:m}}export{w as NileExpressHandler,p as cleaner,b as expressPaths};
1
+ function d(r){return r.replaceAll(/\{([^}]+)\}/g,":$1")}function b(r){let n=r.getPaths();return{paths:{get:n.get.map(d),post:n.post.map(d),put:n.put.map(d),delete:n.delete.map(d)}}}async function w(r,n){let a=n?.logger?n?.logger("express").error:()=>null;async function y(e,c){let u=new Headers;if(!e||typeof e!="object")return null;if(!("url"in e)||typeof e?.url!="string")return a("A url is necessary for the nile express handler"),null;let p="method"in e&&typeof e.method=="string"?e.method:"GET";"headers"in e&&typeof e.headers=="object"&&e.headers&&"cookie"in e.headers&&typeof e.headers.cookie=="string"&&u.set("cookie",e.headers.cookie);let h={method:p,...n?.init};"body"in e&&(p==="POST"||p==="PUT")&&(u.set("content-type","application/json"),h.body=JSON.stringify(e.body)),h.headers=u;let f=e.protocol+"://"+e.get("host")+e.originalUrl;try{new URL(f)}catch(t){return a("Invalid URL",{url:f,error:t}),null}let R=new Request(f,h),s;try{s=await r.handlers[p](R)}catch(t){a(t)}let o;if(s instanceof Response){try{o=await(await s.clone()).json()}catch{o=await s.text()}let t={};if(s.headers.forEach((l,i)=>{if(!["content-length","transfer-encoding"].includes(i.toLowerCase()))if(t[i]){let g=t[i];Array.isArray(g)?t[i]=[...g,l]:t[i]=[g,l]}else t[i]=l}),n?.muteResponse!==!0){c&&(c.status(s.status).set(t),typeof o=="string"?c.send(o):c.json(o??{}));return}return{body:o,status:s.status,headers:t,response:s}}else{a("Bad response",{response:s});return}}let{paths:m}=b(r);return{handler:y,paths:m}}export{w as NileExpressHandler,d as cleaner,b as expressPaths};
2
2
  //# sourceMappingURL=index.mjs.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/index.ts"],"sourcesContent":["import { NileConfig, Server } from '@niledatabase/server';\n\nexport function cleaner(val: string) {\n return val.replaceAll(/\\{([^}]+)\\}/g, ':$1');\n}\n\nexport function expressPaths(nile: Server) {\n const nilePaths = nile.getPaths();\n const paths = {\n get: nilePaths.get.map(cleaner),\n post: nilePaths.post.map(cleaner),\n put: nilePaths.put.map(cleaner),\n delete: nilePaths.delete.map(cleaner),\n };\n return {\n paths,\n };\n}\n\ntype HandlerConfig = { muteResponse?: boolean; init?: RequestInit };\nexport async function NileExpressHandler(\n nile: Server,\n config?: HandlerConfig & NileConfig\n) {\n // eslint-disable-next-line no-console\n const error = config?.logger?.error ?? console.error;\n async function handler(\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n req: any,\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n res?: any\n ): Promise<\n | {\n body: string;\n status: number;\n headers: Record<string, string | string[]>;\n response: Response;\n }\n | null\n | undefined\n > {\n const headers = new Headers();\n if (!req || typeof req !== 'object') {\n return null;\n }\n if (!('url' in req) || typeof req?.url !== 'string') {\n error('A url is necessary for the nile express handler');\n return null;\n }\n const method =\n 'method' in req && typeof req.method === 'string' ? req.method : 'GET';\n\n if (\n 'headers' in req &&\n typeof req.headers === 'object' &&\n req.headers &&\n 'cookie' in req.headers &&\n typeof req.headers.cookie === 'string'\n ) {\n headers.set('cookie', req.headers.cookie);\n }\n const _init: RequestInit = { method, ...config?.init };\n\n if ('body' in req) {\n if (method === 'POST' || method === 'PUT') {\n headers.set('content-type', 'application/json');\n _init.body = JSON.stringify(req.body);\n }\n }\n\n _init.headers = headers;\n\n const reqUrl = req.protocol + '://' + req.get('host') + req.originalUrl;\n\n // be sure its a valid url\n try {\n new URL(reqUrl);\n } catch (e) {\n error('Invalid URL', {\n url: reqUrl,\n error: e,\n });\n return null;\n }\n const proxyRequest = new Request(reqUrl, _init);\n let response;\n try {\n response = await nile.handlers[\n method as 'GET' | 'POST' | 'PUT' | 'DELETE'\n ](proxyRequest);\n } catch (e) {\n error(e);\n }\n\n let body;\n\n if (response instanceof Response) {\n try {\n const tryJson = await response.clone();\n body = await tryJson.json();\n } catch (e) {\n body = await response.text();\n }\n const newHeaders: Record<string, string | string[]> = {};\n response.headers.forEach((value, key) => {\n if (\n !['content-length', 'transfer-encoding'].includes(key.toLowerCase())\n ) {\n if (newHeaders[key]) {\n const prev = newHeaders[key];\n if (Array.isArray(prev)) {\n newHeaders[key] = [...prev, value];\n } else {\n newHeaders[key] = [prev, value];\n }\n } else {\n newHeaders[key] = value;\n }\n }\n });\n\n if (config?.muteResponse !== true) {\n if (res) {\n res.status(response.status).set(newHeaders);\n if (typeof body === 'string') {\n res.send(body);\n } else {\n res.json(body ?? {});\n }\n }\n return;\n }\n\n return {\n body,\n status: response.status,\n headers: newHeaders,\n response,\n };\n } else {\n error('Bad response', { response });\n return;\n }\n }\n const { paths } = expressPaths(nile);\n return { handler, paths };\n}\n"],"mappings":"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","names":["cleaner","val","expressPaths","nile","nilePaths","NileExpressHandler","config","error","handler","req","res","headers","method","_init","reqUrl","e","proxyRequest","response","body","newHeaders","value","key","prev","paths"]}
1
+ {"version":3,"sources":["../src/index.ts"],"sourcesContent":["import { NileConfig, Server } from '@niledatabase/server';\n\nexport function cleaner(val: string) {\n return val.replaceAll(/\\{([^}]+)\\}/g, ':$1');\n}\n\nexport function expressPaths(nile: Server) {\n const nilePaths = nile.getPaths();\n const paths = {\n get: nilePaths.get.map(cleaner),\n post: nilePaths.post.map(cleaner),\n put: nilePaths.put.map(cleaner),\n delete: nilePaths.delete.map(cleaner),\n };\n return {\n paths,\n };\n}\n\ntype HandlerConfig = { muteResponse?: boolean; init?: RequestInit };\nexport async function NileExpressHandler(\n nile: Server,\n config?: HandlerConfig & NileConfig\n) {\n const error = config?.logger ? config?.logger('express').error : () => null;\n async function handler(\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n req: any,\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n res?: any\n ): Promise<\n | {\n body: string;\n status: number;\n headers: Record<string, string | string[]>;\n response: Response;\n }\n | null\n | undefined\n > {\n const headers = new Headers();\n if (!req || typeof req !== 'object') {\n return null;\n }\n if (!('url' in req) || typeof req?.url !== 'string') {\n error('A url is necessary for the nile express handler');\n return null;\n }\n const method =\n 'method' in req && typeof req.method === 'string' ? req.method : 'GET';\n\n if (\n 'headers' in req &&\n typeof req.headers === 'object' &&\n req.headers &&\n 'cookie' in req.headers &&\n typeof req.headers.cookie === 'string'\n ) {\n headers.set('cookie', req.headers.cookie);\n }\n const _init: RequestInit = { method, ...config?.init };\n\n if ('body' in req) {\n if (method === 'POST' || method === 'PUT') {\n headers.set('content-type', 'application/json');\n _init.body = JSON.stringify(req.body);\n }\n }\n\n _init.headers = headers;\n\n const reqUrl = req.protocol + '://' + req.get('host') + req.originalUrl;\n\n // be sure its a valid url\n try {\n new URL(reqUrl);\n } catch (e) {\n error('Invalid URL', {\n url: reqUrl,\n error: e,\n });\n return null;\n }\n const proxyRequest = new Request(reqUrl, _init);\n let response;\n try {\n response = await nile.handlers[\n method as 'GET' | 'POST' | 'PUT' | 'DELETE'\n ](proxyRequest);\n } catch (e) {\n error(e);\n }\n\n let body;\n\n if (response instanceof Response) {\n try {\n const tryJson = await response.clone();\n body = await tryJson.json();\n } catch (e) {\n body = await response.text();\n }\n const newHeaders: Record<string, string | string[]> = {};\n response.headers.forEach((value, key) => {\n if (\n !['content-length', 'transfer-encoding'].includes(key.toLowerCase())\n ) {\n if (newHeaders[key]) {\n const prev = newHeaders[key];\n if (Array.isArray(prev)) {\n newHeaders[key] = [...prev, value];\n } else {\n newHeaders[key] = [prev, value];\n }\n } else {\n newHeaders[key] = value;\n }\n }\n });\n\n if (config?.muteResponse !== true) {\n if (res) {\n res.status(response.status).set(newHeaders);\n if (typeof body === 'string') {\n res.send(body);\n } else {\n res.json(body ?? {});\n }\n }\n return;\n }\n\n return {\n body,\n status: response.status,\n headers: newHeaders,\n response,\n };\n } else {\n error('Bad response', { response });\n return;\n }\n }\n const { paths } = expressPaths(nile);\n return { handler, paths };\n}\n"],"mappings":"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","names":["cleaner","val","expressPaths","nile","nilePaths","NileExpressHandler","config","error","handler","req","res","headers","method","_init","reqUrl","e","proxyRequest","response","body","newHeaders","value","key","prev","paths"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@niledatabase/express",
3
- "version": "5.0.0-alpha.5",
3
+ "version": "5.0.0-alpha.6",
4
4
  "license": "MIT",
5
5
  "main": "./dist/index.js",
6
6
  "module": "./dist/index.mjs",
@@ -38,5 +38,5 @@
38
38
  "ts-jest": "^29.3.4",
39
39
  "tsup": "^8.5.0"
40
40
  },
41
- "gitHead": "4538e8af0bdf4dabd7c8b8507714214ec4dfc8fb"
41
+ "gitHead": "33b4751621db9c1f92fd559e8b6def081f0c3cd4"
42
42
  }
package/src/index.ts CHANGED
@@ -22,8 +22,7 @@ export async function NileExpressHandler(
22
22
  nile: Server,
23
23
  config?: HandlerConfig & NileConfig
24
24
  ) {
25
- // eslint-disable-next-line no-console
26
- const error = config?.logger?.error ?? console.error;
25
+ const error = config?.logger ? config?.logger('express').error : () => null;
27
26
  async function handler(
28
27
  // eslint-disable-next-line @typescript-eslint/no-explicit-any
29
28
  req: any,