effect-start 0.33.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 (134) hide show
  1. package/README.md +303 -36
  2. package/dist/Entity.d.ts +3 -1
  3. package/dist/Entity.d.ts.map +1 -1
  4. package/dist/Entity.js +23 -0
  5. package/dist/Entity.js.map +1 -1
  6. package/dist/Fetch.d.ts +1 -1
  7. package/dist/Fetch.js.map +1 -1
  8. package/dist/FileRouter.d.ts +1 -1
  9. package/dist/FileRouterCodegen.d.ts.map +1 -1
  10. package/dist/FileRouterCodegen.js +10 -4
  11. package/dist/FileRouterCodegen.js.map +1 -1
  12. package/dist/Job.d.ts +94 -0
  13. package/dist/Job.d.ts.map +1 -0
  14. package/dist/Job.js +157 -0
  15. package/dist/Job.js.map +1 -0
  16. package/dist/Password.d.ts +1 -1
  17. package/dist/Route.d.ts +20 -15
  18. package/dist/Route.d.ts.map +1 -1
  19. package/dist/Route.js +12 -0
  20. package/dist/Route.js.map +1 -1
  21. package/dist/RouteBody.d.ts +7 -7
  22. package/dist/RouteBody.d.ts.map +1 -1
  23. package/dist/RouteBody.js.map +1 -1
  24. package/dist/RouteHook.d.ts +1 -1
  25. package/dist/RouteHook.d.ts.map +1 -1
  26. package/dist/RouteHook.js.map +1 -1
  27. package/dist/RouteHttp.d.ts.map +1 -1
  28. package/dist/RouteHttp.js +55 -39
  29. package/dist/RouteHttp.js.map +1 -1
  30. package/dist/RouteLink.d.ts +16 -0
  31. package/dist/RouteLink.d.ts.map +1 -0
  32. package/dist/RouteLink.js +23 -0
  33. package/dist/RouteLink.js.map +1 -0
  34. package/dist/RouteMount.d.ts +37 -31
  35. package/dist/RouteMount.d.ts.map +1 -1
  36. package/dist/RouteMount.js.map +1 -1
  37. package/dist/RouteSchema.d.ts +81 -28
  38. package/dist/RouteSchema.d.ts.map +1 -1
  39. package/dist/RouteSchema.js +56 -101
  40. package/dist/RouteSchema.js.map +1 -1
  41. package/dist/RouteSse.d.ts +1 -1
  42. package/dist/RouteSse.d.ts.map +1 -1
  43. package/dist/RouteSse.js.map +1 -1
  44. package/dist/Socket.d.ts +1 -1
  45. package/dist/Start.js +1 -1
  46. package/dist/Start.js.map +1 -1
  47. package/dist/StaticFiles.d.ts +4 -10
  48. package/dist/StaticFiles.d.ts.map +1 -1
  49. package/dist/StaticFiles.js +10 -18
  50. package/dist/StaticFiles.js.map +1 -1
  51. package/dist/System.d.ts +1 -1
  52. package/dist/_Docker.d.ts +1 -1
  53. package/dist/_HtmlScanner.d.ts +42 -0
  54. package/dist/_HtmlScanner.d.ts.map +1 -0
  55. package/dist/_HtmlScanner.js +385 -0
  56. package/dist/_HtmlScanner.js.map +1 -0
  57. package/dist/_RouteLink.d.ts +16 -0
  58. package/dist/_RouteLink.d.ts.map +1 -0
  59. package/dist/_RouteLink.js +22 -0
  60. package/dist/_RouteLink.js.map +1 -0
  61. package/dist/bun/BunRoute.d.ts +4 -6
  62. package/dist/bun/BunRoute.d.ts.map +1 -1
  63. package/dist/bun/BunRoute.js +1 -1
  64. package/dist/bun/BunRoute.js.map +1 -1
  65. package/dist/bundler/Bundle.d.ts +1 -1
  66. package/dist/bundler/BundleRoute.d.ts +3 -4
  67. package/dist/bundler/BundleRoute.d.ts.map +1 -1
  68. package/dist/bundler/BundleRoute.js +5 -11
  69. package/dist/bundler/BundleRoute.js.map +1 -1
  70. package/dist/datastar/watchers/patchElements.js +1 -1
  71. package/dist/datastar/watchers/patchElements.js.map +1 -1
  72. package/dist/experimental/CsrfProtection.d.ts +67 -0
  73. package/dist/experimental/CsrfProtection.d.ts.map +1 -0
  74. package/dist/experimental/CsrfProtection.js +100 -0
  75. package/dist/experimental/CsrfProtection.js.map +1 -0
  76. package/dist/experimental/EncryptedCookies.d.ts +1 -1
  77. package/dist/experimental/KeyValueStore.d.ts +1 -1
  78. package/dist/lint/plugin.js +4 -0
  79. package/dist/lint/plugin.js.map +1 -1
  80. package/dist/sql/SqlClient.d.ts +1 -1
  81. package/dist/studio/Studio.d.ts +1 -1
  82. package/dist/studio/Studio.d.ts.map +1 -1
  83. package/dist/studio/Studio.js +4 -10
  84. package/dist/studio/Studio.js.map +1 -1
  85. package/dist/studio/routes/errors/route.d.ts +2 -2
  86. package/dist/studio/routes/errors/route.d.ts.map +1 -1
  87. package/dist/studio/routes/errors/route.js +3 -2
  88. package/dist/studio/routes/errors/route.js.map +1 -1
  89. package/dist/studio/routes/fiberDetail.d.ts +3 -7
  90. package/dist/studio/routes/fiberDetail.d.ts.map +1 -1
  91. package/dist/studio/routes/fibers/route.d.ts +2 -2
  92. package/dist/studio/routes/layout.d.ts +3 -3
  93. package/dist/studio/routes/logs/route.d.ts +2 -2
  94. package/dist/studio/routes/logs/route.d.ts.map +1 -1
  95. package/dist/studio/routes/logs/route.js +3 -2
  96. package/dist/studio/routes/logs/route.js.map +1 -1
  97. package/dist/studio/routes/metrics/route.d.ts +2 -2
  98. package/dist/studio/routes/route.d.ts +1 -1
  99. package/dist/studio/routes/routes/route.d.ts +1 -1
  100. package/dist/studio/routes/services/route.d.ts +1 -1
  101. package/dist/studio/routes/system/route.d.ts +2 -2
  102. package/dist/studio/routes/traceDetail.d.ts +3 -7
  103. package/dist/studio/routes/traceDetail.d.ts.map +1 -1
  104. package/dist/studio/routes/traces/route.d.ts +2 -2
  105. package/dist/studio/routes/traces/route.d.ts.map +1 -1
  106. package/dist/studio/routes/traces/route.js +3 -2
  107. package/dist/studio/routes/traces/route.js.map +1 -1
  108. package/dist/studio/routes/tree.d.ts +43 -51
  109. package/dist/studio/routes/tree.d.ts.map +1 -1
  110. package/package.json +4 -3
  111. package/src/Entity.ts +34 -5
  112. package/src/Fetch.ts +1 -1
  113. package/src/FileRouterCodegen.ts +10 -4
  114. package/src/Route.ts +55 -34
  115. package/src/RouteBody.ts +15 -15
  116. package/src/RouteHook.ts +3 -3
  117. package/src/RouteHttp.ts +55 -51
  118. package/src/RouteLink.ts +56 -0
  119. package/src/RouteMount.ts +44 -37
  120. package/src/RouteSchema.ts +299 -166
  121. package/src/RouteSse.ts +3 -3
  122. package/src/Start.ts +1 -1
  123. package/src/StaticFiles.ts +17 -34
  124. package/src/_HtmlScanner.ts +415 -0
  125. package/src/bun/BunRoute.ts +11 -11
  126. package/src/bundler/BundleRoute.ts +8 -19
  127. package/src/datastar/watchers/patchElements.ts +1 -1
  128. package/src/dev.d.ts +3 -0
  129. package/src/experimental/CsrfProtection.ts +153 -0
  130. package/src/lint/plugin.js +2 -0
  131. package/src/studio/Studio.ts +4 -14
  132. package/src/studio/routes/errors/route.tsx +3 -2
  133. package/src/studio/routes/logs/route.tsx +3 -2
  134. package/src/studio/routes/traces/route.tsx +3 -2
