effect-start 0.23.1 → 0.26.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 (351) hide show
  1. package/package.json +18 -86
  2. package/src/Development.ts +3 -1
  3. package/src/Entity.ts +17 -0
  4. package/src/Fetch.ts +271 -0
  5. package/src/SqlIntrospect.ts +64 -70
  6. package/src/Start.ts +21 -24
  7. package/src/StartApp.ts +1 -1
  8. package/src/bun/BunServer.ts +42 -10
  9. package/src/hyper/HyperHtml.ts +0 -1
  10. package/src/sql/bun/index.ts +1 -1
  11. package/src/sql/index.ts +1 -0
  12. package/src/sql/libsql/index.ts +173 -0
  13. package/src/sql/libsql/libsql.d.ts +39 -0
  14. package/src/sql/mssql/index.ts +1 -1
  15. package/dist/BlobStore.d.ts +0 -80
  16. package/dist/BlobStore.js +0 -19
  17. package/dist/ChildProcess.d.ts +0 -60
  18. package/dist/ChildProcess.js +0 -30
  19. package/dist/Commander.d.ts +0 -100
  20. package/dist/Commander.js +0 -326
  21. package/dist/ContentNegotiation.d.ts +0 -12
  22. package/dist/ContentNegotiation.js +0 -359
  23. package/dist/Cookies.d.ts +0 -47
  24. package/dist/Cookies.js +0 -302
  25. package/dist/Development.d.ts +0 -39
  26. package/dist/Development.js +0 -58
  27. package/dist/Effectify.d.ts +0 -209
  28. package/dist/Effectify.js +0 -19
  29. package/dist/Entity.d.ts +0 -47
  30. package/dist/Entity.js +0 -224
  31. package/dist/FilePathPattern.d.ts +0 -29
  32. package/dist/FilePathPattern.js +0 -86
  33. package/dist/FileRouter.d.ts +0 -56
  34. package/dist/FileRouter.js +0 -148
  35. package/dist/FileRouterCodegen.d.ts +0 -18
  36. package/dist/FileRouterCodegen.js +0 -227
  37. package/dist/FileRouterPattern.d.ts +0 -9
  38. package/dist/FileRouterPattern.js +0 -35
  39. package/dist/FileSystem.d.ts +0 -158
  40. package/dist/FileSystem.js +0 -70
  41. package/dist/Http.d.ts +0 -37
  42. package/dist/Http.js +0 -88
  43. package/dist/HttpAppExtra.d.ts +0 -7
  44. package/dist/HttpAppExtra.js +0 -320
  45. package/dist/HttpUtils.d.ts +0 -3
  46. package/dist/HttpUtils.js +0 -11
  47. package/dist/PathPattern.d.ts +0 -134
  48. package/dist/PathPattern.js +0 -413
  49. package/dist/PlatformError.d.ts +0 -38
  50. package/dist/PlatformError.js +0 -25
  51. package/dist/PlatformRuntime.d.ts +0 -27
  52. package/dist/PlatformRuntime.js +0 -46
  53. package/dist/Route.d.ts +0 -97
  54. package/dist/Route.js +0 -100
  55. package/dist/RouteBody.d.ts +0 -47
  56. package/dist/RouteBody.js +0 -67
  57. package/dist/RouteError.d.ts +0 -98
  58. package/dist/RouteError.js +0 -55
  59. package/dist/RouteHook.d.ts +0 -12
  60. package/dist/RouteHook.js +0 -40
  61. package/dist/RouteHttp.d.ts +0 -21
  62. package/dist/RouteHttp.js +0 -258
  63. package/dist/RouteHttpTracer.d.ts +0 -10
  64. package/dist/RouteHttpTracer.js +0 -62
  65. package/dist/RouteMount.d.ts +0 -86
  66. package/dist/RouteMount.js +0 -63
  67. package/dist/RouteSchema.d.ts +0 -86
  68. package/dist/RouteSchema.js +0 -188
  69. package/dist/RouteSse.d.ts +0 -21
  70. package/dist/RouteSse.js +0 -79
  71. package/dist/RouteTree.d.ts +0 -57
  72. package/dist/RouteTree.js +0 -93
  73. package/dist/RouteTrie.d.ts +0 -20
  74. package/dist/RouteTrie.js +0 -152
  75. package/dist/RouterPattern.d.ts +0 -118
  76. package/dist/RouterPattern.js +0 -269
  77. package/dist/SchemaExtra.d.ts +0 -7
  78. package/dist/SchemaExtra.js +0 -74
  79. package/dist/Socket.d.ts +0 -27
  80. package/dist/Socket.js +0 -29
  81. package/dist/Sql.d.ts +0 -34
  82. package/dist/Sql.js +0 -5
  83. package/dist/SqlIntrospect.d.ts +0 -91
  84. package/dist/SqlIntrospect.js +0 -466
  85. package/dist/Start.d.ts +0 -44
  86. package/dist/Start.js +0 -49
  87. package/dist/StartApp.d.ts +0 -19
  88. package/dist/StartApp.js +0 -21
  89. package/dist/StreamExtra.d.ts +0 -28
  90. package/dist/StreamExtra.js +0 -100
  91. package/dist/System.d.ts +0 -7
  92. package/dist/System.js +0 -22
  93. package/dist/TuplePathPattern.d.ts +0 -9
  94. package/dist/TuplePathPattern.js +0 -68
  95. package/dist/Unique.d.ts +0 -50
  96. package/dist/Unique.js +0 -187
  97. package/dist/Values.d.ts +0 -27
  98. package/dist/Values.js +0 -36
  99. package/dist/bun/BunBlobStoreDisk.d.ts +0 -6
  100. package/dist/bun/BunBlobStoreDisk.js +0 -116
  101. package/dist/bun/BunBlobStoreS3.d.ts +0 -11
  102. package/dist/bun/BunBlobStoreS3.js +0 -89
  103. package/dist/bun/BunBlobWatcherDisk.d.ts +0 -6
  104. package/dist/bun/BunBlobWatcherDisk.js +0 -60
  105. package/dist/bun/BunBlobWatcherQueue.d.ts +0 -6
  106. package/dist/bun/BunBlobWatcherQueue.js +0 -17
  107. package/dist/bun/BunBundle.d.ts +0 -11
  108. package/dist/bun/BunBundle.js +0 -137
  109. package/dist/bun/BunChildProcessSpawner.d.ts +0 -3
  110. package/dist/bun/BunChildProcessSpawner.js +0 -103
  111. package/dist/bun/BunHttpServer.d.ts +0 -44
  112. package/dist/bun/BunHttpServer.js +0 -186
  113. package/dist/bun/BunHttpServer_web.d.ts +0 -60
  114. package/dist/bun/BunHttpServer_web.js +0 -252
  115. package/dist/bun/BunImportTrackerPlugin.d.ts +0 -13
  116. package/dist/bun/BunImportTrackerPlugin.js +0 -69
  117. package/dist/bun/BunPlatformHttpServer.d.ts +0 -10
  118. package/dist/bun/BunPlatformHttpServer.js +0 -53
  119. package/dist/bun/BunRoute.d.ts +0 -48
  120. package/dist/bun/BunRoute.js +0 -121
  121. package/dist/bun/BunRuntime.d.ts +0 -2
  122. package/dist/bun/BunRuntime.js +0 -31
  123. package/dist/bun/BunServer.d.ts +0 -40
  124. package/dist/bun/BunServer.js +0 -157
  125. package/dist/bun/BunServerRequest.d.ts +0 -60
  126. package/dist/bun/BunServerRequest.js +0 -252
  127. package/dist/bun/BunSql.d.ts +0 -4
  128. package/dist/bun/BunSql.js +0 -81
  129. package/dist/bun/BunVirtualFilesPlugin.d.ts +0 -4
  130. package/dist/bun/BunVirtualFilesPlugin.js +0 -40
  131. package/dist/bun/_BunEnhancedResolve.d.ts +0 -45
  132. package/dist/bun/_BunEnhancedResolve.js +0 -102
  133. package/dist/bun/index.d.ts +0 -5
  134. package/dist/bun/index.js +0 -5
  135. package/dist/bundler/Bundle.d.ts +0 -61
  136. package/dist/bundler/Bundle.js +0 -48
  137. package/dist/bundler/BundleFiles.d.ts +0 -13
  138. package/dist/bundler/BundleFiles.js +0 -96
  139. package/dist/bundler/BundleHttp.d.ts +0 -45
  140. package/dist/bundler/BundleHttp.js +0 -176
  141. package/dist/bundler/BundleRoute.d.ts +0 -27
  142. package/dist/bundler/BundleRoute.js +0 -51
  143. package/dist/client/Overlay.d.ts +0 -2
  144. package/dist/client/Overlay.js +0 -32
  145. package/dist/client/ScrollState.d.ts +0 -6
  146. package/dist/client/ScrollState.js +0 -94
  147. package/dist/client/index.d.ts +0 -6
  148. package/dist/client/index.js +0 -79
  149. package/dist/console/Console.d.ts +0 -6
  150. package/dist/console/Console.js +0 -26
  151. package/dist/console/ConsoleErrors.d.ts +0 -3
  152. package/dist/console/ConsoleErrors.js +0 -200
  153. package/dist/console/ConsoleLogger.d.ts +0 -3
  154. package/dist/console/ConsoleLogger.js +0 -47
  155. package/dist/console/ConsoleMetrics.d.ts +0 -3
  156. package/dist/console/ConsoleMetrics.js +0 -61
  157. package/dist/console/ConsoleProcess.d.ts +0 -3
  158. package/dist/console/ConsoleProcess.js +0 -49
  159. package/dist/console/ConsoleStore.d.ts +0 -144
  160. package/dist/console/ConsoleStore.js +0 -61
  161. package/dist/console/ConsoleTracer.d.ts +0 -3
  162. package/dist/console/ConsoleTracer.js +0 -94
  163. package/dist/console/Simulation.d.ts +0 -2
  164. package/dist/console/Simulation.js +0 -633
  165. package/dist/console/index.d.ts +0 -3
  166. package/dist/console/index.js +0 -3
  167. package/dist/console/routes/errors/route.d.ts +0 -10
  168. package/dist/console/routes/errors/route.js +0 -47
  169. package/dist/console/routes/fiberDetail.d.ts +0 -16
  170. package/dist/console/routes/fiberDetail.js +0 -38
  171. package/dist/console/routes/fibers/route.d.ts +0 -10
  172. package/dist/console/routes/fibers/route.js +0 -19
  173. package/dist/console/routes/git/route.d.ts +0 -11
  174. package/dist/console/routes/git/route.js +0 -33
  175. package/dist/console/routes/layout.d.ts +0 -9
  176. package/dist/console/routes/layout.js +0 -3
  177. package/dist/console/routes/logs/route.d.ts +0 -10
  178. package/dist/console/routes/logs/route.js +0 -32
  179. package/dist/console/routes/metrics/route.d.ts +0 -10
  180. package/dist/console/routes/metrics/route.js +0 -17
  181. package/dist/console/routes/route.d.ts +0 -6
  182. package/dist/console/routes/route.js +0 -5
  183. package/dist/console/routes/routes/route.d.ts +0 -6
  184. package/dist/console/routes/routes/route.js +0 -20
  185. package/dist/console/routes/services/route.d.ts +0 -6
  186. package/dist/console/routes/services/route.js +0 -12
  187. package/dist/console/routes/system/route.d.ts +0 -10
  188. package/dist/console/routes/system/route.js +0 -18
  189. package/dist/console/routes/traceDetail.d.ts +0 -16
  190. package/dist/console/routes/traceDetail.js +0 -14
  191. package/dist/console/routes/traces/route.d.ts +0 -10
  192. package/dist/console/routes/traces/route.js +0 -39
  193. package/dist/console/routes/tree.d.ts +0 -153
  194. package/dist/console/routes/tree.js +0 -29
  195. package/dist/console/ui/Errors.d.ts +0 -4
  196. package/dist/console/ui/Errors.js +0 -15
  197. package/dist/console/ui/Fibers.d.ts +0 -24
  198. package/dist/console/ui/Fibers.js +0 -121
  199. package/dist/console/ui/Git.d.ts +0 -20
  200. package/dist/console/ui/Git.js +0 -95
  201. package/dist/console/ui/Logs.d.ts +0 -4
  202. package/dist/console/ui/Logs.js +0 -25
  203. package/dist/console/ui/Metrics.d.ts +0 -4
  204. package/dist/console/ui/Metrics.js +0 -26
  205. package/dist/console/ui/Routes.d.ts +0 -8
  206. package/dist/console/ui/Routes.js +0 -70
  207. package/dist/console/ui/Services.d.ts +0 -10
  208. package/dist/console/ui/Services.js +0 -246
  209. package/dist/console/ui/Shell.d.ts +0 -10
  210. package/dist/console/ui/Shell.js +0 -7
  211. package/dist/console/ui/System.d.ts +0 -4
  212. package/dist/console/ui/System.js +0 -35
  213. package/dist/console/ui/Traces.d.ts +0 -12
  214. package/dist/console/ui/Traces.js +0 -179
  215. package/dist/datastar/actions/fetch.d.ts +0 -30
  216. package/dist/datastar/actions/fetch.js +0 -403
  217. package/dist/datastar/actions/peek.d.ts +0 -1
  218. package/dist/datastar/actions/peek.js +0 -13
  219. package/dist/datastar/actions/setAll.d.ts +0 -1
  220. package/dist/datastar/actions/setAll.js +0 -12
  221. package/dist/datastar/actions/toggleAll.d.ts +0 -1
  222. package/dist/datastar/actions/toggleAll.js +0 -12
  223. package/dist/datastar/attributes/attr.d.ts +0 -1
  224. package/dist/datastar/attributes/attr.js +0 -48
  225. package/dist/datastar/attributes/bind.d.ts +0 -1
  226. package/dist/datastar/attributes/bind.js +0 -175
  227. package/dist/datastar/attributes/class.d.ts +0 -1
  228. package/dist/datastar/attributes/class.js +0 -47
  229. package/dist/datastar/attributes/computed.d.ts +0 -1
  230. package/dist/datastar/attributes/computed.js +0 -26
  231. package/dist/datastar/attributes/effect.d.ts +0 -1
  232. package/dist/datastar/attributes/effect.js +0 -9
  233. package/dist/datastar/attributes/indicator.d.ts +0 -1
  234. package/dist/datastar/attributes/indicator.js +0 -30
  235. package/dist/datastar/attributes/init.d.ts +0 -1
  236. package/dist/datastar/attributes/init.js +0 -26
  237. package/dist/datastar/attributes/jsonSignals.d.ts +0 -1
  238. package/dist/datastar/attributes/jsonSignals.js +0 -30
  239. package/dist/datastar/attributes/on.d.ts +0 -1
  240. package/dist/datastar/attributes/on.js +0 -78
  241. package/dist/datastar/attributes/onIntersect.d.ts +0 -1
  242. package/dist/datastar/attributes/onIntersect.js +0 -53
  243. package/dist/datastar/attributes/onInterval.d.ts +0 -1
  244. package/dist/datastar/attributes/onInterval.js +0 -30
  245. package/dist/datastar/attributes/onSignalPatch.d.ts +0 -1
  246. package/dist/datastar/attributes/onSignalPatch.js +0 -42
  247. package/dist/datastar/attributes/ref.d.ts +0 -1
  248. package/dist/datastar/attributes/ref.js +0 -10
  249. package/dist/datastar/attributes/show.d.ts +0 -1
  250. package/dist/datastar/attributes/show.js +0 -31
  251. package/dist/datastar/attributes/signals.d.ts +0 -1
  252. package/dist/datastar/attributes/signals.js +0 -17
  253. package/dist/datastar/attributes/style.d.ts +0 -1
  254. package/dist/datastar/attributes/style.js +0 -50
  255. package/dist/datastar/attributes/text.d.ts +0 -1
  256. package/dist/datastar/attributes/text.js +0 -26
  257. package/dist/datastar/engine.d.ts +0 -162
  258. package/dist/datastar/engine.js +0 -999
  259. package/dist/datastar/happydom.d.ts +0 -1
  260. package/dist/datastar/happydom.js +0 -8
  261. package/dist/datastar/index.d.ts +0 -24
  262. package/dist/datastar/index.js +0 -24
  263. package/dist/datastar/load.d.ts +0 -24
  264. package/dist/datastar/load.js +0 -24
  265. package/dist/datastar/utils.d.ts +0 -51
  266. package/dist/datastar/utils.js +0 -202
  267. package/dist/datastar/watchers/patchElements.d.ts +0 -1
  268. package/dist/datastar/watchers/patchElements.js +0 -399
  269. package/dist/datastar/watchers/patchSignals.d.ts +0 -1
  270. package/dist/datastar/watchers/patchSignals.js +0 -14
  271. package/dist/experimental/EncryptedCookies.d.ts +0 -48
  272. package/dist/experimental/EncryptedCookies.js +0 -212
  273. package/dist/experimental/SseHttpResponse.d.ts +0 -7
  274. package/dist/experimental/SseHttpResponse.js +0 -28
  275. package/dist/experimental/index.d.ts +0 -1
  276. package/dist/experimental/index.js +0 -1
  277. package/dist/hyper/Hyper.d.ts +0 -25
  278. package/dist/hyper/Hyper.js +0 -23
  279. package/dist/hyper/HyperHtml.d.ts +0 -23
  280. package/dist/hyper/HyperHtml.js +0 -150
  281. package/dist/hyper/HyperHtml.test.d.ts +0 -1
  282. package/dist/hyper/HyperHtml.test.js +0 -197
  283. package/dist/hyper/HyperNode.d.ts +0 -14
  284. package/dist/hyper/HyperNode.js +0 -11
  285. package/dist/hyper/HyperRoute.d.ts +0 -8
  286. package/dist/hyper/HyperRoute.js +0 -32
  287. package/dist/hyper/HyperRoute.test.d.ts +0 -1
  288. package/dist/hyper/HyperRoute.test.js +0 -83
  289. package/dist/hyper/html.d.ts +0 -11
  290. package/dist/hyper/html.js +0 -30
  291. package/dist/hyper/index.d.ts +0 -6
  292. package/dist/hyper/index.js +0 -5
  293. package/dist/hyper/jsx-runtime.d.ts +0 -7
  294. package/dist/hyper/jsx-runtime.js +0 -8
  295. package/dist/index.d.ts +0 -8
  296. package/dist/index.js +0 -8
  297. package/dist/inference_check.d.ts +0 -1
  298. package/dist/inference_check.js +0 -15
  299. package/dist/lint/plugin.d.ts +0 -86
  300. package/dist/lint/plugin.js +0 -341
  301. package/dist/middlewares/BasicAuthMiddleware.d.ts +0 -8
  302. package/dist/middlewares/BasicAuthMiddleware.js +0 -22
  303. package/dist/middlewares/index.d.ts +0 -1
  304. package/dist/middlewares/index.js +0 -1
  305. package/dist/node/Effectify.d.ts +0 -209
  306. package/dist/node/Effectify.js +0 -19
  307. package/dist/node/FileSystem.d.ts +0 -7
  308. package/dist/node/FileSystem.js +0 -420
  309. package/dist/node/NodeFileSystem.d.ts +0 -7
  310. package/dist/node/NodeFileSystem.js +0 -410
  311. package/dist/node/NodeUtils.d.ts +0 -2
  312. package/dist/node/NodeUtils.js +0 -20
  313. package/dist/node/PlatformError.d.ts +0 -46
  314. package/dist/node/PlatformError.js +0 -43
  315. package/dist/node/Utils.d.ts +0 -1
  316. package/dist/node/Utils.js +0 -19
  317. package/dist/repro_fail.d.ts +0 -1
  318. package/dist/repro_fail.js +0 -14
  319. package/dist/sql/bun/index.d.ts +0 -3
  320. package/dist/sql/bun/index.js +0 -75
  321. package/dist/sql/mssql/docker.d.ts +0 -2
  322. package/dist/sql/mssql/docker.js +0 -67
  323. package/dist/sql/mssql/index.d.ts +0 -21
  324. package/dist/sql/mssql/index.js +0 -113
  325. package/dist/testing/TestHttpClient.d.ts +0 -13
  326. package/dist/testing/TestHttpClient.js +0 -68
  327. package/dist/testing/TestLogger.d.ts +0 -13
  328. package/dist/testing/TestLogger.js +0 -32
  329. package/dist/testing/index.d.ts +0 -2
  330. package/dist/testing/index.js +0 -2
  331. package/dist/testing/utils.d.ts +0 -9
  332. package/dist/testing/utils.js +0 -39
  333. package/dist/x/cloudflare/CloudflareTunnel.d.ts +0 -10
  334. package/dist/x/cloudflare/CloudflareTunnel.js +0 -30
  335. package/dist/x/cloudflare/index.d.ts +0 -1
  336. package/dist/x/cloudflare/index.js +0 -1
  337. package/dist/x/datastar/Datastar.d.ts +0 -6
  338. package/dist/x/datastar/Datastar.js +0 -47
  339. package/dist/x/datastar/index.d.ts +0 -1
  340. package/dist/x/datastar/index.js +0 -1
  341. package/dist/x/tailscale/TailscaleTunnel.d.ts +0 -15
  342. package/dist/x/tailscale/TailscaleTunnel.js +0 -68
  343. package/dist/x/tailscale/index.d.ts +0 -1
  344. package/dist/x/tailscale/index.js +0 -1
  345. package/dist/x/tailwind/TailwindPlugin.d.ts +0 -23
  346. package/dist/x/tailwind/TailwindPlugin.js +0 -219
  347. package/dist/x/tailwind/compile.d.ts +0 -19
  348. package/dist/x/tailwind/compile.js +0 -154
  349. package/dist/x/tailwind/plugin.d.ts +0 -2
  350. package/dist/x/tailwind/plugin.js +0 -15
  351. /package/src/{Sql.ts → sql/Sql.ts} +0 -0
