@devisfuture/electron-modular 1.0.10
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/LICENSE +21 -0
- package/README.md +731 -0
- package/dist/@core/bootstrap/bootstrap.d.ts +2 -0
- package/dist/@core/bootstrap/bootstrap.js +20 -0
- package/dist/@core/bootstrap/initialize-ipc/handlers.d.ts +3 -0
- package/dist/@core/bootstrap/initialize-ipc/handlers.js +47 -0
- package/dist/@core/bootstrap/initialize-ipc/window-creator.d.ts +3 -0
- package/dist/@core/bootstrap/initialize-ipc/window-creator.js +28 -0
- package/dist/@core/bootstrap/initialize-ipc/window-event-listeners.d.ts +3 -0
- package/dist/@core/bootstrap/initialize-ipc/window-event-listeners.js +61 -0
- package/dist/@core/bootstrap/initialize-ipc/window-instance-creator.d.ts +3 -0
- package/dist/@core/bootstrap/initialize-ipc/window-instance-creator.js +10 -0
- package/dist/@core/bootstrap/initialize-module.d.ts +3 -0
- package/dist/@core/bootstrap/initialize-module.js +18 -0
- package/dist/@core/bootstrap/instantiate-module.d.ts +2 -0
- package/dist/@core/bootstrap/instantiate-module.js +9 -0
- package/dist/@core/bootstrap/register-imports.d.ts +2 -0
- package/dist/@core/bootstrap/register-imports.js +12 -0
- package/dist/@core/bootstrap/register-ipc-handlers.d.ts +3 -0
- package/dist/@core/bootstrap/register-ipc-handlers.js +9 -0
- package/dist/@core/bootstrap/register-providers.d.ts +3 -0
- package/dist/@core/bootstrap/register-providers.js +21 -0
- package/dist/@core/bootstrap/register-windows.d.ts +3 -0
- package/dist/@core/bootstrap/register-windows.js +15 -0
- package/dist/@core/bootstrap/settings.d.ts +11 -0
- package/dist/@core/bootstrap/settings.js +13 -0
- package/dist/@core/container.d.ts +26 -0
- package/dist/@core/container.js +154 -0
- package/dist/@core/control-window/cache.d.ts +1 -0
- package/dist/@core/control-window/cache.js +1 -0
- package/dist/@core/control-window/create.d.ts +3 -0
- package/dist/@core/control-window/create.js +63 -0
- package/dist/@core/control-window/destroy.d.ts +1 -0
- package/dist/@core/control-window/destroy.js +9 -0
- package/dist/@core/control-window/receive.d.ts +2 -0
- package/dist/@core/control-window/receive.js +8 -0
- package/dist/@core/control-window/types.d.ts +14 -0
- package/dist/@core/control-window/types.js +1 -0
- package/dist/@core/decorators/inject.d.ts +6 -0
- package/dist/@core/decorators/inject.js +15 -0
- package/dist/@core/decorators/injectable.d.ts +2 -0
- package/dist/@core/decorators/injectable.js +6 -0
- package/dist/@core/decorators/ipc-handler.d.ts +2 -0
- package/dist/@core/decorators/ipc-handler.js +6 -0
- package/dist/@core/decorators/rg-module.d.ts +3 -0
- package/dist/@core/decorators/rg-module.js +6 -0
- package/dist/@core/decorators/window-manager.d.ts +3 -0
- package/dist/@core/decorators/window-manager.js +6 -0
- package/dist/@core/errors/index.d.ts +19 -0
- package/dist/@core/errors/index.js +31 -0
- package/dist/@core/types/constructor.d.ts +1 -0
- package/dist/@core/types/constructor.js +1 -0
- package/dist/@core/types/index.d.ts +7 -0
- package/dist/@core/types/index.js +1 -0
- package/dist/@core/types/ipc-handler.d.ts +7 -0
- package/dist/@core/types/ipc-handler.js +1 -0
- package/dist/@core/types/module-metadata.d.ts +10 -0
- package/dist/@core/types/module-metadata.js +1 -0
- package/dist/@core/types/provider.d.ts +21 -0
- package/dist/@core/types/provider.js +1 -0
- package/dist/@core/types/window-factory.d.ts +6 -0
- package/dist/@core/types/window-factory.js +1 -0
- package/dist/@core/types/window-manager.d.ts +10 -0
- package/dist/@core/types/window-manager.js +1 -0
- package/dist/@core/types/window-metadata.d.ts +6 -0
- package/dist/@core/types/window-metadata.js +1 -0
- package/dist/@core/utils/dependency-tokens.d.ts +4 -0
- package/dist/@core/utils/dependency-tokens.js +23 -0
- package/dist/config.d.ts +4 -0
- package/dist/config.js +4 -0
- package/dist/index.d.ts +26 -0
- package/dist/index.js +34 -0
- package/package.json +53 -0
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import "reflect-metadata/lite";
|
|
2
|
+
import type { TProviderToken } from "../types/provider.js";
|
|
3
|
+
type TInjectTokensMetadata = Record<number, TProviderToken>;
|
|
4
|
+
export declare const Inject: (token: TProviderToken) => ParameterDecorator;
|
|
5
|
+
export declare const getInjectedTokens: (target: Function) => TInjectTokensMetadata;
|
|
6
|
+
export {};
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import "reflect-metadata/lite";
|
|
2
|
+
const INJECT_TOKENS_METADATA_KEY = "RgInjectTokens";
|
|
3
|
+
export const Inject = (token) => {
|
|
4
|
+
return (target, propertyKey, parameterIndex) => {
|
|
5
|
+
if (propertyKey !== undefined) {
|
|
6
|
+
return;
|
|
7
|
+
}
|
|
8
|
+
const existingTokens = Reflect.getMetadata(INJECT_TOKENS_METADATA_KEY, target) ?? {};
|
|
9
|
+
existingTokens[parameterIndex] = token;
|
|
10
|
+
Reflect.defineMetadata(INJECT_TOKENS_METADATA_KEY, existingTokens, target);
|
|
11
|
+
};
|
|
12
|
+
};
|
|
13
|
+
export const getInjectedTokens = (target) => {
|
|
14
|
+
return Reflect.getMetadata(INJECT_TOKENS_METADATA_KEY, target) ?? {};
|
|
15
|
+
};
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
declare class BaseError extends Error {
|
|
2
|
+
constructor(msg: string, name: string);
|
|
3
|
+
}
|
|
4
|
+
export declare class ModuleNotRegisteredError extends BaseError {
|
|
5
|
+
constructor(m: string);
|
|
6
|
+
}
|
|
7
|
+
export declare class ProviderNotFoundError extends BaseError {
|
|
8
|
+
constructor(t: string, m: string);
|
|
9
|
+
}
|
|
10
|
+
export declare class ModuleDecoratorMissingError extends BaseError {
|
|
11
|
+
constructor(m: string);
|
|
12
|
+
}
|
|
13
|
+
export declare class InvalidProviderError extends BaseError {
|
|
14
|
+
constructor(m: string);
|
|
15
|
+
}
|
|
16
|
+
export declare class SettingsNotInitializedError extends BaseError {
|
|
17
|
+
constructor();
|
|
18
|
+
}
|
|
19
|
+
export {};
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
class BaseError extends Error {
|
|
2
|
+
constructor(msg, name) {
|
|
3
|
+
super(msg);
|
|
4
|
+
this.name = name;
|
|
5
|
+
}
|
|
6
|
+
}
|
|
7
|
+
export class ModuleNotRegisteredError extends BaseError {
|
|
8
|
+
constructor(m) {
|
|
9
|
+
super(`Module "${m}" is not registered in the container.`, "ModuleNotRegisteredError");
|
|
10
|
+
}
|
|
11
|
+
}
|
|
12
|
+
export class ProviderNotFoundError extends BaseError {
|
|
13
|
+
constructor(t, m) {
|
|
14
|
+
super(`Provider not found for token "${t}" in module "${m}" or its imports.`, "ProviderNotFoundError");
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
export class ModuleDecoratorMissingError extends BaseError {
|
|
18
|
+
constructor(m) {
|
|
19
|
+
super(`Module ${m} does not have the @RgModule decorator`, "ModuleDecoratorMissingError");
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
export class InvalidProviderError extends BaseError {
|
|
23
|
+
constructor(m) {
|
|
24
|
+
super(`Invalid provider definition registered in module ${m}`, "InvalidProviderError");
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
export class SettingsNotInitializedError extends BaseError {
|
|
28
|
+
constructor() {
|
|
29
|
+
super("App settings cache has not been initialized.", "SettingsNotInitializedError");
|
|
30
|
+
}
|
|
31
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export type Constructor<T = any> = new (...args: any[]) => T;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
export type { Constructor } from "./constructor.js";
|
|
2
|
+
export type { TIpcHandlerInterface, TParamOnInit } from "./ipc-handler.js";
|
|
3
|
+
export type { RgModuleMetadata } from "./module-metadata.js";
|
|
4
|
+
export type { TProviderToken, TClassProvider, TFactoryProvider, TValueProvider, TExistingProvider, TProvider, } from "./provider.js";
|
|
5
|
+
export type { TWindowFactory, TWindowCreate } from "./window-factory.js";
|
|
6
|
+
export type { WindowManagerOptions, TWindowManagerWithHandlers, } from "./window-manager.js";
|
|
7
|
+
export type { TMetadataWindow } from "./window-metadata.js";
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import type { TIpcHandlerInterface } from "./ipc-handler.js";
|
|
2
|
+
import type { Constructor } from "./constructor.js";
|
|
3
|
+
import type { TProvider, TProviderToken } from "./provider.js";
|
|
4
|
+
export type RgModuleMetadata = {
|
|
5
|
+
imports?: Constructor[];
|
|
6
|
+
ipc?: (new (...args: any[]) => TIpcHandlerInterface)[];
|
|
7
|
+
windows?: Constructor[];
|
|
8
|
+
providers?: TProvider[];
|
|
9
|
+
exports?: TProviderToken[];
|
|
10
|
+
};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import type { Constructor } from "./constructor.js";
|
|
2
|
+
export type TProviderToken<T = any> = Constructor<T> | string | symbol;
|
|
3
|
+
export type TClassProvider<T = any> = {
|
|
4
|
+
provide: TProviderToken<T>;
|
|
5
|
+
useClass: Constructor<T>;
|
|
6
|
+
inject?: TProviderToken[];
|
|
7
|
+
};
|
|
8
|
+
export type TFactoryProvider<T = any> = {
|
|
9
|
+
provide: TProviderToken<T>;
|
|
10
|
+
useFactory: (...args: any[]) => T;
|
|
11
|
+
inject?: TProviderToken[];
|
|
12
|
+
};
|
|
13
|
+
export type TValueProvider<T = any> = {
|
|
14
|
+
provide: TProviderToken<T>;
|
|
15
|
+
useValue: T;
|
|
16
|
+
};
|
|
17
|
+
export type TExistingProvider<T = any> = {
|
|
18
|
+
provide: TProviderToken<T>;
|
|
19
|
+
useExisting: TProviderToken<T>;
|
|
20
|
+
};
|
|
21
|
+
export type TProvider<T = any> = Constructor<T> | TClassProvider<T> | TFactoryProvider<T> | TValueProvider<T> | TExistingProvider<T>;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import { BrowserWindow } from "electron";
|
|
2
|
+
import type { TParamsCreateWindow } from "../control-window/types.js";
|
|
3
|
+
export type TWindowCreate = (options?: TParamsCreateWindow) => Promise<BrowserWindow | undefined>;
|
|
4
|
+
export type TWindowFactory = {
|
|
5
|
+
create: TWindowCreate;
|
|
6
|
+
};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import { BrowserWindow } from "electron";
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import type { BrowserWindowConstructorOptions } from "electron";
|
|
2
|
+
import type { TParamsCreateWindow } from "../control-window/types.js";
|
|
3
|
+
export type WindowManagerOptions = TParamsCreateWindow & {
|
|
4
|
+
options: BrowserWindowConstructorOptions;
|
|
5
|
+
};
|
|
6
|
+
type TWindowEventHandler = (...args: any[]) => void;
|
|
7
|
+
export type TWindowManagerWithHandlers = {
|
|
8
|
+
[key: `on${string}`]: TWindowEventHandler | undefined;
|
|
9
|
+
};
|
|
10
|
+
export {};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import "reflect-metadata/lite";
|
|
2
|
+
import { getInjectedTokens } from "../decorators/inject.js";
|
|
3
|
+
const dependencyTokensCache = new WeakMap();
|
|
4
|
+
export const getDependencyTokens = (target) => {
|
|
5
|
+
const cached = dependencyTokensCache.get(target);
|
|
6
|
+
if (cached !== undefined) {
|
|
7
|
+
return cached;
|
|
8
|
+
}
|
|
9
|
+
const paramTypes = (Reflect.getMetadata("design:paramtypes", target) ??
|
|
10
|
+
[]);
|
|
11
|
+
const injectedTokens = getInjectedTokens(target);
|
|
12
|
+
const injectedIndexes = Object.keys(injectedTokens).map(Number);
|
|
13
|
+
const maxIndex = Math.max(paramTypes.length - 1, ...injectedIndexes, -1);
|
|
14
|
+
if (maxIndex < 0) {
|
|
15
|
+
dependencyTokensCache.set(target, paramTypes);
|
|
16
|
+
return paramTypes;
|
|
17
|
+
}
|
|
18
|
+
const tokens = Array.from({ length: maxIndex + 1 }, (_, index) => {
|
|
19
|
+
return injectedTokens[index] ?? paramTypes[index];
|
|
20
|
+
});
|
|
21
|
+
dependencyTokensCache.set(target, tokens);
|
|
22
|
+
return tokens;
|
|
23
|
+
};
|
package/dist/config.d.ts
ADDED
package/dist/config.js
ADDED
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
export * from "./@core/container.js";
|
|
2
|
+
export * from "./@core/bootstrap/bootstrap.js";
|
|
3
|
+
export * from "./@core/bootstrap/initialize-module.js";
|
|
4
|
+
export * from "./@core/bootstrap/instantiate-module.js";
|
|
5
|
+
export * from "./@core/bootstrap/register-imports.js";
|
|
6
|
+
export * from "./@core/bootstrap/register-ipc-handlers.js";
|
|
7
|
+
export * from "./@core/bootstrap/register-providers.js";
|
|
8
|
+
export * from "./@core/bootstrap/register-windows.js";
|
|
9
|
+
export * from "./@core/bootstrap/settings.js";
|
|
10
|
+
export * from "./@core/bootstrap/initialize-ipc/handlers.js";
|
|
11
|
+
export * from "./@core/bootstrap/initialize-ipc/window-creator.js";
|
|
12
|
+
export * from "./@core/bootstrap/initialize-ipc/window-event-listeners.js";
|
|
13
|
+
export * from "./@core/bootstrap/initialize-ipc/window-instance-creator.js";
|
|
14
|
+
export * from "./@core/control-window/cache.js";
|
|
15
|
+
export * from "./@core/control-window/create.js";
|
|
16
|
+
export * from "./@core/control-window/destroy.js";
|
|
17
|
+
export * from "./@core/control-window/receive.js";
|
|
18
|
+
export * from "./@core/control-window/types.js";
|
|
19
|
+
export * from "./@core/decorators/inject.js";
|
|
20
|
+
export * from "./@core/decorators/injectable.js";
|
|
21
|
+
export * from "./@core/decorators/ipc-handler.js";
|
|
22
|
+
export * from "./@core/decorators/rg-module.js";
|
|
23
|
+
export * from "./@core/decorators/window-manager.js";
|
|
24
|
+
export * from "./@core/types/index.js";
|
|
25
|
+
export * from "./@core/utils/dependency-tokens.js";
|
|
26
|
+
export * from "./@core/errors/index.js";
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
// Container
|
|
2
|
+
export * from "./@core/container.js";
|
|
3
|
+
// Bootstrap
|
|
4
|
+
export * from "./@core/bootstrap/bootstrap.js";
|
|
5
|
+
export * from "./@core/bootstrap/initialize-module.js";
|
|
6
|
+
export * from "./@core/bootstrap/instantiate-module.js";
|
|
7
|
+
export * from "./@core/bootstrap/register-imports.js";
|
|
8
|
+
export * from "./@core/bootstrap/register-ipc-handlers.js";
|
|
9
|
+
export * from "./@core/bootstrap/register-providers.js";
|
|
10
|
+
export * from "./@core/bootstrap/register-windows.js";
|
|
11
|
+
export * from "./@core/bootstrap/settings.js";
|
|
12
|
+
// Initialize IPC
|
|
13
|
+
export * from "./@core/bootstrap/initialize-ipc/handlers.js";
|
|
14
|
+
export * from "./@core/bootstrap/initialize-ipc/window-creator.js";
|
|
15
|
+
export * from "./@core/bootstrap/initialize-ipc/window-event-listeners.js";
|
|
16
|
+
export * from "./@core/bootstrap/initialize-ipc/window-instance-creator.js";
|
|
17
|
+
// Control Window
|
|
18
|
+
export * from "./@core/control-window/cache.js";
|
|
19
|
+
export * from "./@core/control-window/create.js";
|
|
20
|
+
export * from "./@core/control-window/destroy.js";
|
|
21
|
+
export * from "./@core/control-window/receive.js";
|
|
22
|
+
export * from "./@core/control-window/types.js";
|
|
23
|
+
// Decorators
|
|
24
|
+
export * from "./@core/decorators/inject.js";
|
|
25
|
+
export * from "./@core/decorators/injectable.js";
|
|
26
|
+
export * from "./@core/decorators/ipc-handler.js";
|
|
27
|
+
export * from "./@core/decorators/rg-module.js";
|
|
28
|
+
export * from "./@core/decorators/window-manager.js";
|
|
29
|
+
// Types
|
|
30
|
+
export * from "./@core/types/index.js";
|
|
31
|
+
// Utils
|
|
32
|
+
export * from "./@core/utils/dependency-tokens.js";
|
|
33
|
+
// Errors
|
|
34
|
+
export * from "./@core/errors/index.js";
|
package/package.json
ADDED
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@devisfuture/electron-modular",
|
|
3
|
+
"version": "1.0.10",
|
|
4
|
+
"description": "Core module system, DI container, IPC handlers, and window utilities for Electron main process.",
|
|
5
|
+
"type": "module",
|
|
6
|
+
"main": "./dist/index.js",
|
|
7
|
+
"types": "./dist/index.d.ts",
|
|
8
|
+
"repository": {
|
|
9
|
+
"type": "git",
|
|
10
|
+
"url": "git+https://github.com/trae-op/electron-modular.git"
|
|
11
|
+
},
|
|
12
|
+
"exports": {
|
|
13
|
+
".": {
|
|
14
|
+
"types": "./dist/index.d.ts",
|
|
15
|
+
"import": "./dist/index.js"
|
|
16
|
+
},
|
|
17
|
+
"./package.json": "./package.json"
|
|
18
|
+
},
|
|
19
|
+
"files": [
|
|
20
|
+
"dist"
|
|
21
|
+
],
|
|
22
|
+
"publishConfig": {
|
|
23
|
+
"access": "public"
|
|
24
|
+
},
|
|
25
|
+
"sideEffects": false,
|
|
26
|
+
"scripts": {
|
|
27
|
+
"build": "tsc -p tsconfig.json",
|
|
28
|
+
"test": "vitest run",
|
|
29
|
+
"prepublishOnly": "npm run build"
|
|
30
|
+
},
|
|
31
|
+
"peerDependencies": {
|
|
32
|
+
"electron": ">=36"
|
|
33
|
+
},
|
|
34
|
+
"dependencies": {
|
|
35
|
+
"reflect-metadata": "^0.2.2"
|
|
36
|
+
},
|
|
37
|
+
"devDependencies": {
|
|
38
|
+
"@types/node": "^20.11.0",
|
|
39
|
+
"@vitest/coverage-v8": "^2.1.9",
|
|
40
|
+
"electron": "^36.4.0",
|
|
41
|
+
"typescript": "^5.7.2",
|
|
42
|
+
"vitest": "^2.1.8"
|
|
43
|
+
},
|
|
44
|
+
"keywords": [
|
|
45
|
+
"electron",
|
|
46
|
+
"di",
|
|
47
|
+
"ipc",
|
|
48
|
+
"windows",
|
|
49
|
+
"decorators",
|
|
50
|
+
"container"
|
|
51
|
+
],
|
|
52
|
+
"license": "MIT"
|
|
53
|
+
}
|