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,58 +1,94 @@
1
- import * as FileSystem from "./FileSystem.js";
2
- import * as Context from "effect/Context";
3
- import * as Effect from "effect/Effect";
4
- import * as Function from "effect/Function";
5
- import * as GlobalValue from "effect/GlobalValue";
6
- import * as Layer from "effect/Layer";
7
- import * as Option from "effect/Option";
8
- import * as PubSub from "effect/PubSub";
9
- import * as Stream from "effect/Stream";
1
+ import * as FileSystem from "./FileSystem.js"
2
+ import * as Context from "effect/Context"
3
+ import * as Effect from "effect/Effect"
4
+ import * as Function from "effect/Function"
5
+ import * as GlobalValue from "effect/GlobalValue"
6
+ import * as Layer from "effect/Layer"
7
+ import * as Option from "effect/Option"
8
+ import * as PubSub from "effect/PubSub"
9
+ import * as Stream from "effect/Stream"
10
+
10
11
  const devState = GlobalValue.globalValue(Symbol.for("effect-start/Development"), () => ({
11
- count: 0,
12
- pubsub: null,
13
- }));
12
+ count: 0,
13
+ pubsub: null,
14
+ }))
15
+
14
16
  /** @internal */
15
17
  export const _resetForTesting = () => {
16
- devState.count = 0;
17
- devState.pubsub = null;
18
- };
19
- export class Development extends Context.Tag("effect-start/Development")() {
18
+ devState.count = 0
19
+ devState.pubsub = null
20
20
  }
21
- const SOURCE_FILENAME = /\.(tsx?|jsx?|html?|css|json)$/;
21
+
22
+ export class Development extends Context.Tag("effect-start/Development")() {}
23
+
24
+ const SOURCE_FILENAME = /\.(tsx?|jsx?|html?|css|json)$/
25
+
22
26
  export const filterSourceFiles = (event) => {
23
- return SOURCE_FILENAME.test(event.path);
24
- };
27
+ return SOURCE_FILENAME.test(event.path)
28
+ }
29
+
25
30
  export const filterDirectory = (event) => {
26
- return event.path.endsWith("/");
27
- };
31
+ return event.path.endsWith("/")
32
+ }
33
+
28
34
  export const watchSource = (opts) => {
29
- const baseDir = opts?.path ?? process.cwd();
30
- const customFilter = opts?.filter;
31
- return Function.pipe(Stream.unwrap(Effect.map(FileSystem.FileSystem, (fs) => fs.watch(baseDir, { recursive: opts?.recursive ?? true }))), customFilter ? Stream.filter(customFilter) : Function.identity, Stream.rechunk(1), Stream.throttle({
32
- units: 1,
33
- cost: () => 1,
34
- duration: "400 millis",
35
- strategy: "enforce",
36
- }));
37
- };
38
- export const watch = (opts) => Effect.gen(function* () {
39
- devState.count++;
35
+ const baseDir = opts?.path ?? process.cwd()
36
+ const customFilter = opts?.filter
37
+
38
+ return Function.pipe(
39
+ Stream.unwrap(
40
+ Effect.map(FileSystem.FileSystem, (fs) =>
41
+ fs.watch(baseDir, { recursive: opts?.recursive ?? true }),
42
+ ),
43
+ ),
44
+ customFilter ? Stream.filter(customFilter) : Function.identity,
45
+ Stream.rechunk(1),
46
+ Stream.throttle({
47
+ units: 1,
48
+ cost: () => 1,
49
+ duration: "400 millis",
50
+ strategy: "enforce",
51
+ }),
52
+ )
53
+ }
54
+
55
+ export const watch = (opts) =>
56
+ Effect.gen(function* () {
57
+ devState.count++
58
+
40
59
  if (devState.count === 1) {
41
- const pubsub = yield* PubSub.unbounded();
42
- devState.pubsub = pubsub;
43
- yield* Function.pipe(watchSource({
44
- path: opts?.path,
45
- recursive: opts?.recursive,
46
- filter: opts?.filter ?? filterSourceFiles,
47
- }), Stream.runForEach((event) => PubSub.publish(pubsub, event)), Effect.fork);
48
- }
49
- else {
50
- yield* PubSub.publish(devState.pubsub, { _tag: "Reload" });
60
+ const pubsub = yield* PubSub.unbounded()
61
+ devState.pubsub = pubsub
62
+
63
+ yield* Function.pipe(
64
+ watchSource({
65
+ path: opts?.path,
66
+ recursive: opts?.recursive,
67
+ filter: opts?.filter ?? filterSourceFiles,
68
+ }),
69
+ Stream.runForEach((event) => PubSub.publish(pubsub, event)),
70
+ Effect.fork,
71
+ )
72
+ } else {
73
+ yield* PubSub.publish(devState.pubsub, { _tag: "Reload" })
51
74
  }
52
- return { events: devState.pubsub };
53
- });
54
- export const layerWatch = (opts) => Layer.scoped(Development, watch(opts));
55
- export const stream = () => Stream.unwrap(Function.pipe(Effect.serviceOption(Development), Effect.map(Option.match({
56
- onNone: () => Stream.empty,
57
- onSome: (dev) => Stream.fromPubSub(dev.events),
58
- }))));
75
+
76
+ return { events: devState.pubsub }
77
+ })
78
+
79
+ export const layerWatch = (opts) => Layer.scoped(Development, watch(opts))
80
+
81
+ export const option = Effect.serviceOption(Development)
82
+
83
+ export const stream = () =>
84
+ Stream.unwrap(
85
+ Function.pipe(
86
+ option,
87
+ Effect.map(
88
+ Option.match({
89
+ onNone: () => Stream.empty,
90
+ onSome: (dev) => Stream.fromPubSub(dev.events),
91
+ }),
92
+ ),
93
+ ),
94
+ )
package/dist/Effectify.js CHANGED
@@ -1,19 +1,27 @@
1
1
  /*
2
2
  * Adapted from @effect/platform
3
3
  */
