princejs 1.8.3 → 1.8.4

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
@@ -162,8 +162,6 @@ app.ws("/chat", {
162
162
  message: (ws, msg) => ws.send(`Echo: ${msg}`)
163
163
  });
164
164
 
165
- app.get("/route-level" )
166
-
167
165
 
168
166
  app.get("/protected", auth(), (req) => ({ user: req.user }));
169
167
  app.get("/api", apiKey({ keys: ["key_123"] }), handler);
@@ -1,8 +1,20 @@
1
1
  import type { PrinceRequest } from "./prince";
2
2
  import { z } from "zod";
3
3
  type Next = () => Promise<Response | undefined>;
4
+ export interface LoggerOptions {
5
+ enabled?: boolean;
6
+ errorsOnly?: boolean;
7
+ logHeaders?: boolean;
8
+ logBody?: boolean;
9
+ formatter?: (data: {
10
+ req: PrinceRequest;
11
+ res?: Response;
12
+ duration: number;
13
+ error?: any;
14
+ }) => void;
15
+ }
16
+ export declare const logger: (options?: LoggerOptions) => (req: PrinceRequest, next: Next) => Promise<Response | undefined>;
4
17
  export declare const cors: (origin?: string) => (req: any, next: Function) => Promise<any>;
5
- export declare const logger: () => (req: PrinceRequest, next: Next) => Promise<Response | undefined>;
6
18
  export declare const signJWT: (payload: any, secret: Uint8Array, expiresIn: string) => Promise<string>;
7
19
  export declare const jwt: (key: Uint8Array) => (req: PrinceRequest, next: Next) => Promise<Response | undefined>;
8
20
  export declare const rateLimit: (max: number, window?: number) => (req: PrinceRequest, next: Next) => Promise<Response | undefined>;
