effect-start 0.34.0 → 0.35.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 (127) hide show
  1. package/README.md +303 -36
  2. package/dist/Fetch.d.ts +1 -1
  3. package/dist/FileRouter.d.ts +1 -1
  4. package/dist/FileRouterCodegen.d.ts.map +1 -1
  5. package/dist/FileRouterCodegen.js +8 -2
  6. package/dist/FileRouterCodegen.js.map +1 -1
  7. package/dist/Job.d.ts +94 -0
  8. package/dist/Job.d.ts.map +1 -0
  9. package/dist/Job.js +157 -0
  10. package/dist/Job.js.map +1 -0
  11. package/dist/Password.d.ts +1 -1
  12. package/dist/Route.d.ts +20 -15
  13. package/dist/Route.d.ts.map +1 -1
  14. package/dist/Route.js +12 -0
  15. package/dist/Route.js.map +1 -1
  16. package/dist/RouteBody.d.ts +7 -7
  17. package/dist/RouteBody.d.ts.map +1 -1
  18. package/dist/RouteBody.js.map +1 -1
  19. package/dist/RouteHook.d.ts +1 -1
  20. package/dist/RouteHook.d.ts.map +1 -1
  21. package/dist/RouteHook.js.map +1 -1
  22. package/dist/RouteHttp.d.ts.map +1 -1
  23. package/dist/RouteHttp.js +10 -4
  24. package/dist/RouteHttp.js.map +1 -1
  25. package/dist/RouteLink.d.ts +16 -0
  26. package/dist/RouteLink.d.ts.map +1 -0
  27. package/dist/RouteLink.js +23 -0
  28. package/dist/RouteLink.js.map +1 -0
  29. package/dist/RouteMount.d.ts +29 -32
  30. package/dist/RouteMount.d.ts.map +1 -1
  31. package/dist/RouteMount.js.map +1 -1
  32. package/dist/RouteSchema.d.ts +81 -28
  33. package/dist/RouteSchema.d.ts.map +1 -1
  34. package/dist/RouteSchema.js +56 -101
  35. package/dist/RouteSchema.js.map +1 -1
  36. package/dist/RouteSse.d.ts +1 -1
  37. package/dist/RouteSse.d.ts.map +1 -1
  38. package/dist/RouteSse.js.map +1 -1
  39. package/dist/Socket.d.ts +1 -1
  40. package/dist/Start.js +1 -1
  41. package/dist/Start.js.map +1 -1
  42. package/dist/StaticFiles.d.ts +4 -10
  43. package/dist/StaticFiles.d.ts.map +1 -1
  44. package/dist/StaticFiles.js +3 -10
  45. package/dist/StaticFiles.js.map +1 -1
  46. package/dist/System.d.ts +1 -1
  47. package/dist/_Docker.d.ts +1 -1
  48. package/dist/_HtmlScanner.d.ts +42 -0
  49. package/dist/_HtmlScanner.d.ts.map +1 -0
  50. package/dist/_HtmlScanner.js +385 -0
  51. package/dist/_HtmlScanner.js.map +1 -0
  52. package/dist/_RouteLink.d.ts +16 -0
  53. package/dist/_RouteLink.d.ts.map +1 -0
  54. package/dist/_RouteLink.js +22 -0
  55. package/dist/_RouteLink.js.map +1 -0
  56. package/dist/bun/BunRoute.d.ts +4 -6
  57. package/dist/bun/BunRoute.d.ts.map +1 -1
  58. package/dist/bun/BunRoute.js +1 -1
  59. package/dist/bun/BunRoute.js.map +1 -1
  60. package/dist/bundler/Bundle.d.ts +1 -1
  61. package/dist/bundler/BundleRoute.d.ts +5 -6
  62. package/dist/bundler/BundleRoute.d.ts.map +1 -1
  63. package/dist/bundler/BundleRoute.js +5 -11
  64. package/dist/bundler/BundleRoute.js.map +1 -1
  65. package/dist/datastar/watchers/patchElements.js +1 -1
  66. package/dist/datastar/watchers/patchElements.js.map +1 -1
  67. package/dist/experimental/CsrfProtection.d.ts +67 -0
  68. package/dist/experimental/CsrfProtection.d.ts.map +1 -0
  69. package/dist/experimental/CsrfProtection.js +100 -0
  70. package/dist/experimental/CsrfProtection.js.map +1 -0
  71. package/dist/experimental/EncryptedCookies.d.ts +1 -1
  72. package/dist/experimental/KeyValueStore.d.ts +1 -1
  73. package/dist/lint/plugin.js +4 -0
  74. package/dist/lint/plugin.js.map +1 -1
  75. package/dist/sql/SqlClient.d.ts +1 -1
  76. package/dist/studio/Studio.d.ts +1 -1
  77. package/dist/studio/Studio.d.ts.map +1 -1
  78. package/dist/studio/Studio.js +4 -10
  79. package/dist/studio/Studio.js.map +1 -1
  80. package/dist/studio/routes/errors/route.d.ts +3 -3
  81. package/dist/studio/routes/errors/route.d.ts.map +1 -1
  82. package/dist/studio/routes/errors/route.js +3 -2
  83. package/dist/studio/routes/errors/route.js.map +1 -1
  84. package/dist/studio/routes/fiberDetail.d.ts +3 -7
  85. package/dist/studio/routes/fiberDetail.d.ts.map +1 -1
  86. package/dist/studio/routes/fibers/route.d.ts +3 -3
  87. package/dist/studio/routes/layout.d.ts +3 -3
  88. package/dist/studio/routes/logs/route.d.ts +3 -3
  89. package/dist/studio/routes/logs/route.d.ts.map +1 -1
  90. package/dist/studio/routes/logs/route.js +3 -2
  91. package/dist/studio/routes/logs/route.js.map +1 -1
  92. package/dist/studio/routes/metrics/route.d.ts +3 -3
  93. package/dist/studio/routes/route.d.ts +2 -2
  94. package/dist/studio/routes/routes/route.d.ts +2 -2
  95. package/dist/studio/routes/services/route.d.ts +2 -2
  96. package/dist/studio/routes/system/route.d.ts +3 -3
  97. package/dist/studio/routes/traceDetail.d.ts +3 -7
  98. package/dist/studio/routes/traceDetail.d.ts.map +1 -1
  99. package/dist/studio/routes/traces/route.d.ts +3 -3
  100. package/dist/studio/routes/traces/route.d.ts.map +1 -1
  101. package/dist/studio/routes/traces/route.js +3 -2
  102. package/dist/studio/routes/traces/route.js.map +1 -1
  103. package/dist/studio/routes/tree.d.ts +43 -51
  104. package/dist/studio/routes/tree.d.ts.map +1 -1
  105. package/package.json +4 -3
  106. package/src/FileRouterCodegen.ts +8 -2
  107. package/src/Route.ts +55 -34
  108. package/src/RouteBody.ts +15 -15
  109. package/src/RouteHook.ts +3 -3
  110. package/src/RouteHttp.ts +10 -4
  111. package/src/RouteLink.ts +56 -0
  112. package/src/RouteMount.ts +43 -48
  113. package/src/RouteSchema.ts +299 -166
  114. package/src/RouteSse.ts +3 -3
  115. package/src/Start.ts +1 -1
  116. package/src/StaticFiles.ts +10 -24
  117. package/src/_HtmlScanner.ts +415 -0
  118. package/src/bun/BunRoute.ts +11 -11
  119. package/src/bundler/BundleRoute.ts +8 -19
  120. package/src/datastar/watchers/patchElements.ts +1 -1
  121. package/src/dev.d.ts +3 -0
  122. package/src/experimental/CsrfProtection.ts +153 -0
  123. package/src/lint/plugin.js +2 -0
  124. package/src/studio/Studio.ts +4 -14
  125. package/src/studio/routes/errors/route.tsx +3 -2
  126. package/src/studio/routes/logs/route.tsx +3 -2
  127. package/src/studio/routes/traces/route.tsx +3 -2
