effect-start 0.30.1 → 0.32.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.
Files changed (122) hide show
  1. package/dist/Fetch.d.ts +1 -1
  2. package/dist/Fetch.d.ts.map +1 -1
  3. package/dist/Fetch.js +1 -1
  4. package/dist/Fetch.js.map +1 -1
  5. package/dist/GlobalLayer.d.ts.map +1 -1
  6. package/dist/GlobalLayer.js.map +1 -1
  7. package/dist/Html.js +3 -3
  8. package/dist/Html.js.map +1 -1
  9. package/dist/Password.d.ts +26 -0
  10. package/dist/Password.d.ts.map +1 -0
  11. package/dist/Password.js +83 -0
  12. package/dist/Password.js.map +1 -0
  13. package/dist/Route.d.ts.map +1 -1
  14. package/dist/Route.js +1 -1
  15. package/dist/Route.js.map +1 -1
  16. package/dist/RouteBody.d.ts +10 -5
  17. package/dist/RouteBody.d.ts.map +1 -1
  18. package/dist/RouteBody.js +6 -2
  19. package/dist/RouteBody.js.map +1 -1
  20. package/dist/RouteHttp.d.ts.map +1 -1
  21. package/dist/RouteHttp.js +10 -3
  22. package/dist/RouteHttp.js.map +1 -1
  23. package/dist/RouteSse.d.ts +3 -4
  24. package/dist/RouteSse.d.ts.map +1 -1
  25. package/dist/RouteSse.js +3 -3
  26. package/dist/RouteSse.js.map +1 -1
  27. package/dist/RouteTree.d.ts +20 -5
  28. package/dist/RouteTree.d.ts.map +1 -1
  29. package/dist/RouteTree.js +172 -40
  30. package/dist/RouteTree.js.map +1 -1
  31. package/dist/StaticFiles.d.ts +23 -0
  32. package/dist/StaticFiles.d.ts.map +1 -0
  33. package/dist/StaticFiles.js +74 -0
  34. package/dist/StaticFiles.js.map +1 -0
  35. package/dist/_Mime.d.ts +2 -0
  36. package/dist/_Mime.d.ts.map +1 -0
  37. package/dist/_Mime.js +33 -0
  38. package/dist/_Mime.js.map +1 -0
  39. package/dist/_PathPattern.js +4 -4
  40. package/dist/_PathPattern.js.map +1 -1
  41. package/dist/_StreamExtra.d.ts.map +1 -1
  42. package/dist/_StreamExtra.js +0 -1
  43. package/dist/_StreamExtra.js.map +1 -1
  44. package/dist/bun/BunRoute.d.ts.map +1 -1
  45. package/dist/bun/BunRoute.js +6 -0
  46. package/dist/bun/BunRoute.js.map +1 -1
  47. package/dist/bun/BunServer.d.ts +2 -0
  48. package/dist/bun/BunServer.d.ts.map +1 -1
  49. package/dist/bun/BunServer.js +18 -7
  50. package/dist/bun/BunServer.js.map +1 -1
  51. package/dist/studio/Studio.d.ts +1 -1
  52. package/dist/studio/Studio.d.ts.map +1 -1
  53. package/dist/studio/Studio.js +5 -4
  54. package/dist/studio/Studio.js.map +1 -1
  55. package/dist/studio/StudioErrors.d.ts.map +1 -1
  56. package/dist/studio/StudioErrors.js +2 -2
  57. package/dist/studio/StudioErrors.js.map +1 -1
  58. package/dist/studio/StudioLogger.d.ts.map +1 -1
  59. package/dist/studio/StudioLogger.js +1 -3
  60. package/dist/studio/StudioLogger.js.map +1 -1
  61. package/dist/studio/StudioStore.d.ts +23 -17
  62. package/dist/studio/StudioStore.d.ts.map +1 -1
  63. package/dist/studio/StudioStore.js +48 -44
  64. package/dist/studio/StudioStore.js.map +1 -1
  65. package/dist/studio/StudioTracer.d.ts.map +1 -1
  66. package/dist/studio/StudioTracer.js +10 -4
  67. package/dist/studio/StudioTracer.js.map +1 -1
  68. package/dist/studio/routes/errors/route.d.ts +2 -2
  69. package/dist/studio/routes/errors/route.d.ts.map +1 -1
  70. package/dist/studio/routes/errors/route.js +2 -2
  71. package/dist/studio/routes/errors/route.js.map +1 -1
  72. package/dist/studio/routes/fiberDetail.d.ts +1 -1
  73. package/dist/studio/routes/fiberDetail.js +4 -4
  74. package/dist/studio/routes/fiberDetail.js.map +1 -1
  75. package/dist/studio/routes/fibers/route.d.ts +3 -3
  76. package/dist/studio/routes/fibers/route.js +4 -4
  77. package/dist/studio/routes/fibers/route.js.map +1 -1
  78. package/dist/studio/routes/logs/route.d.ts +2 -2
  79. package/dist/studio/routes/logs/route.d.ts.map +1 -1
  80. package/dist/studio/routes/logs/route.js +2 -2
  81. package/dist/studio/routes/logs/route.js.map +1 -1
  82. package/dist/studio/routes/metrics/route.d.ts +1 -1
  83. package/dist/studio/routes/system/route.d.ts +1 -1
  84. package/dist/studio/routes/traceDetail.d.ts +1 -1
  85. package/dist/studio/routes/traceDetail.js +1 -1
  86. package/dist/studio/routes/traceDetail.js.map +1 -1
  87. package/dist/studio/routes/traces/route.d.ts +3 -3
  88. package/dist/studio/routes/traces/route.js +5 -5
  89. package/dist/studio/routes/traces/route.js.map +1 -1
  90. package/dist/studio/routes/tree.d.ts +14 -14
  91. package/dist/studio/ui/Traces.d.ts +1 -0
  92. package/dist/studio/ui/Traces.d.ts.map +1 -1
  93. package/dist/studio/ui/Traces.js +32 -11
  94. package/dist/studio/ui/Traces.js.map +1 -1
  95. package/package.json +2 -2
  96. package/src/Fetch.ts +2 -2
  97. package/src/GlobalLayer.ts +1 -3
  98. package/src/Html.ts +3 -3
  99. package/src/Password.ts +130 -0
  100. package/src/Route.ts +10 -12
  101. package/src/RouteBody.ts +36 -14
  102. package/src/RouteHttp.ts +14 -3
  103. package/src/RouteSse.ts +10 -10
  104. package/src/RouteTree.ts +252 -61
  105. package/src/StaticFiles.ts +112 -0
  106. package/src/_Mime.ts +33 -0
  107. package/src/_PathPattern.ts +4 -4
  108. package/src/_StreamExtra.ts +0 -1
  109. package/src/bun/BunRoute.ts +10 -0
  110. package/src/bun/BunServer.ts +33 -7
  111. package/src/studio/Studio.ts +6 -5
  112. package/src/studio/StudioErrors.ts +2 -3
  113. package/src/studio/StudioLogger.ts +2 -3
  114. package/src/studio/StudioStore.ts +159 -115
  115. package/src/studio/StudioTracer.ts +11 -5
  116. package/src/studio/routes/errors/route.tsx +4 -5
  117. package/src/studio/routes/fiberDetail.tsx +4 -4
  118. package/src/studio/routes/fibers/route.tsx +4 -4
  119. package/src/studio/routes/logs/route.tsx +3 -1
  120. package/src/studio/routes/traceDetail.tsx +1 -1
  121. package/src/studio/routes/traces/route.tsx +8 -8
  122. package/src/studio/ui/Traces.tsx +41 -13
