@getsoda/core 0.2.1 → 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.
Files changed (137) hide show
  1. package/README.md +103 -0
  2. package/dist/app/app.d.ts +15 -5
  3. package/dist/app/app.d.ts.map +1 -1
  4. package/dist/app/app.js +31 -8
  5. package/dist/app/app.js.map +1 -1
  6. package/dist/app/index.d.ts +1 -1
  7. package/dist/app/index.d.ts.map +1 -1
  8. package/dist/config/config.d.ts +57 -0
  9. package/dist/config/config.d.ts.map +1 -0
  10. package/dist/config/config.js +74 -0
  11. package/dist/config/config.js.map +1 -0
  12. package/dist/config/index.d.ts +9 -0
  13. package/dist/config/index.d.ts.map +1 -0
  14. package/dist/config/index.js +7 -0
  15. package/dist/config/index.js.map +1 -0
  16. package/dist/config/module.d.ts +29 -0
  17. package/dist/config/module.d.ts.map +1 -0
  18. package/dist/config/module.js +28 -0
  19. package/dist/config/module.js.map +1 -0
  20. package/dist/di/errors.d.ts.map +1 -1
  21. package/dist/di/errors.js +2 -0
  22. package/dist/di/errors.js.map +1 -1
  23. package/dist/http/arguments.d.ts +19 -6
  24. package/dist/http/arguments.d.ts.map +1 -1
  25. package/dist/http/arguments.js +7 -0
  26. package/dist/http/arguments.js.map +1 -1
  27. package/dist/http/cookies.d.ts.map +1 -1
  28. package/dist/http/cookies.js +2 -0
  29. package/dist/http/cookies.js.map +1 -1
  30. package/dist/http/decorators.d.ts +18 -6
  31. package/dist/http/decorators.d.ts.map +1 -1
  32. package/dist/http/decorators.js +7 -2
  33. package/dist/http/decorators.js.map +1 -1
  34. package/dist/http/errors.d.ts +3 -1
  35. package/dist/http/errors.d.ts.map +1 -1
  36. package/dist/http/errors.js +2 -0
  37. package/dist/http/errors.js.map +1 -1
  38. package/dist/http/index.d.ts +7 -5
  39. package/dist/http/index.d.ts.map +1 -1
  40. package/dist/http/index.js +3 -2
  41. package/dist/http/index.js.map +1 -1
  42. package/dist/http/parsers.d.ts +4 -0
  43. package/dist/http/parsers.d.ts.map +1 -1
  44. package/dist/http/parsers.js +9 -5
  45. package/dist/http/parsers.js.map +1 -1
  46. package/dist/http/pipeline.d.ts +4 -5
  47. package/dist/http/pipeline.d.ts.map +1 -1
  48. package/dist/http/pipeline.js +2 -2
  49. package/dist/http/pipeline.js.map +1 -1
  50. package/dist/http/routes.d.ts +27 -2
  51. package/dist/http/routes.d.ts.map +1 -1
  52. package/dist/http/routes.js +34 -20
  53. package/dist/http/routes.js.map +1 -1
  54. package/dist/http/schema.d.ts +2 -0
  55. package/dist/http/schema.d.ts.map +1 -1
  56. package/dist/http/schema.js +2 -1
  57. package/dist/http/schema.js.map +1 -1
  58. package/dist/http/sse.d.ts +39 -0
  59. package/dist/http/sse.d.ts.map +1 -0
  60. package/dist/http/sse.js +89 -0
  61. package/dist/http/sse.js.map +1 -0
  62. package/dist/index.d.ts +2 -0
  63. package/dist/index.d.ts.map +1 -1
  64. package/dist/index.js +2 -0
  65. package/dist/index.js.map +1 -1
  66. package/dist/openapi/decorators.d.ts +41 -0
  67. package/dist/openapi/decorators.d.ts.map +1 -0
  68. package/dist/openapi/decorators.js +29 -0
  69. package/dist/openapi/decorators.js.map +1 -0
  70. package/dist/openapi/document.d.ts +62 -0
  71. package/dist/openapi/document.d.ts.map +1 -0
  72. package/dist/openapi/document.js +135 -0
  73. package/dist/openapi/document.js.map +1 -0
  74. package/dist/openapi/index.d.ts +11 -0
  75. package/dist/openapi/index.d.ts.map +1 -0
  76. package/dist/openapi/index.js +8 -0
  77. package/dist/openapi/index.js.map +1 -0
  78. package/dist/openapi/module.d.ts +26 -0
  79. package/dist/openapi/module.d.ts.map +1 -0
  80. package/dist/openapi/module.js +73 -0
  81. package/dist/openapi/module.js.map +1 -0
  82. package/dist/routing/errors.d.ts.map +1 -1
  83. package/dist/routing/errors.js +2 -0
  84. package/dist/routing/errors.js.map +1 -1
  85. package/dist/testing/index.d.ts +46 -0
  86. package/dist/testing/index.d.ts.map +1 -0
  87. package/dist/testing/index.js +49 -0
  88. package/dist/testing/index.js.map +1 -0
  89. package/dist/utils/errors.d.ts +11 -0
  90. package/dist/utils/errors.d.ts.map +1 -0
  91. package/dist/utils/errors.js +22 -0
  92. package/dist/utils/errors.js.map +1 -0
  93. package/dist/utils/object.d.ts +4 -0
  94. package/dist/utils/object.d.ts.map +1 -1
  95. package/dist/utils/object.js +16 -0
  96. package/dist/utils/object.js.map +1 -1
  97. package/dist/websocket/decorators.d.ts +31 -0
  98. package/dist/websocket/decorators.d.ts.map +1 -0
  99. package/dist/websocket/decorators.js +43 -0
  100. package/dist/websocket/decorators.js.map +1 -0
  101. package/dist/websocket/gateway.d.ts +61 -0
  102. package/dist/websocket/gateway.d.ts.map +1 -0
  103. package/dist/websocket/gateway.js +142 -0
  104. package/dist/websocket/gateway.js.map +1 -0
  105. package/dist/websocket/index.d.ts +7 -0
  106. package/dist/websocket/index.d.ts.map +1 -0
  107. package/dist/websocket/index.js +6 -0
  108. package/dist/websocket/index.js.map +1 -0
  109. package/package.json +12 -1
  110. package/src/app/app.ts +69 -18
  111. package/src/app/index.ts +1 -1
  112. package/src/config/config.ts +90 -0
  113. package/src/config/index.ts +9 -0
  114. package/src/config/module.ts +40 -0
  115. package/src/di/errors.ts +3 -0
  116. package/src/http/arguments.ts +31 -6
  117. package/src/http/cookies.ts +2 -0
  118. package/src/http/decorators.ts +25 -10
  119. package/src/http/errors.ts +7 -0
  120. package/src/http/index.ts +7 -4
  121. package/src/http/parsers.ts +18 -7
  122. package/src/http/pipeline.ts +6 -6
  123. package/src/http/routes.ts +68 -29
  124. package/src/http/schema.ts +2 -1
  125. package/src/http/sse.ts +120 -0
  126. package/src/index.ts +2 -0
  127. package/src/openapi/decorators.ts +50 -0
  128. package/src/openapi/document.ts +221 -0
  129. package/src/openapi/index.ts +11 -0
  130. package/src/openapi/module.ts +95 -0
  131. package/src/routing/errors.ts +3 -0
  132. package/src/testing/index.ts +73 -0
  133. package/src/utils/errors.ts +25 -0
  134. package/src/utils/object.ts +23 -0
  135. package/src/websocket/decorators.ts +55 -0
  136. package/src/websocket/gateway.ts +213 -0
  137. package/src/websocket/index.ts +7 -0
