effect-start 0.23.1 → 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 (355) 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 +21 -24
  123. package/src/StartApp.ts +1 -1
  124. package/src/bun/BunServer.ts +42 -10
  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/dist/BlobStore.d.ts +0 -80
  132. package/dist/BlobStore.js +0 -19
  133. package/dist/ChildProcess.d.ts +0 -60
  134. package/dist/Commander.d.ts +0 -100
  135. package/dist/ContentNegotiation.d.ts +0 -12
  136. package/dist/Cookies.d.ts +0 -47
  137. package/dist/Development.d.ts +0 -39
  138. package/dist/Effectify.d.ts +0 -209
  139. package/dist/Entity.d.ts +0 -47
  140. package/dist/FilePathPattern.d.ts +0 -29
  141. package/dist/FileRouter.d.ts +0 -56
  142. package/dist/FileRouterCodegen.d.ts +0 -18
  143. package/dist/FileRouterPattern.d.ts +0 -9
  144. package/dist/FileRouterPattern.js +0 -35
  145. package/dist/FileSystem.d.ts +0 -158
  146. package/dist/Http.d.ts +0 -37
  147. package/dist/HttpAppExtra.d.ts +0 -7
  148. package/dist/HttpAppExtra.js +0 -320
  149. package/dist/HttpUtils.d.ts +0 -3
  150. package/dist/HttpUtils.js +0 -11
  151. package/dist/PathPattern.d.ts +0 -134
  152. package/dist/PlatformError.d.ts +0 -38
  153. package/dist/PlatformRuntime.d.ts +0 -27
  154. package/dist/Route.d.ts +0 -97
  155. package/dist/RouteBody.d.ts +0 -47
  156. package/dist/RouteError.d.ts +0 -98
  157. package/dist/RouteHook.d.ts +0 -12
  158. package/dist/RouteHttp.d.ts +0 -21
  159. package/dist/RouteHttpTracer.d.ts +0 -10
  160. package/dist/RouteMount.d.ts +0 -86
  161. package/dist/RouteSchema.d.ts +0 -86
  162. package/dist/RouteSse.d.ts +0 -21
  163. package/dist/RouteTree.d.ts +0 -57
  164. package/dist/RouteTrie.d.ts +0 -20
  165. package/dist/RouterPattern.d.ts +0 -118
  166. package/dist/RouterPattern.js +0 -269
  167. package/dist/SchemaExtra.d.ts +0 -7
  168. package/dist/Socket.d.ts +0 -27
  169. package/dist/Sql.d.ts +0 -34
  170. package/dist/Sql.js +0 -5
  171. package/dist/SqlIntrospect.d.ts +0 -91
  172. package/dist/Start.d.ts +0 -44
  173. package/dist/StartApp.d.ts +0 -19
  174. package/dist/StreamExtra.d.ts +0 -28
  175. package/dist/System.d.ts +0 -7
  176. package/dist/TuplePathPattern.d.ts +0 -9
  177. package/dist/Unique.d.ts +0 -50
  178. package/dist/Values.d.ts +0 -27
  179. package/dist/bun/BunBlobStoreDisk.d.ts +0 -6
  180. package/dist/bun/BunBlobStoreDisk.js +0 -116
  181. package/dist/bun/BunBlobStoreS3.d.ts +0 -11
  182. package/dist/bun/BunBlobStoreS3.js +0 -89
  183. package/dist/bun/BunBlobWatcherDisk.d.ts +0 -6
  184. package/dist/bun/BunBlobWatcherDisk.js +0 -60
  185. package/dist/bun/BunBlobWatcherQueue.d.ts +0 -6
  186. package/dist/bun/BunBlobWatcherQueue.js +0 -17
  187. package/dist/bun/BunBundle.d.ts +0 -11
  188. package/dist/bun/BunChildProcessSpawner.d.ts +0 -3
  189. package/dist/bun/BunHttpServer.d.ts +0 -44
  190. package/dist/bun/BunHttpServer.js +0 -186
  191. package/dist/bun/BunHttpServer_web.d.ts +0 -60
  192. package/dist/bun/BunHttpServer_web.js +0 -252
  193. package/dist/bun/BunImportTrackerPlugin.d.ts +0 -13
  194. package/dist/bun/BunPlatformHttpServer.d.ts +0 -10
  195. package/dist/bun/BunPlatformHttpServer.js +0 -53
  196. package/dist/bun/BunRoute.d.ts +0 -48
  197. package/dist/bun/BunRuntime.d.ts +0 -2
  198. package/dist/bun/BunServer.d.ts +0 -40
  199. package/dist/bun/BunServerRequest.d.ts +0 -60
  200. package/dist/bun/BunServerRequest.js +0 -252
  201. package/dist/bun/BunSql.d.ts +0 -4
  202. package/dist/bun/BunSql.js +0 -81
  203. package/dist/bun/BunVirtualFilesPlugin.d.ts +0 -4
  204. package/dist/bun/_BunEnhancedResolve.d.ts +0 -45
  205. package/dist/bun/index.d.ts +0 -5
  206. package/dist/bundler/Bundle.d.ts +0 -61
  207. package/dist/bundler/BundleFiles.d.ts +0 -13
  208. package/dist/bundler/BundleHttp.d.ts +0 -45
  209. package/dist/bundler/BundleHttp.js +0 -176
  210. package/dist/bundler/BundleRoute.d.ts +0 -27
  211. package/dist/client/Overlay.d.ts +0 -2
  212. package/dist/client/ScrollState.d.ts +0 -6
  213. package/dist/client/index.d.ts +0 -6
  214. package/dist/console/Console.d.ts +0 -6
  215. package/dist/console/ConsoleErrors.d.ts +0 -3
  216. package/dist/console/ConsoleLogger.d.ts +0 -3
  217. package/dist/console/ConsoleMetrics.d.ts +0 -3
  218. package/dist/console/ConsoleProcess.d.ts +0 -3
  219. package/dist/console/ConsoleStore.d.ts +0 -144
  220. package/dist/console/ConsoleTracer.d.ts +0 -3
  221. package/dist/console/Simulation.d.ts +0 -2
  222. package/dist/console/index.d.ts +0 -3
  223. package/dist/console/routes/errors/route.d.ts +0 -10
  224. package/dist/console/routes/errors/route.js +0 -47
  225. package/dist/console/routes/fiberDetail.d.ts +0 -16
  226. package/dist/console/routes/fiberDetail.js +0 -38
  227. package/dist/console/routes/fibers/route.d.ts +0 -10
  228. package/dist/console/routes/fibers/route.js +0 -19
  229. package/dist/console/routes/git/route.d.ts +0 -11
  230. package/dist/console/routes/git/route.js +0 -33
  231. package/dist/console/routes/layout.d.ts +0 -9
  232. package/dist/console/routes/layout.js +0 -3
  233. package/dist/console/routes/logs/route.d.ts +0 -10
  234. package/dist/console/routes/logs/route.js +0 -32
  235. package/dist/console/routes/metrics/route.d.ts +0 -10
  236. package/dist/console/routes/metrics/route.js +0 -17
  237. package/dist/console/routes/route.d.ts +0 -6
  238. package/dist/console/routes/route.js +0 -5
  239. package/dist/console/routes/routes/route.d.ts +0 -6
  240. package/dist/console/routes/routes/route.js +0 -20
  241. package/dist/console/routes/services/route.d.ts +0 -6
  242. package/dist/console/routes/services/route.js +0 -12
  243. package/dist/console/routes/system/route.d.ts +0 -10
  244. package/dist/console/routes/system/route.js +0 -18
  245. package/dist/console/routes/traceDetail.d.ts +0 -16
  246. package/dist/console/routes/traceDetail.js +0 -14
  247. package/dist/console/routes/traces/route.d.ts +0 -10
  248. package/dist/console/routes/traces/route.js +0 -39
  249. package/dist/console/routes/tree.d.ts +0 -153
  250. package/dist/console/ui/Errors.d.ts +0 -4
  251. package/dist/console/ui/Errors.js +0 -15
  252. package/dist/console/ui/Fibers.d.ts +0 -24
  253. package/dist/console/ui/Fibers.js +0 -121
  254. package/dist/console/ui/Git.d.ts +0 -20
  255. package/dist/console/ui/Git.js +0 -95
  256. package/dist/console/ui/Logs.d.ts +0 -4
  257. package/dist/console/ui/Logs.js +0 -25
  258. package/dist/console/ui/Metrics.d.ts +0 -4
  259. package/dist/console/ui/Metrics.js +0 -26
  260. package/dist/console/ui/Routes.d.ts +0 -8
  261. package/dist/console/ui/Routes.js +0 -70
  262. package/dist/console/ui/Services.d.ts +0 -10
  263. package/dist/console/ui/Services.js +0 -246
  264. package/dist/console/ui/Shell.d.ts +0 -10
  265. package/dist/console/ui/Shell.js +0 -7
  266. package/dist/console/ui/System.d.ts +0 -4
  267. package/dist/console/ui/System.js +0 -35
  268. package/dist/console/ui/Traces.d.ts +0 -12
  269. package/dist/console/ui/Traces.js +0 -179
  270. package/dist/datastar/actions/fetch.d.ts +0 -30
  271. package/dist/datastar/actions/peek.d.ts +0 -1
  272. package/dist/datastar/actions/setAll.d.ts +0 -1
  273. package/dist/datastar/actions/toggleAll.d.ts +0 -1
  274. package/dist/datastar/attributes/attr.d.ts +0 -1
  275. package/dist/datastar/attributes/bind.d.ts +0 -1
  276. package/dist/datastar/attributes/class.d.ts +0 -1
  277. package/dist/datastar/attributes/computed.d.ts +0 -1
  278. package/dist/datastar/attributes/effect.d.ts +0 -1
  279. package/dist/datastar/attributes/indicator.d.ts +0 -1
  280. package/dist/datastar/attributes/init.d.ts +0 -1
  281. package/dist/datastar/attributes/jsonSignals.d.ts +0 -1
  282. package/dist/datastar/attributes/on.d.ts +0 -1
  283. package/dist/datastar/attributes/onIntersect.d.ts +0 -1
  284. package/dist/datastar/attributes/onInterval.d.ts +0 -1
  285. package/dist/datastar/attributes/onSignalPatch.d.ts +0 -1
  286. package/dist/datastar/attributes/ref.d.ts +0 -1
  287. package/dist/datastar/attributes/show.d.ts +0 -1
  288. package/dist/datastar/attributes/signals.d.ts +0 -1
  289. package/dist/datastar/attributes/style.d.ts +0 -1
  290. package/dist/datastar/attributes/text.d.ts +0 -1
  291. package/dist/datastar/engine.d.ts +0 -162
  292. package/dist/datastar/happydom.d.ts +0 -1
  293. package/dist/datastar/happydom.js +0 -8
  294. package/dist/datastar/index.d.ts +0 -24
  295. package/dist/datastar/load.d.ts +0 -24
  296. package/dist/datastar/load.js +0 -24
  297. package/dist/datastar/utils.d.ts +0 -51
  298. package/dist/datastar/watchers/patchElements.d.ts +0 -1
  299. package/dist/datastar/watchers/patchSignals.d.ts +0 -1
  300. package/dist/experimental/EncryptedCookies.d.ts +0 -48
  301. package/dist/experimental/SseHttpResponse.d.ts +0 -7
  302. package/dist/experimental/SseHttpResponse.js +0 -28
  303. package/dist/experimental/index.d.ts +0 -1
  304. package/dist/hyper/Hyper.d.ts +0 -25
  305. package/dist/hyper/HyperHtml.d.ts +0 -23
  306. package/dist/hyper/HyperHtml.test.d.ts +0 -1
  307. package/dist/hyper/HyperHtml.test.js +0 -197
  308. package/dist/hyper/HyperNode.d.ts +0 -14
  309. package/dist/hyper/HyperRoute.d.ts +0 -8
  310. package/dist/hyper/HyperRoute.test.d.ts +0 -1
  311. package/dist/hyper/HyperRoute.test.js +0 -83
  312. package/dist/hyper/html.d.ts +0 -11
  313. package/dist/hyper/index.d.ts +0 -6
  314. package/dist/hyper/jsx-runtime.d.ts +0 -7
  315. package/dist/index.d.ts +0 -8
  316. package/dist/inference_check.d.ts +0 -1
  317. package/dist/inference_check.js +0 -15
  318. package/dist/lint/plugin.d.ts +0 -86
  319. package/dist/lint/plugin.js +0 -341
  320. package/dist/middlewares/BasicAuthMiddleware.d.ts +0 -8
  321. package/dist/middlewares/BasicAuthMiddleware.js +0 -22
  322. package/dist/middlewares/index.d.ts +0 -1
  323. package/dist/middlewares/index.js +0 -1
  324. package/dist/node/Effectify.d.ts +0 -209
  325. package/dist/node/Effectify.js +0 -19
  326. package/dist/node/FileSystem.d.ts +0 -7
  327. package/dist/node/FileSystem.js +0 -420
  328. package/dist/node/NodeFileSystem.d.ts +0 -7
  329. package/dist/node/NodeUtils.d.ts +0 -2
  330. package/dist/node/PlatformError.d.ts +0 -46
  331. package/dist/node/PlatformError.js +0 -43
  332. package/dist/node/Utils.d.ts +0 -1
  333. package/dist/node/Utils.js +0 -19
  334. package/dist/repro_fail.d.ts +0 -1
  335. package/dist/repro_fail.js +0 -14
  336. package/dist/sql/bun/index.d.ts +0 -3
  337. package/dist/sql/mssql/docker.d.ts +0 -2
  338. package/dist/sql/mssql/index.d.ts +0 -21
  339. package/dist/testing/TestHttpClient.d.ts +0 -13
  340. package/dist/testing/TestHttpClient.js +0 -68
  341. package/dist/testing/TestLogger.d.ts +0 -13
  342. package/dist/testing/index.d.ts +0 -2
  343. package/dist/testing/utils.d.ts +0 -9
  344. package/dist/x/cloudflare/CloudflareTunnel.d.ts +0 -10
  345. package/dist/x/cloudflare/index.d.ts +0 -1
  346. package/dist/x/datastar/Datastar.d.ts +0 -6
  347. package/dist/x/datastar/Datastar.js +0 -47
  348. package/dist/x/datastar/index.d.ts +0 -1
  349. package/dist/x/datastar/index.js +0 -1
  350. package/dist/x/tailscale/TailscaleTunnel.d.ts +0 -15
  351. package/dist/x/tailscale/index.d.ts +0 -1
  352. package/dist/x/tailwind/TailwindPlugin.d.ts +0 -23
  353. package/dist/x/tailwind/compile.d.ts +0 -19
  354. package/dist/x/tailwind/plugin.d.ts +0 -2
  355. /package/src/{Sql.ts → sql/Sql.ts} +0 -0
