alepha 0.15.2 → 0.15.3

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.
Files changed (132) hide show
  1. package/README.md +68 -80
  2. package/dist/api/audits/index.d.ts +332 -332
  3. package/dist/api/audits/index.d.ts.map +1 -1
  4. package/dist/api/files/index.d.ts +170 -170
  5. package/dist/api/files/index.d.ts.map +1 -1
  6. package/dist/api/jobs/index.d.ts +151 -151
  7. package/dist/api/keys/index.d.ts +195 -195
  8. package/dist/api/keys/index.d.ts.map +1 -1
  9. package/dist/api/parameters/index.d.ts +260 -260
  10. package/dist/api/users/index.d.ts +22 -11
  11. package/dist/api/users/index.d.ts.map +1 -1
  12. package/dist/api/users/index.js +7 -2
  13. package/dist/api/users/index.js.map +1 -1
  14. package/dist/api/verifications/index.d.ts +128 -128
  15. package/dist/api/verifications/index.d.ts.map +1 -1
  16. package/dist/bucket/index.d.ts +8 -0
  17. package/dist/bucket/index.d.ts.map +1 -1
  18. package/dist/bucket/index.js +7 -2
  19. package/dist/bucket/index.js.map +1 -1
  20. package/dist/cli/index.d.ts +191 -74
  21. package/dist/cli/index.d.ts.map +1 -1
  22. package/dist/cli/index.js +215 -48
  23. package/dist/cli/index.js.map +1 -1
  24. package/dist/command/index.d.ts +10 -0
  25. package/dist/command/index.d.ts.map +1 -1
  26. package/dist/command/index.js +67 -13
  27. package/dist/command/index.js.map +1 -1
  28. package/dist/core/index.browser.js +28 -21
  29. package/dist/core/index.browser.js.map +1 -1
  30. package/dist/core/index.d.ts.map +1 -1
  31. package/dist/core/index.js +28 -21
  32. package/dist/core/index.js.map +1 -1
  33. package/dist/core/index.native.js +28 -21
  34. package/dist/core/index.native.js.map +1 -1
  35. package/dist/email/index.d.ts +8 -0
  36. package/dist/email/index.d.ts.map +1 -1
  37. package/dist/email/index.js +7 -2
  38. package/dist/email/index.js.map +1 -1
  39. package/dist/mcp/index.d.ts +5 -5
  40. package/dist/orm/index.bun.js +32 -16
  41. package/dist/orm/index.bun.js.map +1 -1
  42. package/dist/orm/index.d.ts +4 -1
  43. package/dist/orm/index.d.ts.map +1 -1
  44. package/dist/orm/index.js +34 -22
  45. package/dist/orm/index.js.map +1 -1
  46. package/dist/react/router/index.browser.js +9 -15
  47. package/dist/react/router/index.browser.js.map +1 -1
  48. package/dist/react/router/index.d.ts +295 -407
  49. package/dist/react/router/index.d.ts.map +1 -1
  50. package/dist/react/router/index.js +566 -776
  51. package/dist/react/router/index.js.map +1 -1
  52. package/dist/redis/index.d.ts +19 -19
  53. package/dist/security/index.d.ts +42 -42
  54. package/dist/security/index.d.ts.map +1 -1
  55. package/dist/security/index.js +8 -7
  56. package/dist/security/index.js.map +1 -1
  57. package/dist/server/auth/index.d.ts +167 -167
  58. package/dist/server/core/index.d.ts +9 -9
  59. package/dist/server/health/index.d.ts +17 -17
  60. package/dist/server/links/index.d.ts +39 -39
  61. package/dist/server/static/index.js +7 -2
  62. package/dist/server/static/index.js.map +1 -1
  63. package/dist/server/swagger/index.d.ts +8 -0
  64. package/dist/server/swagger/index.d.ts.map +1 -1
  65. package/dist/server/swagger/index.js +7 -2
  66. package/dist/server/swagger/index.js.map +1 -1
  67. package/dist/sms/index.d.ts +8 -0
  68. package/dist/sms/index.d.ts.map +1 -1
  69. package/dist/sms/index.js +7 -2
  70. package/dist/sms/index.js.map +1 -1
  71. package/dist/system/index.browser.js +734 -12
  72. package/dist/system/index.browser.js.map +1 -1
  73. package/dist/system/index.d.ts +8 -0
  74. package/dist/system/index.d.ts.map +1 -1
  75. package/dist/system/index.js +7 -2
  76. package/dist/system/index.js.map +1 -1
  77. package/dist/vite/index.d.ts +1 -1
  78. package/dist/vite/index.js +15 -7
  79. package/dist/vite/index.js.map +1 -1
  80. package/package.json +4 -2
  81. package/src/api/logs/TODO.md +13 -10
  82. package/src/cli/apps/AlephaPackageBuilderCli.ts +9 -0
  83. package/src/cli/atoms/buildOptions.ts +99 -9
  84. package/src/cli/commands/build.ts +149 -32
  85. package/src/cli/commands/db.ts +5 -7
  86. package/src/cli/commands/init.spec.ts +50 -6
  87. package/src/cli/commands/init.ts +28 -5
  88. package/src/cli/providers/ViteDevServerProvider.ts +1 -10
  89. package/src/cli/services/AlephaCliUtils.ts +16 -0
  90. package/src/cli/services/PackageManagerUtils.ts +2 -0
  91. package/src/cli/services/ProjectScaffolder.spec.ts +97 -0
  92. package/src/cli/services/ProjectScaffolder.ts +28 -6
  93. package/src/cli/templates/agentMd.ts +6 -1
  94. package/src/cli/templates/apiAppSecurityTs.ts +11 -0
  95. package/src/cli/templates/apiIndexTs.ts +18 -4
  96. package/src/cli/templates/webAppRouterTs.ts +25 -1
  97. package/src/cli/templates/webHelloComponentTsx.ts +15 -5
  98. package/src/command/helpers/Runner.spec.ts +135 -0
  99. package/src/command/helpers/Runner.ts +4 -1
  100. package/src/command/providers/CliProvider.spec.ts +325 -0
  101. package/src/command/providers/CliProvider.ts +117 -7
  102. package/src/core/Alepha.ts +32 -25
  103. package/src/orm/index.bun.ts +1 -1
  104. package/src/orm/index.ts +2 -6
  105. package/src/orm/providers/drivers/BunSqliteProvider.ts +4 -1
  106. package/src/orm/providers/drivers/CloudflareD1Provider.ts +57 -30
  107. package/src/orm/providers/drivers/DatabaseProvider.ts +9 -1
  108. package/src/orm/providers/drivers/NodeSqliteProvider.ts +4 -1
  109. package/src/react/router/hooks/useActive.ts +1 -1
  110. package/src/react/router/hooks/useRouter.ts +1 -1
  111. package/src/react/router/index.ts +4 -0
  112. package/src/react/router/primitives/$page.browser.spec.tsx +24 -24
  113. package/src/react/router/primitives/$page.spec.tsx +0 -32
  114. package/src/react/router/primitives/$page.ts +6 -14
  115. package/src/react/router/providers/ReactBrowserProvider.ts +6 -3
  116. package/src/react/router/providers/ReactPageProvider.ts +1 -1
  117. package/src/react/router/providers/ReactPreloadProvider.spec.ts +142 -0
  118. package/src/react/router/providers/ReactPreloadProvider.ts +85 -0
  119. package/src/react/router/providers/ReactServerProvider.ts +7 -78
  120. package/src/react/router/providers/ReactServerTemplateProvider.spec.ts +210 -0
  121. package/src/react/router/providers/ReactServerTemplateProvider.ts +228 -665
  122. package/src/react/router/services/ReactRouter.ts +13 -13
  123. package/src/security/__tests__/ServerSecurityProvider.spec.ts +77 -0
  124. package/src/security/providers/ServerSecurityProvider.ts +30 -22
  125. package/src/server/core/providers/NodeHttpServerProvider.spec.ts +9 -3
  126. package/src/system/index.browser.ts +25 -0
  127. package/src/system/index.workerd.ts +1 -0
  128. package/src/system/providers/FileSystemProvider.ts +8 -0
  129. package/src/system/providers/NodeFileSystemProvider.ts +11 -2
  130. package/src/vite/tasks/buildServer.ts +2 -12
  131. package/src/vite/tasks/generateCloudflare.ts +10 -7
  132. package/src/vite/tasks/generateDocker.ts +4 -0
