effect-start 0.23.1 → 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 (355) 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 +21 -24
  123. package/src/StartApp.ts +1 -1
  124. package/src/bun/BunServer.ts +42 -10
  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/dist/BlobStore.d.ts +0 -80
  132. package/dist/BlobStore.js +0 -19
  133. package/dist/ChildProcess.d.ts +0 -60
  134. package/dist/Commander.d.ts +0 -100
  135. package/dist/ContentNegotiation.d.ts +0 -12
  136. package/dist/Cookies.d.ts +0 -47
  137. package/dist/Development.d.ts +0 -39
  138. package/dist/Effectify.d.ts +0 -209
  139. package/dist/Entity.d.ts +0 -47
  140. package/dist/FilePathPattern.d.ts +0 -29
  141. package/dist/FileRouter.d.ts +0 -56
  142. package/dist/FileRouterCodegen.d.ts +0 -18
  143. package/dist/FileRouterPattern.d.ts +0 -9
  144. package/dist/FileRouterPattern.js +0 -35
  145. package/dist/FileSystem.d.ts +0 -158
  146. package/dist/Http.d.ts +0 -37
  147. package/dist/HttpAppExtra.d.ts +0 -7
  148. package/dist/HttpAppExtra.js +0 -320
  149. package/dist/HttpUtils.d.ts +0 -3
  150. package/dist/HttpUtils.js +0 -11
  151. package/dist/PathPattern.d.ts +0 -134
  152. package/dist/PlatformError.d.ts +0 -38
  153. package/dist/PlatformRuntime.d.ts +0 -27
  154. package/dist/Route.d.ts +0 -97
  155. package/dist/RouteBody.d.ts +0 -47
  156. package/dist/RouteError.d.ts +0 -98
  157. package/dist/RouteHook.d.ts +0 -12
  158. package/dist/RouteHttp.d.ts +0 -21
  159. package/dist/RouteHttpTracer.d.ts +0 -10
  160. package/dist/RouteMount.d.ts +0 -86
  161. package/dist/RouteSchema.d.ts +0 -86
  162. package/dist/RouteSse.d.ts +0 -21
  163. package/dist/RouteTree.d.ts +0 -57
  164. package/dist/RouteTrie.d.ts +0 -20
  165. package/dist/RouterPattern.d.ts +0 -118
  166. package/dist/RouterPattern.js +0 -269
  167. package/dist/SchemaExtra.d.ts +0 -7
  168. package/dist/Socket.d.ts +0 -27
  169. package/dist/Sql.d.ts +0 -34
  170. package/dist/Sql.js +0 -5
  171. package/dist/SqlIntrospect.d.ts +0 -91
  172. package/dist/Start.d.ts +0 -44
  173. package/dist/StartApp.d.ts +0 -19
  174. package/dist/StreamExtra.d.ts +0 -28
  175. package/dist/System.d.ts +0 -7
  176. package/dist/TuplePathPattern.d.ts +0 -9
  177. package/dist/Unique.d.ts +0 -50
  178. package/dist/Values.d.ts +0 -27
  179. package/dist/bun/BunBlobStoreDisk.d.ts +0 -6
  180. package/dist/bun/BunBlobStoreDisk.js +0 -116
  181. package/dist/bun/BunBlobStoreS3.d.ts +0 -11
  182. package/dist/bun/BunBlobStoreS3.js +0 -89
  183. package/dist/bun/BunBlobWatcherDisk.d.ts +0 -6
  184. package/dist/bun/BunBlobWatcherDisk.js +0 -60
  185. package/dist/bun/BunBlobWatcherQueue.d.ts +0 -6
  186. package/dist/bun/BunBlobWatcherQueue.js +0 -17
  187. package/dist/bun/BunBundle.d.ts +0 -11
  188. package/dist/bun/BunChildProcessSpawner.d.ts +0 -3
  189. package/dist/bun/BunHttpServer.d.ts +0 -44
  190. package/dist/bun/BunHttpServer.js +0 -186
  191. package/dist/bun/BunHttpServer_web.d.ts +0 -60
  192. package/dist/bun/BunHttpServer_web.js +0 -252
  193. package/dist/bun/BunImportTrackerPlugin.d.ts +0 -13
  194. package/dist/bun/BunPlatformHttpServer.d.ts +0 -10
  195. package/dist/bun/BunPlatformHttpServer.js +0 -53
  196. package/dist/bun/BunRoute.d.ts +0 -48
  197. package/dist/bun/BunRuntime.d.ts +0 -2
  198. package/dist/bun/BunServer.d.ts +0 -40
  199. package/dist/bun/BunServerRequest.d.ts +0 -60
  200. package/dist/bun/BunServerRequest.js +0 -252
  201. package/dist/bun/BunSql.d.ts +0 -4
  202. package/dist/bun/BunSql.js +0 -81
  203. package/dist/bun/BunVirtualFilesPlugin.d.ts +0 -4
  204. package/dist/bun/_BunEnhancedResolve.d.ts +0 -45
  205. package/dist/bun/index.d.ts +0 -5
  206. package/dist/bundler/Bundle.d.ts +0 -61
  207. package/dist/bundler/BundleFiles.d.ts +0 -13
  208. package/dist/bundler/BundleHttp.d.ts +0 -45
  209. package/dist/bundler/BundleHttp.js +0 -176
  210. package/dist/bundler/BundleRoute.d.ts +0 -27
  211. package/dist/client/Overlay.d.ts +0 -2
  212. package/dist/client/ScrollState.d.ts +0 -6
  213. package/dist/client/index.d.ts +0 -6
  214. package/dist/console/Console.d.ts +0 -6
  215. package/dist/console/ConsoleErrors.d.ts +0 -3
  216. package/dist/console/ConsoleLogger.d.ts +0 -3
  217. package/dist/console/ConsoleMetrics.d.ts +0 -3
  218. package/dist/console/ConsoleProcess.d.ts +0 -3
  219. package/dist/console/ConsoleStore.d.ts +0 -144
  220. package/dist/console/ConsoleTracer.d.ts +0 -3
  221. package/dist/console/Simulation.d.ts +0 -2
  222. package/dist/console/index.d.ts +0 -3
  223. package/dist/console/routes/errors/route.d.ts +0 -10
  224. package/dist/console/routes/errors/route.js +0 -47
  225. package/dist/console/routes/fiberDetail.d.ts +0 -16
  226. package/dist/console/routes/fiberDetail.js +0 -38
  227. package/dist/console/routes/fibers/route.d.ts +0 -10
  228. package/dist/console/routes/fibers/route.js +0 -19
  229. package/dist/console/routes/git/route.d.ts +0 -11
  230. package/dist/console/routes/git/route.js +0 -33
  231. package/dist/console/routes/layout.d.ts +0 -9
  232. package/dist/console/routes/layout.js +0 -3
  233. package/dist/console/routes/logs/route.d.ts +0 -10
  234. package/dist/console/routes/logs/route.js +0 -32
  235. package/dist/console/routes/metrics/route.d.ts +0 -10
  236. package/dist/console/routes/metrics/route.js +0 -17
  237. package/dist/console/routes/route.d.ts +0 -6
  238. package/dist/console/routes/route.js +0 -5
  239. package/dist/console/routes/routes/route.d.ts +0 -6
  240. package/dist/console/routes/routes/route.js +0 -20
  241. package/dist/console/routes/services/route.d.ts +0 -6
  242. package/dist/console/routes/services/route.js +0 -12
  243. package/dist/console/routes/system/route.d.ts +0 -10
  244. package/dist/console/routes/system/route.js +0 -18
  245. package/dist/console/routes/traceDetail.d.ts +0 -16
  246. package/dist/console/routes/traceDetail.js +0 -14
  247. package/dist/console/routes/traces/route.d.ts +0 -10
  248. package/dist/console/routes/traces/route.js +0 -39
  249. package/dist/console/routes/tree.d.ts +0 -153
  250. package/dist/console/ui/Errors.d.ts +0 -4
  251. package/dist/console/ui/Errors.js +0 -15
  252. package/dist/console/ui/Fibers.d.ts +0 -24
  253. package/dist/console/ui/Fibers.js +0 -121
  254. package/dist/console/ui/Git.d.ts +0 -20
  255. package/dist/console/ui/Git.js +0 -95
  256. package/dist/console/ui/Logs.d.ts +0 -4
  257. package/dist/console/ui/Logs.js +0 -25
  258. package/dist/console/ui/Metrics.d.ts +0 -4
  259. package/dist/console/ui/Metrics.js +0 -26
  260. package/dist/console/ui/Routes.d.ts +0 -8
  261. package/dist/console/ui/Routes.js +0 -70
  262. package/dist/console/ui/Services.d.ts +0 -10
  263. package/dist/console/ui/Services.js +0 -246
  264. package/dist/console/ui/Shell.d.ts +0 -10
  265. package/dist/console/ui/Shell.js +0 -7
  266. package/dist/console/ui/System.d.ts +0 -4
  267. package/dist/console/ui/System.js +0 -35
  268. package/dist/console/ui/Traces.d.ts +0 -12
  269. package/dist/console/ui/Traces.js +0 -179
  270. package/dist/datastar/actions/fetch.d.ts +0 -30
  271. package/dist/datastar/actions/peek.d.ts +0 -1
  272. package/dist/datastar/actions/setAll.d.ts +0 -1
  273. package/dist/datastar/actions/toggleAll.d.ts +0 -1
  274. package/dist/datastar/attributes/attr.d.ts +0 -1
  275. package/dist/datastar/attributes/bind.d.ts +0 -1
  276. package/dist/datastar/attributes/class.d.ts +0 -1
  277. package/dist/datastar/attributes/computed.d.ts +0 -1
  278. package/dist/datastar/attributes/effect.d.ts +0 -1
  279. package/dist/datastar/attributes/indicator.d.ts +0 -1
  280. package/dist/datastar/attributes/init.d.ts +0 -1
  281. package/dist/datastar/attributes/jsonSignals.d.ts +0 -1
  282. package/dist/datastar/attributes/on.d.ts +0 -1
  283. package/dist/datastar/attributes/onIntersect.d.ts +0 -1
  284. package/dist/datastar/attributes/onInterval.d.ts +0 -1
  285. package/dist/datastar/attributes/onSignalPatch.d.ts +0 -1
  286. package/dist/datastar/attributes/ref.d.ts +0 -1
  287. package/dist/datastar/attributes/show.d.ts +0 -1
  288. package/dist/datastar/attributes/signals.d.ts +0 -1
  289. package/dist/datastar/attributes/style.d.ts +0 -1
  290. package/dist/datastar/attributes/text.d.ts +0 -1
  291. package/dist/datastar/engine.d.ts +0 -162
  292. package/dist/datastar/happydom.d.ts +0 -1
  293. package/dist/datastar/happydom.js +0 -8
  294. package/dist/datastar/index.d.ts +0 -24
  295. package/dist/datastar/load.d.ts +0 -24
  296. package/dist/datastar/load.js +0 -24
  297. package/dist/datastar/utils.d.ts +0 -51
  298. package/dist/datastar/watchers/patchElements.d.ts +0 -1
  299. package/dist/datastar/watchers/patchSignals.d.ts +0 -1
  300. package/dist/experimental/EncryptedCookies.d.ts +0 -48
  301. package/dist/experimental/SseHttpResponse.d.ts +0 -7
  302. package/dist/experimental/SseHttpResponse.js +0 -28
  303. package/dist/experimental/index.d.ts +0 -1
  304. package/dist/hyper/Hyper.d.ts +0 -25
  305. package/dist/hyper/HyperHtml.d.ts +0 -23
  306. package/dist/hyper/HyperHtml.test.d.ts +0 -1
  307. package/dist/hyper/HyperHtml.test.js +0 -197
  308. package/dist/hyper/HyperNode.d.ts +0 -14
  309. package/dist/hyper/HyperRoute.d.ts +0 -8
  310. package/dist/hyper/HyperRoute.test.d.ts +0 -1
  311. package/dist/hyper/HyperRoute.test.js +0 -83
  312. package/dist/hyper/html.d.ts +0 -11
  313. package/dist/hyper/index.d.ts +0 -6
  314. package/dist/hyper/jsx-runtime.d.ts +0 -7
  315. package/dist/index.d.ts +0 -8
  316. package/dist/inference_check.d.ts +0 -1
  317. package/dist/inference_check.js +0 -15
  318. package/dist/lint/plugin.d.ts +0 -86
  319. package/dist/lint/plugin.js +0 -341
  320. package/dist/middlewares/BasicAuthMiddleware.d.ts +0 -8
  321. package/dist/middlewares/BasicAuthMiddleware.js +0 -22
  322. package/dist/middlewares/index.d.ts +0 -1
  323. package/dist/middlewares/index.js +0 -1
  324. package/dist/node/Effectify.d.ts +0 -209
  325. package/dist/node/Effectify.js +0 -19
  326. package/dist/node/FileSystem.d.ts +0 -7
  327. package/dist/node/FileSystem.js +0 -420
  328. package/dist/node/NodeFileSystem.d.ts +0 -7
  329. package/dist/node/NodeUtils.d.ts +0 -2
  330. package/dist/node/PlatformError.d.ts +0 -46
  331. package/dist/node/PlatformError.js +0 -43
  332. package/dist/node/Utils.d.ts +0 -1
  333. package/dist/node/Utils.js +0 -19
  334. package/dist/repro_fail.d.ts +0 -1
  335. package/dist/repro_fail.js +0 -14
  336. package/dist/sql/bun/index.d.ts +0 -3
  337. package/dist/sql/mssql/docker.d.ts +0 -2
  338. package/dist/sql/mssql/index.d.ts +0 -21
  339. package/dist/testing/TestHttpClient.d.ts +0 -13
  340. package/dist/testing/TestHttpClient.js +0 -68
  341. package/dist/testing/TestLogger.d.ts +0 -13
  342. package/dist/testing/index.d.ts +0 -2
  343. package/dist/testing/utils.d.ts +0 -9
  344. package/dist/x/cloudflare/CloudflareTunnel.d.ts +0 -10
  345. package/dist/x/cloudflare/index.d.ts +0 -1
  346. package/dist/x/datastar/Datastar.d.ts +0 -6
  347. package/dist/x/datastar/Datastar.js +0 -47
  348. package/dist/x/datastar/index.d.ts +0 -1
  349. package/dist/x/datastar/index.js +0 -1
  350. package/dist/x/tailscale/TailscaleTunnel.d.ts +0 -15
  351. package/dist/x/tailscale/index.d.ts +0 -1
  352. package/dist/x/tailwind/TailwindPlugin.d.ts +0 -23
  353. package/dist/x/tailwind/compile.d.ts +0 -19
  354. package/dist/x/tailwind/plugin.d.ts +0 -2
  355. /package/src/{Sql.ts → sql/Sql.ts} +0 -0
