@getsoda/core 0.2.2 → 0.3.0
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 +80 -0
- package/dist/app/app.d.ts +15 -5
- package/dist/app/app.d.ts.map +1 -1
- package/dist/app/app.js +31 -8
- package/dist/app/app.js.map +1 -1
- package/dist/app/index.d.ts +1 -1
- package/dist/app/index.d.ts.map +1 -1
- package/dist/config/config.d.ts.map +1 -1
- package/dist/config/config.js +2 -0
- package/dist/config/config.js.map +1 -1
- package/dist/di/errors.d.ts.map +1 -1
- package/dist/di/errors.js +2 -0
- package/dist/di/errors.js.map +1 -1
- package/dist/http/arguments.d.ts +19 -6
- package/dist/http/arguments.d.ts.map +1 -1
- package/dist/http/arguments.js +7 -0
- package/dist/http/arguments.js.map +1 -1
- package/dist/http/cookies.d.ts.map +1 -1
- package/dist/http/cookies.js +2 -0
- package/dist/http/cookies.js.map +1 -1
- package/dist/http/decorators.d.ts +12 -5
- package/dist/http/decorators.d.ts.map +1 -1
- package/dist/http/decorators.js +7 -2
- package/dist/http/decorators.js.map +1 -1
- package/dist/http/errors.d.ts +3 -1
- package/dist/http/errors.d.ts.map +1 -1
- package/dist/http/errors.js +2 -0
- package/dist/http/errors.js.map +1 -1
- package/dist/http/index.d.ts +6 -4
- package/dist/http/index.d.ts.map +1 -1
- package/dist/http/index.js +3 -2
- package/dist/http/index.js.map +1 -1
- package/dist/http/parsers.d.ts +4 -0
- package/dist/http/parsers.d.ts.map +1 -1
- package/dist/http/parsers.js +9 -5
- package/dist/http/parsers.js.map +1 -1
- package/dist/http/pipeline.d.ts +4 -5
- package/dist/http/pipeline.d.ts.map +1 -1
- package/dist/http/pipeline.js +2 -2
- package/dist/http/pipeline.js.map +1 -1
- package/dist/http/routes.d.ts +27 -2
- package/dist/http/routes.d.ts.map +1 -1
- package/dist/http/routes.js +34 -20
- package/dist/http/routes.js.map +1 -1
- package/dist/http/sse.d.ts +39 -0
- package/dist/http/sse.d.ts.map +1 -0
- package/dist/http/sse.js +89 -0
- package/dist/http/sse.js.map +1 -0
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -0
- package/dist/index.js.map +1 -1
- package/dist/openapi/decorators.d.ts +41 -0
- package/dist/openapi/decorators.d.ts.map +1 -0
- package/dist/openapi/decorators.js +29 -0
- package/dist/openapi/decorators.js.map +1 -0
- package/dist/openapi/document.d.ts +62 -0
- package/dist/openapi/document.d.ts.map +1 -0
- package/dist/openapi/document.js +135 -0
- package/dist/openapi/document.js.map +1 -0
- package/dist/openapi/index.d.ts +11 -0
- package/dist/openapi/index.d.ts.map +1 -0
- package/dist/openapi/index.js +8 -0
- package/dist/openapi/index.js.map +1 -0
- package/dist/openapi/module.d.ts +26 -0
- package/dist/openapi/module.d.ts.map +1 -0
- package/dist/openapi/module.js +73 -0
- package/dist/openapi/module.js.map +1 -0
- package/dist/routing/errors.d.ts.map +1 -1
- package/dist/routing/errors.js +2 -0
- package/dist/routing/errors.js.map +1 -1
- package/dist/testing/index.d.ts +46 -0
- package/dist/testing/index.d.ts.map +1 -0
- package/dist/testing/index.js +49 -0
- package/dist/testing/index.js.map +1 -0
- package/dist/utils/errors.d.ts +11 -0
- package/dist/utils/errors.d.ts.map +1 -0
- package/dist/utils/errors.js +22 -0
- package/dist/utils/errors.js.map +1 -0
- package/dist/utils/object.d.ts +4 -0
- package/dist/utils/object.d.ts.map +1 -1
- package/dist/utils/object.js +16 -0
- package/dist/utils/object.js.map +1 -1
- package/dist/websocket/decorators.d.ts +31 -0
- package/dist/websocket/decorators.d.ts.map +1 -0
- package/dist/websocket/decorators.js +43 -0
- package/dist/websocket/decorators.js.map +1 -0
- package/dist/websocket/gateway.d.ts +61 -0
- package/dist/websocket/gateway.d.ts.map +1 -0
- package/dist/websocket/gateway.js +142 -0
- package/dist/websocket/gateway.js.map +1 -0
- package/dist/websocket/index.d.ts +7 -0
- package/dist/websocket/index.d.ts.map +1 -0
- package/dist/websocket/index.js +6 -0
- package/dist/websocket/index.js.map +1 -0
- package/package.json +12 -1
- package/src/app/app.ts +69 -18
- package/src/app/index.ts +1 -1
- package/src/config/config.ts +2 -0
- package/src/di/errors.ts +3 -0
- package/src/http/arguments.ts +31 -6
- package/src/http/cookies.ts +2 -0
- package/src/http/decorators.ts +16 -8
- package/src/http/errors.ts +7 -0
- package/src/http/index.ts +6 -4
- package/src/http/parsers.ts +18 -7
- package/src/http/pipeline.ts +6 -6
- package/src/http/routes.ts +68 -29
- package/src/http/sse.ts +120 -0
- package/src/index.ts +1 -0
- package/src/openapi/decorators.ts +50 -0
- package/src/openapi/document.ts +221 -0
- package/src/openapi/index.ts +11 -0
- package/src/openapi/module.ts +95 -0
- package/src/routing/errors.ts +3 -0
- package/src/testing/index.ts +73 -0
- package/src/utils/errors.ts +25 -0
- package/src/utils/object.ts +23 -0
- package/src/websocket/decorators.ts +55 -0
- package/src/websocket/gateway.ts +213 -0
- package/src/websocket/index.ts +7 -0
package/README.md
CHANGED
|
@@ -120,6 +120,44 @@ class SessionController {
|
|
|
120
120
|
|
|
121
121
|
Name cookies that guard sessions with the `__Host-` prefix: browsers then refuse them from subdomains and over HTTP.
|
|
122
122
|
|
|
123
|
+
## Server-sent events
|
|
124
|
+
|
|
125
|
+
An `@Sse()` route returns an async iterable of messages, streamed as `text/event-stream`; when the client disconnects, the generator is returned and its `finally` runs:
|
|
126
|
+
|
|
127
|
+
```ts
|
|
128
|
+
@Sse('ticks')
|
|
129
|
+
async *ticks(): AsyncGenerator<SseMessage> {
|
|
130
|
+
for (let i = 0; ; i++) {
|
|
131
|
+
yield { data: { tick: i }, id: String(i) } // also event and retry
|
|
132
|
+
await Bun.sleep(1000)
|
|
133
|
+
}
|
|
134
|
+
}
|
|
135
|
+
```
|
|
136
|
+
|
|
137
|
+
## WebSockets
|
|
138
|
+
|
|
139
|
+
A gateway is listed in `controllers` like a controller; its guards run on the handshake, and frames follow the protocol of Nest's `WsAdapter`, `{ "event": "...", "data": ... }`:
|
|
140
|
+
|
|
141
|
+
```ts
|
|
142
|
+
@WebSocketGateway('/chat')
|
|
143
|
+
@UseGuards(JwtGuard) // browsers send cookies with the handshake
|
|
144
|
+
class ChatGateway implements OnGatewayConnection {
|
|
145
|
+
handleConnection(socket: GatewaySocket) {
|
|
146
|
+
socket.subscribe('room')
|
|
147
|
+
}
|
|
148
|
+
|
|
149
|
+
@SubscribeMessage('say')
|
|
150
|
+
say(data: string, socket: GatewaySocket) {
|
|
151
|
+
const user = socket.data.context.get(JWT_PAYLOAD).sub
|
|
152
|
+
|
|
153
|
+
socket.publish('room', JSON.stringify({ event: 'said', data: { user, text: data } }))
|
|
154
|
+
return { event: 'sent' } // sent back to this socket
|
|
155
|
+
}
|
|
156
|
+
}
|
|
157
|
+
```
|
|
158
|
+
|
|
159
|
+
`socket` is Bun's `ServerWebSocket`, with its pub/sub. Frames that are not such JSON are dropped; when the application closes, sockets are closed with code 1001.
|
|
160
|
+
|
|
123
161
|
## JWT
|
|
124
162
|
|
|
125
163
|
`@getsoda/core/jwt` signs and verifies JSON Web Tokens with WebCrypto: HS256/384/512, RS, PS, ES and EdDSA, keys as secrets, PEM, JWK or `CryptoKey`. The algorithm is fixed by the options, never read from the token, so `alg: none` and algorithm confusion are refused.
|
|
@@ -153,6 +191,48 @@ class AuthModule {}
|
|
|
153
191
|
|
|
154
192
|
`JwtModule.registerAsync({ inject, useFactory })` takes the options from other providers; `new JwtService(options)` works without the module.
|
|
155
193
|
|
|
194
|
+
## OpenAPI
|
|
195
|
+
|
|
196
|
+
`@getsoda/core/openapi` describes the routes from what validates them: argument parsers and schemas implementing [Standard JSON Schema](https://standardschema.dev) (zod does). Import the module to serve the document and a Swagger UI page:
|
|
197
|
+
|
|
198
|
+
```ts
|
|
199
|
+
import { ApiBearerAuth, ApiOperation, ApiResponses, ApiTags, OpenApiModule } from '@getsoda/core/openapi'
|
|
200
|
+
|
|
201
|
+
@Controller('users')
|
|
202
|
+
@ApiTags('users')
|
|
203
|
+
class UsersController {
|
|
204
|
+
@Get(':id', [param('id', int())])
|
|
205
|
+
@ApiOperation({ summary: 'One user' })
|
|
206
|
+
@ApiResponses({ 200: { description: 'The user', schema: User }, 404: { description: 'No such user' } })
|
|
207
|
+
findOne(id: number) {}
|
|
208
|
+
}
|
|
209
|
+
|
|
210
|
+
@Module({ imports: [OpenApiModule.forRoot({ info: { title: 'Shop', version: '1.0.0' }, ui: '/docs' })] })
|
|
211
|
+
class AppModule {}
|
|
212
|
+
```
|
|
213
|
+
|
|
214
|
+
`/openapi.json` and `/docs` follow the global prefix; `@ApiExclude()` leaves a route out, `createOpenApiDocument(inject(ROUTES).controllers, options)` gives the document itself.
|
|
215
|
+
|
|
216
|
+
## Testing
|
|
217
|
+
|
|
218
|
+
`@getsoda/core/testing` serves the application on a free port with a silent logger; `overrides` replace providers, as Nest's `overrideProvider()`:
|
|
219
|
+
|
|
220
|
+
```ts
|
|
221
|
+
import { createTestApp } from '@getsoda/core/testing'
|
|
222
|
+
|
|
223
|
+
const app = await createTestApp(AppModule, { overrides: [provide(Mailer, { useValue: fakeMailer })] })
|
|
224
|
+
|
|
225
|
+
afterAll(() => app.close()) // or `await using app = ...` in a block
|
|
226
|
+
|
|
227
|
+
test('signs up', async () => {
|
|
228
|
+
const response = await app.request('/users', { method: 'POST', json: { name: 'Bo' } })
|
|
229
|
+
|
|
230
|
+
expect(response.status).toBe(201)
|
|
231
|
+
})
|
|
232
|
+
```
|
|
233
|
+
|
|
234
|
+
A single service needs no server: `createContainer(UsersModule, { overrides })`.
|
|
235
|
+
|
|
156
236
|
## License
|
|
157
237
|
|
|
158
238
|
[MIT](./LICENSE)
|
package/dist/app/app.d.ts
CHANGED
|
@@ -21,7 +21,8 @@
|
|
|
21
21
|
import type { Container, ContainerOptions, ModuleImport } from '../di/index.ts';
|
|
22
22
|
import type { ControllerRoutesOptions, Middleware } from '../http/index.ts';
|
|
23
23
|
import { Logger } from '../logger/index.ts';
|
|
24
|
-
import type { CompiledRoutes, CompileOptions } from '../routing/index.ts';
|
|
24
|
+
import type { CompiledRoutes, CompileOptions, NativeHandler } from '../routing/index.ts';
|
|
25
|
+
import type { BuiltGateway, GatewaySocketData } from '../websocket/gateway.ts';
|
|
25
26
|
/**
|
|
26
27
|
* Options of `createApp`.
|
|
27
28
|
*/
|
|
@@ -54,16 +55,16 @@ export interface ListenOptions {
|
|
|
54
55
|
*/
|
|
55
56
|
export interface App {
|
|
56
57
|
readonly container: Container;
|
|
57
|
-
/** Routes for `Bun.serve()`, when serving them yourself instead of calling `listen()`. */
|
|
58
|
-
readonly routes:
|
|
58
|
+
/** Routes (and WebSocket handlers) for `Bun.serve()`, when serving them yourself instead of calling `listen()`. */
|
|
59
|
+
readonly routes: ServeRoutes;
|
|
59
60
|
/** The server once `listen()` resolved. */
|
|
60
|
-
readonly server: Bun.Server<
|
|
61
|
+
readonly server: Bun.Server<GatewaySocketData> | undefined;
|
|
61
62
|
/**
|
|
62
63
|
* Starts serving. Under `bun --hot`, a new version of the application
|
|
63
64
|
* listening on the same port takes the server over from the previous one,
|
|
64
65
|
* which is then destroyed (its server is not stopped: it is shared).
|
|
65
66
|
*/
|
|
66
|
-
listen(options?: number | ListenOptions): Promise<Bun.Server<
|
|
67
|
+
listen(options?: number | ListenOptions): Promise<Bun.Server<GatewaySocketData>>;
|
|
67
68
|
/**
|
|
68
69
|
* Graceful shutdown: refuses new requests, waits for those in flight, then
|
|
69
70
|
* runs `onDestroy` hooks. Safe to call more than once, even from a hook.
|
|
@@ -75,6 +76,15 @@ export interface App {
|
|
|
75
76
|
*/
|
|
76
77
|
enableShutdownSignals(signals?: readonly NodeJS.Signals[]): this;
|
|
77
78
|
}
|
|
79
|
+
/**
|
|
80
|
+
* Routes and WebSocket handlers for `Bun.serve()`: the handshakes of gateways
|
|
81
|
+
* are native routes of their own, outside middleware, as an upgrade returns no response.
|
|
82
|
+
*/
|
|
83
|
+
export interface ServeRoutes {
|
|
84
|
+
readonly routes: Record<string, NativeHandler | BuiltGateway['handle']>;
|
|
85
|
+
readonly fetch: CompiledRoutes['fetch'];
|
|
86
|
+
readonly websocket: Bun.WebSocketHandler<GatewaySocketData>;
|
|
87
|
+
}
|
|
78
88
|
/**
|
|
79
89
|
* Creates the container and the routes, and runs every `onInit` hook.
|
|
80
90
|
*
|
package/dist/app/app.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"app.d.ts","sourceRoot":"","sources":["../../src/app/app.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AAGH,OAAO,KAAK,EAAE,SAAS,EAAE,gBAAgB,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAA;AAG/E,OAAO,KAAK,EAAE,uBAAuB,EAAoB,UAAU,EAAE,MAAM,kBAAkB,CAAA;AAG7F,OAAO,EAAiB,MAAM,EAAgB,MAAM,oBAAoB,CAAA;AAExE,OAAO,KAAK,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAA;
|
|
1
|
+
{"version":3,"file":"app.d.ts","sourceRoot":"","sources":["../../src/app/app.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AAGH,OAAO,KAAK,EAAE,SAAS,EAAE,gBAAgB,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAA;AAG/E,OAAO,KAAK,EAAE,uBAAuB,EAAoB,UAAU,EAAE,MAAM,kBAAkB,CAAA;AAG7F,OAAO,EAAiB,MAAM,EAAgB,MAAM,oBAAoB,CAAA;AAExE,OAAO,KAAK,EAAE,cAAc,EAAE,cAAc,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAA;AAExF,OAAO,KAAK,EAAE,YAAY,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAA;AAG9E;;GAEG;AACH,MAAM,WAAW,UAAW,SAAQ,gBAAgB,EAAE,uBAAuB,EAAE,cAAc;IAC3F;;;OAGG;IACH,QAAQ,CAAC,UAAU,CAAC,EAAE,SAAS,UAAU,EAAE,CAAA;IAC3C;;;OAGG;IACH,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,KAAK,CAAA;CACjC;AAED;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAA;IACtB,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAA;IAC1B;;;OAGG;IACH,QAAQ,CAAC,kBAAkB,CAAC,EAAE,MAAM,CAAA;CACrC;AAKD;;GAEG;AACH,MAAM,WAAW,GAAG;IAClB,QAAQ,CAAC,SAAS,EAAE,SAAS,CAAA;IAC7B,mHAAmH;IACnH,QAAQ,CAAC,MAAM,EAAE,WAAW,CAAA;IAC5B,2CAA2C;IAC3C,QAAQ,CAAC,MAAM,EAAE,GAAG,CAAC,MAAM,CAAC,iBAAiB,CAAC,GAAG,SAAS,CAAA;IAC1D;;;;OAIG;IACH,MAAM,CAAC,OAAO,CAAC,EAAE,MAAM,GAAG,aAAa,GAAG,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,iBAAiB,CAAC,CAAC,CAAA;IAChF;;;OAGG;IACH,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAAA;IACtB;;;OAGG;IACH,qBAAqB,CAAC,OAAO,CAAC,EAAE,SAAS,MAAM,CAAC,OAAO,EAAE,GAAG,IAAI,CAAA;CACjE;AA0KD;;;GAGG;AACH,MAAM,WAAW,WAAW;IAC1B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,aAAa,GAAG,YAAY,CAAC,QAAQ,CAAC,CAAC,CAAA;IACvE,QAAQ,CAAC,KAAK,EAAE,cAAc,CAAC,OAAO,CAAC,CAAA;IACvC,QAAQ,CAAC,SAAS,EAAE,GAAG,CAAC,gBAAgB,CAAC,iBAAiB,CAAC,CAAA;CAC5D;AA2CD;;;;;;GAMG;AACH,eAAO,MAAM,SAAS,SAAgB,YAAY,YAAW,UAAU,KAAQ,OAAO,CAAC,GAAG,CA8CzF,CAAA"}
|
package/dist/app/app.js
CHANGED
|
@@ -20,11 +20,12 @@
|
|
|
20
20
|
*/
|
|
21
21
|
import { createContainer, provide } from '../di/index.js';
|
|
22
22
|
import { destroyAll, initializeAll } from '../di/lifecycle.js';
|
|
23
|
-
import { buildRoutes } from '../http/index.js';
|
|
23
|
+
import { buildRoutes, ControllerError, ROUTES } from '../http/index.js';
|
|
24
24
|
import { errorResponse } from '../http/exceptions.js';
|
|
25
25
|
import { applyMiddleware, resolveMiddleware } from '../http/middleware.js';
|
|
26
26
|
import { ConsoleLogger, Logger, SilentLogger } from '../logger/index.js';
|
|
27
27
|
import { compileRoutes } from '../routing/index.js';
|
|
28
|
+
import { websocketHandler } from '../websocket/gateway.js';
|
|
28
29
|
import { release, takeOver } from './hot.js';
|
|
29
30
|
/** Signals `enableShutdownSignals()` listens to by default. */
|
|
30
31
|
const DEFAULT_SIGNALS = ['SIGTERM', 'SIGINT'];
|
|
@@ -38,9 +39,11 @@ class Application {
|
|
|
38
39
|
#enhancers;
|
|
39
40
|
#signals = new Map();
|
|
40
41
|
#logger;
|
|
41
|
-
|
|
42
|
+
#gateways;
|
|
43
|
+
constructor(container, routes, gateways, enhancers, logger) {
|
|
42
44
|
this.container = container;
|
|
43
45
|
this.routes = routes;
|
|
46
|
+
this.#gateways = gateways;
|
|
44
47
|
this.#enhancers = enhancers;
|
|
45
48
|
this.#logger = logger;
|
|
46
49
|
}
|
|
@@ -104,6 +107,10 @@ class Application {
|
|
|
104
107
|
async #shutdown() {
|
|
105
108
|
const server = this.#server;
|
|
106
109
|
try {
|
|
110
|
+
// Open sockets would keep stop() waiting; under --hot, clients reconnect to the new version.
|
|
111
|
+
for (const gateway of this.#gateways) {
|
|
112
|
+
gateway.runtime.closeAll();
|
|
113
|
+
}
|
|
107
114
|
if (server !== undefined && !this.#handedOver) {
|
|
108
115
|
await server.stop();
|
|
109
116
|
}
|
|
@@ -150,8 +157,18 @@ const destroyEverything = async (enhancers, container) => {
|
|
|
150
157
|
throw new AggregateError(errors, `${errors.length} onDestroy hooks failed`);
|
|
151
158
|
}
|
|
152
159
|
};
|
|
160
|
+
const withGateways = (compiled, gateways) => {
|
|
161
|
+
const routes = { ...compiled.routes };
|
|
162
|
+
for (const gateway of gateways) {
|
|
163
|
+
if (Object.hasOwn(routes, gateway.path)) {
|
|
164
|
+
throw new ControllerError('DUPLICATE_ROUTE', `The WebSocket gateway on ${gateway.path} has the path of another gateway or route`);
|
|
165
|
+
}
|
|
166
|
+
routes[gateway.path] = gateway.handle;
|
|
167
|
+
}
|
|
168
|
+
return { routes, fetch: compiled.fetch, websocket: websocketHandler };
|
|
169
|
+
};
|
|
153
170
|
/** What Nest logs at startup: the modules, then each controller and its routes. */
|
|
154
|
-
const logStartup = (logger, container, controllers) => {
|
|
171
|
+
const logStartup = (logger, container, controllers, gateways) => {
|
|
155
172
|
const modules = logger.child('Container');
|
|
156
173
|
const routes = logger.child('Routes');
|
|
157
174
|
for (const module of container.modules) {
|
|
@@ -159,10 +176,13 @@ const logStartup = (logger, container, controllers) => {
|
|
|
159
176
|
}
|
|
160
177
|
for (const { controller, path, routes: mapped } of controllers) {
|
|
161
178
|
routes.log(`${controller.name} {${path}}:`);
|
|
162
|
-
for (const
|
|
163
|
-
routes.log(`Mapped {${
|
|
179
|
+
for (const { info } of mapped) {
|
|
180
|
+
routes.log(`Mapped {${info.path}, ${info.method}} route`);
|
|
164
181
|
}
|
|
165
182
|
}
|
|
183
|
+
for (const gateway of gateways) {
|
|
184
|
+
routes.log(`WebSocket gateway {${gateway.path}}, events: ${gateway.runtime.events.join(', ') || 'none'}`);
|
|
185
|
+
}
|
|
166
186
|
};
|
|
167
187
|
/**
|
|
168
188
|
* Creates the container and the routes, and runs every `onInit` hook.
|
|
@@ -177,9 +197,11 @@ export const createApp = async (root, options = {}) => {
|
|
|
177
197
|
const onError = options.onError ??
|
|
178
198
|
((error, req) => own.error('Unhandled error while handling a request', { error, method: req.method, url: req.url }));
|
|
179
199
|
own.log('Starting application');
|
|
200
|
+
// Filled once the routes are built; read by what describes them (OpenAPI).
|
|
201
|
+
const registry = { controllers: [] };
|
|
180
202
|
const container = await createContainer(root, {
|
|
181
203
|
...options,
|
|
182
|
-
providers: [...(options.providers ?? []), provide(Logger, { useValue: logger })],
|
|
204
|
+
providers: [...(options.providers ?? []), provide(Logger, { useValue: logger }), provide(ROUTES, { useValue: registry })],
|
|
183
205
|
});
|
|
184
206
|
const enhancers = [];
|
|
185
207
|
try {
|
|
@@ -188,13 +210,14 @@ export const createApp = async (root, options = {}) => {
|
|
|
188
210
|
enhancers.push(instance);
|
|
189
211
|
});
|
|
190
212
|
const built = buildRoutes(container, { ...options, onError });
|
|
191
|
-
|
|
213
|
+
registry.controllers = built.controllers;
|
|
214
|
+
logStartup(logger, container, built.controllers, built.gateways);
|
|
192
215
|
enhancers.push(...built.enhancers);
|
|
193
216
|
await initializeAll(enhancers);
|
|
194
217
|
own.log('Application started');
|
|
195
218
|
const compiled = compileRoutes(built.routes, options);
|
|
196
219
|
const routes = applyMiddleware(middleware, compiled.routes, compiled.fetch, (error, req) => errorResponse(error, (unknown) => onError(unknown, req)));
|
|
197
|
-
return new Application(container, routes, enhancers, own);
|
|
220
|
+
return new Application(container, withGateways(routes, built.gateways), built.gateways, enhancers, own);
|
|
198
221
|
}
|
|
199
222
|
catch (error) {
|
|
200
223
|
try {
|
package/dist/app/app.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"app.js","sourceRoot":"","sources":["../../src/app/app.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AAEH,OAAO,EAAE,eAAe,EAAE,OAAO,EAAE,MAAM,gBAAgB,CAAA;AAEzD,OAAO,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAA;AAC9D,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAA;
|
|
1
|
+
{"version":3,"file":"app.js","sourceRoot":"","sources":["../../src/app/app.ts"],"names":[],"mappings":"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"}
|
package/dist/app/index.d.ts
CHANGED
|
@@ -3,5 +3,5 @@
|
|
|
3
3
|
* The application: container, routes and server, started and stopped together.
|
|
4
4
|
*/
|
|
5
5
|
export { createApp } from './app.ts';
|
|
6
|
-
export type { App, AppOptions, ListenOptions } from './app.ts';
|
|
6
|
+
export type { App, AppOptions, ListenOptions, ServeRoutes } from './app.ts';
|
|
7
7
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/app/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/app/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,SAAS,EAAE,MAAM,UAAU,CAAA;AACpC,YAAY,EAAE,GAAG,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,UAAU,CAAA"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/app/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,SAAS,EAAE,MAAM,UAAU,CAAA;AACpC,YAAY,EAAE,GAAG,EAAE,UAAU,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,UAAU,CAAA"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/config/config.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG;AAEH,OAAO,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAA;AAE/C,OAAO,KAAK,EAAE,WAAW,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAA;
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/config/config.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG;AAEH,OAAO,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAA;AAE/C,OAAO,KAAK,EAAE,WAAW,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAA;AAGtE,kDAAkD;AAClD,MAAM,MAAM,WAAW,GAAG,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,CAAC,CAAA;AAEtE,oFAAoF;AACpF,qBAAa,WAAY,SAAQ,KAAK;IAIlC,QAAQ,CAAC,MAAM,EAAE,MAAM;IACvB,QAAQ,CAAC,MAAM,EAAE,SAAS,MAAM,EAAE;IAJpC,SAAkB,IAAI,iBAAgB;IAEtC,YACW,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,SAAS,MAAM,EAAE,EAInC;CACF;AAED;;;GAGG;AACH,qBAAa,MAAM,CAAC,CAAC,CAAE,SAAQ,cAAc,CAAC,CAAC,CAAC;;IAI9C,YAAY,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,gBAAgB,CAAC,OAAO,EAAE,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,GAAG,EAAE,WAAW,KAAK,OAAO,EAIpG;IAED,iGAAiG;IAC3F,IAAI,CAAC,GAAG,GAAE,WAAyB,GAAG,OAAO,CAAC,CAAC,CAAC,CAQrD;IAEQ,QAAQ,IAAI,MAAM,CAE1B;CACF;AAED;;;;;;;;;;GAUG;AACH,eAAO,MAAM,YAAY,GAAI,CAAC,SAAS,gBAAgB,QAC/C,MAAM,UACJ,CAAC,WACD,CAAC,GAAG,EAAE,WAAW,KAAK,OAAO,KACpC,MAAM,CAAC,WAAW,CAAC,CAAC,CAAC,CAAkF,CAAA"}
|
package/dist/config/config.js
CHANGED
|
@@ -22,6 +22,7 @@
|
|
|
22
22
|
*/
|
|
23
23
|
import { InjectionToken } from '../di/token.js';
|
|
24
24
|
import { formatIssues } from '../http/schema.js';
|
|
25
|
+
import { hideFrameworkFrames } from '../utils/errors.js';
|
|
25
26
|
/** A configuration that does not match its schema; `issues` lists every problem. */
|
|
26
27
|
export class ConfigError extends Error {
|
|
27
28
|
config;
|
|
@@ -31,6 +32,7 @@ export class ConfigError extends Error {
|
|
|
31
32
|
super(`Invalid configuration "${config}":\n ${issues.join('\n ')}`);
|
|
32
33
|
this.config = config;
|
|
33
34
|
this.issues = issues;
|
|
35
|
+
hideFrameworkFrames(this);
|
|
34
36
|
}
|
|
35
37
|
}
|
|
36
38
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/config/config.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG;AAEH,OAAO,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAA;AAC/C,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAA;
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/config/config.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG;AAEH,OAAO,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAA;AAC/C,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAA;AAEhD,OAAO,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAA;AAKxD,oFAAoF;AACpF,MAAM,OAAO,WAAY,SAAQ,KAAK;IAIzB,MAAM;IACN,MAAM;IAJC,IAAI,GAAG,aAAa,CAAA;IAEtC,YACW,MAAc,EACd,MAAyB;QAElC,KAAK,CAAC,0BAA0B,MAAM,SAAS,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,CAAA;sBAH5D,MAAM;sBACN,MAAM;QAGf,mBAAmB,CAAC,IAAI,CAAC,CAAA;IAC3B,CAAC;CACF;AAED;;;GAGG;AACH,MAAM,OAAO,MAAU,SAAQ,cAAiB;IACrC,OAAO,CAA8B;IACrC,OAAO,CAA+B;IAE/C,YAAY,IAAY,EAAE,MAAoC,EAAE,MAAqC;QACnG,KAAK,CAAC,IAAI,CAAC,CAAA;QACX,IAAI,CAAC,OAAO,GAAG,MAAM,CAAA;QACrB,IAAI,CAAC,OAAO,GAAG,MAAM,CAAA;IACvB,CAAC;IAED,iGAAiG;IACjG,KAAK,CAAC,IAAI,CAAC,GAAG,GAAgB,OAAO,CAAC,GAAG;QACvC,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAA;QAE1E,IAAI,MAAM,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;YAChC,MAAM,IAAI,WAAW,CAAC,IAAI,CAAC,WAAW,EAAE,YAAY,CAAC,MAAM,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,CAAA;QAC1E,CAAC;QAED,OAAO,MAAM,CAAC,KAAK,CAAA;IACrB,CAAC;IAEQ,QAAQ;QACf,OAAO,UAAU,IAAI,CAAC,WAAW,GAAG,CAAA;IACtC,CAAC;CACF;AAED;;;;;;;;;;GAUG;AACH,MAAM,CAAC,MAAM,YAAY,GAAG,CAC1B,IAAY,EACZ,MAAS,EACT,MAAM,GAAkC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,EAC5B,EAAE,CAAC,IAAI,MAAM,CAAC,IAAI,EAAE,MAAmD,EAAE,MAAM,CAAC,CAAA"}
|
package/dist/di/errors.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../../src/di/errors.ts"],"names":[],"mappings":"AAAA;;;GAGG;
|
|
1
|
+
{"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../../src/di/errors.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAIH;;;;;;;;;;;;;GAaG;AACH,MAAM,MAAM,WAAW,GACnB,aAAa,GACb,oBAAoB,GACpB,qBAAqB,GACrB,kBAAkB,GAClB,2BAA2B,GAC3B,kBAAkB,GAClB,oBAAoB,GACpB,gBAAgB,GAChB,gBAAgB,GAChB,kBAAkB,CAAA;AAEtB;;;;GAIG;AACH,qBAAa,OAAQ,SAAQ,KAAK;IAI9B,QAAQ,CAAC,IAAI,EAAE,WAAW;IAH5B,SAAkB,IAAI,aAAY;IAElC,YACW,IAAI,EAAE,WAAW,EAC1B,OAAO,EAAE,MAAM,EAIhB;CACF"}
|
package/dist/di/errors.js
CHANGED
|
@@ -2,6 +2,7 @@
|
|
|
2
2
|
* @module
|
|
3
3
|
* Errors raised by the dependency injection container.
|
|
4
4
|
*/
|
|
5
|
+
import { hideFrameworkFrames } from '../utils/errors.js';
|
|
5
6
|
/**
|
|
6
7
|
* Error thrown by the container.
|
|
7
8
|
*
|
|
@@ -13,6 +14,7 @@ export class DiError extends Error {
|
|
|
13
14
|
constructor(code, message) {
|
|
14
15
|
super(message);
|
|
15
16
|
this.code = code;
|
|
17
|
+
hideFrameworkFrames(this);
|
|
16
18
|
}
|
|
17
19
|
}
|
|
18
20
|
//# sourceMappingURL=errors.js.map
|
package/dist/di/errors.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"errors.js","sourceRoot":"","sources":["../../src/di/errors.ts"],"names":[],"mappings":"AAAA;;;GAGG;
|
|
1
|
+
{"version":3,"file":"errors.js","sourceRoot":"","sources":["../../src/di/errors.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAA;AA4BxD;;;;GAIG;AACH,MAAM,OAAO,OAAQ,SAAQ,KAAK;IAIrB,IAAI;IAHG,IAAI,GAAG,SAAS,CAAA;IAElC,YACW,IAAiB,EAC1B,OAAe;QAEf,KAAK,CAAC,OAAO,CAAC,CAAA;oBAHL,IAAI;QAIb,mBAAmB,CAAC,IAAI,CAAC,CAAA;IAC3B,CAAC;CACF"}
|
package/dist/http/arguments.d.ts
CHANGED
|
@@ -17,7 +17,7 @@
|
|
|
17
17
|
*/
|
|
18
18
|
import type { FormFields, FormLimits } from './body.ts';
|
|
19
19
|
import type { ContextKey } from './context-key.ts';
|
|
20
|
-
import type { Context, ParamNameOf } from './context.ts';
|
|
20
|
+
import type { Context, ContextParams, ParamNameOf } from './context.ts';
|
|
21
21
|
import type { Parsed, ValueParser } from './parsers.ts';
|
|
22
22
|
import type { InferOutput, StandardSchemaV1 } from './schema.ts';
|
|
23
23
|
export type ArgumentKind = 'param' | 'query' | 'header' | 'cookie' | 'body' | 'context' | 'value';
|
|
@@ -29,15 +29,27 @@ export interface Argument<T, K extends ArgumentKind = ArgumentKind, N extends st
|
|
|
29
29
|
/** Parameter, query, header or cookie name; the key description for `value`; empty for `body` and `context`. */
|
|
30
30
|
readonly name: N;
|
|
31
31
|
readonly read: (ctx: Context) => T | Promise<T>;
|
|
32
|
+
/** The parser or schema the value goes through, for API descriptions such as OpenAPI. */
|
|
33
|
+
readonly source?: ValueParser<unknown> | StandardSchemaV1;
|
|
34
|
+
/** Set by `form()`: the body is a form, not JSON. */
|
|
35
|
+
readonly multipart?: true;
|
|
32
36
|
}
|
|
33
37
|
/** Arguments accepted by a route with path `P`: `param()` names must exist in it. */
|
|
34
38
|
export type ArgumentFor<P extends string> = Argument<unknown, 'param', ParamNameOf<P>> | Argument<unknown, Exclude<ArgumentKind, 'param'>>;
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
39
|
+
declare const RAW_PARAM: unique symbol;
|
|
40
|
+
/**
|
|
41
|
+
* Value of `param(name)` without parser, typed by the route path:
|
|
42
|
+
* `string` for `:id`, `string | undefined` for `:id?`.
|
|
43
|
+
*/
|
|
44
|
+
export interface RawParam {
|
|
45
|
+
readonly [RAW_PARAM]: true;
|
|
46
|
+
}
|
|
47
|
+
/** Values a method receives for an argument list on a route with path `P`. */
|
|
48
|
+
export type ArgumentValues<A extends readonly Argument<unknown>[], P extends string = string> = {
|
|
49
|
+
-readonly [K in keyof A]: A[K] extends Argument<infer T, ArgumentKind, infer N> ? [T] extends [RawParam] ? ContextParams<P>[N] : T : never;
|
|
38
50
|
};
|
|
39
|
-
/** Path parameter
|
|
40
|
-
export declare function param<const N extends string>(name: N): Argument<
|
|
51
|
+
/** Path parameter, typed by the route path, or by `parser`. Like `@Param('id', ParseIntPipe)`. */
|
|
52
|
+
export declare function param<const N extends string>(name: N): Argument<RawParam, 'param', N>;
|
|
41
53
|
export declare function param<const N extends string, V extends ValueParser<unknown>>(name: N, parser: V): Argument<Parsed<V>, 'param', N>;
|
|
42
54
|
/** Query parameter. Like `@Query('page', ParseIntPipe)`. */
|
|
43
55
|
export declare function query(name: string): Argument<string | undefined, 'query'>;
|
|
@@ -66,4 +78,5 @@ export declare const value: <T>(key: ContextKey<T>) => Argument<T, 'value'>;
|
|
|
66
78
|
/** Form body, validated by `schema` when given, within `limits`. Like `@Body()` on a form, or Nest's file interceptors with multer limits. */
|
|
67
79
|
export declare function form(limits?: FormLimits): Argument<FormFields, 'body'>;
|
|
68
80
|
export declare function form<S extends StandardSchemaV1>(schema: S, limits?: FormLimits): Argument<InferOutput<S>, 'body'>;
|
|
81
|
+
export {};
|
|
69
82
|
//# sourceMappingURL=arguments.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"arguments.d.ts","sourceRoot":"","sources":["../../src/http/arguments.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAEH,OAAO,KAAK,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,WAAW,CAAA;AACvD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAA;AAClD,OAAO,KAAK,EAAE,OAAO,EAAE,WAAW,EAAE,MAAM,cAAc,CAAA;
|
|
1
|
+
{"version":3,"file":"arguments.d.ts","sourceRoot":"","sources":["../../src/http/arguments.ts"],"names":[],"mappings":"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"}
|
package/dist/http/arguments.js
CHANGED
|
@@ -20,6 +20,7 @@ export function param(name, parser) {
|
|
|
20
20
|
return {
|
|
21
21
|
kind: 'param',
|
|
22
22
|
name,
|
|
23
|
+
source: parser,
|
|
23
24
|
read: parser === undefined ? (ctx) => ctx.param(name) : (ctx) => ctx.param(name, parser),
|
|
24
25
|
};
|
|
25
26
|
}
|
|
@@ -27,6 +28,7 @@ export function query(name, parser) {
|
|
|
27
28
|
return {
|
|
28
29
|
kind: 'query',
|
|
29
30
|
name,
|
|
31
|
+
source: parser,
|
|
30
32
|
read: parser === undefined ? (ctx) => ctx.query(name) : (ctx) => ctx.query(name, parser),
|
|
31
33
|
};
|
|
32
34
|
}
|
|
@@ -34,6 +36,7 @@ export function header(name, parser) {
|
|
|
34
36
|
return {
|
|
35
37
|
kind: 'header',
|
|
36
38
|
name,
|
|
39
|
+
source: parser,
|
|
37
40
|
read: parser === undefined ? (ctx) => ctx.header(name) : (ctx) => ctx.header(name, parser),
|
|
38
41
|
};
|
|
39
42
|
}
|
|
@@ -41,6 +44,7 @@ export function cookie(name, parser) {
|
|
|
41
44
|
return {
|
|
42
45
|
kind: 'cookie',
|
|
43
46
|
name,
|
|
47
|
+
source: parser,
|
|
44
48
|
read: parser === undefined ? (ctx) => ctx.cookie(name) : (ctx) => ctx.cookie(name, parser),
|
|
45
49
|
};
|
|
46
50
|
}
|
|
@@ -48,6 +52,7 @@ export function body(schema) {
|
|
|
48
52
|
return {
|
|
49
53
|
kind: 'body',
|
|
50
54
|
name: '',
|
|
55
|
+
source: schema,
|
|
51
56
|
read: schema === undefined ? (ctx) => ctx.body() : (ctx) => ctx.body(schema),
|
|
52
57
|
};
|
|
53
58
|
}
|
|
@@ -71,6 +76,8 @@ export function form(schemaOrLimits, limits) {
|
|
|
71
76
|
return {
|
|
72
77
|
kind: 'body',
|
|
73
78
|
name: '',
|
|
79
|
+
source: isStandardSchema(schemaOrLimits) ? schemaOrLimits : undefined,
|
|
80
|
+
multipart: true,
|
|
74
81
|
read: isStandardSchema(schemaOrLimits) ? (ctx) => ctx.form(schemaOrLimits, limits) : (ctx) => ctx.form(schemaOrLimits),
|
|
75
82
|
};
|
|
76
83
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"arguments.js","sourceRoot":"","sources":["../../src/http/arguments.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAMH,OAAO,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAA;
|
|
1
|
+
{"version":3,"file":"arguments.js","sourceRoot":"","sources":["../../src/http/arguments.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cookies.d.ts","sourceRoot":"","sources":["../../src/http/cookies.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AAIH,OAAO,KAAK,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,cAAc,CAAA;AAKzD;;;;;;;GAOG;AACH,qBAAa,YAAY;;IAGvB,oEAAoE;IACpE,YAAY,OAAO,EAAE,MAAM,GAAG,SAAS,MAAM,EAAE,EAQ9C;IAED,+DAA+D;IAC/D,IAAI,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAE1B;IAED,8FAA8F;IAC9F,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAmBzC;CACF;AAED,KAAK,MAAM,CAAC,CAAC,SAAS,aAAa,IAAI,CAAC,SAAS;IAAE,QAAQ,CAAC,QAAQ,EAAE,IAAI,CAAA;CAAE,GAAG,MAAM,GAAG,SAAS,GAAG,MAAM,CAAA;AAE1G;;;;GAIG;AACH,eAAO,MAAM,MAAM,GAAI,KAAK,CAAC,CAAC,SAAS,aAAa,GAAG,EAAE,UAAU,YAAY,YAAY,CAAC,KAAG,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,
|
|
1
|
+
{"version":3,"file":"cookies.d.ts","sourceRoot":"","sources":["../../src/http/cookies.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AAIH,OAAO,KAAK,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,cAAc,CAAA;AAKzD;;;;;;;GAOG;AACH,qBAAa,YAAY;;IAGvB,oEAAoE;IACpE,YAAY,OAAO,EAAE,MAAM,GAAG,SAAS,MAAM,EAAE,EAQ9C;IAED,+DAA+D;IAC/D,IAAI,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAE1B;IAED,8FAA8F;IAC9F,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAmBzC;CACF;AAED,KAAK,MAAM,CAAC,CAAC,SAAS,aAAa,IAAI,CAAC,SAAS;IAAE,QAAQ,CAAC,QAAQ,EAAE,IAAI,CAAA;CAAE,GAAG,MAAM,GAAG,SAAS,GAAG,MAAM,CAAA;AAE1G;;;;GAIG;AACH,eAAO,MAAM,MAAM,GAAI,KAAK,CAAC,CAAC,SAAS,aAAa,GAAG,EAAE,UAAU,YAAY,YAAY,CAAC,KAAG,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAY7G,CAAA"}
|
package/dist/http/cookies.js
CHANGED
|
@@ -66,6 +66,8 @@ export class CookieSigner {
|
|
|
66
66
|
* forged cookie is no better than none.
|
|
67
67
|
*/
|
|
68
68
|
export const signed = (signer, options) => ({
|
|
69
|
+
jsonSchema: { type: 'string' },
|
|
70
|
+
optional: options?.optional === true,
|
|
69
71
|
parse: (value, name) => {
|
|
70
72
|
const unsigned = value === undefined ? undefined : signer.unsign(value);
|
|
71
73
|
if (unsigned === undefined && options?.optional !== true) {
|
package/dist/http/cookies.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cookies.js","sourceRoot":"","sources":["../../src/http/cookies.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AAEH,OAAO,EAAE,eAAe,EAAE,MAAM,aAAa,CAAA;AAC7C,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAA;AAGtC,MAAM,IAAI,GAAG,CAAC,MAAc,EAAE,KAAa,EAAU,EAAE,CACrD,IAAI,GAAG,CAAC,YAAY,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,WAAW,CAAC,CAAA;AAE1E;;;;;;;GAOG;AACH,MAAM,OAAO,YAAY;IACd,QAAQ,CAAmB;IAEpC,oEAAoE;IACpE,YAAY,OAAmC;QAC7C,MAAM,IAAI,GAAG,OAAO,OAAO,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAA;QAEnE,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,EAAE,CAAC;YAC3C,MAAM,IAAI,SAAS,CAAC,2DAA2D,CAAC,CAAA;QAClF,CAAC;QAED,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAA;IACtB,CAAC;IAED,+DAA+D;IAC/D,IAAI,CAAC,KAAa;QAChB,OAAO,GAAG,KAAK,IAAI,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAE,EAAE,KAAK,CAAC,EAAE,CAAA;IACrD,CAAC;IAED,8FAA8F;IAC9F,MAAM,CAAC,MAAc;QACnB,MAAM,GAAG,GAAG,MAAM,CAAC,WAAW,CAAC,GAAG,CAAC,CAAA;QAEnC,IAAI,GAAG,KAAK,CAAC,CAAC,EAAE,CAAC;YACf,OAAO,SAAS,CAAA;QAClB,CAAC;QAED,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,CAAA;QAClC,MAAM,SAAS,GAAG,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,CAAA;QAEpD,KAAK,MAAM,MAAM,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;YACnC,MAAM,QAAQ,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC,CAAA;YAEjD,IAAI,QAAQ,CAAC,MAAM,KAAK,SAAS,CAAC,MAAM,IAAI,eAAe,CAAC,QAAQ,EAAE,SAAS,CAAC,EAAE,CAAC;gBACjF,OAAO,KAAK,CAAA;YACd,CAAC;QACH,CAAC;QAED,OAAO,SAAS,CAAA;IAClB,CAAC;CACF;AAID;;;;GAIG;AACH,MAAM,CAAC,MAAM,MAAM,GAAG,CAAqC,MAAoB,EAAE,OAAW,EAAqB,EAAE,CAAC,CAAC;IACnH,KAAK,EAAE,CAAC,KAAK,EAAE,IAAI,EAAE,EAAE;QACrB,MAAM,QAAQ,GAAG,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAA;QAEvE,IAAI,QAAQ,KAAK,SAAS,IAAI,OAAO,EAAE,QAAQ,KAAK,IAAI,EAAE,CAAC;YACzD,MAAM,OAAO,CAAC,IAAI,EAAE,eAAe,CAAC,CAAA;QACtC,CAAC;QAED,OAAO,QAAqB,CAAA;IAC9B,CAAC;CACF,CAAC,CAAA"}
|
|
1
|
+
{"version":3,"file":"cookies.js","sourceRoot":"","sources":["../../src/http/cookies.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AAEH,OAAO,EAAE,eAAe,EAAE,MAAM,aAAa,CAAA;AAC7C,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAA;AAGtC,MAAM,IAAI,GAAG,CAAC,MAAc,EAAE,KAAa,EAAU,EAAE,CACrD,IAAI,GAAG,CAAC,YAAY,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,WAAW,CAAC,CAAA;AAE1E;;;;;;;GAOG;AACH,MAAM,OAAO,YAAY;IACd,QAAQ,CAAmB;IAEpC,oEAAoE;IACpE,YAAY,OAAmC;QAC7C,MAAM,IAAI,GAAG,OAAO,OAAO,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAA;QAEnE,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,EAAE,CAAC;YAC3C,MAAM,IAAI,SAAS,CAAC,2DAA2D,CAAC,CAAA;QAClF,CAAC;QAED,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAA;IACtB,CAAC;IAED,+DAA+D;IAC/D,IAAI,CAAC,KAAa;QAChB,OAAO,GAAG,KAAK,IAAI,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAE,EAAE,KAAK,CAAC,EAAE,CAAA;IACrD,CAAC;IAED,8FAA8F;IAC9F,MAAM,CAAC,MAAc;QACnB,MAAM,GAAG,GAAG,MAAM,CAAC,WAAW,CAAC,GAAG,CAAC,CAAA;QAEnC,IAAI,GAAG,KAAK,CAAC,CAAC,EAAE,CAAC;YACf,OAAO,SAAS,CAAA;QAClB,CAAC;QAED,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,CAAA;QAClC,MAAM,SAAS,GAAG,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,CAAA;QAEpD,KAAK,MAAM,MAAM,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;YACnC,MAAM,QAAQ,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC,CAAA;YAEjD,IAAI,QAAQ,CAAC,MAAM,KAAK,SAAS,CAAC,MAAM,IAAI,eAAe,CAAC,QAAQ,EAAE,SAAS,CAAC,EAAE,CAAC;gBACjF,OAAO,KAAK,CAAA;YACd,CAAC;QACH,CAAC;QAED,OAAO,SAAS,CAAA;IAClB,CAAC;CACF;AAID;;;;GAIG;AACH,MAAM,CAAC,MAAM,MAAM,GAAG,CAAqC,MAAoB,EAAE,OAAW,EAAqB,EAAE,CAAC,CAAC;IACnH,UAAU,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;IAC9B,QAAQ,EAAE,OAAO,EAAE,QAAQ,KAAK,IAAI;IACpC,KAAK,EAAE,CAAC,KAAK,EAAE,IAAI,EAAE,EAAE;QACrB,MAAM,QAAQ,GAAG,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAA;QAEvE,IAAI,QAAQ,KAAK,SAAS,IAAI,OAAO,EAAE,QAAQ,KAAK,IAAI,EAAE,CAAC;YACzD,MAAM,OAAO,CAAC,IAAI,EAAE,eAAe,CAAC,CAAA;QACtC,CAAC;QAED,OAAO,QAAqB,CAAA;IAC9B,CAAC;CACF,CAAC,CAAA"}
|
|
@@ -38,6 +38,8 @@ export interface RouteMetadata {
|
|
|
38
38
|
readonly path: string;
|
|
39
39
|
/** Declared arguments; `undefined` when the method receives the context. */
|
|
40
40
|
readonly args: readonly Argument<unknown>[] | undefined;
|
|
41
|
+
/** Declared with `@Sse()`: the result is streamed as server-sent events. */
|
|
42
|
+
readonly sse: boolean;
|
|
41
43
|
}
|
|
42
44
|
/**
|
|
43
45
|
* Everything the decorators recorded for one method.
|
|
@@ -67,7 +69,7 @@ export type RouteHandlerHint<P extends string> = `Without an argument list, the
|
|
|
67
69
|
* Decorator of a route with an argument list: `@Get(':id', [param('id', int())])`.
|
|
68
70
|
* The method must accept the values of the arguments, in order.
|
|
69
71
|
*/
|
|
70
|
-
export type ArgumentsRouteDecorator<A extends readonly Argument<unknown>[]> = <This, M extends (this: This, ...args: ArgumentValues<A>) => unknown>(method: M, context: ClassMethodDecoratorContext<This, M>) => void;
|
|
72
|
+
export type ArgumentsRouteDecorator<A extends readonly Argument<unknown>[], P extends string = string> = <This, M extends (this: This, ...args: ArgumentValues<A, P>) => unknown>(method: M, context: ClassMethodDecoratorContext<This, M>) => void;
|
|
71
73
|
/**
|
|
72
74
|
* `@Get`, `@Post`... : path and argument list are both optional.
|
|
73
75
|
*
|
|
@@ -80,8 +82,8 @@ export type ArgumentsRouteDecorator<A extends readonly Argument<unknown>[]> = <T
|
|
|
80
82
|
*/
|
|
81
83
|
export interface RouteDecoratorFactory {
|
|
82
84
|
<const P extends string = '/'>(path?: P): RouteDecorator<P>;
|
|
83
|
-
<const P extends string, const A extends readonly ArgumentFor<P>[]>(path: P, args: A): ArgumentsRouteDecorator<A>;
|
|
84
|
-
<const A extends readonly ArgumentFor<'/'>[]>(args: A): ArgumentsRouteDecorator<A>;
|
|
85
|
+
<const P extends string, const A extends readonly ArgumentFor<P>[]>(path: P, args: A): ArgumentsRouteDecorator<A, P>;
|
|
86
|
+
<const A extends readonly ArgumentFor<'/'>[]>(args: A): ArgumentsRouteDecorator<A, '/'>;
|
|
85
87
|
}
|
|
86
88
|
/**
|
|
87
89
|
* Decorator returned by `@HttpCode()` and `@Header()`: fits any method.
|
|
@@ -102,8 +104,8 @@ export declare const Controller: (path?: string) => (target: Constructor<unknown
|
|
|
102
104
|
*/
|
|
103
105
|
export interface MethodRouteDecoratorFactory {
|
|
104
106
|
<const P extends string = '/'>(method: string, path?: P): RouteDecorator<P>;
|
|
105
|
-
<const P extends string, const A extends readonly ArgumentFor<P>[]>(method: string, path: P, args: A): ArgumentsRouteDecorator<A>;
|
|
106
|
-
<const A extends readonly ArgumentFor<'/'>[]>(method: string, args: A): ArgumentsRouteDecorator<A>;
|
|
107
|
+
<const P extends string, const A extends readonly ArgumentFor<P>[]>(method: string, path: P, args: A): ArgumentsRouteDecorator<A, P>;
|
|
108
|
+
<const A extends readonly ArgumentFor<'/'>[]>(method: string, args: A): ArgumentsRouteDecorator<A, '/'>;
|
|
107
109
|
}
|
|
108
110
|
/**
|
|
109
111
|
* Route for any method name, including extensions (`PROPFIND`, `REPORT`...).
|
|
@@ -126,6 +128,11 @@ export declare const Options: RouteDecoratorFactory;
|
|
|
126
128
|
export declare const Head: RouteDecoratorFactory;
|
|
127
129
|
/** Route for every method; a route for a concrete method on the same path wins. */
|
|
128
130
|
export declare const All: RouteDecoratorFactory;
|
|
131
|
+
/**
|
|
132
|
+
* `GET` route streaming server-sent events: the method returns an async
|
|
133
|
+
* iterable of `SseMessage`, such as an `async function*`. Like Nest's `@Sse()`.
|
|
134
|
+
*/
|
|
135
|
+
export declare const Sse: RouteDecoratorFactory;
|
|
129
136
|
/**
|
|
130
137
|
* Status of the responses built from the returned value (not of a returned `Response`).
|
|
131
138
|
* Defaults to `201` for `POST` and `200` otherwise, as in Nest.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"decorators.d.ts","sourceRoot":"","sources":["../../src/http/decorators.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA4BG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAA;AACjD,OAAO,KAAK,EAAE,QAAQ,EAAE,WAAW,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAA;AAC3E,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,cAAc,CAAA;AAG3C;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;IACvB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;IACrB,4EAA4E;IAC5E,QAAQ,CAAC,IAAI,EAAE,SAAS,QAAQ,CAAC,OAAO,CAAC,EAAE,GAAG,SAAS,CAAA;
|
|
1
|
+
{"version":3,"file":"decorators.d.ts","sourceRoot":"","sources":["../../src/http/decorators.ts"],"names":[],"mappings":"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"}
|