@@ -1,5 +1,5 @@
1
1
  import * as Route from "../../Route.ts";
2
- declare const _default: 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
5
  }, {}, import("../../RouteBody.ts").RenderValue, never, never>]>;
@@ -1,5 +1,5 @@
1
1
  import * as Route from "../../../Route.ts";
2
- declare const _default: 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
5
  }, {}, string, never, Route.Routes>]>;
@@ -1,5 +1,5 @@
1
1
  import * as Route from "../../../Route.ts";
2
- declare const _default: 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
5
  }, {}, string, never, never>]>;
@@ -1,9 +1,9 @@
1
1
  import * as Stream from "effect/Stream";
2
2
  import * as Route from "../../../Route.ts";
3
- declare const _default: 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
9
  }, {}, Stream.Stream<string, never, never>, never, never>]>;
@@ -1,17 +1,13 @@
1
1
  import * as Route from "../../Route.ts";
2
- declare const _default: 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>]>;
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,9 +1,9 @@
1
1
  import * as Stream from "effect/Stream";
2
2
  import * as Route from "../../../Route.ts";
3
- declare const _default: 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
9
  }, {}, Stream.Stream<string, import("../../../sql/SqlClient.ts").SqlError, import("../../../sql/SqlClient.ts").SqlClient>, import("../../../sql/SqlClient.ts").SqlError, import("../../../sql/SqlClient.ts").SqlClient>]>;