@@ -1,12 +1,13 @@
1
- import * as Effect from "effect/Effect";
2
- import * as Layer from "effect/Layer";
3
- import * as Option from "effect/Option";
4
- import * as Entity from "../Entity.js";
5
- import * as PathPattern from "../PathPattern.js";
6
- import * as Route from "../Route.js";
7
- import * as RouteTree from "../RouteTree.js";
8
- import * as Values from "../Values.js";
9
- import * as Bundle from "./Bundle.js";
1
+ import * as Effect from "effect/Effect"
2
+ import * as Layer from "effect/Layer"
3
+ import * as Option from "effect/Option"
4
+ import * as Entity from "../Entity.js"
5
+ import * as PathPattern from "../PathPattern.js"
6
+ import * as Route from "../Route.js"
7
+ import * as RouteTree from "../RouteTree.js"
8
+ import * as Values from "../Values.js"
9
+ import * as Bundle from "./Bundle.js"
10
+
10
11
  /**
11
12
  * Creates a GET route that serves bundle artifacts.
12
13
  * Mount at a path with a wildcard param (any name works).
@@ -17,35 +18,45 @@ import * as Bundle from "./Bundle.js";
17
18
  * })
18
19
  * ```
19
20
  */
20
- export const make = (tag) => Route.get(Route.render(function* (ctx) {
21
- const bundle = yield* tag;
22
- const url = new URL(ctx.request.url);
23
- const mountPath = ctx.path ?? "/";
24
- const params = PathPattern.match(mountPath, url.pathname);
25
- const artifactPath = params ? Values.firstValue(params) : undefined;
26
- if (!artifactPath) {
27
- return Entity.make(new Uint8Array(0), { status: 404 });
28
- }
29
- const blob = bundle.getArtifact(artifactPath);
30
- if (!blob) {
31
- return Entity.make(new Uint8Array(0), { status: 404 });
32
- }
33
- const bytes = new Uint8Array(yield* Effect.promise(() => blob.arrayBuffer()));
34
- return Entity.make(bytes, {
21
+ export const make = (tag) =>
22
+ Route.get(
23
+ Route.render(function* (ctx) {
24
+ const bundle = yield* tag
25
+ const url = new URL(ctx.request.url)
26
+ const mountPath = (ctx).path ?? "/"
27
+ const params = PathPattern.match(mountPath, url.pathname)
28
+ const artifactPath = params ? Values.firstValue(params) : undefined
29
+ if (!artifactPath) {
30
+ return Entity.make(new Uint8Array(0), { status: 404 })
31
+ }
32
+ const blob = bundle.getArtifact(artifactPath)
33
+ if (!blob) {
34
+ return Entity.make(new Uint8Array(0), { status: 404 })
35
+ }
36
+ const bytes = new Uint8Array(yield* Effect.promise(() => blob.arrayBuffer()))
37
+ return Entity.make(bytes, {
35
38
  headers: {
36
- "content-type": blob.type || "application/octet-stream",
37
- "cache-control": "public, max-age=31536000, immutable",
39
+ "content-type": blob.type || "application/octet-stream",
40
+ "cache-control": "public, max-age=31536000, immutable",
38
41
  },
39
- });
40
- }));
41
- export const client = () => make(Bundle.ClientBundle);
42
- export const layer = (options) => Layer.effect(Route.Routes, Effect.gen(function* () {
43
- const existing = yield* Effect.serviceOption(Route.Routes).pipe(Effect.andThen(Option.getOrUndefined));
44
- const path = options?.path ?? "/_bundle/:path+";
45
- const bundleTree = Route.tree({
42
+ })
43
+ }),
44
+ )
45
+
46
+ export const client = () => make(Bundle.ClientBundle)
47
+
48
+ export const layer = (options) =>
49
+ Layer.effect(
50
+ Route.Routes,
51
+ Effect.gen(function* () {
52
+ const existing = yield* Effect.serviceOption(Route.Routes).pipe(
53
+ Effect.andThen(Option.getOrUndefined),
54
+ )
55
+ const path = options?.path ?? "/_bundle/:path+"
56
+ const bundleTree = Route.tree({
46
57
  [path]: make(options?.bundle ?? Bundle.ClientBundle),
47
- });
48
- if (!existing)
49
- return bundleTree;
50
- return RouteTree.merge(existing, bundleTree);
51
- }));
58
+ })
59
+ if (!existing) return bundleTree
60
+ return RouteTree.merge(existing, bundleTree)
61
+ }),
62
+ )
@@ -1,32 +1,33 @@
1
- const OVERLAY_ID = "_bundler_error_overlay";
1
+ const OVERLAY_ID = "_bundler_error_overlay"
2
+
2
3
  export function getOverlay() {
3
- let overlay = document.getElementById(OVERLAY_ID);
4
- if (!overlay) {
5
- overlay = document.createElement("pre");
6
- overlay.id = OVERLAY_ID;
7
- Object.assign(overlay.style, {
8
- position: "fixed",
9
- top: "0",
10
- left: "0",
11
- right: "0",
12
- maxHeight: "40%",
13
- overflowY: "auto",
14
- margin: "0",
15
- padding: "4px",
16
- background: "black",
17
- color: "red",
18
- fontFamily: "monospace",
19
- zIndex: "2147483647",
20
- whiteSpace: "pre-wrap",
21
- });
22
- document.body.appendChild(overlay);
23
- }
24
- return overlay;
4
+ let overlay = document.getElementById(OVERLAY_ID)
5
+ if (!overlay) {
6
+ overlay = document.createElement("pre")
7
+ overlay.id = OVERLAY_ID
8
+ Object.assign(overlay.style, {
9
+ position: "fixed",
10
+ top: "0",
11
+ left: "0",
12
+ right: "0",
13
+ maxHeight: "40%",
14
+ overflowY: "auto",
15
+ margin: "0",
16
+ padding: "4px",
17
+ background: "black",
18
+ color: "red",
19
+ fontFamily: "monospace",
20
+ zIndex: "2147483647",
21
+ whiteSpace: "pre-wrap",
22
+ })
23
+ document.body.appendChild(overlay)
24
+ }
25
+ return overlay
25
26
  }
