@avijs/core 0.6.0 → 1.0.0-rc.1

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/dist/app.d.ts CHANGED
@@ -1,18 +1,24 @@
1
1
  import { type Provider, type Token, type TokenType } from '@avijs/di';
2
- import { type HttpMethod, type ServerOptions } from '@avijs/http';
2
+ import { type HttpMethod, type RequestHook, type ServerOptions } from '@avijs/http';
3
3
  import { type RouteSchema } from '@avijs/validation';
4
4
  import type { AddressInfo } from 'node:net';
5
5
  import { type AppDescription } from './describe.js';
6
+ import { type HookDefinition } from './hooks.js';
6
7
  import { type ModuleOptions, type ModuleRef } from './module.js';
7
8
  import { type GuardRef, type MiddlewareRef, type RouteDocs } from './pipeline.js';
8
- export interface AviOptions extends ServerOptions {
9
+ export interface AviOptions extends Omit<ServerOptions, 'onRequest'> {
10
+ /**
11
+ * Run in order before routing, for every request. A hook that needs providers, such as the
12
+ * config, comes from `defineHook`.
13
+ */
14
+ onRequest?: readonly (RequestHook | HookDefinition)[];
9
15
  /** Runs first, for every route. */
10
16
  middleware?: readonly MiddlewareRef[];
11
17
  /** Checked first, for every route. */
12
18
  guards?: readonly GuardRef[];
13
19
  /**
14
- * A manifest from `describeApp()` or `avi-compile manifest`. `init()` fails if the app no longer
15
- * matches it, so a stale build artifact cannot ship unnoticed.
20
+ * Experimental. A manifest from `describeApp()` or `avi-compile manifest`. `init()` fails if the
21
+ * app no longer matches it, so a stale build artifact cannot ship unnoticed.
16
22
  */
17
23
  manifest?: AppDescription;
18
24
  /**
package/dist/app.d.ts.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"app.d.ts","sourceRoot":"","sources":["../src/app.ts"],"names":[],"mappings":"AAAA,OAAO,EAAa,KAAK,QAAQ,EAAE,KAAK,KAAK,EAAE,KAAK,SAAS,EAAE,MAAM,WAAW,CAAC;AACjF,OAAO,EAML,KAAK,UAAU,EAIf,KAAK,aAAa,EACnB,MAAM,aAAa,CAAC;AACrB,OAAO,EAAkB,KAAK,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAGrE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;AAK5C,OAAO,EAAoC,KAAK,cAAc,EAAE,MAAM,eAAe,CAAC;AACtF,OAAO,EAIL,KAAK,aAAa,EAClB,KAAK,SAAS,EACf,MAAM,aAAa,CAAC;AACrB,OAAO,EAIL,KAAK,QAAQ,EAEb,KAAK,aAAa,EAClB,KAAK,SAAS,EACf,MAAM,eAAe,CAAC;AAavB,MAAM,WAAW,UAAW,SAAQ,aAAa;IAC/C,mCAAmC;IACnC,UAAU,CAAC,EAAE,SAAS,aAAa,EAAE,CAAC;IACtC,sCAAsC;IACtC,MAAM,CAAC,EAAE,SAAS,QAAQ,EAAE,CAAC;IAC7B;;;OAGG;IACH,QAAQ,CAAC,EAAE,cAAc,CAAC;IAC1B;;;OAGG;IACH,SAAS,CAAC,EAAE,SAAS,QAAQ,EAAE,CAAC;IAChC;;;;;OAKG;IACH,cAAc,CAAC,EAAE,OAAO,GAAG,QAAQ,CAAC;CACrC;AAED,MAAM,WAAW,MAAM;IACrB,wGAAwG;IACxG,QAAQ,CAAC,MAAM,EAAE,SAAS,GAAG,aAAa,GAAG,IAAI,CAAC;IAClD,+FAA+F;IAC/F,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IACtB,8DAA8D;IAC9D,MAAM,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC,CAAC;IAC1D,4FAA4F;IAC5F,GAAG,CAAC,CAAC,SAAS,KAAK,EAAE,KAAK,EAAE,CAAC,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC;IAC7C,wFAAwF;IACxF,MAAM,IAAI,SAAS,SAAS,EAAE,CAAC;IAC/B,0FAA0F;IAC1F,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CACxB;AAED,MAAM,WAAW,SAAS;IACxB,QAAQ,CAAC,MAAM,EAAE,UAAU,CAAC;IAC5B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,MAAM,EAAE,WAAW,GAAG,SAAS,CAAC;IACzC,QAAQ,CAAC,OAAO,EAAE,SAAS,GAAG,SAAS,CAAC;CACzC;AASD,wBAAgB,SAAS,CAAC,OAAO,GAAE,UAAe,GAAG,MAAM,CAE1D;AAED,eAAO,MAAM,UAAU;IACrB,qFAAqF;mBAChE,SAAS,GAAG,aAAa,YAAY,UAAU,GAAG,OAAO,CAAC,MAAM,CAAC;CAKvF,CAAC"}
1
+ {"version":3,"file":"app.d.ts","sourceRoot":"","sources":["../src/app.ts"],"names":[],"mappings":"AAAA,OAAO,EAAa,KAAK,QAAQ,EAAE,KAAK,KAAK,EAAE,KAAK,SAAS,EAAE,MAAM,WAAW,CAAC;AACjF,OAAO,EAML,KAAK,UAAU,EAGf,KAAK,WAAW,EAEhB,KAAK,aAAa,EACnB,MAAM,aAAa,CAAC;AACrB,OAAO,EAAkB,KAAK,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAGrE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;AAK5C,OAAO,EAAoC,KAAK,cAAc,EAAE,MAAM,eAAe,CAAC;AACtF,OAAO,EAAoB,KAAK,cAAc,EAAE,MAAM,YAAY,CAAC;AACnE,OAAO,EAIL,KAAK,aAAa,EAClB,KAAK,SAAS,EACf,MAAM,aAAa,CAAC;AACrB,OAAO,EAIL,KAAK,QAAQ,EAEb,KAAK,aAAa,EAClB,KAAK,SAAS,EACf,MAAM,eAAe,CAAC;AAavB,MAAM,WAAW,UAAW,SAAQ,IAAI,CAAC,aAAa,EAAE,WAAW,CAAC;IAClE;;;OAGG;IACH,SAAS,CAAC,EAAE,SAAS,CAAC,WAAW,GAAG,cAAc,CAAC,EAAE,CAAC;IACtD,mCAAmC;IACnC,UAAU,CAAC,EAAE,SAAS,aAAa,EAAE,CAAC;IACtC,sCAAsC;IACtC,MAAM,CAAC,EAAE,SAAS,QAAQ,EAAE,CAAC;IAC7B;;;OAGG;IACH,QAAQ,CAAC,EAAE,cAAc,CAAC;IAC1B;;;OAGG;IACH,SAAS,CAAC,EAAE,SAAS,QAAQ,EAAE,CAAC;IAChC;;;;;OAKG;IACH,cAAc,CAAC,EAAE,OAAO,GAAG,QAAQ,CAAC;CACrC;AAED,MAAM,WAAW,MAAM;IACrB,wGAAwG;IACxG,QAAQ,CAAC,MAAM,EAAE,SAAS,GAAG,aAAa,GAAG,IAAI,CAAC;IAClD,+FAA+F;IAC/F,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IACtB,8DAA8D;IAC9D,MAAM,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC,CAAC;IAC1D,4FAA4F;IAC5F,GAAG,CAAC,CAAC,SAAS,KAAK,EAAE,KAAK,EAAE,CAAC,GAAG,SAAS,CAAC,CAAC,CAAC,CAAC;IAC7C,wFAAwF;IACxF,MAAM,IAAI,SAAS,SAAS,EAAE,CAAC;IAC/B,0FAA0F;IAC1F,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CACxB;AAED,MAAM,WAAW,SAAS;IACxB,QAAQ,CAAC,MAAM,EAAE,UAAU,CAAC;IAC5B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,MAAM,EAAE,WAAW,GAAG,SAAS,CAAC;IACzC,QAAQ,CAAC,OAAO,EAAE,SAAS,GAAG,SAAS,CAAC;CACzC;AASD,wBAAgB,SAAS,CAAC,OAAO,GAAE,UAAe,GAAG,MAAM,CAE1D;AAED,eAAO,MAAM,UAAU;IACrB,qFAAqF;mBAChE,SAAS,GAAG,aAAa,YAAY,UAAU,GAAG,OAAO,CAAC,MAAM,CAAC;CAKvF,CAAC"}
package/dist/app.js CHANGED
@@ -8,9 +8,10 @@ import { isConfigToken } from './config.js';
8
8
  import { joinPath } from './controller.js';
9
9
  import { checkConsumers, injectOf } from './consumers.js';
10
10
  import { describeModules, firstDifference } from './describe.js';
11
+ import { isHookDefinition } from './hooks.js';
11
12
  import { defineModule, toModule, } from './module.js';
12
13
  import { checkRefs, isClass, } from './pipeline.js';
13
- import { REQUEST, REQUEST_TOKENS } from './request.js';
14
+ import { APP, REQUEST, REQUEST_TOKENS } from './request.js';
14
15
  import { addressUrl, formatSummary, summaryFields, summaryLine, } from './summary.js';
15
16
  const { version } = createRequire(import.meta.url)('../package.json');
16
17
  /** The error and its causes, one per line. */
@@ -40,6 +41,7 @@ class Application {
40
41
  #guards;
41
42
  #manifest;
42
43
  #overrides;
44
+ #lateHooks = [];
43
45
  #logger;
44
46
  #summary;
45
47
  #createdAt = performance.now();
@@ -49,7 +51,19 @@ class Application {
49
51
  #routes;
50
52
  #init;
51
53
  constructor(options) {
52
- this.#server = new HttpServer(this.#router, options);
54
+ // defineHook hooks are created at init; until then their slot passes every request on.
55
+ const hooks = options.onRequest;
56
+ // Anything but an array goes to the HTTP server as is, which rejects it.
57
+ const onRequest = Array.isArray(hooks)
58
+ ? hooks.map((hook) => {
59
+ if (!isHookDefinition(hook))
60
+ return hook;
61
+ const slot = { definition: hook, hook: undefined };
62
+ this.#lateHooks.push(slot);
63
+ return (ctx) => slot.hook?.(ctx);
64
+ })
65
+ : hooks;
66
+ this.#server = new HttpServer(this.#router, { ...options, onRequest });
53
67
  this.#middleware = checkRefs(options.middleware, 'use', 'App middleware');
54
68
  this.#guards = checkRefs(options.guards, 'canActivate', 'App guards');
55
69
  this.#manifest = options.manifest;
@@ -138,6 +152,7 @@ class Application {
138
152
  const container = new Container(this.#roots, {
139
153
  overrides: this.#overrides,
140
154
  requestTokens: REQUEST_TOKENS,
155
+ values: new Map([[APP, this]]),
141
156
  });
142
157
  const modules = container.modules;
143
158
  const report = this.#report;
@@ -149,6 +164,14 @@ class Application {
149
164
  report.providers = container.describe().reduce((sum, m) => sum + m.providers.length, 0);
150
165
  report.configVariables = countConfig(container, modules);
151
166
  try {
167
+ for (const slot of this.#lateHooks) {
168
+ const deps = slot.definition.inject.map((token) => container.get(token));
169
+ const hook = slot.definition.create(...deps);
170
+ if (typeof hook !== 'function') {
171
+ throw new TypeError('defineHook: create must return a request hook function');
172
+ }
173
+ slot.hook = hook;
174
+ }
152
175
  this.#step = 'Routes';
153
176
  const appScope = new Pipeline((token) => container.get(token));
154
177
  const appMiddleware = appScope.middleware(this.#middleware);
package/dist/app.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"app.js","sourceRoot":"","sources":["../src/app.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"app.js","sourceRoot":"","sources":["../src/app.ts"],"names":[],"mappings":"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"}
@@ -27,8 +27,8 @@ export interface AppDescription {
27
27
  readonly dynamic: readonly string[];
28
28
  }
29
29
  /**
30
- * Describes the module graph and routes of `roots` without creating any provider. Throws the
31
- * same graph errors as `init()`, so it doubles as a build-time check.
30
+ * Experimental. Describes the module graph and routes of `roots` without creating any provider.
31
+ * Throws the same graph errors as `init()`, so it doubles as a build-time check.
32
32
  */
33
33
  export declare function describeApp(...roots: (ModuleRef | ModuleOptions)[]): AppDescription;
34
34
  export declare function describeModules(container: Container): AppDescription;
@@ -1 +1 @@
1
- {"version":3,"file":"describe.d.ts","sourceRoot":"","sources":["../src/describe.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,KAAK,iBAAiB,EAAE,MAAM,WAAW,CAAC;AAE9D,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAC9C,OAAO,EAAY,KAAK,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAC7D,OAAO,EAIL,KAAK,aAAa,EAClB,KAAK,SAAS,EACf,MAAM,aAAa,CAAC;AAGrB,MAAM,WAAW,qBAAqB;IACpC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,MAAM,EAAE,SAAS,WAAW,EAAE,GAAG,SAAS,CAAC;CACrD;AAED,MAAM,WAAW,aAAc,SAAQ,iBAAiB;IACtD,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,WAAW,EAAE,SAAS,qBAAqB,EAAE,CAAC;CACxD;AAED,MAAM,WAAW,YAAY;IAC3B,QAAQ,CAAC,MAAM,EAAE,UAAU,CAAC;IAC5B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;CAC7B;AAED,uFAAuF;AACvF,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,OAAO,EAAE,CAAC,CAAC;IACpB,QAAQ,CAAC,OAAO,EAAE,SAAS,aAAa,EAAE,CAAC;IAC3C,6EAA6E;IAC7E,QAAQ,CAAC,MAAM,EAAE,SAAS,YAAY,EAAE,CAAC;IACzC,2EAA2E;IAC3E,QAAQ,CAAC,OAAO,EAAE,SAAS,MAAM,EAAE,CAAC;CACrC;AAED;;;GAGG;AACH,wBAAgB,WAAW,CAAC,GAAG,KAAK,EAAE,CAAC,SAAS,GAAG,aAAa,CAAC,EAAE,GAAG,cAAc,CAKnF;AAED,wBAAgB,eAAe,CAAC,SAAS,EAAE,SAAS,GAAG,cAAc,CAwCpE;AAYD,uFAAuF;AACvF,wBAAgB,eAAe,CAC7B,QAAQ,EAAE,OAAO,EACjB,MAAM,EAAE,OAAO,EACf,IAAI,SAAM,GACT,MAAM,GAAG,SAAS,CAqBpB"}
1
+ {"version":3,"file":"describe.d.ts","sourceRoot":"","sources":["../src/describe.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,KAAK,iBAAiB,EAAE,MAAM,WAAW,CAAC;AAE9D,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAC9C,OAAO,EAAY,KAAK,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAC7D,OAAO,EAIL,KAAK,aAAa,EAClB,KAAK,SAAS,EACf,MAAM,aAAa,CAAC;AAGrB,MAAM,WAAW,qBAAqB;IACpC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,MAAM,EAAE,SAAS,WAAW,EAAE,GAAG,SAAS,CAAC;CACrD;AAED,MAAM,WAAW,aAAc,SAAQ,iBAAiB;IACtD,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,WAAW,EAAE,SAAS,qBAAqB,EAAE,CAAC;CACxD;AAED,MAAM,WAAW,YAAY;IAC3B,QAAQ,CAAC,MAAM,EAAE,UAAU,CAAC;IAC5B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;CAC7B;AAED,uFAAuF;AACvF,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,OAAO,EAAE,CAAC,CAAC;IACpB,QAAQ,CAAC,OAAO,EAAE,SAAS,aAAa,EAAE,CAAC;IAC3C,6EAA6E;IAC7E,QAAQ,CAAC,MAAM,EAAE,SAAS,YAAY,EAAE,CAAC;IACzC,2EAA2E;IAC3E,QAAQ,CAAC,OAAO,EAAE,SAAS,MAAM,EAAE,CAAC;CACrC;AAED;;;GAGG;AACH,wBAAgB,WAAW,CAAC,GAAG,KAAK,EAAE,CAAC,SAAS,GAAG,aAAa,CAAC,EAAE,GAAG,cAAc,CASnF;AAED,wBAAgB,eAAe,CAAC,SAAS,EAAE,SAAS,GAAG,cAAc,CAwCpE;AAYD,uFAAuF;AACvF,wBAAgB,eAAe,CAC7B,QAAQ,EAAE,OAAO,EACjB,MAAM,EAAE,OAAO,EACf,IAAI,SAAM,GACT,MAAM,GAAG,SAAS,CAqBpB"}
package/dist/describe.js CHANGED
@@ -2,14 +2,18 @@ import { Container } from '@avijs/di';
2
2
  import { checkConsumers } from './consumers.js';
3
3
  import { joinPath } from './controller.js';
4
4
  import { defineModule, toModule, } from './module.js';
5
- import { REQUEST_TOKENS } from './request.js';
5
+ import { APP, REQUEST_TOKENS } from './request.js';
6
6
  /**
7
- * Describes the module graph and routes of `roots` without creating any provider. Throws the
8
- * same graph errors as `init()`, so it doubles as a build-time check.
7
+ * Experimental. Describes the module graph and routes of `roots` without creating any provider.
8
+ * Throws the same graph errors as `init()`, so it doubles as a build-time check.
9
9
  */
10
10
  export function describeApp(...roots) {
11
11
  const modules = roots.map((root) => toModule(root) ?? defineModule(root));
12
- const container = new Container(modules, { requestTokens: REQUEST_TOKENS });
12
+ // No app exists here; APP only needs to resolve.
13
+ const container = new Container(modules, {
14
+ requestTokens: REQUEST_TOKENS,
15
+ values: new Map([[APP, undefined]]),
16
+ });
13
17
  checkConsumers(container);
14
18
  return describeModules(container);
15
19
  }
@@ -1 +1 @@
1
- {"version":3,"file":"describe.js","sourceRoot":"","sources":["../src/describe.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"describe.js","sourceRoot":"","sources":["../src/describe.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,20 @@
1
+ import type { ResolveTokens, Token } from '@avijs/di';
2
+ import type { RequestHook } from '@avijs/http';
3
+ declare const HOOK: unique symbol;
4
+ /** An `onRequest` hook built from injected values when the app starts. See `defineHook`. */
5
+ export interface HookDefinition {
6
+ readonly [HOOK]: true;
7
+ readonly inject: readonly Token[];
8
+ readonly create: (...deps: never[]) => RequestHook;
9
+ }
10
+ /**
11
+ * An `onRequest` hook that needs providers, such as CORS settings from the config. `create` runs
12
+ * once at startup with `inject` resolved from the root modules, typed in order.
13
+ */
14
+ export declare function defineHook<const K extends readonly Token[] = []>(definition: {
15
+ inject?: K;
16
+ create: (...deps: ResolveTokens<K>) => RequestHook;
17
+ }): HookDefinition;
18
+ export declare function isHookDefinition(value: unknown): value is HookDefinition;
19
+ export {};
20
+ //# sourceMappingURL=hooks.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hooks.d.ts","sourceRoot":"","sources":["../src/hooks.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,KAAK,EAAE,MAAM,WAAW,CAAC;AACtD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAE/C,QAAA,MAAM,IAAI,eAAqB,CAAC;AAEhC,4FAA4F;AAC5F,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,CAAC,IAAI,CAAC,EAAE,IAAI,CAAC;IACtB,QAAQ,CAAC,MAAM,EAAE,SAAS,KAAK,EAAE,CAAC;IAClC,QAAQ,CAAC,MAAM,EAAE,CAAC,GAAG,IAAI,EAAE,KAAK,EAAE,KAAK,WAAW,CAAC;CACpD;AAED;;;GAGG;AACH,wBAAgB,UAAU,CAAC,KAAK,CAAC,CAAC,SAAS,SAAS,KAAK,EAAE,GAAG,EAAE,EAAE,UAAU,EAAE;IAC5E,MAAM,CAAC,EAAE,CAAC,CAAC;IACX,MAAM,EAAE,CAAC,GAAG,IAAI,EAAE,aAAa,CAAC,CAAC,CAAC,KAAK,WAAW,CAAC;CACpD,GAAG,cAAc,CASjB;AAED,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,cAAc,CAExE"}
package/dist/hooks.js ADDED
@@ -0,0 +1,19 @@
1
+ const HOOK = Symbol('avi.hook');
2
+ /**
3
+ * An `onRequest` hook that needs providers, such as CORS settings from the config. `create` runs
4
+ * once at startup with `inject` resolved from the root modules, typed in order.
5
+ */
6
+ export function defineHook(definition) {
7
+ if (typeof definition.create !== 'function') {
8
+ throw new TypeError('defineHook needs a create function');
9
+ }
10
+ return Object.freeze({
11
+ [HOOK]: true,
12
+ inject: Object.freeze([...(definition.inject ?? [])]),
13
+ create: definition.create,
14
+ });
15
+ }
16
+ export function isHookDefinition(value) {
17
+ return typeof value === 'object' && value !== null && HOOK in value;
18
+ }
19
+ //# sourceMappingURL=hooks.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hooks.js","sourceRoot":"","sources":["../src/hooks.ts"],"names":[],"mappings":"AAGA,MAAM,IAAI,GAAG,MAAM,CAAC,UAAU,CAAC,CAAC;AAShC;;;GAGG;AACH,MAAM,UAAU,UAAU,CAAwC,UAGjE;IACC,IAAI,OAAO,UAAU,CAAC,MAAM,KAAK,UAAU,EAAE,CAAC;QAC5C,MAAM,IAAI,SAAS,CAAC,oCAAoC,CAAC,CAAC;IAC5D,CAAC;IACD,OAAO,MAAM,CAAC,MAAM,CAAC;QACnB,CAAC,IAAI,CAAC,EAAE,IAAa;QACrB,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,UAAU,CAAC,MAAM,IAAI,EAAE,CAAC,CAAC,CAAC;QACrD,MAAM,EAAE,UAAU,CAAC,MAA6C;KACjE,CAAC,CAAC;AACL,CAAC;AAED,MAAM,UAAU,gBAAgB,CAAC,KAAc;IAC7C,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,IAAI,IAAI,IAAI,KAAK,CAAC;AACtE,CAAC"}
package/dist/index.d.ts CHANGED
@@ -12,12 +12,14 @@ export type { CheckInject } from './decorators.js';
12
12
  export { defineModule } from './module.js';
13
13
  export type { AviModule, ModuleOptions, ModuleRef } from './module.js';
14
14
  export { route } from './pipeline.js';
15
- export { REQUEST } from './request.js';
15
+ export { APP, REQUEST } from './request.js';
16
16
  export type { GuardClass, GuardRef, MiddlewareClass, MiddlewareRef, Route, RouteContext, RouteDocs, RouteOf, TypedRoute, } from './pipeline.js';
17
17
  export type { InferInput, InferOutput, InputOf, PathParams, RouteSchema, StandardSchemaV1, ValidationIssue, } from '@avijs/validation';
18
18
  export { HTTP_METHODS, HttpError, jsonLogger, logRequests, reply, sse } from '@avijs/http';
19
- export type { AviState, Context, ErrorHandler, Guard, Handler, HttpErrorOptions, HttpMethod, JsonLoggerOptions, LogFields, LogRequestsOptions, Logger, Middleware, Next, NoInput, Params, Reply, ReplyInit, RequestHook, RequestIdOptions, ResponseInfo, RouteDefinition, ServerSentEvent, SseOptions, SseSource, } from '@avijs/http';
19
+ export type { AviState, Context, ErrorHandler, Guard, Handler, HttpErrorOptions, HttpMethod, JsonLoggerOptions, LogFields, LogRequestsOptions, Logger, Middleware, Next, NoInput, Params, Reply, ReplyInit, RequestHook, RequestIdOptions, ResponseInfo, RouteDefinition, ServerSentEvent, SseOptions, SseSource, UpgradeHandler, } from '@avijs/http';
20
20
  export { createToken, defineFactory } from '@avijs/di';
21
+ export { defineHook } from './hooks.js';
22
+ export type { HookDefinition } from './hooks.js';
21
23
  export type { Class, ClassProvider, Constructor, FactoryProvider, InjectionToken, Provider, ResolveTokens, Scope, Token, TokenType, TypedFactoryProvider, ValueProvider, } from '@avijs/di';
22
24
  export type { Endpoint, Jsonify, MethodEndpoint, ResponseBody, RouteEndpoint } from './endpoint.js';
23
25
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,iBAAiB,CAAC;AAEzB,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,UAAU,CAAC;AACjD,YAAY,EAAE,MAAM,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,UAAU,CAAC;AAC9D,OAAO,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AACxD,YAAY,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAC9D,OAAO,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AACnD,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAC5C,YAAY,EACV,cAAc,EACd,qBAAqB,EACrB,aAAa,EACb,YAAY,GACb,MAAM,eAAe,CAAC;AACvB,YAAY,EAAE,oBAAoB,EAAE,iBAAiB,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAC5F,OAAO,EACL,UAAU,EACV,MAAM,EACN,GAAG,EACH,IAAI,EACJ,UAAU,EACV,MAAM,EACN,OAAO,EACP,KAAK,EACL,IAAI,EACJ,GAAG,EACH,SAAS,EACT,aAAa,GACd,MAAM,iBAAiB,CAAC;AACzB,YAAY,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AACnD,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAC3C,YAAY,EAAE,SAAS,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AACvE,OAAO,EAAE,KAAK,EAAE,MAAM,eAAe,CAAC;AACtC,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AACvC,YAAY,EACV,UAAU,EACV,QAAQ,EACR,eAAe,EACf,aAAa,EACb,KAAK,EACL,YAAY,EACZ,SAAS,EACT,OAAO,EACP,UAAU,GACX,MAAM,eAAe,CAAC;AACvB,YAAY,EACV,UAAU,EACV,WAAW,EACX,OAAO,EACP,UAAU,EACV,WAAW,EACX,gBAAgB,EAChB,eAAe,GAChB,MAAM,mBAAmB,CAAC;AAE3B,OAAO,EAAE,YAAY,EAAE,SAAS,EAAE,UAAU,EAAE,WAAW,EAAE,KAAK,EAAE,GAAG,EAAE,MAAM,aAAa,CAAC;AAC3F,YAAY,EACV,QAAQ,EACR,OAAO,EACP,YAAY,EACZ,KAAK,EACL,OAAO,EACP,gBAAgB,EAChB,UAAU,EACV,iBAAiB,EACjB,SAAS,EACT,kBAAkB,EAClB,MAAM,EACN,UAAU,EACV,IAAI,EACJ,OAAO,EACP,MAAM,EACN,KAAK,EACL,SAAS,EACT,WAAW,EACX,gBAAgB,EAChB,YAAY,EACZ,eAAe,EACf,eAAe,EACf,UAAU,EACV,SAAS,GACV,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,WAAW,CAAC;AACvD,YAAY,EACV,KAAK,EACL,aAAa,EACb,WAAW,EACX,eAAe,EACf,cAAc,EACd,QAAQ,EACR,aAAa,EACb,KAAK,EACL,KAAK,EACL,SAAS,EACT,oBAAoB,EACpB,aAAa,GACd,MAAM,WAAW,CAAC;AACnB,YAAY,EAAE,QAAQ,EAAE,OAAO,EAAE,cAAc,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,iBAAiB,CAAC;AAEzB,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,UAAU,CAAC;AACjD,YAAY,EAAE,MAAM,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,UAAU,CAAC;AAC9D,OAAO,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AACxD,YAAY,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAC9D,OAAO,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AACnD,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAC5C,YAAY,EACV,cAAc,EACd,qBAAqB,EACrB,aAAa,EACb,YAAY,GACb,MAAM,eAAe,CAAC;AACvB,YAAY,EAAE,oBAAoB,EAAE,iBAAiB,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AAC5F,OAAO,EACL,UAAU,EACV,MAAM,EACN,GAAG,EACH,IAAI,EACJ,UAAU,EACV,MAAM,EACN,OAAO,EACP,KAAK,EACL,IAAI,EACJ,GAAG,EACH,SAAS,EACT,aAAa,GACd,MAAM,iBAAiB,CAAC;AACzB,YAAY,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AACnD,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAC3C,YAAY,EAAE,SAAS,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AACvE,OAAO,EAAE,KAAK,EAAE,MAAM,eAAe,CAAC;AACtC,OAAO,EAAE,GAAG,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAC5C,YAAY,EACV,UAAU,EACV,QAAQ,EACR,eAAe,EACf,aAAa,EACb,KAAK,EACL,YAAY,EACZ,SAAS,EACT,OAAO,EACP,UAAU,GACX,MAAM,eAAe,CAAC;AACvB,YAAY,EACV,UAAU,EACV,WAAW,EACX,OAAO,EACP,UAAU,EACV,WAAW,EACX,gBAAgB,EAChB,eAAe,GAChB,MAAM,mBAAmB,CAAC;AAE3B,OAAO,EAAE,YAAY,EAAE,SAAS,EAAE,UAAU,EAAE,WAAW,EAAE,KAAK,EAAE,GAAG,EAAE,MAAM,aAAa,CAAC;AAC3F,YAAY,EACV,QAAQ,EACR,OAAO,EACP,YAAY,EACZ,KAAK,EACL,OAAO,EACP,gBAAgB,EAChB,UAAU,EACV,iBAAiB,EACjB,SAAS,EACT,kBAAkB,EAClB,MAAM,EACN,UAAU,EACV,IAAI,EACJ,OAAO,EACP,MAAM,EACN,KAAK,EACL,SAAS,EACT,WAAW,EACX,gBAAgB,EAChB,YAAY,EACZ,eAAe,EACf,eAAe,EACf,UAAU,EACV,SAAS,EACT,cAAc,GACf,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,WAAW,CAAC;AACvD,OAAO,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AACxC,YAAY,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AACjD,YAAY,EACV,KAAK,EACL,aAAa,EACb,WAAW,EACX,eAAe,EACf,cAAc,EACd,QAAQ,EACR,aAAa,EACb,KAAK,EACL,KAAK,EACL,SAAS,EACT,oBAAoB,EACpB,aAAa,GACd,MAAM,WAAW,CAAC;AACnB,YAAY,EAAE,QAAQ,EAAE,OAAO,EAAE,cAAc,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,eAAe,CAAC"}
package/dist/index.js CHANGED
@@ -6,7 +6,8 @@ export { describeApp } from './describe.js';
6
6
  export { Controller, Delete, Get, Head, Injectable, Module, Options, Patch, Post, Put, UseGuards, UseMiddleware, } from './decorators.js';
7
7
  export { defineModule } from './module.js';
8
8
  export { route } from './pipeline.js';
9
- export { REQUEST } from './request.js';
9
+ export { APP, REQUEST } from './request.js';
10
10
  export { HTTP_METHODS, HttpError, jsonLogger, logRequests, reply, sse } from '@avijs/http';
11
11
  export { createToken, defineFactory } from '@avijs/di';
12
+ export { defineHook } from './hooks.js';
12
13
  //# 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,OAAO,iBAAiB,CAAC;AAEzB,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,UAAU,CAAC;AAEjD,OAAO,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAExD,OAAO,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AACnD,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAQ5C,OAAO,EACL,UAAU,EACV,MAAM,EACN,GAAG,EACH,IAAI,EACJ,UAAU,EACV,MAAM,EACN,OAAO,EACP,KAAK,EACL,IAAI,EACJ,GAAG,EACH,SAAS,EACT,aAAa,GACd,MAAM,iBAAiB,CAAC;AAEzB,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAE3C,OAAO,EAAE,KAAK,EAAE,MAAM,eAAe,CAAC;AACtC,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAsBvC,OAAO,EAAE,YAAY,EAAE,SAAS,EAAE,UAAU,EAAE,WAAW,EAAE,KAAK,EAAE,GAAG,EAAE,MAAM,aAAa,CAAC;AA2B3F,OAAO,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,WAAW,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,iBAAiB,CAAC;AAEzB,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,UAAU,CAAC;AAEjD,OAAO,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAExD,OAAO,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AACnD,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAQ5C,OAAO,EACL,UAAU,EACV,MAAM,EACN,GAAG,EACH,IAAI,EACJ,UAAU,EACV,MAAM,EACN,OAAO,EACP,KAAK,EACL,IAAI,EACJ,GAAG,EACH,SAAS,EACT,aAAa,GACd,MAAM,iBAAiB,CAAC;AAEzB,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAE3C,OAAO,EAAE,KAAK,EAAE,MAAM,eAAe,CAAC;AACtC,OAAO,EAAE,GAAG,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAsB5C,OAAO,EAAE,YAAY,EAAE,SAAS,EAAE,UAAU,EAAE,WAAW,EAAE,KAAK,EAAE,GAAG,EAAE,MAAM,aAAa,CAAC;AA4B3F,OAAO,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,WAAW,CAAC;AACvD,OAAO,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC"}
package/dist/request.d.ts CHANGED
@@ -1,5 +1,8 @@
1
1
  import type { Context } from '@avijs/http';
2
+ import type { AviApp } from './app.js';
2
3
  /** The current request. Inject it into request-scoped providers. */
3
4
  export declare const REQUEST: import("@avijs/di").InjectionToken<Context<import("@avijs/http").NoInput, Readonly<Record<string, string>>>>;
4
5
  export declare const REQUEST_TOKENS: import("@avijs/di").InjectionToken<Context<import("@avijs/http").NoInput, Readonly<Record<string, string>>>>[];
6
+ /** The app itself, for providers that read its routes, such as an OpenAPI document. */
7
+ export declare const APP: import("@avijs/di").InjectionToken<AviApp>;
5
8
  //# sourceMappingURL=request.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"request.d.ts","sourceRoot":"","sources":["../src/request.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AAE3C,oEAAoE;AACpE,eAAO,MAAM,OAAO,8GAAkC,CAAC;AAEvD,eAAO,MAAM,cAAc,gHAAY,CAAC"}
1
+ {"version":3,"file":"request.d.ts","sourceRoot":"","sources":["../src/request.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,aAAa,CAAC;AAC3C,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAEvC,oEAAoE;AACpE,eAAO,MAAM,OAAO,8GAAkC,CAAC;AAEvD,eAAO,MAAM,cAAc,gHAAY,CAAC;AAExC,uFAAuF;AACvF,eAAO,MAAM,GAAG,4CAA6B,CAAC"}
package/dist/request.js CHANGED
@@ -2,4 +2,6 @@ import { createToken } from '@avijs/di';
2
2
  /** The current request. Inject it into request-scoped providers. */
3
3
  export const REQUEST = createToken('REQUEST');
4
4
  export const REQUEST_TOKENS = [REQUEST];
5
+ /** The app itself, for providers that read its routes, such as an OpenAPI document. */
6
+ export const APP = createToken('APP');
5
7
  //# sourceMappingURL=request.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"request.js","sourceRoot":"","sources":["../src/request.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AAGxC,oEAAoE;AACpE,MAAM,CAAC,MAAM,OAAO,GAAG,WAAW,CAAU,SAAS,CAAC,CAAC;AAEvD,MAAM,CAAC,MAAM,cAAc,GAAG,CAAC,OAAO,CAAC,CAAC"}
1
+ {"version":3,"file":"request.js","sourceRoot":"","sources":["../src/request.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AAIxC,oEAAoE;AACpE,MAAM,CAAC,MAAM,OAAO,GAAG,WAAW,CAAU,SAAS,CAAC,CAAC;AAEvD,MAAM,CAAC,MAAM,cAAc,GAAG,CAAC,OAAO,CAAC,CAAC;AAExC,uFAAuF;AACvF,MAAM,CAAC,MAAM,GAAG,GAAG,WAAW,CAAS,KAAK,CAAC,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@avijs/core",
3
- "version": "0.6.0",
3
+ "version": "1.0.0-rc.1",
4
4
  "description": "Avi.js public API: application factory, modules and controllers.",
5
5
  "keywords": [
6
6
  "avi",
@@ -43,9 +43,9 @@
43
43
  "access": "public"
44
44
  },
45
45
  "dependencies": {
46
- "@avijs/di": "0.6.0",
47
- "@avijs/http": "0.6.0",
48
- "@avijs/validation": "0.6.0"
46
+ "@avijs/di": "1.0.0-rc.1",
47
+ "@avijs/http": "1.0.0-rc.1",
48
+ "@avijs/validation": "1.0.0-rc.1"
49
49
  },
50
50
  "devDependencies": {
51
51
  "valibot": "1.5.0"
package/src/app.ts CHANGED
@@ -8,6 +8,7 @@ import {
8
8
  type HttpMethod,
9
9
  type Logger,
10
10
  type Middleware,
11
+ type RequestHook,
11
12
  type RouteDefinition,
12
13
  type ServerOptions,
13
14
  } from '@avijs/http';
@@ -20,6 +21,7 @@ import { isConfigToken } from './config.js';
20
21
  import { joinPath, type ControllerDefinition } from './controller.js';
21
22
  import { checkConsumers, injectOf } from './consumers.js';
22
23
  import { describeModules, firstDifference, type AppDescription } from './describe.js';
24
+ import { isHookDefinition, type HookDefinition } from './hooks.js';
23
25
  import {
24
26
  defineModule,
25
27
  toModule,
@@ -36,7 +38,7 @@ import {
36
38
  type MiddlewareRef,
37
39
  type RouteDocs,
38
40
  } from './pipeline.js';
39
- import { REQUEST, REQUEST_TOKENS } from './request.js';
41
+ import { APP, REQUEST, REQUEST_TOKENS } from './request.js';
40
42
  import {
41
43
  addressUrl,
42
44
  formatSummary,
@@ -48,14 +50,19 @@ import {
48
50
 
49
51
  const { version } = createRequire(import.meta.url)('../package.json') as { version: string };
50
52
 
51
- export interface AviOptions extends ServerOptions {
53
+ export interface AviOptions extends Omit<ServerOptions, 'onRequest'> {
54
+ /**
55
+ * Run in order before routing, for every request. A hook that needs providers, such as the
56
+ * config, comes from `defineHook`.
57
+ */
58
+ onRequest?: readonly (RequestHook | HookDefinition)[];
52
59
  /** Runs first, for every route. */
53
60
  middleware?: readonly MiddlewareRef[];
54
61
  /** Checked first, for every route. */
55
62
  guards?: readonly GuardRef[];
56
63
  /**
57
- * A manifest from `describeApp()` or `avi-compile manifest`. `init()` fails if the app no longer
58
- * matches it, so a stale build artifact cannot ship unnoticed.
64
+ * Experimental. A manifest from `describeApp()` or `avi-compile manifest`. `init()` fails if the
65
+ * app no longer matches it, so a stale build artifact cannot ship unnoticed.
59
66
  */
60
67
  manifest?: AppDescription;
61
68
  /**
@@ -126,6 +133,7 @@ class Application implements AviApp {
126
133
  readonly #guards: readonly GuardRef[];
127
134
  readonly #manifest: AppDescription | undefined;
128
135
  readonly #overrides: readonly Provider[];
136
+ readonly #lateHooks: { definition: HookDefinition; hook: RequestHook | undefined }[] = [];
129
137
  readonly #logger: Logger;
130
138
  readonly #summary: false | 'basic' | 'routes';
131
139
  readonly #createdAt = performance.now();
@@ -136,7 +144,18 @@ class Application implements AviApp {
136
144
  #init: Promise<void> | undefined;
137
145
 
138
146
  constructor(options: AviOptions) {
139
- this.#server = new HttpServer(this.#router, options);
147
+ // defineHook hooks are created at init; until then their slot passes every request on.
148
+ const hooks = options.onRequest;
149
+ // Anything but an array goes to the HTTP server as is, which rejects it.
150
+ const onRequest = Array.isArray(hooks)
151
+ ? hooks.map((hook: RequestHook | HookDefinition): RequestHook => {
152
+ if (!isHookDefinition(hook)) return hook;
153
+ const slot = { definition: hook, hook: undefined as RequestHook | undefined };
154
+ this.#lateHooks.push(slot);
155
+ return (ctx) => slot.hook?.(ctx);
156
+ })
157
+ : (hooks as readonly RequestHook[] | undefined);
158
+ this.#server = new HttpServer(this.#router, { ...options, onRequest });
140
159
  this.#middleware = checkRefs(options.middleware, 'use', 'App middleware');
141
160
  this.#guards = checkRefs(options.guards, 'canActivate', 'App guards');
142
161
  this.#manifest = options.manifest;
@@ -226,6 +245,7 @@ class Application implements AviApp {
226
245
  const container = new Container(this.#roots, {
227
246
  overrides: this.#overrides,
228
247
  requestTokens: REQUEST_TOKENS,
248
+ values: new Map([[APP, this]]),
229
249
  });
230
250
  const modules = container.modules as AviModule[];
231
251
  const report = this.#report;
@@ -238,6 +258,14 @@ class Application implements AviApp {
238
258
  report.providers = container.describe().reduce((sum, m) => sum + m.providers.length, 0);
239
259
  report.configVariables = countConfig(container, modules);
240
260
  try {
261
+ for (const slot of this.#lateHooks) {
262
+ const deps = slot.definition.inject.map((token) => container.get(token));
263
+ const hook: unknown = slot.definition.create(...(deps as never[]));
264
+ if (typeof hook !== 'function') {
265
+ throw new TypeError('defineHook: create must return a request hook function');
266
+ }
267
+ slot.hook = hook as RequestHook;
268
+ }
241
269
  this.#step = 'Routes';
242
270
  const appScope = new Pipeline((token) => container.get(token));
243
271
  const appMiddleware = appScope.middleware(this.#middleware);
package/src/describe.ts CHANGED
@@ -9,7 +9,7 @@ import {
9
9
  type ModuleOptions,
10
10
  type ModuleRef,
11
11
  } from './module.js';
12
- import { REQUEST_TOKENS } from './request.js';
12
+ import { APP, REQUEST_TOKENS } from './request.js';
13
13
 
14
14
  export interface ControllerDescription {
15
15
  readonly name: string;
@@ -40,12 +40,16 @@ export interface AppDescription {
40
40
  }
41
41
 
42
42
  /**
43
- * Describes the module graph and routes of `roots` without creating any provider. Throws the
44
- * same graph errors as `init()`, so it doubles as a build-time check.
43
+ * Experimental. Describes the module graph and routes of `roots` without creating any provider.
44
+ * Throws the same graph errors as `init()`, so it doubles as a build-time check.
45
45
  */
46
46
  export function describeApp(...roots: (ModuleRef | ModuleOptions)[]): AppDescription {
47
47
  const modules = roots.map((root) => toModule(root) ?? defineModule(root as ModuleOptions));
48
- const container = new Container(modules, { requestTokens: REQUEST_TOKENS });
48
+ // No app exists here; APP only needs to resolve.
49
+ const container = new Container(modules, {
50
+ requestTokens: REQUEST_TOKENS,
51
+ values: new Map([[APP, undefined]]),
52
+ });
49
53
  checkConsumers(container);
50
54
  return describeModules(container);
51
55
  }
package/src/hooks.ts ADDED
@@ -0,0 +1,33 @@
1
+ import type { ResolveTokens, Token } from '@avijs/di';
2
+ import type { RequestHook } from '@avijs/http';
3
+
4
+ const HOOK = Symbol('avi.hook');
5
+
6
+ /** An `onRequest` hook built from injected values when the app starts. See `defineHook`. */
7
+ export interface HookDefinition {
8
+ readonly [HOOK]: true;
9
+ readonly inject: readonly Token[];
10
+ readonly create: (...deps: never[]) => RequestHook;
11
+ }
12
+
13
+ /**
14
+ * An `onRequest` hook that needs providers, such as CORS settings from the config. `create` runs
15
+ * once at startup with `inject` resolved from the root modules, typed in order.
16
+ */
17
+ export function defineHook<const K extends readonly Token[] = []>(definition: {
18
+ inject?: K;
19
+ create: (...deps: ResolveTokens<K>) => RequestHook;
20
+ }): HookDefinition {
21
+ if (typeof definition.create !== 'function') {
22
+ throw new TypeError('defineHook needs a create function');
23
+ }
24
+ return Object.freeze({
25
+ [HOOK]: true as const,
26
+ inject: Object.freeze([...(definition.inject ?? [])]),
27
+ create: definition.create as unknown as HookDefinition['create'],
28
+ });
29
+ }
30
+
31
+ export function isHookDefinition(value: unknown): value is HookDefinition {
32
+ return typeof value === 'object' && value !== null && HOOK in value;
33
+ }
package/src/index.ts CHANGED
@@ -31,7 +31,7 @@ export type { CheckInject } from './decorators.js';
31
31
  export { defineModule } from './module.js';
32
32
  export type { AviModule, ModuleOptions, ModuleRef } from './module.js';
33
33
  export { route } from './pipeline.js';
34
- export { REQUEST } from './request.js';
34
+ export { APP, REQUEST } from './request.js';
35
35
  export type {
36
36
  GuardClass,
37
37
  GuardRef,
@@ -79,8 +79,11 @@ export type {
79
79
  ServerSentEvent,
80
80
  SseOptions,
81
81
  SseSource,
82
+ UpgradeHandler,
82
83
  } from '@avijs/http';
83
84
  export { createToken, defineFactory } from '@avijs/di';
85
+ export { defineHook } from './hooks.js';
86
+ export type { HookDefinition } from './hooks.js';
84
87
  export type {
85
88
  Class,
86
89
  ClassProvider,
package/src/request.ts CHANGED
@@ -1,7 +1,11 @@
1
1
  import { createToken } from '@avijs/di';
2
2
  import type { Context } from '@avijs/http';
3
+ import type { AviApp } from './app.js';
3
4
 
4
5
  /** The current request. Inject it into request-scoped providers. */
5
6
  export const REQUEST = createToken<Context>('REQUEST');
6
7
 
7
8
  export const REQUEST_TOKENS = [REQUEST];
9
+
10
+ /** The app itself, for providers that read its routes, such as an OpenAPI document. */
11
+ export const APP = createToken<AviApp>('APP');