effect-start 0.23.0 → 0.25.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (356) hide show
  1. package/dist/ChildProcess.js +32 -20
  2. package/dist/Commander.js +377 -293
  3. package/dist/ContentNegotiation.js +424 -318
  4. package/dist/Cookies.js +340 -271
  5. package/dist/Development.js +85 -49
  6. package/dist/Effectify.js +22 -14
  7. package/dist/Entity.js +260 -195
  8. package/dist/Fetch.js +192 -0
  9. package/dist/FilePathPattern.js +88 -77
  10. package/dist/FileRouter.js +192 -136
  11. package/dist/FileRouterCodegen.js +262 -191
  12. package/dist/FileSystem.js +126 -64
  13. package/dist/Http.js +96 -77
  14. package/dist/PathPattern.js +311 -273
  15. package/dist/PlatformError.js +36 -21
  16. package/dist/PlatformRuntime.js +65 -40
  17. package/dist/Route.js +122 -79
  18. package/dist/RouteBody.js +83 -58
  19. package/dist/RouteError.js +46 -25
  20. package/dist/RouteHook.js +58 -34
  21. package/dist/RouteHttp.js +346 -237
  22. package/dist/RouteHttpTracer.js +86 -58
  23. package/dist/RouteMount.js +81 -58
  24. package/dist/RouteSchema.js +253 -170
  25. package/dist/RouteSse.js +87 -72
  26. package/dist/RouteTree.js +99 -73
  27. package/dist/RouteTrie.js +160 -133
  28. package/dist/SchemaExtra.js +87 -62
  29. package/dist/Socket.js +32 -21
  30. package/dist/SqlIntrospect.js +317 -268
  31. package/dist/Start.js +55 -25
  32. package/dist/StartApp.js +3 -21
  33. package/dist/StreamExtra.js +109 -74
  34. package/dist/System.js +37 -21
  35. package/dist/TuplePathPattern.js +64 -58
  36. package/dist/Unique.js +159 -120
  37. package/dist/Values.js +48 -32
  38. package/dist/bun/BunBundle.js +158 -109
  39. package/dist/bun/BunChildProcessSpawner.js +121 -82
  40. package/dist/bun/BunImportTrackerPlugin.js +85 -63
  41. package/dist/bun/BunRoute.js +135 -99
  42. package/dist/bun/BunRuntime.js +39 -29
  43. package/dist/bun/BunServer.js +268 -140
  44. package/dist/bun/BunVirtualFilesPlugin.js +47 -33
  45. package/dist/bun/_BunEnhancedResolve.js +107 -82
  46. package/dist/bun/index.js +5 -5
  47. package/dist/bundler/Bundle.js +82 -38
  48. package/dist/bundler/BundleFiles.js +140 -82
  49. package/dist/bundler/BundleRoute.js +49 -38
  50. package/dist/client/Overlay.js +29 -28
  51. package/dist/client/ScrollState.js +94 -82
  52. package/dist/client/index.js +79 -61
  53. package/dist/console/Console.js +40 -24
  54. package/dist/console/ConsoleErrors.js +189 -178
  55. package/dist/console/ConsoleLogger.js +52 -43
  56. package/dist/console/ConsoleMetrics.js +69 -58
  57. package/dist/console/ConsoleProcess.js +57 -47
  58. package/dist/console/ConsoleStore.js +56 -45
  59. package/dist/console/ConsoleTracer.js +101 -88
  60. package/dist/console/Simulation.js +714 -563
  61. package/dist/console/index.js +3 -3
  62. package/dist/console/routes/tree.js +29 -28
  63. package/dist/datastar/actions/fetch.js +514 -381
  64. package/dist/datastar/actions/peek.js +12 -12
  65. package/dist/datastar/actions/setAll.js +18 -11
  66. package/dist/datastar/actions/toggleAll.js +18 -11
  67. package/dist/datastar/attributes/attr.js +48 -47
  68. package/dist/datastar/attributes/bind.js +186 -167
  69. package/dist/datastar/attributes/class.js +51 -44
  70. package/dist/datastar/attributes/computed.js +23 -24
  71. package/dist/datastar/attributes/effect.js +9 -8
  72. package/dist/datastar/attributes/indicator.js +32 -29
  73. package/dist/datastar/attributes/init.js +26 -25
  74. package/dist/datastar/attributes/jsonSignals.js +32 -29
  75. package/dist/datastar/attributes/on.js +76 -73
  76. package/dist/datastar/attributes/onIntersect.js +51 -51
  77. package/dist/datastar/attributes/onInterval.js +30 -29
  78. package/dist/datastar/attributes/onSignalPatch.js +49 -40
  79. package/dist/datastar/attributes/ref.js +10 -9
  80. package/dist/datastar/attributes/show.js +31 -30
  81. package/dist/datastar/attributes/signals.js +17 -16
  82. package/dist/datastar/attributes/style.js +56 -49
  83. package/dist/datastar/attributes/text.js +28 -25
  84. package/dist/datastar/engine.js +1079 -933
  85. package/dist/datastar/index.js +25 -24
  86. package/dist/datastar/utils.js +203 -155
  87. package/dist/datastar/watchers/patchElements.js +459 -372
  88. package/dist/datastar/watchers/patchSignals.js +13 -13
  89. package/dist/experimental/EncryptedCookies.js +305 -189
  90. package/dist/experimental/index.js +1 -1
  91. package/dist/hyper/Hyper.js +22 -17
  92. package/dist/hyper/HyperHtml.js +138 -123
  93. package/dist/hyper/HyperNode.js +11 -9
  94. package/dist/hyper/HyperRoute.js +41 -28
  95. package/dist/hyper/html.js +27 -27
  96. package/dist/hyper/index.js +5 -5
  97. package/dist/hyper/jsx-runtime.js +11 -5
  98. package/dist/index.js +8 -8
  99. package/dist/node/NodeFileSystem.js +606 -341
  100. package/dist/node/NodeUtils.js +21 -18
  101. package/dist/sql/Sql.js +8 -0
  102. package/dist/sql/bun/index.js +134 -67
  103. package/dist/sql/index.js +1 -0
  104. package/dist/sql/libsql/index.js +156 -0
  105. package/dist/sql/mssql/docker.js +103 -60
  106. package/dist/sql/mssql/index.js +182 -101
  107. package/dist/testing/TestLogger.js +39 -29
  108. package/dist/testing/index.js +2 -2
  109. package/dist/testing/utils.js +45 -23
  110. package/dist/x/cloudflare/CloudflareTunnel.js +61 -28
  111. package/dist/x/cloudflare/index.js +1 -1
  112. package/dist/x/tailscale/TailscaleTunnel.js +86 -60
  113. package/dist/x/tailscale/index.js +1 -1
  114. package/dist/x/tailwind/TailwindPlugin.js +280 -205
  115. package/dist/x/tailwind/compile.js +185 -129
  116. package/dist/x/tailwind/plugin.js +13 -11
  117. package/package.json +1 -1
  118. package/src/Development.ts +3 -1
  119. package/src/Entity.ts +17 -0
  120. package/src/Fetch.ts +271 -0
  121. package/src/SqlIntrospect.ts +64 -70
  122. package/src/Start.ts +24 -22
  123. package/src/StartApp.ts +11 -0
  124. package/src/bun/BunServer.ts +89 -16
  125. package/src/hyper/HyperHtml.ts +0 -1
  126. package/src/sql/bun/index.ts +1 -1
  127. package/src/sql/index.ts +1 -0
  128. package/src/sql/libsql/index.ts +173 -0
  129. package/src/sql/libsql/libsql.d.ts +39 -0
  130. package/src/sql/mssql/index.ts +1 -1
  131. package/src/x/tailscale/TailscaleTunnel.ts +7 -5
  132. package/dist/BlobStore.d.ts +0 -80
  133. package/dist/BlobStore.js +0 -19
  134. package/dist/ChildProcess.d.ts +0 -60
  135. package/dist/Commander.d.ts +0 -100
  136. package/dist/ContentNegotiation.d.ts +0 -12
  137. package/dist/Cookies.d.ts +0 -47
  138. package/dist/Development.d.ts +0 -39
  139. package/dist/Effectify.d.ts +0 -209
  140. package/dist/Entity.d.ts +0 -47
  141. package/dist/FilePathPattern.d.ts +0 -29
  142. package/dist/FileRouter.d.ts +0 -56
  143. package/dist/FileRouterCodegen.d.ts +0 -18
  144. package/dist/FileRouterPattern.d.ts +0 -9
  145. package/dist/FileRouterPattern.js +0 -35
  146. package/dist/FileSystem.d.ts +0 -158
  147. package/dist/Http.d.ts +0 -37
  148. package/dist/HttpAppExtra.d.ts +0 -7
  149. package/dist/HttpAppExtra.js +0 -320
  150. package/dist/HttpUtils.d.ts +0 -3
  151. package/dist/HttpUtils.js +0 -11
  152. package/dist/PathPattern.d.ts +0 -134
  153. package/dist/PlatformError.d.ts +0 -38
  154. package/dist/PlatformRuntime.d.ts +0 -27
  155. package/dist/Route.d.ts +0 -97
  156. package/dist/RouteBody.d.ts +0 -47
  157. package/dist/RouteError.d.ts +0 -98
  158. package/dist/RouteHook.d.ts +0 -12
  159. package/dist/RouteHttp.d.ts +0 -21
  160. package/dist/RouteHttpTracer.d.ts +0 -10
  161. package/dist/RouteMount.d.ts +0 -86
  162. package/dist/RouteSchema.d.ts +0 -86
  163. package/dist/RouteSse.d.ts +0 -21
  164. package/dist/RouteTree.d.ts +0 -57
  165. package/dist/RouteTrie.d.ts +0 -20
  166. package/dist/RouterPattern.d.ts +0 -118
  167. package/dist/RouterPattern.js +0 -269
  168. package/dist/SchemaExtra.d.ts +0 -7
  169. package/dist/Socket.d.ts +0 -27
  170. package/dist/Sql.d.ts +0 -34
  171. package/dist/Sql.js +0 -5
  172. package/dist/SqlIntrospect.d.ts +0 -91
  173. package/dist/Start.d.ts +0 -44
  174. package/dist/StartApp.d.ts +0 -19
  175. package/dist/StreamExtra.d.ts +0 -28
  176. package/dist/System.d.ts +0 -7
  177. package/dist/TuplePathPattern.d.ts +0 -9
  178. package/dist/Unique.d.ts +0 -50
  179. package/dist/Values.d.ts +0 -27
  180. package/dist/bun/BunBlobStoreDisk.d.ts +0 -6
  181. package/dist/bun/BunBlobStoreDisk.js +0 -116
  182. package/dist/bun/BunBlobStoreS3.d.ts +0 -11
  183. package/dist/bun/BunBlobStoreS3.js +0 -89
  184. package/dist/bun/BunBlobWatcherDisk.d.ts +0 -6
  185. package/dist/bun/BunBlobWatcherDisk.js +0 -60
  186. package/dist/bun/BunBlobWatcherQueue.d.ts +0 -6
  187. package/dist/bun/BunBlobWatcherQueue.js +0 -17
  188. package/dist/bun/BunBundle.d.ts +0 -11
  189. package/dist/bun/BunChildProcessSpawner.d.ts +0 -3
  190. package/dist/bun/BunHttpServer.d.ts +0 -44
  191. package/dist/bun/BunHttpServer.js +0 -186
  192. package/dist/bun/BunHttpServer_web.d.ts +0 -60
  193. package/dist/bun/BunHttpServer_web.js +0 -252
  194. package/dist/bun/BunImportTrackerPlugin.d.ts +0 -13
  195. package/dist/bun/BunPlatformHttpServer.d.ts +0 -10
  196. package/dist/bun/BunPlatformHttpServer.js +0 -53
  197. package/dist/bun/BunRoute.d.ts +0 -48
  198. package/dist/bun/BunRuntime.d.ts +0 -2
  199. package/dist/bun/BunServer.d.ts +0 -40
  200. package/dist/bun/BunServerRequest.d.ts +0 -60
  201. package/dist/bun/BunServerRequest.js +0 -252
  202. package/dist/bun/BunSql.d.ts +0 -4
  203. package/dist/bun/BunSql.js +0 -81
  204. package/dist/bun/BunVirtualFilesPlugin.d.ts +0 -4
  205. package/dist/bun/_BunEnhancedResolve.d.ts +0 -45
  206. package/dist/bun/index.d.ts +0 -5
  207. package/dist/bundler/Bundle.d.ts +0 -61
  208. package/dist/bundler/BundleFiles.d.ts +0 -13
  209. package/dist/bundler/BundleHttp.d.ts +0 -45
  210. package/dist/bundler/BundleHttp.js +0 -176
  211. package/dist/bundler/BundleRoute.d.ts +0 -27
  212. package/dist/client/Overlay.d.ts +0 -2
  213. package/dist/client/ScrollState.d.ts +0 -6
  214. package/dist/client/index.d.ts +0 -6
  215. package/dist/console/Console.d.ts +0 -6
  216. package/dist/console/ConsoleErrors.d.ts +0 -3
  217. package/dist/console/ConsoleLogger.d.ts +0 -3
  218. package/dist/console/ConsoleMetrics.d.ts +0 -3
  219. package/dist/console/ConsoleProcess.d.ts +0 -3
  220. package/dist/console/ConsoleStore.d.ts +0 -144
  221. package/dist/console/ConsoleTracer.d.ts +0 -3
  222. package/dist/console/Simulation.d.ts +0 -2
  223. package/dist/console/index.d.ts +0 -3
  224. package/dist/console/routes/errors/route.d.ts +0 -10
  225. package/dist/console/routes/errors/route.js +0 -47
  226. package/dist/console/routes/fiberDetail.d.ts +0 -16
  227. package/dist/console/routes/fiberDetail.js +0 -38
  228. package/dist/console/routes/fibers/route.d.ts +0 -10
  229. package/dist/console/routes/fibers/route.js +0 -19
  230. package/dist/console/routes/git/route.d.ts +0 -11
  231. package/dist/console/routes/git/route.js +0 -33
  232. package/dist/console/routes/layout.d.ts +0 -9
  233. package/dist/console/routes/layout.js +0 -3
  234. package/dist/console/routes/logs/route.d.ts +0 -10
  235. package/dist/console/routes/logs/route.js +0 -32
  236. package/dist/console/routes/metrics/route.d.ts +0 -10
  237. package/dist/console/routes/metrics/route.js +0 -17
  238. package/dist/console/routes/route.d.ts +0 -6
  239. package/dist/console/routes/route.js +0 -5
  240. package/dist/console/routes/routes/route.d.ts +0 -6
  241. package/dist/console/routes/routes/route.js +0 -20
  242. package/dist/console/routes/services/route.d.ts +0 -6
  243. package/dist/console/routes/services/route.js +0 -12
  244. package/dist/console/routes/system/route.d.ts +0 -10
  245. package/dist/console/routes/system/route.js +0 -18
  246. package/dist/console/routes/traceDetail.d.ts +0 -16
  247. package/dist/console/routes/traceDetail.js +0 -14
  248. package/dist/console/routes/traces/route.d.ts +0 -10
  249. package/dist/console/routes/traces/route.js +0 -39
  250. package/dist/console/routes/tree.d.ts +0 -153
  251. package/dist/console/ui/Errors.d.ts +0 -4
  252. package/dist/console/ui/Errors.js +0 -15
  253. package/dist/console/ui/Fibers.d.ts +0 -24
  254. package/dist/console/ui/Fibers.js +0 -121
  255. package/dist/console/ui/Git.d.ts +0 -20
  256. package/dist/console/ui/Git.js +0 -95
  257. package/dist/console/ui/Logs.d.ts +0 -4
  258. package/dist/console/ui/Logs.js +0 -25
  259. package/dist/console/ui/Metrics.d.ts +0 -4
  260. package/dist/console/ui/Metrics.js +0 -26
  261. package/dist/console/ui/Routes.d.ts +0 -8
  262. package/dist/console/ui/Routes.js +0 -70
  263. package/dist/console/ui/Services.d.ts +0 -10
  264. package/dist/console/ui/Services.js +0 -246
  265. package/dist/console/ui/Shell.d.ts +0 -10
  266. package/dist/console/ui/Shell.js +0 -7
  267. package/dist/console/ui/System.d.ts +0 -4
  268. package/dist/console/ui/System.js +0 -35
  269. package/dist/console/ui/Traces.d.ts +0 -12
  270. package/dist/console/ui/Traces.js +0 -179
  271. package/dist/datastar/actions/fetch.d.ts +0 -30
  272. package/dist/datastar/actions/peek.d.ts +0 -1
  273. package/dist/datastar/actions/setAll.d.ts +0 -1
  274. package/dist/datastar/actions/toggleAll.d.ts +0 -1
  275. package/dist/datastar/attributes/attr.d.ts +0 -1
  276. package/dist/datastar/attributes/bind.d.ts +0 -1
  277. package/dist/datastar/attributes/class.d.ts +0 -1
  278. package/dist/datastar/attributes/computed.d.ts +0 -1
  279. package/dist/datastar/attributes/effect.d.ts +0 -1
  280. package/dist/datastar/attributes/indicator.d.ts +0 -1
  281. package/dist/datastar/attributes/init.d.ts +0 -1
  282. package/dist/datastar/attributes/jsonSignals.d.ts +0 -1
  283. package/dist/datastar/attributes/on.d.ts +0 -1
  284. package/dist/datastar/attributes/onIntersect.d.ts +0 -1
  285. package/dist/datastar/attributes/onInterval.d.ts +0 -1
  286. package/dist/datastar/attributes/onSignalPatch.d.ts +0 -1
  287. package/dist/datastar/attributes/ref.d.ts +0 -1
  288. package/dist/datastar/attributes/show.d.ts +0 -1
  289. package/dist/datastar/attributes/signals.d.ts +0 -1
  290. package/dist/datastar/attributes/style.d.ts +0 -1
  291. package/dist/datastar/attributes/text.d.ts +0 -1
  292. package/dist/datastar/engine.d.ts +0 -162
  293. package/dist/datastar/happydom.d.ts +0 -1
  294. package/dist/datastar/happydom.js +0 -8
  295. package/dist/datastar/index.d.ts +0 -24
  296. package/dist/datastar/load.d.ts +0 -24
  297. package/dist/datastar/load.js +0 -24
  298. package/dist/datastar/utils.d.ts +0 -51
  299. package/dist/datastar/watchers/patchElements.d.ts +0 -1
  300. package/dist/datastar/watchers/patchSignals.d.ts +0 -1
  301. package/dist/experimental/EncryptedCookies.d.ts +0 -48
  302. package/dist/experimental/SseHttpResponse.d.ts +0 -7
  303. package/dist/experimental/SseHttpResponse.js +0 -28
  304. package/dist/experimental/index.d.ts +0 -1
  305. package/dist/hyper/Hyper.d.ts +0 -25
  306. package/dist/hyper/HyperHtml.d.ts +0 -23
  307. package/dist/hyper/HyperHtml.test.d.ts +0 -1
  308. package/dist/hyper/HyperHtml.test.js +0 -197
  309. package/dist/hyper/HyperNode.d.ts +0 -14
  310. package/dist/hyper/HyperRoute.d.ts +0 -8
  311. package/dist/hyper/HyperRoute.test.d.ts +0 -1
  312. package/dist/hyper/HyperRoute.test.js +0 -83
  313. package/dist/hyper/html.d.ts +0 -11
  314. package/dist/hyper/index.d.ts +0 -6
  315. package/dist/hyper/jsx-runtime.d.ts +0 -7
  316. package/dist/index.d.ts +0 -8
  317. package/dist/inference_check.d.ts +0 -1
  318. package/dist/inference_check.js +0 -15
  319. package/dist/lint/plugin.d.ts +0 -86
  320. package/dist/lint/plugin.js +0 -341
  321. package/dist/middlewares/BasicAuthMiddleware.d.ts +0 -8
  322. package/dist/middlewares/BasicAuthMiddleware.js +0 -22
  323. package/dist/middlewares/index.d.ts +0 -1
  324. package/dist/middlewares/index.js +0 -1
  325. package/dist/node/Effectify.d.ts +0 -209
  326. package/dist/node/Effectify.js +0 -19
  327. package/dist/node/FileSystem.d.ts +0 -7
  328. package/dist/node/FileSystem.js +0 -420
  329. package/dist/node/NodeFileSystem.d.ts +0 -7
  330. package/dist/node/NodeUtils.d.ts +0 -2
  331. package/dist/node/PlatformError.d.ts +0 -46
  332. package/dist/node/PlatformError.js +0 -43
  333. package/dist/node/Utils.d.ts +0 -1
  334. package/dist/node/Utils.js +0 -19
  335. package/dist/repro_fail.d.ts +0 -1
  336. package/dist/repro_fail.js +0 -14
  337. package/dist/sql/bun/index.d.ts +0 -3
  338. package/dist/sql/mssql/docker.d.ts +0 -2
  339. package/dist/sql/mssql/index.d.ts +0 -21
  340. package/dist/testing/TestHttpClient.d.ts +0 -13
  341. package/dist/testing/TestHttpClient.js +0 -68
  342. package/dist/testing/TestLogger.d.ts +0 -13
  343. package/dist/testing/index.d.ts +0 -2
  344. package/dist/testing/utils.d.ts +0 -9
  345. package/dist/x/cloudflare/CloudflareTunnel.d.ts +0 -10
  346. package/dist/x/cloudflare/index.d.ts +0 -1
  347. package/dist/x/datastar/Datastar.d.ts +0 -6
  348. package/dist/x/datastar/Datastar.js +0 -47
  349. package/dist/x/datastar/index.d.ts +0 -1
  350. package/dist/x/datastar/index.js +0 -1
  351. package/dist/x/tailscale/TailscaleTunnel.d.ts +0 -15
  352. package/dist/x/tailscale/index.d.ts +0 -1
  353. package/dist/x/tailwind/TailwindPlugin.d.ts +0 -23
  354. package/dist/x/tailwind/compile.d.ts +0 -19
  355. package/dist/x/tailwind/plugin.d.ts +0 -2
  356. /package/src/{Sql.ts → sql/Sql.ts} +0 -0