package/dist/Commander.js CHANGED
@@ -1,326 +1,410 @@
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
- export class CommanderError extends Data.TaggedError("CommanderError") {
7
- }
8
- const TypeId = Symbol.for("effect-start/Commander");
9
- export const option = (long, short) => {
10
- const longName = long;
11
- const shortName = short ? short.slice(1) : undefined;
12
- return {
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
+
9
+ const TypeId = Symbol.for("effect-start/Commander")
10
+
11
+ export const option = (
12
+ long,
13
+ short,
14
+ ) => {
15
+ const longName = long
16
+ const shortName = short ? short.slice(1) : undefined
17
+
18
+ return {
19
+ schema: (schema) => ({
20
+ _tag: /** @type {const} */ "OptionBuilder",
21
+ name: longName,
22
+ long: longName,
23
+ short: shortName,
24
+ description: "",
25
+ schema,
26
+ }),
27
+
28
+ description: (desc) => ({
29
+ schema: (schema) => ({
30
+ _tag: /** @type {const} */ "OptionBuilder",
31
+ name: longName,
32
+ long: longName,
33
+ short: shortName,
34
+ description: desc,
35
+ schema,
36
+ }),
37
+
38
+ default: (value) => ({
13
39
  schema: (schema) => ({
14
- _tag: "OptionBuilder",
15
- name: longName,
16
- long: longName,
17
- short: shortName,
18
- description: "",
19
- schema,
20
- }),
21
- description: (desc) => ({
22
- schema: (schema) => ({
23
- _tag: "OptionBuilder",
24
- name: longName,
25
- long: longName,
26
- short: shortName,
27
- description: desc,
28
- schema,
29
- }),
30
- default: (value) => ({
31
- schema: (schema) => ({
32
- _tag: "OptionBuilder",
33
- name: longName,
34
- long: longName,
35
- short: shortName,
36
- description: desc,
37
- schema,
38
- defaultValue: value,
39
- }),
40
- }),
40
+ _tag: /** @type {const} */ "OptionBuilder",
41
+ name: longName,
42
+ long: longName,
43
+ short: shortName,
44
+ description: desc,
45
+ schema,
46
+ defaultValue: value,
41
47
  }),
42
- default: (value) => ({
43
- schema: (schema) => ({
44
- _tag: "OptionBuilder",
45
- name: longName,
46
- long: longName,
47
- short: shortName,
48
- description: "",
49
- schema,
50
- defaultValue: value,
51
- }),
52
- description: (desc) => ({
53
- schema: (schema) => ({
54
- _tag: "OptionBuilder",
55
- name: longName,
56
- long: longName,
57
- short: shortName,
58
- description: desc,
59
- schema,
60
- defaultValue: value,
61
- }),
62
- }),
48
+ }),
49
+ }),
50
+
51
+ default: (value) => ({
52
+ schema: (schema) => ({
53
+ _tag: /** @type {const} */ "OptionBuilder",
54
+ name: longName,
55
+ long: longName,
56
+ short: shortName,
57
+ description: "",
58
+ schema,
59
+ defaultValue: value,
60
+ }),
61
+
62
+ description: (desc) => ({
63
+ schema: (schema) => ({
64
+ _tag: /** @type {const} */ "OptionBuilder",
65
+ name: longName,
66
+ long: longName,
67
+ short: shortName,
68
+ description: desc,
69
+ schema,
70
+ defaultValue: value,
63
71
  }),
64
- };
65
- };
66
- const optionMethod = function (opt) {
67
- const base = (this && typeof this === "object" ? this : {});
68
- const baseName = base.name ?? "";
69
- const baseOptions = base.options ?? {};
70
- const baseSubcommands = base.subcommands ?? [];
71
- const baseDescription = base.description;
72
- const baseVersion = base.version;
73
- const camelKey = kebabToCamel(stripPrefix(opt.long));
74
- return makeSet({
75
- name: baseName,
76
- description: baseDescription,
77
- version: baseVersion,
78
- options: { ...baseOptions, [camelKey]: opt },
79
- subcommands: baseSubcommands,
80
- });
81
- };
82
- export const optionHelp = function () {
83
- const base = (this && typeof this === "object" ? this : {});
84
- const baseName = base.name ?? "";
85
- const baseOptions = base.options ?? {};
86
- const baseSubcommands = base.subcommands ?? [];
87
- const baseDescription = base.description;
88
- const baseVersion = base.version;
89
- const helpOption = {
90
- _tag: "OptionBuilder",
91
- name: "--help",
92
- long: "--help",
93
- short: "h",
94
- description: "Show help information",
95
- defaultValue: false,
96
- };
97
- return makeSet({
98
- name: baseName,
99
- description: baseDescription,
100
- version: baseVersion,
101
- options: { ...baseOptions, help: helpOption },
102
- subcommands: baseSubcommands,
103
- });
104
- };
105
- export const optionVersion = function () {
106
- const base = (this && typeof this === "object" ? this : {});
107
- const baseName = base.name ?? "";
108
- const baseOptions = base.options ?? {};
109
- const baseSubcommands = base.subcommands ?? [];
110
- const baseDescription = base.description;
111
- const baseVersion = base.version;
112
- const versionOption = {
113
- _tag: "OptionBuilder",
114
- name: "--version",
115
- long: "--version",
116
- short: "V",
117
- description: "Show version information",
118
- defaultValue: false,
119
- };
120
- return makeSet({
121
- name: baseName,
122
- description: baseDescription,
123
- version: baseVersion,
124
- options: { ...baseOptions, version: versionOption },
125
- subcommands: baseSubcommands,
126
- });
127
- };
128
- export const subcommand = function (cmd) {
129
- const base = (this && typeof this === "object" ? this : {});
130
- const baseName = base.name ?? "";
131
- const baseOptions = base.options ?? {};
132
- const baseSubcommands = base.subcommands ?? [];
133
- const baseDescription = base.description;
134
- const baseVersion = base.version;
135
- const subDef = {
136
- _tag: "SubcommandDef",
137
- command: cmd,
138
- };
139
- return makeSet({
140
- name: baseName,
141
- description: baseDescription,
142
- version: baseVersion,
143
- options: baseOptions,
144
- subcommands: [...baseSubcommands, subDef],
145
- });
146
- };
147
- export const handle = function (handler) {
148
- const base = this;
149
- return makeSet({
150
- name: base.name,
151
- description: base.description,
152
- version: base.version,
153
- options: base.options,
154
- subcommands: base.subcommands,
155
- handler,
156
- });
157
- };
158
- export const make = (config) => makeSet({
72
+ }),
73
+ }),
74
+ }
75
+ }
76
+
77
+ const optionMethod = function (
78
+ opt,
79
+ ) {
80
+ const base = (this && typeof this === "object" ? this : {})
81
+ const baseName = base.name ?? ""
82
+ const baseOptions = base.options ?? {}
83
+ const baseSubcommands = base.subcommands ?? []
84
+ const baseDescription = base.description
85
+ const baseVersion = base.version
86
+
87
+ const camelKey = kebabToCamel(stripPrefix(opt.long))
88
+
89
+ return makeSet({
90
+ name: baseName,
91
+ description: baseDescription,
92
+ version: baseVersion,
93
+ options: { ...baseOptions, [camelKey]: opt },
94
+ subcommands: baseSubcommands,
95
+ })
96
+ }
97
+
98
+ export const optionHelp = function (
99
+ ) {
100
+ const base = (this && typeof this === "object" ? this : {})
101
+ const baseName = base.name ?? ""
102
+ const baseOptions = base.options ?? {}
103
+ const baseSubcommands = base.subcommands ?? []
104
+ const baseDescription = base.description
105
+ const baseVersion = base.version
106
+
107
+ const helpOption = {
108
+ _tag: "OptionBuilder",
109
+ name: "--help",
110
+ long: "--help",
111
+ short: "h",
112
+ description: "Show help information",
113
+ defaultValue: false,
114
+ }
115
+
116
+ return makeSet({
117
+ name: baseName,
118
+ description: baseDescription,
119
+ version: baseVersion,
120
+ options: { ...baseOptions, help: helpOption },
121
+ subcommands: baseSubcommands,
122
+ })
123
+ }
124
+
125
+ export const optionVersion = function (
126
+ ) {
127
+ const base = (this && typeof this === "object" ? this : {})
128
+ const baseName = base.name ?? ""
129
+ const baseOptions = base.options ?? {}
130
+ const baseSubcommands = base.subcommands ?? []
131
+ const baseDescription = base.description
132
+ const baseVersion = base.version
133
+
134
+ const versionOption = {
135
+ _tag: "OptionBuilder",
136
+ name: "--version",
137
+ long: "--version",
138
+ short: "V",
139
+ description: "Show version information",
140
+ defaultValue: false,
141
+ }
142
+
143
+ return makeSet({
144
+ name: baseName,
145
+ description: baseDescription,
146
+ version: baseVersion,
147
+ options: { ...baseOptions, version: versionOption },
148
+ subcommands: baseSubcommands,
149
+ })
150
+ }
151
+
152
+ export const subcommand = function (
153
+ cmd,
154
+ ) {
155
+ const base = (this && typeof this === "object" ? this : {})
156
+ const baseName = base.name ?? ""
157
+ const baseOptions = base.options ?? {}
158
+ const baseSubcommands = base.subcommands ?? []
159
+ const baseDescription = base.description
160
+ const baseVersion = base.version
161
+
162
+ const subDef = {
163
+ _tag: "SubcommandDef",
164
+ command: cmd,
165
+ }
166
+
167
+ return makeSet({
168
+ name: baseName,
169
+ description: baseDescription,
170
+ version: baseVersion,
171
+ options: baseOptions,
172
+ subcommands: [...baseSubcommands, subDef],
173
+ })
174
+ }
175
+
176
+ export const handle = function (
177
+ handler,
178
+ ) {
179
+ const base = this
180
+
181
+ return makeSet({
182
+ name: base.name,
183
+ description: base.description,
184
+ version: base.version,
185
+ options: base.options,
186
+ subcommands: base.subcommands,
187
+ handler,
188
+ })
189
+ }
190
+
191
+ export const make = (config) =>
192
+ makeSet({
159
193
  name: config.name,
160
194
  description: config.description,
161
195
  version: config.version,
162
196
  options: {},
163
197
  subcommands: [],
164
- });
198
+ })
199
+
165
200
  const CommanderProto = {
166
- [TypeId]: TypeId,
167
- option: optionMethod,
168
- optionHelp,
169
- optionVersion,
170
- subcommand,
171
- handle,
172
- pipe() {
173
- return Pipeable.pipeArguments(this, arguments);
174
- },
175
- };
201
+ [TypeId]: TypeId,
202
+
203
+ option: optionMethod,
204
+ optionHelp,
205
+ optionVersion,
206
+ subcommand,
207
+ handle,
208
+
209
+ pipe() {
210
+ return Pipeable.pipeArguments(this, arguments)
211
+ },
212
+ }
213
+
176
214
  function makeSet(config) {
177
- return Object.assign(Object.create(CommanderProto), config);
215
+ return Object.assign(Object.create(CommanderProto), config)
178
216
  }
217
+
179
218
  export function isCommanderSet(input) {
180
- return Predicate.hasProperty(input, TypeId);
219
+ return Predicate.hasProperty(input, TypeId)
181
220
  }
221
+
182
222
  const kebabToCamel = (str) => {
183
- return str.replace(/-([a-z])/g, (_, letter) => letter.toUpperCase());
184
- };
223
+ return str.replace(/-([a-z])/g, (_, letter) => letter.toUpperCase())
224
+ }
225
+
185
226
  const stripPrefix = (str) => {
186
- if (str.startsWith("--"))
187
- return str.slice(2);
188
- if (str.startsWith("-"))
189
- return str.slice(1);
190
- return str;
191
- };
192
- const parseRawArgs = (args) => Effect.gen(function* () {
193
- const flags = {};
194
- const options = {};
195
- const positional = [];
196
- let i = 0;
227
+ if (str.startsWith("--")) return str.slice(2)
228
+ if (str.startsWith("-")) return str.slice(1)
229
+ return str
230
+ }
231
+
232
+ const parseRawArgs = (args) =>
233
+ Effect.gen(function* () {
234
+ const flags = {}
235
+ const options = {}
236
+ const positional = []
237
+
238
+ let i = 0
197
239
  while (i < args.length) {
198
- const arg = args[i];
199
- if (arg === "--") {
200
- positional.push(...args.slice(i + 1));
201
- break;
240
+ const arg = args[i]
241
+
242
+ if (arg === "--") {
243
+ positional.push(...args.slice(i + 1))
244
+ break
245
+ }
246
+
247
+ if (arg.startsWith("--")) {
248
+ const equalIndex = arg.indexOf("=")
249
+ if (equalIndex !== -1) {
250
+ const key = arg.slice(2, equalIndex)
251
+ const value = arg.slice(equalIndex + 1)
252
+ options[key] = value
253
+ } else {
254
+ const key = arg.slice(2)
255
+ if (i + 1 < args.length && !args[i + 1].startsWith("-")) {
256
+ options[key] = args[i + 1]
257
+ i++
258
+ } else {
259
+ flags[key] = true
260
+ }
202
261
  }
203
- if (arg.startsWith("--")) {
204
- const equalIndex = arg.indexOf("=");
205
- if (equalIndex !== -1) {
206
- const key = arg.slice(2, equalIndex);
207
- const value = arg.slice(equalIndex + 1);
208
- options[key] = value;
209
- }
210
- else {
211
- const key = arg.slice(2);
212
- if (i + 1 < args.length && !args[i + 1].startsWith("-")) {
213
- options[key] = args[i + 1];
214
- i++;
215
- }
216
- else {
217
- flags[key] = true;
218
- }
219
- }
262
+ } else if (arg.startsWith("-") && arg.length > 1) {
263
+ const chars = arg.slice(1)
264
+ for (let j = 0; j < chars.length; j++) {
265
+ const char = chars[j]
266
+ if (j === chars.length - 1 && i + 1 < args.length && !args[i + 1].startsWith("-")) {
267
+ options[char] = args[i + 1]
268
+ i++
269
+ } else {
270
+ flags[char] = true
271
+ }
220
272
  }
221
- else if (arg.startsWith("-") && arg.length > 1) {
222
- const chars = arg.slice(1);
223
- for (let j = 0; j < chars.length; j++) {
224
- const char = chars[j];
225
- if (j === chars.length - 1 && i + 1 < args.length && !args[i + 1].startsWith("-")) {
226
- options[char] = args[i + 1];
227
- i++;
228
- }
229
- else {
230
- flags[char] = true;
231
- }
232
- }
233
- }
234
- else {
235
- positional.push(arg);
236
- }
237
- i++;
273
+ } else {
274
+ positional.push(arg)
275
+ }
276
+
277
+ i++
238
278
  }
239
- return { flags, options, positional };
240
- });
241
- export const parse = (cmd, args) => Effect.gen(function* () {
242
- const parsed = yield* parseRawArgs(args);
243
- const result = {};
279
+
280
+ return { flags, options, positional }
281
+ })
282
+
283
+ export const parse = (
284
+ cmd,
285
+ args,
286
+ ) =>
287
+ Effect.gen(function* () {
288
+ const parsed = yield* parseRawArgs(args)
289
+
290
+ const result = {}
291
+
244
292
  for (const optBuilder of Object.values(cmd.options)) {
245
- const longName = stripPrefix(optBuilder.long);
246
- const shortName = optBuilder.short;
247
- const longMatch = parsed.options[longName] || parsed.flags[longName];
248
- const shortMatch = shortName
249
- ? parsed.options[shortName] || parsed.flags[shortName]
250
- : undefined;
251
- const rawValue = longMatch ?? shortMatch;
252
- const camelKey = kebabToCamel(stripPrefix(optBuilder.long));
253
- if (rawValue !== undefined) {
254
- if (typeof rawValue === "boolean") {
255
- result[camelKey] = rawValue;
256
- }
257
- else if (optBuilder.schema) {
258
- const decoded = yield* Schema.decode(optBuilder.schema)(rawValue).pipe(Effect.mapError((error) => new CommanderError({
259
- message: `Invalid value for option ${optBuilder.long}: ${error.message}`,
260
- cause: error,
261
- })));
262
- result[camelKey] = decoded;
263
- }
264
- else {
265
- result[camelKey] = rawValue;
266
- }
267
- }
268
- else if (optBuilder.defaultValue !== undefined) {
269
- result[camelKey] = optBuilder.defaultValue;
293
+ const longName = stripPrefix(optBuilder.long)
294
+ const shortName = optBuilder.short
295
+
296
+ const longMatch = parsed.options[longName] || parsed.flags[longName]
297
+ const shortMatch = shortName
298
+ ? parsed.options[shortName] || parsed.flags[shortName]
299
+ : undefined
300
+
301
+ const rawValue = longMatch ?? shortMatch
302
+
303
+ const camelKey = kebabToCamel(stripPrefix(optBuilder.long))
304
+
305
+ if (rawValue !== undefined) {
306
+ if (typeof rawValue === "boolean") {
307
+ result[camelKey] = rawValue
308
+ } else if (optBuilder.schema) {
309
+ const decoded = yield* Schema.decode(optBuilder.schema)(rawValue).pipe(
310
+ Effect.mapError(
311
+ (error) =>
312
+ new CommanderError({
313
+ message: `Invalid value for option ${optBuilder.long}: ${error.message}`,
314
+ cause: error,
315
+ }),
316
+ ),
317
+ )
318
+ result[camelKey] = decoded
319
+ } else {
320
+ result[camelKey] = rawValue
270
321
  }
322
+ } else if (optBuilder.defaultValue !== undefined) {
323
+ result[camelKey] = optBuilder.defaultValue
324
+ }
271
325
  }
272
- return result;
273
- });
274
- export const runMain = (cmd) => Effect.gen(function* () {
275
- const args = typeof process !== "undefined" ? process.argv.slice(2) : [];
276
- const parsedOptions = yield* parse(cmd, args);
326
+
327
+ return result
328
+ })
329
+
330
+ export const runMain = (
331
+ cmd,
332
+ ) =>
333
+ Effect.gen(function* () {
334
+ const args = typeof process !== "undefined" ? process.argv.slice(2) : []
335
+
336
+ const parsedOptions = yield* parse(cmd, args)
337
+
277
338
  if (Predicate.hasProperty(parsedOptions, "help") && parsedOptions.help) {
278
- console.log(generateHelp(cmd));
279
- return;
339
+ console.log(generateHelp(cmd))
340
+ return
280
341
  }
342
+
281
343
  if (Predicate.hasProperty(parsedOptions, "version") && parsedOptions.version && cmd.version) {
282
- console.log(`${cmd.name} v${cmd.version}`);
283
- return;
344
+ console.log(`${cmd.name} v${cmd.version}`)
345
+ return
284
346
  }
347
+
285
348
  if (cmd.handler) {
286
- yield* cmd.handler(parsedOptions);
349
+ yield* cmd.handler(parsedOptions)
287
350
  }
288
- });
289
- const generateHelp = (cmd) => {
290
- const lines = [];
291
- if (cmd.description) {
292
- lines.push(cmd.description);
293
- lines.push("");
351
+ })
352
+
353
+ const generateHelp = (
354
+ cmd,
355
+ ) => {
356
+ const lines = []
357
+
358
+ if (cmd.description) {
359
+ lines.push(cmd.description)
360
+ lines.push("")
361
+ }
362
+
363
+ lines.push(`Usage: ${cmd.name} [options]`)
364
+ lines.push("")
365
+
366
+ const optionsArray = Object.values(cmd.options)
367
+ if (optionsArray.length > 0) {
368
+ lines.push("Options:")
369
+
370
+ for (const opt of optionsArray) {
371
+ const short = opt.short ? `-${opt.short}, ` : " "
372
+ const long = opt.long
373
+ const hasValue = opt.schema !== undefined
374
+ const name = hasValue ? `${long} <value>` : long
375
+ lines.push(` ${short}${name.padEnd(20)} ${opt.description}`)
294
376
  }
295
- lines.push(`Usage: ${cmd.name} [options]`);
296
- lines.push("");
297
- const optionsArray = Object.values(cmd.options);
298
- if (optionsArray.length > 0) {
299
- lines.push("Options:");
300
- for (const opt of optionsArray) {
301
- const short = opt.short ? `-${opt.short}, ` : " ";
302
- const long = opt.long;
303
- const hasValue = opt.schema !== undefined;
304
- const name = hasValue ? `${long} <value>` : long;
305
- lines.push(` ${short}${name.padEnd(20)} ${opt.description}`);
306
- }
307
- lines.push("");
377
+
378
+ lines.push("")
379
+ }
380
+
381
+ if (cmd.subcommands.length > 0) {
382
+ lines.push("Commands:")
383
+ for (const sub of cmd.subcommands) {
384
+ const subCmd = sub.command
385
+ lines.push(` ${subCmd.name.padEnd(20)} ${subCmd.description || ""}`)
308
386
  }
309
- if (cmd.subcommands.length > 0) {
310
- lines.push("Commands:");
311
- for (const sub of cmd.subcommands) {
312
- const subCmd = sub.command;
313
- lines.push(` ${subCmd.name.padEnd(20)} ${subCmd.description || ""}`);
314
- }
315
- lines.push("");
316
- }
317
- return lines.join("\n");
318
- };
319
- export const help = (cmd) => generateHelp(cmd);
320
- export const NumberFromString = Schema.NumberFromString;
321
- export const choice = (choices) => Schema.Literal(...choices);
322
- export const repeatable = (schema) => Schema.transform(Schema.String, Schema.Array(Schema.String), {
387
+ lines.push("")
388
+ }
389
+
390
+ return lines.join("\n")
391
+ }
392
+
393
+ export const help = (
394
+ cmd,
395
+ ) => generateHelp(cmd)
396
+
397
+ export const NumberFromString = Schema.NumberFromString
398
+
399
+ export const choice = (
400
+ choices,
401
+ ) => Schema.Literal(...choices)
402
+
403
+ export const repeatable = (
404
+ schema,
405
+ ) =>
406
+ Schema.transform(Schema.String, Schema.Array(Schema.String), {
323
407
  strict: true,
324
408
  decode: (s) => s.split(",").map((part) => part.trim()),
325
409
  encode: (arr) => arr.join(","),
326
- }).pipe(Schema.compose(Schema.Array(schema)));
410
+ }).pipe(Schema.compose(Schema.Array(schema)))