@@ -10,9 +10,13 @@
10
10
  * ('', '/', '/') => '/'
11
11
  * ```
12
12
  */
13
+ import { InjectionToken } from '../di/index.ts';
13
14
  import type { Constructor, Container } from '../di/index.ts';
14
15
  import type { RouteDefinition } from '../routing/index.ts';
16
+ import type { Argument } from './arguments.ts';
17
+ import type { RouteInfo } from './context.ts';
15
18
  import type { FilterLike, Guard, InterceptorLike } from './enhancers.ts';
19
+ import type { BuiltGateway } from '../websocket/gateway.ts';
16
20
  /**
17
21
  * Options of `controllerRoutes`.
18
22
  */
@@ -28,13 +32,32 @@ export interface ControllerRoutesOptions {
28
32
  /** Receives errors that no filter answered and that are not `HttpException`s (sent as 500). Defaults to `console.error`. */
29
33
  readonly onError?: (error: unknown, req: Request) => void;
30
34
  }
31
- /** A controller and the routes made from it, as `createApp` logs them at startup. */
35
+ /** A route as declared: what startup logs and API descriptions (OpenAPI) show. */
36
+ export interface MappedRoute {
37
+ /** Controller, method name, HTTP method, full path and custom metadata. */
38
+ readonly info: RouteInfo;
39
+ /** Declared arguments; `undefined` when the method receives the context. */
40
+ readonly args: readonly Argument<unknown>[] | undefined;
41
+ /** Status of the responses built from returned values. */
42
+ readonly status: number;
43
+ /** Declared with `@Sse()`. */
44
+ readonly sse: boolean;
45
+ }
46
+ /** A controller and the routes made from it. */
32
47
  export interface MappedController {
33
48
  readonly controller: Constructor<unknown>;
34
49
  /** Path of the controller, with the global prefix. */
35
50
  readonly path: string;
36
- readonly routes: readonly RouteDefinition[];
51
+ readonly routes: readonly MappedRoute[];
52
+ }
53
+ /**
54
+ * The routes of the application, grouped by controller: `inject(ROUTES)`.
55
+ * Filled once the routes are built, so read it when serving, not in a constructor.
56
+ */
57
+ export interface RouteRegistry {
58
+ readonly controllers: readonly MappedController[];
37
59
  }
60
+ export declare const ROUTES: InjectionToken<RouteRegistry>;
38
61
  /**
39
62
  * Routes of every controller, and the guards, interceptors and filters created
40
63
  * for them from classes (whose lifecycle hooks the application runs).
@@ -43,6 +66,8 @@ export interface BuiltRoutes {
43
66
  readonly routes: RouteDefinition[];
44
67
  /** In module order. */
45
68
  readonly controllers: readonly MappedController[];
69
+ /** WebSocket gateways, in module order. */
70
+ readonly gateways: readonly BuiltGateway[];
46
71
  /** In creation order. */
47
72
  readonly enhancers: readonly unknown[];
48
73
  }
@@ -1 +1 @@
1
- {"version":3,"file":"routes.d.ts","sourceRoot":"","sources":["../../src/http/routes.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,SAAS,EAAgC,MAAM,gBAAgB,CAAA;AAC1F,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAA;AAQ1D,OAAO,KAAK,EAAE,UAAU,EAAE,KAAK,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAA;AAMxE;;GAEG;AACH,MAAM,WAAW,uBAAuB;IACtC,wEAAwE;IACxE,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAA;IACxB,0GAA0G;IAC1G,QAAQ,CAAC,MAAM,CAAC,EAAE,SAAS,KAAK,EAAE,CAAA;IAClC,8EAA8E;IAC9E,QAAQ,CAAC,YAAY,CAAC,EAAE,SAAS,eAAe,EAAE,CAAA;IAClD,+EAA+E;IAC/E,QAAQ,CAAC,OAAO,CAAC,EAAE,SAAS,UAAU,EAAE,CAAA;IACxC,4HAA4H;IAC5H,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,OAAO,EAAE,GAAG,EAAE,OAAO,KAAK,IAAI,CAAA;CAC1D;AAwND,qFAAqF;AACrF,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,CAAC,UAAU,EAAE,WAAW,CAAC,OAAO,CAAC,CAAA;IACzC,sDAAsD;IACtD,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;IACrB,QAAQ,CAAC,MAAM,EAAE,SAAS,eAAe,EAAE,CAAA;CAC5C;AAED;;;GAGG;AACH,MAAM,WAAW,WAAW;IAC1B,QAAQ,CAAC,MAAM,EAAE,eAAe,EAAE,CAAA;IAClC,uBAAuB;IACvB,QAAQ,CAAC,WAAW,EAAE,SAAS,gBAAgB,EAAE,CAAA;IACjD,yBAAyB;IACzB,QAAQ,CAAC,SAAS,EAAE,SAAS,OAAO,EAAE,CAAA;CACvC;AAED;;GAEG;AACH,eAAO,MAAM,WAAW,cAAe,SAAS,YAAW,uBAAuB,KAAQ,WAQzF,CAAA;AAED;;;;;;;;GAQG;AACH,eAAO,MAAM,gBAAgB,cAAe,SAAS,YAAW,uBAAuB,KAAQ,eAAe,EACtE,CAAA"}
1
+ {"version":3,"file":"routes.d.ts","sourceRoot":"","sources":["../../src/http/routes.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAA;AAC/C,OAAO,KAAK,EAAE,WAAW,EAAE,SAAS,EAAgC,MAAM,gBAAgB,CAAA;AAC1F,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAA;AAI1D,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAA;AAC9C,OAAO,KAAK,EAAW,SAAS,EAAE,MAAM,cAAc,CAAA;AAItD,OAAO,KAAK,EAAE,UAAU,EAAE,KAAK,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAA;AAQxE,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAA;AAE3D;;GAEG;AACH,MAAM,WAAW,uBAAuB;IACtC,wEAAwE;IACxE,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAA;IACxB,0GAA0G;IAC1G,QAAQ,CAAC,MAAM,CAAC,EAAE,SAAS,KAAK,EAAE,CAAA;IAClC,8EAA8E;IAC9E,QAAQ,CAAC,YAAY,CAAC,EAAE,SAAS,eAAe,EAAE,CAAA;IAClD,+EAA+E;IAC/E,QAAQ,CAAC,OAAO,CAAC,EAAE,SAAS,UAAU,EAAE,CAAA;IACxC,4HAA4H;IAC5H,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,OAAO,EAAE,GAAG,EAAE,OAAO,KAAK,IAAI,CAAA;CAC1D;AAiOD,kFAAkF;AAClF,MAAM,WAAW,WAAW;IAC1B,2EAA2E;IAC3E,QAAQ,CAAC,IAAI,EAAE,SAAS,CAAA;IACxB,4EAA4E;IAC5E,QAAQ,CAAC,IAAI,EAAE,SAAS,QAAQ,CAAC,OAAO,CAAC,EAAE,GAAG,SAAS,CAAA;IACvD,0DAA0D;IAC1D,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;IACvB,8BAA8B;IAC9B,QAAQ,CAAC,GAAG,EAAE,OAAO,CAAA;CACtB;AAED,gDAAgD;AAChD,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,CAAC,UAAU,EAAE,WAAW,CAAC,OAAO,CAAC,CAAA;IACzC,sDAAsD;IACtD,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;IACrB,QAAQ,CAAC,MAAM,EAAE,SAAS,WAAW,EAAE,CAAA;CACxC;AAED;;;GAGG;AACH,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,WAAW,EAAE,SAAS,gBAAgB,EAAE,CAAA;CAClD;AAED,eAAO,MAAM,MAAM,+BAA8C,CAAA;AAEjE;;;GAGG;AACH,MAAM,WAAW,WAAW;IAC1B,QAAQ,CAAC,MAAM,EAAE,eAAe,EAAE,CAAA;IAClC,uBAAuB;IACvB,QAAQ,CAAC,WAAW,EAAE,SAAS,gBAAgB,EAAE,CAAA;IACjD,2CAA2C;IAC3C,QAAQ,CAAC,QAAQ,EAAE,SAAS,YAAY,EAAE,CAAA;IAC1C,yBAAyB;IACzB,QAAQ,CAAC,SAAS,EAAE,SAAS,OAAO,EAAE,CAAA;CACvC;AAED;;GAEG;AACH,eAAO,MAAM,WAAW,cAAe,SAAS,YAAW,uBAAuB,KAAQ,WAQzF,CAAA;AAED;;;;;;;;GAQG;AACH,eAAO,MAAM,gBAAgB,cAAe,SAAS,YAAW,uBAAuB,KAAQ,eAAe,EACtE,CAAA"}
@@ -10,13 +10,18 @@
10
10
  * ('', '/', '/') => '/'
11
11
  * ```