@@ -5,17 +5,16 @@ import * as Entity from "./Entity.ts";
5
5
  import * as Route from "./Route.ts";
6
6
  import type * as Values from "./_Values.ts";
7
7
  interface SseEvent {
8
- readonly [key: string]: unknown;
9
8
  readonly _tag?: string;
10
9
  readonly data?: string | undefined;
11
- readonly type?: string;
10
+ readonly event?: string;
12
11
  readonly retry?: number;
13
12
  }
14
13
  type SseHandlerInput<B, E, R> = Stream.Stream<SseEvent, E, R> | Effect.Effect<Stream.Stream<SseEvent, E, R>, E, R> | ((context: Values.Simplify<B>, next: (context?: Partial<B> & Record<string, unknown>) => Entity.Entity<string>) => Stream.Stream<SseEvent, E, R> | Effect.Effect<Stream.Stream<SseEvent, E, R>, E, R> | Generator<Utils.YieldWrap<Effect.Effect<unknown, E, R>>, Stream.Stream<SseEvent, E, R>, unknown>);
15
14
  export declare function sse<D extends Route.RouteDescriptor.Any, B extends {}, I extends Route.Route.Tuple, E = never, R = never>(handler: SseHandlerInput<NoInfer<D & B & Route.ExtractBindings<I> & {
16
- format: "text";
15
+ format: "sse";
17
16
  }>, E, R>): (self: Route.RouteSet.RouteSet<D, B, I>) => Route.RouteSet.RouteSet<D, B, [...I, Route.Route.Route<{
18
- format: "text";
17
+ format: "sse";
19
18
  }, {}, Stream.Stream<string, E, R>, E, R>]>;
20
19
  export {};