@@ -1,69 +1,91 @@
1
- import * as NPath from "node:path";
1
+ import * as NPath from "node:path"
2
+
2
3
  /**
3
4
  * Tracks all imported modules.
4
5
  * State can be accessed via 'virtual:import-tracker' module within a bundle
5
6
  * or through `state` property returned by this function.
6
7
  */
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
- });
8
+ export const make = (
9
+ opts = {},
10
+ ) => {
11
+ const foundImports = new Map()
12
+ const baseDir = opts.baseDir ?? process.cwd()
13
+
14
+ return {
15
+ name: "import tracker",
16
+ setup(build) {
17
+ const transpiler = new Bun.Transpiler({
18
+ loader: "tsx",
19
+ })
20
+
21
+ // Each module that goes through this onLoad callback
22
+ // will record its imports in `trackedImports`
23
+ build.onLoad(
24
+ {
25
+ filter: /\.(ts|js)x?$/,
66
26
  },
67
- state: foundImports,
68
- };
69
- };
27
+ async (args) => {
28
+ if (!opts.includeNodeModules && args.path.includes("/node_modules/")) {
29
+ return undefined
30
+ }
31
+
32
+ const contents = await Bun.file(args.path).arrayBuffer()
33
+ try {
34
+ const fileImport = transpiler.scanImports(contents)
35
+ const resolvedImports = fileImport.map((imp) => {
36
+ const absoluteImportPath = NPath.resolve(
37
+ NPath.dirname(args.path),
38
+ // 'file' is a default namespace, trim it
39
+ imp.path.replace(/^file:/, ""),
40
+ )
41
+
42
+ return {
43
+ ...imp,
44
+ // keep all module identifiers with namespace intact
45
+ path: /(\w+):/.test(imp.path)
46
+ ? imp.path
47
+ : NPath.relative(baseDir, absoluteImportPath),
48
+ }
49
+ })
50
+ foundImports.set(NPath.relative(baseDir, args.path), resolvedImports)
51
+ } catch (e) {}
52
+
53
+ return undefined
54
+ },
55
+ )
56
+
57
+ build.onResolve(
58
+ {
59
+ filter: /^virtual:import-tracker$/,
60
+ },
61
+ () => {
62
+ return {
63
+ namespace: "effect-start",
64
+ path: "virtual:import-tracker",
65
+ }
66
+ },
67
+ )
68
+
69
+ build.onLoad(
70
+ {
71
+ filter: /^virtual:import-tracker$/,
72
+ namespace: "effect-start",
73
+ },
74
+ async (args) => {
75
+ // Wait for all files to be loaded, ensuring
76
+ // that every file goes through the above `onLoad()` function
77
+ // and their imports tracked
78
+ await args.defer()
79
+
80
+ // Emit JSON containing the stats of each import
81
+ return {
82
+ contents: JSON.stringify(Object.fromEntries(foundImports.entries())),
83
+ loader: "json",
84
+ }
85
+ },
86
+ )
87
+ },
88
+
89
+ state: foundImports,
90
+ }
91
+ }
@@ -1,91 +1,118 @@
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;
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
+
13
+ const INTERNAL_FETCH_HEADER = "x-effect-start-internal-fetch"
14
+
15
+ export class BunRouteError extends Data.TaggedError("BunRouteError") {}
16
+
17
+ export function descriptors(
18
+ route,
19
+ ) {
20
+ const descriptor = Route.descriptor(route)
21
+ if (typeof descriptor.bunPrefix === "string" && typeof descriptor.bunLoad === "function") {
22
+ return descriptor
23
+ }
24
+ return undefined
21
25
  }