12
12
  */
13
+ import { InjectionToken } from '../di/index.js';
13
14
  import { parsePath } from '../routing/path.js';
15
+ import { methodNames } from '../utils/object.js';
14
16
  import { isThenable } from '../utils/promise.js';
15
17
  import { getControllerPath, getHandlerMetadata } from './decorators.js';
16
18
  import { getClassEnhancers, getMethodEnhancers } from './enhancers.js';
17
19
  import { ControllerError } from './errors.js';
18
20
  import { createEnhancerResolver, createPipeline } from './pipeline.js';
19
21
  import { createResponder } from './response.js';
22
+ import { createSseResponder } from './sse.js';
23
+ import { getGatewayPath } from '../websocket/decorators.js';
24
+ import { buildGateway } from '../websocket/gateway.js';
20
25
  const STATUS_CREATED = 201;
21
26
  const STATUS_OK = 200;
22
27
  /** `'users/'` → `'/users'`, `'/'` → `''`. */
@@ -31,22 +36,6 @@ const joinPaths = (...parts) => {
31
36
  }
32
37
  return path || '/';
33
38
  };
34
- /**
35
- * Public method names along the prototype chain, most derived first, without duplicates.
36
- */
37
- const methodNames = (instance) => {
38
- const names = [];
39
- const seen = new Set(['constructor']);
40
- for (let prototype = Object.getPrototypeOf(instance); prototype !== null && prototype !== Object.prototype; prototype = Object.getPrototypeOf(prototype)) {
41
- for (const name of Object.getOwnPropertyNames(prototype)) {
42
- if (!seen.has(name)) {
43
- seen.add(name);
44
- names.push(name);
45
- }
46
- }
47
- }
48
- return names;
49
- };
50
39
  /** Every `param()` must name a parameter of the full path, controller prefix included. */
