alepha 0.13.7 → 0.14.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/README.md +5 -2
- package/assets/swagger-ui/swagger-ui-bundle.js +1 -1
- package/assets/swagger-ui/swagger-ui-standalone-preset.js +1 -1
- package/assets/swagger-ui/swagger-ui.css +1 -1
- package/dist/{api-audits → api/audits}/index.browser.js +4 -4
- package/dist/api/audits/index.browser.js.map +1 -0
- package/dist/{api-audits → api/audits}/index.d.ts +10 -9
- package/dist/api/audits/index.d.ts.map +1 -0
- package/dist/{api-audits → api/audits}/index.js +8 -8
- package/dist/api/audits/index.js.map +1 -0
- package/dist/{api-files → api/files}/index.browser.js +5 -5
- package/dist/api/files/index.browser.js.map +1 -0
- package/dist/{api-files → api/files}/index.d.ts +18 -10
- package/dist/api/files/index.d.ts.map +1 -0
- package/dist/{api-files → api/files}/index.js +10 -10
- package/dist/api/files/index.js.map +1 -0
- package/dist/{api-jobs → api/jobs}/index.browser.js +5 -5
- package/dist/api/jobs/index.browser.js.map +1 -0
- package/dist/{api-jobs → api/jobs}/index.d.ts +168 -167
- package/dist/api/jobs/index.d.ts.map +1 -0
- package/dist/{api-jobs → api/jobs}/index.js +9 -9
- package/dist/api/jobs/index.js.map +1 -0
- package/dist/{api-notifications → api/notifications}/index.browser.js +11 -11
- package/dist/api/notifications/index.browser.js.map +1 -0
- package/dist/api/notifications/index.d.ts +327 -0
- package/dist/api/notifications/index.d.ts.map +1 -0
- package/dist/{api-notifications → api/notifications}/index.js +11 -11
- package/dist/api/notifications/index.js.map +1 -0
- package/dist/{api-parameters → api/parameters}/index.browser.js +2 -2
- package/dist/api/parameters/index.browser.js.map +1 -0
- package/dist/{api-parameters → api/parameters}/index.d.ts +11 -11
- package/dist/api/parameters/index.d.ts.map +1 -0
- package/dist/{api-parameters → api/parameters}/index.js +7 -7
- package/dist/api/parameters/index.js.map +1 -0
- package/dist/{api-users → api/users}/index.browser.js +6 -6
- package/dist/api/users/index.browser.js.map +1 -0
- package/dist/{api-users → api/users}/index.d.ts +836 -836
- package/dist/api/users/index.d.ts.map +1 -0
- package/dist/{api-users → api/users}/index.js +99 -766
- package/dist/api/users/index.js.map +1 -0
- package/dist/{api-verifications → api/verifications}/index.browser.js +5 -5
- package/dist/api/verifications/index.browser.js.map +1 -0
- package/dist/api/verifications/index.d.ts +248 -0
- package/dist/api/verifications/index.d.ts.map +1 -0
- package/dist/{api-verifications → api/verifications}/index.js +11 -11
- package/dist/api/verifications/index.js.map +1 -0
- package/dist/batch/index.d.ts.map +1 -0
- package/dist/bucket/index.d.ts.map +1 -0
- package/dist/cache/{index.d.ts → core/index.d.ts} +4 -4
- package/dist/cache/core/index.d.ts.map +1 -0
- package/dist/cache/{index.js → core/index.js} +5 -5
- package/dist/cache/core/index.js.map +1 -0
- package/dist/{cache-redis → cache/redis}/index.d.ts +2 -2
- package/dist/cache/redis/index.d.ts.map +1 -0
- package/dist/{cache-redis → cache/redis}/index.js +2 -2
- package/dist/cache/redis/index.js.map +1 -0
- package/dist/cli/index.d.ts +78 -58
- package/dist/cli/index.d.ts.map +1 -0
- package/dist/cli/index.js +454 -154
- package/dist/cli/index.js.map +1 -1
- package/dist/command/index.d.ts +15 -5
- package/dist/command/index.d.ts.map +1 -0
- package/dist/command/index.js +45 -6
- package/dist/command/index.js.map +1 -1
- package/dist/core/index.browser.js +1334 -1318
- package/dist/core/index.browser.js.map +1 -1
- package/dist/core/index.d.ts +75 -71
- package/dist/core/index.d.ts.map +1 -0
- package/dist/core/index.js +1337 -1321
- package/dist/core/index.js.map +1 -1
- package/dist/core/index.native.js +1337 -1321
- package/dist/core/index.native.js.map +1 -1
- package/dist/datetime/index.d.ts.map +1 -0
- package/dist/email/index.d.ts.map +1 -0
- package/dist/fake/index.d.ts.map +1 -0
- package/dist/file/index.d.ts.map +1 -0
- package/dist/lock/{index.d.ts → core/index.d.ts} +5 -5
- package/dist/lock/core/index.d.ts.map +1 -0
- package/dist/lock/{index.js → core/index.js} +5 -5
- package/dist/lock/core/index.js.map +1 -0
- package/dist/{lock-redis → lock/redis}/index.d.ts +2 -2
- package/dist/lock/redis/index.d.ts.map +1 -0
- package/dist/{lock-redis → lock/redis}/index.js +2 -2
- package/dist/lock/redis/index.js.map +1 -0
- package/dist/logger/index.d.ts +1 -0
- package/dist/logger/index.d.ts.map +1 -0
- package/dist/mcp/index.d.ts +820 -0
- package/dist/mcp/index.d.ts.map +1 -0
- package/dist/mcp/index.js +978 -0
- package/dist/mcp/index.js.map +1 -0
- package/dist/orm/index.d.ts +180 -107
- package/dist/orm/index.d.ts.map +1 -0
- package/dist/orm/index.js +260 -174
- package/dist/orm/index.js.map +1 -1
- package/dist/queue/core/index.d.ts +548 -0
- package/dist/queue/core/index.d.ts.map +1 -0
- package/dist/queue/core/index.js +391 -0
- package/dist/queue/core/index.js.map +1 -0
- package/dist/queue/redis/index.d.ts +28 -0
- package/dist/queue/redis/index.d.ts.map +1 -0
- package/dist/queue/redis/index.js +43 -0
- package/dist/queue/redis/index.js.map +1 -0
- package/dist/redis/index.d.ts.map +1 -0
- package/dist/retry/index.d.ts.map +1 -0
- package/dist/router/index.d.ts.map +1 -0
- package/dist/scheduler/index.d.ts +1 -1
- package/dist/scheduler/index.d.ts.map +1 -0
- package/dist/scheduler/index.js +1 -393
- package/dist/scheduler/index.js.map +1 -1
- package/dist/security/index.d.ts +1 -1
- package/dist/security/index.d.ts.map +1 -0
- package/dist/security/index.js +2 -1413
- package/dist/security/index.js.map +1 -1
- package/dist/{server-auth → server/auth}/index.browser.js +6 -6
- package/dist/server/auth/index.browser.js.map +1 -0
- package/dist/{server-auth → server/auth}/index.d.ts +167 -167
- package/dist/server/auth/index.d.ts.map +1 -0
- package/dist/server/auth/index.js +742 -0
- package/dist/server/auth/index.js.map +1 -0
- package/dist/{server-cache → server/cache}/index.d.ts +2 -2
- package/dist/server/cache/index.d.ts.map +1 -0
- package/dist/{server-cache → server/cache}/index.js +2 -2
- package/dist/server/cache/index.js.map +1 -0
- package/dist/{server-compress → server/compress}/index.d.ts +2 -2
- package/dist/server/compress/index.d.ts.map +1 -0
- package/dist/{server-compress → server/compress}/index.js +2 -2
- package/dist/server/compress/index.js.map +1 -0
- package/dist/{server-cookies → server/cookies}/index.browser.js +3 -3
- package/dist/server/cookies/index.browser.js.map +1 -0
- package/dist/{server-cookies → server/cookies}/index.d.ts +4 -4
- package/dist/server/cookies/index.d.ts.map +1 -0
- package/dist/{server-cookies → server/cookies}/index.js +4 -4
- package/dist/server/cookies/index.js.map +1 -0
- package/dist/server/{index.browser.js → core/index.browser.js} +14 -14
- package/dist/server/core/index.browser.js.map +1 -0
- package/dist/server/{index.d.ts → core/index.d.ts} +36 -36
- package/dist/server/core/index.d.ts.map +1 -0
- package/dist/server/{index.js → core/index.js} +27 -27
- package/dist/server/core/index.js.map +1 -0
- package/dist/{server-cors → server/cors}/index.d.ts +3 -3
- package/dist/server/cors/index.d.ts.map +1 -0
- package/dist/{server-cors → server/cors}/index.js +3 -3
- package/dist/server/cors/index.js.map +1 -0
- package/dist/{server-health → server/health}/index.d.ts +3 -3
- package/dist/server/health/index.d.ts.map +1 -0
- package/dist/{server-health → server/health}/index.js +3 -3
- package/dist/server/health/index.js.map +1 -0
- package/dist/{server-helmet → server/helmet}/index.d.ts +2 -2
- package/dist/server/helmet/index.d.ts.map +1 -0
- package/dist/{server-helmet → server/helmet}/index.js +2 -2
- package/dist/server/helmet/index.js.map +1 -0
- package/dist/{server-links → server/links}/index.browser.js +5 -5
- package/dist/server/links/index.browser.js.map +1 -0
- package/dist/{server-links → server/links}/index.d.ts +40 -40
- package/dist/server/links/index.d.ts.map +1 -0
- package/dist/{server-links → server/links}/index.js +7 -7
- package/dist/server/links/index.js.map +1 -0
- package/dist/{server-metrics → server/metrics}/index.d.ts +2 -2
- package/dist/server/metrics/index.d.ts.map +1 -0
- package/dist/server/metrics/index.js +74 -0
- package/dist/server/metrics/index.js.map +1 -0
- package/dist/{server-multipart → server/multipart}/index.d.ts +2 -2
- package/dist/server/multipart/index.d.ts.map +1 -0
- package/dist/{server-multipart → server/multipart}/index.js +2 -2
- package/dist/server/multipart/index.js.map +1 -0
- package/dist/{server-proxy → server/proxy}/index.d.ts +3 -3
- package/dist/server/proxy/index.d.ts.map +1 -0
- package/dist/{server-proxy → server/proxy}/index.js +3 -3
- package/dist/server/proxy/index.js.map +1 -0
- package/dist/{server-rate-limit → server/rate-limit}/index.d.ts +4 -4
- package/dist/server/rate-limit/index.d.ts.map +1 -0
- package/dist/{server-rate-limit → server/rate-limit}/index.js +4 -4
- package/dist/server/rate-limit/index.js.map +1 -0
- package/dist/{server-security → server/security}/index.browser.js +1 -1
- package/dist/server/security/index.browser.js.map +1 -0
- package/dist/{server-security → server/security}/index.d.ts +4 -4
- package/dist/server/security/index.d.ts.map +1 -0
- package/dist/{server-security → server/security}/index.js +4 -4
- package/dist/server/security/index.js.map +1 -0
- package/dist/{server-static → server/static}/index.d.ts +3 -3
- package/dist/server/static/index.d.ts.map +1 -0
- package/dist/{server-static → server/static}/index.js +3 -3
- package/dist/server/static/index.js.map +1 -0
- package/dist/{server-swagger → server/swagger}/index.d.ts +3 -3
- package/dist/server/swagger/index.d.ts.map +1 -0
- package/dist/{server-swagger → server/swagger}/index.js +4 -4
- package/dist/server/swagger/index.js.map +1 -0
- package/dist/sms/index.d.ts.map +1 -0
- package/dist/thread/index.d.ts.map +1 -0
- package/dist/topic/{index.d.ts → core/index.d.ts} +6 -6
- package/dist/topic/core/index.d.ts.map +1 -0
- package/dist/topic/{index.js → core/index.js} +6 -6
- package/dist/topic/core/index.js.map +1 -0
- package/dist/{topic-redis → topic/redis}/index.d.ts +2 -2
- package/dist/topic/redis/index.d.ts.map +1 -0
- package/dist/{topic-redis → topic/redis}/index.js +2 -2
- package/dist/topic/redis/index.js.map +1 -0
- package/dist/vite/index.d.ts +21 -2
- package/dist/vite/index.d.ts.map +1 -0
- package/dist/vite/index.js +48 -19
- package/dist/vite/index.js.map +1 -1
- package/dist/websocket/index.d.ts.map +1 -0
- package/package.json +162 -158
- package/src/{api-files → api/files}/index.ts +1 -0
- package/src/{api-parameters → api/parameters}/index.ts +1 -1
- package/src/{api-users → api/users}/primitives/$userRealm.ts +1 -1
- package/src/{api-users → api/users}/providers/UserRealmProvider.ts +6 -7
- package/src/{api-verifications → api/verifications}/index.ts +2 -0
- package/src/cli/apps/AlephaCli.ts +2 -0
- package/src/cli/apps/AlephaPackageBuilderCli.ts +83 -54
- package/src/cli/assets/appRouterTs.ts +1 -1
- package/src/cli/assets/biomeJson.ts +1 -1
- package/src/cli/assets/indexHtml.ts +1 -1
- package/src/cli/assets/mainBrowserTs.ts +1 -1
- package/src/cli/assets/mainTs.ts +9 -10
- package/src/cli/assets/viteConfigTs.ts +1 -1
- package/src/cli/commands/ChangelogCommands.ts +389 -0
- package/src/cli/commands/CoreCommands.ts +10 -6
- package/src/cli/commands/DrizzleCommands.ts +204 -4
- package/src/cli/commands/VerifyCommands.ts +4 -1
- package/src/cli/commands/ViteCommands.ts +46 -25
- package/src/cli/services/AlephaCliUtils.ts +52 -164
- package/src/command/providers/CliProvider.ts +76 -5
- package/src/core/providers/SchemaValidator.ts +24 -2
- package/src/mcp/errors/McpError.ts +72 -0
- package/src/mcp/helpers/jsonrpc.ts +163 -0
- package/src/mcp/index.ts +132 -0
- package/src/mcp/interfaces/McpTypes.ts +248 -0
- package/src/mcp/primitives/$prompt.ts +188 -0
- package/src/mcp/primitives/$resource.ts +171 -0
- package/src/mcp/primitives/$tool.ts +285 -0
- package/src/mcp/providers/McpServerProvider.ts +382 -0
- package/src/mcp/transports/SseMcpTransport.ts +172 -0
- package/src/mcp/transports/StdioMcpTransport.ts +126 -0
- package/src/orm/index.ts +12 -0
- package/src/orm/providers/drivers/CloudflareD1Provider.ts +164 -0
- package/src/orm/providers/drivers/NodeSqliteProvider.ts +3 -1
- package/src/queue/{index.ts → core/index.ts} +2 -3
- package/src/queue/{primitives → core/primitives}/$queue.ts +17 -162
- package/src/queue/core/providers/MemoryQueueProvider.ts +19 -0
- package/src/queue/core/providers/QueueProvider.ts +23 -0
- package/src/queue/core/providers/WorkerProvider.ts +244 -0
- package/src/queue/redis/providers/RedisQueueProvider.ts +31 -0
- package/src/server/{index.ts → core/index.ts} +1 -0
- package/src/{server-rate-limit → server/rate-limit}/index.ts +1 -1
- package/src/{server-swagger → server/swagger}/providers/ServerSwaggerProvider.ts +1 -0
- package/src/vite/plugins/viteAlephaBuild.ts +8 -2
- package/src/vite/plugins/viteAlephaDev.ts +6 -2
- package/src/vite/tasks/buildServer.ts +1 -1
- package/src/vite/tasks/copyAssets.ts +32 -8
- package/src/vite/tasks/generateCloudflare.ts +43 -15
- package/src/vite/tasks/runAlepha.ts +1 -0
- package/dist/api-audits/index.browser.js.map +0 -1
- package/dist/api-audits/index.js.map +0 -1
- package/dist/api-files/index.browser.js.map +0 -1
- package/dist/api-files/index.js.map +0 -1
- package/dist/api-jobs/index.browser.js.map +0 -1
- package/dist/api-jobs/index.js.map +0 -1
- package/dist/api-notifications/index.browser.js.map +0 -1
- package/dist/api-notifications/index.d.ts +0 -327
- package/dist/api-notifications/index.js.map +0 -1
- package/dist/api-parameters/index.browser.js.map +0 -1
- package/dist/api-parameters/index.js.map +0 -1
- package/dist/api-users/index.browser.js.map +0 -1
- package/dist/api-users/index.js.map +0 -1
- package/dist/api-verifications/index.browser.js.map +0 -1
- package/dist/api-verifications/index.d.ts +0 -229
- package/dist/api-verifications/index.js.map +0 -1
- package/dist/cache/index.js.map +0 -1
- package/dist/cache-redis/index.js.map +0 -1
- package/dist/lock/index.js.map +0 -1
- package/dist/lock-redis/index.js.map +0 -1
- package/dist/queue/index.d.ts +0 -1265
- package/dist/queue/index.js +0 -1037
- package/dist/queue/index.js.map +0 -1
- package/dist/queue-redis/index.d.ts +0 -82
- package/dist/queue-redis/index.js +0 -872
- package/dist/queue-redis/index.js.map +0 -1
- package/dist/server/index.browser.js.map +0 -1
- package/dist/server/index.js.map +0 -1
- package/dist/server-auth/index.browser.js.map +0 -1
- package/dist/server-auth/index.js +0 -1973
- package/dist/server-auth/index.js.map +0 -1
- package/dist/server-cache/index.js.map +0 -1
- package/dist/server-compress/index.js.map +0 -1
- package/dist/server-cookies/index.browser.js.map +0 -1
- package/dist/server-cookies/index.js.map +0 -1
- package/dist/server-cors/index.js.map +0 -1
- package/dist/server-health/index.js.map +0 -1
- package/dist/server-helmet/index.js.map +0 -1
- package/dist/server-links/index.browser.js.map +0 -1
- package/dist/server-links/index.js.map +0 -1
- package/dist/server-metrics/index.js +0 -4532
- package/dist/server-metrics/index.js.map +0 -1
- package/dist/server-multipart/index.js.map +0 -1
- package/dist/server-proxy/index.js.map +0 -1
- package/dist/server-rate-limit/index.js.map +0 -1
- package/dist/server-security/index.browser.js.map +0 -1
- package/dist/server-security/index.js.map +0 -1
- package/dist/server-static/index.js.map +0 -1
- package/dist/server-swagger/index.js.map +0 -1
- package/dist/topic/index.js.map +0 -1
- package/dist/topic-redis/index.js.map +0 -1
- package/src/queue/interfaces/QueueJob.ts +0 -459
- package/src/queue/providers/MemoryQueueProvider.ts +0 -850
- package/src/queue/providers/QueueProvider.ts +0 -319
- package/src/queue/providers/WorkerProvider.ts +0 -344
- package/src/queue-redis/providers/RedisQueueProvider.ts +0 -1209
- /package/src/{api-audits → api/audits}/controllers/AuditController.ts +0 -0
- /package/src/{api-audits → api/audits}/entities/audits.ts +0 -0
- /package/src/{api-audits → api/audits}/index.browser.ts +0 -0
- /package/src/{api-audits → api/audits}/index.ts +0 -0
- /package/src/{api-audits → api/audits}/primitives/$audit.ts +0 -0
- /package/src/{api-audits → api/audits}/schemas/auditQuerySchema.ts +0 -0
- /package/src/{api-audits → api/audits}/schemas/auditResourceSchema.ts +0 -0
- /package/src/{api-audits → api/audits}/schemas/createAuditSchema.ts +0 -0
- /package/src/{api-audits → api/audits}/services/AuditService.ts +0 -0
- /package/src/{api-files → api/files}/controllers/FileController.ts +0 -0
- /package/src/{api-files → api/files}/controllers/StorageStatsController.ts +0 -0
- /package/src/{api-files → api/files}/entities/files.ts +0 -0
- /package/src/{api-files → api/files}/index.browser.ts +0 -0
- /package/src/{api-files → api/files}/jobs/FileJobs.ts +0 -0
- /package/src/{api-files → api/files}/schemas/fileQuerySchema.ts +0 -0
- /package/src/{api-files → api/files}/schemas/fileResourceSchema.ts +0 -0
- /package/src/{api-files → api/files}/schemas/storageStatsSchema.ts +0 -0
- /package/src/{api-files → api/files}/services/FileService.ts +0 -0
- /package/src/{api-jobs → api/jobs}/controllers/JobController.ts +0 -0
- /package/src/{api-jobs → api/jobs}/entities/jobExecutions.ts +0 -0
- /package/src/{api-jobs → api/jobs}/index.browser.ts +0 -0
- /package/src/{api-jobs → api/jobs}/index.ts +0 -0
- /package/src/{api-jobs → api/jobs}/primitives/$job.ts +0 -0
- /package/src/{api-jobs → api/jobs}/providers/JobProvider.ts +0 -0
- /package/src/{api-jobs → api/jobs}/schemas/jobExecutionQuerySchema.ts +0 -0
- /package/src/{api-jobs → api/jobs}/schemas/jobExecutionResourceSchema.ts +0 -0
- /package/src/{api-jobs → api/jobs}/schemas/triggerJobSchema.ts +0 -0
- /package/src/{api-jobs → api/jobs}/services/JobService.ts +0 -0
- /package/src/{api-notifications → api/notifications}/controllers/NotificationController.ts +0 -0
- /package/src/{api-notifications → api/notifications}/entities/notifications.ts +0 -0
- /package/src/{api-notifications → api/notifications}/index.browser.ts +0 -0
- /package/src/{api-notifications → api/notifications}/index.ts +0 -0
- /package/src/{api-notifications → api/notifications}/jobs/NotificationJobs.ts +0 -0
- /package/src/{api-notifications → api/notifications}/primitives/$notification.ts +0 -0
- /package/src/{api-notifications → api/notifications}/queues/NotificationQueues.ts +0 -0
- /package/src/{api-notifications → api/notifications}/schemas/notificationContactPreferencesSchema.ts +0 -0
- /package/src/{api-notifications → api/notifications}/schemas/notificationContactSchema.ts +0 -0
- /package/src/{api-notifications → api/notifications}/schemas/notificationCreateSchema.ts +0 -0
- /package/src/{api-notifications → api/notifications}/schemas/notificationQuerySchema.ts +0 -0
- /package/src/{api-notifications → api/notifications}/services/NotificationSenderService.ts +0 -0
- /package/src/{api-notifications → api/notifications}/services/NotificationService.ts +0 -0
- /package/src/{api-parameters → api/parameters}/controllers/ConfigController.ts +0 -0
- /package/src/{api-parameters → api/parameters}/entities/parameters.ts +0 -0
- /package/src/{api-parameters → api/parameters}/index.browser.ts +0 -0
- /package/src/{api-parameters → api/parameters}/primitives/$config.ts +0 -0
- /package/src/{api-parameters → api/parameters}/schedulers/ConfigActivationScheduler.ts +0 -0
- /package/src/{api-parameters → api/parameters}/services/ConfigStore.ts +0 -0
- /package/src/{api-users → api/users}/atoms/realmAuthSettingsAtom.ts +0 -0
- /package/src/{api-users → api/users}/controllers/IdentityController.ts +0 -0
- /package/src/{api-users → api/users}/controllers/SessionController.ts +0 -0
- /package/src/{api-users → api/users}/controllers/UserController.ts +0 -0
- /package/src/{api-users → api/users}/controllers/UserRealmController.ts +0 -0
- /package/src/{api-users → api/users}/entities/identities.ts +0 -0
- /package/src/{api-users → api/users}/entities/sessions.ts +0 -0
- /package/src/{api-users → api/users}/entities/users.ts +0 -0
- /package/src/{api-users → api/users}/index.browser.ts +0 -0
- /package/src/{api-users → api/users}/index.ts +0 -0
- /package/src/{api-users → api/users}/notifications/UserNotifications.ts +0 -0
- /package/src/{api-users → api/users}/schemas/completePasswordResetRequestSchema.ts +0 -0
- /package/src/{api-users → api/users}/schemas/completeRegistrationRequestSchema.ts +0 -0
- /package/src/{api-users → api/users}/schemas/createUserSchema.ts +0 -0
- /package/src/{api-users → api/users}/schemas/identityQuerySchema.ts +0 -0
- /package/src/{api-users → api/users}/schemas/identityResourceSchema.ts +0 -0
- /package/src/{api-users → api/users}/schemas/loginSchema.ts +0 -0
- /package/src/{api-users → api/users}/schemas/passwordResetIntentResponseSchema.ts +0 -0
- /package/src/{api-users → api/users}/schemas/registerQuerySchema.ts +0 -0
- /package/src/{api-users → api/users}/schemas/registerRequestSchema.ts +0 -0
- /package/src/{api-users → api/users}/schemas/registerResponseSchema.ts +0 -0
- /package/src/{api-users → api/users}/schemas/registerSchema.ts +0 -0
- /package/src/{api-users → api/users}/schemas/registrationIntentResponseSchema.ts +0 -0
- /package/src/{api-users → api/users}/schemas/resetPasswordSchema.ts +0 -0
- /package/src/{api-users → api/users}/schemas/sessionQuerySchema.ts +0 -0
- /package/src/{api-users → api/users}/schemas/sessionResourceSchema.ts +0 -0
- /package/src/{api-users → api/users}/schemas/updateUserSchema.ts +0 -0
- /package/src/{api-users → api/users}/schemas/userQuerySchema.ts +0 -0
- /package/src/{api-users → api/users}/schemas/userRealmConfigSchema.ts +0 -0
- /package/src/{api-users → api/users}/schemas/userResourceSchema.ts +0 -0
- /package/src/{api-users → api/users}/services/CredentialService.ts +0 -0
- /package/src/{api-users → api/users}/services/IdentityService.ts +0 -0
- /package/src/{api-users → api/users}/services/RegistrationService.ts +0 -0
- /package/src/{api-users → api/users}/services/SessionCrudService.ts +0 -0
- /package/src/{api-users → api/users}/services/SessionService.ts +0 -0
- /package/src/{api-users → api/users}/services/UserService.ts +0 -0
- /package/src/{api-verifications → api/verifications}/controllers/VerificationController.ts +0 -0
- /package/src/{api-verifications → api/verifications}/entities/verifications.ts +0 -0
- /package/src/{api-verifications → api/verifications}/index.browser.ts +0 -0
- /package/src/{api-verifications → api/verifications}/jobs/VerificationJobs.ts +0 -0
- /package/src/{api-verifications → api/verifications}/parameters/VerificationParameters.ts +0 -0
- /package/src/{api-verifications → api/verifications}/schemas/requestVerificationCodeResponseSchema.ts +0 -0
- /package/src/{api-verifications → api/verifications}/schemas/validateVerificationCodeResponseSchema.ts +0 -0
- /package/src/{api-verifications → api/verifications}/schemas/verificationSettingsSchema.ts +0 -0
- /package/src/{api-verifications → api/verifications}/schemas/verificationTypeEnumSchema.ts +0 -0
- /package/src/{api-verifications → api/verifications}/services/VerificationService.ts +0 -0
- /package/src/cache/{errors → core/errors}/CacheError.ts +0 -0
- /package/src/cache/{index.ts → core/index.ts} +0 -0
- /package/src/cache/{primitives → core/primitives}/$cache.ts +0 -0
- /package/src/cache/{providers → core/providers}/CacheProvider.ts +0 -0
- /package/src/cache/{providers → core/providers}/MemoryCacheProvider.ts +0 -0
- /package/src/{cache-redis → cache/redis}/index.ts +0 -0
- /package/src/{cache-redis → cache/redis}/providers/RedisCacheProvider.ts +0 -0
- /package/src/lock/{index.ts → core/index.ts} +0 -0
- /package/src/lock/{primitives → core/primitives}/$lock.ts +0 -0
- /package/src/lock/{providers → core/providers}/LockProvider.ts +0 -0
- /package/src/lock/{providers → core/providers}/LockTopicProvider.ts +0 -0
- /package/src/lock/{providers → core/providers}/MemoryLockProvider.ts +0 -0
- /package/src/{lock-redis → lock/redis}/index.ts +0 -0
- /package/src/{lock-redis → lock/redis}/providers/RedisLockProvider.ts +0 -0
- /package/src/queue/{primitives → core/primitives}/$consumer.ts +0 -0
- /package/src/{queue-redis → queue/redis}/index.ts +0 -0
- /package/src/{server-auth → server/auth}/constants/routes.ts +0 -0
- /package/src/{server-auth → server/auth}/index.browser.ts +0 -0
- /package/src/{server-auth → server/auth}/index.shared.ts +0 -0
- /package/src/{server-auth → server/auth}/index.ts +0 -0
- /package/src/{server-auth → server/auth}/primitives/$auth.ts +0 -0
- /package/src/{server-auth → server/auth}/primitives/$authApple.ts +0 -0
- /package/src/{server-auth → server/auth}/primitives/$authCredentials.ts +0 -0
- /package/src/{server-auth → server/auth}/primitives/$authGithub.ts +0 -0
- /package/src/{server-auth → server/auth}/primitives/$authGoogle.ts +0 -0
- /package/src/{server-auth → server/auth}/providers/ServerAuthProvider.ts +0 -0
- /package/src/{server-auth → server/auth}/schemas/authenticationProviderSchema.ts +0 -0
- /package/src/{server-auth → server/auth}/schemas/tokenResponseSchema.ts +0 -0
- /package/src/{server-auth → server/auth}/schemas/tokensSchema.ts +0 -0
- /package/src/{server-auth → server/auth}/schemas/userinfoResponseSchema.ts +0 -0
- /package/src/{server-cache → server/cache}/index.ts +0 -0
- /package/src/{server-cache → server/cache}/providers/ServerCacheProvider.ts +0 -0
- /package/src/{server-compress → server/compress}/index.ts +0 -0
- /package/src/{server-compress → server/compress}/providers/ServerCompressProvider.ts +0 -0
- /package/src/{server-cookies → server/cookies}/index.browser.ts +0 -0
- /package/src/{server-cookies → server/cookies}/index.ts +0 -0
- /package/src/{server-cookies → server/cookies}/primitives/$cookie.browser.ts +0 -0
- /package/src/{server-cookies → server/cookies}/primitives/$cookie.ts +0 -0
- /package/src/{server-cookies → server/cookies}/providers/ServerCookiesProvider.ts +0 -0
- /package/src/{server-cookies → server/cookies}/services/CookieParser.ts +0 -0
- /package/src/server/{constants → core/constants}/routeMethods.ts +0 -0
- /package/src/server/{errors → core/errors}/BadRequestError.ts +0 -0
- /package/src/server/{errors → core/errors}/ConflictError.ts +0 -0
- /package/src/server/{errors → core/errors}/ForbiddenError.ts +0 -0
- /package/src/server/{errors → core/errors}/HttpError.ts +0 -0
- /package/src/server/{errors → core/errors}/NotFoundError.ts +0 -0
- /package/src/server/{errors → core/errors}/UnauthorizedError.ts +0 -0
- /package/src/server/{errors → core/errors}/ValidationError.ts +0 -0
- /package/src/server/{helpers → core/helpers}/ServerReply.ts +0 -0
- /package/src/server/{helpers → core/helpers}/isMultipart.ts +0 -0
- /package/src/server/{index.browser.ts → core/index.browser.ts} +0 -0
- /package/src/server/{index.shared.ts → core/index.shared.ts} +0 -0
- /package/src/server/{interfaces → core/interfaces}/ServerRequest.ts +0 -0
- /package/src/server/{primitives → core/primitives}/$action.ts +0 -0
- /package/src/server/{primitives → core/primitives}/$route.ts +0 -0
- /package/src/server/{providers → core/providers}/BunHttpServerProvider.ts +0 -0
- /package/src/server/{providers → core/providers}/NodeHttpServerProvider.ts +0 -0
- /package/src/server/{providers → core/providers}/ServerBodyParserProvider.ts +0 -0
- /package/src/server/{providers → core/providers}/ServerLoggerProvider.ts +0 -0
- /package/src/server/{providers → core/providers}/ServerNotReadyProvider.ts +0 -0
- /package/src/server/{providers → core/providers}/ServerProvider.ts +0 -0
- /package/src/server/{providers → core/providers}/ServerRouterProvider.ts +0 -0
- /package/src/server/{providers → core/providers}/ServerTimingProvider.ts +0 -0
- /package/src/server/{schemas → core/schemas}/errorSchema.ts +0 -0
- /package/src/server/{schemas → core/schemas}/okSchema.ts +0 -0
- /package/src/server/{services → core/services}/HttpClient.ts +0 -0
- /package/src/server/{services → core/services}/ServerRequestParser.ts +0 -0
- /package/src/server/{services → core/services}/UserAgentParser.ts +0 -0
- /package/src/{server-cors → server/cors}/index.ts +0 -0
- /package/src/{server-cors → server/cors}/primitives/$cors.ts +0 -0
- /package/src/{server-cors → server/cors}/providers/ServerCorsProvider.ts +0 -0
- /package/src/{server-health → server/health}/index.ts +0 -0
- /package/src/{server-health → server/health}/providers/ServerHealthProvider.ts +0 -0
- /package/src/{server-health → server/health}/schemas/healthSchema.ts +0 -0
- /package/src/{server-helmet → server/helmet}/index.ts +0 -0
- /package/src/{server-helmet → server/helmet}/providers/ServerHelmetProvider.ts +0 -0
- /package/src/{server-links → server/links}/index.browser.ts +0 -0
- /package/src/{server-links → server/links}/index.ts +0 -0
- /package/src/{server-links → server/links}/primitives/$client.ts +0 -0
- /package/src/{server-links → server/links}/primitives/$remote.ts +0 -0
- /package/src/{server-links → server/links}/providers/LinkProvider.ts +0 -0
- /package/src/{server-links → server/links}/providers/RemotePrimitiveProvider.ts +0 -0
- /package/src/{server-links → server/links}/providers/ServerLinksProvider.ts +0 -0
- /package/src/{server-links → server/links}/schemas/apiLinksResponseSchema.ts +0 -0
- /package/src/{server-metrics → server/metrics}/index.ts +0 -0
- /package/src/{server-metrics → server/metrics}/providers/ServerMetricsProvider.ts +0 -0
- /package/src/{server-multipart → server/multipart}/index.ts +0 -0
- /package/src/{server-multipart → server/multipart}/providers/ServerMultipartProvider.ts +0 -0
- /package/src/{server-proxy → server/proxy}/index.ts +0 -0
- /package/src/{server-proxy → server/proxy}/primitives/$proxy.ts +0 -0
- /package/src/{server-proxy → server/proxy}/providers/ServerProxyProvider.ts +0 -0
- /package/src/{server-rate-limit → server/rate-limit}/primitives/$rateLimit.ts +0 -0
- /package/src/{server-rate-limit → server/rate-limit}/providers/ServerRateLimitProvider.ts +0 -0
- /package/src/{server-security → server/security}/index.browser.ts +0 -0
- /package/src/{server-security → server/security}/index.ts +0 -0
- /package/src/{server-security → server/security}/primitives/$basicAuth.ts +0 -0
- /package/src/{server-security → server/security}/providers/ServerBasicAuthProvider.ts +0 -0
- /package/src/{server-security → server/security}/providers/ServerSecurityProvider.ts +0 -0
- /package/src/{server-static → server/static}/index.ts +0 -0
- /package/src/{server-static → server/static}/primitives/$serve.ts +0 -0
- /package/src/{server-static → server/static}/providers/ServerStaticProvider.ts +0 -0
- /package/src/{server-swagger → server/swagger}/index.ts +0 -0
- /package/src/{server-swagger → server/swagger}/primitives/$swagger.ts +0 -0
- /package/src/topic/{errors → core/errors}/TopicTimeoutError.ts +0 -0
- /package/src/topic/{index.ts → core/index.ts} +0 -0
- /package/src/topic/{primitives → core/primitives}/$subscriber.ts +0 -0
- /package/src/topic/{primitives → core/primitives}/$topic.ts +0 -0
- /package/src/topic/{providers → core/providers}/MemoryTopicProvider.ts +0 -0
- /package/src/topic/{providers → core/providers}/TopicProvider.ts +0 -0
- /package/src/{topic-redis → topic/redis}/index.ts +0 -0
- /package/src/{topic-redis → topic/redis}/providers/RedisTopicProvider.ts +0 -0
|
@@ -37,8 +37,10 @@ export class AlephaPackageBuilderCli {
|
|
|
37
37
|
pkgData.exports = {};
|
|
38
38
|
|
|
39
39
|
for (const item of modules) {
|
|
40
|
-
|
|
41
|
-
|
|
40
|
+
let m = `./${item.name.replace("core", "")}`;
|
|
41
|
+
if (m.endsWith("/")) m = m.slice(0, -1);
|
|
42
|
+
const path = m;
|
|
43
|
+
|
|
42
44
|
pkgData.exports[path] = {};
|
|
43
45
|
// order is important here for compatibility
|
|
44
46
|
pkgData.exports[path].types = `./src/${item.name}/index.ts`;
|
|
@@ -77,13 +79,14 @@ export class AlephaPackageBuilderCli {
|
|
|
77
79
|
JSON.stringify(modules, null, 2),
|
|
78
80
|
);
|
|
79
81
|
|
|
80
|
-
const
|
|
81
|
-
"
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
82
|
+
const tsconfig = await readFile(
|
|
83
|
+
join(root, "../../tsconfig.json"),
|
|
84
|
+
"utf-8",
|
|
85
|
+
);
|
|
86
|
+
|
|
87
|
+
const external: string[] = Object.keys(
|
|
88
|
+
JSON.parse(tsconfig).compilerOptions.paths,
|
|
89
|
+
);
|
|
87
90
|
|
|
88
91
|
await run.rm(this.dist);
|
|
89
92
|
|
|
@@ -100,6 +103,10 @@ export class AlephaPackageBuilderCli {
|
|
|
100
103
|
fixedExtension: false,
|
|
101
104
|
platform: "node", // TODO: node must be enabled only if index.node.ts exists
|
|
102
105
|
external,
|
|
106
|
+
dts: {
|
|
107
|
+
sourcemap: true,
|
|
108
|
+
resolve: false,
|
|
109
|
+
},
|
|
103
110
|
});
|
|
104
111
|
|
|
105
112
|
if (item.native) {
|
|
@@ -124,13 +131,16 @@ export class AlephaPackageBuilderCli {
|
|
|
124
131
|
});
|
|
125
132
|
}
|
|
126
133
|
|
|
127
|
-
const config = join(
|
|
134
|
+
const config = join(
|
|
135
|
+
tmpDir,
|
|
136
|
+
`tsdown-${item.name.replace("/", "-")}.config.js`,
|
|
137
|
+
);
|
|
128
138
|
await this.fs.writeFile(
|
|
129
139
|
config,
|
|
130
140
|
`export default ${JSON.stringify(entries, null, 2)};`,
|
|
131
141
|
);
|
|
132
142
|
await run(`npx tsdown -c=${config}`);
|
|
133
|
-
await this.fs.rm(config);
|
|
143
|
+
//await this.fs.rm(config);
|
|
134
144
|
};
|
|
135
145
|
|
|
136
146
|
const concurrency = Math.ceil(os.cpus().length / 2);
|
|
@@ -257,57 +267,76 @@ export async function analyzeModules(
|
|
|
257
267
|
packageName: string,
|
|
258
268
|
): Promise<Module[]> {
|
|
259
269
|
const modules: Module[] = [];
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
|
|
270
|
+
|
|
271
|
+
async function scanDirectory(dir: string, prefix: string): Promise<void> {
|
|
272
|
+
const entries = await readdir(dir, { withFileTypes: true });
|
|
273
|
+
|
|
274
|
+
for (const entry of entries) {
|
|
275
|
+
if (entry.isDirectory()) {
|
|
276
|
+
const moduleName = prefix ? `${prefix}/${entry.name}` : entry.name;
|
|
277
|
+
const modulePath = join(dir, entry.name);
|
|
278
|
+
|
|
279
|
+
// Check if this directory has an index.ts (is a module)
|
|
280
|
+
const hasIndex = await fileExists(join(modulePath, "index.ts"));
|
|
281
|
+
|
|
282
|
+
if (hasIndex) {
|
|
283
|
+
// This is a module
|
|
284
|
+
const dependencies = new Set<string>();
|
|
285
|
+
|
|
286
|
+
// Check for browser/node entry points
|
|
287
|
+
const hasBrowser = await fileExists(
|
|
288
|
+
join(modulePath, "index.browser.ts"),
|
|
289
|
+
);
|
|
290
|
+
const hasNative = await fileExists(
|
|
291
|
+
join(modulePath, "index.native.ts"),
|
|
292
|
+
);
|
|
293
|
+
const hasNode = await fileExists(join(modulePath, "index.node.ts"));
|
|
294
|
+
|
|
295
|
+
// Get all .ts/.tsx files in this module
|
|
296
|
+
const files = await getAllFiles(modulePath);
|
|
297
|
+
|
|
298
|
+
for (const file of files) {
|
|
299
|
+
const content = await readFile(file, "utf-8");
|
|
300
|
+
const deps = extractAlephaDependencies(
|
|
301
|
+
content,
|
|
302
|
+
packageName,
|
|
303
|
+
moduleName,
|
|
292
304
|
);
|
|
305
|
+
for (const dep of deps) {
|
|
306
|
+
if (dep.endsWith(".ts")) {
|
|
307
|
+
throw new Error(
|
|
308
|
+
`Invalid dependency '${dep}' in module '${moduleName}'. Do not include file extensions in Alepha module imports.`,
|
|
309
|
+
);
|
|
310
|
+
}
|
|
311
|
+
if (dep.includes("-")) {
|
|
312
|
+
throw new Error(
|
|
313
|
+
`Invalid dependency '${dep}' in module '${moduleName}'. Use '/' instead of '-' in Alepha module imports.`,
|
|
314
|
+
);
|
|
315
|
+
}
|
|
316
|
+
dependencies.add(dep);
|
|
317
|
+
}
|
|
293
318
|
}
|
|
294
|
-
dependencies.add(dep);
|
|
295
|
-
}
|
|
296
|
-
}
|
|
297
319
|
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
|
|
301
|
-
|
|
320
|
+
const module: Module = {
|
|
321
|
+
name: moduleName,
|
|
322
|
+
dependencies: Array.from(dependencies),
|
|
323
|
+
};
|
|
302
324
|
|
|
303
|
-
|
|
304
|
-
|
|
305
|
-
|
|
325
|
+
if (hasNative) module.native = true;
|
|
326
|
+
if (hasBrowser) module.browser = true;
|
|
327
|
+
if (hasNode) module.node = true;
|
|
306
328
|
|
|
307
|
-
|
|
329
|
+
modules.push(module);
|
|
330
|
+
} else {
|
|
331
|
+
// No index.ts, check subdirectories for modules
|
|
332
|
+
await scanDirectory(modulePath, moduleName);
|
|
333
|
+
}
|
|
334
|
+
}
|
|
308
335
|
}
|
|
309
336
|
}
|
|
310
337
|
|
|
338
|
+
await scanDirectory(srcDir, "");
|
|
339
|
+
|
|
311
340
|
// Check for circular dependencies
|
|
312
341
|
detectCircularDependencies(modules);
|
|
313
342
|
|
package/src/cli/assets/mainTs.ts
CHANGED
|
@@ -1,14 +1,13 @@
|
|
|
1
1
|
export const mainTs = () => `
|
|
2
|
-
import {
|
|
3
|
-
import { $
|
|
2
|
+
import { run } from "alepha";
|
|
3
|
+
import { $route } from "alepha/server";
|
|
4
4
|
|
|
5
|
-
|
|
5
|
+
class App {
|
|
6
|
+
root = $route({
|
|
7
|
+
path: "/",
|
|
8
|
+
handler: () => "Hello, Alepha!",
|
|
9
|
+
});
|
|
10
|
+
}
|
|
6
11
|
|
|
7
|
-
|
|
8
|
-
const log = $logger();
|
|
9
|
-
|
|
10
|
-
log.info("Hello from Alepha!");
|
|
11
|
-
});
|
|
12
|
-
|
|
13
|
-
run(alepha);
|
|
12
|
+
run(App);
|
|
14
13
|
`.trim();
|
|
@@ -0,0 +1,389 @@
|
|
|
1
|
+
import { exec } from "node:child_process";
|
|
2
|
+
import { readFile, writeFile } from "node:fs/promises";
|
|
3
|
+
import { join } from "node:path";
|
|
4
|
+
import { promisify } from "node:util";
|
|
5
|
+
import { t } from "alepha";
|
|
6
|
+
import { $command } from "alepha/command";
|
|
7
|
+
|
|
8
|
+
const execAsync = promisify(exec);
|
|
9
|
+
|
|
10
|
+
interface Commit {
|
|
11
|
+
hash: string;
|
|
12
|
+
type: string;
|
|
13
|
+
scope: string | null;
|
|
14
|
+
description: string;
|
|
15
|
+
breaking: boolean;
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
interface ChangelogEntry {
|
|
19
|
+
version: string;
|
|
20
|
+
date: string;
|
|
21
|
+
features: Commit[];
|
|
22
|
+
fixes: Commit[];
|
|
23
|
+
docs: Commit[];
|
|
24
|
+
improvements: Commit[];
|
|
25
|
+
breaking: Commit[];
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
interface ChangelogConfig {
|
|
29
|
+
/**
|
|
30
|
+
* Commit prefixes to ignore (e.g., "project", "release", "chore")
|
|
31
|
+
*/
|
|
32
|
+
ignore?: string[];
|
|
33
|
+
/**
|
|
34
|
+
* Module scopes to recognize (e.g., "ui", "cli", "core")
|
|
35
|
+
* If not provided, all non-ignored scopes are included
|
|
36
|
+
*/
|
|
37
|
+
scopes?: string[];
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
const DEFAULT_IGNORE = [
|
|
41
|
+
"project",
|
|
42
|
+
"release",
|
|
43
|
+
"starter",
|
|
44
|
+
"example",
|
|
45
|
+
"chore",
|
|
46
|
+
"ci",
|
|
47
|
+
"build",
|
|
48
|
+
"test",
|
|
49
|
+
"style",
|
|
50
|
+
];
|
|
51
|
+
|
|
52
|
+
function parseCommit(line: string, config: ChangelogConfig): Commit | null {
|
|
53
|
+
const match = line.match(/^([a-f0-9]+)\s+(.+)$/);
|
|
54
|
+
if (!match) return null;
|
|
55
|
+
|
|
56
|
+
const [, hash, message] = match;
|
|
57
|
+
const breaking =
|
|
58
|
+
message.includes("!:") || message.toLowerCase().includes("breaking");
|
|
59
|
+
const ignore = config.ignore ?? DEFAULT_IGNORE;
|
|
60
|
+
|
|
61
|
+
// Conventional commit: feat(scope): description or feat!: description
|
|
62
|
+
const conventionalMatch = message.match(
|
|
63
|
+
/^(feat|fix|docs|refactor|perf|revert)(?:\(([^)]+)\))?!?:\s*(.+)$/i,
|
|
64
|
+
);
|
|
65
|
+
if (conventionalMatch) {
|
|
66
|
+
const [, type, scope, description] = conventionalMatch;
|
|
67
|
+
|
|
68
|
+
// Skip if scope matches ignore list
|
|
69
|
+
if (scope) {
|
|
70
|
+
const baseScope = scope.split("/")[0];
|
|
71
|
+
if (ignore.includes(baseScope) || ignore.includes(scope)) {
|
|
72
|
+
return null;
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
// Skip if type (without scope) matches ignore list (e.g., "docs" in ignore)
|
|
77
|
+
if (!scope && ignore.includes(type.toLowerCase())) {
|
|
78
|
+
return null;
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
return {
|
|
82
|
+
hash: hash.substring(0, 8),
|
|
83
|
+
type: type.toLowerCase(),
|
|
84
|
+
scope: scope || null,
|
|
85
|
+
description: description.trim(),
|
|
86
|
+
breaking,
|
|
87
|
+
};
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
// Module-specific commit: module: description or module/submodule: description
|
|
91
|
+
const moduleMatch = message.match(
|
|
92
|
+
/^([a-z][a-z0-9-]*(?:\/[a-z][a-z0-9-]*)?):\s*(.+)$/i,
|
|
93
|
+
);
|
|
94
|
+
if (moduleMatch) {
|
|
95
|
+
const [, module, description] = moduleMatch;
|
|
96
|
+
const baseModule = module.split("/")[0];
|
|
97
|
+
|
|
98
|
+
// Skip ignored prefixes
|
|
99
|
+
if (ignore.includes(baseModule)) {
|
|
100
|
+
return null;
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
// If scopes are defined, check if this is a known scope
|
|
104
|
+
if (config.scopes && !config.scopes.includes(baseModule)) {
|
|
105
|
+
return null;
|
|
106
|
+
}
|
|
107
|
+
|
|
108
|
+
// Determine type based on description keywords
|
|
109
|
+
const desc = description.toLowerCase();
|
|
110
|
+
let type = "improve";
|
|
111
|
+
if (
|
|
112
|
+
desc.includes("fix") ||
|
|
113
|
+
desc.includes("bug") ||
|
|
114
|
+
desc.includes("issue")
|
|
115
|
+
) {
|
|
116
|
+
type = "fix";
|
|
117
|
+
} else if (
|
|
118
|
+
desc.includes("add") ||
|
|
119
|
+
desc.includes("new") ||
|
|
120
|
+
desc.includes("implement")
|
|
121
|
+
) {
|
|
122
|
+
type = "feat";
|
|
123
|
+
}
|
|
124
|
+
|
|
125
|
+
return {
|
|
126
|
+
hash: hash.substring(0, 8),
|
|
127
|
+
type,
|
|
128
|
+
scope: module,
|
|
129
|
+
description: description.trim(),
|
|
130
|
+
breaking,
|
|
131
|
+
};
|
|
132
|
+
}
|
|
133
|
+
|
|
134
|
+
return null;
|
|
135
|
+
}
|
|
136
|
+
|
|
137
|
+
function formatCommit(commit: Commit): string {
|
|
138
|
+
const scope = commit.scope ? `**${commit.scope}**: ` : "";
|
|
139
|
+
return `- ${scope}${commit.description} (\`${commit.hash}\`)`;
|
|
140
|
+
}
|
|
141
|
+
|
|
142
|
+
function generateChangelog(entries: ChangelogEntry[]): string {
|
|
143
|
+
let output = "# Changelog\n\n";
|
|
144
|
+
output +=
|
|
145
|
+
"All notable changes to this project will be documented in this file.\n\n";
|
|
146
|
+
|
|
147
|
+
for (const entry of entries) {
|
|
148
|
+
output += `## [${entry.version}] - ${entry.date}\n\n`;
|
|
149
|
+
output += formatEntry(entry);
|
|
150
|
+
}
|
|
151
|
+
|
|
152
|
+
return output;
|
|
153
|
+
}
|
|
154
|
+
|
|
155
|
+
function formatEntry(entry: ChangelogEntry): string {
|
|
156
|
+
let output = "";
|
|
157
|
+
|
|
158
|
+
if (entry.breaking.length > 0) {
|
|
159
|
+
output += "### Breaking Changes\n\n";
|
|
160
|
+
for (const commit of entry.breaking) {
|
|
161
|
+
output += `${formatCommit(commit)}\n`;
|
|
162
|
+
}
|
|
163
|
+
output += "\n";
|
|
164
|
+
}
|
|
165
|
+
|
|
166
|
+
if (entry.features.length > 0) {
|
|
167
|
+
output += "### Features\n\n";
|
|
168
|
+
for (const commit of entry.features) {
|
|
169
|
+
output += `${formatCommit(commit)}\n`;
|
|
170
|
+
}
|
|
171
|
+
output += "\n";
|
|
172
|
+
}
|
|
173
|
+
|
|
174
|
+
if (entry.fixes.length > 0) {
|
|
175
|
+
output += "### Bug Fixes\n\n";
|
|
176
|
+
for (const commit of entry.fixes) {
|
|
177
|
+
output += `${formatCommit(commit)}\n`;
|
|
178
|
+
}
|
|
179
|
+
output += "\n";
|
|
180
|
+
}
|
|
181
|
+
|
|
182
|
+
return output;
|
|
183
|
+
}
|
|
184
|
+
|
|
185
|
+
async function loadConfig(root: string): Promise<ChangelogConfig> {
|
|
186
|
+
try {
|
|
187
|
+
const pkgPath = join(root, "package.json");
|
|
188
|
+
const pkg = JSON.parse(await readFile(pkgPath, "utf8"));
|
|
189
|
+
return pkg.changelog ?? {};
|
|
190
|
+
} catch {
|
|
191
|
+
return {};
|
|
192
|
+
}
|
|
193
|
+
}
|
|
194
|
+
|
|
195
|
+
export class ChangelogCommands {
|
|
196
|
+
public readonly changelog = $command({
|
|
197
|
+
name: "changelog",
|
|
198
|
+
description: "Generate CHANGELOG.md from git commits",
|
|
199
|
+
flags: t.object({
|
|
200
|
+
release: t.optional(
|
|
201
|
+
t.boolean({
|
|
202
|
+
when: ["--release", "-r"],
|
|
203
|
+
description:
|
|
204
|
+
"Output release notes for the latest version only (for GitHub Release)",
|
|
205
|
+
}),
|
|
206
|
+
),
|
|
207
|
+
preview: t.optional(
|
|
208
|
+
t.boolean({
|
|
209
|
+
when: ["--preview", "-p"],
|
|
210
|
+
description: "Preview unreleased changes (commits since last tag)",
|
|
211
|
+
}),
|
|
212
|
+
),
|
|
213
|
+
output: t.optional(
|
|
214
|
+
t.string({
|
|
215
|
+
when: ["--output", "-o"],
|
|
216
|
+
description:
|
|
217
|
+
"Output file path (defaults to CHANGELOG.md, use - for stdout)",
|
|
218
|
+
}),
|
|
219
|
+
),
|
|
220
|
+
limit: t.optional(
|
|
221
|
+
t.number({
|
|
222
|
+
when: ["--limit", "-l"],
|
|
223
|
+
description: "Limit number of versions to include",
|
|
224
|
+
}),
|
|
225
|
+
),
|
|
226
|
+
}),
|
|
227
|
+
handler: async ({ flags, run, root }) => {
|
|
228
|
+
const config = await loadConfig(root);
|
|
229
|
+
|
|
230
|
+
const git = async (cmd: string) => {
|
|
231
|
+
const { stdout } = await execAsync(`git ${cmd}`, { cwd: root });
|
|
232
|
+
return stdout;
|
|
233
|
+
};
|
|
234
|
+
|
|
235
|
+
// Get all tags sorted by version
|
|
236
|
+
const tagsOutput = await git("tag --sort=-version:refname");
|
|
237
|
+
const tags = tagsOutput
|
|
238
|
+
.trim()
|
|
239
|
+
.split("\n")
|
|
240
|
+
.filter((tag) => tag.match(/^\d+\.\d+\.\d+$/));
|
|
241
|
+
|
|
242
|
+
if (tags.length === 0) {
|
|
243
|
+
throw new Error("No version tags found");
|
|
244
|
+
}
|
|
245
|
+
|
|
246
|
+
// Preview mode: show unreleased changes
|
|
247
|
+
if (flags.preview) {
|
|
248
|
+
const latestTag = tags[0];
|
|
249
|
+
const commitsOutput = await git(`log ${latestTag}..HEAD --oneline`);
|
|
250
|
+
|
|
251
|
+
if (!commitsOutput.trim()) {
|
|
252
|
+
console.log("No unreleased changes since", latestTag);
|
|
253
|
+
return;
|
|
254
|
+
}
|
|
255
|
+
|
|
256
|
+
const entry: ChangelogEntry = {
|
|
257
|
+
version: "Unreleased",
|
|
258
|
+
date: new Date().toISOString().split("T")[0],
|
|
259
|
+
features: [],
|
|
260
|
+
fixes: [],
|
|
261
|
+
docs: [],
|
|
262
|
+
improvements: [],
|
|
263
|
+
breaking: [],
|
|
264
|
+
};
|
|
265
|
+
|
|
266
|
+
for (const line of commitsOutput.trim().split("\n")) {
|
|
267
|
+
if (!line.trim()) continue;
|
|
268
|
+
const commit = parseCommit(line, config);
|
|
269
|
+
if (!commit) continue;
|
|
270
|
+
|
|
271
|
+
if (commit.breaking) entry.breaking.push(commit);
|
|
272
|
+
|
|
273
|
+
switch (commit.type) {
|
|
274
|
+
case "feat":
|
|
275
|
+
entry.features.push(commit);
|
|
276
|
+
break;
|
|
277
|
+
case "fix":
|
|
278
|
+
entry.fixes.push(commit);
|
|
279
|
+
break;
|
|
280
|
+
case "docs":
|
|
281
|
+
entry.docs.push(commit);
|
|
282
|
+
break;
|
|
283
|
+
case "refactor":
|
|
284
|
+
case "perf":
|
|
285
|
+
case "improve":
|
|
286
|
+
entry.improvements.push(commit);
|
|
287
|
+
break;
|
|
288
|
+
}
|
|
289
|
+
}
|
|
290
|
+
|
|
291
|
+
const hasCommits =
|
|
292
|
+
entry.features.length > 0 ||
|
|
293
|
+
entry.fixes.length > 0 ||
|
|
294
|
+
entry.breaking.length > 0;
|
|
295
|
+
|
|
296
|
+
if (!hasCommits) {
|
|
297
|
+
console.log("No public changes since", latestTag);
|
|
298
|
+
return;
|
|
299
|
+
}
|
|
300
|
+
|
|
301
|
+
console.log(`## [Unreleased] - since ${latestTag}\n`);
|
|
302
|
+
console.log(formatEntry(entry));
|
|
303
|
+
return;
|
|
304
|
+
}
|
|
305
|
+
|
|
306
|
+
const entries: ChangelogEntry[] = [];
|
|
307
|
+
const limit = flags.limit || (flags.release ? 1 : tags.length);
|
|
308
|
+
|
|
309
|
+
for (let i = 0; i < Math.min(limit, tags.length); i++) {
|
|
310
|
+
const tag = tags[i];
|
|
311
|
+
const prevTag = tags[i + 1];
|
|
312
|
+
|
|
313
|
+
// Get tag date
|
|
314
|
+
const dateOutput = await git(`log -1 --format=%ci ${tag}`);
|
|
315
|
+
const date = dateOutput.trim().split(" ")[0];
|
|
316
|
+
|
|
317
|
+
// Get commits between tags
|
|
318
|
+
const range = prevTag ? `${prevTag}..${tag}` : tag;
|
|
319
|
+
const commitsOutput = await git(`log ${range} --oneline`);
|
|
320
|
+
|
|
321
|
+
const entry: ChangelogEntry = {
|
|
322
|
+
version: tag,
|
|
323
|
+
date,
|
|
324
|
+
features: [],
|
|
325
|
+
fixes: [],
|
|
326
|
+
docs: [],
|
|
327
|
+
improvements: [],
|
|
328
|
+
breaking: [],
|
|
329
|
+
};
|
|
330
|
+
|
|
331
|
+
for (const line of commitsOutput.trim().split("\n")) {
|
|
332
|
+
if (!line.trim()) continue;
|
|
333
|
+
const commit = parseCommit(line, config);
|
|
334
|
+
if (!commit) continue;
|
|
335
|
+
|
|
336
|
+
if (commit.breaking) entry.breaking.push(commit);
|
|
337
|
+
|
|
338
|
+
switch (commit.type) {
|
|
339
|
+
case "feat":
|
|
340
|
+
entry.features.push(commit);
|
|
341
|
+
break;
|
|
342
|
+
case "fix":
|
|
343
|
+
entry.fixes.push(commit);
|
|
344
|
+
break;
|
|
345
|
+
case "docs":
|
|
346
|
+
entry.docs.push(commit);
|
|
347
|
+
break;
|
|
348
|
+
case "refactor":
|
|
349
|
+
case "perf":
|
|
350
|
+
case "improve":
|
|
351
|
+
entry.improvements.push(commit);
|
|
352
|
+
break;
|
|
353
|
+
}
|
|
354
|
+
}
|
|
355
|
+
|
|
356
|
+
// Only add entry if it has any commits
|
|
357
|
+
const hasCommits =
|
|
358
|
+
entry.features.length > 0 ||
|
|
359
|
+
entry.fixes.length > 0 ||
|
|
360
|
+
entry.breaking.length > 0;
|
|
361
|
+
|
|
362
|
+
if (hasCommits) {
|
|
363
|
+
entries.push(entry);
|
|
364
|
+
}
|
|
365
|
+
}
|
|
366
|
+
|
|
367
|
+
if (entries.length === 0) {
|
|
368
|
+
console.log("No public commits found");
|
|
369
|
+
return;
|
|
370
|
+
}
|
|
371
|
+
|
|
372
|
+
let output: string;
|
|
373
|
+
if (flags.release) {
|
|
374
|
+
output = formatEntry(entries[0]);
|
|
375
|
+
} else {
|
|
376
|
+
output = generateChangelog(entries);
|
|
377
|
+
}
|
|
378
|
+
|
|
379
|
+
const outputPath = flags.output ?? "CHANGELOG.md";
|
|
380
|
+
if (outputPath === "-") {
|
|
381
|
+
console.log(output);
|
|
382
|
+
} else {
|
|
383
|
+
await run(`Writing ${outputPath}`, () =>
|
|
384
|
+
writeFile(join(root, outputPath), output, "utf8"),
|
|
385
|
+
);
|
|
386
|
+
}
|
|
387
|
+
},
|
|
388
|
+
});
|
|
389
|
+
}
|
|
@@ -51,10 +51,6 @@ export class CoreCommands {
|
|
|
51
51
|
name: "init",
|
|
52
52
|
description: "Add missing Alepha configuration files to the project",
|
|
53
53
|
flags: t.object({
|
|
54
|
-
// TODO:
|
|
55
|
-
// force: t.boolean({
|
|
56
|
-
// description: "If true, all config files will be overwritten",
|
|
57
|
-
// }),
|
|
58
54
|
// choose package manager
|
|
59
55
|
yarn: t.optional(t.boolean({ description: "Use Yarn package manager" })),
|
|
60
56
|
pnpm: t.optional(t.boolean({ description: "Use pnpm package manager" })),
|
|
@@ -76,6 +72,8 @@ export class CoreCommands {
|
|
|
76
72
|
flags.react = true;
|
|
77
73
|
}
|
|
78
74
|
|
|
75
|
+
const isExpo = await this.utils.hasExpo(root);
|
|
76
|
+
|
|
79
77
|
await run({
|
|
80
78
|
name: "ensuring configuration files",
|
|
81
79
|
handler: async () => {
|
|
@@ -83,9 +81,9 @@ export class CoreCommands {
|
|
|
83
81
|
tsconfigJson: true,
|
|
84
82
|
packageJson: flags,
|
|
85
83
|
biomeJson: true,
|
|
86
|
-
viteConfigTs:
|
|
84
|
+
viteConfigTs: !isExpo,
|
|
87
85
|
editorconfig: true,
|
|
88
|
-
indexHtml: !!flags.react,
|
|
86
|
+
indexHtml: !!flags.react && !isExpo,
|
|
89
87
|
});
|
|
90
88
|
|
|
91
89
|
// Create src/main.ts if src directory is empty or doesn't exist
|
|
@@ -111,6 +109,12 @@ export class CoreCommands {
|
|
|
111
109
|
alias: `installing dependencies with ${pm}`,
|
|
112
110
|
});
|
|
113
111
|
|
|
112
|
+
if (!isExpo) {
|
|
113
|
+
await this.utils.ensureDependency(root, "vite", { run });
|
|
114
|
+
}
|
|
115
|
+
|
|
116
|
+
await this.utils.ensureDependency(root, "@biomejs/biome", { run });
|
|
117
|
+
|
|
114
118
|
// Install vitest and create test directory if --test flag is set
|
|
115
119
|
if (flags.test) {
|
|
116
120
|
await this.utils.ensureTestDir(root);
|