effect-start 0.28.0 → 0.29.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 (645) hide show
  1. package/dist/Cookies.d.ts +9 -41
  2. package/dist/Cookies.d.ts.map +1 -1
  3. package/dist/Cookies.js +2 -2
  4. package/dist/Cookies.js.map +1 -1
  5. package/dist/Entity.d.ts +5 -6
  6. package/dist/Entity.d.ts.map +1 -1
  7. package/dist/Entity.js +10 -7
  8. package/dist/Entity.js.map +1 -1
  9. package/dist/Fetch.d.ts +23 -4
  10. package/dist/Fetch.d.ts.map +1 -1
  11. package/dist/Fetch.js +90 -1
  12. package/dist/Fetch.js.map +1 -1
  13. package/dist/FileRouter.d.ts +4 -7
  14. package/dist/FileRouter.d.ts.map +1 -1
  15. package/dist/FileRouter.js +39 -30
  16. package/dist/FileRouter.js.map +1 -1
  17. package/dist/FileRouterCodegen.d.ts +2 -2
  18. package/dist/FileRouterCodegen.d.ts.map +1 -1
  19. package/dist/FileRouterCodegen.js +9 -21
  20. package/dist/FileRouterCodegen.js.map +1 -1
  21. package/dist/FileSystem.d.ts +39 -39
  22. package/dist/FileSystem.d.ts.map +1 -1
  23. package/dist/FileSystem.js +5 -3
  24. package/dist/FileSystem.js.map +1 -1
  25. package/dist/GlobalLayer.d.ts +2 -2
  26. package/dist/GlobalLayer.d.ts.map +1 -1
  27. package/dist/GlobalLayer.js +1 -1
  28. package/dist/GlobalLayer.js.map +1 -1
  29. package/dist/PlatformRuntime.d.ts.map +1 -1
  30. package/dist/PlatformRuntime.js.map +1 -1
  31. package/dist/Route.d.ts +2 -2
  32. package/dist/Route.d.ts.map +1 -1
  33. package/dist/Route.js +1 -1
  34. package/dist/Route.js.map +1 -1
  35. package/dist/RouteBody.d.ts +1 -1
  36. package/dist/RouteBody.d.ts.map +1 -1
  37. package/dist/RouteBody.js.map +1 -1
  38. package/dist/RouteError.js.map +1 -1
  39. package/dist/RouteHook.d.ts.map +1 -1
  40. package/dist/RouteHook.js.map +1 -1
  41. package/dist/RouteHttp.d.ts +1 -1
  42. package/dist/RouteHttp.d.ts.map +1 -1
  43. package/dist/RouteHttp.js +38 -31
  44. package/dist/RouteHttp.js.map +1 -1
  45. package/dist/RouteHttpTracer.d.ts.map +1 -1
  46. package/dist/RouteHttpTracer.js.map +1 -1
  47. package/dist/RouteMount.d.ts +2 -2
  48. package/dist/RouteMount.d.ts.map +1 -1
  49. package/dist/RouteMount.js +1 -1
  50. package/dist/RouteMount.js.map +1 -1
  51. package/dist/RouteSchema.d.ts +2 -2
  52. package/dist/RouteSchema.d.ts.map +1 -1
  53. package/dist/RouteSchema.js +2 -2
  54. package/dist/RouteSchema.js.map +1 -1
  55. package/dist/RouteSse.d.ts +9 -10
  56. package/dist/RouteSse.d.ts.map +1 -1
  57. package/dist/RouteSse.js +8 -12
  58. package/dist/RouteSse.js.map +1 -1
  59. package/dist/RouteTree.d.ts +2 -2
  60. package/dist/RouteTree.d.ts.map +1 -1
  61. package/dist/RouteTree.js +2 -2
  62. package/dist/RouteTree.js.map +1 -1
  63. package/dist/RouteTrie.js +1 -1
  64. package/dist/RouteTrie.js.map +1 -1
  65. package/dist/Socket.d.ts +13 -18
  66. package/dist/Socket.d.ts.map +1 -1
  67. package/dist/Socket.js +12 -13
  68. package/dist/Socket.js.map +1 -1
  69. package/dist/Start.d.ts +15 -23
  70. package/dist/Start.d.ts.map +1 -1
  71. package/dist/Start.js +17 -6
  72. package/dist/Start.js.map +1 -1
  73. package/dist/System.d.ts +20 -5
  74. package/dist/System.d.ts.map +1 -1
  75. package/dist/System.js +12 -42
  76. package/dist/System.js.map +1 -1
  77. package/dist/Unique.d.ts.map +1 -1
  78. package/dist/Unique.js.map +1 -1
  79. package/dist/{ChildProcess.d.ts → _ChildProcess.d.ts} +14 -15
  80. package/dist/_ChildProcess.d.ts.map +1 -0
  81. package/dist/{ChildProcess.js → _ChildProcess.js} +2 -2
  82. package/dist/_ChildProcess.js.map +1 -0
  83. package/dist/{ContentNegotiation.d.ts → _ContentNegotiation.d.ts} +1 -1
  84. package/dist/_ContentNegotiation.d.ts.map +1 -0
  85. package/dist/{ContentNegotiation.js → _ContentNegotiation.js} +1 -1
  86. package/dist/_ContentNegotiation.js.map +1 -0
  87. package/dist/_Development.d.ts +27 -0
  88. package/dist/_Development.d.ts.map +1 -0
  89. package/dist/{Development.js → _Development.js} +6 -9
  90. package/dist/_Development.js.map +1 -0
  91. package/dist/{Docker.d.ts → _Docker.d.ts} +2 -2
  92. package/dist/_Docker.d.ts.map +1 -0
  93. package/dist/{Docker.js → _Docker.js} +1 -1
  94. package/dist/_Docker.js.map +1 -0
  95. package/dist/{Effectify.d.ts → _Effectify.d.ts} +1 -1
  96. package/dist/_Effectify.d.ts.map +1 -0
  97. package/dist/{Effectify.js → _Effectify.js} +1 -1
  98. package/dist/_Effectify.js.map +1 -0
  99. package/dist/{Http.d.ts → _Http.d.ts} +1 -8
  100. package/dist/_Http.d.ts.map +1 -0
  101. package/dist/{Http.js → _Http.js} +1 -17
  102. package/dist/_Http.js.map +1 -0
  103. package/dist/{PathPattern.d.ts → _PathPattern.d.ts} +12 -1
  104. package/dist/_PathPattern.d.ts.map +1 -0
  105. package/dist/{PathPattern.js → _PathPattern.js} +86 -1
  106. package/dist/_PathPattern.js.map +1 -0
  107. package/dist/_SchemaExtra.d.ts +4 -0
  108. package/dist/_SchemaExtra.d.ts.map +1 -0
  109. package/dist/{SchemaExtra.js → _SchemaExtra.js} +4 -4
  110. package/dist/_SchemaExtra.js.map +1 -0
  111. package/dist/{StartApp.d.ts → _StartApp.d.ts} +1 -1
  112. package/dist/_StartApp.d.ts.map +1 -0
  113. package/dist/{StartApp.js → _StartApp.js} +1 -1
  114. package/dist/_StartApp.js.map +1 -0
  115. package/dist/{StreamExtra.d.ts → _StreamExtra.d.ts} +5 -5
  116. package/dist/_StreamExtra.d.ts.map +1 -0
  117. package/dist/{StreamExtra.js → _StreamExtra.js} +1 -1
  118. package/dist/_StreamExtra.js.map +1 -0
  119. package/dist/{Values.d.ts → _Values.d.ts} +3 -3
  120. package/dist/_Values.d.ts.map +1 -0
  121. package/dist/{Values.js → _Values.js} +1 -1
  122. package/dist/_Values.js.map +1 -0
  123. package/dist/bun/BunBundle.d.ts +2 -2
  124. package/dist/bun/BunBundle.d.ts.map +1 -1
  125. package/dist/bun/BunBundle.js.map +1 -1
  126. package/dist/bun/BunChildProcessSpawner.d.ts +1 -1
  127. package/dist/bun/BunChildProcessSpawner.d.ts.map +1 -1
  128. package/dist/bun/BunChildProcessSpawner.js +9 -9
  129. package/dist/bun/BunChildProcessSpawner.js.map +1 -1
  130. package/dist/bun/BunImportTrackerPlugin.d.ts +2 -2
  131. package/dist/bun/BunImportTrackerPlugin.d.ts.map +1 -1
  132. package/dist/bun/BunImportTrackerPlugin.js.map +1 -1
  133. package/dist/bun/BunRoute.d.ts +1 -1
  134. package/dist/bun/BunRoute.d.ts.map +1 -1
  135. package/dist/bun/BunRoute.js +6 -7
  136. package/dist/bun/BunRoute.js.map +1 -1
  137. package/dist/bun/BunRuntime.js.map +1 -1
  138. package/dist/bun/BunServer.d.ts +5 -5
  139. package/dist/bun/BunServer.d.ts.map +1 -1
  140. package/dist/bun/BunServer.js +3 -3
  141. package/dist/bun/BunServer.js.map +1 -1
  142. package/dist/bun/BunVirtualFilesPlugin.js.map +1 -1
  143. package/dist/bun/_BunEnhancedResolve.d.ts.map +1 -1
  144. package/dist/bun/_BunEnhancedResolve.js.map +1 -1
  145. package/dist/bun/_empty.html +0 -0
  146. package/dist/bundler/Bundle.d.ts +2 -2
  147. package/dist/bundler/Bundle.d.ts.map +1 -1
  148. package/dist/bundler/Bundle.js.map +1 -1
  149. package/dist/bundler/BundleFiles.d.ts +1 -1
  150. package/dist/bundler/BundleFiles.d.ts.map +1 -1
  151. package/dist/bundler/BundleFiles.js.map +1 -1
  152. package/dist/bundler/BundleRoute.d.ts +6 -5
  153. package/dist/bundler/BundleRoute.d.ts.map +1 -1
  154. package/dist/bundler/BundleRoute.js +2 -2
  155. package/dist/bundler/BundleRoute.js.map +1 -1
  156. package/dist/cli/Argument.d.ts +26 -0
  157. package/dist/cli/Argument.d.ts.map +1 -0
  158. package/dist/cli/Argument.js +31 -0
  159. package/dist/cli/Argument.js.map +1 -0
  160. package/dist/cli/CliError.d.ts +15 -0
  161. package/dist/cli/CliError.d.ts.map +1 -0
  162. package/dist/cli/CliError.js +54 -0
  163. package/dist/cli/CliError.js.map +1 -0
  164. package/dist/cli/Command.d.ts +61 -0
  165. package/dist/cli/Command.d.ts.map +1 -0
  166. package/dist/cli/Command.js +453 -0
  167. package/dist/cli/Command.js.map +1 -0
  168. package/dist/cli/Flag.d.ts +32 -0
  169. package/dist/cli/Flag.d.ts.map +1 -0
  170. package/dist/cli/Flag.js +35 -0
  171. package/dist/cli/Flag.js.map +1 -0
  172. package/dist/cli/HelpDoc.d.ts +28 -0
  173. package/dist/cli/HelpDoc.d.ts.map +1 -0
  174. package/dist/cli/HelpDoc.js +40 -0
  175. package/dist/cli/HelpDoc.js.map +1 -0
  176. package/dist/cli/Param.d.ts +71 -0
  177. package/dist/cli/Param.d.ts.map +1 -0
  178. package/dist/cli/Param.js +236 -0
  179. package/dist/cli/Param.js.map +1 -0
  180. package/dist/cli/Primitive.d.ts +22 -0
  181. package/dist/cli/Primitive.d.ts.map +1 -0
  182. package/dist/cli/Primitive.js +73 -0
  183. package/dist/cli/Primitive.js.map +1 -0
  184. package/dist/cli/index.d.ts +8 -0
  185. package/dist/cli/index.d.ts.map +1 -0
  186. package/dist/cli/index.js +8 -0
  187. package/dist/cli/index.js.map +1 -0
  188. package/dist/client/Overlay.js.map +1 -1
  189. package/dist/client/ScrollState.js.map +1 -1
  190. package/dist/client/index.js.map +1 -1
  191. package/dist/datastar/actions/fetch.js.map +1 -1
  192. package/dist/datastar/actions/peek.js.map +1 -1
  193. package/dist/datastar/actions/setAll.js.map +1 -1
  194. package/dist/datastar/actions/toggleAll.js.map +1 -1
  195. package/dist/datastar/attributes/attr.js.map +1 -1
  196. package/dist/datastar/attributes/bind.js.map +1 -1
  197. package/dist/datastar/attributes/class.js.map +1 -1
  198. package/dist/datastar/attributes/computed.js.map +1 -1
  199. package/dist/datastar/attributes/indicator.js.map +1 -1
  200. package/dist/datastar/attributes/init.js.map +1 -1
  201. package/dist/datastar/attributes/jsonSignals.js.map +1 -1
  202. package/dist/datastar/attributes/on.js.map +1 -1
  203. package/dist/datastar/attributes/onIntersect.js.map +1 -1
  204. package/dist/datastar/attributes/onInterval.js.map +1 -1
  205. package/dist/datastar/attributes/onSignalPatch.js.map +1 -1
  206. package/dist/datastar/attributes/ref.js.map +1 -1
  207. package/dist/datastar/attributes/show.js.map +1 -1
  208. package/dist/datastar/attributes/signals.js.map +1 -1
  209. package/dist/datastar/attributes/style.js.map +1 -1
  210. package/dist/datastar/attributes/text.js.map +1 -1
  211. package/dist/datastar/engine.d.ts +5 -5
  212. package/dist/datastar/engine.d.ts.map +1 -1
  213. package/dist/datastar/engine.js.map +1 -1
  214. package/dist/datastar/utils.d.ts +1 -1
  215. package/dist/datastar/utils.d.ts.map +1 -1
  216. package/dist/datastar/utils.js.map +1 -1
  217. package/dist/datastar/watchers/patchElements.js +3 -1
  218. package/dist/datastar/watchers/patchElements.js.map +1 -1
  219. package/dist/datastar/watchers/patchSignals.js.map +1 -1
  220. package/dist/experimental/EncryptedCookies.d.ts +4 -4
  221. package/dist/experimental/EncryptedCookies.d.ts.map +1 -1
  222. package/dist/experimental/EncryptedCookies.js.map +1 -1
  223. package/dist/hyper/Hyper.js.map +1 -1
  224. package/dist/hyper/HyperHtml.js.map +1 -1
  225. package/dist/hyper/HyperHtml.test.js.map +1 -1
  226. package/dist/hyper/HyperNode.d.ts +1 -2
  227. package/dist/hyper/HyperNode.d.ts.map +1 -1
  228. package/dist/hyper/HyperNode.js +1 -1
  229. package/dist/hyper/HyperNode.js.map +1 -1
  230. package/dist/hyper/HyperRoute.js.map +1 -1
  231. package/dist/hyper/HyperRoute.test.js +11 -13
  232. package/dist/hyper/HyperRoute.test.js.map +1 -1
  233. package/dist/hyper/html.d.ts +5 -4
  234. package/dist/hyper/html.d.ts.map +1 -1
  235. package/dist/hyper/html.js.map +1 -1
  236. package/dist/hyper/jsx-runtime.js.map +1 -1
  237. package/dist/index.d.ts +1 -1
  238. package/dist/index.d.ts.map +1 -1
  239. package/dist/index.js +1 -1
  240. package/dist/index.js.map +1 -1
  241. package/dist/lint/plugin.d.ts +18 -15
  242. package/dist/lint/plugin.d.ts.map +1 -1
  243. package/dist/lint/plugin.js +76 -80
  244. package/dist/lint/plugin.js.map +1 -1
  245. package/dist/node/NodeFileSystem.d.ts +3 -3
  246. package/dist/node/NodeFileSystem.d.ts.map +1 -1
  247. package/dist/node/NodeFileSystem.js +8 -7
  248. package/dist/node/NodeFileSystem.js.map +1 -1
  249. package/dist/node/NodeUtils.d.ts.map +1 -1
  250. package/dist/node/NodeUtils.js.map +1 -1
  251. package/dist/sql/SqlCache.d.ts +1 -0
  252. package/dist/sql/SqlCache.d.ts.map +1 -1
  253. package/dist/sql/SqlCache.js +5 -1
  254. package/dist/sql/SqlCache.js.map +1 -1
  255. package/dist/sql/SqlClient.js +1 -1
  256. package/dist/sql/SqlClient.js.map +1 -1
  257. package/dist/{SqlIntrospect.d.ts → sql/SqlIntrospect.d.ts} +3 -3
  258. package/dist/sql/SqlIntrospect.d.ts.map +1 -0
  259. package/dist/{SqlIntrospect.js → sql/SqlIntrospect.js} +1 -1
  260. package/dist/sql/SqlIntrospect.js.map +1 -0
  261. package/dist/sql/bun/index.d.ts +3 -3
  262. package/dist/sql/bun/index.d.ts.map +1 -1
  263. package/dist/sql/bun/index.js +1 -1
  264. package/dist/sql/bun/index.js.map +1 -1
  265. package/dist/sql/index.d.ts +1 -0
  266. package/dist/sql/index.d.ts.map +1 -1
  267. package/dist/sql/index.js +1 -0
  268. package/dist/sql/index.js.map +1 -1
  269. package/dist/sql/libsql/index.d.ts +1 -1
  270. package/dist/sql/libsql/index.d.ts.map +1 -1
  271. package/dist/sql/libsql/index.js +2 -2
  272. package/dist/sql/libsql/index.js.map +1 -1
  273. package/dist/sql/mssql/index.d.ts +3 -3
  274. package/dist/sql/mssql/index.d.ts.map +1 -1
  275. package/dist/sql/mssql/index.js +1 -1
  276. package/dist/sql/mssql/index.js.map +1 -1
  277. package/dist/sql/postgres/index.d.ts +1 -1
  278. package/dist/sql/postgres/index.d.ts.map +1 -1
  279. package/dist/sql/postgres/index.js.map +1 -1
  280. package/dist/studio/Simulation.d.ts.map +1 -0
  281. package/dist/studio/Simulation.js.map +1 -0
  282. package/dist/{tower/Tower.d.ts → studio/Studio.d.ts} +4 -4
  283. package/dist/studio/Studio.d.ts.map +1 -0
  284. package/dist/studio/Studio.js +30 -0
  285. package/dist/studio/Studio.js.map +1 -0
  286. package/dist/studio/StudioErrors.d.ts +4 -0
  287. package/dist/studio/StudioErrors.d.ts.map +1 -0
  288. package/dist/{tower/TowerErrors.js → studio/StudioErrors.js} +6 -6
  289. package/dist/studio/StudioErrors.js.map +1 -0
  290. package/dist/{tower/TowerLogger.d.ts → studio/StudioLogger.d.ts} +1 -1
  291. package/dist/studio/StudioLogger.d.ts.map +1 -0
  292. package/dist/{tower/TowerLogger.js → studio/StudioLogger.js} +7 -7
  293. package/dist/studio/StudioLogger.js.map +1 -0
  294. package/dist/studio/StudioMetrics.d.ts +4 -0
  295. package/dist/studio/StudioMetrics.d.ts.map +1 -0
  296. package/dist/{tower/TowerMetrics.js → studio/StudioMetrics.js} +3 -3
  297. package/dist/studio/StudioMetrics.js.map +1 -0
  298. package/dist/studio/StudioProcess.d.ts +4 -0
  299. package/dist/studio/StudioProcess.d.ts.map +1 -0
  300. package/dist/{tower/TowerProcess.js → studio/StudioProcess.js} +3 -3
  301. package/dist/studio/StudioProcess.js.map +1 -0
  302. package/dist/{tower/TowerStore.d.ts → studio/StudioStore.d.ts} +33 -33
  303. package/dist/studio/StudioStore.d.ts.map +1 -0
  304. package/dist/{tower/TowerStore.js → studio/StudioStore.js} +5 -5
  305. package/dist/studio/StudioStore.js.map +1 -0
  306. package/dist/studio/StudioTracer.d.ts +4 -0
  307. package/dist/studio/StudioTracer.d.ts.map +1 -0
  308. package/dist/{tower/TowerTracer.js → studio/StudioTracer.js} +21 -21
  309. package/dist/studio/StudioTracer.js.map +1 -0
  310. package/dist/studio/index.d.ts +4 -0
  311. package/dist/studio/index.d.ts.map +1 -0
  312. package/dist/studio/index.js +4 -0
  313. package/dist/studio/index.js.map +1 -0
  314. package/dist/{tower → studio}/routes/errors/route.d.ts +1 -1
  315. package/dist/{tower/routes/metrics → studio/routes/errors}/route.d.ts.map +1 -1
  316. package/dist/{tower → studio}/routes/errors/route.js +5 -9
  317. package/dist/studio/routes/errors/route.js.map +1 -0
  318. package/dist/{tower → studio}/routes/fiberDetail.d.ts +1 -1
  319. package/dist/studio/routes/fiberDetail.d.ts.map +1 -0
  320. package/dist/{tower → studio}/routes/fiberDetail.js +7 -7
  321. package/dist/studio/routes/fiberDetail.js.map +1 -0
  322. package/dist/{tower/routes/traces → studio/routes/fibers}/route.d.ts +1 -1
  323. package/dist/studio/routes/fibers/route.d.ts.map +1 -0
  324. package/dist/studio/routes/fibers/route.js +25 -0
  325. package/dist/studio/routes/fibers/route.js.map +1 -0
  326. package/dist/studio/routes/layout.d.ts.map +1 -0
  327. package/{src/tower → dist/studio}/routes/layout.html +1 -1
  328. package/dist/studio/routes/layout.js.map +1 -0
  329. package/dist/{tower → studio}/routes/logs/route.d.ts +1 -1
  330. package/dist/studio/routes/logs/route.d.ts.map +1 -0
  331. package/dist/studio/routes/logs/route.js +30 -0
  332. package/dist/studio/routes/logs/route.js.map +1 -0
  333. package/dist/{tower → studio}/routes/metrics/route.d.ts +1 -1
  334. package/dist/studio/routes/metrics/route.d.ts.map +1 -0
  335. package/dist/{tower → studio}/routes/metrics/route.js +3 -5
  336. package/dist/studio/routes/metrics/route.js.map +1 -0
  337. package/dist/{tower → studio}/routes/route.d.ts +1 -1
  338. package/dist/studio/routes/route.d.ts.map +1 -0
  339. package/dist/studio/routes/route.js +6 -0
  340. package/dist/studio/routes/route.js.map +1 -0
  341. package/dist/{tower → studio}/routes/routes/route.d.ts +1 -1
  342. package/dist/studio/routes/routes/route.d.ts.map +1 -0
  343. package/dist/{tower → studio}/routes/routes/route.js +2 -4
  344. package/dist/studio/routes/routes/route.js.map +1 -0
  345. package/dist/{tower → studio}/routes/services/route.d.ts +1 -1
  346. package/dist/studio/routes/services/route.d.ts.map +1 -0
  347. package/dist/studio/routes/services/route.js +13 -0
  348. package/dist/studio/routes/services/route.js.map +1 -0
  349. package/dist/{tower → studio}/routes/system/route.d.ts +1 -1
  350. package/dist/studio/routes/system/route.d.ts.map +1 -0
  351. package/dist/studio/routes/system/route.js +19 -0
  352. package/dist/studio/routes/system/route.js.map +1 -0
  353. package/dist/{tower → studio}/routes/traceDetail.d.ts +1 -1
  354. package/dist/studio/routes/traceDetail.d.ts.map +1 -0
  355. package/dist/{tower → studio}/routes/traceDetail.js +4 -4
  356. package/dist/studio/routes/traceDetail.js.map +1 -0
  357. package/dist/{tower/routes/fibers → studio/routes/traces}/route.d.ts +1 -1
  358. package/dist/studio/routes/traces/route.d.ts.map +1 -0
  359. package/dist/studio/routes/traces/route.js +30 -0
  360. package/dist/studio/routes/traces/route.js.map +1 -0
  361. package/dist/{tower → studio}/routes/tree.d.ts +46 -46
  362. package/dist/studio/routes/tree.d.ts.map +1 -0
  363. package/dist/studio/routes/tree.js.map +1 -0
  364. package/dist/studio/ui/Errors.d.ts +5 -0
  365. package/dist/studio/ui/Errors.d.ts.map +1 -0
  366. package/dist/studio/ui/Errors.js +17 -0
  367. package/dist/studio/ui/Errors.js.map +1 -0
  368. package/dist/{tower → studio}/ui/Fibers.d.ts +5 -5
  369. package/dist/studio/ui/Fibers.d.ts.map +1 -0
  370. package/dist/studio/ui/Fibers.js +134 -0
  371. package/dist/studio/ui/Fibers.js.map +1 -0
  372. package/dist/studio/ui/Logs.d.ts +5 -0
  373. package/dist/studio/ui/Logs.d.ts.map +1 -0
  374. package/dist/{tower → studio}/ui/Logs.js +2 -3
  375. package/dist/studio/ui/Logs.js.map +1 -0
  376. package/dist/studio/ui/Metrics.d.ts +5 -0
  377. package/dist/studio/ui/Metrics.d.ts.map +1 -0
  378. package/dist/{tower → studio}/ui/Metrics.js +4 -11
  379. package/dist/studio/ui/Metrics.js.map +1 -0
  380. package/dist/studio/ui/Routes.d.ts.map +1 -0
  381. package/dist/{tower → studio}/ui/Routes.js +4 -12
  382. package/dist/studio/ui/Routes.js.map +1 -0
  383. package/dist/studio/ui/Services.d.ts.map +1 -0
  384. package/dist/{tower → studio}/ui/Services.js +2 -9
  385. package/dist/studio/ui/Services.js.map +1 -0
  386. package/dist/studio/ui/Shell.d.ts.map +1 -0
  387. package/dist/studio/ui/Shell.js +8 -0
  388. package/dist/studio/ui/Shell.js.map +1 -0
  389. package/dist/studio/ui/System.d.ts +5 -0
  390. package/dist/studio/ui/System.d.ts.map +1 -0
  391. package/dist/studio/ui/System.js +36 -0
  392. package/dist/studio/ui/System.js.map +1 -0
  393. package/dist/studio/ui/Traces.d.ts +13 -0
  394. package/dist/studio/ui/Traces.d.ts.map +1 -0
  395. package/dist/studio/ui/Traces.js +182 -0
  396. package/dist/studio/ui/Traces.js.map +1 -0
  397. package/dist/testing/TestLogger.js.map +1 -1
  398. package/dist/testing/utils.d.ts +3 -1
  399. package/dist/testing/utils.d.ts.map +1 -1
  400. package/dist/testing/utils.js +39 -0
  401. package/dist/testing/utils.js.map +1 -1
  402. package/dist/x/cloudflare/CloudflareTunnel.d.ts +8 -7
  403. package/dist/x/cloudflare/CloudflareTunnel.d.ts.map +1 -1
  404. package/dist/x/cloudflare/CloudflareTunnel.js.map +1 -1
  405. package/dist/x/tailscale/TailscaleTunnel.d.ts +9 -9
  406. package/dist/x/tailscale/TailscaleTunnel.d.ts.map +1 -1
  407. package/dist/x/tailscale/TailscaleTunnel.js +3 -4
  408. package/dist/x/tailscale/TailscaleTunnel.js.map +1 -1
  409. package/dist/x/tailwind/TailwindPlugin.d.ts +5 -5
  410. package/dist/x/tailwind/TailwindPlugin.d.ts.map +1 -1
  411. package/dist/x/tailwind/TailwindPlugin.js.map +1 -1
  412. package/dist/x/tailwind/compile.js.map +1 -1
  413. package/dist/x/tailwind/plugin.js.map +1 -1
  414. package/package.json +42 -60
  415. package/src/Cookies.ts +4 -8
  416. package/src/Entity.ts +24 -19
  417. package/src/Fetch.ts +128 -5
  418. package/src/FileRouter.ts +46 -49
  419. package/src/FileRouterCodegen.ts +9 -23
  420. package/src/FileSystem.ts +43 -63
  421. package/src/GlobalLayer.ts +1 -1
  422. package/src/Route.ts +2 -2
  423. package/src/RouteBody.ts +1 -1
  424. package/src/RouteHttp.ts +133 -113
  425. package/src/RouteMount.ts +3 -3
  426. package/src/RouteSchema.ts +2 -2
  427. package/src/RouteSse.ts +28 -37
  428. package/src/RouteTree.ts +2 -2
  429. package/src/RouteTrie.ts +1 -1
  430. package/src/Socket.ts +17 -27
  431. package/src/Start.ts +39 -47
  432. package/src/System.ts +40 -64
  433. package/src/{ChildProcess.ts → _ChildProcess.ts} +13 -22
  434. package/src/{Development.ts → _Development.ts} +16 -21
  435. package/src/{Docker.ts → _Docker.ts} +1 -1
  436. package/src/{Http.ts → _Http.ts} +0 -28
  437. package/src/{PathPattern.ts → _PathPattern.ts} +105 -0
  438. package/src/{SchemaExtra.ts → _SchemaExtra.ts} +3 -4
  439. package/src/bun/BunChildProcessSpawner.ts +9 -9
  440. package/src/bun/BunRoute.ts +5 -8
  441. package/src/bun/BunServer.ts +3 -3
  442. package/src/bundler/BundleRoute.ts +2 -2
  443. package/src/cli/Argument.ts +45 -0
  444. package/src/cli/CliError.ts +68 -0
  445. package/src/cli/Command.ts +685 -0
  446. package/src/cli/Flag.ts +63 -0
  447. package/src/cli/HelpDoc.ts +67 -0
  448. package/src/cli/Param.ts +418 -0
  449. package/src/cli/Primitive.ts +94 -0
  450. package/src/cli/index.ts +7 -0
  451. package/src/datastar/watchers/patchElements.ts +4 -2
  452. package/src/hyper/HyperHtml.test.tsx +395 -0
  453. package/src/hyper/HyperNode.ts +1 -2
  454. package/src/hyper/HyperRoute.test.tsx +166 -0
  455. package/src/hyper/HyperRoute.ts +1 -1
  456. package/src/index.ts +1 -1
  457. package/src/lint/plugin.js +86 -97
  458. package/src/node/NodeFileSystem.ts +15 -14
  459. package/src/sql/SqlCache.ts +14 -1
  460. package/src/sql/SqlClient.ts +1 -1
  461. package/src/{SqlIntrospect.ts → sql/SqlIntrospect.ts} +1 -1
  462. package/src/sql/bun/index.ts +1 -1
  463. package/src/sql/index.ts +1 -0
  464. package/src/sql/libsql/index.ts +1 -1
  465. package/src/sql/mssql/index.ts +1 -1
  466. package/src/studio/Studio.ts +47 -0
  467. package/src/{tower/TowerErrors.ts → studio/StudioErrors.ts} +13 -13
  468. package/src/{tower/TowerLogger.ts → studio/StudioLogger.ts} +10 -10
  469. package/src/{tower/TowerMetrics.ts → studio/StudioMetrics.ts} +5 -5
  470. package/src/{tower/TowerProcess.ts → studio/StudioProcess.ts} +4 -4
  471. package/src/{tower/TowerStore.ts → studio/StudioStore.ts} +37 -37
  472. package/src/{tower/TowerTracer.ts → studio/StudioTracer.ts} +25 -25
  473. package/src/studio/index.ts +3 -0
  474. package/src/{tower → studio}/routes/errors/route.tsx +4 -4
  475. package/src/{tower → studio}/routes/fiberDetail.tsx +8 -8
  476. package/src/{tower → studio}/routes/fibers/route.tsx +10 -10
  477. package/src/studio/routes/layout.html +340 -0
  478. package/src/{tower → studio}/routes/logs/route.tsx +4 -4
  479. package/src/{tower → studio}/routes/metrics/route.tsx +5 -5
  480. package/src/studio/routes/route.tsx +8 -0
  481. package/src/{tower → studio}/routes/routes/route.tsx +2 -2
  482. package/src/{tower → studio}/routes/services/route.tsx +2 -2
  483. package/src/{tower → studio}/routes/system/route.tsx +5 -5
  484. package/src/{tower → studio}/routes/traceDetail.tsx +5 -5
  485. package/src/{tower → studio}/routes/traces/route.tsx +5 -5
  486. package/src/{tower → studio}/ui/Errors.tsx +3 -3
  487. package/src/{tower → studio}/ui/Fibers.tsx +7 -7
  488. package/src/{tower → studio}/ui/Logs.tsx +3 -3
  489. package/src/{tower → studio}/ui/Metrics.tsx +4 -4
  490. package/src/{tower → studio}/ui/Shell.tsx +1 -1
  491. package/src/{tower → studio}/ui/System.tsx +2 -2
  492. package/src/{tower → studio}/ui/Traces.tsx +16 -16
  493. package/src/testing/utils.ts +59 -0
  494. package/src/x/tailscale/TailscaleTunnel.ts +3 -4
  495. package/dist/ChildProcess.d.ts.map +0 -1
  496. package/dist/ChildProcess.js.map +0 -1
  497. package/dist/Commander.d.ts +0 -101
  498. package/dist/Commander.d.ts.map +0 -1
  499. package/dist/Commander.js +0 -327
  500. package/dist/Commander.js.map +0 -1
  501. package/dist/ContentNegotiation.d.ts.map +0 -1
  502. package/dist/ContentNegotiation.js.map +0 -1
  503. package/dist/Development.d.ts +0 -42
  504. package/dist/Development.d.ts.map +0 -1
  505. package/dist/Development.js.map +0 -1
  506. package/dist/Docker.d.ts.map +0 -1
  507. package/dist/Docker.js.map +0 -1
  508. package/dist/Effectify.d.ts.map +0 -1
  509. package/dist/Effectify.js.map +0 -1
  510. package/dist/FilePathPattern.d.ts +0 -30
  511. package/dist/FilePathPattern.d.ts.map +0 -1
  512. package/dist/FilePathPattern.js +0 -87
  513. package/dist/FilePathPattern.js.map +0 -1
  514. package/dist/Http.d.ts.map +0 -1
  515. package/dist/Http.js.map +0 -1
  516. package/dist/PathPattern.d.ts.map +0 -1
  517. package/dist/PathPattern.js.map +0 -1
  518. package/dist/PlatformError.d.ts +0 -39
  519. package/dist/PlatformError.d.ts.map +0 -1
  520. package/dist/PlatformError.js +0 -26
  521. package/dist/PlatformError.js.map +0 -1
  522. package/dist/SchemaExtra.d.ts +0 -8
  523. package/dist/SchemaExtra.d.ts.map +0 -1
  524. package/dist/SchemaExtra.js.map +0 -1
  525. package/dist/SqlIntrospect.d.ts.map +0 -1
  526. package/dist/SqlIntrospect.js.map +0 -1
  527. package/dist/StartApp.d.ts.map +0 -1
  528. package/dist/StartApp.js.map +0 -1
  529. package/dist/StreamExtra.d.ts.map +0 -1
  530. package/dist/StreamExtra.js.map +0 -1
  531. package/dist/TuplePathPattern.d.ts +0 -10
  532. package/dist/TuplePathPattern.d.ts.map +0 -1
  533. package/dist/TuplePathPattern.js +0 -69
  534. package/dist/TuplePathPattern.js.map +0 -1
  535. package/dist/Values.d.ts.map +0 -1
  536. package/dist/Values.js.map +0 -1
  537. package/dist/tower/Simulation.d.ts.map +0 -1
  538. package/dist/tower/Simulation.js.map +0 -1
  539. package/dist/tower/Tower.d.ts.map +0 -1
  540. package/dist/tower/Tower.js +0 -30
  541. package/dist/tower/Tower.js.map +0 -1
  542. package/dist/tower/TowerErrors.d.ts +0 -4
  543. package/dist/tower/TowerErrors.d.ts.map +0 -1
  544. package/dist/tower/TowerErrors.js.map +0 -1
  545. package/dist/tower/TowerLogger.d.ts.map +0 -1
  546. package/dist/tower/TowerLogger.js.map +0 -1
  547. package/dist/tower/TowerMetrics.d.ts +0 -4
  548. package/dist/tower/TowerMetrics.d.ts.map +0 -1
  549. package/dist/tower/TowerMetrics.js.map +0 -1
  550. package/dist/tower/TowerProcess.d.ts +0 -4
  551. package/dist/tower/TowerProcess.d.ts.map +0 -1
  552. package/dist/tower/TowerProcess.js.map +0 -1
  553. package/dist/tower/TowerStore.d.ts.map +0 -1
  554. package/dist/tower/TowerStore.js.map +0 -1
  555. package/dist/tower/TowerTracer.d.ts +0 -4
  556. package/dist/tower/TowerTracer.d.ts.map +0 -1
  557. package/dist/tower/TowerTracer.js.map +0 -1
  558. package/dist/tower/index.d.ts +0 -4
  559. package/dist/tower/index.d.ts.map +0 -1
  560. package/dist/tower/index.js +0 -4
  561. package/dist/tower/index.js.map +0 -1
  562. package/dist/tower/routes/errors/route.d.ts.map +0 -1
  563. package/dist/tower/routes/errors/route.js.map +0 -1
  564. package/dist/tower/routes/fiberDetail.d.ts.map +0 -1
  565. package/dist/tower/routes/fiberDetail.js.map +0 -1
  566. package/dist/tower/routes/fibers/route.d.ts.map +0 -1
  567. package/dist/tower/routes/fibers/route.js +0 -27
  568. package/dist/tower/routes/fibers/route.js.map +0 -1
  569. package/dist/tower/routes/layout.d.ts.map +0 -1
  570. package/dist/tower/routes/layout.js.map +0 -1
  571. package/dist/tower/routes/logs/route.d.ts.map +0 -1
  572. package/dist/tower/routes/logs/route.js +0 -36
  573. package/dist/tower/routes/logs/route.js.map +0 -1
  574. package/dist/tower/routes/metrics/route.js.map +0 -1
  575. package/dist/tower/routes/route.d.ts.map +0 -1
  576. package/dist/tower/routes/route.js +0 -6
  577. package/dist/tower/routes/route.js.map +0 -1
  578. package/dist/tower/routes/routes/route.d.ts.map +0 -1
  579. package/dist/tower/routes/routes/route.js.map +0 -1
  580. package/dist/tower/routes/services/route.d.ts.map +0 -1
  581. package/dist/tower/routes/services/route.js +0 -15
  582. package/dist/tower/routes/services/route.js.map +0 -1
  583. package/dist/tower/routes/system/route.d.ts.map +0 -1
  584. package/dist/tower/routes/system/route.js +0 -21
  585. package/dist/tower/routes/system/route.js.map +0 -1
  586. package/dist/tower/routes/traceDetail.d.ts.map +0 -1
  587. package/dist/tower/routes/traceDetail.js.map +0 -1
  588. package/dist/tower/routes/traces/route.d.ts.map +0 -1
  589. package/dist/tower/routes/traces/route.js +0 -36
  590. package/dist/tower/routes/traces/route.js.map +0 -1
  591. package/dist/tower/routes/tree.d.ts.map +0 -1
  592. package/dist/tower/routes/tree.js.map +0 -1
  593. package/dist/tower/ui/Errors.d.ts +0 -5
  594. package/dist/tower/ui/Errors.d.ts.map +0 -1
  595. package/dist/tower/ui/Errors.js +0 -30
  596. package/dist/tower/ui/Errors.js.map +0 -1
  597. package/dist/tower/ui/Fibers.d.ts.map +0 -1
  598. package/dist/tower/ui/Fibers.js +0 -157
  599. package/dist/tower/ui/Fibers.js.map +0 -1
  600. package/dist/tower/ui/Logs.d.ts +0 -5
  601. package/dist/tower/ui/Logs.d.ts.map +0 -1
  602. package/dist/tower/ui/Logs.js.map +0 -1
  603. package/dist/tower/ui/Metrics.d.ts +0 -5
  604. package/dist/tower/ui/Metrics.d.ts.map +0 -1
  605. package/dist/tower/ui/Metrics.js.map +0 -1
  606. package/dist/tower/ui/Routes.d.ts.map +0 -1
  607. package/dist/tower/ui/Routes.js.map +0 -1
  608. package/dist/tower/ui/Services.d.ts.map +0 -1
  609. package/dist/tower/ui/Services.js.map +0 -1
  610. package/dist/tower/ui/Shell.d.ts.map +0 -1
  611. package/dist/tower/ui/Shell.js +0 -12
  612. package/dist/tower/ui/Shell.js.map +0 -1
  613. package/dist/tower/ui/System.d.ts +0 -5
  614. package/dist/tower/ui/System.d.ts.map +0 -1
  615. package/dist/tower/ui/System.js +0 -65
  616. package/dist/tower/ui/System.js.map +0 -1
  617. package/dist/tower/ui/Traces.d.ts +0 -13
  618. package/dist/tower/ui/Traces.d.ts.map +0 -1
  619. package/dist/tower/ui/Traces.js +0 -219
  620. package/dist/tower/ui/Traces.js.map +0 -1
  621. package/src/Commander.ts +0 -585
  622. package/src/FilePathPattern.ts +0 -115
  623. package/src/PlatformError.ts +0 -73
  624. package/src/TuplePathPattern.ts +0 -75
  625. package/src/tower/Tower.ts +0 -47
  626. package/src/tower/index.ts +0 -3
  627. package/src/tower/routes/route.tsx +0 -8
  628. /package/dist/{tower → studio}/Simulation.d.ts +0 -0
  629. /package/dist/{tower → studio}/Simulation.js +0 -0
  630. /package/dist/{tower → studio}/routes/layout.d.ts +0 -0
  631. /package/dist/{tower → studio}/routes/layout.js +0 -0
  632. /package/dist/{tower → studio}/routes/tree.js +0 -0
  633. /package/dist/{tower → studio}/ui/Routes.d.ts +0 -0
  634. /package/dist/{tower → studio}/ui/Services.d.ts +0 -0
  635. /package/dist/{tower → studio}/ui/Shell.d.ts +0 -0
  636. /package/src/{ContentNegotiation.ts → _ContentNegotiation.ts} +0 -0
  637. /package/src/{Effectify.ts → _Effectify.ts} +0 -0
  638. /package/src/{StartApp.ts → _StartApp.ts} +0 -0
  639. /package/src/{StreamExtra.ts → _StreamExtra.ts} +0 -0
  640. /package/src/{Values.ts → _Values.ts} +0 -0
  641. /package/src/{tower → studio}/Simulation.ts +0 -0
  642. /package/src/{tower → studio}/routes/layout.tsx +0 -0
  643. /package/src/{tower → studio}/routes/tree.ts +0 -0
  644. /package/src/{tower → studio}/ui/Routes.tsx +0 -0
  645. /package/src/{tower → studio}/ui/Services.tsx +0 -0