26
+
22
27
  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
- };
28
+ const bunPrefix = `/.BunRoute-${Unique.token(10)}`
29
+ const bunLoad = () =>
30
+ Promise.resolve(load()).then((mod) => ("default" in mod ? mod.default : mod))
31
+ const descriptors = { bunPrefix, bunLoad, format: /** @type {const} */ "html" }
32
+
33
+ return function (
34
+ self,
35
+ ) {
36
+ const handler = (context, next) =>
37
+ Effect.gen(function* () {
38
+ const originalRequest = context.request
39
+
40
+ if (originalRequest.headers.get(INTERNAL_FETCH_HEADER) === "true") {
41
+ const url = new URL(originalRequest.url)
42
+ return yield* Effect.fail(
43
+ new BunRouteError({
44
+ reason: "ProxyError",
45
+ pattern: url.pathname,
46
+ message:
47
+ "Request to internal Bun server was caught by BunRoute handler. This should not happen. Please report a bug.",
48
+ }),
49
+ )
50
+ }
51
+
52
+ const bunServer = yield* BunServer.BunServer
53
+ const url = new URL(originalRequest.url)
54
+
55
+ const internalPath = `${bunPrefix}${url.pathname}`
56
+ const internalUrl = new URL(internalPath, bunServer.server.url)
57
+
58
+ const headers = new Headers(originalRequest.headers)
59
+ headers.set(INTERNAL_FETCH_HEADER, "true")
60
+
61
+ const proxyRequest = new Request(internalUrl, {
62
+ method: originalRequest.method,
63
+ headers,
64
+ })
65
+
66
+ const response = yield* Effect.tryPromise({
67
+ try: () => fetch(proxyRequest),
68
+ catch: (error) =>
69
+ new BunRouteError({
70
+ reason: "ProxyError",
71
+ pattern: internalPath,
72
+ message: `Failed to fetch internal HTML bundle: ${String(error)}`,
73
+ }),
74
+ })
75
+
76
+ let html = yield* Effect.tryPromise({
77
+ try: () => response.text(),
78
+ catch: (error) =>
79
+ new BunRouteError({
80
+ reason: "ProxyError",
81
+ pattern: internalPath,
82
+ message: String(error),
83
+ }),
84
+ })
85
+
86
+ const childEntity = yield* Entity.resolve(next(context))
87
+ const children = childEntity?.body ?? childEntity
88
+
89
+ let childrenHtml = ""
90
+ if (children != null) {
91
+ if ((children) instanceof Response) {
92
+ childrenHtml = yield* Effect.promise(() => (children).text())
93
+ } else if (Hyper.isGenericJsxObject(children)) {
94
+ childrenHtml = HyperHtml.renderToString(children)
95
+ } else {
96
+ childrenHtml = String(children)
97
+ }
98
+ }
99
+
100
+ html = html.replace(/%children%/g, childrenHtml)
101
+
102
+ return Entity.make(html, {
103
+ status: response.status,
104
+ headers: {
105
+ "content-type": response.headers.get("content-type"),
106
+ },
107
+ })
108
+ })
109
+
110
+ const route = Route.make(handler, descriptors)
111
+
112
+ return Route.set([...Route.items(self), route], Route.descriptor(self))
113
+ }
88
114
  }
