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
@@ -15,6 +15,7 @@ import * as PathPattern from "../PathPattern.ts"
15
15
  import * as PlataformRuntime from "../PlatformRuntime.ts"
16
16
  import * as Route from "../Route.ts"
17
17
  import * as RouteHttp from "../RouteHttp.ts"
18
+ import * as StartApp from "../StartApp.ts"
18
19
  import type * as RouteMount from "../RouteMount.ts"
19
20
  import * as RouteTree from "../RouteTree.ts"
20
21
  import * as BunRoute from "./BunRoute.ts"
@@ -52,12 +53,11 @@ export type BunServer = {
52
53
 
53
54
  export const BunServer = Context.GenericTag<BunServer>("effect-start/BunServer")
54
55
 
55
- export const make = (options: BunServeOptions): Effect.Effect<BunServer, never, Scope.Scope> =>
56
+ export const make = (
57
+ options: BunServeOptions,
58
+ tree?: RouteTree.RouteTree,
59
+ ): Effect.Effect<BunServer, never, Scope.Scope> =>
56
60
  Effect.gen(function* () {
57
- const routes = yield* Effect.serviceOption(Route.Routes).pipe(
58
- Effect.andThen(Option.getOrUndefined),
59
- )
60
-
61
61
  const port = yield* Config.number("PORT").pipe(
62
62
  Effect.catchTag("ConfigError", () => {
63
63
  return PlataformRuntime.isAgentHarness()
@@ -66,7 +66,7 @@ export const make = (options: BunServeOptions): Effect.Effect<BunServer, never,
66
66
  }),
67
67
  )
68
68
  const hostFlag = process.argv.includes("--host")
69
- const hostname = yield* Config.string("HOSTNAME").pipe(
69
+ const hostname = yield* Config.string("HOST").pipe(
70
70
  Effect.catchTag("ConfigError", () => Effect.succeed(hostFlag ? "0.0.0.0" : undefined)),
71
71
  )
72
72
 
@@ -98,7 +98,7 @@ export const make = (options: BunServeOptions): Effect.Effect<BunServer, never,
98
98
  Effect.andThen(Runtime.provideService(BunServer, service)),
99
99
  )
100
100
 
101
- let currentRoutes: BunRoute.BunRoutes = routes ? yield* walkBunRoutes(runtime, routes) : {}
101
+ let currentRoutes: BunRoute.BunRoutes = tree ? yield* walkBunRoutes(runtime, tree) : {}
102
102
 
103
103
  const websocket: Bun.WebSocketHandler<WebSocketContext> = {
104
104
  open(ws) {
@@ -170,16 +170,56 @@ export const make = (options: BunServeOptions): Effect.Effect<BunServer, never,
170
170
  export const layer = (options?: BunServeOptions): Layer.Layer<BunServer> =>
171
171
  Layer.scoped(BunServer, make(options ?? {}))
172
172
 
173
+ export const layerRoutes = (
174
+ options?: BunServeOptions,
175
+ ): Layer.Layer<BunServer, never, Route.Routes> =>
176
+ Layer.scoped(
177
+ BunServer,
178
+ Effect.gen(function* () {
179
+ const routes = yield* Route.Routes
180
+ return yield* make(options ?? {}, routes)
181
+ }),
182
+ )
183
+
184
+ /**
185
+ * Resolves the Bun server in one place for Start.serve so routes are available:
186
+ * 1) Reuse a user-provided BunServer when one already exists in context.
187
+ * 2) Otherwise create the server from Route.Routes when routes are available.
188
+ * 3) Otherwise create a fallback server with the default 404 handler.
189
+ */
190
+ export const layerStart = (
191
+ options?: BunServeOptions,
192
+ ): Layer.Layer<BunServer, never, StartApp.StartApp> =>
193
+ Layer.scoped(
194
+ BunServer,
195
+ Effect.gen(function* () {
196
+ const app = yield* StartApp.StartApp
197
+ const existing = yield* Effect.serviceOption(BunServer)
198
+ if (Option.isSome(existing)) {
199
+ yield* Deferred.succeed(app.server, existing.value)
200
+ return existing.value
201
+ }
202
+ const routes = yield* Effect.serviceOption(Route.Routes)
203
+ if (Option.isSome(routes)) {
204
+ const server = yield* make(options ?? {}, routes.value)
205
+ yield* Deferred.succeed(app.server, server)
206
+ return server
207
+ }
208
+ const server = yield* make(options ?? {})
209
+ yield* Deferred.succeed(app.server, server)
210
+ return server
211
+ }),
212
+ )
213
+
173
214
  export const withLogAddress = <A, E, R>(layer: Layer.Layer<A, E, R>) =>
174
215
  Layer.effectDiscard(
175
- BunServer.pipe(
176
- Effect.andThen((server) => {
177
- const { hostname, port } = server.server
178
- const addr = hostname === "0.0.0.0" ? getLocalIp() : "localhost"
216
+ Effect.gen(function* () {
217
+ const { server } = yield* BunServer
218
+ const { hostname, port } = server
219
+ const addr = hostname === "0.0.0.0" ? getLocalIp() : "localhost"
179
220
 
180
- return Effect.log(`Listening on http://${addr}:${port}`)
181
- }),
182
- ),
221
+ yield* Effect.log(`Listening on http://${addr}:${port}`)
222
+ }),
183
223
  ).pipe(Layer.provideMerge(layer))
184
224
 
185
225
  function walkBunRoutes(runtime: Runtime.Runtime<BunServer>, tree: RouteTree.RouteTree) {
@@ -220,8 +260,10 @@ function registerPrebuiltBundle(prefix: string, bundle: any, bunRoutes: BunRoute
220
260
  const mainDir = NPath.dirname(Bun.main)
221
261
  const indexPath = NPath.resolve(mainDir, bundle.index)
222
262
 
223
- bunRoutes[`${prefix}/*`] = () =>
224
- new Response(Bun.file(indexPath), { headers: { "content-type": "text/html;charset=utf-8" } })
263
+ const htmlPromise = rewriteRelativeAssetPaths(Bun.file(indexPath).text())
264
+
265
+ bunRoutes[`${prefix}/*`] = async () =>
266
+ new Response(await htmlPromise, { headers: { "content-type": "text/html;charset=utf-8" } })
225
267
 
226
268
  for (const file of bundle.files ?? []) {
227
269
  if (file.loader === "html") continue
@@ -232,6 +274,37 @@ function registerPrebuiltBundle(prefix: string, bundle: any, bunRoutes: BunRoute
232
274
  }
233
275
  }
234
276
 
277
+ function rewriteRelativeAssetPaths(html: string | Promise<string>): Promise<string> {
278
+ const rewriter = new HTMLRewriter()
279
+ .on("link[href]", {
280
+ element(el) {
281
+ const href = el.getAttribute("href")
282
+ if (href && isRelativePath(href)) {
283
+ el.setAttribute("href", "/" + assetBasename(href))
284
+ }
285
+ },
286
+ })
287
+ .on("script[src]", {
288
+ element(el) {
289
+ const src = el.getAttribute("src")
290
+ if (src && isRelativePath(src)) {
291
+ el.setAttribute("src", "/" + assetBasename(src))
292
+ }
293
+ },
294
+ })
295
+
296
+ return Promise.resolve(html).then((h) => rewriter.transform(new Response(h)).text())
297
+ }
298
+
299
+ function isRelativePath(path: string): boolean {
300
+ return path.startsWith("./") || path.startsWith("../")
301
+ }
302
+
303
+ function assetBasename(path: string): string {
304
+ const i = path.lastIndexOf("/")
305
+ return i === -1 ? path : path.slice(i + 1)
306
+ }
307
+
235
308
  function getLocalIp(): string | undefined {
236
309
  return Object.values(NOs.networkInterfaces())
237
310
  .flatMap((addresses) => addresses ?? [])
@@ -140,7 +140,6 @@ export function renderToString(
140
140
  if (!EMPTY_TAGS.includes(type)) {
141
141
  stack.push(`</${type}>`)
142
142
 
143
- // React-specific
144
143
  const html = props.dangerouslySetInnerHTML?.__html ?? props.innerHTML
145
144
 
146
145
  if (html) {
@@ -4,7 +4,7 @@ import * as FiberRef from "effect/FiberRef"
4
4
  import * as GlobalValue from "effect/GlobalValue"
5
5
  import * as Layer from "effect/Layer"
6
6
  import * as Option from "effect/Option"
7
- import * as Sql from "../../Sql.ts"
7
+ import * as Sql from "../Sql.ts"
8
8
 
9
9
  const errorCode = (error: unknown): string => {
10
10
  const e = error as any
@@ -0,0 +1 @@
1
+ export * as Sql from "./Sql.ts"
@@ -0,0 +1,173 @@
1
+ import * as Effect from "effect/Effect"
2
+ import * as Exit from "effect/Exit"
3
+ import * as FiberRef from "effect/FiberRef"
4
+ import * as GlobalValue from "effect/GlobalValue"
5
+ import * as Layer from "effect/Layer"
6
+ import * as Option from "effect/Option"
7
+ import type * as Libsql from "@libsql/client"
8
+ import * as Sql from "../Sql.ts"
9
+
10
+ export interface LibsqlConfig {
11
+ readonly url: string
12
+ readonly authToken?: string
13
+ readonly syncUrl?: string
14
+ readonly syncInterval?: number
15
+ readonly encryptionKey?: string
16
+ }
17
+
18
+ const wrapError = (error: unknown): Sql.SqlError =>
19
+ new Sql.SqlError({
20
+ code: (error as any)?.code ?? "UNKNOWN",
21
+ message: error instanceof Error ? error.message : String(error),
22
+ cause: error,
23
+ })
24
+
25
+ const wrap = <T>(fn: () => PromiseLike<T>): Effect.Effect<T, Sql.SqlError> =>
26
+ Effect.tryPromise({ try: () => Promise.resolve(fn()), catch: wrapError })
27
+
28
+ const makeValues: Sql.SqlQuery["values"] = (obj: any, ...columns: Array<string>) => {
29
+ const items = Array.isArray(obj) ? obj : [obj]
30
+ const cols = columns.length > 0 ? columns : Object.keys(items[0])
31
+ return { value: items, columns: cols }
32
+ }
33
+
34
+ const resultSetToRows = <T>(result: Libsql.ResultSet): ReadonlyArray<T> => {
35
+ const { columns, rows } = result
36
+ return rows.map((row) => {
37
+ const obj: any = {}
38
+ for (let i = 0; i < columns.length; i++) obj[columns[i]] = row[i]
39
+ return obj
40
+ })
41
+ }
42
+
43
+ const buildQuery = (strings: TemplateStringsArray, values: Array<unknown>) => {
44
+ let sql = strings[0]
45
+ for (let i = 0; i < values.length; i++) sql += "?" + strings[i + 1]
46
+ return { sql, args: values }
47
+ }
48
+
49
+ interface TxState {
50
+ readonly depth: number
51
+ }
52
+
53
+ type LibsqlModule = {
54
+ createClient: (config: Libsql.Config) => Libsql.Client
55
+ }
56
+
57
+ const loadLibsql = () => import("@libsql/client") as Promise<LibsqlModule>
58
+
59
+ const currentTransaction = GlobalValue.globalValue(
60
+ Symbol.for("effect-start/sql/libsql/currentTransaction"),
61
+ () => FiberRef.unsafeMake<Option.Option<TxState>>(Option.none()),
62
+ )
63
+
64
+ const executeQuery = <T>(
65
+ client: Libsql.Client,
66
+ sql: string,
67
+ args: Array<unknown>,
68
+ ): Effect.Effect<ReadonlyArray<T>, Sql.SqlError> =>
69
+ wrap(() => client.execute({ sql, args })).pipe(Effect.map(resultSetToRows<T>))
70
+
71
+ const runQuery = <T>(
72
+ client: Libsql.Client,
73
+ strings: TemplateStringsArray,
74
+ values: Array<unknown>,
75
+ ): Effect.Effect<ReadonlyArray<T>, Sql.SqlError> => {
76
+ const { sql, args } = buildQuery(strings, values)
77
+ return executeQuery(client, sql, args)
78
+ }
79
+
80
+ const runUnsafe = <T>(
81
+ client: Libsql.Client,
82
+ query: string,
83
+ values?: Array<unknown>,
84
+ ): Effect.Effect<ReadonlyArray<T>, Sql.SqlError> =>
85
+ executeQuery(client, query, values ?? [])
86
+
87
+ const exec = (client: Libsql.Client, sql: string) =>
88
+ wrap(() => client.execute(sql))
89
+
90
+ const makeWithTransaction =
91
+ (client: Libsql.Client) =>
92
+ <A, E, R>(self: Effect.Effect<A, E, R>): Effect.Effect<A, Sql.SqlError | E, R> =>
93
+ Effect.uninterruptibleMask((restore) =>
94
+ Effect.flatMap(FiberRef.get(currentTransaction), (txOpt) => {
95
+ if (Option.isSome(txOpt)) {
96
+ const { depth } = txOpt.value
97
+ const name = `sp_${depth}`
98
+ return Effect.gen(function* () {
99
+ yield* exec(client, `SAVEPOINT ${name}`)
100
+ const exit = yield* Effect.exit(
101
+ restore(
102
+ Effect.locally(self, currentTransaction, Option.some({ depth: depth + 1 })),
103
+ ),
104
+ )
105
+ if (Exit.isSuccess(exit)) {
106
+ yield* exec(client, `RELEASE SAVEPOINT ${name}`)
107
+ return exit.value
108
+ }
109
+ yield* exec(client, `ROLLBACK TO SAVEPOINT ${name}`).pipe(Effect.orDie)
110
+ return yield* exit
111
+ })
112
+ }
113
+
114
+ return Effect.gen(function* () {
115
+ yield* exec(client, "BEGIN")
116
+ const exit = yield* Effect.exit(
117
+ restore(Effect.locally(self, currentTransaction, Option.some({ depth: 1 }))),
118
+ )
119
+ if (Exit.isSuccess(exit)) {
120
+ yield* exec(client, "COMMIT")
121
+ return exit.value
122
+ }
123
+ yield* exec(client, "ROLLBACK").pipe(Effect.orDie)
124
+ return yield* exit
125
+ })
126
+ }),
127
+ )
128
+
129
+ export const layer = (config: LibsqlConfig): Layer.Layer<Sql.SqlClient, Sql.SqlError> =>
130
+ Layer.scoped(
131
+ Sql.SqlClient,
132
+ Effect.acquireRelease(
133
+ wrap(() => loadLibsql()).pipe(
134
+ Effect.map((libsql) => {
135
+ const client = libsql.createClient(config)
136
+ const use: Sql.SqlClient["use"] = (fn) =>
137
+ Effect.tryPromise({ try: () => Promise.resolve(fn(client)), catch: wrapError })
138
+ return Object.assign(
139
+ <T = any>(strings: TemplateStringsArray, ...values: Array<unknown>) =>
140
+ runQuery<T>(client, strings, values),
141
+ {
142
+ unsafe: <T = any>(query: string, values?: Array<unknown>) =>
143
+ runUnsafe<T>(client, query, values),
144
+ values: makeValues,
145
+ withTransaction: makeWithTransaction(client),
146
+ reserve: Effect.acquireRelease(
147
+ wrap(() => loadLibsql()).pipe(
148
+ Effect.map((m) => m.createClient(config)),
149
+ ),
150
+ (reserved: Libsql.Client) => Effect.sync(() => reserved.close()),
151
+ ).pipe(
152
+ Effect.map(
153
+ (reserved): Sql.SqlQuery =>
154
+ Object.assign(
155
+ <T = any>(strings: TemplateStringsArray, ...values: Array<unknown>) =>
156
+ runQuery<T>(reserved, strings, values),
157
+ {
158
+ unsafe: <T = any>(query: string, values?: Array<unknown>) =>
159
+ runUnsafe<T>(reserved, query, values),
160
+ values: makeValues,
161
+ },
162
+ ),
163
+ ),
164
+ ),
165
+ close: () => Effect.sync(() => client.close()),
166
+ use,
167
+ },
168
+ ) satisfies Sql.SqlClient
169
+ }),
170
+ ),
171
+ (client) => client.close().pipe(Effect.orDie),
172
+ ),
173
+ )
@@ -0,0 +1,39 @@
1
+ declare module "@libsql/client" {
2
+ export interface Config {
3
+ readonly url: string
4
+ readonly authToken?: string
5
+ readonly syncUrl?: string
6
+ readonly syncInterval?: number
7
+ readonly encryptionKey?: string
8
+ }
9
+
10
+ export interface ResultSet {
11
+ readonly columns: ReadonlyArray<string>
12
+ readonly rows: ReadonlyArray<ReadonlyArray<unknown>>
13
+ readonly rowsAffected: number
14
+ readonly lastInsertRowid?: bigint
15
+ }
16
+
17
+ export interface InStatement {
18
+ readonly sql: string
19
+ readonly args?: ReadonlyArray<unknown> | Record<string, unknown>
20
+ }
21
+
22
+ export interface Client {
23
+ execute(stmt: InStatement | string): Promise<ResultSet>
24
+ batch(stmts: ReadonlyArray<InStatement | string>, mode?: TransactionMode): Promise<ReadonlyArray<ResultSet>>
25
+ transaction(mode?: TransactionMode): Promise<Transaction>
26
+ close(): void
27
+ }
28
+
29
+ export interface Transaction {
30
+ execute(stmt: InStatement | string): Promise<ResultSet>
31
+ commit(): Promise<void>
32
+ rollback(): Promise<void>
33
+ close(): void
34
+ }
35
+
36
+ export type TransactionMode = "write" | "read" | "deferred"
37
+
38
+ export function createClient(config: Config): Client
39
+ }
@@ -5,7 +5,7 @@ import * as GlobalValue from "effect/GlobalValue"
5
5
  import * as Layer from "effect/Layer"
6
6
  import * as Option from "effect/Option"
7
7
  import type * as Mssql from "mssql"
8
- import * as Sql from "../../Sql.ts"
8
+ import * as Sql from "../Sql.ts"
9
9
 
10
10
  export interface MssqlConfig {
11
11
  readonly server: string
@@ -1,6 +1,7 @@
1
- import * as BunServer from "../../bun/BunServer.ts"
2
1
  import * as PlatformError from "../../PlatformError.ts"
2
+ import * as StartApp from "../../StartApp.ts"
3
3
  import * as System from "../../System.ts"
4
+ import * as Deferred from "effect/Deferred"
4
5
  import * as Effect from "effect/Effect"
5
6
  import * as Layer from "effect/Layer"
6
7
  import * as LogLevel from "effect/LogLevel"
@@ -86,12 +87,13 @@ export const start = (opts: {
86
87
  export const layer = (opts?: { public?: boolean }) =>
87
88
  Layer.scopedDiscard(
88
89
  Effect.gen(function* () {
89
- const { server } = yield* BunServer.BunServer
90
- const port = server.port!
91
- const command = "tailscale"
92
-
93
90
  yield* Effect.forkScoped(
94
91
  Effect.gen(function* () {
92
+ const app = yield* StartApp.StartApp
93
+ const { server } = yield* Deferred.await(app.server)
94
+ const port = server.port!
95
+ const command = "tailscale"
96
+
95
97
  yield* System.which(command)
96
98
  const status = yield* getStatus(command)
97
99
  const dnsName = status.Self?.DNSName?.replace(/\.$/, "")
@@ -1,80 +0,0 @@
1
- import * as Context from "effect/Context";
2
- import * as Effect from "effect/Effect";
3
- import type * as Option from "effect/Option";
4
- import * as Stream from "effect/Stream";
5
- import type * as PlatformError from "./PlatformError.ts";
6
- export interface BlobInfo {
7
- readonly size: number;
8
- readonly lastModified: Option.Option<Date>;
9
- readonly etag: Option.Option<string>;
10
- readonly type: Option.Option<string>;
11
- }
12
- export interface BlobRef {
13
- readonly key: string;
14
- readonly bytes: Effect.Effect<Uint8Array, PlatformError.PlatformError>;
15
- readonly text: Effect.Effect<string, PlatformError.PlatformError>;
16
- readonly json: Effect.Effect<unknown, PlatformError.PlatformError>;
17
- readonly stat: Effect.Effect<BlobInfo, PlatformError.PlatformError>;
18
- readonly exists: Effect.Effect<boolean, PlatformError.PlatformError>;
19
- readonly delete: Effect.Effect<void, PlatformError.PlatformError>;
20
- readonly stream: Stream.Stream<Uint8Array, PlatformError.PlatformError>;
21
- readonly write: (data: string | Uint8Array | ArrayBuffer) => Effect.Effect<void, PlatformError.PlatformError>;
22
- readonly slice: (begin?: number, end?: number) => BlobRef;
23
- }
24
- export interface ListEntry {
25
- readonly key: string;
26
- readonly size: Option.Option<number>;
27
- readonly lastModified: Option.Option<Date>;
28
- readonly etag: Option.Option<string>;
29
- }
30
- export interface ListOptions {
31
- readonly prefix?: string;
32
- }
33
- export interface PresignOptions {
34
- readonly expiresIn?: number;
35
- readonly method?: "GET" | "PUT" | "DELETE" | "HEAD";
36
- }
37
- declare const BlobStore_base: Context.TagClass<BlobStore, "effect-start/BlobStore", {
38
- readonly ref: (key: string) => Effect.Effect<BlobRef, PlatformError.PlatformError>;
39
- readonly list: (options?: ListOptions) => Stream.Stream<ListEntry, PlatformError.PlatformError>;
40
- readonly presign: (key: string, options?: PresignOptions) => Effect.Effect<string, PlatformError.PlatformError>;
41
- }>;
42
- export declare class BlobStore extends BlobStore_base {
43
- }
44
- declare const WatchEventCreated_base: new <A extends Record<string, any> = {}>(args: import("effect/Types").Equals<A, {}> extends true ? void : { readonly [P in keyof A as P extends "_tag" ? never : P]: A[P]; }) => Readonly<A> & {
45
- readonly _tag: "Created";
46
- };
47
- export declare class WatchEventCreated extends WatchEventCreated_base<{
48
- readonly key: string;
49
- }> {
50
- }
51
- declare const WatchEventUpdated_base: new <A extends Record<string, any> = {}>(args: import("effect/Types").Equals<A, {}> extends true ? void : { readonly [P in keyof A as P extends "_tag" ? never : P]: A[P]; }) => Readonly<A> & {
52
- readonly _tag: "Updated";
53
- };
54
- export declare class WatchEventUpdated extends WatchEventUpdated_base<{
55
- readonly key: string;
56
- }> {
57
- }
58
- declare const WatchEventDeleted_base: new <A extends Record<string, any> = {}>(args: import("effect/Types").Equals<A, {}> extends true ? void : { readonly [P in keyof A as P extends "_tag" ? never : P]: A[P]; }) => Readonly<A> & {
59
- readonly _tag: "Deleted";
60
- };
61
- export declare class WatchEventDeleted extends WatchEventDeleted_base<{
62
- readonly key: string;
63
- }> {
64
- }
65
- export type WatchEvent = WatchEventCreated | WatchEventUpdated | WatchEventDeleted;
66
- export interface WatchOptions {
67
- readonly prefix?: string;
68
- }
69
- declare const BlobWatcher_base: Context.TagClass<BlobWatcher, "effect-start/BlobWatcher", {
70
- readonly watch: (options?: WatchOptions) => Stream.Stream<WatchEvent, PlatformError.PlatformError>;
71
- readonly notify: (event: WatchEvent) => Effect.Effect<boolean, PlatformError.PlatformError>;
72
- }>;
73
- export declare class BlobWatcher extends BlobWatcher_base {
74
- }
75
- export declare const watch: (options?: WatchOptions) => Stream.Stream<WatchEvent, PlatformError.PlatformError, BlobWatcher>;
76
- export declare const notify: (event: WatchEvent) => Effect.Effect<boolean, PlatformError.PlatformError, BlobWatcher>;
77
- export declare const ref: (key: string) => Effect.Effect<BlobRef, PlatformError.PlatformError, BlobStore>;
78
- export declare const list: (options?: ListOptions) => Stream.Stream<ListEntry, PlatformError.PlatformError, BlobStore>;
79
- export declare const presign: (key: string, options?: PresignOptions) => Effect.Effect<string, PlatformError.PlatformError, BlobStore>;
80
- export {};
package/dist/BlobStore.js DELETED
@@ -1,19 +0,0 @@
1
- import * as Context from "effect/Context";
2
- import * as Data from "effect/Data";
3
- import * as Effect from "effect/Effect";
4
- import * as Stream from "effect/Stream";
5
- export class BlobStore extends Context.Tag("effect-start/BlobStore")() {
6
- }
7
- export class WatchEventCreated extends Data.TaggedClass("Created") {
8
- }
9
- export class WatchEventUpdated extends Data.TaggedClass("Updated") {
10
- }
11
- export class WatchEventDeleted extends Data.TaggedClass("Deleted") {
12
- }
13
- export class BlobWatcher extends Context.Tag("effect-start/BlobWatcher")() {
14
- }
15
- export const watch = (options) => Stream.unwrap(Effect.map(BlobWatcher, (watcher) => watcher.watch(options)));
16
- export const notify = (event) => Effect.flatMap(BlobWatcher, (watcher) => watcher.notify(event));
17
- export const ref = (key) => Effect.flatMap(BlobStore, (store) => store.ref(key));
18
- export const list = (options) => Stream.unwrap(Effect.map(BlobStore, (store) => store.list(options)));
19
- export const presign = (key, options) => Effect.flatMap(BlobStore, (store) => store.presign(key, options));
@@ -1,60 +0,0 @@
1
- /**
2
- * Adapted from upcomnig Effect 4 aka effect-smol.
3
- *
4
- * Kept a minimal interface without tempaltes and file descirptor
5
- * to keep it compatible if it lands in the core (ie. not in seperate platform package.)
6
- */
7
- import * as Context from "effect/Context";
8
- import * as Effect from "effect/Effect";
9
- import * as Pipeable from "effect/Pipeable";
10
- import type * as Scope from "effect/Scope";
11
- import type * as Sink from "effect/Sink";
12
- import type * as Stream from "effect/Stream";
13
- import type * as PlatformError from "./PlatformError.ts";
14
- declare const TypeId: unique symbol;
15
- type TypeId = typeof TypeId;
16
- type Stdio = "pipe" | "inherit" | "ignore";
17
- export interface Command extends Pipeable.Pipeable {
18
- readonly [TypeId]: TypeId;
19
- readonly command: string;
20
- readonly args: ReadonlyArray<string>;
21
- readonly cwd?: string;
22
- readonly env?: Record<string, string>;
23
- readonly stdin?: Stdio;
24
- readonly stdout?: Stdio;
25
- readonly stderr?: Stdio;
26
- readonly detached?: boolean;
27
- [Symbol.iterator](): Effect.EffectGenerator<Effect.Effect<ChildProcessHandle, PlatformError.PlatformError, ChildProcessSpawner | Scope.Scope>>;
28
- }
29
- export declare namespace Command {
30
- interface Options {
31
- readonly cwd?: string;
32
- readonly env?: Record<string, string>;
33
- readonly stdin?: Stdio;
34
- readonly stdout?: Stdio;
35
- readonly stderr?: Stdio;
36
- readonly detached?: boolean;
37
- }
38
- }
39
- export declare const isCommand: (u: unknown) => u is Command;
40
- export declare const make: (command: string, args?: ReadonlyArray<string>, options?: Command.Options) => Command;
41
- export type Signal = "SIGABRT" | "SIGALRM" | "SIGBUS" | "SIGCHLD" | "SIGCONT" | "SIGFPE" | "SIGHUP" | "SIGILL" | "SIGINT" | "SIGIO" | "SIGIOT" | "SIGKILL" | "SIGPIPE" | "SIGPOLL" | "SIGPROF" | "SIGPWR" | "SIGQUIT" | "SIGSEGV" | "SIGSTKFLT" | "SIGSTOP" | "SIGSYS" | "SIGTERM" | "SIGTRAP" | "SIGTSTP" | "SIGTTIN" | "SIGTTOU" | "SIGUNUSED" | "SIGURG" | "SIGUSR1" | "SIGUSR2" | "SIGVTALRM" | "SIGWINCH" | "SIGXCPU" | "SIGXFSZ" | "SIGBREAK" | "SIGLOST" | "SIGINFO";
42
- export interface KillOptions {
43
- readonly killSignal?: Signal | undefined;
44
- }
45
- export interface ChildProcessHandle {
46
- readonly pid: number;
47
- readonly exitCode: Effect.Effect<number, PlatformError.PlatformError>;
48
- readonly isRunning: Effect.Effect<boolean, PlatformError.PlatformError>;
49
- readonly kill: (options?: KillOptions) => Effect.Effect<void, PlatformError.PlatformError>;
50
- readonly stdin: Sink.Sink<void, Uint8Array, never, PlatformError.PlatformError>;
51
- readonly stdout: Stream.Stream<Uint8Array, PlatformError.PlatformError>;
52
- readonly stderr: Stream.Stream<Uint8Array, PlatformError.PlatformError>;
53
- }
54
- declare const ChildProcessSpawner_base: Context.TagClass<ChildProcessSpawner, "effect-start/ChildProcessSpawner", {
55
- readonly spawn: (command: Command) => Effect.Effect<ChildProcessHandle, PlatformError.PlatformError, Scope.Scope>;
56
- }>;
57
- export declare class ChildProcessSpawner extends ChildProcessSpawner_base {
58
- }
59
- export declare const spawn: (command: Command) => Effect.Effect<ChildProcessHandle, PlatformError.PlatformError, ChildProcessSpawner | Scope.Scope>;
60
- export {};