alepha 0.14.4 → 0.15.1

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 (322) hide show
  1. package/README.md +44 -102
  2. package/dist/api/audits/index.d.ts +331 -443
  3. package/dist/api/audits/index.d.ts.map +1 -1
  4. package/dist/api/audits/index.js +2 -2
  5. package/dist/api/audits/index.js.map +1 -1
  6. package/dist/api/files/index.d.ts +0 -113
  7. package/dist/api/files/index.d.ts.map +1 -1
  8. package/dist/api/files/index.js +2 -3
  9. package/dist/api/files/index.js.map +1 -1
  10. package/dist/api/jobs/index.d.ts +151 -262
  11. package/dist/api/jobs/index.d.ts.map +1 -1
  12. package/dist/api/notifications/index.browser.js +4 -4
  13. package/dist/api/notifications/index.browser.js.map +1 -1
  14. package/dist/api/notifications/index.d.ts +164 -276
  15. package/dist/api/notifications/index.d.ts.map +1 -1
  16. package/dist/api/notifications/index.js +4 -4
  17. package/dist/api/notifications/index.js.map +1 -1
  18. package/dist/api/parameters/index.d.ts +265 -377
  19. package/dist/api/parameters/index.d.ts.map +1 -1
  20. package/dist/api/users/index.browser.js +1 -2
  21. package/dist/api/users/index.browser.js.map +1 -1
  22. package/dist/api/users/index.d.ts +195 -301
  23. package/dist/api/users/index.d.ts.map +1 -1
  24. package/dist/api/users/index.js +203 -184
  25. package/dist/api/users/index.js.map +1 -1
  26. package/dist/api/verifications/index.d.ts.map +1 -1
  27. package/dist/batch/index.d.ts.map +1 -1
  28. package/dist/batch/index.js +1 -2
  29. package/dist/batch/index.js.map +1 -1
  30. package/dist/bucket/index.d.ts.map +1 -1
  31. package/dist/cache/core/index.d.ts.map +1 -1
  32. package/dist/cache/redis/index.d.ts.map +1 -1
  33. package/dist/cache/redis/index.js +2 -2
  34. package/dist/cache/redis/index.js.map +1 -1
  35. package/dist/cli/index.d.ts +5900 -165
  36. package/dist/cli/index.d.ts.map +1 -1
  37. package/dist/cli/index.js +1481 -639
  38. package/dist/cli/index.js.map +1 -1
  39. package/dist/command/index.d.ts +8 -4
  40. package/dist/command/index.d.ts.map +1 -1
  41. package/dist/command/index.js +29 -25
  42. package/dist/command/index.js.map +1 -1
  43. package/dist/core/index.browser.js +563 -54
  44. package/dist/core/index.browser.js.map +1 -1
  45. package/dist/core/index.d.ts +175 -8
  46. package/dist/core/index.d.ts.map +1 -1
  47. package/dist/core/index.js +564 -54
  48. package/dist/core/index.js.map +1 -1
  49. package/dist/core/index.native.js +563 -54
  50. package/dist/core/index.native.js.map +1 -1
  51. package/dist/datetime/index.d.ts.map +1 -1
  52. package/dist/datetime/index.js +4 -4
  53. package/dist/datetime/index.js.map +1 -1
  54. package/dist/email/index.d.ts +89 -42
  55. package/dist/email/index.d.ts.map +1 -1
  56. package/dist/email/index.js +129 -33
  57. package/dist/email/index.js.map +1 -1
  58. package/dist/fake/index.d.ts +7969 -2
  59. package/dist/fake/index.d.ts.map +1 -1
  60. package/dist/fake/index.js +22 -22
  61. package/dist/fake/index.js.map +1 -1
  62. package/dist/file/index.d.ts +134 -1
  63. package/dist/file/index.d.ts.map +1 -1
  64. package/dist/file/index.js +253 -1
  65. package/dist/file/index.js.map +1 -1
  66. package/dist/lock/core/index.d.ts.map +1 -1
  67. package/dist/lock/redis/index.d.ts.map +1 -1
  68. package/dist/logger/index.d.ts +1 -2
  69. package/dist/logger/index.d.ts.map +1 -1
  70. package/dist/logger/index.js +1 -5
  71. package/dist/logger/index.js.map +1 -1
  72. package/dist/mcp/index.d.ts +19 -1
  73. package/dist/mcp/index.d.ts.map +1 -1
  74. package/dist/mcp/index.js +28 -4
  75. package/dist/mcp/index.js.map +1 -1
  76. package/dist/orm/chunk-DH6iiROE.js +38 -0
  77. package/dist/orm/index.browser.js +9 -9
  78. package/dist/orm/index.browser.js.map +1 -1
  79. package/dist/orm/index.bun.js +2821 -0
  80. package/dist/orm/index.bun.js.map +1 -0
  81. package/dist/orm/index.d.ts +318 -169
  82. package/dist/orm/index.d.ts.map +1 -1
  83. package/dist/orm/index.js +2086 -1776
  84. package/dist/orm/index.js.map +1 -1
  85. package/dist/queue/core/index.d.ts +4 -4
  86. package/dist/queue/core/index.d.ts.map +1 -1
  87. package/dist/queue/redis/index.d.ts.map +1 -1
  88. package/dist/redis/index.bun.js +285 -0
  89. package/dist/redis/index.bun.js.map +1 -0
  90. package/dist/redis/index.d.ts +13 -31
  91. package/dist/redis/index.d.ts.map +1 -1
  92. package/dist/redis/index.js +18 -38
  93. package/dist/redis/index.js.map +1 -1
  94. package/dist/retry/index.d.ts.map +1 -1
  95. package/dist/router/index.d.ts.map +1 -1
  96. package/dist/scheduler/index.d.ts +83 -1
  97. package/dist/scheduler/index.d.ts.map +1 -1
  98. package/dist/scheduler/index.js +393 -1
  99. package/dist/scheduler/index.js.map +1 -1
  100. package/dist/security/index.browser.js +5 -1
  101. package/dist/security/index.browser.js.map +1 -1
  102. package/dist/security/index.d.ts +598 -112
  103. package/dist/security/index.d.ts.map +1 -1
  104. package/dist/security/index.js +1808 -97
  105. package/dist/security/index.js.map +1 -1
  106. package/dist/server/auth/index.d.ts +1200 -175
  107. package/dist/server/auth/index.d.ts.map +1 -1
  108. package/dist/server/auth/index.js +1268 -37
  109. package/dist/server/auth/index.js.map +1 -1
  110. package/dist/server/cache/index.d.ts +6 -3
  111. package/dist/server/cache/index.d.ts.map +1 -1
  112. package/dist/server/cache/index.js +1 -1
  113. package/dist/server/cache/index.js.map +1 -1
  114. package/dist/server/compress/index.d.ts.map +1 -1
  115. package/dist/server/cookies/index.d.ts.map +1 -1
  116. package/dist/server/cookies/index.js +3 -3
  117. package/dist/server/cookies/index.js.map +1 -1
  118. package/dist/server/core/index.d.ts +115 -13
  119. package/dist/server/core/index.d.ts.map +1 -1
  120. package/dist/server/core/index.js +321 -139
  121. package/dist/server/core/index.js.map +1 -1
  122. package/dist/server/cors/index.d.ts +0 -1
  123. package/dist/server/cors/index.d.ts.map +1 -1
  124. package/dist/server/health/index.d.ts +0 -1
  125. package/dist/server/health/index.d.ts.map +1 -1
  126. package/dist/server/helmet/index.d.ts.map +1 -1
  127. package/dist/server/links/index.browser.js +9 -1
  128. package/dist/server/links/index.browser.js.map +1 -1
  129. package/dist/server/links/index.d.ts +1 -2
  130. package/dist/server/links/index.d.ts.map +1 -1
  131. package/dist/server/links/index.js +14 -7
  132. package/dist/server/links/index.js.map +1 -1
  133. package/dist/server/metrics/index.d.ts +514 -1
  134. package/dist/server/metrics/index.d.ts.map +1 -1
  135. package/dist/server/metrics/index.js +4462 -4
  136. package/dist/server/metrics/index.js.map +1 -1
  137. package/dist/server/multipart/index.d.ts.map +1 -1
  138. package/dist/server/proxy/index.d.ts +0 -1
  139. package/dist/server/proxy/index.d.ts.map +1 -1
  140. package/dist/server/rate-limit/index.d.ts.map +1 -1
  141. package/dist/server/static/index.d.ts.map +1 -1
  142. package/dist/server/swagger/index.d.ts +1 -2
  143. package/dist/server/swagger/index.d.ts.map +1 -1
  144. package/dist/server/swagger/index.js +1 -2
  145. package/dist/server/swagger/index.js.map +1 -1
  146. package/dist/sms/index.d.ts +3 -1
  147. package/dist/sms/index.d.ts.map +1 -1
  148. package/dist/sms/index.js +10 -10
  149. package/dist/sms/index.js.map +1 -1
  150. package/dist/thread/index.d.ts +0 -1
  151. package/dist/thread/index.d.ts.map +1 -1
  152. package/dist/thread/index.js +2 -2
  153. package/dist/thread/index.js.map +1 -1
  154. package/dist/topic/core/index.d.ts.map +1 -1
  155. package/dist/topic/redis/index.d.ts.map +1 -1
  156. package/dist/vite/index.d.ts +6315 -149
  157. package/dist/vite/index.d.ts.map +1 -1
  158. package/dist/vite/index.js +140 -469
  159. package/dist/vite/index.js.map +1 -1
  160. package/dist/websocket/index.browser.js +9 -9
  161. package/dist/websocket/index.browser.js.map +1 -1
  162. package/dist/websocket/index.d.ts +28 -28
  163. package/dist/websocket/index.d.ts.map +1 -1
  164. package/dist/websocket/index.js +9 -9
  165. package/dist/websocket/index.js.map +1 -1
  166. package/package.json +13 -18
  167. package/src/api/files/controllers/AdminFileStatsController.ts +0 -1
  168. package/src/api/users/atoms/realmAuthSettingsAtom.ts +5 -0
  169. package/src/api/users/controllers/{UserRealmController.ts → RealmController.ts} +11 -11
  170. package/src/api/users/entities/users.ts +1 -1
  171. package/src/api/users/index.ts +8 -8
  172. package/src/api/users/primitives/{$userRealm.ts → $realm.ts} +17 -19
  173. package/src/api/users/providers/{UserRealmProvider.ts → RealmProvider.ts} +26 -30
  174. package/src/api/users/schemas/{userRealmConfigSchema.ts → realmConfigSchema.ts} +2 -2
  175. package/src/api/users/services/CredentialService.ts +7 -7
  176. package/src/api/users/services/IdentityService.ts +4 -4
  177. package/src/api/users/services/RegistrationService.spec.ts +25 -27
  178. package/src/api/users/services/RegistrationService.ts +38 -27
  179. package/src/api/users/services/SessionCrudService.ts +3 -3
  180. package/src/api/users/services/SessionService.spec.ts +3 -3
  181. package/src/api/users/services/SessionService.ts +27 -18
  182. package/src/api/users/services/UserService.ts +7 -7
  183. package/src/batch/providers/BatchProvider.ts +1 -2
  184. package/src/cli/apps/AlephaCli.ts +2 -2
  185. package/src/cli/apps/AlephaPackageBuilderCli.ts +47 -20
  186. package/src/cli/assets/apiHelloControllerTs.ts +19 -0
  187. package/src/cli/assets/apiIndexTs.ts +16 -0
  188. package/src/cli/assets/biomeJson.ts +2 -1
  189. package/src/cli/assets/claudeMd.ts +308 -0
  190. package/src/cli/assets/dummySpecTs.ts +2 -1
  191. package/src/cli/assets/editorconfig.ts +2 -1
  192. package/src/cli/assets/mainBrowserTs.ts +4 -3
  193. package/src/cli/assets/mainCss.ts +24 -0
  194. package/src/cli/assets/mainServerTs.ts +24 -0
  195. package/src/cli/assets/tsconfigJson.ts +2 -1
  196. package/src/cli/assets/webAppRouterTs.ts +16 -0
  197. package/src/cli/assets/webHelloComponentTsx.ts +20 -0
  198. package/src/cli/assets/webIndexTs.ts +16 -0
  199. package/src/cli/atoms/appEntryOptions.ts +13 -0
  200. package/src/cli/atoms/buildOptions.ts +1 -1
  201. package/src/cli/atoms/changelogOptions.ts +1 -1
  202. package/src/cli/commands/build.ts +97 -61
  203. package/src/cli/commands/db.ts +21 -18
  204. package/src/cli/commands/deploy.ts +17 -5
  205. package/src/cli/commands/dev.ts +26 -47
  206. package/src/cli/commands/gen/env.ts +1 -1
  207. package/src/cli/commands/init.ts +79 -25
  208. package/src/cli/commands/lint.ts +9 -3
  209. package/src/cli/commands/test.ts +8 -2
  210. package/src/cli/commands/typecheck.ts +5 -1
  211. package/src/cli/commands/verify.ts +4 -2
  212. package/src/cli/defineConfig.ts +9 -0
  213. package/src/cli/index.ts +2 -1
  214. package/src/cli/providers/AppEntryProvider.ts +131 -0
  215. package/src/cli/providers/ViteBuildProvider.ts +82 -0
  216. package/src/cli/providers/ViteDevServerProvider.ts +350 -0
  217. package/src/cli/providers/ViteTemplateProvider.ts +27 -0
  218. package/src/cli/services/AlephaCliUtils.ts +72 -602
  219. package/src/cli/services/PackageManagerUtils.ts +308 -0
  220. package/src/cli/services/ProjectScaffolder.ts +329 -0
  221. package/src/command/helpers/Runner.ts +15 -3
  222. package/src/core/Alepha.ts +2 -8
  223. package/src/core/__tests__/Alepha-graph.spec.ts +4 -0
  224. package/src/core/index.shared.ts +1 -0
  225. package/src/core/index.ts +2 -0
  226. package/src/core/primitives/$hook.ts +6 -2
  227. package/src/core/primitives/$module.spec.ts +4 -0
  228. package/src/core/primitives/$module.ts +12 -0
  229. package/src/core/providers/AlsProvider.ts +1 -1
  230. package/src/core/providers/CodecManager.spec.ts +12 -6
  231. package/src/core/providers/CodecManager.ts +26 -6
  232. package/src/core/providers/EventManager.ts +169 -13
  233. package/src/core/providers/KeylessJsonSchemaCodec.spec.ts +878 -0
  234. package/src/core/providers/KeylessJsonSchemaCodec.ts +789 -0
  235. package/src/core/providers/SchemaValidator.spec.ts +236 -0
  236. package/src/core/providers/StateManager.spec.ts +27 -16
  237. package/src/email/providers/LocalEmailProvider.spec.ts +111 -87
  238. package/src/email/providers/LocalEmailProvider.ts +52 -15
  239. package/src/email/providers/NodemailerEmailProvider.ts +167 -56
  240. package/src/file/errors/FileError.ts +7 -0
  241. package/src/file/index.ts +9 -1
  242. package/src/file/providers/MemoryFileSystemProvider.ts +393 -0
  243. package/src/logger/providers/PrettyFormatterProvider.ts +0 -9
  244. package/src/mcp/errors/McpError.ts +30 -0
  245. package/src/mcp/index.ts +3 -0
  246. package/src/mcp/transports/SseMcpTransport.ts +16 -6
  247. package/src/orm/index.browser.ts +1 -19
  248. package/src/orm/index.bun.ts +77 -0
  249. package/src/orm/index.shared-server.ts +22 -0
  250. package/src/orm/index.shared.ts +15 -0
  251. package/src/orm/index.ts +19 -39
  252. package/src/orm/providers/DrizzleKitProvider.ts +3 -5
  253. package/src/orm/providers/drivers/BunPostgresProvider.ts +3 -5
  254. package/src/orm/providers/drivers/BunSqliteProvider.ts +1 -1
  255. package/src/orm/providers/drivers/CloudflareD1Provider.ts +4 -0
  256. package/src/orm/providers/drivers/DatabaseProvider.ts +4 -0
  257. package/src/orm/providers/drivers/PglitePostgresProvider.ts +4 -0
  258. package/src/orm/services/Repository.ts +19 -0
  259. package/src/redis/index.bun.ts +35 -0
  260. package/src/redis/providers/BunRedisProvider.ts +12 -43
  261. package/src/redis/providers/BunRedisSubscriberProvider.ts +2 -3
  262. package/src/redis/providers/NodeRedisProvider.ts +16 -34
  263. package/src/{server/security → security}/__tests__/BasicAuth.spec.ts +11 -11
  264. package/src/{server/security → security}/__tests__/ServerSecurityProvider-realm.spec.ts +21 -16
  265. package/src/{server/security/providers → security/__tests__}/ServerSecurityProvider.spec.ts +5 -5
  266. package/src/security/index.browser.ts +5 -0
  267. package/src/security/index.ts +90 -7
  268. package/src/security/primitives/{$realm.spec.ts → $issuer.spec.ts} +11 -11
  269. package/src/security/primitives/{$realm.ts → $issuer.ts} +20 -17
  270. package/src/security/primitives/$role.ts +5 -5
  271. package/src/security/primitives/$serviceAccount.spec.ts +5 -5
  272. package/src/security/primitives/$serviceAccount.ts +3 -3
  273. package/src/{server/security → security}/providers/ServerSecurityProvider.ts +5 -7
  274. package/src/server/auth/primitives/$auth.ts +10 -10
  275. package/src/server/auth/primitives/$authCredentials.ts +3 -3
  276. package/src/server/auth/primitives/$authGithub.ts +3 -3
  277. package/src/server/auth/primitives/$authGoogle.ts +3 -3
  278. package/src/server/auth/providers/ServerAuthProvider.ts +13 -13
  279. package/src/server/cache/providers/ServerCacheProvider.ts +1 -1
  280. package/src/server/cookies/providers/ServerCookiesProvider.ts +3 -3
  281. package/src/server/core/index.ts +1 -1
  282. package/src/server/core/providers/BunHttpServerProvider.ts +1 -1
  283. package/src/server/core/providers/NodeHttpServerProvider.spec.ts +125 -0
  284. package/src/server/core/providers/NodeHttpServerProvider.ts +92 -24
  285. package/src/server/core/providers/ServerBodyParserProvider.ts +19 -23
  286. package/src/server/core/providers/ServerLoggerProvider.ts +23 -19
  287. package/src/server/core/providers/ServerProvider.ts +144 -24
  288. package/src/server/core/providers/ServerRouterProvider.ts +259 -115
  289. package/src/server/core/providers/ServerTimingProvider.ts +2 -2
  290. package/src/server/links/atoms/apiLinksAtom.ts +7 -0
  291. package/src/server/links/index.browser.ts +2 -0
  292. package/src/server/links/index.ts +3 -1
  293. package/src/server/links/providers/LinkProvider.ts +1 -1
  294. package/src/server/swagger/index.ts +1 -1
  295. package/src/sms/providers/LocalSmsProvider.spec.ts +153 -111
  296. package/src/sms/providers/LocalSmsProvider.ts +8 -7
  297. package/src/vite/index.ts +3 -2
  298. package/src/vite/tasks/buildClient.ts +0 -1
  299. package/src/vite/tasks/buildServer.ts +80 -22
  300. package/src/vite/tasks/copyAssets.ts +5 -4
  301. package/src/vite/tasks/generateCloudflare.ts +7 -0
  302. package/src/vite/tasks/generateSitemap.ts +64 -23
  303. package/src/vite/tasks/index.ts +0 -2
  304. package/src/vite/tasks/prerenderPages.ts +49 -24
  305. package/dist/server/security/index.browser.js +0 -13
  306. package/dist/server/security/index.browser.js.map +0 -1
  307. package/dist/server/security/index.d.ts +0 -173
  308. package/dist/server/security/index.d.ts.map +0 -1
  309. package/dist/server/security/index.js +0 -311
  310. package/dist/server/security/index.js.map +0 -1
  311. package/src/cli/assets/appRouterTs.ts +0 -9
  312. package/src/cli/assets/indexHtml.ts +0 -15
  313. package/src/cli/assets/mainTs.ts +0 -13
  314. package/src/cli/commands/format.ts +0 -17
  315. package/src/server/security/index.browser.ts +0 -10
  316. package/src/server/security/index.ts +0 -94
  317. package/src/vite/helpers/boot.ts +0 -106
  318. package/src/vite/plugins/viteAlephaDev.ts +0 -177
  319. package/src/vite/tasks/devServer.ts +0 -69
  320. package/src/vite/tasks/runAlepha.ts +0 -270
  321. /package/src/{server/security → security}/primitives/$basicAuth.ts +0 -0
  322. /package/src/{server/security → security}/providers/ServerBasicAuthProvider.ts +0 -0
