alepha 0.14.3 → 0.14.4

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 (114) hide show
  1. package/README.md +1 -1
  2. package/dist/api/audits/index.d.ts +338 -417
  3. package/dist/api/audits/index.d.ts.map +1 -1
  4. package/dist/api/files/index.d.ts +1 -80
  5. package/dist/api/files/index.d.ts.map +1 -1
  6. package/dist/api/jobs/index.d.ts +156 -235
  7. package/dist/api/jobs/index.d.ts.map +1 -1
  8. package/dist/api/notifications/index.d.ts +170 -249
  9. package/dist/api/notifications/index.d.ts.map +1 -1
  10. package/dist/api/parameters/index.d.ts +266 -345
  11. package/dist/api/parameters/index.d.ts.map +1 -1
  12. package/dist/api/users/index.d.ts +755 -834
  13. package/dist/api/users/index.d.ts.map +1 -1
  14. package/dist/api/verifications/index.d.ts +125 -125
  15. package/dist/api/verifications/index.d.ts.map +1 -1
  16. package/dist/cli/index.d.ts +116 -20
  17. package/dist/cli/index.d.ts.map +1 -1
  18. package/dist/cli/index.js +212 -124
  19. package/dist/cli/index.js.map +1 -1
  20. package/dist/command/index.d.ts +6 -11
  21. package/dist/command/index.d.ts.map +1 -1
  22. package/dist/command/index.js +2 -2
  23. package/dist/command/index.js.map +1 -1
  24. package/dist/core/index.browser.js +26 -4
  25. package/dist/core/index.browser.js.map +1 -1
  26. package/dist/core/index.d.ts +16 -1
  27. package/dist/core/index.d.ts.map +1 -1
  28. package/dist/core/index.js +26 -4
  29. package/dist/core/index.js.map +1 -1
  30. package/dist/core/index.native.js +26 -4
  31. package/dist/core/index.native.js.map +1 -1
  32. package/dist/logger/index.d.ts +1 -1
  33. package/dist/logger/index.d.ts.map +1 -1
  34. package/dist/logger/index.js +12 -2
  35. package/dist/logger/index.js.map +1 -1
  36. package/dist/mcp/index.d.ts.map +1 -1
  37. package/dist/mcp/index.js +1 -1
  38. package/dist/mcp/index.js.map +1 -1
  39. package/dist/orm/index.d.ts +37 -173
  40. package/dist/orm/index.d.ts.map +1 -1
  41. package/dist/orm/index.js +193 -422
  42. package/dist/orm/index.js.map +1 -1
  43. package/dist/server/auth/index.d.ts +167 -167
  44. package/dist/server/cache/index.d.ts +12 -0
  45. package/dist/server/cache/index.d.ts.map +1 -1
  46. package/dist/server/cache/index.js +55 -2
  47. package/dist/server/cache/index.js.map +1 -1
  48. package/dist/server/compress/index.d.ts +6 -0
  49. package/dist/server/compress/index.d.ts.map +1 -1
  50. package/dist/server/compress/index.js +36 -1
  51. package/dist/server/compress/index.js.map +1 -1
  52. package/dist/server/core/index.browser.js +2 -2
  53. package/dist/server/core/index.browser.js.map +1 -1
  54. package/dist/server/core/index.d.ts +10 -10
  55. package/dist/server/core/index.d.ts.map +1 -1
  56. package/dist/server/core/index.js +6 -3
  57. package/dist/server/core/index.js.map +1 -1
  58. package/dist/server/links/index.d.ts +39 -39
  59. package/dist/server/links/index.d.ts.map +1 -1
  60. package/dist/server/security/index.d.ts +9 -9
  61. package/dist/server/static/index.d.ts.map +1 -1
  62. package/dist/server/static/index.js +4 -0
  63. package/dist/server/static/index.js.map +1 -1
  64. package/dist/server/swagger/index.d.ts.map +1 -1
  65. package/dist/server/swagger/index.js +2 -3
  66. package/dist/server/swagger/index.js.map +1 -1
  67. package/dist/vite/index.d.ts +101 -106
  68. package/dist/vite/index.d.ts.map +1 -1
  69. package/dist/vite/index.js +571 -508
  70. package/dist/vite/index.js.map +1 -1
  71. package/package.json +1 -1
  72. package/src/cli/apps/AlephaCli.ts +0 -2
  73. package/src/cli/atoms/buildOptions.ts +88 -0
  74. package/src/cli/commands/build.ts +32 -69
  75. package/src/cli/commands/db.ts +0 -4
  76. package/src/cli/commands/dev.ts +16 -4
  77. package/src/cli/commands/gen/env.ts +53 -0
  78. package/src/cli/commands/gen/openapi.ts +1 -1
  79. package/src/cli/commands/gen/resource.ts +15 -0
  80. package/src/cli/commands/gen.ts +7 -1
  81. package/src/cli/commands/init.ts +0 -1
  82. package/src/cli/commands/test.ts +0 -1
  83. package/src/cli/commands/verify.ts +1 -1
  84. package/src/cli/defineConfig.ts +49 -7
  85. package/src/cli/index.ts +0 -1
  86. package/src/cli/services/AlephaCliUtils.ts +36 -25
  87. package/src/command/helpers/Runner.spec.ts +2 -2
  88. package/src/command/helpers/Runner.ts +1 -1
  89. package/src/command/primitives/$command.ts +0 -6
  90. package/src/command/providers/CliProvider.ts +1 -3
  91. package/src/core/Alepha.ts +42 -0
  92. package/src/logger/index.ts +15 -3
  93. package/src/mcp/transports/StdioMcpTransport.ts +1 -1
  94. package/src/orm/index.ts +2 -8
  95. package/src/queue/core/providers/WorkerProvider.spec.ts +48 -32
  96. package/src/server/cache/providers/ServerCacheProvider.spec.ts +183 -0
  97. package/src/server/cache/providers/ServerCacheProvider.ts +94 -9
  98. package/src/server/compress/providers/ServerCompressProvider.ts +61 -2
  99. package/src/server/core/helpers/ServerReply.ts +2 -2
  100. package/src/server/core/providers/ServerProvider.ts +11 -1
  101. package/src/server/static/providers/ServerStaticProvider.ts +10 -0
  102. package/src/server/swagger/providers/ServerSwaggerProvider.ts +5 -8
  103. package/src/vite/helpers/importViteReact.ts +13 -0
  104. package/src/vite/index.ts +1 -21
  105. package/src/vite/plugins/viteAlephaDev.ts +16 -1
  106. package/src/vite/plugins/viteAlephaSsrPreload.ts +222 -0
  107. package/src/vite/tasks/buildClient.ts +11 -0
  108. package/src/vite/tasks/buildServer.ts +47 -3
  109. package/src/vite/tasks/devServer.ts +69 -0
  110. package/src/vite/tasks/index.ts +2 -1
  111. package/src/cli/assets/viteConfigTs.ts +0 -14
  112. package/src/cli/commands/run.ts +0 -24
  113. package/src/vite/plugins/viteAlepha.ts +0 -37
  114. package/src/vite/plugins/viteAlephaBuild.ts +0 -281
