@noxfly/noxus 2.4.0 → 3.0.0-dev.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +403 -341
- package/dist/app-injector-Bz3Upc0y.d.mts +125 -0
- package/dist/app-injector-Bz3Upc0y.d.ts +125 -0
- package/dist/child.d.mts +48 -22
- package/dist/child.d.ts +48 -22
- package/dist/child.js +1114 -1239
- package/dist/child.mjs +1090 -1193
- package/dist/main.d.mts +304 -261
- package/dist/main.d.ts +304 -261
- package/dist/main.js +1473 -1873
- package/dist/main.mjs +1423 -1791
- package/dist/renderer.d.mts +113 -2
- package/dist/renderer.d.ts +113 -2
- package/dist/renderer.js +144 -132
- package/dist/renderer.mjs +143 -132
- package/dist/request-BlTtiHbi.d.ts +112 -0
- package/dist/request-qJ9EiDZc.d.mts +112 -0
- package/package.json +7 -7
- package/src/DI/app-injector.ts +95 -106
- package/src/DI/injector-explorer.ts +100 -81
- package/src/DI/token.ts +53 -0
- package/src/app.ts +141 -131
- package/src/bootstrap.ts +79 -40
- package/src/decorators/controller.decorator.ts +38 -27
- package/src/decorators/guards.decorator.ts +5 -64
- package/src/decorators/injectable.decorator.ts +68 -15
- package/src/decorators/method.decorator.ts +40 -81
- package/src/decorators/middleware.decorator.ts +5 -72
- package/src/index.ts +3 -0
- package/src/main.ts +4 -11
- package/src/non-electron-process.ts +0 -1
- package/src/preload-bridge.ts +1 -1
- package/src/renderer-client.ts +2 -2
- package/src/renderer-events.ts +1 -1
- package/src/request.ts +3 -3
- package/src/router.ts +221 -369
- package/src/routes.ts +78 -0
- package/src/socket.ts +4 -4
- package/src/window/window-manager.ts +255 -0
- package/tsconfig.json +5 -10
- package/tsup.config.ts +2 -2
- package/dist/app-injector-B3MvgV3k.d.mts +0 -95
- package/dist/app-injector-B3MvgV3k.d.ts +0 -95
- package/dist/index-BxWQVi6C.d.ts +0 -253
- package/dist/index-DQBQQfMw.d.mts +0 -253
- package/src/decorators/inject.decorator.ts +0 -24
- package/src/decorators/injectable.metadata.ts +0 -15
- package/src/decorators/module.decorator.ts +0 -75
package/dist/renderer.d.mts
CHANGED
|
@@ -1,2 +1,113 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
1
|
+
import { I as IRendererEventMessage, a as IResponse, b as IRequest, c as IBatchRequestItem, d as IBatchResponsePayload } from './request-qJ9EiDZc.mjs';
|
|
2
|
+
export { A as AtomicHttpMethod, H as HttpMethod, e as IBatchRequestPayload, R as RENDERER_EVENT_TYPE, f as Request, g as createRendererEventMessage, i as isRendererEventMessage } from './request-qJ9EiDZc.mjs';
|
|
3
|
+
import './app-injector-Bz3Upc0y.mjs';
|
|
4
|
+
|
|
5
|
+
/**
|
|
6
|
+
* @copyright 2025 NoxFly
|
|
7
|
+
* @license MIT
|
|
8
|
+
* @author NoxFly
|
|
9
|
+
*/
|
|
10
|
+
/**
|
|
11
|
+
* Lightweight event registry to help renderer processes subscribe to
|
|
12
|
+
* push messages sent by the main process through Noxus.
|
|
13
|
+
*/
|
|
14
|
+
|
|
15
|
+
type RendererEventHandler<TPayload = unknown> = (payload: TPayload) => void;
|
|
16
|
+
interface RendererEventSubscription {
|
|
17
|
+
unsubscribe(): void;
|
|
18
|
+
}
|
|
19
|
+
declare class RendererEventRegistry {
|
|
20
|
+
private readonly listeners;
|
|
21
|
+
/**
|
|
22
|
+
*
|
|
23
|
+
*/
|
|
24
|
+
subscribe<TPayload>(eventName: string, handler: RendererEventHandler<TPayload>): RendererEventSubscription;
|
|
25
|
+
/**
|
|
26
|
+
*
|
|
27
|
+
*/
|
|
28
|
+
unsubscribe<TPayload>(eventName: string, handler: RendererEventHandler<TPayload>): void;
|
|
29
|
+
/**
|
|
30
|
+
*
|
|
31
|
+
*/
|
|
32
|
+
clear(eventName?: string): void;
|
|
33
|
+
/**
|
|
34
|
+
*
|
|
35
|
+
*/
|
|
36
|
+
dispatch<TPayload>(message: IRendererEventMessage<TPayload>): void;
|
|
37
|
+
/**
|
|
38
|
+
*
|
|
39
|
+
*/
|
|
40
|
+
tryDispatchFromMessageEvent(event: MessageEvent): boolean;
|
|
41
|
+
/**
|
|
42
|
+
*
|
|
43
|
+
*/
|
|
44
|
+
hasHandlers(eventName: string): boolean;
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
|
|
48
|
+
interface IPortRequester {
|
|
49
|
+
requestPort(): void;
|
|
50
|
+
}
|
|
51
|
+
interface RendererClientOptions {
|
|
52
|
+
bridge?: IPortRequester | null;
|
|
53
|
+
bridgeName?: string | string[];
|
|
54
|
+
initMessageType?: string;
|
|
55
|
+
windowRef?: Window;
|
|
56
|
+
generateRequestId?: () => string;
|
|
57
|
+
}
|
|
58
|
+
interface PendingRequest<T = unknown> {
|
|
59
|
+
resolve: (value: T) => void;
|
|
60
|
+
reject: (reason: IResponse<T>) => void;
|
|
61
|
+
request: IRequest;
|
|
62
|
+
submittedAt: number;
|
|
63
|
+
}
|
|
64
|
+
declare class NoxRendererClient {
|
|
65
|
+
readonly events: RendererEventRegistry;
|
|
66
|
+
protected readonly pendingRequests: Map<string, PendingRequest<unknown>>;
|
|
67
|
+
protected requestPort: MessagePort | undefined;
|
|
68
|
+
protected socketPort: MessagePort | undefined;
|
|
69
|
+
protected senderId: number | undefined;
|
|
70
|
+
private readonly bridge;
|
|
71
|
+
private readonly initMessageType;
|
|
72
|
+
private readonly windowRef;
|
|
73
|
+
private readonly generateRequestId;
|
|
74
|
+
private isReady;
|
|
75
|
+
private setupPromise;
|
|
76
|
+
private setupResolve;
|
|
77
|
+
private setupReject;
|
|
78
|
+
constructor(options?: RendererClientOptions);
|
|
79
|
+
setup(): Promise<void>;
|
|
80
|
+
dispose(): void;
|
|
81
|
+
request<TResponse, TBody = unknown>(request: Omit<IRequest<TBody>, 'requestId' | 'senderId'>): Promise<TResponse>;
|
|
82
|
+
batch(requests: Omit<IBatchRequestItem<unknown>, 'requestId'>[]): Promise<IBatchResponsePayload>;
|
|
83
|
+
getSenderId(): number | undefined;
|
|
84
|
+
private readonly onWindowMessage;
|
|
85
|
+
private readonly onSocketMessage;
|
|
86
|
+
private readonly onRequestMessage;
|
|
87
|
+
protected onRequestCompleted(pending: PendingRequest, response: IResponse): void;
|
|
88
|
+
private attachRequestPort;
|
|
89
|
+
private attachSocketPort;
|
|
90
|
+
private validateReady;
|
|
91
|
+
private createErrorResponse;
|
|
92
|
+
private resetSetupState;
|
|
93
|
+
isElectronEnvironment(): boolean;
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
|
|
97
|
+
interface NoxusPreloadAPI extends IPortRequester {
|
|
98
|
+
}
|
|
99
|
+
interface NoxusPreloadOptions {
|
|
100
|
+
exposeAs?: string;
|
|
101
|
+
initMessageType?: string;
|
|
102
|
+
requestChannel?: string;
|
|
103
|
+
responseChannel?: string;
|
|
104
|
+
targetWindow?: Window;
|
|
105
|
+
}
|
|
106
|
+
/**
|
|
107
|
+
* Exposes a minimal bridge in the isolated preload context so renderer processes
|
|
108
|
+
* can request the two MessagePorts required by Noxus. The bridge forwards both
|
|
109
|
+
* request/response and socket ports to the renderer via window.postMessage.
|
|
110
|
+
*/
|
|
111
|
+
declare function exposeNoxusBridge(options?: NoxusPreloadOptions): NoxusPreloadAPI;
|
|
112
|
+
|
|
113
|
+
export { IBatchRequestItem, IBatchResponsePayload, type IPortRequester, IRendererEventMessage, IRequest, IResponse, NoxRendererClient, type NoxusPreloadAPI, type NoxusPreloadOptions, type RendererClientOptions, type RendererEventHandler, RendererEventRegistry, type RendererEventSubscription, exposeNoxusBridge };
|
package/dist/renderer.d.ts
CHANGED
|
@@ -1,2 +1,113 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
1
|
+
import { I as IRendererEventMessage, a as IResponse, b as IRequest, c as IBatchRequestItem, d as IBatchResponsePayload } from './request-BlTtiHbi.js';
|
|
2
|
+
export { A as AtomicHttpMethod, H as HttpMethod, e as IBatchRequestPayload, R as RENDERER_EVENT_TYPE, f as Request, g as createRendererEventMessage, i as isRendererEventMessage } from './request-BlTtiHbi.js';
|
|
3
|
+
import './app-injector-Bz3Upc0y.js';
|
|
4
|
+
|
|
5
|
+
/**
|
|
6
|
+
* @copyright 2025 NoxFly
|
|
7
|
+
* @license MIT
|
|
8
|
+
* @author NoxFly
|
|
9
|
+
*/
|
|
10
|
+
/**
|
|
11
|
+
* Lightweight event registry to help renderer processes subscribe to
|
|
12
|
+
* push messages sent by the main process through Noxus.
|
|
13
|
+
*/
|
|
14
|
+
|
|
15
|
+
type RendererEventHandler<TPayload = unknown> = (payload: TPayload) => void;
|
|
16
|
+
interface RendererEventSubscription {
|
|
17
|
+
unsubscribe(): void;
|
|
18
|
+
}
|
|
19
|
+
declare class RendererEventRegistry {
|
|
20
|
+
private readonly listeners;
|
|
21
|
+
/**
|
|
22
|
+
*
|
|
23
|
+
*/
|
|
24
|
+
subscribe<TPayload>(eventName: string, handler: RendererEventHandler<TPayload>): RendererEventSubscription;
|
|
25
|
+
/**
|
|
26
|
+
*
|
|
27
|
+
*/
|
|
28
|
+
unsubscribe<TPayload>(eventName: string, handler: RendererEventHandler<TPayload>): void;
|
|
29
|
+
/**
|
|
30
|
+
*
|
|
31
|
+
*/
|
|
32
|
+
clear(eventName?: string): void;
|
|
33
|
+
/**
|
|
34
|
+
*
|
|
35
|
+
*/
|
|
36
|
+
dispatch<TPayload>(message: IRendererEventMessage<TPayload>): void;
|
|
37
|
+
/**
|
|
38
|
+
*
|
|
39
|
+
*/
|
|
40
|
+
tryDispatchFromMessageEvent(event: MessageEvent): boolean;
|
|
41
|
+
/**
|
|
42
|
+
*
|
|
43
|
+
*/
|
|
44
|
+
hasHandlers(eventName: string): boolean;
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
|
|
48
|
+
interface IPortRequester {
|
|
49
|
+
requestPort(): void;
|
|
50
|
+
}
|
|
51
|
+
interface RendererClientOptions {
|
|
52
|
+
bridge?: IPortRequester | null;
|
|
53
|
+
bridgeName?: string | string[];
|
|
54
|
+
initMessageType?: string;
|
|
55
|
+
windowRef?: Window;
|
|
56
|
+
generateRequestId?: () => string;
|
|
57
|
+
}
|
|
58
|
+
interface PendingRequest<T = unknown> {
|
|
59
|
+
resolve: (value: T) => void;
|
|
60
|
+
reject: (reason: IResponse<T>) => void;
|
|
61
|
+
request: IRequest;
|
|
62
|
+
submittedAt: number;
|
|
63
|
+
}
|
|
64
|
+
declare class NoxRendererClient {
|
|
65
|
+
readonly events: RendererEventRegistry;
|
|
66
|
+
protected readonly pendingRequests: Map<string, PendingRequest<unknown>>;
|
|
67
|
+
protected requestPort: MessagePort | undefined;
|
|
68
|
+
protected socketPort: MessagePort | undefined;
|
|
69
|
+
protected senderId: number | undefined;
|
|
70
|
+
private readonly bridge;
|
|
71
|
+
private readonly initMessageType;
|
|
72
|
+
private readonly windowRef;
|
|
73
|
+
private readonly generateRequestId;
|
|
74
|
+
private isReady;
|
|
75
|
+
private setupPromise;
|
|
76
|
+
private setupResolve;
|
|
77
|
+
private setupReject;
|
|
78
|
+
constructor(options?: RendererClientOptions);
|
|
79
|
+
setup(): Promise<void>;
|
|
80
|
+
dispose(): void;
|
|
81
|
+
request<TResponse, TBody = unknown>(request: Omit<IRequest<TBody>, 'requestId' | 'senderId'>): Promise<TResponse>;
|
|
82
|
+
batch(requests: Omit<IBatchRequestItem<unknown>, 'requestId'>[]): Promise<IBatchResponsePayload>;
|
|
83
|
+
getSenderId(): number | undefined;
|
|
84
|
+
private readonly onWindowMessage;
|
|
85
|
+
private readonly onSocketMessage;
|
|
86
|
+
private readonly onRequestMessage;
|
|
87
|
+
protected onRequestCompleted(pending: PendingRequest, response: IResponse): void;
|
|
88
|
+
private attachRequestPort;
|
|
89
|
+
private attachSocketPort;
|
|
90
|
+
private validateReady;
|
|
91
|
+
private createErrorResponse;
|
|
92
|
+
private resetSetupState;
|
|
93
|
+
isElectronEnvironment(): boolean;
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
|
|
97
|
+
interface NoxusPreloadAPI extends IPortRequester {
|
|
98
|
+
}
|
|
99
|
+
interface NoxusPreloadOptions {
|
|
100
|
+
exposeAs?: string;
|
|
101
|
+
initMessageType?: string;
|
|
102
|
+
requestChannel?: string;
|
|
103
|
+
responseChannel?: string;
|
|
104
|
+
targetWindow?: Window;
|
|
105
|
+
}
|
|
106
|
+
/**
|
|
107
|
+
* Exposes a minimal bridge in the isolated preload context so renderer processes
|
|
108
|
+
* can request the two MessagePorts required by Noxus. The bridge forwards both
|
|
109
|
+
* request/response and socket ports to the renderer via window.postMessage.
|
|
110
|
+
*/
|
|
111
|
+
declare function exposeNoxusBridge(options?: NoxusPreloadOptions): NoxusPreloadAPI;
|
|
112
|
+
|
|
113
|
+
export { IBatchRequestItem, IBatchResponsePayload, type IPortRequester, IRendererEventMessage, IRequest, IResponse, NoxRendererClient, type NoxusPreloadAPI, type NoxusPreloadOptions, type RendererClientOptions, type RendererEventHandler, RendererEventRegistry, type RendererEventSubscription, exposeNoxusBridge };
|
package/dist/renderer.js
CHANGED
|
@@ -8,7 +8,6 @@ var __defProp = Object.defineProperty;
|
|
|
8
8
|
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
9
9
|
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
10
10
|
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
11
|
-
var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
|
|
12
11
|
var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
|
|
13
12
|
var __export = (target, all) => {
|
|
14
13
|
for (var name in all)
|
|
@@ -23,7 +22,6 @@ var __copyProps = (to, from, except, desc) => {
|
|
|
23
22
|
return to;
|
|
24
23
|
};
|
|
25
24
|
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
26
|
-
var __publicField = (obj, key, value) => __defNormalProp(obj, typeof key !== "symbol" ? key + "" : key, value);
|
|
27
25
|
|
|
28
26
|
// src/index.ts
|
|
29
27
|
var src_exports = {};
|
|
@@ -33,72 +31,47 @@ __export(src_exports, {
|
|
|
33
31
|
RendererEventRegistry: () => RendererEventRegistry,
|
|
34
32
|
Request: () => Request,
|
|
35
33
|
createRendererEventMessage: () => createRendererEventMessage,
|
|
34
|
+
exposeNoxusBridge: () => exposeNoxusBridge,
|
|
36
35
|
isRendererEventMessage: () => isRendererEventMessage
|
|
37
36
|
});
|
|
38
37
|
module.exports = __toCommonJS(src_exports);
|
|
39
38
|
|
|
40
|
-
// src/request.ts
|
|
41
|
-
var import_reflect_metadata3 = require("reflect-metadata");
|
|
42
|
-
|
|
43
|
-
// src/DI/app-injector.ts
|
|
44
|
-
var import_reflect_metadata2 = require("reflect-metadata");
|
|
45
|
-
|
|
46
|
-
// src/decorators/inject.decorator.ts
|
|
47
|
-
var import_reflect_metadata = require("reflect-metadata");
|
|
48
|
-
var INJECT_METADATA_KEY = "custom:inject";
|
|
49
|
-
|
|
50
|
-
// src/exceptions.ts
|
|
51
|
-
var _ResponseException = class _ResponseException extends Error {
|
|
52
|
-
constructor(statusOrMessage, message) {
|
|
53
|
-
let statusCode;
|
|
54
|
-
if (typeof statusOrMessage === "number") {
|
|
55
|
-
statusCode = statusOrMessage;
|
|
56
|
-
} else if (typeof statusOrMessage === "string") {
|
|
57
|
-
message = statusOrMessage;
|
|
58
|
-
}
|
|
59
|
-
super(message ?? "");
|
|
60
|
-
__publicField(this, "status", 0);
|
|
61
|
-
if (statusCode !== void 0) {
|
|
62
|
-
this.status = statusCode;
|
|
63
|
-
}
|
|
64
|
-
this.name = this.constructor.name.replace(/([A-Z])/g, " $1");
|
|
65
|
-
}
|
|
66
|
-
};
|
|
67
|
-
__name(_ResponseException, "ResponseException");
|
|
68
|
-
var ResponseException = _ResponseException;
|
|
69
|
-
var _InternalServerException = class _InternalServerException extends ResponseException {
|
|
70
|
-
constructor() {
|
|
71
|
-
super(...arguments);
|
|
72
|
-
__publicField(this, "status", 500);
|
|
73
|
-
}
|
|
74
|
-
};
|
|
75
|
-
__name(_InternalServerException, "InternalServerException");
|
|
76
|
-
var InternalServerException = _InternalServerException;
|
|
77
|
-
|
|
78
39
|
// src/utils/forward-ref.ts
|
|
79
40
|
var _ForwardReference = class _ForwardReference {
|
|
80
41
|
constructor(forwardRefFn) {
|
|
81
|
-
__publicField(this, "forwardRefFn");
|
|
82
42
|
this.forwardRefFn = forwardRefFn;
|
|
83
43
|
}
|
|
84
44
|
};
|
|
85
45
|
__name(_ForwardReference, "ForwardReference");
|
|
86
46
|
var ForwardReference = _ForwardReference;
|
|
87
47
|
|
|
48
|
+
// src/DI/token.ts
|
|
49
|
+
var _Token = class _Token {
|
|
50
|
+
constructor(target) {
|
|
51
|
+
this.target = target;
|
|
52
|
+
this.description = typeof target === "string" ? target : target.name;
|
|
53
|
+
}
|
|
54
|
+
toString() {
|
|
55
|
+
return `Token(${this.description})`;
|
|
56
|
+
}
|
|
57
|
+
};
|
|
58
|
+
__name(_Token, "Token");
|
|
59
|
+
var Token = _Token;
|
|
60
|
+
|
|
88
61
|
// src/DI/app-injector.ts
|
|
62
|
+
function keyOf(k) {
|
|
63
|
+
return k;
|
|
64
|
+
}
|
|
65
|
+
__name(keyOf, "keyOf");
|
|
89
66
|
var _AppInjector = class _AppInjector {
|
|
90
67
|
constructor(name = null) {
|
|
91
|
-
__publicField(this, "name");
|
|
92
|
-
__publicField(this, "bindings", /* @__PURE__ */ new Map());
|
|
93
|
-
__publicField(this, "singletons", /* @__PURE__ */ new Map());
|
|
94
|
-
__publicField(this, "scoped", /* @__PURE__ */ new Map());
|
|
95
68
|
this.name = name;
|
|
69
|
+
this.bindings = /* @__PURE__ */ new Map();
|
|
70
|
+
this.singletons = /* @__PURE__ */ new Map();
|
|
71
|
+
this.scoped = /* @__PURE__ */ new Map();
|
|
96
72
|
}
|
|
97
73
|
/**
|
|
98
|
-
*
|
|
99
|
-
* at the "scope" level (i.e., per-request lifetime).
|
|
100
|
-
*
|
|
101
|
-
* SHOULD NOT BE USED by anything else than the framework itself.
|
|
74
|
+
* Creates a child scope for per-request lifetime resolution.
|
|
102
75
|
*/
|
|
103
76
|
createScope() {
|
|
104
77
|
const scope = new _AppInjector();
|
|
@@ -107,70 +80,73 @@ var _AppInjector = class _AppInjector {
|
|
|
107
80
|
return scope;
|
|
108
81
|
}
|
|
109
82
|
/**
|
|
110
|
-
*
|
|
111
|
-
|
|
83
|
+
* Registers a binding explicitly.
|
|
84
|
+
*/
|
|
85
|
+
register(key, implementation, lifetime, deps = []) {
|
|
86
|
+
const k = keyOf(key);
|
|
87
|
+
if (!this.bindings.has(k)) {
|
|
88
|
+
this.bindings.set(k, { lifetime, implementation, deps });
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
/**
|
|
92
|
+
* Resolves a dependency by token or class reference.
|
|
112
93
|
*/
|
|
113
94
|
resolve(target) {
|
|
114
95
|
if (target instanceof ForwardReference) {
|
|
115
|
-
return
|
|
116
|
-
get: /* @__PURE__ */ __name((obj, prop, receiver) => {
|
|
117
|
-
const realType = target.forwardRefFn();
|
|
118
|
-
const instance = this.resolve(realType);
|
|
119
|
-
const value = Reflect.get(instance, prop, receiver);
|
|
120
|
-
return typeof value === "function" ? value.bind(instance) : value;
|
|
121
|
-
}, "get"),
|
|
122
|
-
set: /* @__PURE__ */ __name((obj, prop, value, receiver) => {
|
|
123
|
-
const realType = target.forwardRefFn();
|
|
124
|
-
const instance = this.resolve(realType);
|
|
125
|
-
return Reflect.set(instance, prop, value, receiver);
|
|
126
|
-
}, "set"),
|
|
127
|
-
getPrototypeOf: /* @__PURE__ */ __name(() => {
|
|
128
|
-
const realType = target.forwardRefFn();
|
|
129
|
-
return realType.prototype;
|
|
130
|
-
}, "getPrototypeOf")
|
|
131
|
-
});
|
|
96
|
+
return this._resolveForwardRef(target);
|
|
132
97
|
}
|
|
133
|
-
const
|
|
98
|
+
const k = keyOf(target);
|
|
99
|
+
const binding = this.bindings.get(k);
|
|
134
100
|
if (!binding) {
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
Did you forget to use @Injectable() decorator ?`);
|
|
101
|
+
const name = target instanceof Token ? target.description : target.name ?? "unknown";
|
|
102
|
+
throw new Error(
|
|
103
|
+
`[Noxus DI] No binding found for "${name}".
|
|
104
|
+
Did you forget to declare it in @Injectable({ deps }) or in bootstrapApplication({ singletons })?`
|
|
105
|
+
);
|
|
141
106
|
}
|
|
142
107
|
switch (binding.lifetime) {
|
|
143
108
|
case "transient":
|
|
144
|
-
return this.
|
|
109
|
+
return this._instantiate(binding);
|
|
145
110
|
case "scope": {
|
|
146
|
-
if (this.scoped.has(
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
this.scoped.set(target, instance);
|
|
151
|
-
return instance;
|
|
111
|
+
if (this.scoped.has(k)) return this.scoped.get(k);
|
|
112
|
+
const inst = this._instantiate(binding);
|
|
113
|
+
this.scoped.set(k, inst);
|
|
114
|
+
return inst;
|
|
152
115
|
}
|
|
153
116
|
case "singleton": {
|
|
154
|
-
if (
|
|
155
|
-
|
|
156
|
-
|
|
117
|
+
if (this.singletons.has(k)) return this.singletons.get(k);
|
|
118
|
+
const inst = this._instantiate(binding);
|
|
119
|
+
this.singletons.set(k, inst);
|
|
120
|
+
if (binding.instance === void 0) {
|
|
121
|
+
binding.instance = inst;
|
|
157
122
|
}
|
|
158
|
-
return
|
|
123
|
+
return inst;
|
|
159
124
|
}
|
|
160
125
|
}
|
|
161
126
|
}
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
127
|
+
// -------------------------------------------------------------------------
|
|
128
|
+
_resolveForwardRef(ref) {
|
|
129
|
+
return new Proxy({}, {
|
|
130
|
+
get: /* @__PURE__ */ __name((_obj, prop, receiver) => {
|
|
131
|
+
const realType = ref.forwardRefFn();
|
|
132
|
+
const instance = this.resolve(realType);
|
|
133
|
+
const value = Reflect.get(instance, prop, receiver);
|
|
134
|
+
return typeof value === "function" ? value.bind(instance) : value;
|
|
135
|
+
}, "get"),
|
|
136
|
+
set: /* @__PURE__ */ __name((_obj, prop, value, receiver) => {
|
|
137
|
+
const realType = ref.forwardRefFn();
|
|
138
|
+
const instance = this.resolve(realType);
|
|
139
|
+
return Reflect.set(instance, prop, value, receiver);
|
|
140
|
+
}, "set"),
|
|
141
|
+
getPrototypeOf: /* @__PURE__ */ __name(() => {
|
|
142
|
+
const realType = ref.forwardRefFn();
|
|
143
|
+
return realType.prototype;
|
|
144
|
+
}, "getPrototypeOf")
|
|
172
145
|
});
|
|
173
|
-
|
|
146
|
+
}
|
|
147
|
+
_instantiate(binding) {
|
|
148
|
+
const resolvedDeps = binding.deps.map((dep) => this.resolve(dep));
|
|
149
|
+
return new binding.implementation(...resolvedDeps);
|
|
174
150
|
}
|
|
175
151
|
};
|
|
176
152
|
__name(_AppInjector, "AppInjector");
|
|
@@ -180,20 +156,14 @@ var RootInjector = new AppInjector("root");
|
|
|
180
156
|
// src/request.ts
|
|
181
157
|
var _Request = class _Request {
|
|
182
158
|
constructor(event, senderId, id, method, path, body) {
|
|
183
|
-
__publicField(this, "event");
|
|
184
|
-
__publicField(this, "senderId");
|
|
185
|
-
__publicField(this, "id");
|
|
186
|
-
__publicField(this, "method");
|
|
187
|
-
__publicField(this, "path");
|
|
188
|
-
__publicField(this, "body");
|
|
189
|
-
__publicField(this, "context", RootInjector.createScope());
|
|
190
|
-
__publicField(this, "params", {});
|
|
191
159
|
this.event = event;
|
|
192
160
|
this.senderId = senderId;
|
|
193
161
|
this.id = id;
|
|
194
162
|
this.method = method;
|
|
195
163
|
this.path = path;
|
|
196
164
|
this.body = body;
|
|
165
|
+
this.context = RootInjector.createScope();
|
|
166
|
+
this.params = {};
|
|
197
167
|
this.path = path.replace(/^\/|\/$/g, "");
|
|
198
168
|
}
|
|
199
169
|
};
|
|
@@ -217,10 +187,56 @@ function isRendererEventMessage(value) {
|
|
|
217
187
|
}
|
|
218
188
|
__name(isRendererEventMessage, "isRendererEventMessage");
|
|
219
189
|
|
|
190
|
+
// src/preload-bridge.ts
|
|
191
|
+
var import_renderer = require("electron/renderer");
|
|
192
|
+
var DEFAULT_EXPOSE_NAME = "noxus";
|
|
193
|
+
var DEFAULT_INIT_EVENT = "init-port";
|
|
194
|
+
var DEFAULT_REQUEST_CHANNEL = "gimme-my-port";
|
|
195
|
+
var DEFAULT_RESPONSE_CHANNEL = "port";
|
|
196
|
+
function exposeNoxusBridge(options = {}) {
|
|
197
|
+
const {
|
|
198
|
+
exposeAs = DEFAULT_EXPOSE_NAME,
|
|
199
|
+
initMessageType = DEFAULT_INIT_EVENT,
|
|
200
|
+
requestChannel = DEFAULT_REQUEST_CHANNEL,
|
|
201
|
+
responseChannel = DEFAULT_RESPONSE_CHANNEL,
|
|
202
|
+
targetWindow = window
|
|
203
|
+
} = options;
|
|
204
|
+
const api = {
|
|
205
|
+
requestPort: /* @__PURE__ */ __name(() => {
|
|
206
|
+
import_renderer.ipcRenderer.send(requestChannel);
|
|
207
|
+
import_renderer.ipcRenderer.once(responseChannel, (event, message) => {
|
|
208
|
+
const ports = (event.ports ?? []).filter((port) => port !== void 0);
|
|
209
|
+
if (ports.length === 0) {
|
|
210
|
+
console.error("[Noxus] No MessagePort received from main process.");
|
|
211
|
+
return;
|
|
212
|
+
}
|
|
213
|
+
for (const port of ports) {
|
|
214
|
+
try {
|
|
215
|
+
port.start();
|
|
216
|
+
} catch (error) {
|
|
217
|
+
console.error("[Noxus] Failed to start MessagePort.", error);
|
|
218
|
+
}
|
|
219
|
+
}
|
|
220
|
+
targetWindow.postMessage(
|
|
221
|
+
{
|
|
222
|
+
type: initMessageType,
|
|
223
|
+
senderId: message?.senderId
|
|
224
|
+
},
|
|
225
|
+
"*",
|
|
226
|
+
ports
|
|
227
|
+
);
|
|
228
|
+
});
|
|
229
|
+
}, "requestPort")
|
|
230
|
+
};
|
|
231
|
+
import_renderer.contextBridge.exposeInMainWorld(exposeAs, api);
|
|
232
|
+
return api;
|
|
233
|
+
}
|
|
234
|
+
__name(exposeNoxusBridge, "exposeNoxusBridge");
|
|
235
|
+
|
|
220
236
|
// src/renderer-events.ts
|
|
221
237
|
var _RendererEventRegistry = class _RendererEventRegistry {
|
|
222
238
|
constructor() {
|
|
223
|
-
|
|
239
|
+
this.listeners = /* @__PURE__ */ new Map();
|
|
224
240
|
}
|
|
225
241
|
/**
|
|
226
242
|
*
|
|
@@ -298,11 +314,8 @@ __name(_RendererEventRegistry, "RendererEventRegistry");
|
|
|
298
314
|
var RendererEventRegistry = _RendererEventRegistry;
|
|
299
315
|
|
|
300
316
|
// src/renderer-client.ts
|
|
301
|
-
var
|
|
302
|
-
var DEFAULT_BRIDGE_NAMES = [
|
|
303
|
-
"noxus",
|
|
304
|
-
"ipcRenderer"
|
|
305
|
-
];
|
|
317
|
+
var DEFAULT_INIT_EVENT2 = "init-port";
|
|
318
|
+
var DEFAULT_BRIDGE_NAMES = ["noxus", "ipcRenderer"];
|
|
306
319
|
function defaultRequestId() {
|
|
307
320
|
if (typeof crypto !== "undefined" && typeof crypto.randomUUID === "function") {
|
|
308
321
|
return crypto.randomUUID();
|
|
@@ -313,7 +326,8 @@ __name(defaultRequestId, "defaultRequestId");
|
|
|
313
326
|
function normalizeBridgeNames(preferred) {
|
|
314
327
|
const names = [];
|
|
315
328
|
const add = /* @__PURE__ */ __name((name) => {
|
|
316
|
-
if (!name)
|
|
329
|
+
if (!name)
|
|
330
|
+
return;
|
|
317
331
|
if (!names.includes(name)) {
|
|
318
332
|
names.push(name);
|
|
319
333
|
}
|
|
@@ -348,20 +362,10 @@ function resolveBridgeFromWindow(windowRef, preferred) {
|
|
|
348
362
|
__name(resolveBridgeFromWindow, "resolveBridgeFromWindow");
|
|
349
363
|
var _NoxRendererClient = class _NoxRendererClient {
|
|
350
364
|
constructor(options = {}) {
|
|
351
|
-
|
|
352
|
-
|
|
353
|
-
|
|
354
|
-
|
|
355
|
-
__publicField(this, "senderId");
|
|
356
|
-
__publicField(this, "bridge");
|
|
357
|
-
__publicField(this, "initMessageType");
|
|
358
|
-
__publicField(this, "windowRef");
|
|
359
|
-
__publicField(this, "generateRequestId");
|
|
360
|
-
__publicField(this, "isReady", false);
|
|
361
|
-
__publicField(this, "setupPromise");
|
|
362
|
-
__publicField(this, "setupResolve");
|
|
363
|
-
__publicField(this, "setupReject");
|
|
364
|
-
__publicField(this, "onWindowMessage", /* @__PURE__ */ __name((event) => {
|
|
365
|
+
this.events = new RendererEventRegistry();
|
|
366
|
+
this.pendingRequests = /* @__PURE__ */ new Map();
|
|
367
|
+
this.isReady = false;
|
|
368
|
+
this.onWindowMessage = /* @__PURE__ */ __name((event) => {
|
|
365
369
|
if (event.data?.type !== this.initMessageType) {
|
|
366
370
|
return;
|
|
367
371
|
}
|
|
@@ -388,14 +392,14 @@ var _NoxRendererClient = class _NoxRendererClient {
|
|
|
388
392
|
this.isReady = true;
|
|
389
393
|
this.setupResolve?.();
|
|
390
394
|
this.resetSetupState(true);
|
|
391
|
-
}, "onWindowMessage")
|
|
392
|
-
|
|
395
|
+
}, "onWindowMessage");
|
|
396
|
+
this.onSocketMessage = /* @__PURE__ */ __name((event) => {
|
|
393
397
|
if (this.events.tryDispatchFromMessageEvent(event)) {
|
|
394
398
|
return;
|
|
395
399
|
}
|
|
396
400
|
console.warn("[Noxus] Received a socket message that is not a renderer event payload.", event.data);
|
|
397
|
-
}, "onSocketMessage")
|
|
398
|
-
|
|
401
|
+
}, "onSocketMessage");
|
|
402
|
+
this.onRequestMessage = /* @__PURE__ */ __name((event) => {
|
|
399
403
|
if (this.events.tryDispatchFromMessageEvent(event)) {
|
|
400
404
|
return;
|
|
401
405
|
}
|
|
@@ -416,11 +420,11 @@ var _NoxRendererClient = class _NoxRendererClient {
|
|
|
416
420
|
return;
|
|
417
421
|
}
|
|
418
422
|
pending.resolve(response.body);
|
|
419
|
-
}, "onRequestMessage")
|
|
423
|
+
}, "onRequestMessage");
|
|
420
424
|
this.windowRef = options.windowRef ?? window;
|
|
421
425
|
const resolvedBridge = options.bridge ?? resolveBridgeFromWindow(this.windowRef, options.bridgeName);
|
|
422
426
|
this.bridge = resolvedBridge ?? null;
|
|
423
|
-
this.initMessageType = options.initMessageType ??
|
|
427
|
+
this.initMessageType = options.initMessageType ?? DEFAULT_INIT_EVENT2;
|
|
424
428
|
this.generateRequestId = options.generateRequestId ?? defaultRequestId;
|
|
425
429
|
}
|
|
426
430
|
async setup() {
|
|
@@ -549,6 +553,7 @@ var NoxRendererClient = _NoxRendererClient;
|
|
|
549
553
|
RendererEventRegistry,
|
|
550
554
|
Request,
|
|
551
555
|
createRendererEventMessage,
|
|
556
|
+
exposeNoxusBridge,
|
|
552
557
|
isRendererEventMessage
|
|
553
558
|
});
|
|
554
559
|
/**
|
|
@@ -556,4 +561,11 @@ var NoxRendererClient = _NoxRendererClient;
|
|
|
556
561
|
* @license MIT
|
|
557
562
|
* @author NoxFly
|
|
558
563
|
*/
|
|
564
|
+
/**
|
|
565
|
+
* @copyright 2025 NoxFly
|
|
566
|
+
* @license MIT
|
|
567
|
+
* @author NoxFly
|
|
568
|
+
*
|
|
569
|
+
* Entry point for renderer process and preload consumers.
|
|
570
|
+
*/
|
|
559
571
|
//# sourceMappingURL=renderer.js.map
|