lambda-reactor 1.0.1 → 1.0.2

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/dist/dispatch.js CHANGED
@@ -16,8 +16,7 @@ async function dispatch(route, event, context) {
16
16
  if (route.bodySchema) {
17
17
  const parsed = route.bodySchema.safeParse(body);
18
18
  if (!parsed.success) {
19
- return Response.text(400, z.treeifyError(parsed.error).errors.join(`
20
- `)).toAPIGatewayProxyResult();
19
+ return Response.text(400, z.prettifyError(parsed.error)).toAPIGatewayProxyResult();
21
20
  }
22
21
  body = parsed.data;
23
22
  }
@@ -33,8 +32,7 @@ async function dispatch(route, event, context) {
33
32
  const parsed = route.outputSchema.safeParse(result.body);
34
33
  if (!parsed.success) {
35
34
  logError(parsed.error);
36
- return Response.text(500, z.treeifyError(parsed.error).errors.join(`
37
- `)).toAPIGatewayProxyResult();
35
+ return Response.text(500, z.prettifyError(parsed.error)).toAPIGatewayProxyResult();
38
36
  }
39
37
  result.body = parsed.data;
40
38
  }
@@ -44,8 +42,7 @@ async function dispatch(route, event, context) {
44
42
  const parsed = route.outputSchema.safeParse(result);
45
43
  if (!parsed.success) {
46
44
  logError(parsed.error);
47
- return Response.text(500, z.treeifyError(parsed.error).errors.join(`
48
- `)).toAPIGatewayProxyResult();
45
+ return Response.text(500, z.prettifyError(parsed.error)).toAPIGatewayProxyResult();
49
46
  }
50
47
  return applyMiddlewares(Response.json(200, parsed.data).toAPIGatewayProxyResult(), route);
51
48
  }
@@ -55,4 +52,4 @@ export {
55
52
  dispatch
56
53
  };
57
54
 
58
- //# debugId=618322748EAF9B8C64756E2164756E21
55
+ //# debugId=78A10223DAEDFFB964756E2164756E21
@@ -2,9 +2,9 @@
2
2
  "version": 3,
3
3
  "sources": ["../src/dispatch.ts"],
4
4
  "sourcesContent": [
5
- "import {logError} from \"#src/logger\"\nimport {RouteHandler} from \"#src/method\"\nimport {Response} from \"#src/response\"\nimport type {APIGatewayProxyEvent, Context} from \"aws-lambda\"\nimport {z} from \"zod\"\n\nimport {applyMiddlewares} from \"./middleware\"\n\n/**\n * Executes a single {@link RouteHandler} for an incoming Lambda proxy event.\n *\n * Processing order:\n * 1. Parse `event.body` as JSON when possible.\n * 2. Validate the body against `route.bodySchema` (Zod); return `400` on\n * failure.\n * 3. Invoke `route.callback` with the validated body, event, and context.\n * 4. If the callback returns a {@link Response}, optionally validate its body\n * against `route.outputSchema`; return `500` on failure.\n * 5. If the callback returns a plain value, wrap it in a `200 JSON` response,\n * optionally validating against `route.outputSchema`.\n * 6. Apply all middlewares left-to-right before returning.\n *\n * @param route - The route handler to execute.\n * @param event - Raw API Gateway proxy event.\n * @param context - Lambda execution context.\n */\nexport async function dispatch(\n route: RouteHandler,\n event: APIGatewayProxyEvent,\n context: Context,\n) {\n let body\n try {\n body = event.body ? JSON.parse(event.body) : undefined\n } catch (error) {\n if (error instanceof Error) {\n return Response.text(400, error.message).toAPIGatewayProxyResult()\n }\n throw error\n }\n if (route.bodySchema) {\n const parsed = route.bodySchema.safeParse(body)\n if (!parsed.success) {\n return Response.text(\n 400,\n z.treeifyError(parsed.error).errors.join(\"\\n\"),\n ).toAPIGatewayProxyResult()\n }\n body = parsed.data\n }\n if (!route.callback) {\n const err = new Error(\"Route has no handler defined\")\n logError(err)\n return Response.text(500, err.message).toAPIGatewayProxyResult()\n }\n const cb = route.callback as (props: {\n body: unknown\n event: APIGatewayProxyEvent\n context: Context\n }) => Promise<unknown>\n const result = await cb({body, event, context})\n if (result instanceof Response) {\n if (route.outputSchema) {\n const parsed = route.outputSchema.safeParse(result.body)\n if (!parsed.success) {\n logError(parsed.error)\n return Response.text(\n 500,\n z.treeifyError(parsed.error).errors.join(\"\\n\"),\n ).toAPIGatewayProxyResult()\n }\n result.body = parsed.data\n }\n return applyMiddlewares(result.toAPIGatewayProxyResult(), route)\n }\n if (route.outputSchema) {\n const parsed = route.outputSchema.safeParse(result)\n if (!parsed.success) {\n logError(parsed.error)\n return Response.text(\n 500,\n z.treeifyError(parsed.error).errors.join(\"\\n\"),\n ).toAPIGatewayProxyResult()\n }\n return applyMiddlewares(\n Response.json(200, parsed.data).toAPIGatewayProxyResult(),\n route,\n )\n }\n return applyMiddlewares(Response.json(200, result).toAPIGatewayProxyResult(), route)\n}\n"
5
+ "import {logError} from \"#src/logger\"\nimport {RouteHandler} from \"#src/method\"\nimport {Response} from \"#src/response\"\nimport type {APIGatewayProxyEvent, Context} from \"aws-lambda\"\nimport {z} from \"zod\"\n\nimport {applyMiddlewares} from \"./middleware\"\n\n/**\n * Executes a single {@link RouteHandler} for an incoming Lambda proxy event.\n *\n * Processing order:\n * 1. Parse `event.body` as JSON when possible.\n * 2. Validate the body against `route.bodySchema` (Zod); return `400` on\n * failure.\n * 3. Invoke `route.callback` with the validated body, event, and context.\n * 4. If the callback returns a {@link Response}, optionally validate its body\n * against `route.outputSchema`; return `500` on failure.\n * 5. If the callback returns a plain value, wrap it in a `200 JSON` response,\n * optionally validating against `route.outputSchema`.\n * 6. Apply all middlewares left-to-right before returning.\n *\n * @param route - The route handler to execute.\n * @param event - Raw API Gateway proxy event.\n * @param context - Lambda execution context.\n */\nexport async function dispatch(\n route: RouteHandler,\n event: APIGatewayProxyEvent,\n context: Context,\n) {\n let body\n try {\n body = event.body ? JSON.parse(event.body) : undefined\n } catch (error) {\n if (error instanceof Error) {\n return Response.text(400, error.message).toAPIGatewayProxyResult()\n }\n throw error\n }\n if (route.bodySchema) {\n const parsed = route.bodySchema.safeParse(body)\n if (!parsed.success) {\n return Response.text(\n 400,\n z.prettifyError(parsed.error),\n ).toAPIGatewayProxyResult()\n }\n body = parsed.data\n }\n if (!route.callback) {\n const err = new Error(\"Route has no handler defined\")\n logError(err)\n return Response.text(500, err.message).toAPIGatewayProxyResult()\n }\n const cb = route.callback as (props: {\n body: unknown\n event: APIGatewayProxyEvent\n context: Context\n }) => Promise<unknown>\n const result = await cb({body, event, context})\n if (result instanceof Response) {\n if (route.outputSchema) {\n const parsed = route.outputSchema.safeParse(result.body)\n if (!parsed.success) {\n logError(parsed.error)\n return Response.text(\n 500,\n z.prettifyError(parsed.error),\n ).toAPIGatewayProxyResult()\n }\n result.body = parsed.data\n }\n return applyMiddlewares(result.toAPIGatewayProxyResult(), route)\n }\n if (route.outputSchema) {\n const parsed = route.outputSchema.safeParse(result)\n if (!parsed.success) {\n logError(parsed.error)\n return Response.text(\n 500,\n z.prettifyError(parsed.error),\n ).toAPIGatewayProxyResult()\n }\n return applyMiddlewares(\n Response.json(200, parsed.data).toAPIGatewayProxyResult(),\n route,\n )\n }\n return applyMiddlewares(Response.json(200, result).toAPIGatewayProxyResult(), route)\n}\n"
6
6
  ],
7
- "mappings": ";AAAA;AAEA;AAEA;AAEA;AAoBA,eAAsB,QAAQ,CAC1B,OACA,OACA,SACF;AAAA,EACE,IAAI;AAAA,EACJ,IAAI;AAAA,IACA,OAAO,MAAM,OAAO,KAAK,MAAM,MAAM,IAAI,IAAI;AAAA,IAC/C,OAAO,OAAO;AAAA,IACZ,IAAI,iBAAiB,OAAO;AAAA,MACxB,OAAO,SAAS,KAAK,KAAK,MAAM,OAAO,EAAE,wBAAwB;AAAA,IACrE;AAAA,IACA,MAAM;AAAA;AAAA,EAEV,IAAI,MAAM,YAAY;AAAA,IAClB,MAAM,SAAS,MAAM,WAAW,UAAU,IAAI;AAAA,IAC9C,IAAI,CAAC,OAAO,SAAS;AAAA,MACjB,OAAO,SAAS,KACZ,KACA,EAAE,aAAa,OAAO,KAAK,EAAE,OAAO,KAAK;AAAA,CAAI,CACjD,EAAE,wBAAwB;AAAA,IAC9B;AAAA,IACA,OAAO,OAAO;AAAA,EAClB;AAAA,EACA,IAAI,CAAC,MAAM,UAAU;AAAA,IACjB,MAAM,MAAM,IAAI,MAAM,8BAA8B;AAAA,IACpD,SAAS,GAAG;AAAA,IACZ,OAAO,SAAS,KAAK,KAAK,IAAI,OAAO,EAAE,wBAAwB;AAAA,EACnE;AAAA,EACA,MAAM,KAAK,MAAM;AAAA,EAKjB,MAAM,SAAS,MAAM,GAAG,EAAC,MAAM,OAAO,QAAO,CAAC;AAAA,EAC9C,IAAI,kBAAkB,UAAU;AAAA,IAC5B,IAAI,MAAM,cAAc;AAAA,MACpB,MAAM,SAAS,MAAM,aAAa,UAAU,OAAO,IAAI;AAAA,MACvD,IAAI,CAAC,OAAO,SAAS;AAAA,QACjB,SAAS,OAAO,KAAK;AAAA,QACrB,OAAO,SAAS,KACZ,KACA,EAAE,aAAa,OAAO,KAAK,EAAE,OAAO,KAAK;AAAA,CAAI,CACjD,EAAE,wBAAwB;AAAA,MAC9B;AAAA,MACA,OAAO,OAAO,OAAO;AAAA,IACzB;AAAA,IACA,OAAO,iBAAiB,OAAO,wBAAwB,GAAG,KAAK;AAAA,EACnE;AAAA,EACA,IAAI,MAAM,cAAc;AAAA,IACpB,MAAM,SAAS,MAAM,aAAa,UAAU,MAAM;AAAA,IAClD,IAAI,CAAC,OAAO,SAAS;AAAA,MACjB,SAAS,OAAO,KAAK;AAAA,MACrB,OAAO,SAAS,KACZ,KACA,EAAE,aAAa,OAAO,KAAK,EAAE,OAAO,KAAK;AAAA,CAAI,CACjD,EAAE,wBAAwB;AAAA,IAC9B;AAAA,IACA,OAAO,iBACH,SAAS,KAAK,KAAK,OAAO,IAAI,EAAE,wBAAwB,GACxD,KACJ;AAAA,EACJ;AAAA,EACA,OAAO,iBAAiB,SAAS,KAAK,KAAK,MAAM,EAAE,wBAAwB,GAAG,KAAK;AAAA;",
8
- "debugId": "618322748EAF9B8C64756E2164756E21",
7
+ "mappings": ";AAAA;AAEA;AAEA;AAEA;AAoBA,eAAsB,QAAQ,CAC1B,OACA,OACA,SACF;AAAA,EACE,IAAI;AAAA,EACJ,IAAI;AAAA,IACA,OAAO,MAAM,OAAO,KAAK,MAAM,MAAM,IAAI,IAAI;AAAA,IAC/C,OAAO,OAAO;AAAA,IACZ,IAAI,iBAAiB,OAAO;AAAA,MACxB,OAAO,SAAS,KAAK,KAAK,MAAM,OAAO,EAAE,wBAAwB;AAAA,IACrE;AAAA,IACA,MAAM;AAAA;AAAA,EAEV,IAAI,MAAM,YAAY;AAAA,IAClB,MAAM,SAAS,MAAM,WAAW,UAAU,IAAI;AAAA,IAC9C,IAAI,CAAC,OAAO,SAAS;AAAA,MACjB,OAAO,SAAS,KACZ,KACA,EAAE,cAAc,OAAO,KAAK,CAChC,EAAE,wBAAwB;AAAA,IAC9B;AAAA,IACA,OAAO,OAAO;AAAA,EAClB;AAAA,EACA,IAAI,CAAC,MAAM,UAAU;AAAA,IACjB,MAAM,MAAM,IAAI,MAAM,8BAA8B;AAAA,IACpD,SAAS,GAAG;AAAA,IACZ,OAAO,SAAS,KAAK,KAAK,IAAI,OAAO,EAAE,wBAAwB;AAAA,EACnE;AAAA,EACA,MAAM,KAAK,MAAM;AAAA,EAKjB,MAAM,SAAS,MAAM,GAAG,EAAC,MAAM,OAAO,QAAO,CAAC;AAAA,EAC9C,IAAI,kBAAkB,UAAU;AAAA,IAC5B,IAAI,MAAM,cAAc;AAAA,MACpB,MAAM,SAAS,MAAM,aAAa,UAAU,OAAO,IAAI;AAAA,MACvD,IAAI,CAAC,OAAO,SAAS;AAAA,QACjB,SAAS,OAAO,KAAK;AAAA,QACrB,OAAO,SAAS,KACZ,KACA,EAAE,cAAc,OAAO,KAAK,CAChC,EAAE,wBAAwB;AAAA,MAC9B;AAAA,MACA,OAAO,OAAO,OAAO;AAAA,IACzB;AAAA,IACA,OAAO,iBAAiB,OAAO,wBAAwB,GAAG,KAAK;AAAA,EACnE;AAAA,EACA,IAAI,MAAM,cAAc;AAAA,IACpB,MAAM,SAAS,MAAM,aAAa,UAAU,MAAM;AAAA,IAClD,IAAI,CAAC,OAAO,SAAS;AAAA,MACjB,SAAS,OAAO,KAAK;AAAA,MACrB,OAAO,SAAS,KACZ,KACA,EAAE,cAAc,OAAO,KAAK,CAChC,EAAE,wBAAwB;AAAA,IAC9B;AAAA,IACA,OAAO,iBACH,SAAS,KAAK,KAAK,OAAO,IAAI,EAAE,wBAAwB,GACxD,KACJ;AAAA,EACJ;AAAA,EACA,OAAO,iBAAiB,SAAS,KAAK,KAAK,MAAM,EAAE,wBAAwB,GAAG,KAAK;AAAA;",
8
+ "debugId": "78A10223DAEDFFB964756E2164756E21",
9
9
  "names": []
10
10
  }
