effect-start 0.23.0 → 0.25.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 (356) hide show
  1. package/dist/ChildProcess.js +32 -20
  2. package/dist/Commander.js +377 -293
  3. package/dist/ContentNegotiation.js +424 -318
  4. package/dist/Cookies.js +340 -271
  5. package/dist/Development.js +85 -49
  6. package/dist/Effectify.js +22 -14
  7. package/dist/Entity.js +260 -195
  8. package/dist/Fetch.js +192 -0
  9. package/dist/FilePathPattern.js +88 -77
  10. package/dist/FileRouter.js +192 -136
  11. package/dist/FileRouterCodegen.js +262 -191
  12. package/dist/FileSystem.js +126 -64
  13. package/dist/Http.js +96 -77
  14. package/dist/PathPattern.js +311 -273
  15. package/dist/PlatformError.js +36 -21
  16. package/dist/PlatformRuntime.js +65 -40
  17. package/dist/Route.js +122 -79
  18. package/dist/RouteBody.js +83 -58
  19. package/dist/RouteError.js +46 -25
  20. package/dist/RouteHook.js +58 -34
  21. package/dist/RouteHttp.js +346 -237
  22. package/dist/RouteHttpTracer.js +86 -58
  23. package/dist/RouteMount.js +81 -58
  24. package/dist/RouteSchema.js +253 -170
  25. package/dist/RouteSse.js +87 -72
  26. package/dist/RouteTree.js +99 -73
  27. package/dist/RouteTrie.js +160 -133
  28. package/dist/SchemaExtra.js +87 -62
  29. package/dist/Socket.js +32 -21
  30. package/dist/SqlIntrospect.js +317 -268
  31. package/dist/Start.js +55 -25
  32. package/dist/StartApp.js +3 -21
  33. package/dist/StreamExtra.js +109 -74
  34. package/dist/System.js +37 -21
  35. package/dist/TuplePathPattern.js +64 -58
  36. package/dist/Unique.js +159 -120
  37. package/dist/Values.js +48 -32
  38. package/dist/bun/BunBundle.js +158 -109
  39. package/dist/bun/BunChildProcessSpawner.js +121 -82
  40. package/dist/bun/BunImportTrackerPlugin.js +85 -63
  41. package/dist/bun/BunRoute.js +135 -99
  42. package/dist/bun/BunRuntime.js +39 -29
  43. package/dist/bun/BunServer.js +268 -140
  44. package/dist/bun/BunVirtualFilesPlugin.js +47 -33
  45. package/dist/bun/_BunEnhancedResolve.js +107 -82
  46. package/dist/bun/index.js +5 -5
  47. package/dist/bundler/Bundle.js +82 -38
  48. package/dist/bundler/BundleFiles.js +140 -82
  49. package/dist/bundler/BundleRoute.js +49 -38
  50. package/dist/client/Overlay.js +29 -28
  51. package/dist/client/ScrollState.js +94 -82
  52. package/dist/client/index.js +79 -61
  53. package/dist/console/Console.js +40 -24
  54. package/dist/console/ConsoleErrors.js +189 -178
  55. package/dist/console/ConsoleLogger.js +52 -43
  56. package/dist/console/ConsoleMetrics.js +69 -58
  57. package/dist/console/ConsoleProcess.js +57 -47
  58. package/dist/console/ConsoleStore.js +56 -45
  59. package/dist/console/ConsoleTracer.js +101 -88
  60. package/dist/console/Simulation.js +714 -563
  61. package/dist/console/index.js +3 -3
  62. package/dist/console/routes/tree.js +29 -28
  63. package/dist/datastar/actions/fetch.js +514 -381
  64. package/dist/datastar/actions/peek.js +12 -12
  65. package/dist/datastar/actions/setAll.js +18 -11
  66. package/dist/datastar/actions/toggleAll.js +18 -11
  67. package/dist/datastar/attributes/attr.js +48 -47
  68. package/dist/datastar/attributes/bind.js +186 -167
  69. package/dist/datastar/attributes/class.js +51 -44
  70. package/dist/datastar/attributes/computed.js +23 -24
  71. package/dist/datastar/attributes/effect.js +9 -8
  72. package/dist/datastar/attributes/indicator.js +32 -29
  73. package/dist/datastar/attributes/init.js +26 -25
  74. package/dist/datastar/attributes/jsonSignals.js +32 -29
  75. package/dist/datastar/attributes/on.js +76 -73
  76. package/dist/datastar/attributes/onIntersect.js +51 -51
  77. package/dist/datastar/attributes/onInterval.js +30 -29
  78. package/dist/datastar/attributes/onSignalPatch.js +49 -40
  79. package/dist/datastar/attributes/ref.js +10 -9
  80. package/dist/datastar/attributes/show.js +31 -30
  81. package/dist/datastar/attributes/signals.js +17 -16
  82. package/dist/datastar/attributes/style.js +56 -49
  83. package/dist/datastar/attributes/text.js +28 -25
  84. package/dist/datastar/engine.js +1079 -933
  85. package/dist/datastar/index.js +25 -24
  86. package/dist/datastar/utils.js +203 -155
  87. package/dist/datastar/watchers/patchElements.js +459 -372
  88. package/dist/datastar/watchers/patchSignals.js +13 -13
  89. package/dist/experimental/EncryptedCookies.js +305 -189
  90. package/dist/experimental/index.js +1 -1
  91. package/dist/hyper/Hyper.js +22 -17
  92. package/dist/hyper/HyperHtml.js +138 -123
  93. package/dist/hyper/HyperNode.js +11 -9
  94. package/dist/hyper/HyperRoute.js +41 -28
  95. package/dist/hyper/html.js +27 -27
  96. package/dist/hyper/index.js +5 -5
  97. package/dist/hyper/jsx-runtime.js +11 -5
  98. package/dist/index.js +8 -8
  99. package/dist/node/NodeFileSystem.js +606 -341
  100. package/dist/node/NodeUtils.js +21 -18
  101. package/dist/sql/Sql.js +8 -0
  102. package/dist/sql/bun/index.js +134 -67
  103. package/dist/sql/index.js +1 -0
  104. package/dist/sql/libsql/index.js +156 -0
  105. package/dist/sql/mssql/docker.js +103 -60
  106. package/dist/sql/mssql/index.js +182 -101
  107. package/dist/testing/TestLogger.js +39 -29
  108. package/dist/testing/index.js +2 -2
  109. package/dist/testing/utils.js +45 -23
  110. package/dist/x/cloudflare/CloudflareTunnel.js +61 -28
  111. package/dist/x/cloudflare/index.js +1 -1
  112. package/dist/x/tailscale/TailscaleTunnel.js +86 -60
  113. package/dist/x/tailscale/index.js +1 -1
  114. package/dist/x/tailwind/TailwindPlugin.js +280 -205
  115. package/dist/x/tailwind/compile.js +185 -129
  116. package/dist/x/tailwind/plugin.js +13 -11
  117. package/package.json +1 -1
  118. package/src/Development.ts +3 -1
  119. package/src/Entity.ts +17 -0
  120. package/src/Fetch.ts +271 -0
  121. package/src/SqlIntrospect.ts +64 -70
  122. package/src/Start.ts +24 -22
  123. package/src/StartApp.ts +11 -0
  124. package/src/bun/BunServer.ts +89 -16
  125. package/src/hyper/HyperHtml.ts +0 -1
  126. package/src/sql/bun/index.ts +1 -1
  127. package/src/sql/index.ts +1 -0
  128. package/src/sql/libsql/index.ts +173 -0
  129. package/src/sql/libsql/libsql.d.ts +39 -0
  130. package/src/sql/mssql/index.ts +1 -1
  131. package/src/x/tailscale/TailscaleTunnel.ts +7 -5
  132. package/dist/BlobStore.d.ts +0 -80
  133. package/dist/BlobStore.js +0 -19
  134. package/dist/ChildProcess.d.ts +0 -60
  135. package/dist/Commander.d.ts +0 -100
  136. package/dist/ContentNegotiation.d.ts +0 -12
  137. package/dist/Cookies.d.ts +0 -47
  138. package/dist/Development.d.ts +0 -39
  139. package/dist/Effectify.d.ts +0 -209
  140. package/dist/Entity.d.ts +0 -47
  141. package/dist/FilePathPattern.d.ts +0 -29
  142. package/dist/FileRouter.d.ts +0 -56
  143. package/dist/FileRouterCodegen.d.ts +0 -18
  144. package/dist/FileRouterPattern.d.ts +0 -9
  145. package/dist/FileRouterPattern.js +0 -35
  146. package/dist/FileSystem.d.ts +0 -158
  147. package/dist/Http.d.ts +0 -37
  148. package/dist/HttpAppExtra.d.ts +0 -7
  149. package/dist/HttpAppExtra.js +0 -320
  150. package/dist/HttpUtils.d.ts +0 -3
  151. package/dist/HttpUtils.js +0 -11
  152. package/dist/PathPattern.d.ts +0 -134
  153. package/dist/PlatformError.d.ts +0 -38
  154. package/dist/PlatformRuntime.d.ts +0 -27
  155. package/dist/Route.d.ts +0 -97
  156. package/dist/RouteBody.d.ts +0 -47
  157. package/dist/RouteError.d.ts +0 -98
  158. package/dist/RouteHook.d.ts +0 -12
  159. package/dist/RouteHttp.d.ts +0 -21
  160. package/dist/RouteHttpTracer.d.ts +0 -10
  161. package/dist/RouteMount.d.ts +0 -86
  162. package/dist/RouteSchema.d.ts +0 -86
  163. package/dist/RouteSse.d.ts +0 -21
  164. package/dist/RouteTree.d.ts +0 -57
  165. package/dist/RouteTrie.d.ts +0 -20
  166. package/dist/RouterPattern.d.ts +0 -118
  167. package/dist/RouterPattern.js +0 -269
  168. package/dist/SchemaExtra.d.ts +0 -7
  169. package/dist/Socket.d.ts +0 -27
  170. package/dist/Sql.d.ts +0 -34
  171. package/dist/Sql.js +0 -5
  172. package/dist/SqlIntrospect.d.ts +0 -91
  173. package/dist/Start.d.ts +0 -44
  174. package/dist/StartApp.d.ts +0 -19
  175. package/dist/StreamExtra.d.ts +0 -28
  176. package/dist/System.d.ts +0 -7
  177. package/dist/TuplePathPattern.d.ts +0 -9
  178. package/dist/Unique.d.ts +0 -50
  179. package/dist/Values.d.ts +0 -27
  180. package/dist/bun/BunBlobStoreDisk.d.ts +0 -6
  181. package/dist/bun/BunBlobStoreDisk.js +0 -116
  182. package/dist/bun/BunBlobStoreS3.d.ts +0 -11
  183. package/dist/bun/BunBlobStoreS3.js +0 -89
  184. package/dist/bun/BunBlobWatcherDisk.d.ts +0 -6
  185. package/dist/bun/BunBlobWatcherDisk.js +0 -60
  186. package/dist/bun/BunBlobWatcherQueue.d.ts +0 -6
  187. package/dist/bun/BunBlobWatcherQueue.js +0 -17
  188. package/dist/bun/BunBundle.d.ts +0 -11
  189. package/dist/bun/BunChildProcessSpawner.d.ts +0 -3
  190. package/dist/bun/BunHttpServer.d.ts +0 -44
  191. package/dist/bun/BunHttpServer.js +0 -186
  192. package/dist/bun/BunHttpServer_web.d.ts +0 -60
  193. package/dist/bun/BunHttpServer_web.js +0 -252
  194. package/dist/bun/BunImportTrackerPlugin.d.ts +0 -13
  195. package/dist/bun/BunPlatformHttpServer.d.ts +0 -10
  196. package/dist/bun/BunPlatformHttpServer.js +0 -53
  197. package/dist/bun/BunRoute.d.ts +0 -48
  198. package/dist/bun/BunRuntime.d.ts +0 -2
  199. package/dist/bun/BunServer.d.ts +0 -40
  200. package/dist/bun/BunServerRequest.d.ts +0 -60
  201. package/dist/bun/BunServerRequest.js +0 -252
  202. package/dist/bun/BunSql.d.ts +0 -4
  203. package/dist/bun/BunSql.js +0 -81
  204. package/dist/bun/BunVirtualFilesPlugin.d.ts +0 -4
  205. package/dist/bun/_BunEnhancedResolve.d.ts +0 -45
  206. package/dist/bun/index.d.ts +0 -5
  207. package/dist/bundler/Bundle.d.ts +0 -61
  208. package/dist/bundler/BundleFiles.d.ts +0 -13
  209. package/dist/bundler/BundleHttp.d.ts +0 -45
  210. package/dist/bundler/BundleHttp.js +0 -176
  211. package/dist/bundler/BundleRoute.d.ts +0 -27
  212. package/dist/client/Overlay.d.ts +0 -2
  213. package/dist/client/ScrollState.d.ts +0 -6
  214. package/dist/client/index.d.ts +0 -6
  215. package/dist/console/Console.d.ts +0 -6
  216. package/dist/console/ConsoleErrors.d.ts +0 -3
  217. package/dist/console/ConsoleLogger.d.ts +0 -3
  218. package/dist/console/ConsoleMetrics.d.ts +0 -3
  219. package/dist/console/ConsoleProcess.d.ts +0 -3
  220. package/dist/console/ConsoleStore.d.ts +0 -144
  221. package/dist/console/ConsoleTracer.d.ts +0 -3
  222. package/dist/console/Simulation.d.ts +0 -2
  223. package/dist/console/index.d.ts +0 -3
  224. package/dist/console/routes/errors/route.d.ts +0 -10
  225. package/dist/console/routes/errors/route.js +0 -47
  226. package/dist/console/routes/fiberDetail.d.ts +0 -16
  227. package/dist/console/routes/fiberDetail.js +0 -38
  228. package/dist/console/routes/fibers/route.d.ts +0 -10
  229. package/dist/console/routes/fibers/route.js +0 -19
  230. package/dist/console/routes/git/route.d.ts +0 -11
  231. package/dist/console/routes/git/route.js +0 -33
  232. package/dist/console/routes/layout.d.ts +0 -9
  233. package/dist/console/routes/layout.js +0 -3
  234. package/dist/console/routes/logs/route.d.ts +0 -10
  235. package/dist/console/routes/logs/route.js +0 -32
  236. package/dist/console/routes/metrics/route.d.ts +0 -10
  237. package/dist/console/routes/metrics/route.js +0 -17
  238. package/dist/console/routes/route.d.ts +0 -6
  239. package/dist/console/routes/route.js +0 -5
  240. package/dist/console/routes/routes/route.d.ts +0 -6
  241. package/dist/console/routes/routes/route.js +0 -20
  242. package/dist/console/routes/services/route.d.ts +0 -6
  243. package/dist/console/routes/services/route.js +0 -12
  244. package/dist/console/routes/system/route.d.ts +0 -10
  245. package/dist/console/routes/system/route.js +0 -18
  246. package/dist/console/routes/traceDetail.d.ts +0 -16
  247. package/dist/console/routes/traceDetail.js +0 -14
  248. package/dist/console/routes/traces/route.d.ts +0 -10
  249. package/dist/console/routes/traces/route.js +0 -39
  250. package/dist/console/routes/tree.d.ts +0 -153
  251. package/dist/console/ui/Errors.d.ts +0 -4
  252. package/dist/console/ui/Errors.js +0 -15
  253. package/dist/console/ui/Fibers.d.ts +0 -24
  254. package/dist/console/ui/Fibers.js +0 -121
  255. package/dist/console/ui/Git.d.ts +0 -20
  256. package/dist/console/ui/Git.js +0 -95
  257. package/dist/console/ui/Logs.d.ts +0 -4
  258. package/dist/console/ui/Logs.js +0 -25
  259. package/dist/console/ui/Metrics.d.ts +0 -4
  260. package/dist/console/ui/Metrics.js +0 -26
  261. package/dist/console/ui/Routes.d.ts +0 -8
  262. package/dist/console/ui/Routes.js +0 -70
  263. package/dist/console/ui/Services.d.ts +0 -10
  264. package/dist/console/ui/Services.js +0 -246
  265. package/dist/console/ui/Shell.d.ts +0 -10
  266. package/dist/console/ui/Shell.js +0 -7
  267. package/dist/console/ui/System.d.ts +0 -4
  268. package/dist/console/ui/System.js +0 -35
  269. package/dist/console/ui/Traces.d.ts +0 -12
  270. package/dist/console/ui/Traces.js +0 -179
  271. package/dist/datastar/actions/fetch.d.ts +0 -30
  272. package/dist/datastar/actions/peek.d.ts +0 -1
  273. package/dist/datastar/actions/setAll.d.ts +0 -1
  274. package/dist/datastar/actions/toggleAll.d.ts +0 -1
  275. package/dist/datastar/attributes/attr.d.ts +0 -1
  276. package/dist/datastar/attributes/bind.d.ts +0 -1
  277. package/dist/datastar/attributes/class.d.ts +0 -1
  278. package/dist/datastar/attributes/computed.d.ts +0 -1
  279. package/dist/datastar/attributes/effect.d.ts +0 -1
  280. package/dist/datastar/attributes/indicator.d.ts +0 -1
  281. package/dist/datastar/attributes/init.d.ts +0 -1
  282. package/dist/datastar/attributes/jsonSignals.d.ts +0 -1
  283. package/dist/datastar/attributes/on.d.ts +0 -1
  284. package/dist/datastar/attributes/onIntersect.d.ts +0 -1
  285. package/dist/datastar/attributes/onInterval.d.ts +0 -1
  286. package/dist/datastar/attributes/onSignalPatch.d.ts +0 -1
  287. package/dist/datastar/attributes/ref.d.ts +0 -1
  288. package/dist/datastar/attributes/show.d.ts +0 -1
  289. package/dist/datastar/attributes/signals.d.ts +0 -1
  290. package/dist/datastar/attributes/style.d.ts +0 -1
  291. package/dist/datastar/attributes/text.d.ts +0 -1
  292. package/dist/datastar/engine.d.ts +0 -162
  293. package/dist/datastar/happydom.d.ts +0 -1
  294. package/dist/datastar/happydom.js +0 -8
  295. package/dist/datastar/index.d.ts +0 -24
  296. package/dist/datastar/load.d.ts +0 -24
  297. package/dist/datastar/load.js +0 -24
  298. package/dist/datastar/utils.d.ts +0 -51
  299. package/dist/datastar/watchers/patchElements.d.ts +0 -1
  300. package/dist/datastar/watchers/patchSignals.d.ts +0 -1
  301. package/dist/experimental/EncryptedCookies.d.ts +0 -48
  302. package/dist/experimental/SseHttpResponse.d.ts +0 -7
  303. package/dist/experimental/SseHttpResponse.js +0 -28
  304. package/dist/experimental/index.d.ts +0 -1
  305. package/dist/hyper/Hyper.d.ts +0 -25
  306. package/dist/hyper/HyperHtml.d.ts +0 -23
  307. package/dist/hyper/HyperHtml.test.d.ts +0 -1
  308. package/dist/hyper/HyperHtml.test.js +0 -197
  309. package/dist/hyper/HyperNode.d.ts +0 -14
  310. package/dist/hyper/HyperRoute.d.ts +0 -8
  311. package/dist/hyper/HyperRoute.test.d.ts +0 -1
  312. package/dist/hyper/HyperRoute.test.js +0 -83
  313. package/dist/hyper/html.d.ts +0 -11
  314. package/dist/hyper/index.d.ts +0 -6
  315. package/dist/hyper/jsx-runtime.d.ts +0 -7
  316. package/dist/index.d.ts +0 -8
  317. package/dist/inference_check.d.ts +0 -1
  318. package/dist/inference_check.js +0 -15
  319. package/dist/lint/plugin.d.ts +0 -86
  320. package/dist/lint/plugin.js +0 -341
  321. package/dist/middlewares/BasicAuthMiddleware.d.ts +0 -8
  322. package/dist/middlewares/BasicAuthMiddleware.js +0 -22
  323. package/dist/middlewares/index.d.ts +0 -1
  324. package/dist/middlewares/index.js +0 -1
  325. package/dist/node/Effectify.d.ts +0 -209
  326. package/dist/node/Effectify.js +0 -19
  327. package/dist/node/FileSystem.d.ts +0 -7
  328. package/dist/node/FileSystem.js +0 -420
  329. package/dist/node/NodeFileSystem.d.ts +0 -7
  330. package/dist/node/NodeUtils.d.ts +0 -2
  331. package/dist/node/PlatformError.d.ts +0 -46
  332. package/dist/node/PlatformError.js +0 -43
  333. package/dist/node/Utils.d.ts +0 -1
  334. package/dist/node/Utils.js +0 -19
  335. package/dist/repro_fail.d.ts +0 -1
  336. package/dist/repro_fail.js +0 -14
  337. package/dist/sql/bun/index.d.ts +0 -3
  338. package/dist/sql/mssql/docker.d.ts +0 -2
  339. package/dist/sql/mssql/index.d.ts +0 -21
  340. package/dist/testing/TestHttpClient.d.ts +0 -13
  341. package/dist/testing/TestHttpClient.js +0 -68
  342. package/dist/testing/TestLogger.d.ts +0 -13
  343. package/dist/testing/index.d.ts +0 -2
  344. package/dist/testing/utils.d.ts +0 -9
  345. package/dist/x/cloudflare/CloudflareTunnel.d.ts +0 -10
  346. package/dist/x/cloudflare/index.d.ts +0 -1
  347. package/dist/x/datastar/Datastar.d.ts +0 -6
  348. package/dist/x/datastar/Datastar.js +0 -47
  349. package/dist/x/datastar/index.d.ts +0 -1
  350. package/dist/x/datastar/index.js +0 -1
  351. package/dist/x/tailscale/TailscaleTunnel.d.ts +0 -15
  352. package/dist/x/tailscale/index.d.ts +0 -1
  353. package/dist/x/tailwind/TailwindPlugin.d.ts +0 -23
  354. package/dist/x/tailwind/compile.d.ts +0 -19
  355. package/dist/x/tailwind/plugin.d.ts +0 -2
  356. /package/src/{Sql.ts → sql/Sql.ts} +0 -0