115
+
89
116
  /**
90
117
  * Validates that a route pattern can be implemented with Bun.serve routes.
91
118
  *
@@ -102,20 +129,29 @@ export function htmlBundle(load) {
102
129
  * - /[id]~test - Suffix with tilde
103
130
  * - /hello-* - Inline prefix wildcard
104
131
  */
132
+
105
133
  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();
134
+ const segs = FilePathPattern.segments(pattern)
135
+
136
+ const invalid = Array.findFirst(segs, (seg) => seg._tag === "InvalidSegment")
137
+
138
+ if (Option.isSome(invalid)) {
139
+ return Option.some(
140
+ new BunRouteError({
141
+ reason: "UnsupportedPattern",
142
+ pattern,
143
+ message: `Pattern "${pattern}" contains invalid segment.`,
144
+ }),
145
+ )
146
+ }
147
+
148
+ return Option.none()
116
149
  }
150
+
117
151
  export const isHtmlBundle = (handle) => {
118
- return (typeof handle === "object" &&
119
- handle !== null &&
120
- (handle.toString() === "[object HTMLBundle]" || typeof handle.index === "string"));
121
- };
152
+ return (
153
+ typeof handle === "object" &&
154
+ handle !== null &&
155
+ (handle.toString() === "[object HTMLBundle]" || typeof handle.index === "string")
156
+ )
157
+ }
@@ -1,31 +1,41 @@
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));
1
+ import * as GlobalValue from "effect/GlobalValue"
2
+ import * as MutableRef from "effect/MutableRef"
3
+ import * as PlatformRuntime from "../PlatformRuntime.js"
4
+
5
+ const mainFiber = GlobalValue.globalValue(Symbol.for("effect-start/BunRuntime/existingFiber"), () =>
6
+ MutableRef.make(undefined),
7
+ )
8
+
5
9
  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());
