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
package/dist/cli/index.js
CHANGED
|
@@ -1,13 +1,15 @@
|
|
|
1
|
+
import { createRequire } from "node:module";
|
|
1
2
|
import { join } from "node:path";
|
|
2
3
|
import { $env, $hook, $inject, $module, Alepha, AlephaError, OPTIONS, t } from "alepha";
|
|
3
4
|
import { FileSystemProvider } from "alepha/file";
|
|
4
5
|
import { $command, CliProvider } from "alepha/command";
|
|
5
6
|
import { $logger } from "alepha/logger";
|
|
6
|
-
import { spawn } from "node:child_process";
|
|
7
|
+
import { exec, spawn } from "node:child_process";
|
|
7
8
|
import { access, mkdir, readFile, readdir, unlink, writeFile } from "node:fs/promises";
|
|
8
9
|
import { boot, buildClient, buildServer, copyAssets, generateCloudflare, generateDocker, generateSitemap, generateVercel, prerenderPages } from "alepha/vite";
|
|
9
10
|
import { tsImport } from "tsx/esm/api";
|
|
10
11
|
import { readFileSync } from "node:fs";
|
|
12
|
+
import { promisify } from "node:util";
|
|
11
13
|
import * as os from "node:os";
|
|
12
14
|
|
|
13
15
|
//#region ../../src/cli/assets/appRouterTs.ts
|
|
@@ -115,18 +117,17 @@ run(alepha);
|
|
|
115
117
|
//#endregion
|
|
116
118
|
//#region ../../src/cli/assets/mainTs.ts
|
|
117
119
|
const mainTs = () => `
|
|
118
|
-
import {
|
|
119
|
-
import { $
|
|
120
|
-
|
|
121
|
-
const alepha = Alepha.create();
|
|
120
|
+
import { run } from "alepha";
|
|
121
|
+
import { $route } from "alepha/server";
|
|
122
122
|
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
});
|
|
123
|
+
class App {
|
|
124
|
+
root = $route({
|
|
125
|
+
path: "/",
|
|
126
|
+
handler: () => "Hello, Alepha!",
|
|
127
|
+
});
|
|
128
|
+
}
|
|
128
129
|
|
|
129
|
-
run(
|
|
130
|
+
run(App);
|
|
130
131
|
`.trim();
|
|
131
132
|
|
|
132
133
|
//#endregion
|
|
@@ -272,6 +273,13 @@ var AlephaCliUtils = class {
|
|
|
272
273
|
generatePackageJsonContent(modes) {
|
|
273
274
|
const dependencies = { alepha: `^${version}` };
|
|
274
275
|
const devDependencies = {};
|
|
276
|
+
const scripts = {
|
|
277
|
+
dev: "alepha dev",
|
|
278
|
+
build: "alepha build",
|
|
279
|
+
lint: "alepha lint",
|
|
280
|
+
typecheck: "alepha typecheck",
|
|
281
|
+
verify: "alepha verify"
|
|
282
|
+
};
|
|
275
283
|
if (modes.ui) {
|
|
276
284
|
dependencies["@alepha/ui"] = `^${version}`;
|
|
277
285
|
modes.react = true;
|
|
@@ -286,11 +294,7 @@ var AlephaCliUtils = class {
|
|
|
286
294
|
type: "module",
|
|
287
295
|
dependencies,
|
|
288
296
|
devDependencies,
|
|
289
|
-
scripts
|
|
290
|
-
dev: "alepha dev",
|
|
291
|
-
build: "alepha build",
|
|
292
|
-
verify: "alepha verify"
|
|
293
|
-
}
|
|
297
|
+
scripts
|
|
294
298
|
};
|
|
295
299
|
}
|
|
296
300
|
/**
|
|
@@ -309,8 +313,9 @@ var AlephaCliUtils = class {
|
|
|
309
313
|
try {
|
|
310
314
|
await access(packageJsonPath);
|
|
311
315
|
} catch (error) {
|
|
312
|
-
|
|
313
|
-
|
|
316
|
+
const obj = this.generatePackageJsonContent(modes);
|
|
317
|
+
await writeFile(packageJsonPath, JSON.stringify(obj, null, 2));
|
|
318
|
+
return obj;
|
|
314
319
|
}
|
|
315
320
|
const content = await readFile(packageJsonPath, "utf8");
|
|
316
321
|
const packageJson$1 = JSON.parse(content);
|
|
@@ -323,6 +328,7 @@ var AlephaCliUtils = class {
|
|
|
323
328
|
Object.assign(packageJson$1.devDependencies, newPackageJson.devDependencies);
|
|
324
329
|
Object.assign(packageJson$1.scripts, newPackageJson.scripts);
|
|
325
330
|
await writeFile(packageJsonPath, JSON.stringify(packageJson$1, null, 2));
|
|
331
|
+
return packageJson$1;
|
|
326
332
|
}
|
|
327
333
|
async ensureConfig(root, opts) {
|
|
328
334
|
const tasks = [];
|
|
@@ -332,7 +338,7 @@ var AlephaCliUtils = class {
|
|
|
332
338
|
if (opts.indexHtml) tasks.push(this.ensureIndexHtml(root));
|
|
333
339
|
if (opts.biomeJson) tasks.push(this.ensureBiomeConfig(root));
|
|
334
340
|
if (opts.editorconfig) tasks.push(this.ensureEditorConfig(root));
|
|
335
|
-
await Promise.all(tasks);
|
|
341
|
+
return await Promise.all(tasks);
|
|
336
342
|
}
|
|
337
343
|
/**
|
|
338
344
|
* Ensure tsconfig.json exists in the project.
|
|
@@ -450,88 +456,27 @@ ${models.map((it) => `export const ${it} = models["${it}"];`).join("\n")}
|
|
|
450
456
|
`.trim();
|
|
451
457
|
}
|
|
452
458
|
/**
|
|
453
|
-
*
|
|
459
|
+
* Load environment variables from a .env file.
|
|
454
460
|
*
|
|
455
|
-
*
|
|
456
|
-
*
|
|
457
|
-
*
|
|
458
|
-
* @param options - Configuration options including kit, provider info, and paths
|
|
459
|
-
* @returns Path to the generated drizzle.config.js file
|
|
461
|
+
* Reads the .env file in the specified root directory and sets
|
|
462
|
+
* the environment variables in process.env.
|
|
460
463
|
*/
|
|
461
|
-
async
|
|
462
|
-
const
|
|
463
|
-
|
|
464
|
-
|
|
465
|
-
|
|
466
|
-
|
|
467
|
-
|
|
468
|
-
|
|
469
|
-
|
|
470
|
-
|
|
471
|
-
|
|
472
|
-
url = url.replace("sqlite://", "").replace("file://", "");
|
|
473
|
-
url = join(options.rootDir, url);
|
|
474
|
-
config.dbCredentials = { url };
|
|
475
|
-
}
|
|
476
|
-
if (options.providerName === "pglite") config.driver = "pglite";
|
|
477
|
-
const drizzleConfigJs = `export default ${JSON.stringify(config, null, 2)}`;
|
|
478
|
-
return await this.writeConfigFile("drizzle.config.js", drizzleConfigJs, options.rootDir);
|
|
479
|
-
}
|
|
480
|
-
async loadEnvFile(root) {
|
|
481
|
-
const envPath = join(root, ".env");
|
|
482
|
-
try {
|
|
483
|
-
const lines = (await readFile(envPath, "utf8")).split("\n");
|
|
484
|
-
for (const line of lines) {
|
|
485
|
-
const [key, ...rest] = line.split("=");
|
|
486
|
-
if (key) {
|
|
487
|
-
const value = rest.join("=");
|
|
488
|
-
process.env[key.trim()] = value.trim();
|
|
464
|
+
async loadEnvFile(root, files = [".env"]) {
|
|
465
|
+
for (const it of files) for (const file of [it, `${it}.local`]) {
|
|
466
|
+
const envPath = join(root, file);
|
|
467
|
+
try {
|
|
468
|
+
const lines = (await readFile(envPath, "utf8")).split("\n");
|
|
469
|
+
for (const line of lines) {
|
|
470
|
+
const [key, ...rest] = line.split("=");
|
|
471
|
+
if (key) {
|
|
472
|
+
const value = rest.join("=");
|
|
473
|
+
process.env[key.trim()] = value.trim();
|
|
474
|
+
}
|
|
489
475
|
}
|
|
476
|
+
this.log.debug(`Loaded environment variables from ${envPath}`);
|
|
477
|
+
} catch {
|
|
478
|
+
this.log.debug(`No ${file} file found at ${envPath}, skipping load.`);
|
|
490
479
|
}
|
|
491
|
-
this.log.debug(`Loaded environment variables from ${envPath}`);
|
|
492
|
-
} catch {
|
|
493
|
-
this.log.debug(`No .env file found at ${envPath}, skipping load.`);
|
|
494
|
-
}
|
|
495
|
-
}
|
|
496
|
-
/**
|
|
497
|
-
* Run a drizzle-kit command for all database providers in an Alepha instance.
|
|
498
|
-
*
|
|
499
|
-
* Iterates through all repository providers, prepares Drizzle config for each,
|
|
500
|
-
* and executes the specified drizzle-kit command.
|
|
501
|
-
*
|
|
502
|
-
* @param options - Configuration including command to run, flags, and logging
|
|
503
|
-
*/
|
|
504
|
-
async runDrizzleKitCommand(options) {
|
|
505
|
-
const rootDir = options.root;
|
|
506
|
-
await this.loadEnvFile(rootDir);
|
|
507
|
-
this.log.debug(`Using project root: ${rootDir}`);
|
|
508
|
-
const { alepha, entry } = await this.loadAlephaFromServerEntryFile(rootDir, options.args);
|
|
509
|
-
const drizzleKitProvider = alepha.inject("DrizzleKitProvider");
|
|
510
|
-
const repositoryProvider = alepha.inject("RepositoryProvider");
|
|
511
|
-
const accepted = /* @__PURE__ */ new Set([]);
|
|
512
|
-
for (const primitive of repositoryProvider.getRepositories()) {
|
|
513
|
-
const provider = primitive.provider;
|
|
514
|
-
const providerName = provider.name;
|
|
515
|
-
const dialect = provider.dialect;
|
|
516
|
-
if (accepted.has(providerName)) continue;
|
|
517
|
-
accepted.add(providerName);
|
|
518
|
-
if (options.provider && options.provider !== providerName) {
|
|
519
|
-
this.log.debug(`Skipping provider '${providerName}' (filter: ${options.provider})`);
|
|
520
|
-
continue;
|
|
521
|
-
}
|
|
522
|
-
this.log.info("");
|
|
523
|
-
this.log.info(options.logMessage(providerName, dialect));
|
|
524
|
-
const drizzleConfigJsPath = await this.prepareDrizzleConfig({
|
|
525
|
-
kit: drizzleKitProvider,
|
|
526
|
-
provider,
|
|
527
|
-
providerName,
|
|
528
|
-
providerUrl: provider.url,
|
|
529
|
-
dialect,
|
|
530
|
-
entry,
|
|
531
|
-
rootDir
|
|
532
|
-
});
|
|
533
|
-
const flags = options.commandFlags ? ` ${options.commandFlags}` : "";
|
|
534
|
-
await this.exec(`drizzle-kit ${options.command} --config=${drizzleConfigJsPath}${flags}`, { env: { NODE_OPTIONS: "--import tsx" } });
|
|
535
480
|
}
|
|
536
481
|
}
|
|
537
482
|
async getPackageManager(root, flags) {
|
|
@@ -615,6 +560,15 @@ ${models.map((it) => `export const ${it} = models["${it}"];`).join("\n")}
|
|
|
615
560
|
}
|
|
616
561
|
}
|
|
617
562
|
/**
|
|
563
|
+
* Check if Expo is present in the project.
|
|
564
|
+
*
|
|
565
|
+
* @param root - The root directory of the project
|
|
566
|
+
* @returns True if expo is in dependencies or devDependencies
|
|
567
|
+
*/
|
|
568
|
+
async hasExpo(root) {
|
|
569
|
+
return this.hasDependency(root, "expo");
|
|
570
|
+
}
|
|
571
|
+
/**
|
|
618
572
|
* Install a dependency if it's missing from the project.
|
|
619
573
|
*
|
|
620
574
|
* Automatically detects the package manager (yarn, pnpm, npm) and installs
|
|
@@ -671,6 +625,231 @@ var BiomeCommands = class {
|
|
|
671
625
|
});
|
|
672
626
|
};
|
|
673
627
|
|
|
628
|
+
//#endregion
|
|
629
|
+
//#region ../../src/cli/commands/ChangelogCommands.ts
|
|
630
|
+
const execAsync = promisify(exec);
|
|
631
|
+
const DEFAULT_IGNORE = [
|
|
632
|
+
"project",
|
|
633
|
+
"release",
|
|
634
|
+
"starter",
|
|
635
|
+
"example",
|
|
636
|
+
"chore",
|
|
637
|
+
"ci",
|
|
638
|
+
"build",
|
|
639
|
+
"test",
|
|
640
|
+
"style"
|
|
641
|
+
];
|
|
642
|
+
function parseCommit(line, config) {
|
|
643
|
+
const match = line.match(/^([a-f0-9]+)\s+(.+)$/);
|
|
644
|
+
if (!match) return null;
|
|
645
|
+
const [, hash, message] = match;
|
|
646
|
+
const breaking = message.includes("!:") || message.toLowerCase().includes("breaking");
|
|
647
|
+
const ignore = config.ignore ?? DEFAULT_IGNORE;
|
|
648
|
+
const conventionalMatch = message.match(/^(feat|fix|docs|refactor|perf|revert)(?:\(([^)]+)\))?!?:\s*(.+)$/i);
|
|
649
|
+
if (conventionalMatch) {
|
|
650
|
+
const [, type, scope, description] = conventionalMatch;
|
|
651
|
+
if (scope) {
|
|
652
|
+
const baseScope = scope.split("/")[0];
|
|
653
|
+
if (ignore.includes(baseScope) || ignore.includes(scope)) return null;
|
|
654
|
+
}
|
|
655
|
+
if (!scope && ignore.includes(type.toLowerCase())) return null;
|
|
656
|
+
return {
|
|
657
|
+
hash: hash.substring(0, 8),
|
|
658
|
+
type: type.toLowerCase(),
|
|
659
|
+
scope: scope || null,
|
|
660
|
+
description: description.trim(),
|
|
661
|
+
breaking
|
|
662
|
+
};
|
|
663
|
+
}
|
|
664
|
+
const moduleMatch = message.match(/^([a-z][a-z0-9-]*(?:\/[a-z][a-z0-9-]*)?):\s*(.+)$/i);
|
|
665
|
+
if (moduleMatch) {
|
|
666
|
+
const [, module, description] = moduleMatch;
|
|
667
|
+
const baseModule = module.split("/")[0];
|
|
668
|
+
if (ignore.includes(baseModule)) return null;
|
|
669
|
+
if (config.scopes && !config.scopes.includes(baseModule)) return null;
|
|
670
|
+
const desc = description.toLowerCase();
|
|
671
|
+
let type = "improve";
|
|
672
|
+
if (desc.includes("fix") || desc.includes("bug") || desc.includes("issue")) type = "fix";
|
|
673
|
+
else if (desc.includes("add") || desc.includes("new") || desc.includes("implement")) type = "feat";
|
|
674
|
+
return {
|
|
675
|
+
hash: hash.substring(0, 8),
|
|
676
|
+
type,
|
|
677
|
+
scope: module,
|
|
678
|
+
description: description.trim(),
|
|
679
|
+
breaking
|
|
680
|
+
};
|
|
681
|
+
}
|
|
682
|
+
return null;
|
|
683
|
+
}
|
|
684
|
+
function formatCommit(commit) {
|
|
685
|
+
return `- ${commit.scope ? `**${commit.scope}**: ` : ""}${commit.description} (\`${commit.hash}\`)`;
|
|
686
|
+
}
|
|
687
|
+
function generateChangelog(entries) {
|
|
688
|
+
let output = "# Changelog\n\n";
|
|
689
|
+
output += "All notable changes to this project will be documented in this file.\n\n";
|
|
690
|
+
for (const entry of entries) {
|
|
691
|
+
output += `## [${entry.version}] - ${entry.date}\n\n`;
|
|
692
|
+
output += formatEntry(entry);
|
|
693
|
+
}
|
|
694
|
+
return output;
|
|
695
|
+
}
|
|
696
|
+
function formatEntry(entry) {
|
|
697
|
+
let output = "";
|
|
698
|
+
if (entry.breaking.length > 0) {
|
|
699
|
+
output += "### Breaking Changes\n\n";
|
|
700
|
+
for (const commit of entry.breaking) output += `${formatCommit(commit)}\n`;
|
|
701
|
+
output += "\n";
|
|
702
|
+
}
|
|
703
|
+
if (entry.features.length > 0) {
|
|
704
|
+
output += "### Features\n\n";
|
|
705
|
+
for (const commit of entry.features) output += `${formatCommit(commit)}\n`;
|
|
706
|
+
output += "\n";
|
|
707
|
+
}
|
|
708
|
+
if (entry.fixes.length > 0) {
|
|
709
|
+
output += "### Bug Fixes\n\n";
|
|
710
|
+
for (const commit of entry.fixes) output += `${formatCommit(commit)}\n`;
|
|
711
|
+
output += "\n";
|
|
712
|
+
}
|
|
713
|
+
return output;
|
|
714
|
+
}
|
|
715
|
+
async function loadConfig(root) {
|
|
716
|
+
try {
|
|
717
|
+
const pkgPath = join(root, "package.json");
|
|
718
|
+
return JSON.parse(await readFile(pkgPath, "utf8")).changelog ?? {};
|
|
719
|
+
} catch {
|
|
720
|
+
return {};
|
|
721
|
+
}
|
|
722
|
+
}
|
|
723
|
+
var ChangelogCommands = class {
|
|
724
|
+
changelog = $command({
|
|
725
|
+
name: "changelog",
|
|
726
|
+
description: "Generate CHANGELOG.md from git commits",
|
|
727
|
+
flags: t.object({
|
|
728
|
+
release: t.optional(t.boolean({
|
|
729
|
+
when: ["--release", "-r"],
|
|
730
|
+
description: "Output release notes for the latest version only (for GitHub Release)"
|
|
731
|
+
})),
|
|
732
|
+
preview: t.optional(t.boolean({
|
|
733
|
+
when: ["--preview", "-p"],
|
|
734
|
+
description: "Preview unreleased changes (commits since last tag)"
|
|
735
|
+
})),
|
|
736
|
+
output: t.optional(t.string({
|
|
737
|
+
when: ["--output", "-o"],
|
|
738
|
+
description: "Output file path (defaults to CHANGELOG.md, use - for stdout)"
|
|
739
|
+
})),
|
|
740
|
+
limit: t.optional(t.number({
|
|
741
|
+
when: ["--limit", "-l"],
|
|
742
|
+
description: "Limit number of versions to include"
|
|
743
|
+
}))
|
|
744
|
+
}),
|
|
745
|
+
handler: async ({ flags, run, root }) => {
|
|
746
|
+
const config = await loadConfig(root);
|
|
747
|
+
const git = async (cmd) => {
|
|
748
|
+
const { stdout } = await execAsync(`git ${cmd}`, { cwd: root });
|
|
749
|
+
return stdout;
|
|
750
|
+
};
|
|
751
|
+
const tags = (await git("tag --sort=-version:refname")).trim().split("\n").filter((tag) => tag.match(/^\d+\.\d+\.\d+$/));
|
|
752
|
+
if (tags.length === 0) throw new Error("No version tags found");
|
|
753
|
+
if (flags.preview) {
|
|
754
|
+
const latestTag = tags[0];
|
|
755
|
+
const commitsOutput = await git(`log ${latestTag}..HEAD --oneline`);
|
|
756
|
+
if (!commitsOutput.trim()) {
|
|
757
|
+
console.log("No unreleased changes since", latestTag);
|
|
758
|
+
return;
|
|
759
|
+
}
|
|
760
|
+
const entry = {
|
|
761
|
+
version: "Unreleased",
|
|
762
|
+
date: (/* @__PURE__ */ new Date()).toISOString().split("T")[0],
|
|
763
|
+
features: [],
|
|
764
|
+
fixes: [],
|
|
765
|
+
docs: [],
|
|
766
|
+
improvements: [],
|
|
767
|
+
breaking: []
|
|
768
|
+
};
|
|
769
|
+
for (const line of commitsOutput.trim().split("\n")) {
|
|
770
|
+
if (!line.trim()) continue;
|
|
771
|
+
const commit = parseCommit(line, config);
|
|
772
|
+
if (!commit) continue;
|
|
773
|
+
if (commit.breaking) entry.breaking.push(commit);
|
|
774
|
+
switch (commit.type) {
|
|
775
|
+
case "feat":
|
|
776
|
+
entry.features.push(commit);
|
|
777
|
+
break;
|
|
778
|
+
case "fix":
|
|
779
|
+
entry.fixes.push(commit);
|
|
780
|
+
break;
|
|
781
|
+
case "docs":
|
|
782
|
+
entry.docs.push(commit);
|
|
783
|
+
break;
|
|
784
|
+
case "refactor":
|
|
785
|
+
case "perf":
|
|
786
|
+
case "improve":
|
|
787
|
+
entry.improvements.push(commit);
|
|
788
|
+
break;
|
|
789
|
+
}
|
|
790
|
+
}
|
|
791
|
+
if (!(entry.features.length > 0 || entry.fixes.length > 0 || entry.breaking.length > 0)) {
|
|
792
|
+
console.log("No public changes since", latestTag);
|
|
793
|
+
return;
|
|
794
|
+
}
|
|
795
|
+
console.log(`## [Unreleased] - since ${latestTag}\n`);
|
|
796
|
+
console.log(formatEntry(entry));
|
|
797
|
+
return;
|
|
798
|
+
}
|
|
799
|
+
const entries = [];
|
|
800
|
+
const limit = flags.limit || (flags.release ? 1 : tags.length);
|
|
801
|
+
for (let i = 0; i < Math.min(limit, tags.length); i++) {
|
|
802
|
+
const tag = tags[i];
|
|
803
|
+
const prevTag = tags[i + 1];
|
|
804
|
+
const date = (await git(`log -1 --format=%ci ${tag}`)).trim().split(" ")[0];
|
|
805
|
+
const commitsOutput = await git(`log ${prevTag ? `${prevTag}..${tag}` : tag} --oneline`);
|
|
806
|
+
const entry = {
|
|
807
|
+
version: tag,
|
|
808
|
+
date,
|
|
809
|
+
features: [],
|
|
810
|
+
fixes: [],
|
|
811
|
+
docs: [],
|
|
812
|
+
improvements: [],
|
|
813
|
+
breaking: []
|
|
814
|
+
};
|
|
815
|
+
for (const line of commitsOutput.trim().split("\n")) {
|
|
816
|
+
if (!line.trim()) continue;
|
|
817
|
+
const commit = parseCommit(line, config);
|
|
818
|
+
if (!commit) continue;
|
|
819
|
+
if (commit.breaking) entry.breaking.push(commit);
|
|
820
|
+
switch (commit.type) {
|
|
821
|
+
case "feat":
|
|
822
|
+
entry.features.push(commit);
|
|
823
|
+
break;
|
|
824
|
+
case "fix":
|
|
825
|
+
entry.fixes.push(commit);
|
|
826
|
+
break;
|
|
827
|
+
case "docs":
|
|
828
|
+
entry.docs.push(commit);
|
|
829
|
+
break;
|
|
830
|
+
case "refactor":
|
|
831
|
+
case "perf":
|
|
832
|
+
case "improve":
|
|
833
|
+
entry.improvements.push(commit);
|
|
834
|
+
break;
|
|
835
|
+
}
|
|
836
|
+
}
|
|
837
|
+
if (entry.features.length > 0 || entry.fixes.length > 0 || entry.breaking.length > 0) entries.push(entry);
|
|
838
|
+
}
|
|
839
|
+
if (entries.length === 0) {
|
|
840
|
+
console.log("No public commits found");
|
|
841
|
+
return;
|
|
842
|
+
}
|
|
843
|
+
let output;
|
|
844
|
+
if (flags.release) output = formatEntry(entries[0]);
|
|
845
|
+
else output = generateChangelog(entries);
|
|
846
|
+
const outputPath = flags.output ?? "CHANGELOG.md";
|
|
847
|
+
if (outputPath === "-") console.log(output);
|
|
848
|
+
else await run(`Writing ${outputPath}`, () => writeFile(join(root, outputPath), output, "utf8"));
|
|
849
|
+
}
|
|
850
|
+
});
|
|
851
|
+
};
|
|
852
|
+
|
|
674
853
|
//#endregion
|
|
675
854
|
//#region ../../src/cli/commands/CoreCommands.ts
|
|
676
855
|
var CoreCommands = class {
|
|
@@ -722,6 +901,7 @@ var CoreCommands = class {
|
|
|
722
901
|
}),
|
|
723
902
|
handler: async ({ run, flags, root }) => {
|
|
724
903
|
if (flags.ui) flags.react = true;
|
|
904
|
+
const isExpo = await this.utils.hasExpo(root);
|
|
725
905
|
await run({
|
|
726
906
|
name: "ensuring configuration files",
|
|
727
907
|
handler: async () => {
|
|
@@ -729,9 +909,9 @@ var CoreCommands = class {
|
|
|
729
909
|
tsconfigJson: true,
|
|
730
910
|
packageJson: flags,
|
|
731
911
|
biomeJson: true,
|
|
732
|
-
viteConfigTs:
|
|
912
|
+
viteConfigTs: !isExpo,
|
|
733
913
|
editorconfig: true,
|
|
734
|
-
indexHtml: !!flags.react
|
|
914
|
+
indexHtml: !!flags.react && !isExpo
|
|
735
915
|
});
|
|
736
916
|
if (!flags.react) await this.utils.ensureSrcMain(root);
|
|
737
917
|
}
|
|
@@ -743,6 +923,8 @@ var CoreCommands = class {
|
|
|
743
923
|
} else if (pm === "pnpm") await this.utils.ensurePnpm(root);
|
|
744
924
|
else await this.utils.ensureNpm(root);
|
|
745
925
|
await run(`${pm} install`, { alias: `installing dependencies with ${pm}` });
|
|
926
|
+
if (!isExpo) await this.utils.ensureDependency(root, "vite", { run });
|
|
927
|
+
await this.utils.ensureDependency(root, "@biomejs/biome", { run });
|
|
746
928
|
if (flags.test) {
|
|
747
929
|
await this.utils.ensureTestDir(root);
|
|
748
930
|
await run(`${pm} ${pm === "yarn" ? "add" : "install"} -D vitest`, { alias: "setup testing with Vitest" });
|
|
@@ -753,7 +935,10 @@ var CoreCommands = class {
|
|
|
753
935
|
|
|
754
936
|
//#endregion
|
|
755
937
|
//#region ../../src/cli/commands/DrizzleCommands.ts
|
|
756
|
-
const drizzleCommandFlags = t.object({
|
|
938
|
+
const drizzleCommandFlags = t.object({
|
|
939
|
+
provider: t.optional(t.text({ description: "Database provider name to target (e.g., 'postgres', 'sqlite')" })),
|
|
940
|
+
mode: t.optional(t.text({ description: "Environment variable file(s) to load (e.g., 'production' to load .env.production) https://vite.dev/guide/env-and-mode" }))
|
|
941
|
+
});
|
|
757
942
|
var DrizzleCommands = class {
|
|
758
943
|
log = $logger();
|
|
759
944
|
utils = $inject(AlephaCliUtils);
|
|
@@ -838,12 +1023,13 @@ var DrizzleCommands = class {
|
|
|
838
1023
|
flags: t.extend(drizzleCommandFlags, { custom: t.optional(t.text({ description: "Custom migration name for drizzle-kit generate --custom" })) }),
|
|
839
1024
|
handler: async ({ args, flags, root }) => {
|
|
840
1025
|
const commandFlags = flags.custom ? `--custom=${flags.custom}` : void 0;
|
|
841
|
-
await this.
|
|
1026
|
+
await this.runDrizzleKitCommand({
|
|
842
1027
|
root,
|
|
843
1028
|
args,
|
|
844
1029
|
command: "generate",
|
|
845
1030
|
commandFlags,
|
|
846
1031
|
provider: flags.provider,
|
|
1032
|
+
env: flags.mode,
|
|
847
1033
|
logMessage: (providerName, dialect) => `Generate '${providerName}' migrations (${dialect}) ...`
|
|
848
1034
|
});
|
|
849
1035
|
}
|
|
@@ -866,11 +1052,12 @@ var DrizzleCommands = class {
|
|
|
866
1052
|
})),
|
|
867
1053
|
flags: drizzleCommandFlags,
|
|
868
1054
|
handler: async ({ root, args, flags }) => {
|
|
869
|
-
await this.
|
|
1055
|
+
await this.runDrizzleKitCommand({
|
|
870
1056
|
root,
|
|
871
1057
|
args,
|
|
872
1058
|
command: "push",
|
|
873
1059
|
provider: flags.provider,
|
|
1060
|
+
env: flags.mode,
|
|
874
1061
|
logMessage: (providerName, dialect) => `Push '${providerName}' schema (${dialect}) ...`
|
|
875
1062
|
});
|
|
876
1063
|
}
|
|
@@ -893,11 +1080,12 @@ var DrizzleCommands = class {
|
|
|
893
1080
|
})),
|
|
894
1081
|
flags: drizzleCommandFlags,
|
|
895
1082
|
handler: async ({ root, args, flags }) => {
|
|
896
|
-
await this.
|
|
1083
|
+
await this.runDrizzleKitCommand({
|
|
897
1084
|
root,
|
|
898
1085
|
args,
|
|
899
1086
|
command: "migrate",
|
|
900
1087
|
provider: flags.provider,
|
|
1088
|
+
env: flags.mode,
|
|
901
1089
|
logMessage: (providerName, dialect) => `Migrate '${providerName}' database (${dialect}) ...`
|
|
902
1090
|
});
|
|
903
1091
|
}
|
|
@@ -920,15 +1108,102 @@ var DrizzleCommands = class {
|
|
|
920
1108
|
})),
|
|
921
1109
|
flags: drizzleCommandFlags,
|
|
922
1110
|
handler: async ({ root, args, flags }) => {
|
|
923
|
-
await this.
|
|
1111
|
+
await this.runDrizzleKitCommand({
|
|
924
1112
|
root,
|
|
925
1113
|
args,
|
|
926
1114
|
command: "studio",
|
|
927
1115
|
provider: flags.provider,
|
|
1116
|
+
env: flags.mode,
|
|
928
1117
|
logMessage: (providerName, dialect) => `Launch Studio for '${providerName}' (${dialect}) ...`
|
|
929
1118
|
});
|
|
930
1119
|
}
|
|
931
1120
|
});
|
|
1121
|
+
/**
|
|
1122
|
+
* Run a drizzle-kit command for all database providers in an Alepha instance.
|
|
1123
|
+
*
|
|
1124
|
+
* Iterates through all repository providers, prepares Drizzle config for each,
|
|
1125
|
+
* and executes the specified drizzle-kit command.
|
|
1126
|
+
*
|
|
1127
|
+
* @param options - Configuration including command to run, flags, and logging
|
|
1128
|
+
*/
|
|
1129
|
+
async runDrizzleKitCommand(options) {
|
|
1130
|
+
const rootDir = options.root;
|
|
1131
|
+
const envFiles = [".env"];
|
|
1132
|
+
if (options.env) envFiles.push(`.env.${options.env}`);
|
|
1133
|
+
await this.utils.loadEnvFile(rootDir, envFiles);
|
|
1134
|
+
this.log.debug(`Using project root: ${rootDir}`);
|
|
1135
|
+
const { alepha, entry } = await this.utils.loadAlephaFromServerEntryFile(rootDir, options.args);
|
|
1136
|
+
const drizzleKitProvider = alepha.inject("DrizzleKitProvider");
|
|
1137
|
+
const repositoryProvider = alepha.inject("RepositoryProvider");
|
|
1138
|
+
const accepted = /* @__PURE__ */ new Set([]);
|
|
1139
|
+
for (const primitive of repositoryProvider.getRepositories()) {
|
|
1140
|
+
const provider = primitive.provider;
|
|
1141
|
+
const providerName = provider.name;
|
|
1142
|
+
const dialect = provider.dialect;
|
|
1143
|
+
if (accepted.has(providerName)) continue;
|
|
1144
|
+
accepted.add(providerName);
|
|
1145
|
+
if (options.provider && options.provider !== providerName) {
|
|
1146
|
+
this.log.debug(`Skipping provider '${providerName}' (filter: ${options.provider})`);
|
|
1147
|
+
continue;
|
|
1148
|
+
}
|
|
1149
|
+
this.log.info("");
|
|
1150
|
+
this.log.info(options.logMessage(providerName, dialect));
|
|
1151
|
+
const drizzleConfigJsPath = await this.prepareDrizzleConfig({
|
|
1152
|
+
kit: drizzleKitProvider,
|
|
1153
|
+
provider,
|
|
1154
|
+
providerName,
|
|
1155
|
+
providerUrl: provider.url,
|
|
1156
|
+
dialect,
|
|
1157
|
+
entry,
|
|
1158
|
+
rootDir
|
|
1159
|
+
});
|
|
1160
|
+
const flags = options.commandFlags ? ` ${options.commandFlags}` : "";
|
|
1161
|
+
await this.utils.exec(`drizzle-kit ${options.command} --config=${drizzleConfigJsPath}${flags}`, { env: { NODE_OPTIONS: "--import tsx" } });
|
|
1162
|
+
}
|
|
1163
|
+
}
|
|
1164
|
+
/**
|
|
1165
|
+
* Prepare Drizzle configuration files for a database provider.
|
|
1166
|
+
*
|
|
1167
|
+
* Creates temporary entities.js and drizzle.config.js files needed
|
|
1168
|
+
* for Drizzle Kit commands to run properly.
|
|
1169
|
+
*
|
|
1170
|
+
* @param options - Configuration options including kit, provider info, and paths
|
|
1171
|
+
* @returns Path to the generated drizzle.config.js file
|
|
1172
|
+
*/
|
|
1173
|
+
async prepareDrizzleConfig(options) {
|
|
1174
|
+
const models = Object.keys(options.kit.getModels(options.provider));
|
|
1175
|
+
const entitiesJs = this.utils.generateEntitiesJs(options.entry, options.providerName, models);
|
|
1176
|
+
const config = {
|
|
1177
|
+
schema: await this.utils.writeConfigFile("entities.js", entitiesJs, options.rootDir),
|
|
1178
|
+
out: `./migrations/${options.providerName}`,
|
|
1179
|
+
dialect: options.dialect,
|
|
1180
|
+
dbCredentials: { url: options.providerUrl }
|
|
1181
|
+
};
|
|
1182
|
+
if (options.providerName === "d1") config.driver = "d1-http";
|
|
1183
|
+
if (options.providerName === "pglite") config.driver = "pglite";
|
|
1184
|
+
if (options.dialect === "sqlite") if (options.providerName === "d1") {
|
|
1185
|
+
const token = process.env.CLOUDFLARE_API_TOKEN;
|
|
1186
|
+
if (!token) throw new AlephaError("CLOUDFLARE_API_TOKEN environment variable is not set. https://orm.drizzle.team/docs/guides/d1-http-with-drizzle-kit");
|
|
1187
|
+
const accountId = process.env.CLOUDFLARE_ACCOUNT_ID;
|
|
1188
|
+
if (!accountId) throw new AlephaError("CLOUDFLARE_ACCOUNT_ID environment variable is not set. https://orm.drizzle.team/docs/guides/d1-http-with-drizzle-kit");
|
|
1189
|
+
const url = options.providerUrl;
|
|
1190
|
+
if (!url.startsWith("cloudflare-d1://")) throw new AlephaError("D1 provider URL must start with 'cloudflare-d1://'.");
|
|
1191
|
+
const [, databaseId] = url.replace("cloudflare-d1://", "").replace("cloudflare-d1:", "").split(":");
|
|
1192
|
+
if (!databaseId) throw new AlephaError("Database ID is missing in the D1 provider URL. Cloudflare D1 URL format: cloudflare-d1://<database_name>:<database_id>");
|
|
1193
|
+
config.dbCredentials = {
|
|
1194
|
+
accountId,
|
|
1195
|
+
databaseId,
|
|
1196
|
+
token
|
|
1197
|
+
};
|
|
1198
|
+
} else {
|
|
1199
|
+
let url = options.providerUrl;
|
|
1200
|
+
url = url.replace("sqlite://", "").replace("file://", "");
|
|
1201
|
+
url = join(options.rootDir, url);
|
|
1202
|
+
config.dbCredentials = { url };
|
|
1203
|
+
}
|
|
1204
|
+
const drizzleConfigJs = `export default ${JSON.stringify(config, null, 2)}`;
|
|
1205
|
+
return await this.utils.writeConfigFile("drizzle.config.js", drizzleConfigJs, options.rootDir);
|
|
1206
|
+
}
|
|
932
1207
|
};
|
|
933
1208
|
|
|
934
1209
|
//#endregion
|
|
@@ -958,7 +1233,7 @@ var VerifyCommands = class {
|
|
|
958
1233
|
await run("alepha typecheck");
|
|
959
1234
|
if ((await this.utils.readPackageJson(root)).devDependencies?.vitest) await run("alepha test");
|
|
960
1235
|
if (await this.utils.exists(root, "migrations")) await run("alepha db:check-migrations");
|
|
961
|
-
await run("alepha build");
|
|
1236
|
+
if (!await this.utils.hasExpo(root)) await run("alepha build");
|
|
962
1237
|
await run("alepha clean");
|
|
963
1238
|
}
|
|
964
1239
|
});
|
|
@@ -983,6 +1258,7 @@ var ViteCommands = class {
|
|
|
983
1258
|
env = $env(t.object({ VITEST_ARGS: t.string({ default: "" }) }));
|
|
984
1259
|
run = $command({
|
|
985
1260
|
name: "run",
|
|
1261
|
+
hide: true,
|
|
986
1262
|
description: "Run a TypeScript file directly",
|
|
987
1263
|
flags: t.object({ watch: t.optional(t.boolean({
|
|
988
1264
|
description: "Watch file for changes",
|
|
@@ -1012,10 +1288,15 @@ var ViteCommands = class {
|
|
|
1012
1288
|
description: "Filepath to run"
|
|
1013
1289
|
})),
|
|
1014
1290
|
handler: async ({ args, root }) => {
|
|
1291
|
+
const expo = await this.utils.hasExpo(root);
|
|
1015
1292
|
await this.utils.ensureConfig(root, {
|
|
1016
|
-
viteConfigTs:
|
|
1293
|
+
viteConfigTs: !expo,
|
|
1017
1294
|
tsconfigJson: true
|
|
1018
1295
|
});
|
|
1296
|
+
if (expo) {
|
|
1297
|
+
await this.utils.exec(`expo start`);
|
|
1298
|
+
return;
|
|
1299
|
+
}
|
|
1019
1300
|
const entry = await boot.getServerEntry(root, args);
|
|
1020
1301
|
this.log.trace("Entry file found", { entry });
|
|
1021
1302
|
try {
|
|
@@ -1049,6 +1330,8 @@ var ViteCommands = class {
|
|
|
1049
1330
|
}),
|
|
1050
1331
|
handler: async ({ flags, args, run, root }) => {
|
|
1051
1332
|
process.env.ALEPHA_BUILD_MODE = "cli";
|
|
1333
|
+
process.env.NODE_ENV = "production";
|
|
1334
|
+
if (await this.utils.hasExpo(root)) return;
|
|
1052
1335
|
await this.utils.ensureConfig(root, {
|
|
1053
1336
|
viteConfigTs: true,
|
|
1054
1337
|
tsconfigJson: true
|
|
@@ -1059,7 +1342,8 @@ var ViteCommands = class {
|
|
|
1059
1342
|
const clientDir = "public";
|
|
1060
1343
|
await this.utils.ensureDependency(root, "vite", { run });
|
|
1061
1344
|
await run.rm("dist", { alias: "clean dist" });
|
|
1062
|
-
const viteAlephaBuildOptions = (await import(
|
|
1345
|
+
const viteAlephaBuildOptions = (await createRequire(import.meta.url)("vite").resolveConfig({}, "build", "production")).plugins.find((it) => it.name === "alepha:build")?.[OPTIONS] || {};
|
|
1346
|
+
await this.utils.loadEnvFile(root, [".env", ".env.production"]);
|
|
1063
1347
|
const stats = flags.stats ?? viteAlephaBuildOptions.stats ?? false;
|
|
1064
1348
|
const hasServer = viteAlephaBuildOptions.serverEntry !== false;
|
|
1065
1349
|
let hasClient = false;
|
|
@@ -1067,12 +1351,14 @@ var ViteCommands = class {
|
|
|
1067
1351
|
await access(join(root, "index.html"));
|
|
1068
1352
|
hasClient = true;
|
|
1069
1353
|
} catch {}
|
|
1354
|
+
const clientOptions = typeof viteAlephaBuildOptions.client === "object" ? viteAlephaBuildOptions.client : {};
|
|
1070
1355
|
if (hasClient) await run({
|
|
1071
1356
|
name: "vite build client",
|
|
1072
1357
|
handler: () => buildClient({
|
|
1073
1358
|
silent: true,
|
|
1074
1359
|
dist: `${distDir}/${clientDir}`,
|
|
1075
|
-
stats
|
|
1360
|
+
stats,
|
|
1361
|
+
precompress: clientOptions.precompress
|
|
1076
1362
|
})
|
|
1077
1363
|
});
|
|
1078
1364
|
await run({
|
|
@@ -1093,15 +1379,14 @@ var ViteCommands = class {
|
|
|
1093
1379
|
if (clientBuilt && hasServer) await unlink(`${distDir}/${clientDir}/index.html`);
|
|
1094
1380
|
}
|
|
1095
1381
|
});
|
|
1096
|
-
await
|
|
1097
|
-
|
|
1098
|
-
|
|
1099
|
-
|
|
1100
|
-
|
|
1101
|
-
})
|
|
1382
|
+
await copyAssets({
|
|
1383
|
+
root,
|
|
1384
|
+
entry: `${distDir}/index.js`,
|
|
1385
|
+
distDir,
|
|
1386
|
+
run
|
|
1102
1387
|
});
|
|
1103
1388
|
if (hasClient) {
|
|
1104
|
-
const sitemapBaseUrl = flags.sitemap ??
|
|
1389
|
+
const sitemapBaseUrl = flags.sitemap ?? clientOptions.sitemap?.hostname;
|
|
1105
1390
|
if (sitemapBaseUrl) await run({
|
|
1106
1391
|
name: "add sitemap",
|
|
1107
1392
|
handler: async () => {
|
|
@@ -1111,12 +1396,13 @@ var ViteCommands = class {
|
|
|
1111
1396
|
}));
|
|
1112
1397
|
}
|
|
1113
1398
|
});
|
|
1114
|
-
if (flags.prerender ??
|
|
1399
|
+
if (flags.prerender ?? clientOptions.prerender) await run({
|
|
1115
1400
|
name: "pre-render pages",
|
|
1116
1401
|
handler: async () => {
|
|
1117
1402
|
await prerenderPages({
|
|
1118
1403
|
dist: `${distDir}/${clientDir}`,
|
|
1119
|
-
entry: `${distDir}/index.js
|
|
1404
|
+
entry: `${distDir}/index.js`,
|
|
1405
|
+
compress: clientOptions.precompress
|
|
1120
1406
|
});
|
|
1121
1407
|
}
|
|
1122
1408
|
});
|
|
@@ -1132,10 +1418,16 @@ var ViteCommands = class {
|
|
|
1132
1418
|
})
|
|
1133
1419
|
});
|
|
1134
1420
|
}
|
|
1135
|
-
if (flags.cloudflare || viteAlephaBuildOptions.cloudflare)
|
|
1136
|
-
|
|
1137
|
-
|
|
1138
|
-
|
|
1421
|
+
if (flags.cloudflare || viteAlephaBuildOptions.cloudflare) {
|
|
1422
|
+
const config = typeof viteAlephaBuildOptions.cloudflare === "boolean" ? {} : viteAlephaBuildOptions.cloudflare;
|
|
1423
|
+
await run({
|
|
1424
|
+
name: "add Cloudflare config",
|
|
1425
|
+
handler: () => generateCloudflare({
|
|
1426
|
+
distDir,
|
|
1427
|
+
config
|
|
1428
|
+
})
|
|
1429
|
+
});
|
|
1430
|
+
}
|
|
1139
1431
|
if (flags.docker || viteAlephaBuildOptions.docker) {
|
|
1140
1432
|
const dockerConfig = typeof viteAlephaBuildOptions.docker === "object" ? viteAlephaBuildOptions.docker : {};
|
|
1141
1433
|
await run({
|
|
@@ -1182,6 +1474,7 @@ const AlephaCli = $module({
|
|
|
1182
1474
|
name: "alepha.cli",
|
|
1183
1475
|
services: [
|
|
1184
1476
|
AlephaCliExtension,
|
|
1477
|
+
ChangelogCommands,
|
|
1185
1478
|
CoreCommands,
|
|
1186
1479
|
DrizzleCommands,
|
|
1187
1480
|
VerifyCommands,
|
|
@@ -1208,7 +1501,9 @@ var AlephaPackageBuilderCli = class {
|
|
|
1208
1501
|
});
|
|
1209
1502
|
pkgData.exports = {};
|
|
1210
1503
|
for (const item of modules) {
|
|
1211
|
-
|
|
1504
|
+
let m = `./${item.name.replace("core", "")}`;
|
|
1505
|
+
if (m.endsWith("/")) m = m.slice(0, -1);
|
|
1506
|
+
const path = m;
|
|
1212
1507
|
pkgData.exports[path] = {};
|
|
1213
1508
|
pkgData.exports[path].types = `./src/${item.name}/index.ts`;
|
|
1214
1509
|
if (item.native) pkgData.exports[path]["react-native"] = `./src/${item.name}/index.native.ts`;
|
|
@@ -1226,11 +1521,8 @@ var AlephaPackageBuilderCli = class {
|
|
|
1226
1521
|
const tmpDir = join(root, "node_modules/.alepha");
|
|
1227
1522
|
await this.fs.mkdir(tmpDir, { recursive: true }).catch(() => {});
|
|
1228
1523
|
await this.fs.writeFile(join(tmpDir, "module-dependencies.json"), JSON.stringify(modules, null, 2));
|
|
1229
|
-
const
|
|
1230
|
-
|
|
1231
|
-
packageName,
|
|
1232
|
-
...modules.map((item) => `${packageName}/${item.name.replace("-", "/")}`)
|
|
1233
|
-
];
|
|
1524
|
+
const tsconfig = await readFile(join(root, "../../tsconfig.json"), "utf-8");
|
|
1525
|
+
const external = Object.keys(JSON.parse(tsconfig).compilerOptions.paths);
|
|
1234
1526
|
await run.rm(this.dist);
|
|
1235
1527
|
const build = async (item) => {
|
|
1236
1528
|
const entries = [];
|
|
@@ -1243,7 +1535,11 @@ var AlephaPackageBuilderCli = class {
|
|
|
1243
1535
|
sourcemap: true,
|
|
1244
1536
|
fixedExtension: false,
|
|
1245
1537
|
platform: "node",
|
|
1246
|
-
external
|
|
1538
|
+
external,
|
|
1539
|
+
dts: {
|
|
1540
|
+
sourcemap: true,
|
|
1541
|
+
resolve: false
|
|
1542
|
+
}
|
|
1247
1543
|
});
|
|
1248
1544
|
if (item.native) entries.push({
|
|
1249
1545
|
entry: join(src, "index.native.ts"),
|
|
@@ -1261,10 +1557,9 @@ var AlephaPackageBuilderCli = class {
|
|
|
1261
1557
|
dts: false,
|
|
1262
1558
|
external
|
|
1263
1559
|
});
|
|
1264
|
-
const config = join(tmpDir, `tsdown-${item.name}.config.js`);
|
|
1560
|
+
const config = join(tmpDir, `tsdown-${item.name.replace("/", "-")}.config.js`);
|
|
1265
1561
|
await this.fs.writeFile(config, `export default ${JSON.stringify(entries, null, 2)};`);
|
|
1266
1562
|
await run(`npx tsdown -c=${config}`);
|
|
1267
|
-
await this.fs.rm(config);
|
|
1268
1563
|
};
|
|
1269
1564
|
const concurrency = Math.ceil(os.cpus().length / 2);
|
|
1270
1565
|
const queue = modules.slice();
|
|
@@ -1341,32 +1636,37 @@ function detectCircularDependencies(modules) {
|
|
|
1341
1636
|
}
|
|
1342
1637
|
async function analyzeModules(srcDir, packageName) {
|
|
1343
1638
|
const modules = [];
|
|
1344
|
-
|
|
1345
|
-
|
|
1346
|
-
const
|
|
1347
|
-
|
|
1348
|
-
|
|
1349
|
-
|
|
1350
|
-
|
|
1351
|
-
|
|
1352
|
-
|
|
1353
|
-
|
|
1354
|
-
|
|
1355
|
-
|
|
1356
|
-
|
|
1357
|
-
|
|
1358
|
-
|
|
1359
|
-
|
|
1639
|
+
async function scanDirectory(dir, prefix) {
|
|
1640
|
+
const entries = await readdir(dir, { withFileTypes: true });
|
|
1641
|
+
for (const entry of entries) if (entry.isDirectory()) {
|
|
1642
|
+
const moduleName = prefix ? `${prefix}/${entry.name}` : entry.name;
|
|
1643
|
+
const modulePath = join(dir, entry.name);
|
|
1644
|
+
if (await fileExists(join(modulePath, "index.ts"))) {
|
|
1645
|
+
const dependencies = /* @__PURE__ */ new Set();
|
|
1646
|
+
const hasBrowser = await fileExists(join(modulePath, "index.browser.ts"));
|
|
1647
|
+
const hasNative = await fileExists(join(modulePath, "index.native.ts"));
|
|
1648
|
+
const hasNode = await fileExists(join(modulePath, "index.node.ts"));
|
|
1649
|
+
const files = await getAllFiles(modulePath);
|
|
1650
|
+
for (const file of files) {
|
|
1651
|
+
const deps = extractAlephaDependencies(await readFile(file, "utf-8"), packageName, moduleName);
|
|
1652
|
+
for (const dep of deps) {
|
|
1653
|
+
if (dep.endsWith(".ts")) throw new Error(`Invalid dependency '${dep}' in module '${moduleName}'. Do not include file extensions in Alepha module imports.`);
|
|
1654
|
+
if (dep.includes("-")) throw new Error(`Invalid dependency '${dep}' in module '${moduleName}'. Use '/' instead of '-' in Alepha module imports.`);
|
|
1655
|
+
dependencies.add(dep);
|
|
1656
|
+
}
|
|
1657
|
+
}
|
|
1658
|
+
const module = {
|
|
1659
|
+
name: moduleName,
|
|
1660
|
+
dependencies: Array.from(dependencies)
|
|
1661
|
+
};
|
|
1662
|
+
if (hasNative) module.native = true;
|
|
1663
|
+
if (hasBrowser) module.browser = true;
|
|
1664
|
+
if (hasNode) module.node = true;
|
|
1665
|
+
modules.push(module);
|
|
1666
|
+
} else await scanDirectory(modulePath, moduleName);
|
|
1360
1667
|
}
|
|
1361
|
-
const module = {
|
|
1362
|
-
name: moduleName,
|
|
1363
|
-
dependencies: Array.from(dependencies)
|
|
1364
|
-
};
|
|
1365
|
-
if (hasNative) module.native = true;
|
|
1366
|
-
if (hasBrowser) module.browser = true;
|
|
1367
|
-
if (hasNode) module.node = true;
|
|
1368
|
-
modules.push(module);
|
|
1369
1668
|
}
|
|
1669
|
+
await scanDirectory(srcDir, "");
|
|
1370
1670
|
detectCircularDependencies(modules);
|
|
1371
1671
|
return modules;
|
|
1372
1672
|
}
|