alepha 0.22.0 → 0.24.0
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/assets/swagger-ui/swagger-ui-bundle.js +1 -1
- package/assets/swagger-ui/swagger-ui-standalone-preset.js +1 -1
- package/dist/api/audits/index.browser.js +49 -52
- package/dist/api/audits/index.browser.js.map +1 -1
- package/dist/api/audits/index.d.ts +629 -565
- package/dist/api/audits/index.d.ts.map +1 -1
- package/dist/api/audits/index.js +206 -98
- package/dist/api/audits/index.js.map +1 -1
- package/dist/api/files/index.browser.js +44 -44
- package/dist/api/files/index.browser.js.map +1 -1
- package/dist/api/files/index.d.ts +292 -293
- package/dist/api/files/index.d.ts.map +1 -1
- package/dist/api/files/index.js +61 -64
- package/dist/api/files/index.js.map +1 -1
- package/dist/api/jobs/index.browser.js +61 -59
- package/dist/api/jobs/index.browser.js.map +1 -1
- package/dist/api/jobs/index.d.ts +546 -347
- package/dist/api/jobs/index.d.ts.map +1 -1
- package/dist/api/jobs/index.js +165 -86
- package/dist/api/jobs/index.js.map +1 -1
- package/dist/api/keys/index.d.ts +242 -230
- package/dist/api/keys/index.d.ts.map +1 -1
- package/dist/api/keys/index.js +63 -66
- package/dist/api/keys/index.js.map +1 -1
- package/dist/api/notifications/index.browser.js +40 -38
- package/dist/api/notifications/index.browser.js.map +1 -1
- package/dist/api/notifications/index.d.ts +339 -209
- package/dist/api/notifications/index.d.ts.map +1 -1
- package/dist/api/notifications/index.js +108 -60
- package/dist/api/notifications/index.js.map +1 -1
- package/dist/api/oauth/index.d.ts +190 -78
- package/dist/api/oauth/index.d.ts.map +1 -1
- package/dist/api/oauth/index.js +290 -68
- package/dist/api/oauth/index.js.map +1 -1
- package/dist/api/organizations/index.browser.js +14 -14
- package/dist/api/organizations/index.browser.js.map +1 -1
- package/dist/api/organizations/index.d.ts +158 -134
- package/dist/api/organizations/index.d.ts.map +1 -1
- package/dist/api/organizations/index.js +18 -18
- package/dist/api/organizations/index.js.map +1 -1
- package/dist/api/parameters/index.browser.js +74 -53
- package/dist/api/parameters/index.browser.js.map +1 -1
- package/dist/api/parameters/index.d.ts +607 -513
- package/dist/api/parameters/index.d.ts.map +1 -1
- package/dist/api/parameters/index.js +205 -127
- package/dist/api/parameters/index.js.map +1 -1
- package/dist/api/payments/index.d.ts +652 -449
- package/dist/api/payments/index.d.ts.map +1 -1
- package/dist/api/payments/index.js +159 -93
- package/dist/api/payments/index.js.map +1 -1
- package/dist/api/subscriptions/index.d.ts +1032 -762
- package/dist/api/subscriptions/index.d.ts.map +1 -1
- package/dist/api/subscriptions/index.js +166 -185
- package/dist/api/subscriptions/index.js.map +1 -1
- package/dist/api/users/index.browser.js +48 -71
- package/dist/api/users/index.browser.js.map +1 -1
- package/dist/api/users/index.d.ts +1297 -1109
- package/dist/api/users/index.d.ts.map +1 -1
- package/dist/api/users/index.js +454 -369
- package/dist/api/users/index.js.map +1 -1
- package/dist/api/verifications/index.browser.js +17 -17
- package/dist/api/verifications/index.browser.js.map +1 -1
- package/dist/api/verifications/index.d.ts +169 -157
- package/dist/api/verifications/index.d.ts.map +1 -1
- package/dist/api/verifications/index.js +47 -95
- package/dist/api/verifications/index.js.map +1 -1
- package/dist/background/index.d.ts +0 -1
- package/dist/background/index.d.ts.map +1 -1
- package/dist/background/index.js.map +1 -1
- package/dist/background/index.workerd.js.map +1 -1
- package/dist/batch/index.d.ts +0 -1
- package/dist/batch/index.d.ts.map +1 -1
- package/dist/batch/index.js.map +1 -1
- package/dist/bin/index.js +1 -1
- package/dist/bin/index.js.map +1 -1
- package/dist/bucket/index.d.ts +27 -32
- package/dist/bucket/index.d.ts.map +1 -1
- package/dist/bucket/index.js +56 -26
- package/dist/bucket/index.js.map +1 -1
- package/dist/bucket/index.workerd.js +52 -24
- package/dist/bucket/index.workerd.js.map +1 -1
- package/dist/cache/core/index.d.ts +4 -6
- package/dist/cache/core/index.d.ts.map +1 -1
- package/dist/cache/core/index.js +4 -10
- package/dist/cache/core/index.js.map +1 -1
- package/dist/cache/core/index.workerd.js +4 -10
- package/dist/cache/core/index.workerd.js.map +1 -1
- package/dist/cache/database/index.d.ts +22 -23
- package/dist/cache/database/index.d.ts.map +1 -1
- package/dist/cache/database/index.js +11 -20
- package/dist/cache/database/index.js.map +1 -1
- package/dist/cache/redis/index.d.ts +3 -4
- package/dist/cache/redis/index.d.ts.map +1 -1
- package/dist/cache/redis/index.js +2 -2
- package/dist/cache/redis/index.js.map +1 -1
- package/dist/captcha/index.d.ts.map +1 -1
- package/dist/captcha/index.js +4 -4
- package/dist/captcha/index.js.map +1 -1
- package/dist/cli/config/index.d.ts +0 -1
- package/dist/cli/config/index.d.ts.map +1 -1
- package/dist/cli/core/index.d.ts +244 -475
- package/dist/cli/core/index.d.ts.map +1 -1
- package/dist/cli/core/index.js +308 -383
- package/dist/cli/core/index.js.map +1 -1
- package/dist/cli/devtools/index.d.ts +3 -9
- package/dist/cli/devtools/index.d.ts.map +1 -1
- package/dist/cli/devtools/index.js +3 -3
- package/dist/cli/devtools/index.js.map +1 -1
- package/dist/cli/i18n/index.d.ts +20 -39
- package/dist/cli/i18n/index.d.ts.map +1 -1
- package/dist/cli/i18n/index.js +51 -17
- package/dist/cli/i18n/index.js.map +1 -1
- package/dist/cli/platform/index.d.ts +89 -82
- package/dist/cli/platform/index.d.ts.map +1 -1
- package/dist/cli/platform/index.js +27 -33
- package/dist/cli/platform/index.js.map +1 -1
- package/dist/cli/platform-lib/index.d.ts +383 -410
- package/dist/cli/platform-lib/index.d.ts.map +1 -1
- package/dist/cli/platform-lib/index.js +300 -258
- package/dist/cli/platform-lib/index.js.map +1 -1
- package/dist/cli/vendor/index.d.ts +17 -41
- package/dist/cli/vendor/index.d.ts.map +1 -1
- package/dist/cli/vendor/index.js +10 -13
- package/dist/cli/vendor/index.js.map +1 -1
- package/dist/command/index.d.ts +82 -194
- package/dist/command/index.d.ts.map +1 -1
- package/dist/command/index.js +160 -563
- package/dist/command/index.js.map +1 -1
- package/dist/core/index.browser.js +845 -859
- package/dist/core/index.browser.js.map +1 -1
- package/dist/core/index.d.ts +787 -527
- package/dist/core/index.d.ts.map +1 -1
- package/dist/core/index.js +845 -859
- package/dist/core/index.js.map +1 -1
- package/dist/core/index.native.js +845 -859
- package/dist/core/index.native.js.map +1 -1
- package/dist/core/index.workerd.js +845 -859
- package/dist/core/index.workerd.js.map +1 -1
- package/dist/crypto/index.browser.js +1 -1
- package/dist/crypto/index.browser.js.map +1 -1
- package/dist/crypto/index.d.ts +3 -4
- package/dist/crypto/index.d.ts.map +1 -1
- package/dist/crypto/index.js +6 -3
- package/dist/crypto/index.js.map +1 -1
- package/dist/datetime/index.d.ts +12 -2
- package/dist/datetime/index.d.ts.map +1 -1
- package/dist/datetime/index.js +6 -1
- package/dist/datetime/index.js.map +1 -1
- package/dist/email/brevo/index.d.ts +0 -1
- package/dist/email/brevo/index.d.ts.map +1 -1
- package/dist/email/brevo/index.js +4 -4
- package/dist/email/brevo/index.js.map +1 -1
- package/dist/email/cloudflare/index.d.ts +0 -1
- package/dist/email/cloudflare/index.d.ts.map +1 -1
- package/dist/email/cloudflare/index.js +2 -2
- package/dist/email/cloudflare/index.js.map +1 -1
- package/dist/email/core/index.d.ts +15 -7
- package/dist/email/core/index.d.ts.map +1 -1
- package/dist/email/core/index.js +14 -5
- package/dist/email/core/index.js.map +1 -1
- package/dist/email/core/index.workerd.js +5 -1
- package/dist/email/core/index.workerd.js.map +1 -1
- package/dist/email/smtp/index.d.ts +8 -9
- package/dist/email/smtp/index.d.ts.map +1 -1
- package/dist/email/smtp/index.js +702 -479
- package/dist/email/smtp/index.js.map +1 -1
- package/dist/fake/index.d.ts +1580 -1238
- package/dist/fake/index.d.ts.map +1 -1
- package/dist/fake/index.js +11728 -32131
- package/dist/fake/index.js.map +1 -1
- package/dist/lock/core/index.d.ts +13 -9
- package/dist/lock/core/index.d.ts.map +1 -1
- package/dist/lock/core/index.js +5 -5
- package/dist/lock/core/index.js.map +1 -1
- package/dist/lock/redis/index.d.ts +0 -1
- package/dist/lock/redis/index.d.ts.map +1 -1
- package/dist/lock/redis/index.js.map +1 -1
- package/dist/logger/index.d.ts +81 -69
- package/dist/logger/index.d.ts.map +1 -1
- package/dist/logger/index.js +123 -56
- package/dist/logger/index.js.map +1 -1
- package/dist/mcp/index.d.ts +36 -90
- package/dist/mcp/index.d.ts.map +1 -1
- package/dist/mcp/index.js +65 -70
- package/dist/mcp/index.js.map +1 -1
- package/dist/orm/core/index.browser.js +54 -40
- package/dist/orm/core/index.browser.js.map +1 -1
- package/dist/orm/core/index.bun.js +140 -106
- package/dist/orm/core/index.bun.js.map +1 -1
- package/dist/orm/core/index.d.ts +145 -150
- package/dist/orm/core/index.d.ts.map +1 -1
- package/dist/orm/core/index.js +144 -109
- package/dist/orm/core/index.js.map +1 -1
- package/dist/orm/postgres/index.bun.js +64 -54
- package/dist/orm/postgres/index.bun.js.map +1 -1
- package/dist/orm/postgres/index.d.ts +36 -76
- package/dist/orm/postgres/index.d.ts.map +1 -1
- package/dist/orm/postgres/index.js +67 -57
- package/dist/orm/postgres/index.js.map +1 -1
- package/dist/queue/core/index.d.ts +62 -75
- package/dist/queue/core/index.d.ts.map +1 -1
- package/dist/queue/core/index.js +48 -71
- package/dist/queue/core/index.js.map +1 -1
- package/dist/queue/core/index.workerd.js +48 -71
- package/dist/queue/core/index.workerd.js.map +1 -1
- package/dist/queue/redis/index.d.ts +3 -4
- package/dist/queue/redis/index.d.ts.map +1 -1
- package/dist/queue/redis/index.js +2 -2
- package/dist/queue/redis/index.js.map +1 -1
- package/dist/react/auth/index.browser.js.map +1 -1
- package/dist/react/auth/index.d.ts +7 -4
- package/dist/react/auth/index.d.ts.map +1 -1
- package/dist/react/auth/index.js.map +1 -1
- package/dist/react/core/index.d.ts +87 -5
- package/dist/react/core/index.d.ts.map +1 -1
- package/dist/react/core/index.js +170 -23
- package/dist/react/core/index.js.map +1 -1
- package/dist/react/form/index.d.ts +4 -6
- package/dist/react/form/index.d.ts.map +1 -1
- package/dist/react/form/index.js +107 -71
- package/dist/react/form/index.js.map +1 -1
- package/dist/react/head/index.browser.js.map +1 -1
- package/dist/react/head/index.d.ts +0 -1
- package/dist/react/head/index.d.ts.map +1 -1
- package/dist/react/head/index.js.map +1 -1
- package/dist/react/i18n/index.d.ts +47 -5
- package/dist/react/i18n/index.d.ts.map +1 -1
- package/dist/react/i18n/index.js +116 -12
- package/dist/react/i18n/index.js.map +1 -1
- package/dist/react/intro/index.d.ts +1 -4
- package/dist/react/intro/index.d.ts.map +1 -1
- package/dist/react/intro/index.js.map +1 -1
- package/dist/react/router/index.browser.js +188 -29
- package/dist/react/router/index.browser.js.map +1 -1
- package/dist/react/router/index.d.ts +480 -372
- package/dist/react/router/index.d.ts.map +1 -1
- package/dist/react/router/index.js +261 -47
- package/dist/react/router/index.js.map +1 -1
- package/dist/react/sitemap/index.browser.js +35 -0
- package/dist/react/sitemap/index.browser.js.map +1 -0
- package/dist/react/sitemap/index.d.ts +91 -0
- package/dist/react/sitemap/index.d.ts.map +1 -0
- package/dist/react/sitemap/index.js +131 -0
- package/dist/react/sitemap/index.js.map +1 -0
- package/dist/react/testing/index.d.ts +4 -5
- package/dist/react/testing/index.d.ts.map +1 -1
- package/dist/react/testing/index.js +41 -15
- package/dist/react/testing/index.js.map +1 -1
- package/dist/react/testing/{chunk-BpyX8vjI.js → rolldown-runtime-Bl3dcgcQ.js} +1 -1
- package/dist/react/ui/index.d.ts +35 -34
- package/dist/react/ui/index.d.ts.map +1 -1
- package/dist/react/ui/index.js +12 -17
- package/dist/react/ui/index.js.map +1 -1
- package/dist/redis/index.bun.js +5 -5
- package/dist/redis/index.bun.js.map +1 -1
- package/dist/redis/index.d.ts +6 -7
- package/dist/redis/index.d.ts.map +1 -1
- package/dist/redis/index.js +6 -6
- package/dist/redis/index.js.map +1 -1
- package/dist/retry/index.d.ts +0 -1
- package/dist/retry/index.d.ts.map +1 -1
- package/dist/retry/index.js.map +1 -1
- package/dist/router/index.d.ts.map +1 -1
- package/dist/router/index.js.map +1 -1
- package/dist/scheduler/index.d.ts +4 -12
- package/dist/scheduler/index.d.ts.map +1 -1
- package/dist/scheduler/index.js +9 -4
- package/dist/scheduler/index.js.map +1 -1
- package/dist/scheduler/index.workerd.js +9 -4
- package/dist/scheduler/index.workerd.js.map +1 -1
- package/dist/security/index.browser.js +30 -28
- package/dist/security/index.browser.js.map +1 -1
- package/dist/security/index.d.ts +113 -44
- package/dist/security/index.d.ts.map +1 -1
- package/dist/security/index.js +452 -37
- package/dist/security/index.js.map +1 -1
- package/dist/server/auth/index.browser.js +19 -19
- package/dist/server/auth/index.browser.js.map +1 -1
- package/dist/server/auth/index.d.ts +215 -187
- package/dist/server/auth/index.d.ts.map +1 -1
- package/dist/server/auth/index.js +1145 -86
- package/dist/server/auth/index.js.map +1 -1
- package/dist/server/cookies/index.browser.js +103 -5
- package/dist/server/cookies/index.browser.js.map +1 -1
- package/dist/server/cookies/index.d.ts +86 -4
- package/dist/server/cookies/index.d.ts.map +1 -1
- package/dist/server/cookies/index.js +121 -8
- package/dist/server/cookies/index.js.map +1 -1
- package/dist/server/core/index.browser.js +22 -27
- package/dist/server/core/index.browser.js.map +1 -1
- package/dist/server/core/index.d.ts +134 -85
- package/dist/server/core/index.d.ts.map +1 -1
- package/dist/server/core/index.js +130 -118
- package/dist/server/core/index.js.map +1 -1
- package/dist/server/cors/index.d.ts +9 -10
- package/dist/server/cors/index.d.ts.map +1 -1
- package/dist/server/cors/index.js +14 -26
- package/dist/server/cors/index.js.map +1 -1
- package/dist/server/etag/index.d.ts +2 -3
- package/dist/server/etag/index.d.ts.map +1 -1
- package/dist/server/etag/index.js.map +1 -1
- package/dist/server/health/index.d.ts +18 -19
- package/dist/server/health/index.d.ts.map +1 -1
- package/dist/server/health/index.js +6 -6
- package/dist/server/health/index.js.map +1 -1
- package/dist/server/links/index.browser.js +15 -18
- package/dist/server/links/index.browser.js.map +1 -1
- package/dist/server/links/index.d.ts +66 -67
- package/dist/server/links/index.d.ts.map +1 -1
- package/dist/server/links/index.js +29 -32
- package/dist/server/links/index.js.map +1 -1
- package/dist/server/metrics/index.d.ts +0 -1
- package/dist/server/metrics/index.d.ts.map +1 -1
- package/dist/server/metrics/index.js +10 -3
- package/dist/server/metrics/index.js.map +1 -1
- package/dist/server/proxy/index.d.ts +0 -1
- package/dist/server/proxy/index.d.ts.map +1 -1
- package/dist/server/proxy/index.js.map +1 -1
- package/dist/server/rate-limit/index.d.ts +8 -9
- package/dist/server/rate-limit/index.d.ts.map +1 -1
- package/dist/server/rate-limit/index.js +6 -12
- package/dist/server/rate-limit/index.js.map +1 -1
- package/dist/server/static/index.d.ts +0 -1
- package/dist/server/static/index.d.ts.map +1 -1
- package/dist/server/static/index.js.map +1 -1
- package/dist/server/swagger/index.d.ts +4 -4
- package/dist/server/swagger/index.d.ts.map +1 -1
- package/dist/server/swagger/index.js +37 -25
- package/dist/server/swagger/index.js.map +1 -1
- package/dist/sms/index.d.ts +0 -1
- package/dist/sms/index.d.ts.map +1 -1
- package/dist/sms/index.js.map +1 -1
- package/dist/system/index.browser.js.map +1 -1
- package/dist/system/index.d.ts +0 -1
- package/dist/system/index.d.ts.map +1 -1
- package/dist/system/index.js +2 -1
- package/dist/system/index.js.map +1 -1
- package/dist/system/index.workerd.js.map +1 -1
- package/dist/topic/core/index.d.ts +19 -20
- package/dist/topic/core/index.d.ts.map +1 -1
- package/dist/topic/core/index.js +8 -8
- package/dist/topic/core/index.js.map +1 -1
- package/dist/topic/redis/index.d.ts +3 -4
- package/dist/topic/redis/index.d.ts.map +1 -1
- package/dist/topic/redis/index.js +2 -2
- package/dist/topic/redis/index.js.map +1 -1
- package/package.json +36 -36
- package/src/api/audits/__tests__/AuditJobs.spec.ts +83 -0
- package/src/api/audits/__tests__/AuditService.spec.ts +139 -1
- package/src/api/audits/controllers/AdminAuditController.ts +41 -41
- package/src/api/audits/entities/audits.ts +22 -22
- package/src/api/audits/index.ts +6 -1
- package/src/api/audits/jobs/AuditJobs.ts +29 -0
- package/src/api/audits/parameters/AuditParameters.ts +51 -0
- package/src/api/audits/primitives/$audit.ts +24 -0
- package/src/api/audits/schemas/auditQuerySchema.ts +13 -13
- package/src/api/audits/schemas/createAuditSchema.ts +18 -18
- package/src/api/audits/services/AuditService.ts +79 -7
- package/src/api/files/__tests__/FileController.spec.ts +5 -5
- package/src/api/files/__tests__/FileJobs.spec.ts +6 -0
- package/src/api/files/controllers/FileController.ts +25 -25
- package/src/api/files/entities/files.ts +15 -15
- package/src/api/files/schemas/fileCreatorSummarySchema.ts +7 -7
- package/src/api/files/schemas/fileQuerySchema.ts +9 -9
- package/src/api/files/schemas/fileResourceSchema.ts +7 -9
- package/src/api/files/schemas/storageStatsSchema.ts +13 -13
- package/src/api/jobs/__tests__/$job-hardening.spec.ts +289 -0
- package/src/api/jobs/__tests__/$job.spec.ts +18 -18
- package/src/api/jobs/controllers/AdminJobController.ts +8 -8
- package/src/api/jobs/entities/jobExecutionEntity.ts +29 -19
- package/src/api/jobs/providers/JobProvider.ts +128 -12
- package/src/api/jobs/providers/JobQueueProvider.ts +2 -2
- package/src/api/jobs/schemas/jobConfigAtom.ts +22 -22
- package/src/api/jobs/schemas/jobExecutionQuerySchema.ts +6 -6
- package/src/api/jobs/schemas/jobExecutionResourceSchema.ts +11 -15
- package/src/api/jobs/schemas/jobRegistrationSchema.ts +20 -19
- package/src/api/jobs/schemas/triggerJobSchema.ts +3 -3
- package/src/api/jobs/services/JobService.ts +6 -6
- package/src/api/keys/__tests__/ApiKeyService.spec.ts +2 -2
- package/src/api/keys/controllers/AdminApiKeyController.ts +10 -10
- package/src/api/keys/entities/apiKeyEntity.ts +15 -15
- package/src/api/keys/schemas/adminApiKeyQuerySchema.ts +4 -4
- package/src/api/keys/schemas/adminApiKeyResourceSchema.ts +15 -15
- package/src/api/keys/schemas/createApiKeyBodySchema.ts +5 -5
- package/src/api/keys/schemas/createApiKeyResponseSchema.ts +9 -9
- package/src/api/keys/schemas/listApiKeyResponseSchema.ts +13 -13
- package/src/api/keys/schemas/revokeApiKeyParamsSchema.ts +3 -3
- package/src/api/keys/schemas/revokeApiKeyResponseSchema.ts +3 -3
- package/src/api/notifications/__tests__/AlephaApiNotifications.spec.ts +2 -2
- package/src/api/notifications/controllers/AdminNotificationController.ts +38 -14
- package/src/api/notifications/jobs/NotificationJobs.ts +7 -6
- package/src/api/notifications/primitives/$notification.ts +43 -4
- package/src/api/notifications/schemas/notificationContactPreferencesSchema.ts +4 -4
- package/src/api/notifications/schemas/notificationContactSchema.ts +7 -7
- package/src/api/notifications/schemas/notificationDetailResourceSchema.ts +9 -11
- package/src/api/notifications/schemas/notificationPayloadSchema.ts +11 -9
- package/src/api/notifications/schemas/notificationQuerySchema.ts +6 -6
- package/src/api/notifications/schemas/notificationResourceSchema.ts +14 -14
- package/src/api/notifications/services/NotificationSenderService.ts +38 -2
- package/src/api/oauth/__tests__/OAuthClientService.spec.ts +42 -0
- package/src/api/oauth/__tests__/OAuthController.spec.ts +128 -0
- package/src/api/oauth/controllers/OAuthController.ts +132 -12
- package/src/api/oauth/entities/oauthClientEntity.ts +29 -12
- package/src/api/oauth/helpers/oauthMetadata.ts +1 -0
- package/src/api/oauth/helpers/oidcMetadata.ts +19 -0
- package/src/api/oauth/index.ts +1 -0
- package/src/api/oauth/schemas/authorizeDecisionBodySchema.ts +12 -11
- package/src/api/oauth/schemas/authorizeQuerySchema.ts +12 -10
- package/src/api/oauth/schemas/registerClientBodySchema.ts +10 -11
- package/src/api/oauth/schemas/tokenRequestBodySchema.ts +9 -8
- package/src/api/oauth/services/OAuthClientService.ts +228 -15
- package/src/api/organizations/controllers/AdminOrganizationController.ts +8 -8
- package/src/api/organizations/entities/organizations.ts +6 -6
- package/src/api/organizations/schemas/createOrganizationSchema.ts +5 -5
- package/src/api/organizations/schemas/organizationQuerySchema.ts +4 -4
- package/src/api/organizations/schemas/updateOrganizationSchema.ts +1 -2
- package/src/api/parameters/__tests__/$parameter.spec.ts +229 -50
- package/src/api/parameters/controllers/AdminParameterController.ts +9 -12
- package/src/api/parameters/entities/parameters.ts +29 -16
- package/src/api/parameters/primitives/$parameter.ts +3 -3
- package/src/api/parameters/schemas/activateParameterBodySchema.ts +4 -4
- package/src/api/parameters/schemas/createParameterVersionBodySchema.ts +15 -15
- package/src/api/parameters/schemas/parameterCreatorSummarySchema.ts +7 -7
- package/src/api/parameters/schemas/parameterCurrentResponseSchema.ts +7 -7
- package/src/api/parameters/schemas/parameterHistoryResponseSchema.ts +3 -3
- package/src/api/parameters/schemas/parameterNameParamSchema.ts +2 -3
- package/src/api/parameters/schemas/parameterNamesResponseSchema.ts +3 -3
- package/src/api/parameters/schemas/parameterResponseSchema.ts +3 -3
- package/src/api/parameters/schemas/parameterStatusSchema.ts +2 -2
- package/src/api/parameters/schemas/parameterTreeNodeSchema.ts +6 -6
- package/src/api/parameters/schemas/parameterVersionParamSchema.ts +5 -6
- package/src/api/parameters/schemas/parameterVersionResponseSchema.ts +3 -3
- package/src/api/parameters/schemas/rollbackParameterBodySchema.ts +6 -9
- package/src/api/parameters/services/ParameterProvider.ts +152 -65
- package/src/api/payments/controllers/AdminPaymentController.ts +7 -7
- package/src/api/payments/controllers/MockCheckoutController.ts +79 -28
- package/src/api/payments/controllers/PaymentController.ts +4 -4
- package/src/api/payments/entities/paymentIntents.ts +11 -11
- package/src/api/payments/entities/paymentMethods.ts +11 -11
- package/src/api/payments/entities/refunds.ts +9 -9
- package/src/api/payments/providers/PaymentProvider.ts +18 -0
- package/src/api/payments/schemas/intentSchemas.ts +25 -25
- package/src/api/payments/schemas/paymentMethodSchemas.ts +3 -3
- package/src/api/payments/services/PaymentService.ts +60 -3
- package/src/api/subscriptions/__tests__/SubscriptionService.spec.ts +14 -0
- package/src/api/subscriptions/controllers/AdminSubscriptionController.ts +11 -11
- package/src/api/subscriptions/controllers/SubscriptionController.ts +5 -4
- package/src/api/subscriptions/entities/subscriptionEvents.ts +15 -15
- package/src/api/subscriptions/entities/subscriptions.ts +22 -22
- package/src/api/subscriptions/notifications/SubscriptionNotifications.ts +22 -22
- package/src/api/subscriptions/schemas/cancelSubscriptionSchema.ts +4 -4
- package/src/api/subscriptions/schemas/changePlanSchema.ts +5 -5
- package/src/api/subscriptions/schemas/createSubscriptionSchema.ts +14 -7
- package/src/api/subscriptions/schemas/entitlementsSchema.ts +10 -10
- package/src/api/subscriptions/schemas/mrrSchema.ts +9 -9
- package/src/api/subscriptions/schemas/planDefinitionSchema.ts +21 -21
- package/src/api/subscriptions/schemas/planResourceSchema.ts +19 -19
- package/src/api/subscriptions/schemas/subscriptionQuerySchema.ts +8 -8
- package/src/api/subscriptions/schemas/subscriptionSettingsSchema.ts +7 -7
- package/src/api/subscriptions/schemas/subscriptionStatsSchema.ts +17 -17
- package/src/api/subscriptions/services/SubscriptionConfig.ts +2 -2
- package/src/api/users/__tests__/ApiKeys-integration.spec.ts +11 -11
- package/src/api/users/atoms/realmAuthSettingsAtom.ts +111 -119
- package/src/api/users/controllers/AdminIdentityController.ts +29 -19
- package/src/api/users/controllers/AdminSessionController.ts +37 -27
- package/src/api/users/controllers/AdminUserController.ts +75 -53
- package/src/api/users/controllers/MySessionController.ts +125 -0
- package/src/api/users/controllers/RealmController.ts +9 -9
- package/src/api/users/controllers/UserController.ts +55 -55
- package/src/api/users/entities/identities.ts +8 -8
- package/src/api/users/entities/sessions.ts +17 -17
- package/src/api/users/entities/users.ts +17 -17
- package/src/api/users/index.ts +3 -0
- package/src/api/users/notifications/UserNotifications.ts +76 -24
- package/src/api/users/primitives/$realm.ts +12 -0
- package/src/api/users/schemas/completePasswordResetRequestSchema.ts +8 -12
- package/src/api/users/schemas/completeRegistrationRequestSchema.ts +17 -20
- package/src/api/users/schemas/createUserSchema.ts +2 -2
- package/src/api/users/schemas/identityQuerySchema.ts +4 -4
- package/src/api/users/schemas/identityResourceSchema.ts +3 -2
- package/src/api/users/schemas/loginSchema.ts +4 -4
- package/src/api/users/schemas/passwordResetIntentResponseSchema.ts +6 -8
- package/src/api/users/schemas/realmConfigSchema.ts +10 -10
- package/src/api/users/schemas/registerQuerySchema.ts +6 -6
- package/src/api/users/schemas/registerRequestSchema.ts +21 -43
- package/src/api/users/schemas/registerResponseSchema.ts +2 -2
- package/src/api/users/schemas/registerSchema.ts +13 -31
- package/src/api/users/schemas/registrationIntentResponseSchema.ts +19 -23
- package/src/api/users/schemas/resetPasswordSchema.ts +10 -17
- package/src/api/users/schemas/sessionQuerySchema.ts +3 -3
- package/src/api/users/schemas/sessionResourceSchema.ts +25 -25
- package/src/api/users/schemas/updateUserSchema.ts +3 -4
- package/src/api/users/schemas/userQuerySchema.ts +7 -7
- package/src/api/users/services/RegistrationService.ts +25 -11
- package/src/api/users/services/UserService.ts +12 -6
- package/src/api/verifications/__tests__/CodeVerification.spec.ts +63 -101
- package/src/api/verifications/__tests__/LinkVerification.spec.ts +23 -92
- package/src/api/verifications/controllers/VerificationController.ts +13 -27
- package/src/api/verifications/entities/verifications.ts +13 -14
- package/src/api/verifications/schemas/requestVerificationCodeResponseSchema.ts +17 -14
- package/src/api/verifications/schemas/validateVerificationCodeResponseSchema.ts +9 -10
- package/src/api/verifications/schemas/verificationSettingsSchema.ts +65 -66
- package/src/api/verifications/schemas/verificationTypeEnumSchema.ts +2 -2
- package/src/api/verifications/services/VerificationService.ts +12 -0
- package/src/background/__tests__/BackgroundTaskProvider.spec.ts +36 -0
- package/src/batch/__tests__/$batch.spec.ts +22 -22
- package/src/batch/__tests__/startup-buffering.spec.ts +9 -9
- package/src/bin/index.ts +1 -1
- package/src/bucket/__tests__/TenantScopedBucket.spec.ts +60 -0
- package/src/bucket/providers/LocalFileStorageProvider.ts +14 -6
- package/src/bucket/providers/MemoryFileStorageProvider.ts +18 -7
- package/src/bucket/providers/R2FileStorageProvider.ts +14 -6
- package/src/bucket/providers/S3FileStorageProvider.ts +31 -15
- package/src/cache/core/primitives/$cache.ts +7 -10
- package/src/cache/database/entities/cacheEntries.ts +16 -27
- package/src/cache/database/providers/DatabaseCacheProvider.ts +15 -13
- package/src/cache/redis/providers/RedisCacheProvider.ts +6 -6
- package/src/captcha/providers/TurnstileCaptchaProvider.ts +4 -4
- package/src/cli/core/__tests__/BuildCloudflareTask.spec.ts +178 -0
- package/src/cli/core/__tests__/BuildDockerTask.spec.ts +0 -2
- package/src/cli/core/__tests__/DbCommand.spec.ts +108 -0
- package/src/cli/core/atoms/appEntryOptions.ts +5 -5
- package/src/cli/core/atoms/buildOptions.ts +76 -88
- package/src/cli/core/atoms/changelogOptions.ts +3 -3
- package/src/cli/core/atoms/devOptions.ts +3 -3
- package/src/cli/core/commands/build.ts +36 -49
- package/src/cli/core/commands/db.ts +171 -83
- package/src/cli/core/commands/dev.ts +8 -8
- package/src/cli/core/commands/gen/changelog.ts +12 -14
- package/src/cli/core/commands/gen/env.ts +6 -6
- package/src/cli/core/commands/gen/openapi.ts +6 -6
- package/src/cli/core/commands/init.ts +28 -33
- package/src/cli/core/commands/pack.ts +10 -10
- package/src/cli/core/commands/root.ts +7 -8
- package/src/cli/core/commands/test.ts +17 -20
- package/src/cli/core/index.ts +0 -3
- package/src/cli/core/tasks/BuildCloudflareTask.ts +138 -245
- package/src/cli/core/tasks/BuildPrerenderTask.ts +44 -7
- package/src/cli/core/templates/apiHelloResponseSchemaTs.ts +4 -4
- package/src/cli/devtools/atoms/devtoolsOptions.ts +6 -6
- package/src/cli/i18n/__tests__/I18nCheckService.spec.ts +48 -0
- package/src/cli/i18n/atoms/i18nOptions.ts +8 -8
- package/src/cli/i18n/services/I18nCheckService.ts +65 -11
- package/src/cli/platform/commands/SecretsCommand.ts +24 -25
- package/src/cli/platform/commands/platform.ts +40 -46
- package/src/cli/platform/index.ts +1 -1
- package/src/cli/platform-lib/__tests__/CloudflareAdapter.spec.ts +0 -4
- package/src/cli/platform-lib/__tests__/PlatformInspector.spec.ts +10 -3
- package/src/cli/platform-lib/__tests__/VercelAdapter.spec.ts +0 -2
- package/src/cli/platform-lib/adapters/CloudflareAdapter.ts +141 -50
- package/src/cli/platform-lib/adapters/VercelAdapter.ts +6 -11
- package/src/cli/platform-lib/atoms/platformOptions.ts +46 -25
- package/src/cli/platform-lib/schemas/cloudflare.ts +87 -87
- package/src/cli/platform-lib/schemas/platform.ts +51 -51
- package/src/cli/platform-lib/schemas/vercel.ts +28 -28
- package/src/cli/platform-lib/services/CloudflareApi.ts +5 -5
- package/src/cli/platform-lib/services/VercelApi.ts +4 -4
- package/src/cli/platform-lib/services/VercelCli.ts +6 -15
- package/src/cli/platform-lib/services/WranglerApi.ts +6 -15
- package/src/cli/vendor/atoms/vendorOptions.ts +9 -9
- package/src/cli/vendor/commands/VendorCommand.ts +11 -12
- package/src/command/__tests__/$command.spec.ts +82 -83
- package/src/command/__tests__/Asker.spec.ts +6 -13
- package/src/command/__tests__/CliProvider.spec.ts +136 -149
- package/src/command/__tests__/Runner.spec.ts +86 -110
- package/src/command/helpers/Asker.ts +23 -58
- package/src/command/helpers/Runner.ts +34 -110
- package/src/command/index.ts +4 -9
- package/src/command/primitives/$command.ts +10 -10
- package/src/command/providers/CliProvider.ts +183 -161
- package/src/core/Alepha.ts +62 -13
- package/src/core/__tests__/$atom.spec.ts +52 -3
- package/src/core/__tests__/$computed.spec.ts +129 -0
- package/src/core/__tests__/$env.spec.ts +13 -13
- package/src/core/__tests__/$inject.spec.ts +4 -4
- package/src/core/__tests__/$module.spec.ts +1 -1
- package/src/core/__tests__/Alepha-graph.spec.ts +1 -1
- package/src/core/__tests__/Alepha-parseEnv.spec.ts +32 -32
- package/src/core/__tests__/Alepha-start.spec.ts +3 -3
- package/src/core/__tests__/CodecManager.spec.ts +113 -94
- package/src/core/__tests__/KeylessJsonSchemaCodec.spec.ts +138 -138
- package/src/core/__tests__/SchemaValidator.spec.ts +43 -44
- package/src/core/__tests__/StateManager.persist.browser.spec.ts +87 -0
- package/src/core/__tests__/StateManager.spec.ts +423 -0
- package/src/core/__tests__/TypeBox-usecases.spec.ts +8 -8
- package/src/core/__tests__/TypeProvider.spec.ts +314 -309
- package/src/core/__tests__/dump.spec.ts +6 -6
- package/src/core/__tests__/pagination.spec.ts +4 -4
- package/src/core/__tests__/scoped-after-start.spec.ts +43 -0
- package/src/core/errors/TypeBoxError.ts +10 -4
- package/src/core/helpers/FileLike.ts +5 -5
- package/src/core/helpers/coerceStrings.ts +70 -0
- package/src/core/helpers/jsonSchemaToZod.ts +112 -0
- package/src/core/index.shared.ts +4 -1
- package/src/core/primitives/$atom.ts +95 -27
- package/src/core/primitives/$computed.ts +148 -0
- package/src/core/primitives/$env.ts +5 -5
- package/src/core/primitives/$state.ts +1 -1
- package/src/core/providers/AlsProvider.ts +26 -0
- package/src/core/providers/CodecManager.ts +1 -2
- package/src/core/providers/JsonSchemaCodec.ts +1 -2
- package/src/core/providers/KeylessJsonSchemaCodec.ts +82 -57
- package/src/core/providers/SchemaValidator.ts +48 -158
- package/src/core/providers/StateManager.ts +383 -9
- package/src/core/providers/TypeProvider.ts +80 -734
- package/src/core/providers/ZodProvider.ts +380 -0
- package/src/core/providers/zodAugment.ts +69 -0
- package/src/core/schemas/pageQuerySchema.ts +19 -21
- package/src/core/schemas/pageSchema.ts +47 -57
- package/src/crypto/__tests__/SecretProvider.spec.ts +31 -0
- package/src/crypto/providers/SecretProvider.ts +16 -10
- package/src/datetime/primitives/$throttle.ts +6 -1
- package/src/email/brevo/providers/BrevoEmailProvider.ts +4 -4
- package/src/email/cloudflare/providers/CloudflareEmailProvider.ts +6 -6
- package/src/email/core/index.ts +7 -2
- package/src/email/core/primitives/$email.ts +5 -1
- package/src/email/core/providers/LocalEmailProvider.ts +5 -5
- package/src/email/smtp/providers/NodemailerEmailProvider.ts +41 -52
- package/src/fake/__tests__/FakeProvider.spec.ts +110 -110
- package/src/fake/__tests__/keyName.example.ts +21 -21
- package/src/fake/__tests__/keyName.spec.ts +41 -41
- package/src/fake/__tests__/module.example.ts +8 -8
- package/src/fake/providers/FakeProvider.ts +122 -121
- package/src/lock/core/__tests__/lock-mutual-exclusion.spec.ts +44 -0
- package/src/lock/core/index.ts +1 -0
- package/src/lock/core/primitives/$lock.ts +13 -6
- package/src/logger/__tests__/CliFormatterProvider.spec.ts +76 -0
- package/src/logger/__tests__/Logger.spec.ts +49 -0
- package/src/logger/index.ts +25 -18
- package/src/logger/providers/CliFormatterProvider.ts +75 -0
- package/src/logger/schemas/logEntrySchema.ts +10 -10
- package/src/logger/services/Logger.ts +18 -0
- package/src/mcp/__tests__/$prompt.spec.ts +21 -23
- package/src/mcp/__tests__/$tool.spec.ts +22 -22
- package/src/mcp/__tests__/McpServerProvider.spec.ts +82 -11
- package/src/mcp/__tests__/StreamableHttpMcpTransport.spec.ts +2 -2
- package/src/mcp/__tests__/integration.spec.ts +33 -33
- package/src/mcp/primitives/$prompt.ts +11 -9
- package/src/mcp/primitives/$tool.ts +27 -86
- package/src/mcp/providers/McpServerProvider.ts +55 -0
- package/src/mcp/transports/StreamableHttpMcpTransport.ts +7 -7
- package/src/orm/__tests__/$repository-tests.ts +133 -27
- package/src/orm/__tests__/$repository.spec.ts +23 -0
- package/src/orm/__tests__/$transactional-tests.ts +4 -4
- package/src/orm/__tests__/ModelBuilder-tests.ts +28 -28
- package/src/orm/__tests__/ModelBuilder.spec.ts +124 -106
- package/src/orm/__tests__/QueryManager.spec.ts +5 -5
- package/src/orm/__tests__/delete-returning-tests.ts +11 -11
- package/src/orm/__tests__/deletedAt-tests.ts +3 -3
- package/src/orm/__tests__/enums.spec.ts +29 -25
- package/src/orm/__tests__/execute-tests.ts +8 -8
- package/src/orm/__tests__/fixtures/bigEntitySchema.ts +48 -48
- package/src/orm/__tests__/fixtures/userEntitySchema.ts +6 -6
- package/src/orm/__tests__/joins-tests.ts +30 -30
- package/src/orm/__tests__/organization-tests.ts +105 -3
- package/src/orm/__tests__/organization.spec.ts +46 -0
- package/src/orm/__tests__/orm-errors.spec.ts +10 -10
- package/src/orm/__tests__/orm-next-tests.ts +29 -29
- package/src/orm/__tests__/orm-showcase-tests.ts +9 -9
- package/src/orm/__tests__/primaryKey.spec.ts +4 -4
- package/src/orm/__tests__/query-date-encoding-tests.ts +17 -17
- package/src/orm/__tests__/ref-auto-onDelete.spec.ts +14 -14
- package/src/orm/__tests__/references.spec.ts +7 -7
- package/src/orm/__tests__/security.spec.ts +17 -17
- package/src/orm/__tests__/string-operators-tests.ts +5 -5
- package/src/orm/__tests__/timestamps-tests.ts +14 -14
- package/src/orm/__tests__/validation-tests.ts +5 -5
- package/src/orm/core/__tests__/BunSqliteProvider.bun.spec.ts +8 -8
- package/src/orm/core/constants/PG_SYMBOLS.ts +13 -1
- package/src/orm/core/entities/alephaSequences.ts +8 -8
- package/src/orm/core/helpers/pgAttr.ts +4 -4
- package/src/orm/core/primitives/$entity.ts +10 -6
- package/src/orm/core/providers/DatabaseTypeProvider.ts +46 -53
- package/src/orm/core/providers/drivers/BunSqliteProvider.ts +8 -8
- package/src/orm/core/providers/drivers/CloudflareD1Provider.ts +3 -5
- package/src/orm/core/providers/drivers/NodeSqliteProvider.ts +8 -8
- package/src/orm/core/schemas/databaseEnvSchema.ts +4 -4
- package/src/orm/core/schemas/insertSchema.ts +14 -18
- package/src/orm/core/schemas/legacyIdSchema.ts +2 -2
- package/src/orm/core/schemas/updateSchema.ts +10 -16
- package/src/orm/core/services/PgRelationManager.ts +2 -2
- package/src/orm/core/services/QueryManager.ts +13 -2
- package/src/orm/core/services/Repository.ts +88 -33
- package/src/orm/core/services/SqliteModelBuilder.ts +38 -45
- package/src/orm/postgres/__tests__/BunPostgresProvider.bun.spec.ts +4 -4
- package/src/orm/postgres/providers/CloudflareHyperdriveProvider.ts +4 -6
- package/src/orm/postgres/schemas/postgresEnvSchema.ts +6 -6
- package/src/orm/postgres/services/PostgresModelBuilder.ts +127 -114
- package/src/queue/core/__tests__/$consumer.spec.ts +4 -4
- package/src/queue/core/__tests__/WorkerProvider.spec.ts +4 -4
- package/src/queue/core/__tests__/shared.ts +6 -6
- package/src/queue/core/primitives/$consumer.ts +5 -5
- package/src/queue/core/primitives/$queue.ts +44 -61
- package/src/queue/core/providers/CloudflareQueueProvider.ts +6 -0
- package/src/queue/core/providers/WorkerProvider.ts +17 -14
- package/src/queue/redis/providers/RedisQueueProvider.ts +3 -3
- package/src/react/core/__tests__/ErrorBoundary.browser.spec.tsx +92 -0
- package/src/react/core/__tests__/Router.spec.tsx +4 -4
- package/src/react/core/__tests__/useComputed.browser.spec.tsx +192 -0
- package/src/react/core/__tests__/useQuery.browser.spec.tsx +48 -0
- package/src/react/core/__tests__/useSelector.browser.spec.tsx +105 -0
- package/src/react/core/__tests__/useStore.browser.spec.tsx +113 -0
- package/src/react/core/components/ErrorBoundary.tsx +42 -0
- package/src/react/core/hooks/useAction.ts +56 -19
- package/src/react/core/hooks/useComputed.ts +91 -0
- package/src/react/core/hooks/useSelector.ts +67 -0
- package/src/react/core/hooks/useStore.ts +36 -17
- package/src/react/core/index.ts +3 -0
- package/src/react/core/utils/shallowEqual.ts +36 -0
- package/src/react/form/__tests__/FormModel-submit-loading.spec.ts +71 -0
- package/src/react/form/__tests__/form-submitting-reactive.browser.spec.tsx +96 -0
- package/src/react/form/__tests__/useForm.browser.spec.tsx +54 -54
- package/src/react/form/errors/FormValidationError.ts +0 -2
- package/src/react/form/hooks/useForm.ts +19 -4
- package/src/react/form/hooks/useFormQuerySync.ts +0 -0
- package/src/react/form/services/FormModel.ts +124 -86
- package/src/react/form/services/parseField.ts +66 -27
- package/src/react/i18n/__tests__/I18nProvider.spec.ts +89 -0
- package/src/react/i18n/__tests__/Localize.spec.tsx +1 -1
- package/src/react/i18n/__tests__/locale-routing.spec.ts +107 -0
- package/src/react/i18n/providers/I18nProvider.ts +173 -14
- package/src/react/router/__tests__/$page.browser.spec.tsx +19 -19
- package/src/react/router/__tests__/$page.spec.tsx +21 -21
- package/src/react/router/__tests__/ReactBrowserProvider.browser.spec.ts +87 -1
- package/src/react/router/__tests__/RouterLocaleProvider.spec.ts +127 -0
- package/src/react/router/atoms/ssrManifestAtom.ts +16 -16
- package/src/react/router/components/NestedView.tsx +11 -3
- package/src/react/router/hooks/useQueryParams.ts +1 -1
- package/src/react/router/index.browser.ts +4 -0
- package/src/react/router/index.shared.ts +1 -0
- package/src/react/router/index.ts +9 -0
- package/src/react/router/primitives/$page.ts +2 -2
- package/src/react/router/providers/ReactBrowserProvider.ts +64 -13
- package/src/react/router/providers/ReactBrowserRouterProvider.ts +15 -1
- package/src/react/router/providers/ReactPageProvider.ts +38 -13
- package/src/react/router/providers/ReactServerProvider.ts +105 -16
- package/src/react/router/providers/RootComponentsProvider.ts +13 -0
- package/src/react/router/providers/RouterLocaleProvider.ts +125 -0
- package/src/react/router/providers/__tests__/RootComponentsProvider.spec.ts +15 -0
- package/src/react/router/providers/__tests__/rootComponents.ssr.browser.spec.tsx +67 -0
- package/src/react/sitemap/__tests__/$sitemap.spec.ts +131 -0
- package/src/react/sitemap/index.browser.ts +21 -0
- package/src/react/sitemap/index.ts +25 -0
- package/src/react/sitemap/primitives/$sitemap.browser.ts +26 -0
- package/src/react/sitemap/primitives/$sitemap.ts +196 -0
- package/src/react/ui/atoms/uiAtom.ts +6 -6
- package/src/react/ui/atoms/uiThemeListAtom.ts +7 -7
- package/src/react/ui/hooks/useColorMode.ts +11 -4
- package/src/react/ui/services/SchemaControl.ts +4 -4
- package/src/redis/providers/BunRedisProvider.ts +19 -11
- package/src/redis/providers/NodeRedisProvider.ts +3 -3
- package/src/scheduler/primitives/$scheduler.ts +21 -8
- package/src/security/__tests__/assertRealmScope.spec.ts +29 -0
- package/src/security/atoms/currentTenantAtom.ts +6 -6
- package/src/security/atoms/currentUserAtom.ts +2 -2
- package/src/security/primitives/$issuer.ts +24 -2
- package/src/security/providers/JwtProvider.ts +100 -0
- package/src/security/providers/SecurityProvider.ts +43 -2
- package/src/security/schemas/permissionSchema.ts +19 -19
- package/src/security/schemas/roleSchema.ts +22 -28
- package/src/security/schemas/userAccountInfoSchema.ts +47 -37
- package/src/server/auth/__tests__/appleClientSecret.spec.ts +34 -0
- package/src/server/auth/__tests__/federationRedirectReplay.spec.ts +44 -0
- package/src/server/auth/helpers/appleClientSecret.ts +24 -0
- package/src/server/auth/helpers/jtiReplayGuard.ts +41 -0
- package/src/server/auth/helpers/safeRedirectPath.ts +19 -0
- package/src/server/auth/index.ts +1 -0
- package/src/server/auth/primitives/$auth.ts +6 -6
- package/src/server/auth/primitives/$authApple.ts +10 -10
- package/src/server/auth/primitives/$authFacebook.ts +10 -10
- package/src/server/auth/primitives/$authFranceConnect.ts +10 -10
- package/src/server/auth/primitives/$authGithub.ts +10 -10
- package/src/server/auth/primitives/$authGoogle.ts +10 -10
- package/src/server/auth/primitives/$authMicrosoft.ts +14 -14
- package/src/server/auth/providers/ServerAuthProvider.ts +67 -52
- package/src/server/auth/schemas/authenticationProviderSchema.ts +9 -12
- package/src/server/auth/schemas/tokenResponseSchema.ts +2 -2
- package/src/server/auth/schemas/tokensSchema.ts +16 -16
- package/src/server/auth/schemas/userinfoResponseSchema.ts +3 -3
- package/src/server/cookies/__tests__/AtomCookieBinding.spec.ts +80 -0
- package/src/server/cookies/__tests__/AtomCookiePersistence.browser.spec.ts +169 -0
- package/src/server/cookies/__tests__/AtomCookiePersistence.spec.ts +294 -0
- package/src/server/cookies/__tests__/ServerCookiesProvider.spec.ts +82 -12
- package/src/server/cookies/index.browser.ts +4 -1
- package/src/server/cookies/index.ts +8 -1
- package/src/server/cookies/primitives/$cookie.browser.ts +1 -1
- package/src/server/cookies/primitives/$cookie.ts +16 -0
- package/src/server/cookies/providers/AtomCookiePersistence.browser.ts +133 -0
- package/src/server/cookies/providers/AtomCookiePersistence.ts +148 -0
- package/src/server/cookies/providers/ServerCookiesProvider.ts +32 -4
- package/src/server/cookies/services/CookieParser.ts +6 -1
- package/src/server/core/__tests__/$action.spec.ts +13 -13
- package/src/server/core/__tests__/$middleware.spec.ts +10 -10
- package/src/server/core/__tests__/$route.spec.ts +9 -9
- package/src/server/core/__tests__/$sse.spec.ts +26 -26
- package/src/server/core/__tests__/BunHttpServerProvider.bun.spec.ts +6 -6
- package/src/server/core/__tests__/HttpClient.spec.ts +2 -2
- package/src/server/core/__tests__/NodeHttpServerProvider.spec.ts +15 -3
- package/src/server/core/__tests__/ServerBodyParserProvider.spec.ts +14 -14
- package/src/server/core/__tests__/ServerMultipartProvider.spec.ts +33 -33
- package/src/server/core/__tests__/ServerRouterProvider-errorHandler.spec.ts +5 -1
- package/src/server/core/__tests__/ServerRouterProvider-getRoutes.spec.ts +25 -25
- package/src/server/core/__tests__/ServerRouterProvider-serializationError.spec.ts +9 -5
- package/src/server/core/__tests__/ServerRouterProvider-validationError.spec.ts +56 -24
- package/src/server/core/errors/ValidationError.ts +6 -3
- package/src/server/core/helpers/isMultipart.ts +2 -1
- package/src/server/core/index.ts +5 -2
- package/src/server/core/interfaces/ServerRequest.ts +14 -14
- package/src/server/core/primitives/$action.ts +26 -36
- package/src/server/core/primitives/$route.ts +27 -0
- package/src/server/core/primitives/$sse.ts +3 -3
- package/src/server/core/providers/BunHttpServerProvider.ts +8 -9
- package/src/server/core/providers/NodeHttpServerProvider.ts +8 -9
- package/src/server/core/providers/ServerBodyParserProvider.ts +20 -12
- package/src/server/core/providers/ServerCompressProvider.ts +9 -10
- package/src/server/core/providers/ServerHelmetProvider.ts +26 -27
- package/src/server/core/providers/ServerMultipartProvider.ts +19 -19
- package/src/server/core/providers/ServerRouterProvider.ts +44 -15
- package/src/server/core/schemas/errorSchema.ts +20 -25
- package/src/server/core/schemas/okSchema.ts +9 -14
- package/src/server/core/services/HttpClient.ts +13 -1
- package/src/server/core/services/ServerRequestParser.ts +6 -6
- package/src/server/cors/providers/ServerCorsProvider.ts +26 -28
- package/src/server/health/schemas/healthSchema.ts +6 -6
- package/src/server/links/__tests__/$remote.spec.ts +3 -3
- package/src/server/links/__tests__/BatchEndpoint.spec.ts +9 -9
- package/src/server/links/__tests__/LinkProvider.spec.ts +9 -9
- package/src/server/links/__tests__/ServerLinksProvider.spec.ts +23 -23
- package/src/server/links/__tests__/fixtures/CrudApp.ts +21 -21
- package/src/server/links/atoms/apiLinksAtom.ts +2 -2
- package/src/server/links/atoms/linkOptionsAtom.ts +6 -6
- package/src/server/links/primitives/$remote.ts +3 -3
- package/src/server/links/providers/LinkProvider.ts +3 -3
- package/src/server/links/providers/ServerLinksProvider.ts +20 -20
- package/src/server/links/schemas/apiLinksResponseSchema.ts +23 -23
- package/src/server/proxy/__tests__/$proxy.spec.ts +9 -9
- package/src/server/proxy/providers/ServerProxyProvider.ts +5 -0
- package/src/server/rate-limit/providers/ServerRateLimitProvider.ts +18 -20
- package/src/server/swagger/__tests__/$swagger.spec.ts +91 -94
- package/src/server/swagger/__tests__/ui.spec.ts +3 -3
- package/src/server/swagger/providers/ServerSwaggerProvider.ts +66 -43
- package/src/system/__tests__/NodeShellProvider.spec.ts +46 -0
- package/src/system/providers/NodeShellProvider.ts +4 -1
- package/src/topic/core/__tests__/$subscriber.spec.ts +4 -4
- package/src/topic/core/__tests__/shared.ts +8 -8
- package/src/topic/core/primitives/$subscriber.ts +5 -5
- package/src/topic/core/primitives/$topic.ts +14 -14
- package/src/topic/redis/providers/RedisTopicProvider.ts +3 -3
- package/dist/container/core/index.d.ts +0 -236
- package/dist/container/core/index.d.ts.map +0 -1
- package/dist/container/core/index.js +0 -231
- package/dist/container/core/index.js.map +0 -1
- package/dist/container/core/index.workerd.js +0 -192
- package/dist/container/core/index.workerd.js.map +0 -1
- package/src/cli/core/tasks/BuildSitemapTask.ts +0 -130
- package/src/command/helpers/PrettyAsker.ts +0 -256
- package/src/command/helpers/PrettyPrint.ts +0 -332
- package/src/container/core/__tests__/$container.spec.ts +0 -83
- package/src/container/core/index.ts +0 -50
- package/src/container/core/index.workerd.ts +0 -53
- package/src/container/core/interfaces/ContainerOptions.ts +0 -69
- package/src/container/core/primitives/$container.ts +0 -100
- package/src/container/core/providers/CloudflareContainerProvider.ts +0 -70
- package/src/container/core/providers/ContainerProvider.ts +0 -92
- package/src/container/core/providers/MockContainerProvider.ts +0 -62
- package/src/container/core/providers/NodeContainerProvider.ts +0 -53
- package/src/core/__tests__/jsonSchemaToTypeBox.spec.ts +0 -771
- package/src/core/helpers/jsonSchemaToTypeBox.ts +0 -359
- /package/dist/orm/core/{chunk-B4FMCO8f.js → rolldown-runtime-B4FMCO8f.js} +0 -0
package/dist/logger/index.js
CHANGED
|
@@ -1,37 +1,5 @@
|
|
|
1
|
-
import { $context, $inject, $module, Alepha, AlephaError, KIND,
|
|
1
|
+
import { $context, $inject, $module, Alepha, AlephaError, KIND, z } from "alepha";
|
|
2
2
|
import { DateTimeProvider } from "alepha/datetime";
|
|
3
|
-
//#region ../../src/logger/providers/LogFormatterProvider.ts
|
|
4
|
-
var LogFormatterProvider = class {};
|
|
5
|
-
//#endregion
|
|
6
|
-
//#region ../../src/logger/providers/JsonFormatterProvider.ts
|
|
7
|
-
var JsonFormatterProvider = class extends LogFormatterProvider {
|
|
8
|
-
format(entry) {
|
|
9
|
-
const json = {
|
|
10
|
-
level: entry.level,
|
|
11
|
-
message: entry.message,
|
|
12
|
-
context: entry.context,
|
|
13
|
-
service: entry.service,
|
|
14
|
-
module: entry.module,
|
|
15
|
-
app: entry.app,
|
|
16
|
-
time: entry.timestamp
|
|
17
|
-
};
|
|
18
|
-
if (entry.data instanceof Error) json.error = this.formatJsonError(entry.data);
|
|
19
|
-
else json.data = entry.data;
|
|
20
|
-
return JSON.stringify(json);
|
|
21
|
-
}
|
|
22
|
-
formatJsonError(error) {
|
|
23
|
-
return {
|
|
24
|
-
name: error.name,
|
|
25
|
-
message: error.message,
|
|
26
|
-
stack: error.stack,
|
|
27
|
-
cause: error.cause instanceof Error ? this.formatJsonError(error.cause) : void 0
|
|
28
|
-
};
|
|
29
|
-
}
|
|
30
|
-
};
|
|
31
|
-
//#endregion
|
|
32
|
-
//#region ../../src/logger/providers/LogDestinationProvider.ts
|
|
33
|
-
var LogDestinationProvider = class {};
|
|
34
|
-
//#endregion
|
|
35
3
|
//#region ../../src/logger/providers/ConsoleColorProvider.ts
|
|
36
4
|
var ConsoleColorProvider = class ConsoleColorProvider {
|
|
37
5
|
static COLORS = {
|
|
@@ -76,6 +44,9 @@ var ConsoleColorProvider = class ConsoleColorProvider {
|
|
|
76
44
|
}
|
|
77
45
|
};
|
|
78
46
|
//#endregion
|
|
47
|
+
//#region ../../src/logger/providers/LogFormatterProvider.ts
|
|
48
|
+
var LogFormatterProvider = class {};
|
|
49
|
+
//#endregion
|
|
79
50
|
//#region ../../src/logger/providers/PrettyFormatterProvider.ts
|
|
80
51
|
var PrettyFormatterProvider = class extends LogFormatterProvider {
|
|
81
52
|
color = $inject(ConsoleColorProvider);
|
|
@@ -159,6 +130,85 @@ var PrettyFormatterProvider = class extends LogFormatterProvider {
|
|
|
159
130
|
}
|
|
160
131
|
};
|
|
161
132
|
//#endregion
|
|
133
|
+
//#region ../../src/logger/providers/CliFormatterProvider.ts
|
|
134
|
+
/**
|
|
135
|
+
* Compact formatter for CLI output.
|
|
136
|
+
*
|
|
137
|
+
* Renders `HH:MM:SS L message {json}` — a short clock time, a single-letter
|
|
138
|
+
* level colored by severity, the message, and any structured data appended
|
|
139
|
+
* dim. Deliberately drops the `<module.service>`, app name and context UUID
|
|
140
|
+
* that {@link PrettyFormatterProvider} prints: in an interactive CLI session
|
|
141
|
+
* those are noise. Use `pretty` (or `--verbose`) when you need them, `raw`
|
|
142
|
+
* when you want the bare message for piping, and `json` for aggregation.
|
|
143
|
+
*/
|
|
144
|
+
var CliFormatterProvider = class extends PrettyFormatterProvider {
|
|
145
|
+
format(entry) {
|
|
146
|
+
const { data, timestamp, level } = entry;
|
|
147
|
+
const isError = data instanceof Error;
|
|
148
|
+
let details = "";
|
|
149
|
+
if (isError) details = this.formatError(data);
|
|
150
|
+
else if (data) {
|
|
151
|
+
let error = "";
|
|
152
|
+
let jsonData = data;
|
|
153
|
+
if ("error" in data && data.error instanceof Error) {
|
|
154
|
+
error = this.formatError(data.error);
|
|
155
|
+
const { error: _, ...rest } = data;
|
|
156
|
+
jsonData = rest;
|
|
157
|
+
}
|
|
158
|
+
if (Object.keys(jsonData).length > 0) try {
|
|
159
|
+
details = JSON.stringify(jsonData);
|
|
160
|
+
} catch {
|
|
161
|
+
details = "[Unserializable Object]";
|
|
162
|
+
}
|
|
163
|
+
if (error) details += `\n${error}`;
|
|
164
|
+
}
|
|
165
|
+
let output = "";
|
|
166
|
+
output += this.color.set("GREY_DARK", this.formatClockTime(timestamp));
|
|
167
|
+
output += " ";
|
|
168
|
+
output += this.color.set(level, level.charAt(0).toUpperCase());
|
|
169
|
+
if (entry.message) output += ` ${entry.message}`;
|
|
170
|
+
if (details) if (isError) output += ` \n${details}`;
|
|
171
|
+
else output += ` ${this.color.set("GREY_DARK", details)}`;
|
|
172
|
+
return output;
|
|
173
|
+
}
|
|
174
|
+
/**
|
|
175
|
+
* Short clock time without milliseconds (HH:MM:SS).
|
|
176
|
+
*/
|
|
177
|
+
formatClockTime(timestamp) {
|
|
178
|
+
const d = new Date(timestamp);
|
|
179
|
+
return `${this.pad2(d.getHours())}:${this.pad2(d.getMinutes())}:${this.pad2(d.getSeconds())}`;
|
|
180
|
+
}
|
|
181
|
+
};
|
|
182
|
+
//#endregion
|
|
183
|
+
//#region ../../src/logger/providers/JsonFormatterProvider.ts
|
|
184
|
+
var JsonFormatterProvider = class extends LogFormatterProvider {
|
|
185
|
+
format(entry) {
|
|
186
|
+
const json = {
|
|
187
|
+
level: entry.level,
|
|
188
|
+
message: entry.message,
|
|
189
|
+
context: entry.context,
|
|
190
|
+
service: entry.service,
|
|
191
|
+
module: entry.module,
|
|
192
|
+
app: entry.app,
|
|
193
|
+
time: entry.timestamp
|
|
194
|
+
};
|
|
195
|
+
if (entry.data instanceof Error) json.error = this.formatJsonError(entry.data);
|
|
196
|
+
else json.data = entry.data;
|
|
197
|
+
return JSON.stringify(json);
|
|
198
|
+
}
|
|
199
|
+
formatJsonError(error) {
|
|
200
|
+
return {
|
|
201
|
+
name: error.name,
|
|
202
|
+
message: error.message,
|
|
203
|
+
stack: error.stack,
|
|
204
|
+
cause: error.cause instanceof Error ? this.formatJsonError(error.cause) : void 0
|
|
205
|
+
};
|
|
206
|
+
}
|
|
207
|
+
};
|
|
208
|
+
//#endregion
|
|
209
|
+
//#region ../../src/logger/providers/LogDestinationProvider.ts
|
|
210
|
+
var LogDestinationProvider = class {};
|
|
211
|
+
//#endregion
|
|
162
212
|
//#region ../../src/logger/providers/RawFormatterProvider.ts
|
|
163
213
|
var RawFormatterProvider = class extends LogFormatterProvider {
|
|
164
214
|
format(entry) {
|
|
@@ -188,6 +238,7 @@ var Logger = class {
|
|
|
188
238
|
jsonFormatter = $inject(JsonFormatterProvider);
|
|
189
239
|
prettyFormatter = $inject(PrettyFormatterProvider);
|
|
190
240
|
rawFormatter = $inject(RawFormatterProvider);
|
|
241
|
+
cliFormatter = $inject(CliFormatterProvider);
|
|
191
242
|
destination = $inject(LogDestinationProvider);
|
|
192
243
|
dateTimeProvider = $inject(DateTimeProvider);
|
|
193
244
|
levels = {
|
|
@@ -230,6 +281,7 @@ var Logger = class {
|
|
|
230
281
|
case "json": return this.jsonFormatter;
|
|
231
282
|
case "pretty": return this.prettyFormatter;
|
|
232
283
|
case "raw": return this.rawFormatter;
|
|
284
|
+
case "cli": return this.cliFormatter;
|
|
233
285
|
default: return this.defaultFormatter;
|
|
234
286
|
}
|
|
235
287
|
}
|
|
@@ -273,6 +325,19 @@ var Logger = class {
|
|
|
273
325
|
if (this.levels[level] !== void 0) return level;
|
|
274
326
|
throw new AlephaError(`Invalid log level: ${something}`);
|
|
275
327
|
}
|
|
328
|
+
/**
|
|
329
|
+
* Whether a message at `level` would actually be emitted given the current
|
|
330
|
+
* active level (read live from state). Mirrors the threshold used by
|
|
331
|
+
* {@link log}: a level is enabled when it sits at or above the active one.
|
|
332
|
+
*
|
|
333
|
+
* @example
|
|
334
|
+
* // active level = INFO
|
|
335
|
+
* log.isLevelEnabled("DEBUG"); // false
|
|
336
|
+
* log.isLevelEnabled("WARN"); // true
|
|
337
|
+
*/
|
|
338
|
+
isLevelEnabled(level) {
|
|
339
|
+
return this.levels[level] <= this.levels[this.level];
|
|
340
|
+
}
|
|
276
341
|
error(message, data) {
|
|
277
342
|
this.log("ERROR", message, data);
|
|
278
343
|
}
|
|
@@ -377,8 +442,8 @@ var MemoryDestinationProvider = class extends LogDestinationProvider {
|
|
|
377
442
|
};
|
|
378
443
|
//#endregion
|
|
379
444
|
//#region ../../src/logger/schemas/logEntrySchema.ts
|
|
380
|
-
const logEntrySchema =
|
|
381
|
-
level:
|
|
445
|
+
const logEntrySchema = z.object({
|
|
446
|
+
level: z.enum([
|
|
382
447
|
"SILENT",
|
|
383
448
|
"TRACE",
|
|
384
449
|
"DEBUG",
|
|
@@ -386,13 +451,13 @@ const logEntrySchema = t.object({
|
|
|
386
451
|
"WARN",
|
|
387
452
|
"ERROR"
|
|
388
453
|
]),
|
|
389
|
-
message:
|
|
390
|
-
service:
|
|
391
|
-
module:
|
|
392
|
-
context:
|
|
393
|
-
app:
|
|
394
|
-
data:
|
|
395
|
-
timestamp:
|
|
454
|
+
message: z.text({ size: "rich" }),
|
|
455
|
+
service: z.text(),
|
|
456
|
+
module: z.text(),
|
|
457
|
+
context: z.text().optional(),
|
|
458
|
+
app: z.text().optional(),
|
|
459
|
+
data: z.any().optional(),
|
|
460
|
+
timestamp: z.number()
|
|
396
461
|
});
|
|
397
462
|
//#endregion
|
|
398
463
|
//#region ../../src/logger/index.ts
|
|
@@ -403,6 +468,7 @@ const logEntrySchema = t.object({
|
|
|
403
468
|
* - Global logger access
|
|
404
469
|
* - JSON format
|
|
405
470
|
* - Pretty colored output
|
|
471
|
+
* - Compact CLI format
|
|
406
472
|
* - Raw text format
|
|
407
473
|
* - Console destination
|
|
408
474
|
* - Memory destination (for devtools)
|
|
@@ -420,7 +486,8 @@ const AlephaLogger = $module({
|
|
|
420
486
|
MemoryDestinationProvider,
|
|
421
487
|
JsonFormatterProvider,
|
|
422
488
|
PrettyFormatterProvider,
|
|
423
|
-
RawFormatterProvider
|
|
489
|
+
RawFormatterProvider,
|
|
490
|
+
CliFormatterProvider
|
|
424
491
|
],
|
|
425
492
|
register: (alepha) => {
|
|
426
493
|
const env = alepha.parseEnv(envSchema);
|
|
@@ -454,6 +521,7 @@ const AlephaLogger = $module({
|
|
|
454
521
|
if (logFormat) {
|
|
455
522
|
if (logFormat === "json") return JsonFormatterProvider;
|
|
456
523
|
if (logFormat === "raw") return RawFormatterProvider;
|
|
524
|
+
if (logFormat === "cli") return CliFormatterProvider;
|
|
457
525
|
return PrettyFormatterProvider;
|
|
458
526
|
}
|
|
459
527
|
if (alepha.isProduction() && !alepha.isBrowser()) return JsonFormatterProvider;
|
|
@@ -476,7 +544,7 @@ const AlephaLogger = $module({
|
|
|
476
544
|
alepha.store.set("alepha.logger.level", logLevel ?? (alepha.isTest() ? "trace" : alepha.isProduction() && alepha.isBrowser() ? "warn" : "info"));
|
|
477
545
|
}
|
|
478
546
|
});
|
|
479
|
-
const envSchema =
|
|
547
|
+
const envSchema = z.object({
|
|
480
548
|
/**
|
|
481
549
|
* Enable debug logging for specific modules using the `debug` package convention.
|
|
482
550
|
*
|
|
@@ -486,7 +554,7 @@ const envSchema = t.object({
|
|
|
486
554
|
* DEBUG=alepha:orm:* # Enable debug logging for alepha.orm modules
|
|
487
555
|
* DEBUG=* # Enable debug logging for all modules
|
|
488
556
|
*/
|
|
489
|
-
DEBUG:
|
|
557
|
+
DEBUG: z.text({ description: "Enable debug logging for specific modules using the debug package convention. Example: DEBUG=alepha:*" }).optional(),
|
|
490
558
|
/**
|
|
491
559
|
* Default log level for the application.
|
|
492
560
|
*
|
|
@@ -503,30 +571,29 @@ const envSchema = t.object({
|
|
|
503
571
|
* LOG_LEVEL=my.module.name:debug,info # Set debug level for my.module.name and info for all other modules
|
|
504
572
|
* LOG_LEVEL=alepha:trace, info # Set trace level for all alepha modules and info for all other modules
|
|
505
573
|
*/
|
|
506
|
-
LOG_LEVEL:
|
|
574
|
+
LOG_LEVEL: z.text({
|
|
507
575
|
description: `Application log level on startup.
|
|
508
576
|
Levels are: trace, debug, info, warn, error, silent
|
|
509
577
|
Level can be set for a specific module:
|
|
510
578
|
"my.module.name:debug,info" -> Set debug level for my.module.name and info for all other modules
|
|
511
579
|
"alepha:trace,info" -> Set trace level for all alepha modules and info for all other modules`,
|
|
512
580
|
lowercase: true
|
|
513
|
-
})),
|
|
581
|
+
}).optional(),
|
|
514
582
|
/**
|
|
515
583
|
* Built-in log formats.
|
|
516
584
|
* - "json" - JSON format, useful for structured logging and log aggregation. {@link JsonFormatterProvider}
|
|
517
|
-
* - "pretty" -
|
|
518
|
-
* - "
|
|
585
|
+
* - "pretty" - Full text format, human-readable, with colors and module/context. {@link PrettyFormatterProvider}
|
|
586
|
+
* - "cli" - Compact format for CLI sessions: time, level initial, message, json. {@link CliFormatterProvider}
|
|
587
|
+
* - "raw" - Raw format, no formatting, just the message (best for piping). {@link RawFormatterProvider}
|
|
519
588
|
*/
|
|
520
|
-
LOG_FORMAT:
|
|
589
|
+
LOG_FORMAT: z.enum([
|
|
521
590
|
"json",
|
|
522
591
|
"pretty",
|
|
523
|
-
"raw"
|
|
524
|
-
|
|
525
|
-
|
|
526
|
-
lowercase: true
|
|
527
|
-
}))
|
|
592
|
+
"raw",
|
|
593
|
+
"cli"
|
|
594
|
+
]).meta({ lowercase: true }).describe("Default log format for the application.").optional()
|
|
528
595
|
});
|
|
529
596
|
//#endregion
|
|
530
|
-
export { $logger, AlephaLogger, ConsoleColorProvider, ConsoleDestinationProvider, JsonFormatterProvider, LogDestinationProvider, LogFormatterProvider, Logger, MemoryDestinationProvider, PrettyFormatterProvider, RawFormatterProvider, logEntrySchema };
|
|
597
|
+
export { $logger, AlephaLogger, CliFormatterProvider, ConsoleColorProvider, ConsoleDestinationProvider, JsonFormatterProvider, LogDestinationProvider, LogFormatterProvider, Logger, MemoryDestinationProvider, PrettyFormatterProvider, RawFormatterProvider, logEntrySchema };
|
|
531
598
|
|
|
532
599
|
//# sourceMappingURL=index.js.map
|
package/dist/logger/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","names":[],"sources":["../../src/logger/providers/LogFormatterProvider.ts","../../src/logger/providers/JsonFormatterProvider.ts","../../src/logger/providers/LogDestinationProvider.ts","../../src/logger/providers/ConsoleColorProvider.ts","../../src/logger/providers/PrettyFormatterProvider.ts","../../src/logger/providers/RawFormatterProvider.ts","../../src/logger/services/Logger.ts","../../src/logger/primitives/$logger.ts","../../src/logger/providers/ConsoleDestinationProvider.ts","../../src/logger/providers/MemoryDestinationProvider.ts","../../src/logger/schemas/logEntrySchema.ts","../../src/logger/index.ts"],"sourcesContent":["import type { LogEntry } from \"../schemas/logEntrySchema.ts\";\n\nexport abstract class LogFormatterProvider {\n public abstract format(entry: LogEntry): string;\n}\n","import type { LogEntry } from \"../schemas/logEntrySchema.ts\";\nimport { LogFormatterProvider } from \"./LogFormatterProvider.ts\";\n\nexport class JsonFormatterProvider extends LogFormatterProvider {\n public format(entry: LogEntry): string {\n const json: Record<string, any> = {\n level: entry.level,\n message: entry.message,\n context: entry.context,\n service: entry.service,\n module: entry.module,\n app: entry.app,\n time: entry.timestamp,\n };\n\n if (entry.data instanceof Error) {\n json.error = this.formatJsonError(entry.data);\n } else {\n json.data = entry.data;\n }\n\n return JSON.stringify(json);\n }\n\n public formatJsonError(error: Error): object {\n return {\n name: error.name,\n message: error.message,\n stack: error.stack,\n cause:\n error.cause instanceof Error\n ? this.formatJsonError(error.cause)\n : undefined,\n };\n }\n}\n","import type { LogEntry } from \"../schemas/logEntrySchema.ts\";\n\nexport abstract class LogDestinationProvider {\n public abstract write(message: string, entry: LogEntry): void;\n}\n","import { $inject, Alepha } from \"alepha\";\n\nexport class ConsoleColorProvider {\n static readonly COLORS = {\n RESET: \"\\x1b[0m\",\n BLACK: \"\\x1b[30m\",\n RED: \"\\x1b[31m\",\n GREEN: \"\\x1b[32m\",\n ORANGE: \"\\x1b[33m\", // using yellow for orange-ish\n BLUE: \"\\x1b[34m\",\n PURPLE: \"\\x1b[35m\",\n CYAN: \"\\x1b[36m\",\n GREY_LIGHT: \"\\x1b[37m\",\n GREY_LIGHT_BOLD: \"\\x1b[1;37m\",\n GREY_DARK: \"\\x1b[90m\",\n GREY_DARK_BOLD: \"\\x1b[1;90m\",\n WHITE: \"\\x1b[97m\",\n WHITE_BOLD: \"\\x1b[1;97m\",\n // modifiers\n DIM: \"\\x1b[2m\",\n BOLD: \"\\x1b[1m\",\n INVERSE: \"\\x1b[7m\",\n // levels\n SILENT: \"\",\n ERROR: \"\\x1b[31m\",\n WARN: \"\\x1b[33m\",\n INFO: \"\\x1b[32m\",\n DEBUG: \"\\x1b[34m\",\n TRACE: \"\\x1b[90m\",\n };\n\n protected readonly alepha = $inject(Alepha);\n\n protected enabled = true;\n\n constructor() {\n this.enabled = this.isEnabled();\n }\n\n public isEnabled(): boolean {\n if (this.alepha.env.NO_COLOR) {\n return false;\n }\n\n if (this.alepha.env.FORCE_COLOR) {\n return true;\n }\n\n if (this.alepha.isBrowser() && !navigator.userAgent.includes(\"Chrome\")) {\n return false;\n }\n\n return !this.alepha.isProduction();\n }\n\n public set(\n color: keyof typeof ConsoleColorProvider.COLORS,\n text: string,\n reset: string = ConsoleColorProvider.COLORS.RESET,\n ): string {\n if (!this.enabled) {\n return text;\n }\n\n return `${ConsoleColorProvider.COLORS[color]}${text}${reset}`;\n }\n}\n","import { $inject, Alepha } from \"alepha\";\nimport type { LogEntry } from \"../schemas/logEntrySchema.ts\";\nimport { ConsoleColorProvider } from \"./ConsoleColorProvider.ts\";\nimport { LogFormatterProvider } from \"./LogFormatterProvider.ts\";\n\nexport class PrettyFormatterProvider extends LogFormatterProvider {\n protected color = $inject(ConsoleColorProvider);\n protected alepha = $inject(Alepha);\n\n public format(entry: LogEntry): string {\n const { data, timestamp } = entry;\n\n let output = \"\";\n let details = \"\";\n\n const isError = data instanceof Error;\n if (isError) {\n details = this.formatError(data);\n } else if (data) {\n let error = \"\";\n let jsonData = data;\n if (\"error\" in data && data.error instanceof Error) {\n error = this.formatError(data.error);\n const { error: _, ...rest } = data;\n jsonData = rest;\n }\n\n if (Object.keys(jsonData).length > 0) {\n try {\n details = JSON.stringify(jsonData);\n } catch {\n details = \"[Unserializable Object]\";\n }\n }\n\n if (error) {\n details += `\\n${error}`;\n }\n }\n\n output += this.color.set(\n \"GREY_DARK\",\n `[${this.formatTimestamp(timestamp)}]`,\n );\n output += \" \";\n\n output += this.color.set(entry.level, entry.level.toUpperCase());\n output += \" \";\n\n if (entry.app) {\n output += this.color.set(\"GREY_DARK\", `${entry.app}`);\n output += \" \";\n }\n\n if (entry.context) {\n output += this.color.set(\n \"GREY_DARK\",\n `(${this.formatContext(entry.context)})`,\n );\n output += \" \";\n }\n\n const module = this.color.set(\"GREY_LIGHT\", `${entry.module}.`);\n const service = this.color.set(\n this.alepha.isBrowser() ? \"RESET\" : \"WHITE\",\n entry.service,\n );\n\n output += `<${module}${service}>`;\n\n if (entry.message) {\n output += `: ${this.color.set(\"CYAN\", entry.message)}`;\n } else {\n output += \":\";\n }\n\n if (details) {\n if (isError) {\n output += ` \\n${details}`;\n } else {\n output += ` ${this.color.set(\"GREY_DARK\", details)}`;\n }\n }\n\n return output;\n }\n\n public formatTimestamp(timestamp: number): string {\n const d = new Date(timestamp);\n const h = d.getHours();\n const m = d.getMinutes();\n const s = d.getSeconds();\n const ms = d.getMilliseconds();\n\n return `${this.pad2(h)}:${this.pad2(m)}:${this.pad2(s)}.${this.pad3(ms)}`;\n }\n\n protected pad2 = (n: number) => (n < 10 ? \"0\" : \"\") + n;\n protected pad3 = (n: number) =>\n n < 10 ? `00${n}` : n < 100 ? `0${n}` : `${n}`;\n\n /**\n * Avoid to display the whole UUID in development mode\n */\n protected formatContext(context: string): string {\n if (this.alepha.isProduction()) {\n return context;\n }\n\n return context.slice(0, 8);\n }\n\n protected formatError(error: Error): string {\n // Chrome does not like stack traces with ASCII colors\n // so we remove the stack trace from log and just print with console.error\n if (this.alepha.isBrowser()) {\n // call console.error in a separate tick to avoid messing with log order\n setTimeout(() => {\n console.error(error);\n });\n return \"\";\n }\n\n // hack: use vite's stack trace formatter if available\n const vite = this.alepha.store.get(\"alepha.vite.server\") as\n | {\n ssrFixStacktrace: (error: Error) => void;\n }\n | undefined;\n\n vite?.ssrFixStacktrace(error);\n\n let str = error.stack ?? error.message;\n\n let currentCause = (error as any).cause;\n while (currentCause && currentCause instanceof Error) {\n vite?.ssrFixStacktrace(currentCause);\n\n str += `\\nCaused by: ${currentCause.stack ?? currentCause.message}`;\n currentCause = currentCause.cause;\n }\n\n return str;\n }\n}\n","import type { LogEntry } from \"../schemas/logEntrySchema.ts\";\nimport { LogFormatterProvider } from \"./LogFormatterProvider.ts\";\n\nexport class RawFormatterProvider extends LogFormatterProvider {\n public format(entry: LogEntry): string {\n let output = \"\";\n\n output += `${entry.message}`;\n\n if (entry.data instanceof Error) {\n output += `\\n${entry.data.message}`;\n let cause = entry.data.cause;\n while (cause instanceof Error) {\n output += `\\nCaused by: ${cause.message}`;\n cause = cause.cause;\n }\n }\n\n return output;\n }\n}\n","import {\n $inject,\n Alepha,\n AlephaError,\n type LoggerInterface,\n type LogLevel,\n} from \"alepha\";\nimport { DateTimeProvider } from \"alepha/datetime\";\nimport { JsonFormatterProvider } from \"../providers/JsonFormatterProvider.ts\";\nimport { LogDestinationProvider } from \"../providers/LogDestinationProvider.ts\";\nimport { LogFormatterProvider } from \"../providers/LogFormatterProvider.ts\";\nimport { PrettyFormatterProvider } from \"../providers/PrettyFormatterProvider.ts\";\nimport { RawFormatterProvider } from \"../providers/RawFormatterProvider.ts\";\nimport type { LogEntry } from \"../schemas/logEntrySchema.ts\";\n\nexport class Logger implements LoggerInterface {\n protected readonly alepha = $inject(Alepha);\n /**\n * Formatter chosen at register time (from `LOG_FORMAT`, honoring any\n * custom `LogFormatterProvider` substitution). Used unless a runtime\n * `alepha.logger.format` override is set — see {@link formatter}.\n */\n protected readonly defaultFormatter = $inject(LogFormatterProvider);\n protected readonly jsonFormatter = $inject(JsonFormatterProvider);\n protected readonly prettyFormatter = $inject(PrettyFormatterProvider);\n protected readonly rawFormatter = $inject(RawFormatterProvider);\n protected readonly destination = $inject(LogDestinationProvider);\n protected readonly dateTimeProvider = $inject(DateTimeProvider);\n\n protected readonly levels: Record<string, number> = {\n SILENT: -1,\n ERROR: 0,\n WARN: 1,\n INFO: 2,\n DEBUG: 3,\n TRACE: 4,\n };\n\n protected readonly service: string;\n protected readonly module: string;\n protected readonly app?: string;\n\n protected appLogLevel: string = \"INFO\";\n protected logLevel: LogLevel = \"INFO\";\n\n constructor(service: string, module: string) {\n this.service = service;\n this.module = module;\n this.app = this.alepha.env.APP_NAME;\n }\n\n public get context(): string | undefined {\n return this.alepha.context.get<string>(\"context\");\n }\n\n public get level(): string {\n const stateLogLevel = this.alepha.store.get(\"alepha.logger.level\");\n if (stateLogLevel && stateLogLevel !== this.appLogLevel) {\n this.appLogLevel = stateLogLevel;\n this.logLevel = this.parseLevel(this.appLogLevel, this.module);\n }\n return this.logLevel;\n }\n\n /**\n * Active formatter. Honors a runtime `alepha.logger.format` override\n * (read live, like {@link level}); otherwise falls back to the\n * register-time {@link defaultFormatter} so custom substitutions and the\n * `LOG_FORMAT` default keep working.\n */\n protected get formatter(): LogFormatterProvider {\n switch (this.alepha.store.get(\"alepha.logger.format\")) {\n case \"json\":\n return this.jsonFormatter;\n case \"pretty\":\n return this.prettyFormatter;\n case \"raw\":\n return this.rawFormatter;\n default:\n return this.defaultFormatter;\n }\n }\n\n public parseLevel(level: string, app: string): LogLevel {\n const parts = level.toLowerCase().split(/[,;]/);\n\n // First pass: check for module-specific configurations\n for (const part of parts) {\n const trimmedPart = part.trim();\n if (!trimmedPart) continue; // Skip empty parts\n\n if (trimmedPart.includes(\":\") || trimmedPart.includes(\"=\")) {\n const [modulePattern, levelValue] = trimmedPart.split(/[:=]/);\n const trimmedModule = modulePattern.trim();\n const trimmedLevel = levelValue?.trim();\n\n if (!trimmedLevel) continue; // Skip if no level specified\n\n if (this.matchesPattern(app, trimmedModule)) {\n try {\n return this.asLogLevel(trimmedLevel);\n } catch (error) {\n throw new AlephaError(\n `Invalid log level '${levelValue?.trim()}' for module pattern '${trimmedModule}'`,\n );\n }\n }\n }\n }\n\n // Second pass: look for global level\n for (const part of parts) {\n const trimmedPart = part.trim();\n if (!trimmedPart) continue; // Skip empty parts\n\n if (!trimmedPart.includes(\":\") && !trimmedPart.includes(\"=\")) {\n try {\n return this.asLogLevel(trimmedPart);\n } catch (error) {\n throw new AlephaError(`Invalid global log level \"${trimmedPart}\"`);\n }\n }\n }\n\n return \"INFO\";\n }\n\n protected matchesPattern(moduleName: string, pattern: string): boolean {\n if (pattern.includes(\"*\")) {\n // Convert wildcard pattern to regex\n const regexPattern = pattern.replace(/\\./g, \"\\\\.\").replace(/\\*/g, \".*\");\n return new RegExp(`^${regexPattern}`).test(moduleName);\n }\n\n // Exact prefix match (existing behavior)\n return moduleName.startsWith(pattern);\n }\n\n public asLogLevel(something: string): LogLevel {\n const level = something.trim().toUpperCase();\n if (this.levels[level] !== undefined) {\n return level as LogLevel;\n }\n\n throw new AlephaError(`Invalid log level: ${something}`);\n }\n\n // -------------------------------------------------------------------------------------------------------------------\n\n public error(message: string, data?: unknown): void {\n this.log(\"ERROR\", message, data);\n }\n\n public warn(message: string, data?: unknown): void {\n this.log(\"WARN\", message, data);\n }\n\n public info(message: string, data?: unknown): void {\n this.log(\"INFO\", message, data);\n }\n\n public debug(message: string, data?: unknown): void {\n this.log(\"DEBUG\", message, data);\n }\n\n public trace(message: string, data?: unknown): void {\n this.log(\"TRACE\", message, data);\n }\n\n protected log(level: LogLevel, message: string, data?: unknown): void {\n let _message = \"\";\n if (typeof message === \"string\") {\n _message = message;\n } else if (typeof data === \"string\") {\n _message = data;\n }\n\n let _data: object | Error | undefined;\n if (typeof data === \"object\" && data) {\n _data = data;\n } else if (typeof message === \"object\" && message) {\n _data = message;\n }\n\n const logEntry: LogEntry = {\n level,\n message: _message,\n data: _data,\n context: this.context,\n service: this.service,\n module: this.module,\n app: this.app,\n timestamp: this.dateTimeProvider.nowMillis(),\n };\n\n if (this.levels[level] > this.levels[this.level]) {\n this.emit(logEntry);\n return;\n }\n\n const formatted = this.formatter.format(logEntry);\n\n this.emit(logEntry, formatted);\n\n this.destination.write(formatted, logEntry);\n }\n\n protected emit(entry: LogEntry, message?: string) {\n this.alepha.events\n .emit(\n \"log\",\n {\n message,\n entry,\n },\n {\n catch: true,\n },\n )\n .catch(() => null);\n }\n}\n","import { $context, $inject, KIND } from \"alepha\";\nimport { Logger } from \"../services/Logger.ts\";\n\n/**\n * Create a logger.\n *\n * `name` is optional, by default it will use the name of the service.\n *\n * @example\n * ```ts\n * import { $logger } from \"alepha\";\n *\n * class MyService {\n * \tlog = $logger();\n *\n * constructor() {\n * this.log.info(\"Service initialized\");\n * // print something like '[23:45:53.326] INFO <app.MyService>: Service initialized'\n * }\n * }\n * ```\n */\nexport const $logger = (options: LoggerPrimitiveOptions = {}): Logger => {\n const { alepha, service, module } = $context();\n\n return $inject(Logger, {\n lifetime: \"transient\",\n args: [\n options.name ?? service?.name ?? \"Func\",\n module?.name ?? alepha.env.MODULE_NAME ?? \"app\",\n ],\n });\n};\n\nexport interface LoggerPrimitiveOptions {\n name?: string;\n}\n\n$logger[KIND] = Logger;\n","import { LogDestinationProvider } from \"./LogDestinationProvider.ts\";\n\nexport class ConsoleDestinationProvider extends LogDestinationProvider {\n public write(message: string): void {\n console.log(message);\n }\n}\n","import type { LogEntry } from \"../schemas/logEntrySchema.ts\";\nimport { LogDestinationProvider } from \"./LogDestinationProvider.ts\";\n\nexport class MemoryDestinationProvider extends LogDestinationProvider {\n protected entries: Array<LogEntry & { formatted: string }> = [];\n\n public readonly options = {\n maxEntries: 10_000,\n };\n\n public write(formatted: string, entry: LogEntry): void {\n this.entries.push({ ...entry, formatted });\n\n if (this.entries.length > this.options.maxEntries) {\n this.entries = this.entries.slice(\n -Math.floor(this.options.maxEntries * 0.8),\n );\n }\n }\n\n public get logs() {\n return [...this.entries];\n }\n\n public clear(): void {\n this.entries = [];\n }\n}\n","import { type Static, t } from \"alepha\";\n\nexport const logEntrySchema = t.object({\n level: t.enum([\"SILENT\", \"TRACE\", \"DEBUG\", \"INFO\", \"WARN\", \"ERROR\"]),\n message: t.text({\n size: \"rich\",\n }),\n service: t.text(),\n module: t.text(),\n context: t.optional(t.text()),\n app: t.optional(t.text()),\n data: t.optional(t.any()),\n timestamp: t.number(),\n});\n\nexport type LogEntry = Static<typeof logEntrySchema>;\n","import { $module, type Static, t } from \"alepha\";\nimport { $logger } from \"./primitives/$logger.ts\";\nimport { ConsoleColorProvider } from \"./providers/ConsoleColorProvider.ts\";\nimport { ConsoleDestinationProvider } from \"./providers/ConsoleDestinationProvider.ts\";\nimport { JsonFormatterProvider } from \"./providers/JsonFormatterProvider.ts\";\nimport { LogDestinationProvider } from \"./providers/LogDestinationProvider.ts\";\nimport { LogFormatterProvider } from \"./providers/LogFormatterProvider.ts\";\nimport { MemoryDestinationProvider } from \"./providers/MemoryDestinationProvider.ts\";\nimport { PrettyFormatterProvider } from \"./providers/PrettyFormatterProvider.ts\";\nimport { RawFormatterProvider } from \"./providers/RawFormatterProvider.ts\";\nimport type { LogEntry } from \"./schemas/logEntrySchema.ts\";\nimport { Logger } from \"./services/Logger.ts\";\n\n// ---------------------------------------------------------------------------------------------------------------------\n\nexport * from \"./primitives/$logger.ts\";\nexport * from \"./providers/ConsoleColorProvider.ts\";\nexport * from \"./providers/ConsoleDestinationProvider.ts\";\nexport * from \"./providers/JsonFormatterProvider.ts\";\nexport * from \"./providers/LogDestinationProvider.ts\";\nexport * from \"./providers/LogFormatterProvider.ts\";\nexport * from \"./providers/MemoryDestinationProvider.ts\";\nexport * from \"./providers/PrettyFormatterProvider.ts\";\nexport * from \"./providers/RawFormatterProvider.ts\";\nexport * from \"./schemas/logEntrySchema.ts\";\nexport * from \"./services/Logger.ts\";\n\n// ---------------------------------------------------------------------------------------------------------------------\n\n/**\n * Configurable logging with multiple outputs.\n *\n * **Features:**\n * - Global logger access\n * - JSON format\n * - Pretty colored output\n * - Raw text format\n * - Console destination\n * - Memory destination (for devtools)\n * - Custom handlers\n * - Configuration via `LOG_LEVEL`, `LOG_FORMAT`, and `DEBUG`\n *\n * @module alepha.logger\n */\nexport const AlephaLogger = $module({\n name: \"alepha.logger\",\n primitives: [$logger],\n services: [Logger, ConsoleColorProvider],\n variants: [\n ConsoleDestinationProvider,\n MemoryDestinationProvider,\n JsonFormatterProvider,\n PrettyFormatterProvider,\n RawFormatterProvider,\n ],\n register: (alepha) => {\n const env = alepha.parseEnv(envSchema);\n\n // Support DEBUG env var (debug package convention) as shorthand for LOG_LEVEL/LOG_FORMAT.\n // DEBUG=1 → LOG_LEVEL=trace LOG_FORMAT=pretty\n // DEBUG=alepha:* → LOG_LEVEL=alepha.*:debug,info LOG_FORMAT=pretty\n let logLevel = env.LOG_LEVEL;\n let logFormat = env.LOG_FORMAT;\n if (env.DEBUG) {\n if (env.DEBUG === \"1\" || env.DEBUG === \"true\") {\n logLevel ??= \"trace\";\n } else {\n const patterns = env.DEBUG.split(\",\")\n .map((p) => p.trim().replaceAll(\":\", \".\"))\n .filter(Boolean);\n logLevel ??= `${patterns.map((p) => `${p}:debug`).join(\",\")},info`;\n }\n logFormat ??= \"pretty\";\n }\n\n const getLogDestinationProvider = () => {\n // in test mode, if no LOG_LEVEL is set, use MemoryDestinationProvider to capture logs for inspection.\n // logs will be printed to console only if the test fails.\n if (alepha.isTest() && !logLevel) {\n const printOnError = (ev: any) => {\n if (ev.task?.result?.state === \"fail\") {\n const output = alepha.inject(MemoryDestinationProvider);\n for (const log of output.logs) {\n console.log(log.formatted);\n }\n }\n };\n\n try {\n alepha.store.get(\"alepha.test.afterEach\")?.(printOnError);\n alepha.store.get(\"alepha.test.onTestFinished\")?.(printOnError);\n } catch {\n // ignore\n }\n\n return MemoryDestinationProvider;\n }\n\n return ConsoleDestinationProvider;\n };\n\n const getLogFormatterProvider = () => {\n if (logFormat) {\n if (logFormat === \"json\") {\n return JsonFormatterProvider;\n }\n if (logFormat === \"raw\") {\n return RawFormatterProvider;\n }\n return PrettyFormatterProvider;\n }\n\n if (alepha.isProduction() && !alepha.isBrowser()) {\n return JsonFormatterProvider;\n }\n\n return PrettyFormatterProvider;\n };\n\n alepha.with({\n optional: true,\n provide: LogDestinationProvider,\n use: getLogDestinationProvider(),\n });\n\n alepha.with({\n optional: true,\n provide: LogFormatterProvider,\n use: getLogFormatterProvider(),\n });\n\n alepha.store.set(\n \"alepha.logger\",\n alepha.inject(Logger, {\n lifetime: \"transient\",\n args: [\"Alepha\", \"alepha.core\"],\n }),\n );\n\n alepha.store.set(\n \"alepha.logger.level\",\n logLevel ??\n (alepha.isTest()\n ? \"trace\"\n : alepha.isProduction() && alepha.isBrowser()\n ? \"warn\"\n : \"info\"),\n );\n },\n});\n\n// ---------------------------------------------------------------------------------------------------------------------\n\nconst envSchema = t.object({\n /**\n * Enable debug logging for specific modules using the `debug` package convention.\n *\n * @example\n * DEBUG=1 # Shorthand for LOG_LEVEL=trace LOG_FORMAT=pretty\n * DEBUG=alepha:* # Enable debug logging for all alepha modules\n * DEBUG=alepha:orm:* # Enable debug logging for alepha.orm modules\n * DEBUG=* # Enable debug logging for all modules\n */\n DEBUG: t.optional(\n t.text({\n description:\n \"Enable debug logging for specific modules using the debug package convention. Example: DEBUG=alepha:*\",\n }),\n ),\n\n /**\n * Default log level for the application.\n *\n * Default by environment:\n * - dev = info\n * - prod = info\n * - test = error\n *\n * Levels are: \"trace\" | \"debug\" | \"info\" | \"warn\" | \"error\" | \"silent\"\n *\n * Level can be set for a specific module:\n *\n * @example\n * LOG_LEVEL=my.module.name:debug,info # Set debug level for my.module.name and info for all other modules\n * LOG_LEVEL=alepha:trace, info # Set trace level for all alepha modules and info for all other modules\n */\n LOG_LEVEL: t.optional(\n t.text({\n description: `Application log level on startup.\nLevels are: trace, debug, info, warn, error, silent\nLevel can be set for a specific module:\n\"my.module.name:debug,info\" -> Set debug level for my.module.name and info for all other modules\n\"alepha:trace,info\" -> Set trace level for all alepha modules and info for all other modules`,\n lowercase: true,\n }),\n ),\n\n /**\n * Built-in log formats.\n * - \"json\" - JSON format, useful for structured logging and log aggregation. {@link JsonFormatterProvider}\n * - \"pretty\" - Simple text format, human-readable, with colors. {@link PrettyFormatterProvider}\n * - \"raw\" - Raw format, no formatting, just the message. {@link RawFormatterProvider}\n */\n LOG_FORMAT: t.optional(\n t.enum([\"json\", \"pretty\", \"raw\"], {\n description: \"Default log format for the application.\",\n lowercase: true,\n }),\n ),\n});\n\n// ---------------------------------------------------------------------------------------------------------------------\n\ndeclare module \"alepha\" {\n export interface Env extends Partial<Static<typeof envSchema>> {}\n\n export interface State {\n /**\n * Current log level for the application or specific modules.\n */\n \"alepha.logger.level\"?: string;\n\n /**\n * Runtime override for the log format (`json` | `pretty` | `raw`).\n *\n * Unset → the formatter chosen at register time from `LOG_FORMAT`\n * (honoring any custom `LogFormatterProvider` substitution) is used.\n * When set, it overrides both the active formatter and the CLI's\n * dynamic/\"stylish\" task UI (which is enabled only for `raw`). Set it\n * to flip output at runtime — e.g. the CLI `--verbose` flag forces\n * `pretty`.\n */\n \"alepha.logger.format\"?: string;\n }\n\n export interface Hooks {\n log: {\n message?: string;\n entry: LogEntry;\n };\n }\n}\n"],"mappings":";;;AAEA,IAAsB,uBAAtB,MAA2C,CAE3C;;;ACDA,IAAa,wBAAb,cAA2C,qBAAqB;CAC9D,OAAc,OAAyB;EACrC,MAAM,OAA4B;GAChC,OAAO,MAAM;GACb,SAAS,MAAM;GACf,SAAS,MAAM;GACf,SAAS,MAAM;GACf,QAAQ,MAAM;GACd,KAAK,MAAM;GACX,MAAM,MAAM;EACd;EAEA,IAAI,MAAM,gBAAgB,OACxB,KAAK,QAAQ,KAAK,gBAAgB,MAAM,IAAI;OAE5C,KAAK,OAAO,MAAM;EAGpB,OAAO,KAAK,UAAU,IAAI;CAC5B;CAEA,gBAAuB,OAAsB;EAC3C,OAAO;GACL,MAAM,MAAM;GACZ,SAAS,MAAM;GACf,OAAO,MAAM;GACb,OACE,MAAM,iBAAiB,QACnB,KAAK,gBAAgB,MAAM,KAAK,IAChC,KAAA;EACR;CACF;AACF;;;ACjCA,IAAsB,yBAAtB,MAA6C,CAE7C;;;ACFA,IAAa,uBAAb,MAAa,qBAAqB;CAChC,OAAgB,SAAS;EACvB,OAAO;EACP,OAAO;EACP,KAAK;EACL,OAAO;EACP,QAAQ;EACR,MAAM;EACN,QAAQ;EACR,MAAM;EACN,YAAY;EACZ,iBAAiB;EACjB,WAAW;EACX,gBAAgB;EAChB,OAAO;EACP,YAAY;EAEZ,KAAK;EACL,MAAM;EACN,SAAS;EAET,QAAQ;EACR,OAAO;EACP,MAAM;EACN,MAAM;EACN,OAAO;EACP,OAAO;CACT;CAEA,SAA4B,QAAQ,MAAM;CAE1C,UAAoB;CAEpB,cAAc;EACZ,KAAK,UAAU,KAAK,UAAU;CAChC;CAEA,YAA4B;EAC1B,IAAI,KAAK,OAAO,IAAI,UAClB,OAAO;EAGT,IAAI,KAAK,OAAO,IAAI,aAClB,OAAO;EAGT,IAAI,KAAK,OAAO,UAAU,KAAK,CAAC,UAAU,UAAU,SAAS,QAAQ,GACnE,OAAO;EAGT,OAAO,CAAC,KAAK,OAAO,aAAa;CACnC;CAEA,IACE,OACA,MACA,QAAgB,qBAAqB,OAAO,OACpC;EACR,IAAI,CAAC,KAAK,SACR,OAAO;EAGT,OAAO,GAAG,qBAAqB,OAAO,SAAS,OAAO;CACxD;AACF;;;AC7DA,IAAa,0BAAb,cAA6C,qBAAqB;CAChE,QAAkB,QAAQ,oBAAoB;CAC9C,SAAmB,QAAQ,MAAM;CAEjC,OAAc,OAAyB;EACrC,MAAM,EAAE,MAAM,cAAc;EAE5B,IAAI,SAAS;EACb,IAAI,UAAU;EAEd,MAAM,UAAU,gBAAgB;EAChC,IAAI,SACF,UAAU,KAAK,YAAY,IAAI;OAC1B,IAAI,MAAM;GACf,IAAI,QAAQ;GACZ,IAAI,WAAW;GACf,IAAI,WAAW,QAAQ,KAAK,iBAAiB,OAAO;IAClD,QAAQ,KAAK,YAAY,KAAK,KAAK;IACnC,MAAM,EAAE,OAAO,GAAG,GAAG,SAAS;IAC9B,WAAW;GACb;GAEA,IAAI,OAAO,KAAK,QAAQ,EAAE,SAAS,GACjC,IAAI;IACF,UAAU,KAAK,UAAU,QAAQ;GACnC,QAAQ;IACN,UAAU;GACZ;GAGF,IAAI,OACF,WAAW,KAAK;EAEpB;EAEA,UAAU,KAAK,MAAM,IACnB,aACA,IAAI,KAAK,gBAAgB,SAAS,EAAE,EACtC;EACA,UAAU;EAEV,UAAU,KAAK,MAAM,IAAI,MAAM,OAAO,MAAM,MAAM,YAAY,CAAC;EAC/D,UAAU;EAEV,IAAI,MAAM,KAAK;GACb,UAAU,KAAK,MAAM,IAAI,aAAa,GAAG,MAAM,KAAK;GACpD,UAAU;EACZ;EAEA,IAAI,MAAM,SAAS;GACjB,UAAU,KAAK,MAAM,IACnB,aACA,IAAI,KAAK,cAAc,MAAM,OAAO,EAAE,EACxC;GACA,UAAU;EACZ;EAEA,MAAM,SAAS,KAAK,MAAM,IAAI,cAAc,GAAG,MAAM,OAAO,EAAE;EAC9D,MAAM,UAAU,KAAK,MAAM,IACzB,KAAK,OAAO,UAAU,IAAI,UAAU,SACpC,MAAM,OACR;EAEA,UAAU,IAAI,SAAS,QAAQ;EAE/B,IAAI,MAAM,SACR,UAAU,KAAK,KAAK,MAAM,IAAI,QAAQ,MAAM,OAAO;OAEnD,UAAU;EAGZ,IAAI,SACF,IAAI,SACF,UAAU,MAAM;OAEhB,UAAU,IAAI,KAAK,MAAM,IAAI,aAAa,OAAO;EAIrD,OAAO;CACT;CAEA,gBAAuB,WAA2B;EAChD,MAAM,IAAI,IAAI,KAAK,SAAS;EAC5B,MAAM,IAAI,EAAE,SAAS;EACrB,MAAM,IAAI,EAAE,WAAW;EACvB,MAAM,IAAI,EAAE,WAAW;EACvB,MAAM,KAAK,EAAE,gBAAgB;EAE7B,OAAO,GAAG,KAAK,KAAK,CAAC,EAAE,GAAG,KAAK,KAAK,CAAC,EAAE,GAAG,KAAK,KAAK,CAAC,EAAE,GAAG,KAAK,KAAK,EAAE;CACxE;CAEA,QAAkB,OAAe,IAAI,KAAK,MAAM,MAAM;CACtD,QAAkB,MAChB,IAAI,KAAK,KAAK,MAAM,IAAI,MAAM,IAAI,MAAM,GAAG;;;;CAK7C,cAAwB,SAAyB;EAC/C,IAAI,KAAK,OAAO,aAAa,GAC3B,OAAO;EAGT,OAAO,QAAQ,MAAM,GAAG,CAAC;CAC3B;CAEA,YAAsB,OAAsB;EAG1C,IAAI,KAAK,OAAO,UAAU,GAAG;GAE3B,iBAAiB;IACf,QAAQ,MAAM,KAAK;GACrB,CAAC;GACD,OAAO;EACT;EAGA,MAAM,OAAO,KAAK,OAAO,MAAM,IAAI,oBAAoB;EAMvD,MAAM,iBAAiB,KAAK;EAE5B,IAAI,MAAM,MAAM,SAAS,MAAM;EAE/B,IAAI,eAAgB,MAAc;EAClC,OAAO,gBAAgB,wBAAwB,OAAO;GACpD,MAAM,iBAAiB,YAAY;GAEnC,OAAO,gBAAgB,aAAa,SAAS,aAAa;GAC1D,eAAe,aAAa;EAC9B;EAEA,OAAO;CACT;AACF;;;AC7IA,IAAa,uBAAb,cAA0C,qBAAqB;CAC7D,OAAc,OAAyB;EACrC,IAAI,SAAS;EAEb,UAAU,GAAG,MAAM;EAEnB,IAAI,MAAM,gBAAgB,OAAO;GAC/B,UAAU,KAAK,MAAM,KAAK;GAC1B,IAAI,QAAQ,MAAM,KAAK;GACvB,OAAO,iBAAiB,OAAO;IAC7B,UAAU,gBAAgB,MAAM;IAChC,QAAQ,MAAM;GAChB;EACF;EAEA,OAAO;CACT;AACF;;;ACLA,IAAa,SAAb,MAA+C;CAC7C,SAA4B,QAAQ,MAAM;;;;;;CAM1C,mBAAsC,QAAQ,oBAAoB;CAClE,gBAAmC,QAAQ,qBAAqB;CAChE,kBAAqC,QAAQ,uBAAuB;CACpE,eAAkC,QAAQ,oBAAoB;CAC9D,cAAiC,QAAQ,sBAAsB;CAC/D,mBAAsC,QAAQ,gBAAgB;CAE9D,SAAoD;EAClD,QAAQ;EACR,OAAO;EACP,MAAM;EACN,MAAM;EACN,OAAO;EACP,OAAO;CACT;CAEA;CACA;CACA;CAEA,cAAgC;CAChC,WAA+B;CAE/B,YAAY,SAAiB,QAAgB;EAC3C,KAAK,UAAU;EACf,KAAK,SAAS;EACd,KAAK,MAAM,KAAK,OAAO,IAAI;CAC7B;CAEA,IAAW,UAA8B;EACvC,OAAO,KAAK,OAAO,QAAQ,IAAY,SAAS;CAClD;CAEA,IAAW,QAAgB;EACzB,MAAM,gBAAgB,KAAK,OAAO,MAAM,IAAI,qBAAqB;EACjE,IAAI,iBAAiB,kBAAkB,KAAK,aAAa;GACvD,KAAK,cAAc;GACnB,KAAK,WAAW,KAAK,WAAW,KAAK,aAAa,KAAK,MAAM;EAC/D;EACA,OAAO,KAAK;CACd;;;;;;;CAQA,IAAc,YAAkC;EAC9C,QAAQ,KAAK,OAAO,MAAM,IAAI,sBAAsB,GAApD;GACE,KAAK,QACH,OAAO,KAAK;GACd,KAAK,UACH,OAAO,KAAK;GACd,KAAK,OACH,OAAO,KAAK;GACd,SACE,OAAO,KAAK;EAChB;CACF;CAEA,WAAkB,OAAe,KAAuB;EACtD,MAAM,QAAQ,MAAM,YAAY,EAAE,MAAM,MAAM;EAG9C,KAAK,MAAM,QAAQ,OAAO;GACxB,MAAM,cAAc,KAAK,KAAK;GAC9B,IAAI,CAAC,aAAa;GAElB,IAAI,YAAY,SAAS,GAAG,KAAK,YAAY,SAAS,GAAG,GAAG;IAC1D,MAAM,CAAC,eAAe,cAAc,YAAY,MAAM,MAAM;IAC5D,MAAM,gBAAgB,cAAc,KAAK;IACzC,MAAM,eAAe,YAAY,KAAK;IAEtC,IAAI,CAAC,cAAc;IAEnB,IAAI,KAAK,eAAe,KAAK,aAAa,GACxC,IAAI;KACF,OAAO,KAAK,WAAW,YAAY;IACrC,SAAS,OAAO;KACd,MAAM,IAAI,YACR,sBAAsB,YAAY,KAAK,EAAE,wBAAwB,cAAc,EACjF;IACF;GAEJ;EACF;EAGA,KAAK,MAAM,QAAQ,OAAO;GACxB,MAAM,cAAc,KAAK,KAAK;GAC9B,IAAI,CAAC,aAAa;GAElB,IAAI,CAAC,YAAY,SAAS,GAAG,KAAK,CAAC,YAAY,SAAS,GAAG,GACzD,IAAI;IACF,OAAO,KAAK,WAAW,WAAW;GACpC,SAAS,OAAO;IACd,MAAM,IAAI,YAAY,6BAA6B,YAAY,EAAE;GACnE;EAEJ;EAEA,OAAO;CACT;CAEA,eAAyB,YAAoB,SAA0B;EACrE,IAAI,QAAQ,SAAS,GAAG,GAAG;GAEzB,MAAM,eAAe,QAAQ,QAAQ,OAAO,KAAK,EAAE,QAAQ,OAAO,IAAI;GACtE,OAAO,IAAI,OAAO,IAAI,cAAc,EAAE,KAAK,UAAU;EACvD;EAGA,OAAO,WAAW,WAAW,OAAO;CACtC;CAEA,WAAkB,WAA6B;EAC7C,MAAM,QAAQ,UAAU,KAAK,EAAE,YAAY;EAC3C,IAAI,KAAK,OAAO,WAAW,KAAA,GACzB,OAAO;EAGT,MAAM,IAAI,YAAY,sBAAsB,WAAW;CACzD;CAIA,MAAa,SAAiB,MAAsB;EAClD,KAAK,IAAI,SAAS,SAAS,IAAI;CACjC;CAEA,KAAY,SAAiB,MAAsB;EACjD,KAAK,IAAI,QAAQ,SAAS,IAAI;CAChC;CAEA,KAAY,SAAiB,MAAsB;EACjD,KAAK,IAAI,QAAQ,SAAS,IAAI;CAChC;CAEA,MAAa,SAAiB,MAAsB;EAClD,KAAK,IAAI,SAAS,SAAS,IAAI;CACjC;CAEA,MAAa,SAAiB,MAAsB;EAClD,KAAK,IAAI,SAAS,SAAS,IAAI;CACjC;CAEA,IAAc,OAAiB,SAAiB,MAAsB;EACpE,IAAI,WAAW;EACf,IAAI,OAAO,YAAY,UACrB,WAAW;OACN,IAAI,OAAO,SAAS,UACzB,WAAW;EAGb,IAAI;EACJ,IAAI,OAAO,SAAS,YAAY,MAC9B,QAAQ;OACH,IAAI,OAAO,YAAY,YAAY,SACxC,QAAQ;EAGV,MAAM,WAAqB;GACzB;GACA,SAAS;GACT,MAAM;GACN,SAAS,KAAK;GACd,SAAS,KAAK;GACd,QAAQ,KAAK;GACb,KAAK,KAAK;GACV,WAAW,KAAK,iBAAiB,UAAU;EAC7C;EAEA,IAAI,KAAK,OAAO,SAAS,KAAK,OAAO,KAAK,QAAQ;GAChD,KAAK,KAAK,QAAQ;GAClB;EACF;EAEA,MAAM,YAAY,KAAK,UAAU,OAAO,QAAQ;EAEhD,KAAK,KAAK,UAAU,SAAS;EAE7B,KAAK,YAAY,MAAM,WAAW,QAAQ;CAC5C;CAEA,KAAe,OAAiB,SAAkB;EAChD,KAAK,OAAO,OACT,KACC,OACA;GACE;GACA;EACF,GACA,EACE,OAAO,KACT,CACF,EACC,YAAY,IAAI;CACrB;AACF;;;;;;;;;;;;;;;;;;;;;;ACvMA,MAAa,WAAW,UAAkC,CAAC,MAAc;CACvE,MAAM,EAAE,QAAQ,SAAS,WAAW,SAAS;CAE7C,OAAO,QAAQ,QAAQ;EACrB,UAAU;EACV,MAAM,CACJ,QAAQ,QAAQ,SAAS,QAAQ,QACjC,QAAQ,QAAQ,OAAO,IAAI,eAAe,KAC5C;CACF,CAAC;AACH;AAMA,QAAQ,QAAQ;;;ACpChB,IAAa,6BAAb,cAAgD,uBAAuB;CACrE,MAAa,SAAuB;EAClC,QAAQ,IAAI,OAAO;CACrB;AACF;;;ACHA,IAAa,4BAAb,cAA+C,uBAAuB;CACpE,UAA6D,CAAC;CAE9D,UAA0B,EACxB,YAAY,IACd;CAEA,MAAa,WAAmB,OAAuB;EACrD,KAAK,QAAQ,KAAK;GAAE,GAAG;GAAO;EAAU,CAAC;EAEzC,IAAI,KAAK,QAAQ,SAAS,KAAK,QAAQ,YACrC,KAAK,UAAU,KAAK,QAAQ,MAC1B,CAAC,KAAK,MAAM,KAAK,QAAQ,aAAa,EAAG,CAC3C;CAEJ;CAEA,IAAW,OAAO;EAChB,OAAO,CAAC,GAAG,KAAK,OAAO;CACzB;CAEA,QAAqB;EACnB,KAAK,UAAU,CAAC;CAClB;AACF;;;ACzBA,MAAa,iBAAiB,EAAE,OAAO;CACrC,OAAO,EAAE,KAAK;EAAC;EAAU;EAAS;EAAS;EAAQ;EAAQ;CAAO,CAAC;CACnE,SAAS,EAAE,KAAK,EACd,MAAM,OACR,CAAC;CACD,SAAS,EAAE,KAAK;CAChB,QAAQ,EAAE,KAAK;CACf,SAAS,EAAE,SAAS,EAAE,KAAK,CAAC;CAC5B,KAAK,EAAE,SAAS,EAAE,KAAK,CAAC;CACxB,MAAM,EAAE,SAAS,EAAE,IAAI,CAAC;CACxB,WAAW,EAAE,OAAO;AACtB,CAAC;;;;;;;;;;;;;;;;;;AC+BD,MAAa,eAAe,QAAQ;CAClC,MAAM;CACN,YAAY,CAAC,OAAO;CACpB,UAAU,CAAC,QAAQ,oBAAoB;CACvC,UAAU;EACR;EACA;EACA;EACA;EACA;CACF;CACA,WAAW,WAAW;EACpB,MAAM,MAAM,OAAO,SAAS,SAAS;EAKrC,IAAI,WAAW,IAAI;EACnB,IAAI,YAAY,IAAI;EACpB,IAAI,IAAI,OAAO;GACb,IAAI,IAAI,UAAU,OAAO,IAAI,UAAU,QACrC,aAAa;QACR;IACL,MAAM,WAAW,IAAI,MAAM,MAAM,GAAG,EACjC,KAAK,MAAM,EAAE,KAAK,EAAE,WAAW,KAAK,GAAG,CAAC,EACxC,OAAO,OAAO;IACjB,aAAa,GAAG,SAAS,KAAK,MAAM,GAAG,EAAE,OAAO,EAAE,KAAK,GAAG,EAAE;GAC9D;GACA,cAAc;EAChB;EAEA,MAAM,kCAAkC;GAGtC,IAAI,OAAO,OAAO,KAAK,CAAC,UAAU;IAChC,MAAM,gBAAgB,OAAY;KAChC,IAAI,GAAG,MAAM,QAAQ,UAAU,QAAQ;MACrC,MAAM,SAAS,OAAO,OAAO,yBAAyB;MACtD,KAAK,MAAM,OAAO,OAAO,MACvB,QAAQ,IAAI,IAAI,SAAS;KAE7B;IACF;IAEA,IAAI;KACF,OAAO,MAAM,IAAI,uBAAuB,IAAI,YAAY;KACxD,OAAO,MAAM,IAAI,4BAA4B,IAAI,YAAY;IAC/D,QAAQ,CAER;IAEA,OAAO;GACT;GAEA,OAAO;EACT;EAEA,MAAM,gCAAgC;GACpC,IAAI,WAAW;IACb,IAAI,cAAc,QAChB,OAAO;IAET,IAAI,cAAc,OAChB,OAAO;IAET,OAAO;GACT;GAEA,IAAI,OAAO,aAAa,KAAK,CAAC,OAAO,UAAU,GAC7C,OAAO;GAGT,OAAO;EACT;EAEA,OAAO,KAAK;GACV,UAAU;GACV,SAAS;GACT,KAAK,0BAA0B;EACjC,CAAC;EAED,OAAO,KAAK;GACV,UAAU;GACV,SAAS;GACT,KAAK,wBAAwB;EAC/B,CAAC;EAED,OAAO,MAAM,IACX,iBACA,OAAO,OAAO,QAAQ;GACpB,UAAU;GACV,MAAM,CAAC,UAAU,aAAa;EAChC,CAAC,CACH;EAEA,OAAO,MAAM,IACX,uBACA,aACG,OAAO,OAAO,IACX,UACA,OAAO,aAAa,KAAK,OAAO,UAAU,IACxC,SACA,OACV;CACF;AACF,CAAC;AAID,MAAM,YAAY,EAAE,OAAO;;;;;;;;;;CAUzB,OAAO,EAAE,SACP,EAAE,KAAK,EACL,aACE,wGACJ,CAAC,CACH;;;;;;;;;;;;;;;;;CAkBA,WAAW,EAAE,SACX,EAAE,KAAK;EACL,aAAa;;;;;EAKb,WAAW;CACb,CAAC,CACH;;;;;;;CAQA,YAAY,EAAE,SACZ,EAAE,KAAK;EAAC;EAAQ;EAAU;CAAK,GAAG;EAChC,aAAa;EACb,WAAW;CACb,CAAC,CACH;AACF,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.js","names":[],"sources":["../../src/logger/providers/ConsoleColorProvider.ts","../../src/logger/providers/LogFormatterProvider.ts","../../src/logger/providers/PrettyFormatterProvider.ts","../../src/logger/providers/CliFormatterProvider.ts","../../src/logger/providers/JsonFormatterProvider.ts","../../src/logger/providers/LogDestinationProvider.ts","../../src/logger/providers/RawFormatterProvider.ts","../../src/logger/services/Logger.ts","../../src/logger/primitives/$logger.ts","../../src/logger/providers/ConsoleDestinationProvider.ts","../../src/logger/providers/MemoryDestinationProvider.ts","../../src/logger/schemas/logEntrySchema.ts","../../src/logger/index.ts"],"sourcesContent":["import { $inject, Alepha } from \"alepha\";\n\nexport class ConsoleColorProvider {\n static readonly COLORS = {\n RESET: \"\\x1b[0m\",\n BLACK: \"\\x1b[30m\",\n RED: \"\\x1b[31m\",\n GREEN: \"\\x1b[32m\",\n ORANGE: \"\\x1b[33m\", // using yellow for orange-ish\n BLUE: \"\\x1b[34m\",\n PURPLE: \"\\x1b[35m\",\n CYAN: \"\\x1b[36m\",\n GREY_LIGHT: \"\\x1b[37m\",\n GREY_LIGHT_BOLD: \"\\x1b[1;37m\",\n GREY_DARK: \"\\x1b[90m\",\n GREY_DARK_BOLD: \"\\x1b[1;90m\",\n WHITE: \"\\x1b[97m\",\n WHITE_BOLD: \"\\x1b[1;97m\",\n // modifiers\n DIM: \"\\x1b[2m\",\n BOLD: \"\\x1b[1m\",\n INVERSE: \"\\x1b[7m\",\n // levels\n SILENT: \"\",\n ERROR: \"\\x1b[31m\",\n WARN: \"\\x1b[33m\",\n INFO: \"\\x1b[32m\",\n DEBUG: \"\\x1b[34m\",\n TRACE: \"\\x1b[90m\",\n };\n\n protected readonly alepha = $inject(Alepha);\n\n protected enabled = true;\n\n constructor() {\n this.enabled = this.isEnabled();\n }\n\n public isEnabled(): boolean {\n if (this.alepha.env.NO_COLOR) {\n return false;\n }\n\n if (this.alepha.env.FORCE_COLOR) {\n return true;\n }\n\n if (this.alepha.isBrowser() && !navigator.userAgent.includes(\"Chrome\")) {\n return false;\n }\n\n return !this.alepha.isProduction();\n }\n\n public set(\n color: keyof typeof ConsoleColorProvider.COLORS,\n text: string,\n reset: string = ConsoleColorProvider.COLORS.RESET,\n ): string {\n if (!this.enabled) {\n return text;\n }\n\n return `${ConsoleColorProvider.COLORS[color]}${text}${reset}`;\n }\n}\n","import type { LogEntry } from \"../schemas/logEntrySchema.ts\";\n\nexport abstract class LogFormatterProvider {\n public abstract format(entry: LogEntry): string;\n}\n","import { $inject, Alepha } from \"alepha\";\nimport type { LogEntry } from \"../schemas/logEntrySchema.ts\";\nimport { ConsoleColorProvider } from \"./ConsoleColorProvider.ts\";\nimport { LogFormatterProvider } from \"./LogFormatterProvider.ts\";\n\nexport class PrettyFormatterProvider extends LogFormatterProvider {\n protected color = $inject(ConsoleColorProvider);\n protected alepha = $inject(Alepha);\n\n public format(entry: LogEntry): string {\n const { data, timestamp } = entry;\n\n let output = \"\";\n let details = \"\";\n\n const isError = data instanceof Error;\n if (isError) {\n details = this.formatError(data);\n } else if (data) {\n let error = \"\";\n let jsonData = data;\n if (\"error\" in data && data.error instanceof Error) {\n error = this.formatError(data.error);\n const { error: _, ...rest } = data;\n jsonData = rest;\n }\n\n if (Object.keys(jsonData).length > 0) {\n try {\n details = JSON.stringify(jsonData);\n } catch {\n details = \"[Unserializable Object]\";\n }\n }\n\n if (error) {\n details += `\\n${error}`;\n }\n }\n\n output += this.color.set(\n \"GREY_DARK\",\n `[${this.formatTimestamp(timestamp)}]`,\n );\n output += \" \";\n\n output += this.color.set(entry.level, entry.level.toUpperCase());\n output += \" \";\n\n if (entry.app) {\n output += this.color.set(\"GREY_DARK\", `${entry.app}`);\n output += \" \";\n }\n\n if (entry.context) {\n output += this.color.set(\n \"GREY_DARK\",\n `(${this.formatContext(entry.context)})`,\n );\n output += \" \";\n }\n\n const module = this.color.set(\"GREY_LIGHT\", `${entry.module}.`);\n const service = this.color.set(\n this.alepha.isBrowser() ? \"RESET\" : \"WHITE\",\n entry.service,\n );\n\n output += `<${module}${service}>`;\n\n if (entry.message) {\n output += `: ${this.color.set(\"CYAN\", entry.message)}`;\n } else {\n output += \":\";\n }\n\n if (details) {\n if (isError) {\n output += ` \\n${details}`;\n } else {\n output += ` ${this.color.set(\"GREY_DARK\", details)}`;\n }\n }\n\n return output;\n }\n\n public formatTimestamp(timestamp: number): string {\n const d = new Date(timestamp);\n const h = d.getHours();\n const m = d.getMinutes();\n const s = d.getSeconds();\n const ms = d.getMilliseconds();\n\n return `${this.pad2(h)}:${this.pad2(m)}:${this.pad2(s)}.${this.pad3(ms)}`;\n }\n\n protected pad2 = (n: number) => (n < 10 ? \"0\" : \"\") + n;\n protected pad3 = (n: number) =>\n n < 10 ? `00${n}` : n < 100 ? `0${n}` : `${n}`;\n\n /**\n * Avoid to display the whole UUID in development mode\n */\n protected formatContext(context: string): string {\n if (this.alepha.isProduction()) {\n return context;\n }\n\n return context.slice(0, 8);\n }\n\n protected formatError(error: Error): string {\n // Chrome does not like stack traces with ASCII colors\n // so we remove the stack trace from log and just print with console.error\n if (this.alepha.isBrowser()) {\n // call console.error in a separate tick to avoid messing with log order\n setTimeout(() => {\n console.error(error);\n });\n return \"\";\n }\n\n // hack: use vite's stack trace formatter if available\n const vite = this.alepha.store.get(\"alepha.vite.server\") as\n | {\n ssrFixStacktrace: (error: Error) => void;\n }\n | undefined;\n\n vite?.ssrFixStacktrace(error);\n\n let str = error.stack ?? error.message;\n\n let currentCause = (error as any).cause;\n while (currentCause && currentCause instanceof Error) {\n vite?.ssrFixStacktrace(currentCause);\n\n str += `\\nCaused by: ${currentCause.stack ?? currentCause.message}`;\n currentCause = currentCause.cause;\n }\n\n return str;\n }\n}\n","import type { LogEntry } from \"../schemas/logEntrySchema.ts\";\nimport { PrettyFormatterProvider } from \"./PrettyFormatterProvider.ts\";\n\n/**\n * Compact formatter for CLI output.\n *\n * Renders `HH:MM:SS L message {json}` — a short clock time, a single-letter\n * level colored by severity, the message, and any structured data appended\n * dim. Deliberately drops the `<module.service>`, app name and context UUID\n * that {@link PrettyFormatterProvider} prints: in an interactive CLI session\n * those are noise. Use `pretty` (or `--verbose`) when you need them, `raw`\n * when you want the bare message for piping, and `json` for aggregation.\n */\nexport class CliFormatterProvider extends PrettyFormatterProvider {\n public override format(entry: LogEntry): string {\n const { data, timestamp, level } = entry;\n\n const isError = data instanceof Error;\n let details = \"\";\n\n if (isError) {\n details = this.formatError(data);\n } else if (data) {\n let error = \"\";\n let jsonData = data;\n if (\"error\" in data && data.error instanceof Error) {\n error = this.formatError(data.error);\n const { error: _, ...rest } = data;\n jsonData = rest;\n }\n\n if (Object.keys(jsonData).length > 0) {\n try {\n details = JSON.stringify(jsonData);\n } catch {\n details = \"[Unserializable Object]\";\n }\n }\n\n if (error) {\n details += `\\n${error}`;\n }\n }\n\n let output = \"\";\n\n output += this.color.set(\"GREY_DARK\", this.formatClockTime(timestamp));\n output += \" \";\n output += this.color.set(level, level.charAt(0).toUpperCase());\n\n if (entry.message) {\n output += ` ${entry.message}`;\n }\n\n if (details) {\n if (isError) {\n output += ` \\n${details}`;\n } else {\n output += ` ${this.color.set(\"GREY_DARK\", details)}`;\n }\n }\n\n return output;\n }\n\n /**\n * Short clock time without milliseconds (HH:MM:SS).\n */\n protected formatClockTime(timestamp: number): string {\n const d = new Date(timestamp);\n return `${this.pad2(d.getHours())}:${this.pad2(d.getMinutes())}:${this.pad2(\n d.getSeconds(),\n )}`;\n }\n}\n","import type { LogEntry } from \"../schemas/logEntrySchema.ts\";\nimport { LogFormatterProvider } from \"./LogFormatterProvider.ts\";\n\nexport class JsonFormatterProvider extends LogFormatterProvider {\n public format(entry: LogEntry): string {\n const json: Record<string, any> = {\n level: entry.level,\n message: entry.message,\n context: entry.context,\n service: entry.service,\n module: entry.module,\n app: entry.app,\n time: entry.timestamp,\n };\n\n if (entry.data instanceof Error) {\n json.error = this.formatJsonError(entry.data);\n } else {\n json.data = entry.data;\n }\n\n return JSON.stringify(json);\n }\n\n public formatJsonError(error: Error): object {\n return {\n name: error.name,\n message: error.message,\n stack: error.stack,\n cause:\n error.cause instanceof Error\n ? this.formatJsonError(error.cause)\n : undefined,\n };\n }\n}\n","import type { LogEntry } from \"../schemas/logEntrySchema.ts\";\n\nexport abstract class LogDestinationProvider {\n public abstract write(message: string, entry: LogEntry): void;\n}\n","import type { LogEntry } from \"../schemas/logEntrySchema.ts\";\nimport { LogFormatterProvider } from \"./LogFormatterProvider.ts\";\n\nexport class RawFormatterProvider extends LogFormatterProvider {\n public format(entry: LogEntry): string {\n let output = \"\";\n\n output += `${entry.message}`;\n\n if (entry.data instanceof Error) {\n output += `\\n${entry.data.message}`;\n let cause = entry.data.cause;\n while (cause instanceof Error) {\n output += `\\nCaused by: ${cause.message}`;\n cause = cause.cause;\n }\n }\n\n return output;\n }\n}\n","import {\n $inject,\n Alepha,\n AlephaError,\n type LoggerInterface,\n type LogLevel,\n} from \"alepha\";\nimport { DateTimeProvider } from \"alepha/datetime\";\nimport { CliFormatterProvider } from \"../providers/CliFormatterProvider.ts\";\nimport { JsonFormatterProvider } from \"../providers/JsonFormatterProvider.ts\";\nimport { LogDestinationProvider } from \"../providers/LogDestinationProvider.ts\";\nimport { LogFormatterProvider } from \"../providers/LogFormatterProvider.ts\";\nimport { PrettyFormatterProvider } from \"../providers/PrettyFormatterProvider.ts\";\nimport { RawFormatterProvider } from \"../providers/RawFormatterProvider.ts\";\nimport type { LogEntry } from \"../schemas/logEntrySchema.ts\";\n\nexport class Logger implements LoggerInterface {\n protected readonly alepha = $inject(Alepha);\n /**\n * Formatter chosen at register time (from `LOG_FORMAT`, honoring any\n * custom `LogFormatterProvider` substitution). Used unless a runtime\n * `alepha.logger.format` override is set — see {@link formatter}.\n */\n protected readonly defaultFormatter = $inject(LogFormatterProvider);\n protected readonly jsonFormatter = $inject(JsonFormatterProvider);\n protected readonly prettyFormatter = $inject(PrettyFormatterProvider);\n protected readonly rawFormatter = $inject(RawFormatterProvider);\n protected readonly cliFormatter = $inject(CliFormatterProvider);\n protected readonly destination = $inject(LogDestinationProvider);\n protected readonly dateTimeProvider = $inject(DateTimeProvider);\n\n protected readonly levels: Record<string, number> = {\n SILENT: -1,\n ERROR: 0,\n WARN: 1,\n INFO: 2,\n DEBUG: 3,\n TRACE: 4,\n };\n\n protected readonly service: string;\n protected readonly module: string;\n protected readonly app?: string;\n\n protected appLogLevel: string = \"INFO\";\n protected logLevel: LogLevel = \"INFO\";\n\n constructor(service: string, module: string) {\n this.service = service;\n this.module = module;\n this.app = this.alepha.env.APP_NAME;\n }\n\n public get context(): string | undefined {\n return this.alepha.context.get<string>(\"context\");\n }\n\n public get level(): string {\n const stateLogLevel = this.alepha.store.get(\"alepha.logger.level\");\n if (stateLogLevel && stateLogLevel !== this.appLogLevel) {\n this.appLogLevel = stateLogLevel;\n this.logLevel = this.parseLevel(this.appLogLevel, this.module);\n }\n return this.logLevel;\n }\n\n /**\n * Active formatter. Honors a runtime `alepha.logger.format` override\n * (read live, like {@link level}); otherwise falls back to the\n * register-time {@link defaultFormatter} so custom substitutions and the\n * `LOG_FORMAT` default keep working.\n */\n protected get formatter(): LogFormatterProvider {\n switch (this.alepha.store.get(\"alepha.logger.format\")) {\n case \"json\":\n return this.jsonFormatter;\n case \"pretty\":\n return this.prettyFormatter;\n case \"raw\":\n return this.rawFormatter;\n case \"cli\":\n return this.cliFormatter;\n default:\n return this.defaultFormatter;\n }\n }\n\n public parseLevel(level: string, app: string): LogLevel {\n const parts = level.toLowerCase().split(/[,;]/);\n\n // First pass: check for module-specific configurations\n for (const part of parts) {\n const trimmedPart = part.trim();\n if (!trimmedPart) continue; // Skip empty parts\n\n if (trimmedPart.includes(\":\") || trimmedPart.includes(\"=\")) {\n const [modulePattern, levelValue] = trimmedPart.split(/[:=]/);\n const trimmedModule = modulePattern.trim();\n const trimmedLevel = levelValue?.trim();\n\n if (!trimmedLevel) continue; // Skip if no level specified\n\n if (this.matchesPattern(app, trimmedModule)) {\n try {\n return this.asLogLevel(trimmedLevel);\n } catch (error) {\n throw new AlephaError(\n `Invalid log level '${levelValue?.trim()}' for module pattern '${trimmedModule}'`,\n );\n }\n }\n }\n }\n\n // Second pass: look for global level\n for (const part of parts) {\n const trimmedPart = part.trim();\n if (!trimmedPart) continue; // Skip empty parts\n\n if (!trimmedPart.includes(\":\") && !trimmedPart.includes(\"=\")) {\n try {\n return this.asLogLevel(trimmedPart);\n } catch (error) {\n throw new AlephaError(`Invalid global log level \"${trimmedPart}\"`);\n }\n }\n }\n\n return \"INFO\";\n }\n\n protected matchesPattern(moduleName: string, pattern: string): boolean {\n if (pattern.includes(\"*\")) {\n // Convert wildcard pattern to regex\n const regexPattern = pattern.replace(/\\./g, \"\\\\.\").replace(/\\*/g, \".*\");\n return new RegExp(`^${regexPattern}`).test(moduleName);\n }\n\n // Exact prefix match (existing behavior)\n return moduleName.startsWith(pattern);\n }\n\n public asLogLevel(something: string): LogLevel {\n const level = something.trim().toUpperCase();\n if (this.levels[level] !== undefined) {\n return level as LogLevel;\n }\n\n throw new AlephaError(`Invalid log level: ${something}`);\n }\n\n /**\n * Whether a message at `level` would actually be emitted given the current\n * active level (read live from state). Mirrors the threshold used by\n * {@link log}: a level is enabled when it sits at or above the active one.\n *\n * @example\n * // active level = INFO\n * log.isLevelEnabled(\"DEBUG\"); // false\n * log.isLevelEnabled(\"WARN\"); // true\n */\n public isLevelEnabled(level: LogLevel): boolean {\n return this.levels[level] <= this.levels[this.level];\n }\n\n // -------------------------------------------------------------------------------------------------------------------\n\n public error(message: string, data?: unknown): void {\n this.log(\"ERROR\", message, data);\n }\n\n public warn(message: string, data?: unknown): void {\n this.log(\"WARN\", message, data);\n }\n\n public info(message: string, data?: unknown): void {\n this.log(\"INFO\", message, data);\n }\n\n public debug(message: string, data?: unknown): void {\n this.log(\"DEBUG\", message, data);\n }\n\n public trace(message: string, data?: unknown): void {\n this.log(\"TRACE\", message, data);\n }\n\n protected log(level: LogLevel, message: string, data?: unknown): void {\n let _message = \"\";\n if (typeof message === \"string\") {\n _message = message;\n } else if (typeof data === \"string\") {\n _message = data;\n }\n\n let _data: object | Error | undefined;\n if (typeof data === \"object\" && data) {\n _data = data;\n } else if (typeof message === \"object\" && message) {\n _data = message;\n }\n\n const logEntry: LogEntry = {\n level,\n message: _message,\n data: _data,\n context: this.context,\n service: this.service,\n module: this.module,\n app: this.app,\n timestamp: this.dateTimeProvider.nowMillis(),\n };\n\n if (this.levels[level] > this.levels[this.level]) {\n this.emit(logEntry);\n return;\n }\n\n const formatted = this.formatter.format(logEntry);\n\n this.emit(logEntry, formatted);\n\n this.destination.write(formatted, logEntry);\n }\n\n protected emit(entry: LogEntry, message?: string) {\n this.alepha.events\n .emit(\n \"log\",\n {\n message,\n entry,\n },\n {\n catch: true,\n },\n )\n .catch(() => null);\n }\n}\n","import { $context, $inject, KIND } from \"alepha\";\nimport { Logger } from \"../services/Logger.ts\";\n\n/**\n * Create a logger.\n *\n * `name` is optional, by default it will use the name of the service.\n *\n * @example\n * ```ts\n * import { $logger } from \"alepha\";\n *\n * class MyService {\n * \tlog = $logger();\n *\n * constructor() {\n * this.log.info(\"Service initialized\");\n * // print something like '[23:45:53.326] INFO <app.MyService>: Service initialized'\n * }\n * }\n * ```\n */\nexport const $logger = (options: LoggerPrimitiveOptions = {}): Logger => {\n const { alepha, service, module } = $context();\n\n return $inject(Logger, {\n lifetime: \"transient\",\n args: [\n options.name ?? service?.name ?? \"Func\",\n module?.name ?? alepha.env.MODULE_NAME ?? \"app\",\n ],\n });\n};\n\nexport interface LoggerPrimitiveOptions {\n name?: string;\n}\n\n$logger[KIND] = Logger;\n","import { LogDestinationProvider } from \"./LogDestinationProvider.ts\";\n\nexport class ConsoleDestinationProvider extends LogDestinationProvider {\n public write(message: string): void {\n console.log(message);\n }\n}\n","import type { LogEntry } from \"../schemas/logEntrySchema.ts\";\nimport { LogDestinationProvider } from \"./LogDestinationProvider.ts\";\n\nexport class MemoryDestinationProvider extends LogDestinationProvider {\n protected entries: Array<LogEntry & { formatted: string }> = [];\n\n public readonly options = {\n maxEntries: 10_000,\n };\n\n public write(formatted: string, entry: LogEntry): void {\n this.entries.push({ ...entry, formatted });\n\n if (this.entries.length > this.options.maxEntries) {\n this.entries = this.entries.slice(\n -Math.floor(this.options.maxEntries * 0.8),\n );\n }\n }\n\n public get logs() {\n return [...this.entries];\n }\n\n public clear(): void {\n this.entries = [];\n }\n}\n","import { type Static, z } from \"alepha\";\n\nexport const logEntrySchema = z.object({\n level: z.enum([\"SILENT\", \"TRACE\", \"DEBUG\", \"INFO\", \"WARN\", \"ERROR\"]),\n message: z.text({\n size: \"rich\",\n }),\n service: z.text(),\n module: z.text(),\n context: z.text().optional(),\n app: z.text().optional(),\n data: z.any().optional(),\n timestamp: z.number(),\n});\n\nexport type LogEntry = Static<typeof logEntrySchema>;\n","import { $module, type Static, z } from \"alepha\";\nimport { $logger } from \"./primitives/$logger.ts\";\nimport { CliFormatterProvider } from \"./providers/CliFormatterProvider.ts\";\nimport { ConsoleColorProvider } from \"./providers/ConsoleColorProvider.ts\";\nimport { ConsoleDestinationProvider } from \"./providers/ConsoleDestinationProvider.ts\";\nimport { JsonFormatterProvider } from \"./providers/JsonFormatterProvider.ts\";\nimport { LogDestinationProvider } from \"./providers/LogDestinationProvider.ts\";\nimport { LogFormatterProvider } from \"./providers/LogFormatterProvider.ts\";\nimport { MemoryDestinationProvider } from \"./providers/MemoryDestinationProvider.ts\";\nimport { PrettyFormatterProvider } from \"./providers/PrettyFormatterProvider.ts\";\nimport { RawFormatterProvider } from \"./providers/RawFormatterProvider.ts\";\nimport type { LogEntry } from \"./schemas/logEntrySchema.ts\";\nimport { Logger } from \"./services/Logger.ts\";\n\n// ---------------------------------------------------------------------------------------------------------------------\n\nexport * from \"./primitives/$logger.ts\";\nexport * from \"./providers/CliFormatterProvider.ts\";\nexport * from \"./providers/ConsoleColorProvider.ts\";\nexport * from \"./providers/ConsoleDestinationProvider.ts\";\nexport * from \"./providers/JsonFormatterProvider.ts\";\nexport * from \"./providers/LogDestinationProvider.ts\";\nexport * from \"./providers/LogFormatterProvider.ts\";\nexport * from \"./providers/MemoryDestinationProvider.ts\";\nexport * from \"./providers/PrettyFormatterProvider.ts\";\nexport * from \"./providers/RawFormatterProvider.ts\";\nexport * from \"./schemas/logEntrySchema.ts\";\nexport * from \"./services/Logger.ts\";\n\n// ---------------------------------------------------------------------------------------------------------------------\n\n/**\n * Configurable logging with multiple outputs.\n *\n * **Features:**\n * - Global logger access\n * - JSON format\n * - Pretty colored output\n * - Compact CLI format\n * - Raw text format\n * - Console destination\n * - Memory destination (for devtools)\n * - Custom handlers\n * - Configuration via `LOG_LEVEL`, `LOG_FORMAT`, and `DEBUG`\n *\n * @module alepha.logger\n */\nexport const AlephaLogger = $module({\n name: \"alepha.logger\",\n primitives: [$logger],\n services: [Logger, ConsoleColorProvider],\n variants: [\n ConsoleDestinationProvider,\n MemoryDestinationProvider,\n JsonFormatterProvider,\n PrettyFormatterProvider,\n RawFormatterProvider,\n CliFormatterProvider,\n ],\n register: (alepha) => {\n const env = alepha.parseEnv(envSchema);\n\n // Support DEBUG env var (debug package convention) as shorthand for LOG_LEVEL/LOG_FORMAT.\n // DEBUG=1 → LOG_LEVEL=trace LOG_FORMAT=pretty\n // DEBUG=alepha:* → LOG_LEVEL=alepha.*:debug,info LOG_FORMAT=pretty\n let logLevel = env.LOG_LEVEL;\n let logFormat = env.LOG_FORMAT;\n if (env.DEBUG) {\n if (env.DEBUG === \"1\" || env.DEBUG === \"true\") {\n logLevel ??= \"trace\";\n } else {\n const patterns = env.DEBUG.split(\",\")\n .map((p) => p.trim().replaceAll(\":\", \".\"))\n .filter(Boolean);\n logLevel ??= `${patterns.map((p) => `${p}:debug`).join(\",\")},info`;\n }\n logFormat ??= \"pretty\";\n }\n\n const getLogDestinationProvider = () => {\n // in test mode, if no LOG_LEVEL is set, use MemoryDestinationProvider to capture logs for inspection.\n // logs will be printed to console only if the test fails.\n if (alepha.isTest() && !logLevel) {\n const printOnError = (ev: any) => {\n if (ev.task?.result?.state === \"fail\") {\n const output = alepha.inject(MemoryDestinationProvider);\n for (const log of output.logs) {\n console.log(log.formatted);\n }\n }\n };\n\n try {\n alepha.store.get(\"alepha.test.afterEach\")?.(printOnError);\n alepha.store.get(\"alepha.test.onTestFinished\")?.(printOnError);\n } catch {\n // ignore\n }\n\n return MemoryDestinationProvider;\n }\n\n return ConsoleDestinationProvider;\n };\n\n const getLogFormatterProvider = () => {\n if (logFormat) {\n if (logFormat === \"json\") {\n return JsonFormatterProvider;\n }\n if (logFormat === \"raw\") {\n return RawFormatterProvider;\n }\n if (logFormat === \"cli\") {\n return CliFormatterProvider;\n }\n return PrettyFormatterProvider;\n }\n\n if (alepha.isProduction() && !alepha.isBrowser()) {\n return JsonFormatterProvider;\n }\n\n return PrettyFormatterProvider;\n };\n\n alepha.with({\n optional: true,\n provide: LogDestinationProvider,\n use: getLogDestinationProvider(),\n });\n\n alepha.with({\n optional: true,\n provide: LogFormatterProvider,\n use: getLogFormatterProvider(),\n });\n\n alepha.store.set(\n \"alepha.logger\",\n alepha.inject(Logger, {\n lifetime: \"transient\",\n args: [\"Alepha\", \"alepha.core\"],\n }),\n );\n\n alepha.store.set(\n \"alepha.logger.level\",\n logLevel ??\n (alepha.isTest()\n ? \"trace\"\n : alepha.isProduction() && alepha.isBrowser()\n ? \"warn\"\n : \"info\"),\n );\n },\n});\n\n// ---------------------------------------------------------------------------------------------------------------------\n\nconst envSchema = z.object({\n /**\n * Enable debug logging for specific modules using the `debug` package convention.\n *\n * @example\n * DEBUG=1 # Shorthand for LOG_LEVEL=trace LOG_FORMAT=pretty\n * DEBUG=alepha:* # Enable debug logging for all alepha modules\n * DEBUG=alepha:orm:* # Enable debug logging for alepha.orm modules\n * DEBUG=* # Enable debug logging for all modules\n */\n DEBUG: z\n .text({\n description:\n \"Enable debug logging for specific modules using the debug package convention. Example: DEBUG=alepha:*\",\n })\n .optional(),\n\n /**\n * Default log level for the application.\n *\n * Default by environment:\n * - dev = info\n * - prod = info\n * - test = error\n *\n * Levels are: \"trace\" | \"debug\" | \"info\" | \"warn\" | \"error\" | \"silent\"\n *\n * Level can be set for a specific module:\n *\n * @example\n * LOG_LEVEL=my.module.name:debug,info # Set debug level for my.module.name and info for all other modules\n * LOG_LEVEL=alepha:trace, info # Set trace level for all alepha modules and info for all other modules\n */\n LOG_LEVEL: z\n .text({\n description: `Application log level on startup.\nLevels are: trace, debug, info, warn, error, silent\nLevel can be set for a specific module:\n\"my.module.name:debug,info\" -> Set debug level for my.module.name and info for all other modules\n\"alepha:trace,info\" -> Set trace level for all alepha modules and info for all other modules`,\n lowercase: true,\n })\n .optional(),\n\n /**\n * Built-in log formats.\n * - \"json\" - JSON format, useful for structured logging and log aggregation. {@link JsonFormatterProvider}\n * - \"pretty\" - Full text format, human-readable, with colors and module/context. {@link PrettyFormatterProvider}\n * - \"cli\" - Compact format for CLI sessions: time, level initial, message, json. {@link CliFormatterProvider}\n * - \"raw\" - Raw format, no formatting, just the message (best for piping). {@link RawFormatterProvider}\n */\n LOG_FORMAT: z\n .enum([\"json\", \"pretty\", \"raw\", \"cli\"])\n .meta({ lowercase: true })\n .describe(\"Default log format for the application.\")\n .optional(),\n});\n\n// ---------------------------------------------------------------------------------------------------------------------\n\ndeclare module \"alepha\" {\n export interface Env extends Partial<Static<typeof envSchema>> {}\n\n export interface State {\n /**\n * Current log level for the application or specific modules.\n */\n \"alepha.logger.level\"?: string;\n\n /**\n * Runtime override for the log format (`json` | `pretty` | `raw`).\n *\n * Unset → the formatter chosen at register time from `LOG_FORMAT`\n * (honoring any custom `LogFormatterProvider` substitution) is used.\n * When set, it overrides both the active formatter and the CLI's\n * dynamic/\"stylish\" task UI (which is enabled only for `raw`). Set it\n * to flip output at runtime — e.g. the CLI `--verbose` flag forces\n * `pretty`.\n */\n \"alepha.logger.format\"?: string;\n }\n\n export interface Hooks {\n log: {\n message?: string;\n entry: LogEntry;\n };\n }\n}\n"],"mappings":"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"}
|