@@ -1,11 +1,11 @@
1
1
  import * as Stream from "effect/Stream";
2
2
  import * as Route from "../../../Route.ts";
3
- declare const _default: Omit<import("../../../RouteMount.ts").RouteMount.Builder<{}, [Route.Route.Route<{
3
+ declare const _default: import("../../../RouteMount.ts").RouteMount.Builder<{}, [Route.Route<{
4
4
  method: "GET";
5
5
  format: "html";
6
- }, {}, string, never, never>, Route.Route.Route<{
6
+ }, {}, string, never, never>, Route.Route<{
7
7
  method: "GET";
8
8
  format: "sse";
9
- }, {}, Stream.Stream<string, never, never>, never, never>]>, "use">;
9
+ }, {}, Stream.Stream<string, never, never>, never, never>]>;
10
10
  export default _default;
11
11
  //# sourceMappingURL=route.d.ts.map
@@ -1,7 +1,7 @@
1
1
  import * as Route from "../../Route.ts";
2
- declare const _default: Omit<import("../../RouteMount.ts").RouteMount.Builder<{}, [Route.Route.Route<{
2
+ declare const _default: import("../../RouteMount.ts").RouteMount.Builder<{}, [Route.Route<{
3
3
  method: "GET";
4
4
  format: "*";
5
- }, {}, import("../../RouteBody.ts").RenderValue, never, never>]>, "use">;
5
+ }, {}, import("../../RouteBody.ts").RenderValue, never, never>]>;
6
6
  export default _default;
7
7
  //# sourceMappingURL=route.d.ts.map
@@ -1,7 +1,7 @@
1
1
  import * as Route from "../../../Route.ts";
2
- declare const _default: Omit<import("../../../RouteMount.ts").RouteMount.Builder<{}, [Route.Route.Route<{
2
+ declare const _default: import("../../../RouteMount.ts").RouteMount.Builder<{}, [Route.Route<{
3
3
  method: "GET";
4
4
  format: "html";
5
- }, {}, string, never, Route.Routes>]>, "use">;
5
+ }, {}, string, never, Route.Routes>]>;
6
6
  export default _default;
7
7
  //# sourceMappingURL=route.d.ts.map
@@ -1,7 +1,7 @@
1
1
  import * as Route from "../../../Route.ts";