@@ -1,4 +1,4 @@
1
- import * as alepha1 from "alepha";
1
+ import * as alepha3 from "alepha";
2
2
  import { Alepha, AlephaError, Async, KIND, Primitive, Static, TObject, TSchema } from "alepha";
3
3
  import * as alepha_logger0 from "alepha/logger";
4
4
  import * as alepha_server0 from "alepha/server";
@@ -732,7 +732,7 @@ declare class SseMcpTransport {
732
732
  * POST endpoint for client-to-server JSON-RPC messages.
733
733
  */
734
734
  message: alepha_server0.RoutePrimitive<{
735
- body: alepha1.TRecord<string, alepha1.TAny>;
735
+ body: alepha3.TRecord<string, alepha3.TAny>;
736
736
  }>;
737
737
  /**
738
738
  * Format a message as an SSE event.
@@ -771,8 +771,8 @@ declare class StdioMcpTransport {
771
771
  protected readonly mcpServer: McpServerProvider;
772
772
  protected rl?: readline.Interface;
773
773
  protected started: boolean;
774
- onStart: alepha1.HookPrimitive<"start">;
775
- onStop: alepha1.HookPrimitive<"stop">;
774
+ onStart: alepha3.HookPrimitive<"start">;
775
+ onStop: alepha3.HookPrimitive<"stop">;
776
776
  /**
777
777
  * Start the stdio transport.
778
778
  */
@@ -812,7 +812,7 @@ declare class StdioMcpTransport {
812
812
  *
813
813
  * @module alepha.mcp
814
814
  */
815
- declare const AlephaMcp: alepha1.Service<alepha1.Module>;
815
+ declare const AlephaMcp: alepha3.Service<alepha3.Module>;
816
816
  //#endregion
817
817
  export { $prompt, $resource, $tool, AlephaMcp, JSONRPC_VERSION, type JsonRpcError, JsonRpcErrorCodes, type JsonRpcNotification, JsonRpcParseError, type JsonRpcRequest, type JsonRpcResponse, MCP_PROTOCOL_VERSION, type McpCapabilities, type McpClientInfo, type McpContent, type McpContext, McpError, McpErrorCodes, McpForbiddenError, type McpInitializeParams, type McpInitializeResult, McpInvalidParamsError, type McpJsonSchema, McpMethodNotFoundError, type McpPromptArgument, type McpPromptContent, type McpPromptDescriptor, type McpPromptGetParams, type McpPromptGetResult, type McpPromptMessage, McpPromptNotFoundError, type McpResourceContent, type McpResourceDescriptor, McpResourceNotFoundError, type McpResourceReadParams, type McpResourceReadResult, type McpServerInfo, McpServerProvider, type McpToolCallParams, type McpToolCallResult, type McpToolDescriptor, McpToolNotFoundError, McpUnauthorizedError, type PromptHandler, type PromptHandlerArgs, type PromptMessage, PromptPrimitive, type PromptPrimitiveOptions, type ResourceContent, type ResourceHandler, type ResourceHandlerArgs, ResourcePrimitive, type ResourcePrimitiveOptions, SseMcpTransport, StdioMcpTransport, type ToolHandler, type ToolHandlerArgs, type ToolHandlerResult, ToolPrimitive, type ToolPrimitiveOptions, type ToolPrimitiveSchema, createErrorResponse, createInternalError, createInvalidParamsError, createInvalidRequestError, createMethodNotFoundError, createNotification, createParseError, createResponse, isNotification, isValidJsonRpcRequest, parseMessage };
818
818
  //# sourceMappingURL=index.d.ts.map
@@ -209,9 +209,13 @@ var DatabaseProvider = class {
209
209
  return `migrations/${this.name}`;
210
210
  }
211
211
  /**
212
- * Base migration orchestration - handles environment logic
212
+ * Base migration orchestration - handles environment logic.
213
+ *
214
+ * Never runs in serverless mode - migrations should be applied during
215
+ * deployment, not at runtime (to avoid race conditions and timeouts).
213
216
  */
214
217
  async migrate() {
218
+ if (this.alepha.isServerless()) return;
215
219
  const migrationsFolder = this.getMigrationsFolder();
216
220
  if (this.alepha.isProduction()) await this.runProductionMigration(migrationsFolder);
217
221
  else if (this.alepha.isTest()) await this.runTestMigration();
@@ -1075,7 +1079,7 @@ var BunSqliteProvider = class extends DatabaseProvider {
1075
1079
  this.log.trace(query, { params });
1076
1080
  } }
1077
1081
  });
