@noxfly/noxus 3.0.0-dev.0 → 3.0.0-dev.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.
Files changed (37) hide show
  1. package/README.md +12 -9
  2. package/dist/child.d.mts +112 -4
  3. package/dist/child.d.ts +112 -4
  4. package/dist/child.js +30 -30
  5. package/dist/child.mjs +30 -30
  6. package/dist/main.d.mts +450 -6
  7. package/dist/main.d.ts +450 -6
  8. package/dist/main.js +229 -229
  9. package/dist/main.mjs +231 -231
  10. package/dist/preload.d.mts +28 -0
  11. package/dist/preload.d.ts +28 -0
  12. package/dist/preload.js +95 -0
  13. package/dist/preload.mjs +70 -0
  14. package/dist/renderer.d.mts +159 -22
  15. package/dist/renderer.d.ts +159 -22
  16. package/dist/renderer.js +11 -58
  17. package/dist/renderer.mjs +7 -53
  18. package/package.json +18 -13
  19. package/src/DI/injector-explorer.ts +2 -2
  20. package/src/decorators/guards.decorator.ts +1 -1
  21. package/src/decorators/middleware.decorator.ts +1 -1
  22. package/src/index.ts +2 -5
  23. package/src/{app.ts → internal/app.ts} +8 -8
  24. package/src/{bootstrap.ts → internal/bootstrap.ts} +4 -4
  25. package/src/{request.ts → internal/request.ts} +2 -2
  26. package/src/{router.ts → internal/router.ts} +9 -9
  27. package/src/{routes.ts → internal/routes.ts} +2 -2
  28. package/src/{socket.ts → internal/socket.ts} +2 -2
  29. package/src/main.ts +7 -7
  30. package/src/non-electron-process.ts +1 -1
  31. package/src/preload.ts +10 -0
  32. package/src/renderer.ts +13 -0
  33. package/tsup.config.ts +27 -11
  34. /package/src/{exceptions.ts → internal/exceptions.ts} +0 -0
  35. /package/src/{preload-bridge.ts → internal/preload-bridge.ts} +0 -0
  36. /package/src/{renderer-client.ts → internal/renderer-client.ts} +0 -0
  37. /package/src/{renderer-events.ts → internal/renderer-events.ts} +0 -0
package/dist/main.d.mts CHANGED
@@ -1,15 +1,233 @@
1
- import { T as Type, a as TokenKey } from './app-injector-Bz3Upc0y.mjs';
2
- export { A as AppInjector, F as ForwardRefFn, b as ForwardReference, I as IBinding, L as Lifetime, M as MaybeAsync, R as RootInjector, c as Token, f as forwardRef, i as inject, t as token } from './app-injector-Bz3Upc0y.mjs';
3
- import { f as Request, a as IResponse, G as Guard, M as Middleware } from './request-qJ9EiDZc.mjs';
4
- export { A as AtomicHttpMethod, D as Delete, h as Get, H as HttpMethod, c as IBatchRequestItem, e as IBatchRequestPayload, d as IBatchResponsePayload, I as IRendererEventMessage, b as IRequest, j as IRouteMetadata, k as IRouteOptions, N as NextFunction, P as Patch, l as Post, m as Put, R as RENDERER_EVENT_TYPE, g as createRendererEventMessage, n as getRouteMetadata, o as isAtomicHttpMethod, i as isRendererEventMessage } from './request-qJ9EiDZc.mjs';
5
1
  import { BrowserWindow } from 'electron/main';
6
- export { BadGatewayException, BadRequestException, ConflictException, ForbiddenException, GatewayTimeoutException, HttpVersionNotSupportedException, Injectable, InjectableOptions, InsufficientStorageException, InternalServerException, LogLevel, Logger, LoopDetectedException, MethodNotAllowedException, NetworkAuthenticationRequiredException, NetworkConnectTimeoutException, NotAcceptableException, NotExtendedException, NotFoundException, NotImplementedException, PaymentRequiredException, RequestTimeoutException, ResponseException, ServiceUnavailableException, TooManyRequestsException, UnauthorizedException, UpgradeRequiredException, VariantAlsoNegotiatesException } from './child.mjs';
7
2
 
8
3
  /**
9
4
  * @copyright 2025 NoxFly
10
5
  * @license MIT
11
6
  * @author NoxFly
12
7
  */