4
- import * as Effect from "effect/Effect";
5
- export const effectify = ((fn, onError, onSyncError) => (...args) => Effect.async((resume) => {
6
- try {
7
- fn(...args, (err, result) => {
4
+ import * as Effect from "effect/Effect"
5
+
6
+ export const effectify = ((
7
+ fn,
8
+ onError,
9
+ onSyncError,
10
+ ) =>
11
+ (...args) =>
12
+ Effect.async((resume) => {
13
+ try {
14
+ fn(
15
+ ...args,
16
+ (err, result) => {
8
17
  if (err) {
9
- resume(Effect.fail(onError ? onError(err, args) : err));
18
+ resume(Effect.fail(onError ? onError(err, args) : err))
19
+ } else {
20
+ resume(Effect.succeed(result))
10
21
  }
11
- else {
12
- resume(Effect.succeed(result));
13
- }
14
- });
15
- }
16
- catch (err) {
17
- resume(onSyncError ? Effect.fail(onSyncError(err, args)) : Effect.die(err));
18
- }
19
- }));
22
+ },
23
+ )
24
+ } catch (err) {
25
+ resume(onSyncError ? Effect.fail(onSyncError(err, args)) : Effect.die(err))
26
+ }
27
+ }))
package/dist/Entity.js CHANGED
@@ -1,224 +1,289 @@
1
- import * as Effect from "effect/Effect";
2
- import * as ParseResult from "effect/ParseResult";
3
- import * as Pipeable from "effect/Pipeable";
4
- import * as Predicate from "effect/Predicate";
5
- import * as Schema from "effect/Schema";
6
- import * as Stream from "effect/Stream";
7
- import * as StreamExtra from "./StreamExtra.js";
8
- import * as Values from "./Values.js";
9
- export const TypeId = Symbol.for("effect-start/Entity");
10
- const textDecoder = new TextDecoder();
11
- const textEncoder = new TextEncoder();
1
+ import * as Effect from "effect/Effect"
2
+ import * as ParseResult from "effect/ParseResult"
3
+ import * as Pipeable from "effect/Pipeable"
4
+ import * as Predicate from "effect/Predicate"
5
+ import * as Schema from "effect/Schema"
6
+ import * as Stream from "effect/Stream"
7
+ import * as StreamExtra from "./StreamExtra.js"
8
+ import * as Values from "./Values.js"
9
+
10
+ export const TypeId = Symbol.for("effect-start/Entity")
11
+
12
+ const textDecoder = new TextDecoder()
13
+ const textEncoder = new TextEncoder()
14
+
12
15
  function isBinary(v) {
13
- return v instanceof Uint8Array || v instanceof ArrayBuffer;
16
+ return v instanceof Uint8Array || v instanceof ArrayBuffer
14
17
  }