@@ -1,60 +0,0 @@
1
- import type * as FileSystem from "@effect/platform/FileSystem";
2
- import * as Headers from "@effect/platform/Headers";
3
- import * as HttpIncomingMessage from "@effect/platform/HttpIncomingMessage";
4
- import type { HttpMethod } from "@effect/platform/HttpMethod";
5
- import * as HttpServerError from "@effect/platform/HttpServerError";
6
- import * as HttpServerRequest from "@effect/platform/HttpServerRequest";
7
- import * as HttpServerResponse from "@effect/platform/HttpServerResponse";
8
- import type * as Multipart from "@effect/platform/Multipart";
9
- import type * as Path from "@effect/platform/Path";
10
- import * as Socket from "@effect/platform/Socket";
11
- import * as UrlParams from "@effect/platform/UrlParams";
12
- import type { Server as BunServerInstance, ServerWebSocket } from "bun";
13
- import * as Deferred from "effect/Deferred";
14
- import * as Effect from "effect/Effect";
15
- import * as Inspectable from "effect/Inspectable";
16
- import * as Option from "effect/Option";
17
- import * as Runtime from "effect/Runtime";
18
- import type * as Scope from "effect/Scope";
19
- import * as Stream from "effect/Stream";
20
- export interface WebSocketContext {
21
- readonly deferred: Deferred.Deferred<ServerWebSocket<WebSocketContext>>;
22
- readonly closeDeferred: Deferred.Deferred<void, Socket.SocketError>;
23
- readonly buffer: Array<Uint8Array | string>;
24
- run: (_: Uint8Array | string) => void;
25
- }
26
- export declare class ServerRequestImpl extends Inspectable.Class implements HttpServerRequest.HttpServerRequest {
27
- readonly [HttpServerRequest.TypeId]: HttpServerRequest.TypeId;
28
- readonly [HttpIncomingMessage.TypeId]: HttpIncomingMessage.TypeId;
29
- readonly source: Request;
30
- resolve: (response: Response) => void;
31
- readonly url: string;
32
- private bunServer;
33
- headersOverride?: Headers.Headers;
34
- private remoteAddressOverride?;
35
- constructor(source: Request, resolve: (response: Response) => void, url: string, bunServer: BunServerInstance<WebSocketContext>, headersOverride?: Headers.Headers, remoteAddressOverride?: string);
36
- toJSON(): unknown;
37
- modify(options: {
38
- readonly url?: string | undefined;
39
- readonly headers?: Headers.Headers | undefined;
40
- readonly remoteAddress?: string | undefined;
41
- }): ServerRequestImpl;
42
- get method(): HttpMethod;
43
- get originalUrl(): string;
44
- get remoteAddress(): Option.Option<string>;
45
- get headers(): Headers.Headers;
46
- private cachedCookies;
47
- get cookies(): Record<string, string>;
48
- get stream(): Stream.Stream<Uint8Array, HttpServerError.RequestError>;
49
- private textEffect;
50
- get text(): Effect.Effect<string, HttpServerError.RequestError>;
51
- get json(): Effect.Effect<unknown, HttpServerError.RequestError>;
52
- get urlParamsBody(): Effect.Effect<UrlParams.UrlParams, HttpServerError.RequestError>;
53
- private multipartEffect;
54
- get multipart(): Effect.Effect<Multipart.Persisted, Multipart.MultipartError, Scope.Scope | FileSystem.FileSystem | Path.Path>;
55
- get multipartStream(): Stream.Stream<Multipart.Part, Multipart.MultipartError>;
56
- private arrayBufferEffect;
57
- get arrayBuffer(): Effect.Effect<ArrayBuffer, HttpServerError.RequestError>;
58
- get upgrade(): Effect.Effect<Socket.Socket, HttpServerError.RequestError>;
59
- }
60
- export declare function makeResponse(request: HttpServerRequest.HttpServerRequest, response: HttpServerResponse.HttpServerResponse, runtime: Runtime.Runtime<never>): Response;
@@ -1,252 +0,0 @@
1
- import * as Cookies from "@effect/platform/Cookies";
2
- import * as Headers from "@effect/platform/Headers";
3
- import * as HttpApp from "@effect/platform/HttpApp";
4
- import * as HttpIncomingMessage from "@effect/platform/HttpIncomingMessage";
5
- import * as HttpServerError from "@effect/platform/HttpServerError";
6
- import * as HttpServerRequest from "@effect/platform/HttpServerRequest";
7
- import * as Socket from "@effect/platform/Socket";
8
- import * as UrlParams from "@effect/platform/UrlParams";
9
- import * as Deferred from "effect/Deferred";
10
- import * as Effect from "effect/Effect";
11
- import * as FiberSet from "effect/FiberSet";
12
- import * as Inspectable from "effect/Inspectable";
13
- import * as Option from "effect/Option";
14
- import * as Stream from "effect/Stream";
15
- export class ServerRequestImpl extends Inspectable.Class {
16
- [HttpServerRequest.TypeId];
17
- [HttpIncomingMessage.TypeId];
18
- source;
19
- resolve;
20
- url;
21
- bunServer;
22
- headersOverride;
23
- remoteAddressOverride;
24
- constructor(source, resolve, url, bunServer, headersOverride, remoteAddressOverride) {
25
- super();
26
- this[HttpServerRequest.TypeId] = HttpServerRequest.TypeId;
27
- this[HttpIncomingMessage.TypeId] = HttpIncomingMessage.TypeId;
28
- this.source = source;
29
- this.resolve = resolve;
30
- this.url = url;
31
- this.bunServer = bunServer;
32
- this.headersOverride = headersOverride;
33
- this.remoteAddressOverride = remoteAddressOverride;
34
- }
35
- toJSON() {
36
- return HttpIncomingMessage.inspect(this, {
37
- _id: "@effect/platform/HttpServerRequest",
38
- method: this.method,
39
- url: this.originalUrl,
40
- });
41
- }
42
- modify(options) {
43
- return new ServerRequestImpl(this.source, this.resolve, options.url ?? this.url, this.bunServer, options.headers ?? this.headersOverride, options.remoteAddress ?? this.remoteAddressOverride);
44
- }
45
- get method() {
46
- return this.source.method.toUpperCase();
47
- }
48
- get originalUrl() {
49
- return this.source.url;
50
- }
51
- get remoteAddress() {
52
- return this.remoteAddressOverride
53
- ? Option.some(this.remoteAddressOverride)
54
- : Option.fromNullable(this.bunServer.requestIP(this.source)?.address);
55
- }
56
- get headers() {
57
- this.headersOverride ??= Headers.fromInput(this.source.headers);
58
- return this.headersOverride;
59
- }
60
- cachedCookies;
61
- get cookies() {
62
- if (this.cachedCookies) {
63
- return this.cachedCookies;
64
- }
65
- return this.cachedCookies = Cookies.parseHeader(this.headers.cookie ?? "");
66
- }
67
- get stream() {
68
- return this.source.body
69
- ? Stream.fromReadableStream(() => this.source.body, (cause) => new HttpServerError.RequestError({
70
- request: this,
71
- reason: "Decode",
72
- cause,
73
- }))
74
- : Stream.fail(new HttpServerError.RequestError({
75
- request: this,
76
- reason: "Decode",
77
- description: "can not create stream from empty body",
78
- }));
79
- }
80
- textEffect;
81
- get text() {
82
- if (this.textEffect) {
83
- return this.textEffect;
84
- }
85
- this.textEffect = Effect.runSync(Effect.cached(Effect.tryPromise({
86
- try: () => this.source.text(),
87
- catch: (cause) => new HttpServerError.RequestError({
88
- request: this,
89
- reason: "Decode",
90
- cause,
91
- }),
92
- })));
93
- return this.textEffect;
94
- }
95
- get json() {
96
- return Effect.tryMap(this.text, {
97
- try: (_) => JSON.parse(_),
98
- catch: (cause) => new HttpServerError.RequestError({
99
- request: this,
100
- reason: "Decode",
101
- cause,
102
- }),
103
- });
104
- }
105
- get urlParamsBody() {
106
- return Effect.flatMap(this.text, (_) => Effect.try({
107
- try: () => UrlParams.fromInput(new URLSearchParams(_)),
108
- catch: (cause) => new HttpServerError.RequestError({
109
- request: this,
110
- reason: "Decode",
111
- cause,
112
- }),
113
- }));
114
- }
115
- multipartEffect;
116
- get multipart() {
117
- if (this.multipartEffect) {
118
- return this.multipartEffect;
119
- }
120
- this.multipartEffect = Effect.runSync(Effect.cached(Effect.die("Multipart not implemented")));
121
- return this.multipartEffect;
122
- }
123
- get multipartStream() {
124
- return Stream.die("Multipart stream not implemented");
125
- }
126
- arrayBufferEffect;
127
- get arrayBuffer() {
128
- if (this.arrayBufferEffect) {
129
- return this.arrayBufferEffect;
130
- }
131
- this.arrayBufferEffect = Effect.runSync(Effect.cached(Effect.tryPromise({
132
- try: () => this.source.arrayBuffer(),
133
- catch: (cause) => new HttpServerError.RequestError({
134
- request: this,
135
- reason: "Decode",
136
- cause,
137
- }),
138
- })));
139
- return this.arrayBufferEffect;
140
- }
141
- get upgrade() {
142
- return Effect.flatMap(Effect.all([
143
- Deferred.make(),
144
- Deferred.make(),
145
- Effect.makeSemaphore(1),
146
- ]), ([deferred, closeDeferred, semaphore]) => Effect.async((resume) => {
147
- const success = this.bunServer.upgrade(this.source, {
148
- data: {
149
- deferred,
150
- closeDeferred,
151
- buffer: [],
152
- run: wsDefaultRun,
153
- },
154
- });
155
- if (!success) {
156
- resume(Effect.fail(new HttpServerError.RequestError({
157
- request: this,
158
- reason: "Decode",
159
- description: "Not an upgradeable ServerRequest",
160
- })));
161
- return;
162
- }
163
- resume(Effect.map(Deferred.await(deferred), (ws) => {
164
- const write = (chunk) => Effect.sync(() => {
165
- if (typeof chunk === "string") {
166
- ws.sendText(chunk);
167
- }
168
- else if (Socket.isCloseEvent(chunk)) {
169
- ws.close(chunk.code, chunk.reason);
170
- }
171
- else {
172
- ws.sendBinary(chunk);
173
- }
174
- return true;
175
- });
176
- const writer = Effect.succeed(write);
177
- const runRaw = Effect.fnUntraced(function* (handler, opts) {
178
- const set = yield* FiberSet.make();
179
- const run = yield* FiberSet.runtime(set)();
180
- function runRawInner(data) {
181
- const result = handler(data);
182
- if (Effect.isEffect(result)) {
183
- run(result);
184
- }
185
- }
186
- ws.data.run = runRawInner;
187
- ws.data.buffer.forEach(runRawInner);
188
- ws.data.buffer.length = 0;
189
- if (opts?.onOpen)
190
- yield* opts.onOpen;
191
- return yield* FiberSet.join(set);
192
- }, Effect.scoped, Effect.onExit((exit) => {
193
- ws.close(exit._tag === "Success" ? 1000 : 1011);
194
- return Effect.void;
195
- }), Effect.raceFirst(Deferred.await(closeDeferred)), semaphore.withPermits(1));
196
- const encoder = new TextEncoder();
197
- const run = (handler, opts) => runRaw((data) => typeof data === "string"
198
- ? handler(encoder.encode(data))
199
- : handler(data), opts);
200
- return Socket.Socket.of({
201
- [Socket.TypeId]: Socket.TypeId,
202
- run,
203
- runRaw,
204
- writer,
205
- });
206
- }));
207
- }));
208
- }
209
- }
210
- function wsDefaultRun(_) {
211
- this.buffer.push(_);
212
- }
213
- export function makeResponse(request, response, runtime) {
214
- const fields = {
215
- headers: new globalThis.Headers(response.headers),
216
- status: response.status,
217
- };
218
- if (!Cookies.isEmpty(response.cookies)) {
219
- for (const header of Cookies.toSetCookieHeaders(response.cookies)) {
220
- fields.headers.append("set-cookie", header);
221
- }
222
- }
223
- if (response.statusText !== undefined) {
224
- fields.statusText = response.statusText;
225
- }
226
- if (request.method === "HEAD") {
227
- return new Response(undefined, fields);
228
- }
229
- const ejectedResponse = HttpApp.unsafeEjectStreamScope(response);
230
- const body = ejectedResponse.body;
231
- switch (body._tag) {
232
- case "Empty": {
233
- return new Response(undefined, fields);
234
- }
235
- case "Uint8Array":
236
- case "Raw": {
237
- if (body.body instanceof Response) {
238
- for (const [key, value] of fields.headers.entries()) {
239
- body.body.headers.set(key, value);
240
- }
241
- return body.body;
242
- }
243
- return new Response(body.body, fields);
244
- }
245
- case "FormData": {
246
- return new Response(body.formData, fields);
247
- }
248
- case "Stream": {
249
- return new Response(Stream.toReadableStreamRuntime(body.stream, runtime), fields);
250
- }
251
- }
252
- }
@@ -1,13 +0,0 @@
1
- import { type BunPlugin, type Import } from "bun";
2
- export type ImportMap = ReadonlyMap<string, Array<Import>>;
3
- /**
4
- * Tracks all imported modules.
5
- * State can be accessed via 'virtual:import-tracker' module within a bundle
6
- * or through `state` property returned by this function.
7
- */
8
- export declare const make: (opts?: {
9
- includeNodeModules?: false;
10
- baseDir?: string;
11
- }) => BunPlugin & {
12
- state: ImportMap;
13
- };
@@ -1,69 +0,0 @@
1
- import * as NPath from "node:path";
2
- /**
3
- * Tracks all imported modules.
4
- * State can be accessed via 'virtual:import-tracker' module within a bundle
5
- * or through `state` property returned by this function.
6
- */
7
- export const make = (opts = {}) => {
8
- const foundImports = new Map();
9
- const baseDir = opts.baseDir ?? process.cwd();
10
- return {
11
- name: "import tracker",
12
- setup(build) {
13
- const transpiler = new Bun.Transpiler({
14
- loader: "tsx",
15
- });
16
- // Each module that goes through this onLoad callback
17
- // will record its imports in `trackedImports`
18
- build.onLoad({
19
- filter: /\.(ts|js)x?$/,
20
- }, async (args) => {
21
- if (!opts.includeNodeModules && args.path.includes("/node_modules/")) {
22
- return undefined;
23
- }
24
- const contents = await Bun.file(args.path).arrayBuffer();
25
- try {
26
- const fileImport = transpiler.scanImports(contents);
27
- const resolvedImports = fileImport.map((imp) => {
28
- const absoluteImportPath = NPath.resolve(NPath.dirname(args.path),
29
- // 'file' is a default namespace, trim it
30
- imp.path.replace(/^file:/, ""));
31
- return {
32
- ...imp,
33
- // keep all module identifiers with namespace intact
34
- path: /(\w+):/.test(imp.path)
35
- ? imp.path
36
- : NPath.relative(baseDir, absoluteImportPath),
37
- };
38
- });
39
- foundImports.set(NPath.relative(baseDir, args.path), resolvedImports);
40
- }
41
- catch (e) { }
42
- return undefined;
43
- });
44
- build.onResolve({
45
- filter: /^virtual:import-tracker$/,
46
- }, () => {
47
- return {
48
- namespace: "effect-start",
49
- path: "virtual:import-tracker",
50
- };
51
- });
52
- build.onLoad({
53
- filter: /^virtual:import-tracker$/,
54
- namespace: "effect-start",
55
- }, async (args) => {
56
- // Wait for all files to be loaded, ensuring
57
- // that every file goes through the above `onLoad()` function
58
- // and their imports tracked
59
- await args.defer();
60
- // Emit JSON containing the stats of each import
61
- return {
62
- contents: JSON.stringify(Object.fromEntries(foundImports.entries())),
63
- loader: "json",
64
- };
65
- });
66
- },
67
- state: foundImports,
68
- };
69
- };
@@ -1,10 +0,0 @@
1
- import * as HttpServer from "@effect/platform/HttpServer";
2
- import * as Effect from "effect/Effect";
3
- import type * as Scope from "effect/Scope";
4
- import * as BunServer from "./BunServer.ts";
5
- /**
6
- * From times when we used @effect/platform
7
- * Not used any more internally. Kept for the future,
8
- * in case someone will need it for whatever reason. [2026]
9
- */
10
- export declare const make: Effect.Effect<HttpServer.HttpServer, never, Scope.Scope | BunServer.BunServer>;
@@ -1,53 +0,0 @@
1
- import * as HttpApp from "@effect/platform/HttpApp";
2
- import * as HttpServer from "@effect/platform/HttpServer";
3
- import * as HttpServerError from "@effect/platform/HttpServerError";
4
- import * as HttpServerRequest from "@effect/platform/HttpServerRequest";
5
- import * as Effect from "effect/Effect";
6
- import * as FiberSet from "effect/FiberSet";
7
- import * as BunServer from "./BunServer.js";
8
- import * as BunServerRequest from "./BunServerRequest.js";
9
- /**
10
- * From times when we used @effect/platform
11
- * Not used any more internally. Kept for the future,
12
- * in case someone will need it for whatever reason. [2026]
13
- */
14
- export const make = Effect.gen(function* () {
15
- const bunServer = yield* BunServer.BunServer;
16
- return HttpServer.make({
17
- address: {
18
- _tag: "TcpAddress",
19
- port: bunServer.server.port,
20
- hostname: bunServer.server.hostname,
21
- },
22
- serve(httpApp, middleware) {
23
- return Effect.gen(function* () {
24
- const runFork = yield* FiberSet.makeRuntime();
25
- const runtime = yield* Effect.runtime();
26
- const app = HttpApp.toHandled(httpApp, (request, response) => Effect.sync(() => {
27
- ;
28
- request.resolve(BunServerRequest.makeResponse(request, response, runtime));
29
- }), middleware);
30
- function handler(request, server) {
31
- return new Promise((resolve, _reject) => {
32
- const fiber = runFork(Effect.provideService(app, HttpServerRequest.HttpServerRequest, new BunServerRequest.ServerRequestImpl(request, resolve, removeHost(request.url), server)));
33
- request.signal.addEventListener("abort", () => {
34
- runFork(fiber.interruptAsFork(HttpServerError.clientAbortFiberId));
35
- }, { once: true });
36
- });
37
- }
38
- yield* Effect.acquireRelease(Effect.sync(() => {
39
- bunServer.pushHandler(handler);
40
- }), () => Effect.sync(() => {
41
- bunServer.popHandler();
42
- }));
43
- });
44
- },
45
- });
46
- });
47
- const removeHost = (url) => {
48
- if (url[0] === "/") {
49
- return url;
50
- }
51
- const index = url.indexOf("/", url.indexOf("//") + 2);
52
- return index === -1 ? "/" : url.slice(index);
53
- };
@@ -1,48 +0,0 @@
1
- import type * as Bun from "bun";
2
- import * as Option from "effect/Option";
3
- import * as Route from "../Route.ts";
4
- import * as BunServer from "./BunServer.ts";
5
- declare const BunRouteError_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]; }) => import("effect/Cause").YieldableError & {
6
- readonly _tag: "BunRouteError";
7
- } & Readonly<A>;
8
- export declare class BunRouteError extends BunRouteError_base<{
9
- reason: "ProxyError" | "UnsupportedPattern";
10
- pattern: string;
11
- message: string;
12
- }> {
13
- }
14
- export type BunDescriptors = {
15
- bunPrefix: string;
16
- bunLoad: () => Promise<Bun.HTMLBundle>;
17
- };
18
- export declare function descriptors(route: Route.Route.Route<any, any, any, any, any>): BunDescriptors | undefined;
19
- type HTMLBundleModule = Bun.HTMLBundle | {
20
- default: Bun.HTMLBundle;
21
- };
22
- export declare function htmlBundle(load: () => HTMLBundleModule | Promise<HTMLBundleModule>): <D extends Route.RouteDescriptor.Any, B extends {}, I extends Route.Route.Tuple>(self: Route.RouteSet.RouteSet<D, B, I>) => Route.RouteSet.RouteSet<D, B, [...I, Route.Route.Route<BunDescriptors & {
23
- format: "html";
24
- }, {
25
- request: Request;
26
- }, string, BunRouteError, BunServer.BunServer>]>;
27
- type BunServerFetchHandler = (request: Request, server: Bun.Server<unknown>) => Response | Promise<Response>;
28
- type BunServerRouteHandler = Bun.HTMLBundle | BunServerFetchHandler | Partial<Record<Bun.Serve.HTTPMethod, BunServerFetchHandler>>;
29
- export type BunRoutes = Record<string, BunServerRouteHandler>;
30
- /**
31
- * Validates that a route pattern can be implemented with Bun.serve routes.
32
- *
33
- * Supported patterns (native or via multiple routes):
34
- * - /exact - Exact match
35
- * - /users/:id - Full-segment named param
36
- * - /path/* - Directory wildcard
37
- * - /[[404]] - Catch-all / Rest
38
- *
39
- * Unsupported patterns (cannot be implemented in Bun):
40
- * - /pk_[id] - Prefix before param
41
- * - /[id]_sfx - Suffix after param
42
- * - /[id].json - Suffix with dot
43
- * - /[id]~test - Suffix with tilde
44
- * - /hello-* - Inline prefix wildcard
45
- */
46
- export declare function validateBunPattern(pattern: string): Option.Option<BunRouteError>;
47
- export declare const isHtmlBundle: (handle: any) => boolean;
48
- export {};
@@ -1,121 +0,0 @@
1
- import * as Array from "effect/Array";
2
- import * as Data from "effect/Data";
3
- import * as Effect from "effect/Effect";
4
- import * as Option from "effect/Option";
5
- import * as Entity from "../Entity.js";
6
- import * as FilePathPattern from "../FilePathPattern.js";
7
- import * as Hyper from "../hyper/Hyper.js";
8
- import * as HyperHtml from "../hyper/HyperHtml.js";
9
- import * as Route from "../Route.js";
10
- import * as Unique from "../Unique.js";
11
- import * as BunServer from "./BunServer.js";
12
- const INTERNAL_FETCH_HEADER = "x-effect-start-internal-fetch";
13
- export class BunRouteError extends Data.TaggedError("BunRouteError") {
14
- }
15
- export function descriptors(route) {
16
- const descriptor = Route.descriptor(route);
17
- if (typeof descriptor.bunPrefix === "string" && typeof descriptor.bunLoad === "function") {
18
- return descriptor;
19
- }
20
- return undefined;
21
- }
22
- export function htmlBundle(load) {
23
- const bunPrefix = `/.BunRoute-${Unique.token(10)}`;
24
- const bunLoad = () => Promise.resolve(load()).then((mod) => ("default" in mod ? mod.default : mod));
25
- const descriptors = { bunPrefix, bunLoad, format: "html" };
26
- return function (self) {
27
- const handler = (context, next) => Effect.gen(function* () {
28
- const originalRequest = context.request;
29
- if (originalRequest.headers.get(INTERNAL_FETCH_HEADER) === "true") {
30
- const url = new URL(originalRequest.url);
31
- return yield* Effect.fail(new BunRouteError({
32
- reason: "ProxyError",
33
- pattern: url.pathname,
34
- message: "Request to internal Bun server was caught by BunRoute handler. This should not happen. Please report a bug.",
35
- }));
36
- }
37
- const bunServer = yield* BunServer.BunServer;
38
- const url = new URL(originalRequest.url);
39
- const internalPath = `${bunPrefix}${url.pathname}`;
40
- const internalUrl = new URL(internalPath, bunServer.server.url);
41
- const headers = new Headers(originalRequest.headers);
42
- headers.set(INTERNAL_FETCH_HEADER, "true");
43
- const proxyRequest = new Request(internalUrl, {
44
- method: originalRequest.method,
45
- headers,
46
- });
47
- const response = yield* Effect.tryPromise({
48
- try: () => fetch(proxyRequest),
49
- catch: (error) => new BunRouteError({
50
- reason: "ProxyError",
51
- pattern: internalPath,
52
- message: `Failed to fetch internal HTML bundle: ${String(error)}`,
53
- }),
54
- });
55
- let html = yield* Effect.tryPromise({
56
- try: () => response.text(),
57
- catch: (error) => new BunRouteError({
58
- reason: "ProxyError",
59
- pattern: internalPath,
60
- message: String(error),
61
- }),
62
- });
63
- const childEntity = yield* Entity.resolve(next(context));
64
- const children = childEntity?.body ?? childEntity;
65
- let childrenHtml = "";
66
- if (children != null) {
67
- if (children instanceof Response) {
68
- childrenHtml = yield* Effect.promise(() => children.text());
69
- }
70
- else if (Hyper.isGenericJsxObject(children)) {
71
- childrenHtml = HyperHtml.renderToString(children);
72
- }
73
- else {
74
- childrenHtml = String(children);
75
- }
76
- }
77
- html = html.replace(/%children%/g, childrenHtml);
78
- return Entity.make(html, {
79
- status: response.status,
80
- headers: {
81
- "content-type": response.headers.get("content-type"),
82
- },
83
- });
84
- });
85
- const route = Route.make(handler, descriptors);
86
- return Route.set([...Route.items(self), route], Route.descriptor(self));
87
- };
88
- }
89
- /**
90
- * Validates that a route pattern can be implemented with Bun.serve routes.
91
- *
92
- * Supported patterns (native or via multiple routes):
93
- * - /exact - Exact match
94
- * - /users/:id - Full-segment named param
95
- * - /path/* - Directory wildcard
96
- * - /[[404]] - Catch-all / Rest
97
- *
98
- * Unsupported patterns (cannot be implemented in Bun):
99
- * - /pk_[id] - Prefix before param
100
- * - /[id]_sfx - Suffix after param
101
- * - /[id].json - Suffix with dot
102
- * - /[id]~test - Suffix with tilde
103
- * - /hello-* - Inline prefix wildcard
104
- */
105
- export function validateBunPattern(pattern) {
106
- const segs = FilePathPattern.segments(pattern);
107
- const invalid = Array.findFirst(segs, (seg) => seg._tag === "InvalidSegment");
108
- if (Option.isSome(invalid)) {
109
- return Option.some(new BunRouteError({
110
- reason: "UnsupportedPattern",
111
- pattern,
112
- message: `Pattern "${pattern}" contains invalid segment.`,
113
- }));
114
- }
115
- return Option.none();
116
- }
117
- export const isHtmlBundle = (handle) => {
118
- return (typeof handle === "object" &&
119
- handle !== null &&
120
- (handle.toString() === "[object HTMLBundle]" || typeof handle.index === "string"));
121
- };
@@ -1,2 +0,0 @@
1
- import * as PlatformRuntime from "../PlatformRuntime.ts";
2
- export declare const runMain: PlatformRuntime.RunMain;
@@ -1,31 +0,0 @@
1
- import * as GlobalValue from "effect/GlobalValue";
2
- import * as MutableRef from "effect/MutableRef";
3
- import * as PlatformRuntime from "../PlatformRuntime.js";
4
- const mainFiber = GlobalValue.globalValue(Symbol.for("effect-start/BunRuntime/existingFiber"), () => MutableRef.make(undefined));
5
- export const runMain = PlatformRuntime.makeRunMain(({ fiber, teardown }) => {
6
- const prevFiber = MutableRef.get(mainFiber);
7
- MutableRef.set(mainFiber, fiber);
8
- let receivedSignal = false;
9
- fiber.addObserver((exit) => {
10
- if (!receivedSignal) {
11
- process.removeListener("SIGINT", onSigint);
12
- process.removeListener("SIGTERM", onSigint);
13
- }
14
- teardown(exit, (code) => {
15
- if (receivedSignal || code !== 0) {
16
- process.exit(code);
17
- }
18
- });
19
- });
20
- function onSigint() {
21
- receivedSignal = true;
22
- process.removeListener("SIGINT", onSigint);
23
- process.removeListener("SIGTERM", onSigint);
24
- fiber.unsafeInterruptAsFork(fiber.id());
25
- }
26
- process.on("SIGINT", onSigint);
27
- process.on("SIGTERM", onSigint);
28
- if (prevFiber) {
29
- prevFiber.unsafeInterruptAsFork(prevFiber.id());
30
- }
31
- });