alepha 0.13.6 → 0.13.8
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 +5 -2
- package/assets/swagger-ui/swagger-ui-bundle.js +1 -1
- package/assets/swagger-ui/swagger-ui-standalone-preset.js +1 -1
- package/assets/swagger-ui/swagger-ui.css +1 -1
- package/dist/api/audits/index.browser.js +116 -0
- package/dist/api/audits/index.browser.js.map +1 -0
- package/dist/api/audits/index.d.ts +1194 -0
- package/dist/api/audits/index.js +674 -0
- package/dist/api/audits/index.js.map +1 -0
- package/dist/{api-files → api/files}/index.browser.js +5 -5
- package/dist/api/files/index.browser.js.map +1 -0
- package/dist/{api-files → api/files}/index.d.ts +16 -9
- package/dist/{api-files → api/files}/index.js +10 -10
- package/dist/api/files/index.js.map +1 -0
- package/dist/{api-jobs → api/jobs}/index.browser.js +5 -5
- package/dist/api/jobs/index.browser.js.map +1 -0
- package/dist/{api-jobs → api/jobs}/index.d.ts +35 -35
- package/dist/{api-jobs → api/jobs}/index.js +9 -9
- package/dist/api/jobs/index.js.map +1 -0
- package/dist/{api-notifications → api/notifications}/index.browser.js +11 -11
- package/dist/api/notifications/index.browser.js.map +1 -0
- package/dist/api/notifications/index.d.ts +327 -0
- package/dist/{api-notifications → api/notifications}/index.js +11 -11
- package/dist/api/notifications/index.js.map +1 -0
- package/dist/api/parameters/index.browser.js +60 -0
- package/dist/api/parameters/index.browser.js.map +1 -0
- package/dist/api/parameters/index.d.ts +761 -0
- package/dist/api/parameters/index.js +877 -0
- package/dist/api/parameters/index.js.map +1 -0
- package/dist/{api-users → api/users}/index.browser.js +6 -6
- package/dist/api/users/index.browser.js.map +1 -0
- package/dist/{api-users → api/users}/index.d.ts +259 -247
- package/dist/{api-users → api/users}/index.js +125 -112
- package/dist/api/users/index.js.map +1 -0
- package/dist/{api-verifications → api/verifications}/index.browser.js +5 -5
- package/dist/api/verifications/index.browser.js.map +1 -0
- package/dist/api/verifications/index.d.ts +248 -0
- package/dist/{api-verifications → api/verifications}/index.js +13 -12
- package/dist/api/verifications/index.js.map +1 -0
- package/dist/bin/index.js +1 -0
- package/dist/bin/index.js.map +1 -1
- package/dist/cache/{index.d.ts → core/index.d.ts} +4 -4
- package/dist/cache/{index.js → core/index.js} +5 -5
- package/dist/cache/core/index.js.map +1 -0
- package/dist/{cache-redis → cache/redis}/index.d.ts +2 -2
- package/dist/{cache-redis → cache/redis}/index.js +2 -2
- package/dist/cache/redis/index.js.map +1 -0
- package/dist/cli/index.d.ts +71 -9
- package/dist/cli/index.js +280 -79
- package/dist/cli/index.js.map +1 -1
- package/dist/command/index.d.ts +63 -2
- package/dist/command/index.js +30 -3
- package/dist/command/index.js.map +1 -1
- package/dist/core/index.browser.js +241 -61
- package/dist/core/index.browser.js.map +1 -1
- package/dist/core/index.d.ts +170 -90
- package/dist/core/index.js +264 -67
- package/dist/core/index.js.map +1 -1
- package/dist/core/index.native.js +248 -65
- package/dist/core/index.native.js.map +1 -1
- package/dist/email/index.js +15 -10554
- package/dist/email/index.js.map +1 -1
- package/dist/lock/{index.d.ts → core/index.d.ts} +5 -5
- package/dist/lock/{index.js → core/index.js} +5 -5
- package/dist/lock/core/index.js.map +1 -0
- package/dist/{lock-redis → lock/redis}/index.d.ts +2 -2
- package/dist/{lock-redis → lock/redis}/index.js +2 -2
- package/dist/lock/redis/index.js.map +1 -0
- package/dist/logger/index.d.ts +4 -4
- package/dist/logger/index.js +77 -72
- package/dist/logger/index.js.map +1 -1
- package/dist/orm/index.d.ts +5 -1
- package/dist/orm/index.js +24 -7
- package/dist/orm/index.js.map +1 -1
- package/dist/queue/core/index.d.ts +548 -0
- package/dist/queue/core/index.js +391 -0
- package/dist/queue/core/index.js.map +1 -0
- package/dist/queue/redis/index.d.ts +28 -0
- package/dist/queue/redis/index.js +43 -0
- package/dist/queue/redis/index.js.map +1 -0
- package/dist/scheduler/index.d.ts +7 -7
- package/dist/scheduler/index.js +1 -393
- package/dist/scheduler/index.js.map +1 -1
- package/dist/security/index.d.ts +1 -1
- package/dist/security/index.js +2 -1413
- package/dist/security/index.js.map +1 -1
- package/dist/{server-auth → server/auth}/index.browser.js +6 -6
- package/dist/server/auth/index.browser.js.map +1 -0
- package/dist/{server-auth → server/auth}/index.d.ts +175 -164
- package/dist/server/auth/index.js +742 -0
- package/dist/server/auth/index.js.map +1 -0
- package/dist/{server-cache → server/cache}/index.d.ts +2 -2
- package/dist/{server-cache → server/cache}/index.js +2 -2
- package/dist/server/cache/index.js.map +1 -0
- package/dist/{server-compress → server/compress}/index.d.ts +2 -2
- package/dist/{server-compress → server/compress}/index.js +2 -2
- package/dist/server/compress/index.js.map +1 -0
- package/dist/{server-cookies → server/cookies}/index.browser.js +3 -3
- package/dist/server/cookies/index.browser.js.map +1 -0
- package/dist/{server-cookies → server/cookies}/index.d.ts +4 -4
- package/dist/{server-cookies → server/cookies}/index.js +9 -5
- package/dist/server/cookies/index.js.map +1 -0
- package/dist/server/{index.browser.js → core/index.browser.js} +14 -14
- package/dist/server/core/index.browser.js.map +1 -0
- package/dist/server/{index.d.ts → core/index.d.ts} +46 -37
- package/dist/server/{index.js → core/index.js} +47 -33
- package/dist/server/core/index.js.map +1 -0
- package/dist/{server-cors → server/cors}/index.d.ts +3 -3
- package/dist/{server-cors → server/cors}/index.js +3 -3
- package/dist/server/cors/index.js.map +1 -0
- package/dist/{server-health → server/health}/index.d.ts +3 -3
- package/dist/{server-health → server/health}/index.js +3 -3
- package/dist/server/health/index.js.map +1 -0
- package/dist/{server-helmet → server/helmet}/index.d.ts +2 -2
- package/dist/{server-helmet → server/helmet}/index.js +2 -2
- package/dist/server/helmet/index.js.map +1 -0
- package/dist/{server-links → server/links}/index.browser.js +5 -5
- package/dist/server/links/index.browser.js.map +1 -0
- package/dist/{server-links → server/links}/index.d.ts +40 -40
- package/dist/{server-links → server/links}/index.js +7 -7
- package/dist/server/links/index.js.map +1 -0
- package/dist/{server-metrics → server/metrics}/index.d.ts +2 -2
- package/dist/server/metrics/index.js +74 -0
- package/dist/server/metrics/index.js.map +1 -0
- package/dist/{server-multipart → server/multipart}/index.d.ts +2 -2
- package/dist/{server-multipart → server/multipart}/index.js +2 -2
- package/dist/server/multipart/index.js.map +1 -0
- package/dist/{server-proxy → server/proxy}/index.d.ts +3 -3
- package/dist/{server-proxy → server/proxy}/index.js +3 -3
- package/dist/server/proxy/index.js.map +1 -0
- package/dist/{server-rate-limit → server/rate-limit}/index.d.ts +4 -4
- package/dist/{server-rate-limit → server/rate-limit}/index.js +4 -4
- package/dist/server/rate-limit/index.js.map +1 -0
- package/dist/{server-security → server/security}/index.browser.js +1 -1
- package/dist/server/security/index.browser.js.map +1 -0
- package/dist/{server-security → server/security}/index.d.ts +4 -4
- package/dist/{server-security → server/security}/index.js +4 -4
- package/dist/server/security/index.js.map +1 -0
- package/dist/{server-static → server/static}/index.d.ts +3 -3
- package/dist/{server-static → server/static}/index.js +3 -3
- package/dist/server/static/index.js.map +1 -0
- package/dist/{server-swagger → server/swagger}/index.d.ts +3 -3
- package/dist/{server-swagger → server/swagger}/index.js +4 -4
- package/dist/server/swagger/index.js.map +1 -0
- package/dist/thread/index.js +2 -2
- package/dist/thread/index.js.map +1 -1
- package/dist/topic/{index.d.ts → core/index.d.ts} +6 -6
- package/dist/topic/{index.js → core/index.js} +6 -6
- package/dist/topic/core/index.js.map +1 -0
- package/dist/{topic-redis → topic/redis}/index.d.ts +2 -2
- package/dist/{topic-redis → topic/redis}/index.js +2 -2
- package/dist/topic/redis/index.js.map +1 -0
- package/dist/vite/index.d.ts +13 -2
- package/dist/vite/index.js +114 -50
- 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.js +4 -4
- package/dist/websocket/index.js.map +1 -1
- package/package.json +160 -156
- package/src/api/audits/controllers/AuditController.ts +186 -0
- package/src/api/audits/entities/audits.ts +132 -0
- package/src/api/audits/index.browser.ts +18 -0
- package/src/api/audits/index.ts +58 -0
- package/src/api/audits/primitives/$audit.ts +159 -0
- package/src/api/audits/schemas/auditQuerySchema.ts +23 -0
- package/src/api/audits/schemas/auditResourceSchema.ts +9 -0
- package/src/api/audits/schemas/createAuditSchema.ts +27 -0
- package/src/api/audits/services/AuditService.ts +412 -0
- package/src/{api-files → api/files}/index.ts +1 -0
- package/src/api/parameters/controllers/ConfigController.ts +324 -0
- package/src/api/parameters/entities/parameters.ts +113 -0
- package/src/api/parameters/index.ts +60 -0
- package/src/api/parameters/primitives/$config.ts +351 -0
- package/src/api/parameters/schedulers/ConfigActivationScheduler.ts +30 -0
- package/src/api/parameters/services/ConfigStore.ts +491 -0
- package/src/{api-users → api/users}/atoms/realmAuthSettingsAtom.ts +19 -0
- package/src/{api-users → api/users}/controllers/UserRealmController.ts +0 -2
- package/src/{api-users → api/users}/index.ts +2 -0
- package/src/{api-users → api/users}/primitives/$userRealm.ts +18 -3
- package/src/{api-users → api/users}/providers/UserRealmProvider.ts +12 -10
- package/src/{api-users → api/users}/services/RegistrationService.ts +2 -1
- package/src/{api-users → api/users}/services/SessionService.ts +4 -0
- package/src/{api-users → api/users}/services/UserService.ts +3 -0
- package/src/{api-verifications → api/verifications}/index.ts +9 -1
- package/src/bin/index.ts +1 -0
- package/src/cli/apps/AlephaPackageBuilderCli.ts +73 -48
- package/src/cli/assets/appRouterTs.ts +1 -1
- package/src/cli/assets/biomeJson.ts +2 -2
- package/src/cli/assets/dummySpecTs.ts +7 -0
- package/src/cli/assets/editorconfig.ts +13 -0
- package/src/cli/assets/indexHtml.ts +1 -1
- package/src/cli/assets/mainBrowserTs.ts +1 -1
- package/src/cli/assets/mainTs.ts +14 -0
- package/src/cli/assets/viteConfigTs.ts +1 -1
- package/src/cli/commands/BiomeCommands.ts +2 -0
- package/src/cli/commands/CoreCommands.ts +38 -15
- package/src/cli/commands/VerifyCommands.ts +6 -2
- package/src/cli/commands/ViteCommands.ts +28 -18
- package/src/cli/services/AlephaCliUtils.ts +243 -37
- package/src/command/helpers/Asker.ts +0 -1
- package/src/command/primitives/$command.ts +67 -0
- package/src/command/providers/CliProvider.ts +39 -8
- package/src/core/Alepha.ts +40 -30
- package/src/core/helpers/jsonSchemaToTypeBox.ts +307 -0
- package/src/core/index.shared.ts +1 -0
- package/src/core/index.ts +30 -3
- package/src/core/providers/EventManager.ts +1 -1
- package/src/core/providers/SchemaValidator.ts +1 -1
- package/src/core/providers/StateManager.ts +23 -12
- package/src/core/providers/TypeProvider.ts +26 -34
- package/src/logger/index.ts +8 -6
- package/src/logger/primitives/$logger.ts +1 -1
- package/src/logger/providers/{SimpleFormatterProvider.ts → PrettyFormatterProvider.ts} +10 -1
- package/src/orm/index.ts +6 -0
- package/src/orm/services/PgRelationManager.ts +2 -2
- package/src/orm/services/PostgresModelBuilder.ts +11 -7
- package/src/orm/services/Repository.ts +16 -7
- package/src/orm/services/SqliteModelBuilder.ts +10 -0
- package/src/queue/{index.ts → core/index.ts} +2 -3
- package/src/queue/{primitives → core/primitives}/$queue.ts +17 -162
- package/src/queue/core/providers/MemoryQueueProvider.ts +19 -0
- package/src/queue/core/providers/QueueProvider.ts +23 -0
- package/src/queue/core/providers/WorkerProvider.ts +244 -0
- package/src/queue/redis/providers/RedisQueueProvider.ts +31 -0
- package/src/{server-auth → server/auth}/primitives/$auth.ts +7 -0
- package/src/{server-auth → server/auth}/providers/ServerAuthProvider.ts +51 -8
- package/src/{server-cookies → server/cookies}/index.ts +2 -1
- package/src/server/{index.ts → core/index.ts} +7 -0
- package/src/server/{primitives → core/primitives}/$action.ts +10 -1
- package/src/server/{providers → core/providers}/ServerBodyParserProvider.ts +11 -5
- package/src/server/{providers → core/providers}/ServerRouterProvider.ts +13 -7
- package/src/{server-rate-limit → server/rate-limit}/index.ts +1 -1
- package/src/{server-swagger → server/swagger}/providers/ServerSwaggerProvider.ts +1 -0
- package/src/thread/primitives/$thread.ts +2 -2
- package/src/vite/index.ts +0 -2
- package/src/vite/tasks/buildServer.ts +3 -4
- package/src/vite/tasks/copyAssets.ts +32 -8
- package/src/vite/tasks/generateCloudflare.ts +35 -19
- package/src/vite/tasks/generateDocker.ts +18 -4
- package/src/vite/tasks/generateSitemap.ts +5 -7
- package/src/vite/tasks/generateVercel.ts +76 -41
- package/src/vite/tasks/runAlepha.ts +16 -1
- package/src/websocket/providers/NodeWebSocketServerProvider.ts +3 -11
- package/src/websocket/services/WebSocketClient.ts +3 -3
- package/dist/api-files/index.browser.js.map +0 -1
- package/dist/api-files/index.js.map +0 -1
- package/dist/api-jobs/index.browser.js.map +0 -1
- package/dist/api-jobs/index.js.map +0 -1
- package/dist/api-notifications/index.browser.js.map +0 -1
- package/dist/api-notifications/index.d.ts +0 -327
- package/dist/api-notifications/index.js.map +0 -1
- package/dist/api-parameters/index.browser.js +0 -29
- package/dist/api-parameters/index.browser.js.map +0 -1
- package/dist/api-parameters/index.d.ts +0 -83
- package/dist/api-parameters/index.js +0 -63
- package/dist/api-parameters/index.js.map +0 -1
- package/dist/api-users/index.browser.js.map +0 -1
- package/dist/api-users/index.js.map +0 -1
- package/dist/api-verifications/index.browser.js.map +0 -1
- package/dist/api-verifications/index.d.ts +0 -229
- package/dist/api-verifications/index.js.map +0 -1
- package/dist/cache/index.js.map +0 -1
- package/dist/cache-redis/index.js.map +0 -1
- package/dist/cli/dist-BlfFtOk2.js +0 -2770
- package/dist/cli/dist-BlfFtOk2.js.map +0 -1
- package/dist/lock/index.js.map +0 -1
- package/dist/lock-redis/index.js.map +0 -1
- package/dist/queue/index.d.ts +0 -1265
- package/dist/queue/index.js +0 -1037
- package/dist/queue/index.js.map +0 -1
- package/dist/queue-redis/index.d.ts +0 -82
- package/dist/queue-redis/index.js +0 -872
- package/dist/queue-redis/index.js.map +0 -1
- package/dist/server/index.browser.js.map +0 -1
- package/dist/server/index.js.map +0 -1
- package/dist/server-auth/index.browser.js.map +0 -1
- package/dist/server-auth/index.js +0 -1943
- package/dist/server-auth/index.js.map +0 -1
- package/dist/server-cache/index.js.map +0 -1
- package/dist/server-compress/index.js.map +0 -1
- package/dist/server-cookies/index.browser.js.map +0 -1
- package/dist/server-cookies/index.js.map +0 -1
- package/dist/server-cors/index.js.map +0 -1
- package/dist/server-health/index.js.map +0 -1
- package/dist/server-helmet/index.js.map +0 -1
- package/dist/server-links/index.browser.js.map +0 -1
- package/dist/server-links/index.js.map +0 -1
- package/dist/server-metrics/index.js +0 -4532
- package/dist/server-metrics/index.js.map +0 -1
- package/dist/server-multipart/index.js.map +0 -1
- package/dist/server-proxy/index.js.map +0 -1
- package/dist/server-rate-limit/index.js.map +0 -1
- package/dist/server-security/index.browser.js.map +0 -1
- package/dist/server-security/index.js.map +0 -1
- package/dist/server-static/index.js.map +0 -1
- package/dist/server-swagger/index.js.map +0 -1
- package/dist/topic/index.js.map +0 -1
- package/dist/topic-redis/index.js.map +0 -1
- package/src/api-parameters/controllers/ParameterController.ts +0 -45
- package/src/api-parameters/entities/parameters.ts +0 -30
- package/src/api-parameters/index.ts +0 -21
- package/src/api-parameters/primitives/$config.ts +0 -79
- package/src/api-parameters/services/ParameterStore.ts +0 -23
- package/src/queue/interfaces/QueueJob.ts +0 -459
- package/src/queue/providers/MemoryQueueProvider.ts +0 -850
- package/src/queue/providers/QueueProvider.ts +0 -319
- package/src/queue/providers/WorkerProvider.ts +0 -344
- package/src/queue-redis/providers/RedisQueueProvider.ts +0 -1209
- /package/src/{api-files → api/files}/controllers/FileController.ts +0 -0
- /package/src/{api-files → api/files}/controllers/StorageStatsController.ts +0 -0
- /package/src/{api-files → api/files}/entities/files.ts +0 -0
- /package/src/{api-files → api/files}/index.browser.ts +0 -0
- /package/src/{api-files → api/files}/jobs/FileJobs.ts +0 -0
- /package/src/{api-files → api/files}/schemas/fileQuerySchema.ts +0 -0
- /package/src/{api-files → api/files}/schemas/fileResourceSchema.ts +0 -0
- /package/src/{api-files → api/files}/schemas/storageStatsSchema.ts +0 -0
- /package/src/{api-files → api/files}/services/FileService.ts +0 -0
- /package/src/{api-jobs → api/jobs}/controllers/JobController.ts +0 -0
- /package/src/{api-jobs → api/jobs}/entities/jobExecutions.ts +0 -0
- /package/src/{api-jobs → api/jobs}/index.browser.ts +0 -0
- /package/src/{api-jobs → api/jobs}/index.ts +0 -0
- /package/src/{api-jobs → api/jobs}/primitives/$job.ts +0 -0
- /package/src/{api-jobs → api/jobs}/providers/JobProvider.ts +0 -0
- /package/src/{api-jobs → api/jobs}/schemas/jobExecutionQuerySchema.ts +0 -0
- /package/src/{api-jobs → api/jobs}/schemas/jobExecutionResourceSchema.ts +0 -0
- /package/src/{api-jobs → api/jobs}/schemas/triggerJobSchema.ts +0 -0
- /package/src/{api-jobs → api/jobs}/services/JobService.ts +0 -0
- /package/src/{api-notifications → api/notifications}/controllers/NotificationController.ts +0 -0
- /package/src/{api-notifications → api/notifications}/entities/notifications.ts +0 -0
- /package/src/{api-notifications → api/notifications}/index.browser.ts +0 -0
- /package/src/{api-notifications → api/notifications}/index.ts +0 -0
- /package/src/{api-notifications → api/notifications}/jobs/NotificationJobs.ts +0 -0
- /package/src/{api-notifications → api/notifications}/primitives/$notification.ts +0 -0
- /package/src/{api-notifications → api/notifications}/queues/NotificationQueues.ts +0 -0
- /package/src/{api-notifications → api/notifications}/schemas/notificationContactPreferencesSchema.ts +0 -0
- /package/src/{api-notifications → api/notifications}/schemas/notificationContactSchema.ts +0 -0
- /package/src/{api-notifications → api/notifications}/schemas/notificationCreateSchema.ts +0 -0
- /package/src/{api-notifications → api/notifications}/schemas/notificationQuerySchema.ts +0 -0
- /package/src/{api-notifications → api/notifications}/services/NotificationSenderService.ts +0 -0
- /package/src/{api-notifications → api/notifications}/services/NotificationService.ts +0 -0
- /package/src/{api-parameters → api/parameters}/index.browser.ts +0 -0
- /package/src/{api-users → api/users}/controllers/IdentityController.ts +0 -0
- /package/src/{api-users → api/users}/controllers/SessionController.ts +0 -0
- /package/src/{api-users → api/users}/controllers/UserController.ts +0 -0
- /package/src/{api-users → api/users}/entities/identities.ts +0 -0
- /package/src/{api-users → api/users}/entities/sessions.ts +0 -0
- /package/src/{api-users → api/users}/entities/users.ts +0 -0
- /package/src/{api-users → api/users}/index.browser.ts +0 -0
- /package/src/{api-users → api/users}/notifications/UserNotifications.ts +0 -0
- /package/src/{api-users → api/users}/schemas/completePasswordResetRequestSchema.ts +0 -0
- /package/src/{api-users → api/users}/schemas/completeRegistrationRequestSchema.ts +0 -0
- /package/src/{api-users → api/users}/schemas/createUserSchema.ts +0 -0
- /package/src/{api-users → api/users}/schemas/identityQuerySchema.ts +0 -0
- /package/src/{api-users → api/users}/schemas/identityResourceSchema.ts +0 -0
- /package/src/{api-users → api/users}/schemas/loginSchema.ts +0 -0
- /package/src/{api-users → api/users}/schemas/passwordResetIntentResponseSchema.ts +0 -0
- /package/src/{api-users → api/users}/schemas/registerQuerySchema.ts +0 -0
- /package/src/{api-users → api/users}/schemas/registerRequestSchema.ts +0 -0
- /package/src/{api-users → api/users}/schemas/registerResponseSchema.ts +0 -0
- /package/src/{api-users → api/users}/schemas/registerSchema.ts +0 -0
- /package/src/{api-users → api/users}/schemas/registrationIntentResponseSchema.ts +0 -0
- /package/src/{api-users → api/users}/schemas/resetPasswordSchema.ts +0 -0
- /package/src/{api-users → api/users}/schemas/sessionQuerySchema.ts +0 -0
- /package/src/{api-users → api/users}/schemas/sessionResourceSchema.ts +0 -0
- /package/src/{api-users → api/users}/schemas/updateUserSchema.ts +0 -0
- /package/src/{api-users → api/users}/schemas/userQuerySchema.ts +0 -0
- /package/src/{api-users → api/users}/schemas/userRealmConfigSchema.ts +0 -0
- /package/src/{api-users → api/users}/schemas/userResourceSchema.ts +0 -0
- /package/src/{api-users → api/users}/services/CredentialService.ts +0 -0
- /package/src/{api-users → api/users}/services/IdentityService.ts +0 -0
- /package/src/{api-users → api/users}/services/SessionCrudService.ts +0 -0
- /package/src/{api-verifications → api/verifications}/controllers/VerificationController.ts +0 -0
- /package/src/{api-verifications → api/verifications}/entities/verifications.ts +0 -0
- /package/src/{api-verifications → api/verifications}/index.browser.ts +0 -0
- /package/src/{api-verifications → api/verifications}/jobs/VerificationJobs.ts +0 -0
- /package/src/{api-verifications → api/verifications}/parameters/VerificationParameters.ts +0 -0
- /package/src/{api-verifications → api/verifications}/schemas/requestVerificationCodeResponseSchema.ts +0 -0
- /package/src/{api-verifications → api/verifications}/schemas/validateVerificationCodeResponseSchema.ts +0 -0
- /package/src/{api-verifications → api/verifications}/schemas/verificationSettingsSchema.ts +0 -0
- /package/src/{api-verifications → api/verifications}/schemas/verificationTypeEnumSchema.ts +0 -0
- /package/src/{api-verifications → api/verifications}/services/VerificationService.ts +0 -0
- /package/src/cache/{errors → core/errors}/CacheError.ts +0 -0
- /package/src/cache/{index.ts → core/index.ts} +0 -0
- /package/src/cache/{primitives → core/primitives}/$cache.ts +0 -0
- /package/src/cache/{providers → core/providers}/CacheProvider.ts +0 -0
- /package/src/cache/{providers → core/providers}/MemoryCacheProvider.ts +0 -0
- /package/src/{cache-redis → cache/redis}/index.ts +0 -0
- /package/src/{cache-redis → cache/redis}/providers/RedisCacheProvider.ts +0 -0
- /package/src/lock/{index.ts → core/index.ts} +0 -0
- /package/src/lock/{primitives → core/primitives}/$lock.ts +0 -0
- /package/src/lock/{providers → core/providers}/LockProvider.ts +0 -0
- /package/src/lock/{providers → core/providers}/LockTopicProvider.ts +0 -0
- /package/src/lock/{providers → core/providers}/MemoryLockProvider.ts +0 -0
- /package/src/{lock-redis → lock/redis}/index.ts +0 -0
- /package/src/{lock-redis → lock/redis}/providers/RedisLockProvider.ts +0 -0
- /package/src/queue/{primitives → core/primitives}/$consumer.ts +0 -0
- /package/src/{queue-redis → queue/redis}/index.ts +0 -0
- /package/src/{server-auth → server/auth}/constants/routes.ts +0 -0
- /package/src/{server-auth → server/auth}/index.browser.ts +0 -0
- /package/src/{server-auth → server/auth}/index.shared.ts +0 -0
- /package/src/{server-auth → server/auth}/index.ts +0 -0
- /package/src/{server-auth → server/auth}/primitives/$authApple.ts +0 -0
- /package/src/{server-auth → server/auth}/primitives/$authCredentials.ts +0 -0
- /package/src/{server-auth → server/auth}/primitives/$authGithub.ts +0 -0
- /package/src/{server-auth → server/auth}/primitives/$authGoogle.ts +0 -0
- /package/src/{server-auth → server/auth}/schemas/authenticationProviderSchema.ts +0 -0
- /package/src/{server-auth → server/auth}/schemas/tokenResponseSchema.ts +0 -0
- /package/src/{server-auth → server/auth}/schemas/tokensSchema.ts +0 -0
- /package/src/{server-auth → server/auth}/schemas/userinfoResponseSchema.ts +0 -0
- /package/src/{server-cache → server/cache}/index.ts +0 -0
- /package/src/{server-cache → server/cache}/providers/ServerCacheProvider.ts +0 -0
- /package/src/{server-compress → server/compress}/index.ts +0 -0
- /package/src/{server-compress → server/compress}/providers/ServerCompressProvider.ts +0 -0
- /package/src/{server-cookies → server/cookies}/index.browser.ts +0 -0
- /package/src/{server-cookies → server/cookies}/primitives/$cookie.browser.ts +0 -0
- /package/src/{server-cookies → server/cookies}/primitives/$cookie.ts +0 -0
- /package/src/{server-cookies → server/cookies}/providers/ServerCookiesProvider.ts +0 -0
- /package/src/{server-cookies → server/cookies}/services/CookieParser.ts +0 -0
- /package/src/server/{constants → core/constants}/routeMethods.ts +0 -0
- /package/src/server/{errors → core/errors}/BadRequestError.ts +0 -0
- /package/src/server/{errors → core/errors}/ConflictError.ts +0 -0
- /package/src/server/{errors → core/errors}/ForbiddenError.ts +0 -0
- /package/src/server/{errors → core/errors}/HttpError.ts +0 -0
- /package/src/server/{errors → core/errors}/NotFoundError.ts +0 -0
- /package/src/server/{errors → core/errors}/UnauthorizedError.ts +0 -0
- /package/src/server/{errors → core/errors}/ValidationError.ts +0 -0
- /package/src/server/{helpers → core/helpers}/ServerReply.ts +0 -0
- /package/src/server/{helpers → core/helpers}/isMultipart.ts +0 -0
- /package/src/server/{index.browser.ts → core/index.browser.ts} +0 -0
- /package/src/server/{index.shared.ts → core/index.shared.ts} +0 -0
- /package/src/server/{interfaces → core/interfaces}/ServerRequest.ts +0 -0
- /package/src/server/{primitives → core/primitives}/$route.ts +0 -0
- /package/src/server/{providers → core/providers}/BunHttpServerProvider.ts +0 -0
- /package/src/server/{providers → core/providers}/NodeHttpServerProvider.ts +0 -0
- /package/src/server/{providers → core/providers}/ServerLoggerProvider.ts +0 -0
- /package/src/server/{providers → core/providers}/ServerNotReadyProvider.ts +0 -0
- /package/src/server/{providers → core/providers}/ServerProvider.ts +0 -0
- /package/src/server/{providers → core/providers}/ServerTimingProvider.ts +0 -0
- /package/src/server/{schemas → core/schemas}/errorSchema.ts +0 -0
- /package/src/server/{schemas → core/schemas}/okSchema.ts +0 -0
- /package/src/server/{services → core/services}/HttpClient.ts +0 -0
- /package/src/server/{services → core/services}/ServerRequestParser.ts +0 -0
- /package/src/server/{services → core/services}/UserAgentParser.ts +0 -0
- /package/src/{server-cors → server/cors}/index.ts +0 -0
- /package/src/{server-cors → server/cors}/primitives/$cors.ts +0 -0
- /package/src/{server-cors → server/cors}/providers/ServerCorsProvider.ts +0 -0
- /package/src/{server-health → server/health}/index.ts +0 -0
- /package/src/{server-health → server/health}/providers/ServerHealthProvider.ts +0 -0
- /package/src/{server-health → server/health}/schemas/healthSchema.ts +0 -0
- /package/src/{server-helmet → server/helmet}/index.ts +0 -0
- /package/src/{server-helmet → server/helmet}/providers/ServerHelmetProvider.ts +0 -0
- /package/src/{server-links → server/links}/index.browser.ts +0 -0
- /package/src/{server-links → server/links}/index.ts +0 -0
- /package/src/{server-links → server/links}/primitives/$client.ts +0 -0
- /package/src/{server-links → server/links}/primitives/$remote.ts +0 -0
- /package/src/{server-links → server/links}/providers/LinkProvider.ts +0 -0
- /package/src/{server-links → server/links}/providers/RemotePrimitiveProvider.ts +0 -0
- /package/src/{server-links → server/links}/providers/ServerLinksProvider.ts +0 -0
- /package/src/{server-links → server/links}/schemas/apiLinksResponseSchema.ts +0 -0
- /package/src/{server-metrics → server/metrics}/index.ts +0 -0
- /package/src/{server-metrics → server/metrics}/providers/ServerMetricsProvider.ts +0 -0
- /package/src/{server-multipart → server/multipart}/index.ts +0 -0
- /package/src/{server-multipart → server/multipart}/providers/ServerMultipartProvider.ts +0 -0
- /package/src/{server-proxy → server/proxy}/index.ts +0 -0
- /package/src/{server-proxy → server/proxy}/primitives/$proxy.ts +0 -0
- /package/src/{server-proxy → server/proxy}/providers/ServerProxyProvider.ts +0 -0
- /package/src/{server-rate-limit → server/rate-limit}/primitives/$rateLimit.ts +0 -0
- /package/src/{server-rate-limit → server/rate-limit}/providers/ServerRateLimitProvider.ts +0 -0
- /package/src/{server-security → server/security}/index.browser.ts +0 -0
- /package/src/{server-security → server/security}/index.ts +0 -0
- /package/src/{server-security → server/security}/primitives/$basicAuth.ts +0 -0
- /package/src/{server-security → server/security}/providers/ServerBasicAuthProvider.ts +0 -0
- /package/src/{server-security → server/security}/providers/ServerSecurityProvider.ts +0 -0
- /package/src/{server-static → server/static}/index.ts +0 -0
- /package/src/{server-static → server/static}/primitives/$serve.ts +0 -0
- /package/src/{server-static → server/static}/providers/ServerStaticProvider.ts +0 -0
- /package/src/{server-swagger → server/swagger}/index.ts +0 -0
- /package/src/{server-swagger → server/swagger}/primitives/$swagger.ts +0 -0
- /package/src/topic/{errors → core/errors}/TopicTimeoutError.ts +0 -0
- /package/src/topic/{index.ts → core/index.ts} +0 -0
- /package/src/topic/{primitives → core/primitives}/$subscriber.ts +0 -0
- /package/src/topic/{primitives → core/primitives}/$topic.ts +0 -0
- /package/src/topic/{providers → core/providers}/MemoryTopicProvider.ts +0 -0
- /package/src/topic/{providers → core/providers}/TopicProvider.ts +0 -0
- /package/src/{topic-redis → topic/redis}/index.ts +0 -0
- /package/src/{topic-redis → topic/redis}/providers/RedisTopicProvider.ts +0 -0
|
@@ -24,29 +24,21 @@ import type {
|
|
|
24
24
|
TUnion,
|
|
25
25
|
TUnsafe,
|
|
26
26
|
} from "typebox";
|
|
27
|
-
import * as TypeBox from "typebox";
|
|
28
27
|
import { Type } from "typebox";
|
|
29
28
|
import type {
|
|
30
29
|
TLocalizedValidationError,
|
|
31
30
|
TLocalizedValidationMessageCallback,
|
|
32
31
|
} from "typebox/error";
|
|
33
|
-
import
|
|
32
|
+
import Format from "typebox/format";
|
|
34
33
|
import { Locale } from "typebox/system";
|
|
35
|
-
import * as
|
|
34
|
+
import * as Value from "typebox/value";
|
|
36
35
|
import { OPTIONS } from "../constants/OPTIONS.ts";
|
|
37
36
|
import { AlephaError } from "../errors/AlephaError.ts";
|
|
38
37
|
import type { TypeBoxError } from "../errors/TypeBoxError.ts";
|
|
39
38
|
import { isTypeFile, type TFile, type TStream } from "../helpers/FileLike.ts";
|
|
40
39
|
|
|
41
|
-
export {
|
|
42
|
-
|
|
43
|
-
export const isUUID = TypeBoxFormat.IsUuid;
|
|
44
|
-
export const isEmail = TypeBoxFormat.IsEmail;
|
|
45
|
-
export const isURL = TypeBoxFormat.IsUrl;
|
|
46
|
-
export const isDateTime = TypeBoxFormat.IsDateTime;
|
|
47
|
-
export const isDate = TypeBoxFormat.IsDate;
|
|
48
|
-
export const isTime = TypeBoxFormat.IsTime;
|
|
49
|
-
export const isDuration = TypeBoxFormat.IsDuration;
|
|
40
|
+
export { Type, Value, Format };
|
|
41
|
+
export const isUUID = Format.IsUuid;
|
|
50
42
|
|
|
51
43
|
export type {
|
|
52
44
|
StaticDecode,
|
|
@@ -82,26 +74,26 @@ export type {
|
|
|
82
74
|
export class TypeGuard {
|
|
83
75
|
// -------------------------------------------------------------------------------------------------------------------
|
|
84
76
|
isBigInt = (value: TSchema): value is TString =>
|
|
85
|
-
|
|
77
|
+
Type.IsString(value) && "format" in value && value.format === "bigint";
|
|
86
78
|
isUUID = (value: TSchema): value is TString =>
|
|
87
|
-
|
|
88
|
-
isObject =
|
|
89
|
-
isNumber =
|
|
90
|
-
isString =
|
|
91
|
-
isBoolean =
|
|
92
|
-
isAny =
|
|
93
|
-
isArray =
|
|
94
|
-
isOptional =
|
|
95
|
-
isUnion =
|
|
96
|
-
isInteger =
|
|
97
|
-
isNull =
|
|
98
|
-
isUndefined =
|
|
99
|
-
isUnsafe =
|
|
100
|
-
isRecord =
|
|
101
|
-
isTuple =
|
|
102
|
-
isVoid =
|
|
103
|
-
isLiteral =
|
|
104
|
-
isSchema =
|
|
79
|
+
Type.IsString(value) && "format" in value && value.format === "uuid";
|
|
80
|
+
isObject = Type.IsObject;
|
|
81
|
+
isNumber = Type.IsNumber;
|
|
82
|
+
isString = Type.IsString;
|
|
83
|
+
isBoolean = Type.IsBoolean;
|
|
84
|
+
isAny = Type.IsAny;
|
|
85
|
+
isArray = Type.IsArray;
|
|
86
|
+
isOptional = Type.IsOptional;
|
|
87
|
+
isUnion = Type.IsUnion;
|
|
88
|
+
isInteger = Type.IsInteger;
|
|
89
|
+
isNull = Type.IsNull;
|
|
90
|
+
isUndefined = Type.IsUndefined;
|
|
91
|
+
isUnsafe = Type.IsUnsafe;
|
|
92
|
+
isRecord = Type.IsRecord;
|
|
93
|
+
isTuple = Type.IsTuple;
|
|
94
|
+
isVoid = Type.IsVoid;
|
|
95
|
+
isLiteral = Type.IsLiteral;
|
|
96
|
+
isSchema = Type.IsSchema;
|
|
105
97
|
// -------------------------------------------------------------------------------------------------------------------
|
|
106
98
|
isFile = isTypeFile;
|
|
107
99
|
isDateTime = (schema: unknown) => {
|
|
@@ -131,10 +123,10 @@ declare module "typebox" {
|
|
|
131
123
|
}
|
|
132
124
|
|
|
133
125
|
export class TypeProvider {
|
|
134
|
-
static format =
|
|
126
|
+
static format = Format;
|
|
135
127
|
|
|
136
128
|
static {
|
|
137
|
-
|
|
129
|
+
Format.Set("bigint", (value: string | number) =>
|
|
138
130
|
TypeProvider.isValidBigInt(value),
|
|
139
131
|
);
|
|
140
132
|
}
|
|
@@ -398,7 +390,7 @@ export class TypeProvider {
|
|
|
398
390
|
* Create a schema for a JSON object.
|
|
399
391
|
* This is a record with string keys and any values.
|
|
400
392
|
*/
|
|
401
|
-
public json(options?: TSchemaOptions): TRecord<string, TAny> {
|
|
393
|
+
public json<T = any>(options?: TSchemaOptions): TRecord<string, TAny> {
|
|
402
394
|
return t.record(t.text(), t.any(), options);
|
|
403
395
|
}
|
|
404
396
|
|
package/src/logger/index.ts
CHANGED
|
@@ -1,12 +1,13 @@
|
|
|
1
1
|
import { $module, type Static, t } from "alepha";
|
|
2
2
|
import { $logger } from "./primitives/$logger.ts";
|
|
3
|
+
import { ConsoleColorProvider } from "./providers/ConsoleColorProvider.ts";
|
|
3
4
|
import { ConsoleDestinationProvider } from "./providers/ConsoleDestinationProvider.ts";
|
|
4
5
|
import { JsonFormatterProvider } from "./providers/JsonFormatterProvider.ts";
|
|
5
6
|
import { LogDestinationProvider } from "./providers/LogDestinationProvider.ts";
|
|
6
7
|
import { LogFormatterProvider } from "./providers/LogFormatterProvider.ts";
|
|
7
8
|
import { MemoryDestinationProvider } from "./providers/MemoryDestinationProvider.ts";
|
|
9
|
+
import { PrettyFormatterProvider } from "./providers/PrettyFormatterProvider.ts";
|
|
8
10
|
import { RawFormatterProvider } from "./providers/RawFormatterProvider.ts";
|
|
9
|
-
import { SimpleFormatterProvider } from "./providers/SimpleFormatterProvider.ts";
|
|
10
11
|
import type { LogEntry } from "./schemas/logEntrySchema.ts";
|
|
11
12
|
import { Logger } from "./services/Logger.ts";
|
|
12
13
|
|
|
@@ -19,7 +20,7 @@ export * from "./providers/JsonFormatterProvider.ts";
|
|
|
19
20
|
export * from "./providers/LogDestinationProvider.ts";
|
|
20
21
|
export * from "./providers/LogFormatterProvider.ts";
|
|
21
22
|
export * from "./providers/MemoryDestinationProvider.ts";
|
|
22
|
-
export * from "./providers/
|
|
23
|
+
export * from "./providers/PrettyFormatterProvider.ts";
|
|
23
24
|
export * from "./schemas/logEntrySchema.ts";
|
|
24
25
|
export * from "./services/Logger.ts";
|
|
25
26
|
|
|
@@ -101,8 +102,9 @@ export const AlephaLogger = $module({
|
|
|
101
102
|
ConsoleDestinationProvider,
|
|
102
103
|
MemoryDestinationProvider,
|
|
103
104
|
JsonFormatterProvider,
|
|
104
|
-
|
|
105
|
+
PrettyFormatterProvider,
|
|
105
106
|
RawFormatterProvider,
|
|
107
|
+
ConsoleColorProvider,
|
|
106
108
|
],
|
|
107
109
|
register: (alepha) => {
|
|
108
110
|
const env = alepha.parseEnv(envSchema);
|
|
@@ -141,14 +143,14 @@ export const AlephaLogger = $module({
|
|
|
141
143
|
if (env.LOG_FORMAT === "raw") {
|
|
142
144
|
return RawFormatterProvider;
|
|
143
145
|
}
|
|
144
|
-
return
|
|
146
|
+
return PrettyFormatterProvider;
|
|
145
147
|
}
|
|
146
148
|
|
|
147
149
|
if (alepha.isProduction() && !alepha.isBrowser()) {
|
|
148
150
|
return JsonFormatterProvider;
|
|
149
151
|
}
|
|
150
152
|
|
|
151
|
-
return
|
|
153
|
+
return PrettyFormatterProvider;
|
|
152
154
|
};
|
|
153
155
|
|
|
154
156
|
alepha.with({
|
|
@@ -202,7 +204,7 @@ const envSchema = t.object({
|
|
|
202
204
|
/**
|
|
203
205
|
* Built-in log formats.
|
|
204
206
|
* - "json" - JSON format, useful for structured logging and log aggregation. {@link JsonFormatterProvider}
|
|
205
|
-
* - "pretty" - Simple text format, human-readable, with colors. {@link
|
|
207
|
+
* - "pretty" - Simple text format, human-readable, with colors. {@link PrettyFormatterProvider}
|
|
206
208
|
* - "raw" - Raw format, no formatting, just the message. {@link RawFormatterProvider}
|
|
207
209
|
*/
|
|
208
210
|
LOG_FORMAT: t.optional(
|
|
@@ -26,7 +26,7 @@ export const $logger = (options: LoggerPrimitiveOptions = {}): Logger => {
|
|
|
26
26
|
return $inject(Logger, {
|
|
27
27
|
lifetime: "transient",
|
|
28
28
|
args: [
|
|
29
|
-
options.name ?? service?.name,
|
|
29
|
+
options.name ?? service?.name ?? "Func",
|
|
30
30
|
module?.name ?? alepha.env.MODULE_NAME ?? "app",
|
|
31
31
|
],
|
|
32
32
|
});
|
|
@@ -3,7 +3,7 @@ import type { LogEntry } from "../schemas/logEntrySchema.ts";
|
|
|
3
3
|
import { ConsoleColorProvider } from "./ConsoleColorProvider.ts";
|
|
4
4
|
import { LogFormatterProvider } from "./LogFormatterProvider.ts";
|
|
5
5
|
|
|
6
|
-
export class
|
|
6
|
+
export class PrettyFormatterProvider extends LogFormatterProvider {
|
|
7
7
|
protected color = $inject(ConsoleColorProvider);
|
|
8
8
|
protected alepha = $inject(Alepha);
|
|
9
9
|
|
|
@@ -107,6 +107,15 @@ export class SimpleFormatterProvider extends LogFormatterProvider {
|
|
|
107
107
|
return "";
|
|
108
108
|
}
|
|
109
109
|
|
|
110
|
+
if (this.alepha.isViteDev()) {
|
|
111
|
+
// Node.js - try to fix stack trace with Vite SSR helper
|
|
112
|
+
// Actually, it works only because we have a global helper in viteAlephaDev.ts
|
|
113
|
+
const gl = globalThis as Record<string, unknown>;
|
|
114
|
+
if (typeof gl === "object" && typeof gl.ssrFixStacktrace === "function") {
|
|
115
|
+
gl.ssrFixStacktrace(error);
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
|
|
110
119
|
let str = error.stack ?? error.message;
|
|
111
120
|
|
|
112
121
|
const anyError = error as any;
|
package/src/orm/index.ts
CHANGED
|
@@ -10,7 +10,10 @@ import { NodePostgresProvider } from "./providers/drivers/NodePostgresProvider.t
|
|
|
10
10
|
import { NodeSqliteProvider } from "./providers/drivers/NodeSqliteProvider.ts";
|
|
11
11
|
import { PglitePostgresProvider } from "./providers/drivers/PglitePostgresProvider.ts";
|
|
12
12
|
import { RepositoryProvider } from "./providers/RepositoryProvider.ts";
|
|
13
|
+
import { PgJsonQueryManager } from "./services/PgJsonQueryManager.ts";
|
|
14
|
+
import { PgRelationManager } from "./services/PgRelationManager.ts";
|
|
13
15
|
import { PostgresModelBuilder } from "./services/PostgresModelBuilder.ts";
|
|
16
|
+
import { QueryManager } from "./services/QueryManager.ts";
|
|
14
17
|
import { Repository } from "./services/Repository.ts";
|
|
15
18
|
import { SqliteModelBuilder } from "./services/SqliteModelBuilder.ts";
|
|
16
19
|
|
|
@@ -176,6 +179,9 @@ export const AlephaPostgres = $module({
|
|
|
176
179
|
DrizzleKitProvider,
|
|
177
180
|
RepositoryProvider,
|
|
178
181
|
Repository,
|
|
182
|
+
PgRelationManager,
|
|
183
|
+
PgJsonQueryManager,
|
|
184
|
+
QueryManager,
|
|
179
185
|
],
|
|
180
186
|
register: (alepha: Alepha) => {
|
|
181
187
|
const env = alepha.parseEnv(
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { type TObject,
|
|
1
|
+
import { type TObject, t, Value } from "alepha";
|
|
2
2
|
import { getTableName, type SQL, sql } from "drizzle-orm";
|
|
3
3
|
import type { PgSelectBase, PgTableWithColumns } from "drizzle-orm/pg-core";
|
|
4
4
|
import { isSQLWrapper } from "drizzle-orm/sql/sql";
|
|
@@ -103,7 +103,7 @@ export class PgRelationManager {
|
|
|
103
103
|
joins: PgJoin[],
|
|
104
104
|
parentPath?: string,
|
|
105
105
|
): TObject {
|
|
106
|
-
const schema =
|
|
106
|
+
const schema = Value.Clone(baseSchema) as TObject;
|
|
107
107
|
|
|
108
108
|
// Group joins by parent
|
|
109
109
|
const joinsAtThisLevel = joins.filter((j) => j.parent === parentPath);
|
|
@@ -279,6 +279,13 @@ export class PostgresModelBuilder extends ModelBuilder {
|
|
|
279
279
|
return schema(key, value);
|
|
280
280
|
}
|
|
281
281
|
|
|
282
|
+
const isTypeEnum = (value: any): value is { enum: any[] } =>
|
|
283
|
+
t.schema.isUnsafe(value) &&
|
|
284
|
+
"type" in value &&
|
|
285
|
+
value.type === "string" &&
|
|
286
|
+
"enum" in value &&
|
|
287
|
+
Array.isArray(value.enum);
|
|
288
|
+
|
|
282
289
|
if (t.schema.isArray(value)) {
|
|
283
290
|
if (t.schema.isObject(value.items)) {
|
|
284
291
|
return schema(key, value);
|
|
@@ -298,16 +305,13 @@ export class PostgresModelBuilder extends ModelBuilder {
|
|
|
298
305
|
if (t.schema.isBoolean(value.items)) {
|
|
299
306
|
return pg.boolean(key).array();
|
|
300
307
|
}
|
|
308
|
+
if (isTypeEnum(value.items)) {
|
|
309
|
+
return pg.text(key).array();
|
|
310
|
+
}
|
|
301
311
|
}
|
|
302
312
|
|
|
303
313
|
// Enum handling
|
|
304
|
-
if (
|
|
305
|
-
t.schema.isUnsafe(value) &&
|
|
306
|
-
"type" in value &&
|
|
307
|
-
value.type === "string" &&
|
|
308
|
-
"enum" in value &&
|
|
309
|
-
Array.isArray(value.enum)
|
|
310
|
-
) {
|
|
314
|
+
if (isTypeEnum(value)) {
|
|
311
315
|
if (!value.enum.every((it) => typeof it === "string")) {
|
|
312
316
|
throw new AlephaError(
|
|
313
317
|
`Enum for ${fieldName} must be an array of strings, got ${JSON.stringify(
|
|
@@ -546,13 +546,15 @@ export abstract class Repository<T extends TObject> {
|
|
|
546
546
|
/**
|
|
547
547
|
* Create many entities.
|
|
548
548
|
*
|
|
549
|
+
* Inserts are batched in chunks of 1000 to avoid hitting database limits.
|
|
550
|
+
*
|
|
549
551
|
* @param values The entities to create.
|
|
550
552
|
* @param opts The statement options.
|
|
551
553
|
* @returns The created entities.
|
|
552
554
|
*/
|
|
553
555
|
public async createMany(
|
|
554
556
|
values: Array<Static<TObjectInsert<T>>>,
|
|
555
|
-
opts: StatementOptions = {},
|
|
557
|
+
opts: StatementOptions & { batchSize?: number } = {},
|
|
556
558
|
): Promise<Static<T>[]> {
|
|
557
559
|
if (values.length === 0) {
|
|
558
560
|
return [];
|
|
@@ -563,19 +565,26 @@ export abstract class Repository<T extends TObject> {
|
|
|
563
565
|
data: values,
|
|
564
566
|
});
|
|
565
567
|
|
|
568
|
+
const batchSize = opts.batchSize ?? 1000;
|
|
569
|
+
const allEntities: Static<T>[] = [];
|
|
570
|
+
|
|
566
571
|
try {
|
|
567
|
-
|
|
568
|
-
|
|
569
|
-
.
|
|
570
|
-
|
|
572
|
+
for (let i = 0; i < values.length; i += batchSize) {
|
|
573
|
+
const batch = values.slice(i, i + batchSize);
|
|
574
|
+
const entities = await this.rawInsert(opts)
|
|
575
|
+
.values(batch.map((data) => this.cast(data, true)))
|
|
576
|
+
.returning(this.table)
|
|
577
|
+
.then((rows) => rows.map((it) => this.clean(it, this.entity.schema)));
|
|
578
|
+
allEntities.push(...entities);
|
|
579
|
+
}
|
|
571
580
|
|
|
572
581
|
await this.alepha.events.emit("repository:create:after", {
|
|
573
582
|
tableName: this.tableName,
|
|
574
583
|
data: values,
|
|
575
|
-
entity:
|
|
584
|
+
entity: allEntities,
|
|
576
585
|
});
|
|
577
586
|
|
|
578
|
-
return
|
|
587
|
+
return allEntities;
|
|
579
588
|
} catch (error) {
|
|
580
589
|
throw this.handleError(error, "Insert query has failed");
|
|
581
590
|
}
|
|
@@ -190,6 +190,16 @@ export class SqliteModelBuilder extends ModelBuilder {
|
|
|
190
190
|
return pg.integer(key);
|
|
191
191
|
}
|
|
192
192
|
|
|
193
|
+
if (t.schema.isBigInt(value)) {
|
|
194
|
+
if (PG_PRIMARY_KEY in value || PG_IDENTITY in value) {
|
|
195
|
+
return pg
|
|
196
|
+
.integer(key, { mode: "number" })
|
|
197
|
+
.primaryKey({ autoIncrement: true });
|
|
198
|
+
}
|
|
199
|
+
|
|
200
|
+
return pg.integer(key, { mode: "number" });
|
|
201
|
+
}
|
|
202
|
+
|
|
193
203
|
if (t.schema.isNumber(value)) {
|
|
194
204
|
if (PG_IDENTITY in value) {
|
|
195
205
|
return pg
|
|
@@ -7,7 +7,6 @@ import { WorkerProvider } from "./providers/WorkerProvider.ts";
|
|
|
7
7
|
|
|
8
8
|
// ---------------------------------------------------------------------------------------------------------------------
|
|
9
9
|
|
|
10
|
-
export * from "./interfaces/QueueJob.ts";
|
|
11
10
|
export * from "./primitives/$consumer.ts";
|
|
12
11
|
export * from "./primitives/$queue.ts";
|
|
13
12
|
export * from "./providers/MemoryQueueProvider.ts";
|
|
@@ -17,9 +16,9 @@ export * from "./providers/WorkerProvider.ts";
|
|
|
17
16
|
// ---------------------------------------------------------------------------------------------------------------------
|
|
18
17
|
|
|
19
18
|
/**
|
|
20
|
-
* Provides asynchronous message queuing and processing capabilities through declarative queue
|
|
19
|
+
* Provides asynchronous message queuing and processing capabilities through declarative queue descriptors.
|
|
21
20
|
*
|
|
22
|
-
* The queue module enables reliable background job processing and message passing using the `$queue`
|
|
21
|
+
* The queue module enables reliable background job processing and message passing using the `$queue` descriptor
|
|
23
22
|
* on class properties. It supports schema validation, automatic retries, and multiple queue backends for
|
|
24
23
|
* building scalable, decoupled applications with robust error handling.
|
|
25
24
|
*
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import {
|
|
2
|
+
$inject,
|
|
2
3
|
createPrimitive,
|
|
3
4
|
KIND,
|
|
4
5
|
Primitive,
|
|
@@ -7,12 +8,9 @@ import {
|
|
|
7
8
|
type TSchema,
|
|
8
9
|
} from "alepha";
|
|
9
10
|
import { $logger } from "alepha/logger";
|
|
10
|
-
import type {
|
|
11
|
-
QueueAddJobOptions,
|
|
12
|
-
QueueJobBackoff,
|
|
13
|
-
} from "../interfaces/QueueJob.ts";
|
|
14
11
|
import { MemoryQueueProvider } from "../providers/MemoryQueueProvider.ts";
|
|
15
12
|
import { QueueProvider } from "../providers/QueueProvider.ts";
|
|
13
|
+
import { WorkerProvider } from "../providers/WorkerProvider.ts";
|
|
16
14
|
|
|
17
15
|
/**
|
|
18
16
|
* Creates a queue primitive for asynchronous message processing with background workers.
|
|
@@ -256,83 +254,6 @@ export interface QueuePrimitiveOptions<T extends TSchema> {
|
|
|
256
254
|
* ```
|
|
257
255
|
*/
|
|
258
256
|
handler?: (message: QueueMessage<T>) => Promise<void>;
|
|
259
|
-
|
|
260
|
-
// ===========================================
|
|
261
|
-
// Job Options (for crash recovery and retries)
|
|
262
|
-
// ===========================================
|
|
263
|
-
|
|
264
|
-
/**
|
|
265
|
-
* Maximum number of processing attempts before the job is marked as failed.
|
|
266
|
-
* Includes the initial attempt.
|
|
267
|
-
*
|
|
268
|
-
* Set this to enable automatic retries on failure.
|
|
269
|
-
*
|
|
270
|
-
* @default 1 (no retries)
|
|
271
|
-
* @example 3 // Allows 2 retries after initial failure
|
|
272
|
-
*/
|
|
273
|
-
maxAttempts?: number;
|
|
274
|
-
|
|
275
|
-
/**
|
|
276
|
-
* Backoff configuration for retries.
|
|
277
|
-
* Controls the delay between retry attempts.
|
|
278
|
-
*
|
|
279
|
-
* @example
|
|
280
|
-
* ```ts
|
|
281
|
-
* backoff: {
|
|
282
|
-
* type: "exponential",
|
|
283
|
-
* delay: 1000, // Initial delay: 1 second
|
|
284
|
-
* maxDelay: 60000 // Maximum delay: 1 minute
|
|
285
|
-
* }
|
|
286
|
-
* ```
|
|
287
|
-
*/
|
|
288
|
-
backoff?: QueueJobBackoff;
|
|
289
|
-
|
|
290
|
-
/**
|
|
291
|
-
* Maximum time in milliseconds a job can be processed before it's considered stalled.
|
|
292
|
-
* If the worker doesn't complete or extend the lock within this time, the job
|
|
293
|
-
* can be picked up by another worker.
|
|
294
|
-
*
|
|
295
|
-
* Increase this for long-running jobs.
|
|
296
|
-
*
|
|
297
|
-
* @default 30000 (30 seconds)
|
|
298
|
-
*/
|
|
299
|
-
lockDuration?: number;
|
|
300
|
-
|
|
301
|
-
/**
|
|
302
|
-
* Automatically remove jobs when they complete successfully.
|
|
303
|
-
* - `true`: Remove immediately after completion
|
|
304
|
-
* - `false`: Keep in completed list (default)
|
|
305
|
-
* - `number`: Keep this many most recent completed jobs, remove older ones
|
|
306
|
-
*
|
|
307
|
-
* @default false
|
|
308
|
-
* @example
|
|
309
|
-
* ```ts
|
|
310
|
-
* // Remove immediately after completion
|
|
311
|
-
* removeOnComplete: true
|
|
312
|
-
*
|
|
313
|
-
* // Keep only the last 100 completed jobs
|
|
314
|
-
* removeOnComplete: 100
|
|
315
|
-
* ```
|
|
316
|
-
*/
|
|
317
|
-
removeOnComplete?: boolean | number;
|
|
318
|
-
|
|
319
|
-
/**
|
|
320
|
-
* Automatically remove jobs when they fail permanently (after all retries exhausted).
|
|
321
|
-
* - `true`: Remove immediately after failure
|
|
322
|
-
* - `false`: Keep in failed list (default)
|
|
323
|
-
* - `number`: Keep this many most recent failed jobs, remove older ones
|
|
324
|
-
*
|
|
325
|
-
* @default false
|
|
326
|
-
* @example
|
|
327
|
-
* ```ts
|
|
328
|
-
* // Remove immediately after failure
|
|
329
|
-
* removeOnFail: true
|
|
330
|
-
*
|
|
331
|
-
* // Keep only the last 50 failed jobs for debugging
|
|
332
|
-
* removeOnFail: 50
|
|
333
|
-
* ```
|
|
334
|
-
*/
|
|
335
|
-
removeOnFail?: boolean | number;
|
|
336
257
|
}
|
|
337
258
|
|
|
338
259
|
// ---------------------------------------------------------------------------------------------------------------------
|
|
@@ -341,90 +262,24 @@ export class QueuePrimitive<T extends TSchema> extends Primitive<
|
|
|
341
262
|
QueuePrimitiveOptions<T>
|
|
342
263
|
> {
|
|
343
264
|
protected readonly log = $logger();
|
|
265
|
+
protected readonly workerProvider = $inject(WorkerProvider);
|
|
344
266
|
public readonly provider = this.$provider();
|
|
345
267
|
|
|
346
|
-
|
|
347
|
-
|
|
348
|
-
|
|
349
|
-
|
|
350
|
-
|
|
351
|
-
|
|
352
|
-
|
|
353
|
-
|
|
354
|
-
|
|
355
|
-
|
|
356
|
-
|
|
357
|
-
|
|
358
|
-
* @param payload - The payload to queue
|
|
359
|
-
* @param options - Job options (priority, delay)
|
|
360
|
-
*/
|
|
361
|
-
public async push(
|
|
362
|
-
payload: Static<T>,
|
|
363
|
-
options: QueueAddJobOptions,
|
|
364
|
-
): Promise<void>;
|
|
365
|
-
|
|
366
|
-
public async push(
|
|
367
|
-
payloadOrFirst: Static<T>,
|
|
368
|
-
optionsOrSecond?: QueueAddJobOptions | Static<T>,
|
|
369
|
-
...rest: Array<Static<T>>
|
|
370
|
-
): Promise<void> {
|
|
371
|
-
// Check if second argument is options object
|
|
372
|
-
const isOptions =
|
|
373
|
-
optionsOrSecond != null &&
|
|
374
|
-
typeof optionsOrSecond === "object" &&
|
|
375
|
-
("priority" in optionsOrSecond || "delay" in optionsOrSecond);
|
|
376
|
-
|
|
377
|
-
if (isOptions) {
|
|
378
|
-
// Single payload with options
|
|
379
|
-
const payload = this.alepha.codec.decode(
|
|
380
|
-
this.options.schema,
|
|
381
|
-
payloadOrFirst,
|
|
382
|
-
);
|
|
383
|
-
await this.provider.addJob(this.name, payload, {
|
|
384
|
-
...this.getDefaultJobOptions(),
|
|
385
|
-
priority: (optionsOrSecond as QueueAddJobOptions).priority,
|
|
386
|
-
delay: (optionsOrSecond as QueueAddJobOptions).delay,
|
|
387
|
-
});
|
|
388
|
-
this.log.debug(`Pushed job to queue ${this.name}`, {
|
|
389
|
-
payload,
|
|
390
|
-
options: optionsOrSecond,
|
|
391
|
-
});
|
|
392
|
-
} else {
|
|
393
|
-
// Multiple payloads without per-job options
|
|
394
|
-
const payloads =
|
|
395
|
-
optionsOrSecond != null
|
|
396
|
-
? [payloadOrFirst, optionsOrSecond as Static<T>, ...rest]
|
|
397
|
-
: [payloadOrFirst, ...rest];
|
|
268
|
+
public async push(...payloads: Array<Static<T>>) {
|
|
269
|
+
await Promise.all(
|
|
270
|
+
payloads.map((payload) =>
|
|
271
|
+
this.provider.push(
|
|
272
|
+
this.name,
|
|
273
|
+
JSON.stringify({
|
|
274
|
+
headers: {},
|
|
275
|
+
payload: this.alepha.codec.decode(this.options.schema, payload),
|
|
276
|
+
}),
|
|
277
|
+
),
|
|
278
|
+
),
|
|
279
|
+
);
|
|
398
280
|
|
|
399
|
-
|
|
400
|
-
|
|
401
|
-
const payload = this.alepha.codec.decode(this.options.schema, p);
|
|
402
|
-
return this.provider.addJob(
|
|
403
|
-
this.name,
|
|
404
|
-
payload,
|
|
405
|
-
this.getDefaultJobOptions(),
|
|
406
|
-
);
|
|
407
|
-
}),
|
|
408
|
-
);
|
|
409
|
-
|
|
410
|
-
this.log.debug(
|
|
411
|
-
`Pushed ${payloads.length} job(s) to queue ${this.name}`,
|
|
412
|
-
payloads,
|
|
413
|
-
);
|
|
414
|
-
}
|
|
415
|
-
}
|
|
416
|
-
|
|
417
|
-
/**
|
|
418
|
-
* Get default job options from primitive configuration.
|
|
419
|
-
*/
|
|
420
|
-
protected getDefaultJobOptions() {
|
|
421
|
-
return {
|
|
422
|
-
maxAttempts: this.options.maxAttempts,
|
|
423
|
-
backoff: this.options.backoff,
|
|
424
|
-
lockDuration: this.options.lockDuration,
|
|
425
|
-
removeOnComplete: this.options.removeOnComplete,
|
|
426
|
-
removeOnFail: this.options.removeOnFail,
|
|
427
|
-
};
|
|
281
|
+
this.log.debug(`Pushed to queue ${this.name}`, payloads);
|
|
282
|
+
this.workerProvider.wakeUp();
|
|
428
283
|
}
|
|
429
284
|
|
|
430
285
|
public get name() {
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { $logger } from "alepha/logger";
|
|
2
|
+
import type { QueueProvider } from "./QueueProvider.ts";
|
|
3
|
+
|
|
4
|
+
export class MemoryQueueProvider implements QueueProvider {
|
|
5
|
+
protected readonly log = $logger();
|
|
6
|
+
protected queueList: Record<string, string[]> = {};
|
|
7
|
+
|
|
8
|
+
public async push(queue: string, ...messages: string[]): Promise<void> {
|
|
9
|
+
if (this.queueList[queue] == null) {
|
|
10
|
+
this.queueList[queue] = [];
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
this.queueList[queue].push(...messages);
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
public async pop(queue: string): Promise<string | undefined> {
|
|
17
|
+
return this.queueList[queue]?.shift();
|
|
18
|
+
}
|
|
19
|
+
}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Minimalist Queue interface.
|
|
3
|
+
*
|
|
4
|
+
* Will be probably enhanced in the future to support more advanced features. But for now, it's enough!
|
|
5
|
+
*/
|
|
6
|
+
export abstract class QueueProvider {
|
|
7
|
+
/**
|
|
8
|
+
* Push a message to the queue.
|
|
9
|
+
*
|
|
10
|
+
* @param queue Name of the queue to push the message to.
|
|
11
|
+
* @param message String message to be pushed to the queue. Buffer messages are not supported for now.
|
|
12
|
+
*/
|
|
13
|
+
public abstract push(queue: string, message: string): Promise<void>;
|
|
14
|
+
|
|
15
|
+
/**
|
|
16
|
+
* Pop a message from the queue.
|
|
17
|
+
*
|
|
18
|
+
* @param queue Name of the queue to pop the message from.
|
|
19
|
+
*
|
|
20
|
+
* @returns The message popped or `undefined` if the queue is empty.
|
|
21
|
+
*/
|
|
22
|
+
public abstract pop(queue: string): Promise<string | undefined>;
|
|
23
|
+
}
|