2
- declare const _default: Omit<import("../../../RouteMount.ts").RouteMount.Builder<{}, [Route.Route.Route<{
2
+ declare const _default: import("../../../RouteMount.ts").RouteMount.Builder<{}, [Route.Route<{
3
3
  method: "GET";
4
4
  format: "html";
5
- }, {}, string, never, never>]>, "use">;
5
+ }, {}, string, never, never>]>;
6
6
  export default _default;
7
7
  //# sourceMappingURL=route.d.ts.map
@@ -1,11 +1,11 @@
1
1
  import * as Stream from "effect/Stream";
2
2
  import * as Route from "../../../Route.ts";
3
- declare const _default: Omit<import("../../../RouteMount.ts").RouteMount.Builder<{}, [Route.Route.Route<{
3
+ declare const _default: import("../../../RouteMount.ts").RouteMount.Builder<{}, [Route.Route<{
4
4
  method: "GET";
5
5
  format: "html";
6
- }, {}, string, never, never>, Route.Route.Route<{
6
+ }, {}, string, never, never>, Route.Route<{
7
7
  method: "GET";
8
8
  format: "sse";
9
- }, {}, Stream.Stream<string, never, never>, never, never>]>, "use">;
9
+ }, {}, Stream.Stream<string, never, never>, never, never>]>;
10
10
  export default _default;
11
11
  //# sourceMappingURL=route.d.ts.map
@@ -1,17 +1,13 @@
1
1
  import * as Route from "../../Route.ts";
2
- declare const _default: Omit<import("../../RouteMount.ts").RouteMount.Builder<{}, [Route.Route.Route<{
2
+ declare const _default: import("../../RouteMount.ts").RouteMount.Builder<{}, [Route.Route<{
3
3
  method: "GET";
4
4
  }, {
5
5
  pathParams: {
6
6
  readonly id: string;
7
7
  };
8
- }, unknown, import("effect/ParseResult").ParseError, never>, Route.Route.Route<{
8
+ }, unknown, import("effect/ParseResult").ParseError, Route.Request>, Route.Route<{
9
9
  method: "GET";
10
10
  format: "html";
11
- }, {
12
- pathParams: {
13
- readonly id: string;
14
- };
15
- }, string, import("../../sql/SqlClient.ts").SqlError, import("../../sql/SqlClient.ts").SqlClient>]>, "use">;
11
+ }, {}, string, import("../../sql/SqlClient.ts").SqlError, import("../../sql/SqlClient.ts").SqlClient>]>;
16
12
  export default _default;
17
13
  //# sourceMappingURL=traceDetail.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"traceDetail.d.ts","sourceRoot":"","sources":["../../../src/studio/routes/traceDetail.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,KAAK,MAAM,gBAAgB,CAAA;;;;;;;;;;;;;;;AAMvC,wBAqBC"}