18
+
19
+ /**
20
+ * Header keys are guaranteed to be lowercase.
21
+ */
22
+
15
23
  function parseJson(s) {
16
- try {
17
- return Effect.succeed(JSON.parse(s));
18
- }
19
- catch (e) {
20
- return Effect.fail(new ParseResult.ParseError({
21
- issue: new ParseResult.Type(Schema.Unknown.ast, s, e instanceof Error ? e.message : "Failed to parse JSON"),
22
- }));
23
- }
24
+ try {
25
+ return Effect.succeed(JSON.parse(s))
26
+ } catch (e) {
27
+ return Effect.fail(
28
+ new ParseResult.ParseError({
29
+ issue: new ParseResult.Type(
30
+ Schema.Unknown.ast,
31
+ s,
32
+ e instanceof Error ? e.message : "Failed to parse JSON",
33
+ ),
34
+ }),
35
+ )
36
+ }
24
37
  }
25
- function getText(self) {
26
- const v = self.body;
27
- if (StreamExtra.isStream(v)) {
28
- return Stream.mkString(Stream.decodeText(v));
29
- }
30
- if (Effect.isEffect(v)) {
31
- return Effect.flatMap(v, (inner) => {
32
- if (isEntity(inner)) {
33
- return inner.text;
34
- }
35
- if (typeof inner === "string") {
36
- return Effect.succeed(inner);
37
- }
38
- if (isBinary(inner)) {
39
- return Effect.succeed(textDecoder.decode(inner));
40
- }
41
- return Effect.fail(mismatch(Schema.String, inner));
42
- });
43
- }
44
- if (typeof v === "string") {
45
- return Effect.succeed(v);
46
- }
47
- if (isBinary(v)) {
48
- return Effect.succeed(textDecoder.decode(v));
49
- }
50
- return Effect.fail(mismatch(Schema.String, v));
38
+
39
+ function getText(
40
+ self,
41
+ ) {
42
+ const v = self.body
43
+ if (StreamExtra.isStream(v)) {
44
+ return Stream.mkString(Stream.decodeText(v))
45
+ }
46
+ if (Effect.isEffect(v)) {
47
+ return Effect.flatMap(
48
+ v,
49
+ (inner) => {
50
+ if (isEntity(inner)) {
51
+ return inner.text
52
+ }
53
+ if (typeof inner === "string") {
54
+ return Effect.succeed(inner)
55
+ }
56
+ if (isBinary(inner)) {
57
+ return Effect.succeed(textDecoder.decode(inner))
58
+ }
59
+ return Effect.fail(mismatch(Schema.String, inner))
60
+ },
61
+ )
62
+ }
63
+ if (typeof v === "string") {
64
+ return Effect.succeed(v)
65
+ }
66
+ if (isBinary(v)) {
67
+ return Effect.succeed(textDecoder.decode(v))
68
+ }
69
+ return Effect.fail(mismatch(Schema.String, v))
51
70
  }
52
- function getJson(self) {
53
- const v = self.body;
54
- if (StreamExtra.isStream(v)) {
55
- return Effect.flatMap(getText(self), parseJson);
56
- }
57
- if (Effect.isEffect(v)) {
58
- return Effect.flatMap(v, (inner) => {
59
- if (isEntity(inner)) {
60
- return inner.json;
61
- }
62
- if (typeof inner === "object" && inner !== null && !isBinary(inner)) {
63
- return Effect.succeed(inner);
64
- }
65
- if (typeof inner === "string") {
66
- return parseJson(inner);
67
- }
68
- if (isBinary(inner)) {
69
- return parseJson(textDecoder.decode(inner));
70
- }
71
- return Effect.fail(mismatch(Schema.Unknown, inner));
72
- });
73
- }
74
- if (typeof v === "object" && v !== null && !isBinary(v)) {
75
- return Effect.succeed(v);
76
- }
77
- if (typeof v === "string") {
78
- return parseJson(v);
79
- }
80
- if (isBinary(v)) {
81
- return parseJson(textDecoder.decode(v));
82
- }
83
- return Effect.fail(mismatch(Schema.Unknown, v));
71
+
72
+ function getJson(
73
+ self,
74
+ ) {
75
+ const v = self.body
76
+ if (StreamExtra.isStream(v)) {
77
+ return Effect.flatMap(getText(self), parseJson)
78
+ }
79
+ if (Effect.isEffect(v)) {
80
+ return Effect.flatMap(
81
+ v,
82
+ (inner) => {
83
+ if (isEntity(inner)) {
84
+ return inner.json
85
+ }
86
+ if (typeof inner === "object" && inner !== null && !isBinary(inner)) {
87
+ return Effect.succeed(inner)
88
+ }
89
+ if (typeof inner === "string") {
90
+ return parseJson(inner)
91
+ }
92
+ if (isBinary(inner)) {
93
+ return parseJson(textDecoder.decode(inner))
94
+ }
95
+ return Effect.fail(mismatch(Schema.Unknown, inner))
96
+ },
97
+ )
98
+ }
99
+ if (typeof v === "object" && v !== null && !isBinary(v)) {
100
+ return Effect.succeed(v)
101
+ }
102
+ if (typeof v === "string") {
103
+ return parseJson(v)
104
+ }
105
+ if (isBinary(v)) {
106
+ return parseJson(textDecoder.decode(v))
107
+ }
108
+ return Effect.fail(mismatch(Schema.Unknown, v))
84
109
  }
85
- function getBytes(self) {
86
- const v = self.body;
87
- if (StreamExtra.isStream(v)) {
88
- return Stream.runFold(v, new Uint8Array(0), Values.concatBytes);
89
- }
90
- if (Effect.isEffect(v)) {
91
- return Effect.flatMap(v, (inner) => {
92
- if (isEntity(inner)) {
93
- return inner.bytes;
94
- }
95
- if (inner instanceof Uint8Array) {
96
- return Effect.succeed(inner);
97
- }
98
- if (inner instanceof ArrayBuffer) {
99
- return Effect.succeed(new Uint8Array(inner));
100
- }
101
- if (typeof inner === "string") {
102
- return Effect.succeed(textEncoder.encode(inner));
103
- }
104
- return Effect.fail(mismatch(Schema.Uint8ArrayFromSelf, inner));
105
- });
106
- }
107
- if (v instanceof Uint8Array) {
108
- return Effect.succeed(v);
109
- }
110
- if (v instanceof ArrayBuffer) {
111
- return Effect.succeed(new Uint8Array(v));
112
- }
113
- if (typeof v === "string") {
114
- return Effect.succeed(textEncoder.encode(v));
115
- }
116
- // Allows entity.stream to work when body is a JSON object
117
- if (typeof v === "object" && v !== null && !isBinary(v)) {
118
- return Effect.succeed(textEncoder.encode(JSON.stringify(v)));
119
- }
120
- return Effect.fail(mismatch(Schema.Uint8ArrayFromSelf, v));
110
+
111
+ function getBytes(
112
+ self,
113
+ ) {
114
+ const v = self.body
115
+ if (StreamExtra.isStream(v)) {
116
+ return Stream.runFold(
117
+ v,
118
+ new Uint8Array(0),
119
+ Values.concatBytes,
120
+ )
121
+ }
122
+ if (Effect.isEffect(v)) {
123
+ return Effect.flatMap(
124
+ v,
125
+ (inner) => {
126
+ if (isEntity(inner)) {
127
+ return inner.bytes
128
+ }
129
+ if (inner instanceof Uint8Array) {
130
+ return Effect.succeed(inner)
131
+ }
132
+ if (inner instanceof ArrayBuffer) {
133
+ return Effect.succeed(new Uint8Array(inner))
134
+ }
135
+ if (typeof inner === "string") {
136
+ return Effect.succeed(textEncoder.encode(inner))
137
+ }
138
+ return Effect.fail(mismatch(Schema.Uint8ArrayFromSelf, inner))
139
+ },
140
+ )
141
+ }
142
+ if (v instanceof Uint8Array) {
143
+ return Effect.succeed(v)
144
+ }
145
+ if (v instanceof ArrayBuffer) {
146
+ return Effect.succeed(new Uint8Array(v))
147
+ }
148
+ if (typeof v === "string") {
149
+ return Effect.succeed(textEncoder.encode(v))
150
+ }
151
+ // Allows entity.stream to work when body is a JSON object
152
+ if (typeof v === "object" && v !== null && !isBinary(v)) {
153
+ return Effect.succeed(textEncoder.encode(JSON.stringify(v)))
154
+ }
155
+ return Effect.fail(mismatch(Schema.Uint8ArrayFromSelf, v))
121
156
  }
157
+
122
158
  function getStream(self) {
123
- const v = self.body;
124
- if (StreamExtra.isStream(v)) {
125
- return v;
126
- }
127
- if (Effect.isEffect(v)) {
128
- return Stream.unwrap(Effect.map(v, (inner) => {
129
- if (isEntity(inner)) {
130
- return inner.stream;
131
- }
132
- return Stream.fromEffect(getBytes(make(inner)));
133
- }));
134
- }
135
- return Stream.fromEffect(getBytes(self));
159
+ const v = self.body
160
+ if (StreamExtra.isStream(v)) {
161
+ return v
162
+ }
163
+ if (Effect.isEffect(v)) {
164
+ return Stream.unwrap(
165
+ Effect.map(v, (inner) => {
166
+ if (isEntity(inner)) {
167
+ return inner.stream
168
+ }
169
+ return Stream.fromEffect(getBytes(make(inner)))
170
+ }),
171
+ )
172
+ }
173
+ return Stream.fromEffect(getBytes(self))
136
174
  }
175
+
137
176
  const Proto = Object.defineProperties(Object.create(null), {
138
- [TypeId]: { value: TypeId },
139
- pipe: {
140
- value: function () {
141
- return Pipeable.pipeArguments(this, arguments);
142
- },
177
+ [TypeId]: { value: TypeId },
178
+ pipe: {
179
+ value: function () {
180
+ return Pipeable.pipeArguments(this, arguments)
143
181
  },
144
- text: {
145
- get() {
146
- return getText(this);
147
- },
182
+ },
183
+ text: {
184
+ get() {
185
+ return getText(this)
148
186
  },
149
- json: {
150
- get() {
151
- return getJson(this);
152
- },
187
+ },
188
+ json: {
189
+ get() {
190
+ return getJson(this)
153
191
  },
154
- bytes: {
155
- get() {
156
- return getBytes(this);
157
- },
192
+ },
193
+ bytes: {
194
+ get() {
195
+ return getBytes(this)
158
196
  },
159
- stream: {
160
- get() {
161
- return getStream(this);
162
- },
197
+ },
198
+ stream: {
199
+ get() {
200
+ return getStream(this)
163
201
  },
164
- });
202
+ },
203
+ })
204
+
165
205
  export function isEntity(input) {
166
- return Predicate.hasProperty(input, TypeId);
206
+ return Predicate.hasProperty(input, TypeId)
167
207
  }
208
+
168
209
  export function make(body, options) {
169
- return Object.assign(Object.create(Proto), {
170
- body,
171
- headers: options?.headers ?? {},
172
- url: options?.url,
173
- status: options?.status,
174
- });
210
+ return Object.assign(Object.create(Proto), {
211
+ body,
212
+ headers: options?.headers ?? {},
213
+ url: options?.url,
214
+ status: options?.status,
215
+ })
175
216
  }
217
+
176
218
  export function effect(body) {
177
- return make(body);
219
+ return make(body)
178
220
  }
221
+
179
222
  export function resolve(entity) {
180
- const body = entity.body;
181
- if (Effect.isEffect(body)) {
182
- return Effect.map(body, (inner) => isEntity(inner)
183
- ? inner
184
- : make(inner, {
185
- status: entity.status,
186
- headers: entity.headers,
187
- url: entity.url,
188
- }));
189
- }
190
- return Effect.succeed(entity);
223
+ const body = entity.body
224
+ if (Effect.isEffect(body)) {
225
+ return Effect.map(body, (inner) =>
226
+ isEntity(inner)
227
+ ? (inner)
228
+ : (make(inner, {
229
+ status: entity.status,
230
+ headers: entity.headers,
231
+ url: entity.url,
232
+ })),
233
+ )
234
+ }
235
+ return Effect.succeed(entity)
191
236
  }
237
+
192
238
  export function type(self) {
193
- const h = self.headers;
194
- if (h["content-type"]) {
195
- return h["content-type"];
196
- }
197
- const v = self.body;
198
- if (typeof v === "string") {
199
- return "text/plain";
200
- }
201
- if (typeof v === "object" && v !== null && !isBinary(v)) {
202
- return "application/json";
203
- }
204
- return "application/octet-stream";
239
+ const h = self.headers
240
+ if (h["content-type"]) {
241
+ return h["content-type"]
242
+ }
243
+ const v = self.body
244
+ if (typeof v === "string") {
245
+ return "text/plain"
246
+ }
247
+ if (typeof v === "object" && v !== null && !isBinary(v)) {
248
+ return "application/json"
249
+ }
250
+ return "application/octet-stream"
205
251
  }
252
+
206
253
  export function length(self) {
207
- const h = self.headers;
208
- if (h["content-length"]) {
209
- return parseInt(h["content-length"], 10);
210
- }
211
- const v = self.body;
212
- if (typeof v === "string") {
213
- return textEncoder.encode(v).byteLength;
214
- }
215
- if (isBinary(v)) {
216
- return v.byteLength;
217
- }
218
- return undefined;
254
+ const h = self.headers
255
+ if (h["content-length"]) {
256
+ return parseInt(h["content-length"], 10)
257
+ }
258
+ const v = self.body
259
+ if (typeof v === "string") {
260
+ return textEncoder.encode(v).byteLength
261
+ }
262
+ if (isBinary(v)) {
263
+ return v.byteLength
264
+ }
265
+ return undefined
219
266
  }
267
+
268
+ export function fromResponse(
269
+ response,
270
+ request,
271
+ ) {
272
+ return make(
273
+ Effect.tryPromise({
274
+ try: () => response.arrayBuffer().then((buf) => new Uint8Array(buf)),
275
+ catch: (e) => (e instanceof Error ? e : new Error(String(e))),
276
+ }),
277
+ {
278
+ headers: Object.fromEntries(response.headers.entries()),
279
+ status: response.status,
280
+ url: response.url || request?.url,
281
+ },
282
+ )
283
+ }
284
+
220
285
  function mismatch(expected, actual) {
221
- return new ParseResult.ParseError({
222
- issue: new ParseResult.Type(expected.ast, actual),
223
- });
286
+ return new ParseResult.ParseError({
287
+ issue: new ParseResult.Type(expected.ast, actual),
288
+ })
224
289
  }