10
+ const prevFiber = MutableRef.get(mainFiber)
11
+
12
+ MutableRef.set(mainFiber, fiber)
13
+
14
+ let receivedSignal = false
15
+
16
+ fiber.addObserver((exit) => {
17
+ if (!receivedSignal) {
18
+ process.removeListener("SIGINT", onSigint)
19
+ process.removeListener("SIGTERM", onSigint)
25
20
  }
26
- process.on("SIGINT", onSigint);
27
- process.on("SIGTERM", onSigint);
28
- if (prevFiber) {
29
- prevFiber.unsafeInterruptAsFork(prevFiber.id());
30
- }
31
- });
21
+ teardown(exit, (code) => {
22
+ if (receivedSignal || code !== 0) {
23
+ process.exit(code)
24
+ }
25
+ })
26
+ })
27
+
28
+ function onSigint() {
29
+ receivedSignal = true
30
+ process.removeListener("SIGINT", onSigint)
31
+ process.removeListener("SIGTERM", onSigint)
32
+ fiber.unsafeInterruptAsFork(fiber.id())
33
+ }
34
+
35
+ process.on("SIGINT", onSigint)
36
+ process.on("SIGTERM", onSigint)
37
+
38
+ if (prevFiber) {
39
+ prevFiber.unsafeInterruptAsFork(prevFiber.id())
40
+ }
41
+ })