package/dist/logger.js CHANGED
@@ -1,14 +1,12 @@
1
1
  // src/logger.ts
2
2
  import * as z from "zod";
3
3
  function formatError(error) {
4
- let detail;
4
+ let detail = error.message;
5
5
  if (error instanceof z.ZodError) {
6
- detail = z.treeifyError(error).errors.join(`
7
- `);
6
+ detail = z.prettifyError(error);
8
7
  }
9
- return `${error.name}: ${error.message}${detail ? `
10
- ${detail}` : ""}${error.stack ? `
11
- ${error.stack}` : ""}`;
8
+ return `${error.name}: ${detail}${error.stack ? `
9
+ ${error.stack.slice(error.name.length + error.message.length + 3)}` : ""}`;
12
10
  }
13
11
  function logError(error) {
14
12
  console.error(formatError(error));
@@ -18,4 +16,4 @@ export {
18
16
  formatError
19
17
  };
20
18
 
21
- //# debugId=FB33B340A398C49564756E2164756E21
19
+ //# debugId=6F7BB1E979E2A41664756E2164756E21
@@ -2,9 +2,9 @@
2
2
  "version": 3,
3
3
  "sources": ["../src/logger.ts"],
4
4
  "sourcesContent": [
5
- "import * as z from \"zod\"\n\n/**\n * Formats an `Error` into a human-readable string that includes the error\n * name, message, an optional Zod validation detail block, and the stack\n * trace when available.\n */\nexport function formatError(error: Error): string {\n let detail\n if (error instanceof z.ZodError) {\n detail = z.treeifyError(error).errors.join(\"\\n\")\n }\n return `${error.name}: ${error.message}${detail ? `\\n${detail}` : \"\"}${error.stack ? `\\n${error.stack}` : \"\"}`\n}\n\n/** Writes a formatted error to `stderr` via `console.error`. */\nexport function logError(error: Error): void {\n console.error(formatError(error))\n}\n"
5
+ "import * as z from \"zod\"\n\n/**\n * Formats an `Error` into a human-readable string that includes the error\n * name, message, an optional Zod validation detail block, and the stack\n * trace when available.\n */\nexport function formatError(error: Error): string {\n let detail = error.message\n if (error instanceof z.ZodError) {\n detail = z.prettifyError(error)\n }\n return `${error.name}: ${detail}${error.stack ? `\\n${error.stack.slice(error.name.length + error.message.length + 3)}` : \"\"}`\n}\n\n/** Writes a formatted error to `stderr` via `console.error`. */\nexport function logError(error: Error): void {\n console.error(formatError(error))\n}\n"
6
6
  ],
7
- "mappings": ";AAAA;AAOO,SAAS,WAAW,CAAC,OAAsB;AAAA,EAC9C,IAAI;AAAA,EACJ,IAAI,iBAAmB,YAAU;AAAA,IAC7B,SAAW,eAAa,KAAK,EAAE,OAAO,KAAK;AAAA,CAAI;AAAA,EACnD;AAAA,EACA,OAAO,GAAG,MAAM,SAAS,MAAM,UAAU,SAAS;AAAA,EAAK,WAAW,KAAK,MAAM,QAAQ;AAAA,EAAK,MAAM,UAAU;AAAA;AAIvG,SAAS,QAAQ,CAAC,OAAoB;AAAA,EACzC,QAAQ,MAAM,YAAY,KAAK,CAAC;AAAA;",
8
- "debugId": "FB33B340A398C49564756E2164756E21",
7
+ "mappings": ";AAAA;AAOO,SAAS,WAAW,CAAC,OAAsB;AAAA,EAC9C,IAAI,SAAS,MAAM;AAAA,EACnB,IAAI,iBAAmB,YAAU;AAAA,IAC7B,SAAW,gBAAc,KAAK;AAAA,EAClC;AAAA,EACA,OAAO,GAAG,MAAM,SAAS,SAAS,MAAM,QAAQ;AAAA,EAAK,MAAM,MAAM,MAAM,MAAM,KAAK,SAAS,MAAM,QAAQ,SAAS,CAAC,MAAM;AAAA;AAItH,SAAS,QAAQ,CAAC,OAAoB;AAAA,EACzC,QAAQ,MAAM,YAAY,KAAK,CAAC;AAAA;",
8
+ "debugId": "6F7BB1E979E2A41664756E2164756E21",
9
9
  "names": []
10
10
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "lambda-reactor",
3
- "version": "1.0.1",
3
+ "version": "1.0.2",
4
4
  "scripts": {
5
5
  "prepare": "lefthook install",
6
6
  "check": "tsgo",