51
40
  const assertParamsExist = (args, path, name) => {
52
41
  const names = new Set();
@@ -96,6 +85,9 @@ const resolveAll = (levels, globalResolve, moduleResolve) => {
96
85
  class RoutesBuilder {
97
86
  routes = [];
98
87
  controllers = [];
88
+ gateways = [];
89
+ /** Routes of the controller being added. */
90
+ #mapped = [];
99
91
  /** Guards, interceptors and filters created from classes, in creation order. */
100
92
  enhancers = [];
101
93
  #options;
@@ -111,17 +103,36 @@ class RoutesBuilder {
111
103
  this.#onError = options.onError ?? ((error) => console.error(error));
112
104
  }
113
105
  addController(entry) {
106
+ const gatewayPath = getGatewayPath(entry.controller);
107
+ if (gatewayPath !== undefined) {
108
+ this.#addGateway(entry, gatewayPath);
109
+ return;
110
+ }
114
111
  const controllerPath = getControllerPath(entry.controller);
115
112
  if (controllerPath === undefined) {
116
113
  throw new ControllerError('NOT_A_CONTROLLER', `${entry.controller.name} is listed in the controllers of ${entry.module.name} but has no @Controller()`);
117
114
  }
118
115
  const basePath = joinPaths(this.#options.prefix ?? '', controllerPath);
119
- const start = this.routes.length;
116
+ this.#mapped = [];
120
117
  // The most derived function: an override without route decorators has no metadata.
121
118
  for (const name of methodNames(entry.instance)) {
122
119
  this.#addMethod(entry, basePath, name);
123
120
  }
124
- this.controllers.push({ controller: entry.controller, path: basePath, routes: this.routes.slice(start) });
121
+ this.controllers.push({ controller: entry.controller, path: basePath, routes: this.#mapped });
122
+ }
123
+ /** A gateway: its handshake gets the guards and filters of the class and the global ones. */
124
+ #addGateway(entry, gatewayPath) {
125
+ const local = this.#resolverOf(entry);
126
+ const controller = getClassEnhancers(entry.controller);
127
+ const options = this.#options;
128
+ this.gateways.push(buildGateway({
129
+ entry,
130
+ path: joinPaths(options.prefix ?? '', gatewayPath),
131
+ guards: resolveAll([options.guards ?? [], controller.guards, []], this.#global.guard, local.guard),
132
+ filters: resolveAll([options.filters ?? [], controller.filters, []], this.#global.filter, local.filter).reverse(),
133
+ metadata: controller.metadata,
134
+ onError: this.#onError,
135
+ }));
125
136
  }
126
137
  #resolverOf(entry) {
127
138
  let resolver = this.#modules.get(entry.module);
@@ -154,6 +165,8 @@ class RoutesBuilder {
154
165
  if (route.args !== undefined) {
155
166
  assertParamsExist(route.args, path, `${entry.controller.name}.${name}`);
156
167
  }
168
+ const status = statusOf(metadata, route);
169
+ this.#mapped.push({ info, args: route.args, status, sse: route.sse });
157
170
  this.routes.push({
158
171
  method: route.method,
159
172
  path,
@@ -164,13 +177,14 @@ class RoutesBuilder {
164
177
  interceptors,
165
178
  filters,
166
179
  invoke: createInvoker(instance, method, route.args),
167
- respond: createResponder(statusOf(metadata, route), metadata.headers),
180
+ respond: route.sse ? createSseResponder(metadata.headers, this.#onError) : createResponder(status, metadata.headers),
168
181
  onError: this.#onError,
169
182
  }),
170
183
  });
171
184
  }
172
185
  }
173
186
  }
187
+ export const ROUTES = new InjectionToken('ROUTES');
174
188
  /**
175
189
  * Builds the routes of every controller of `container`.
176
190
  */
@@ -179,7 +193,7 @@ export const buildRoutes = (container, options = {}) => {
179
193
  for (const entry of container.controllers) {
180
194
  builder.addController(entry);
181
195
  }
182
- return { routes: builder.routes, controllers: builder.controllers, enhancers: builder.enhancers };
196
+ return { routes: builder.routes, controllers: builder.controllers, gateways: builder.gateways, enhancers: builder.enhancers };
183
197
  };
184
198
  /**
185
199
  * Route definitions of every controller of `container`, ready for `compileRoutes`.
@@ -1 +1 @@
1
- {"version":3,"file":"routes.js","sourceRoot":"","sources":["../../src/http/routes.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"routes.js","sourceRoot":"","sources":["../../src/http/routes.ts"],"names":[],"mappings":"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"}
@@ -47,6 +47,8 @@ export declare namespace StandardSchemaV1 {
47
47
  export type InferOutput<S extends StandardSchemaV1> = NonNullable<S['~standard']['types']>['output'];
48
48
  /** `true` for a Standard Schema. */
49
49
  export declare const isStandardSchema: (value: unknown) => value is StandardSchemaV1;
50
+ /** Messages of `issues`, each with the path of its value under `prefix`. */
51
+ export declare const formatIssues: (issues: readonly StandardSchemaV1.Issue[], prefix: string) => string[];
50
52
  /**
51
53
  * Validates `value`; returns the schema's output (schemas may transform) or
52
54
  * throws `BadRequestException` with the issues. `prefix` names the value in
@@ -1 +1 @@
1
- {"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../../src/http/schema.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAKH,gDAAgD;AAChD,MAAM,WAAW,gBAAgB,CAAC,KAAK,GAAG,OAAO,EAAE,MAAM,GAAG,KAAK;IAC/D,QAAQ,CAAC,WAAW,EAAE,gBAAgB,CAAC,KAAK,CAAC,KAAK,EAAE,MAAM,CAAC,CAAA;CAC5D;AAED,MAAM,CAAC,OAAO,WAAW,gBAAgB,CAAC;IACxC,UAAU,KAAK,CAAC,KAAK,GAAG,OAAO,EAAE,MAAM,GAAG,KAAK;QAC7C,QAAQ,CAAC,OAAO,EAAE,CAAC,CAAA;QACnB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;QACvB,QAAQ,CAAC,QAAQ,EAAE,CAAC,KAAK,EAAE,OAAO,EAAE,OAAO,CAAC,EAAE,OAAO,KAAK,MAAM,CAAC,MAAM,CAAC,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAA;QAClG,QAAQ,CAAC,KAAK,CAAC,EAAE,KAAK,CAAC,KAAK,EAAE,MAAM,CAAC,GAAG,SAAS,CAAA;KAClD;IAED,UAAU,OAAO;QACf,QAAQ,CAAC,cAAc,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS,CAAA;KAC9D;IAED,KAAK,MAAM,CAAC,MAAM,IAAI,aAAa,CAAC,MAAM,CAAC,GAAG,aAAa,CAAA;IAE3D,UAAU,aAAa,CAAC,MAAM;QAC5B,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAA;QACtB,QAAQ,CAAC,MAAM,CAAC,EAAE,SAAS,CAAA;KAC5B;IAED,UAAU,aAAa;QACrB,QAAQ,CAAC,MAAM,EAAE,SAAS,KAAK,EAAE,CAAA;KAClC;IAED,UAAU,KAAK;QACb,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAA;QACxB,QAAQ,CAAC,IAAI,CAAC,EAAE,SAAS,CAAC,WAAW,GAAG,WAAW,CAAC,EAAE,GAAG,SAAS,CAAA;KACnE;IAED,UAAU,WAAW;QACnB,QAAQ,CAAC,GAAG,EAAE,WAAW,CAAA;KAC1B;IAED,UAAU,KAAK,CAAC,KAAK,GAAG,OAAO,EAAE,MAAM,GAAG,KAAK;QAC7C,QAAQ,CAAC,KAAK,EAAE,KAAK,CAAA;QACrB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;KACxB;CACF;AAED,8BAA8B;AAC9B,MAAM,MAAM,WAAW,CAAC,CAAC,SAAS,gBAAgB,IAAI,WAAW,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAA;AAMpG,oCAAoC;AACpC,eAAO,MAAM,gBAAgB,UAAW,OAAO,KAAG,KAAK,IAAI,gBACU,CAAA;AA6BrE;;;;GAIG;AACH,eAAO,MAAM,QAAQ,GAAI,CAAC,SAAS,gBAAgB,UACzC,CAAC,SACF,OAAO,UACN,MAAM,KACb,WAAW,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC,CAYzC,CAAA;AAED;;;GAGG;AACH,eAAO,MAAM,YAAY,GAAI,CAAC,SAAS,gBAAgB,UAAU,CAAC,SAAS,OAAO,UAAU,MAAM,KAAG,WAAW,CAAC,CAAC,CAQjH,CAAA"}
1
+ {"version":3,"file":"schema.d.ts","sourceRoot":"","sources":["../../src/http/schema.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAKH,gDAAgD;AAChD,MAAM,WAAW,gBAAgB,CAAC,KAAK,GAAG,OAAO,EAAE,MAAM,GAAG,KAAK;IAC/D,QAAQ,CAAC,WAAW,EAAE,gBAAgB,CAAC,KAAK,CAAC,KAAK,EAAE,MAAM,CAAC,CAAA;CAC5D;AAED,MAAM,CAAC,OAAO,WAAW,gBAAgB,CAAC;IACxC,UAAU,KAAK,CAAC,KAAK,GAAG,OAAO,EAAE,MAAM,GAAG,KAAK;QAC7C,QAAQ,CAAC,OAAO,EAAE,CAAC,CAAA;QACnB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;QACvB,QAAQ,CAAC,QAAQ,EAAE,CAAC,KAAK,EAAE,OAAO,EAAE,OAAO,CAAC,EAAE,OAAO,KAAK,MAAM,CAAC,MAAM,CAAC,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAA;QAClG,QAAQ,CAAC,KAAK,CAAC,EAAE,KAAK,CAAC,KAAK,EAAE,MAAM,CAAC,GAAG,SAAS,CAAA;KAClD;IAED,UAAU,OAAO;QACf,QAAQ,CAAC,cAAc,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS,CAAA;KAC9D;IAED,KAAK,MAAM,CAAC,MAAM,IAAI,aAAa,CAAC,MAAM,CAAC,GAAG,aAAa,CAAA;IAE3D,UAAU,aAAa,CAAC,MAAM;QAC5B,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAA;QACtB,QAAQ,CAAC,MAAM,CAAC,EAAE,SAAS,CAAA;KAC5B;IAED,UAAU,aAAa;QACrB,QAAQ,CAAC,MAAM,EAAE,SAAS,KAAK,EAAE,CAAA;KAClC;IAED,UAAU,KAAK;QACb,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAA;QACxB,QAAQ,CAAC,IAAI,CAAC,EAAE,SAAS,CAAC,WAAW,GAAG,WAAW,CAAC,EAAE,GAAG,SAAS,CAAA;KACnE;IAED,UAAU,WAAW;QACnB,QAAQ,CAAC,GAAG,EAAE,WAAW,CAAA;KAC1B;IAED,UAAU,KAAK,CAAC,KAAK,GAAG,OAAO,EAAE,MAAM,GAAG,KAAK;QAC7C,QAAQ,CAAC,KAAK,EAAE,KAAK,CAAA;QACrB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;KACxB;CACF;AAED,8BAA8B;AAC9B,MAAM,MAAM,WAAW,CAAC,CAAC,SAAS,gBAAgB,IAAI,WAAW,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAA;AAMpG,oCAAoC;AACpC,eAAO,MAAM,gBAAgB,UAAW,OAAO,KAAG,KAAK,IAAI,gBACU,CAAA;AAErE,4EAA4E;AAC5E,eAAO,MAAM,YAAY,WAAY,SAAS,gBAAgB,CAAC,KAAK,EAAE,UAAU,MAAM,KAAG,MAAM,EAyB9F,CAAA;AAED;;;;GAIG;AACH,eAAO,MAAM,QAAQ,GAAI,CAAC,SAAS,gBAAgB,UACzC,CAAC,SACF,OAAO,UACN,MAAM,KACb,WAAW,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC,CAYzC,CAAA;AAED;;;GAGG;AACH,eAAO,MAAM,YAAY,GAAI,CAAC,SAAS,gBAAgB,UAAU,CAAC,SAAS,OAAO,UAAU,MAAM,KAAG,WAAW,CAAC,CAAC,CAQjH,CAAA"}
@@ -16,7 +16,8 @@ const MAX_MESSAGES_LENGTH = 1_000_000;
16
16
  const OMITTED = 'Further validation errors were omitted';
17
17
  /** `true` for a Standard Schema. */
18
18
  export const isStandardSchema = (value) => typeof value === 'object' && value !== null && '~standard' in value;
19
- const formatIssues = (issues, prefix) => {
19
+ /** Messages of `issues`, each with the path of its value under `prefix`. */
20
+ export const formatIssues = (issues, prefix) => {
20
21
  const messages = [];
21
22
  let remaining = MAX_MESSAGES_LENGTH;
22
23
  for (const issue of issues) {
@@ -1 +1 @@
1
- {"version":3,"file":"schema.js","sourceRoot":"","sources":["../../src/http/schema.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAA;AAChD,OAAO,EAAE,mBAAmB,EAAE,MAAM,iBAAiB,CAAA;AAgDrD,qEAAqE;AACrE,MAAM,mBAAmB,GAAG,SAAS,CAAA;AACrC,MAAM,OAAO,GAAG,wCAAwC,CAAA;AAExD,oCAAoC;AACpC,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAAC,KAAc,EAA6B,EAAE,CAC5E,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,IAAI,WAAW,IAAI,KAAK,CAAA;AAErE,MAAM,YAAY,GAAG,CAAC,MAAyC,EAAE,MAAc,EAAY,EAAE;IAC3F,MAAM,QAAQ,GAAa,EAAE,CAAA;IAC7B,IAAI,SAAS,GAAG,mBAAmB,CAAA;IAEnC,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;QAC3B,IAAI,SAAS,IAAI,CAAC,EAAE,CAAC;YACnB,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;YACtB,MAAK;QACP,CAAC;QAED,IAAI,IAAI,GAAG,MAAM,CAAA;QAEjB,KAAK,MAAM,OAAO,IAAI,KAAK,CAAC,IAAI,IAAI,EAAE,EAAE,CAAC;YACvC,MAAM,GAAG,GAAG,OAAO,OAAO,KAAK,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,OAAO,CAAA;YAE/D,IAAI,GAAG,IAAI,KAAK,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI,IAAI,MAAM,CAAC,GAAG,CAAC,EAAE,CAAA;QAC7D,CAAC;QAED,MAAM,OAAO,GAAG,IAAI,KAAK,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,IAAI,KAAK,KAAK,CAAC,OAAO,EAAE,CAAA;QAEzE,SAAS,IAAI,OAAO,CAAC,MAAM,CAAA;QAC3B,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;IACxB,CAAC;IAED,OAAO,QAAQ,CAAA;AACjB,CAAC,CAAA;AAED;;;;GAIG;AACH,MAAM,CAAC,MAAM,QAAQ,GAAG,CACtB,MAAS,EACT,KAAc,EACd,MAAc,EAC4B,EAAE;IAC5C,MAAM,MAAM,GAAG,MAAM,CAAC,WAAW,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAA;IAElD,MAAM,MAAM,GAAG,CAAC,OAAyC,EAAkB,EAAE;QAC3E,IAAI,OAAO,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;YACjC,MAAM,IAAI,mBAAmB,CAAC,YAAY,CAAC,OAAO,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAA;QACrE,CAAC;QAED,OAAO,OAAO,CAAC,KAAuB,CAAA;IACxC,CAAC,CAAA;IAED,OAAO,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,CAAA;AACnF,CAAC,CAAA;AAED;;;GAGG;AACH,MAAM,CAAC,MAAM,YAAY,GAAG,CAA6B,MAAS,EAAE,KAAc,EAAE,MAAc,EAAkB,EAAE;IACpH,MAAM,MAAM,GAAG,QAAQ,CAAC,MAAM,EAAE,KAAK,EAAE,MAAM,CAAC,CAAA;IAE9C,IAAI,UAAU,CAAC,MAAM,CAAC,EAAE,CAAC;QACvB,MAAM,IAAI,SAAS,CAAC,mBAAmB,MAAM,mEAAmE,CAAC,CAAA;IACnH,CAAC;IAED,OAAO,MAAM,CAAA;AACf,CAAC,CAAA"}
1
+ {"version":3,"file":"schema.js","sourceRoot":"","sources":["../../src/http/schema.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAA;AAChD,OAAO,EAAE,mBAAmB,EAAE,MAAM,iBAAiB,CAAA;AAgDrD,qEAAqE;AACrE,MAAM,mBAAmB,GAAG,SAAS,CAAA;AACrC,MAAM,OAAO,GAAG,wCAAwC,CAAA;AAExD,oCAAoC;AACpC,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAAC,KAAc,EAA6B,EAAE,CAC5E,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,IAAI,WAAW,IAAI,KAAK,CAAA;AAErE,4EAA4E;AAC5E,MAAM,CAAC,MAAM,YAAY,GAAG,CAAC,MAAyC,EAAE,MAAc,EAAY,EAAE;IAClG,MAAM,QAAQ,GAAa,EAAE,CAAA;IAC7B,IAAI,SAAS,GAAG,mBAAmB,CAAA;IAEnC,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;QAC3B,IAAI,SAAS,IAAI,CAAC,EAAE,CAAC;YACnB,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;YACtB,MAAK;QACP,CAAC;QAED,IAAI,IAAI,GAAG,MAAM,CAAA;QAEjB,KAAK,MAAM,OAAO,IAAI,KAAK,CAAC,IAAI,IAAI,EAAE,EAAE,CAAC;YACvC,MAAM,GAAG,GAAG,OAAO,OAAO,KAAK,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,OAAO,CAAA;YAE/D,IAAI,GAAG,IAAI,KAAK,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI,IAAI,MAAM,CAAC,GAAG,CAAC,EAAE,CAAA;QAC7D,CAAC;QAED,MAAM,OAAO,GAAG,IAAI,KAAK,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,IAAI,KAAK,KAAK,CAAC,OAAO,EAAE,CAAA;QAEzE,SAAS,IAAI,OAAO,CAAC,MAAM,CAAA;QAC3B,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;IACxB,CAAC;IAED,OAAO,QAAQ,CAAA;AACjB,CAAC,CAAA;AAED;;;;GAIG;AACH,MAAM,CAAC,MAAM,QAAQ,GAAG,CACtB,MAAS,EACT,KAAc,EACd,MAAc,EAC4B,EAAE;IAC5C,MAAM,MAAM,GAAG,MAAM,CAAC,WAAW,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAA;IAElD,MAAM,MAAM,GAAG,CAAC,OAAyC,EAAkB,EAAE;QAC3E,IAAI,OAAO,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;YACjC,MAAM,IAAI,mBAAmB,CAAC,YAAY,CAAC,OAAO,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAA;QACrE,CAAC;QAED,OAAO,OAAO,CAAC,KAAuB,CAAA;IACxC,CAAC,CAAA;IAED,OAAO,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,CAAA;AACnF,CAAC,CAAA;AAED;;;GAGG;AACH,MAAM,CAAC,MAAM,YAAY,GAAG,CAA6B,MAAS,EAAE,KAAc,EAAE,MAAc,EAAkB,EAAE;IACpH,MAAM,MAAM,GAAG,QAAQ,CAAC,MAAM,EAAE,KAAK,EAAE,MAAM,CAAC,CAAA;IAE9C,IAAI,UAAU,CAAC,MAAM,CAAC,EAAE,CAAC;QACvB,MAAM,IAAI,SAAS,CAAC,mBAAmB,MAAM,mEAAmE,CAAC,CAAA;IACnH,CAAC;IAED,OAAO,MAAM,CAAA;AACf,CAAC,CAAA"}
@@ -0,0 +1,39 @@
1
+ /**
2
+ * @module
3
+ * Server-sent events: a route decorated with `@Sse()` returns an async
4
+ * iterable of messages, streamed as `text/event-stream`, as Nest's `@Sse()`
5
+ * streams an observable.
6
+ *
7
+ * ```ts
8
+ * @Sse('ticks')
9
+ * async *ticks(): AsyncGenerator<SseMessage> {
10
+ * for (let i = 0; ; i++) {
11
+ * yield { data: { tick: i } }
12
+ * await Bun.sleep(1000)
13
+ * }
14
+ * }
15
+ * ```
16
+ *
17
+ * When the client disconnects, the iterator is returned: a generator runs its
18
+ * `finally` blocks. An error thrown while streaming ends the stream and is logged.
19
+ */
20
+ import type { Context } from './context.ts';
21
+ /** One event. Fields are those of the `EventSource` protocol. */
22
+ export interface SseMessage {
23
+ /** A string is sent as is, anything else as JSON. */
24
+ readonly data: unknown;
25
+ /** Event name, listened to with `source.addEventListener(event, ...)`. */
26
+ readonly event?: string;
27
+ /** Sent back by the browser as `Last-Event-ID` when it reconnects. */
28
+ readonly id?: string;
29
+ /** Milliseconds the browser waits before reconnecting. */
30
+ readonly retry?: number;
31
+ }
32
+ /** A message in the event stream format, one `data:` line per line of data. */
33
+ export declare const formatSseMessage: (message: SseMessage) => string;
34
+ /**
35
+ * Creates the function streaming what an `@Sse()` route returns. `headers`
36
+ * come from `@Header()`; errors while streaming go to `onError`.
37
+ */
38
+ export declare const createSseResponder: (headers: readonly [string, string][], onError: (error: unknown, req: Request) => void) => ((value: unknown, ctx: Context) => Response);
39
+ //# sourceMappingURL=sse.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sse.d.ts","sourceRoot":"","sources":["../../src/http/sse.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAEH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,cAAc,CAAA;AAE3C,iEAAiE;AACjE,MAAM,WAAW,UAAU;IACzB,qDAAqD;IACrD,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAA;IACtB,0EAA0E;IAC1E,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAA;IACvB,sEAAsE;IACtE,QAAQ,CAAC,EAAE,CAAC,EAAE,MAAM,CAAA;IACpB,0DAA0D;IAC1D,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CACxB;AAkBD,+EAA+E;AAC/E,eAAO,MAAM,gBAAgB,YAAa,UAAU,KAAG,MAuBtD,CAAA;AAKD;;;GAGG;AACH,eAAO,MAAM,kBAAkB,YACpB,SAAS,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE,WAC3B,CAAC,KAAK,EAAE,OAAO,EAAE,GAAG,EAAE,OAAO,KAAK,IAAI,KAC9C,CAAC,CAAC,KAAK,EAAE,OAAO,EAAE,GAAG,EAAE,OAAO,KAAK,QAAQ,CAiC7C,CAAA"}
@@ -0,0 +1,89 @@
1
+ /**
2
+ * @module
3
+ * Server-sent events: a route decorated with `@Sse()` returns an async
4
+ * iterable of messages, streamed as `text/event-stream`, as Nest's `@Sse()`
5
+ * streams an observable.
6
+ *
7
+ * ```ts
8
+ * @Sse('ticks')
9
+ * async *ticks(): AsyncGenerator<SseMessage> {
10
+ * for (let i = 0; ; i++) {
11
+ * yield { data: { tick: i } }
12
+ * await Bun.sleep(1000)
13
+ * }
14
+ * }
15
+ * ```
16
+ *
17
+ * When the client disconnects, the iterator is returned: a generator runs its
18
+ * `finally` blocks. An error thrown while streaming ends the stream and is logged.
19
+ */
20
+ /** Headers of Nest's SSE responses: no caching, no buffering by nginx. */
21
+ const SSE_HEADERS = [
22
+ ['content-type', 'text/event-stream'],
23
+ ['cache-control', 'private, no-cache, no-store, must-revalidate, max-age=0, no-transform'],
24
+ ['x-accel-buffering', 'no'],
25
+ ];
26
+ const NEWLINE = /\r\n|\r|\n/;
27
+ const encoder = new TextEncoder();
28
+ const assertSingleLine = (name, value) => {
29
+ if (NEWLINE.test(value)) {
30
+ throw new TypeError(`SSE ${name} must not contain line breaks: ${JSON.stringify(value)}`);
31
+ }
32
+ };
33
+ /** A message in the event stream format, one `data:` line per line of data. */
34
+ export const formatSseMessage = (message) => {
35
+ const data = typeof message.data === 'string' ? message.data : JSON.stringify(message.data);
36
+ let text = '';
37
+ if (message.event !== undefined) {
38
+ assertSingleLine('event', message.event);
39
+ text += `event: ${message.event}\n`;
40
+ }
41
+ if (message.id !== undefined) {
42
+ assertSingleLine('id', message.id);
43
+ text += `id: ${message.id}\n`;
44
+ }
45
+ if (message.retry !== undefined) {
46
+ text += `retry: ${Math.trunc(message.retry)}\n`;
47
+ }
48
+ for (const line of (data ?? '').split(NEWLINE)) {
49
+ text += `data: ${line}\n`;
50
+ }
51
+ return `${text}\n`;
52
+ };
53
+ const isAsyncIterable = (value) => typeof value === 'object' && value !== null && Symbol.asyncIterator in value;
54
+ /**
55
+ * Creates the function streaming what an `@Sse()` route returns. `headers`
56
+ * come from `@Header()`; errors while streaming go to `onError`.
57
+ */
58
+ export const createSseResponder = (headers, onError) => {
59
+ const init = { status: 200, headers: [...SSE_HEADERS, ...headers] };
60
+ return (value, ctx) => {
61
+ if (!isAsyncIterable(value)) {
62
+ throw new TypeError(`${ctx.route.controller.name}.${ctx.route.handler} is an @Sse() route: it must return an async iterable`);
63
+ }
64
+ const iterator = value[Symbol.asyncIterator]();
65
+ const body = new ReadableStream({
66
+ async pull(controller) {
67
+ try {
68
+ const next = await iterator.next();
69
+ if (next.done === true) {
70
+ controller.close();
71
+ }
72
+ else {
73
+ controller.enqueue(encoder.encode(formatSseMessage(next.value)));
74
+ }
75
+ }
76
+ catch (error) {
77
+ onError(error, ctx.req);
78
+ controller.close();
79
+ }
80
+ },
81
+ // The client went away: let the source clean up.
82
+ async cancel() {
83
+ await iterator.return?.();
84
+ },
85
+ });
86
+ return new Response(body, init);
87
+ };
88
+ };
89
+ //# sourceMappingURL=sse.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sse.js","sourceRoot":"","sources":["../../src/http/sse.ts"],"names":[],"mappings":"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"}
package/dist/index.d.ts CHANGED
@@ -31,8 +31,10 @@
31
31
  * ```
32
32
  */
33
33
  export * from './app/index.ts';
34
+ export * from './config/index.ts';
34
35
  export * from './di/index.ts';
35
36
  export * from './http/index.ts';
36
37
  export * from './logger/index.ts';
37
38
  export * from './routing/index.ts';
39
+ export * from './websocket/index.ts';
38
40
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+BG;AAEH,cAAc,gBAAgB,CAAA;AAC9B,cAAc,eAAe,CAAA;AAC7B,cAAc,iBAAiB,CAAA;AAC/B,cAAc,mBAAmB,CAAA;AACjC,cAAc,oBAAoB,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+BG;AAEH,cAAc,gBAAgB,CAAA;AAC9B,cAAc,mBAAmB,CAAA;AACjC,cAAc,eAAe,CAAA;AAC7B,cAAc,iBAAiB,CAAA;AAC/B,cAAc,mBAAmB,CAAA;AACjC,cAAc,oBAAoB,CAAA;AAClC,cAAc,sBAAsB,CAAA"}
package/dist/index.js CHANGED
@@ -31,8 +31,10 @@
31
31
  * ```
32
32
  */
33
33
  export * from './app/index.js';
34
+ export * from './config/index.js';
34
35
  export * from './di/index.js';
35
36
  export * from './http/index.js';
36
37
  export * from './logger/index.js';
37
38
  export * from './routing/index.js';
39
+ export * from './websocket/index.js';
38
40
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+BG;AAEH,cAAc,gBAAgB,CAAA;AAC9B,cAAc,eAAe,CAAA;AAC7B,cAAc,iBAAiB,CAAA;AAC/B,cAAc,mBAAmB,CAAA;AACjC,cAAc,oBAAoB,CAAA"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+BG;AAEH,cAAc,gBAAgB,CAAA;AAC9B,cAAc,mBAAmB,CAAA;AACjC,cAAc,eAAe,CAAA;AAC7B,cAAc,iBAAiB,CAAA;AAC/B,cAAc,mBAAmB,CAAA;AACjC,cAAc,oBAAoB,CAAA;AAClC,cAAc,sBAAsB,CAAA"}
@@ -0,0 +1,41 @@
1
+ /**
2
+ * @module
3
+ * Decorators describing routes in the OpenAPI document, as `@nestjs/swagger` does.
4
+ */
5
+ import type { ClassOrMethodDecorator } from '../http/enhancers.ts';
6
+ import type { StandardSchemaV1 } from '../http/schema.ts';
7
+ export interface ApiOperationOptions {
8
+ readonly summary?: string;
9
+ readonly description?: string;
10
+ readonly deprecated?: boolean;
11
+ }
12
+ export interface ApiResponseOptions {
13
+ readonly description: string;
14
+ /** Schema of the JSON body; needs a library implementing Standard JSON Schema, such as zod. */
15
+ readonly schema?: StandardSchemaV1;
16
+ }
17
+ /** Summary, description and deprecation of an operation. */
18
+ export declare const ApiOperation: (options: ApiOperationOptions) => ClassOrMethodDecorator;
19
+ /** Tags grouping operations, on a controller or a method (which wins). */
20
+ export declare const ApiTags: (...names: string[]) => ClassOrMethodDecorator;
21
+ /**
22
+ * Responses of an operation, by status. Without it, the operation has the
23
+ * status of its route (`200`, `201` for `POST`, or `@HttpCode()`).
24
+ *
25
+ * ```ts
26
+ * @ApiResponses({ 200: { description: 'The user', schema: User }, 404: { description: 'No such user' } })
27
+ * ```
28
+ */
29
+ export declare const ApiResponses: (byStatus: Readonly<Record<number, ApiResponseOptions>>) => ClassOrMethodDecorator;
30
+ /** Operations need `Authorization: Bearer <token>`, as `JwtGuard` reads. */
31
+ export declare const ApiBearerAuth: () => ClassOrMethodDecorator;
32
+ /** Leaves a controller or a method out of the document. */
33
+ export declare const ApiExclude: () => ClassOrMethodDecorator;
34
+ export declare const KEYS: {
35
+ readonly operation: symbol;
36
+ readonly tags: symbol;
37
+ readonly responses: symbol;
38
+ readonly bearer: symbol;
39
+ readonly exclude: symbol;
40
+ };
41
+ //# sourceMappingURL=decorators.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"decorators.d.ts","sourceRoot":"","sources":["../../src/openapi/decorators.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,sBAAsB,CAAA;AAClE,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAA;AAEzD,MAAM,WAAW,mBAAmB;IAClC,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAA;IACzB,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAA;IAC7B,QAAQ,CAAC,UAAU,CAAC,EAAE,OAAO,CAAA;CAC9B;AAED,MAAM,WAAW,kBAAkB;IACjC,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAA;IAC5B,+FAA+F;IAC/F,QAAQ,CAAC,MAAM,CAAC,EAAE,gBAAgB,CAAA;CACnC;AAQD,4DAA4D;AAC5D,eAAO,MAAM,YAAY,YAAa,mBAAmB,KAAG,sBAA4C,CAAA;AAExG,0EAA0E;AAC1E,eAAO,MAAM,OAAO,aAAc,MAAM,EAAE,KAAG,sBAAqC,CAAA;AAElF;;;;;;;GAOG;AACH,eAAO,MAAM,YAAY,aAAc,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,kBAAkB,CAAC,CAAC,KAAG,sBAA6C,CAAA;AAEnI,4EAA4E;AAC5E,eAAO,MAAM,aAAa,QAAO,sBAAsC,CAAA;AAEvE,2DAA2D;AAC3D,eAAO,MAAM,UAAU,QAAO,sBAAuC,CAAA;AAErE,eAAO,MAAM,IAAI;aAAK,SAAS;aAAiB,IAAI;aAAY,SAAS;aAAiB,MAAM;aAAc,OAAO;CAAwB,CAAA"}
@@ -0,0 +1,29 @@
1
+ /**
2
+ * @module
3
+ * Decorators describing routes in the OpenAPI document, as `@nestjs/swagger` does.
4
+ */
5
+ import { createDecorator } from '../http/enhancers.js';
6
+ const operation = createDecorator('ApiOperation');
7
+ const tags = createDecorator('ApiTags');
8
+ const responses = createDecorator('ApiResponses');
9
+ const bearer = createDecorator('ApiBearerAuth');
10
+ const exclude = createDecorator('ApiExclude');
11
+ /** Summary, description and deprecation of an operation. */
12
+ export const ApiOperation = (options) => operation(options);
13
+ /** Tags grouping operations, on a controller or a method (which wins). */
14
+ export const ApiTags = (...names) => tags(names);
15
+ /**
16
+ * Responses of an operation, by status. Without it, the operation has the
17
+ * status of its route (`200`, `201` for `POST`, or `@HttpCode()`).
18
+ *
19
+ * ```ts
20
+ * @ApiResponses({ 200: { description: 'The user', schema: User }, 404: { description: 'No such user' } })
21
+ * ```
22
+ */
23
+ export const ApiResponses = (byStatus) => responses(byStatus);
24
+ /** Operations need `Authorization: Bearer <token>`, as `JwtGuard` reads. */
25
+ export const ApiBearerAuth = () => bearer(true);
26
+ /** Leaves a controller or a method out of the document. */
27
+ export const ApiExclude = () => exclude(true);
28
+ export const KEYS = { operation: operation.key, tags: tags.key, responses: responses.key, bearer: bearer.key, exclude: exclude.key };
29
+ //# sourceMappingURL=decorators.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"decorators.js","sourceRoot":"","sources":["../../src/openapi/decorators.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAA;AAgBtD,MAAM,SAAS,GAAG,eAAe,CAAsB,cAAc,CAAC,CAAA;AACtE,MAAM,IAAI,GAAG,eAAe,CAAoB,SAAS,CAAC,CAAA;AAC1D,MAAM,SAAS,GAAG,eAAe,CAA+C,cAAc,CAAC,CAAA;AAC/F,MAAM,MAAM,GAAG,eAAe,CAAU,eAAe,CAAC,CAAA;AACxD,MAAM,OAAO,GAAG,eAAe,CAAU,YAAY,CAAC,CAAA;AAEtD,4DAA4D;AAC5D,MAAM,CAAC,MAAM,YAAY,GAAG,CAAC,OAA4B,EAA0B,EAAE,CAAC,SAAS,CAAC,OAAO,CAAC,CAAA;AAExG,0EAA0E;AAC1E,MAAM,CAAC,MAAM,OAAO,GAAG,CAAC,GAAG,KAAe,EAA0B,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;AAElF;;;;;;;GAOG;AACH,MAAM,CAAC,MAAM,YAAY,GAAG,CAAC,QAAsD,EAA0B,EAAE,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAA;AAEnI,4EAA4E;AAC5E,MAAM,CAAC,MAAM,aAAa,GAAG,GAA2B,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,CAAA;AAEvE,2DAA2D;AAC3D,MAAM,CAAC,MAAM,UAAU,GAAG,GAA2B,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,CAAA;AAErE,MAAM,CAAC,MAAM,IAAI,GAAG,EAAE,SAAS,EAAE,SAAS,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,CAAC,GAAG,EAAE,SAAS,EAAE,SAAS,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,CAAC,GAAG,EAAE,OAAO,EAAE,OAAO,CAAC,GAAG,EAAW,CAAA"}
@@ -0,0 +1,62 @@
1
+ /**
2
+ * @module
3
+ * Building an OpenAPI 3.1 document from the routes of an application.
4
+ *
5
+ * Schemas come from what validates requests: argument parsers (`int()`,
6
+ * `uuid()`...) and Standard Schemas implementing Standard JSON Schema, as zod
7
+ * does. Paths with optional parameters give one path per form, as OpenAPI has
8
+ * no optional path parameters; `@All()` routes are left out, OpenAPI has no
9
+ * such method.
10
+ */
11
+ import type { MappedController } from '../http/routes.ts';
12
+ export type JsonSchema = Readonly<Record<string, unknown>>;
13
+ export interface OpenApiOptions {
14
+ readonly info: {
15
+ readonly title: string;
16
+ readonly version: string;
17
+ readonly description?: string;
18
+ };
19
+ readonly servers?: readonly {
20
+ readonly url: string;
21
+ readonly description?: string;
22
+ }[];
23
+ }
24
+ export interface OpenApiParameter {
25
+ readonly name: string;
26
+ readonly in: 'path' | 'query' | 'header' | 'cookie';
27
+ readonly required: boolean;
28
+ readonly schema: JsonSchema;
29
+ }
30
+ export interface OpenApiOperation {
31
+ readonly operationId: string;
32
+ readonly summary?: string;
33
+ readonly description?: string;
34
+ readonly deprecated?: boolean;
35
+ readonly tags?: readonly string[];
36
+ readonly parameters?: readonly OpenApiParameter[];
37
+ readonly requestBody?: {
38
+ readonly required: boolean;
39
+ readonly content: Readonly<Record<string, {
40
+ readonly schema: JsonSchema;
41
+ }>>;
42
+ };
43
+ readonly responses: Readonly<Record<string, {
44
+ readonly description: string;
45
+ readonly content?: Readonly<Record<string, {
46
+ readonly schema: JsonSchema;
47
+ }>>;
48
+ }>>;
49
+ readonly security?: readonly Readonly<Record<string, readonly string[]>>[];
50
+ }
51
+ export interface OpenApiDocument {
52
+ readonly openapi: '3.1.0';
53
+ readonly info: OpenApiOptions['info'];
54
+ readonly servers?: OpenApiOptions['servers'];
55
+ readonly paths: Readonly<Record<string, Readonly<Record<string, OpenApiOperation>>>>;
56
+ readonly components?: {
57
+ readonly securitySchemes: Readonly<Record<string, JsonSchema>>;
58
+ };
59
+ }
60
+ /** The OpenAPI document of `controllers`, as `inject(ROUTES).controllers` lists them. */
61
+ export declare const createOpenApiDocument: (controllers: readonly MappedController[], options: OpenApiOptions) => OpenApiDocument;
62
+ //# sourceMappingURL=document.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"document.d.ts","sourceRoot":"","sources":["../../src/openapi/document.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAIH,OAAO,KAAK,EAAE,gBAAgB,EAAe,MAAM,mBAAmB,CAAA;AAQtE,MAAM,MAAM,UAAU,GAAG,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAA;AAE1D,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,IAAI,EAAE;QAAE,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAA;KAAE,CAAA;IAClG,QAAQ,CAAC,OAAO,CAAC,EAAE,SAAS;QAAE,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAA;KAAE,EAAE,CAAA;CACtF;AAED,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;IACrB,QAAQ,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,GAAG,QAAQ,GAAG,QAAQ,CAAA;IACnD,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAA;IAC1B,QAAQ,CAAC,MAAM,EAAE,UAAU,CAAA;CAC5B;AAED,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAA;IAC5B,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAA;IACzB,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAA;IAC7B,QAAQ,CAAC,UAAU,CAAC,EAAE,OAAO,CAAA;IAC7B,QAAQ,CAAC,IAAI,CAAC,EAAE,SAAS,MAAM,EAAE,CAAA;IACjC,QAAQ,CAAC,UAAU,CAAC,EAAE,SAAS,gBAAgB,EAAE,CAAA;IACjD,QAAQ,CAAC,WAAW,CAAC,EAAE;QAAE,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC;QAAC,QAAQ,CAAC,OAAO,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE;YAAE,QAAQ,CAAC,MAAM,EAAE,UAAU,CAAA;SAAE,CAAC,CAAC,CAAA;KAAE,CAAA;IAClI,QAAQ,CAAC,SAAS,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE;QAAE,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE;YAAE,QAAQ,CAAC,MAAM,EAAE,UAAU,CAAA;SAAE,CAAC,CAAC,CAAA;KAAE,CAAC,CAAC,CAAA;IAC5J,QAAQ,CAAC,QAAQ,CAAC,EAAE,SAAS,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,SAAS,MAAM,EAAE,CAAC,CAAC,EAAE,CAAA;CAC3E;AAED,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAA;IACzB,QAAQ,CAAC,IAAI,EAAE,cAAc,CAAC,MAAM,CAAC,CAAA;IACrC,QAAQ,CAAC,OAAO,CAAC,EAAE,cAAc,CAAC,SAAS,CAAC,CAAA;IAC5C,QAAQ,CAAC,KAAK,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,gBAAgB,CAAC,CAAC,CAAC,CAAC,CAAA;IACpF,QAAQ,CAAC,UAAU,CAAC,EAAE;QAAE,QAAQ,CAAC,eAAe,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC,CAAA;KAAE,CAAA;CACzF;AAqJD,yFAAyF;AACzF,eAAO,MAAM,qBAAqB,gBAAiB,SAAS,gBAAgB,EAAE,WAAW,cAAc,KAAG,eAiBzG,CAAA"}