toiljs 0.0.59 → 0.0.61
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/.github/workflows/ci.yml +31 -0
- package/CHANGELOG.md +15 -0
- package/build/cli/.tsbuildinfo +1 -1
- package/build/cli/index.js +311 -118
- package/build/client/.tsbuildinfo +1 -1
- package/build/client/index.d.ts +1 -1
- package/build/client/index.js +1 -1
- package/build/client/routing/mount.js +12 -1
- package/build/client/ssr/markers.d.ts +1 -0
- package/build/client/ssr/markers.js +3 -0
- package/build/compiler/.tsbuildinfo +1 -1
- package/build/compiler/config.d.ts +21 -0
- package/build/compiler/config.js +35 -0
- package/build/compiler/docs.d.ts +2 -1
- package/build/compiler/docs.js +33 -304
- package/build/compiler/index.d.ts +13 -0
- package/build/compiler/index.js +113 -21
- package/build/compiler/template-build.d.ts +21 -1
- package/build/compiler/template-build.js +110 -26
- package/build/compiler/toil-docs.generated.d.ts +1 -0
- package/build/compiler/toil-docs.generated.js +20 -0
- package/build/devserver/.tsbuildinfo +1 -1
- package/build/devserver/daemon/catalog.d.ts +26 -0
- package/build/devserver/daemon/catalog.js +48 -0
- package/build/devserver/daemon/cron.d.ts +4 -0
- package/build/devserver/daemon/cron.js +50 -0
- package/build/devserver/daemon/host.d.ts +37 -0
- package/build/devserver/daemon/host.js +94 -0
- package/build/devserver/daemon/index.d.ts +34 -0
- package/build/devserver/daemon/index.js +241 -0
- package/build/devserver/db/catalog.d.ts +2 -0
- package/build/devserver/db/catalog.js +80 -0
- package/build/devserver/db/database.d.ts +80 -0
- package/build/devserver/db/database.js +1032 -0
- package/build/devserver/db/index.d.ts +3 -0
- package/build/devserver/db/index.js +3 -0
- package/build/devserver/db/routeKinds.d.ts +8 -0
- package/build/devserver/db/routeKinds.js +139 -0
- package/build/devserver/db/types.d.ts +121 -0
- package/build/devserver/db/types.js +52 -0
- package/build/devserver/email/index.js +1 -1
- package/build/devserver/index.d.ts +19 -24
- package/build/devserver/index.js +11 -165
- package/build/devserver/mstore/store.d.ts +18 -0
- package/build/devserver/mstore/store.js +82 -0
- package/build/devserver/{host.d.ts → runtime/host.d.ts} +7 -1
- package/build/devserver/{host.js → runtime/host.js} +51 -7
- package/build/devserver/{module.d.ts → runtime/module.d.ts} +2 -1
- package/build/devserver/{module.js → runtime/module.js} +34 -1
- package/build/devserver/server.d.ts +23 -0
- package/build/devserver/server.js +223 -0
- package/build/devserver/ssr.d.ts +25 -0
- package/build/devserver/ssr.js +114 -0
- package/build/devserver/wasm/sections.d.ts +2 -0
- package/build/devserver/wasm/sections.js +42 -0
- package/build/devserver/wasm/surface.d.ts +18 -0
- package/build/devserver/wasm/surface.js +41 -0
- package/docs/README.md +4 -4
- package/docs/auth-todo.md +6 -6
- package/docs/caching.md +5 -5
- package/docs/cli.md +15 -0
- package/docs/client.md +40 -0
- package/docs/crypto.md +4 -4
- package/docs/data.md +6 -6
- package/docs/email.md +28 -28
- package/docs/environment.md +10 -10
- package/docs/index.md +26 -0
- package/docs/ratelimit.md +10 -10
- package/docs/routing.md +2 -2
- package/docs/server.md +61 -0
- package/docs/ssr.md +561 -113
- package/docs/styling.md +22 -0
- package/docs/time.md +3 -3
- package/eslint.config.js +10 -1
- package/examples/basic/client/components/Header.tsx +3 -0
- package/examples/basic/client/routes/features/actions.tsx +0 -2
- package/examples/basic/client/routes/hello.tsx +89 -19
- package/examples/basic/client/styles/main.css +48 -0
- package/examples/basic/server/SsrHelloRender.ts +97 -0
- package/examples/basic/server/main.ts +5 -0
- package/examples/basic/server/migrations/GuestEntry.migration.ts +39 -0
- package/examples/basic/server/streams/Echo.ts +49 -0
- package/package.json +12 -10
- package/scripts/gen-toil-docs.mjs +96 -0
- package/server/runtime/time.ts +3 -3
- package/src/cli/create.ts +40 -3
- package/src/cli/db.ts +158 -0
- package/src/cli/diagnostics.ts +19 -0
- package/src/cli/doctor.ts +20 -0
- package/src/cli/index.ts +10 -0
- package/src/cli/update.ts +58 -0
- package/src/client/index.ts +1 -1
- package/src/client/routing/mount.tsx +18 -2
- package/src/client/ssr/markers.tsx +22 -0
- package/src/compiler/config.ts +88 -2
- package/src/compiler/docs.ts +47 -308
- package/src/compiler/index.ts +236 -32
- package/src/compiler/ssr-codegen.ts +1 -1
- package/src/compiler/template-build.ts +247 -46
- package/src/compiler/toil-docs.generated.ts +26 -0
- package/src/devserver/daemon/catalog.ts +120 -0
- package/src/devserver/daemon/cron.ts +87 -0
- package/src/devserver/daemon/host.ts +224 -0
- package/src/devserver/daemon/index.ts +349 -0
- package/src/devserver/db/catalog.ts +108 -0
- package/src/devserver/db/database.ts +1633 -0
- package/src/devserver/db/index.ts +18 -0
- package/src/devserver/db/routeKinds.ts +147 -0
- package/src/devserver/db/types.ts +139 -0
- package/src/devserver/email/index.ts +1 -1
- package/src/devserver/index.ts +31 -287
- package/src/devserver/mstore/store.ts +121 -0
- package/src/devserver/{host.ts → runtime/host.ts} +98 -7
- package/src/devserver/{module.ts → runtime/module.ts} +47 -1
- package/src/devserver/server.ts +393 -0
- package/src/devserver/ssr.ts +166 -0
- package/src/devserver/wasm/sections.ts +59 -0
- package/src/devserver/wasm/surface.ts +88 -0
- package/test/daemon-build.test.ts +198 -0
- package/test/daemon-catalog.test.ts +265 -0
- package/test/daemon-emulation.test.ts +216 -0
- package/test/db.test.ts +0 -0
- package/test/devserver-database.test.ts +510 -14
- package/test/devserver-pqauth.test.ts +1 -1
- package/test/devserver-secrets.test.ts +5 -1
- package/test/doctor.test.ts +13 -0
- package/test/email-preview.test.ts +6 -1
- package/test/example-guestbook.test.ts +43 -1
- package/test/fixtures/daemon-app.ts +56 -0
- package/test/global-setup.ts +17 -0
- package/test/pqauth-e2e.test.ts +1 -1
- package/test/ssr-render.test.ts +94 -27
- package/test/ssr-template.test.tsx +44 -1
- package/vitest.config.ts +3 -0
- package/build/devserver/database.d.ts +0 -8
- package/build/devserver/database.js +0 -418
- package/src/devserver/database.ts +0 -618
- /package/build/devserver/{dotenv.d.ts → config/dotenv.d.ts} +0 -0
- /package/build/devserver/{dotenv.js → config/dotenv.js} +0 -0
- /package/build/devserver/{env.d.ts → config/env.d.ts} +0 -0
- /package/build/devserver/{env.js → config/env.js} +0 -0
- /package/build/devserver/{ratelimit.d.ts → config/ratelimit.d.ts} +0 -0
- /package/build/devserver/{ratelimit.js → config/ratelimit.js} +0 -0
- /package/build/devserver/{cache.d.ts → http/cache.d.ts} +0 -0
- /package/build/devserver/{cache.js → http/cache.js} +0 -0
- /package/build/devserver/{envelope.d.ts → http/envelope.d.ts} +0 -0
- /package/build/devserver/{envelope.js → http/envelope.js} +0 -0
- /package/build/devserver/{proxy.d.ts → http/proxy.d.ts} +0 -0
- /package/build/devserver/{proxy.js → http/proxy.js} +0 -0
- /package/build/devserver/{crypto.d.ts → runtime/crypto.d.ts} +0 -0
- /package/build/devserver/{crypto.js → runtime/crypto.js} +0 -0
- /package/src/devserver/{dotenv.ts → config/dotenv.ts} +0 -0
- /package/src/devserver/{env.ts → config/env.ts} +0 -0
- /package/src/devserver/{ratelimit.ts → config/ratelimit.ts} +0 -0
- /package/src/devserver/{cache.ts → http/cache.ts} +0 -0
- /package/src/devserver/{envelope.ts → http/envelope.ts} +0 -0
- /package/src/devserver/{proxy.ts → http/proxy.ts} +0 -0
- /package/src/devserver/{crypto.ts → runtime/crypto.ts} +0 -0
package/docs/server.md
ADDED
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
# Server (toilscript → WebAssembly)
|
|
2
|
+
|
|
3
|
+
`server/` is the toilscript source, compiled to WebAssembly by `toilscript`.
|
|
4
|
+
|
|
5
|
+
- `server/main.ts`, the `@main` entry, exported as the WASM `main`.
|
|
6
|
+
- `server/index.ts`, your functions.
|
|
7
|
+
- `server/tsconfig.json`, extends `toilscript/std/assembly.json` (AssemblyScript/toilscript
|
|
8
|
+
globals like `i32`, not the DOM), so editors resolve server types correctly.
|
|
9
|
+
- `npm run build:server` (or `npm run build`) emits `build/server/release.wasm` and
|
|
10
|
+
regenerates `shared/server.ts` (the typed client RPC module).
|
|
11
|
+
|
|
12
|
+
## Typed RPC (`@data` / `@remote` / `@service`)
|
|
13
|
+
|
|
14
|
+
Tag server code and the build generates a typed client `Server` surface:
|
|
15
|
+
|
|
16
|
+
- `@data class X {}`, a serializable struct. Generates a client class with the same fields
|
|
17
|
+
plus `encode`/`decode`; construct it on the client: `import { X } from "shared/server"`.
|
|
18
|
+
- `@remote function f(a: T): R`, a client-callable endpoint, becomes `Server.f(a)`.
|
|
19
|
+
- `@service class S { @remote m(...) {} }`, namespaces methods: `Server.s.m(...)`.
|
|
20
|
+
|
|
21
|
+
On the client, `Server` is a global (no import) and fully typed; every call is async
|
|
22
|
+
(`Promise<R>`). Inputs/outputs are scalars, arrays, or `@data` classes, both directions.
|
|
23
|
+
|
|
24
|
+
Note: the client↔server transport is not wired yet, so calling a `Server` method throws
|
|
25
|
+
until it lands; the typed surface + codec are generated and ready.
|
|
26
|
+
|
|
27
|
+
## HTTP REST (`@rest` / `@route`)
|
|
28
|
+
|
|
29
|
+
Tag a class `@rest` and its methods with a verb to expose a real HTTP API. Unlike RPC,
|
|
30
|
+
the generated client is working `fetch` code (it is just HTTP).
|
|
31
|
+
|
|
32
|
+
- `@rest("api") class Todos {}`, mounts the controller at `/api` (bare `@rest` → `/`).
|
|
33
|
+
- `@get("/todos/:id")` / `@post` / `@del` / `@put` / `@patch` / `@head` / `@options`, verb
|
|
34
|
+
shortcuts; or `@route({ method: Methods.GET, path: "/todos", stream: DataStream.JSON })`.
|
|
35
|
+
- A method takes an optional `@data` body + an optional `ctx: RouteContext` (path params via
|
|
36
|
+
`ctx.param("id")`, `ctx.query(...)`, `ctx.header(...)`). It returns either a `@data` type,
|
|
37
|
+
which the compiler encodes per `stream` (`DataStream.JSON` default, or `DataStream.Binary`,
|
|
38
|
+
lossless for large `u64`/bignum), or a `Response` for full control - custom status and
|
|
39
|
+
headers, e.g. `Response.json(value.toJSON().toString()).setHeader("cache-control", "no-store")`
|
|
40
|
+
or `Response.notFound()`. (The editor sees the compiler-injected `@data` `toJSON`/`encode`
|
|
41
|
+
members via the toilscript plugin, so serializing into a `Response` is editor-clean.)
|
|
42
|
+
|
|
43
|
+
Each `@rest` class self-registers; dispatch them from your handler - it composes, it never
|
|
44
|
+
takes over `handle()`:
|
|
45
|
+
|
|
46
|
+
```ts
|
|
47
|
+
import { ToilHandler, Request, Response, Rest } from "toiljs/server/runtime";
|
|
48
|
+
export class App extends ToilHandler {
|
|
49
|
+
public handle(req: Request): Response {
|
|
50
|
+
const hit = Rest.dispatch(req); // try every @rest controller
|
|
51
|
+
if (hit != null) return hit;
|
|
52
|
+
return Response.notFound(); // your own logic / static fallback
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
```
|
|
56
|
+
|
|
57
|
+
For a REST-only project, `Server.handler = () => new RestHandler()` does the same with no
|
|
58
|
+
boilerplate. On the client: `Server.REST.todos.getTodo({ params: { id } })` (see [client.md](./client.md)).
|
|
59
|
+
|
|
60
|
+
For the full reference (`@rest`/verb decorators, `RouteContext`, `Request`, `Response`,
|
|
61
|
+
dispatch + the 404 fallback) see [routing.md](./routing.md).
|