package/src/Commander.ts DELETED
@@ -1,585 +0,0 @@
1
- import * as Data from "effect/Data"
2
- import * as Effect from "effect/Effect"
3
- import * as Pipeable from "effect/Pipeable"
4
- import * as Predicate from "effect/Predicate"
5
- import * as Schema from "effect/Schema"
6
-
7
- export class CommanderError extends Data.TaggedError("CommanderError")<{
8
- message: string
9
- cause?: unknown
10
- }> {}
11
-
12
- const TypeId: unique symbol = Symbol.for("effect-start/Commander")
13
-
14
- type KebabToCamel<S extends string> = S extends `${infer First}-${infer Rest}`
15
- ? `${First}${KebabToCamel<Capitalize<Rest>>}`
16
- : S
17
-
18
- type StripPrefix<S extends string> = S extends `--${infer Name}`
19
- ? Name
20
- : S extends `-${infer Name}`
21
- ? Name
22
- : S
23
-
24
- type OptionNameToCamelCase<S extends string> = KebabToCamel<StripPrefix<S>>
25
-
26
- export interface OptionBuilder<A = any, Name extends string = string> {
27
- readonly _tag: "OptionBuilder"
28
- readonly name: Name
29
- readonly long: Name
30
- readonly short?: string
31
- readonly description: string
32
- readonly schema?: Schema.Schema<A, any>
33
- readonly defaultValue?: A
34
- }
35
-
36
- type OptionBuilderWithSchema<A, Name extends string> = Omit<
37
- OptionBuilder<A, Name>,
38
- "schema" | "defaultValue"
39
- > & {
40
- readonly schema: Schema.Schema<A, any>
41
- readonly defaultValue?: A
42
- }
43
-
44
- export const option = <
45
- const Long extends `--${string}`,
46
- const Short extends `-${string}` | undefined = undefined,
47
- >(
48
- long: Long,
49
- short?: Short,
50
- ): {
51
- // Using exact `string` would reject schemas with literal encoded types,
52
- // like in case of Schema.BooleanFromString.
53
- schema<A, I extends string = string>(
54
- schema: Schema.Schema<A, I>,
55
- ): OptionBuilderWithSchema<A, Long>
56
-
57
- description(desc: string): {
58
- schema<A, I extends string = string>(
59
- schema: Schema.Schema<A, I>,
60
- ): OptionBuilderWithSchema<A, Long>
61
-
62
- default<A>(value: A): {
63
- schema<A2 extends A, I extends string = string>(
64
- schema: Schema.Schema<A2, I>,
65
- ): OptionBuilderWithSchema<A2, Long>
66
- }
67
- }
68
-
69
- default<A>(value: A): {
70
- schema<A2 extends A, I extends string = string>(
71
- schema: Schema.Schema<A2, I>,
72
- ): OptionBuilderWithSchema<A2, Long>
73
-
74
- description(desc: string): {
75
- schema<A2 extends A, I extends string = string>(
76
- schema: Schema.Schema<A2, I>,
77
- ): OptionBuilderWithSchema<A2, Long>
78
- }
79
- }
80
- } => {
81
- const longName = long
82
- const shortName = short ? short.slice(1) : undefined
83
-
84
- return {
85
- schema: <A, I extends string = string>(schema: Schema.Schema<A, I>) => ({
86
- _tag: "OptionBuilder" as const,
87
- name: longName,
88
- long: longName,
89
- short: shortName,
90
- description: "",
91
- schema,
92
- }),
93
-
94
- description: (desc) => ({
95
- schema: <A, I extends string = string>(schema: Schema.Schema<A, I>) => ({
96
- _tag: "OptionBuilder" as const,
97
- name: longName,
98
- long: longName,
99
- short: shortName,
100
- description: desc,
101
- schema,
102
- }),
103
-
104
- default: <A>(value: A) => ({
105
- schema: <A2 extends A, I extends string = string>(schema: Schema.Schema<A2, I>) => ({
106
- _tag: "OptionBuilder" as const,
107
- name: longName,
108
- long: longName,
109
- short: shortName,
110
- description: desc,
111
- schema,
112
- defaultValue: value as A2,
113
- }),
114
- }),
115
- }),
116
-
117
- default: <A>(value: A) => ({
118
- schema: <A2 extends A, I extends string = string>(schema: Schema.Schema<A2, I>) => ({
119
- _tag: "OptionBuilder" as const,
120
- name: longName,
121
- long: longName,
122
- short: shortName,
123
- description: "",
124
- schema,
125
- defaultValue: value as A2,
126
- }),
127
-
128
- description: (desc) => ({
129
- schema: <A2 extends A, I extends string = string>(schema: Schema.Schema<A2, I>) => ({
130
- _tag: "OptionBuilder" as const,
131
- name: longName,
132
- long: longName,
133
- short: shortName,
134
- description: desc,
135
- schema,
136
- defaultValue: value as A2,
137
- }),
138
- }),
139
- }),
140
- }
141
- }
142
-
143
- export type OptionsMap = Record<string, OptionBuilder<any, any>>
144
-
145
- type ExtractOptionsFromBuilders<Opts extends OptionsMap> = {
146
- [K in keyof Opts as Opts[K] extends OptionBuilder<any, infer Name>
147
- ? OptionNameToCamelCase<Name>
148
- : never]: Opts[K] extends OptionBuilder<infer A, any> ? A : never
149
- }
150
-
151
- export type ExtractOptionValues<Opts extends OptionsMap> = ExtractOptionsFromBuilders<Opts>
152
-
153
- export interface SubcommandDef<Handled extends boolean = boolean> {
154
- readonly _tag: "SubcommandDef"
155
- readonly command: CommanderSet<any, any, Handled>
156
- }
157
-
158
- type Extend<
159
- S,
160
- NewOpts extends OptionsMap,
161
- NewSubs extends ReadonlyArray<SubcommandDef> = [],
162
- Handled extends boolean = false,
163
- > =
164
- S extends CommanderSet<infer Opts, infer Subs, infer _H>
165
- ? CommanderSet<Opts & NewOpts, [...Subs, ...NewSubs], Handled>
166
- : CommanderSet<NewOpts, NewSubs, Handled>
167
-
168
- type CommanderBuilder = {
169
- option: typeof optionMethod
170
- optionHelp: typeof optionHelp
171
- optionVersion: typeof optionVersion
172
- subcommand: typeof subcommand
173
- handle: typeof handle
174
- }
175
-
176
- export type CommanderSet<
177
- Opts extends OptionsMap = {},
178
- Subcommands extends ReadonlyArray<SubcommandDef> = [],
179
- Handled extends boolean = false,
180
- > = Pipeable.Pipeable &
181
- CommanderSet.Instance<Opts, Subcommands, Handled> & {
182
- [TypeId]: typeof TypeId
183
- } & CommanderBuilder
184
-
185
- export namespace CommanderSet {
186
- export type Instance<
187
- Opts extends OptionsMap = {},
188
- Subcommands extends ReadonlyArray<SubcommandDef> = [],
189
- Handled extends boolean = false,
190
- > = {
191
- readonly name: string
192
- readonly description?: string
193
- readonly version?: string
194
- readonly options: Opts
195
- readonly subcommands: Subcommands
196
- readonly handler?: Handled extends true
197
- ? (args: ExtractOptionValues<Opts>) => Effect.Effect<void>
198
- : never
199
- }
200
-
201
- export type Default = CommanderSet<{}, [], false>
202
-
203
- export type Proto = {
204
- [TypeId]: typeof TypeId
205
- pipe(): any
206
- } & CommanderBuilder
207
- }
208
-
209
- const optionMethod = function <S, Opt extends OptionBuilder<any, any>>(
210
- this: S,
211
- opt: Opt,
212
- ): Extend<S, { [K in Opt["name"] as OptionNameToCamelCase<K>]: Opt }> {
213
- const base = (this && typeof this === "object" ? this : {}) as Partial<CommanderSet.Instance>
214
- const baseName = base.name ?? ""
215
- const baseOptions: OptionsMap = base.options ?? {}
216
- const baseSubcommands = base.subcommands ?? []
217
- const baseDescription = base.description
218
- const baseVersion = base.version
219
-
220
- const camelKey = kebabToCamel(stripPrefix(opt.long))
221
-
222
- return makeSet({
223
- name: baseName,
224
- description: baseDescription,
225
- version: baseVersion,
226
- options: { ...baseOptions, [camelKey]: opt },
227
- subcommands: baseSubcommands,
228
- }) as Extend<S, { [K in Opt["name"] as OptionNameToCamelCase<K>]: Opt }>
229
- }
230
-
231
- export const optionHelp = function <S>(
232
- this: S,
233
- ): Extend<S, { help: OptionBuilder<boolean, "--help"> }> {
234
- const base = (this && typeof this === "object" ? this : {}) as Partial<CommanderSet.Instance>
235
- const baseName = base.name ?? ""
236
- const baseOptions: OptionsMap = base.options ?? {}
237
- const baseSubcommands = base.subcommands ?? []
238
- const baseDescription = base.description
239
- const baseVersion = base.version
240
-
241
- const helpOption: OptionBuilder<boolean, "--help"> = {
242
- _tag: "OptionBuilder",
243
- name: "--help",
244
- long: "--help",
245
- short: "h",
246
- description: "Show help information",
247
- defaultValue: false,
248
- }
249
-
250
- return makeSet({
251
- name: baseName,
252
- description: baseDescription,
253
- version: baseVersion,
254
- options: { ...baseOptions, help: helpOption },
255
- subcommands: baseSubcommands,
256
- }) as Extend<S, { help: OptionBuilder<boolean, "--help"> }>
257
- }
258
-
259
- export const optionVersion = function <S>(
260
- this: S,
261
- ): Extend<S, { version: OptionBuilder<boolean, "--version"> }> {
262
- const base = (this && typeof this === "object" ? this : {}) as Partial<CommanderSet.Instance>
263
- const baseName = base.name ?? ""
264
- const baseOptions: OptionsMap = base.options ?? {}
265
- const baseSubcommands = base.subcommands ?? []
266
- const baseDescription = base.description
267
- const baseVersion = base.version
268
-
269
- const versionOption: OptionBuilder<boolean, "--version"> = {
270
- _tag: "OptionBuilder",
271
- name: "--version",
272
- long: "--version",
273
- short: "V",
274
- description: "Show version information",
275
- defaultValue: false,
276
- }
277
-
278
- return makeSet({
279
- name: baseName,
280
- description: baseDescription,
281
- version: baseVersion,
282
- options: { ...baseOptions, version: versionOption },
283
- subcommands: baseSubcommands,
284
- }) as Extend<S, { version: OptionBuilder<boolean, "--version"> }>
285
- }
286
-
287
- export const subcommand = function <
288
- S,
289
- SubOpts extends OptionsMap,
290
- SubSubs extends ReadonlyArray<SubcommandDef>,
291
- SubHandled extends boolean,
292
- >(
293
- this: S,
294
- cmd: CommanderSet<SubOpts, SubSubs, SubHandled>,
295
- ): Extend<S, {}, [SubcommandDef<SubHandled>]> {
296
- const base = (this && typeof this === "object" ? this : {}) as Partial<CommanderSet.Instance>
297
- const baseName = base.name ?? ""
298
- const baseOptions = base.options ?? {}
299
- const baseSubcommands = base.subcommands ?? []
300
- const baseDescription = base.description
301
- const baseVersion = base.version
302
-
303
- const subDef: SubcommandDef<SubHandled> = {
304
- _tag: "SubcommandDef",
305
- command: cmd,
306
- }
307
-
308
- return makeSet({
309
- name: baseName,
310
- description: baseDescription,
311
- version: baseVersion,
312
- options: baseOptions,
313
- subcommands: [...baseSubcommands, subDef],
314
- }) as Extend<S, {}, [SubcommandDef<SubHandled>]>
315
- }
316
-
317
- export const handle = function <Opts extends OptionsMap, Subs extends ReadonlyArray<SubcommandDef>>(
318
- this: CommanderSet<Opts, Subs, false>,
319
- handler: (args: ExtractOptionValues<Opts>) => Effect.Effect<void>,
320
- ): CommanderSet<Opts, Subs, true> {
321
- const base = this as CommanderSet.Instance<Opts, Subs, false>
322
-
323
- return makeSet<Opts, Subs, true>({
324
- name: base.name,
325
- description: base.description,
326
- version: base.version,
327
- options: base.options,
328
- subcommands: base.subcommands,
329
- handler,
330
- })
331
- }
332
-
333
- export const make = <const Name extends string>(config: {
334
- readonly name: Name
335
- readonly description?: string
336
- readonly version?: string
337
- }): CommanderSet<{}, [], false> =>
338
- makeSet({
339
- name: config.name,
340
- description: config.description,
341
- version: config.version,
342
- options: {},
343
- subcommands: [],
344
- })
345
-
346
- const CommanderProto = {
347
- [TypeId]: TypeId,
348
-
349
- option: optionMethod,
350
- optionHelp,
351
- optionVersion,
352
- subcommand,
353
- handle,
354
-
355
- pipe() {
356
- return Pipeable.pipeArguments(this, arguments)
357
- },
358
- } satisfies CommanderSet.Proto
359
-
360
- function makeSet<
361
- Opts extends OptionsMap,
362
- Subs extends ReadonlyArray<SubcommandDef>,
363
- Handled extends boolean = false,
364
- >(config: {
365
- readonly name: string
366
- readonly description?: string
367
- readonly version?: string
368
- readonly options: Opts
369
- readonly subcommands: Subs
370
- readonly handler?: (args: ExtractOptionValues<Opts>) => Effect.Effect<void>
371
- }): CommanderSet<Opts, Subs, Handled> {
372
- return Object.assign(Object.create(CommanderProto), config) as CommanderSet<Opts, Subs, Handled>
373
- }
374
-
375
- export function isCommanderSet(input: unknown): input is CommanderSet<any, any, any> {
376
- return Predicate.hasProperty(input, TypeId)
377
- }
378
-
379
- const kebabToCamel = (str: string): string => {
380
- return str.replace(/-([a-z])/g, (_, letter) => letter.toUpperCase())
381
- }
382
-
383
- const stripPrefix = (str: string): string => {
384
- if (str.startsWith("--")) return str.slice(2)
385
- if (str.startsWith("-")) return str.slice(1)
386
- return str
387
- }
388
-
389
- interface ParsedArgs {
390
- readonly flags: Record<string, boolean>
391
- readonly options: Record<string, string>
392
- readonly positional: ReadonlyArray<string>
393
- }
394
-
395
- const parseRawArgs = (args: ReadonlyArray<string>): Effect.Effect<ParsedArgs, CommanderError> =>
396
- Effect.gen(function* () {
397
- const flags: Record<string, boolean> = {}
398
- const options: Record<string, string> = {}
399
- const positional: Array<string> = []
400
-
401
- let i = 0
402
- while (i < args.length) {
403
- const arg = args[i]!
404
-
405
- if (arg === "--") {
406
- positional.push(...args.slice(i + 1))
407
- break
408
- }
409
-
410
- if (arg.startsWith("--")) {
411
- const equalIndex = arg.indexOf("=")
412
- if (equalIndex !== -1) {
413
- const key = arg.slice(2, equalIndex)
414
- const value = arg.slice(equalIndex + 1)
415
- options[key] = value
416
- } else {
417
- const key = arg.slice(2)
418
- if (i + 1 < args.length && !args[i + 1]!.startsWith("-")) {
419
- options[key] = args[i + 1]!
420
- i++
421
- } else {
422
- flags[key] = true
423
- }
424
- }
425
- } else if (arg.startsWith("-") && arg.length > 1) {
426
- const chars = arg.slice(1)
427
- for (let j = 0; j < chars.length; j++) {
428
- const char = chars[j]!
429
- if (j === chars.length - 1 && i + 1 < args.length && !args[i + 1]!.startsWith("-")) {
430
- options[char] = args[i + 1]!
431
- i++
432
- } else {
433
- flags[char] = true
434
- }
435
- }
436
- } else {
437
- positional.push(arg)
438
- }
439
-
440
- i++
441
- }
442
-
443
- return { flags, options, positional }
444
- })
445
-
446
- export const parse = <
447
- Opts extends OptionsMap,
448
- Subs extends ReadonlyArray<SubcommandDef>,
449
- Handled extends boolean,
450
- >(
451
- cmd: CommanderSet<Opts, Subs, Handled>,
452
- args: ReadonlyArray<string>,
453
- ): Effect.Effect<ExtractOptionValues<Opts>, CommanderError> =>
454
- Effect.gen(function* () {
455
- const parsed = yield* parseRawArgs(args)
456
-
457
- const result: Record<string, any> = {}
458
-
459
- for (const optBuilder of Object.values(cmd.options)) {
460
- const longName = stripPrefix(optBuilder.long)
461
- const shortName = optBuilder.short
462
-
463
- const longMatch = parsed.options[longName] || parsed.flags[longName]
464
- const shortMatch = shortName
465
- ? parsed.options[shortName] || parsed.flags[shortName]
466
- : undefined
467
-
468
- const rawValue = longMatch ?? shortMatch
469
-
470
- const camelKey = kebabToCamel(stripPrefix(optBuilder.long))
471
-
472
- if (rawValue !== undefined) {
473
- if (typeof rawValue === "boolean") {
474
- result[camelKey] = rawValue
475
- } else if (optBuilder.schema) {
476
- const decoded = yield* Schema.decode(optBuilder.schema)(rawValue).pipe(
477
- Effect.mapError(
478
- (error) =>
479
- new CommanderError({
480
- message: `Invalid value for option ${optBuilder.long}: ${error.message}`,
481
- cause: error,
482
- }),
483
- ),
484
- )
485
- result[camelKey] = decoded
486
- } else {
487
- result[camelKey] = rawValue
488
- }
489
- } else if (optBuilder.defaultValue !== undefined) {
490
- result[camelKey] = optBuilder.defaultValue
491
- }
492
- }
493
-
494
- return result as ExtractOptionValues<Opts>
495
- })
496
-
497
- export const runMain = <Opts extends OptionsMap, Subs extends ReadonlyArray<SubcommandDef>>(
498
- cmd: CommanderSet<Opts, Subs, true>,
499
- ): Effect.Effect<void, CommanderError> =>
500
- Effect.gen(function* () {
501
- const args = typeof process !== "undefined" ? process.argv.slice(2) : []
502
-
503
- const parsedOptions = yield* parse(cmd, args)
504
-
505
- if (Predicate.hasProperty(parsedOptions, "help") && parsedOptions.help) {
506
- console.log(generateHelp(cmd))
507
- return
508
- }
509
-
510
- if (Predicate.hasProperty(parsedOptions, "version") && parsedOptions.version && cmd.version) {
511
- console.log(`${cmd.name} v${cmd.version}`)
512
- return
513
- }
514
-
515
- if (cmd.handler) {
516
- yield* cmd.handler(parsedOptions)
517
- }
518
- })
519
-
520
- const generateHelp = <
521
- Opts extends OptionsMap,
522
- Subs extends ReadonlyArray<SubcommandDef>,
523
- Handled extends boolean,
524
- >(
525
- cmd: CommanderSet<Opts, Subs, Handled>,
526
- ): string => {
527
- const lines: Array<string> = []
528
-
529
- if (cmd.description) {
530
- lines.push(cmd.description)
531
- lines.push("")
532
- }
533
-
534
- lines.push(`Usage: ${cmd.name} [options]`)
535
- lines.push("")
536
-
537
- const optionsArray = Object.values(cmd.options)
538
- if (optionsArray.length > 0) {
539
- lines.push("Options:")
540
-
541
- for (const opt of optionsArray) {
542
- const short = opt.short ? `-${opt.short}, ` : " "
543
- const long = opt.long
544
- const hasValue = opt.schema !== undefined
545
- const name = hasValue ? `${long} <value>` : long
546
- lines.push(` ${short}${name.padEnd(20)} ${opt.description}`)
547
- }
548
-
549
- lines.push("")
550
- }
551
-
552
- if (cmd.subcommands.length > 0) {
553
- lines.push("Commands:")
554
- for (const sub of cmd.subcommands) {
555
- const subCmd = sub.command
556
- lines.push(` ${subCmd.name.padEnd(20)} ${subCmd.description || ""}`)
557
- }
558
- lines.push("")
559
- }
560
-
561
- return lines.join("\n")
562
- }
563
-
564
- export const help = <
565
- Opts extends OptionsMap,
566
- Subs extends ReadonlyArray<SubcommandDef>,
567
- Handled extends boolean,
568
- >(
569
- cmd: CommanderSet<Opts, Subs, Handled>,
570
- ): string => generateHelp(cmd)
571
-
572
- export const NumberFromString = Schema.NumberFromString
573
-
574
- export const choice = <const Choices extends ReadonlyArray<string>>(
575
- choices: Choices,
576
- ): Schema.Schema<Choices[number], string> => Schema.Literal(...choices)
577
-
578
- export const repeatable = <A>(
579
- schema: Schema.Schema<A, string>,
580
- ): Schema.Schema<ReadonlyArray<A>, string> =>
581
- Schema.transform(Schema.String, Schema.Array(Schema.String), {
582
- strict: true,
583
- decode: (s) => s.split(",").map((part) => part.trim()),
584
- encode: (arr) => arr.join(","),
585
- }).pipe(Schema.compose(Schema.Array(schema)))
@@ -1,115 +0,0 @@
1
- import * as Either from "effect/Either"
2
- import type * as PathPattern from "./PathPattern.ts"
3
-
4
- export type FilePathPattern = string
5
-
6
- export type Segment =
7
- | { _tag: "GroupSegment"; name: string }
8
- | { _tag: "RestSegment"; name: string }
9
- | { _tag: "ParamSegment"; name: string }
10
- | { _tag: "LiteralSegment"; value: string }
11
- | { _tag: "InvalidSegment"; value: string }
12
-
13
- export function segments(pattern: string): Array<Segment> {
14
- const parts = pattern.split("/").filter(Boolean)
15
- const result: Array<Segment> = []
16
-
17
- for (const part of parts) {
18
- if (/^\(\w+\)$/.test(part)) {
19
- result.push({ _tag: "GroupSegment", name: part.slice(1, -1) })
20
- } else if (part.startsWith("[[") && part.endsWith("]]")) {
21
- result.push({ _tag: "RestSegment", name: part.slice(2, -2) })
22
- } else if (part.startsWith("[") && part.endsWith("]")) {
23
- result.push({ _tag: "ParamSegment", name: part.slice(1, -1) })
24
- } else if (/^[\p{L}\p{N}._~-]+$/u.test(part)) {
25
- result.push({ _tag: "LiteralSegment", value: part })
26
- } else {
27
- result.push({ _tag: "InvalidSegment", value: part })
28
- }
29
- }
30
-
31
- return result
32
- }
33
-
34
- export type ValidationError = {
35
- _tag: "FilePathPatternError"
36
- pattern: string
37
- message: string
38
- }
39
-
40
- export type ValidationResult = Either.Either<Array<Segment>, ValidationError>
41
-
42
- export function validate(pattern: string): ValidationResult {
43
- const segs = segments(pattern)
44
-
45
- const invalid = segs.find((s) => s._tag === "InvalidSegment")
46
- if (invalid) {
47
- return Either.left({
48
- _tag: "FilePathPatternError",
49
- pattern,
50
- message: `Invalid segment: "${invalid.value}"`,
51
- })
52
- }
53
-
54
- const restIndex = segs.findIndex((s) => s._tag === "RestSegment")
55
- if (restIndex !== -1 && restIndex !== segs.length - 1) {
56
- return Either.left({
57
- _tag: "FilePathPatternError",
58
- pattern,
59
- message: "Rest segment must be the last segment",
60
- })
61
- }
62
-
63
- return Either.right(segs)
64
- }
65
-
66
- export function format(segs: Array<Segment>): `/${string}` {
67
- const parts = segs.map((seg) => {
68
- switch (seg._tag) {
69
- case "GroupSegment":
70
- return `(${seg.name})`
71
- case "RestSegment":
72
- return `[[${seg.name}]]`
73
- case "ParamSegment":
74
- return `[${seg.name}]`
75
- case "LiteralSegment":
76
- return seg.value
77
- case "InvalidSegment":
78
- return seg.value
79
- }
80
- })
81
- const joined = parts.join("/")
82
- return (joined ? `/${joined}` : "/") as `/${string}`
83
- }
84
-
85
- export function toPathPattern(
86
- pattern: string,
87
- ): Either.Either<PathPattern.PathPattern, ValidationError> {
88
- const result = validate(pattern)
89
-
90
- if (Either.isLeft(result)) {
91
- return Either.left(result.left)
92
- }
93
-
94
- const segs = result.right
95
- const pathParts: Array<string> = []
96
-
97
- for (const seg of segs) {
98
- switch (seg._tag) {
99
- case "GroupSegment":
100
- continue
101
- case "RestSegment":
102
- pathParts.push(`:${seg.name}*`)
103
- break
104
- case "ParamSegment":
105
- pathParts.push(`:${seg.name}`)
106
- break
107
- case "LiteralSegment":
108
- pathParts.push(seg.value)
109
- break
110
- }
111
- }
112
-
113
- const joined = pathParts.join("/")
114
- return Either.right((joined ? `/${joined}` : "/") as PathPattern.PathPattern)
115
- }