@spinajs/http 2.0.486 → 2.0.487

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 (74) hide show
  1. package/README.md +370 -5
  2. package/lib/cjs/base-controller.d.ts +35 -0
  3. package/lib/cjs/base-controller.d.ts.map +1 -0
  4. package/lib/cjs/base-controller.js +100 -0
  5. package/lib/cjs/base-controller.js.map +1 -0
  6. package/lib/cjs/cache.d.ts +25 -3
  7. package/lib/cjs/cache.d.ts.map +1 -1
  8. package/lib/cjs/cache.js +26 -9
  9. package/lib/cjs/cache.js.map +1 -1
  10. package/lib/cjs/cli/GenerateControllerCache.d.ts +13 -4
  11. package/lib/cjs/cli/GenerateControllerCache.d.ts.map +1 -1
  12. package/lib/cjs/cli/GenerateControllerCache.js +37 -10
  13. package/lib/cjs/cli/GenerateControllerCache.js.map +1 -1
  14. package/lib/cjs/controller-sources.d.ts +36 -0
  15. package/lib/cjs/controller-sources.d.ts.map +1 -0
  16. package/lib/cjs/controller-sources.js +73 -0
  17. package/lib/cjs/controller-sources.js.map +1 -0
  18. package/lib/cjs/controllers.d.ts +19 -36
  19. package/lib/cjs/controllers.d.ts.map +1 -1
  20. package/lib/cjs/controllers.js +98 -302
  21. package/lib/cjs/controllers.js.map +1 -1
  22. package/lib/cjs/exceptions.d.ts +12 -0
  23. package/lib/cjs/exceptions.d.ts.map +1 -1
  24. package/lib/cjs/exceptions.js +15 -1
  25. package/lib/cjs/exceptions.js.map +1 -1
  26. package/lib/cjs/index.d.ts +4 -0
  27. package/lib/cjs/index.d.ts.map +1 -1
  28. package/lib/cjs/index.js +4 -0
  29. package/lib/cjs/index.js.map +1 -1
  30. package/lib/cjs/middlewares/RequestId.d.ts.map +1 -1
  31. package/lib/cjs/middlewares/RequestId.js +4 -0
  32. package/lib/cjs/middlewares/RequestId.js.map +1 -1
  33. package/lib/cjs/route-builder.d.ts +61 -0
  34. package/lib/cjs/route-builder.d.ts.map +1 -0
  35. package/lib/cjs/route-builder.js +228 -0
  36. package/lib/cjs/route-builder.js.map +1 -0
  37. package/lib/mjs/base-controller.d.ts +35 -0
  38. package/lib/mjs/base-controller.d.ts.map +1 -0
  39. package/lib/mjs/base-controller.js +93 -0
  40. package/lib/mjs/base-controller.js.map +1 -0
  41. package/lib/mjs/cache.d.ts +25 -3
  42. package/lib/mjs/cache.d.ts.map +1 -1
  43. package/lib/mjs/cache.js +25 -10
  44. package/lib/mjs/cache.js.map +1 -1
  45. package/lib/mjs/cli/GenerateControllerCache.d.ts +13 -4
  46. package/lib/mjs/cli/GenerateControllerCache.d.ts.map +1 -1
  47. package/lib/mjs/cli/GenerateControllerCache.js +39 -12
  48. package/lib/mjs/cli/GenerateControllerCache.js.map +1 -1
  49. package/lib/mjs/controller-sources.d.ts +36 -0
  50. package/lib/mjs/controller-sources.d.ts.map +1 -0
  51. package/lib/mjs/controller-sources.js +69 -0
  52. package/lib/mjs/controller-sources.js.map +1 -0
  53. package/lib/mjs/controllers.d.ts +19 -36
  54. package/lib/mjs/controllers.d.ts.map +1 -1
  55. package/lib/mjs/controllers.js +95 -298
  56. package/lib/mjs/controllers.js.map +1 -1
  57. package/lib/mjs/exceptions.d.ts +12 -0
  58. package/lib/mjs/exceptions.d.ts.map +1 -1
  59. package/lib/mjs/exceptions.js +12 -0
  60. package/lib/mjs/exceptions.js.map +1 -1
  61. package/lib/mjs/index.d.ts +4 -0
  62. package/lib/mjs/index.d.ts.map +1 -1
  63. package/lib/mjs/index.js +4 -0
  64. package/lib/mjs/index.js.map +1 -1
  65. package/lib/mjs/middlewares/RequestId.d.ts.map +1 -1
  66. package/lib/mjs/middlewares/RequestId.js +4 -0
  67. package/lib/mjs/middlewares/RequestId.js.map +1 -1
  68. package/lib/mjs/route-builder.d.ts +61 -0
  69. package/lib/mjs/route-builder.d.ts.map +1 -0
  70. package/lib/mjs/route-builder.js +216 -0
  71. package/lib/mjs/route-builder.js.map +1 -0
  72. package/lib/tsconfig.cjs.tsbuildinfo +1 -1
  73. package/lib/tsconfig.mjs.tsbuildinfo +1 -1
  74. package/package.json +11 -11
