alepha 0.13.7 → 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 → api/audits}/index.browser.js +4 -4
- package/dist/api/audits/index.browser.js.map +1 -0
- package/dist/{api-audits → api/audits}/index.d.ts +8 -8
- package/dist/{api-audits → api/audits}/index.js +8 -8
- 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 → api/parameters}/index.browser.js +2 -2
- package/dist/api/parameters/index.browser.js.map +1 -0
- package/dist/{api-parameters → api/parameters}/index.d.ts +7 -7
- package/dist/{api-parameters → api/parameters}/index.js +7 -7
- 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 +844 -845
- package/dist/{api-users → api/users}/index.js +99 -766
- 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 +11 -11
- package/dist/api/verifications/index.js.map +1 -0
- 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 +34 -26
- package/dist/cli/index.js +75 -46
- package/dist/cli/index.js.map +1 -1
- package/dist/command/index.d.ts +4 -4
- package/dist/core/index.browser.js.map +1 -1
- package/dist/core/index.js.map +1 -1
- package/dist/core/index.native.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/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 +1 -1
- 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 +167 -167
- 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 +4 -4
- 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} +36 -36
- package/dist/server/{index.js → core/index.js} +27 -27
- 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 +7 -7
- 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 +13 -13
- 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/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 +11 -0
- package/dist/vite/index.js +12 -5
- package/dist/vite/index.js.map +1 -1
- package/package.json +156 -157
- package/src/{api-files → api/files}/index.ts +1 -0
- package/src/{api-parameters → api/parameters}/index.ts +1 -1
- package/src/{api-users → api/users}/primitives/$userRealm.ts +1 -1
- package/src/{api-users → api/users}/providers/UserRealmProvider.ts +6 -7
- package/src/{api-verifications → api/verifications}/index.ts +2 -0
- package/src/cli/apps/AlephaPackageBuilderCli.ts +73 -48
- package/src/cli/assets/appRouterTs.ts +1 -1
- package/src/cli/assets/biomeJson.ts +1 -1
- package/src/cli/assets/indexHtml.ts +1 -1
- package/src/cli/assets/mainBrowserTs.ts +1 -1
- package/src/cli/assets/viteConfigTs.ts +1 -1
- package/src/cli/commands/CoreCommands.ts +10 -6
- package/src/cli/commands/VerifyCommands.ts +4 -1
- package/src/cli/commands/ViteCommands.ts +20 -9
- package/src/cli/services/AlephaCliUtils.ts +29 -14
- package/src/core/providers/SchemaValidator.ts +1 -1
- 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/{index.ts → core/index.ts} +1 -0
- 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/vite/tasks/copyAssets.ts +32 -8
- package/dist/api-audits/index.browser.js.map +0 -1
- package/dist/api-audits/index.js.map +0 -1
- 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.map +0 -1
- 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/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 -1973
- 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/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-audits → api/audits}/controllers/AuditController.ts +0 -0
- /package/src/{api-audits → api/audits}/entities/audits.ts +0 -0
- /package/src/{api-audits → api/audits}/index.browser.ts +0 -0
- /package/src/{api-audits → api/audits}/index.ts +0 -0
- /package/src/{api-audits → api/audits}/primitives/$audit.ts +0 -0
- /package/src/{api-audits → api/audits}/schemas/auditQuerySchema.ts +0 -0
- /package/src/{api-audits → api/audits}/schemas/auditResourceSchema.ts +0 -0
- /package/src/{api-audits → api/audits}/schemas/createAuditSchema.ts +0 -0
- /package/src/{api-audits → api/audits}/services/AuditService.ts +0 -0
- /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}/controllers/ConfigController.ts +0 -0
- /package/src/{api-parameters → api/parameters}/entities/parameters.ts +0 -0
- /package/src/{api-parameters → api/parameters}/index.browser.ts +0 -0
- /package/src/{api-parameters → api/parameters}/primitives/$config.ts +0 -0
- /package/src/{api-parameters → api/parameters}/schedulers/ConfigActivationScheduler.ts +0 -0
- /package/src/{api-parameters → api/parameters}/services/ConfigStore.ts +0 -0
- /package/src/{api-users → api/users}/atoms/realmAuthSettingsAtom.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}/controllers/UserRealmController.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}/index.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/RegistrationService.ts +0 -0
- /package/src/{api-users → api/users}/services/SessionCrudService.ts +0 -0
- /package/src/{api-users → api/users}/services/SessionService.ts +0 -0
- /package/src/{api-users → api/users}/services/UserService.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/$auth.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}/providers/ServerAuthProvider.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}/index.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}/$action.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}/ServerBodyParserProvider.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}/ServerRouterProvider.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
|
@@ -37,8 +37,10 @@ export class AlephaPackageBuilderCli {
|
|
|
37
37
|
pkgData.exports = {};
|
|
38
38
|
|
|
39
39
|
for (const item of modules) {
|
|
40
|
-
|
|
41
|
-
|
|
40
|
+
let m = `./${item.name.replace("core", "")}`;
|
|
41
|
+
if (m.endsWith("/")) m = m.slice(0, -1);
|
|
42
|
+
const path = m;
|
|
43
|
+
|
|
42
44
|
pkgData.exports[path] = {};
|
|
43
45
|
// order is important here for compatibility
|
|
44
46
|
pkgData.exports[path].types = `./src/${item.name}/index.ts`;
|
|
@@ -81,7 +83,8 @@ export class AlephaPackageBuilderCli {
|
|
|
81
83
|
"alepha",
|
|
82
84
|
packageName,
|
|
83
85
|
...modules.map(
|
|
84
|
-
(item) =>
|
|
86
|
+
(item) =>
|
|
87
|
+
`${packageName}/${item.name.replace("-", "/").replace("/core", "")}`,
|
|
85
88
|
),
|
|
86
89
|
];
|
|
87
90
|
|
|
@@ -124,13 +127,16 @@ export class AlephaPackageBuilderCli {
|
|
|
124
127
|
});
|
|
125
128
|
}
|
|
126
129
|
|
|
127
|
-
const config = join(
|
|
130
|
+
const config = join(
|
|
131
|
+
tmpDir,
|
|
132
|
+
`tsdown-${item.name.replace("/", "-")}.config.js`,
|
|
133
|
+
);
|
|
128
134
|
await this.fs.writeFile(
|
|
129
135
|
config,
|
|
130
136
|
`export default ${JSON.stringify(entries, null, 2)};`,
|
|
131
137
|
);
|
|
132
138
|
await run(`npx tsdown -c=${config}`);
|
|
133
|
-
await this.fs.rm(config);
|
|
139
|
+
//await this.fs.rm(config);
|
|
134
140
|
};
|
|
135
141
|
|
|
136
142
|
const concurrency = Math.ceil(os.cpus().length / 2);
|
|
@@ -257,57 +263,76 @@ export async function analyzeModules(
|
|
|
257
263
|
packageName: string,
|
|
258
264
|
): Promise<Module[]> {
|
|
259
265
|
const modules: Module[] = [];
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
|
|
266
|
+
|
|
267
|
+
async function scanDirectory(dir: string, prefix: string): Promise<void> {
|
|
268
|
+
const entries = await readdir(dir, { withFileTypes: true });
|
|
269
|
+
|
|
270
|
+
for (const entry of entries) {
|
|
271
|
+
if (entry.isDirectory()) {
|
|
272
|
+
const moduleName = prefix ? `${prefix}/${entry.name}` : entry.name;
|
|
273
|
+
const modulePath = join(dir, entry.name);
|
|
274
|
+
|
|
275
|
+
// Check if this directory has an index.ts (is a module)
|
|
276
|
+
const hasIndex = await fileExists(join(modulePath, "index.ts"));
|
|
277
|
+
|
|
278
|
+
if (hasIndex) {
|
|
279
|
+
// This is a module
|
|
280
|
+
const dependencies = new Set<string>();
|
|
281
|
+
|
|
282
|
+
// Check for browser/node entry points
|
|
283
|
+
const hasBrowser = await fileExists(
|
|
284
|
+
join(modulePath, "index.browser.ts"),
|
|
285
|
+
);
|
|
286
|
+
const hasNative = await fileExists(
|
|
287
|
+
join(modulePath, "index.native.ts"),
|
|
288
|
+
);
|
|
289
|
+
const hasNode = await fileExists(join(modulePath, "index.node.ts"));
|
|
290
|
+
|
|
291
|
+
// Get all .ts/.tsx files in this module
|
|
292
|
+
const files = await getAllFiles(modulePath);
|
|
293
|
+
|
|
294
|
+
for (const file of files) {
|
|
295
|
+
const content = await readFile(file, "utf-8");
|
|
296
|
+
const deps = extractAlephaDependencies(
|
|
297
|
+
content,
|
|
298
|
+
packageName,
|
|
299
|
+
moduleName,
|
|
292
300
|
);
|
|
301
|
+
for (const dep of deps) {
|
|
302
|
+
if (dep.endsWith(".ts")) {
|
|
303
|
+
throw new Error(
|
|
304
|
+
`Invalid dependency '${dep}' in module '${moduleName}'. Do not include file extensions in Alepha module imports.`,
|
|
305
|
+
);
|
|
306
|
+
}
|
|
307
|
+
if (dep.includes("-")) {
|
|
308
|
+
throw new Error(
|
|
309
|
+
`Invalid dependency '${dep}' in module '${moduleName}'. Use '/' instead of '-' in Alepha module imports.`,
|
|
310
|
+
);
|
|
311
|
+
}
|
|
312
|
+
dependencies.add(dep);
|
|
313
|
+
}
|
|
293
314
|
}
|
|
294
|
-
dependencies.add(dep);
|
|
295
|
-
}
|
|
296
|
-
}
|
|
297
315
|
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
|
|
301
|
-
|
|
316
|
+
const module: Module = {
|
|
317
|
+
name: moduleName,
|
|
318
|
+
dependencies: Array.from(dependencies),
|
|
319
|
+
};
|
|
302
320
|
|
|
303
|
-
|
|
304
|
-
|
|
305
|
-
|
|
321
|
+
if (hasNative) module.native = true;
|
|
322
|
+
if (hasBrowser) module.browser = true;
|
|
323
|
+
if (hasNode) module.node = true;
|
|
306
324
|
|
|
307
|
-
|
|
325
|
+
modules.push(module);
|
|
326
|
+
} else {
|
|
327
|
+
// No index.ts, check subdirectories for modules
|
|
328
|
+
await scanDirectory(modulePath, moduleName);
|
|
329
|
+
}
|
|
330
|
+
}
|
|
308
331
|
}
|
|
309
332
|
}
|
|
310
333
|
|
|
334
|
+
await scanDirectory(srcDir, "");
|
|
335
|
+
|
|
311
336
|
// Check for circular dependencies
|
|
312
337
|
detectCircularDependencies(modules);
|
|
313
338
|
|
|
@@ -51,10 +51,6 @@ export class CoreCommands {
|
|
|
51
51
|
name: "init",
|
|
52
52
|
description: "Add missing Alepha configuration files to the project",
|
|
53
53
|
flags: t.object({
|
|
54
|
-
// TODO:
|
|
55
|
-
// force: t.boolean({
|
|
56
|
-
// description: "If true, all config files will be overwritten",
|
|
57
|
-
// }),
|
|
58
54
|
// choose package manager
|
|
59
55
|
yarn: t.optional(t.boolean({ description: "Use Yarn package manager" })),
|
|
60
56
|
pnpm: t.optional(t.boolean({ description: "Use pnpm package manager" })),
|
|
@@ -76,6 +72,8 @@ export class CoreCommands {
|
|
|
76
72
|
flags.react = true;
|
|
77
73
|
}
|
|
78
74
|
|
|
75
|
+
const isExpo = await this.utils.hasExpo(root);
|
|
76
|
+
|
|
79
77
|
await run({
|
|
80
78
|
name: "ensuring configuration files",
|
|
81
79
|
handler: async () => {
|
|
@@ -83,9 +81,9 @@ export class CoreCommands {
|
|
|
83
81
|
tsconfigJson: true,
|
|
84
82
|
packageJson: flags,
|
|
85
83
|
biomeJson: true,
|
|
86
|
-
viteConfigTs:
|
|
84
|
+
viteConfigTs: !isExpo,
|
|
87
85
|
editorconfig: true,
|
|
88
|
-
indexHtml: !!flags.react,
|
|
86
|
+
indexHtml: !!flags.react && !isExpo,
|
|
89
87
|
});
|
|
90
88
|
|
|
91
89
|
// Create src/main.ts if src directory is empty or doesn't exist
|
|
@@ -111,6 +109,12 @@ export class CoreCommands {
|
|
|
111
109
|
alias: `installing dependencies with ${pm}`,
|
|
112
110
|
});
|
|
113
111
|
|
|
112
|
+
if (!isExpo) {
|
|
113
|
+
await this.utils.ensureDependency(root, "vite", { run });
|
|
114
|
+
}
|
|
115
|
+
|
|
116
|
+
await this.utils.ensureDependency(root, "@biomejs/biome", { run });
|
|
117
|
+
|
|
114
118
|
// Install vitest and create test directory if --test flag is set
|
|
115
119
|
if (flags.test) {
|
|
116
120
|
await this.utils.ensureTestDir(root);
|
|
@@ -37,7 +37,10 @@ export class VerifyCommands {
|
|
|
37
37
|
await run("alepha db:check-migrations");
|
|
38
38
|
}
|
|
39
39
|
|
|
40
|
-
await
|
|
40
|
+
const isExpo = await this.utils.hasExpo(root);
|
|
41
|
+
if (!isExpo) {
|
|
42
|
+
await run("alepha build");
|
|
43
|
+
}
|
|
41
44
|
await run("alepha clean");
|
|
42
45
|
},
|
|
43
46
|
});
|
|
@@ -29,6 +29,7 @@ export class ViteCommands {
|
|
|
29
29
|
|
|
30
30
|
public readonly run = $command({
|
|
31
31
|
name: "run",
|
|
32
|
+
hide: true,
|
|
32
33
|
description: "Run a TypeScript file directly",
|
|
33
34
|
flags: t.object({
|
|
34
35
|
watch: t.optional(
|
|
@@ -54,11 +55,18 @@ export class ViteCommands {
|
|
|
54
55
|
description: "Run the project in development mode",
|
|
55
56
|
args: t.optional(t.text({ title: "path", description: "Filepath to run" })),
|
|
56
57
|
handler: async ({ args, root }) => {
|
|
58
|
+
const expo = await this.utils.hasExpo(root);
|
|
59
|
+
|
|
57
60
|
await this.utils.ensureConfig(root, {
|
|
58
|
-
viteConfigTs:
|
|
61
|
+
viteConfigTs: !expo,
|
|
59
62
|
tsconfigJson: true,
|
|
60
63
|
});
|
|
61
64
|
|
|
65
|
+
if (expo) {
|
|
66
|
+
await this.utils.exec(`expo start`);
|
|
67
|
+
return;
|
|
68
|
+
}
|
|
69
|
+
|
|
62
70
|
const entry = await boot.getServerEntry(root, args);
|
|
63
71
|
this.log.trace("Entry file found", { entry });
|
|
64
72
|
|
|
@@ -123,6 +131,12 @@ export class ViteCommands {
|
|
|
123
131
|
// Tell viteAlephaBuild plugin to skip - CLI handles all tasks
|
|
124
132
|
process.env.ALEPHA_BUILD_MODE = "cli";
|
|
125
133
|
|
|
134
|
+
if (await this.utils.hasExpo(root)) {
|
|
135
|
+
// will coming soon
|
|
136
|
+
// 1. ensure "expo prebuild" is run
|
|
137
|
+
return;
|
|
138
|
+
}
|
|
139
|
+
|
|
126
140
|
await this.utils.ensureConfig(root, {
|
|
127
141
|
viteConfigTs: true,
|
|
128
142
|
tsconfigJson: true,
|
|
@@ -201,14 +215,11 @@ export class ViteCommands {
|
|
|
201
215
|
});
|
|
202
216
|
|
|
203
217
|
// Copy assets
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
entry: `${distDir}/index.js`,
|
|
210
|
-
distDir,
|
|
211
|
-
}),
|
|
218
|
+
await copyAssets({
|
|
219
|
+
root,
|
|
220
|
+
entry: `${distDir}/index.js`,
|
|
221
|
+
distDir,
|
|
222
|
+
run,
|
|
212
223
|
});
|
|
213
224
|
|
|
214
225
|
if (hasClient) {
|
|
@@ -196,6 +196,14 @@ export class AlephaCliUtils {
|
|
|
196
196
|
|
|
197
197
|
const devDependencies: Record<string, string> = {};
|
|
198
198
|
|
|
199
|
+
const scripts: Record<string, string> = {
|
|
200
|
+
dev: "alepha dev",
|
|
201
|
+
build: "alepha build",
|
|
202
|
+
lint: "alepha lint",
|
|
203
|
+
typecheck: "alepha typecheck",
|
|
204
|
+
verify: "alepha verify",
|
|
205
|
+
};
|
|
206
|
+
|
|
199
207
|
if (modes.ui) {
|
|
200
208
|
dependencies["@alepha/ui"] = `^${version}`;
|
|
201
209
|
modes.react = true;
|
|
@@ -212,11 +220,7 @@ export class AlephaCliUtils {
|
|
|
212
220
|
type: "module",
|
|
213
221
|
dependencies,
|
|
214
222
|
devDependencies,
|
|
215
|
-
scripts
|
|
216
|
-
dev: "alepha dev",
|
|
217
|
-
build: "alepha build",
|
|
218
|
-
verify: "alepha verify",
|
|
219
|
-
},
|
|
223
|
+
scripts,
|
|
220
224
|
};
|
|
221
225
|
}
|
|
222
226
|
|
|
@@ -234,16 +238,14 @@ export class AlephaCliUtils {
|
|
|
234
238
|
public async ensurePackageJson(
|
|
235
239
|
root: string,
|
|
236
240
|
modes: DependencyModes,
|
|
237
|
-
): Promise<
|
|
241
|
+
): Promise<object> {
|
|
238
242
|
const packageJsonPath = join(root, "package.json");
|
|
239
243
|
try {
|
|
240
244
|
await access(packageJsonPath);
|
|
241
245
|
} catch (error) {
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
);
|
|
246
|
-
return;
|
|
246
|
+
const obj = this.generatePackageJsonContent(modes);
|
|
247
|
+
await writeFile(packageJsonPath, JSON.stringify(obj, null, 2));
|
|
248
|
+
return obj;
|
|
247
249
|
}
|
|
248
250
|
|
|
249
251
|
const content = await readFile(packageJsonPath, "utf8");
|
|
@@ -261,6 +263,8 @@ export class AlephaCliUtils {
|
|
|
261
263
|
Object.assign(packageJson.scripts, newPackageJson.scripts);
|
|
262
264
|
|
|
263
265
|
await writeFile(packageJsonPath, JSON.stringify(packageJson, null, 2));
|
|
266
|
+
|
|
267
|
+
return packageJson;
|
|
264
268
|
}
|
|
265
269
|
|
|
266
270
|
public async ensureConfig(
|
|
@@ -273,8 +277,8 @@ export class AlephaCliUtils {
|
|
|
273
277
|
biomeJson?: boolean;
|
|
274
278
|
editorconfig?: boolean;
|
|
275
279
|
},
|
|
276
|
-
) {
|
|
277
|
-
const tasks: Promise<void>[] = [];
|
|
280
|
+
): Promise<Array<void | object>> {
|
|
281
|
+
const tasks: Promise<void | object>[] = [];
|
|
278
282
|
|
|
279
283
|
if (opts.packageJson) {
|
|
280
284
|
tasks.push(
|
|
@@ -300,7 +304,7 @@ export class AlephaCliUtils {
|
|
|
300
304
|
tasks.push(this.ensureEditorConfig(root));
|
|
301
305
|
}
|
|
302
306
|
|
|
303
|
-
await Promise.all(tasks);
|
|
307
|
+
return await Promise.all(tasks);
|
|
304
308
|
}
|
|
305
309
|
|
|
306
310
|
/**
|
|
@@ -789,6 +793,16 @@ ${models.map((it: string) => `export const ${it} = models["${it}"];`).join("\n")
|
|
|
789
793
|
}
|
|
790
794
|
}
|
|
791
795
|
|
|
796
|
+
/**
|
|
797
|
+
* Check if Expo is present in the project.
|
|
798
|
+
*
|
|
799
|
+
* @param root - The root directory of the project
|
|
800
|
+
* @returns True if expo is in dependencies or devDependencies
|
|
801
|
+
*/
|
|
802
|
+
async hasExpo(root: string): Promise<boolean> {
|
|
803
|
+
return this.hasDependency(root, "expo");
|
|
804
|
+
}
|
|
805
|
+
|
|
792
806
|
/**
|
|
793
807
|
* Install a dependency if it's missing from the project.
|
|
794
808
|
*
|
|
@@ -839,4 +853,5 @@ ${models.map((it: string) => `export const ${it} = models["${it}"];`).join("\n")
|
|
|
839
853
|
export interface DependencyModes {
|
|
840
854
|
react?: boolean;
|
|
841
855
|
ui?: boolean;
|
|
856
|
+
expo?: boolean;
|
|
842
857
|
}
|
|
@@ -23,7 +23,7 @@ export class SchemaValidator {
|
|
|
23
23
|
});
|
|
24
24
|
|
|
25
25
|
try {
|
|
26
|
-
return this.getValidator(schema).Parse(newValue)
|
|
26
|
+
return this.getValidator(schema).Parse(newValue) as Static<T>;
|
|
27
27
|
} catch (error: any) {
|
|
28
28
|
if (error.cause?.errors?.[0]) {
|
|
29
29
|
throw new TypeBoxError(error.cause.errors[0]);
|
|
@@ -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
|
+
}
|