alepha 0.15.0 → 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 +43 -98
- package/dist/api/audits/index.d.ts +240 -240
- 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 +185 -185
- package/dist/api/files/index.d.ts.map +1 -1
- package/dist/api/files/index.js +2 -2
- package/dist/api/files/index.js.map +1 -1
- package/dist/api/jobs/index.d.ts +245 -245
- 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 +74 -74
- 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 +221 -221
- package/dist/api/parameters/index.d.ts.map +1 -1
- package/dist/api/users/index.d.ts +1632 -1631
- package/dist/api/users/index.d.ts.map +1 -1
- package/dist/api/users/index.js +26 -34
- package/dist/api/users/index.js.map +1 -1
- package/dist/api/verifications/index.d.ts +132 -132
- package/dist/api/verifications/index.d.ts.map +1 -1
- package/dist/batch/index.d.ts +122 -122
- package/dist/batch/index.d.ts.map +1 -1
- package/dist/bucket/index.d.ts +163 -163
- package/dist/bucket/index.d.ts.map +1 -1
- package/dist/cache/core/index.d.ts +46 -46
- 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 +5933 -201
- package/dist/cli/index.d.ts.map +1 -1
- package/dist/cli/index.js +609 -169
- package/dist/cli/index.js.map +1 -1
- package/dist/command/index.d.ts +296 -296
- package/dist/command/index.d.ts.map +1 -1
- package/dist/command/index.js +19 -19
- package/dist/command/index.js.map +1 -1
- package/dist/core/index.browser.js +268 -79
- package/dist/core/index.browser.js.map +1 -1
- package/dist/core/index.d.ts +768 -694
- package/dist/core/index.d.ts.map +1 -1
- package/dist/core/index.js +268 -79
- package/dist/core/index.js.map +1 -1
- package/dist/core/index.native.js +268 -79
- package/dist/core/index.native.js.map +1 -1
- package/dist/datetime/index.d.ts +44 -44
- package/dist/datetime/index.d.ts.map +1 -1
- package/dist/email/index.d.ts +25 -25
- package/dist/email/index.d.ts.map +1 -1
- package/dist/fake/index.d.ts +5409 -5409
- 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 +435 -435
- package/dist/file/index.d.ts.map +1 -1
- package/dist/lock/core/index.d.ts +208 -208
- 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 +24 -24
- 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 +216 -198
- 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/index.browser.js +9 -9
- package/dist/orm/index.browser.js.map +1 -1
- package/dist/orm/index.bun.js +83 -76
- package/dist/orm/index.bun.js.map +1 -1
- package/dist/orm/index.d.ts +961 -960
- package/dist/orm/index.d.ts.map +1 -1
- package/dist/orm/index.js +88 -81
- package/dist/orm/index.js.map +1 -1
- package/dist/queue/core/index.d.ts +244 -244
- package/dist/queue/core/index.d.ts.map +1 -1
- package/dist/queue/redis/index.d.ts.map +1 -1
- package/dist/redis/index.d.ts +105 -105
- package/dist/redis/index.d.ts.map +1 -1
- package/dist/retry/index.d.ts +69 -69
- package/dist/retry/index.d.ts.map +1 -1
- package/dist/router/index.d.ts +6 -6
- package/dist/router/index.d.ts.map +1 -1
- package/dist/scheduler/index.d.ts +108 -26
- 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.d.ts +532 -209
- package/dist/security/index.d.ts.map +1 -1
- package/dist/security/index.js +1422 -11
- package/dist/security/index.js.map +1 -1
- package/dist/server/auth/index.d.ts +1296 -271
- package/dist/server/auth/index.d.ts.map +1 -1
- package/dist/server/auth/index.js +1249 -18
- package/dist/server/auth/index.js.map +1 -1
- package/dist/server/cache/index.d.ts +56 -56
- package/dist/server/cache/index.d.ts.map +1 -1
- package/dist/server/compress/index.d.ts +3 -3
- package/dist/server/compress/index.d.ts.map +1 -1
- package/dist/server/cookies/index.d.ts +6 -6
- package/dist/server/cookies/index.d.ts.map +1 -1
- package/dist/server/core/index.d.ts +196 -186
- package/dist/server/core/index.d.ts.map +1 -1
- package/dist/server/core/index.js +43 -27
- package/dist/server/core/index.js.map +1 -1
- package/dist/server/cors/index.d.ts +11 -11
- package/dist/server/cors/index.d.ts.map +1 -1
- package/dist/server/health/index.d.ts.map +1 -1
- package/dist/server/helmet/index.d.ts +2 -2
- 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 +83 -83
- package/dist/server/links/index.d.ts.map +1 -1
- package/dist/server/links/index.js +13 -5
- 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 +6 -6
- package/dist/server/multipart/index.d.ts.map +1 -1
- package/dist/server/proxy/index.d.ts +102 -102
- package/dist/server/proxy/index.d.ts.map +1 -1
- package/dist/server/rate-limit/index.d.ts +16 -16
- package/dist/server/rate-limit/index.d.ts.map +1 -1
- package/dist/server/static/index.d.ts +44 -44
- package/dist/server/static/index.d.ts.map +1 -1
- package/dist/server/swagger/index.d.ts +47 -47
- package/dist/server/swagger/index.d.ts.map +1 -1
- package/dist/sms/index.d.ts +11 -11
- package/dist/sms/index.d.ts.map +1 -1
- package/dist/sms/index.js +3 -3
- package/dist/sms/index.js.map +1 -1
- package/dist/thread/index.d.ts +71 -71
- 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 +318 -318
- package/dist/topic/core/index.d.ts.map +1 -1
- package/dist/topic/redis/index.d.ts +6 -6
- package/dist/topic/redis/index.d.ts.map +1 -1
- package/dist/vite/index.d.ts +2324 -1719
- package/dist/vite/index.d.ts.map +1 -1
- package/dist/vite/index.js +123 -475
- package/dist/vite/index.js.map +1 -1
- package/dist/websocket/index.browser.js +3 -3
- package/dist/websocket/index.browser.js.map +1 -1
- package/dist/websocket/index.d.ts +275 -275
- package/dist/websocket/index.d.ts.map +1 -1
- package/dist/websocket/index.js +3 -3
- package/dist/websocket/index.js.map +1 -1
- package/package.json +9 -9
- package/src/api/users/services/SessionService.ts +0 -10
- package/src/cli/apps/AlephaCli.ts +2 -2
- package/src/cli/apps/AlephaPackageBuilderCli.ts +9 -1
- package/src/cli/assets/apiHelloControllerTs.ts +2 -1
- package/src/cli/assets/biomeJson.ts +2 -1
- package/src/cli/assets/claudeMd.ts +9 -4
- package/src/cli/assets/dummySpecTs.ts +2 -1
- package/src/cli/assets/editorconfig.ts +2 -1
- package/src/cli/assets/mainBrowserTs.ts +2 -1
- package/src/cli/assets/mainCss.ts +24 -0
- package/src/cli/assets/tsconfigJson.ts +2 -1
- package/src/cli/assets/webAppRouterTs.ts +2 -1
- package/src/cli/assets/webHelloComponentTsx.ts +6 -2
- 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 +63 -47
- package/src/cli/commands/dev.ts +16 -33
- package/src/cli/commands/gen/env.ts +1 -1
- package/src/cli/commands/init.ts +17 -8
- package/src/cli/commands/lint.ts +1 -1
- 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 +33 -2
- package/src/cli/services/PackageManagerUtils.ts +13 -6
- package/src/cli/services/ProjectScaffolder.ts +72 -49
- package/src/core/Alepha.ts +2 -8
- package/src/core/primitives/$module.ts +12 -0
- package/src/core/providers/KeylessJsonSchemaCodec.spec.ts +257 -0
- package/src/core/providers/KeylessJsonSchemaCodec.ts +396 -14
- package/src/core/providers/SchemaValidator.spec.ts +236 -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/providers/DrizzleKitProvider.ts +3 -5
- package/src/orm/services/Repository.ts +11 -0
- 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 +71 -22
- package/src/server/core/providers/ServerLoggerProvider.ts +2 -2
- package/src/server/core/providers/ServerProvider.ts +9 -12
- package/src/server/links/atoms/apiLinksAtom.ts +7 -0
- package/src/server/links/index.browser.ts +2 -0
- package/src/server/links/index.ts +2 -0
- package/src/vite/index.ts +3 -2
- package/src/vite/tasks/buildClient.ts +0 -1
- package/src/vite/tasks/buildServer.ts +68 -21
- package/src/vite/tasks/copyAssets.ts +5 -4
- 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/src/cli/assets/indexHtml.ts +0 -15
- package/src/cli/commands/format.ts +0 -23
- package/src/vite/helpers/boot.ts +0 -117
- package/src/vite/plugins/viteAlephaDev.ts +0 -177
- package/src/vite/tasks/devServer.ts +0 -71
- package/src/vite/tasks/runAlepha.ts +0 -270
- /package/dist/orm/{chunk-DtkW-qnP.js → chunk-DH6iiROE.js} +0 -0
package/dist/bucket/index.d.ts
CHANGED
|
@@ -7,36 +7,36 @@ import * as alepha_logger0 from "alepha/logger";
|
|
|
7
7
|
//#region ../../src/bucket/providers/FileStorageProvider.d.ts
|
|
8
8
|
declare abstract class FileStorageProvider {
|
|
9
9
|
/**
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
10
|
+
* Uploads a file to the storage.
|
|
11
|
+
*
|
|
12
|
+
* @param bucketName - Container name
|
|
13
|
+
* @param file - File to upload
|
|
14
|
+
* @param fileId - Optional file identifier. If not provided, a unique ID will be generated.
|
|
15
|
+
* @return The identifier of the uploaded file.
|
|
16
|
+
*/
|
|
17
17
|
abstract upload(bucketName: string, file: FileLike, fileId?: string): Promise<string>;
|
|
18
18
|
/**
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
19
|
+
* Downloads a file from the storage.
|
|
20
|
+
*
|
|
21
|
+
* @param bucketName - Container name
|
|
22
|
+
* @param fileId - Identifier of the file to download
|
|
23
|
+
* @return The downloaded file as a FileLike object.
|
|
24
|
+
*/
|
|
25
25
|
abstract download(bucketName: string, fileId: string): Promise<FileLike>;
|
|
26
26
|
/**
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
27
|
+
* Check if fileId exists in the storage bucket.
|
|
28
|
+
*
|
|
29
|
+
* @param bucketName - Container name
|
|
30
|
+
* @param fileId - Identifier of the file to stream
|
|
31
|
+
* @return True is the file exists, false otherwise.
|
|
32
|
+
*/
|
|
33
33
|
abstract exists(bucketName: string, fileId: string): Promise<boolean>;
|
|
34
34
|
/**
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
35
|
+
* Delete permanently a file from the storage.
|
|
36
|
+
*
|
|
37
|
+
* @param bucketName - Container name
|
|
38
|
+
* @param fileId - Identifier of the file to delete
|
|
39
|
+
*/
|
|
40
40
|
abstract delete(bucketName: string, fileId: string): Promise<void>;
|
|
41
41
|
}
|
|
42
42
|
//#endregion
|
|
@@ -108,134 +108,134 @@ declare const $bucket: {
|
|
|
108
108
|
};
|
|
109
109
|
interface BucketPrimitiveOptions extends BucketFileOptions {
|
|
110
110
|
/**
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
111
|
+
* File storage provider configuration for the bucket.
|
|
112
|
+
*
|
|
113
|
+
* Options:
|
|
114
|
+
* - **"memory"**: In-memory storage (default for development, lost on restart)
|
|
115
|
+
* - **Service<FileStorageProvider>**: Custom provider class (e.g., S3FileStorageProvider, AzureBlobProvider)
|
|
116
|
+
* - **undefined**: Uses the default file storage provider from dependency injection
|
|
117
|
+
*
|
|
118
|
+
* **Provider Selection Guidelines**:
|
|
119
|
+
* - **Development**: Use "memory" for fast, simple testing without external dependencies
|
|
120
|
+
* - **Production**: Use cloud providers (S3, Azure Blob, Google Cloud Storage) for scalability
|
|
121
|
+
* - **Local deployment**: Use filesystem providers for on-premise installations
|
|
122
|
+
* - **Hybrid**: Use different providers for different bucket types (temp files vs permanent storage)
|
|
123
|
+
*
|
|
124
|
+
* **Provider Capabilities**:
|
|
125
|
+
* - File persistence and durability guarantees
|
|
126
|
+
* - Scalability and performance characteristics
|
|
127
|
+
* - Geographic distribution and CDN integration
|
|
128
|
+
* - Cost implications for storage and bandwidth
|
|
129
|
+
* - Backup and disaster recovery features
|
|
130
|
+
*
|
|
131
|
+
* @default Uses injected FileStorageProvider
|
|
132
|
+
* @example "memory"
|
|
133
|
+
* @example S3FileStorageProvider
|
|
134
|
+
* @example AzureBlobStorageProvider
|
|
135
|
+
*/
|
|
136
136
|
provider?: Service<FileStorageProvider> | "memory";
|
|
137
137
|
/**
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
138
|
+
* Unique name identifier for the bucket.
|
|
139
|
+
*
|
|
140
|
+
* This name is used for:
|
|
141
|
+
* - Storage backend organization and partitioning
|
|
142
|
+
* - File path generation and URL construction
|
|
143
|
+
* - Logging, monitoring, and debugging
|
|
144
|
+
* - Access control and permissions management
|
|
145
|
+
* - Backup and replication configuration
|
|
146
|
+
*
|
|
147
|
+
* **Naming Conventions**:
|
|
148
|
+
* - Use lowercase with hyphens for consistency
|
|
149
|
+
* - Include purpose or content type in the name
|
|
150
|
+
* - Avoid spaces and special characters
|
|
151
|
+
* - Consider environment prefixes for deployment isolation
|
|
152
|
+
*
|
|
153
|
+
* If not provided, defaults to the property key where the bucket is declared.
|
|
154
|
+
*
|
|
155
|
+
* @example "user-avatars"
|
|
156
|
+
* @example "product-images"
|
|
157
|
+
* @example "legal-documents"
|
|
158
|
+
* @example "temp-processing-files"
|
|
159
|
+
*/
|
|
160
160
|
name?: string;
|
|
161
161
|
}
|
|
162
162
|
interface BucketFileOptions {
|
|
163
163
|
/**
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
164
|
+
* Human-readable description of the bucket's purpose and contents.
|
|
165
|
+
*
|
|
166
|
+
* Used for:
|
|
167
|
+
* - Documentation generation and API references
|
|
168
|
+
* - Developer onboarding and system understanding
|
|
169
|
+
* - Monitoring dashboards and admin interfaces
|
|
170
|
+
* - Compliance and audit documentation
|
|
171
|
+
*
|
|
172
|
+
* **Description Best Practices**:
|
|
173
|
+
* - Explain what types of files this bucket stores
|
|
174
|
+
* - Mention any special handling or processing requirements
|
|
175
|
+
* - Include information about retention policies if applicable
|
|
176
|
+
* - Note any compliance or security considerations
|
|
177
|
+
*
|
|
178
|
+
* @example "User profile pictures and avatar images"
|
|
179
|
+
* @example "Product catalog images with automated thumbnail generation"
|
|
180
|
+
* @example "Legal documents requiring long-term retention"
|
|
181
|
+
* @example "Temporary files for data processing workflows"
|
|
182
|
+
*/
|
|
183
183
|
description?: string;
|
|
184
184
|
/**
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
185
|
+
* Array of allowed MIME types for files uploaded to this bucket.
|
|
186
|
+
*
|
|
187
|
+
* When specified, only files with these exact MIME types will be accepted.
|
|
188
|
+
* Files with disallowed MIME types will be rejected with an InvalidFileError.
|
|
189
|
+
*
|
|
190
|
+
* **MIME Type Categories**:
|
|
191
|
+
* - Images: "image/jpeg", "image/png", "image/gif", "image/webp", "image/svg+xml"
|
|
192
|
+
* - Documents: "application/pdf", "text/plain", "text/csv"
|
|
193
|
+
* - Office: "application/msword", "application/vnd.openxmlformats-officedocument.wordprocessingml.document"
|
|
194
|
+
* - Archives: "application/zip", "application/x-tar", "application/gzip"
|
|
195
|
+
* - Media: "video/mp4", "audio/mpeg", "audio/wav"
|
|
196
|
+
*
|
|
197
|
+
* **Security Considerations**:
|
|
198
|
+
* - Always validate MIME types for user uploads
|
|
199
|
+
* - Be cautious with executable file types
|
|
200
|
+
* - Consider using allow-lists rather than deny-lists
|
|
201
|
+
* - Remember that MIME types can be spoofed by malicious users
|
|
202
|
+
*
|
|
203
|
+
* If not specified, all MIME types are allowed (not recommended for user uploads).
|
|
204
|
+
*
|
|
205
|
+
* @example ["image/jpeg", "image/png"] // Only JPEG and PNG images
|
|
206
|
+
* @example ["application/pdf", "text/plain"] // Documents only
|
|
207
|
+
* @example ["video/mp4", "video/webm"] // Video files
|
|
208
|
+
*/
|
|
209
209
|
mimeTypes?: string[];
|
|
210
210
|
/**
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
211
|
+
* Maximum file size allowed in megabytes (MB).
|
|
212
|
+
*
|
|
213
|
+
* Files larger than this limit will be rejected with an InvalidFileError.
|
|
214
|
+
* This helps prevent:
|
|
215
|
+
* - Storage quota exhaustion
|
|
216
|
+
* - Memory issues during file processing
|
|
217
|
+
* - Long upload times and timeouts
|
|
218
|
+
* - Abuse of storage resources
|
|
219
|
+
*
|
|
220
|
+
* **Size Guidelines by File Type**:
|
|
221
|
+
* - Profile images: 1-5 MB
|
|
222
|
+
* - Product photos: 5-10 MB
|
|
223
|
+
* - Documents: 10-50 MB
|
|
224
|
+
* - Video files: 50-500 MB
|
|
225
|
+
* - Data files: 100-1000 MB
|
|
226
|
+
*
|
|
227
|
+
* **Considerations**:
|
|
228
|
+
* - Consider your storage costs and limits
|
|
229
|
+
* - Factor in network upload speeds for users
|
|
230
|
+
* - Account for processing requirements (thumbnails, compression)
|
|
231
|
+
* - Set reasonable limits based on actual use cases
|
|
232
|
+
*
|
|
233
|
+
* @default 10 MB
|
|
234
|
+
*
|
|
235
|
+
* @example 1 // 1MB for small images
|
|
236
|
+
* @example 25 // 25MB for documents
|
|
237
|
+
* @example 100 // 100MB for media files
|
|
238
|
+
*/
|
|
239
239
|
maxSize?: number;
|
|
240
240
|
}
|
|
241
241
|
declare class BucketPrimitive extends Primitive<BucketPrimitiveOptions> {
|
|
@@ -243,37 +243,37 @@ declare class BucketPrimitive extends Primitive<BucketPrimitiveOptions> {
|
|
|
243
243
|
private readonly fileSystem;
|
|
244
244
|
get name(): string;
|
|
245
245
|
/**
|
|
246
|
-
|
|
247
|
-
|
|
246
|
+
* Uploads a file to the bucket.
|
|
247
|
+
*/
|
|
248
248
|
upload(file: FileLike, options?: BucketFileOptions): Promise<string>;
|
|
249
249
|
/**
|
|
250
|
-
|
|
251
|
-
|
|
250
|
+
* Delete permanently a file from the bucket.
|
|
251
|
+
*/
|
|
252
252
|
delete(fileId: string, skipHook?: boolean): Promise<void>;
|
|
253
253
|
/**
|
|
254
|
-
|
|
255
|
-
|
|
254
|
+
* Checks if a file exists in the bucket.
|
|
255
|
+
*/
|
|
256
256
|
exists(fileId: string): Promise<boolean>;
|
|
257
257
|
/**
|
|
258
|
-
|
|
259
|
-
|
|
258
|
+
* Downloads a file from the bucket.
|
|
259
|
+
*/
|
|
260
260
|
download(fileId: string): Promise<FileLike>;
|
|
261
261
|
protected $provider(): FileStorageProvider | MemoryFileStorageProvider;
|
|
262
262
|
}
|
|
263
263
|
interface BucketFileOptions {
|
|
264
264
|
/**
|
|
265
|
-
|
|
266
|
-
|
|
265
|
+
* Optional description of the bucket.
|
|
266
|
+
*/
|
|
267
267
|
description?: string;
|
|
268
268
|
/**
|
|
269
|
-
|
|
270
|
-
|
|
269
|
+
* Allowed MIME types.
|
|
270
|
+
*/
|
|
271
271
|
mimeTypes?: string[];
|
|
272
272
|
/**
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
|
|
273
|
+
* Maximum size of the files in the bucket.
|
|
274
|
+
*
|
|
275
|
+
* @default 10
|
|
276
|
+
*/
|
|
277
277
|
maxSize?: number;
|
|
278
278
|
}
|
|
279
279
|
//#endregion
|
|
@@ -320,9 +320,9 @@ declare class LocalFileStorageProvider implements FileStorageProvider {
|
|
|
320
320
|
declare module "alepha" {
|
|
321
321
|
interface Hooks {
|
|
322
322
|
/**
|
|
323
|
-
|
|
324
|
-
|
|
325
|
-
|
|
323
|
+
* Triggered when a file is uploaded to a bucket.
|
|
324
|
+
* Can be used to perform actions after a file is uploaded, like creating a database record!
|
|
325
|
+
*/
|
|
326
326
|
"bucket:file:uploaded": {
|
|
327
327
|
id: string;
|
|
328
328
|
file: FileLike;
|
|
@@ -330,8 +330,8 @@ declare module "alepha" {
|
|
|
330
330
|
options: BucketFileOptions;
|
|
331
331
|
};
|
|
332
332
|
/**
|
|
333
|
-
|
|
334
|
-
|
|
333
|
+
* Triggered when a file is deleted from a bucket.
|
|
334
|
+
*/
|
|
335
335
|
"bucket:file:deleted": {
|
|
336
336
|
id: string;
|
|
337
337
|
bucket: BucketPrimitive;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","names":[],"sources":["../../src/bucket/providers/FileStorageProvider.ts","../../src/bucket/providers/MemoryFileStorageProvider.ts","../../src/bucket/primitives/$bucket.ts","../../src/bucket/errors/FileNotFoundError.ts","../../src/bucket/providers/LocalFileStorageProvider.ts","../../src/bucket/index.ts"],"mappings":";;;;;;;uBAEsB,mBAAA
|
|
1
|
+
{"version":3,"file":"index.d.ts","names":[],"sources":["../../src/bucket/providers/FileStorageProvider.ts","../../src/bucket/providers/MemoryFileStorageProvider.ts","../../src/bucket/primitives/$bucket.ts","../../src/bucket/errors/FileNotFoundError.ts","../../src/bucket/providers/LocalFileStorageProvider.ts","../../src/bucket/index.ts"],"mappings":"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"}
|
|
@@ -12,37 +12,37 @@ import * as alepha_logger0 from "alepha/logger";
|
|
|
12
12
|
*/
|
|
13
13
|
declare abstract class CacheProvider {
|
|
14
14
|
/**
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
15
|
+
* Get the value of a key.
|
|
16
|
+
*
|
|
17
|
+
* @param name Cache name, used to group keys. Should be Redis-like "some:group:name" format.
|
|
18
|
+
* @param key The key of the value to get.
|
|
19
|
+
*
|
|
20
|
+
* @return The value of the key, or undefined if the key does not exist.
|
|
21
|
+
*/
|
|
22
22
|
abstract get(name: string, key: string): Promise<Uint8Array | undefined>;
|
|
23
23
|
/**
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
24
|
+
* Set the string value of a key.
|
|
25
|
+
*
|
|
26
|
+
* @param name Cache name, used to group keys. Should be Redis-like "some:group:name" format.
|
|
27
|
+
* @param key The key of the value to set.
|
|
28
|
+
* @param value The value to set.
|
|
29
|
+
* @param ttl The time-to-live of the key, in milliseconds.
|
|
30
|
+
*
|
|
31
|
+
* @return The value of the key.
|
|
32
|
+
*/
|
|
33
33
|
abstract set(name: string, key: string, value: Uint8Array, ttl?: number): Promise<Uint8Array>;
|
|
34
34
|
/**
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
35
|
+
* Remove the specified keys.
|
|
36
|
+
*
|
|
37
|
+
* @param name Cache name, used to group keys. Should be Redis-like "some:group:name" format.
|
|
38
|
+
* @param keys The keys to delete.
|
|
39
|
+
*/
|
|
40
40
|
abstract del(name: string, ...keys: string[]): Promise<void>;
|
|
41
41
|
abstract has(name: string, key: string): Promise<boolean>;
|
|
42
42
|
abstract keys(name: string, filter?: string): Promise<string[]>;
|
|
43
43
|
/**
|
|
44
|
-
|
|
45
|
-
|
|
44
|
+
* Remove all keys from all cache names.
|
|
45
|
+
*/
|
|
46
46
|
abstract clear(): Promise<void>;
|
|
47
47
|
}
|
|
48
48
|
//#endregion
|
|
@@ -101,37 +101,37 @@ declare const $cache: {
|
|
|
101
101
|
};
|
|
102
102
|
interface CachePrimitiveOptions<TReturn = any, TParameter extends any[] = any[]> {
|
|
103
103
|
/**
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
104
|
+
* The cache name. This is useful for invalidating multiple caches at once.
|
|
105
|
+
*
|
|
106
|
+
* Store key as `cache:$name:$key`.
|
|
107
|
+
*
|
|
108
|
+
* @default Name of the key of the class.
|
|
109
|
+
*/
|
|
110
110
|
name?: string;
|
|
111
111
|
/**
|
|
112
|
-
|
|
113
|
-
|
|
112
|
+
* Function which returns cached data.
|
|
113
|
+
*/
|
|
114
114
|
handler?: (...args: TParameter) => TReturn;
|
|
115
115
|
/**
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
116
|
+
* The key generator for the cache.
|
|
117
|
+
* If not provided, the arguments will be json.stringify().
|
|
118
|
+
*/
|
|
119
119
|
key?: (...args: TParameter) => string;
|
|
120
120
|
/**
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
121
|
+
* The store provider for the cache.
|
|
122
|
+
* If not provided, the default store provider will be used.
|
|
123
|
+
*/
|
|
124
124
|
provider?: InstantiableClass<CacheProvider> | "memory";
|
|
125
125
|
/**
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
126
|
+
* The time-to-live for the cache in seconds.
|
|
127
|
+
* Set 0 to skip expiration.
|
|
128
|
+
*
|
|
129
|
+
* @default 300 (5 minutes).
|
|
130
|
+
*/
|
|
131
131
|
ttl?: DurationLike;
|
|
132
132
|
/**
|
|
133
|
-
|
|
134
|
-
|
|
133
|
+
* If the cache is disabled.
|
|
134
|
+
*/
|
|
135
135
|
disabled?: boolean;
|
|
136
136
|
}
|
|
137
137
|
declare class CachePrimitive<TReturn = any, TParameter extends any[] = any[]> extends Primitive<CachePrimitiveOptions<TReturn, TParameter>> {
|
|
@@ -160,8 +160,8 @@ declare class CachePrimitive<TReturn = any, TParameter extends any[] = any[]> ex
|
|
|
160
160
|
}
|
|
161
161
|
interface CachePrimitiveFn<TReturn = any, TParameter extends any[] = any[]> extends CachePrimitive<TReturn, TParameter> {
|
|
162
162
|
/**
|
|
163
|
-
|
|
164
|
-
|
|
163
|
+
* Run the cache primitive with the provided arguments.
|
|
164
|
+
*/
|
|
165
165
|
(...args: TParameter): Promise<TReturn>;
|
|
166
166
|
}
|
|
167
167
|
//#endregion
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","names":[],"sources":["../../../src/cache/core/providers/CacheProvider.ts","../../../src/cache/core/primitives/$cache.ts","../../../src/cache/core/providers/MemoryCacheProvider.ts","../../../src/cache/core/index.ts"],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.d.ts","names":[],"sources":["../../../src/cache/core/providers/CacheProvider.ts","../../../src/cache/core/primitives/$cache.ts","../../../src/cache/core/providers/MemoryCacheProvider.ts","../../../src/cache/core/index.ts"],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","names":[],"sources":["../../../src/cache/redis/providers/RedisCacheProvider.ts","../../../src/cache/redis/index.ts"],"mappings":";;;;;;;cAKM,SAAA,UAAS,OAAA;
|
|
1
|
+
{"version":3,"file":"index.d.ts","names":[],"sources":["../../../src/cache/redis/providers/RedisCacheProvider.ts","../../../src/cache/redis/index.ts"],"mappings":";;;;;;;cAKM,SAAA,UAAS,OAAA;wCAOb,OAAA,CAAA,OAAA;AAAA;AAAA;EAAA,UAGU,GAAA,SAAY,OAAA,CAAQ,MAAA,QAAc,SAAA;AAAA;AAAA,cAGjC,kBAAA,YAA8B,aAAA;EAAA,mBACtB,GAAA,EADW,cAAA,CACR,MAAA;EAAA,mBACH,aAAA,EAAa,aAAA;EAAA,mBACb,GAAA;;;qBACA,MAAA,EAAM,MAAA;EAEZ,GAAA,CAAI,IAAA,UAAc,GAAA,WAAc,OAAA,CAAQ,UAAA;EAmBxC,GAAA,CACX,IAAA,UACA,GAAA,UACA,KAAA,EAAO,UAAA,WACP,GAAA,YACC,OAAA,CAAQ,UAAA;EAmBE,GAAA,CAAI,IAAA,aAAiB,IAAA,aAAiB,OAAA;EAgBtC,GAAA,CAAI,IAAA,UAAc,GAAA,WAAc,OAAA;EAIhC,IAAA,CAAK,IAAA,UAAc,MAAA,YAAkB,OAAA;EAOrC,KAAA,CAAA,GAAS,OAAA;EAAA,UAOZ,MAAA,CAAA,GAAU,IAAA;AAAA;;;;;;;;;cCrFT,gBAAA,EAAgB,OAAA,CAAA,OAAA,CAW3B,OAAA,CAX2B,MAAA"}
|
|
@@ -34,8 +34,8 @@ var RedisCacheProvider = class {
|
|
|
34
34
|
async del(name, ...keys) {
|
|
35
35
|
const nameKey = this.prefix(name);
|
|
36
36
|
if (keys.length === 0) {
|
|
37
|
-
const keys
|
|
38
|
-
await this.redisProvider.del(keys
|
|
37
|
+
const keys = await this.redisProvider.keys(`${nameKey}:*`);
|
|
38
|
+
await this.redisProvider.del(keys);
|
|
39
39
|
return;
|
|
40
40
|
}
|
|
41
41
|
await this.redisProvider.del(keys.map((key) => key.startsWith(nameKey) ? key : this.prefix(name, key)));
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","names":[
|
|
1
|
+
{"version":3,"file":"index.js","names":[],"sources":["../../../src/cache/redis/providers/RedisCacheProvider.ts","../../../src/cache/redis/index.ts"],"sourcesContent":["import { $env, $inject, Alepha, type Static, t } from \"alepha\";\nimport type { CacheProvider } from \"alepha/cache\";\nimport { $logger } from \"alepha/logger\";\nimport { RedisProvider } from \"alepha/redis\";\n\nconst envSchema = t.object({\n REDIS_CACHE_PREFIX: t.optional(\n t.text({\n description:\n \"Force a prefix for all cache keys in Redis. Useful for testing or multi-tenant applications.\",\n }),\n ),\n});\n\ndeclare module \"alepha\" {\n interface Env extends Partial<Static<typeof envSchema>> {}\n}\n\nexport class RedisCacheProvider implements CacheProvider {\n protected readonly log = $logger();\n protected readonly redisProvider = $inject(RedisProvider);\n protected readonly env = $env(envSchema);\n protected readonly alepha = $inject(Alepha);\n\n public async get(name: string, key: string): Promise<Uint8Array | undefined> {\n if (!this.alepha.isStarted()) {\n return;\n }\n\n const keyWithPrefix = this.prefix(name, key);\n const buffer = await this.redisProvider.get(keyWithPrefix);\n if (!buffer) {\n return;\n }\n\n this.log.debug(`Cache hit`, {\n size: buffer.byteLength,\n key: keyWithPrefix,\n });\n\n return new Uint8Array(buffer);\n }\n\n public async set(\n name: string,\n key: string,\n value: Uint8Array | string,\n ttl?: number,\n ): Promise<Uint8Array> {\n if (!this.alepha.isReady()) {\n return new Uint8Array(Buffer.from(value));\n }\n\n const buffer = Buffer.from(value);\n const prefix = this.prefix(name, key);\n\n if (ttl) {\n return new Uint8Array(\n await this.redisProvider.set(prefix, buffer, {\n expiration: { type: \"PX\", value: ttl },\n }),\n );\n }\n\n return new Uint8Array(await this.redisProvider.set(prefix, buffer));\n }\n\n public async del(name: string, ...keys: string[]): Promise<void> {\n const nameKey = this.prefix(name);\n\n if (keys.length === 0) {\n const keys = await this.redisProvider.keys(`${nameKey}:*`);\n await this.redisProvider.del(keys);\n return;\n }\n\n await this.redisProvider.del(\n keys.map((key) =>\n key.startsWith(nameKey) ? key : this.prefix(name, key),\n ),\n );\n }\n\n public async has(name: string, key: string): Promise<boolean> {\n return this.get(name, key).then((value) => value != null);\n }\n\n public async keys(name: string, filter?: string): Promise<string[]> {\n if (filter) {\n return await this.redisProvider.keys(`${this.prefix(name)}:${filter}*`);\n }\n return this.redisProvider.keys(`${this.prefix(name)}:*`);\n }\n\n public async clear(): Promise<void> {\n this.log.debug(\"Clearing all cache\");\n const pattern = `${this.prefix()}:*`;\n const keys = await this.redisProvider.keys(pattern);\n await this.redisProvider.del(keys);\n }\n\n protected prefix(...path: string[]): string {\n const parts = [\"cache\", ...path];\n\n if (this.env.REDIS_CACHE_PREFIX) {\n parts.unshift(this.env.REDIS_CACHE_PREFIX);\n }\n\n return parts.join(\":\");\n }\n}\n","import { $module } from \"alepha\";\nimport { AlephaCache, CacheProvider } from \"alepha/cache\";\nimport { RedisCacheProvider } from \"./providers/RedisCacheProvider.ts\";\n\n// ---------------------------------------------------------------------------------------------------------------------\n\nexport * from \"./providers/RedisCacheProvider.ts\";\n\n// ---------------------------------------------------------------------------------------------------------------------\n\n/**\n * Plugin for Alepha Cache that provides Redis caching capabilities.\n *\n * @see {@link RedisCacheProvider}\n * @module alepha.cache.redis\n */\nexport const AlephaCacheRedis = $module({\n name: \"alepha.cache.redis\",\n services: [RedisCacheProvider],\n register: (alepha) =>\n alepha\n .with({\n provide: CacheProvider,\n use: RedisCacheProvider,\n optional: true,\n })\n .with(AlephaCache),\n});\n"],"mappings":";;;;;;AAKA,MAAM,YAAY,EAAE,OAAO,EACzB,oBAAoB,EAAE,SACpB,EAAE,KAAK,EACL,aACE,gGACH,CAAC,CACH,EACF,CAAC;AAMF,IAAa,qBAAb,MAAyD;CACvD,AAAmB,MAAM,SAAS;CAClC,AAAmB,gBAAgB,QAAQ,cAAc;CACzD,AAAmB,MAAM,KAAK,UAAU;CACxC,AAAmB,SAAS,QAAQ,OAAO;CAE3C,MAAa,IAAI,MAAc,KAA8C;AAC3E,MAAI,CAAC,KAAK,OAAO,WAAW,CAC1B;EAGF,MAAM,gBAAgB,KAAK,OAAO,MAAM,IAAI;EAC5C,MAAM,SAAS,MAAM,KAAK,cAAc,IAAI,cAAc;AAC1D,MAAI,CAAC,OACH;AAGF,OAAK,IAAI,MAAM,aAAa;GAC1B,MAAM,OAAO;GACb,KAAK;GACN,CAAC;AAEF,SAAO,IAAI,WAAW,OAAO;;CAG/B,MAAa,IACX,MACA,KACA,OACA,KACqB;AACrB,MAAI,CAAC,KAAK,OAAO,SAAS,CACxB,QAAO,IAAI,WAAW,OAAO,KAAK,MAAM,CAAC;EAG3C,MAAM,SAAS,OAAO,KAAK,MAAM;EACjC,MAAM,SAAS,KAAK,OAAO,MAAM,IAAI;AAErC,MAAI,IACF,QAAO,IAAI,WACT,MAAM,KAAK,cAAc,IAAI,QAAQ,QAAQ,EAC3C,YAAY;GAAE,MAAM;GAAM,OAAO;GAAK,EACvC,CAAC,CACH;AAGH,SAAO,IAAI,WAAW,MAAM,KAAK,cAAc,IAAI,QAAQ,OAAO,CAAC;;CAGrE,MAAa,IAAI,MAAc,GAAG,MAA+B;EAC/D,MAAM,UAAU,KAAK,OAAO,KAAK;AAEjC,MAAI,KAAK,WAAW,GAAG;GACrB,MAAM,OAAO,MAAM,KAAK,cAAc,KAAK,GAAG,QAAQ,IAAI;AAC1D,SAAM,KAAK,cAAc,IAAI,KAAK;AAClC;;AAGF,QAAM,KAAK,cAAc,IACvB,KAAK,KAAK,QACR,IAAI,WAAW,QAAQ,GAAG,MAAM,KAAK,OAAO,MAAM,IAAI,CACvD,CACF;;CAGH,MAAa,IAAI,MAAc,KAA+B;AAC5D,SAAO,KAAK,IAAI,MAAM,IAAI,CAAC,MAAM,UAAU,SAAS,KAAK;;CAG3D,MAAa,KAAK,MAAc,QAAoC;AAClE,MAAI,OACF,QAAO,MAAM,KAAK,cAAc,KAAK,GAAG,KAAK,OAAO,KAAK,CAAC,GAAG,OAAO,GAAG;AAEzE,SAAO,KAAK,cAAc,KAAK,GAAG,KAAK,OAAO,KAAK,CAAC,IAAI;;CAG1D,MAAa,QAAuB;AAClC,OAAK,IAAI,MAAM,qBAAqB;EACpC,MAAM,UAAU,GAAG,KAAK,QAAQ,CAAC;EACjC,MAAM,OAAO,MAAM,KAAK,cAAc,KAAK,QAAQ;AACnD,QAAM,KAAK,cAAc,IAAI,KAAK;;CAGpC,AAAU,OAAO,GAAG,MAAwB;EAC1C,MAAM,QAAQ,CAAC,SAAS,GAAG,KAAK;AAEhC,MAAI,KAAK,IAAI,mBACX,OAAM,QAAQ,KAAK,IAAI,mBAAmB;AAG5C,SAAO,MAAM,KAAK,IAAI;;;;;;;;;;;;AC5F1B,MAAa,mBAAmB,QAAQ;CACtC,MAAM;CACN,UAAU,CAAC,mBAAmB;CAC9B,WAAW,WACT,OACG,KAAK;EACJ,SAAS;EACT,KAAK;EACL,UAAU;EACX,CAAC,CACD,KAAK,YAAY;CACvB,CAAC"}
|