@@ -7,268 +7,61 @@ var __decorate = (this && this.__decorate) || function (decorators, target, key,
7
7
  var __metadata = (this && this.__metadata) || function (k, v) {
8
8
  if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
9
9
  };
10
- import { AsyncLocalStorage } from 'node:async_hooks';
11
- import { isPromise } from '@spinajs/util';
12
10
  import Express from 'express';
13
- import _ from 'lodash';
14
11
  import { AsyncService, Autoinject, DI, ClassInfo, Container } from '@spinajs/di';
15
- import { UnexpectedServerError } from '@spinajs/exceptions';
16
- import { ListFromFiles } from '@spinajs/reflection';
17
12
  import { Logger, Log } from '@spinajs/log';
18
- import { DataValidator } from '@spinajs/validation';
19
- import { Configuration } from '@spinajs/configuration';
20
13
  import { HttpServer } from './server.js';
21
- import { Response, BasePolicy } from './interfaces.js';
22
- import { CONTROLLED_DESCRIPTOR_SYMBOL } from './decorators.js';
23
- import { tryGetHash, uniqueBy } from '@spinajs/util';
24
- import { DefaultControllerCache } from './cache.js';
25
- import { __handle_response__ } from './response.js';
26
- import { __handle_error__ } from './error.js';
27
- export class BaseController extends AsyncService {
14
+ import { uniqueBy } from '@spinajs/util';
15
+ import { DefaultControllerCache, parseFnParamNames, isOnDiskSource } from './cache.js';
16
+ import { BaseController } from './base-controller.js';
17
+ import { ControllerSource } from './controller-sources.js';
18
+ import { ControllerRegistrationException, RouteRegistrationException } from './exceptions.js';
19
+ export class Controllers extends AsyncService {
20
+ constructor() {
21
+ super(...arguments);
22
+ /**
23
+ * Tracks which controller types have already been route-registered so
24
+ * {@link add} is idempotent.
25
+ */
26
+ this.RegisteredTypes = new Set();
27
+ }
28
28
  /**
29
- * Express router with middleware stack
29
+ * Merged, deduped controller list from all registered
30
+ * {@link ControllerSource} services (no instances until `resolve()` patches
31
+ * them in). Kept as a public accessor for API compatibility — http-swagger
32
+ * and app code read it to enumerate controllers.
30
33
  */
31
- get Router() {
32
- return this._router;
34
+ get Controllers() {
35
+ return (this._listed ??= this.listControllers());
33
36
  }
34
37
  /**
35
- * Controller descriptor
38
+ * Resolves all registered controller discovery services. Override point
39
+ * for tests and for apps that want full control over discovery.
36
40
  */
37
- get Descriptor() {
38
- return Reflect.getMetadata(CONTROLLED_DESCRIPTOR_SYMBOL, this);
41
+ async getSources() {
42
+ return (await DI.resolve(Array.ofType(ControllerSource)));
39
43
  }
40
44
  /**
41
- * Base path for all controller routes eg. my/custom/path/
42
- *
43
- * It can be defined via `@BasePath` decorator, defaults to controller name without `Controller` part.
45
+ * Gathers controllers from every source and dedupes them: for the same
46
+ * type an entry with a real on-disk file wins over a `<di>` / `<dynamic>`
47
+ * sentinel (the file path feeds ControllersCache source parsing).
44
48
  */
45
- get BasePath() {
46
- return this.Descriptor.BasePath ? this.Descriptor.BasePath : this.constructor.name.toLowerCase();
47
- }
48
- async resolve() {
49
- await super.resolve();
50
- const self = this;
51
- if (!this.Descriptor) {
52
- this._log.warn(`Controller ${this.constructor.name} does not have descriptor. It its abstract or base class ignore this message.`);
53
- return;
54
- }
55
- this._router = Express.Router();
56
- for (const [, route] of this.Descriptor.Routes) {
57
- const handlers = [];
58
- let path = '';
59
- if (route.Path) {
60
- if (route.Path === '/') {
61
- path = `/${this.BasePath}`;
62
- }
63
- else {
64
- if (this.BasePath === '/') {
65
- path = `/${route.Path}`;
66
- }
67
- else {
68
- path = `/${this.BasePath}/${route.Path}`;
69
- }
70
- }
71
- }
72
- else {
73
- path = `/${this.BasePath}/${String(route.Method)}`;
49
+ async listControllers() {
50
+ const sources = await this.getSources();
51
+ const lists = await Promise.all(sources.map((s) => s.getControllers()));
52
+ const byType = new Map();
53
+ const untyped = [];
54
+ for (const ci of lists.flat()) {
55
+ if (!ci.type) {
56
+ untyped.push(ci);
57
+ continue;
74
58
  }
75
- // add global route path prefix
76
- if (this._cfg.get('http.controllers.route.prefix')) {
77
- path = `/${this._cfg.get('http.controllers.route.prefix')}${path}`;
59
+ const existing = byType.get(ci.type);
60
+ if (!existing || (!isOnDiskSource(existing.file) && isOnDiskSource(ci.file))) {
61
+ byType.set(ci.type, ci);
78
62
  }
79
- const middlewares = await Promise.all(this.Descriptor.Middlewares.concat(route.Middlewares || []).map((m) => {
80
- return self._container.resolve(m.Type, m.Options);
81
- }));
82
- const policies = await Promise.all(this.Descriptor.Policies.concat(route.Policies || [])
83
- .map((m) => {
84
- if (_.isString(m.Type)) {
85
- const policyType = this._cfg.get(m.Type);
86
- if (!DI.checkType(BasePolicy, policyType)) {
87
- self._log.warn(`No policy named ${policyType} is registered ( check your configuration at ${m.Type})`);
88
- return null;
89
- }
90
- else {
91
- self._log.trace(`Policy ${policyType} is used in controller ${self.constructor.name}::${String(route.Method)} at path ${path}`);
92
- return self._container.resolve(policyType, m.Options);
93
- }
94
- }
95
- else {
96
- self._log.trace(`Policy ${m.Type.name} is used in controller ${self.constructor.name}::${String(route.Method)} at path ${path}`);
97
- return self._container.resolve(m.Type, m.Options);
98
- }
99
- })
100
- .filter((x) => x !== null));
101
- const enabledMiddlewares = middlewares.filter((m) => m.isEnabled(route, this));
102
- this._log.trace(`Registering route ${route.Type.toUpperCase()} ${this.constructor.name}::${String(route.Method)} at ${path}`);
103
- // Execute all policies for route
104
- // If at least ONE policy returns no error allow route to execute
105
- // It allows to use multiple access to resource eg. token access & session
106
- handlers.push((req, _res, next) => {
107
- // Only policies enabled for this concrete route participate in the gate.
108
- // A route whose policies are ALL disabled has no active authorization
109
- // check, so it is allowed through — same semantics as having no policies
110
- // at all. Computing this up front is what prevents the request from
111
- // hanging: `Promise.allSettled([])` resolves to `[]`, which matches
112
- // neither the fulfilled nor the rejected branch below, so `next` would
113
- // never be called.
114
- const enabledPolicies = policies.filter((p) => p.isEnabled(route, this));
115
- if (enabledPolicies.length === 0) {
116
- next();
117
- return;
118
- }
119
- Promise.allSettled(enabledPolicies
120
- .map((p) => {
121
- return p
122
- .execute(req, route, this)
123
- .then(() => {
124
- this._log.trace(`Policy succeded for route ${self.constructor.name}:${String(route.Method)} ${self.BasePath}/${String(route.Path || route.Method)}, policy: ${p.constructor.name}`);
125
- })
126
- .catch((err) => {
127
- this._log.trace(`Policy failed for route ${self.constructor.name}:${String(route.Method)} ${self.BasePath}/${String(route.Path || route.Method)} error ${err}, policy: ${p.constructor.name}`);
128
- throw err;
129
- });
130
- })).then((results) => {
131
- const fullfilled = results.find(r => r.status === 'fulfilled');
132
- if (fullfilled) {
133
- this._log.trace(`Policy for route ${self.constructor.name}:${String(route.Method)} ${self.BasePath}/${String(route.Path || route.Method)} succeded, continue execution`);
134
- next();
135
- return;
136
- }
137
- // Every policy rejected — forward the first failure to the express
138
- // error handler. Use next(err) directly (not `throw next(...)`,
139
- // which would reject this .then() with `undefined` as an unhandled
140
- // rejection while the error was already forwarded).
141
- const failed = results.find(r => r.status === 'rejected');
142
- next(failed ? failed.reason : new UnexpectedServerError('Policy evaluation produced no result'));
143
- })
144
- // Guard against unexpected throws in the settle/handler chain so the
145
- // request can never stall without a response.
146
- .catch((err) => next(err));
147
- });
148
- handlers.push(...enabledMiddlewares.map((m) => _invokeAction(m, m.onBefore.bind(m), route)));
149
- const acionWrapper = async (req, res, next) => {
150
- try {
151
- await this._actionLocalStorage.run(req.storage, async () => {
152
- const args = (await _extractRouteArgs(route, req, res)).concat([req, res, next]);
153
- try {
154
- const result = this[route.Method].call(this, ...args);
155
- if (isPromise(result)) {
156
- result
157
- .then((r) => {
158
- if (r instanceof Response) {
159
- enabledMiddlewares.forEach((x) => x.onResponse(r, route, this));
160
- }
161
- res.locals.response = r;
162
- next();
163
- })
164
- .catch((err) => {
165
- next(err);
166
- });
167
- }
168
- else {
169
- if (result instanceof Response) {
170
- enabledMiddlewares.forEach((x) => x.onResponse(result, route, this));
171
- }
172
- res.locals.response = result;
173
- next();
174
- }
175
- }
176
- catch (err) {
177
- next(err);
178
- }
179
- });
180
- }
181
- catch (err) {
182
- next(err);
183
- }
184
- };
185
- Object.defineProperty(acionWrapper, 'name', {
186
- value: this.constructor.name,
187
- writable: true,
188
- });
189
- handlers.push(acionWrapper);
190
- handlers.push(...enabledMiddlewares.map((m) => _invokeAction(m, m.onAfter.bind(m), route)));
191
- // register to express router
192
- if (route.InternalType === 'unknown') {
193
- this._log.warn(`Unknown route type for ${this.constructor.name}::${String(route.Method)} at path ${path}`);
194
- return;
195
- }
196
- handlers.push(__handle_response__());
197
- handlers.push(__handle_error__());
198
- this._router[route.InternalType](path, handlers);
199
- }
200
- function _invokeAction(source, action, route) {
201
- const wrapper = (req, res, next) => {
202
- action(req, res, route, self)
203
- .then(() => {
204
- next();
205
- })
206
- .catch((err) => {
207
- next(err);
208
- });
209
- };
210
- Object.defineProperty(wrapper, 'name', {
211
- value: source.constructor.name,
212
- writable: true,
213
- });
214
- return wrapper;
215
- }
216
- async function _extractRouteArgs(route, req, res) {
217
- const callArgs = new Array(route.Parameters.size);
218
- const argsCache = new Map();
219
- let callData = {
220
- Payload: {},
221
- };
222
- // Sort parameters by priority (higher priority first)
223
- // Get all parameters as array, resolve their handlers to check priority, then sort
224
- const paramsWithPriority = await Promise.all(Array.from(route.Parameters.values()).map(async (param) => {
225
- const handler = await tryGetHash(argsCache, param.Type, () => DI.resolve(param.Type));
226
- return { param, handler, priority: handler?.Priority ?? 0 };
227
- }));
228
- // Sort by priority descending (higher priority first)
229
- const sortedParams = paramsWithPriority.sort((a, b) => (b.priority ?? 0) - (a.priority ?? 0));
230
- for (const { param, handler: routeArgsHandler } of sortedParams) {
231
- if (!routeArgsHandler) {
232
- throw new UnexpectedServerError(`Route parameter not registered for parameter: ${param.Name},
233
- in method: ${String(route.Method)},
234
- in controller: ${self.constructor.name}. Check if you have registered it in DI container.`);
235
- }
236
- const { Args, CallData } = await routeArgsHandler.extract(callData, callArgs, param, req, res, route);
237
- callData = CallData;
238
- callArgs[param.Index] = Args;
239
- }
240
- return callArgs;
241
63
  }
242
- }
243
- }
244
- __decorate([
245
- Autoinject(Container),
246
- __metadata("design:type", Object)
247
- ], BaseController.prototype, "_container", void 0);
248
- __decorate([
249
- Autoinject(),
250
- __metadata("design:type", DataValidator)
251
- ], BaseController.prototype, "_validator", void 0);
252
- __decorate([
253
- Logger('http'),
254
- __metadata("design:type", Log)
255
- ], BaseController.prototype, "_log", void 0);
256
- __decorate([
257
- Autoinject(),
258
- __metadata("design:type", AsyncLocalStorage)
259
- ], BaseController.prototype, "_actionLocalStorage", void 0);
260
- __decorate([
261
- Autoinject(Configuration),
262
- __metadata("design:type", Configuration)
263
- ], BaseController.prototype, "_cfg", void 0);
264
- export class Controllers extends AsyncService {
265
- constructor() {
266
- super(...arguments);
267
- /**
268
- * Tracks which controller types have already been route-registered so
269
- * {@link add} is idempotent.
270
- */
271
- this.RegisteredTypes = new Set();
64
+ return [...byType.values(), ...untyped];
272
65
  }
273
66
  /**
274
67
  * Dynamically register a controller after startup. Equivalent to having
@@ -289,15 +82,25 @@ export class Controllers extends AsyncService {
289
82
  return;
290
83
  }
291
84
  DI.register(type).as(BaseController);
292
- const instance = (await DI.resolve(type));
293
- const ci = new ClassInfo();
294
- ci.name = type.name;
295
- ci.type = type;
296
- ci.instance = instance;
297
- // Source file was captured at decoration time by the route decorators.
298
- // Sentinel only if nothing was captured (no route decorators ran).
299
- ci.file = instance.Descriptor?.SourceFile ?? '<dynamic>';
300
- await this.register(ci);
85
+ try {
86
+ const instance = (await DI.resolve(type));
87
+ const ci = new ClassInfo();
88
+ ci.name = type.name;
89
+ ci.type = type;
90
+ ci.instance = instance;
91
+ // Source file was captured at decoration time by the route decorators.
92
+ // Sentinel only if nothing was captured (no route decorators ran).
93
+ ci.file = instance.Descriptor?.SourceFile ?? '<dynamic>';
94
+ await this.register(ci);
95
+ }
96
+ catch (err) {
97
+ // Roll back so the broken type is not silently mounted by a later
98
+ // Array.ofType(BaseController) resolve, and so a fixed retry can
99
+ // register cleanly.
100
+ DI.unregister(type);
101
+ DI.uncache(BaseController);
102
+ throw err;
103
+ }
301
104
  }
302
105
  async register(controller) {
303
106
  this.Log.trace(`Loading controller: ${controller.name}`);
@@ -305,32 +108,35 @@ export class Controllers extends AsyncService {
305
108
  this.Log.trace(`Controller ${controller.name} already registered, skipping`);
306
109
  return;
307
110
  }
308
- const parameters = await this.ControllersCache.getCache(controller);
309
111
  if (!controller.instance) {
310
- this.Log.warn(`Controller ${controller.name} in file ${controller.file} is not resolved. Make sure it is decorated with @injectable and has a public constructor without required parameters`);
311
- return;
112
+ throw new ControllerRegistrationException(`Controller ${controller.name} in file ${controller.file} is not resolved. Make sure it is decorated with @injectable and has a public constructor without required parameters`);
312
113
  }
114
+ const parameters = await this.ControllersCache.getCache(controller);
313
115
  if (!controller.instance.Descriptor) {
314
116
  this.Log.warn(`Controller ${controller.name} in file ${controller.file} dont have descriptor or routes defined`);
315
117
  }
316
118
  else {
317
119
  for (const [name, route] of controller.instance.Descriptor.Routes) {
318
- if (parameters[name]) {
319
- const member = parameters[name];
320
- for (const [index, rParam] of route.Parameters) {
321
- const pName = member[index];
322
- if (pName) {
323
- rParam.Name = pName;
324
- }
120
+ let member = parameters[name];
121
+ if (!member) {
122
+ const action = controller.instance[name];
123
+ if (typeof action !== 'function') {
124
+ throw new RouteRegistrationException(`Controller ${controller.name} does not have member ${String(name)} for route ${route.Path}`);
325
125
  }
126
+ // Route inherited from a base class declared in another source file
127
+ // — the parsed source of THIS class has no such member. Extract
128
+ // parameter names from the runtime function instead.
129
+ member = parseFnParamNames(action);
326
130
  }
327
- else {
328
- this.Log.error(`Controller ${controller.name} does not have member ${name} for route ${route.Path}`);
131
+ for (const [index, rParam] of route.Parameters) {
132
+ const pName = member[index];
133
+ if (pName) {
134
+ rParam.Name = pName;
135
+ }
329
136
  }
330
137
  }
331
138
  if (!controller.instance.Router) {
332
- this.Log.warn(`Controller ${controller.name} in file ${controller.file} has no router instance. Check if it extends BaseController and super.resolve() is called in resolve method`);
333
- return;
139
+ throw new ControllerRegistrationException(`Controller ${controller.name} in file ${controller.file} has no router instance. Check if it extends BaseController and super.resolve() is called in resolve method`);
334
140
  }
335
141
  this.ControllersRouter.use(controller.instance.Router);
336
142
  if (controller.type) {
@@ -344,29 +150,23 @@ export class Controllers extends AsyncService {
344
150
  // one mounts onto Express exactly once. Dynamic adds land here too,
345
151
  // which is how `add()` avoids the old Express-stack juggling.
346
152
  this.ControllersRouter = Express.Router();
347
- // Two registration paths converge here:
348
- // 1. Directory-scanned controllers (existing behavior). @ListFromFiles
349
- // hands us the class types; we register each as `BaseController` so
350
- // they show up in the DI collection.
351
- // 2. Bootstrapper-registered controllers. A package's Bootstrapper can
352
- // conditionally call `DI.register(MyController).as(BaseController)`
353
- // before this service resolves. Those classes are already in the
354
- // collection by the time we get here.
355
- // Resolving `Array.ofType(BaseController)` then instantiates everything
356
- // in a single pass — file-scanned + bootstrap-registered, with class
357
- // identity dedupe (multiple `as(BaseController)` calls for the same type
358
- // resolve to one singleton).
153
+ // Discovery is delegated to ControllerSource services (filesystem scan,
154
+ // DI registry, custom app sources). All lists are merged and deduped in
155
+ // listControllers(); each discovered type is registered as
156
+ // `BaseController` below, then resolving `Array.ofType(BaseController)`
157
+ // instantiates everything in a single pass with class-identity dedupe
158
+ // (multiple `as(BaseController)` calls for the same type resolve to one
159
+ // singleton).
359
160
  const listed = await this.Controllers;
360
161
  // Remember the original file path per type so the second loop can preserve
361
162
  // it. Without this every controller would end up tagged `<di>`, breaking
362
163
  // ControllersCache.getCache() which expects a real on-disk source file.
363
164
  const fileByType = new Map();
364
- for (const ci of uniqueBy(listed, c => c.name)) {
165
+ for (const ci of uniqueBy(listed, (c) => c.name)) {
365
166
  if (!ci.type) {
366
167
  this.Log.warn(`Controller ${ci.name} in file ${ci.file} has no type. Make sure it is decorated with @injectable and has a public constructor without required parameters`);
367
168
  continue;
368
169
  }
369
- ;
370
170
  fileByType.set(ci.type, ci);
371
171
  DI.register(ci.type).as(BaseController);
372
172
  this.Log.trace(`Controller ${ci.name} from ${ci.file} registered as BaseController`);
@@ -399,16 +199,17 @@ export class Controllers extends AsyncService {
399
199
  for (const instance of instances) {
400
200
  const type = instance.constructor;
401
201
  const originalCi = fileByType.get(type);
402
- const ci = originalCi ?? Object.assign(new ClassInfo(), {
403
- name: type.name,
404
- type,
405
- instance,
406
- // For DI-registered controllers without a file scan entry, fall back
407
- // to the source file captured at decoration time by `Controller()`.
408
- // Only sentinel '<di>' if nothing was captured (abstract base, or no
409
- // route decorators ran).
410
- file: instance.Descriptor?.SourceFile ?? '<di>',
411
- });
202
+ const ci = originalCi ??
203
+ Object.assign(new ClassInfo(), {
204
+ name: type.name,
205
+ type,
206
+ instance,
207
+ // For DI-registered controllers without a file scan entry, fall back
208
+ // to the source file captured at decoration time by `Controller()`.
209
+ // Only sentinel '<di>' if nothing was captured (abstract base, or no
210
+ // route decorators ran).
211
+ file: instance.Descriptor?.SourceFile ?? '<di>',
212
+ });
412
213
  // The file-scanned entry has no instance (List, not Resolve) — patch it.
413
214
  if (!ci.instance)
414
215
  ci.instance = instance;
@@ -423,10 +224,6 @@ export class Controllers extends AsyncService {
423
224
  this.Server.use(this.ControllersRouter);
424
225
  }
425
226
  }
426
- __decorate([
427
- ListFromFiles('/**/!(*.d).{ts,js}', 'system.dirs.controllers'),
428
- __metadata("design:type", Promise)
429
- ], Controllers.prototype, "Controllers", void 0);
430
227
  __decorate([
431
228
  Logger('http'),
432
229
  __metadata("design:type", Log)
@@ -1 +1 @@
1
- {"version":3,"file":"controllers.js","sourceRoot":"","sources":["../../src/controllers.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"controllers.js","sourceRoot":"","sources":["../../src/controllers.ts"],"names":[],"mappings":"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"}
@@ -1,4 +1,16 @@
1
1
  import { Exception } from '@spinajs/exceptions';
2
2
  export declare class EntityTooLargeException extends Exception {
3
3
  }
4
+ /**
5
+ * Controller-level registration failure (unresolved instance, missing router).
6
+ * Thrown during startup — fail fast, do not start with broken controllers.
7
+ */
8
+ export declare class ControllerRegistrationException extends Exception {
9
+ }
10
+ /**
11
+ * Route-level registration failure (unknown route type, unresolvable policy,
12
+ * missing route member). Thrown during startup — fail fast.
13
+ */
14
+ export declare class RouteRegistrationException extends Exception {
15
+ }
4
16
  //# sourceMappingURL=exceptions.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"exceptions.d.ts","sourceRoot":"","sources":["../../src/exceptions.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AAEhD,qBAAa,uBAAwB,SAAQ,SAAS;CAAG"}
1
+ {"version":3,"file":"exceptions.d.ts","sourceRoot":"","sources":["../../src/exceptions.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AAEhD,qBAAa,uBAAwB,SAAQ,SAAS;CAAG;AAEzD;;;GAGG;AACH,qBAAa,+BAAgC,SAAQ,SAAS;CAAG;AAEjE;;;GAGG;AACH,qBAAa,0BAA2B,SAAQ,SAAS;CAAG"}
@@ -1,4 +1,16 @@
1
1
  import { Exception } from '@spinajs/exceptions';
2
2
  export class EntityTooLargeException extends Exception {
3
3
  }
4
+ /**
5
+ * Controller-level registration failure (unresolved instance, missing router).
6
+ * Thrown during startup — fail fast, do not start with broken controllers.
7
+ */
8
+ export class ControllerRegistrationException extends Exception {
9
+ }
10
+ /**
11
+ * Route-level registration failure (unknown route type, unresolvable policy,
12
+ * missing route member). Thrown during startup — fail fast.
13
+ */
14
+ export class RouteRegistrationException extends Exception {
15
+ }
4
16
  //# sourceMappingURL=exceptions.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"exceptions.js","sourceRoot":"","sources":["../../src/exceptions.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AAEhD,MAAM,OAAO,uBAAwB,SAAQ,SAAS;CAAG"}
1
+ {"version":3,"file":"exceptions.js","sourceRoot":"","sources":["../../src/exceptions.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AAEhD,MAAM,OAAO,uBAAwB,SAAQ,SAAS;CAAG;AAEzD;;;GAGG;AACH,MAAM,OAAO,+BAAgC,SAAQ,SAAS;CAAG;AAEjE;;;GAGG;AACH,MAAM,OAAO,0BAA2B,SAAQ,SAAS;CAAG"}
@@ -3,6 +3,10 @@ export * from './response-methods/index.js';
3
3
  export * from './decorators.js';
4
4
  export * from './responses.js';
5
5
  export * from './route-args/index.js';
6
+ export * from './exceptions.js';
7
+ export * from './base-controller.js';
8
+ export * from './controller-sources.js';
9
+ export * from './route-builder.js';
6
10
  export * from './controllers.js';
7
11
  export * from './server.js';
8
12
  export * from './transformers/index.js';
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,iBAAiB,CAAC;AAChC,cAAc,6BAA6B,CAAC;AAC5C,cAAc,iBAAiB,CAAC;AAChC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,uBAAuB,CAAC;AACtC,cAAc,kBAAkB,CAAC;AACjC,cAAc,aAAa,CAAC;AAC5B,cAAc,yBAAyB,CAAC;AACxC,cAAc,6BAA6B,CAAC;AAC5C,cAAc,gBAAgB,CAAC;AAC/B,cAAc,YAAY,CAAC;AAC3B,cAAc,2BAA2B,CAAC;AAC1C,cAAc,+BAA+B,CAAC;AAC9C,cAAc,4BAA4B,CAAC;AAC3C,cAAc,8BAA8B,CAAC;AAC7C,cAAc,uBAAuB,CAAC;AACtC,cAAc,qCAAqC,CAAC;AACpD,cAAc,+BAA+B,CAAC;AAC9C,cAAc,6BAA6B,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,iBAAiB,CAAC;AAChC,cAAc,6BAA6B,CAAC;AAC5C,cAAc,iBAAiB,CAAC;AAChC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,uBAAuB,CAAC;AACtC,cAAc,iBAAiB,CAAC;AAChC,cAAc,sBAAsB,CAAC;AACrC,cAAc,yBAAyB,CAAC;AACxC,cAAc,oBAAoB,CAAC;AACnC,cAAc,kBAAkB,CAAC;AACjC,cAAc,aAAa,CAAC;AAC5B,cAAc,yBAAyB,CAAC;AACxC,cAAc,6BAA6B,CAAC;AAC5C,cAAc,gBAAgB,CAAC;AAC/B,cAAc,YAAY,CAAC;AAC3B,cAAc,2BAA2B,CAAC;AAC1C,cAAc,+BAA+B,CAAC;AAC9C,cAAc,4BAA4B,CAAC;AAC3C,cAAc,8BAA8B,CAAC;AAC7C,cAAc,uBAAuB,CAAC;AACtC,cAAc,qCAAqC,CAAC;AACpD,cAAc,+BAA+B,CAAC;AAC9C,cAAc,6BAA6B,CAAC"}
package/lib/mjs/index.js CHANGED
@@ -3,6 +3,10 @@ export * from './response-methods/index.js';
3
3
  export * from './decorators.js';
4
4
  export * from './responses.js';
5
5
  export * from './route-args/index.js';
6
+ export * from './exceptions.js';
7
+ export * from './base-controller.js';
8
+ export * from './controller-sources.js';
9
+ export * from './route-builder.js';
6
10
  export * from './controllers.js';
7
11
  export * from './server.js';
8
12
  export * from './transformers/index.js';
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,iBAAiB,CAAC;AAChC,cAAc,6BAA6B,CAAC;AAC5C,cAAc,iBAAiB,CAAC;AAChC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,uBAAuB,CAAC;AACtC,cAAc,kBAAkB,CAAC;AACjC,cAAc,aAAa,CAAC;AAC5B,cAAc,yBAAyB,CAAC;AACxC,cAAc,6BAA6B,CAAC;AAC5C,cAAc,gBAAgB,CAAC;AAC/B,cAAc,YAAY,CAAC;AAC3B,cAAc,2BAA2B,CAAC;AAC1C,cAAc,+BAA+B,CAAC;AAC9C,cAAc,4BAA4B,CAAC;AAC3C,cAAc,8BAA8B,CAAC;AAC7C,cAAc,uBAAuB,CAAC;AACtC,cAAc,qCAAqC,CAAC;AACpD,cAAc,+BAA+B,CAAC;AAC9C,cAAc,6BAA6B,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,iBAAiB,CAAC;AAChC,cAAc,6BAA6B,CAAC;AAC5C,cAAc,iBAAiB,CAAC;AAChC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,uBAAuB,CAAC;AACtC,cAAc,iBAAiB,CAAC;AAChC,cAAc,sBAAsB,CAAC;AACrC,cAAc,yBAAyB,CAAC;AACxC,cAAc,oBAAoB,CAAC;AACnC,cAAc,kBAAkB,CAAC;AACjC,cAAc,aAAa,CAAC;AAC5B,cAAc,yBAAyB,CAAC;AACxC,cAAc,6BAA6B,CAAC;AAC5C,cAAc,gBAAgB,CAAC;AAC/B,cAAc,YAAY,CAAC;AAC3B,cAAc,2BAA2B,CAAC;AAC1C,cAAc,+BAA+B,CAAC;AAC9C,cAAc,4BAA4B,CAAC;AAC3C,cAAc,8BAA8B,CAAC;AAC7C,cAAc,uBAAuB,CAAC;AACtC,cAAc,qCAAqC,CAAC;AACpD,cAAc,+BAA+B,CAAC;AAC9C,cAAc,6BAA6B,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"RequestId.d.ts","sourceRoot":"","sources":["../../../src/middlewares/RequestId.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACjD,OAAO,EAAE,gBAAgB,EAAE,OAAO,IAAI,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAMzE,qBACa,SAAU,SAAQ,gBAAgB;;IAMtC,KAAK,IAAI,IAAI;IAQb,MAAM,IAAI,CAAC,GAAG,EAAE,QAAQ,EAAE,GAAG,EAAE,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,EAAE,IAAI,EAAE,YAAY,KAAK,IAAI;CAqBtG"}
1
+ {"version":3,"file":"RequestId.d.ts","sourceRoot":"","sources":["../../../src/middlewares/RequestId.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACjD,OAAO,EAAE,gBAAgB,EAAE,OAAO,IAAI,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAMzE,qBACa,SAAU,SAAQ,gBAAgB;;IAMtC,KAAK,IAAI,IAAI;IAQb,MAAM,IAAI,CAAC,GAAG,EAAE,QAAQ,EAAE,GAAG,EAAE,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,EAAE,IAAI,EAAE,YAAY,KAAK,IAAI;CA0BtG"}
@@ -26,6 +26,10 @@ let RequestId = class RequestId extends ServerMiddleware {
26
26
  before() {
27
27
  return (req, res, next) => {
28
28
  req.storage.requestId = uuidv4();
29
+ // Emitted here, not in after(): ServerMiddleware after() handlers never
30
+ // run for matched controller routes ( response is flushed inside the
31
+ // controllers router without calling next() ).
32
+ res.header('x-request-id', req.storage.requestId);
29
33
  // Continue an inbound W3C traceparent ( or start a new trace ) and seed
30
34
  // traceId / spanId onto req.storage so the ambient log context merges them
31
35
  // into every log line — trace ids are shared across services.
@@ -1 +1 @@
1
- {"version":3,"file":"RequestId.js","sourceRoot":"","sources":["../../../src/middlewares/RequestId.ts"],"names":[],"mappings":";;;;;;;;;AACA,OAAO,EAAE,gBAAgB,EAAuB,MAAM,kBAAkB,CAAC;AAEzE,OAAO,EAAE,EAAE,IAAI,MAAM,EAAE,MAAM,MAAM,CAAC;AACpC,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,eAAe,EAAE,iBAAiB,EAAiB,MAAM,cAAc,CAAC;AAG1E,IAAM,SAAS,GAAf,MAAM,SAAU,SAAQ,gBAAgB;IAC7C;QACE,KAAK,EAAE,CAAC;QACR,IAAI,CAAC,KAAK,GAAG,CAAC,CAAC;IACjB,CAAC;IAEM,KAAK;QACV,uEAAuE;QACvE,0EAA0E;QAC1E,uEAAuE;QACvE,yEAAyE;QACzE,OAAO,IAAI,CAAC;IACd,CAAC;IAEM,MAAM;QACX,OAAO,CAAC,GAAa,EAAE,GAAqB,EAAE,IAA0B,EAAE,EAAE;YAC1E,GAAG,CAAC,OAAO,CAAC,SAAS,GAAG,MAAM,EAAE,CAAC;YAEjC,wEAAwE;YACxE,2EAA2E;YAC3E,8DAA8D;YAC9D,MAAM,EAAE,GAAkB,eAAe,CAAC,GAAG,CAAC,OAAO,CAAC,aAAa,CAAuB,CAAC,CAAC;YAC5F,GAAG,CAAC,OAAO,CAAC,OAAO,GAAG,EAAE,CAAC,OAAO,CAAC;YACjC,GAAG,CAAC,OAAO,CAAC,MAAM,GAAG,EAAE,CAAC,MAAM,CAAC;YAE/B,oEAAoE;YACpE,0EAA0E;YAC1E,yEAAyE;YACzE,2EAA2E;YAC3E,sDAAsD;YACtD,GAAG,CAAC,MAAM,CAAC,aAAa,EAAE,iBAAiB,CAAC,EAAE,CAAC,CAAC,CAAC;YAEjD,IAAI,EAAE,CAAC;QACT,CAAC,CAAC;IACJ,CAAC;CACF,CAAA;AAnCY,SAAS;IADrB,UAAU,CAAC,gBAAgB,CAAC;;GAChB,SAAS,CAmCrB"}
1
+ {"version":3,"file":"RequestId.js","sourceRoot":"","sources":["../../../src/middlewares/RequestId.ts"],"names":[],"mappings":";;;;;;;;;AACA,OAAO,EAAE,gBAAgB,EAAuB,MAAM,kBAAkB,CAAC;AAEzE,OAAO,EAAE,EAAE,IAAI,MAAM,EAAE,MAAM,MAAM,CAAC;AACpC,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,eAAe,EAAE,iBAAiB,EAAiB,MAAM,cAAc,CAAC;AAG1E,IAAM,SAAS,GAAf,MAAM,SAAU,SAAQ,gBAAgB;IAC7C;QACE,KAAK,EAAE,CAAC;QACR,IAAI,CAAC,KAAK,GAAG,CAAC,CAAC;IACjB,CAAC;IAEM,KAAK;QACV,uEAAuE;QACvE,0EAA0E;QAC1E,uEAAuE;QACvE,yEAAyE;QACzE,OAAO,IAAI,CAAC;IACd,CAAC;IAEM,MAAM;QACX,OAAO,CAAC,GAAa,EAAE,GAAqB,EAAE,IAA0B,EAAE,EAAE;YAC1E,GAAG,CAAC,OAAO,CAAC,SAAS,GAAG,MAAM,EAAE,CAAC;YAEjC,wEAAwE;YACxE,qEAAqE;YACrE,+CAA+C;YAC/C,GAAG,CAAC,MAAM,CAAC,cAAc,EAAE,GAAG,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;YAElD,wEAAwE;YACxE,2EAA2E;YAC3E,8DAA8D;YAC9D,MAAM,EAAE,GAAkB,eAAe,CAAC,GAAG,CAAC,OAAO,CAAC,aAAa,CAAuB,CAAC,CAAC;YAC5F,GAAG,CAAC,OAAO,CAAC,OAAO,GAAG,EAAE,CAAC,OAAO,CAAC;YACjC,GAAG,CAAC,OAAO,CAAC,MAAM,GAAG,EAAE,CAAC,MAAM,CAAC;YAE/B,oEAAoE;YACpE,0EAA0E;YAC1E,yEAAyE;YACzE,2EAA2E;YAC3E,sDAAsD;YACtD,GAAG,CAAC,MAAM,CAAC,aAAa,EAAE,iBAAiB,CAAC,EAAE,CAAC,CAAC,CAAC;YAEjD,IAAI,EAAE,CAAC;QACT,CAAC,CAAC;IACJ,CAAC;CACF,CAAA;AAxCY,SAAS;IADrB,UAAU,CAAC,gBAAgB,CAAC;;GAChB,SAAS,CAwCrB"}