alepha 0.15.4 → 0.15.5
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 +26 -11
- package/dist/api/audits/index.d.ts +3 -3
- package/dist/api/audits/index.js +3 -3
- package/dist/api/audits/index.js.map +1 -1
- package/dist/api/files/index.d.ts +3 -3
- package/dist/api/files/index.js +3 -3
- package/dist/api/files/index.js.map +1 -1
- package/dist/api/jobs/index.d.ts +47 -4
- package/dist/api/jobs/index.d.ts.map +1 -1
- package/dist/api/jobs/index.js +100 -5
- package/dist/api/jobs/index.js.map +1 -1
- package/dist/api/keys/index.d.ts +3 -3
- package/dist/api/keys/index.js +3 -3
- package/dist/api/keys/index.js.map +1 -1
- package/dist/api/notifications/index.d.ts +3 -3
- package/dist/api/notifications/index.js +3 -3
- package/dist/api/notifications/index.js.map +1 -1
- package/dist/api/parameters/index.d.ts +263 -263
- package/dist/api/parameters/index.d.ts.map +1 -1
- package/dist/api/parameters/index.js +31 -30
- package/dist/api/parameters/index.js.map +1 -1
- package/dist/api/users/index.d.ts +373 -67
- package/dist/api/users/index.d.ts.map +1 -1
- package/dist/api/users/index.js +273 -72
- package/dist/api/users/index.js.map +1 -1
- package/dist/api/verifications/index.d.ts +3 -3
- package/dist/api/verifications/index.js +3 -3
- package/dist/api/verifications/index.js.map +1 -1
- package/dist/batch/index.d.ts +7 -7
- package/dist/batch/index.js +3 -3
- package/dist/batch/index.js.map +1 -1
- package/dist/bucket/index.d.ts +3 -3
- package/dist/bucket/index.js +6 -6
- package/dist/bucket/index.js.map +1 -1
- package/dist/cache/core/index.d.ts +3 -3
- package/dist/cache/core/index.js +3 -3
- package/dist/cache/core/index.js.map +1 -1
- package/dist/cli/index.d.ts +5607 -20
- package/dist/cli/index.d.ts.map +1 -1
- package/dist/cli/index.js +103 -89
- package/dist/cli/index.js.map +1 -1
- package/dist/command/index.d.ts +11 -4
- package/dist/command/index.d.ts.map +1 -1
- package/dist/command/index.js +8 -6
- package/dist/command/index.js.map +1 -1
- package/dist/core/index.browser.js.map +1 -1
- package/dist/core/index.d.ts +4 -8
- package/dist/core/index.d.ts.map +1 -1
- package/dist/core/index.js +3 -3
- package/dist/core/index.js.map +1 -1
- package/dist/core/index.native.js.map +1 -1
- package/dist/datetime/index.d.ts +3 -3
- package/dist/datetime/index.js +3 -3
- package/dist/datetime/index.js.map +1 -1
- package/dist/email/index.d.ts +3 -3
- package/dist/email/index.js +8 -8
- package/dist/email/index.js.map +1 -1
- package/dist/fake/index.d.ts +3 -3
- package/dist/fake/index.js +3 -3
- package/dist/fake/index.js.map +1 -1
- package/dist/lock/core/index.d.ts +3 -3
- package/dist/lock/core/index.js +3 -3
- package/dist/lock/core/index.js.map +1 -1
- package/dist/logger/index.d.ts +3 -3
- package/dist/logger/index.js +6 -3
- package/dist/logger/index.js.map +1 -1
- package/dist/mcp/index.d.ts +3 -3
- package/dist/mcp/index.js +3 -3
- package/dist/mcp/index.js.map +1 -1
- package/dist/orm/index.d.ts +12 -12
- package/dist/orm/index.js +4 -4
- package/dist/orm/index.js.map +1 -1
- package/dist/queue/core/index.d.ts +3 -3
- package/dist/queue/core/index.js +3 -3
- package/dist/queue/core/index.js.map +1 -1
- package/dist/react/auth/index.d.ts +3 -3
- package/dist/react/auth/index.js +3 -3
- package/dist/react/auth/index.js.map +1 -1
- package/dist/react/core/index.d.ts +3 -3
- package/dist/react/core/index.js +3 -3
- package/dist/react/core/index.js.map +1 -1
- package/dist/react/form/index.d.ts +3 -3
- package/dist/react/form/index.js +3 -3
- package/dist/react/form/index.js.map +1 -1
- package/dist/react/head/index.d.ts +3 -3
- package/dist/react/head/index.js +3 -3
- package/dist/react/head/index.js.map +1 -1
- package/dist/react/i18n/index.d.ts +3 -3
- package/dist/react/i18n/index.js +3 -3
- package/dist/react/i18n/index.js.map +1 -1
- package/dist/react/intro/index.css +337 -0
- package/dist/react/intro/index.css.map +1 -0
- package/dist/react/intro/index.d.ts +10 -0
- package/dist/react/intro/index.d.ts.map +1 -0
- package/dist/react/intro/index.js +222 -0
- package/dist/react/intro/index.js.map +1 -0
- package/dist/react/router/index.browser.js +2 -2
- package/dist/react/router/index.browser.js.map +1 -1
- package/dist/react/router/index.d.ts +1 -1
- package/dist/react/router/index.d.ts.map +1 -1
- package/dist/react/router/index.js +5 -5
- package/dist/react/router/index.js.map +1 -1
- package/dist/redis/index.d.ts +17 -17
- package/dist/redis/index.js +3 -3
- package/dist/redis/index.js.map +1 -1
- package/dist/retry/index.d.ts +3 -3
- package/dist/retry/index.js +3 -3
- package/dist/retry/index.js.map +1 -1
- package/dist/scheduler/index.d.ts +3 -3
- package/dist/scheduler/index.js +3 -3
- package/dist/scheduler/index.js.map +1 -1
- package/dist/security/index.d.ts +3 -3
- package/dist/security/index.js +5 -5
- package/dist/security/index.js.map +1 -1
- package/dist/server/auth/index.d.ts +3 -3
- package/dist/server/auth/index.js +3 -3
- package/dist/server/auth/index.js.map +1 -1
- package/dist/server/cache/index.d.ts +3 -3
- package/dist/server/cache/index.js +3 -3
- package/dist/server/cache/index.js.map +1 -1
- package/dist/server/compress/index.d.ts +3 -3
- package/dist/server/compress/index.js +3 -3
- package/dist/server/compress/index.js.map +1 -1
- package/dist/server/cookies/index.d.ts +3 -3
- package/dist/server/cookies/index.js +3 -3
- package/dist/server/cookies/index.js.map +1 -1
- package/dist/server/core/index.d.ts +5 -16
- package/dist/server/core/index.d.ts.map +1 -1
- package/dist/server/core/index.js +13 -29
- package/dist/server/core/index.js.map +1 -1
- package/dist/server/cors/index.d.ts +3 -3
- package/dist/server/cors/index.js +3 -3
- package/dist/server/cors/index.js.map +1 -1
- package/dist/server/health/index.d.ts +20 -20
- package/dist/server/health/index.js +3 -3
- package/dist/server/health/index.js.map +1 -1
- package/dist/server/helmet/index.d.ts +3 -3
- package/dist/server/helmet/index.js +3 -3
- package/dist/server/helmet/index.js.map +1 -1
- package/dist/server/links/index.d.ts +42 -42
- package/dist/server/links/index.d.ts.map +1 -1
- package/dist/server/links/index.js +3 -3
- package/dist/server/links/index.js.map +1 -1
- package/dist/server/metrics/index.d.ts +3 -3
- package/dist/server/metrics/index.js +3 -3
- package/dist/server/metrics/index.js.map +1 -1
- package/dist/server/multipart/index.d.ts +3 -3
- package/dist/server/multipart/index.js +3 -3
- package/dist/server/multipart/index.js.map +1 -1
- package/dist/server/proxy/index.d.ts +3 -3
- package/dist/server/proxy/index.js +3 -3
- package/dist/server/proxy/index.js.map +1 -1
- package/dist/server/rate-limit/index.d.ts +3 -3
- package/dist/server/rate-limit/index.js +3 -3
- package/dist/server/rate-limit/index.js.map +1 -1
- package/dist/server/static/index.d.ts +3 -3
- package/dist/server/static/index.js +6 -6
- package/dist/server/static/index.js.map +1 -1
- package/dist/server/swagger/index.d.ts +3 -3
- package/dist/server/swagger/index.js +6 -6
- package/dist/server/swagger/index.js.map +1 -1
- package/dist/sms/index.d.ts +3 -3
- package/dist/sms/index.js +6 -6
- package/dist/sms/index.js.map +1 -1
- package/dist/system/index.d.ts +3 -3
- package/dist/system/index.js +3 -3
- package/dist/system/index.js.map +1 -1
- package/dist/thread/index.d.ts +3 -3
- package/dist/thread/index.js +3 -3
- package/dist/thread/index.js.map +1 -1
- package/dist/topic/core/index.d.ts +3 -3
- package/dist/topic/core/index.js +3 -3
- package/dist/topic/core/index.js.map +1 -1
- package/dist/vite/index.d.ts +6284 -3
- package/dist/vite/index.d.ts.map +1 -1
- package/dist/websocket/index.d.ts +3 -3
- package/dist/websocket/index.js +3 -3
- package/dist/websocket/index.js.map +1 -1
- package/package.json +7 -2
- package/src/api/audits/index.ts +3 -3
- package/src/api/files/index.ts +3 -3
- package/src/api/jobs/controllers/AdminJobController.ts +15 -2
- package/src/api/jobs/index.ts +4 -3
- package/src/api/jobs/services/JobAudits.spec.ts +89 -0
- package/src/api/jobs/services/JobAudits.ts +101 -0
- package/src/api/keys/index.ts +3 -3
- package/src/api/notifications/index.ts +3 -3
- package/src/api/parameters/index.ts +5 -3
- package/src/api/users/__tests__/ApiKeys-integration.spec.ts +1 -1
- package/src/api/users/__tests__/ApiKeys.spec.ts +1 -1
- package/src/api/users/__tests__/EmailVerification.spec.ts +16 -1
- package/src/api/users/__tests__/PasswordReset.spec.ts +11 -0
- package/src/api/users/atoms/realmAuthSettingsAtom.ts +10 -0
- package/src/api/users/index.ts +8 -9
- package/src/api/users/primitives/$realm.ts +117 -19
- package/src/api/users/providers/RealmProvider.ts +15 -7
- package/src/api/users/services/CredentialService.spec.ts +11 -0
- package/src/api/users/services/CredentialService.ts +47 -24
- package/src/api/users/services/IdentityService.ts +12 -4
- package/src/api/users/services/RegistrationService.spec.ts +11 -0
- package/src/api/users/services/RegistrationService.ts +33 -12
- package/src/api/users/services/SessionService.ts +83 -12
- package/src/api/users/services/UserAudits.ts +47 -0
- package/src/api/users/services/UserFiles.ts +19 -0
- package/src/api/users/services/UserJobs.spec.ts +107 -0
- package/src/api/users/services/UserJobs.ts +62 -0
- package/src/api/users/services/UserParameters.ts +23 -0
- package/src/api/users/services/UserService.ts +34 -17
- package/src/api/verifications/index.ts +3 -3
- package/src/batch/index.ts +3 -3
- package/src/bucket/index.ts +3 -3
- package/src/cache/core/index.ts +3 -3
- package/src/cli/commands/db.ts +9 -0
- package/src/cli/commands/init.spec.ts +2 -17
- package/src/cli/commands/init.ts +37 -1
- package/src/cli/providers/ViteDevServerProvider.ts +5 -2
- package/src/cli/services/AlephaCliUtils.ts +17 -0
- package/src/cli/services/PackageManagerUtils.ts +15 -1
- package/src/cli/services/ProjectScaffolder.ts +8 -13
- package/src/cli/templates/agentMd.ts +2 -25
- package/src/cli/templates/apiAppSecurityTs.ts +37 -2
- package/src/cli/templates/mainCss.ts +2 -32
- package/src/cli/templates/webAppRouterTs.ts +5 -5
- package/src/cli/templates/webHomeComponentTsx.ts +10 -0
- package/src/command/helpers/Runner.ts +14 -1
- package/src/command/index.ts +3 -3
- package/src/core/helpers/primitive.ts +0 -5
- package/src/core/index.ts +3 -3
- package/src/datetime/index.ts +3 -3
- package/src/email/index.ts +3 -3
- package/src/email/providers/LocalEmailProvider.ts +2 -2
- package/src/fake/index.ts +3 -3
- package/src/lock/core/index.ts +3 -3
- package/src/logger/index.ts +3 -3
- package/src/logger/providers/PrettyFormatterProvider.ts +7 -0
- package/src/mcp/index.ts +3 -3
- package/src/orm/index.ts +3 -3
- package/src/orm/providers/drivers/NodeSqliteProvider.ts +1 -1
- package/src/queue/core/index.ts +3 -3
- package/src/react/auth/index.ts +3 -3
- package/src/react/core/index.ts +3 -3
- package/src/react/form/index.ts +3 -3
- package/src/react/head/index.ts +3 -3
- package/src/react/i18n/index.ts +3 -3
- package/src/react/intro/components/GettingStarted.css +334 -0
- package/src/react/intro/components/GettingStarted.tsx +276 -0
- package/src/react/intro/index.ts +1 -0
- package/src/react/router/index.browser.ts +2 -0
- package/src/react/router/index.ts +2 -0
- package/src/redis/index.ts +3 -3
- package/src/retry/index.ts +3 -3
- package/src/router/index.ts +3 -3
- package/src/scheduler/index.ts +3 -3
- package/src/security/index.ts +3 -3
- package/src/security/providers/JwtProvider.ts +2 -2
- package/src/server/auth/index.ts +3 -3
- package/src/server/cache/index.ts +3 -3
- package/src/server/compress/index.ts +3 -3
- package/src/server/cookies/index.ts +3 -3
- package/src/server/core/index.ts +3 -3
- package/src/server/core/primitives/$action.spec.ts +3 -2
- package/src/server/core/primitives/$action.ts +6 -2
- package/src/server/core/providers/NodeHttpServerProvider.ts +2 -15
- package/src/server/core/providers/ServerProvider.ts +4 -2
- package/src/server/core/providers/ServerRouterProvider.ts +5 -27
- package/src/server/cors/index.ts +3 -3
- package/src/server/health/index.ts +3 -3
- package/src/server/helmet/index.ts +3 -3
- package/src/server/links/index.ts +3 -3
- package/src/server/metrics/index.ts +3 -3
- package/src/server/multipart/index.ts +3 -3
- package/src/server/proxy/index.ts +3 -3
- package/src/server/rate-limit/index.ts +3 -3
- package/src/server/static/index.ts +3 -3
- package/src/server/swagger/index.ts +3 -3
- package/src/sms/index.ts +3 -3
- package/src/system/index.ts +3 -3
- package/src/thread/index.ts +3 -3
- package/src/topic/core/index.ts +3 -3
- package/src/websocket/index.ts +3 -3
- package/src/cli/templates/webHelloComponentTsx.ts +0 -30
- /package/src/api/users/{notifications → services}/UserNotifications.ts +0 -0
package/dist/cli/index.js
CHANGED
|
@@ -1814,9 +1814,9 @@ var ShellProvider = class {};
|
|
|
1814
1814
|
//#endregion
|
|
1815
1815
|
//#region ../../src/system/index.ts
|
|
1816
1816
|
/**
|
|
1817
|
-
* |
|
|
1818
|
-
*
|
|
1819
|
-
* |
|
|
1817
|
+
* | Stability | Since | Runtime |
|
|
1818
|
+
* |-----------|-------|---------|
|
|
1819
|
+
* | 3 - stable | 0.14.0 | node, bun, browser|
|
|
1820
1820
|
*
|
|
1821
1821
|
* System-level abstractions for portable code across runtimes.
|
|
1822
1822
|
*
|
|
@@ -2238,6 +2238,18 @@ ${models.map((it) => `export const ${it} = models["${it}"];`).join("\n")}
|
|
|
2238
2238
|
return "unknown";
|
|
2239
2239
|
}
|
|
2240
2240
|
}
|
|
2241
|
+
/**
|
|
2242
|
+
* Get the user's email from git config.
|
|
2243
|
+
*
|
|
2244
|
+
* @returns The git user email or undefined if not configured
|
|
2245
|
+
*/
|
|
2246
|
+
async getGitEmail() {
|
|
2247
|
+
try {
|
|
2248
|
+
return (await this.shell.run("git config user.email", { capture: true })).trim() || void 0;
|
|
2249
|
+
} catch {
|
|
2250
|
+
return;
|
|
2251
|
+
}
|
|
2252
|
+
}
|
|
2241
2253
|
};
|
|
2242
2254
|
|
|
2243
2255
|
//#endregion
|
|
@@ -2264,6 +2276,7 @@ var devDependencies = {
|
|
|
2264
2276
|
"react-dom": "^19.2.4",
|
|
2265
2277
|
"swagger-ui-dist": "^5.31.0",
|
|
2266
2278
|
"tsdown": "^0.20.1",
|
|
2279
|
+
"vite": "^7.3.1",
|
|
2267
2280
|
"vitest": "^4.0.18",
|
|
2268
2281
|
"worker-mailer": "^1.2.1"
|
|
2269
2282
|
};
|
|
@@ -2290,6 +2303,7 @@ var PackageManagerUtils = class {
|
|
|
2290
2303
|
alepha = $inject(Alepha);
|
|
2291
2304
|
/**
|
|
2292
2305
|
* Detect the package manager used in the project.
|
|
2306
|
+
* Checks current directory first, then workspace root if in a monorepo.
|
|
2293
2307
|
*/
|
|
2294
2308
|
async getPackageManager(root, pm) {
|
|
2295
2309
|
if (pm) return pm;
|
|
@@ -2297,6 +2311,9 @@ var PackageManagerUtils = class {
|
|
|
2297
2311
|
if (await this.fs.exists(this.fs.join(root, "bun.lock"))) return "bun";
|
|
2298
2312
|
if (await this.fs.exists(this.fs.join(root, "yarn.lock"))) return "yarn";
|
|
2299
2313
|
if (await this.fs.exists(this.fs.join(root, "pnpm-lock.yaml"))) return "pnpm";
|
|
2314
|
+
if (await this.fs.exists(this.fs.join(root, "package-lock.json"))) return "npm";
|
|
2315
|
+
const workspace = await this.getWorkspaceContext(root);
|
|
2316
|
+
if (workspace.packageManager) return workspace.packageManager;
|
|
2300
2317
|
return "npm";
|
|
2301
2318
|
}
|
|
2302
2319
|
/**
|
|
@@ -2493,7 +2510,7 @@ var PackageManagerUtils = class {
|
|
|
2493
2510
|
generatePackageJsonContent(modes) {
|
|
2494
2511
|
const alephaDeps = devDependencies;
|
|
2495
2512
|
const dependencies = { alepha: `^${version}` };
|
|
2496
|
-
const devDependencies$1 = {};
|
|
2513
|
+
const devDependencies$1 = { vite: alephaDeps.vite };
|
|
2497
2514
|
if (!modes.isPackage) {
|
|
2498
2515
|
devDependencies$1["@biomejs/biome"] = alephaDeps["@biomejs/biome"];
|
|
2499
2516
|
if (modes.test) devDependencies$1.vitest = alephaDeps.vitest;
|
|
@@ -2545,6 +2562,7 @@ This file provides guidance to AI coding assistants when working with this Aleph
|
|
|
2545
2562
|
|
|
2546
2563
|
### Pages with \`$page\`
|
|
2547
2564
|
\`\`\`tsx
|
|
2565
|
+
import { t } from "alepha";
|
|
2548
2566
|
import { $page } from "alepha/react/router";
|
|
2549
2567
|
import { $client } from "alepha/server/links";
|
|
2550
2568
|
import type { UserController } from "./UserController.ts";
|
|
@@ -2709,31 +2727,6 @@ class AppRouter {
|
|
|
2709
2727
|
}
|
|
2710
2728
|
\`\`\`
|
|
2711
2729
|
|
|
2712
|
-
### Modules with \`$module\`
|
|
2713
|
-
\`\`\`typescript
|
|
2714
|
-
// src/api/index.ts - Groups all API services
|
|
2715
|
-
import { $module } from "alepha";
|
|
2716
|
-
|
|
2717
|
-
export const ApiModule = $module({
|
|
2718
|
-
name: "app.api",
|
|
2719
|
-
services: [
|
|
2720
|
-
UserController,
|
|
2721
|
-
OrderController,
|
|
2722
|
-
UserService,
|
|
2723
|
-
],
|
|
2724
|
-
});
|
|
2725
|
-
|
|
2726
|
-
// src/web/index.ts - Groups all web services (React only)
|
|
2727
|
-
export const WebModule = $module({
|
|
2728
|
-
name: "app.web",
|
|
2729
|
-
services: [AppRouter, Toaster],
|
|
2730
|
-
register(alepha) {
|
|
2731
|
-
// Optional: configure additional services
|
|
2732
|
-
alepha.with(SomeLibrary);
|
|
2733
|
-
},
|
|
2734
|
-
});
|
|
2735
|
-
\`\`\`
|
|
2736
|
-
|
|
2737
2730
|
### Environment Variables
|
|
2738
2731
|
\`\`\`typescript
|
|
2739
2732
|
import { $env, t } from "alepha";
|
|
@@ -2777,6 +2770,7 @@ describe("UserService", () => {
|
|
|
2777
2770
|
it("should create user", async () => {
|
|
2778
2771
|
const alepha = Alepha.create().with(UserService);
|
|
2779
2772
|
const service = alepha.inject(UserService);
|
|
2773
|
+
await alepha.start();
|
|
2780
2774
|
|
|
2781
2775
|
const user = await service.create({ email: "test@example.com" });
|
|
2782
2776
|
expect(user.email).toBe("test@example.com");
|
|
@@ -2831,13 +2825,46 @@ Full framework source available at \`node_modules/alepha/src/\`.
|
|
|
2831
2825
|
|
|
2832
2826
|
//#endregion
|
|
2833
2827
|
//#region ../../src/cli/templates/apiAppSecurityTs.ts
|
|
2834
|
-
const apiAppSecurityTs = () => {
|
|
2828
|
+
const apiAppSecurityTs = (opts = {}) => {
|
|
2835
2829
|
return `
|
|
2836
2830
|
import { $realm } from "alepha/api/users";
|
|
2837
2831
|
|
|
2838
2832
|
export class AppSecurity {
|
|
2839
2833
|
users = $realm({
|
|
2840
|
-
|
|
2834
|
+
settings: {
|
|
2835
|
+
// Auto-promote these users to admin on login
|
|
2836
|
+
adminEmails: ${opts.adminEmail ? `["${opts.adminEmail}"]` : "[]"},
|
|
2837
|
+
adminUsernames: [],
|
|
2838
|
+
|
|
2839
|
+
// Registration & login options
|
|
2840
|
+
registrationAllowed: true,
|
|
2841
|
+
emailEnabled: true,
|
|
2842
|
+
emailRequired: true,
|
|
2843
|
+
usernameEnabled: false,
|
|
2844
|
+
usernameRequired: false,
|
|
2845
|
+
phoneEnabled: false,
|
|
2846
|
+
phoneRequired: false,
|
|
2847
|
+
|
|
2848
|
+
// Verification (requires notifications feature)
|
|
2849
|
+
verifyEmailRequired: false,
|
|
2850
|
+
verifyPhoneRequired: false,
|
|
2851
|
+
resetPasswordAllowed: false,
|
|
2852
|
+
},
|
|
2853
|
+
features: {
|
|
2854
|
+
// Enable additional features
|
|
2855
|
+
notifications: false,
|
|
2856
|
+
audits: false,
|
|
2857
|
+
apiKeys: false,
|
|
2858
|
+
jobs: false,
|
|
2859
|
+
files: false,
|
|
2860
|
+
parameters: false,
|
|
2861
|
+
},
|
|
2862
|
+
identities: {
|
|
2863
|
+
// Enable authentication providers
|
|
2864
|
+
credentials: true,
|
|
2865
|
+
// google: true,
|
|
2866
|
+
// github: true,
|
|
2867
|
+
},
|
|
2841
2868
|
});
|
|
2842
2869
|
}
|
|
2843
2870
|
`.trim();
|
|
@@ -3004,31 +3031,8 @@ run(alepha);
|
|
|
3004
3031
|
|
|
3005
3032
|
//#endregion
|
|
3006
3033
|
//#region ../../src/cli/templates/mainCss.ts
|
|
3007
|
-
const mainCss = (
|
|
3008
|
-
|
|
3009
|
-
return `
|
|
3010
|
-
* {
|
|
3011
|
-
box-sizing: border-box;
|
|
3012
|
-
margin: 0;
|
|
3013
|
-
padding: 0;
|
|
3014
|
-
}
|
|
3015
|
-
|
|
3016
|
-
html,
|
|
3017
|
-
body {
|
|
3018
|
-
height: 100%;
|
|
3019
|
-
}
|
|
3020
|
-
|
|
3021
|
-
body {
|
|
3022
|
-
font-family: system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto,
|
|
3023
|
-
"Helvetica Neue", Arial, sans-serif;
|
|
3024
|
-
line-height: 1.5;
|
|
3025
|
-
-webkit-font-smoothing: antialiased;
|
|
3026
|
-
}
|
|
3027
|
-
|
|
3028
|
-
#root {
|
|
3029
|
-
height: 100%;
|
|
3030
|
-
}
|
|
3031
|
-
`.trim();
|
|
3034
|
+
const mainCss = () => {
|
|
3035
|
+
return `@import "@alepha/ui/styles";`;
|
|
3032
3036
|
};
|
|
3033
3037
|
|
|
3034
3038
|
//#endregion
|
|
@@ -3082,18 +3086,18 @@ const webAppRouterTs = (options) => {
|
|
|
3082
3086
|
if (options.auth) classMembers.push(" uiAuth = $uiAuth();");
|
|
3083
3087
|
if (options.admin) classMembers.push(" uiAdmin = $uiAdmin();");
|
|
3084
3088
|
classMembers.push(` layout = $page({
|
|
3085
|
-
|
|
3086
|
-
|
|
3087
|
-
|
|
3089
|
+
parent: this.ui.root,
|
|
3090
|
+
children: () => [this.home],
|
|
3091
|
+
});`);
|
|
3088
3092
|
}
|
|
3089
3093
|
if (options.api) classMembers.push(` home = $page({
|
|
3090
3094
|
path: "/",
|
|
3091
|
-
lazy: () => import("./components/
|
|
3095
|
+
lazy: () => import("./components/Home.tsx"),
|
|
3092
3096
|
loader: () => this.api.hello(),
|
|
3093
3097
|
});`);
|
|
3094
3098
|
else classMembers.push(` home = $page({
|
|
3095
3099
|
path: "/",
|
|
3096
|
-
lazy: () => import("./components/
|
|
3100
|
+
lazy: () => import("./components/Home.tsx"),
|
|
3097
3101
|
});`);
|
|
3098
3102
|
return `${imports.join("\n")}
|
|
3099
3103
|
|
|
@@ -3103,30 +3107,15 @@ ${classMembers.join("\n\n")}
|
|
|
3103
3107
|
};
|
|
3104
3108
|
|
|
3105
3109
|
//#endregion
|
|
3106
|
-
//#region ../../src/cli/templates/
|
|
3107
|
-
const
|
|
3108
|
-
|
|
3109
|
-
if (options.auth) imports.push("import { UserButton } from \"@alepha/ui/auth\";");
|
|
3110
|
-
imports.push("import { useState } from \"react\";");
|
|
3111
|
-
const userButton = options.auth ? "\n <UserButton />" : "";
|
|
3112
|
-
return `${imports.join("\n")}
|
|
3113
|
-
|
|
3114
|
-
interface Props {
|
|
3115
|
-
message?: string;
|
|
3116
|
-
}
|
|
3110
|
+
//#region ../../src/cli/templates/webHomeComponentTsx.ts
|
|
3111
|
+
const webHomeComponentTsx = () => {
|
|
3112
|
+
return `import { GettingStarted } from "alepha/react/intro";
|
|
3117
3113
|
|
|
3118
|
-
const
|
|
3119
|
-
|
|
3120
|
-
return (
|
|
3121
|
-
<div>
|
|
3122
|
-
<h1>{message}</h1>
|
|
3123
|
-
<input value={message} onChange={(e) => setMessage(e.target.value)} />
|
|
3124
|
-
<p>Edit this component in src/web/components/Hello.tsx</p>${userButton}
|
|
3125
|
-
</div>
|
|
3126
|
-
);
|
|
3114
|
+
const Home = () => {
|
|
3115
|
+
return <GettingStarted />;
|
|
3127
3116
|
};
|
|
3128
3117
|
|
|
3129
|
-
export default
|
|
3118
|
+
export default Home;
|
|
3130
3119
|
`;
|
|
3131
3120
|
};
|
|
3132
3121
|
|
|
@@ -3154,7 +3143,7 @@ export const WebModule = $module({
|
|
|
3154
3143
|
* - Project structure (src/api, src/web)
|
|
3155
3144
|
* - Configuration files (tsconfig, biome, editorconfig)
|
|
3156
3145
|
* - Entry points (main.server.ts, main.browser.ts)
|
|
3157
|
-
* - Example code (HelloController,
|
|
3146
|
+
* - Example code (HelloController, Home component)
|
|
3158
3147
|
*/
|
|
3159
3148
|
var ProjectScaffolder = class {
|
|
3160
3149
|
log = $logger();
|
|
@@ -3253,7 +3242,7 @@ var ProjectScaffolder = class {
|
|
|
3253
3242
|
auth: opts.auth
|
|
3254
3243
|
}), opts.force);
|
|
3255
3244
|
await this.ensureFile(root, "src/api/controllers/HelloController.ts", apiHelloControllerTs(), opts.force);
|
|
3256
|
-
if (opts.auth) await this.ensureFile(root, "src/api/AppSecurity.ts", apiAppSecurityTs(), opts.force);
|
|
3245
|
+
if (opts.auth) await this.ensureFile(root, "src/api/AppSecurity.ts", apiAppSecurityTs({ adminEmail: opts.adminEmail }), opts.force);
|
|
3257
3246
|
}
|
|
3258
3247
|
/**
|
|
3259
3248
|
* Ensure web/React project structure exists.
|
|
@@ -3261,12 +3250,12 @@ var ProjectScaffolder = class {
|
|
|
3261
3250
|
* Creates:
|
|
3262
3251
|
* - src/main.browser.ts
|
|
3263
3252
|
* - src/main.css
|
|
3264
|
-
* - src/web/index.ts, src/web/AppRouter.ts, src/web/components/
|
|
3253
|
+
* - src/web/index.ts, src/web/AppRouter.ts, src/web/components/Home.tsx
|
|
3265
3254
|
*/
|
|
3266
3255
|
async ensureWebProject(root, opts = {}) {
|
|
3267
3256
|
const appName = this.getAppName(root);
|
|
3268
3257
|
await this.fs.mkdir(this.fs.join(root, "src/web/components"), { recursive: true });
|
|
3269
|
-
await this.ensureFile(root, "src/main.css", mainCss(
|
|
3258
|
+
await this.ensureFile(root, "src/main.css", mainCss(), opts.force);
|
|
3270
3259
|
await this.ensureFile(root, "src/web/index.ts", webIndexTs({ appName }), opts.force);
|
|
3271
3260
|
await this.ensureFile(root, "src/web/AppRouter.ts", webAppRouterTs({
|
|
3272
3261
|
api: opts.api,
|
|
@@ -3274,7 +3263,7 @@ var ProjectScaffolder = class {
|
|
|
3274
3263
|
auth: opts.auth,
|
|
3275
3264
|
admin: opts.admin
|
|
3276
3265
|
}), opts.force);
|
|
3277
|
-
await this.ensureFile(root, "src/web/components/
|
|
3266
|
+
await this.ensureFile(root, "src/web/components/Home.tsx", webHomeComponentTsx(), opts.force);
|
|
3278
3267
|
await this.ensureFile(root, "src/main.browser.ts", mainBrowserTs(), opts.force);
|
|
3279
3268
|
}
|
|
3280
3269
|
/**
|
|
@@ -3551,6 +3540,7 @@ var DbCommand = class {
|
|
|
3551
3540
|
log = $logger();
|
|
3552
3541
|
fs = $inject(FileSystemProvider);
|
|
3553
3542
|
utils = $inject(AlephaCliUtils);
|
|
3543
|
+
pm = $inject(PackageManagerUtils);
|
|
3554
3544
|
entryProvider = $inject(AppEntryProvider);
|
|
3555
3545
|
/**
|
|
3556
3546
|
* Check if database migrations are up to date.
|
|
@@ -3755,6 +3745,10 @@ var DbCommand = class {
|
|
|
3755
3745
|
}
|
|
3756
3746
|
this.log.info("");
|
|
3757
3747
|
this.log.info(options.logMessage(providerName, dialect));
|
|
3748
|
+
if (dialect === "sqlite") await this.pm.ensureDependency(options.root, "better-sqlite3", {
|
|
3749
|
+
dev: true,
|
|
3750
|
+
exec: (cmd, opts) => this.utils.exec(cmd, opts)
|
|
3751
|
+
});
|
|
3758
3752
|
const drizzleConfigJsPath = await this.prepareDrizzleConfig({
|
|
3759
3753
|
kit: drizzleKitProvider,
|
|
3760
3754
|
provider,
|
|
@@ -4050,6 +4044,7 @@ var ViteDevServerProvider = class {
|
|
|
4050
4044
|
await this.server.ssrLoadModule(this.options.entry.server);
|
|
4051
4045
|
const alepha = globalThis.__alepha;
|
|
4052
4046
|
if (!alepha) throw new AlephaError("Alepha instance not found after loading entry module");
|
|
4047
|
+
alepha.store.set("alepha.vite.server", this.server);
|
|
4053
4048
|
this.alepha = alepha;
|
|
4054
4049
|
await this.setupAlepha();
|
|
4055
4050
|
this.hasError = false;
|
|
@@ -4123,7 +4118,7 @@ var ViteDevServerProvider = class {
|
|
|
4123
4118
|
const originalWrite = res.write.bind(res);
|
|
4124
4119
|
const originalEnd = res.end.bind(res);
|
|
4125
4120
|
const guardedCall = (fn, ...args) => {
|
|
4126
|
-
if (resolved &&
|
|
4121
|
+
if (resolved && ctx.metadata.vite) return;
|
|
4127
4122
|
return fn(...args);
|
|
4128
4123
|
};
|
|
4129
4124
|
res.setHeader = (...args) => guardedCall(originalSetHeader, ...args);
|
|
@@ -4505,6 +4500,8 @@ var GenCommand = class {
|
|
|
4505
4500
|
//#endregion
|
|
4506
4501
|
//#region ../../src/cli/commands/init.ts
|
|
4507
4502
|
var InitCommand = class {
|
|
4503
|
+
log = $logger();
|
|
4504
|
+
colors = $inject(ConsoleColorProvider);
|
|
4508
4505
|
utils = $inject(AlephaCliUtils);
|
|
4509
4506
|
pm = $inject(PackageManagerUtils);
|
|
4510
4507
|
scaffolder = $inject(ProjectScaffolder);
|
|
@@ -4558,17 +4555,18 @@ var InitCommand = class {
|
|
|
4558
4555
|
let agentType = false;
|
|
4559
4556
|
if (flags.ai) agentType = await this.utils.isInstalledAsync("claude") ? "claude" : "agents";
|
|
4560
4557
|
const isExpo = await this.pm.hasExpo(root);
|
|
4558
|
+
const adminEmail = flags.auth ? await this.utils.getGitEmail() : void 0;
|
|
4561
4559
|
const force = !!flags.force;
|
|
4562
4560
|
await run({
|
|
4563
4561
|
name: "ensuring configuration files",
|
|
4564
4562
|
handler: async () => {
|
|
4565
4563
|
await this.scaffolder.ensureConfig(root, {
|
|
4566
4564
|
force,
|
|
4567
|
-
tsconfigJson: !workspace.config.tsconfigJson,
|
|
4568
4565
|
packageJson: {
|
|
4569
4566
|
...flags,
|
|
4570
4567
|
isPackage: workspace.isPackage
|
|
4571
4568
|
},
|
|
4569
|
+
tsconfigJson: !workspace.config.tsconfigJson,
|
|
4572
4570
|
biomeJson: !workspace.config.biomeJson,
|
|
4573
4571
|
editorconfig: !workspace.config.editorconfig,
|
|
4574
4572
|
agentMd: agentType ? {
|
|
@@ -4584,6 +4582,7 @@ var InitCommand = class {
|
|
|
4584
4582
|
});
|
|
4585
4583
|
if (flags.api) await this.scaffolder.ensureApiProject(root, {
|
|
4586
4584
|
auth: !!flags.auth,
|
|
4585
|
+
adminEmail,
|
|
4587
4586
|
force
|
|
4588
4587
|
});
|
|
4589
4588
|
if (flags.react && !isExpo) await this.scaffolder.ensureWebProject(root, {
|
|
@@ -4618,6 +4617,21 @@ var InitCommand = class {
|
|
|
4618
4617
|
root
|
|
4619
4618
|
});
|
|
4620
4619
|
}
|
|
4620
|
+
run.end();
|
|
4621
|
+
const projectName = args || ".";
|
|
4622
|
+
const pmRun = pmName === "npm" ? "npm run" : pmName;
|
|
4623
|
+
const c = this.colors;
|
|
4624
|
+
this.log.info("");
|
|
4625
|
+
this.log.info(` ${c.set("GREEN", "✓")} Project ready!`);
|
|
4626
|
+
this.log.info("");
|
|
4627
|
+
this.log.info(` ${c.set("GREY_DARK", "$")} cd ${c.set("CYAN", projectName)}`);
|
|
4628
|
+
this.log.info(` ${c.set("GREY_DARK", "$")} ${c.set("CYAN", `${pmRun} dev`)}`);
|
|
4629
|
+
if (adminEmail) {
|
|
4630
|
+
this.log.info("");
|
|
4631
|
+
this.log.info(` Admin email: ${c.set("GREEN", adminEmail)}`);
|
|
4632
|
+
this.log.info(` ${c.set("GREY_DARK", "(from git config, change in src/api/AppSecurity.ts)")}`);
|
|
4633
|
+
}
|
|
4634
|
+
this.log.info("");
|
|
4621
4635
|
}
|
|
4622
4636
|
});
|
|
4623
4637
|
};
|