alepha 0.14.4 → 0.15.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 (277) hide show
  1. package/README.md +1 -4
  2. package/dist/api/audits/index.d.ts +619 -731
  3. package/dist/api/audits/index.d.ts.map +1 -1
  4. package/dist/api/files/index.d.ts +185 -298
  5. package/dist/api/files/index.d.ts.map +1 -1
  6. package/dist/api/files/index.js +0 -1
  7. package/dist/api/files/index.js.map +1 -1
  8. package/dist/api/jobs/index.d.ts +245 -356
  9. package/dist/api/jobs/index.d.ts.map +1 -1
  10. package/dist/api/notifications/index.d.ts +238 -350
  11. package/dist/api/notifications/index.d.ts.map +1 -1
  12. package/dist/api/parameters/index.d.ts +499 -611
  13. package/dist/api/parameters/index.d.ts.map +1 -1
  14. package/dist/api/users/index.browser.js +1 -2
  15. package/dist/api/users/index.browser.js.map +1 -1
  16. package/dist/api/users/index.d.ts +1697 -1804
  17. package/dist/api/users/index.d.ts.map +1 -1
  18. package/dist/api/users/index.js +178 -151
  19. package/dist/api/users/index.js.map +1 -1
  20. package/dist/api/verifications/index.d.ts +132 -132
  21. package/dist/api/verifications/index.d.ts.map +1 -1
  22. package/dist/batch/index.d.ts +122 -122
  23. package/dist/batch/index.d.ts.map +1 -1
  24. package/dist/batch/index.js +1 -2
  25. package/dist/batch/index.js.map +1 -1
  26. package/dist/bucket/index.d.ts +163 -163
  27. package/dist/bucket/index.d.ts.map +1 -1
  28. package/dist/cache/core/index.d.ts +46 -46
  29. package/dist/cache/core/index.d.ts.map +1 -1
  30. package/dist/cache/redis/index.d.ts.map +1 -1
  31. package/dist/cli/index.d.ts +302 -299
  32. package/dist/cli/index.d.ts.map +1 -1
  33. package/dist/cli/index.js +966 -564
  34. package/dist/cli/index.js.map +1 -1
  35. package/dist/command/index.d.ts +303 -299
  36. package/dist/command/index.d.ts.map +1 -1
  37. package/dist/command/index.js +11 -7
  38. package/dist/command/index.js.map +1 -1
  39. package/dist/core/index.browser.js +419 -99
  40. package/dist/core/index.browser.js.map +1 -1
  41. package/dist/core/index.d.ts +718 -625
  42. package/dist/core/index.d.ts.map +1 -1
  43. package/dist/core/index.js +420 -99
  44. package/dist/core/index.js.map +1 -1
  45. package/dist/core/index.native.js +419 -99
  46. package/dist/core/index.native.js.map +1 -1
  47. package/dist/datetime/index.d.ts +44 -44
  48. package/dist/datetime/index.d.ts.map +1 -1
  49. package/dist/datetime/index.js +4 -4
  50. package/dist/datetime/index.js.map +1 -1
  51. package/dist/email/index.d.ts +97 -50
  52. package/dist/email/index.d.ts.map +1 -1
  53. package/dist/email/index.js +129 -33
  54. package/dist/email/index.js.map +1 -1
  55. package/dist/fake/index.d.ts +7981 -14
  56. package/dist/fake/index.d.ts.map +1 -1
  57. package/dist/file/index.d.ts +523 -390
  58. package/dist/file/index.d.ts.map +1 -1
  59. package/dist/file/index.js +253 -1
  60. package/dist/file/index.js.map +1 -1
  61. package/dist/lock/core/index.d.ts +208 -208
  62. package/dist/lock/core/index.d.ts.map +1 -1
  63. package/dist/lock/redis/index.d.ts.map +1 -1
  64. package/dist/logger/index.d.ts +25 -26
  65. package/dist/logger/index.d.ts.map +1 -1
  66. package/dist/mcp/index.d.ts +197 -197
  67. package/dist/mcp/index.d.ts.map +1 -1
  68. package/dist/orm/chunk-DtkW-qnP.js +38 -0
  69. package/dist/orm/index.browser.js.map +1 -1
  70. package/dist/orm/index.bun.js +2814 -0
  71. package/dist/orm/index.bun.js.map +1 -0
  72. package/dist/orm/index.d.ts +1205 -1057
  73. package/dist/orm/index.d.ts.map +1 -1
  74. package/dist/orm/index.js +2056 -1753
  75. package/dist/orm/index.js.map +1 -1
  76. package/dist/queue/core/index.d.ts +248 -248
  77. package/dist/queue/core/index.d.ts.map +1 -1
  78. package/dist/queue/redis/index.d.ts.map +1 -1
  79. package/dist/redis/index.bun.js +285 -0
  80. package/dist/redis/index.bun.js.map +1 -0
  81. package/dist/redis/index.d.ts +118 -136
  82. package/dist/redis/index.d.ts.map +1 -1
  83. package/dist/redis/index.js +18 -38
  84. package/dist/redis/index.js.map +1 -1
  85. package/dist/retry/index.d.ts +69 -69
  86. package/dist/retry/index.d.ts.map +1 -1
  87. package/dist/router/index.d.ts +6 -6
  88. package/dist/router/index.d.ts.map +1 -1
  89. package/dist/scheduler/index.d.ts +25 -25
  90. package/dist/scheduler/index.d.ts.map +1 -1
  91. package/dist/security/index.browser.js +5 -1
  92. package/dist/security/index.browser.js.map +1 -1
  93. package/dist/security/index.d.ts +417 -254
  94. package/dist/security/index.d.ts.map +1 -1
  95. package/dist/security/index.js +386 -86
  96. package/dist/security/index.js.map +1 -1
  97. package/dist/server/auth/index.d.ts +277 -277
  98. package/dist/server/auth/index.d.ts.map +1 -1
  99. package/dist/server/auth/index.js +20 -20
  100. package/dist/server/auth/index.js.map +1 -1
  101. package/dist/server/cache/index.d.ts +60 -57
  102. package/dist/server/cache/index.d.ts.map +1 -1
  103. package/dist/server/cache/index.js +1 -1
  104. package/dist/server/cache/index.js.map +1 -1
  105. package/dist/server/compress/index.d.ts +3 -3
  106. package/dist/server/compress/index.d.ts.map +1 -1
  107. package/dist/server/cookies/index.d.ts +6 -6
  108. package/dist/server/cookies/index.d.ts.map +1 -1
  109. package/dist/server/cookies/index.js +3 -3
  110. package/dist/server/cookies/index.js.map +1 -1
  111. package/dist/server/core/index.d.ts +242 -150
  112. package/dist/server/core/index.d.ts.map +1 -1
  113. package/dist/server/core/index.js +288 -122
  114. package/dist/server/core/index.js.map +1 -1
  115. package/dist/server/cors/index.d.ts +11 -12
  116. package/dist/server/cors/index.d.ts.map +1 -1
  117. package/dist/server/health/index.d.ts +0 -1
  118. package/dist/server/health/index.d.ts.map +1 -1
  119. package/dist/server/helmet/index.d.ts +2 -2
  120. package/dist/server/helmet/index.d.ts.map +1 -1
  121. package/dist/server/links/index.browser.js.map +1 -1
  122. package/dist/server/links/index.d.ts +84 -85
  123. package/dist/server/links/index.d.ts.map +1 -1
  124. package/dist/server/links/index.js +1 -2
  125. package/dist/server/links/index.js.map +1 -1
  126. package/dist/server/metrics/index.d.ts.map +1 -1
  127. package/dist/server/multipart/index.d.ts +6 -6
  128. package/dist/server/multipart/index.d.ts.map +1 -1
  129. package/dist/server/proxy/index.d.ts +102 -103
  130. package/dist/server/proxy/index.d.ts.map +1 -1
  131. package/dist/server/rate-limit/index.d.ts +16 -16
  132. package/dist/server/rate-limit/index.d.ts.map +1 -1
  133. package/dist/server/static/index.d.ts +44 -44
  134. package/dist/server/static/index.d.ts.map +1 -1
  135. package/dist/server/swagger/index.d.ts +48 -49
  136. package/dist/server/swagger/index.d.ts.map +1 -1
  137. package/dist/server/swagger/index.js +1 -2
  138. package/dist/server/swagger/index.js.map +1 -1
  139. package/dist/sms/index.d.ts +13 -11
  140. package/dist/sms/index.d.ts.map +1 -1
  141. package/dist/sms/index.js +7 -7
  142. package/dist/sms/index.js.map +1 -1
  143. package/dist/thread/index.d.ts +71 -72
  144. package/dist/thread/index.d.ts.map +1 -1
  145. package/dist/topic/core/index.d.ts +318 -318
  146. package/dist/topic/core/index.d.ts.map +1 -1
  147. package/dist/topic/redis/index.d.ts +6 -6
  148. package/dist/topic/redis/index.d.ts.map +1 -1
  149. package/dist/vite/index.d.ts +5720 -159
  150. package/dist/vite/index.d.ts.map +1 -1
  151. package/dist/vite/index.js +41 -18
  152. package/dist/vite/index.js.map +1 -1
  153. package/dist/websocket/index.browser.js +6 -6
  154. package/dist/websocket/index.browser.js.map +1 -1
  155. package/dist/websocket/index.d.ts +247 -247
  156. package/dist/websocket/index.d.ts.map +1 -1
  157. package/dist/websocket/index.js +6 -6
  158. package/dist/websocket/index.js.map +1 -1
  159. package/package.json +9 -14
  160. package/src/api/files/controllers/AdminFileStatsController.ts +0 -1
  161. package/src/api/users/atoms/realmAuthSettingsAtom.ts +5 -0
  162. package/src/api/users/controllers/{UserRealmController.ts → RealmController.ts} +11 -11
  163. package/src/api/users/entities/users.ts +1 -1
  164. package/src/api/users/index.ts +8 -8
  165. package/src/api/users/primitives/{$userRealm.ts → $realm.ts} +17 -19
  166. package/src/api/users/providers/{UserRealmProvider.ts → RealmProvider.ts} +26 -30
  167. package/src/api/users/schemas/{userRealmConfigSchema.ts → realmConfigSchema.ts} +2 -2
  168. package/src/api/users/services/CredentialService.ts +7 -7
  169. package/src/api/users/services/IdentityService.ts +4 -4
  170. package/src/api/users/services/RegistrationService.spec.ts +25 -27
  171. package/src/api/users/services/RegistrationService.ts +38 -27
  172. package/src/api/users/services/SessionCrudService.ts +3 -3
  173. package/src/api/users/services/SessionService.spec.ts +3 -3
  174. package/src/api/users/services/SessionService.ts +28 -9
  175. package/src/api/users/services/UserService.ts +7 -7
  176. package/src/batch/providers/BatchProvider.ts +1 -2
  177. package/src/cli/apps/AlephaPackageBuilderCli.ts +38 -19
  178. package/src/cli/assets/apiHelloControllerTs.ts +18 -0
  179. package/src/cli/assets/apiIndexTs.ts +16 -0
  180. package/src/cli/assets/claudeMd.ts +303 -0
  181. package/src/cli/assets/mainBrowserTs.ts +2 -2
  182. package/src/cli/assets/mainServerTs.ts +24 -0
  183. package/src/cli/assets/webAppRouterTs.ts +15 -0
  184. package/src/cli/assets/webHelloComponentTsx.ts +16 -0
  185. package/src/cli/assets/webIndexTs.ts +16 -0
  186. package/src/cli/commands/build.ts +41 -21
  187. package/src/cli/commands/db.ts +21 -18
  188. package/src/cli/commands/deploy.ts +17 -5
  189. package/src/cli/commands/dev.ts +13 -17
  190. package/src/cli/commands/format.ts +8 -2
  191. package/src/cli/commands/init.ts +74 -29
  192. package/src/cli/commands/lint.ts +8 -2
  193. package/src/cli/commands/test.ts +8 -2
  194. package/src/cli/commands/typecheck.ts +5 -1
  195. package/src/cli/commands/verify.ts +4 -2
  196. package/src/cli/services/AlephaCliUtils.ts +39 -600
  197. package/src/cli/services/PackageManagerUtils.ts +301 -0
  198. package/src/cli/services/ProjectScaffolder.ts +306 -0
  199. package/src/command/helpers/Runner.ts +15 -3
  200. package/src/core/__tests__/Alepha-graph.spec.ts +4 -0
  201. package/src/core/index.shared.ts +1 -0
  202. package/src/core/index.ts +2 -0
  203. package/src/core/primitives/$hook.ts +6 -2
  204. package/src/core/primitives/$module.spec.ts +4 -0
  205. package/src/core/providers/AlsProvider.ts +1 -1
  206. package/src/core/providers/CodecManager.spec.ts +12 -6
  207. package/src/core/providers/CodecManager.ts +26 -6
  208. package/src/core/providers/EventManager.ts +169 -13
  209. package/src/core/providers/KeylessJsonSchemaCodec.spec.ts +621 -0
  210. package/src/core/providers/KeylessJsonSchemaCodec.ts +407 -0
  211. package/src/core/providers/StateManager.spec.ts +27 -16
  212. package/src/email/providers/LocalEmailProvider.spec.ts +111 -87
  213. package/src/email/providers/LocalEmailProvider.ts +52 -15
  214. package/src/email/providers/NodemailerEmailProvider.ts +167 -56
  215. package/src/file/errors/FileError.ts +7 -0
  216. package/src/file/index.ts +9 -1
  217. package/src/file/providers/MemoryFileSystemProvider.ts +393 -0
  218. package/src/orm/index.browser.ts +1 -19
  219. package/src/orm/index.bun.ts +77 -0
  220. package/src/orm/index.shared-server.ts +22 -0
  221. package/src/orm/index.shared.ts +15 -0
  222. package/src/orm/index.ts +19 -39
  223. package/src/orm/providers/drivers/BunPostgresProvider.ts +3 -5
  224. package/src/orm/providers/drivers/BunSqliteProvider.ts +1 -1
  225. package/src/orm/providers/drivers/CloudflareD1Provider.ts +4 -0
  226. package/src/orm/providers/drivers/DatabaseProvider.ts +4 -0
  227. package/src/orm/providers/drivers/PglitePostgresProvider.ts +4 -0
  228. package/src/orm/services/Repository.ts +8 -0
  229. package/src/redis/index.bun.ts +35 -0
  230. package/src/redis/providers/BunRedisProvider.ts +12 -43
  231. package/src/redis/providers/BunRedisSubscriberProvider.ts +2 -3
  232. package/src/redis/providers/NodeRedisProvider.ts +16 -34
  233. package/src/{server/security → security}/__tests__/BasicAuth.spec.ts +11 -11
  234. package/src/{server/security → security}/__tests__/ServerSecurityProvider-realm.spec.ts +21 -16
  235. package/src/{server/security/providers → security/__tests__}/ServerSecurityProvider.spec.ts +5 -5
  236. package/src/security/index.browser.ts +5 -0
  237. package/src/security/index.ts +90 -7
  238. package/src/security/primitives/{$realm.spec.ts → $issuer.spec.ts} +11 -11
  239. package/src/security/primitives/{$realm.ts → $issuer.ts} +20 -17
  240. package/src/security/primitives/$role.ts +5 -5
  241. package/src/security/primitives/$serviceAccount.spec.ts +5 -5
  242. package/src/security/primitives/$serviceAccount.ts +3 -3
  243. package/src/{server/security → security}/providers/ServerSecurityProvider.ts +5 -7
  244. package/src/server/auth/primitives/$auth.ts +10 -10
  245. package/src/server/auth/primitives/$authCredentials.ts +3 -3
  246. package/src/server/auth/primitives/$authGithub.ts +3 -3
  247. package/src/server/auth/primitives/$authGoogle.ts +3 -3
  248. package/src/server/auth/providers/ServerAuthProvider.ts +13 -13
  249. package/src/server/cache/providers/ServerCacheProvider.ts +1 -1
  250. package/src/server/cookies/providers/ServerCookiesProvider.ts +3 -3
  251. package/src/server/core/providers/NodeHttpServerProvider.ts +25 -6
  252. package/src/server/core/providers/ServerBodyParserProvider.ts +19 -23
  253. package/src/server/core/providers/ServerLoggerProvider.ts +23 -19
  254. package/src/server/core/providers/ServerProvider.ts +144 -21
  255. package/src/server/core/providers/ServerRouterProvider.ts +259 -115
  256. package/src/server/core/providers/ServerTimingProvider.ts +2 -2
  257. package/src/server/links/index.ts +1 -1
  258. package/src/server/links/providers/LinkProvider.ts +1 -1
  259. package/src/server/swagger/index.ts +1 -1
  260. package/src/sms/providers/LocalSmsProvider.spec.ts +153 -111
  261. package/src/sms/providers/LocalSmsProvider.ts +8 -7
  262. package/src/vite/helpers/boot.ts +28 -17
  263. package/src/vite/tasks/buildServer.ts +12 -1
  264. package/src/vite/tasks/devServer.ts +3 -1
  265. package/src/vite/tasks/generateCloudflare.ts +7 -0
  266. package/dist/server/security/index.browser.js +0 -13
  267. package/dist/server/security/index.browser.js.map +0 -1
  268. package/dist/server/security/index.d.ts +0 -173
  269. package/dist/server/security/index.d.ts.map +0 -1
  270. package/dist/server/security/index.js +0 -311
  271. package/dist/server/security/index.js.map +0 -1
  272. package/src/cli/assets/appRouterTs.ts +0 -9
  273. package/src/cli/assets/mainTs.ts +0 -13
  274. package/src/server/security/index.browser.ts +0 -10
  275. package/src/server/security/index.ts +0 -94
  276. /package/src/{server/security → security}/primitives/$basicAuth.ts +0 -0
  277. /package/src/{server/security → security}/providers/ServerBasicAuthProvider.ts +0 -0