@@ -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":";AAAA,OAAO,KAAK,MAAM,MAAM,eAAe,CAAA;AACvC,OAAO,KAAK,MAAM,MAAM,eAAe,CAAA;AACvC,OAAO,KAAK,KAAK,MAAM,mBAAmB,CAAA;AAC1C,OAAO,KAAK,IAAI,MAAM,kBAAkB,CAAA;AACxC,OAAO,KAAK,WAAW,MAAM,sBAAsB,CAAA;AACnD,OAAO,KAAK,KAAK,MAAM,mBAAoB,CAAA;AAC3C,OAAO,KAAK,MAAM,MAAM,oBAAqB,CAAA;AAE7C,MAAM,MAAM,GAAG,WAAW,CAAC,KAAK,CAAC,MAAM,CAAA;AAEvC,eAAe,KAAK,CAAC,GAAG,CACtB,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,GAAG;IACvB,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,CAAA;IACpC,MAAM,MAAM,GAAG,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,aAAa,CAAC,IAAI,EAAE,CAAA;IACxD,MAAM,QAAQ,GAAG,WAAW,CAAC,oBAAoB,CAAC,KAAK,CAAC,CAAC,WAAW,CAAC,QAAQ,EAAE,CAAC,CAAA;IAChF,MAAM,KAAK,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAA;IACrE,IAAI,KAAK,GAAG,QAAQ,CAAA;IACpB,IAAI,MAAM,EAAE,CAAC;QACX,MAAM,KAAK,GAAG,MAAM,CAAC,WAAW,EAAE,CAAA;QAClC,KAAK,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,CAAA;IACrE,CAAC;IAED,OAAO,CACL,MAAC,KAAK,CAAC,KAAK,IAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAC,QAAQ,aAC1C,gCACgB,EAAE,WAAW,EAAE,EAAE,EAAE,EACjC,KAAK,EAAC,2DAA2D,aAEjE,cAAK,KAAK,EAAC,YAAY,uBAAa,EACpC,eAAK,KAAK,EAAC,YAAY,aACrB,gBACE,IAAI,EAAC,MAAM,EACX,IAAI,EAAC,aAAa,EAClB,WAAW,EAAC,sBAAsB,EAClC,IAAI,EAAC,aAAa,kDAEH,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,EAAE,EAAE,WAAW,EAAE,MAAM,EAAE,CAAC,GAC3E,EACF,mBAAU,EAAE,EAAC,aAAa,YACvB,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAChB,iBAAQ,KAAK,EAAE,CAAC,GAAI,CACrB,CAAC,GACO,IACP,EACN,cAAK,EAAE,EAAC,kBAAkB,EAAC,KAAK,EAAC,UAAU,YACzC,KAAC,MAAM,CAAC,WAAW,IAAC,KAAK,EAAE,KAAK,GAAI,GAChC,IACD,EACP,2BAAgB,SAAS,MAAM,WAAW,GAAI,IAClC,CACf,CAAA;AACH,CAAC,CAAC,EACF,KAAK,CAAC,GAAG,CACP,MAAM,CAAC,UAAU,CAAC,WAAW,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,IAAI,CAC9C,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,UAAU,CAAC,EAC3C,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,EAAE,CACrB,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC;IAClB,MAAM,UAAU,GAAG,KAAK,CAAC,CAAC,WAAW,CAAC,cAAc,CAAC,CAAC,CAAC,OAAO,CAAC,CAAA;IAC/D,IAAI,WAAW,CAAC,aAAa,CAAC,UAAU,CAAC,EAAE,CAAC;QAC1C,OAAO,SAAS,CAAA;IAClB,CAAC;IACD,MAAM,SAAS,GAAG,IAAI,CAAC,cAAc,CACnC,KAAC,MAAM,CAAC,UAAU,IAAC,EAAE,EAAE,CAAC,CAAC,OAAO,EAAE,KAAK,EAAE,UAAU,GAAI,CACxD,CAAA;IAED,OAAO;QACL,KAAK,EAAE,yBAAyB;QAChC,IAAI,EAAE,6CAA6C,SAAS,EAAE;KAC/D,CAAA;AACH,CAAC,CAAC,CACH,EACD,MAAM,CAAC,MAAM,CAAC,CAAC,KAAK,EAA4C,EAAE,CAAC,KAAK,KAAK,SAAS,CAAC,CACxF,CACF,CACF,CAAA"}
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.33.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": {
package/src/Entity.ts CHANGED
@@ -20,7 +20,10 @@ function isBinary(v: unknown): v is Uint8Array | ArrayBuffer {
20
20
  * Header keys are guaranteed to be lowercase.
21
21
  */
22
22
  export type Headers = {
23
- [header: string]: string | null | undefined
23
+ // `set-cookie` is the only header that supports multiple values (as an array),
24
+ // since it requires separate `Set-Cookie` headers per cookie (RFC 6265).
25
+ readonly "set-cookie"?: string | ReadonlyArray<string> | null
26
+ readonly [header: string]: string | ReadonlyArray<string> | null | undefined
24
27
  }
25
28
 
26
29
  export interface Entity<T = unknown, E = never> extends Effect.Effect<Entity<T, E>, E> {
@@ -48,8 +51,8 @@ export interface Entity<T = unknown, E = never> extends Effect.Effect<Entity<T,
48
51
  : [T] extends [string | Uint8Array | ArrayBuffer]
49
52
  ? Effect.Effect<unknown, ParseResult.ParseError | E>
50
53
  : [T] extends [Values.Json]
51
- ? Effect.Effect<T, ParseResult.ParseError | E>
52
- : Effect.Effect<unknown, ParseResult.ParseError | E>
54
+ ? Effect.Effect<T, ParseResult.ParseError | E>
55
+ : Effect.Effect<unknown, ParseResult.ParseError | E>
53
56
  readonly schemaJson: <A, I, R>(
54
57
  schema: Schema.Schema<A, I, R>,
55
58
  ) => Effect.Effect<A, ParseResult.ParseError | E, R>
@@ -303,6 +306,32 @@ export function effect<A, E, R>(body: Effect.Effect<Entity<A> | A, E, R>): Entit
303
306
  return make(body) as unknown as Entity<A, E>
304
307
  }
305
308
 
309
+ function mergeSetCookie(
310
+ existing: string | ReadonlyArray<string> | null | undefined,
311
+ incoming: string | ReadonlyArray<string> | null | undefined,
312
+ ): string | ReadonlyArray<string> | undefined {
313
+ if (incoming == null) return existing ?? undefined
314
+ if (existing == null) return incoming
315
+ const a = Array.isArray(existing) ? existing : [existing]
316
+ const b = Array.isArray(incoming) ? incoming : [incoming]
317
+ return [...a, ...b]
318
+ }
319
+
320
+ export function merge<T, E>(entity: Entity<T, E>, options: Options): Entity<T, E> {
321
+ const headers: Headers = options.headers
322
+ ? {
323
+ ...entity.headers,
324
+ ...options.headers,
325
+ "set-cookie": mergeSetCookie(entity.headers["set-cookie"], options.headers["set-cookie"]),
326
+ }
327
+ : entity.headers
328
+ return make(entity.body, {
329
+ headers,
330
+ status: options.status ?? entity.status,
331
+ url: options.url ?? entity.url,
332
+ }) as Entity<T, E>
333
+ }
334
+
306
335
  export function resolve<A, E>(entity: Entity<A, E>): Effect.Effect<Entity<A, E>, E, never> {
307
336
  const body = entity.body
308
337
  if (Effect.isEffect(body)) {
@@ -322,7 +351,7 @@ export function resolve<A, E>(entity: Entity<A, E>): Effect.Effect<Entity<A, E>,
322
351
  export function type(self: Entity): string {
323
352
  const h = self.headers
324
353
  if (h["content-type"]) {
325
- return h["content-type"]
354
+ return h["content-type"] as string
326
355
  }
327
356
  const v = self.body
328
357
  if (typeof v === "string") {
@@ -337,7 +366,7 @@ export function type(self: Entity): string {
337
366
  export function length(self: Entity): number | undefined {
338
367
  const h = self.headers
339
368
  if (h["content-length"]) {
340
- return parseInt(h["content-length"], 10)
369
+ return parseInt(h["content-length"] as string, 10)
341
370
  }
342
371
  const v = self.body
343
372
  if (typeof v === "string") {
package/src/Fetch.ts CHANGED
@@ -232,7 +232,7 @@ export function followRedirects(options?: { readonly maxRedirects?: number }): M
232
232
  return entity
233
233
  }
234
234
 
235
- const location = entity.headers["location"]
235
+ const location = entity.headers["location"] as string | undefined
236
236
  if (!location) {
237
237
  return entity
238
238
  }
@@ -137,10 +137,10 @@ export function generateCode(fileRoutes: FileRouter.OrderedFileRoutes): string |
137
137
  currentPath = parentPath || "/"
138
138
  }
139
139
 
140
- // Order: route first, then layers from innermost to outermost
140
+ // Order: layers from outermost to innermost, then route
141
141
  const loaders: Array<string> = [
142
+ ...allLayers.map((layer) => `() => import(".${layer.modulePath}")`),
142
143
  `() => import(".${route.modulePath}")`,
143
- ...allLayers.reverse().map((layer) => `() => import(".${layer.modulePath}")`),
144
144
  ]
145
145
 
146
146
  entries.push({ path, loaders })
@@ -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