1078
- await this.migrate();
1082
+ if (!this.alepha.isServerless()) await this.migrate();
1079
1083
  this.log.info(`Using Bun SQLite database at ${filepath}`);
1080
1084
  }
1081
1085
  });
@@ -1116,7 +1120,7 @@ var CloudflareD1Provider = class extends DatabaseProvider {
1116
1120
  kit = $inject(DrizzleKitProvider);
1117
1121
  log = $logger();
1118
1122
  builder = $inject(SqliteModelBuilder);
1119
- env = $env(t.object({ DATABASE_URL: t.string({ description: "Expect to be 'cloudflare-d1://name:id'" }) }));
1123
+ env = $env(t.object({ DATABASE_URL: t.string({ description: "Expect to be 'd1://name:id'" }) }));
1120
1124
  d1;
1121
1125
  drizzleDb;
1122
1126
  get name() {
@@ -1140,21 +1144,33 @@ var CloudflareD1Provider = class extends DatabaseProvider {
1140
1144
  onStart = $hook({
1141
1145
  on: "start",
1142
1146
  handler: async () => {
1143
- const [bindingName] = this.env.DATABASE_URL.replace("cloudflare-d1://", "").split(":");
1144
- const cloudflareEnv = this.alepha.store.get("cloudflare.env");
1145
- if (!cloudflareEnv) throw new AlephaError("Cloudflare Workers environment not found in Alepha store under 'cloudflare.env'.");
1146
- const binding = cloudflareEnv[bindingName];
1147
- if (!binding) throw new AlephaError(`D1 binding '${bindingName}' not found in Cloudflare Workers environment.`);
1148
- this.d1 = binding;
1149
- const { drizzle } = await import("drizzle-orm/d1");
1150
- this.drizzleDb = drizzle(this.d1);
1151
- await this.migrate();
1152
- this.log.info("Using Cloudflare D1 database");
1147
+ try {
1148
+ const [bindingName] = this.env.DATABASE_URL.replace("d1://", "").split(":");
1149
+ const cloudflareEnv = this.alepha.store.get("cloudflare.env");
1150
+ if (!cloudflareEnv) throw new AlephaError("Cloudflare Workers environment not found in Alepha store under 'cloudflare.env'.");
1151
+ const binding = cloudflareEnv[bindingName];
1152
+ if (!binding) throw new AlephaError(`D1 binding '${bindingName}' not found in Cloudflare Workers environment.`);
1153
+ this.d1 = binding;
1154
+ const { drizzle } = await import("drizzle-orm/d1");
1155
+ this.drizzleDb = drizzle(this.d1);
1156
+ if (!this.alepha.isServerless()) await this.migrate();
1157
+ this.log.info("Using Cloudflare D1 database");
1158
+ } catch (error) {
1159
+ const errorMessage = error instanceof Error ? `${error.message}${error.stack ? `\n${error.stack}` : ""}` : String(error);
1160
+ this.log.error(`D1 initialization failed: ${errorMessage}`);
1161
+ throw error;
1162
+ }
1153
1163
  }
1154
1164
  });
1155
1165
  async executeMigrations(migrationsFolder) {
1156
- const { migrate } = await import("drizzle-orm/d1/migrator");
1157
- await migrate(this.db, { migrationsFolder });
1166
+ this.log.debug(`Running D1 migrations from '${migrationsFolder}'...`);
1167
+ try {
1168
+ const { migrate } = await import("drizzle-orm/d1/migrator");
1169
+ await migrate(this.db, { migrationsFolder });
1170
+ this.log.debug("D1 migrations completed successfully");
1171
+ } catch (error) {
1172
+ throw new AlephaError(`D1 migration failed from '${migrationsFolder}': ${error instanceof Error ? `${error.name}: ${error.message}` : String(error)}`, { cause: error });
1173
+ }
1158
1174
  }
1159
1175
  /**
1160
1176
  * Override development migration to skip sync (not supported on D1).
@@ -2795,7 +2811,7 @@ const AlephaOrm = $module({
2795
2811
  alepha.with(RepositoryProvider);
2796
2812
  const url = env.DATABASE_URL;
2797
2813
  const isPostgres = url?.startsWith("postgres:");
2798
- if (url?.startsWith("cloudflare-d1:")) {
2814
+ if (url?.startsWith("d1:")) {
2799
2815
  alepha.with({
2800
2816
  optional: true,
2801
2817
  provide: DatabaseProvider,