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.
- package/README.md +44 -102
- package/dist/api/audits/index.d.ts +331 -443
- package/dist/api/audits/index.d.ts.map +1 -1
- package/dist/api/audits/index.js +2 -2
- package/dist/api/audits/index.js.map +1 -1
- package/dist/api/files/index.d.ts +0 -113
- package/dist/api/files/index.d.ts.map +1 -1
- package/dist/api/files/index.js +2 -3
- package/dist/api/files/index.js.map +1 -1
- package/dist/api/jobs/index.d.ts +151 -262
- package/dist/api/jobs/index.d.ts.map +1 -1
- package/dist/api/notifications/index.browser.js +4 -4
- package/dist/api/notifications/index.browser.js.map +1 -1
- package/dist/api/notifications/index.d.ts +164 -276
- package/dist/api/notifications/index.d.ts.map +1 -1
- package/dist/api/notifications/index.js +4 -4
- package/dist/api/notifications/index.js.map +1 -1
- package/dist/api/parameters/index.d.ts +265 -377
- package/dist/api/parameters/index.d.ts.map +1 -1
- package/dist/api/users/index.browser.js +1 -2
- package/dist/api/users/index.browser.js.map +1 -1
- package/dist/api/users/index.d.ts +195 -301
- package/dist/api/users/index.d.ts.map +1 -1
- package/dist/api/users/index.js +203 -184
- package/dist/api/users/index.js.map +1 -1
- package/dist/api/verifications/index.d.ts.map +1 -1
- package/dist/batch/index.d.ts.map +1 -1
- package/dist/batch/index.js +1 -2
- package/dist/batch/index.js.map +1 -1
- package/dist/bucket/index.d.ts.map +1 -1
- package/dist/cache/core/index.d.ts.map +1 -1
- package/dist/cache/redis/index.d.ts.map +1 -1
- package/dist/cache/redis/index.js +2 -2
- package/dist/cache/redis/index.js.map +1 -1
- package/dist/cli/index.d.ts +5900 -165
- package/dist/cli/index.d.ts.map +1 -1
- package/dist/cli/index.js +1481 -639
- package/dist/cli/index.js.map +1 -1
- package/dist/command/index.d.ts +8 -4
- package/dist/command/index.d.ts.map +1 -1
- package/dist/command/index.js +29 -25
- package/dist/command/index.js.map +1 -1
- package/dist/core/index.browser.js +563 -54
- package/dist/core/index.browser.js.map +1 -1
- package/dist/core/index.d.ts +175 -8
- package/dist/core/index.d.ts.map +1 -1
- package/dist/core/index.js +564 -54
- package/dist/core/index.js.map +1 -1
- package/dist/core/index.native.js +563 -54
- package/dist/core/index.native.js.map +1 -1
- package/dist/datetime/index.d.ts.map +1 -1
- package/dist/datetime/index.js +4 -4
- package/dist/datetime/index.js.map +1 -1
- package/dist/email/index.d.ts +89 -42
- package/dist/email/index.d.ts.map +1 -1
- package/dist/email/index.js +129 -33
- package/dist/email/index.js.map +1 -1
- package/dist/fake/index.d.ts +7969 -2
- package/dist/fake/index.d.ts.map +1 -1
- package/dist/fake/index.js +22 -22
- package/dist/fake/index.js.map +1 -1
- package/dist/file/index.d.ts +134 -1
- package/dist/file/index.d.ts.map +1 -1
- package/dist/file/index.js +253 -1
- package/dist/file/index.js.map +1 -1
- package/dist/lock/core/index.d.ts.map +1 -1
- package/dist/lock/redis/index.d.ts.map +1 -1
- package/dist/logger/index.d.ts +1 -2
- package/dist/logger/index.d.ts.map +1 -1
- package/dist/logger/index.js +1 -5
- package/dist/logger/index.js.map +1 -1
- package/dist/mcp/index.d.ts +19 -1
- package/dist/mcp/index.d.ts.map +1 -1
- package/dist/mcp/index.js +28 -4
- package/dist/mcp/index.js.map +1 -1
- package/dist/orm/chunk-DH6iiROE.js +38 -0
- package/dist/orm/index.browser.js +9 -9
- package/dist/orm/index.browser.js.map +1 -1
- package/dist/orm/index.bun.js +2821 -0
- package/dist/orm/index.bun.js.map +1 -0
- package/dist/orm/index.d.ts +318 -169
- package/dist/orm/index.d.ts.map +1 -1
- package/dist/orm/index.js +2086 -1776
- package/dist/orm/index.js.map +1 -1
- package/dist/queue/core/index.d.ts +4 -4
- package/dist/queue/core/index.d.ts.map +1 -1
- package/dist/queue/redis/index.d.ts.map +1 -1
- package/dist/redis/index.bun.js +285 -0
- package/dist/redis/index.bun.js.map +1 -0
- package/dist/redis/index.d.ts +13 -31
- package/dist/redis/index.d.ts.map +1 -1
- package/dist/redis/index.js +18 -38
- package/dist/redis/index.js.map +1 -1
- package/dist/retry/index.d.ts.map +1 -1
- package/dist/router/index.d.ts.map +1 -1
- package/dist/scheduler/index.d.ts +83 -1
- package/dist/scheduler/index.d.ts.map +1 -1
- package/dist/scheduler/index.js +393 -1
- package/dist/scheduler/index.js.map +1 -1
- package/dist/security/index.browser.js +5 -1
- package/dist/security/index.browser.js.map +1 -1
- package/dist/security/index.d.ts +598 -112
- package/dist/security/index.d.ts.map +1 -1
- package/dist/security/index.js +1808 -97
- package/dist/security/index.js.map +1 -1
- package/dist/server/auth/index.d.ts +1200 -175
- package/dist/server/auth/index.d.ts.map +1 -1
- package/dist/server/auth/index.js +1268 -37
- package/dist/server/auth/index.js.map +1 -1
- package/dist/server/cache/index.d.ts +6 -3
- package/dist/server/cache/index.d.ts.map +1 -1
- package/dist/server/cache/index.js +1 -1
- package/dist/server/cache/index.js.map +1 -1
- package/dist/server/compress/index.d.ts.map +1 -1
- package/dist/server/cookies/index.d.ts.map +1 -1
- package/dist/server/cookies/index.js +3 -3
- package/dist/server/cookies/index.js.map +1 -1
- package/dist/server/core/index.d.ts +115 -13
- package/dist/server/core/index.d.ts.map +1 -1
- package/dist/server/core/index.js +321 -139
- package/dist/server/core/index.js.map +1 -1
- package/dist/server/cors/index.d.ts +0 -1
- package/dist/server/cors/index.d.ts.map +1 -1
- package/dist/server/health/index.d.ts +0 -1
- package/dist/server/health/index.d.ts.map +1 -1
- package/dist/server/helmet/index.d.ts.map +1 -1
- package/dist/server/links/index.browser.js +9 -1
- package/dist/server/links/index.browser.js.map +1 -1
- package/dist/server/links/index.d.ts +1 -2
- package/dist/server/links/index.d.ts.map +1 -1
- package/dist/server/links/index.js +14 -7
- package/dist/server/links/index.js.map +1 -1
- package/dist/server/metrics/index.d.ts +514 -1
- package/dist/server/metrics/index.d.ts.map +1 -1
- package/dist/server/metrics/index.js +4462 -4
- package/dist/server/metrics/index.js.map +1 -1
- package/dist/server/multipart/index.d.ts.map +1 -1
- package/dist/server/proxy/index.d.ts +0 -1
- package/dist/server/proxy/index.d.ts.map +1 -1
- package/dist/server/rate-limit/index.d.ts.map +1 -1
- package/dist/server/static/index.d.ts.map +1 -1
- package/dist/server/swagger/index.d.ts +1 -2
- package/dist/server/swagger/index.d.ts.map +1 -1
- package/dist/server/swagger/index.js +1 -2
- package/dist/server/swagger/index.js.map +1 -1
- package/dist/sms/index.d.ts +3 -1
- package/dist/sms/index.d.ts.map +1 -1
- package/dist/sms/index.js +10 -10
- package/dist/sms/index.js.map +1 -1
- package/dist/thread/index.d.ts +0 -1
- package/dist/thread/index.d.ts.map +1 -1
- package/dist/thread/index.js +2 -2
- package/dist/thread/index.js.map +1 -1
- package/dist/topic/core/index.d.ts.map +1 -1
- package/dist/topic/redis/index.d.ts.map +1 -1
- package/dist/vite/index.d.ts +6315 -149
- package/dist/vite/index.d.ts.map +1 -1
- package/dist/vite/index.js +140 -469
- package/dist/vite/index.js.map +1 -1
- package/dist/websocket/index.browser.js +9 -9
- package/dist/websocket/index.browser.js.map +1 -1
- package/dist/websocket/index.d.ts +28 -28
- package/dist/websocket/index.d.ts.map +1 -1
- package/dist/websocket/index.js +9 -9
- package/dist/websocket/index.js.map +1 -1
- package/package.json +13 -18
- package/src/api/files/controllers/AdminFileStatsController.ts +0 -1
- package/src/api/users/atoms/realmAuthSettingsAtom.ts +5 -0
- package/src/api/users/controllers/{UserRealmController.ts → RealmController.ts} +11 -11
- package/src/api/users/entities/users.ts +1 -1
- package/src/api/users/index.ts +8 -8
- package/src/api/users/primitives/{$userRealm.ts → $realm.ts} +17 -19
- package/src/api/users/providers/{UserRealmProvider.ts → RealmProvider.ts} +26 -30
- package/src/api/users/schemas/{userRealmConfigSchema.ts → realmConfigSchema.ts} +2 -2
- package/src/api/users/services/CredentialService.ts +7 -7
- package/src/api/users/services/IdentityService.ts +4 -4
- package/src/api/users/services/RegistrationService.spec.ts +25 -27
- package/src/api/users/services/RegistrationService.ts +38 -27
- package/src/api/users/services/SessionCrudService.ts +3 -3
- package/src/api/users/services/SessionService.spec.ts +3 -3
- package/src/api/users/services/SessionService.ts +27 -18
- package/src/api/users/services/UserService.ts +7 -7
- package/src/batch/providers/BatchProvider.ts +1 -2
- package/src/cli/apps/AlephaCli.ts +2 -2
- package/src/cli/apps/AlephaPackageBuilderCli.ts +47 -20
- package/src/cli/assets/apiHelloControllerTs.ts +19 -0
- package/src/cli/assets/apiIndexTs.ts +16 -0
- package/src/cli/assets/biomeJson.ts +2 -1
- package/src/cli/assets/claudeMd.ts +308 -0
- package/src/cli/assets/dummySpecTs.ts +2 -1
- package/src/cli/assets/editorconfig.ts +2 -1
- package/src/cli/assets/mainBrowserTs.ts +4 -3
- package/src/cli/assets/mainCss.ts +24 -0
- package/src/cli/assets/mainServerTs.ts +24 -0
- package/src/cli/assets/tsconfigJson.ts +2 -1
- package/src/cli/assets/webAppRouterTs.ts +16 -0
- package/src/cli/assets/webHelloComponentTsx.ts +20 -0
- package/src/cli/assets/webIndexTs.ts +16 -0
- package/src/cli/atoms/appEntryOptions.ts +13 -0
- package/src/cli/atoms/buildOptions.ts +1 -1
- package/src/cli/atoms/changelogOptions.ts +1 -1
- package/src/cli/commands/build.ts +97 -61
- package/src/cli/commands/db.ts +21 -18
- package/src/cli/commands/deploy.ts +17 -5
- package/src/cli/commands/dev.ts +26 -47
- package/src/cli/commands/gen/env.ts +1 -1
- package/src/cli/commands/init.ts +79 -25
- package/src/cli/commands/lint.ts +9 -3
- package/src/cli/commands/test.ts +8 -2
- package/src/cli/commands/typecheck.ts +5 -1
- package/src/cli/commands/verify.ts +4 -2
- package/src/cli/defineConfig.ts +9 -0
- package/src/cli/index.ts +2 -1
- package/src/cli/providers/AppEntryProvider.ts +131 -0
- package/src/cli/providers/ViteBuildProvider.ts +82 -0
- package/src/cli/providers/ViteDevServerProvider.ts +350 -0
- package/src/cli/providers/ViteTemplateProvider.ts +27 -0
- package/src/cli/services/AlephaCliUtils.ts +72 -602
- package/src/cli/services/PackageManagerUtils.ts +308 -0
- package/src/cli/services/ProjectScaffolder.ts +329 -0
- package/src/command/helpers/Runner.ts +15 -3
- package/src/core/Alepha.ts +2 -8
- package/src/core/__tests__/Alepha-graph.spec.ts +4 -0
- package/src/core/index.shared.ts +1 -0
- package/src/core/index.ts +2 -0
- package/src/core/primitives/$hook.ts +6 -2
- package/src/core/primitives/$module.spec.ts +4 -0
- package/src/core/primitives/$module.ts +12 -0
- package/src/core/providers/AlsProvider.ts +1 -1
- package/src/core/providers/CodecManager.spec.ts +12 -6
- package/src/core/providers/CodecManager.ts +26 -6
- package/src/core/providers/EventManager.ts +169 -13
- package/src/core/providers/KeylessJsonSchemaCodec.spec.ts +878 -0
- package/src/core/providers/KeylessJsonSchemaCodec.ts +789 -0
- package/src/core/providers/SchemaValidator.spec.ts +236 -0
- package/src/core/providers/StateManager.spec.ts +27 -16
- package/src/email/providers/LocalEmailProvider.spec.ts +111 -87
- package/src/email/providers/LocalEmailProvider.ts +52 -15
- package/src/email/providers/NodemailerEmailProvider.ts +167 -56
- package/src/file/errors/FileError.ts +7 -0
- package/src/file/index.ts +9 -1
- package/src/file/providers/MemoryFileSystemProvider.ts +393 -0
- package/src/logger/providers/PrettyFormatterProvider.ts +0 -9
- package/src/mcp/errors/McpError.ts +30 -0
- package/src/mcp/index.ts +3 -0
- package/src/mcp/transports/SseMcpTransport.ts +16 -6
- package/src/orm/index.browser.ts +1 -19
- package/src/orm/index.bun.ts +77 -0
- package/src/orm/index.shared-server.ts +22 -0
- package/src/orm/index.shared.ts +15 -0
- package/src/orm/index.ts +19 -39
- package/src/orm/providers/DrizzleKitProvider.ts +3 -5
- package/src/orm/providers/drivers/BunPostgresProvider.ts +3 -5
- package/src/orm/providers/drivers/BunSqliteProvider.ts +1 -1
- package/src/orm/providers/drivers/CloudflareD1Provider.ts +4 -0
- package/src/orm/providers/drivers/DatabaseProvider.ts +4 -0
- package/src/orm/providers/drivers/PglitePostgresProvider.ts +4 -0
- package/src/orm/services/Repository.ts +19 -0
- package/src/redis/index.bun.ts +35 -0
- package/src/redis/providers/BunRedisProvider.ts +12 -43
- package/src/redis/providers/BunRedisSubscriberProvider.ts +2 -3
- package/src/redis/providers/NodeRedisProvider.ts +16 -34
- package/src/{server/security → security}/__tests__/BasicAuth.spec.ts +11 -11
- package/src/{server/security → security}/__tests__/ServerSecurityProvider-realm.spec.ts +21 -16
- package/src/{server/security/providers → security/__tests__}/ServerSecurityProvider.spec.ts +5 -5
- package/src/security/index.browser.ts +5 -0
- package/src/security/index.ts +90 -7
- package/src/security/primitives/{$realm.spec.ts → $issuer.spec.ts} +11 -11
- package/src/security/primitives/{$realm.ts → $issuer.ts} +20 -17
- package/src/security/primitives/$role.ts +5 -5
- package/src/security/primitives/$serviceAccount.spec.ts +5 -5
- package/src/security/primitives/$serviceAccount.ts +3 -3
- package/src/{server/security → security}/providers/ServerSecurityProvider.ts +5 -7
- package/src/server/auth/primitives/$auth.ts +10 -10
- package/src/server/auth/primitives/$authCredentials.ts +3 -3
- package/src/server/auth/primitives/$authGithub.ts +3 -3
- package/src/server/auth/primitives/$authGoogle.ts +3 -3
- package/src/server/auth/providers/ServerAuthProvider.ts +13 -13
- package/src/server/cache/providers/ServerCacheProvider.ts +1 -1
- package/src/server/cookies/providers/ServerCookiesProvider.ts +3 -3
- package/src/server/core/index.ts +1 -1
- package/src/server/core/providers/BunHttpServerProvider.ts +1 -1
- package/src/server/core/providers/NodeHttpServerProvider.spec.ts +125 -0
- package/src/server/core/providers/NodeHttpServerProvider.ts +92 -24
- package/src/server/core/providers/ServerBodyParserProvider.ts +19 -23
- package/src/server/core/providers/ServerLoggerProvider.ts +23 -19
- package/src/server/core/providers/ServerProvider.ts +144 -24
- package/src/server/core/providers/ServerRouterProvider.ts +259 -115
- package/src/server/core/providers/ServerTimingProvider.ts +2 -2
- package/src/server/links/atoms/apiLinksAtom.ts +7 -0
- package/src/server/links/index.browser.ts +2 -0
- package/src/server/links/index.ts +3 -1
- package/src/server/links/providers/LinkProvider.ts +1 -1
- package/src/server/swagger/index.ts +1 -1
- package/src/sms/providers/LocalSmsProvider.spec.ts +153 -111
- package/src/sms/providers/LocalSmsProvider.ts +8 -7
- package/src/vite/index.ts +3 -2
- package/src/vite/tasks/buildClient.ts +0 -1
- package/src/vite/tasks/buildServer.ts +80 -22
- package/src/vite/tasks/copyAssets.ts +5 -4
- package/src/vite/tasks/generateCloudflare.ts +7 -0
- package/src/vite/tasks/generateSitemap.ts +64 -23
- package/src/vite/tasks/index.ts +0 -2
- package/src/vite/tasks/prerenderPages.ts +49 -24
- package/dist/server/security/index.browser.js +0 -13
- package/dist/server/security/index.browser.js.map +0 -1
- package/dist/server/security/index.d.ts +0 -173
- package/dist/server/security/index.d.ts.map +0 -1
- package/dist/server/security/index.js +0 -311
- package/dist/server/security/index.js.map +0 -1
- package/src/cli/assets/appRouterTs.ts +0 -9
- package/src/cli/assets/indexHtml.ts +0 -15
- package/src/cli/assets/mainTs.ts +0 -13
- package/src/cli/commands/format.ts +0 -17
- package/src/server/security/index.browser.ts +0 -10
- package/src/server/security/index.ts +0 -94
- package/src/vite/helpers/boot.ts +0 -106
- package/src/vite/plugins/viteAlephaDev.ts +0 -177
- package/src/vite/tasks/devServer.ts +0 -69
- package/src/vite/tasks/runAlepha.ts +0 -270
- /package/src/{server/security → security}/primitives/$basicAuth.ts +0 -0
- /package/src/{server/security → security}/providers/ServerBasicAuthProvider.ts +0 -0
package/dist/file/index.d.ts
CHANGED
|
@@ -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
|
package/dist/file/index.d.ts.map
CHANGED
|
@@ -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"],"
|
|
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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"}
|
package/dist/file/index.js
CHANGED
|
@@ -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
|