27
+
26
28
  export function showBuildError(message) {
27
- const overlay = getOverlay();
28
- const atBottom = overlay.scrollTop + overlay.clientHeight >= overlay.scrollHeight - 1;
29
- overlay.textContent += message + "\n";
30
- if (atBottom)
31
- overlay.scrollTop = overlay.scrollHeight;
29
+ const overlay = getOverlay()
30
+ const atBottom = overlay.scrollTop + overlay.clientHeight >= overlay.scrollHeight - 1
31
+ overlay.textContent += message + "\n"
32
+ if (atBottom) overlay.scrollTop = overlay.scrollHeight
32
33
  }
@@ -1,94 +1,106 @@
1
- const ScrollKey = "_BUNDLER_SCROLL";
1
+ const ScrollKey = "_BUNDLER_SCROLL"
2
+
2
3
  /**
3
4
  * Persist current scroll state to session storage.
4
5
  * Scroll state is saved relatively to visible elements.
5
6
  */
6
7
  export function persist() {
7
- const anchors = [];
8
- const step = window.innerHeight / 4;
9
- for (let i = 1; i <= 3; i++) {
10
- const y = step * i;
11
- const element = document.elementFromPoint(0, y);
12
- if (!element)
13
- continue;
14
- const target = element.id ? element : (element.closest("[id]") ?? element);
15
- anchors.push({
16
- selector: selectorFromElement(target),
17
- offset: target.getBoundingClientRect().top,
18
- });
19
- }
20
- const state = {
21
- anchors,
22
- scrollY: window.scrollY,
23
- };
24
- sessionStorage.setItem(ScrollKey, JSON.stringify(state));
8
+ const anchors = []
9
+ const step = window.innerHeight / 4
10
+
11
+ for (let i = 1; i <= 3; i++) {
12
+ const y = step * i
13
+ const element = document.elementFromPoint(0, y)
14
+ if (!element) continue
15
+ const target = element.id ? element : (element.closest("[id]") ?? element)
16
+
17
+ anchors.push({
18
+ selector: selectorFromElement(target),
19
+ offset: target.getBoundingClientRect().top,
20
+ })
21
+ }
22
+
23
+ const state = {
24
+ anchors,
25
+ scrollY: window.scrollY,
26
+ }
27
+
28
+ sessionStorage.setItem(ScrollKey, JSON.stringify(state))
25
29
  }