@@ -2,6 +2,11 @@ import * as alepha0 from "alepha";
2
2
  import { FileLike, StreamLike } from "alepha";
3
3
  import { Readable } from "node:stream";
4
4
 
5
+ //#region ../../src/file/errors/FileError.d.ts
6
+ declare class FileError extends Error {
7
+ constructor(message: string, cause?: Error);
8
+ }
9
+ //#endregion
5
10
  //#region ../../src/file/providers/FileSystemProvider.d.ts
6
11
  /**
7
12
  * Options for creating a file from a URL
@@ -278,6 +283,134 @@ declare abstract class FileSystemProvider {
278
283
  abstract writeFile(path: string, data: Uint8Array | Buffer | string | FileLike): Promise<void>;
279
284
  }
280
285
  //#endregion
286
+ //#region ../../src/file/providers/MemoryFileSystemProvider.d.ts
287
+ interface MemoryFileSystemProviderOptions {
288
+ /**
289
+ * Error to throw on mkdir operations (for testing error handling)
290
+ */
291
+ mkdirError?: Error | null;
292
+ /**
293
+ * Error to throw on writeFile operations (for testing error handling)
294
+ */
295
+ writeFileError?: Error | null;
296
+ /**
297
+ * Error to throw on readFile operations (for testing error handling)
298
+ */
299
+ readFileError?: Error | null;
300
+ }
301
+ /**
302
+ * In-memory implementation of FileSystemProvider for testing.
303
+ *
304
+ * This provider stores all files and directories in memory, making it ideal for
305
+ * unit tests that need to verify file operations without touching the real file system.
306
+ *
307
+ * @example
308
+ * ```typescript
309
+ * // In tests, substitute the real FileSystemProvider with MemoryFileSystemProvider
310
+ * const alepha = Alepha.create().with({
311
+ * provide: FileSystemProvider,
312
+ * use: MemoryFileSystemProvider,
313
+ * });
314
+ *
315
+ * // Run code that uses FileSystemProvider
316
+ * const service = alepha.inject(MyService);
317
+ * await service.saveFile("test.txt", "Hello World");
318
+ *
319
+ * // Verify the file was written
320
+ * const memoryFs = alepha.inject(MemoryFileSystemProvider);
321
+ * expect(memoryFs.files.get("test.txt")?.toString()).toBe("Hello World");
322
+ * ```
323
+ */
324
+ declare class MemoryFileSystemProvider implements FileSystemProvider {
325
+ /**
326
+ * In-memory storage for files (path -> content)
327
+ */
328
+ files: Map<string, Buffer<ArrayBufferLike>>;
329
+ /**
330
+ * In-memory storage for directories
331
+ */
332
+ directories: Set<string>;
333
+ /**
334
+ * Track mkdir calls for test assertions
335
+ */
336
+ mkdirCalls: Array<{
337
+ path: string;
338
+ options?: MkdirOptions;
339
+ }>;
340
+ /**
341
+ * Track writeFile calls for test assertions
342
+ */
343
+ writeFileCalls: Array<{
344
+ path: string;
345
+ data: string;
346
+ }>;
347
+ /**
348
+ * Track join calls for test assertions
349
+ */
350
+ joinCalls: Array<string[]>;
351
+ /**
352
+ * Error to throw on mkdir (for testing error handling)
353
+ */
354
+ mkdirError: Error | null;
355
+ /**
356
+ * Error to throw on writeFile (for testing error handling)
357
+ */
358
+ writeFileError: Error | null;
359
+ /**
360
+ * Error to throw on readFile (for testing error handling)
361
+ */
362
+ readFileError: Error | null;
363
+ constructor(options?: MemoryFileSystemProviderOptions);
364
+ /**
365
+ * Join path segments using forward slashes.
366
+ */
367
+ join(...paths: string[]): string;
368
+ /**
369
+ * Create a FileLike object from various sources.
370
+ */
371
+ createFile(options: CreateFileOptions): FileLike;
372
+ /**
373
+ * Remove a file or directory from memory.
374
+ */
375
+ rm(path: string, options?: RmOptions): Promise<void>;
376
+ /**
377
+ * Copy a file or directory in memory.
378
+ */
379
+ cp(src: string, dest: string, options?: CpOptions): Promise<void>;
380
+ /**
381
+ * Move/rename a file or directory in memory.
382
+ */
383
+ mv(src: string, dest: string): Promise<void>;
384
+ /**
385
+ * Create a directory in memory.
386
+ */
387
+ mkdir(path: string, options?: MkdirOptions): Promise<void>;
388
+ /**
389
+ * List files in a directory.
390
+ */
391
+ ls(path: string, options?: LsOptions): Promise<string[]>;
392
+ /**
393
+ * Check if a file or directory exists in memory.
394
+ */
395
+ exists(path: string): Promise<boolean>;
396
+ /**
397
+ * Read a file from memory.
398
+ */
399
+ readFile(path: string): Promise<Buffer>;
400
+ /**
401
+ * Write a file to memory.
402
+ */
403
+ writeFile(path: string, data: Uint8Array | Buffer | string | FileLike): Promise<void>;
404
+ /**
405
+ * Reset all in-memory state (useful between tests).
406
+ */
407
+ reset(): void;
408
+ /**
409
+ * Get the content of a file as a string (convenience method for testing).
410
+ */
411
+ getFileContent(path: string): string | undefined;
412
+ }
413
+ //#endregion
281
414
  //#region ../../src/file/services/FileDetector.d.ts