8
+ interface Type<T> extends Function {
9
+ new (...args: any[]): T;
10
+ }
11
+ /**
12
+ * Represents a generic type that can be either a value or a promise resolving to that value.
13
+ */
14
+ type MaybeAsync<T> = T | Promise<T>;
15
+
16
+
17
+ /**
18
+ * A function that returns a type.
19
+ * Used for forward references to types that are not yet defined.
20
+ */
21
+ interface ForwardRefFn<T = any> {
22
+ (): Type<T>;
23
+ }
24
+ /**
25
+ * A wrapper class for forward referenced types.
26
+ */
27
+ declare class ForwardReference<T = any> {
28
+ readonly forwardRefFn: ForwardRefFn<T>;
29
+ constructor(forwardRefFn: ForwardRefFn<T>);
30
+ }
31
+ /**
32
+ * Creates a forward reference to a type.
33
+ * @param fn A function that returns the type.
34
+ * @returns A ForwardReference instance.
35
+ */
36
+ declare function forwardRef<T = any>(fn: ForwardRefFn<T>): ForwardReference<T>;
37
+
38
+
39
+ /**
40
+ * A DI token uniquely identifies a dependency.
41
+ * It can wrap a class (Type<T>) or be a named symbol token.
42
+ *
43
+ * Using tokens instead of reflect-metadata means dependencies are
44
+ * declared explicitly — no magic type inference, no emitDecoratorMetadata.
45
+ *
46
+ * @example
47
+ * // Class token (most common)
48
+ * const MY_SERVICE = token(MyService);
49
+ *
50
+ * // Named symbol token (for interfaces or non-class values)
51
+ * const DB_URL = token<string>('DB_URL');
52
+ */
53
+ declare class Token<T> {
54
+ readonly target: Type<T> | string;
55
+ readonly description: string;
56
+ constructor(target: Type<T> | string);
57
+ toString(): string;
58
+ }
59
+ /**
60
+ * Creates a DI token for a class type or a named value.
61
+ *
62
+ * @example
63
+ * export const MY_SERVICE = token(MyService);
64
+ * export const DB_URL = token<string>('DB_URL');
65
+ */
66
+ declare function token<T>(target: Type<T> | string): Token<T>;
67
+ /**
68
+ * The key used to look up a class token in the registry.
69
+ * For class tokens, the key is the class constructor itself.
70
+ * For named tokens, the key is the Token instance.
71
+ */
72
+ type TokenKey<T = unknown> = Type<T> | Token<T>;
73
+
74
+
75
+ /**
76
+ * Lifetime of a binding in the DI container.
77
+ * - singleton: created once, shared for the lifetime of the app.
78
+ * - scope: created once per request scope.
79
+ * - transient: new instance every time it is resolved.
80
+ */
81
+ type Lifetime = 'singleton' | 'scope' | 'transient';
82
+ /**
83
+ * Internal representation of a registered binding.
84
+ */
85
+ interface IBinding<T = unknown> {
86
+ lifetime: Lifetime;
87
+ implementation: Type<T>;
88
+ /** Explicit constructor dependencies, declared by the class itself. */
89
+ deps: ReadonlyArray<TokenKey>;
90
+ instance?: T;
91
+ }
92
+ /**
93
+ * AppInjector is the core DI container.
94
+ * It no longer uses reflect-metadata — all dependency information
95
+ * comes from explicitly declared `deps` arrays on each binding.
96
+ */
97
+ declare class AppInjector {
98
+ readonly name: string | null;
99
+ readonly bindings: Map<Type<unknown> | Token<unknown>, IBinding<unknown>>;
100
+ readonly singletons: Map<Type<unknown> | Token<unknown>, unknown>;
101
+ readonly scoped: Map<Type<unknown> | Token<unknown>, unknown>;
102
+ constructor(name?: string | null);
103
+ /**
104
+ * Creates a child scope for per-request lifetime resolution.
105
+ */
106
+ createScope(): AppInjector;
107
+ /**
108
+ * Registers a binding explicitly.
109
+ */
110
+ register<T>(key: TokenKey<T>, implementation: Type<T>, lifetime: Lifetime, deps?: ReadonlyArray<TokenKey>): void;
111
+ /**
112
+ * Resolves a dependency by token or class reference.
113
+ */
114
+ resolve<T>(target: TokenKey<T> | ForwardReference<T>): T;
115
+ private _resolveForwardRef;
116
+ private _instantiate;
117
+ }
118
+ /**
119
+ * The global root injector. All singletons live here.
120
+ */
121
+ declare const RootInjector: AppInjector;
122
+ /**
123
+ * Convenience function: resolve a token from the root injector.
124
+ */
125
+ declare function inject<T>(t: TokenKey<T> | ForwardReference<T>): T;
126
+
127
+
128
+ /**
129
+ * A middleware intercepts requests before they reach guards and the handler.
130
+ * Implement this interface and pass the class to @Controller({ middlewares }) or per-route options.
131
+ */
132
+ type Middleware = (request: Request, response: IResponse, next: NextFunction) => MaybeAsync<void>;
133
+ type NextFunction = () => Promise<void>;
134
+
135
+
136
+ type HttpMethod = 'GET' | 'POST' | 'PUT' | 'PATCH' | 'DELETE' | 'BATCH';
137
+ type AtomicHttpMethod = Exclude<HttpMethod, 'BATCH'>;
138
+ declare function isAtomicHttpMethod(m: unknown): m is AtomicHttpMethod;
139
+ interface IRouteOptions {
140
+ /**
141
+ * Guards specific to this route (merged with controller guards).
142
+ */
143
+ guards?: Guard[];
144
+ /**
145
+ * Middlewares specific to this route (merged with controller middlewares).
146
+ */
147
+ middlewares?: Middleware[];
148
+ }
149
+ interface IRouteMetadata {
150
+ method: HttpMethod;
151
+ path: string;
152
+ handler: string;
153
+ guards: Guard[];
154
+ middlewares: Middleware[];
155
+ }
156
+ declare function getRouteMetadata(target: object): IRouteMetadata[];
157
+ declare const Get: (path: string, options?: IRouteOptions) => MethodDecorator;
158
+ declare const Post: (path: string, options?: IRouteOptions) => MethodDecorator;
159
+ declare const Put: (path: string, options?: IRouteOptions) => MethodDecorator;
160
+ declare const Patch: (path: string, options?: IRouteOptions) => MethodDecorator;
161
+ declare const Delete: (path: string, options?: IRouteOptions) => MethodDecorator;
162
+
163
+
164
+ /**
165
+ * The Request class represents an HTTP request in the Noxus framework.
166
+ * It encapsulates the request data, including the event, ID, method, path, and body.
167
+ * It also provides a context for dependency injection through the AppInjector.
168
+ */
169
+ declare class Request {
170
+ readonly event: Electron.MessageEvent;
171
+ readonly senderId: number;
172
+ readonly id: string;
173
+ readonly method: HttpMethod;
174
+ readonly path: string;
175
+ readonly body: any;
176
+ readonly context: AppInjector;
177
+ readonly params: Record<string, string>;
178
+ constructor(event: Electron.MessageEvent, senderId: number, id: string, method: HttpMethod, path: string, body: any);
179
+ }
180
+ /**
181
+ * The IRequest interface defines the structure of a request object.
182
+ * It includes properties for the sender ID, request ID, path, method, and an optional body.
183
+ * This interface is used to standardize the request data across the application.
184
+ */
185
+ interface IRequest<TBody = unknown> {
186
+ senderId: number;
187
+ requestId: string;
188
+ path: string;
189
+ method: HttpMethod;
190
+ body?: TBody;
191
+ }
192
+ interface IBatchRequestItem<TBody = unknown> {
193
+ requestId?: string;
194
+ path: string;
195
+ method: AtomicHttpMethod;
196
+ body?: TBody;
197
+ }
198
+ interface IBatchRequestPayload {
199
+ requests: IBatchRequestItem[];
200
+ }
201
+ /**
202
+ * Creates a Request object from the IPC event data.
203
+ * This function extracts the necessary information from the IPC event and constructs a Request instance.
204
+ */
205
+ interface IResponse<TBody = unknown> {
206
+ requestId: string;
207
+ status: number;
208
+ body?: TBody;
209
+ error?: string;
210
+ stack?: string;
211
+ }
212
+ interface IBatchResponsePayload {
213
+ responses: IResponse[];
214
+ }
215
+ declare const RENDERER_EVENT_TYPE = "noxus:event";
216
+ interface IRendererEventMessage<TPayload = unknown> {
217
+ type: typeof RENDERER_EVENT_TYPE;
218
+ event: string;
219
+ payload?: TPayload;
220
+ }
221
+ declare function createRendererEventMessage<TPayload = unknown>(event: string, payload?: TPayload): IRendererEventMessage<TPayload>;
222
+ declare function isRendererEventMessage(value: unknown): value is IRendererEventMessage;
223
+
224
+
225
+ /**
226
+ * A guard decides whether an incoming request should reach the handler.
227
+ * Implement this interface and pass the class to @Controller({ guards }) or @Get('path', { guards }).
228
+ */
229
+ type Guard = (request: Request) => MaybeAsync<boolean>;
230
+
13
231
 