30
+
26
31
  export function restore() {
27
- const timeout = 3000;
28
- const tick = 50;
29
- const raw = sessionStorage.getItem(ScrollKey);
30
- if (!raw)
31
- return;
32
- sessionStorage.removeItem(ScrollKey);
33
- const state = JSON.parse(raw);
34
- const apply = () => {
35
- for (const anchor of state.anchors) {
36
- const element = document.querySelector(anchor.selector);
37
- if (element) {
38
- const rect = element.getBoundingClientRect();
39
- const top = window.scrollY + rect.top - anchor.offset;
40
- window.scrollTo({
41
- top,
42
- });
43
- return;
44
- }
45
- }
32
+ const timeout = 3000
33
+ const tick = 50
34
+ const raw = sessionStorage.getItem(ScrollKey)
35
+ if (!raw) return
36
+
37
+ sessionStorage.removeItem(ScrollKey)
38
+
39
+ const state = JSON.parse(raw)
40
+
41
+ const apply = () => {
42
+ for (const anchor of state.anchors) {
43
+ const element = document.querySelector(anchor.selector)
44
+ if (element) {
45
+ const rect = element.getBoundingClientRect()
46
+ const top = window.scrollY + rect.top - anchor.offset
46
47
  window.scrollTo({
47
- top: state.scrollY,
48
- });
49
- };
50
- let observer;
51
- let stableTimer;
52
- const deadline = setTimeout(() => {
53
- observer.disconnect();
54
- if (stableTimer)
55
- clearTimeout(stableTimer);
56
- apply();
57
- }, timeout);
58
- observer = new MutationObserver(() => {
59
- if (stableTimer)
60
- clearTimeout(stableTimer);
61
- stableTimer = setTimeout(() => {
62
- observer.disconnect();
63
- clearTimeout(deadline);
64
- apply();
65
- }, tick);
66
- });
67
- observer.observe(document.body, {
68
- subtree: true,
69
- childList: true,
70
- attributes: true,
71
- characterData: true,
72
- });
48
+ top,
49
+ })
50
+ return
51
+ }
52
+ }
53
+
54
+ window.scrollTo({
55
+ top: state.scrollY,
56
+ })
57
+ }
58
+
59
+ let observer
60
+ let stableTimer
61
+ const deadline = setTimeout(() => {
62
+ observer.disconnect()
63
+ if (stableTimer) clearTimeout(stableTimer)
64
+ apply()
65
+ }, timeout)
66
+
67
+ observer = new MutationObserver(() => {
68
+ if (stableTimer) clearTimeout(stableTimer)
73
69
  stableTimer = setTimeout(() => {
74
- observer.disconnect();
75
- clearTimeout(deadline);
76
- apply();
77
- }, tick);
70
+ observer.disconnect()
71
+ clearTimeout(deadline)
72
+ apply()
73
+ }, tick)
74
+ })
75
+
76
+ observer.observe(document.body, {
77
+ subtree: true,
78
+ childList: true,
79
+ attributes: true,
80
+ characterData: true,
81
+ })
82
+
83
+ stableTimer = setTimeout(() => {
84
+ observer.disconnect()
85
+ clearTimeout(deadline)
86
+ apply()
87
+ }, tick)
78
88
  }
