alepha 0.15.0 → 0.15.2

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 (551) hide show
  1. package/README.md +43 -98
  2. package/dist/api/audits/index.d.ts +630 -653
  3. package/dist/api/audits/index.d.ts.map +1 -1
  4. package/dist/api/audits/index.js +12 -35
  5. package/dist/api/audits/index.js.map +1 -1
  6. package/dist/api/files/index.d.ts +365 -358
  7. package/dist/api/files/index.d.ts.map +1 -1
  8. package/dist/api/files/index.js +12 -5
  9. package/dist/api/files/index.js.map +1 -1
  10. package/dist/api/jobs/index.d.ts +255 -248
  11. package/dist/api/jobs/index.d.ts.map +1 -1
  12. package/dist/api/jobs/index.js +10 -3
  13. package/dist/api/jobs/index.js.map +1 -1
  14. package/dist/api/keys/index.d.ts +413 -0
  15. package/dist/api/keys/index.d.ts.map +1 -0
  16. package/dist/api/keys/index.js +476 -0
  17. package/dist/api/keys/index.js.map +1 -0
  18. package/dist/api/notifications/index.browser.js +4 -4
  19. package/dist/api/notifications/index.browser.js.map +1 -1
  20. package/dist/api/notifications/index.d.ts +84 -78
  21. package/dist/api/notifications/index.d.ts.map +1 -1
  22. package/dist/api/notifications/index.js +14 -8
  23. package/dist/api/notifications/index.js.map +1 -1
  24. package/dist/api/parameters/index.d.ts +528 -535
  25. package/dist/api/parameters/index.d.ts.map +1 -1
  26. package/dist/api/parameters/index.js +30 -37
  27. package/dist/api/parameters/index.js.map +1 -1
  28. package/dist/api/users/index.d.ts +1221 -910
  29. package/dist/api/users/index.d.ts.map +1 -1
  30. package/dist/api/users/index.js +2556 -248
  31. package/dist/api/users/index.js.map +1 -1
  32. package/dist/api/verifications/index.d.ts +142 -136
  33. package/dist/api/verifications/index.d.ts.map +1 -1
  34. package/dist/api/verifications/index.js +12 -4
  35. package/dist/api/verifications/index.js.map +1 -1
  36. package/dist/batch/index.d.ts +142 -162
  37. package/dist/batch/index.d.ts.map +1 -1
  38. package/dist/batch/index.js +31 -44
  39. package/dist/batch/index.js.map +1 -1
  40. package/dist/bucket/index.d.ts +595 -171
  41. package/dist/bucket/index.d.ts.map +1 -1
  42. package/dist/bucket/index.js +1856 -12
  43. package/dist/bucket/index.js.map +1 -1
  44. package/dist/cache/core/index.d.ts +225 -53
  45. package/dist/cache/core/index.d.ts.map +1 -1
  46. package/dist/cache/core/index.js +213 -7
  47. package/dist/cache/core/index.js.map +1 -1
  48. package/dist/cache/redis/index.d.ts +1 -0
  49. package/dist/cache/redis/index.d.ts.map +1 -1
  50. package/dist/cache/redis/index.js +6 -2
  51. package/dist/cache/redis/index.js.map +1 -1
  52. package/dist/cli/index.d.ts +834 -226
  53. package/dist/cli/index.d.ts.map +1 -1
  54. package/dist/cli/index.js +2872 -417
  55. package/dist/cli/index.js.map +1 -1
  56. package/dist/command/index.d.ts +458 -310
  57. package/dist/command/index.d.ts.map +1 -1
  58. package/dist/command/index.js +2011 -76
  59. package/dist/command/index.js.map +1 -1
  60. package/dist/core/index.browser.js +309 -97
  61. package/dist/core/index.browser.js.map +1 -1
  62. package/dist/core/index.d.ts +796 -701
  63. package/dist/core/index.d.ts.map +1 -1
  64. package/dist/core/index.js +329 -97
  65. package/dist/core/index.js.map +1 -1
  66. package/dist/core/index.native.js +309 -97
  67. package/dist/core/index.native.js.map +1 -1
  68. package/dist/datetime/index.d.ts +59 -44
  69. package/dist/datetime/index.d.ts.map +1 -1
  70. package/dist/datetime/index.js +15 -0
  71. package/dist/datetime/index.js.map +1 -1
  72. package/dist/email/index.d.ts +314 -19
  73. package/dist/email/index.d.ts.map +1 -1
  74. package/dist/email/index.js +1852 -7
  75. package/dist/email/index.js.map +1 -1
  76. package/dist/fake/index.d.ts +5500 -5418
  77. package/dist/fake/index.d.ts.map +1 -1
  78. package/dist/fake/index.js +113 -42
  79. package/dist/fake/index.js.map +1 -1
  80. package/dist/lock/core/index.d.ts +219 -212
  81. package/dist/lock/core/index.d.ts.map +1 -1
  82. package/dist/lock/core/index.js +11 -4
  83. package/dist/lock/core/index.js.map +1 -1
  84. package/dist/lock/redis/index.d.ts.map +1 -1
  85. package/dist/logger/index.d.ts +41 -90
  86. package/dist/logger/index.d.ts.map +1 -1
  87. package/dist/logger/index.js +15 -68
  88. package/dist/logger/index.js.map +1 -1
  89. package/dist/mcp/index.d.ts +228 -230
  90. package/dist/mcp/index.d.ts.map +1 -1
  91. package/dist/mcp/index.js +32 -31
  92. package/dist/mcp/index.js.map +1 -1
  93. package/dist/orm/index.browser.js +12 -12
  94. package/dist/orm/index.browser.js.map +1 -1
  95. package/dist/orm/index.bun.js +90 -80
  96. package/dist/orm/index.bun.js.map +1 -1
  97. package/dist/orm/index.d.ts +1434 -1459
  98. package/dist/orm/index.d.ts.map +1 -1
  99. package/dist/orm/index.js +112 -130
  100. package/dist/orm/index.js.map +1 -1
  101. package/dist/queue/core/index.d.ts +262 -254
  102. package/dist/queue/core/index.d.ts.map +1 -1
  103. package/dist/queue/core/index.js +14 -6
  104. package/dist/queue/core/index.js.map +1 -1
  105. package/dist/queue/redis/index.d.ts.map +1 -1
  106. package/dist/react/auth/index.browser.js +108 -0
  107. package/dist/react/auth/index.browser.js.map +1 -0
  108. package/dist/react/auth/index.d.ts +100 -0
  109. package/dist/react/auth/index.d.ts.map +1 -0
  110. package/dist/react/auth/index.js +145 -0
  111. package/dist/react/auth/index.js.map +1 -0
  112. package/dist/react/core/index.d.ts +469 -0
  113. package/dist/react/core/index.d.ts.map +1 -0
  114. package/dist/react/core/index.js +464 -0
  115. package/dist/react/core/index.js.map +1 -0
  116. package/dist/react/form/index.d.ts +232 -0
  117. package/dist/react/form/index.d.ts.map +1 -0
  118. package/dist/react/form/index.js +432 -0
  119. package/dist/react/form/index.js.map +1 -0
  120. package/dist/react/head/index.browser.js +423 -0
  121. package/dist/react/head/index.browser.js.map +1 -0
  122. package/dist/react/head/index.d.ts +288 -0
  123. package/dist/react/head/index.d.ts.map +1 -0
  124. package/dist/react/head/index.js +465 -0
  125. package/dist/react/head/index.js.map +1 -0
  126. package/dist/react/i18n/index.d.ts +175 -0
  127. package/dist/react/i18n/index.d.ts.map +1 -0
  128. package/dist/react/i18n/index.js +224 -0
  129. package/dist/react/i18n/index.js.map +1 -0
  130. package/dist/react/router/index.browser.js +1980 -0
  131. package/dist/react/router/index.browser.js.map +1 -0
  132. package/dist/react/router/index.d.ts +2068 -0
  133. package/dist/react/router/index.d.ts.map +1 -0
  134. package/dist/react/router/index.js +4932 -0
  135. package/dist/react/router/index.js.map +1 -0
  136. package/dist/react/websocket/index.d.ts +117 -0
  137. package/dist/react/websocket/index.d.ts.map +1 -0
  138. package/dist/react/websocket/index.js +107 -0
  139. package/dist/react/websocket/index.js.map +1 -0
  140. package/dist/redis/index.bun.js +4 -0
  141. package/dist/redis/index.bun.js.map +1 -1
  142. package/dist/redis/index.d.ts +127 -130
  143. package/dist/redis/index.d.ts.map +1 -1
  144. package/dist/redis/index.js +16 -25
  145. package/dist/redis/index.js.map +1 -1
  146. package/dist/retry/index.d.ts +80 -71
  147. package/dist/retry/index.d.ts.map +1 -1
  148. package/dist/retry/index.js +11 -2
  149. package/dist/retry/index.js.map +1 -1
  150. package/dist/router/index.d.ts +6 -6
  151. package/dist/router/index.d.ts.map +1 -1
  152. package/dist/scheduler/index.d.ts +119 -28
  153. package/dist/scheduler/index.d.ts.map +1 -1
  154. package/dist/scheduler/index.js +404 -3
  155. package/dist/scheduler/index.js.map +1 -1
  156. package/dist/security/index.d.ts +642 -228
  157. package/dist/security/index.d.ts.map +1 -1
  158. package/dist/security/index.js +1579 -37
  159. package/dist/security/index.js.map +1 -1
  160. package/dist/server/auth/index.d.ts +1141 -111
  161. package/dist/server/auth/index.d.ts.map +1 -1
  162. package/dist/server/auth/index.js +1261 -25
  163. package/dist/server/auth/index.js.map +1 -1
  164. package/dist/server/cache/index.d.ts +63 -78
  165. package/dist/server/cache/index.d.ts.map +1 -1
  166. package/dist/server/cache/index.js +7 -22
  167. package/dist/server/cache/index.js.map +1 -1
  168. package/dist/server/compress/index.d.ts +13 -5
  169. package/dist/server/compress/index.d.ts.map +1 -1
  170. package/dist/server/compress/index.js +10 -2
  171. package/dist/server/compress/index.js.map +1 -1
  172. package/dist/server/cookies/index.d.ts +46 -22
  173. package/dist/server/cookies/index.d.ts.map +1 -1
  174. package/dist/server/cookies/index.js +7 -5
  175. package/dist/server/cookies/index.js.map +1 -1
  176. package/dist/server/core/index.d.ts +307 -196
  177. package/dist/server/core/index.d.ts.map +1 -1
  178. package/dist/server/core/index.js +271 -38
  179. package/dist/server/core/index.js.map +1 -1
  180. package/dist/server/cors/index.d.ts +24 -34
  181. package/dist/server/cors/index.d.ts.map +1 -1
  182. package/dist/server/cors/index.js +7 -21
  183. package/dist/server/cors/index.js.map +1 -1
  184. package/dist/server/health/index.d.ts +25 -19
  185. package/dist/server/health/index.d.ts.map +1 -1
  186. package/dist/server/health/index.js +8 -2
  187. package/dist/server/health/index.js.map +1 -1
  188. package/dist/server/helmet/index.d.ts +13 -5
  189. package/dist/server/helmet/index.d.ts.map +1 -1
  190. package/dist/server/helmet/index.js +11 -3
  191. package/dist/server/helmet/index.js.map +1 -1
  192. package/dist/server/links/index.browser.js +9 -1
  193. package/dist/server/links/index.browser.js.map +1 -1
  194. package/dist/server/links/index.d.ts +133 -128
  195. package/dist/server/links/index.d.ts.map +1 -1
  196. package/dist/server/links/index.js +24 -11
  197. package/dist/server/links/index.js.map +1 -1
  198. package/dist/server/metrics/index.d.ts +524 -4
  199. package/dist/server/metrics/index.d.ts.map +1 -1
  200. package/dist/server/metrics/index.js +4472 -7
  201. package/dist/server/metrics/index.js.map +1 -1
  202. package/dist/server/multipart/index.d.ts +15 -9
  203. package/dist/server/multipart/index.d.ts.map +1 -1
  204. package/dist/server/multipart/index.js +9 -3
  205. package/dist/server/multipart/index.js.map +1 -1
  206. package/dist/server/proxy/index.d.ts +110 -104
  207. package/dist/server/proxy/index.d.ts.map +1 -1
  208. package/dist/server/proxy/index.js +8 -2
  209. package/dist/server/proxy/index.js.map +1 -1
  210. package/dist/server/rate-limit/index.d.ts +46 -51
  211. package/dist/server/rate-limit/index.d.ts.map +1 -1
  212. package/dist/server/rate-limit/index.js +18 -55
  213. package/dist/server/rate-limit/index.js.map +1 -1
  214. package/dist/server/static/index.d.ts +181 -48
  215. package/dist/server/static/index.d.ts.map +1 -1
  216. package/dist/server/static/index.js +1848 -5
  217. package/dist/server/static/index.js.map +1 -1
  218. package/dist/server/swagger/index.d.ts +348 -53
  219. package/dist/server/swagger/index.d.ts.map +1 -1
  220. package/dist/server/swagger/index.js +1849 -6
  221. package/dist/server/swagger/index.js.map +1 -1
  222. package/dist/sms/index.d.ts +312 -18
  223. package/dist/sms/index.d.ts.map +1 -1
  224. package/dist/sms/index.js +1854 -10
  225. package/dist/sms/index.js.map +1 -1
  226. package/dist/system/index.browser.js +496 -0
  227. package/dist/system/index.browser.js.map +1 -0
  228. package/dist/system/index.d.ts +1158 -0
  229. package/dist/system/index.d.ts.map +1 -0
  230. package/dist/{file → system}/index.js +412 -20
  231. package/dist/system/index.js.map +1 -0
  232. package/dist/thread/index.d.ts +82 -73
  233. package/dist/thread/index.d.ts.map +1 -1
  234. package/dist/thread/index.js +13 -4
  235. package/dist/thread/index.js.map +1 -1
  236. package/dist/topic/core/index.d.ts +330 -323
  237. package/dist/topic/core/index.d.ts.map +1 -1
  238. package/dist/topic/core/index.js +12 -5
  239. package/dist/topic/core/index.js.map +1 -1
  240. package/dist/topic/redis/index.d.ts +6 -6
  241. package/dist/topic/redis/index.d.ts.map +1 -1
  242. package/dist/vite/index.d.ts +163 -5825
  243. package/dist/vite/index.d.ts.map +1 -1
  244. package/dist/vite/index.js +130 -477
  245. package/dist/vite/index.js.map +1 -1
  246. package/dist/websocket/index.browser.js +3 -3
  247. package/dist/websocket/index.browser.js.map +1 -1
  248. package/dist/websocket/index.d.ts +287 -283
  249. package/dist/websocket/index.d.ts.map +1 -1
  250. package/dist/websocket/index.js +15 -11
  251. package/dist/websocket/index.js.map +1 -1
  252. package/package.json +86 -17
  253. package/src/api/audits/index.ts +10 -33
  254. package/src/api/files/__tests__/$bucket.spec.ts +1 -1
  255. package/src/api/files/controllers/AdminFileStatsController.spec.ts +1 -1
  256. package/src/api/files/controllers/FileController.spec.ts +1 -1
  257. package/src/api/files/index.ts +10 -3
  258. package/src/api/files/jobs/FileJobs.spec.ts +1 -1
  259. package/src/api/files/services/FileService.spec.ts +1 -1
  260. package/src/api/jobs/index.ts +10 -3
  261. package/src/api/keys/controllers/AdminApiKeyController.ts +75 -0
  262. package/src/api/keys/controllers/ApiKeyController.ts +103 -0
  263. package/src/api/keys/entities/apiKeyEntity.ts +41 -0
  264. package/src/api/keys/index.ts +49 -0
  265. package/src/api/keys/schemas/adminApiKeyQuerySchema.ts +7 -0
  266. package/src/api/keys/schemas/adminApiKeyResourceSchema.ts +17 -0
  267. package/src/api/keys/schemas/createApiKeyBodySchema.ts +7 -0
  268. package/src/api/keys/schemas/createApiKeyResponseSchema.ts +11 -0
  269. package/src/api/keys/schemas/listApiKeyResponseSchema.ts +15 -0
  270. package/src/api/keys/schemas/revokeApiKeyParamsSchema.ts +5 -0
  271. package/src/api/keys/schemas/revokeApiKeyResponseSchema.ts +5 -0
  272. package/src/api/keys/services/ApiKeyService.spec.ts +553 -0
  273. package/src/api/keys/services/ApiKeyService.ts +306 -0
  274. package/src/api/logs/TODO.md +52 -0
  275. package/src/api/notifications/index.ts +10 -4
  276. package/src/api/parameters/index.ts +9 -30
  277. package/src/api/parameters/primitives/$config.ts +12 -4
  278. package/src/api/parameters/services/ConfigStore.ts +9 -3
  279. package/src/api/users/__tests__/ApiKeys-integration.spec.ts +1035 -0
  280. package/src/api/users/__tests__/ApiKeys.spec.ts +401 -0
  281. package/src/api/users/index.ts +14 -3
  282. package/src/api/users/primitives/$realm.ts +33 -5
  283. package/src/api/users/providers/RealmProvider.ts +1 -12
  284. package/src/api/users/services/SessionService.ts +1 -11
  285. package/src/api/verifications/controllers/VerificationController.ts +2 -0
  286. package/src/api/verifications/index.ts +10 -4
  287. package/src/batch/index.ts +9 -36
  288. package/src/batch/primitives/$batch.ts +0 -8
  289. package/src/batch/providers/BatchProvider.ts +29 -2
  290. package/src/bucket/__tests__/shared.ts +1 -1
  291. package/src/bucket/index.ts +13 -6
  292. package/src/bucket/primitives/$bucket.ts +1 -1
  293. package/src/bucket/providers/LocalFileStorageProvider.ts +1 -1
  294. package/src/bucket/providers/MemoryFileStorageProvider.ts +1 -1
  295. package/src/cache/core/__tests__/shared.ts +30 -0
  296. package/src/cache/core/index.ts +11 -6
  297. package/src/cache/core/primitives/$cache.spec.ts +5 -0
  298. package/src/cache/core/providers/CacheProvider.ts +17 -0
  299. package/src/cache/core/providers/MemoryCacheProvider.ts +300 -1
  300. package/src/cache/redis/__tests__/cache-redis.spec.ts +5 -0
  301. package/src/cache/redis/providers/RedisCacheProvider.ts +9 -0
  302. package/src/cli/apps/AlephaCli.ts +3 -16
  303. package/src/cli/apps/AlephaPackageBuilderCli.ts +10 -2
  304. package/src/cli/atoms/appEntryOptions.ts +13 -0
  305. package/src/cli/atoms/buildOptions.ts +1 -1
  306. package/src/cli/atoms/changelogOptions.ts +1 -1
  307. package/src/cli/commands/build.ts +64 -52
  308. package/src/cli/commands/db.ts +17 -11
  309. package/src/cli/commands/deploy.ts +1 -1
  310. package/src/cli/commands/dev.ts +13 -49
  311. package/src/cli/commands/gen/env.ts +6 -3
  312. package/src/cli/commands/gen/openapi.ts +5 -2
  313. package/src/cli/commands/init.spec.ts +544 -0
  314. package/src/cli/commands/init.ts +101 -58
  315. package/src/cli/commands/lint.ts +8 -2
  316. package/src/cli/commands/typecheck.ts +11 -0
  317. package/src/cli/defineConfig.ts +9 -0
  318. package/src/cli/index.ts +2 -1
  319. package/src/cli/providers/AppEntryProvider.ts +131 -0
  320. package/src/cli/providers/ViteBuildProvider.ts +40 -0
  321. package/src/cli/providers/ViteDevServerProvider.ts +378 -0
  322. package/src/cli/services/AlephaCliUtils.ts +39 -93
  323. package/src/cli/services/PackageManagerUtils.ts +140 -17
  324. package/src/cli/services/ProjectScaffolder.ts +169 -101
  325. package/src/cli/services/ViteUtils.ts +82 -0
  326. package/src/cli/{assets/claudeMd.ts → templates/agentMd.ts} +41 -28
  327. package/src/cli/{assets → templates}/apiHelloControllerTs.ts +2 -1
  328. package/src/cli/{assets → templates}/biomeJson.ts +2 -1
  329. package/src/cli/{assets → templates}/dummySpecTs.ts +2 -1
  330. package/src/cli/{assets → templates}/editorconfig.ts +2 -1
  331. package/src/cli/templates/gitignore.ts +39 -0
  332. package/src/cli/{assets → templates}/mainBrowserTs.ts +2 -1
  333. package/src/cli/templates/mainCss.ts +33 -0
  334. package/src/cli/templates/mainServerTs.ts +33 -0
  335. package/src/cli/{assets → templates}/tsconfigJson.ts +2 -1
  336. package/src/cli/templates/webAppRouterTs.ts +50 -0
  337. package/src/cli/templates/webHelloComponentTsx.ts +20 -0
  338. package/src/command/helpers/Runner.spec.ts +4 -0
  339. package/src/command/helpers/Runner.ts +3 -21
  340. package/src/command/index.ts +12 -4
  341. package/src/command/providers/CliProvider.spec.ts +1067 -0
  342. package/src/command/providers/CliProvider.ts +203 -40
  343. package/src/core/Alepha.ts +3 -9
  344. package/src/core/__tests__/Alepha-start.spec.ts +4 -4
  345. package/src/core/helpers/jsonSchemaToTypeBox.spec.ts +771 -0
  346. package/src/core/helpers/jsonSchemaToTypeBox.ts +62 -10
  347. package/src/core/index.shared.ts +1 -0
  348. package/src/core/index.ts +20 -0
  349. package/src/core/primitives/$module.ts +12 -0
  350. package/src/core/providers/EventManager.spec.ts +0 -71
  351. package/src/core/providers/EventManager.ts +3 -15
  352. package/src/core/providers/Json.ts +2 -14
  353. package/src/core/providers/KeylessJsonSchemaCodec.spec.ts +257 -0
  354. package/src/core/providers/KeylessJsonSchemaCodec.ts +396 -14
  355. package/src/core/providers/SchemaValidator.spec.ts +236 -0
  356. package/src/datetime/index.ts +15 -0
  357. package/src/email/index.ts +10 -5
  358. package/src/email/providers/LocalEmailProvider.spec.ts +1 -1
  359. package/src/email/providers/LocalEmailProvider.ts +1 -1
  360. package/src/fake/__tests__/keyName.example.ts +1 -1
  361. package/src/fake/__tests__/keyName.spec.ts +5 -5
  362. package/src/fake/index.ts +9 -6
  363. package/src/fake/providers/FakeProvider.spec.ts +258 -40
  364. package/src/fake/providers/FakeProvider.ts +133 -19
  365. package/src/lock/core/index.ts +11 -4
  366. package/src/logger/index.ts +17 -66
  367. package/src/logger/providers/PrettyFormatterProvider.ts +0 -9
  368. package/src/mcp/errors/McpError.ts +30 -0
  369. package/src/mcp/index.ts +13 -27
  370. package/src/mcp/transports/SseMcpTransport.ts +6 -7
  371. package/src/orm/__tests__/PostgresProvider.spec.ts +2 -2
  372. package/src/orm/index.browser.ts +2 -2
  373. package/src/orm/index.bun.ts +4 -2
  374. package/src/orm/index.ts +21 -47
  375. package/src/orm/providers/DrizzleKitProvider.ts +3 -5
  376. package/src/orm/providers/drivers/BunSqliteProvider.ts +1 -0
  377. package/src/orm/services/Repository.ts +18 -3
  378. package/src/queue/core/index.ts +14 -6
  379. package/src/react/auth/__tests__/$auth.spec.ts +202 -0
  380. package/src/react/auth/hooks/useAuth.ts +32 -0
  381. package/src/react/auth/index.browser.ts +13 -0
  382. package/src/react/auth/index.shared.ts +2 -0
  383. package/src/react/auth/index.ts +48 -0
  384. package/src/react/auth/providers/ReactAuthProvider.ts +16 -0
  385. package/src/react/auth/services/ReactAuth.ts +135 -0
  386. package/src/react/core/__tests__/Router.spec.tsx +169 -0
  387. package/src/react/core/components/ClientOnly.tsx +49 -0
  388. package/src/react/core/components/ErrorBoundary.tsx +73 -0
  389. package/src/react/core/contexts/AlephaContext.ts +7 -0
  390. package/src/react/core/contexts/AlephaProvider.tsx +42 -0
  391. package/src/react/core/hooks/useAction.browser.spec.tsx +569 -0
  392. package/src/react/core/hooks/useAction.ts +480 -0
  393. package/src/react/core/hooks/useAlepha.ts +26 -0
  394. package/src/react/core/hooks/useClient.ts +17 -0
  395. package/src/react/core/hooks/useEvents.ts +51 -0
  396. package/src/react/core/hooks/useInject.ts +12 -0
  397. package/src/react/core/hooks/useStore.ts +52 -0
  398. package/src/react/core/index.ts +90 -0
  399. package/src/react/form/components/FormState.tsx +17 -0
  400. package/src/react/form/errors/FormValidationError.ts +18 -0
  401. package/src/react/form/hooks/useForm.browser.spec.tsx +366 -0
  402. package/src/react/form/hooks/useForm.ts +47 -0
  403. package/src/react/form/hooks/useFormState.ts +130 -0
  404. package/src/react/form/index.ts +44 -0
  405. package/src/react/form/services/FormModel.ts +614 -0
  406. package/src/react/head/helpers/SeoExpander.spec.ts +203 -0
  407. package/src/react/head/helpers/SeoExpander.ts +142 -0
  408. package/src/react/head/hooks/useHead.spec.tsx +288 -0
  409. package/src/react/head/hooks/useHead.ts +62 -0
  410. package/src/react/head/index.browser.ts +26 -0
  411. package/src/react/head/index.ts +44 -0
  412. package/src/react/head/interfaces/Head.ts +105 -0
  413. package/src/react/head/primitives/$head.ts +25 -0
  414. package/src/react/head/providers/BrowserHeadProvider.browser.spec.ts +196 -0
  415. package/src/react/head/providers/BrowserHeadProvider.ts +212 -0
  416. package/src/react/head/providers/HeadProvider.ts +168 -0
  417. package/src/react/head/providers/ServerHeadProvider.ts +31 -0
  418. package/src/react/i18n/__tests__/integration.spec.tsx +239 -0
  419. package/src/react/i18n/components/Localize.spec.tsx +357 -0
  420. package/src/react/i18n/components/Localize.tsx +35 -0
  421. package/src/react/i18n/hooks/useI18n.browser.spec.tsx +438 -0
  422. package/src/react/i18n/hooks/useI18n.ts +18 -0
  423. package/src/react/i18n/index.ts +41 -0
  424. package/src/react/i18n/primitives/$dictionary.ts +69 -0
  425. package/src/react/i18n/providers/I18nProvider.spec.ts +389 -0
  426. package/src/react/i18n/providers/I18nProvider.ts +278 -0
  427. package/src/react/router/__tests__/page-head-browser.browser.spec.ts +95 -0
  428. package/src/react/router/__tests__/page-head.spec.ts +48 -0
  429. package/src/react/router/__tests__/seo-head.spec.ts +125 -0
  430. package/src/react/router/atoms/ssrManifestAtom.ts +58 -0
  431. package/src/react/router/components/ErrorViewer.tsx +872 -0
  432. package/src/react/router/components/Link.tsx +23 -0
  433. package/src/react/router/components/NestedView.tsx +223 -0
  434. package/src/react/router/components/NotFound.tsx +30 -0
  435. package/src/react/router/constants/PAGE_PRELOAD_KEY.ts +6 -0
  436. package/src/react/router/contexts/RouterLayerContext.ts +12 -0
  437. package/src/react/router/errors/Redirection.ts +28 -0
  438. package/src/react/router/hooks/useActive.ts +52 -0
  439. package/src/react/router/hooks/useQueryParams.ts +63 -0
  440. package/src/react/router/hooks/useRouter.ts +20 -0
  441. package/src/react/router/hooks/useRouterState.ts +11 -0
  442. package/src/react/router/index.browser.ts +45 -0
  443. package/src/react/router/index.shared.ts +19 -0
  444. package/src/react/router/index.ts +142 -0
  445. package/src/react/router/primitives/$page.browser.spec.tsx +851 -0
  446. package/src/react/router/primitives/$page.spec.tsx +708 -0
  447. package/src/react/router/primitives/$page.ts +497 -0
  448. package/src/react/router/providers/ReactBrowserProvider.ts +309 -0
  449. package/src/react/router/providers/ReactBrowserRendererProvider.ts +25 -0
  450. package/src/react/router/providers/ReactBrowserRouterProvider.ts +168 -0
  451. package/src/react/router/providers/ReactPageProvider.ts +726 -0
  452. package/src/react/router/providers/ReactServerProvider.spec.tsx +316 -0
  453. package/src/react/router/providers/ReactServerProvider.ts +558 -0
  454. package/src/react/router/providers/ReactServerTemplateProvider.ts +979 -0
  455. package/src/react/router/providers/SSRManifestProvider.ts +334 -0
  456. package/src/react/router/services/ReactPageServerService.ts +48 -0
  457. package/src/react/router/services/ReactPageService.ts +27 -0
  458. package/src/react/router/services/ReactRouter.ts +262 -0
  459. package/src/react/websocket/hooks/useRoom.tsx +242 -0
  460. package/src/react/websocket/index.ts +7 -0
  461. package/src/redis/__tests__/redis.spec.ts +13 -0
  462. package/src/redis/index.ts +9 -25
  463. package/src/redis/providers/BunRedisProvider.ts +9 -0
  464. package/src/redis/providers/NodeRedisProvider.ts +8 -0
  465. package/src/redis/providers/RedisProvider.ts +16 -0
  466. package/src/retry/index.ts +11 -2
  467. package/src/router/index.ts +15 -0
  468. package/src/scheduler/index.ts +11 -2
  469. package/src/security/__tests__/BasicAuth.spec.ts +2 -0
  470. package/src/security/__tests__/ServerSecurityProvider.spec.ts +13 -5
  471. package/src/security/index.ts +15 -10
  472. package/src/security/interfaces/IssuerResolver.ts +27 -0
  473. package/src/security/primitives/$issuer.ts +55 -0
  474. package/src/security/providers/SecurityProvider.ts +179 -0
  475. package/src/security/providers/ServerBasicAuthProvider.ts +6 -2
  476. package/src/security/providers/ServerSecurityProvider.ts +36 -22
  477. package/src/server/auth/index.ts +12 -7
  478. package/src/server/cache/index.ts +7 -22
  479. package/src/server/compress/index.ts +10 -2
  480. package/src/server/cookies/index.ts +7 -5
  481. package/src/server/cookies/primitives/$cookie.ts +33 -11
  482. package/src/server/core/index.ts +17 -7
  483. package/src/server/core/interfaces/ServerRequest.ts +83 -1
  484. package/src/server/core/primitives/$action.spec.ts +1 -1
  485. package/src/server/core/primitives/$action.ts +8 -3
  486. package/src/server/core/providers/BunHttpServerProvider.ts +1 -1
  487. package/src/server/core/providers/NodeHttpServerProvider.spec.ts +125 -0
  488. package/src/server/core/providers/NodeHttpServerProvider.ts +77 -22
  489. package/src/server/core/providers/ServerLoggerProvider.ts +2 -2
  490. package/src/server/core/providers/ServerProvider.ts +9 -12
  491. package/src/server/core/services/ServerRequestParser.spec.ts +520 -0
  492. package/src/server/core/services/ServerRequestParser.ts +306 -13
  493. package/src/server/cors/index.ts +7 -21
  494. package/src/server/cors/primitives/$cors.ts +6 -2
  495. package/src/server/health/index.ts +8 -2
  496. package/src/server/helmet/index.ts +11 -3
  497. package/src/server/links/atoms/apiLinksAtom.ts +7 -0
  498. package/src/server/links/index.browser.ts +2 -0
  499. package/src/server/links/index.ts +13 -6
  500. package/src/server/metrics/index.ts +10 -3
  501. package/src/server/multipart/index.ts +9 -3
  502. package/src/server/proxy/index.ts +8 -2
  503. package/src/server/rate-limit/index.ts +21 -25
  504. package/src/server/rate-limit/primitives/$rateLimit.ts +6 -2
  505. package/src/server/rate-limit/providers/ServerRateLimitProvider.spec.ts +38 -14
  506. package/src/server/rate-limit/providers/ServerRateLimitProvider.ts +22 -56
  507. package/src/server/static/index.ts +8 -2
  508. package/src/server/static/providers/ServerStaticProvider.ts +1 -1
  509. package/src/server/swagger/index.ts +9 -4
  510. package/src/server/swagger/providers/ServerSwaggerProvider.ts +1 -1
  511. package/src/sms/index.ts +9 -5
  512. package/src/sms/providers/LocalSmsProvider.spec.ts +1 -1
  513. package/src/sms/providers/LocalSmsProvider.ts +1 -1
  514. package/src/system/index.browser.ts +11 -0
  515. package/src/system/index.ts +62 -0
  516. package/src/{file → system}/providers/FileSystemProvider.ts +16 -0
  517. package/src/{file → system}/providers/MemoryFileSystemProvider.ts +116 -3
  518. package/src/system/providers/MemoryShellProvider.ts +164 -0
  519. package/src/{file → system}/providers/NodeFileSystemProvider.spec.ts +2 -2
  520. package/src/{file → system}/providers/NodeFileSystemProvider.ts +36 -0
  521. package/src/system/providers/NodeShellProvider.ts +184 -0
  522. package/src/system/providers/ShellProvider.ts +74 -0
  523. package/src/{file → system}/services/FileDetector.spec.ts +2 -2
  524. package/src/thread/index.ts +11 -2
  525. package/src/topic/core/index.ts +12 -5
  526. package/src/vite/index.ts +3 -2
  527. package/src/vite/tasks/buildClient.ts +2 -8
  528. package/src/vite/tasks/buildServer.ts +84 -21
  529. package/src/vite/tasks/copyAssets.ts +5 -4
  530. package/src/vite/tasks/generateSitemap.ts +64 -23
  531. package/src/vite/tasks/index.ts +0 -2
  532. package/src/vite/tasks/prerenderPages.ts +49 -24
  533. package/src/websocket/index.ts +12 -8
  534. package/dist/file/index.d.ts +0 -839
  535. package/dist/file/index.d.ts.map +0 -1
  536. package/dist/file/index.js.map +0 -1
  537. package/src/cli/assets/indexHtml.ts +0 -15
  538. package/src/cli/assets/mainServerTs.ts +0 -24
  539. package/src/cli/assets/webAppRouterTs.ts +0 -15
  540. package/src/cli/assets/webHelloComponentTsx.ts +0 -16
  541. package/src/cli/commands/format.ts +0 -23
  542. package/src/file/index.ts +0 -43
  543. package/src/vite/helpers/boot.ts +0 -117
  544. package/src/vite/plugins/viteAlephaDev.ts +0 -177
  545. package/src/vite/tasks/devServer.ts +0 -71
  546. package/src/vite/tasks/runAlepha.ts +0 -270
  547. /package/dist/orm/{chunk-DtkW-qnP.js → chunk-DH6iiROE.js} +0 -0
  548. /package/src/cli/{assets → templates}/apiIndexTs.ts +0 -0
  549. /package/src/cli/{assets → templates}/webIndexTs.ts +0 -0
  550. /package/src/{file → system}/errors/FileError.ts +0 -0
  551. /package/src/{file → system}/services/FileDetector.ts +0 -0