@@ -2,7 +2,7 @@
2
2
  * Build tasks for Alepha applications.
3
3
  *
4
4
  * These tasks can be used by:
5
- * - Vite plugins (viteAlephaDev, viteAlephaBuild)
5
+ * - Vite plugins (viteAlephaDev, viteAlephaSsrPreload)
6
6
  * - CLI commands (alepha build, alepha dev)
7
7
  *
8
8
  * Each task is a standalone async function with explicit inputs and outputs.
@@ -13,6 +13,7 @@
13
13
  export * from "./buildClient.ts";
14
14
  export * from "./buildServer.ts";
15
15
  export * from "./copyAssets.ts";
16
+ export * from "./devServer.ts";
16
17
  export * from "./generateCloudflare.ts";
17
18
  export * from "./generateDocker.ts";
18
19
  export * from "./generateExternals.ts";
@@ -1,14 +0,0 @@
1
- export const viteConfigTs = (
2
- serverEntry?: string,
3
- ) => `
4
- import { viteAlepha } from "alepha/vite";
5
-
6
- export default {
7
- plugins: [
8
- viteAlepha(${serverEntry ? `{ serverEntry: "${serverEntry}" }` : ""}),
9
- ],
10
- test: {
11
- globals: true,
12
- },
13
- };
14
- `.trim();
@@ -1,24 +0,0 @@
1
- import { $inject, t } from "alepha";
2
- import { $command } from "alepha/command";
3
- import { AlephaCliUtils } from "../services/AlephaCliUtils.ts";
4
-
5
- export class RunCommand {
6
- protected readonly utils = $inject(AlephaCliUtils);
7
-
8
- public readonly run = $command({
9
- name: "run",
10
- hide: true,
11
- description: "Run a TypeScript file directly",
12
- flags: t.object({
13
- watch: t.optional(
14
- t.boolean({ description: "Watch file for changes", alias: "w" }),
15
- ),
16
- }),
17
- summary: false,
18
- args: t.text({ title: "path", description: "Filepath to run" }),
19
- handler: async ({ args, flags, root }) => {
20
- await this.utils.ensureTsConfig(root);
21
- await this.utils.exec(`tsx ${flags.watch ? "watch " : ""}${args}`);
22
- },
23
- });
24
- }
@@ -1,37 +0,0 @@
1
- import { createRequire } from "node:module";
2
- import { OPTIONS } from "alepha";
3
- import type { Plugin } from "vite";
4
- import {
5
- type ViteAlephaBuildOptions,
6
- viteAlephaBuild,
7
- } from "./viteAlephaBuild.ts";
8
- import { type ViteAlephaDevOptions, viteAlephaDev } from "./viteAlephaDev.ts";
9
-
10
- export type ViteAlephaOptions = ViteAlephaDevOptions &
11
- ViteAlephaBuildOptions & {
12
- react?: false;
13
- };
14
-
15
- export function viteAlepha(
16
- options: ViteAlephaOptions = {},
17
- ): (Plugin | Promise<Plugin>)[] {
18
- if (process.env.NODE_ENV === "test") {
19
- return [];
20
- }
21
-
22
- const plugins: (Plugin | Promise<Plugin>)[] & { [OPTIONS]?: any } = [];
23
-
24
- if (options.react !== false) {
25
- try {
26
- const { default: viteReact } = createRequire(import.meta.url)(
27
- "@vitejs/plugin-react",
28
- );
29
- plugins.push(viteReact());
30
- } catch (e) {}
31
- }
32
-
33
- plugins.push(viteAlephaDev(options), viteAlephaBuild(options));
34
- plugins[OPTIONS] = options;
35
-
36
- return plugins;
37
- }
@@ -1,281 +0,0 @@
1
- import { readFile, unlink, writeFile } from "node:fs/promises";
2
- import { OPTIONS } from "alepha";
3
- import type { Plugin, UserConfig } from "vite";
4
- import { boot } from "../helpers/boot.ts";
5
- import { fileExists } from "../helpers/fileExists.ts";
6
- import {
7
- type BuildClientOptions,
8
- buildClient,
9
- buildServer,
10
- copyAssets,
11
- type GenerateDockerOptions,
12
- generateCloudflare,
13
- generateDocker,
14
- generateSitemap,
15
- generateVercel,
16
- prerenderPages,
17
- type VercelConfig,
18
- type WranglerConfig,
19
- } from "../tasks/index.ts";
20
-
21
- export interface ViteAlephaBuildOptions {
22
- /**
23
- * Path to the entry file for the server build.
24
- * If empty, SSR build will be skipped.
25
- */
26
- serverEntry?: string | false;
27
-
28
- /**
29
- * Set false to skip the client build.
30
- * This is useful if you only want to build the server-side application.
31
- */
32
- client?: false | Partial<BuildClientOptions>;
33
-
34
- /**
35
- * If true, the build will be optimized for Vercel deployment.
36
- *
37
- * If `VERCEL_PROJECT_ID` and `VERCEL_ORG_ID` environment variables are set, .vercel will be generated with the correct configuration.
38
- *
39
- * @default false
40
- */
41
- vercel?: boolean | VercelConfig;
42
-
43
- /**
44
- * If true, the build will generate Cloudflare Workers configuration.
45
- *
46
- * @default false
47
- */
48
- cloudflare?: boolean | WranglerConfig;
49
-
50
- /**
51
- * If true, the build will be optimized for Docker deployment.
52
- * Additionally, it will generate a Dockerfile in the dist directory.
53
- */
54
- docker?: boolean | Omit<GenerateDockerOptions, "distDir">;
55
-
56
- /**
57
- * If true, build statistics will be printed after the build completes.
58
- */
59
- stats?: boolean;
60
- }
61
-
62
- /**
63
- * Build modes controlled by ALEPHA_BUILD_MODE environment variable:
64
- * - "cli": Skip plugin entirely, CLI handles all tasks
65
- * - "client": Only build client bundle
66
- * - "server": Only build server bundle
67
- * - undefined/other: Full build (default behavior)
68
- */
69
- export type AlephaBuildMode = "cli" | "client" | "server";
70
-
71
- /**
72
- * Alepha build plugin for Vite.
73
- *
74
- * This plugin orchestrates the complete build process:
75
- * 1. Build client (if index.html exists)
76
- * 2. Build server (SSR)
77
- * 3. Copy assets from packages
78
- * 4. Pre-render static pages (if enabled)
79
- * 5. Generate sitemap (if enabled)
80
- * 6. Generate deployment config (Vercel/Cloudflare/Docker)
81
- *
82
- * Build mode can be controlled via ALEPHA_BUILD_MODE env var for CLI integration.
83
- */
84
- export async function viteAlephaBuild(
85
- options: ViteAlephaBuildOptions = {},
86
- ): Promise<Plugin> {
87
- const entry = options.serverEntry ?? (await boot.getServerEntry());
88
- const distDir = "dist";
89
- const clientDir = "public";
90
-
91
- let rootConfig: UserConfig = {};
92
-
93
- return {
94
- name: "alepha:build",
95
- apply: "build",
96
- [OPTIONS as any]: options,
97
- config(config, ctx) {
98
- const buildMode = process.env.ALEPHA_BUILD_MODE as
99
- | AlephaBuildMode
100
- | undefined;
101
-
102
- // CLI mode: plugin does nothing, CLI handles everything
103
- if (buildMode === "cli") {
104
- return;
105
- }
106
-
107
- // For now, we run two separate builds: one for the client and one for the server
108
- // We distinguish them using an environment variable
109
- if (!process.env.VITE_DOUBLE_BUILD_DONE) {
110
- rootConfig = config;
111
- }
112
-
113
- if (ctx.isSsrBuild || !process.env.VITE_DOUBLE_BUILD_DONE) {
114
- // Server build, so we don't need the public directory
115
- config.publicDir = false;
116
- } else {
117
- // Client build, so we need the public directory
118
- config.publicDir = "public";
119
- }
120
- },
121
- async buildStart() {
122
- const buildMode = process.env.ALEPHA_BUILD_MODE as
123
- | AlephaBuildMode
124
- | undefined;
125
-
126
- // CLI mode: skip entirely
127
- if (buildMode === "cli") {
128
- return;
129
- }
130
-
131
- if (process.env.VITE_DOUBLE_BUILD_DONE === "true") {
132
- return;
133
- }
134
-
135
- process.env.VITE_DOUBLE_BUILD_DONE = "true";
136
-
137
- const hasClient =
138
- options.client !== false && (await fileExists("index.html"));
139
-
140
- const buildClientOptions =
141
- typeof options.client === "object" ? options.client : {};
142
-
143
- const stats = options.stats ?? process.env.ALEPHA_BUILD_STATS === "true";
144
-
145
- // Client-only mode
146
- if (buildMode === "client") {
147
- if (hasClient) {
148
- await buildClient({
149
- ...buildClientOptions,
150
- config: rootConfig,
151
- dist: `${distDir}/${clientDir}`,
152
- stats,
153
- });
154
- }
155
- process.exit(0);
156
- }
157
-
158
- // Server-only mode
159
- if (buildMode === "server") {
160
- if (entry) {
161
- // Check if client was already built (template exists)
162
- let clientBuilt = false;
163
- try {
164
- await readFile(`${distDir}/${clientDir}/index.html`, "utf-8");
165
- clientBuilt = true;
166
- } catch {
167
- // No client build
168
- }
169
-
170
- await buildServer({
171
- config: {
172
- base: rootConfig.base || "",
173
- },
174
- entry,
175
- distDir,
176
- clientDir: clientBuilt ? clientDir : undefined,
177
- stats,
178
- });
179
- }
180
- process.exit(0);
181
- }
182
-
183
- // Full build mode (default)
184
-
185
- // Task 1: Build client
186
- if (hasClient) {
187
- await buildClient({
188
- ...buildClientOptions,
189
- config: rootConfig,
190
- dist: `${distDir}/${clientDir}`,
191
- stats,
192
- });
193
- }
194
-
195
- let template = "";
196
- if (hasClient) {
197
- // Load output index.html for template embedding
198
- template = await readFile(
199
- `${distDir}/${clientDir}/index.html`,
200
- "utf-8",
201
- );
202
- }
203
-
204
- // Task 2: Build server
205
- if (entry) {
206
- await buildServer({
207
- config: {
208
- base: rootConfig.base || "",
209
- },
210
- entry,
211
- distDir,
212
- clientDir: hasClient ? clientDir : undefined,
213
- stats,
214
- });
215
-
216
- // Server will handle index.html if both client & server are built
217
- if (hasClient && options.serverEntry !== false) {
218
- await unlink(`${distDir}/${clientDir}/index.html`);
219
- }
220
-
221
- // Task 3: Copy assets (swagger ui & others)
222
- await copyAssets({
223
- entry: `${distDir}/index.js`,
224
- distDir,
225
- });
226
- }
227
-
228
- // Task 4: Generate sitemap
229
- if (buildClientOptions.sitemap && entry) {
230
- await writeFile(
231
- `${distDir}/${clientDir}/sitemap.xml`,
232
- await generateSitemap({
233
- entry: `${distDir}/index.js`,
234
- baseUrl: buildClientOptions.sitemap.hostname,
235
- }),
236
- );
237
- }
238
-
239
- // Task 5: Pre-render static pages
240
- if (buildClientOptions.prerender && template) {
241
- await prerenderPages({
242
- dist: `${distDir}/${clientDir}`,
243
- entry: `${distDir}/index.js`,
244
- compress: buildClientOptions.precompress,
245
- });
246
- }
247
-
248
- // Task 6: Generate deployment configurations
249
- if (options.vercel) {
250
- const config =
251
- typeof options.vercel === "boolean" ? {} : options.vercel;
252
- await generateVercel({
253
- distDir,
254
- clientDir,
255
- config,
256
- });
257
- }
258
-
259
- if (options.cloudflare) {
260
- const config =
261
- typeof options.cloudflare === "boolean" ? {} : options.cloudflare;
262
- await generateCloudflare({
263
- distDir,
264
- config,
265
- });
266
- }
267
-
268
- if (options.docker) {
269
- const dockerOpts =
270
- typeof options.docker === "boolean" ? {} : options.docker;
271
- await generateDocker({
272
- distDir,
273
- ...dockerOpts,
274
- });
275
- }
276
-
277
- // Prevent the default build from running again
278
- process.exit(0);
279
- },
280
- };
281
- }