89
+
79
90
  function selectorFromElement(element) {
80
- if (element.id) {
81
- return `#${CSS.escape(element.id)}`;
82
- }
83
- const parts = [];
84
- let current = element;
85
- while (current && current !== document.body) {
86
- const parent = current.parentElement;
87
- if (!parent)
88
- break;
89
- const index = Array.from(parent.children).indexOf(current) + 1;
90
- parts.unshift(`${current.tagName.toLowerCase()}:nth-child(${index})`);
91
- current = parent;
92
- }
93
- return parts.join(" > ");
91
+ if (element.id) {
92
+ return `#${CSS.escape(element.id)}`
93
+ }
94
+ const parts = []
95
+ let current = element
96
+
97
+ while (current && current !== document.body) {
98
+ const parent = current.parentElement
99
+ if (!parent) break
100
+ const index = Array.from(parent.children).indexOf(current) + 1
101
+ parts.unshift(`${current.tagName.toLowerCase()}:nth-child(${index})`)
102
+ current = parent
103
+ }
104
+
105
+ return parts.join(" > ")
94
106
  }
@@ -3,77 +3,95 @@
3
3
  * It is responsible for live reloading the page when bundle changes.
4
4
  * When NODE_ENV=production, it does nothing.
5
5
  */
6
- import * as Overlay from "./Overlay.js";
7
- import * as ScrollState from "./ScrollState.js";
8
- const BUNDLE_URL = globalThis._BUNDLE_URL ?? "/_bundle";
6
+
7
+ /// <reference lib="dom" />
8
+ /// <reference lib="dom.iterable" />
9
+
10
+ import * as Overlay from "./Overlay.js"
11
+ import * as ScrollState from "./ScrollState.js"
12
+
13
+ const BUNDLE_URL = globalThis._BUNDLE_URL ?? "/_bundle"
14
+
9
15
  function reload() {
10
- ScrollState.persist();
11
- window.location.reload();
16
+ ScrollState.persist()
17
+ window.location.reload()
12
18
  }