14
232
  interface ILazyRoute {
15
233
  load: () => Promise<unknown>;
@@ -350,6 +568,81 @@ interface BootstrapConfig {
350
568
  */
351
569
  declare function bootstrapApplication(config?: BootstrapConfig): Promise<NoxApp>;
352
570
 
571
+ declare class ResponseException extends Error {
572
+ readonly status: number;
573
+ constructor(message?: string);
574
+ constructor(statusCode?: number, message?: string);
575
+ }
576
+ declare class BadRequestException extends ResponseException {
577
+ readonly status = 400;
578
+ }
579
+ declare class UnauthorizedException extends ResponseException {
580
+ readonly status = 401;
581
+ }
582
+ declare class PaymentRequiredException extends ResponseException {
583
+ readonly status = 402;
584
+ }
585
+ declare class ForbiddenException extends ResponseException {
586
+ readonly status = 403;
587
+ }
588
+ declare class NotFoundException extends ResponseException {
589
+ readonly status = 404;
590
+ }
591
+ declare class MethodNotAllowedException extends ResponseException {
592
+ readonly status = 405;
593
+ }
594
+ declare class NotAcceptableException extends ResponseException {
595
+ readonly status = 406;
596
+ }
597
+ declare class RequestTimeoutException extends ResponseException {
598
+ readonly status = 408;
599
+ }
600
+ declare class ConflictException extends ResponseException {
601
+ readonly status = 409;
602
+ }
603
+ declare class UpgradeRequiredException extends ResponseException {
604
+ readonly status = 426;
605
+ }
606
+ declare class TooManyRequestsException extends ResponseException {
607
+ readonly status = 429;
608
+ }
609
+ declare class InternalServerException extends ResponseException {
610
+ readonly status = 500;
611
+ }
612
+ declare class NotImplementedException extends ResponseException {
613
+ readonly status = 501;
614
+ }
615
+ declare class BadGatewayException extends ResponseException {
616
+ readonly status = 502;
617
+ }
618
+ declare class ServiceUnavailableException extends ResponseException {
619
+ readonly status = 503;
620
+ }
621
+ declare class GatewayTimeoutException extends ResponseException {
622
+ readonly status = 504;
623
+ }
624
+ declare class HttpVersionNotSupportedException extends ResponseException {
625
+ readonly status = 505;
626
+ }
627
+ declare class VariantAlsoNegotiatesException extends ResponseException {
628
+ readonly status = 506;
629
+ }
630
+ declare class InsufficientStorageException extends ResponseException {
631
+ readonly status = 507;
632
+ }
633
+ declare class LoopDetectedException extends ResponseException {
634
+ readonly status = 508;
635
+ }
636
+ declare class NotExtendedException extends ResponseException {
637
+ readonly status = 510;
638
+ }
639
+ declare class NetworkAuthenticationRequiredException extends ResponseException {
640
+ readonly status = 511;
641
+ }
642
+ declare class NetworkConnectTimeoutException extends ResponseException {
643
+ readonly status = 599;
644
+ }
645
+
353
646
 
354
647
  interface ControllerOptions {
355
648
  /**
@@ -377,6 +670,157 @@ interface IControllerMetadata {
377
670
  declare function Controller(options?: ControllerOptions): ClassDecorator;
378
671
  declare function getControllerMetadata(target: object): IControllerMetadata | undefined;
379
672
 
673
+
674
+ interface InjectableOptions {
675
+ /**
676
+ * Lifetime of this injectable.
677
+ * @default 'scope'
678
+ */
679
+ lifetime?: Lifetime;
680
+ /**
681
+ * Explicit list of constructor dependencies, in the same order as the constructor parameters.
682
+ * Each entry is either a class constructor or a Token created with token().
683
+ *
684
+ * This replaces reflect-metadata / emitDecoratorMetadata entirely.
685
+ *
686
+ * @example
687
+ * @Injectable({ lifetime: 'singleton', deps: [MyRepo, DB_URL] })
688
+ * class MyService {
689
+ * constructor(private repo: MyRepo, private dbUrl: string) {}
690
+ * }
691
+ */
692
+ deps?: ReadonlyArray<TokenKey>;
693
+ }
694
+ /**
695
+ * Marks a class as injectable into the Noxus DI container.
696
+ *
697
+ * Unlike the v2 @Injectable, this decorator:
698
+ * - Does NOT require reflect-metadata or emitDecoratorMetadata.
699
+ * - Requires you to declare deps explicitly when the class has constructor parameters.
700
+ * - Supports standalone usage — no module declaration needed.
701
+ *
702
+ * @example
703
+ * // No dependencies
704
+ * @Injectable()
705
+ * class Logger {}
706
+ *
707
+ * // With dependencies
708
+ * @Injectable({ lifetime: 'singleton', deps: [Logger, MyRepo] })
709
+ * class MyService {
710
+ * constructor(private logger: Logger, private repo: MyRepo) {}
711
+ * }
712
+ *
713
+ * // With a named token
714
+ * const DB_URL = token<string>('DB_URL');
715
+ *
716
+ * @Injectable({ deps: [DB_URL] })
717
+ * class DbService {
718
+ * constructor(private url: string) {}
719
+ * }
720
+ */
721
+ declare function Injectable(options?: InjectableOptions): ClassDecorator;
722
+
723
+ /**
724
+ * Logger is a utility class for logging messages to the console.
725
+ */
726
+ type LogLevel = 'debug' | 'comment' | 'log' | 'info' | 'warn' | 'error' | 'critical';
727
+ declare namespace Logger {
728
+ /**
729
+ * Sets the log level for the logger.
730
+ * This function allows you to change the log level dynamically at runtime.
731
+ * This won't affect the startup logs.
732
+ *
733
+ * If the parameter is a single LogLevel, all log levels with equal or higher severity will be enabled.
734
+
735
+ * If the parameter is an array of LogLevels, only the specified levels will be enabled.
736
+ *
737
+ * @param level Sets the log level for the logger.
738
+ */
739
+ function setLogLevel(level: LogLevel | LogLevel[]): void;
740
+ /**
741
+ * Logs a message to the console with log level LOG.
742
+ * This function formats the message with a timestamp, process ID, and the name of the caller function or class.
743
+ * It uses different colors for different log levels to enhance readability.
744
+ * @param args The arguments to log.
745
+ */
746
+ function log(...args: any[]): void;
747
+ /**
748
+ * Logs a message to the console with log level INFO.
749
+ * This function formats the message with a timestamp, process ID, and the name of the caller function or class.
750
+ * It uses different colors for different log levels to enhance readability.
751
+ * @param args The arguments to log.
752
+ */
753
+ function info(...args: any[]): void;
754
+ /**
755
+ * Logs a message to the console with log level WARN.
756
+ * This function formats the message with a timestamp, process ID, and the name of the caller function or class.
757
+ * It uses different colors for different log levels to enhance readability.
758
+ * @param args The arguments to log.
759
+ */
760
+ function warn(...args: any[]): void;
761
+ /**
762
+ * Logs a message to the console with log level ERROR.
763
+ * This function formats the message with a timestamp, process ID, and the name of the caller function or class.
764
+ * It uses different colors for different log levels to enhance readability.
765
+ * @param args The arguments to log.
766
+ */
767
+ function error(...args: any[]): void;
768
+ /**
769
+ * Logs a message to the console with log level ERROR and a grey color scheme.
770
+ */
771
+ function errorStack(...args: any[]): void;
772
+ /**
773
+ * Logs a message to the console with log level DEBUG.
774
+ * This function formats the message with a timestamp, process ID, and the name of the caller function or class.
775
+ * It uses different colors for different log levels to enhance readability.
776
+ * @param args The arguments to log.
777
+ */
778
+ function debug(...args: any[]): void;
779
+ /**
780
+ * Logs a message to the console with log level COMMENT.
781
+ * This function formats the message with a timestamp, process ID, and the name of the caller function or class.
782
+ * It uses different colors for different log levels to enhance readability.
783
+ * @param args The arguments to log.
784
+ */
785
+ function comment(...args: any[]): void;
786
+ /**
787
+ * Logs a message to the console with log level CRITICAL.
788
+ * This function formats the message with a timestamp, process ID, and the name of the caller function or class.
789
+ * It uses different colors for different log levels to enhance readability.
790
+ * @param args The arguments to log.
791
+ */
792
+ function critical(...args: any[]): void;
793
+ /**
794
+ * Enables logging to a file output for the specified log levels.
795
+ * @param filepath The path to the log file.
796
+ * @param levels The log levels to enable file logging for. Defaults to all levels.
797
+ */
798
+ function enableFileLogging(filepath: string, levels?: LogLevel[]): void;
799
+ /**
800
+ * Disables logging to a file output for the specified log levels.
801
+ * @param levels The log levels to disable file logging for. Defaults to all levels.
802
+ */
803
+ function disableFileLogging(levels?: LogLevel[]): void;
804
+ const colors: {
805
+ black: string;
806
+ grey: string;
807
+ red: string;
808
+ green: string;
809
+ brown: string;
810
+ blue: string;
811
+ purple: string;
812
+ darkGrey: string;
813
+ lightRed: string;
814
+ lightGreen: string;
815
+ yellow: string;
816
+ lightBlue: string;
817
+ magenta: string;
818
+ cyan: string;
819
+ white: string;
820
+ initial: string;
821
+ };
822
+ }
823
+
380
824
  interface RendererChannels {
381
825
  request: Electron.MessageChannelMain;
382
826
  socket: Electron.MessageChannelMain;
@@ -391,4 +835,4 @@ declare class NoxSocket {
391
835
  emitToRenderer<TPayload = unknown>(senderId: number, eventName: string, payload?: TPayload): boolean;
392
836
  }
393
837
 
394
- export { type BootstrapConfig, Controller, type ControllerAction, type ControllerOptions, Guard, type IApp, type IControllerMetadata, type ILazyRoute, IResponse, type IRouteDefinition, Middleware, NoxApp, NoxSocket, Request, type RouteDefinition, Router, type SingletonOverride, TokenKey, Type, type WindowConfig, WindowManager, type WindowRecord, bootstrapApplication, defineRoutes, getControllerMetadata };
838
+ export { AppInjector, type AtomicHttpMethod, BadGatewayException, BadRequestException, type BootstrapConfig, ConflictException, Controller, type ControllerAction, type ControllerOptions, Delete, ForbiddenException, type ForwardRefFn, ForwardReference, GatewayTimeoutException, Get, type Guard, type HttpMethod, HttpVersionNotSupportedException, type IApp, type IBatchRequestItem, type IBatchRequestPayload, type IBatchResponsePayload, type IBinding, type IControllerMetadata, type ILazyRoute, type IRendererEventMessage, type IRequest, type IResponse, type IRouteDefinition, type IRouteMetadata, type IRouteOptions, Injectable, type InjectableOptions, InsufficientStorageException, InternalServerException, type Lifetime, type LogLevel, Logger, LoopDetectedException, type MaybeAsync, MethodNotAllowedException, type Middleware, NetworkAuthenticationRequiredException, NetworkConnectTimeoutException, type NextFunction, NotAcceptableException, NotExtendedException, NotFoundException, NotImplementedException, NoxApp, NoxSocket, Patch, PaymentRequiredException, Post, Put, RENDERER_EVENT_TYPE, Request, RequestTimeoutException, ResponseException, RootInjector, type RouteDefinition, Router, ServiceUnavailableException, type SingletonOverride, Token, type TokenKey, TooManyRequestsException, type Type, UnauthorizedException, UpgradeRequiredException, VariantAlsoNegotiatesException, type WindowConfig, WindowManager, type WindowRecord, bootstrapApplication, createRendererEventMessage, defineRoutes, forwardRef, getControllerMetadata, getRouteMetadata, inject, isAtomicHttpMethod, isRendererEventMessage, token };