21
20
  //# sourceMappingURL=RouteSse.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"RouteSse.d.ts","sourceRoot":"","sources":["../src/RouteSse.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,MAAM,MAAM,eAAe,CAAA;AAEvC,OAAO,KAAK,MAAM,MAAM,eAAe,CAAA;AACvC,OAAO,KAAK,KAAK,KAAK,MAAM,cAAc,CAAA;AAC1C,OAAO,KAAK,MAAM,MAAM,aAAa,CAAA;AACrC,OAAO,KAAK,KAAK,MAAM,YAAY,CAAA;AAEnC,OAAO,KAAK,KAAK,MAAM,MAAM,cAAc,CAAA;AAK3C,UAAU,QAAQ;IAChB,QAAQ,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAA;IAC/B,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAA;IACtB,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;IAClC,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAA;IACtB,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CACxB;AA0BD,KAAK,eAAe,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,IACxB,MAAM,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC,EAAE,CAAC,CAAC,GAC7B,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,GAClD,CAAC,CACC,OAAO,EAAE,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,EAC3B,IAAI,EAAE,CAAC,OAAO,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,KAE7E,MAAM,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC,EAAE,CAAC,CAAC,GAC7B,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,GAClD,SAAS,CACP,KAAK,CAAC,SAAS,CAAC,MAAM,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,EAC7C,MAAM,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC,EAAE,CAAC,CAAC,EAC7B,OAAO,CACR,CAAC,CAAA;AAEV,wBAAgB,GAAG,CACjB,CAAC,SAAS,KAAK,CAAC,eAAe,CAAC,GAAG,EACnC,CAAC,SAAS,EAAE,EACZ,CAAC,SAAS,KAAK,CAAC,KAAK,CAAC,KAAK,EAC3B,CAAC,GAAG,KAAK,EACT,CAAC,GAAG,KAAK,EACT,OAAO,EAAE,eAAe,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC,eAAe,CAAC,CAAC,CAAC,GAAG;IAAE,MAAM,EAAE,MAAM,CAAA;CAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,IAC7E,MAAM,KAAK,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;YA6DhB,MAAM;4CAG9C"}
1
+ {"version":3,"file":"RouteSse.d.ts","sourceRoot":"","sources":["../src/RouteSse.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,MAAM,MAAM,eAAe,CAAA;AAEvC,OAAO,KAAK,MAAM,MAAM,eAAe,CAAA;AACvC,OAAO,KAAK,KAAK,KAAK,MAAM,cAAc,CAAA;AAC1C,OAAO,KAAK,MAAM,MAAM,aAAa,CAAA;AACrC,OAAO,KAAK,KAAK,MAAM,YAAY,CAAA;AAEnC,OAAO,KAAK,KAAK,MAAM,MAAM,cAAc,CAAA;AAK3C,UAAU,QAAQ;IAChB,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAA;IACtB,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;IAClC,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAA;IACvB,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CACxB;AA0BD,KAAK,eAAe,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,IACxB,MAAM,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC,EAAE,CAAC,CAAC,GAC7B,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,GAClD,CAAC,CACC,OAAO,EAAE,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,EAE3B,IAAI,EAAE,CAAC,OAAO,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,KAE7E,MAAM,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC,EAAE,CAAC,CAAC,GAC7B,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,GAClD,SAAS,CACP,KAAK,CAAC,SAAS,CAAC,MAAM,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,EAC7C,MAAM,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC,EAAE,CAAC,CAAC,EAC7B,OAAO,CACR,CAAC,CAAA;AAEV,wBAAgB,GAAG,CACjB,CAAC,SAAS,KAAK,CAAC,eAAe,CAAC,GAAG,EACnC,CAAC,SAAS,EAAE,EACZ,CAAC,SAAS,KAAK,CAAC,KAAK,CAAC,KAAK,EAC3B,CAAC,GAAG,KAAK,EACT,CAAC,GAAG,KAAK,EACT,OAAO,EAAE,eAAe,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC,eAAe,CAAC,CAAC,CAAC,GAAG;IAAE,MAAM,EAAE,KAAK,CAAA;CAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,IAC5E,MAAM,KAAK,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;YA6DhB,KAAK;4CAG7C"}
package/dist/RouteSse.js CHANGED
@@ -13,8 +13,8 @@ function formatSseEvent(event) {
13
13
  return `event: ${event._tag}\ndata: ${json}\n\n`;
14
14
  }
15
15
  let result = "";
16
- if (event.type) {
17
- result += `event: ${event.type}\n`;
16
+ if (event.event) {
17
+ result += `event: ${event.event}\n`;
18
18
  }
19
19
  if (typeof event.data === "string") {
20
20
  for (const line of event.data.split("\n")) {
@@ -68,7 +68,7 @@ export function sse(handler) {
68
68
  });
69
69
  });
70
70
  };
71
- const route = Route.make(sseHandler, { format: "text" });
71
+ const route = Route.make(sseHandler, { format: "sse" });
72
72
  const items = [...Route.items(self), route];
73
73
  return Route.set(items, Route.descriptor(self));
74
74
  };