19
+
13
20
  async function loadAllEntrypoints() {
14
- const manifest = await fetch(`/${BUNDLE_URL}/manifest.json`).then((v) => v.json());
15
- manifest.artifacts
16
- .filter((v) => v.path.endsWith(".js"))
17
- .forEach((artifact) => {
18
- console.log(artifact.path);
19
- const script = document.createElement("script");
20
- script.src = `${BUNDLE_URL}/${artifact.path}`;
21
- script.type = "module";
22
- script.onload = () => {
23
- console.debug("Bundle reloaded");
24
- };
25
- document.body.appendChild(script);
26
- });
21
+ const manifest = await fetch(`/${BUNDLE_URL}/manifest.json`).then((v) =>
22
+ v.json(),
23
+ )
24
+
25
+ manifest.artifacts
26
+ .filter((v) => v.path.endsWith(".js"))
27
+ .forEach((artifact) => {
28
+ console.log(artifact.path)
29
+ const script = document.createElement("script")
30
+ script.src = `${BUNDLE_URL}/${artifact.path}`
31
+ script.type = "module"
32
+ script.onload = () => {
33
+ console.debug("Bundle reloaded")
34
+ }
35
+ document.body.appendChild(script)
36
+ })
27
37
  }
38
+
28
39
  function handleBundleEvent(event) {
29
- switch (event._tag) {
30
- case "Change":
31
- console.debug("Bundle change detected...");
32
- reload();
33
- break;
34
- case "BuildError":
35
- Overlay.showBuildError(event.error);
36
- break;
37
- }
40
+ switch (event._tag) {
41
+ case "Change":
42
+ console.debug("Bundle change detected...")
43
+ reload()
44
+ break
45
+ case "BuildError":
46
+ Overlay.showBuildError(event.error)
47
+ break
48
+ }
38
49
  }