@@ -0,0 +1,1158 @@
1
+ import * as alepha0 from "alepha";
2
+ import { FileLike, Json, StreamLike } from "alepha";
3
+ import { Readable } from "node:stream";
4
+ import * as alepha_logger0 from "alepha/logger";
5
+
6
+ //#region ../../src/system/errors/FileError.d.ts
7
+ declare class FileError extends Error {
8
+ constructor(message: string, cause?: Error);
9
+ }
10
+ //#endregion
11
+ //#region ../../src/system/providers/FileSystemProvider.d.ts
12
+ /**
13
+ * Options for creating a file from a URL
14
+ */
15
+ interface CreateFileFromUrlOptions {
16
+ /**
17
+ * The URL to load the file from (file://, http://, or https://)
18
+ */
19
+ url: string;
20
+ /**
21
+ * The MIME type of the file (optional, will be detected from filename if not provided)
22
+ */
23
+ type?: string;
24
+ /**
25
+ * The name of the file (optional, will be extracted from URL if not provided)
26
+ */
27
+ name?: string;
28
+ }
29
+ /**
30
+ * Options for creating a file from a path (URL with file:// scheme)
31
+ */
32
+ interface CreateFileFromPathOptions {
33
+ /**
34
+ * The path to the file on the local filesystem
35
+ */
36
+ path: string;
37
+ /**
38
+ * The MIME type of the file (optional, will be detected from filename if not provided)
39
+ */
40
+ type?: string;
41
+ /**
42
+ * The name of the file (optional, will be extracted from URL if not provided)
43
+ */
44
+ name?: string;
45
+ }
46
+ /**
47
+ * Options for creating a file from a Buffer
48
+ */
49
+ interface CreateFileFromBufferOptions {
50
+ /**
51
+ * The Buffer containing the file data
52
+ */
53
+ buffer: Buffer;
54
+ /**
55
+ * The MIME type of the file (optional, will be detected from name if not provided)
56
+ */
57
+ type?: string;
58
+ /**
59
+ * The name of the file (required for proper content type detection)
60
+ */
61
+ name?: string;
62
+ }
63
+ /**
64
+ * Options for creating a file from a stream
65
+ */
66
+ interface CreateFileFromStreamOptions {
67
+ /**
68
+ * The readable stream containing the file data
69
+ */
70
+ stream: StreamLike;
71
+ /**
72
+ * The MIME type of the file (optional, will be detected from name if not provided)
73
+ */
74
+ type?: string;
75
+ /**
76
+ * The name of the file (required for proper content type detection)
77
+ */
78
+ name?: string;
79
+ /**
80
+ * The size of the file in bytes (optional)
81
+ */
82
+ size?: number;
83
+ }
84
+ /**
85
+ * Options for creating a file from text content
86
+ */
87
+ interface CreateFileFromTextOptions {
88
+ /**
89
+ * The text content to create the file from
90
+ */
91
+ text: string;
92
+ /**
93
+ * The MIME type of the file (default: text/plain)
94
+ */
95
+ type?: string;
96
+ /**
97
+ * The name of the file (default: "file.txt")
98
+ */
99
+ name?: string;
100
+ }
101
+ interface CreateFileFromResponseOptions {
102
+ /**
103
+ * The Response object containing the file data
104
+ */
105
+ response: Response;
106
+ /**
107
+ * Override the name (optional, uses filename from Content-Disposition header if not provided)
108
+ */
109
+ name?: string;
110
+ /**
111
+ * Override the MIME type (optional, uses file.type if not provided)
112
+ */
113
+ type?: string;
114
+ }
115
+ /**
116
+ * Options for creating a file from a Web File object
117
+ */
118
+ interface CreateFileFromWebFileOptions {
119
+ /**
120
+ * The Web File object
121
+ */
122
+ file: File;
123
+ /**
124
+ * Override the MIME type (optional, uses file.type if not provided)
125
+ */
126
+ type?: string;
127
+ /**
128
+ * Override the name (optional, uses file.name if not provided)
129
+ */
130
+ name?: string;
131
+ /**
132
+ * Override the size (optional, uses file.size if not provided)
133
+ */
134
+ size?: number;
135
+ }
136
+ /**
137
+ * Options for creating a file from an ArrayBuffer
138
+ */
139
+ interface CreateFileFromArrayBufferOptions {
140
+ /**
141
+ * The ArrayBuffer containing the file data
142
+ */
143
+ arrayBuffer: ArrayBuffer;
144
+ /**
145
+ * The MIME type of the file (optional, will be detected from name if not provided)
146
+ */
147
+ type?: string;
148
+ /**
149
+ * The name of the file (required for proper content type detection)
150
+ */
151
+ name?: string;
152
+ }
153
+ /**
154
+ * Union type for all createFile options
155
+ */
156
+ type CreateFileOptions = CreateFileFromUrlOptions | CreateFileFromPathOptions | CreateFileFromBufferOptions | CreateFileFromStreamOptions | CreateFileFromTextOptions | CreateFileFromWebFileOptions | CreateFileFromResponseOptions | CreateFileFromArrayBufferOptions;
157
+ /**
158
+ * Options for rm (remove) operation
159
+ */
160
+ interface RmOptions {
161
+ /**
162
+ * If true, removes directories and their contents recursively
163
+ */
164
+ recursive?: boolean;
165
+ /**
166
+ * If true, no error will be thrown if the path does not exist
167
+ */
168
+ force?: boolean;
169
+ }
170
+ /**
171
+ * Options for cp (copy) operation
172
+ */
173
+ interface CpOptions {
174
+ /**
175
+ * If true, copy directories recursively
176
+ */
177
+ recursive?: boolean;
178
+ /**
179
+ * If true, overwrite existing destination
180
+ */
181
+ force?: boolean;
182
+ }
183
+ /**
184
+ * Options for mkdir operation
185
+ */
186
+ interface MkdirOptions {
187
+ /**
188
+ * If true, creates parent directories as needed
189
+ */
190
+ recursive?: boolean;
191
+ /**
192
+ * File mode (permission and sticky bits)
193
+ */
194
+ mode?: number;
195
+ }
196
+ /**
197
+ * Options for ls (list) operation
198
+ */
199
+ interface LsOptions {
200
+ /**
201
+ * If true, list contents of directories recursively
202
+ */
203
+ recursive?: boolean;
204
+ /**
205
+ * If true, include hidden files (starting with .)
206
+ */
207
+ hidden?: boolean;
208
+ }
209
+ /**
210
+ * FileSystem interface providing utilities for working with files.
211
+ */
212
+ declare abstract class FileSystemProvider {
213
+ /**
214
+ * Joins multiple path segments into a single path.
215
+ *
216
+ * @param paths - The path segments to join
217
+ * @returns The joined path
218
+ */
219
+ abstract join(...paths: string[]): string;
220
+ /**
221
+ * Creates a FileLike object from various sources.
222
+ *
223
+ * @param options - Options for creating the file
224
+ * @returns A FileLike object
225
+ */
226
+ abstract createFile(options: CreateFileOptions): FileLike;
227
+ /**
228
+ * Removes a file or directory.
229
+ *
230
+ * @param path - The path to remove
231
+ * @param options - Remove options
232
+ */
233
+ abstract rm(path: string, options?: RmOptions): Promise<void>;
234
+ /**
235
+ * Copies a file or directory.
236
+ *
237
+ * @param src - Source path
238
+ * @param dest - Destination path
239
+ * @param options - Copy options
240
+ */
241
+ abstract cp(src: string, dest: string, options?: CpOptions): Promise<void>;
242
+ /**
243
+ * Moves/renames a file or directory.
244
+ *
245
+ * @param src - Source path
246
+ * @param dest - Destination path
247
+ */
248
+ abstract mv(src: string, dest: string): Promise<void>;
249
+ /**
250
+ * Creates a directory.
251
+ *
252
+ * @param path - The directory path to create
253
+ * @param options - Mkdir options
254
+ */
255
+ abstract mkdir(path: string, options?: MkdirOptions): Promise<void>;
256
+ /**
257
+ * Lists files in a directory.
258
+ *
259
+ * @param path - The directory path to list
260
+ * @param options - List options
261
+ * @returns Array of filenames
262
+ */
263
+ abstract ls(path: string, options?: LsOptions): Promise<string[]>;
264
+ /**
265
+ * Checks if a file or directory exists.
266
+ *
267
+ * @param path - The path to check
268
+ * @returns True if the path exists, false otherwise
269
+ */
270
+ abstract exists(path: string): Promise<boolean>;
271
+ /**
272
+ * Reads the content of a file.
273
+ *
274
+ * @param path - The file path to read
275
+ * @returns The file content as a Buffer
276
+ */
277
+ abstract readFile(path: string): Promise<Buffer>;
278
+ /**
279
+ * Writes data to a file.
280
+ *
281
+ * @param path - The file path to write to
282
+ * @param data - The data to write (Buffer or string)
283
+ */
284
+ abstract writeFile(path: string, data: Uint8Array | Buffer | string | FileLike): Promise<void>;
285
+ /**
286
+ * Reads the content of a file as a string.
287
+ *
288
+ * @param path - The file path to read
289
+ * @returns The file content as a string
290
+ */
291
+ abstract readTextFile(path: string): Promise<string>;
292
+ /**
293
+ * Reads the content of a file as JSON.
294
+ *
295
+ * @param path - The file path to read
296
+ * @returns The parsed JSON content
297
+ */
298
+ abstract readJsonFile<T = unknown>(path: string): Promise<T>;
299
+ }
300
+ //#endregion
301
+ //#region ../../src/system/providers/MemoryFileSystemProvider.d.ts
302
+ interface MemoryFileSystemProviderOptions {
303
+ /**
304
+ * Error to throw on mkdir operations (for testing error handling)
305
+ */
306
+ mkdirError?: Error | null;
307
+ /**
308
+ * Error to throw on writeFile operations (for testing error handling)
309
+ */
310
+ writeFileError?: Error | null;
311
+ /**
312
+ * Error to throw on readFile operations (for testing error handling)
313
+ */
314
+ readFileError?: Error | null;
315
+ }
316
+ /**
317
+ * In-memory implementation of FileSystemProvider for testing.
318
+ *
319
+ * This provider stores all files and directories in memory, making it ideal for
320
+ * unit tests that need to verify file operations without touching the real file system.
321
+ *
322
+ * @example
323
+ * ```typescript
324
+ * // In tests, substitute the real FileSystemProvider with MemoryFileSystemProvider
325
+ * const alepha = Alepha.create().with({
326
+ * provide: FileSystemProvider,
327
+ * use: MemoryFileSystemProvider,
328
+ * });
329
+ *
330
+ * // Run code that uses FileSystemProvider
331
+ * const service = alepha.inject(MyService);
332
+ * await service.saveFile("test.txt", "Hello World");
333
+ *
334
+ * // Verify the file was written
335
+ * const memoryFs = alepha.inject(MemoryFileSystemProvider);
336
+ * expect(memoryFs.files.get("test.txt")?.toString()).toBe("Hello World");
337
+ * ```
338
+ */
339
+ declare class MemoryFileSystemProvider implements FileSystemProvider {
340
+ protected json: Json;
341
+ /**
342
+ * In-memory storage for files (path -> content)
343
+ */
344
+ files: Map<string, Buffer<ArrayBufferLike>>;
345
+ /**
346
+ * In-memory storage for directories
347
+ */
348
+ directories: Set<string>;
349
+ /**
350
+ * Track mkdir calls for test assertions
351
+ */
352
+ mkdirCalls: Array<{
353
+ path: string;
354
+ options?: MkdirOptions;
355
+ }>;
356
+ /**
357
+ * Track writeFile calls for test assertions
358
+ */
359
+ writeFileCalls: Array<{
360
+ path: string;
361
+ data: string;
362
+ }>;
363
+ /**
364
+ * Track readFile calls for test assertions
365
+ */
366
+ readFileCalls: Array<string>;
367
+ /**
368
+ * Track rm calls for test assertions
369
+ */
370
+ rmCalls: Array<{
371
+ path: string;
372
+ options?: RmOptions;
373
+ }>;
374
+ /**
375
+ * Track join calls for test assertions
376
+ */
377
+ joinCalls: Array<string[]>;
378
+ /**
379
+ * Error to throw on mkdir (for testing error handling)
380
+ */
381
+ mkdirError: Error | null;
382
+ /**
383
+ * Error to throw on writeFile (for testing error handling)
384
+ */
385
+ writeFileError: Error | null;
386
+ /**
387
+ * Error to throw on readFile (for testing error handling)
388
+ */
389
+ readFileError: Error | null;
390
+ constructor(options?: MemoryFileSystemProviderOptions);
391
+ /**
392
+ * Join path segments using forward slashes.
393
+ * Uses Node's path.join for proper normalization (handles .. and .)
394
+ */
395
+ join(...paths: string[]): string;
396
+ /**
397
+ * Create a FileLike object from various sources.
398
+ */
399
+ createFile(options: CreateFileOptions): FileLike;
400
+ /**
401
+ * Remove a file or directory from memory.
402
+ */
403
+ rm(path: string, options?: RmOptions): Promise<void>;
404
+ /**
405
+ * Copy a file or directory in memory.
406
+ */
407
+ cp(src: string, dest: string, options?: CpOptions): Promise<void>;
408
+ /**
409
+ * Move/rename a file or directory in memory.
410
+ */
411
+ mv(src: string, dest: string): Promise<void>;
412
+ /**
413
+ * Create a directory in memory.
414
+ */
415
+ mkdir(path: string, options?: MkdirOptions): Promise<void>;
416
+ /**
417
+ * List files in a directory.
418
+ */
419
+ ls(path: string, options?: LsOptions): Promise<string[]>;
420
+ /**
421
+ * Check if a file or directory exists in memory.
422
+ */
423
+ exists(path: string): Promise<boolean>;
424
+ /**
425
+ * Read a file from memory.
426
+ */
427
+ readFile(path: string): Promise<Buffer>;
428
+ /**
429
+ * Read a file from memory as text.
430
+ */
431
+ readTextFile(path: string): Promise<string>;
432
+ /**
433
+ * Read a file from memory as JSON.
434
+ */
435
+ readJsonFile<T = unknown>(path: string): Promise<T>;
436
+ /**
437
+ * Write a file to memory.
438
+ */
439
+ writeFile(path: string, data: Uint8Array | Buffer | string | FileLike): Promise<void>;
440
+ /**
441
+ * Reset all in-memory state (useful between tests).
442
+ */
443
+ reset(): void;
444
+ /**
445
+ * Check if a file was written during the test.
446
+ *
447
+ * @example
448
+ * ```typescript
449
+ * expect(fs.wasWritten("/project/tsconfig.json")).toBe(true);
450
+ * ```
451
+ */
452
+ wasWritten(path: string): boolean;
453
+ /**
454
+ * Check if a file was written with content matching a pattern.
455
+ *
456
+ * @example
457
+ * ```typescript
458
+ * expect(fs.wasWrittenMatching("/project/tsconfig.json", /extends/)).toBe(true);
459
+ * ```
460
+ */
461
+ wasWrittenMatching(path: string, pattern: RegExp): boolean;
462
+ /**
463
+ * Check if a file was read during the test.
464
+ *
465
+ * @example
466
+ * ```typescript
467
+ * expect(fs.wasRead("/project/package.json")).toBe(true);
468
+ * ```
469
+ */
470
+ wasRead(path: string): boolean;
471
+ /**
472
+ * Check if a file was deleted during the test.
473
+ *
474
+ * @example
475
+ * ```typescript
476
+ * expect(fs.wasDeleted("/project/old-file.txt")).toBe(true);
477
+ * ```
478
+ */
479
+ wasDeleted(path: string): boolean;
480
+ /**
481
+ * Get the content of a file as a string (convenience method for testing).
482
+ */
483
+ getFileContent(path: string): string | undefined;
484
+ }
485
+ //#endregion
486
+ //#region ../../src/system/providers/ShellProvider.d.ts
487
+ interface ShellRunOptions {
488
+ /**
489
+ * Working directory for the command.
490
+ */
491
+ root?: string;
492
+ /**
493
+ * Additional environment variables.
494
+ */
495
+ env?: Record<string, string>;
496
+ /**
497
+ * Resolve the executable from node_modules/.bin.
498
+ * Supports local project, pnpm nested, and monorepo structures.
499
+ * @default false
500
+ */
501
+ resolve?: boolean;
502
+ /**
503
+ * Capture stdout instead of inheriting stdio.
504
+ * When true, returns stdout as string.
505
+ * When false, streams output to terminal.
506
+ * @default false
507
+ */
508
+ capture?: boolean;
509
+ }
510
+ /**
511
+ * Abstract provider for executing shell commands and binaries.
512
+ *
513
+ * Implementations:
514
+ * - `NodeShellProvider` - Real shell execution using Node.js child_process
515
+ * - `MemoryShellProvider` - In-memory mock for testing
516
+ *
517
+ * @example
518
+ * ```typescript
519
+ * class MyService {
520
+ * protected readonly shell = $inject(ShellProvider);
521
+ *
522
+ * async build() {
523
+ * // Run shell command directly
524
+ * await this.shell.run("yarn install");
525
+ *
526
+ * // Run local binary with resolution
527
+ * await this.shell.run("vite build", { resolve: true });
528
+ *
529
+ * // Capture output
530
+ * const output = await this.shell.run("echo hello", { capture: true });
531
+ * }
532
+ * }
533
+ * ```
534
+ */
535
+ declare abstract class ShellProvider {
536
+ /**
537
+ * Run a shell command or binary.
538
+ *
539
+ * @param command - The command to run
540
+ * @param options - Execution options
541
+ * @returns stdout if capture is true, empty string otherwise
542
+ */
543
+ abstract run(command: string, options?: ShellRunOptions): Promise<string>;
544
+ /**
545
+ * Check if a command is installed and available in the system PATH.
546
+ *
547
+ * @param command - The command name to check
548
+ * @returns true if the command is available
549
+ */
550
+ abstract isInstalled(command: string): Promise<boolean>;
551
+ }
552
+ //#endregion
553
+ //#region ../../src/system/providers/MemoryShellProvider.d.ts
554
+ interface MemoryShellCall {
555
+ command: string;
556
+ options: ShellRunOptions;
557
+ }
558
+ interface MemoryShellProviderOptions {
559
+ /**
560
+ * Simulated outputs for specific commands.
561
+ * Key is the command string, value is the stdout to return.
562
+ */
563
+ outputs?: Record<string, string>;
564
+ /**
565
+ * Commands that should throw an error.
566
+ * Key is the command string, value is the error message.
567
+ */
568
+ errors?: Record<string, string>;
569
+ /**
570
+ * Commands that are considered "installed" in the system PATH.
571
+ */
572
+ installedCommands?: string[];
573
+ }
574
+ /**
575
+ * In-memory implementation of ShellProvider for testing.
576
+ *
577
+ * Records all commands that would be executed without actually running them.
578
+ * Can be configured to return specific outputs or throw errors for testing.
579
+ *
580
+ * @example
581
+ * ```typescript
582
+ * // In tests, substitute the real ShellProvider with MemoryShellProvider
583
+ * const alepha = Alepha.create().with({
584
+ * provide: ShellProvider,
585
+ * use: MemoryShellProvider,
586
+ * });
587
+ *
588
+ * // Configure mock behavior
589
+ * const shell = alepha.inject(MemoryShellProvider);
590
+ * shell.configure({
591
+ * outputs: { "echo hello": "hello\n" },
592
+ * errors: { "failing-cmd": "Command failed" },
593
+ * });
594
+ *
595
+ * // Or use the fluent API
596
+ * shell.outputs.set("another-cmd", "output");
597
+ * shell.errors.set("another-error", "Error message");
598
+ *
599
+ * // Run code that uses ShellProvider
600
+ * const service = alepha.inject(MyService);
601
+ * await service.doSomething();
602
+ *
603
+ * // Verify commands were called
604
+ * expect(shell.calls).toHaveLength(2);
605
+ * expect(shell.calls[0].command).toBe("yarn install");
606
+ * ```
607
+ */
608
+ declare class MemoryShellProvider implements ShellProvider {
609
+ /**
610
+ * All recorded shell calls.
611
+ */
612
+ calls: MemoryShellCall[];
613
+ /**
614
+ * Simulated outputs for specific commands.
615
+ */
616
+ outputs: Map<string, string>;
617
+ /**
618
+ * Commands that should throw an error.
619
+ */
620
+ errors: Map<string, string>;
621
+ /**
622
+ * Commands considered installed in the system PATH.
623
+ */
624
+ installedCommands: Set<string>;
625
+ /**
626
+ * Configure the mock with predefined outputs, errors, and installed commands.
627
+ */
628
+ configure(options: MemoryShellProviderOptions): this;
629
+ /**
630
+ * Record command and return simulated output.
631
+ */
632
+ run(command: string, options?: ShellRunOptions): Promise<string>;
633
+ /**
634
+ * Check if a specific command was called.
635
+ */
636
+ wasCalled(command: string): boolean;
637
+ /**
638
+ * Check if a command matching a pattern was called.
639
+ */
640
+ wasCalledMatching(pattern: RegExp): boolean;
641
+ /**
642
+ * Get all calls matching a pattern.
643
+ */
644
+ getCallsMatching(pattern: RegExp): MemoryShellCall[];
645
+ /**
646
+ * Check if a command is installed.
647
+ */
648
+ isInstalled(command: string): Promise<boolean>;
649
+ /**
650
+ * Reset all recorded state.
651
+ */
652
+ reset(): void;
653
+ }
654
+ //#endregion
655
+ //#region ../../src/system/services/FileDetector.d.ts
656
+ interface FileTypeResult {
657
+ /**
658
+ * The detected MIME type
659
+ */
660
+ mimeType: string;
661
+ /**
662
+ * The detected file extension
663
+ */
664
+ extension: string;
665
+ /**
666
+ * Whether the file type was verified by magic bytes
667
+ */
668
+ verified: boolean;
669
+ /**
670
+ * The stream (potentially wrapped to allow re-reading)
671
+ */
672
+ stream: Readable;
673
+ }
674
+ /**
675
+ * Service for detecting file types and getting content types.
676
+ *
677
+ * @example
678
+ * ```typescript
679
+ * const detector = alepha.inject(FileDetector);
680
+ *
681
+ * // Get content type from filename
682
+ * const mimeType = detector.getContentType("image.png"); // "image/png"
683
+ *
684
+ * // Detect file type by magic bytes
685
+ * const stream = createReadStream('image.png');
686
+ * const result = await detector.detectFileType(stream, 'image.png');
687
+ * console.log(result.mimeType); // 'image/png'
688
+ * console.log(result.verified); // true if magic bytes match
689
+ * ```
690
+ */
691
+ declare class FileDetector {
692
+ /**
693
+ * Magic byte signatures for common file formats.
694
+ * Each signature is represented as an array of bytes or null (wildcard).
695
+ */
696
+ protected static readonly MAGIC_BYTES: Record<string, {
697
+ signature: (number | null)[];
698
+ mimeType: string;
699
+ }[]>;
700
+ /**
701
+ * All possible format signatures for checking against actual file content
702
+ */
703
+ protected static readonly ALL_SIGNATURES: {
704
+ signature: (number | null)[];
705
+ mimeType: string;
706
+ ext: string;
707
+ }[];
708
+ /**
709
+ * MIME type map for file extensions.
710
+ *
711
+ * Can be used to get the content type of file based on its extension.
712
+ * Feel free to add more mime types in your project!
713
+ */
714
+ static readonly mimeMap: Record<string, string>;
715
+ /**
716
+ * Reverse MIME type map for looking up extensions from MIME types.
717
+ * Prefers shorter, more common extensions when multiple exist.
718
+ */
719
+ protected static readonly reverseMimeMap: Record<string, string>;
720
+ /**
721
+ * Returns the file extension for a given MIME type.
722
+ *
723
+ * @param mimeType - The MIME type to look up
724
+ * @returns The file extension (without dot), or "bin" if not found
725
+ *
726
+ * @example
727
+ * ```typescript
728
+ * const detector = alepha.inject(FileDetector);
729
+ * const ext = detector.getExtensionFromMimeType("image/png"); // "png"
730
+ * const ext2 = detector.getExtensionFromMimeType("application/octet-stream"); // "bin"
731
+ * ```
732
+ */
733
+ getExtensionFromMimeType(mimeType: string): string;
734
+ /**
735
+ * Returns the content type of file based on its filename.
736
+ *
737
+ * @param filename - The filename to check
738
+ * @returns The MIME type
739
+ *
740
+ * @example
741
+ * ```typescript
742
+ * const detector = alepha.inject(FileDetector);
743
+ * const mimeType = detector.getContentType("image.png"); // "image/png"
744
+ * ```
745
+ */
746
+ getContentType(filename: string): string;
747
+ /**
748
+ * Detects the file type by checking magic bytes against the stream content.
749
+ *
750
+ * @param stream - The readable stream to check
751
+ * @param filename - The filename (used to get the extension)
752
+ * @returns File type information including MIME type, extension, and verification status
753
+ *
754
+ * @example
755
+ * ```typescript
756
+ * const detector = alepha.inject(FileDetector);
757
+ * const stream = createReadStream('image.png');
758
+ * const result = await detector.detectFileType(stream, 'image.png');
759
+ * console.log(result.mimeType); // 'image/png'
760
+ * console.log(result.verified); // true if magic bytes match
761
+ * ```
762
+ */
763
+ detectFileType(stream: Readable, filename: string): Promise<FileTypeResult>;
764
+ /**
765
+ * Reads all bytes from a stream and returns the first N bytes along with a new stream containing all data.
766
+ * This approach reads the entire stream upfront to avoid complex async handling issues.
767
+ *
768
+ * @protected
769
+ */
770
+ protected peekBytes(stream: Readable, numBytes: number): Promise<{
771
+ buffer: Buffer;
772
+ stream: Readable;
773
+ }>;
774
+ /**
775
+ * Checks if a buffer matches a magic byte signature.
776
+ *
777
+ * @protected
778
+ */
779
+ protected matchesSignature(buffer: Buffer, signature: (number | null)[]): boolean;
780
+ }
781
+ //#endregion
782
+ //#region ../../src/system/providers/NodeFileSystemProvider.d.ts
783
+ /**
784
+ * Node.js implementation of FileSystem interface.
785
+ *
786
+ * @example
787
+ * ```typescript
788
+ * const fs = alepha.inject(NodeFileSystemProvider);
789
+ *
790
+ * // Create from URL
791
+ * const file1 = fs.createFile({ url: "file:///path/to/file.png" });
792
+ *
793
+ * // Create from Buffer
794
+ * const file2 = fs.createFile({ buffer: Buffer.from("hello"), name: "hello.txt" });
795
+ *
796
+ * // Create from text
797
+ * const file3 = fs.createFile({ text: "Hello, world!", name: "greeting.txt" });
798
+ *
799
+ * // File operations
800
+ * await fs.mkdir("/tmp/mydir", { recursive: true });
801
+ * await fs.cp("/src/file.txt", "/dest/file.txt");
802
+ * await fs.mv("/old/path.txt", "/new/path.txt");
803
+ * const files = await fs.ls("/tmp");
804
+ * await fs.rm("/tmp/file.txt");
805
+ * ```
806
+ */
807
+ declare class NodeFileSystemProvider implements FileSystemProvider {
808
+ protected detector: FileDetector;
809
+ protected json: Json;
810
+ join(...paths: string[]): string;
811
+ /**
812
+ * Creates a FileLike object from various sources.
813
+ *
814
+ * @param options - Options for creating the file
815
+ * @returns A FileLike object
816
+ *
817
+ * @example
818
+ * ```typescript
819
+ * const fs = alepha.inject(NodeFileSystemProvider);
820
+ *
821
+ * // From URL
822
+ * const file1 = fs.createFile({ url: "https://example.com/image.png" });
823
+ *
824
+ * // From Buffer
825
+ * const file2 = fs.createFile({
826
+ * buffer: Buffer.from("hello"),
827
+ * name: "hello.txt",
828
+ * type: "text/plain"
829
+ * });
830
+ *
831
+ * // From text
832
+ * const file3 = fs.createFile({ text: "Hello!", name: "greeting.txt" });
833
+ *
834
+ * // From stream with detection
835
+ * const stream = createReadStream("/path/to/file.png");
836
+ * const file4 = fs.createFile({ stream, name: "image.png" });
837
+ * ```
838
+ */
839
+ createFile(options: CreateFileOptions): FileLike;
840
+ /**
841
+ * Removes a file or directory.
842
+ *
843
+ * @param path - The path to remove
844
+ * @param options - Remove options
845
+ *
846
+ * @example
847
+ * ```typescript
848
+ * const fs = alepha.inject(NodeFileSystemProvider);
849
+ *
850
+ * // Remove a file
851
+ * await fs.rm("/tmp/file.txt");
852
+ *
853
+ * // Remove a directory recursively
854
+ * await fs.rm("/tmp/mydir", { recursive: true });
855
+ *
856
+ * // Remove with force (no error if doesn't exist)
857
+ * await fs.rm("/tmp/maybe-exists.txt", { force: true });
858
+ * ```
859
+ */
860
+ rm(path: string, options?: RmOptions): Promise<void>;
861
+ /**
862
+ * Copies a file or directory.
863
+ *
864
+ * @param src - Source path
865
+ * @param dest - Destination path
866
+ * @param options - Copy options
867
+ *
868
+ * @example
869
+ * ```typescript
870
+ * const fs = alepha.inject(NodeFileSystemProvider);
871
+ *
872
+ * // Copy a file
873
+ * await fs.cp("/src/file.txt", "/dest/file.txt");
874
+ *
875
+ * // Copy a directory recursively
876
+ * await fs.cp("/src/dir", "/dest/dir", { recursive: true });
877
+ *
878
+ * // Copy with force (overwrite existing)
879
+ * await fs.cp("/src/file.txt", "/dest/file.txt", { force: true });
880
+ * ```
881
+ */
882
+ cp(src: string, dest: string, options?: CpOptions): Promise<void>;
883
+ /**
884
+ * Moves/renames a file or directory.
885
+ *
886
+ * @param src - Source path
887
+ * @param dest - Destination path
888
+ *
889
+ * @example
890
+ * ```typescript
891
+ * const fs = alepha.inject(NodeFileSystemProvider);
892
+ *
893
+ * // Move/rename a file
894
+ * await fs.mv("/old/path.txt", "/new/path.txt");
895
+ *
896
+ * // Move a directory
897
+ * await fs.mv("/old/dir", "/new/dir");
898
+ * ```
899
+ */
900
+ mv(src: string, dest: string): Promise<void>;
901
+ /**
902
+ * Creates a directory.
903
+ *
904
+ * @param path - The directory path to create
905
+ * @param options - Mkdir options
906
+ *
907
+ * @example
908
+ * ```typescript
909
+ * const fs = alepha.inject(NodeFileSystemProvider);
910
+ *
911
+ * // Create a directory
912
+ * await fs.mkdir("/tmp/mydir");
913
+ *
914
+ * // Create nested directories
915
+ * await fs.mkdir("/tmp/path/to/dir", { recursive: true });
916
+ *
917
+ * // Create with specific permissions
918
+ * await fs.mkdir("/tmp/mydir", { mode: 0o755 });
919
+ * ```
920
+ */
921
+ mkdir(path: string, options?: MkdirOptions): Promise<void>;
922
+ /**
923
+ * Lists files in a directory.
924
+ *
925
+ * @param path - The directory path to list
926
+ * @param options - List options
927
+ * @returns Array of filenames
928
+ *
929
+ * @example
930
+ * ```typescript
931
+ * const fs = alepha.inject(NodeFileSystemProvider);
932
+ *
933
+ * // List files in a directory
934
+ * const files = await fs.ls("/tmp");
935
+ * console.log(files); // ["file1.txt", "file2.txt", "subdir"]
936
+ *
937
+ * // List with hidden files
938
+ * const allFiles = await fs.ls("/tmp", { hidden: true });
939
+ *
940
+ * // List recursively
941
+ * const allFilesRecursive = await fs.ls("/tmp", { recursive: true });
942
+ * ```
943
+ */
944
+ ls(path: string, options?: LsOptions): Promise<string[]>;
945
+ /**
946
+ * Checks if a file or directory exists.
947
+ *
948
+ * @param path - The path to check
949
+ * @returns True if the path exists, false otherwise
950
+ *
951
+ * @example
952
+ * ```typescript
953
+ * const fs = alepha.inject(NodeFileSystemProvider);
954
+ *
955
+ * if (await fs.exists("/tmp/file.txt")) {
956
+ * console.log("File exists");
957
+ * }
958
+ * ```
959
+ */
960
+ exists(path: string): Promise<boolean>;
961
+ /**
962
+ * Reads the content of a file.
963
+ *
964
+ * @param path - The file path to read
965
+ * @returns The file content as a Buffer
966
+ *
967
+ * @example
968
+ * ```typescript
969
+ * const fs = alepha.inject(NodeFileSystemProvider);
970
+ *
971
+ * const buffer = await fs.readFile("/tmp/file.txt");
972
+ * console.log(buffer.toString("utf-8"));
973
+ * ```
974
+ */
975
+ readFile(path: string): Promise<Buffer>;
976
+ /**
977
+ * Writes data to a file.
978
+ *
979
+ * @param path - The file path to write to
980
+ * @param data - The data to write (Buffer or string)
981
+ *
982
+ * @example
983
+ * ```typescript
984
+ * const fs = alepha.inject(NodeFileSystemProvider);
985
+ *
986
+ * // Write string
987
+ * await fs.writeFile("/tmp/file.txt", "Hello, world!");
988
+ *
989
+ * // Write Buffer
990
+ * await fs.writeFile("/tmp/file.bin", Buffer.from([0x01, 0x02, 0x03]));
991
+ * ```
992
+ */
993
+ writeFile(path: string, data: Uint8Array | Buffer | string | FileLike): Promise<void>;
994
+ /**
995
+ * Reads the content of a file as a string.
996
+ *
997
+ * @param path - The file path to read
998
+ * @returns The file content as a string
999
+ *
1000
+ * @example
1001
+ * ```typescript
1002
+ * const fs = alepha.inject(NodeFileSystemProvider);
1003
+ * const content = await fs.readTextFile("/tmp/file.txt");
1004
+ * ```
1005
+ */
1006
+ readTextFile(path: string): Promise<string>;
1007
+ /**
1008
+ * Reads the content of a file as JSON.
1009
+ *
1010
+ * @param path - The file path to read
1011
+ * @returns The parsed JSON content
1012
+ *
1013
+ * @example
1014
+ * ```typescript
1015
+ * const fs = alepha.inject(NodeFileSystemProvider);
1016
+ * const config = await fs.readJsonFile<{ name: string }>("/tmp/config.json");
1017
+ * ```
1018
+ */
1019
+ readJsonFile<T = unknown>(path: string): Promise<T>;
1020
+ /**
1021
+ * Creates a FileLike object from a Web File.
1022
+ *
1023
+ * @protected
1024
+ */
1025
+ protected createFileFromWebFile(source: File, options?: {
1026
+ type?: string;
1027
+ name?: string;
1028
+ size?: number;
1029
+ }): FileLike;
1030
+ /**
1031
+ * Creates a FileLike object from a Buffer.
1032
+ *
1033
+ * @protected
1034
+ */
1035
+ protected createFileFromBuffer(source: Buffer, options?: {
1036
+ type?: string;
1037
+ name?: string;
1038
+ }): FileLike;
1039
+ /**
1040
+ * Creates a FileLike object from a stream.
1041
+ *
1042
+ * @protected
1043
+ */
1044
+ protected createFileFromStream(source: StreamLike, options?: {
1045
+ type?: string;
1046
+ name?: string;
1047
+ size?: number;
1048
+ }): FileLike & {
1049
+ _buffer: null | Buffer;
1050
+ };
1051
+ /**
1052
+ * Creates a FileLike object from a URL.
1053
+ *
1054
+ * @protected
1055
+ */
1056
+ protected createFileFromUrl(url: string, options?: {
1057
+ type?: string;
1058
+ name?: string;
1059
+ }): FileLike;
1060
+ /**
1061
+ * Gets a streaming response from a URL.
1062
+ *
1063
+ * @protected
1064
+ */
1065
+ protected getStreamingResponse(url: string): Readable;
1066
+ /**
1067
+ * Loads data from a URL.
1068
+ *
1069
+ * @protected
1070
+ */
1071
+ protected loadFromUrl(url: string): Promise<Buffer>;
1072
+ /**
1073
+ * Creates a stream from a URL.
1074
+ *
1075
+ * @protected
1076
+ */
1077
+ protected createStreamFromUrl(url: string): Readable;
1078
+ /**
1079
+ * Converts a stream-like object to a Buffer.
1080
+ *
1081
+ * @protected
1082
+ */
1083
+ protected streamToBuffer(streamLike: StreamLike): Promise<Buffer>;
1084
+ /**
1085
+ * Converts a Node.js Buffer to an ArrayBuffer.
1086
+ *
1087
+ * @protected
1088
+ */
1089
+ protected bufferToArrayBuffer(buffer: Buffer): ArrayBuffer;
1090
+ }
1091
+ //#endregion
1092
+ //#region ../../src/system/providers/NodeShellProvider.d.ts
1093
+ /**
1094
+ * Node.js implementation of ShellProvider.
1095
+ *
1096
+ * Executes shell commands using Node.js child_process module.
1097
+ * Supports binary resolution from node_modules/.bin for local packages.
1098
+ */
1099
+ declare class NodeShellProvider implements ShellProvider {
1100
+ protected readonly log: alepha_logger0.Logger;
1101
+ protected readonly fs: FileSystemProvider;
1102
+ /**
1103
+ * Run a shell command or binary.
1104
+ */
1105
+ run(command: string, options?: ShellRunOptions): Promise<string>;
1106
+ /**
1107
+ * Execute command with inherited stdio (streams to terminal).
1108
+ */
1109
+ protected execInherit(executable: string, args: string[], options: {
1110
+ cwd: string;
1111
+ env?: Record<string, string>;
1112
+ }): Promise<string>;
1113
+ /**
1114
+ * Execute command and capture stdout.
1115
+ */
1116
+ protected execCapture(command: string, options: {
1117
+ cwd: string;
1118
+ env?: Record<string, string>;
1119
+ }): Promise<string>;
1120
+ /**
1121
+ * Resolve executable path from node_modules/.bin.
1122
+ *
1123
+ * Search order:
1124
+ * 1. Local: node_modules/.bin/
1125
+ * 2. Pnpm nested: node_modules/alepha/node_modules/.bin/
1126
+ * 3. Monorepo: Walk up to 3 parent directories
1127
+ */
1128
+ protected resolveExecutable(name: string, root: string): Promise<string>;
1129
+ /**
1130
+ * Check if executable exists at path.
1131
+ */
1132
+ protected findExecutable(root: string, relativePath: string): Promise<string | undefined>;
1133
+ /**
1134
+ * Check if a command is installed and available in the system PATH.
1135
+ */
1136
+ isInstalled(command: string): Promise<boolean>;
1137
+ }
1138
+ //#endregion
1139
+ //#region ../../src/system/index.d.ts
1140
+ /**
1141
+ * | type | quality | stability |
1142
+ * |------|---------|-----------|
1143
+ * | tooling | standard | stable |
1144
+ *
1145
+ * System-level abstractions for portable code across runtimes.
1146
+ *
1147
+ * **Features:**
1148
+ * - File system operations (read, write, exists, etc.)
1149
+ * - Shell command execution
1150
+ * - File type detection and MIME utilities
1151
+ * - Memory implementations for testing
1152
+ *
1153
+ * @module alepha.system
1154
+ */
1155
+ declare const AlephaSystem: alepha0.Service<alepha0.Module>;
1156
+ //#endregion
1157
+ export { AlephaSystem, CpOptions, CreateFileFromArrayBufferOptions, CreateFileFromBufferOptions, CreateFileFromPathOptions, CreateFileFromResponseOptions, CreateFileFromStreamOptions, CreateFileFromTextOptions, CreateFileFromUrlOptions, CreateFileFromWebFileOptions, CreateFileOptions, FileDetector, FileError, FileSystemProvider, FileTypeResult, LsOptions, MemoryFileSystemProvider, MemoryFileSystemProviderOptions, MemoryShellCall, MemoryShellProvider, MemoryShellProviderOptions, MkdirOptions, NodeFileSystemProvider, NodeShellProvider, RmOptions, ShellProvider, ShellRunOptions };
1158
+ //# sourceMappingURL=index.d.ts.map