@@ -1 +1 @@
1
- {"version":3,"file":"middleware.d.ts","sourceRoot":"","sources":["../src/middleware.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAC9C,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAGxB,KAAK,IAAI,GAAG,MAAM,OAAO,CAAC,QAAQ,GAAG,SAAS,CAAC,CAAC;AAIhD,eAAO,MAAM,IAAI,GAAI,SAAQ,MAAY,MACzB,KAAK,GAAG,EAAE,MAAM,QAAQ,iBA+BvC,CAAC;AAGF,eAAO,MAAM,MAAM,SACH,KAAK,aAAa,EAAE,MAAM,IAAI,kCAM7C,CAAC;AAGF,eAAO,MAAM,OAAO,GAAU,SAAS,GAAG,EAAE,QAAQ,UAAU,EAAE,WAAW,MAAM,oBAQhF,CAAC;AAEF,eAAO,MAAM,GAAG,GAAI,KAAK,UAAU,MACnB,KAAK,aAAa,EAAE,MAAM,IAAI,kCAuB7C,CAAC;AAGF,eAAO,MAAM,SAAS,GAAI,KAAK,MAAM,EAAE,eAAW,MAGlC,KAAK,aAAa,EAAE,MAAM,IAAI,kCAqC7C,CAAC;AAGF,eAAO,MAAM,QAAQ,GAAI,QAAQ,CAAC,CAAC,SAAS,MAC5B,KAAK,GAAG,EAAE,MAAM,QAAQ,iBAyEvC,CAAC;AAGF,eAAO,MAAM,IAAI,GAAI,UAAU;IAAE,KAAK,CAAC,EAAE,MAAM,EAAE,CAAA;CAAE,MACnC,KAAK,aAAa,EAAE,MAAM,IAAI,kCAwB7C,CAAC;AAGF,eAAO,MAAM,MAAM,GAAI,SAAS;IAAE,IAAI,EAAE,MAAM,EAAE,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAA;CAAE,MAInD,KAAK,aAAa,EAAE,MAAM,IAAI,kCAa7C,CAAC;AAGF,eAAO,MAAM,QAAQ,GAAI,UAAU;IACjC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,MAAM,CAAC,EAAE,CAAC,GAAG,EAAE,aAAa,KAAK,OAAO,CAAC;CAC1C,MAIe,KAAK,aAAa,EAAE,MAAM,IAAI,kCAqC7C,CAAC;AAGF,eAAO,MAAM,OAAO,GAAI,SAAS;IAC/B,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,CAAC;CACf,MAce,KAAK,aAAa,EAAE,MAAM,IAAI,kCA+C7C,CAAC"}
1
+ {"version":3,"file":"middleware.d.ts","sourceRoot":"","sources":["../src/middleware.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAC9C,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAGxB,KAAK,IAAI,GAAG,MAAM,OAAO,CAAC,QAAQ,GAAG,SAAS,CAAC,CAAC;AAGhD,MAAM,WAAW,aAAa;IAC5B,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,SAAS,CAAC,EAAE,CAAC,IAAI,EAAE;QACjB,GAAG,EAAE,aAAa,CAAC;QACnB,GAAG,CAAC,EAAE,QAAQ,CAAC;QACf,QAAQ,EAAE,MAAM,CAAC;QACjB,KAAK,CAAC,EAAE,GAAG,CAAC;KACb,KAAK,IAAI,CAAC;CACZ;AAED,eAAO,MAAM,MAAM,GAAI,UAAS,aAAkB,MASlC,KAAK,aAAa,EAAE,MAAM,IAAI,kCAqD7C,CAAC;AAGF,eAAO,MAAM,IAAI,GAAI,SAAQ,MAAY,MACzB,KAAK,GAAG,EAAE,MAAM,QAAQ,iBA+BvC,CAAC;AAGF,eAAO,MAAM,OAAO,GAAU,SAAS,GAAG,EAAE,QAAQ,UAAU,EAAE,WAAW,MAAM,oBAQhF,CAAC;AAEF,eAAO,MAAM,GAAG,GAAI,KAAK,UAAU,MACnB,KAAK,aAAa,EAAE,MAAM,IAAI,kCAuB7C,CAAC;AAGF,eAAO,MAAM,SAAS,GAAI,KAAK,MAAM,EAAE,eAAW,MAGlC,KAAK,aAAa,EAAE,MAAM,IAAI,kCAqC7C,CAAC;AAGF,eAAO,MAAM,QAAQ,GAAI,QAAQ,CAAC,CAAC,SAAS,MAC5B,KAAK,GAAG,EAAE,MAAM,QAAQ,iBAyEvC,CAAC;AAGF,eAAO,MAAM,IAAI,GAAI,UAAU;IAAE,KAAK,CAAC,EAAE,MAAM,EAAE,CAAA;CAAE,MACnC,KAAK,aAAa,EAAE,MAAM,IAAI,kCAwB7C,CAAC;AAGF,eAAO,MAAM,MAAM,GAAI,SAAS;IAAE,IAAI,EAAE,MAAM,EAAE,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAA;CAAE,MAInD,KAAK,aAAa,EAAE,MAAM,IAAI,kCAa7C,CAAC;AAGF,eAAO,MAAM,QAAQ,GAAI,UAAU;IACjC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,MAAM,CAAC,EAAE,CAAC,GAAG,EAAE,aAAa,KAAK,OAAO,CAAC;CAC1C,MAIe,KAAK,aAAa,EAAE,MAAM,IAAI,kCAqC7C,CAAC;AAGF,eAAO,MAAM,OAAO,GAAI,SAAS;IAC/B,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,CAAC;CACf,MAce,KAAK,aAAa,EAAE,MAAM,IAAI,kCA+C7C,CAAC"}
@@ -1343,6 +1343,58 @@ class SignJWT {
1343
1343
  }
1344
1344
  }
1345
1345
  // src/middleware.ts
1346
+ var logger = (options = {}) => {
1347
+ const {
1348
+ enabled = true,
1349
+ errorsOnly = false,
1350
+ logHeaders = false,
1351
+ logBody = false,
1352
+ formatter
1353
+ } = options;
1354
+ return async (req, next) => {
1355
+ if (!enabled)
1356
+ return next();
1357
+ const start = Date.now();
1358
+ try {
1359
+ const res = await next();
1360
+ const duration = Date.now() - start;
1361
+ if (errorsOnly && res.status < 400) {
1362
+ return res;
1363
+ }
1364
+ if (formatter) {
1365
+ formatter({ req, res, duration });
1366
+ return res;
1367
+ }
1368
+ const log = {
1369
+ method: req.method,
1370
+ path: new URL(req.url).pathname,
1371
+ status: res.status,
1372
+ duration: `${duration}ms`
1373
+ };
1374
+ if (logHeaders) {
1375
+ log.headers = Object.fromEntries(req.headers.entries());
1376
+ }
1377
+ if (logBody && req.body) {
1378
+ log.body = req.body;
1379
+ }
1380
+ console.log(log);
1381
+ return res;
1382
+ } catch (error) {
1383
+ const duration = Date.now() - start;
1384
+ if (formatter) {
1385
+ formatter({ req, duration, error });
1386
+ } else {
1387
+ console.error({
1388
+ method: req.method,
1389
+ path: new URL(req.url).pathname,
1390
+ error: String(error),
1391
+ duration: `${duration}ms`
1392
+ });
1393
+ }
1394
+ throw error;
1395
+ }
1396
+ };
1397
+ };
1346
1398
  var cors = (origin = "*") => {
1347
1399
  return async (req, next) => {
1348
1400
  if (req.method === "OPTIONS") {
@@ -1371,14 +1423,6 @@ var cors = (origin = "*") => {
1371
1423
  return response;
1372
1424
  };
1373
1425
  };
1374
- var logger = () => {
1375
- return async (req, next) => {
1376
- const start = Date.now();
1377
- const res = await next();
1378
- console.log(`${req.method} ${new URL(req.url).pathname} ${res?.status} ${Date.now() - start}ms`);
1379
- return res;
1380
- };
1381
- };
1382
1426
  var signJWT = async (payload, secret, expiresIn) => {
1383
1427
  const jwt = await new SignJWT(payload).setProtectedHeader({ alg: "HS256" }).setIssuedAt().setExpirationTime(expiresIn).sign(secret);
1384
1428
  return jwt;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "princejs",
3
- "version": "1.8.3",
3
+ "version": "1.8.4",
4
4
  "description": "An easy and fast backend framework that is among the top three — by a 13yo developer, for developers.",
5
5
  "main": "dist/prince.js",
6
6
  "types": "dist/prince.d.ts",