@@ -1,7 +1,7 @@
1
1
  import * as alepha1 from "alepha";
2
2
  import { Alepha, AlephaError, Async, KIND, Primitive, Static, TObject, TSchema, TString } from "alepha";
3
3
  import * as node_readline_promises0 from "node:readline/promises";
4
- import * as alepha_logger2 from "alepha/logger";
4
+ import * as alepha_logger0 from "alepha/logger";
5
5
  import * as fs from "node:fs/promises";
6
6
  import { glob } from "node:fs/promises";
7
7
  import { DateTimeProvider, Interval } from "alepha/datetime";
@@ -14,28 +14,28 @@ declare class CommandError extends AlephaError {
14
14
  //#region ../../src/command/helpers/Asker.d.ts
15
15
  interface AskOptions<T extends TSchema = TString> {
16
16
  /**
17
- * Response schema expected.
18
- *
19
- * Recommended schemas:
20
- * - t.text() - for free text input
21
- * - t.number() - for numeric input
22
- * - t.boolean() - for yes/no input (accepts "true", "false", "1", "0")
23
- * - t.enum(["option1", "option2"]) - for predefined options
24
- *
25
- * You can use schema.default to provide a default value.
26
- *
27
- * @example
28
- * ```ts
29
- * ask("What is your name?", { schema: t.text({ default: "John Doe" }) })
30
- * ```
31
- *
32
- * @default TString
33
- */
17
+ * Response schema expected.
18
+ *
19
+ * Recommended schemas:
20
+ * - t.text() - for free text input
21
+ * - t.number() - for numeric input
22
+ * - t.boolean() - for yes/no input (accepts "true", "false", "1", "0")
23
+ * - t.enum(["option1", "option2"]) - for predefined options
24
+ *
25
+ * You can use schema.default to provide a default value.
26
+ *
27
+ * @example
28
+ * ```ts
29
+ * ask("What is your name?", { schema: t.text({ default: "John Doe" }) })
30
+ * ```
31
+ *
32
+ * @default TString
33
+ */
34
34
  schema?: T;
35
35
  /**
36
- * Custom validation function.
37
- * Throws an AlephaError in case of validation failure.
38
- */
36
+ * Custom validation function.
37
+ * Throws an AlephaError in case of validation failure.
38
+ */
39
39
  validate?: (value: Static<T>) => void;
40
40
  }
41
41
  interface AskMethod {
@@ -43,7 +43,7 @@ interface AskMethod {
43
43
  permission: (question: string) => Promise<boolean>;
44
44
  }
45
45
  declare class Asker {
46
- protected readonly log: alepha_logger2.Logger;
46
+ protected readonly log: alepha_logger0.Logger;
47
47
  readonly ask: AskMethod;
48
48
  protected readonly alepha: Alepha;
49
49
  constructor();
@@ -54,12 +54,12 @@ declare class Asker {
54
54
  //#endregion
55
55
  //#region ../../src/command/helpers/EnvUtils.d.ts
56
56
  declare class EnvUtils {
57
- protected readonly log: alepha_logger2.Logger;
57
+ protected readonly log: alepha_logger0.Logger;
58
58
  /**
59
- * Load environment variables from .env files into process.env.
60
- * By default, it loads from ".env" and ".env.local".
61
- * You can specify additional files to load, e.g. [".env", ".env.production"].
62
- */
59
+ * Load environment variables from .env files into process.env.
60
+ * By default, it loads from ".env" and ".env.local".
61
+ * You can specify additional files to load, e.g. [".env", ".env.production"].
62
+ */
63
63
  loadEnv(root: string, files?: string[]): Promise<void>;
64
64
  }
65
65
  //#endregion
@@ -85,40 +85,40 @@ declare class PrettyPrint {
85
85
  dim: string;
86
86
  };
87
87
  /**
88
- * Start a new command session with header
89
- */
88
+ * Start a new command session with header
89
+ */
90
90
  startCommand(cliName: string, commandName: string): void;
91
91
  /**
92
- * End the command session with footer
93
- */
92
+ * End the command session with footer
93
+ */
94
94
  endCommand(): void;
95
95
  /**
96
- * Start an animated spinner with a task name
97
- */
96
+ * Start an animated spinner with a task name
97
+ */
98
98
  startSpinner(id: string, taskName: string): void;
99
99
  /**
100
- * Stop the spinner and show success with a tick
101
- */
100
+ * Stop the spinner and show success with a tick
101
+ */
102
102
  success(id: string, taskName?: string, duration?: string): void;
103
103
  /**
104
- * Stop the spinner and show error with a cross
105
- */
104
+ * Stop the spinner and show error with a cross
105
+ */
106
106
  error(id: string, taskName?: string): void;
107
107
  /**
108
- * Update the display for all tasks
109
- */
108
+ * Update the display for all tasks
109
+ */
110
110
  protected updateDisplay(): void;
111
111
  /**
112
- * Check if all tasks are done and stop the interval
113
- */
112
+ * Check if all tasks are done and stop the interval
113
+ */
114
114
  protected checkIfAllDone(): void;
115
115
  /**
116
- * Stop the spinner without showing any symbol
117
- */
116
+ * Stop the spinner without showing any symbol
117
+ */
118
118
  stopSpinner(): void;
119
119
  /**
120
- * Clear all tasks
121
- */
120
+ * Clear all tasks
121
+ */
122
122
  clear(): void;
123
123
  }
124
124
  //#endregion
@@ -133,9 +133,13 @@ interface Timer {
133
133
  }
134
134
  interface RunOptions {
135
135
  /**
136
- * Rename the command for logging purposes.
137
- */
136
+ * Rename the command for logging purposes.
137
+ */
138
138
  alias?: string;
139
+ /**
140
+ * Root directory to execute the command in.
141
+ */
142
+ root?: string;
139
143
  }
140
144
  interface RunnerMethod {
141
145
  (cmd: string | Task | Array<string | Task>, options?: RunOptions | (() => any)): Promise<string>;
@@ -143,7 +147,7 @@ interface RunnerMethod {
143
147
  cp: (source: string, dest: string, options?: RunOptions) => Promise<string>;
144
148
  }
145
149
  declare class Runner {
146
- protected readonly log: alepha_logger2.Logger;
150
+ protected readonly log: alepha_logger0.Logger;
147
151
  protected readonly timers: Timer[];
148
152
  protected readonly startTime: number;
149
153
  protected readonly prettyPrint: PrettyPrint;
@@ -155,20 +159,22 @@ declare class Runner {
155
159
  constructor();
156
160
  protected get useDynamicLogger(): boolean;
157
161
  /**
158
- * Start a new command session with header (for pretty print mode)
159
- */
162
+ * Start a new command session with header (for pretty print mode)
163
+ */
160
164
  startCommand(cliName: string, commandName: string): void;
161
165
  protected createRunMethod(): RunnerMethod;
162
- protected exec(cmd: string): Promise<string>;
163
- /**
164
- * Executes one or more tasks.
165
- *
166
- * @param task - A single task or an array of tasks to run in parallel.
167
- */
166
+ protected exec(cmd: string, opts?: {
167
+ root?: string;
168
+ }): Promise<string>;
169
+ /**
170
+ * Executes one or more tasks.
171
+ *
172
+ * @param task - A single task or an array of tasks to run in parallel.
173
+ */
168
174
  protected execute(task: Task | Task[]): Promise<string>;
169
175
  /**
170
- * Prints a summary of all executed tasks and their durations.
171
- */
176
+ * Prints a summary of all executed tasks and their durations.
177
+ */
172
178
  end(): void;
173
179
  protected executeTask(task: Task): Promise<string>;
174
180
  protected renderTable(data: string[][]): void;
@@ -187,203 +193,203 @@ declare const $command: {
187
193
  };
188
194
  interface CommandPrimitiveOptions<T extends TObject, A extends TSchema, E extends TObject = TObject> {
189
195
  /**
190
- * The handler function to execute when the command is matched.
191
- *
192
- * For parent commands with children, the handler is called when:
193
- * - The parent command is invoked without a subcommand
194
- * - The parent command is invoked with --help (to show available subcommands)
195
- */
196
+ * The handler function to execute when the command is matched.
197
+ *
198
+ * For parent commands with children, the handler is called when:
199
+ * - The parent command is invoked without a subcommand
200
+ * - The parent command is invoked with --help (to show available subcommands)
201
+ */
196
202
  handler: (args: CommandHandlerArgs<T, A, E>) => Async<void>;
197
203
  /**
198
- * The name of the command. If omitted, the property key is used.
199
- *
200
- * An empty string "" denotes the root command.
201
- */
204
+ * The name of the command. If omitted, the property key is used.
205
+ *
206
+ * An empty string "" denotes the root command.
207
+ */
202
208
  name?: string;
203
209
  /**
204
- * A short description of the command, shown in the help message.
205
- */
210
+ * A short description of the command, shown in the help message.
211
+ */
206
212
  description?: string;
207
213
  /**
208
- * An array of alternative names for the command.
209
- */
214
+ * An array of alternative names for the command.
215
+ */
210
216
  aliases?: string[];
211
217
  /**
212
- * A TypeBox object schema defining the flags for the command.
213
- */
218
+ * A TypeBox object schema defining the flags for the command.
219
+ */
214
220
  flags?: T;
215
221
  /**
216
- * A TypeBox object schema defining required environment variables.
217
- *
218
- * Environment variables are validated before the handler runs (fail fast).
219
- * They are displayed in the help output under "Env:" section.
220
- *
221
- * @example
222
- * ```ts
223
- * $command({
224
- * env: t.object({
225
- * VERCEL_TOKEN: t.text({ description: "Vercel API token" }),
226
- * VERCEL_ORG_ID: t.optional(t.text({ description: "Organization ID" })),
227
- * }),
228
- * handler: async ({ env }) => {
229
- * // env.VERCEL_TOKEN is typed & guaranteed to exist
230
- * console.log(env.VERCEL_TOKEN);
231
- * }
232
- * })
233
- * ```
234
- */
222
+ * A TypeBox object schema defining required environment variables.
223
+ *
224
+ * Environment variables are validated before the handler runs (fail fast).
225
+ * They are displayed in the help output under "Env:" section.
226
+ *
227
+ * @example
228
+ * ```ts
229
+ * $command({
230
+ * env: t.object({
231
+ * VERCEL_TOKEN: t.text({ description: "Vercel API token" }),
232
+ * VERCEL_ORG_ID: t.optional(t.text({ description: "Organization ID" })),
233
+ * }),
234
+ * handler: async ({ env }) => {
235
+ * // env.VERCEL_TOKEN is typed & guaranteed to exist
236
+ * console.log(env.VERCEL_TOKEN);
237
+ * }
238
+ * })
239
+ * ```
240
+ */
235
241
  env?: E;
236
242
  /**
237
- * An optional TypeBox schema defining the arguments for the command.
238
- *
239
- * @example
240
- * args: t.text()
241
- * my-cli command <arg1: string>
242
- *
243
- * args: t.optional(t.text())
244
- * my-cli command [arg1: string]
245
- *
246
- * args: t.tuple([t.text(), t.number()])
247
- * my-cli command <arg1: string> <arg2: number>
248
- *
249
- * args: t.tuple([t.text(), t.optional(t.number())])
250
- * my-cli command <arg1: string> [arg2: number]
251
- */
243
+ * An optional TypeBox schema defining the arguments for the command.
244
+ *
245
+ * @example
246
+ * args: t.text()
247
+ * my-cli command <arg1: string>
248
+ *
249
+ * args: t.optional(t.text())
250
+ * my-cli command [arg1: string]
251
+ *
252
+ * args: t.tuple([t.text(), t.number()])
253
+ * my-cli command <arg1: string> <arg2: number>
254
+ *
255
+ * args: t.tuple([t.text(), t.optional(t.number())])
256
+ * my-cli command <arg1: string> [arg2: number]
257
+ */
252
258
  args?: A;
253
259
  /**
254
- * Marks this command as the root command.
255
- * Equivalent to setting name to an empty string "".
256
- */
260
+ * Marks this command as the root command.
261
+ * Equivalent to setting name to an empty string "".
262
+ */
257
263
  root?: boolean;
258
264
  /**
259
- * Run this command's handler BEFORE the specified target command.
260
- *
261
- * Pre-hooks are not listed in help and cannot be called directly.
262
- * They receive the same parsed flags and args as the target command.
263
- *
264
- * @example
265
- * ```ts
266
- * class BuildCommands {
267
- * prebuild = $command({
268
- * pre: "build",
269
- * handler: async ({ run }) => {
270
- * await run("cleaning dist folder...", () => fs.rm("dist"));
271
- * }
272
- * });
273
- *
274
- * build = $command({
275
- * name: "build",
276
- * handler: async () => { ... }
277
- * });
278
- * }
279
- * ```
280
- */
265
+ * Run this command's handler BEFORE the specified target command.
266
+ *
267
+ * Pre-hooks are not listed in help and cannot be called directly.
268
+ * They receive the same parsed flags and args as the target command.
269
+ *
270
+ * @example
271
+ * ```ts
272
+ * class BuildCommands {
273
+ * prebuild = $command({
274
+ * pre: "build",
275
+ * handler: async ({ run }) => {
276
+ * await run("cleaning dist folder...", () => fs.rm("dist"));
277
+ * }
278
+ * });
279
+ *
280
+ * build = $command({
281
+ * name: "build",
282
+ * handler: async () => { ... }
283
+ * });
284
+ * }
285
+ * ```
286
+ */
281
287
  pre?: string;
282
288
  /**
283
- * Run this command's handler AFTER the specified target command.
284
- *
285
- * Post-hooks are not listed in help and cannot be called directly.
286
- * They receive the same parsed flags and args as the target command.
287
- *
288
- * @example
289
- * ```ts
290
- * class BuildCommands {
291
- * build = $command({
292
- * name: "build",
293
- * handler: async () => { ... }
294
- * });
295
- *
296
- * postbuild = $command({
297
- * post: "build",
298
- * handler: async ({ run }) => {
299
- * await run("generating checksums...", generateChecksums);
300
- * }
301
- * });
302
- * }
303
- * ```
304
- */
289
+ * Run this command's handler AFTER the specified target command.
290
+ *
291
+ * Post-hooks are not listed in help and cannot be called directly.
292
+ * They receive the same parsed flags and args as the target command.
293
+ *
294
+ * @example
295
+ * ```ts
296
+ * class BuildCommands {
297
+ * build = $command({
298
+ * name: "build",
299
+ * handler: async () => { ... }
300
+ * });
301
+ *
302
+ * postbuild = $command({
303
+ * post: "build",
304
+ * handler: async ({ run }) => {
305
+ * await run("generating checksums...", generateChecksums);
306
+ * }
307
+ * });
308
+ * }
309
+ * ```
310
+ */
305
311
  post?: string;
306
312
  /**
307
- * If true, this command will be hidden from the help output.
308
- */
313
+ * If true, this command will be hidden from the help output.
314
+ */
309
315
  hide?: boolean;
310
316
  /**
311
- * Adds a `--mode, -m` flag to load environment files.
312
- *
313
- * When enabled:
314
- * - Loads `.env` and `.env.local` by default
315
- * - With `--mode production`, also loads `.env.production` and `.env.production.local`
316
- * - The mode value is exposed in the handler as `mode: string | undefined`
317
- *
318
- * Set to `true` to enable with no default, or a string to set a default mode.
319
- *
320
- * This follows Vite's environment loading convention.
321
- * @see https://vite.dev/guide/env-and-mode
322
- *
323
- * @example
324
- * ```ts
325
- * // No default mode
326
- * build = $command({
327
- * mode: true,
328
- * handler: async ({ mode }) => {
329
- * console.log(`Building for ${mode ?? 'development'}...`);
330
- * }
331
- * });
332
- *
333
- * // Default mode "production"
334
- * deploy = $command({
335
- * mode: "production",
336
- * handler: async ({ mode }) => {
337
- * console.log(`Deploying for ${mode}...`); // always defined
338
- * }
339
- * });
340
- * ```
341
- *
342
- * Usage:
343
- * - `cli build` - loads .env (mode = undefined)
344
- * - `cli build --mode production` - loads .env and .env.production
345
- * - `cli deploy` - loads .env and .env.production (default mode)
346
- * - `cli deploy --mode staging` - loads .env and .env.staging
347
- */
317
+ * Adds a `--mode, -m` flag to load environment files.
318
+ *
319
+ * When enabled:
320
+ * - Loads `.env` and `.env.local` by default
321
+ * - With `--mode production`, also loads `.env.production` and `.env.production.local`
322
+ * - The mode value is exposed in the handler as `mode: string | undefined`
323
+ *
324
+ * Set to `true` to enable with no default, or a string to set a default mode.
325
+ *
326
+ * This follows Vite's environment loading convention.
327
+ * @see https://vite.dev/guide/env-and-mode
328
+ *
329
+ * @example
330
+ * ```ts
331
+ * // No default mode
332
+ * build = $command({
333
+ * mode: true,
334
+ * handler: async ({ mode }) => {
335
+ * console.log(`Building for ${mode ?? 'development'}...`);
336
+ * }
337
+ * });
338
+ *
339
+ * // Default mode "production"
340
+ * deploy = $command({
341
+ * mode: "production",
342
+ * handler: async ({ mode }) => {
343
+ * console.log(`Deploying for ${mode}...`); // always defined
344
+ * }
345
+ * });
346
+ * ```
347
+ *
348
+ * Usage:
349
+ * - `cli build` - loads .env (mode = undefined)
350
+ * - `cli build --mode production` - loads .env and .env.production
351
+ * - `cli deploy` - loads .env and .env.production (default mode)
352
+ * - `cli deploy --mode staging` - loads .env and .env.staging
353
+ */
348
354
  mode?: boolean | string;
349
355
  /**
350
- * Child commands (subcommands) for this command.
351
- *
352
- * When children are defined, the command becomes a parent command that
353
- * can be invoked with space-separated subcommands:
354
- *
355
- * @example
356
- * ```ts
357
- * class DeployCommands {
358
- * // Subcommands
359
- * vercel = $command({
360
- * description: "Deploy to Vercel",
361
- * handler: async () => { ... }
362
- * });
363
- *
364
- * cloudflare = $command({
365
- * description: "Deploy to Cloudflare",
366
- * handler: async () => { ... }
367
- * });
368
- *
369
- * // Parent command with children
370
- * deploy = $command({
371
- * description: "Deploy the application",
372
- * children: [this.vercel, this.cloudflare],
373
- * handler: async () => {
374
- * // Called when "deploy" is invoked without subcommand
375
- * console.log("Available: deploy vercel, deploy cloudflare");
376
- * }
377
- * });
378
- * }
379
- * ```
380
- *
381
- * This allows CLI usage like:
382
- * - `cli deploy vercel` - runs the vercel subcommand
383
- * - `cli deploy cloudflare` - runs the cloudflare subcommand
384
- * - `cli deploy` - runs the parent handler (shows available subcommands)
385
- * - `cli deploy --help` - shows help with all available subcommands
386
- */
356
+ * Child commands (subcommands) for this command.
357
+ *
358
+ * When children are defined, the command becomes a parent command that
359
+ * can be invoked with space-separated subcommands:
360
+ *
361
+ * @example
362
+ * ```ts
363
+ * class DeployCommands {
364
+ * // Subcommands
365
+ * vercel = $command({
366
+ * description: "Deploy to Vercel",
367
+ * handler: async () => { ... }
368
+ * });
369
+ *
370
+ * cloudflare = $command({
371
+ * description: "Deploy to Cloudflare",
372
+ * handler: async () => { ... }
373
+ * });
374
+ *
375
+ * // Parent command with children
376
+ * deploy = $command({
377
+ * description: "Deploy the application",
378
+ * children: [this.vercel, this.cloudflare],
379
+ * handler: async () => {
380
+ * // Called when "deploy" is invoked without subcommand
381
+ * console.log("Available: deploy vercel, deploy cloudflare");
382
+ * }
383
+ * });
384
+ * }
385
+ * ```
386
+ *
387
+ * This allows CLI usage like:
388
+ * - `cli deploy vercel` - runs the vercel subcommand
389
+ * - `cli deploy cloudflare` - runs the cloudflare subcommand
390
+ * - `cli deploy` - runs the parent handler (shows available subcommands)
391
+ * - `cli deploy --help` - shows help with all available subcommands
392
+ */
387
393
  children?: CommandPrimitive<any, any>[];
388
394
  }
389
395
  declare class CommandPrimitive<T extends TObject = TObject, A extends TSchema = TSchema, E extends TObject = TObject> extends Primitive<CommandPrimitiveOptions<T, A, E>> {
@@ -393,16 +399,16 @@ declare class CommandPrimitive<T extends TObject = TObject, A extends TSchema =
393
399
  protected onInit(): void;
394
400
  get name(): string;
395
401
  /**
396
- * Get the child commands (subcommands) for this command.
397
- */
402
+ * Get the child commands (subcommands) for this command.
403
+ */
398
404
  get children(): CommandPrimitive<any, any>[];
399
405
  /**
400
- * Check if this command has child commands (is a parent command).
401
- */
406
+ * Check if this command has child commands (is a parent command).
407
+ */
402
408
  get hasChildren(): boolean;
403
409
  /**
404
- * Find a child command by name or alias.
405
- */
410
+ * Find a child command by name or alias.
411
+ */
406
412
  findChild(name: string): CommandPrimitive<any, any> | undefined;
407
413
  }
408
414
  interface CommandHandlerArgs<T extends TObject, A extends TSchema = TSchema, E extends TObject = TObject> {
@@ -414,31 +420,31 @@ interface CommandHandlerArgs<T extends TObject, A extends TSchema = TSchema, E e
414
420
  glob: typeof glob;
415
421
  fs: typeof fs;
416
422
  /**
417
- * The root directory where the command is executed.
418
- */
423
+ * The root directory where the command is executed.
424
+ */
419
425
  root: string;
420
426
  /**
421
- * Display help for the current command.
422
- *
423
- * Useful for parent commands with children to show available subcommands
424
- * when invoked without a specific subcommand.
425
- *
426
- * @example
427
- * ```ts
428
- * deploy = $command({
429
- * children: [this.vercel, this.cloudflare],
430
- * handler: async ({ help }) => {
431
- * help(); // Shows available subcommands
432
- * }
433
- * });
434
- * ```
435
- */
427
+ * Display help for the current command.
428
+ *
429
+ * Useful for parent commands with children to show available subcommands
430
+ * when invoked without a specific subcommand.
431
+ *
432
+ * @example
433
+ * ```ts
434
+ * deploy = $command({
435
+ * children: [this.vercel, this.cloudflare],
436
+ * handler: async ({ help }) => {
437
+ * help(); // Shows available subcommands
438
+ * }
439
+ * });
440
+ * ```
441
+ */
436
442
  help: () => void;
437
443
  /**
438
- * The current execution mode (e.g., "development", "production", "staging").
439
- *
440
- * Use --mode flag to set this value when running the command.
441
- */
444
+ * The current execution mode (e.g., "development", "production", "staging").
445
+ *
446
+ * Use --mode flag to set this value when running the command.
447
+ */
442
448
  mode?: string;
443
449
  }
444
450
  //#endregion
@@ -505,7 +511,7 @@ declare class CliProvider {
505
511
  CLI_DESCRIPTION: string;
506
512
  };
507
513
  protected readonly alepha: Alepha;
508
- protected readonly log: alepha_logger2.Logger;
514
+ protected readonly log: alepha_logger0.Logger;
509
515
  protected readonly color: ConsoleColorProvider;
510
516
  protected readonly runner: Runner;
511
517
  protected readonly asker: Asker;
@@ -527,21 +533,21 @@ declare class CliProvider {
527
533
  };
528
534
  protected readonly onReady: alepha1.HookPrimitive<"ready">;
529
535
  /**
530
- * Execute a command with the given argv.
531
- */
536
+ * Execute a command with the given argv.
537
+ */
532
538
  protected executeCommand(command: CommandPrimitive<TObject>, argv: string[], isRootCommand: boolean): Promise<void>;
533
539
  /**
534
- * Remove consumed command path arguments from argv.
535
- */
540
+ * Remove consumed command path arguments from argv.
541
+ */
536
542
  protected removeConsumedArgs(argv: string[], consumedArgs: string[]): string[];
537
543
  /**
538
- * Resolve a command from positional arguments.
539
- *
540
- * Supports:
541
- * 1. Space-separated subcommands: `deploy vercel` -> finds deploy command, then vercel child
542
- * 2. Colon notation (backwards compat): `deploy:vercel` -> finds command with name "deploy:vercel"
543
- * 3. Simple commands: `build` -> finds command with name "build"
544
- */
544
+ * Resolve a command from positional arguments.
545
+ *
546
+ * Supports:
547
+ * 1. Space-separated subcommands: `deploy vercel` -> finds deploy command, then vercel child
548
+ * 2. Colon notation (backwards compat): `deploy:vercel` -> finds command with name "deploy:vercel"
549
+ * 3. Simple commands: `build` -> finds command with name "build"
550
+ */
545
551
  protected resolveCommand(positionalArgs: string[]): {
546
552
  command: CommandPrimitive<TObject> | undefined;
547
553
  consumedArgs: string[];
@@ -549,16 +555,16 @@ declare class CliProvider {
549
555
  get commands(): CommandPrimitive<any>[];
550
556
  protected findCommand(name: string): CommandPrimitive<TObject> | undefined;
551
557
  /**
552
- * Find all pre-hooks for a command.
553
- */
558
+ * Find all pre-hooks for a command.
559
+ */
554
560
  protected findPreHooks(commandName: string): CommandPrimitive<TObject>[];
555
561
  /**
556
- * Find all post-hooks for a command.
557
- */
562
+ * Find all post-hooks for a command.
563
+ */
558
564
  protected findPostHooks(commandName: string): CommandPrimitive<TObject>[];
559
565
  /**
560
- * Get global flags (help only, root command flags are NOT global).
561
- */
566
+ * Get global flags (help only, root command flags are NOT global).
567
+ */
562
568
  protected getAllGlobalFlags(): Record<string, {
563
569
  aliases: string[];
564
570
  description?: string;
@@ -567,12 +573,12 @@ declare class CliProvider {
567
573
  protected parseCommandFlags(argv: string[], schema: TObject): Record<string, any>;
568
574
  protected parseCommandEnv(schema: TObject, commandName: string): Record<string, any>;
569
575
  /**
570
- * Parse --mode or -m flag from argv.
571
- */
576
+ * Parse --mode or -m flag from argv.
577
+ */
572
578
  protected parseModeFlag(argv: string[]): string | undefined;
573
579
  /**
574
- * Load environment files based on mode.
575
- */
580
+ * Load environment files based on mode.
581
+ */
576
582
  protected loadModeEnv(root: string, mode: string | undefined): Promise<void>;
577
583
  protected parseFlags(argv: string[], flagDefs: {
578
584
  key: string;
@@ -580,8 +586,8 @@ declare class CliProvider {
580
586
  schema: TSchema;
581
587
  }[]): Record<string, any>;
582
588
  /**
583
- * Get indices of argv elements that are consumed by flags (including space-separated values).
584
- */
589
+ * Get indices of argv elements that are consumed by flags (including space-separated values).
590
+ */
585
591
  protected getFlagConsumedIndices(argv: string[], flagDefs: {
586
592
  key: string;
587
593
  aliases: string[];
@@ -593,24 +599,24 @@ declare class CliProvider {
593
599
  protected getTypeName(schema: TSchema): string;
594
600
  printHelp(command?: CommandPrimitive<any>): void;
595
601
  /**
596
- * Generate colored args usage string for help display.
597
- */
602
+ * Generate colored args usage string for help display.
603
+ */
598
604
  protected generateColoredArgsUsage(schema?: TSchema): string;
599
605
  /**
600
- * Get the full command path (e.g., "deploy vercel" for a child command).
601
- */
606
+ * Get the full command path (e.g., "deploy vercel" for a child command).
607
+ */
602
608
  protected getCommandPath(command: CommandPrimitive<any>): string;
603
609
  /**
604
- * Find the parent command of a given command.
605
- */
610
+ * Find the parent command of a given command.
611
+ */
606
612
  protected findParentCommand(command: CommandPrimitive<any>): CommandPrimitive<any> | undefined;
607
613
  /**
608
- * Get top-level commands (commands that are not children of other commands).
609
- */
614
+ * Get top-level commands (commands that are not children of other commands).
615
+ */
610
616
  protected getTopLevelCommands(): CommandPrimitive<any>[];
611
617
  /**
612
- * Get max length for child command display.
613
- */
618
+ * Get max length for child command display.
619
+ */
614
620
  protected getMaxChildCmdLength(children: CommandPrimitive<any>[]): number;
615
621
  protected getMaxCmdLength(commands: CommandPrimitive[]): number;
616
622
  private getMaxFlagLength;
@@ -630,15 +636,13 @@ declare const AlephaCommand: alepha1.Service<alepha1.Module>;
630
636
  declare module "typebox" {
631
637
  interface StringOptions {
632
638
  /**
633
- * Additional aliases for the flags.
634
- *
635
- * @module alepha.command
636
- */
639
+ * Additional aliases for the flags.
640
+ *
641
+ * @module alepha.command
642
+ */
637
643
  aliases?: string[];
638
644
  }
639
- }
640
- //# sourceMappingURL=index.d.ts.map
641
-
645
+ } //# sourceMappingURL=index.d.ts.map
642
646
  //#endregion
643
647
  export { $command, AlephaCommand, AskMethod, AskOptions, Asker, CliProvider, CliProviderOptions, CommandError, CommandHandlerArgs, CommandPrimitive, CommandPrimitiveOptions, EnvUtils, PrettyPrint, RunOptions, Runner, RunnerMethod, Task, cliOptions };
644
648
  //# sourceMappingURL=index.d.ts.map