50
+
39
51
  function listen() {
40
- const eventSource = new EventSource(`${BUNDLE_URL}/events`);
41
- eventSource.addEventListener("message", (event) => {
42
- try {
43
- reloadAllMetaLinks();
44
- const data = JSON.parse(event.data);
45
- handleBundleEvent(data);
46
- }
47
- catch (error) {
48
- console.error("Error parsing SSE event", {
49
- error,
50
- event,
51
- });
52
- }
53
- });
54
- eventSource.addEventListener("error", (error) => {
55
- console.error("SSE connection error:", error);
56
- });
57
- return () => {
58
- eventSource.close();
59
- };
52
+ const eventSource = new EventSource(`${BUNDLE_URL}/events`)
53
+
54
+ eventSource.addEventListener("message", (event) => {
55
+ try {
56
+ reloadAllMetaLinks()
57
+ const data = JSON.parse(event.data)
58
+
59
+ handleBundleEvent(data)
60
+ } catch (error) {
61
+ console.error("Error parsing SSE event", {
62
+ error,
63
+ event,
64
+ })
65
+ }
66
+ })
67
+
68
+ eventSource.addEventListener("error", (error) => {
69
+ console.error("SSE connection error:", error)
70
+ })
71
+
72
+ return () => {
73
+ eventSource.close()
74
+ }
60
75
  }
