princejs 2.1.4 → 2.1.5

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/prince.d.ts CHANGED
@@ -75,6 +75,7 @@ export declare class Prince {
75
75
  private router;
76
76
  private staticRoutes;
77
77
  private staticMiddlewares;
78
+ private staticComposed;
78
79
  private routeCache;
79
80
  private onRequestHooks;
80
81
  private onBeforeHandleHooks;
@@ -111,8 +112,10 @@ export declare class Prince {
111
112
  private add;
112
113
  private buildRouter;
113
114
  private insertRoute;
115
+ private composeMW;
114
116
  private findRoute;
115
- private matchPath;
117
+ private composeRouterMiddlewares;
118
+ private composeStaticMiddlewares;
116
119
  private matchRoute;
117
120
  private parseBody;
118
121
  private executeHandler;
@@ -1 +1 @@
1
- {"version":3,"file":"prince.d.ts","sourceRoot":"","sources":["../src/prince.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"prince.d.ts","sourceRoot":"","sources":["../src/prince.ts"],"names":[],"mappings":"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"}
package/dist/prince.js CHANGED
@@ -177,27 +177,50 @@ function parseCookies(cookieHeader) {
177
177
  const cookies = {};
178
178
  if (!cookieHeader)
179
179
  return cookies;
180
- cookieHeader.split(";").forEach((pair) => {
181
- const [name, ...value] = pair.split("=");
182
- if (name)
183
- cookies[decodeURIComponent(name.trim())] = decodeURIComponent((value.join("=") || "").trim());
184
- });
180
+ const len = cookieHeader.length;
181
+ let i = 0;
182
+ while (i < len) {
183
+ while (i < len && cookieHeader.charCodeAt(i) === 32)
184
+ i++;
185
+ const eqIdx = cookieHeader.indexOf("=", i);
186
+ if (eqIdx === -1)
187
+ break;
188
+ const semIdx = cookieHeader.indexOf(";", eqIdx);
189
+ const end = semIdx === -1 ? len : semIdx;
190
+ const name = cookieHeader.slice(i, eqIdx).trimEnd();
191
+ const val = cookieHeader.slice(eqIdx + 1, end).trim();
192
+ if (name) {
193
+ try {
194
+ cookies[decodeURIComponent(name)] = decodeURIComponent(val);
195
+ } catch {
196
+ cookies[name] = val;
197
+ }
198
+ }
199
+ i = end + 1;
200
+ }
185
201
  return cookies;
186
202
  }
203
+ function extractPathname(url) {
204
+ const slashSlash = url.indexOf("//");
205
+ if (slashSlash === -1)
206
+ return "/";
207
+ const pathStart = url.indexOf("/", slashSlash + 2);
208
+ if (pathStart === -1)
209
+ return "/";
210
+ const qIdx = url.indexOf("?", pathStart);
211
+ return qIdx === -1 ? url.slice(pathStart) : url.slice(pathStart, qIdx);
212
+ }
213
+ function extractSearch(url) {
214
+ const qIdx = url.indexOf("?");
215
+ return qIdx === -1 ? "" : url.slice(qIdx + 1);
216
+ }
187
217
  function detectIP(req) {
188
218
  const forwarded = req.headers.get("x-forwarded-for");
189
- if (forwarded)
190
- return forwarded.split(",")[0].trim();
191
- const realIp = req.headers.get("x-real-ip");
192
- if (realIp)
193
- return realIp;
194
- const cfIp = req.headers.get("cf-connecting-ip");
195
- if (cfIp)
196
- return cfIp;
197
- const clientIp = req.headers.get("x-client-ip");
198
- if (clientIp)
199
- return clientIp;
200
- return "127.0.0.1";
219
+ if (forwarded) {
220
+ const comma = forwarded.indexOf(",");
221
+ return comma === -1 ? forwarded.trim() : forwarded.slice(0, comma).trim();
222
+ }
223
+ return req.headers.get("x-real-ip") ?? req.headers.get("cf-connecting-ip") ?? req.headers.get("x-client-ip") ?? "127.0.0.1";
201
224
  }
202
225
  function zodToJsonSchema(schema) {
203
226
  const d = schema._def;
@@ -353,6 +376,7 @@ class Prince {
353
376
  router = null;
354
377
  staticRoutes = new Map;
355
378
  staticMiddlewares = new Map;
379
+ staticComposed = new Map;
356
380
  routeCache = new Map;
357
381
  onRequestHooks = [];
358
382
  onBeforeHandleHooks = [];
@@ -363,6 +387,9 @@ class Prince {
363
387
  }
364
388
  use(mw) {
365
389
  this.middlewares.push(mw);
390
+ this.routeCache.clear();
391
+ this.staticComposed.clear();
392
+ this.router = null;
366
393
  return this;
367
394
  }
368
395
  plugin(plugin, options) {
@@ -448,6 +475,8 @@ class Prince {
448
475
  pattern: "",
449
476
  handlers: {},
450
477
  middlewares: {},
478
+ composedMiddlewares: {},
479
+ allowedMethods: new Set,
451
480
  children: []
452
481
  };
453
482
  for (const route of this.rawRoutes) {
@@ -476,6 +505,8 @@ class Prince {
476
505
  pattern: part,
477
506
  handlers: {},
478
507
  middlewares: {},
508
+ composedMiddlewares: {},
509
+ allowedMethods: new Set,
479
510
  children: []
480
511
  };
481
512
  if (part.startsWith(":")) {
@@ -490,76 +521,71 @@ class Prince {
490
521
  }
491
522
  }
492
523
  currentNode.handlers[route.method] = route.handler;
524
+ currentNode.allowedMethods.add(route.method);
493
525
  if (route.middlewares.length > 0) {
494
526
  currentNode.middlewares[route.method] = route.middlewares;
495
527
  }
496
528
  }
529
+ composeMW(routeMW) {
530
+ if (this.middlewares.length === 0)
531
+ return routeMW;
532
+ if (routeMW.length === 0)
533
+ return this.middlewares;
534
+ return [...this.middlewares, ...routeMW];
535
+ }
497
536
  findRoute(method, pathname) {
498
537
  const cacheKey = `${method}:${pathname}`;
499
538
  if (this.routeCache.has(cacheKey)) {
500
539
  return this.routeCache.get(cacheKey);
501
540
  }
502
- const staticKey = `${method}:${pathname}`;
503
- const staticHandler = this.staticRoutes.get(staticKey);
541
+ const staticHandler = this.staticRoutes.get(cacheKey);
504
542
  if (staticHandler) {
505
- const result2 = {
506
- handler: staticHandler,
507
- params: {},
508
- middlewares: this.staticMiddlewares.get(staticKey) || []
509
- };
543
+ const composed = this.staticComposed.get(cacheKey) ?? this.composeMW(this.staticMiddlewares.get(cacheKey) ?? []);
544
+ const result2 = { handler: staticHandler, params: {}, middlewares: composed };
510
545
  this.routeCache.set(cacheKey, result2);
511
546
  return result2;
512
547
  }
548
+ if (this.staticRoutes.size > 0) {
549
+ const methods = ["GET", "POST", "PUT", "PATCH", "DELETE", "OPTIONS"];
550
+ const allowed = methods.filter((m) => m !== method && this.staticRoutes.has(`${m}:${pathname}`));
551
+ if (allowed.length > 0) {
552
+ const r = { handler: null, params: {}, middlewares: [], allowedMethods: allowed };
553
+ this.routeCache.set(cacheKey, r);
554
+ return r;
555
+ }
556
+ }
513
557
  const segments = pathname === "/" ? [""] : pathname.split("/").slice(1);
514
558
  const result = this.matchRoute(this.buildRouter(), segments, method);
515
- if (result) {
516
- this.routeCache.set(cacheKey, result);
517
- return result;
518
- }
519
- const allowedMethods = new Set;
520
- for (const route of this.rawRoutes) {
521
- if (this.matchPath(route.path, pathname)) {
522
- allowedMethods.add(route.method);
523
- }
559
+ this.routeCache.set(cacheKey, result);
560
+ return result;
561
+ }
562
+ composeRouterMiddlewares(node) {
563
+ for (const method of Object.keys(node.handlers)) {
564
+ const routeMW = node.middlewares[method] ?? [];
565
+ node.composedMiddlewares[method] = this.middlewares.length === 0 ? routeMW : routeMW.length === 0 ? this.middlewares : [...this.middlewares, ...routeMW];
524
566
  }
525
- if (allowedMethods.size > 0) {
526
- const methodNotAllowed = {
527
- handler: null,
528
- params: {},
529
- middlewares: [],
530
- allowedMethods: Array.from(allowedMethods)
531
- };
532
- this.routeCache.set(cacheKey, methodNotAllowed);
533
- return methodNotAllowed;
567
+ for (const child of node.children) {
568
+ this.composeRouterMiddlewares(child);
534
569
  }
535
- this.routeCache.set(cacheKey, null);
536
- return null;
537
570
  }
538
- matchPath(routePath, requestPath) {
539
- const routeParts = routePath === "/" ? [""] : routePath.split("/").slice(1);
540
- const requestParts = requestPath === "/" ? [""] : requestPath.split("/").slice(1);
541
- if (routeParts.length !== requestParts.length) {
542
- if (routeParts.includes("**"))
543
- return true;
544
- return false;
571
+ composeStaticMiddlewares() {
572
+ this.staticComposed.clear();
573
+ for (const [key, handler] of this.staticRoutes) {
574
+ const routeMW = this.staticMiddlewares.get(key) ?? [];
575
+ this.staticComposed.set(key, this.middlewares.length === 0 ? routeMW : routeMW.length === 0 ? this.middlewares : [...this.middlewares, ...routeMW]);
545
576
  }
546
- for (let i = 0;i < routeParts.length; i++) {
547
- const routePart = routeParts[i];
548
- const requestPart = requestParts[i];
549
- if (routePart.startsWith(":") || routePart === "*" || routePart === "**") {
550
- continue;
551
- }
552
- if (routePart !== requestPart) {
553
- return false;
554
- }
555
- }
556
- return true;
557
577
  }
558
578
  matchRoute(node, segments, method, params = {}, index = 0) {
559
579
  if (index === segments.length) {
560
580
  const handler = node.handlers[method];
561
- const middlewares = node.middlewares[method] || [];
562
- return handler ? { handler, params, middlewares } : null;
581
+ if (handler) {
582
+ const middlewares = node.composedMiddlewares[method] ?? this.composeMW(node.middlewares[method] ?? []);
583
+ return { handler, params, middlewares };
584
+ }
585
+ if (node.allowedMethods.size > 0) {
586
+ return { handler: null, params, middlewares: [], allowedMethods: [...node.allowedMethods] };
587
+ }
588
+ return null;
563
589
  }
564
590
  const segment = segments[index];
565
591
  for (const child of node.children) {
@@ -573,11 +599,15 @@ class Prince {
573
599
  }
574
600
  for (const child of node.children) {
575
601
  if (child.paramName) {
602
+ const saved = params[child.paramName];
576
603
  params[child.paramName] = segment;
577
604
  const result = this.matchRoute(child, segments, method, params, index + 1);
578
605
  if (result)
579
606
  return result;
580
- delete params[child.paramName];
607
+ if (saved === undefined)
608
+ delete params[child.paramName];
609
+ else
610
+ params[child.paramName] = saved;
581
611
  }
582
612
  }
583
613
  for (const child of node.children) {
@@ -590,39 +620,32 @@ class Prince {
590
620
  for (const child of node.children) {
591
621
  if (child.isCatchAll) {
592
622
  const handler = child.handlers[method];
593
- const middlewares = child.middlewares[method] || [];
594
623
  if (handler) {
624
+ const middlewares = child.composedMiddlewares[method] ?? this.composeMW(child.middlewares[method] ?? []);
595
625
  return { handler, params, middlewares };
596
626
  }
627
+ if (child.allowedMethods.size > 0) {
628
+ return { handler: null, params, middlewares: [], allowedMethods: [...child.allowedMethods] };
629
+ }
597
630
  }
598
631
  }
599
632
  return null;
600
633
  }
601
634
  async parseBody(req) {
602
635
  const ct = req.headers.get("content-type") || "";
603
- const clonedReq = req.clone();
604
636
  try {
605
637
  if (ct.includes("application/json")) {
606
- return await clonedReq.json();
638
+ return await req.json();
607
639
  }
608
640
  if (ct.includes("application/x-www-form-urlencoded")) {
609
- const text = await clonedReq.text();
641
+ const text = await req.text();
610
642
  return Object.fromEntries(new URLSearchParams(text));
611
643
  }
612
644
  if (ct.startsWith("multipart/form-data")) {
613
- const fd = await clonedReq.formData();
614
- const files = {};
615
- const fields = {};
616
- for (const [k, v] of fd.entries()) {
617
- if (v instanceof File)
618
- files[k] = v;
619
- else
620
- fields[k] = v;
621
- }
622
- return { files, fields };
645
+ return null;
623
646
  }
624
647
  if (ct.startsWith("text/")) {
625
- return await clonedReq.text();
648
+ return await req.text();
626
649
  }
627
650
  } catch (error) {
628
651
  console.error("Body parsing error:", error);
@@ -630,11 +653,31 @@ class Prince {
630
653
  }
631
654
  return null;
632
655
  }
633
- async executeHandler(req, handler, params, query, routeMiddlewares, method, pathname) {
656
+ async executeHandler(req, handler, params, search, routeMiddlewares, method, pathname) {
634
657
  req.params = params;
635
- req.query = query;
636
- req.cookies = parseCookies(req.headers.get("cookie") || "");
637
- req.ip = detectIP(req);
658
+ let _query;
659
+ Object.defineProperty(req, "query", {
660
+ get() {
661
+ return _query ??= new URLSearchParams(search);
662
+ },
663
+ configurable: true
664
+ });
665
+ Object.defineProperty(req, "cookies", {
666
+ get() {
667
+ const val = parseCookies(req.headers.get("cookie") ?? "");
668
+ Object.defineProperty(req, "cookies", { value: val, configurable: true });
669
+ return val;
670
+ },
671
+ configurable: true
672
+ });
673
+ Object.defineProperty(req, "ip", {
674
+ get() {
675
+ const val = detectIP(req);
676
+ Object.defineProperty(req, "ip", { value: val, configurable: true });
677
+ return val;
678
+ },
679
+ configurable: true
680
+ });
638
681
  if (["POST", "PUT", "PATCH"].includes(req.method) && !req.parsedBody) {
639
682
  const parsed = await this.parseBody(req);
640
683
  if (parsed) {
@@ -649,7 +692,7 @@ class Prince {
649
692
  for (const hook of this.onBeforeHandleHooks) {
650
693
  await hook(req, pathname, method);
651
694
  }
652
- const allMiddlewares = routeMiddlewares.length > 0 ? [...this.middlewares, ...routeMiddlewares] : this.middlewares;
695
+ const allMiddlewares = routeMiddlewares;
653
696
  let i = 0;
654
697
  const next = async () => {
655
698
  while (i < allMiddlewares.length) {
@@ -669,16 +712,18 @@ class Prince {
669
712
  return this.json(res);
670
713
  };
671
714
  const response = await next();
672
- for (const hook of this.onAfterHandleHooks) {
673
- await hook(req, response.clone(), pathname, method);
715
+ if (this.onAfterHandleHooks.length > 0) {
716
+ for (const hook of this.onAfterHandleHooks) {
717
+ await hook(req, response, pathname, method);
718
+ }
674
719
  }
675
720
  return response;
676
721
  }
677
722
  async handleFetch(req) {
678
- const url = new URL(req.url);
723
+ const rawUrl = req.url;
724
+ const pathname = extractPathname(rawUrl);
679
725
  const r = req;
680
726
  const method = req.method;
681
- const pathname = url.pathname;
682
727
  for (const hook of this.onRequestHooks) {
683
728
  await hook(r);
684
729
  }
@@ -695,15 +740,16 @@ class Prince {
695
740
  }
696
741
  });
697
742
  }
698
- return this.executeHandler(r, routeMatch.handler, routeMatch.params, url.searchParams, routeMatch.middlewares, method, pathname);
743
+ const search = extractSearch(rawUrl);
744
+ return this.executeHandler(r, routeMatch.handler, routeMatch.params, search, routeMatch.middlewares, method, pathname);
699
745
  }
700
746
  async fetch(req) {
701
- const url = new URL(req.url);
702
- const pathname = url.pathname;
747
+ const rawUrl = req.url;
703
748
  const method = req.method;
704
749
  try {
705
750
  return await this.handleFetch(req);
706
751
  } catch (err) {
752
+ const pathname = extractPathname(rawUrl);
707
753
  for (const hook of this.onErrorHooks) {
708
754
  await hook(err, req, pathname, method);
709
755
  }
@@ -768,12 +814,15 @@ class Prince {
768
814
  }
769
815
  listen(port = 3000) {
770
816
  const self = this;
817
+ const router = this.buildRouter();
818
+ this.composeRouterMiddlewares(router);
819
+ this.composeStaticMiddlewares();
771
820
  Bun.serve({
772
821
  port,
773
822
  fetch: (req, server) => {
774
- const url = new URL(req.url);
775
- if (self.wsRoutes[url.pathname] && server.upgrade(req, {
776
- data: { path: url.pathname }
823
+ const pathname = extractPathname(req.url);
824
+ if (self.wsRoutes[pathname] && server.upgrade(req, {
825
+ data: { path: pathname }
777
826
  })) {
778
827
  return;
779
828
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "princejs",
3
- "version": "2.1.4",
3
+ "version": "2.1.5",
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",