@tsonic/express 10.0.1 → 10.0.13
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 +96 -26
- package/index/bindings.json +14855 -2943
- package/index/internal/index.d.ts +652 -34
- package/index.d.ts +8 -0
- package/package.json +3 -3
- package/tsonic.bindings.json +10 -0
package/README.md
CHANGED
|
@@ -1,59 +1,129 @@
|
|
|
1
1
|
# @tsonic/express
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
Express-style HTTP server APIs for **Tsonic** (TypeScript → .NET).
|
|
4
4
|
|
|
5
|
-
|
|
5
|
+
Use this package to write Express-like apps in TypeScript and compile them to native binaries with `tsonic`.
|
|
6
6
|
|
|
7
|
-
|
|
7
|
+
## Quick Start (new project)
|
|
8
8
|
|
|
9
|
-
|
|
10
|
-
-
|
|
9
|
+
```bash
|
|
10
|
+
mkdir my-api && cd my-api
|
|
11
|
+
tsonic init
|
|
11
12
|
|
|
12
|
-
|
|
13
|
+
# Install Express runtime + bindings (and required ASP.NET Core deps)
|
|
14
|
+
tsonic add npm @tsonic/express
|
|
15
|
+
npm run dev
|
|
16
|
+
```
|
|
13
17
|
|
|
14
|
-
|
|
18
|
+
Then open `http://localhost:3000/`.
|
|
15
19
|
|
|
16
|
-
|
|
20
|
+
## Hello World
|
|
17
21
|
|
|
18
|
-
|
|
22
|
+
```ts
|
|
23
|
+
// packages/my-api/src/App.ts
|
|
24
|
+
import { express } from "@tsonic/express/index.js";
|
|
19
25
|
|
|
20
|
-
|
|
21
|
-
|
|
26
|
+
export function main(): void {
|
|
27
|
+
const app = express.create();
|
|
28
|
+
|
|
29
|
+
app.get("/", (_req, res) => {
|
|
30
|
+
res.send("hello");
|
|
31
|
+
});
|
|
32
|
+
|
|
33
|
+
app.listen(3000);
|
|
34
|
+
}
|
|
22
35
|
```
|
|
23
36
|
|
|
24
|
-
##
|
|
37
|
+
## Basic API Surface
|
|
38
|
+
|
|
39
|
+
### Create an app / router
|
|
25
40
|
|
|
26
41
|
```ts
|
|
27
42
|
import { express } from "@tsonic/express/index.js";
|
|
28
43
|
|
|
29
44
|
const app = express.create();
|
|
45
|
+
const router = express.Router();
|
|
46
|
+
```
|
|
47
|
+
|
|
48
|
+
### Routing
|
|
49
|
+
|
|
50
|
+
Common verbs:
|
|
51
|
+
|
|
52
|
+
```ts
|
|
53
|
+
app.get("/health", (_req, res) => res.send("ok"));
|
|
54
|
+
app.post("/items", (req, res) => res.json(req.body));
|
|
55
|
+
app.put("/items/:id", (req, res) => res.send(req.params["id"]));
|
|
56
|
+
app.delete("/items/:id", (_req, res) => res.sendStatus(204));
|
|
57
|
+
app.patch("/items/:id", (_req, res) => res.sendStatus(204));
|
|
58
|
+
app.all("/anything", (_req, res) => res.send("matched"));
|
|
59
|
+
```
|
|
60
|
+
|
|
61
|
+
### Middleware
|
|
30
62
|
|
|
31
|
-
|
|
32
|
-
|
|
63
|
+
```ts
|
|
64
|
+
app.use((req, _res, next) => {
|
|
65
|
+
// Do something with req
|
|
66
|
+
next();
|
|
33
67
|
});
|
|
68
|
+
```
|
|
69
|
+
|
|
70
|
+
Error middleware:
|
|
34
71
|
|
|
35
|
-
|
|
72
|
+
```ts
|
|
73
|
+
app.use((err, _req, res, _next) => {
|
|
74
|
+
res.status(500).json({ error: String(err) });
|
|
75
|
+
});
|
|
36
76
|
```
|
|
37
77
|
|
|
38
|
-
|
|
78
|
+
### Request / Response
|
|
39
79
|
|
|
40
|
-
|
|
41
|
-
|
|
80
|
+
`Request` highlights:
|
|
81
|
+
|
|
82
|
+
- `req.method`, `req.path`, `req.originalUrl`
|
|
83
|
+
- `req.query`, `req.params`
|
|
84
|
+
- `req.body` (when using body parsers)
|
|
85
|
+
- `req.get(name)` / `req.header(name)`
|
|
86
|
+
|
|
87
|
+
`Response` highlights:
|
|
88
|
+
|
|
89
|
+
- `res.status(code)`
|
|
90
|
+
- `res.send(body)`, `res.json(body)`, `res.sendStatus(code)`
|
|
91
|
+
- `res.redirect(path)` / `res.redirect(status, path)`
|
|
92
|
+
- `res.set(name, value)` / `res.header(name, value)`
|
|
93
|
+
- `res.cookie(name, value, options)` / `res.clearCookie(name, options)`
|
|
94
|
+
|
|
95
|
+
### Body parsing
|
|
96
|
+
|
|
97
|
+
```ts
|
|
98
|
+
app.use(express.json());
|
|
99
|
+
app.use(express.urlencoded());
|
|
100
|
+
app.use(express.text());
|
|
101
|
+
app.use(express.raw());
|
|
42
102
|
```
|
|
43
103
|
|
|
44
|
-
|
|
104
|
+
### Static files
|
|
105
|
+
|
|
106
|
+
```ts
|
|
107
|
+
app.use(express.static("./public"));
|
|
108
|
+
```
|
|
45
109
|
|
|
46
|
-
|
|
110
|
+
### Listen / close
|
|
47
111
|
|
|
48
|
-
```
|
|
49
|
-
|
|
112
|
+
```ts
|
|
113
|
+
const server = app.listen(3000);
|
|
114
|
+
server.close();
|
|
50
115
|
```
|
|
51
116
|
|
|
52
|
-
##
|
|
117
|
+
## Advanced docs
|
|
118
|
+
|
|
119
|
+
- https://github.com/tsoniclang/express/blob/main/docs/advanced.md (routers, handlers, middleware patterns)
|
|
120
|
+
- https://github.com/tsoniclang/express/blob/main/docs/deviations.md (known compatibility gaps / parity notes)
|
|
53
121
|
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
122
|
+
## Versioning Model
|
|
123
|
+
|
|
124
|
+
This repo is versioned by .NET major:
|
|
125
|
+
|
|
126
|
+
- .NET 10 -> `versions/10/` -> npm `@tsonic/express@10.x`
|
|
57
127
|
|
|
58
128
|
## License
|
|
59
129
|
|