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
@@ -17,10 +17,10 @@ declare const _default: import("../../RouteTree.ts").RouteTree<{
17
17
  }, {}, string, import("../../bun/BunRoute.ts").BunRouteError, import("../../bun/BunServer.ts").BunServer>, Route.Route.Route<{
18
18
  method: "GET";
19
19
  format: "html";
20
- }, {}, string, import("../../sql/SqlClient.ts").SqlError, never>, Route.Route.Route<{
20
+ }, {}, string, import("../../sql/SqlClient.ts").SqlError, import("../../sql/SqlClient.ts").SqlClient>, Route.Route.Route<{
21
21
  method: "GET";
22
- format: "text";
23
- }, {}, import("effect/Stream").Stream<string, import("../../sql/SqlClient.ts").SqlError, never>, import("../../sql/SqlClient.ts").SqlError, never>];
22
+ format: "sse";
23
+ }, {}, 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>];
24
24
  "/traces/:id": [Route.Route.Route<{
25
25
  method: "*";
26
26
  bunPrefix: string;
@@ -39,7 +39,7 @@ declare const _default: import("../../RouteTree.ts").RouteTree<{
39
39
  pathParams: {
40
40
  readonly id: string;
41
41
  };
42
- }, string, import("../../sql/SqlClient.ts").SqlError, never>];
42
+ }, string, import("../../sql/SqlClient.ts").SqlError, import("../../sql/SqlClient.ts").SqlClient>];
43
43
  "/metrics": [Route.Route.Route<{
44
44
  method: "*";
45
45
  bunPrefix: string;
@@ -50,7 +50,7 @@ declare const _default: import("../../RouteTree.ts").RouteTree<{
50
50
  format: "html";
51
51
  }, {}, string, never, never>, Route.Route.Route<{
52
52
  method: "GET";
53
- format: "text";
53
+ format: "sse";
54
54
  }, {}, import("effect/Stream").Stream<string, never, never>, never, never>];
55
55
  "/logs": [Route.Route.Route<{
56
56
  method: "*";
@@ -60,9 +60,9 @@ declare const _default: import("../../RouteTree.ts").RouteTree<{
60
60
  }, {}, string, import("../../bun/BunRoute.ts").BunRouteError, import("../../bun/BunServer.ts").BunServer>, Route.Route.Route<{
61
61
  method: "GET";
62
62
  format: "html";
63
- }, {}, string, import("../../sql/SqlClient.ts").SqlError, never>, Route.Route.Route<{
63
+ }, {}, string, import("../../sql/SqlClient.ts").SqlError, import("../../sql/SqlClient.ts").SqlClient>, Route.Route.Route<{
64
64
  method: "GET";
65
- format: "text";
65
+ format: "sse";
66
66
  }, {}, import("effect/Stream").Stream<string, never, never>, never, never>];
67
67
  "/errors": [Route.Route.Route<{
68
68
  method: "*";
@@ -72,9 +72,9 @@ declare const _default: import("../../RouteTree.ts").RouteTree<{
72
72
  }, {}, string, import("../../bun/BunRoute.ts").BunRouteError, import("../../bun/BunServer.ts").BunServer>, Route.Route.Route<{
73
73
  method: "GET";
74
74
  format: "html";
75
- }, {}, string, import("../../sql/SqlClient.ts").SqlError, never>, Route.Route.Route<{
75
+ }, {}, string, import("../../sql/SqlClient.ts").SqlError, import("../../sql/SqlClient.ts").SqlClient>, Route.Route.Route<{
76
76
  method: "GET";
77
- format: "text";
77
+ format: "sse";
78
78
  }, {}, import("effect/Stream").Stream<string, never, never>, never, never>];
79
79
  "/fibers": [Route.Route.Route<{
80
80
  method: "*";
@@ -84,10 +84,10 @@ declare const _default: import("../../RouteTree.ts").RouteTree<{
84
84
  }, {}, string, import("../../bun/BunRoute.ts").BunRouteError, import("../../bun/BunServer.ts").BunServer>, Route.Route.Route<{
85
85
  method: "GET";
86
86
  format: "html";
87
- }, {}, string, import("../../sql/SqlClient.ts").SqlError, never>, Route.Route.Route<{
87
+ }, {}, string, import("../../sql/SqlClient.ts").SqlError, import("../../sql/SqlClient.ts").SqlClient>, Route.Route.Route<{
88
88
  method: "GET";
89
- format: "text";
90
- }, {}, import("effect/Stream").Stream<string, import("../../sql/SqlClient.ts").SqlError, never>, import("../../sql/SqlClient.ts").SqlError, never>];
89
+ format: "sse";
90
+ }, {}, 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>];
91
91
  "/fibers/:id": [Route.Route.Route<{
92
92
  method: "*";
93
93
  bunPrefix: string;
@@ -106,7 +106,7 @@ declare const _default: import("../../RouteTree.ts").RouteTree<{
106
106
  pathParams: {
107
107
  readonly id: string;
108
108
  };
109
- }, string, import("../../sql/SqlClient.ts").SqlError, never>];
109
+ }, string, import("../../sql/SqlClient.ts").SqlError, import("../../sql/SqlClient.ts").SqlClient>];
110
110
  "/routes": [Route.Route.Route<{
111
111
  method: "*";
112
112
  bunPrefix: string;
@@ -126,7 +126,7 @@ declare const _default: import("../../RouteTree.ts").RouteTree<{
126
126
  format: "html";
127
127
  }, {}, string, never, never>, Route.Route.Route<{
128
128
  method: "GET";
129
- format: "text";
129
+ format: "sse";
130
130
  }, {}, import("effect/Stream").Stream<string, never, never>, never, never>];
131
131
  "/services": [Route.Route.Route<{
132
132
  method: "*";
@@ -1,6 +1,7 @@
1
1
  import * as StudioStore from "../StudioStore.ts";
2
2
  export declare function groupByTraceId(spans: Array<StudioStore.StudioSpan>): Map<bigint, Array<StudioStore.StudioSpan>>;
3
3
  export declare function TraceGroup(options: {
4
+ id?: bigint;
4
5
  spans: Array<StudioStore.StudioSpan>;
5
6
  }): import("../../Html.ts").Element | null;
6
7
  export declare function TraceGroups(options: {
@@ -1 +1 @@
1
- {"version":3,"file":"Traces.d.ts","sourceRoot":"","sources":["../../../src/studio/ui/Traces.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,WAAW,MAAM,mBAAmB,CAAA;AAoNhD,wBAAgB,cAAc,CAC5B,KAAK,EAAE,KAAK,CAAC,WAAW,CAAC,UAAU,CAAC,GACnC,GAAG,CAAC,MAAM,EAAE,KAAK,CAAC,WAAW,CAAC,UAAU,CAAC,CAAC,CAW5C;AAED,wBAAgB,UAAU,CAAC,OAAO,EAAE;IAAE,KAAK,EAAE,KAAK,CAAC,WAAW,CAAC,UAAU,CAAC,CAAA;CAAE,0CAoE3E;AAED,wBAAgB,WAAW,CAAC,OAAO,EAAE;IAAE,KAAK,EAAE,KAAK,CAAC,WAAW,CAAC,UAAU,CAAC,CAAA;CAAE,mCAuB5E;AAED,wBAAgB,WAAW,CAAC,OAAO,EAAE;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,KAAK,CAAC,WAAW,CAAC,UAAU,CAAC,CAAA;CAAE,mCAgG5F"}
1
+ {"version":3,"file":"Traces.d.ts","sourceRoot":"","sources":["../../../src/studio/ui/Traces.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,WAAW,MAAM,mBAAmB,CAAA;AAgPhD,wBAAgB,cAAc,CAC5B,KAAK,EAAE,KAAK,CAAC,WAAW,CAAC,UAAU,CAAC,GACnC,GAAG,CAAC,MAAM,EAAE,KAAK,CAAC,WAAW,CAAC,UAAU,CAAC,CAAC,CAW5C;AAED,wBAAgB,UAAU,CAAC,OAAO,EAAE;IAAE,EAAE,CAAC,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,KAAK,CAAC,WAAW,CAAC,UAAU,CAAC,CAAA;CAAE,0CAoExF;AAED,wBAAgB,WAAW,CAAC,OAAO,EAAE;IAAE,KAAK,EAAE,KAAK,CAAC,WAAW,CAAC,UAAU,CAAC,CAAA;CAAE,mCAuB5E;AAED,wBAAgB,WAAW,CAAC,OAAO,EAAE;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,KAAK,CAAC,WAAW,CAAC,UAAU,CAAC,CAAA;CAAE,mCAgG5F"}
@@ -26,6 +26,18 @@ function StatusBadge(options) {
26
26
  const fg = options.status === "ok" ? "#4ade80" : options.status === "error" ? "#fca5a5" : "#fde047";
27
27
  return (_jsx("span", { style: `font-size:11px;padding:2px 8px;border-radius:4px;background:${bg};color:${fg}`, children: options.status }));
28
28
  }
29
+ function sortByStartTime(a, b) {
30
+ if (a.startTime < b.startTime)
31
+ return -1;
32
+ if (a.startTime > b.startTime)
33
+ return 1;
34
+ return 0;
35
+ }
36
+ function pickRootSpan(spans) {
37
+ const spanIds = new Set(spans.map((span) => span.spanId));
38
+ return (spans.find((span) => !span.parentSpanId || !spanIds.has(span.parentSpanId)) ??
39
+ spans.slice().sort(sortByStartTime)[0]);
40
+ }
29
41
  function buildSpanTree(spans) {
30
42
  const byId = new Map();
31
43
  const childrenOf = new Map();
@@ -46,14 +58,19 @@ function buildSpanTree(spans) {
46
58
  roots.push(s);
47
59
  }
48
60
  }
49
- const sortByStart = (a, b) => Number(a.startTime - b.startTime);
50
- roots.sort(sortByStart);
61
+ roots.sort(sortByStartTime);
51
62
  for (const children of childrenOf.values()) {
52
- children.sort(sortByStart);
63
+ children.sort(sortByStartTime);
53
64
  }
54
65
  const result = [];
55
- function walk(span, depth, isLast, ancestors) {
56
- const children = childrenOf.get(span.spanId) ?? [];
66
+ const visited = new Set();
67
+ function walk(span, depth, isLast, ancestors, lineage) {
68
+ if (lineage.has(span.spanId) || visited.has(span.spanId))
69
+ return;
70
+ const nextLineage = new Set(lineage);
71
+ nextLineage.add(span.spanId);
72
+ const children = (childrenOf.get(span.spanId) ?? []).filter((child) => !nextLineage.has(child.spanId) && !visited.has(child.spanId));
73
+ visited.add(span.spanId);
57
74
  result.push({
58
75
  span,
59
76
  depth,
@@ -62,11 +79,15 @@ function buildSpanTree(spans) {
62
79
  ancestorHasNextSibling: [...ancestors],
63
80
  });
64
81
  for (let i = 0; i < children.length; i++) {
65
- walk(children[i], depth + 1, i === children.length - 1, [...ancestors, !isLast]);
82
+ walk(children[i], depth + 1, i === children.length - 1, [...ancestors, !isLast], nextLineage);
66
83
  }
67
84
  }
68
85
  for (let i = 0; i < roots.length; i++) {
69
- walk(roots[i], 0, i === roots.length - 1, []);
86
+ walk(roots[i], 0, i === roots.length - 1, [], new Set());
87
+ }
88
+ const remaining = spans.filter((span) => !visited.has(span.spanId)).sort(sortByStartTime);
89
+ for (let i = 0; i < remaining.length; i++) {
90
+ walk(remaining[i], 0, i === remaining.length - 1, [], new Set());
70
91
  }
71
92
  return result;
72
93
  }
@@ -137,13 +158,13 @@ export function groupByTraceId(spans) {
137
158
  export function TraceGroup(options) {
138
159
  if (options.spans.length === 0)
139
160
  return null;
140
- const root = options.spans.find((s) => !s.parentSpanId) ?? options.spans[0];
141
- const traceId = root.traceId;
161
+ const root = pickRootSpan(options.spans);
162
+ const traceId = options.id ?? root.traceId;
142
163
  const totalMs = root.durationMs ?? 0;
143
164
  const rootStart = root.startTime;
144
165
  const hasError = options.spans.some((s) => s.status === "error");
145
166
  const status = hasError ? "error" : root.status;
146
- return (_jsxs("details", { class: "tl-row", children: [_jsxs("summary", { class: "tl-summary tl-cols", children: [_jsx("span", { class: "tl-cell tl-cell-status", children: _jsx("span", { style: `width:8px;height:8px;border-radius:50%;background:${statusColor(status)};display:block` }) }), _jsx("span", { class: "tl-cell tl-cell-name", children: root.name }), _jsx("span", { class: "tl-cell tl-cell-spans", children: options.spans.length }), _jsx("span", { class: "tl-cell tl-cell-dur", children: formatDuration(totalMs) }), _jsx("span", { class: "tl-cell tl-cell-id", children: String(traceId).slice(0, 12) })] }), _jsxs("div", { class: "tl-body", children: [_jsxs("div", { style: "display:flex;gap:12px;align-items:center;margin-bottom:8px", children: [_jsx("a", { href: `${StudioStore.store.prefix}/traces/${traceId}`, style: "color:#38bdf8;font-size:12px;text-decoration:none", children: "Full trace view" }), _jsx(StatusBadge, { status: status }), _jsxs("span", { style: "color:#64748b;font-size:11px", children: [options.spans.length, " span", options.spans.length !== 1 ? "s" : ""] }), _jsx("span", { style: "color:#64748b;font-size:11px;font-family:monospace", children: formatDuration(totalMs) }), _jsx("span", { style: "color:#475569;font-size:10px;font-family:monospace", children: traceId })] }), options.spans.map((s) => {
167
+ return (_jsxs("details", { id: `trace-${traceId}`, class: "tl-row", children: [_jsxs("summary", { class: "tl-summary tl-cols", children: [_jsx("span", { class: "tl-cell tl-cell-status", children: _jsx("span", { style: `width:8px;height:8px;border-radius:50%;background:${statusColor(status)};display:block` }) }), _jsx("span", { class: "tl-cell tl-cell-name", children: root.name }), _jsx("span", { class: "tl-cell tl-cell-spans", children: options.spans.length }), _jsx("span", { class: "tl-cell tl-cell-dur", children: formatDuration(totalMs) }), _jsx("span", { class: "tl-cell tl-cell-id", children: String(traceId).slice(0, 12) })] }), _jsxs("div", { class: "tl-body", children: [_jsxs("div", { style: "display:flex;gap:12px;align-items:center;margin-bottom:8px", children: [_jsx("a", { href: `${StudioStore.store.prefix}/traces/${traceId}`, style: "color:#38bdf8;font-size:12px;text-decoration:none", children: "Full trace view" }), _jsx(StatusBadge, { status: status }), _jsxs("span", { style: "color:#64748b;font-size:11px", children: [options.spans.length, " span", options.spans.length !== 1 ? "s" : ""] }), _jsx("span", { style: "color:#64748b;font-size:11px;font-family:monospace", children: formatDuration(totalMs) }), _jsx("span", { style: "color:#475569;font-size:10px;font-family:monospace", children: traceId })] }), options.spans.map((s) => {
147
168
  const offsetMs = Number(s.startTime - rootStart) / 1_000_000;
148
169
  const leftPct = totalMs > 0 ? Math.min(100, (offsetMs / totalMs) * 100) : 0;
149
170
  const widthPct = totalMs > 0
@@ -166,7 +187,7 @@ export function TraceDetail(options) {
166
187
  if (options.spans.length === 0) {
167
188
  return _jsx("div", { class: "empty", children: "Trace not found" });
168
189
  }
169
- const root = options.spans.find((s) => !s.parentSpanId) ?? options.spans[0];
190
+ const root = pickRootSpan(options.spans);
170
191
  const traceId = root.traceId;
171
192
  const totalMs = root.durationMs ?? 0;
172
193
  const rootStart = root.startTime;
@@ -1 +1 @@
1
- {"version":3,"file":"Traces.js","sourceRoot":"","sources":["../../../src/studio/ui/Traces.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"Traces.js","sourceRoot":"","sources":["../../../src/studio/ui/Traces.tsx"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "effect-start",
3
- "version": "0.30.1",
3
+ "version": "0.32.0",
4
4
  "license": "MIT",
5
5
  "files": [
6
6
  "src/",
@@ -56,7 +56,7 @@
56
56
  "bun": "./src/experimental/index.ts",
57
57
  "default": "./dist/experimental/index.js"
58
58
  },
59
- "./sql": {
59
+ "./sql": {
60
60
  "bun": "./src/sql/index.ts",
61
61
  "default": "./dist/sql/index.js"
62
62
  },
package/src/Fetch.ts CHANGED
@@ -286,7 +286,7 @@ export function retry(options: {
286
286
 
287
287
  interface SseEvent {
288
288
  data?: string | undefined
289
- type?: string
289
+ event?: string
290
290
  retry?: number
291
291
  id?: string
292
292
  }
@@ -330,7 +330,7 @@ export function sse(_options?: {
330
330
  if (line === "") {
331
331
  if (acc.dataLines.length > 0) {
332
332
  const event: SseEvent = { data: acc.dataLines.join("\n") }
333
- if (acc.eventType !== undefined) event.type = acc.eventType
333
+ if (acc.eventType !== undefined) event.event = acc.eventType
334
334
  if (acc.retryMs !== undefined) event.retry = acc.retryMs
335
335
  if (acc.lastEventId !== undefined) event.id = acc.lastEventId
336
336
  return [{ ...empty, lastEventId: acc.lastEventId }, event]
@@ -67,9 +67,7 @@ export const globalLayer =
67
67
  )
68
68
  yield* Deferred.succeed(deferred, ctx)
69
69
  yield* Effect.never
70
- }).pipe(
71
- Effect.catchAllCause((cause) => Deferred.failCause(deferred, cause)),
72
- ),
70
+ }).pipe(Effect.catchAllCause((cause) => Deferred.failCause(deferred, cause))),
73
71
  ),
74
72
  ) as Fiber.RuntimeFiber<void>
75
73
 
package/src/Html.ts CHANGED
@@ -217,9 +217,9 @@ const resolveValue = (value: HtmlValue): string => {
217
217
  if (isHtmlString(value)) return value.value
218
218
  if (Array.isArray(value)) return (value as Array<HtmlValue>).map(resolveValue).join("")
219
219
  if (typeof value === "function") return value.toString()
220
- if (typeof value === "object") return JSON.stringify(value)
221
- if (typeof value === "string") return value
222
- return String(value)
220
+ if (typeof value === "object") return escSQ(JSON.stringify(value))
221
+ if (typeof value === "string") return esc(value)
222
+ return esc(String(value))
223
223
  }
224
224
 
225
225
  export const html = (strings: TemplateStringsArray, ...values: Array<HtmlValue>): HtmlString => {
@@ -0,0 +1,130 @@
1
+ import * as Data from "effect/Data"
2
+ import * as Effect from "effect/Effect"
3
+ import * as ParseResult from "effect/ParseResult"
4
+ import * as Schema from "effect/Schema"
5
+
6
+ export class PasswordError extends Data.TaggedError("PasswordError")<{
7
+ readonly reason: "HashFailure" | "UnsupportedAlgorithm"
8
+ readonly algorithm?: string
9
+ readonly cause?: unknown
10
+ }> {}
11
+
12
+ const bunAlgorithms = ["argon2d", "argon2i", "argon2id", "bcrypt"] as const
13
+ const defaultAlgorithm = "bcrypt" as const
14
+ const defaultBcryptCost = 10
15
+
16
+ type PasswordAlgorithm = (typeof bunAlgorithms)[number]
17
+
18
+ type HashOptions = {
19
+ readonly algorithm?: PasswordAlgorithm
20
+ readonly cost?: number
21
+ readonly memoryCost?: number
22
+ readonly timeCost?: number
23
+ }
24
+
25
+ export const PasswordStored = Schema.NonEmptyString.annotations({
26
+ identifier: "PasswordStored",
27
+ description: "A stored password hash string.",
28
+ })
29
+
30
+ export type PasswordStored = typeof PasswordStored.Type
31
+
32
+ const PlainTextPassword = Schema.NonEmptyString.annotations({
33
+ identifier: "PasswordPlainText",
34
+ description: "A plain-text password that will be hashed when decoded.",
35
+ })
36
+
37
+ function makePasswordSchema(options?: HashOptions) {
38
+ return Schema.transformOrFail(PlainTextPassword, PasswordStored, {
39
+ strict: true,
40
+ decode: (input, _, ast) =>
41
+ hash(input, options).pipe(
42
+ Effect.mapError((error) => new ParseResult.Type(ast, input, formatError(error))),
43
+ ),
44
+ encode: (stored, _, ast) =>
45
+ Effect.fail(
46
+ new ParseResult.Forbidden(
47
+ ast,
48
+ stored,
49
+ "Password hashes are write-only and cannot be encoded back to plain text.",
50
+ ),
51
+ ),
52
+ }).annotations({
53
+ identifier: "Password",
54
+ description: "A write-only password schema that decodes plain text into a password hash.",
55
+ })
56
+ }
57
+
58
+ export function schemaPassword(options?: HashOptions) {
59
+ return makePasswordSchema(options)
60
+ }
61
+
62
+ export function hash(
63
+ password: string,
64
+ options?: HashOptions,
65
+ ): Effect.Effect<PasswordStored, PasswordError> {
66
+ return Effect.gen(function* () {
67
+ const algorithm = options?.algorithm ?? defaultAlgorithm
68
+
69
+ const digest = yield* Effect.tryPromise({
70
+ try: () => Bun.password.hash(password, toBunAlgorithm(options)),
71
+ catch: (cause) =>
72
+ new PasswordError({
73
+ reason: isSupportedAlgorithm(algorithm) ? "HashFailure" : "UnsupportedAlgorithm",
74
+ algorithm,
75
+ cause,
76
+ }),
77
+ })
78
+
79
+ return digest
80
+ })
81
+ }
82
+
83
+ export function verify(
84
+ password: string,
85
+ stored: PasswordStored,
86
+ ): Effect.Effect<boolean, PasswordError> {
87
+ return Effect.tryPromise({
88
+ try: () => Bun.password.verify(password, stored),
89
+ catch: (cause) =>
90
+ new PasswordError({
91
+ reason: "HashFailure",
92
+ cause,
93
+ }),
94
+ })
95
+ }
96
+
97
+ function toBunAlgorithm(
98
+ options?: HashOptions,
99
+ ): Bun.Password.AlgorithmLabel | Bun.Password.Argon2Algorithm | Bun.Password.BCryptAlgorithm {
100
+ const algorithm = options?.algorithm ?? defaultAlgorithm
101
+
102
+ switch (algorithm) {
103
+ case "bcrypt":
104
+ return {
105
+ algorithm,
106
+ cost: options?.cost ?? defaultBcryptCost,
107
+ }
108
+ case "argon2d":
109
+ case "argon2i":
110
+ case "argon2id":
111
+ return {
112
+ algorithm,
113
+ memoryCost: options?.memoryCost,
114
+ timeCost: options?.timeCost,
115
+ }
116
+ }
117
+ }
118
+
119
+ function isSupportedAlgorithm(algorithm: string): algorithm is PasswordAlgorithm {
120
+ return bunAlgorithms.includes(algorithm as PasswordAlgorithm)
121
+ }
122
+
123
+ function formatError(error: PasswordError): string {
124
+ switch (error.reason) {
125
+ case "UnsupportedAlgorithm":
126
+ return `Unsupported password hash algorithm: ${error.algorithm ?? "unknown"}`
127
+ case "HashFailure":
128
+ return `Failed to hash password with ${error.algorithm ?? "unknown"}`
129
+ }
130
+ }
package/src/Route.ts CHANGED
@@ -212,8 +212,7 @@ export const text = RouteBody.build<string, "text">({
212
212
 
213
213
  export const html = RouteBody.build<string | JSX.Children, string, "html">({
214
214
  format: "html",
215
- handle: (body) =>
216
- typeof body === "string" ? body : Html.renderToString(body as JSX.Children),
215
+ handle: (body) => (typeof body === "string" ? body : Html.renderToString(body as JSX.Children)),
217
216
  })
218
217
 
219
218
  export const json = RouteBody.build<Values.Json, "json">({
@@ -232,16 +231,15 @@ export function redirect<D extends RouteDescriptor.Any, B, I extends Route.Tuple
232
231
  ): (
233
232
  self: RouteSet.RouteSet<D, B, I>,
234
233
  ) => RouteSet.RouteSet<D, B, [...I, Route.Route<{}, {}, "", never, never>]> {
235
- const route = make<{}, {}, "">(
236
- () =>
237
- Effect.succeed(
238
- Entity.make("", {
239
- status: options?.status ?? 302,
240
- headers: {
241
- location: url instanceof URL ? url.href : url,
242
- },
243
- }),
244
- ),
234
+ const route = make<{}, {}, "">(() =>
235
+ Effect.succeed(
236
+ Entity.make("", {
237
+ status: options?.status ?? 302,
238
+ headers: {
239
+ location: url instanceof URL ? url.href : url,
240
+ },
241
+ }),
242
+ ),
245
243
  )
246
244
 
247
245
  return (self) =>
package/src/RouteBody.ts CHANGED
@@ -6,13 +6,14 @@ import * as Route from "./Route.ts"
6
6
  import * as StreamExtra from "./_StreamExtra.ts"
7
7
  import type * as Values from "./_Values.ts"
8
8
 
9
- export type Format = "text" | "html" | "json" | "bytes" | "*"
9
+ export type Format = "text" | "html" | "json" | "bytes" | "sse" | "*"
10
10
 
11
11
  const formatToContentType: Record<Format, string | undefined> = {
12
12
  text: "text/plain; charset=utf-8",
13
13
  html: "text/html; charset=utf-8",
14
14
  json: "application/json",
15
15
  bytes: "application/octet-stream",
16
+ sse: "text/event-stream",
16
17
  "*": undefined,
17
18
  }
18
19
 
@@ -24,10 +25,7 @@ type YieldContext<T> = T extends Utils.YieldWrap<Effect.Effect<any, any, infer R
24
25
 
25
26
  type Next<B, A> = (context?: Partial<B> & Record<string, unknown>) => Entity.Entity<UnwrapStream<A>>
26
27
 
27
- type HandlerReturn<A> =
28
- | A
29
- | Entity.Entity<A>
30
- | ((self: Route.RouteSet.Any) => Route.RouteSet.Any)
28
+ type HandlerReturn<A> = A | Entity.Entity<A> | ((self: Route.RouteSet.Any) => Route.RouteSet.Any)
31
29
 
32
30
  type HandlerFunction<B, A, E, R> = (
33
31
  context: Values.Simplify<B>,
@@ -80,8 +78,12 @@ export function handle<B, A, E, R>(
80
78
  if (Entity.isEntity(handler)) {
81
79
  return (_context, _next) => Effect.succeed(handler as Entity.Entity<A>)
82
80
  }
83
- return ((_context: any, _next: any) =>
84
- normalizeToEntity(handler)) as Route.Route.Handler<B, A, E, R>
81
+ return ((_context: any, _next: any) => normalizeToEntity(handler)) as Route.Route.Handler<
82
+ B,
83
+ A,
84
+ E,
85
+ R
86
+ >
85
87
  }
86
88
 
87
89
  function normalizeToEntity(value: unknown): Effect.Effect<Entity.Entity<any>> {
@@ -113,7 +115,16 @@ export interface BuildReturn<Value, F extends Format, Body = never> {
113
115
  ) => Route.RouteSet.RouteSet<
114
116
  D,
115
117
  B,
116
- [...I, Route.Route.Route<{ format: F }, {}, [Body] extends [never] ? A : Body, YieldError<Y>, YieldContext<Y>>]
118
+ [
119
+ ...I,
120
+ Route.Route.Route<
121
+ { format: F },
122
+ {},
123
+ [Body] extends [never] ? A : Body,
124
+ YieldError<Y>,
125
+ YieldContext<Y>
126
+ >,
127
+ ]
117
128
  >
118
129
 
119
130
  <
@@ -127,7 +138,11 @@ export interface BuildReturn<Value, F extends Format, Body = never> {
127
138
  handler: HandlerInput<NoInfer<D & B & Route.ExtractBindings<I> & { format: F }>, A, E, R>,
128
139
  ): (
129
140
  self: Route.RouteSet.RouteSet<D, B, I>,
130
- ) => Route.RouteSet.RouteSet<D, B, [...I, Route.Route.Route<{ format: F }, {}, [Body] extends [never] ? A : Body, E, R>]>
141
+ ) => Route.RouteSet.RouteSet<
142
+ D,
143
+ B,
144
+ [...I, Route.Route.Route<{ format: F }, {}, [Body] extends [never] ? A : Body, E, R>]
145
+ >
131
146
  }
132
147
 
133
148
  export function build<Value, F extends Format>(options: { format: F }): BuildReturn<Value, F>
@@ -154,15 +169,22 @@ export function build<Value, F extends Format>(options: {
154
169
  const wrappedHandler: Route.Route.Handler<{ format: F }, A, E, R> = (ctx, next) =>
155
170
  baseHandler(ctx as D & B & Route.ExtractBindings<I> & { format: F }, next).pipe(
156
171
  Effect.map((entity) => {
157
- const body = handleBody && !StreamExtra.isStream(entity.body) ? handleBody(entity.body) : entity.body
158
- if (body === entity.body && (entity.headers["content-type"] || contentType === undefined))
172
+ const body =
173
+ handleBody && !StreamExtra.isStream(entity.body)
174
+ ? handleBody(entity.body)
175
+ : entity.body
176
+ if (
177
+ body === entity.body &&
178
+ (entity.headers["content-type"] || contentType === undefined)
179
+ )
159
180
  return entity
160
181
  return Entity.make(body as A, {
161
182
  status: entity.status,
162
183
  url: entity.url,
163
- headers: entity.headers["content-type"] || contentType === undefined
164
- ? entity.headers
165
- : { ...entity.headers, "content-type": contentType },
184
+ headers:
185
+ entity.headers["content-type"] || contentType === undefined
186
+ ? entity.headers
187
+ : { ...entity.headers, "content-type": contentType },
166
188
  })
167
189
  }),
168
190
  )
package/src/RouteHttp.ts CHANGED
@@ -24,12 +24,12 @@ type UnboundedRouteWithMethod = Route.Route.With<{
24
24
  }>
25
25
 
26
26
  // Used to match Accept headers against available route formats.
27
- // text/* matches any text type (text/plain, text/event-stream, text/markdown, etc.)
28
27
  const formatToMediaType = {
29
28
  text: "text/*",
30
29
  html: "text/html",
31
30
  json: "application/json",
32
31
  bytes: "application/octet-stream",
32
+ sse: "text/event-stream",
33
33
  } as const
34
34
 
35
35
  // Used after content negotiation to determine which format was selected.
@@ -38,6 +38,7 @@ const mediaTypeToFormat = {
38
38
  "text/html": "html",
39
39
  "application/json": "json",
40
40
  "application/octet-stream": "bytes",
41
+ "text/event-stream": "sse",
41
42
  } as const
42
43
 
43
44
  /**
@@ -115,7 +116,7 @@ function toResponse(
115
116
  )
116
117
  }
117
118
 
118
- if (format === "text" || format === "html") {
119
+ if (format === "text" || format === "html" || format === "sse") {
119
120
  return Effect.map(
120
121
  entity.text as Effect.Effect<string, ParseResult.ParseError>,
121
122
  (text) => new Response(text, { status, headers }),
@@ -192,6 +193,10 @@ export const toWebHandlerRuntime = <R>(runtime: Runtime.Runtime<R>) => {
192
193
  }
193
194
  }
194
195
 
196
+ if (methodGroups["GET"] !== undefined && methodGroups["HEAD"] === undefined) {
197
+ methodGroups["HEAD"] = methodGroups["GET"]
198
+ }
199
+
195
200
  const allowedMethods = Object.keys(methodGroups)
196
201
  .filter((m) => methodGroups[m] !== undefined && methodGroups[m]!.length > 0)
197
202
  .join(", ")
@@ -366,9 +371,15 @@ export const toWebHandlerRuntime = <R>(runtime: Runtime.Runtime<R>) => {
366
371
  { once: true },
367
372
  )
368
373
 
374
+ const resolveForMethod =
375
+ method === "HEAD"
376
+ ? (response: Response) =>
377
+ resolve(new Response(null, { status: response.status, headers: response.headers }))
378
+ : resolve
379
+
369
380
  fiber.addObserver((exit) => {
370
381
  if (exit._tag === "Success") {
371
- resolve(exit.value)
382
+ resolveForMethod(exit.value)
372
383
  } else if (isClientAbort(exit.cause)) {
373
384
  resolve(respondError({ status: 499, message: "client closed request" }))
374
385
  } else {