282
415
  interface FileTypeResult {
283
416
  /**
@@ -702,5 +835,5 @@ declare class NodeFileSystemProvider implements FileSystemProvider {
702
835
  */
703
836
  declare const AlephaFile: alepha0.Service<alepha0.Module>;
704
837
  //#endregion
705
- export { AlephaFile, CpOptions, CreateFileFromArrayBufferOptions, CreateFileFromBufferOptions, CreateFileFromPathOptions, CreateFileFromResponseOptions, CreateFileFromStreamOptions, CreateFileFromTextOptions, CreateFileFromUrlOptions, CreateFileFromWebFileOptions, CreateFileOptions, FileDetector, FileSystemProvider, FileTypeResult, LsOptions, MkdirOptions, NodeFileSystemProvider, RmOptions };
838
+ export { AlephaFile, CpOptions, CreateFileFromArrayBufferOptions, CreateFileFromBufferOptions, CreateFileFromPathOptions, CreateFileFromResponseOptions, CreateFileFromStreamOptions, CreateFileFromTextOptions, CreateFileFromUrlOptions, CreateFileFromWebFileOptions, CreateFileOptions, FileDetector, FileError, FileSystemProvider, FileTypeResult, LsOptions, MemoryFileSystemProvider, MemoryFileSystemProviderOptions, MkdirOptions, NodeFileSystemProvider, RmOptions };
706
839
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","names":[],"sources":["../../src/file/providers/FileSystemProvider.ts","../../src/file/services/FileDetector.ts","../../src/file/providers/NodeFileSystemProvider.ts","../../src/file/index.ts"],"sourcesContent":[],"mappings":"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"}
1
+ {"version":3,"file":"index.d.ts","names":[],"sources":["../../src/file/errors/FileError.ts","../../src/file/providers/FileSystemProvider.ts","../../src/file/providers/MemoryFileSystemProvider.ts","../../src/file/services/FileDetector.ts","../../src/file/providers/NodeFileSystemProvider.ts","../../src/file/index.ts"],"mappings":"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"}
@@ -11,6 +11,247 @@ import { fileURLToPath } from "node:url";
11
11
  */
12
12
  var FileSystemProvider = class {};
13
13
 
14
+ //#endregion
15
+ //#region ../../src/file/providers/MemoryFileSystemProvider.ts
16
+ /**
17
+ * In-memory implementation of FileSystemProvider for testing.
18
+ *
19
+ * This provider stores all files and directories in memory, making it ideal for
20
+ * unit tests that need to verify file operations without touching the real file system.
21
+ *
22
+ * @example
23
+ * ```typescript
24
+ * // In tests, substitute the real FileSystemProvider with MemoryFileSystemProvider
25
+ * const alepha = Alepha.create().with({
26
+ * provide: FileSystemProvider,
27
+ * use: MemoryFileSystemProvider,
28
+ * });
29
+ *
30
+ * // Run code that uses FileSystemProvider
31
+ * const service = alepha.inject(MyService);
32
+ * await service.saveFile("test.txt", "Hello World");
33
+ *
34
+ * // Verify the file was written
35
+ * const memoryFs = alepha.inject(MemoryFileSystemProvider);
36
+ * expect(memoryFs.files.get("test.txt")?.toString()).toBe("Hello World");
37
+ * ```
38
+ */
39
+ var MemoryFileSystemProvider = class {
40
+ /**
41
+ * In-memory storage for files (path -> content)
42
+ */
43
+ files = /* @__PURE__ */ new Map();
44
+ /**
45
+ * In-memory storage for directories
46
+ */
47
+ directories = /* @__PURE__ */ new Set();
48
+ /**
49
+ * Track mkdir calls for test assertions
50
+ */
51
+ mkdirCalls = [];
52
+ /**
53
+ * Track writeFile calls for test assertions
54
+ */
55
+ writeFileCalls = [];
56
+ /**
57
+ * Track join calls for test assertions
58
+ */
59
+ joinCalls = [];
60
+ /**
61
+ * Error to throw on mkdir (for testing error handling)
62
+ */
63
+ mkdirError = null;
64
+ /**
65
+ * Error to throw on writeFile (for testing error handling)
66
+ */
67
+ writeFileError = null;
68
+ /**
69
+ * Error to throw on readFile (for testing error handling)
70
+ */
71
+ readFileError = null;
72
+ constructor(options = {}) {
73
+ this.mkdirError = options.mkdirError ?? null;
74
+ this.writeFileError = options.writeFileError ?? null;
75
+ this.readFileError = options.readFileError ?? null;
76
+ }
77
+ /**
78
+ * Join path segments using forward slashes.
79
+ */
80
+ join(...paths) {
81
+ this.joinCalls.push(paths);
82
+ return paths.filter(Boolean).join("/").replace(/\/+/g, "/");
83
+ }
84
+ /**
85
+ * Create a FileLike object from various sources.
86
+ */
87
+ createFile(options) {
88
+ if ("buffer" in options) {
89
+ const buffer = options.buffer;
90
+ return {
91
+ name: options.name ?? "file",
92
+ type: options.type ?? "application/octet-stream",
93
+ size: buffer.byteLength,
94
+ lastModified: Date.now(),
95
+ stream: () => {
96
+ throw new Error("Stream not implemented in MemoryFileSystemProvider");
97
+ },
98
+ arrayBuffer: async () => buffer.buffer.slice(buffer.byteOffset, buffer.byteOffset + buffer.byteLength),
99
+ text: async () => buffer.toString("utf-8")
100
+ };
101
+ }
102
+ if ("text" in options) {
103
+ const buffer = Buffer.from(options.text, "utf-8");
104
+ return {
105
+ name: options.name ?? "file.txt",
106
+ type: options.type ?? "text/plain",
107
+ size: buffer.byteLength,
108
+ lastModified: Date.now(),
109
+ stream: () => {
110
+ throw new Error("Stream not implemented in MemoryFileSystemProvider");
111
+ },
112
+ arrayBuffer: async () => buffer.buffer.slice(buffer.byteOffset, buffer.byteOffset + buffer.byteLength),
113
+ text: async () => options.text
114
+ };
115
+ }
116
+ throw new Error("MemoryFileSystemProvider.createFile: unsupported options. Only buffer and text are supported.");
117
+ }
118
+ /**
119
+ * Remove a file or directory from memory.
120
+ */
121
+ async rm(path, options) {
122
+ if (!(this.files.has(path) || this.directories.has(path)) && !options?.force) throw new Error(`ENOENT: no such file or directory, rm '${path}'`);
123
+ if (this.directories.has(path)) if (options?.recursive) {
124
+ this.directories.delete(path);
125
+ for (const filePath of this.files.keys()) if (filePath.startsWith(`${path}/`)) this.files.delete(filePath);
126
+ for (const dirPath of this.directories) if (dirPath.startsWith(`${path}/`)) this.directories.delete(dirPath);
127
+ } else throw new Error(`EISDIR: illegal operation on a directory, rm '${path}'`);
128
+ else this.files.delete(path);
129
+ }
130
+ /**
131
+ * Copy a file or directory in memory.
132
+ */
133
+ async cp(src, dest, options) {
134
+ if (this.directories.has(src)) {
135
+ if (!options?.recursive) throw new Error(`Cannot copy directory without recursive option: ${src}`);
136
+ this.directories.add(dest);
137
+ for (const [filePath, content] of this.files) if (filePath.startsWith(`${src}/`)) {
138
+ const newPath = filePath.replace(src, dest);
139
+ this.files.set(newPath, Buffer.from(content));
140
+ }
141
+ } else if (this.files.has(src)) {
142
+ const content = this.files.get(src);
143
+ this.files.set(dest, Buffer.from(content));
144
+ } else throw new Error(`ENOENT: no such file or directory, cp '${src}'`);
145
+ }
146
+ /**
147
+ * Move/rename a file or directory in memory.
148
+ */
149
+ async mv(src, dest) {
150
+ if (this.directories.has(src)) {
151
+ this.directories.delete(src);
152
+ this.directories.add(dest);
153
+ for (const [filePath, content] of this.files) if (filePath.startsWith(`${src}/`)) {
154
+ const newPath = filePath.replace(src, dest);
155
+ this.files.delete(filePath);
156
+ this.files.set(newPath, content);
157
+ }
158
+ } else if (this.files.has(src)) {
159
+ const content = this.files.get(src);
160
+ this.files.delete(src);
161
+ this.files.set(dest, content);
162
+ } else throw new Error(`ENOENT: no such file or directory, mv '${src}'`);
163
+ }
164
+ /**
165
+ * Create a directory in memory.
166
+ */
167
+ async mkdir(path, options) {
168
+ this.mkdirCalls.push({
169
+ path,
170
+ options
171
+ });
172
+ if (this.mkdirError) throw this.mkdirError;
173
+ if (this.directories.has(path) && !options?.recursive) throw new Error(`EEXIST: file already exists, mkdir '${path}'`);
174
+ this.directories.add(path);
175
+ if (options?.recursive) {
176
+ const parts = path.split("/").filter(Boolean);
177
+ let current = "";
178
+ for (const part of parts) {
179
+ current = current ? `${current}/${part}` : part;
180
+ this.directories.add(current);
181
+ }
182
+ }
183
+ }
184
+ /**
185
+ * List files in a directory.
186
+ */
187
+ async ls(path, options) {
188
+ const normalizedPath = path.replace(/\/$/, "");
189
+ const entries = /* @__PURE__ */ new Set();
190
+ for (const filePath of this.files.keys()) if (filePath.startsWith(`${normalizedPath}/`)) {
191
+ const relativePath = filePath.slice(normalizedPath.length + 1);
192
+ const parts = relativePath.split("/");
193
+ if (options?.recursive) entries.add(relativePath);
194
+ else entries.add(parts[0]);
195
+ }
196
+ for (const dirPath of this.directories) if (dirPath.startsWith(`${normalizedPath}/`) && dirPath !== normalizedPath) {
197
+ const relativePath = dirPath.slice(normalizedPath.length + 1);
198
+ const parts = relativePath.split("/");
199
+ if (options?.recursive) entries.add(relativePath);
200
+ else if (parts.length === 1) entries.add(parts[0]);
201
+ }
202
+ let result = Array.from(entries);
203
+ if (!options?.hidden) result = result.filter((entry) => !entry.startsWith("."));
204
+ return result.sort();
205
+ }
206
+ /**
207
+ * Check if a file or directory exists in memory.
208
+ */
209
+ async exists(path) {
210
+ return this.files.has(path) || this.directories.has(path);
211
+ }
212
+ /**
213
+ * Read a file from memory.
214
+ */
215
+ async readFile(path) {
216
+ if (this.readFileError) throw this.readFileError;
217
+ const content = this.files.get(path);
218
+ if (!content) throw new Error(`ENOENT: no such file or directory, open '${path}'`);
219
+ return content;
220
+ }
221
+ /**
222
+ * Write a file to memory.
223
+ */
224
+ async writeFile(path, data) {
225
+ const dataStr = typeof data === "string" ? data : data instanceof Buffer || data instanceof Uint8Array ? data.toString("utf-8") : await data.text();
226
+ this.writeFileCalls.push({
227
+ path,
228
+ data: dataStr
229
+ });
230
+ if (this.writeFileError) throw this.writeFileError;
231
+ const buffer = typeof data === "string" ? Buffer.from(data, "utf-8") : data instanceof Buffer ? data : data instanceof Uint8Array ? Buffer.from(data) : Buffer.from(await data.text(), "utf-8");
232
+ this.files.set(path, buffer);
233
+ }
234
+ /**
235
+ * Reset all in-memory state (useful between tests).
236
+ */
237
+ reset() {
238
+ this.files.clear();
239
+ this.directories.clear();
240
+ this.mkdirCalls = [];
241
+ this.writeFileCalls = [];
242
+ this.joinCalls = [];
243
+ this.mkdirError = null;
244
+ this.writeFileError = null;
245
+ this.readFileError = null;
246
+ }
247
+ /**
248
+ * Get the content of a file as a string (convenience method for testing).
249
+ */
250
+ getFileContent(path) {
251
+ return this.files.get(path)?.toString("utf-8");
252
+ }
253
+ };
254
+
14
255
  //#endregion
15
256
  //#region ../../src/file/services/FileDetector.ts
16
257
  /**
@@ -1179,6 +1420,16 @@ var NodeFileSystemProvider = class {
1179
1420
  }
1180
1421
  };
1181
1422
 
1423
+ //#endregion
1424
+ //#region ../../src/file/errors/FileError.ts
1425
+ var FileError = class extends Error {
1426
+ constructor(message, cause) {
1427
+ super(message);
1428
+ this.name = "FileError";
1429
+ this.cause = cause;
1430
+ }
1431
+ };
1432
+
1182
1433
  //#endregion
1183
1434
  //#region ../../src/file/index.ts
1184
1435
  /**
@@ -1198,6 +1449,7 @@ const AlephaFile = $module({
1198
1449
  services: [
1199
1450
  FileDetector,
1200
1451
  FileSystemProvider,
1452
+ MemoryFileSystemProvider,
1201
1453
  NodeFileSystemProvider
1202
1454
  ],
1203
1455
  register: (alepha) => alepha.with({
@@ -1208,5 +1460,5 @@ const AlephaFile = $module({
1208
1460
  });
1209
1461
 
1210
1462
  //#endregion
1211
- export { AlephaFile, FileDetector, FileSystemProvider, NodeFileSystemProvider };
1463
+ export { AlephaFile, FileDetector, FileError, FileSystemProvider, MemoryFileSystemProvider, NodeFileSystemProvider };
1212
1464
  //# sourceMappingURL=index.js.map