@@ -1 +1 @@
1
- {"version":3,"file":"RouteSse.js","sourceRoot":"","sources":["../src/RouteSse.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"RouteSse.js","sourceRoot":"","sources":["../src/RouteSse.ts"],"names":[],"mappings":"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"}
@@ -1,8 +1,9 @@
1
- import * as PathPattern from "./_PathPattern.ts";
1
+ import type * as PathPattern from "./_PathPattern.ts";
2
2
  import * as Route from "./Route.ts";
3
3
  import type * as RouteMount from "./RouteMount.ts";
4
4
  declare const TypeId: "~effect-start/RouteTree";
5
5
  declare const RouteTreeRoutes: unique symbol;
6
+ declare const CompiledRoutesKey: unique symbol;
6
7
  type MethodRoute = Route.Route.With<{
7
8
  method: string;
8
9
  }>;
@@ -21,9 +22,23 @@ export type RouteMap = {
21
22
  [path: PathPattern.PathPattern]: Route.Route.Tuple;
22
23
  };
23
24
  export type Routes<T extends RouteTree> = T[typeof RouteTreeRoutes];
25
+ interface CompiledMethod {
26
+ regex: RegExp;
27
+ table: Array<{
28
+ path: PathPattern.PathPattern;
29
+ routes: Array<RouteMount.MountedRoute>;
30
+ paramNames: Array<string>;
31
+ paramGroupIndices: Array<number>;
32
+ sentinelIndex: number;
33
+ }>;
34
+ }
35
+ interface CompiledRoutes {
36
+ methods: Record<string, CompiledMethod>;
37
+ }
24
38
  export interface RouteTree<Routes extends RouteMap = RouteMap> {
25
39
  [TypeId]: typeof TypeId;
26
40
  [RouteTreeRoutes]: Routes;
41
+ [CompiledRoutesKey]?: CompiledRoutes;
27
42
  }
28
43
  type PrefixKeys<T, Prefix extends string> = {
29
44
  [K in keyof T as K extends string ? `${Prefix}${K}` : never]: T[K];
@@ -41,18 +56,18 @@ type PrependLayers<T extends RouteMap, L extends Route.Route.Tuple> = {
41
56
  [K in keyof T]: T[K] extends Route.Route.Tuple ? [...L, ...T[K]] : never;
42
57
  };
43
58
  type UnionToIntersection<U> = (U extends any ? (x: U) => void : never) extends (x: infer I) => void ? I : never;
44
- export declare function make<const Routes extends InputRouteMap>(input: Routes): RouteTree<FlattenRouteMap<Routes>>;
45
59
  export type WalkDescriptor = {
46
60
  path: PathPattern.PathPattern;
47
61
  method: string;
48
62
  } & Route.RouteDescriptor.Any;
49
- export declare function walk(tree: RouteTree): Generator<RouteMount.MountedRoute>;
50
- export declare function merge(a: RouteTree, b: RouteTree): RouteTree;
51
- export declare function isRouteTree(input: unknown): input is RouteTree;
52
63
  export interface LookupResult {
53
64
  route: RouteMount.MountedRoute;
54
65
  params: Record<string, string>;
55
66
  }
67
+ export declare function make<const Routes extends InputRouteMap>(input: Routes): RouteTree<FlattenRouteMap<Routes>>;
68
+ export declare function walk(tree: RouteTree): Generator<RouteMount.MountedRoute>;
69
+ export declare function merge(a: RouteTree, b: RouteTree): RouteTree;
70
+ export declare function isRouteTree(input: unknown): input is RouteTree;
56
71
  export declare function lookup(tree: RouteTree, method: string, path: string): LookupResult | null;
57
72
  export {};
58
73
  //# sourceMappingURL=RouteTree.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"RouteTree.d.ts","sourceRoot":"","sources":["../src/RouteTree.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"RouteTree.d.ts","sourceRoot":"","sources":["../src/RouteTree.ts"],"names":[],"mappings":"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"}
package/dist/RouteTree.js CHANGED
@@ -1,31 +1,9 @@
1
1
  import * as Predicate from "effect/Predicate";
2
- import * as PathPattern from "./_PathPattern.js";
3
2
  import * as Route from "./Route.js";
4
3
  const TypeId = "~effect-start/RouteTree";
5
4
  const RouteTreeRoutes = Symbol();
5
+ const CompiledRoutesKey = Symbol();
6
6
  const LayerKey = "*";
7
- function routes(tree) {
8
- return tree[RouteTreeRoutes];
9
- }
10
- // segment priority: static (0) < :param (1) < :param? (2) < :param+ (3) < :param* (4)
11
- function sortScore(path) {
12
- const segments = path.split("/");
13
- const greedyIdx = segments.findIndex((s) => s.endsWith("*") || s.endsWith("+"));
14
- const maxPriority = Math.max(...segments.map((s) => !s.startsWith(":") ? 0 : s.endsWith("*") ? 4 : s.endsWith("+") ? 3 : s.endsWith("?") ? 2 : 1), 0);
15
- return greedyIdx === -1
16
- ? // non-greedy: sort by depth, then by max segment priority
17
- (segments.length << 16) + (maxPriority << 8)
18
- : // greedy: sort after non-greedy, by greedy position (later = first), then priority
19
- (1 << 24) + ((16 - greedyIdx) << 16) + (maxPriority << 8);
20
- }
21
- function sortRoutes(input) {
22
- const keys = Object.keys(input).sort((a, b) => sortScore(a) - sortScore(b) || a.localeCompare(b));
23
- const sorted = {};
24
- for (const key of keys) {
25
- sorted[key] = input[key];
26
- }
27
- return sorted;
28
- }
29
7
  export function make(input) {
30
8
  const layerRoutes = [...(input[LayerKey] ?? [])];
31
9
  const merged = {};
@@ -45,20 +23,12 @@ export function make(input) {
45
23
  }
46
24
  }
47
25
  flatten(input, "", layerRoutes);
26
+ const sorted = sortRoutes(merged);
48
27
  return {
49
28
  [TypeId]: TypeId,
50
- [RouteTreeRoutes]: sortRoutes(merged),
29
+ [RouteTreeRoutes]: sorted,
51
30
  };
52
31
  }
53
- function* flattenRoutes(path, routes) {
54
- for (const route of routes) {
55
- const descriptor = {
56
- ...route[Route.RouteDescriptor],
57
- path,
58
- };
59
- yield Route.make(route.handler, descriptor);
60
- }
61
- }
62
32
  export function* walk(tree) {
63
33
  const _routes = routes(tree);
64
34
  for (const path of Object.keys(_routes)) {
@@ -71,23 +41,185 @@ export function merge(a, b) {
71
41
  const key = path;
72
42
  combined[key] = combined[key] ? [...combined[key], ...items] : items;
73
43
  }
44
+ const sorted = sortRoutes(combined);
74
45
  return {
75
46
  [TypeId]: TypeId,
76
- [RouteTreeRoutes]: sortRoutes(combined),
47
+ [RouteTreeRoutes]: sorted,
77
48
  };
78
49
  }
79
50
  export function isRouteTree(input) {
80
51
  return Predicate.hasProperty(input, TypeId);
81
52
  }
82
53
  export function lookup(tree, method, path) {
83
- for (const route of walk(tree)) {
84
- const descriptor = Route.descriptor(route);
85
- if (descriptor.method !== "*" && descriptor.method !== method)
54
+ tree[CompiledRoutesKey] ??= compileRoutes(routes(tree));
55
+ const { methods } = tree[CompiledRoutesKey];
56
+ const wildcard = methods["*"];
57
+ if (wildcard) {
58
+ const result = execCompiled(wildcard, path);
59
+ if (result)
60
+ return result;
61
+ }
62
+ const specific = methods[method];
63
+ if (specific) {
64
+ const result = execCompiled(specific, path);
65
+ if (result)
66
+ return result;
67
+ }
68
+ return null;
69
+ }
70
+ function routes(tree) {
71
+ return tree[RouteTreeRoutes];
72
+ }
73
+ // segment priority: static (0) < :param (1) < :param? (2) < :param+ (3) < :param* (4)
74
+ function sortScore(path) {
75
+ const segments = path.split("/");
76
+ const greedyIdx = segments.findIndex((s) => s.endsWith("*") || s.endsWith("+"));
77
+ const maxPriority = Math.max(...segments.map((s) => !s.startsWith(":") ? 0 : s.endsWith("*") ? 4 : s.endsWith("+") ? 3 : s.endsWith("?") ? 2 : 1), 0);
78
+ return greedyIdx === -1
79
+ ? // non-greedy: sort by depth, then by max segment priority
80
+ (segments.length << 16) + (maxPriority << 8)
81
+ : // greedy: sort after non-greedy, by greedy position (later = first), then priority
82
+ (1 << 24) + ((16 - greedyIdx) << 16) + (maxPriority << 8);
83
+ }
84
+ function sortRoutes(input) {
85
+ const keys = Object.keys(input).sort((a, b) => sortScore(a) - sortScore(b) || a.localeCompare(b));
86
+ const sorted = {};
87
+ for (const key of keys) {
88
+ sorted[key] = input[key];
89
+ }
90
+ return sorted;
91
+ }
92
+ function* flattenRoutes(path, routes) {
93
+ for (const route of routes) {
94
+ const descriptor = {
95
+ ...route[Route.RouteDescriptor],
96
+ path,
97
+ };
98
+ yield Route.make(route.handler, descriptor);
99
+ }
100
+ }
101
+ function escapeRegex(s) {
102
+ return s.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
103
+ }
104
+ function patternToRegex(pattern) {
105
+ const segments = pattern.split("/").filter(Boolean);
106
+ const paramNames = [];
107
+ let fragment = "";
108
+ let groupCount = 0;
109
+ for (let i = 0; i < segments.length; i++) {
110
+ const seg = segments[i];
111
+ if (seg.startsWith(":")) {
112
+ const last = seg[seg.length - 1];
113
+ if (last === "+") {
114
+ const name = seg.slice(1, -1);
115
+ paramNames.push(name);
116
+ fragment += "\\/(.+)";
117
+ groupCount++;
118
+ }
119
+ else if (last === "*") {
120
+ const name = seg.slice(1, -1);
121
+ paramNames.push(name);
122
+ fragment += "(?:\\/(.+))?";
123
+ groupCount++;
124
+ }
125
+ else if (last === "?") {
126
+ const name = seg.slice(1, -1);
127
+ paramNames.push(name);
128
+ fragment += "(?:\\/([^\\/]+))?";
129
+ groupCount++;
130
+ }
131
+ else {
132
+ const name = seg.slice(1);
133
+ paramNames.push(name);
134
+ fragment += "\\/([^\\/]+)";
135
+ groupCount++;
136
+ }
137
+ }
138
+ else {
139
+ fragment += "\\/" + escapeRegex(seg);
140
+ }
141
+ }
142
+ return { fragment, paramNames, groupCount };
143
+ }
144
+ function compileRoutes(sortedRoutes) {
145
+ const methodGroups = {};
146
+ for (const path of Object.keys(sortedRoutes)) {
147
+ for (const routeData of sortedRoutes[path]) {
148
+ const descriptor = {
149
+ ...routeData[Route.RouteDescriptor],
150
+ path,
151
+ };
152
+ const mounted = Route.make(routeData.handler, descriptor);
153
+ const method = descriptor.method;
154
+ if (!methodGroups[method])
155
+ methodGroups[method] = [];
156
+ methodGroups[method].push({ path, route: mounted });
157
+ }
158
+ }
159
+ const pathRoutesByMethod = {};
160
+ for (const method of Object.keys(methodGroups)) {
161
+ const map = new Map();
162
+ for (const { path, route } of methodGroups[method]) {
163
+ let entry = map.get(path);
164
+ if (!entry) {
165
+ entry = { path, routes: [] };
166
+ map.set(path, entry);
167
+ }
168
+ entry.routes.push(route);
169
+ }
170
+ pathRoutesByMethod[method] = map;
171
+ }
172
+ const methods = {};
173
+ for (const method of Object.keys(pathRoutesByMethod)) {
174
+ const pathMap = pathRoutesByMethod[method];
175
+ const sortedPaths = Object.keys(sortedRoutes);
176
+ const orderedPaths = sortedPaths.filter((p) => pathMap.has(p));
177
+ const branches = [];
178
+ const table = [];
179
+ let groupOffset = 1;
180
+ for (const path of orderedPaths) {
181
+ const entry = pathMap.get(path);
182
+ const { fragment, paramNames, groupCount } = patternToRegex(path);
183
+ const paramGroupIndices = [];
184
+ for (let i = 0; i < groupCount; i++) {
185
+ paramGroupIndices.push(groupOffset + i);
186
+ }
187
+ const sentinelIndex = groupOffset + groupCount;
188
+ branches.push(fragment + "()");
189
+ groupOffset += groupCount + 1;
190
+ table.push({
191
+ path: entry.path,
192
+ routes: entry.routes,
193
+ paramNames,
194
+ paramGroupIndices,
195
+ sentinelIndex,
196
+ });
197
+ }
198
+ if (branches.length === 0)
86
199
  continue;
87
- const params = PathPattern.match(descriptor.path, path);
88
- if (params !== null) {
89
- return { route, params };
200
+ const pattern = "^(?:" + branches.join("|") + ")\\/*$";
201
+ methods[method] = {
202
+ regex: new RegExp(pattern),
203
+ table,
204
+ };
205
+ }
206
+ return { methods };
207
+ }
208
+ function execCompiled(compiled, path) {
209
+ const match = compiled.regex.exec(path);
210
+ if (!match)
211
+ return null;
212
+ for (const entry of compiled.table) {
213
+ if (match[entry.sentinelIndex] === undefined)
214
+ continue;
215
+ const params = {};
216
+ for (let i = 0; i < entry.paramNames.length; i++) {
217
+ const val = match[entry.paramGroupIndices[i]];
218
+ if (val !== undefined) {
219
+ params[entry.paramNames[i]] = val;
220
+ }
90
221
  }
222
+ return { route: entry.routes[0], params };
91
223
  }
92
224
  return null;
93
225
  }
@@ -1 +1 @@
1
- {"version":3,"file":"RouteTree.js","sourceRoot":"","sources":["../src/RouteTree.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"RouteTree.js","sourceRoot":"","sources":["../src/RouteTree.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,23 @@
1
+ import * as Layer from "effect/Layer";
2
+ import * as FileSystem from "./FileSystem.ts";
3
+ import * as Route from "./Route.ts";
4
+ import * as System from "./System.ts";
5
+ export declare const make: (directory: string) => import("./RouteMount.ts").RouteMount.Builder<{}, [Route.Route.Route<{
6
+ method: "GET";
7
+ }, {
8
+ pathParams: {
9
+ readonly path?: string | undefined;
10
+ };
11
+ }, unknown, import("effect/ParseResult").ParseError, never>, Route.Route.Route<{
12
+ method: "GET";
13
+ format: "*";
14
+ }, {
15
+ pathParams: {
16
+ readonly path?: string | undefined;
17
+ };
18
+ }, Uint8Array<ArrayBufferLike>, System.SystemError, FileSystem.FileSystem>]>;
19
+ export declare const layer: (options: {
20
+ directory: string;
21
+ path?: string;
22
+ }) => Layer.Layer<Route.Routes, never, never>;
23
+ //# sourceMappingURL=StaticFiles.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"StaticFiles.d.ts","sourceRoot":"","sources":["../src/StaticFiles.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,KAAK,MAAM,cAAc,CAAA;AAIrC,OAAO,KAAK,UAAU,MAAM,iBAAiB,CAAA;AAG7C,OAAO,KAAK,KAAK,MAAM,YAAY,CAAA;AAGnC,OAAO,KAAK,MAAM,MAAM,aAAa,CAAA;AASrC,eAAO,MAAM,IAAI,GAAI,WAAW,MAAM;;;;;;;;;;;;;4EAmCnC,CAAA;AAEH,eAAO,MAAM,KAAK,GAAI,SAAS;IAC7B,SAAS,EAAE,MAAM,CAAA;IACjB,IAAI,CAAC,EAAE,MAAM,CAAA;CACd,4CAmBE,CAAA"}
@@ -0,0 +1,74 @@
1
+ import * as Effect from "effect/Effect";
2
+ import * as Layer from "effect/Layer";
3
+ import * as Option from "effect/Option";
4
+ import * as Schema from "effect/Schema";
5
+ import * as Entity from "./Entity.js";
6
+ import * as FileSystem from "./FileSystem.js";
7
+ import * as Mime from "./_Mime.js";
8
+ import * as Route from "./Route.js";
9
+ import * as RouteSchema from "./RouteSchema.js";
10
+ import * as RouteTree from "./RouteTree.js";
11
+ const defaultMountPath = "/assets";
12
+ const PathParamsSchema = Schema.Struct({
13
+ path: Schema.optional(Schema.String),
14
+ });
15
+ const emptyNotFound = Entity.make(new Uint8Array(0), { status: 404 });
16
+ export const make = (directory) => Route.get(RouteSchema.schemaPathParams(PathParamsSchema), Route.render(function* (ctx) {
17
+ const fs = yield* FileSystem.FileSystem;
18
+ const relativePath = typeof ctx.pathParams.path === "string" ? normalizeRelativePath(ctx.pathParams.path) : null;
19
+ if (!relativePath) {
20
+ return emptyNotFound;
21
+ }
22
+ const absolutePath = `${directory.replace(/[\\/]+$/, "")}/${relativePath}`;
23
+ const info = yield* fs.stat(absolutePath).pipe(Effect.catchAll((error) => isNotFound(error) ? Effect.succeed(null) : Effect.fail(error)));
24
+ if (info === null || info.type !== "File") {
25
+ return emptyNotFound;
26
+ }
27
+ const headers = {
28
+ "content-length": String(info.size),
29
+ "content-type": Mime.fromPath(relativePath),
30
+ };
31
+ if (Option.isSome(info.mtime)) {
32
+ headers["last-modified"] = info.mtime.value.toUTCString();
33
+ }
34
+ const bytes = yield* fs.readFile(absolutePath);
35
+ return Entity.make(bytes, { headers });
36
+ }));
37
+ export const layer = (options) => Layer.effect(Route.Routes, Effect.gen(function* () {
38
+ const existing = yield* Effect.serviceOption(Route.Routes).pipe(Effect.andThen(Option.getOrUndefined));
39
+ const trimmedMountPath = (options.path ?? defaultMountPath).trim().replace(/^\/+|\/+$/g, "");
40
+ const mountPattern = (trimmedMountPath.length > 0 ? `/${trimmedMountPath}/:path+` : "/:path+");
41
+ const staticFilesTree = Route.tree({
42
+ [mountPattern]: make(options.directory),
43
+ });
44
+ if (!existing) {
45
+ return staticFilesTree;
46
+ }
47
+ return RouteTree.merge(existing, staticFilesTree);
48
+ }));
49
+ function normalizeRelativePath(path) {
50
+ if (path.length === 0 || path.startsWith("/") || path.startsWith("\\")) {
51
+ return null;
52
+ }
53
+ const segments = path.split(/[\\/]+/);
54
+ const normalized = [];
55
+ for (const segment of segments) {
56
+ if (segment === "" || segment === ".") {
57
+ continue;
58
+ }
59
+ if (segment === ".." || segment.includes("\0")) {
60
+ return null;
61
+ }
62
+ normalized.push(segment);
63
+ }
64
+ return normalized.length > 0 ? normalized.join("/") : null;
65
+ }
66
+ function isNotFound(error) {
67
+ return (typeof error === "object" &&
68
+ error !== null &&
69
+ "_tag" in error &&
70
+ error._tag === "SystemError" &&
71
+ "reason" in error &&
72
+ error.reason === "NotFound");
73
+ }
74
+ //# sourceMappingURL=StaticFiles.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"StaticFiles.js","sourceRoot":"","sources":["../src/StaticFiles.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export declare function fromPath(path: string): string;
2
+ //# sourceMappingURL=_Mime.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"_Mime.d.ts","sourceRoot":"","sources":["../src/_Mime.ts"],"names":[],"mappings":"AA2BA,wBAAgB,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAK7C"}
package/dist/_Mime.js ADDED
@@ -0,0 +1,33 @@
1
+ const mediaTypes = {
2
+ ".avif": "image/avif",
3
+ ".bmp": "image/bmp",
4
+ ".css": "text/css",
5
+ ".csv": "text/csv",
6
+ ".gif": "image/gif",
7
+ ".html": "text/html",
8
+ ".ico": "image/x-icon",
9
+ ".js": "text/javascript",
10
+ ".jpeg": "image/jpeg",
11
+ ".jpg": "image/jpeg",
12
+ ".json": "application/json",
13
+ ".map": "application/json",
14
+ ".md": "text/markdown",
15
+ ".mjs": "text/javascript",
16
+ ".pdf": "application/pdf",
17
+ ".png": "image/png",
18
+ ".svg": "image/svg+xml",
19
+ ".txt": "text/plain",
20
+ ".wasm": "application/wasm",
21
+ ".webm": "video/webm",
22
+ ".webp": "image/webp",
23
+ ".woff": "font/woff",
24
+ ".woff2": "font/woff2",
25
+ ".xml": "application/xml",
26
+ };
27
+ export function fromPath(path) {
28
+ const dotIndex = path.lastIndexOf(".");
29
+ const extension = dotIndex === -1 ? "" : path.slice(dotIndex).toLowerCase();
30
+ const mediaType = mediaTypes[extension] ?? "application/octet-stream";
31
+ return mediaType.startsWith("text/") ? `${mediaType}; charset=utf-8` : mediaType;
32
+ }
33
+ //# sourceMappingURL=_Mime.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"_Mime.js","sourceRoot":"","sources":["../src/_Mime.ts"],"names":[],"mappings":"AAAA,MAAM,UAAU,GAA2B;IACzC,OAAO,EAAE,YAAY;IACrB,MAAM,EAAE,WAAW;IACnB,MAAM,EAAE,UAAU;IAClB,MAAM,EAAE,UAAU;IAClB,MAAM,EAAE,WAAW;IACnB,OAAO,EAAE,WAAW;IACpB,MAAM,EAAE,cAAc;IACtB,KAAK,EAAE,iBAAiB;IACxB,OAAO,EAAE,YAAY;IACrB,MAAM,EAAE,YAAY;IACpB,OAAO,EAAE,kBAAkB;IAC3B,MAAM,EAAE,kBAAkB;IAC1B,KAAK,EAAE,eAAe;IACtB,MAAM,EAAE,iBAAiB;IACzB,MAAM,EAAE,iBAAiB;IACzB,MAAM,EAAE,WAAW;IACnB,MAAM,EAAE,eAAe;IACvB,MAAM,EAAE,YAAY;IACpB,OAAO,EAAE,kBAAkB;IAC3B,OAAO,EAAE,YAAY;IACrB,OAAO,EAAE,YAAY;IACrB,OAAO,EAAE,WAAW;IACpB,QAAQ,EAAE,YAAY;IACtB,MAAM,EAAE,iBAAiB;CAC1B,CAAA;AAED,MAAM,UAAU,QAAQ,CAAC,IAAY;IACnC,MAAM,QAAQ,GAAG,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,CAAA;IACtC,MAAM,SAAS,GAAG,QAAQ,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,WAAW,EAAE,CAAA;IAC3E,MAAM,SAAS,GAAG,UAAU,CAAC,SAAS,CAAC,IAAI,0BAA0B,CAAA;IACrE,OAAO,SAAS,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,GAAG,SAAS,iBAAiB,CAAC,CAAC,CAAC,SAAS,CAAA;AAClF,CAAC"}
@@ -122,21 +122,21 @@ export function match(pattern, path) {
122
122
  if (remaining.length === 0) {
123
123
  return null;
124
124
  }
125
- params[name] = remaining.join("/");
125
+ params[name] = remaining.map(decodeURIComponent).join("/");
126
126
  return params;
127
127
  }
128
128
  if (rest.endsWith("*")) {
129
129
  const name = rest.slice(0, -1);
130
130
  const remaining = pathSegments.slice(pathIndex);
131
131
  if (remaining.length > 0) {
132
- params[name] = remaining.join("/");
132
+ params[name] = remaining.map(decodeURIComponent).join("/");
133
133
  }
134
134
  return params;
135
135
  }
136
136
  if (rest.endsWith("?")) {
137
137
  const name = rest.slice(0, -1);
138
138
  if (pathIndex < pathSegments.length) {
139
- params[name] = pathSegments[pathIndex];
139
+ params[name] = decodeURIComponent(pathSegments[pathIndex]);
140
140
  pathIndex++;
141
141
  }
142
142
  patternIndex++;
@@ -145,7 +145,7 @@ export function match(pattern, path) {
145
145
  if (pathIndex >= pathSegments.length) {
146
146
  return null;
147
147
  }
148
- params[rest] = pathSegments[pathIndex];
148
+ params[rest] = decodeURIComponent(pathSegments[pathIndex]);
149
149
  pathIndex++;
150
150
  patternIndex++;
151
151
  continue;