@@ -1,200 +1,211 @@
1
- import * as Cause from "effect/Cause";
2
- import * as Chunk from "effect/Chunk";
3
- import * as Effect from "effect/Effect";
4
- import * as Exit from "effect/Exit";
5
- import * as FiberId from "effect/FiberId";
6
- import * as FiberRef from "effect/FiberRef";
7
- import * as HashMap from "effect/HashMap";
8
- import * as Layer from "effect/Layer";
9
- import * as Option from "effect/Option";
10
- import * as PubSub from "effect/PubSub";
11
- import * as Supervisor from "effect/Supervisor";
12
- import * as ConsoleStore from "./ConsoleStore.js";
13
- let errorId = 0;
1
+ import * as Cause from "effect/Cause"
2
+ import * as Chunk from "effect/Chunk"
3
+ import * as Effect from "effect/Effect"
4
+ import * as Exit from "effect/Exit"
5
+ import * as FiberId from "effect/FiberId"
6
+ import * as FiberRef from "effect/FiberRef"
7
+ import * as HashMap from "effect/HashMap"
8
+ import * as Layer from "effect/Layer"
9
+ import * as Option from "effect/Option"
10
+ import * as PubSub from "effect/PubSub"
11
+ import * as Supervisor from "effect/Supervisor"
12
+ import * as ConsoleStore from "./ConsoleStore.js"
13
+
14
+ let errorId = 0
15
+
14
16
  function safeSerialize(value, depth = 0) {
15
- if (depth > 4)
16
- return "<deep>";
17
- if (value === null || value === undefined)
18
- return value;
19
- if (typeof value === "bigint")
20
- return `${value}n`;
21
- if (typeof value === "function")
22
- return undefined;
23
- if (typeof value === "symbol")
24
- return value.toString();
25
- if (typeof value !== "object")
26
- return value;
27
- if (value instanceof Date)
28
- return value.toISOString();
29
- if (value instanceof Error)
30
- return value.message;
31
- if (Array.isArray(value))
32
- return value.slice(0, 20).map((v) => safeSerialize(v, depth + 1));
33
- const proto = Object.getPrototypeOf(value);
34
- if (proto !== null && proto !== Object.prototype) {
35
- if (typeof value._tag === "string") {
36
- return serializeTaggedObject(value, depth);
37
- }
38
- return `<${proto.constructor?.name ?? "object"}>`;
17
+ if (depth > 4) return "<deep>"
18
+ if (value === null || value === undefined) return value
19
+ if (typeof value === "bigint") return `${value}n`
20
+ if (typeof value === "function") return undefined
21
+ if (typeof value === "symbol") return value.toString()
22
+ if (typeof value !== "object") return value
23
+ if (value instanceof Date) return value.toISOString()
24
+ if (value instanceof Error) return value.message
25
+ if (Array.isArray(value)) return value.slice(0, 20).map((v) => safeSerialize(v, depth + 1))
26
+ const proto = Object.getPrototypeOf(value)
27
+ if (proto !== null && proto !== Object.prototype) {
28
+ if (typeof (value)._tag === "string") {
29
+ return serializeTaggedObject(value, depth)
39
30
  }
40
- return serializePlainObject(value, depth);
31
+ return `<${proto.constructor?.name ?? "object"}>`
32
+ }
33
+ return serializePlainObject(value, depth)
41
34
  }
42
- function serializePlainObject(obj, depth) {
43
- const out = {};
44
- let count = 0;
45
- for (const [k, v] of Object.entries(obj)) {
46
- if (count >= 20)
47
- break;
48
- if (typeof v === "function")
49
- continue;
50
- const serialized = safeSerialize(v, depth + 1);
51
- if (serialized !== undefined) {
52
- out[k] = serialized;
53
- count++;
54
- }
35
+
36
+ function serializePlainObject(
37
+ obj,
38
+ depth,
39
+ ) {
40
+ const out = {}
41
+ let count = 0
42
+ for (const [k, v] of Object.entries(obj)) {
43
+ if (count >= 20) break
44
+ if (typeof v === "function") continue
45
+ const serialized = safeSerialize(v, depth + 1)
46
+ if (serialized !== undefined) {
47
+ out[k] = serialized
48
+ count++
55
49
  }
56
- return out;
50
+ }
51
+ return out
57
52
  }
58
- function serializeTaggedObject(obj, depth) {
59
- const out = { _tag: obj._tag };
60
- let count = 0;
61
- for (const [k, v] of Object.entries(obj)) {
62
- if (count >= 20)
63
- break;
64
- if (k === "_tag")
65
- continue;
66
- if (typeof v === "function")
67
- continue;
68
- if (k === "stack" || k === "name")
69
- continue;
70
- const serialized = safeSerialize(v, depth + 1);
71
- if (serialized !== undefined) {
72
- out[k] = serialized;
73
- count++;
74
- }
53
+
54
+ function serializeTaggedObject(
55
+ obj,
56
+ depth,
57
+ ) {
58
+ const out = { _tag: obj._tag }
59
+ let count = 0
60
+ for (const [k, v] of Object.entries(obj)) {
61
+ if (count >= 20) break
62
+ if (k === "_tag") continue
63
+ if (typeof v === "function") continue
64
+ if (k === "stack" || k === "name") continue
65
+ const serialized = safeSerialize(v, depth + 1)
66
+ if (serialized !== undefined) {
67
+ out[k] = serialized
68
+ count++
75
69
  }
76
- return out;
70
+ }
71
+ return out
77
72
  }
73
+
78
74
  function extractTag(error) {
79
- if (error !== null &&
80
- typeof error === "object" &&
81
- "_tag" in error &&
82
- typeof error._tag === "string") {
83
- return error._tag;
84
- }
85
- return undefined;
75
+ if (
76
+ error !== null &&
77
+ typeof error === "object" &&
78
+ "_tag" in error &&
79
+ typeof (error)._tag === "string"
80
+ ) {
81
+ return (error)._tag
82
+ }
83
+ return undefined
86
84
  }
85
+
87
86
  function extractMessage(error) {
88
- if (error instanceof Error)
89
- return error.message;
90
- if (typeof error === "string")
91
- return error;
92
- const tag = extractTag(error);
93
- if (tag)
94
- return tag;
95
- try {
96
- return String(error);
97
- }
98
- catch {
99
- return "<unknown>";
100
- }
87
+ if (error instanceof Error) return error.message
88
+ if (typeof error === "string") return error
89
+ const tag = extractTag(error)
90
+ if (tag) return tag
91
+ try {
92
+ return String(error)
93
+ } catch {
94
+ return "<unknown>"
95
+ }
101
96
  }
97
+
102
98
  function extractProperties(error) {
103
- if (error === null || error === undefined || typeof error !== "object")
104
- return {};
105
- const out = {};
106
- let count = 0;
107
- for (const [k, v] of Object.entries(error)) {
108
- if (count >= 20)
109
- break;
110
- if (k === "_tag" || k === "stack" || k === "name")
111
- continue;
112
- if (typeof v === "function")
113
- continue;
114
- const serialized = safeSerialize(v, 0);
115
- if (serialized !== undefined) {
116
- out[k] = serialized;
117
- count++;
118
- }
99
+ if (error === null || error === undefined || typeof error !== "object") return {}
100
+ const out = {}
101
+ let count = 0
102
+ for (const [k, v] of Object.entries(error)) {
103
+ if (count >= 20) break
104
+ if (k === "_tag" || k === "stack" || k === "name") continue
105
+ if (typeof v === "function") continue
106
+ const serialized = safeSerialize(v, 0)
107
+ if (serialized !== undefined) {
108
+ out[k] = serialized
109
+ count++
119
110
  }
120
- return out;
111
+ }
112
+ return out
121
113
  }
122
- const spanSymbol = Symbol.for("effect/SpanAnnotation");
114
+
115
+ const spanSymbol = Symbol.for("effect/SpanAnnotation")
116
+
123
117
  function extractSpanName(error) {
124
- if (error !== null && typeof error === "object" && spanSymbol in error) {
125
- const span = error[spanSymbol];
126
- return typeof span?.name === "string" ? span.name : undefined;
127
- }
128
- return undefined;
118
+ if (error !== null && typeof error === "object" && spanSymbol in error) {
119
+ const span = (error)[spanSymbol]
120
+ return typeof span?.name === "string" ? span.name : undefined
121
+ }
122
+ return undefined
129
123
  }
124
+
130
125
  function extractDetails(cause) {
131
- const details = [];
132
- const failures = Chunk.toArray(Cause.failures(cause));
133
- for (const error of failures) {
134
- details.push({
135
- kind: "fail",
136
- tag: extractTag(error),
137
- message: extractMessage(error),
138
- properties: extractProperties(error),
139
- span: extractSpanName(error),
140
- });
141
- }
142
- const defects = Chunk.toArray(Cause.defects(cause));
143
- for (const defect of defects) {
144
- details.push({
145
- kind: "die",
146
- tag: extractTag(defect),
147
- message: extractMessage(defect),
148
- properties: extractProperties(defect),
149
- span: extractSpanName(defect),
150
- });
151
- }
152
- return details;
126
+ const details = []
127
+
128
+ const failures = Chunk.toArray(Cause.failures(cause))
129
+ for (const error of failures) {
130
+ details.push({
131
+ kind: "fail",
132
+ tag: extractTag(error),
133
+ message: extractMessage(error),
134
+ properties: extractProperties(error),
135
+ span: extractSpanName(error),
136
+ })
137
+ }
138
+
139
+ const defects = Chunk.toArray(Cause.defects(cause))
140
+ for (const defect of defects) {
141
+ details.push({
142
+ kind: "die",
143
+ tag: extractTag(defect),
144
+ message: extractMessage(defect),
145
+ properties: extractProperties(defect),
146
+ span: extractSpanName(defect),
147
+ })
148
+ }
149
+
150
+ return details
153
151
  }
152
+
154
153
  function make(store) {
155
- return new (class extends Supervisor.AbstractSupervisor {
156
- value = Effect.void;
157
- onStart(_context, _effect, parent, fiber) {
158
- const childId = FiberId.threadName(fiber.id());
159
- if (Option.isSome(parent)) {
160
- const parentId = FiberId.threadName(parent.value.id());
161
- if (childId !== parentId) {
162
- store.fiberParents.set(childId, parentId);
163
- }
164
- }
165
- const span = fiber.currentSpan;
166
- const annotations = {};
167
- const spanAnnotations = fiber.getFiberRef(FiberRef.currentTracerSpanAnnotations);
168
- HashMap.forEach(spanAnnotations, (value, key) => {
169
- annotations[key] = value;
170
- });
171
- const logAnnotations = fiber.getFiberRef(FiberRef.currentLogAnnotations);
172
- HashMap.forEach(logAnnotations, (value, key) => {
173
- annotations[key] = value;
174
- });
175
- store.fiberContexts.set(childId, {
176
- spanName: span?._tag === "Span" ? span.name : undefined,
177
- traceId: span ? span.traceId : undefined,
178
- annotations,
179
- });
154
+ return new (class extends Supervisor.AbstractSupervisor<void> {
155
+ value = Effect.void
156
+
157
+ onStart<A, E, R>(
158
+ _context: Context.Context<R>,
159
+ _effect: Effect.Effect<A, E, R>,
160
+ parent: Option.Option<Fiber.RuntimeFiber<any, any>>,
161
+ fiber: Fiber.RuntimeFiber<A, E>,
162
+ ) {
163
+ const childId = FiberId.threadName(fiber.id())
164
+ if (Option.isSome(parent)) {
165
+ const parentId = FiberId.threadName(parent.value.id())
166
+ if (childId !== parentId) {
167
+ store.fiberParents.set(childId, parentId)
180
168
  }
181
- onEnd(exit, fiber) {
182
- if (Exit.isFailure(exit) && !Cause.isInterruptedOnly(exit.cause)) {
183
- const error = {
184
- id: String(++errorId),
185
- date: new Date(),
186
- fiberId: FiberId.threadName(fiber.id()),
187
- interrupted: Cause.isInterrupted(exit.cause),
188
- prettyPrint: Cause.pretty(exit.cause, { renderErrorCause: true }),
189
- details: extractDetails(exit.cause),
190
- };
191
- store.errors.push(error);
192
- Effect.runSync(PubSub.publish(store.events, { _tag: "Error", error }));
193
- }
169
+ }
170
+
171
+ const span = fiber.currentSpan
172
+ const annotations: Record<string, unknown> = {}
173
+ const spanAnnotations = fiber.getFiberRef(FiberRef.currentTracerSpanAnnotations)
174
+ HashMap.forEach(spanAnnotations, (value, key) => {
175
+ annotations[key] = value
176
+ })
177
+ const logAnnotations = fiber.getFiberRef(FiberRef.currentLogAnnotations)
178
+ HashMap.forEach(logAnnotations, (value, key) => {
179
+ annotations[key] = value
180
+ })
181
+
182
+ store.fiberContexts.set(childId, {
183
+ spanName: span?._tag === "Span" ? span.name : undefined,
184
+ traceId: span ? span.traceId : undefined,
185
+ annotations,
186
+ })
187
+ }
188
+
189
+ onEnd<A, E>(exit: Exit.Exit<A, E>, fiber: Fiber.RuntimeFiber<A, E>) {
190
+ if (Exit.isFailure(exit) && !Cause.isInterruptedOnly(exit.cause)) {
191
+ const error: ConsoleStore.ConsoleError = {
192
+ id: String(++errorId),
193
+ date: new Date(),
194
+ fiberId: FiberId.threadName(fiber.id()),
195
+ interrupted: Cause.isInterrupted(exit.cause),
196
+ prettyPrint: Cause.pretty(exit.cause, { renderErrorCause: true }),
197
+ details: extractDetails(exit.cause),
194
198
  }
195
- })();
199
+ store.errors.push(error)
200
+ Effect.runSync(PubSub.publish(store.events, { _tag: "Error", error }))
201
+ }
202
+ }
203
+ })()
196
204
  }
197
- export const layer = Layer.unwrapEffect(Effect.gen(function* () {
198
- const store = yield* ConsoleStore.ConsoleStore;
199
- return Supervisor.addSupervisor(make(store));
200
- }));
205
+
206
+ export const layer = Layer.unwrapEffect(
207
+ Effect.gen(function* () {
208
+ const store = yield* ConsoleStore.ConsoleStore
209
+ return Supervisor.addSupervisor(make(store))
210
+ }),
211
+ )
@@ -1,47 +1,56 @@
1
- import * as Cause from "effect/Cause";
2
- import * as Effect from "effect/Effect";
3
- import * as FiberId from "effect/FiberId";
4
- import * as FiberRef from "effect/FiberRef";
5
- import * as HashMap from "effect/HashMap";
6
- import * as HashSet from "effect/HashSet";
7
- import * as Layer from "effect/Layer";
8
- import * as List from "effect/List";
9
- import * as Logger from "effect/Logger";
10
- import * as PubSub from "effect/PubSub";
11
- import * as ConsoleStore from "./ConsoleStore.js";
12
- let logId = 0;
13
- export const layer = Layer.effectDiscard(Effect.gen(function* () {
14
- const store = yield* ConsoleStore.ConsoleStore;
15
- const logger = Logger.make(({ message, logLevel, cause, fiberId, spans, annotations, date }) => {
1
+ import * as Cause from "effect/Cause"
2
+ import * as Effect from "effect/Effect"
3
+ import * as FiberId from "effect/FiberId"
4
+ import * as FiberRef from "effect/FiberRef"
5
+ import * as HashMap from "effect/HashMap"
6
+ import * as HashSet from "effect/HashSet"
7
+ import * as Layer from "effect/Layer"
8
+ import * as List from "effect/List"
9
+ import * as Logger from "effect/Logger"
10
+ import * as PubSub from "effect/PubSub"
11
+ import * as ConsoleStore from "./ConsoleStore.js"
12
+
13
+ let logId = 0
14
+
15
+ export const layer = Layer.effectDiscard(
16
+ Effect.gen(function* () {
17
+ const store = yield* ConsoleStore.ConsoleStore
18
+
19
+ const logger = Logger.make(
20
+ ({ message, logLevel, cause, fiberId, spans, annotations, date }) => {
16
21
  const levelMap = {
17
- Debug: "DEBUG",
18
- Info: "INFO",
19
- Warning: "WARNING",
20
- Error: "ERROR",
21
- Fatal: "FATAL",
22
- };
23
- const level = levelMap[logLevel._tag] ?? "INFO";
22
+ Debug: "DEBUG",
23
+ Info: "INFO",
24
+ Warning: "WARNING",
25
+ Error: "ERROR",
26
+ Fatal: "FATAL",
27
+ }
28
+ const level = levelMap[logLevel._tag] ?? "INFO"
24
29
  const causeStr = !Cause.isEmpty(cause)
25
- ? Cause.pretty(cause, { renderErrorCause: true })
26
- : undefined;
27
- const spanNames = [];
28
- List.forEach(spans, (s) => spanNames.push(s.label));
29
- const ann = {};
30
+ ? Cause.pretty(cause, { renderErrorCause: true })
31
+ : undefined
32
+ const spanNames = []
33
+ List.forEach(spans, (s) => spanNames.push(s.label))
34
+ const ann = {}
30
35
  HashMap.forEach(annotations, (v, k) => {
31
- ann[k] = v;
32
- });
36
+ ann[k] = v
37
+ })
38
+
33
39
  const log = {
34
- id: String(++logId),
35
- date,
36
- level,
37
- message: String(message),
38
- fiberId: FiberId.threadName(fiberId),
39
- cause: causeStr,
40
- spans: spanNames,
41
- annotations: ann,
42
- };
43
- store.logs.push(log);
44
- Effect.runSync(PubSub.publish(store.events, { _tag: "Log", log }));
45
- });
46
- yield* FiberRef.update(FiberRef.currentLoggers, (loggers) => HashSet.add(loggers, logger));
47
- }));
40
+ id: String(++logId),
41
+ date,
42
+ level,
43
+ message: String(message),
44
+ fiberId: FiberId.threadName(fiberId),
45
+ cause: causeStr,
46
+ spans: spanNames,
47
+ annotations: ann,
48
+ }
49
+ store.logs.push(log)
50
+ Effect.runSync(PubSub.publish(store.events, { _tag: "Log", log }))
51
+ },
52
+ )
53
+
54
+ yield* FiberRef.update(FiberRef.currentLoggers, (loggers) => HashSet.add(loggers, logger))
55
+ }),
56
+ )
@@ -1,61 +1,72 @@
1
- import * as Effect from "effect/Effect";
2
- import * as Layer from "effect/Layer";
3
- import * as Metric from "effect/Metric";
4
- import * as MetricKeyType from "effect/MetricKeyType";
5
- import * as PubSub from "effect/PubSub";
6
- import * as Schedule from "effect/Schedule";
7
- import * as ConsoleStore from "./ConsoleStore.js";
8
- export const layer = Layer.scopedDiscard(Effect.gen(function* () {
9
- const store = yield* ConsoleStore.ConsoleStore;
10
- yield* Effect.forkScoped(Effect.schedule(Effect.sync(() => {
11
- const pairs = Metric.unsafeSnapshot();
12
- const snapshots = [];
13
- for (const pair of pairs) {
14
- const key = pair.metricKey;
15
- const state = pair.metricState;
16
- let type = "counter";
17
- let value = 0;
1
+ import * as Effect from "effect/Effect"
2
+ import * as Layer from "effect/Layer"
3
+ import * as Metric from "effect/Metric"
4
+ import * as MetricKeyType from "effect/MetricKeyType"
5
+ import * as PubSub from "effect/PubSub"
6
+ import * as Schedule from "effect/Schedule"
7
+ import * as ConsoleStore from "./ConsoleStore.js"
8
+
9
+ export const layer = Layer.scopedDiscard(
10
+ Effect.gen(function* () {
11
+ const store = yield* ConsoleStore.ConsoleStore
12
+
13
+ yield* Effect.forkScoped(
14
+ Effect.schedule(
15
+ Effect.sync(() => {
16
+ const pairs = Metric.unsafeSnapshot()
17
+ const snapshots = []
18
+
19
+ for (const pair of pairs) {
20
+ const key = pair.metricKey
21
+ const state = pair.metricState
22
+ let type = "counter"
23
+ let value = 0
24
+
18
25
  if (MetricKeyType.CounterKeyTypeTypeId in key.keyType) {
19
- type = "counter";
20
- value = state.count;
21
- }
22
- else if (MetricKeyType.GaugeKeyTypeTypeId in key.keyType) {
23
- type = "gauge";
24
- value = state.value;
25
- }
26
- else if (MetricKeyType.HistogramKeyTypeTypeId in key.keyType) {
27
- type = "histogram";
28
- value = {
29
- buckets: state.buckets,
30
- count: state.count,
31
- sum: state.sum,
32
- min: state.min,
33
- max: state.max,
34
- };
35
- }
36
- else if (MetricKeyType.FrequencyKeyTypeTypeId in key.keyType) {
37
- type = "frequency";
38
- value = Object.fromEntries(state.occurrences);
39
- }
40
- else if (MetricKeyType.SummaryKeyTypeTypeId in key.keyType) {
41
- type = "summary";
42
- value = {
43
- quantiles: state.quantiles,
44
- count: state.count,
45
- sum: state.sum,
46
- min: state.min,
47
- max: state.max,
48
- };
26
+ type = "counter"
27
+ value = state.count
28
+ } else if (MetricKeyType.GaugeKeyTypeTypeId in key.keyType) {
29
+ type = "gauge"
30
+ value = state.value
31
+ } else if (MetricKeyType.HistogramKeyTypeTypeId in key.keyType) {
32
+ type = "histogram"
33
+ value = {
34
+ buckets: state.buckets,
35
+ count: state.count,
36
+ sum: state.sum,
37
+ min: state.min,
38
+ max: state.max,
39
+ }
40
+ } else if (MetricKeyType.FrequencyKeyTypeTypeId in key.keyType) {
41
+ type = "frequency"
42
+ value = Object.fromEntries(state.occurrences)
43
+ } else if (MetricKeyType.SummaryKeyTypeTypeId in key.keyType) {
44
+ type = "summary"
45
+ value = {
46
+ quantiles: state.quantiles,
47
+ count: state.count,
48
+ sum: state.sum,
49
+ min: state.min,
50
+ max: state.max,
51
+ }
49
52
  }
53
+
50
54
  snapshots.push({
51
- name: key.name,
52
- type,
53
- value,
54
- tags: key.tags.map((t) => ({ key: t.key, value: t.value })),
55
- timestamp: Date.now(),
56
- });
57
- }
58
- store.metrics = snapshots;
59
- Effect.runSync(PubSub.publish(store.events, { _tag: "MetricsSnapshot", metrics: snapshots }));
60
- }), Schedule.spaced("2 seconds")));
61
- }));
55
+ name: key.name,
56
+ type,
57
+ value,
58
+ tags: key.tags.map((t) => ({ key: t.key, value: t.value })),
59
+ timestamp: Date.now(),
60
+ })
61
+ }
62
+
63
+ store.metrics = snapshots
64
+ Effect.runSync(
65
+ PubSub.publish(store.events, { _tag: "MetricsSnapshot", metrics: snapshots }),
66
+ )
67
+ }),
68
+ Schedule.spaced("2 seconds"),
69
+ ),
70
+ )
71
+ }),
72
+ )