76
+
61
77
  function reloadAllMetaLinks() {
62
- for (const link of document.getElementsByTagName("link")) {
63
- const url = new URL(link.href);
64
- if (url.host === window.location.host) {
65
- const next = link.cloneNode();
66
- // TODO: this won't work when link already has query params
67
- next.href = next.href + "?" + Math.random().toString(36).slice(2);
68
- next.onload = () => link.remove();
69
- link.parentNode.insertBefore(next, link.nextSibling);
70
- return;
71
- }
78
+ for (const link of document.getElementsByTagName("link")) {
79
+ const url = new URL(link.href)
80
+
81
+ if (url.host === window.location.host) {
82
+ const next = link.cloneNode()
83
+ // TODO: this won't work when link already has query params
84
+ next.href = next.href + "?" + Math.random().toString(36).slice(2)
85
+ next.onload = () => link.remove()
86
+ link.parentNode.insertBefore(next, link.nextSibling)
87
+ return
72
88
  }
89
+ }
73
90
  }
91
+
74
92
  if (process.env.NODE_ENV !== "production") {
75
- window.addEventListener("load", () => {
76
- ScrollState.restore();
77
- listen();
78
- });
93
+ window.addEventListener("load", () => {
94
+ ScrollState.restore()
95
+ listen()
96
+ })
79
97
  }
@@ -1,26 +1,42 @@
1
- import * as Effect from "effect/Effect";
2
- import * as Layer from "effect/Layer";
3
- import * as Route from "../Route.js";
4
- import * as RouteTree from "../RouteTree.js";
5
- import * as ConsoleErrors from "./ConsoleErrors.js";
6
- import * as ConsoleLogger from "./ConsoleLogger.js";
7
- import * as ConsoleMetrics from "./ConsoleMetrics.js";
8
- import * as ConsoleProcess from "./ConsoleProcess.js";
9
- import * as ConsoleStore from "./ConsoleStore.js";
10
- import * as ConsoleTracer from "./ConsoleTracer.js";
11
- import consoleRoutes from "./routes/tree.js";
12
- export { ConsoleStore } from "./ConsoleStore.js";
13
- export function layer(options) {
14
- const store = ConsoleStore.layer(options);
15
- return Layer.mergeAll(ConsoleTracer.layer, ConsoleLogger.layer, ConsoleMetrics.layer, ConsoleErrors.layer, ConsoleProcess.layer).pipe(Layer.provideMerge(store));
1
+ import * as Effect from "effect/Effect"
2
+ import * as Layer from "effect/Layer"
3
+ import * as Route from "../Route.js"
4
+ import * as RouteTree from "../RouteTree.js"
5
+ import * as ConsoleErrors from "./ConsoleErrors.js"
6
+ import * as ConsoleLogger from "./ConsoleLogger.js"
7
+ import * as ConsoleMetrics from "./ConsoleMetrics.js"
8
+ import * as ConsoleProcess from "./ConsoleProcess.js"
9
+ import * as ConsoleStore from "./ConsoleStore.js"
10
+ import * as ConsoleTracer from "./ConsoleTracer.js"
11
+ import consoleRoutes from "./routes/tree.js"
12
+
13
+ export { ConsoleStore } from "./ConsoleStore.js"
14
+
15
+ export function layer(
16
+ options,
17
+ ) {
18
+ const store = ConsoleStore.layer(options)
19
+ return Layer.mergeAll(
20
+ ConsoleTracer.layer,
21
+ ConsoleLogger.layer,
22
+ ConsoleMetrics.layer,
23
+ ConsoleErrors.layer,
24
+ ConsoleProcess.layer,
25
+ ).pipe(Layer.provideMerge(store))
16
26
  }
17
- export function routeLayer(prefix) {
18
- return Layer.effect(Route.Routes, Effect.gen(function* () {
19
- const existing = yield* Route.Routes;
20
- ConsoleStore.store.prefix = prefix;
21
- const tree = Route.tree({
22
- [prefix]: consoleRoutes,
23
- });
24
- return RouteTree.merge(existing, tree);
25
- }));
27
+
28
+ export function routeLayer(
29
+ prefix,
30
+ ) {
31
+ return Layer.effect(
32
+ Route.Routes,
33
+ Effect.gen(function* () {
34
+ const existing = yield* Route.Routes
35
+ ConsoleStore.store.prefix = prefix
36
+ const tree = Route.tree({
37
+ [prefix as "/"]: consoleRoutes,
38
+ })
39
+ return RouteTree.merge(existing, tree)
40
+ }),
41
+ )
26
42
  }