1
+ {"version":3,"file":"traceDetail.d.ts","sourceRoot":"","sources":["../../../src/studio/routes/traceDetail.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,KAAK,MAAM,gBAAgB,CAAA;;;;;;;;;;;AAMvC,wBAqBC"}
@@ -1,11 +1,11 @@
1
1
  import * as Stream from "effect/Stream";
2
2
  import * as Route from "../../../Route.ts";
3
- declare const _default: Omit<import("../../../RouteMount.ts").RouteMount.Builder<{}, [Route.Route.Route<{
3
+ declare const _default: import("../../../RouteMount.ts").RouteMount.Builder<{}, [Route.Route<{
4
4
  method: "GET";
5
5
  format: "html";
6
- }, {}, string, import("../../../sql/SqlClient.ts").SqlError, import("../../../sql/SqlClient.ts").SqlClient>, Route.Route.Route<{
6
+ }, {}, string, import("../../../sql/SqlClient.ts").SqlError, Route.Request | import("../../../sql/SqlClient.ts").SqlClient>, Route.Route<{
7
7
  method: "GET";
8
8
  format: "sse";
9
- }, {}, Stream.Stream<string, import("../../../sql/SqlClient.ts").SqlError, import("../../../sql/SqlClient.ts").SqlClient>, import("../../../sql/SqlClient.ts").SqlError, import("../../../sql/SqlClient.ts").SqlClient>]>, "use">;
9
+ }, {}, Stream.Stream<string, import("../../../sql/SqlClient.ts").SqlError, import("../../../sql/SqlClient.ts").SqlClient>, import("../../../sql/SqlClient.ts").SqlError, import("../../../sql/SqlClient.ts").SqlClient>]>;
10
10
  export default _default;
11
11
  //# sourceMappingURL=route.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"route.d.ts","sourceRoot":"","sources":["../../../../src/studio/routes/traces/route.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,MAAM,MAAM,eAAe,CAAA;AACvC,OAAO,KAAK,KAAK,MAAM,mBAAmB,CAAA;;;;;;;;AAQ1C,wBAgEC"}
1
+ {"version":3,"file":"route.d.ts","sourceRoot":"","sources":["../../../../src/studio/routes/traces/route.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,MAAM,MAAM,eAAe,CAAA;AACvC,OAAO,KAAK,KAAK,MAAM,mBAAmB,CAAA;;;;;;;;AAQ1C,wBAiEC"}
@@ -7,8 +7,9 @@ import * as StudioStore from "../../StudioStore.js";
7
7
  import * as Shell from "../../ui/Shell.js";
8
8
  import * as Traces from "../../ui/Traces.js";
9
9
  const prefix = StudioStore.store.prefix;
10
- export default Route.get(Route.html(function* (ctx) {
11
- const url = new URL(ctx.request.url);
10
+ export default Route.get(Route.html(function* (_ctx) {
11
+ const request = yield* Route.Request;
12
+ const url = new URL(request.url);
12
13
  const search = url.searchParams.get("traceSearch") || "";
13
14
  const allSpans = StudioStore.filterOutStudioSpans(yield* StudioStore.allSpans());
14
15
  const names = Array.from(new Set(allSpans.map((s) => s.name))).sort();
@@ -1 +1 @@
1
- {"version":3,"file":"route.js","sourceRoot":"","sources":["../../../../src/studio/routes/traces/route.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"route.js","sourceRoot":"","sources":["../../../../src/studio/routes/traces/route.tsx"],"names":[],"mappings":"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"}
@@ -1,161 +1,153 @@
1
1
  import * as Route from "../../Route.ts";
2
2
  declare const _default: import("../../RouteTree.ts").RouteTree<{
3
- "/": [Route.Route.Route<{
3
+ "/": [Route.Route<{
4
4
  method: "*";
5
- }, {}, unknown, never, never>, Route.Route.Route<{
5
+ }, {}, unknown, never, never>, Route.Route<{
6
6
  method: "*";
7
7
  bunPrefix: string;
8
8
  bunLoad: () => Promise<Bun.HTMLBundle>;
9
9
  format: "html";
10
- }, {}, string, import("../../bun/BunRoute.ts").BunRouteError, import("../../bun/BunServer.ts").BunServer>, Route.Route.Route<{
10
+ }, {}, string, import("../../bun/BunRoute.ts").BunRouteError, Route.Request | import("../../bun/BunServer.ts").BunServer>, Route.Route<{
11
11
  method: "GET";
12
12
  format: "*";
13
13
  }, {}, import("../../RouteBody.ts").RenderValue, never, never>];
14
- "/traces": [Route.Route.Route<{
14
+ "/traces": [Route.Route<{
15
15
  method: "*";
16
- }, {}, unknown, never, never>, Route.Route.Route<{
16
+ }, {}, unknown, never, never>, Route.Route<{
17
17
  method: "*";
18
18
  bunPrefix: string;
19
19
  bunLoad: () => Promise<Bun.HTMLBundle>;
20
20
  format: "html";
21
- }, {}, string, import("../../bun/BunRoute.ts").BunRouteError, import("../../bun/BunServer.ts").BunServer>, Route.Route.Route<{
21
+ }, {}, string, import("../../bun/BunRoute.ts").BunRouteError, Route.Request | import("../../bun/BunServer.ts").BunServer>, Route.Route<{
22
22
  method: "GET";
23
23
  format: "html";
24
- }, {}, string, import("../../sql/SqlClient.ts").SqlError, import("../../sql/SqlClient.ts").SqlClient>, Route.Route.Route<{
24
+ }, {}, string, import("../../sql/SqlClient.ts").SqlError, Route.Request | import("../../sql/SqlClient.ts").SqlClient>, Route.Route<{
25
25
  method: "GET";
26
26
  format: "sse";
27
27
  }, {}, import("effect/Stream").Stream<string, import("../../sql/SqlClient.ts").SqlError, import("../../sql/SqlClient.ts").SqlClient>, import("../../sql/SqlClient.ts").SqlError, import("../../sql/SqlClient.ts").SqlClient>];
28
- "/traces/:id": [Route.Route.Route<{
28
+ "/traces/:id": [Route.Route<{
29
29
  method: "*";
30
- }, {}, unknown, never, never>, Route.Route.Route<{
30
+ }, {}, unknown, never, never>, Route.Route<{
31
31
  method: "*";
32
32
  bunPrefix: string;
33
33
  bunLoad: () => Promise<Bun.HTMLBundle>;
34
34
  format: "html";
35
- }, {}, string, import("../../bun/BunRoute.ts").BunRouteError, import("../../bun/BunServer.ts").BunServer>, Route.Route.Route<{
35
+ }, {}, string, import("../../bun/BunRoute.ts").BunRouteError, Route.Request | import("../../bun/BunServer.ts").BunServer>, Route.Route<{
36
36
  method: "GET";
37
37
  }, {
38
38
  pathParams: {
39
39
  readonly id: string;
40
40
  };
41
- }, unknown, import("effect/ParseResult").ParseError, never>, Route.Route.Route<{
41
+ }, unknown, import("effect/ParseResult").ParseError, Route.Request>, Route.Route<{
42
42
  method: "GET";
43
43
  format: "html";
44
- }, {
45
- pathParams: {
46
- readonly id: string;
47
- };
48
- }, string, import("../../sql/SqlClient.ts").SqlError, import("../../sql/SqlClient.ts").SqlClient>];
49
- "/metrics": [Route.Route.Route<{
44
+ }, {}, string, import("../../sql/SqlClient.ts").SqlError, import("../../sql/SqlClient.ts").SqlClient>];
45
+ "/metrics": [Route.Route<{
50
46
  method: "*";
51
- }, {}, unknown, never, never>, Route.Route.Route<{
47
+ }, {}, unknown, never, never>, Route.Route<{
52
48
  method: "*";
53
49
  bunPrefix: string;
54
50
  bunLoad: () => Promise<Bun.HTMLBundle>;
55
51
  format: "html";
56
- }, {}, string, import("../../bun/BunRoute.ts").BunRouteError, import("../../bun/BunServer.ts").BunServer>, Route.Route.Route<{
52
+ }, {}, string, import("../../bun/BunRoute.ts").BunRouteError, Route.Request | import("../../bun/BunServer.ts").BunServer>, Route.Route<{
57
53
  method: "GET";
58
54
  format: "html";
59
- }, {}, string, never, never>, Route.Route.Route<{
55
+ }, {}, string, never, never>, Route.Route<{
60
56
  method: "GET";
61
57
  format: "sse";
62
58
  }, {}, import("effect/Stream").Stream<string, never, never>, never, never>];
63
- "/logs": [Route.Route.Route<{
59
+ "/logs": [Route.Route<{
64
60
  method: "*";
65
- }, {}, unknown, never, never>, Route.Route.Route<{
61
+ }, {}, unknown, never, never>, Route.Route<{
66
62
  method: "*";
67
63
  bunPrefix: string;
68
64
  bunLoad: () => Promise<Bun.HTMLBundle>;
69
65
  format: "html";
70
- }, {}, string, import("../../bun/BunRoute.ts").BunRouteError, import("../../bun/BunServer.ts").BunServer>, Route.Route.Route<{
66
+ }, {}, string, import("../../bun/BunRoute.ts").BunRouteError, Route.Request | import("../../bun/BunServer.ts").BunServer>, Route.Route<{
71
67
  method: "GET";
72
68
  format: "html";
73
- }, {}, string, import("../../sql/SqlClient.ts").SqlError, import("../../sql/SqlClient.ts").SqlClient>, Route.Route.Route<{
69
+ }, {}, string, import("../../sql/SqlClient.ts").SqlError, Route.Request | import("../../sql/SqlClient.ts").SqlClient>, Route.Route<{
74
70
  method: "GET";
75
71
  format: "sse";
76
72
  }, {}, import("effect/Stream").Stream<string, never, never>, never, never>];
77
- "/errors": [Route.Route.Route<{
73
+ "/errors": [Route.Route<{
78
74
  method: "*";
79
- }, {}, unknown, never, never>, Route.Route.Route<{
75
+ }, {}, unknown, never, never>, Route.Route<{
80
76
  method: "*";
81
77
  bunPrefix: string;
82
78
  bunLoad: () => Promise<Bun.HTMLBundle>;
83
79
  format: "html";
84
- }, {}, string, import("../../bun/BunRoute.ts").BunRouteError, import("../../bun/BunServer.ts").BunServer>, Route.Route.Route<{
80
+ }, {}, string, import("../../bun/BunRoute.ts").BunRouteError, Route.Request | import("../../bun/BunServer.ts").BunServer>, Route.Route<{
85
81
  method: "GET";
86
82
  format: "html";
87
- }, {}, string, import("../../sql/SqlClient.ts").SqlError, import("../../sql/SqlClient.ts").SqlClient>, Route.Route.Route<{
83
+ }, {}, string, import("../../sql/SqlClient.ts").SqlError, Route.Request | import("../../sql/SqlClient.ts").SqlClient>, Route.Route<{
88
84
  method: "GET";
89
85
  format: "sse";
90
86
  }, {}, import("effect/Stream").Stream<string, never, never>, never, never>];
91
- "/fibers": [Route.Route.Route<{
87
+ "/fibers": [Route.Route<{
92
88
  method: "*";
93
- }, {}, unknown, never, never>, Route.Route.Route<{
89
+ }, {}, unknown, never, never>, Route.Route<{
94
90
  method: "*";
95
91
  bunPrefix: string;
96
92
  bunLoad: () => Promise<Bun.HTMLBundle>;
97
93
  format: "html";
98
- }, {}, string, import("../../bun/BunRoute.ts").BunRouteError, import("../../bun/BunServer.ts").BunServer>, Route.Route.Route<{
94
+ }, {}, string, import("../../bun/BunRoute.ts").BunRouteError, Route.Request | import("../../bun/BunServer.ts").BunServer>, Route.Route<{
99
95
  method: "GET";
100
96
  format: "html";
101
- }, {}, string, import("../../sql/SqlClient.ts").SqlError, import("../../sql/SqlClient.ts").SqlClient>, Route.Route.Route<{
97
+ }, {}, string, import("../../sql/SqlClient.ts").SqlError, import("../../sql/SqlClient.ts").SqlClient>, Route.Route<{
102
98
  method: "GET";
103
99
  format: "sse";
104
100
  }, {}, import("effect/Stream").Stream<string, import("../../sql/SqlClient.ts").SqlError, import("../../sql/SqlClient.ts").SqlClient>, import("../../sql/SqlClient.ts").SqlError, import("../../sql/SqlClient.ts").SqlClient>];
105
- "/fibers/:id": [Route.Route.Route<{
101
+ "/fibers/:id": [Route.Route<{
106
102
  method: "*";
107
- }, {}, unknown, never, never>, Route.Route.Route<{
103
+ }, {}, unknown, never, never>, Route.Route<{
108
104
  method: "*";
109
105
  bunPrefix: string;
110
106
  bunLoad: () => Promise<Bun.HTMLBundle>;
111
107
  format: "html";
112
- }, {}, string, import("../../bun/BunRoute.ts").BunRouteError, import("../../bun/BunServer.ts").BunServer>, Route.Route.Route<{
108
+ }, {}, string, import("../../bun/BunRoute.ts").BunRouteError, Route.Request | import("../../bun/BunServer.ts").BunServer>, Route.Route<{
113
109
  method: "GET";
114
110
  }, {
115
111
  pathParams: {
116
112
  readonly id: string;
117
113
  };
118
- }, unknown, import("effect/ParseResult").ParseError, never>, Route.Route.Route<{
114
+ }, unknown, import("effect/ParseResult").ParseError, Route.Request>, Route.Route<{
119
115
  method: "GET";
120
116
  format: "html";
121
- }, {
122
- pathParams: {
123
- readonly id: string;
124
- };
125
- }, string, import("../../sql/SqlClient.ts").SqlError, import("../../sql/SqlClient.ts").SqlClient>];
126
- "/routes": [Route.Route.Route<{
117
+ }, {}, string, import("../../sql/SqlClient.ts").SqlError, import("../../sql/SqlClient.ts").SqlClient>];
118
+ "/routes": [Route.Route<{
127
119
  method: "*";
128
- }, {}, unknown, never, never>, Route.Route.Route<{
120
+ }, {}, unknown, never, never>, Route.Route<{
129
121
  method: "*";
130
122
  bunPrefix: string;
131
123
  bunLoad: () => Promise<Bun.HTMLBundle>;
132
124
  format: "html";
133
- }, {}, string, import("../../bun/BunRoute.ts").BunRouteError, import("../../bun/BunServer.ts").BunServer>, Route.Route.Route<{
125
+ }, {}, string, import("../../bun/BunRoute.ts").BunRouteError, Route.Request | import("../../bun/BunServer.ts").BunServer>, Route.Route<{
134
126
  method: "GET";
135
127
  format: "html";
136
128
  }, {}, string, never, Route.Routes>];
137
- "/system": [Route.Route.Route<{
129
+ "/system": [Route.Route<{
138
130
  method: "*";
139
- }, {}, unknown, never, never>, Route.Route.Route<{
131
+ }, {}, unknown, never, never>, Route.Route<{
140
132
  method: "*";
141
133
  bunPrefix: string;
142
134
  bunLoad: () => Promise<Bun.HTMLBundle>;
143
135
  format: "html";
144
- }, {}, string, import("../../bun/BunRoute.ts").BunRouteError, import("../../bun/BunServer.ts").BunServer>, Route.Route.Route<{
136
+ }, {}, string, import("../../bun/BunRoute.ts").BunRouteError, Route.Request | import("../../bun/BunServer.ts").BunServer>, Route.Route<{
145
137
  method: "GET";
146
138
  format: "html";
147
- }, {}, string, never, never>, Route.Route.Route<{
139
+ }, {}, string, never, never>, Route.Route<{
148
140
  method: "GET";
149
141
  format: "sse";
150
142
  }, {}, import("effect/Stream").Stream<string, never, never>, never, never>];
151
- "/services": [Route.Route.Route<{
143
+ "/services": [Route.Route<{
152
144
  method: "*";
153
- }, {}, unknown, never, never>, Route.Route.Route<{
145
+ }, {}, unknown, never, never>, Route.Route<{
154
146
  method: "*";
155
147
  bunPrefix: string;
156
148
  bunLoad: () => Promise<Bun.HTMLBundle>;
157
149
  format: "html";
158
- }, {}, string, import("../../bun/BunRoute.ts").BunRouteError, import("../../bun/BunServer.ts").BunServer>, Route.Route.Route<{
150
+ }, {}, string, import("../../bun/BunRoute.ts").BunRouteError, Route.Request | import("../../bun/BunServer.ts").BunServer>, Route.Route<{
159
151
  method: "GET";
160
152
  format: "html";
161
153
  }, {}, string, never, never>];
@@ -1 +1 @@
1
- {"version":3,"file":"tree.d.ts","sourceRoot":"","sources":["../../../src/studio/routes/tree.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,gBAAgB,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAcvC,wBAaE"}
1
+ {"version":3,"file":"tree.d.ts","sourceRoot":"","sources":["../../../src/studio/routes/tree.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,gBAAgB,CAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAcvC,wBAaE"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "effect-start",
3
- "version": "0.34.0",
3
+ "version": "0.35.0",
4
4
  "license": "MIT",
5
5
  "files": [
6
6
  "src/",
@@ -118,6 +118,7 @@
118
118
  "bun": "./src/Unique.ts",
119
119
  "default": "./dist/Unique.js"
120
120
  },
121
+ "./dev": "./src/dev.d.ts",
121
122
  "./_*": null,
122
123
  "./assets.d.ts": "./src/assets.d.ts",
123
124
  "./jsx-runtime": {
@@ -205,11 +206,11 @@
205
206
  "postgres": "^3.4.8",
206
207
  "tailwindcss": "^4.1.18",
207
208
  "ts-morph": "^27.0.2",
208
- "typescript": "^5.9.3"
209
+ "typescript": "^6.0.2"
209
210
  },
210
211
  "peerDependencies": {
211
212
  "@libsql/client": ">=0.17.0",
212
- "effect": "^3.19.11",
213
+ "effect": "^3.21.0",
213
214
  "mssql": ">=12.2.0"
214
215
  },
215
216
  "peerDependenciesMeta": {
@@ -159,12 +159,18 @@ export function generateCode(fileRoutes: FileRouter.OrderedFileRoutes): string |
159
159
  .join(",\n")
160
160
 
161
161
  return `/**
162
- * Auto-generated by effect-start on startup and changes. Do not edit manually.
162
+ * Generated by effect-start. DO NOT EDIT.
163
163
  */
164
164
 
165
- export default {
165
+ const routes = {
166
166
  ${routeEntries},
167
167
  } satisfies import("effect-start/FileRouter").FileRoutes
168
+
169
+ export default routes
170
+
171
+ declare module "effect-start/dev" {
172
+ export interface Routes extends Omit<typeof import("./.server.ts").default, never> {}
173
+ }
168
174
  `
169
175
  }
170
176
 
package/src/Route.ts CHANGED
@@ -27,16 +27,16 @@ export namespace RouteDescriptor {
27
27
  }
28
28
  }
29
29
 
30
- export namespace RouteSet {
31
- export type RouteSet<
32
- D extends RouteDescriptor.Any = {},
33
- B = {},
34
- M extends Route.Tuple = [],
35
- > = Data<D, B, M> & {
36
- [TypeId]: typeof TypeId
37
- } & Pipeable.Pipeable &
38
- Iterable<M[number]>
30
+ export type RouteSet<
31
+ D extends RouteDescriptor.Any = {},
32
+ B = {},
33
+ M extends Route.Tuple = [],
34
+ > = RouteSet.Data<D, B, M> & {
35
+ [TypeId]: typeof TypeId
36
+ } & Pipeable.Pipeable &
37
+ Iterable<M[number]>
39
38
 
39
+ export namespace RouteSet {
40
40
  export type Data<D extends RouteDescriptor.Any = {}, B = {}, M extends Route.Tuple = []> = {
41
41
  [RouteItems]: M
42
42
  [RouteDescriptor]: D
@@ -44,7 +44,7 @@ export namespace RouteSet {
44
44
  }
45
45
 
46
46
  export type Proto = Pipeable.Pipeable &
47
- Iterable<Route.Route<any, any, any, any, any>> & {
47
+ Iterable<Route<any, any, any, any, any>> & {
48
48
  [TypeId]: typeof TypeId
49
49
  }
50
50
 
@@ -58,17 +58,17 @@ export namespace RouteSet {
58
58
  T extends Data<infer D, any, any> ? D : never
59
59
  }
60
60
 
61
- export namespace Route {
62
- export interface Route<
63
- D extends RouteDescriptor.Any = {},
64
- B = {},
65
- A = any,
66
- E = never,
67
- R = never,
68
- > extends RouteSet.RouteSet<D, {}, [Route<D, B, A, E, R>]> {
69
- readonly handler: Handler<B & D, A, E, R>
70
- }
61
+ export interface Route<
62
+ D extends RouteDescriptor.Any = {},
63
+ B = {},
64
+ A = any,
65
+ E = never,
66
+ R = never,
67
+ > extends RouteSet<D, {}, [Route<D, B, A, E, R>]> {
68
+ readonly handler: Route.Handler<B & D, A, E, R>
69
+ }
71
70
 
71
+ export namespace Route {
72
72
  export type With<D extends RouteDescriptor.Any> = Route<any, any, any, any, any> & {
73
73
  [RouteDescriptor]: D
74
74
  }
@@ -125,26 +125,26 @@ export function isRouteSet(input: unknown): input is RouteSet.Any {
125
125
  return Predicate.hasProperty(input, TypeId)
126
126
  }
127
127
 
128
- export function isRoute(input: unknown): input is Route.Route {
128
+ export function isRoute(input: unknown): input is Route {
129
129
  return isRouteSet(input) && Predicate.hasProperty(input, "handler")
130
130
  }
131
131
 
132
132
  export function set<D extends RouteDescriptor.Any = {}, B = {}, I extends Route.Tuple = []>(
133
133
  items: I = [] as unknown as I,
134
134
  descriptor: D = {} as D,
135
- ): RouteSet.RouteSet<D, B, I> {
135
+ ): RouteSet<D, B, I> {
136
136
  return Object.assign(Object.create(Proto), {
137
137
  [RouteItems]: items,
138
138
  [RouteDescriptor]: descriptor,
139
- }) as RouteSet.RouteSet<D, B, I>
139
+ }) as RouteSet<D, B, I>
140
140
  }
141
141
 
142
142
  export function make<D extends RouteDescriptor.Any, B, A, E = never, R = never>(
143
143
  handler: Route.Handler<B & D, A, E, R>,
144
144
  descriptor?: D,
145
- ): Route.Route<D, B, A, E, R> {
145
+ ): Route<D, B, A, E, R> {
146
146
  const items: any = []
147
- const route: Route.Route<D, B, A, E, R> = Object.assign(Object.create(Proto), {
147
+ const route: Route<D, B, A, E, R> = Object.assign(Object.create(Proto), {
148
148
  [RouteItems]: items,
149
149
  [RouteDescriptor]: descriptor,
150
150
  handler,
@@ -185,7 +185,7 @@ export type ExtractBindings<M extends Route.Tuple> = M extends [
185
185
  infer Head,
186
186
  ...infer Tail extends Route.Tuple,
187
187
  ]
188
- ? Head extends Route.Route<any, infer B, any, any, any>
188
+ ? Head extends Route<any, infer B, any, any, any>
189
189
  ? ShallowMerge<B, ExtractBindings<Tail>>
190
190
  : ExtractBindings<Tail>
191
191
  : {}
@@ -206,6 +206,11 @@ export * from "./RouteSchema.ts"
206
206
 
207
207
  export { del, get, head, options, patch, post, put, use } from "./RouteMount.ts"
208
208
 
209
+ export class Request extends Context.Tag("effect-start/Route/Request")<
210
+ Request,
211
+ globalThis.Request
212
+ >() {}
213
+
209
214
  export const text = RouteBody.build<string, "text">({
210
215
  format: "text",
211
216
  })
@@ -229,8 +234,8 @@ export function redirect<D extends RouteDescriptor.Any, B, I extends Route.Tuple
229
234
  url: string | URL,
230
235
  options?: { status?: 301 | 302 | 303 | 307 | 308 },
231
236
  ): (
232
- self: RouteSet.RouteSet<D, B, I>,
233
- ) => RouteSet.RouteSet<D, B, [...I, Route.Route<{}, {}, "", never, never>]> {
237
+ self: RouteSet<D, B, I>,
238
+ ) => RouteSet<D, B, [...I, Route<{}, {}, "", never, never>]> {
234
239
  const route = make<{}, {}, "">(() =>
235
240
  Effect.succeed(
236
241
  Entity.make("", {
@@ -243,7 +248,7 @@ export function redirect<D extends RouteDescriptor.Any, B, I extends Route.Tuple
243
248
  )
244
249
 
245
250
  return (self) =>
246
- set<D, B, [...I, Route.Route<{}, {}, "", never, never>]>(
251
+ set<D, B, [...I, Route<{}, {}, "", never, never>]>(
247
252
  [...items(self), route],
248
253
  descriptor(self),
249
254
  )
@@ -255,6 +260,20 @@ export function layer(routes: RouteTree.RouteMap | RouteTree.RouteTree) {
255
260
  return Layer.sync(Routes, () => (RouteTree.isRouteTree(routes) ? routes : RouteTree.make(routes)))
256
261
  }
257
262
 
263
+ export function layerMerge(routes: RouteTree.InputRouteMap | RouteTree.RouteTree) {
264
+ return Layer.effect(
265
+ Routes,
266
+ Effect.gen(function* () {
267
+ const existing = yield* Effect.serviceOption(Routes).pipe(
268
+ Effect.andThen(Option.getOrUndefined),
269
+ )
270
+ const tree = RouteTree.isRouteTree(routes) ? routes : RouteTree.make(routes)
271
+ if (!existing) return tree
272
+ return RouteTree.merge(existing, tree)
273
+ }),
274
+ )
275
+ }
276
+
258
277
  /**
259
278
  * Creates a route that short-curcits in development.
260
279
  *
@@ -262,9 +281,9 @@ export function layer(routes: RouteTree.RouteMap | RouteTree.RouteTree) {
262
281
  * we exclude them altogeteher in development.
263
282
  */
264
283
  export function devOnly<D extends RouteDescriptor.Any, B, I extends Route.Tuple>(
265
- self: RouteSet.RouteSet<D, B, I>,
266
- ): RouteSet.RouteSet<D, B, [...I, Route.Route<{ dev: true }, { dev: true }, unknown, any, any>]> {
267
- const route: Route.Route<{ dev: true }, { dev: true }, unknown, any, any> = make<
284
+ self: RouteSet<D, B, I>,
285
+ ): RouteSet<D, B, [...I, Route<{ dev: true }, { dev: true }, unknown, any, any>]> {
286
+ const route: Route<{ dev: true }, { dev: true }, unknown, any, any> = make<
268
287
  { dev: true },
269
288
  { dev: true },
270
289
  unknown,
@@ -280,12 +299,12 @@ export function devOnly<D extends RouteDescriptor.Any, B, I extends Route.Tuple>
280
299
  { dev: true },
281
300
  )
282
301
 
283
- const nextItems: [...I, Route.Route<{ dev: true }, { dev: true }, unknown, any, any>] = [
302
+ const nextItems: [...I, Route<{ dev: true }, { dev: true }, unknown, any, any>] = [
284
303
  ...items(self),
285
304
  route,
286
305
  ]
287
306
 
288
- return set<D, B, [...I, Route.Route<{ dev: true }, { dev: true }, unknown, any, any>]>(
307
+ return set<D, B, [...I, Route<{ dev: true }, { dev: true }, unknown, any, any>]>(
289
308
  nextItems,
290
309
  descriptor(self),
291
310
  )
@@ -309,3 +328,5 @@ export function lazy<T extends RouteSet.Any>(
309
328
  )
310
329
  })
311
330
  }
331
+
332
+ export { link } from "./RouteLink.ts"