alepha 0.14.4 → 0.15.1
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 +44 -102
- package/dist/api/audits/index.d.ts +331 -443
- package/dist/api/audits/index.d.ts.map +1 -1
- package/dist/api/audits/index.js +2 -2
- package/dist/api/audits/index.js.map +1 -1
- package/dist/api/files/index.d.ts +0 -113
- package/dist/api/files/index.d.ts.map +1 -1
- package/dist/api/files/index.js +2 -3
- package/dist/api/files/index.js.map +1 -1
- package/dist/api/jobs/index.d.ts +151 -262
- package/dist/api/jobs/index.d.ts.map +1 -1
- package/dist/api/notifications/index.browser.js +4 -4
- package/dist/api/notifications/index.browser.js.map +1 -1
- package/dist/api/notifications/index.d.ts +164 -276
- package/dist/api/notifications/index.d.ts.map +1 -1
- package/dist/api/notifications/index.js +4 -4
- package/dist/api/notifications/index.js.map +1 -1
- package/dist/api/parameters/index.d.ts +265 -377
- package/dist/api/parameters/index.d.ts.map +1 -1
- package/dist/api/users/index.browser.js +1 -2
- package/dist/api/users/index.browser.js.map +1 -1
- package/dist/api/users/index.d.ts +195 -301
- package/dist/api/users/index.d.ts.map +1 -1
- package/dist/api/users/index.js +203 -184
- package/dist/api/users/index.js.map +1 -1
- package/dist/api/verifications/index.d.ts.map +1 -1
- package/dist/batch/index.d.ts.map +1 -1
- package/dist/batch/index.js +1 -2
- package/dist/batch/index.js.map +1 -1
- package/dist/bucket/index.d.ts.map +1 -1
- package/dist/cache/core/index.d.ts.map +1 -1
- package/dist/cache/redis/index.d.ts.map +1 -1
- package/dist/cache/redis/index.js +2 -2
- package/dist/cache/redis/index.js.map +1 -1
- package/dist/cli/index.d.ts +5900 -165
- package/dist/cli/index.d.ts.map +1 -1
- package/dist/cli/index.js +1481 -639
- package/dist/cli/index.js.map +1 -1
- package/dist/command/index.d.ts +8 -4
- package/dist/command/index.d.ts.map +1 -1
- package/dist/command/index.js +29 -25
- package/dist/command/index.js.map +1 -1
- package/dist/core/index.browser.js +563 -54
- package/dist/core/index.browser.js.map +1 -1
- package/dist/core/index.d.ts +175 -8
- package/dist/core/index.d.ts.map +1 -1
- package/dist/core/index.js +564 -54
- package/dist/core/index.js.map +1 -1
- package/dist/core/index.native.js +563 -54
- package/dist/core/index.native.js.map +1 -1
- package/dist/datetime/index.d.ts.map +1 -1
- package/dist/datetime/index.js +4 -4
- package/dist/datetime/index.js.map +1 -1
- package/dist/email/index.d.ts +89 -42
- package/dist/email/index.d.ts.map +1 -1
- package/dist/email/index.js +129 -33
- package/dist/email/index.js.map +1 -1
- package/dist/fake/index.d.ts +7969 -2
- package/dist/fake/index.d.ts.map +1 -1
- package/dist/fake/index.js +22 -22
- package/dist/fake/index.js.map +1 -1
- package/dist/file/index.d.ts +134 -1
- package/dist/file/index.d.ts.map +1 -1
- package/dist/file/index.js +253 -1
- package/dist/file/index.js.map +1 -1
- package/dist/lock/core/index.d.ts.map +1 -1
- package/dist/lock/redis/index.d.ts.map +1 -1
- package/dist/logger/index.d.ts +1 -2
- package/dist/logger/index.d.ts.map +1 -1
- package/dist/logger/index.js +1 -5
- package/dist/logger/index.js.map +1 -1
- package/dist/mcp/index.d.ts +19 -1
- package/dist/mcp/index.d.ts.map +1 -1
- package/dist/mcp/index.js +28 -4
- package/dist/mcp/index.js.map +1 -1
- package/dist/orm/chunk-DH6iiROE.js +38 -0
- package/dist/orm/index.browser.js +9 -9
- package/dist/orm/index.browser.js.map +1 -1
- package/dist/orm/index.bun.js +2821 -0
- package/dist/orm/index.bun.js.map +1 -0
- package/dist/orm/index.d.ts +318 -169
- package/dist/orm/index.d.ts.map +1 -1
- package/dist/orm/index.js +2086 -1776
- package/dist/orm/index.js.map +1 -1
- package/dist/queue/core/index.d.ts +4 -4
- package/dist/queue/core/index.d.ts.map +1 -1
- package/dist/queue/redis/index.d.ts.map +1 -1
- package/dist/redis/index.bun.js +285 -0
- package/dist/redis/index.bun.js.map +1 -0
- package/dist/redis/index.d.ts +13 -31
- package/dist/redis/index.d.ts.map +1 -1
- package/dist/redis/index.js +18 -38
- package/dist/redis/index.js.map +1 -1
- package/dist/retry/index.d.ts.map +1 -1
- package/dist/router/index.d.ts.map +1 -1
- package/dist/scheduler/index.d.ts +83 -1
- package/dist/scheduler/index.d.ts.map +1 -1
- package/dist/scheduler/index.js +393 -1
- package/dist/scheduler/index.js.map +1 -1
- package/dist/security/index.browser.js +5 -1
- package/dist/security/index.browser.js.map +1 -1
- package/dist/security/index.d.ts +598 -112
- package/dist/security/index.d.ts.map +1 -1
- package/dist/security/index.js +1808 -97
- package/dist/security/index.js.map +1 -1
- package/dist/server/auth/index.d.ts +1200 -175
- package/dist/server/auth/index.d.ts.map +1 -1
- package/dist/server/auth/index.js +1268 -37
- package/dist/server/auth/index.js.map +1 -1
- package/dist/server/cache/index.d.ts +6 -3
- package/dist/server/cache/index.d.ts.map +1 -1
- package/dist/server/cache/index.js +1 -1
- package/dist/server/cache/index.js.map +1 -1
- package/dist/server/compress/index.d.ts.map +1 -1
- package/dist/server/cookies/index.d.ts.map +1 -1
- package/dist/server/cookies/index.js +3 -3
- package/dist/server/cookies/index.js.map +1 -1
- package/dist/server/core/index.d.ts +115 -13
- package/dist/server/core/index.d.ts.map +1 -1
- package/dist/server/core/index.js +321 -139
- package/dist/server/core/index.js.map +1 -1
- package/dist/server/cors/index.d.ts +0 -1
- package/dist/server/cors/index.d.ts.map +1 -1
- package/dist/server/health/index.d.ts +0 -1
- package/dist/server/health/index.d.ts.map +1 -1
- package/dist/server/helmet/index.d.ts.map +1 -1
- package/dist/server/links/index.browser.js +9 -1
- package/dist/server/links/index.browser.js.map +1 -1
- package/dist/server/links/index.d.ts +1 -2
- package/dist/server/links/index.d.ts.map +1 -1
- package/dist/server/links/index.js +14 -7
- package/dist/server/links/index.js.map +1 -1
- package/dist/server/metrics/index.d.ts +514 -1
- package/dist/server/metrics/index.d.ts.map +1 -1
- package/dist/server/metrics/index.js +4462 -4
- package/dist/server/metrics/index.js.map +1 -1
- package/dist/server/multipart/index.d.ts.map +1 -1
- package/dist/server/proxy/index.d.ts +0 -1
- package/dist/server/proxy/index.d.ts.map +1 -1
- package/dist/server/rate-limit/index.d.ts.map +1 -1
- package/dist/server/static/index.d.ts.map +1 -1
- package/dist/server/swagger/index.d.ts +1 -2
- package/dist/server/swagger/index.d.ts.map +1 -1
- package/dist/server/swagger/index.js +1 -2
- package/dist/server/swagger/index.js.map +1 -1
- package/dist/sms/index.d.ts +3 -1
- package/dist/sms/index.d.ts.map +1 -1
- package/dist/sms/index.js +10 -10
- package/dist/sms/index.js.map +1 -1
- package/dist/thread/index.d.ts +0 -1
- package/dist/thread/index.d.ts.map +1 -1
- package/dist/thread/index.js +2 -2
- package/dist/thread/index.js.map +1 -1
- package/dist/topic/core/index.d.ts.map +1 -1
- package/dist/topic/redis/index.d.ts.map +1 -1
- package/dist/vite/index.d.ts +6315 -149
- package/dist/vite/index.d.ts.map +1 -1
- package/dist/vite/index.js +140 -469
- package/dist/vite/index.js.map +1 -1
- package/dist/websocket/index.browser.js +9 -9
- package/dist/websocket/index.browser.js.map +1 -1
- package/dist/websocket/index.d.ts +28 -28
- package/dist/websocket/index.d.ts.map +1 -1
- package/dist/websocket/index.js +9 -9
- package/dist/websocket/index.js.map +1 -1
- package/package.json +13 -18
- package/src/api/files/controllers/AdminFileStatsController.ts +0 -1
- package/src/api/users/atoms/realmAuthSettingsAtom.ts +5 -0
- package/src/api/users/controllers/{UserRealmController.ts → RealmController.ts} +11 -11
- package/src/api/users/entities/users.ts +1 -1
- package/src/api/users/index.ts +8 -8
- package/src/api/users/primitives/{$userRealm.ts → $realm.ts} +17 -19
- package/src/api/users/providers/{UserRealmProvider.ts → RealmProvider.ts} +26 -30
- package/src/api/users/schemas/{userRealmConfigSchema.ts → realmConfigSchema.ts} +2 -2
- package/src/api/users/services/CredentialService.ts +7 -7
- package/src/api/users/services/IdentityService.ts +4 -4
- package/src/api/users/services/RegistrationService.spec.ts +25 -27
- package/src/api/users/services/RegistrationService.ts +38 -27
- package/src/api/users/services/SessionCrudService.ts +3 -3
- package/src/api/users/services/SessionService.spec.ts +3 -3
- package/src/api/users/services/SessionService.ts +27 -18
- package/src/api/users/services/UserService.ts +7 -7
- package/src/batch/providers/BatchProvider.ts +1 -2
- package/src/cli/apps/AlephaCli.ts +2 -2
- package/src/cli/apps/AlephaPackageBuilderCli.ts +47 -20
- package/src/cli/assets/apiHelloControllerTs.ts +19 -0
- package/src/cli/assets/apiIndexTs.ts +16 -0
- package/src/cli/assets/biomeJson.ts +2 -1
- package/src/cli/assets/claudeMd.ts +308 -0
- package/src/cli/assets/dummySpecTs.ts +2 -1
- package/src/cli/assets/editorconfig.ts +2 -1
- package/src/cli/assets/mainBrowserTs.ts +4 -3
- package/src/cli/assets/mainCss.ts +24 -0
- package/src/cli/assets/mainServerTs.ts +24 -0
- package/src/cli/assets/tsconfigJson.ts +2 -1
- package/src/cli/assets/webAppRouterTs.ts +16 -0
- package/src/cli/assets/webHelloComponentTsx.ts +20 -0
- package/src/cli/assets/webIndexTs.ts +16 -0
- package/src/cli/atoms/appEntryOptions.ts +13 -0
- package/src/cli/atoms/buildOptions.ts +1 -1
- package/src/cli/atoms/changelogOptions.ts +1 -1
- package/src/cli/commands/build.ts +97 -61
- package/src/cli/commands/db.ts +21 -18
- package/src/cli/commands/deploy.ts +17 -5
- package/src/cli/commands/dev.ts +26 -47
- package/src/cli/commands/gen/env.ts +1 -1
- package/src/cli/commands/init.ts +79 -25
- package/src/cli/commands/lint.ts +9 -3
- package/src/cli/commands/test.ts +8 -2
- package/src/cli/commands/typecheck.ts +5 -1
- package/src/cli/commands/verify.ts +4 -2
- package/src/cli/defineConfig.ts +9 -0
- package/src/cli/index.ts +2 -1
- package/src/cli/providers/AppEntryProvider.ts +131 -0
- package/src/cli/providers/ViteBuildProvider.ts +82 -0
- package/src/cli/providers/ViteDevServerProvider.ts +350 -0
- package/src/cli/providers/ViteTemplateProvider.ts +27 -0
- package/src/cli/services/AlephaCliUtils.ts +72 -602
- package/src/cli/services/PackageManagerUtils.ts +308 -0
- package/src/cli/services/ProjectScaffolder.ts +329 -0
- package/src/command/helpers/Runner.ts +15 -3
- package/src/core/Alepha.ts +2 -8
- package/src/core/__tests__/Alepha-graph.spec.ts +4 -0
- package/src/core/index.shared.ts +1 -0
- package/src/core/index.ts +2 -0
- package/src/core/primitives/$hook.ts +6 -2
- package/src/core/primitives/$module.spec.ts +4 -0
- package/src/core/primitives/$module.ts +12 -0
- package/src/core/providers/AlsProvider.ts +1 -1
- package/src/core/providers/CodecManager.spec.ts +12 -6
- package/src/core/providers/CodecManager.ts +26 -6
- package/src/core/providers/EventManager.ts +169 -13
- package/src/core/providers/KeylessJsonSchemaCodec.spec.ts +878 -0
- package/src/core/providers/KeylessJsonSchemaCodec.ts +789 -0
- package/src/core/providers/SchemaValidator.spec.ts +236 -0
- package/src/core/providers/StateManager.spec.ts +27 -16
- package/src/email/providers/LocalEmailProvider.spec.ts +111 -87
- package/src/email/providers/LocalEmailProvider.ts +52 -15
- package/src/email/providers/NodemailerEmailProvider.ts +167 -56
- package/src/file/errors/FileError.ts +7 -0
- package/src/file/index.ts +9 -1
- package/src/file/providers/MemoryFileSystemProvider.ts +393 -0
- package/src/logger/providers/PrettyFormatterProvider.ts +0 -9
- package/src/mcp/errors/McpError.ts +30 -0
- package/src/mcp/index.ts +3 -0
- package/src/mcp/transports/SseMcpTransport.ts +16 -6
- package/src/orm/index.browser.ts +1 -19
- package/src/orm/index.bun.ts +77 -0
- package/src/orm/index.shared-server.ts +22 -0
- package/src/orm/index.shared.ts +15 -0
- package/src/orm/index.ts +19 -39
- package/src/orm/providers/DrizzleKitProvider.ts +3 -5
- package/src/orm/providers/drivers/BunPostgresProvider.ts +3 -5
- package/src/orm/providers/drivers/BunSqliteProvider.ts +1 -1
- package/src/orm/providers/drivers/CloudflareD1Provider.ts +4 -0
- package/src/orm/providers/drivers/DatabaseProvider.ts +4 -0
- package/src/orm/providers/drivers/PglitePostgresProvider.ts +4 -0
- package/src/orm/services/Repository.ts +19 -0
- package/src/redis/index.bun.ts +35 -0
- package/src/redis/providers/BunRedisProvider.ts +12 -43
- package/src/redis/providers/BunRedisSubscriberProvider.ts +2 -3
- package/src/redis/providers/NodeRedisProvider.ts +16 -34
- package/src/{server/security → security}/__tests__/BasicAuth.spec.ts +11 -11
- package/src/{server/security → security}/__tests__/ServerSecurityProvider-realm.spec.ts +21 -16
- package/src/{server/security/providers → security/__tests__}/ServerSecurityProvider.spec.ts +5 -5
- package/src/security/index.browser.ts +5 -0
- package/src/security/index.ts +90 -7
- package/src/security/primitives/{$realm.spec.ts → $issuer.spec.ts} +11 -11
- package/src/security/primitives/{$realm.ts → $issuer.ts} +20 -17
- package/src/security/primitives/$role.ts +5 -5
- package/src/security/primitives/$serviceAccount.spec.ts +5 -5
- package/src/security/primitives/$serviceAccount.ts +3 -3
- package/src/{server/security → security}/providers/ServerSecurityProvider.ts +5 -7
- package/src/server/auth/primitives/$auth.ts +10 -10
- package/src/server/auth/primitives/$authCredentials.ts +3 -3
- package/src/server/auth/primitives/$authGithub.ts +3 -3
- package/src/server/auth/primitives/$authGoogle.ts +3 -3
- package/src/server/auth/providers/ServerAuthProvider.ts +13 -13
- package/src/server/cache/providers/ServerCacheProvider.ts +1 -1
- package/src/server/cookies/providers/ServerCookiesProvider.ts +3 -3
- package/src/server/core/index.ts +1 -1
- package/src/server/core/providers/BunHttpServerProvider.ts +1 -1
- package/src/server/core/providers/NodeHttpServerProvider.spec.ts +125 -0
- package/src/server/core/providers/NodeHttpServerProvider.ts +92 -24
- package/src/server/core/providers/ServerBodyParserProvider.ts +19 -23
- package/src/server/core/providers/ServerLoggerProvider.ts +23 -19
- package/src/server/core/providers/ServerProvider.ts +144 -24
- package/src/server/core/providers/ServerRouterProvider.ts +259 -115
- package/src/server/core/providers/ServerTimingProvider.ts +2 -2
- package/src/server/links/atoms/apiLinksAtom.ts +7 -0
- package/src/server/links/index.browser.ts +2 -0
- package/src/server/links/index.ts +3 -1
- package/src/server/links/providers/LinkProvider.ts +1 -1
- package/src/server/swagger/index.ts +1 -1
- package/src/sms/providers/LocalSmsProvider.spec.ts +153 -111
- package/src/sms/providers/LocalSmsProvider.ts +8 -7
- package/src/vite/index.ts +3 -2
- package/src/vite/tasks/buildClient.ts +0 -1
- package/src/vite/tasks/buildServer.ts +80 -22
- package/src/vite/tasks/copyAssets.ts +5 -4
- package/src/vite/tasks/generateCloudflare.ts +7 -0
- package/src/vite/tasks/generateSitemap.ts +64 -23
- package/src/vite/tasks/index.ts +0 -2
- package/src/vite/tasks/prerenderPages.ts +49 -24
- package/dist/server/security/index.browser.js +0 -13
- package/dist/server/security/index.browser.js.map +0 -1
- package/dist/server/security/index.d.ts +0 -173
- package/dist/server/security/index.d.ts.map +0 -1
- package/dist/server/security/index.js +0 -311
- package/dist/server/security/index.js.map +0 -1
- package/src/cli/assets/appRouterTs.ts +0 -9
- package/src/cli/assets/indexHtml.ts +0 -15
- package/src/cli/assets/mainTs.ts +0 -13
- package/src/cli/commands/format.ts +0 -17
- package/src/server/security/index.browser.ts +0 -10
- package/src/server/security/index.ts +0 -94
- package/src/vite/helpers/boot.ts +0 -106
- package/src/vite/plugins/viteAlephaDev.ts +0 -177
- package/src/vite/tasks/devServer.ts +0 -69
- package/src/vite/tasks/runAlepha.ts +0 -270
- /package/src/{server/security → security}/primitives/$basicAuth.ts +0 -0
- /package/src/{server/security → security}/providers/ServerBasicAuthProvider.ts +0 -0
package/README.md
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
<div align="center">
|
|
2
2
|
<h1 >
|
|
3
3
|
<img
|
|
4
|
-
src="https://raw.githubusercontent.com/feunard/alepha/main/
|
|
4
|
+
src="https://raw.githubusercontent.com/feunard/alepha/main/apps/docs/public/icon-512.png"
|
|
5
5
|
width="128"
|
|
6
6
|
height="128"
|
|
7
7
|
alt="Logo"
|
|
@@ -19,156 +19,98 @@ Easy mode for building TypeScript applications.
|
|
|
19
19
|
<a href="https://github.com/feunard/alepha"><img src="https://img.shields.io/github/stars/feunard/alepha.svg?style=social" alt="GitHub stars"/></a>
|
|
20
20
|
</div>
|
|
21
21
|
|
|
22
|
-
> [!WARNING]
|
|
23
|
-
> **Early Development** — Alepha is under active development. The API is stabilizing but may change. First stable release planned for early 2026. Follow the repo to stay updated.
|
|
24
|
-
|
|
25
22
|
## What is this?
|
|
26
23
|
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
Relies only on very few runtime dependencies. Alepha is a "one decision" framework, meaning you don't have to choose between dozens of libraries and tools.
|
|
30
|
-
|
|
31
|
-
All-in-one tool that takes care of configuration, development, build, deployment, testing, etc. Convention over configuration.
|
|
32
|
-
|
|
33
|
-
All features are based on a DSL with strong typing and runtime validation which makes development safe, productive, and AI friendly.
|
|
24
|
+
A full-stack TypeScript framework for building APIs, React apps with SSR, CLI tools, and more.
|
|
34
25
|
|
|
35
|
-
|
|
26
|
+
- **Runs on Node.js and Bun** — switch runtimes without changing code
|
|
27
|
+
- **Zero config** — sensible defaults, override when needed
|
|
28
|
+
- **Type-safe everything** — schemas validate at runtime, TypeScript catches the rest
|
|
29
|
+
- **Single bundle deploy** — no `node_modules` in production
|
|
36
30
|
|
|
37
|
-
|
|
31
|
+
Check out the [documentation](https://alepha.dev) for the full picture.
|
|
38
32
|
|
|
39
|
-
|
|
33
|
+
## Quick Start
|
|
40
34
|
|
|
41
|
-
|
|
35
|
+
**Requirements:** [Node.js](https://nodejs.org/) v22+ or [Bun](https://bun.sh/)
|
|
42
36
|
|
|
43
|
-
### API
|
|
44
|
-
|
|
45
|
-
Write API endpoints with automatic OpenAPI documentation.
|
|
37
|
+
### API Server
|
|
46
38
|
|
|
47
39
|
```bash
|
|
48
|
-
|
|
49
|
-
|
|
40
|
+
npx alepha init my-api
|
|
41
|
+
cd my-api
|
|
50
42
|
```
|
|
51
43
|
|
|
52
|
-
|
|
44
|
+
Edit `src/api/controllers/HelloController.ts`:
|
|
53
45
|
|
|
54
46
|
```ts
|
|
55
|
-
import {
|
|
47
|
+
import { t } from "alepha";
|
|
56
48
|
import { $action } from "alepha/server";
|
|
57
49
|
import { $swagger } from "alepha/server/swagger";
|
|
58
50
|
|
|
59
|
-
class
|
|
60
|
-
|
|
61
|
-
// Functions starting with $ are "primitives".
|
|
62
|
-
// Like React hooks, they must be called inside Alepha context.
|
|
51
|
+
export class HelloController {
|
|
63
52
|
docs = $swagger();
|
|
64
53
|
|
|
65
|
-
|
|
66
|
-
path: "/hello
|
|
67
|
-
// Every feature inside Alepha is strongly typed with runtime validation.
|
|
68
|
-
// Schema is based on TypeBox library.
|
|
54
|
+
hello = $action({
|
|
55
|
+
path: "/hello",
|
|
69
56
|
schema: {
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
// For example `t.text()` = `t.string()` + specific maxLength, auto-trim, etc.
|
|
73
|
-
name: t.text()
|
|
57
|
+
query: t.object({
|
|
58
|
+
name: t.optional(t.text()),
|
|
74
59
|
}),
|
|
75
60
|
response: t.object({
|
|
76
61
|
message: t.text(),
|
|
77
|
-
})
|
|
62
|
+
}),
|
|
78
63
|
},
|
|
79
|
-
handler:
|
|
80
|
-
|
|
81
|
-
}
|
|
64
|
+
handler: ({ query }) => ({
|
|
65
|
+
message: `Hello, ${query.name || "World"}!`,
|
|
66
|
+
}),
|
|
82
67
|
});
|
|
83
68
|
}
|
|
84
|
-
|
|
85
|
-
// Creating Alepha instance is like creating a new context.
|
|
86
|
-
const alepha = Alepha.create();
|
|
87
|
-
|
|
88
|
-
// And you add features by registering classes.
|
|
89
|
-
alepha.with(Api);
|
|
90
|
-
|
|
91
|
-
// `run` will take care of Alepha lifecycle (startup, graceful shutdown, etc.)
|
|
92
|
-
run(alepha);
|
|
93
|
-
```
|
|
94
|
-
|
|
95
|
-
Run the development server:
|
|
96
|
-
|
|
97
|
-
```bash
|
|
98
|
-
$ npx alepha dev
|
|
99
69
|
```
|
|
100
70
|
|
|
101
|
-
Command `alepha dev` comes with hot-reload and full TypeScript support but you can also run:
|
|
102
|
-
|
|
103
71
|
```bash
|
|
104
|
-
|
|
105
|
-
|
|
72
|
+
npm run dev
|
|
73
|
+
# Open http://localhost:3000/docs/ for auto-generated API docs
|
|
106
74
|
```
|
|
107
75
|
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
#### Production build
|
|
111
|
-
|
|
112
|
-
Once you are done, build the application for production:
|
|
76
|
+
Build and run in production:
|
|
113
77
|
|
|
114
78
|
```bash
|
|
115
|
-
|
|
79
|
+
npm run build
|
|
80
|
+
node dist # or: bun dist
|
|
116
81
|
```
|
|
117
82
|
|
|
118
|
-
|
|
119
|
-
Bonus, no need to "npm install" on the server, Alepha bundles everything together.
|
|
83
|
+
### Full-Stack React
|
|
120
84
|
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
Build full-stack React applications, with server-side rendering.
|
|
85
|
+
In same directory, re-initialize with React support:
|
|
124
86
|
|
|
125
87
|
```bash
|
|
126
|
-
|
|
88
|
+
npx alepha init --react
|
|
127
89
|
```
|
|
128
90
|
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
```tsx
|
|
132
|
-
import { Alepha, run, t } from "alepha";
|
|
133
|
-
import { $page } from "@alepha/react/router";
|
|
134
|
-
import { useState } from "react";
|
|
135
|
-
|
|
136
|
-
const Hello = (props: { count: number }) => {
|
|
137
|
-
const [ count, setCount ] = useState(props.count);
|
|
138
|
-
return <button onClick={() => setCount(count + 1)}>Clicked: {count}</button>
|
|
139
|
-
}
|
|
91
|
+
Your `src/main.server.ts` wires everything together:
|
|
140
92
|
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
start: t.number({ default: 0 }),
|
|
146
|
-
})
|
|
147
|
-
},
|
|
148
|
-
component: Hello,
|
|
149
|
-
loader: (req) => {
|
|
150
|
-
return { count: req.query.start };
|
|
151
|
-
},
|
|
152
|
-
});
|
|
153
|
-
}
|
|
93
|
+
```ts
|
|
94
|
+
import { Alepha, run } from "alepha";
|
|
95
|
+
import { ApiModule } from "./api/index.ts";
|
|
96
|
+
import { WebModule } from "./web/index.ts";
|
|
154
97
|
|
|
155
98
|
const alepha = Alepha.create();
|
|
156
99
|
|
|
157
|
-
alepha.with(
|
|
100
|
+
alepha.with(ApiModule); // API endpoints
|
|
101
|
+
alepha.with(WebModule); // React pages
|
|
158
102
|
|
|
159
103
|
run(alepha);
|
|
160
104
|
```
|
|
161
105
|
|
|
162
|
-
|
|
106
|
+
Start development server:
|
|
163
107
|
|
|
164
108
|
```bash
|
|
165
|
-
|
|
109
|
+
npm run dev
|
|
110
|
+
# Open http://localhost:3000/
|
|
166
111
|
```
|
|
167
112
|
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
## What's next?
|
|
113
|
+
## Learn More
|
|
171
114
|
|
|
172
|
-
-
|
|
173
|
-
-
|
|
174
|
-
- Check out the individual packages to see what else you can build
|
|
115
|
+
- [Documentation](https://alepha.dev) — guides, concepts, API reference
|
|
116
|
+
- [GitHub](https://github.com/feunard/alepha) — source code and issues
|