@eggjs/standalone 4.0.0-beta.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/LICENSE +21 -0
- package/README.md +99 -0
- package/dist/ConfigSourceLoadUnitHook.d.ts +9 -0
- package/dist/ConfigSourceLoadUnitHook.js +19 -0
- package/dist/EggModuleLoader.d.ts +18 -0
- package/dist/EggModuleLoader.js +59 -0
- package/dist/ModuleConfig.d.ts +1 -0
- package/dist/ModuleConfig.js +9 -0
- package/dist/Runner.d.ts +50 -0
- package/dist/Runner.js +244 -0
- package/dist/StandaloneContext.d.ts +5 -0
- package/dist/StandaloneContext.js +10 -0
- package/dist/StandaloneContextHandler.d.ts +6 -0
- package/dist/StandaloneContextHandler.js +14 -0
- package/dist/StandaloneContextImpl.d.ts +5 -0
- package/dist/StandaloneContextImpl.js +10 -0
- package/dist/StandaloneInnerObject.d.ts +15 -0
- package/dist/StandaloneInnerObject.js +29 -0
- package/dist/StandaloneInnerObjectProto.d.ts +20 -0
- package/dist/StandaloneInnerObjectProto.js +50 -0
- package/dist/StandaloneLoadUnit.d.ts +23 -0
- package/dist/StandaloneLoadUnit.js +61 -0
- package/dist/index.d.ts +6 -0
- package/dist/index.js +7 -0
- package/dist/main.d.ts +3 -0
- package/dist/main.js +34 -0
- package/package.json +68 -0
package/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2017-present Alibaba Group Holding Limited and other contributors.
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
package/README.md
ADDED
|
@@ -0,0 +1,99 @@
|
|
|
1
|
+
# `@eggjs/tegg-standalone`
|
|
2
|
+
|
|
3
|
+
[![NPM version][npm-image]][npm-url]
|
|
4
|
+
[![Known Vulnerabilities][snyk-image]][snyk-url]
|
|
5
|
+
[![npm download][download-image]][download-url]
|
|
6
|
+
[](https://nodejs.org/en/download/)
|
|
7
|
+
|
|
8
|
+
[npm-image]: https://img.shields.io/npm/v/@eggjs/tegg-standalone.svg?style=flat-square
|
|
9
|
+
[npm-url]: https://npmjs.org/package/@eggjs/tegg-standalone
|
|
10
|
+
[snyk-image]: https://snyk.io/test/npm/@eggjs/tegg-standalone/badge.svg?style=flat-square
|
|
11
|
+
[snyk-url]: https://snyk.io/test/npm/@eggjs/tegg-standalone
|
|
12
|
+
[download-image]: https://img.shields.io/npm/dm/@eggjs/tegg-standalone.svg?style=flat-square
|
|
13
|
+
[download-url]: https://npmjs.org/package/@eggjs/tegg-standalone
|
|
14
|
+
|
|
15
|
+
通过 `@eggjs/tegg-standalone` 在一个独立环境去中运行 tegg 应用。
|
|
16
|
+
|
|
17
|
+
## install
|
|
18
|
+
|
|
19
|
+
```sh
|
|
20
|
+
npm i --save @eggjs/tegg-standalone
|
|
21
|
+
```
|
|
22
|
+
|
|
23
|
+
## Usage
|
|
24
|
+
|
|
25
|
+
当一个类上有 Runner 注解时,会自动运行其 main 函数。注无需再使用 `ContextProto` 注解,因为独立运行跑完即销毁,不用再区分独立上下文。
|
|
26
|
+
|
|
27
|
+
```ts
|
|
28
|
+
import { Runner, type MainRunner } from '@eggjs/tegg/standalone';
|
|
29
|
+
|
|
30
|
+
@Runner()
|
|
31
|
+
@SingletonProto()
|
|
32
|
+
export class Foo implements MainRunner<string> {
|
|
33
|
+
@Inject()
|
|
34
|
+
hello: Hello;
|
|
35
|
+
|
|
36
|
+
async main(): Promise<string> {
|
|
37
|
+
return this.hello.hello();
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
```
|
|
41
|
+
|
|
42
|
+
运行代码
|
|
43
|
+
|
|
44
|
+
- cwd 为当前应用工作目录
|
|
45
|
+
- options:
|
|
46
|
+
- innerObjects: 当前运行环境中内置的对象
|
|
47
|
+
|
|
48
|
+
```
|
|
49
|
+
await main(cwd, {
|
|
50
|
+
innerObjects: {
|
|
51
|
+
hello: {
|
|
52
|
+
hello: () => {
|
|
53
|
+
return 'hello, inner';
|
|
54
|
+
},
|
|
55
|
+
},
|
|
56
|
+
},
|
|
57
|
+
});
|
|
58
|
+
```
|
|
59
|
+
|
|
60
|
+
### 配置
|
|
61
|
+
|
|
62
|
+
module 支持通过 module.yml 来定义配置,在代码中可以通过注入 moduleConfigs 获取全局配置,通过注入 moduleConfig 来获取单 module 的配置。
|
|
63
|
+
|
|
64
|
+
```yaml
|
|
65
|
+
# module.yml
|
|
66
|
+
# module 根目录中
|
|
67
|
+
|
|
68
|
+
features:
|
|
69
|
+
dynamic:
|
|
70
|
+
foo: 'bar'
|
|
71
|
+
```
|
|
72
|
+
|
|
73
|
+
```ts
|
|
74
|
+
@ContextProto()
|
|
75
|
+
export class Foo {
|
|
76
|
+
// 获取全局配置, 通过 get 方法来获取特定 module 的配置
|
|
77
|
+
@Inject()
|
|
78
|
+
moduleConfigs: ModuleConfigs;
|
|
79
|
+
|
|
80
|
+
// 注入当前 module 的配置
|
|
81
|
+
@Inject()
|
|
82
|
+
moduleConfig: ModuleConfig;
|
|
83
|
+
|
|
84
|
+
// 注入 "bar" module 的配置
|
|
85
|
+
@Inject({
|
|
86
|
+
name: 'moduleConfig',
|
|
87
|
+
})
|
|
88
|
+
@ConfigSourceQualifier('bar')
|
|
89
|
+
barModuleConfig: ModuleConfig;
|
|
90
|
+
|
|
91
|
+
async main() {
|
|
92
|
+
return {
|
|
93
|
+
configs: this.moduleConfigs,
|
|
94
|
+
foo: this.moduleConfig,
|
|
95
|
+
bar: this.barModuleConfig,
|
|
96
|
+
};
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
```
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import type { LoadUnit, LoadUnitLifecycleContext } from '@eggjs/metadata';
|
|
2
|
+
import { type LifecycleHook } from '@eggjs/tegg';
|
|
3
|
+
/**
|
|
4
|
+
* Hook for inject moduleConfig.
|
|
5
|
+
* Add default qualifier value is current module name.
|
|
6
|
+
*/
|
|
7
|
+
export declare class ConfigSourceLoadUnitHook implements LifecycleHook<LoadUnitLifecycleContext, LoadUnit> {
|
|
8
|
+
preCreate(ctx: LoadUnitLifecycleContext, loadUnit: LoadUnit): Promise<void>;
|
|
9
|
+
}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { PrototypeUtil, QualifierUtil, ConfigSourceQualifier, ConfigSourceQualifierAttribute, } from '@eggjs/tegg';
|
|
2
|
+
/**
|
|
3
|
+
* Hook for inject moduleConfig.
|
|
4
|
+
* Add default qualifier value is current module name.
|
|
5
|
+
*/
|
|
6
|
+
export class ConfigSourceLoadUnitHook {
|
|
7
|
+
async preCreate(ctx, loadUnit) {
|
|
8
|
+
const classList = await ctx.loader.load();
|
|
9
|
+
for (const clazz of classList) {
|
|
10
|
+
const injectObjects = PrototypeUtil.getInjectObjects(clazz);
|
|
11
|
+
const moduleConfigObject = injectObjects.find((t) => t.objName === 'moduleConfig');
|
|
12
|
+
const configSourceQualifier = QualifierUtil.getProperQualifier(clazz, 'moduleConfig', ConfigSourceQualifierAttribute);
|
|
13
|
+
if (moduleConfigObject && !configSourceQualifier) {
|
|
14
|
+
ConfigSourceQualifier(loadUnit.name)(clazz.prototype, moduleConfigObject.refName);
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQ29uZmlnU291cmNlTG9hZFVuaXRIb29rLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL0NvbmZpZ1NvdXJjZUxvYWRVbml0SG9vay50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBRUwsYUFBYSxFQUNiLGFBQWEsRUFDYixxQkFBcUIsRUFDckIsOEJBQThCLEdBQy9CLE1BQU0sYUFBYSxDQUFDO0FBRXJCOzs7R0FHRztBQUNILE1BQU0sT0FBTyx3QkFBd0I7SUFDbkMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxHQUE2QixFQUFFLFFBQWtCO1FBQy9ELE1BQU0sU0FBUyxHQUFHLE1BQU0sR0FBRyxDQUFDLE1BQU0sQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUMxQyxLQUFLLE1BQU0sS0FBSyxJQUFJLFNBQVMsRUFBRSxDQUFDO1lBQzlCLE1BQU0sYUFBYSxHQUFHLGFBQWEsQ0FBQyxnQkFBZ0IsQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUM1RCxNQUFNLGtCQUFrQixHQUFHLGFBQWEsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxPQUFPLEtBQUssY0FBYyxDQUFDLENBQUM7WUFDbkYsTUFBTSxxQkFBcUIsR0FBRyxhQUFhLENBQUMsa0JBQWtCLENBQzVELEtBQUssRUFDTCxjQUFjLEVBQ2QsOEJBQThCLENBQy9CLENBQUM7WUFDRixJQUFJLGtCQUFrQixJQUFJLENBQUMscUJBQXFCLEVBQUUsQ0FBQztnQkFDakQscUJBQXFCLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxDQUFDLEtBQUssQ0FBQyxTQUFTLEVBQUUsa0JBQWtCLENBQUMsT0FBTyxDQUFDLENBQUM7WUFDcEYsQ0FBQztRQUNILENBQUM7SUFDSCxDQUFDO0NBQ0YifQ==
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { type LoadUnit } from '@eggjs/metadata';
|
|
2
|
+
import type { ModuleReference } from '@eggjs/tegg-common-util';
|
|
3
|
+
import type { Logger } from '@eggjs/tegg';
|
|
4
|
+
export interface EggModuleLoaderOptions {
|
|
5
|
+
logger: Logger;
|
|
6
|
+
baseDir: string;
|
|
7
|
+
dump?: boolean;
|
|
8
|
+
}
|
|
9
|
+
export declare class EggModuleLoader {
|
|
10
|
+
private moduleReferences;
|
|
11
|
+
private globalGraph;
|
|
12
|
+
private options;
|
|
13
|
+
constructor(moduleReferences: readonly ModuleReference[], options: EggModuleLoaderOptions);
|
|
14
|
+
init(): Promise<void>;
|
|
15
|
+
private static generateAppGraph;
|
|
16
|
+
load(): Promise<LoadUnit[]>;
|
|
17
|
+
static preLoad(moduleReferences: readonly ModuleReference[], options: EggModuleLoaderOptions): Promise<void>;
|
|
18
|
+
}
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
import { EggLoadUnitType, GlobalGraph, LoadUnitFactory, ModuleDescriptorDumper, } from '@eggjs/metadata';
|
|
2
|
+
import { LoaderFactory } from '@eggjs/tegg-loader';
|
|
3
|
+
export class EggModuleLoader {
|
|
4
|
+
moduleReferences;
|
|
5
|
+
globalGraph;
|
|
6
|
+
options;
|
|
7
|
+
constructor(moduleReferences, options) {
|
|
8
|
+
this.moduleReferences = moduleReferences;
|
|
9
|
+
this.options = options;
|
|
10
|
+
}
|
|
11
|
+
async init() {
|
|
12
|
+
GlobalGraph.instance = this.globalGraph = await EggModuleLoader.generateAppGraph(this.moduleReferences, this.options);
|
|
13
|
+
}
|
|
14
|
+
static async generateAppGraph(moduleReferences, options) {
|
|
15
|
+
const moduleDescriptors = await LoaderFactory.loadApp(moduleReferences);
|
|
16
|
+
if (options.dump !== false) {
|
|
17
|
+
for (const moduleDescriptor of moduleDescriptors) {
|
|
18
|
+
ModuleDescriptorDumper.dump(moduleDescriptor, {
|
|
19
|
+
dumpDir: options.baseDir,
|
|
20
|
+
}).catch((e) => {
|
|
21
|
+
e.message = 'dump module descriptor failed: ' + e.message;
|
|
22
|
+
options.logger.warn(e);
|
|
23
|
+
});
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
const globalGraph = await GlobalGraph.create(moduleDescriptors);
|
|
27
|
+
return globalGraph;
|
|
28
|
+
}
|
|
29
|
+
async load() {
|
|
30
|
+
const loadUnits = [];
|
|
31
|
+
this.globalGraph.build();
|
|
32
|
+
this.globalGraph.sort();
|
|
33
|
+
const moduleConfigList = GlobalGraph.instance.moduleConfigList;
|
|
34
|
+
for (const moduleConfig of moduleConfigList) {
|
|
35
|
+
const modulePath = moduleConfig.path;
|
|
36
|
+
const loader = LoaderFactory.createLoader(modulePath, EggLoadUnitType.MODULE);
|
|
37
|
+
const loadUnit = await LoadUnitFactory.createLoadUnit(modulePath, EggLoadUnitType.MODULE, loader);
|
|
38
|
+
loadUnits.push(loadUnit);
|
|
39
|
+
}
|
|
40
|
+
return loadUnits;
|
|
41
|
+
}
|
|
42
|
+
static async preLoad(moduleReferences, options) {
|
|
43
|
+
const loadUnits = [];
|
|
44
|
+
const loaderCache = new Map();
|
|
45
|
+
const globalGraph = (GlobalGraph.instance = await EggModuleLoader.generateAppGraph(moduleReferences, options));
|
|
46
|
+
globalGraph.sort();
|
|
47
|
+
const moduleConfigList = globalGraph.moduleConfigList;
|
|
48
|
+
for (const moduleConfig of moduleConfigList) {
|
|
49
|
+
const modulePath = moduleConfig.path;
|
|
50
|
+
const loader = loaderCache.get(modulePath);
|
|
51
|
+
const loadUnit = await LoadUnitFactory.createPreloadLoadUnit(modulePath, EggLoadUnitType.MODULE, loader);
|
|
52
|
+
loadUnits.push(loadUnit);
|
|
53
|
+
}
|
|
54
|
+
for (const load of loadUnits) {
|
|
55
|
+
await load.preLoad?.();
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiRWdnTW9kdWxlTG9hZGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL0VnZ01vZHVsZUxvYWRlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsZUFBZSxFQUNmLFdBQVcsRUFHWCxlQUFlLEVBQ2Ysc0JBQXNCLEdBQ3ZCLE1BQU0saUJBQWlCLENBQUM7QUFDekIsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBVW5ELE1BQU0sT0FBTyxlQUFlO0lBQ2xCLGdCQUFnQixDQUE2QjtJQUM3QyxXQUFXLENBQWM7SUFDekIsT0FBTyxDQUF5QjtJQUV4QyxZQUFZLGdCQUE0QyxFQUFFLE9BQStCO1FBQ3ZGLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxnQkFBZ0IsQ0FBQztRQUN6QyxJQUFJLENBQUMsT0FBTyxHQUFHLE9BQU8sQ0FBQztJQUN6QixDQUFDO0lBRUQsS0FBSyxDQUFDLElBQUk7UUFDUixXQUFXLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxXQUFXLEdBQUcsTUFBTSxlQUFlLENBQUMsZ0JBQWdCLENBQzlFLElBQUksQ0FBQyxnQkFBZ0IsRUFDckIsSUFBSSxDQUFDLE9BQU8sQ0FDYixDQUFDO0lBQ0osQ0FBQztJQUVPLE1BQU0sQ0FBQyxLQUFLLENBQUMsZ0JBQWdCLENBQUMsZ0JBQTRDLEVBQUUsT0FBK0I7UUFDakgsTUFBTSxpQkFBaUIsR0FBRyxNQUFNLGFBQWEsQ0FBQyxPQUFPLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztRQUN4RSxJQUFJLE9BQU8sQ0FBQyxJQUFJLEtBQUssS0FBSyxFQUFFLENBQUM7WUFDM0IsS0FBSyxNQUFNLGdCQUFnQixJQUFJLGlCQUFpQixFQUFFLENBQUM7Z0JBQ2pELHNCQUFzQixDQUFDLElBQUksQ0FBQyxnQkFBZ0IsRUFBRTtvQkFDNUMsT0FBTyxFQUFFLE9BQU8sQ0FBQyxPQUFPO2lCQUN6QixDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUU7b0JBQ2IsQ0FBQyxDQUFDLE9BQU8sR0FBRyxpQ0FBaUMsR0FBRyxDQUFDLENBQUMsT0FBTyxDQUFDO29CQUMxRCxPQUFPLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztnQkFDekIsQ0FBQyxDQUFDLENBQUM7WUFDTCxDQUFDO1FBQ0gsQ0FBQztRQUNELE1BQU0sV0FBVyxHQUFHLE1BQU0sV0FBVyxDQUFDLE1BQU0sQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO1FBQ2hFLE9BQU8sV0FBVyxDQUFDO0lBQ3JCLENBQUM7SUFFRCxLQUFLLENBQUMsSUFBSTtRQUNSLE1BQU0sU0FBUyxHQUFlLEVBQUUsQ0FBQztRQUNqQyxJQUFJLENBQUMsV0FBVyxDQUFDLEtBQUssRUFBRSxDQUFDO1FBQ3pCLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDeEIsTUFBTSxnQkFBZ0IsR0FBRyxXQUFXLENBQUMsUUFBUyxDQUFDLGdCQUFnQixDQUFDO1FBQ2hFLEtBQUssTUFBTSxZQUFZLElBQUksZ0JBQWdCLEVBQUUsQ0FBQztZQUM1QyxNQUFNLFVBQVUsR0FBRyxZQUFZLENBQUMsSUFBSSxDQUFDO1lBQ3JDLE1BQU0sTUFBTSxHQUFHLGFBQWEsQ0FBQyxZQUFZLENBQUMsVUFBVSxFQUFFLGVBQWUsQ0FBQyxNQUFNLENBQUMsQ0FBQztZQUM5RSxNQUFNLFFBQVEsR0FBRyxNQUFNLGVBQWUsQ0FBQyxjQUFjLENBQUMsVUFBVSxFQUFFLGVBQWUsQ0FBQyxNQUFNLEVBQUUsTUFBTSxDQUFDLENBQUM7WUFDbEcsU0FBUyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUMzQixDQUFDO1FBQ0QsT0FBTyxTQUFTLENBQUM7SUFDbkIsQ0FBQztJQUVELE1BQU0sQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLGdCQUE0QyxFQUFFLE9BQStCO1FBQ2hHLE1BQU0sU0FBUyxHQUFlLEVBQUUsQ0FBQztRQUNqQyxNQUFNLFdBQVcsR0FBRyxJQUFJLEdBQUcsRUFBa0IsQ0FBQztRQUM5QyxNQUFNLFdBQVcsR0FBRyxDQUFDLFdBQVcsQ0FBQyxRQUFRLEdBQUcsTUFBTSxlQUFlLENBQUMsZ0JBQWdCLENBQUMsZ0JBQWdCLEVBQUUsT0FBTyxDQUFDLENBQUMsQ0FBQztRQUMvRyxXQUFXLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDbkIsTUFBTSxnQkFBZ0IsR0FBRyxXQUFXLENBQUMsZ0JBQWdCLENBQUM7UUFDdEQsS0FBSyxNQUFNLFlBQVksSUFBSSxnQkFBZ0IsRUFBRSxDQUFDO1lBQzVDLE1BQU0sVUFBVSxHQUFHLFlBQVksQ0FBQyxJQUFJLENBQUM7WUFDckMsTUFBTSxNQUFNLEdBQUcsV0FBVyxDQUFDLEdBQUcsQ0FBQyxVQUFVLENBQUUsQ0FBQztZQUM1QyxNQUFNLFFBQVEsR0FBRyxNQUFNLGVBQWUsQ0FBQyxxQkFBcUIsQ0FBQyxVQUFVLEVBQUUsZUFBZSxDQUFDLE1BQU0sRUFBRSxNQUFNLENBQUMsQ0FBQztZQUN6RyxTQUFTLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQzNCLENBQUM7UUFDRCxLQUFLLE1BQU0sSUFBSSxJQUFJLFNBQVMsRUFBRSxDQUFDO1lBQzdCLE1BQU0sSUFBSSxDQUFDLE9BQU8sRUFBRSxFQUFFLENBQUM7UUFDekIsQ0FBQztJQUNILENBQUM7Q0FDRiJ9
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
// import 'egg';
|
|
2
|
+
export {};
|
|
3
|
+
// for declare merging
|
|
4
|
+
// declare module 'egg' {
|
|
5
|
+
// export interface ModuleConfig {
|
|
6
|
+
// // ...
|
|
7
|
+
// }
|
|
8
|
+
// }
|
|
9
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiTW9kdWxlQ29uZmlnLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL01vZHVsZUNvbmZpZy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxnQkFBZ0I7O0FBRWhCLHNCQUFzQjtBQUN0Qix5QkFBeUI7QUFDekIsb0NBQW9DO0FBQ3BDLGFBQWE7QUFDYixNQUFNO0FBQ04sSUFBSSJ9
|
package/dist/Runner.d.ts
ADDED
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
import { type ModuleReference, type ReadModuleReferenceOptions } from '@eggjs/tegg-common-util';
|
|
2
|
+
import { type LoadUnit } from '@eggjs/metadata';
|
|
3
|
+
import { type EggContext, type LoadUnitInstance } from '@eggjs/tegg-runtime';
|
|
4
|
+
import { type ModuleConfigHolder } from '@eggjs/tegg';
|
|
5
|
+
import { type InnerObject } from './StandaloneLoadUnit.ts';
|
|
6
|
+
export interface ModuleDependency extends ReadModuleReferenceOptions {
|
|
7
|
+
baseDir: string;
|
|
8
|
+
}
|
|
9
|
+
export interface RunnerOptions {
|
|
10
|
+
/**
|
|
11
|
+
* @deprecated
|
|
12
|
+
* use inner object handlers instead
|
|
13
|
+
*/
|
|
14
|
+
innerObjects?: Record<string, object>;
|
|
15
|
+
env?: string;
|
|
16
|
+
name?: string;
|
|
17
|
+
innerObjectHandlers?: Record<string, InnerObject[]>;
|
|
18
|
+
dependencies?: (string | ModuleDependency)[];
|
|
19
|
+
dump?: boolean;
|
|
20
|
+
}
|
|
21
|
+
export declare class Runner {
|
|
22
|
+
readonly cwd: string;
|
|
23
|
+
readonly moduleReferences: readonly ModuleReference[];
|
|
24
|
+
readonly moduleConfigs: Record<string, ModuleConfigHolder>;
|
|
25
|
+
readonly env?: string;
|
|
26
|
+
readonly name?: string;
|
|
27
|
+
readonly options?: RunnerOptions;
|
|
28
|
+
private loadUnitLoader;
|
|
29
|
+
private runnerProto;
|
|
30
|
+
private configSourceEggPrototypeHook;
|
|
31
|
+
private loadUnitMultiInstanceProtoHook;
|
|
32
|
+
private dalTableEggPrototypeHook;
|
|
33
|
+
private dalModuleLoadUnitHook;
|
|
34
|
+
private transactionPrototypeHook;
|
|
35
|
+
private crosscutAdviceFactory;
|
|
36
|
+
private loadUnitAopHook;
|
|
37
|
+
private eggPrototypeCrossCutHook;
|
|
38
|
+
private eggObjectAopHook;
|
|
39
|
+
loadUnits: LoadUnit[];
|
|
40
|
+
loadUnitInstances: LoadUnitInstance[];
|
|
41
|
+
innerObjects: Record<string, InnerObject[]>;
|
|
42
|
+
constructor(cwd: string, options?: RunnerOptions);
|
|
43
|
+
load(): Promise<LoadUnit[]>;
|
|
44
|
+
static getModuleReferences(cwd: string, dependencies?: RunnerOptions['dependencies']): readonly ModuleReference[];
|
|
45
|
+
static preLoad(cwd: string, dependencies?: RunnerOptions['dependencies']): Promise<void>;
|
|
46
|
+
private initLoaderInstance;
|
|
47
|
+
init(): Promise<void>;
|
|
48
|
+
run<T>(aCtx?: EggContext): Promise<T>;
|
|
49
|
+
destroy(): Promise<void>;
|
|
50
|
+
}
|
package/dist/Runner.js
ADDED
|
@@ -0,0 +1,244 @@
|
|
|
1
|
+
import { ModuleConfigUtil, } from '@eggjs/tegg-common-util';
|
|
2
|
+
import { EggPrototypeLifecycleUtil, GlobalGraph, LoadUnitFactory, LoadUnitLifecycleUtil, LoadUnitMultiInstanceProtoHook, } from '@eggjs/metadata';
|
|
3
|
+
import { ContextHandler, EggContainerFactory, EggObjectLifecycleUtil, LoadUnitInstanceFactory, ModuleLoadUnitInstance, } from '@eggjs/tegg-runtime';
|
|
4
|
+
import { PrototypeUtil, ModuleConfigs, ConfigSourceQualifierAttribute, } from '@eggjs/tegg';
|
|
5
|
+
import { StandaloneUtil } from '@eggjs/tegg/standalone';
|
|
6
|
+
import { CrosscutAdviceFactory } from '@eggjs/tegg/aop';
|
|
7
|
+
import { crossCutGraphHook, EggObjectAopHook, EggPrototypeCrossCutHook, LoadUnitAopHook, pointCutGraphHook, } from '@eggjs/aop-runtime';
|
|
8
|
+
import { DalTableEggPrototypeHook, DalModuleLoadUnitHook, MysqlDataSourceManager, SqlMapManager, TableModelManager, TransactionPrototypeHook, } from '@eggjs/tegg-dal-plugin';
|
|
9
|
+
import { EggModuleLoader } from "./EggModuleLoader.js";
|
|
10
|
+
import { StandaloneLoadUnit, StandaloneLoadUnitType } from "./StandaloneLoadUnit.js";
|
|
11
|
+
import { StandaloneContext } from "./StandaloneContext.js";
|
|
12
|
+
import { StandaloneContextHandler } from "./StandaloneContextHandler.js";
|
|
13
|
+
import { ConfigSourceLoadUnitHook } from "./ConfigSourceLoadUnitHook.js";
|
|
14
|
+
export class Runner {
|
|
15
|
+
cwd;
|
|
16
|
+
moduleReferences;
|
|
17
|
+
moduleConfigs;
|
|
18
|
+
env;
|
|
19
|
+
name;
|
|
20
|
+
options;
|
|
21
|
+
loadUnitLoader;
|
|
22
|
+
runnerProto;
|
|
23
|
+
configSourceEggPrototypeHook;
|
|
24
|
+
loadUnitMultiInstanceProtoHook;
|
|
25
|
+
dalTableEggPrototypeHook;
|
|
26
|
+
dalModuleLoadUnitHook;
|
|
27
|
+
transactionPrototypeHook;
|
|
28
|
+
crosscutAdviceFactory;
|
|
29
|
+
loadUnitAopHook;
|
|
30
|
+
eggPrototypeCrossCutHook;
|
|
31
|
+
eggObjectAopHook;
|
|
32
|
+
loadUnits = [];
|
|
33
|
+
loadUnitInstances = [];
|
|
34
|
+
innerObjects;
|
|
35
|
+
constructor(cwd, options) {
|
|
36
|
+
this.cwd = cwd;
|
|
37
|
+
this.env = options?.env;
|
|
38
|
+
this.name = options?.name;
|
|
39
|
+
this.options = options;
|
|
40
|
+
this.moduleReferences = Runner.getModuleReferences(this.cwd, options?.dependencies);
|
|
41
|
+
this.moduleConfigs = {};
|
|
42
|
+
this.innerObjects = {
|
|
43
|
+
moduleConfigs: [
|
|
44
|
+
{
|
|
45
|
+
obj: new ModuleConfigs(this.moduleConfigs),
|
|
46
|
+
},
|
|
47
|
+
],
|
|
48
|
+
moduleConfig: [],
|
|
49
|
+
};
|
|
50
|
+
const runtimeConfig = {
|
|
51
|
+
baseDir: this.cwd,
|
|
52
|
+
name: this.name,
|
|
53
|
+
env: this.env,
|
|
54
|
+
};
|
|
55
|
+
// Inject runtimeConfig
|
|
56
|
+
this.innerObjects.runtimeConfig = [
|
|
57
|
+
{
|
|
58
|
+
obj: runtimeConfig,
|
|
59
|
+
},
|
|
60
|
+
];
|
|
61
|
+
// load module.yml and module.env.yml by default
|
|
62
|
+
if (!ModuleConfigUtil.configNames) {
|
|
63
|
+
ModuleConfigUtil.configNames = ['module.default', `module.${this.env}`];
|
|
64
|
+
}
|
|
65
|
+
for (const reference of this.moduleReferences) {
|
|
66
|
+
const absoluteRef = {
|
|
67
|
+
path: ModuleConfigUtil.resolveModuleDir(reference.path, this.cwd),
|
|
68
|
+
name: reference.name,
|
|
69
|
+
};
|
|
70
|
+
const moduleName = ModuleConfigUtil.readModuleNameSync(absoluteRef.path);
|
|
71
|
+
this.moduleConfigs[moduleName] = {
|
|
72
|
+
name: moduleName,
|
|
73
|
+
reference: absoluteRef,
|
|
74
|
+
config: ModuleConfigUtil.loadModuleConfigSync(absoluteRef.path),
|
|
75
|
+
};
|
|
76
|
+
}
|
|
77
|
+
for (const moduleConfig of Object.values(this.moduleConfigs)) {
|
|
78
|
+
this.innerObjects.moduleConfig.push({
|
|
79
|
+
obj: moduleConfig.config,
|
|
80
|
+
qualifiers: [
|
|
81
|
+
{
|
|
82
|
+
attribute: ConfigSourceQualifierAttribute,
|
|
83
|
+
value: moduleConfig.name,
|
|
84
|
+
},
|
|
85
|
+
],
|
|
86
|
+
});
|
|
87
|
+
}
|
|
88
|
+
if (options?.innerObjects) {
|
|
89
|
+
for (const [name, obj] of Object.entries(options.innerObjects)) {
|
|
90
|
+
this.innerObjects[name] = [
|
|
91
|
+
{
|
|
92
|
+
obj,
|
|
93
|
+
},
|
|
94
|
+
];
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
else if (options?.innerObjectHandlers) {
|
|
98
|
+
Object.assign(this.innerObjects, options.innerObjectHandlers);
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
async load() {
|
|
102
|
+
StandaloneContextHandler.register();
|
|
103
|
+
LoadUnitFactory.registerLoadUnitCreator(StandaloneLoadUnitType, () => {
|
|
104
|
+
return new StandaloneLoadUnit(this.innerObjects);
|
|
105
|
+
});
|
|
106
|
+
LoadUnitInstanceFactory.registerLoadUnitInstanceClass(StandaloneLoadUnitType, ModuleLoadUnitInstance.createModuleLoadUnitInstance);
|
|
107
|
+
const standaloneLoadUnit = await LoadUnitFactory.createLoadUnit('MockStandaloneLoadUnitPath', StandaloneLoadUnitType, {
|
|
108
|
+
async load() {
|
|
109
|
+
return [];
|
|
110
|
+
},
|
|
111
|
+
});
|
|
112
|
+
const loadUnits = await this.loadUnitLoader.load();
|
|
113
|
+
return [standaloneLoadUnit, ...loadUnits];
|
|
114
|
+
}
|
|
115
|
+
static getModuleReferences(cwd, dependencies) {
|
|
116
|
+
const moduleDirs = (dependencies || []).concat(cwd);
|
|
117
|
+
return moduleDirs.reduce((list, baseDir) => {
|
|
118
|
+
const module = typeof baseDir === 'string' ? { baseDir } : baseDir;
|
|
119
|
+
return list.concat(...ModuleConfigUtil.readModuleReference(module.baseDir, module));
|
|
120
|
+
}, []);
|
|
121
|
+
}
|
|
122
|
+
static async preLoad(cwd, dependencies) {
|
|
123
|
+
const moduleReferences = Runner.getModuleReferences(cwd, dependencies);
|
|
124
|
+
await EggModuleLoader.preLoad(moduleReferences, {
|
|
125
|
+
baseDir: cwd,
|
|
126
|
+
logger: console,
|
|
127
|
+
dump: false,
|
|
128
|
+
});
|
|
129
|
+
}
|
|
130
|
+
async initLoaderInstance() {
|
|
131
|
+
this.loadUnitLoader = new EggModuleLoader(this.moduleReferences, {
|
|
132
|
+
logger: (this.innerObjects.logger && this.innerObjects.logger[0])?.obj || console,
|
|
133
|
+
baseDir: this.cwd,
|
|
134
|
+
dump: this.options?.dump,
|
|
135
|
+
});
|
|
136
|
+
await this.loadUnitLoader.init();
|
|
137
|
+
GlobalGraph.instance.registerBuildHook(crossCutGraphHook);
|
|
138
|
+
GlobalGraph.instance.registerBuildHook(pointCutGraphHook);
|
|
139
|
+
const configSourceEggPrototypeHook = new ConfigSourceLoadUnitHook();
|
|
140
|
+
LoadUnitLifecycleUtil.registerLifecycle(configSourceEggPrototypeHook);
|
|
141
|
+
// TODO refactor with egg module
|
|
142
|
+
// aop runtime
|
|
143
|
+
this.crosscutAdviceFactory = new CrosscutAdviceFactory();
|
|
144
|
+
this.loadUnitAopHook = new LoadUnitAopHook(this.crosscutAdviceFactory);
|
|
145
|
+
this.eggPrototypeCrossCutHook = new EggPrototypeCrossCutHook(this.crosscutAdviceFactory);
|
|
146
|
+
this.eggObjectAopHook = new EggObjectAopHook();
|
|
147
|
+
EggPrototypeLifecycleUtil.registerLifecycle(this.eggPrototypeCrossCutHook);
|
|
148
|
+
LoadUnitLifecycleUtil.registerLifecycle(this.loadUnitAopHook);
|
|
149
|
+
EggObjectLifecycleUtil.registerLifecycle(this.eggObjectAopHook);
|
|
150
|
+
this.loadUnitMultiInstanceProtoHook = new LoadUnitMultiInstanceProtoHook();
|
|
151
|
+
LoadUnitLifecycleUtil.registerLifecycle(this.loadUnitMultiInstanceProtoHook);
|
|
152
|
+
const loggerInnerObject = this.innerObjects.logger && this.innerObjects.logger[0];
|
|
153
|
+
const logger = (loggerInnerObject?.obj || console);
|
|
154
|
+
this.dalModuleLoadUnitHook = new DalModuleLoadUnitHook(this.env ?? '', this.moduleConfigs, logger);
|
|
155
|
+
this.dalTableEggPrototypeHook = new DalTableEggPrototypeHook(logger);
|
|
156
|
+
this.transactionPrototypeHook = new TransactionPrototypeHook(this.moduleConfigs, logger);
|
|
157
|
+
EggPrototypeLifecycleUtil.registerLifecycle(this.dalTableEggPrototypeHook);
|
|
158
|
+
EggPrototypeLifecycleUtil.registerLifecycle(this.transactionPrototypeHook);
|
|
159
|
+
LoadUnitLifecycleUtil.registerLifecycle(this.dalModuleLoadUnitHook);
|
|
160
|
+
}
|
|
161
|
+
async init() {
|
|
162
|
+
await this.initLoaderInstance();
|
|
163
|
+
this.loadUnits = await this.load();
|
|
164
|
+
const instances = [];
|
|
165
|
+
for (const loadUnit of this.loadUnits) {
|
|
166
|
+
const instance = await LoadUnitInstanceFactory.createLoadUnitInstance(loadUnit);
|
|
167
|
+
instances.push(instance);
|
|
168
|
+
}
|
|
169
|
+
this.loadUnitInstances = instances;
|
|
170
|
+
const runnerClass = StandaloneUtil.getMainRunner();
|
|
171
|
+
if (!runnerClass) {
|
|
172
|
+
throw new Error('not found runner class. Do you add @Runner decorator?');
|
|
173
|
+
}
|
|
174
|
+
const proto = PrototypeUtil.getClazzProto(runnerClass);
|
|
175
|
+
if (!proto) {
|
|
176
|
+
throw new Error(`can not get proto for clazz ${runnerClass.name}`);
|
|
177
|
+
}
|
|
178
|
+
this.runnerProto = proto;
|
|
179
|
+
}
|
|
180
|
+
async run(aCtx) {
|
|
181
|
+
const lifecycle = {};
|
|
182
|
+
const ctx = aCtx || new StandaloneContext();
|
|
183
|
+
return await ContextHandler.run(ctx, async () => {
|
|
184
|
+
if (ctx.init) {
|
|
185
|
+
await ctx.init(lifecycle);
|
|
186
|
+
}
|
|
187
|
+
const eggObject = await EggContainerFactory.getOrCreateEggObject(this.runnerProto);
|
|
188
|
+
const runner = eggObject.obj;
|
|
189
|
+
try {
|
|
190
|
+
return await runner.main();
|
|
191
|
+
}
|
|
192
|
+
finally {
|
|
193
|
+
if (ctx.destroy) {
|
|
194
|
+
ctx.destroy(lifecycle).catch((e) => {
|
|
195
|
+
e.message = `[tegg/standalone] destroy tegg context failed: ${e.message}`;
|
|
196
|
+
console.warn(e);
|
|
197
|
+
});
|
|
198
|
+
}
|
|
199
|
+
}
|
|
200
|
+
});
|
|
201
|
+
}
|
|
202
|
+
async destroy() {
|
|
203
|
+
if (this.loadUnitInstances) {
|
|
204
|
+
for (const instance of this.loadUnitInstances) {
|
|
205
|
+
await LoadUnitInstanceFactory.destroyLoadUnitInstance(instance);
|
|
206
|
+
}
|
|
207
|
+
}
|
|
208
|
+
if (this.loadUnits) {
|
|
209
|
+
for (const loadUnit of this.loadUnits) {
|
|
210
|
+
await LoadUnitFactory.destroyLoadUnit(loadUnit);
|
|
211
|
+
}
|
|
212
|
+
}
|
|
213
|
+
if (this.configSourceEggPrototypeHook) {
|
|
214
|
+
LoadUnitLifecycleUtil.deleteLifecycle(this.configSourceEggPrototypeHook);
|
|
215
|
+
}
|
|
216
|
+
if (this.eggPrototypeCrossCutHook) {
|
|
217
|
+
EggPrototypeLifecycleUtil.deleteLifecycle(this.eggPrototypeCrossCutHook);
|
|
218
|
+
}
|
|
219
|
+
if (this.loadUnitAopHook) {
|
|
220
|
+
LoadUnitLifecycleUtil.deleteLifecycle(this.loadUnitAopHook);
|
|
221
|
+
}
|
|
222
|
+
if (this.eggObjectAopHook) {
|
|
223
|
+
EggObjectLifecycleUtil.deleteLifecycle(this.eggObjectAopHook);
|
|
224
|
+
}
|
|
225
|
+
if (this.loadUnitMultiInstanceProtoHook) {
|
|
226
|
+
LoadUnitLifecycleUtil.deleteLifecycle(this.loadUnitMultiInstanceProtoHook);
|
|
227
|
+
}
|
|
228
|
+
if (this.dalTableEggPrototypeHook) {
|
|
229
|
+
EggPrototypeLifecycleUtil.deleteLifecycle(this.dalTableEggPrototypeHook);
|
|
230
|
+
}
|
|
231
|
+
if (this.dalModuleLoadUnitHook) {
|
|
232
|
+
LoadUnitLifecycleUtil.deleteLifecycle(this.dalModuleLoadUnitHook);
|
|
233
|
+
}
|
|
234
|
+
if (this.transactionPrototypeHook) {
|
|
235
|
+
EggPrototypeLifecycleUtil.deleteLifecycle(this.transactionPrototypeHook);
|
|
236
|
+
}
|
|
237
|
+
MysqlDataSourceManager.instance.clear();
|
|
238
|
+
SqlMapManager.instance.clear();
|
|
239
|
+
TableModelManager.instance.clear();
|
|
240
|
+
// clear configNames
|
|
241
|
+
ModuleConfigUtil.setConfigNames(undefined);
|
|
242
|
+
}
|
|
243
|
+
}
|
|
244
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiUnVubmVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL1J1bm5lci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsZ0JBQWdCLEdBSWpCLE1BQU0seUJBQXlCLENBQUM7QUFDakMsT0FBTyxFQUVMLHlCQUF5QixFQUN6QixXQUFXLEVBRVgsZUFBZSxFQUNmLHFCQUFxQixFQUNyQiw4QkFBOEIsR0FDL0IsTUFBTSxpQkFBaUIsQ0FBQztBQUN6QixPQUFPLEVBQ0wsY0FBYyxFQUNkLG1CQUFtQixFQUVuQixzQkFBc0IsRUFFdEIsdUJBQXVCLEVBQ3ZCLHNCQUFzQixHQUN2QixNQUFNLHFCQUFxQixDQUFDO0FBQzdCLE9BQU8sRUFFTCxhQUFhLEVBRWIsYUFBYSxFQUNiLDhCQUE4QixHQUUvQixNQUFNLGFBQWEsQ0FBQztBQUNyQixPQUFPLEVBQUUsY0FBYyxFQUFtQixNQUFNLHdCQUF3QixDQUFDO0FBQ3pFLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ3hELE9BQU8sRUFDTCxpQkFBaUIsRUFDakIsZ0JBQWdCLEVBQ2hCLHdCQUF3QixFQUN4QixlQUFlLEVBQ2YsaUJBQWlCLEdBQ2xCLE1BQU0sb0JBQW9CLENBQUM7QUFDNUIsT0FBTyxFQUNMLHdCQUF3QixFQUN4QixxQkFBcUIsRUFDckIsc0JBQXNCLEVBQ3RCLGFBQWEsRUFDYixpQkFBaUIsRUFDakIsd0JBQXdCLEdBQ3pCLE1BQU0sd0JBQXdCLENBQUM7QUFFaEMsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQ3ZELE9BQU8sRUFBb0Isa0JBQWtCLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSx5QkFBeUIsQ0FBQztBQUN2RyxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUMzRCxPQUFPLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQUN6RSxPQUFPLEVBQUUsd0JB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
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { AbstractEggContext } from '@eggjs/tegg-runtime';
|
|
2
|
+
import { IdenticalUtil } from '@eggjs/lifecycle';
|
|
3
|
+
export class StandaloneContext extends AbstractEggContext {
|
|
4
|
+
id;
|
|
5
|
+
constructor() {
|
|
6
|
+
super();
|
|
7
|
+
this.id = IdenticalUtil.createContextId();
|
|
8
|
+
}
|
|
9
|
+
}
|
|
10
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiU3RhbmRhbG9uZUNvbnRleHQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvU3RhbmRhbG9uZUNvbnRleHQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDekQsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBRWpELE1BQU0sT0FBTyxpQkFBa0IsU0FBUSxrQkFBa0I7SUFDdkQsRUFBRSxDQUFTO0lBRVg7UUFDRSxLQUFLLEVBQUUsQ0FBQztRQUNSLElBQUksQ0FBQyxFQUFFLEdBQUcsYUFBYSxDQUFDLGVBQWUsRUFBRSxDQUFDO0lBQzVDLENBQUM7Q0FDRiJ9
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { AsyncLocalStorage } from 'node:async_hooks';
|
|
2
|
+
import { ContextHandler } from '@eggjs/tegg-runtime';
|
|
3
|
+
export class StandaloneContextHandler {
|
|
4
|
+
static storage = new AsyncLocalStorage();
|
|
5
|
+
static register() {
|
|
6
|
+
ContextHandler.getContextCallback = () => {
|
|
7
|
+
return StandaloneContextHandler.storage.getStore();
|
|
8
|
+
};
|
|
9
|
+
ContextHandler.runInContextCallback = (context, fn) => {
|
|
10
|
+
return StandaloneContextHandler.storage.run(context, fn);
|
|
11
|
+
};
|
|
12
|
+
}
|
|
13
|
+
}
|
|
14
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiU3RhbmRhbG9uZUNvbnRleHRIYW5kbGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL1N0YW5kYWxvbmVDb250ZXh0SGFuZGxlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUVyRCxPQUFPLEVBQUUsY0FBYyxFQUFtQixNQUFNLHFCQUFxQixDQUFDO0FBRXRFLE1BQU0sT0FBTyx3QkFBd0I7SUFDbkMsTUFBTSxDQUFDLE9BQU8sR0FBa0MsSUFBSSxpQkFBaUIsRUFBRSxDQUFDO0lBRXhFLE1BQU0sQ0FBQyxRQUFRO1FBQ2IsY0FBYyxDQUFDLGtCQUFrQixHQUFHLEdBQUcsRUFBRTtZQUN2QyxPQUFPLHdCQUF3QixDQUFDLE9BQU8sQ0FBQyxRQUFRLEVBQUUsQ0FBQztRQUNyRCxDQUFDLENBQUM7UUFFRixjQUFjLENBQUMsb0JBQW9CLEdBQUcsQ0FBQyxPQUFPLEVBQUUsRUFBRSxFQUFFLEVBQUU7WUFDcEQsT0FBTyx3QkFBd0IsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLE9BQU8sRUFBRSxFQUFFLENBQUMsQ0FBQztRQUMzRCxDQUFDLENBQUM7SUFDSixDQUFDIn0=
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { AbstractEggContext } from '@eggjs/tegg-runtime';
|
|
2
|
+
import { IdenticalUtil } from '@eggjs/tegg';
|
|
3
|
+
export class StandaloneContextImpl extends AbstractEggContext {
|
|
4
|
+
id;
|
|
5
|
+
constructor() {
|
|
6
|
+
super();
|
|
7
|
+
this.id = IdenticalUtil.createContextId();
|
|
8
|
+
}
|
|
9
|
+
}
|
|
10
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiU3RhbmRhbG9uZUNvbnRleHRJbXBsLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL1N0YW5kYWxvbmVDb250ZXh0SW1wbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUN6RCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sYUFBYSxDQUFDO0FBRTVDLE1BQU0sT0FBTyxxQkFBc0IsU0FBUSxrQkFBa0I7SUFDbEQsRUFBRSxDQUFTO0lBRXBCO1FBQ0UsS0FBSyxFQUFFLENBQUM7UUFDUixJQUFJLENBQUMsRUFBRSxHQUFHLGFBQWEsQ0FBQyxlQUFlLEVBQUUsQ0FBQztJQUM1QyxDQUFDO0NBQ0YifQ==
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { type EggObject } from '@eggjs/tegg-runtime';
|
|
2
|
+
import { type EggObjectName } from '@eggjs/tegg';
|
|
3
|
+
import type { EggPrototype } from '@eggjs/metadata';
|
|
4
|
+
import { StandaloneInnerObjectProto } from './StandaloneInnerObjectProto.ts';
|
|
5
|
+
export declare class StandaloneInnerObject implements EggObject {
|
|
6
|
+
#private;
|
|
7
|
+
readonly isReady: boolean;
|
|
8
|
+
readonly proto: StandaloneInnerObjectProto;
|
|
9
|
+
readonly name: EggObjectName;
|
|
10
|
+
readonly id: string;
|
|
11
|
+
constructor(name: EggObjectName, proto: StandaloneInnerObjectProto);
|
|
12
|
+
get obj(): object;
|
|
13
|
+
injectProperty(): void;
|
|
14
|
+
static createObject(name: EggObjectName, proto: EggPrototype): Promise<StandaloneInnerObject>;
|
|
15
|
+
}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import { EggObjectFactory } from '@eggjs/tegg-runtime';
|
|
2
|
+
import { IdenticalUtil } from '@eggjs/tegg';
|
|
3
|
+
import { StandaloneInnerObjectProto } from "./StandaloneInnerObjectProto.js";
|
|
4
|
+
export class StandaloneInnerObject {
|
|
5
|
+
isReady = true;
|
|
6
|
+
#obj;
|
|
7
|
+
proto;
|
|
8
|
+
name;
|
|
9
|
+
id;
|
|
10
|
+
constructor(name, proto) {
|
|
11
|
+
this.proto = proto;
|
|
12
|
+
this.name = name;
|
|
13
|
+
this.id = IdenticalUtil.createObjectId(this.proto.id);
|
|
14
|
+
}
|
|
15
|
+
get obj() {
|
|
16
|
+
if (!this.#obj) {
|
|
17
|
+
this.#obj = this.proto.constructEggObject();
|
|
18
|
+
}
|
|
19
|
+
return this.#obj;
|
|
20
|
+
}
|
|
21
|
+
injectProperty() {
|
|
22
|
+
return;
|
|
23
|
+
}
|
|
24
|
+
static async createObject(name, proto) {
|
|
25
|
+
return new StandaloneInnerObject(name, proto);
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
EggObjectFactory.registerEggObjectCreateMethod(StandaloneInnerObjectProto, StandaloneInnerObject.createObject);
|
|
29
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiU3RhbmRhbG9uZUlubmVyT2JqZWN0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL1N0YW5kYWxvbmVJbm5lck9iamVjdC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQWtCLGdCQUFnQixFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDdkUsT0FBTyxFQUFFLGFBQWEsRUFBc0IsTUFBTSxhQUFhLENBQUM7QUFHaEUsT0FBTyxFQUFFLDBCQUEwQixFQUFFLE1BQU0saUNBQWlDLENBQUM7QUFFN0UsTUFBTSxPQUFPLHFCQUFxQjtJQUN2QixPQUFPLEdBQVksSUFBSSxDQUFDO0lBQ2pDLElBQUksQ0FBUztJQUNKLEtBQUssQ0FBNkI7SUFDbEMsSUFBSSxDQUFnQjtJQUNwQixFQUFFLENBQVM7SUFFcEIsWUFBWSxJQUFtQixFQUFFLEtBQWlDO1FBQ2hFLElBQUksQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDO1FBQ25CLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDO1FBQ2pCLElBQUksQ0FBQyxFQUFFLEdBQUcsYUFBYSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0lBQ3hELENBQUM7SUFFRCxJQUFJLEdBQUc7UUFDTCxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO1lBQ2YsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLGtCQUFrQixFQUFFLENBQUM7UUFDOUMsQ0FBQztRQUNELE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQztJQUNuQixDQUFDO0lBRUQsY0FBYztRQUNaLE9BQU87SUFDVCxDQUFDO0lBRUQsTUFBTSxDQUFDLEtBQUssQ0FBQyxZQUFZLENBQUMsSUFBbUIsRUFBRSxLQUFtQjtRQUNoRSxPQUFPLElBQUkscUJBQXFCLENBQUMsSUFBSSxFQUFFLEtBQW1DLENBQUMsQ0FBQztJQUM5RSxDQUFDO0NBQ0Y7QUFFRCxnQkFBZ0IsQ0FBQyw2QkFBNkIsQ0FBQywwQkFBMEIsRUFBRSxxQkFBcUIsQ0FBQyxZQUFZLENBQUMsQ0FBQyJ9
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { AccessLevel, type EggProtoImplClass, type EggPrototypeName, type MetaDataKey, type ObjectInitTypeLike, type QualifierInfo, type Id, type QualifierValue } from '@eggjs/tegg';
|
|
2
|
+
import type { EggPrototype, InjectObjectProto, EggPrototypeLifecycleContext } from '@eggjs/metadata';
|
|
3
|
+
export declare class StandaloneInnerObjectProto implements EggPrototype {
|
|
4
|
+
[key: symbol]: PropertyDescriptor;
|
|
5
|
+
private readonly clazz;
|
|
6
|
+
private readonly qualifiers;
|
|
7
|
+
readonly id: string;
|
|
8
|
+
readonly name: EggPrototypeName;
|
|
9
|
+
readonly initType: ObjectInitTypeLike;
|
|
10
|
+
readonly accessLevel: AccessLevel;
|
|
11
|
+
readonly injectObjects: InjectObjectProto[];
|
|
12
|
+
readonly loadUnitId: Id;
|
|
13
|
+
constructor(id: string, name: EggPrototypeName, clazz: EggProtoImplClass, initType: ObjectInitTypeLike, loadUnitId: Id, qualifiers: QualifierInfo[]);
|
|
14
|
+
verifyQualifiers(qualifiers: QualifierInfo[]): boolean;
|
|
15
|
+
verifyQualifier(qualifier: QualifierInfo): boolean;
|
|
16
|
+
constructEggObject(): object;
|
|
17
|
+
getMetaData<T>(metadataKey: MetaDataKey): T | undefined;
|
|
18
|
+
getQualifier(attribute: string): QualifierValue | undefined;
|
|
19
|
+
static create(ctx: EggPrototypeLifecycleContext): EggPrototype;
|
|
20
|
+
}
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
import { AccessLevel, MetadataUtil, QualifierUtil, IdenticalUtil, } from '@eggjs/tegg';
|
|
2
|
+
export class StandaloneInnerObjectProto {
|
|
3
|
+
clazz;
|
|
4
|
+
qualifiers;
|
|
5
|
+
id;
|
|
6
|
+
name;
|
|
7
|
+
initType;
|
|
8
|
+
accessLevel;
|
|
9
|
+
injectObjects;
|
|
10
|
+
loadUnitId;
|
|
11
|
+
constructor(id, name, clazz, initType, loadUnitId, qualifiers) {
|
|
12
|
+
this.id = id;
|
|
13
|
+
this.clazz = clazz;
|
|
14
|
+
this.name = name;
|
|
15
|
+
this.initType = initType;
|
|
16
|
+
this.accessLevel = AccessLevel.PUBLIC;
|
|
17
|
+
this.injectObjects = [];
|
|
18
|
+
this.loadUnitId = loadUnitId;
|
|
19
|
+
this.qualifiers = qualifiers;
|
|
20
|
+
}
|
|
21
|
+
verifyQualifiers(qualifiers) {
|
|
22
|
+
for (const qualifier of qualifiers) {
|
|
23
|
+
if (!this.verifyQualifier(qualifier)) {
|
|
24
|
+
return false;
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
return true;
|
|
28
|
+
}
|
|
29
|
+
verifyQualifier(qualifier) {
|
|
30
|
+
const selfQualifiers = this.qualifiers.find((t) => t.attribute === qualifier.attribute);
|
|
31
|
+
return selfQualifiers?.value === qualifier.value;
|
|
32
|
+
}
|
|
33
|
+
constructEggObject() {
|
|
34
|
+
return Reflect.apply(this.clazz, null, []);
|
|
35
|
+
}
|
|
36
|
+
getMetaData(metadataKey) {
|
|
37
|
+
return MetadataUtil.getMetaData(metadataKey, this.clazz);
|
|
38
|
+
}
|
|
39
|
+
getQualifier(attribute) {
|
|
40
|
+
return this.qualifiers.find((t) => t.attribute === attribute)?.value;
|
|
41
|
+
}
|
|
42
|
+
static create(ctx) {
|
|
43
|
+
const { clazz, loadUnit } = ctx;
|
|
44
|
+
const name = ctx.prototypeInfo.name;
|
|
45
|
+
const id = IdenticalUtil.createProtoId(loadUnit.id, name);
|
|
46
|
+
const proto = new StandaloneInnerObjectProto(id, name, clazz, ctx.prototypeInfo.initType, loadUnit.id, QualifierUtil.getProtoQualifiers(clazz));
|
|
47
|
+
return proto;
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiU3RhbmRhbG9uZUlubmVyT2JqZWN0UHJvdG8uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvU3RhbmRhbG9uZUlubmVyT2JqZWN0UHJvdG8udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLFdBQVcsRUFJWCxZQUFZLEVBR1osYUFBYSxFQUViLGFBQWEsR0FFZCxNQUFNLGFBQWEsQ0FBQztBQUdyQixNQUFNLE9BQU8sMEJBQTBCO0lBRXBCLEtBQUssQ0FBb0I7SUFDekIsVUFBVSxDQUFrQjtJQUVwQyxFQUFFLENBQVM7SUFDWCxJQUFJLENBQW1CO0lBQ3ZCLFFBQVEsQ0FBcUI7SUFDN0IsV0FBVyxDQUFjO0lBQ3pCLGFBQWEsQ0FBc0I7SUFDbkMsVUFBVSxDQUFLO0lBRXhCLFlBQ0UsRUFBVSxFQUNWLElBQXNCLEVBQ3RCLEtBQXdCLEVBQ3hCLFFBQTRCLEVBQzVCLFVBQWMsRUFDZCxVQUEyQjtRQUUzQixJQUFJLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQztRQUNiLElBQUksQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDO1FBQ25CLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDO1FBQ2pCLElBQUksQ0FBQyxRQUFRLEdBQUcsUUFBUSxDQUFDO1FBQ3pCLElBQUksQ0FBQyxXQUFXLEdBQUcsV0FBVyxDQUFDLE1BQU0sQ0FBQztRQUN0QyxJQUFJLENBQUMsYUFBYSxHQUFHLEVBQUUsQ0FBQztRQUN4QixJQUFJLENBQUMsVUFBVSxHQUFHLFVBQVUsQ0FBQztRQUM3QixJQUFJLENBQUMsVUFBVSxHQUFHLFVBQVUsQ0FBQztJQUMvQixDQUFDO0lBRUQsZ0JBQWdCLENBQUMsVUFBMkI7UUFDMUMsS0FBSyxNQUFNLFNBQVMsSUFBSSxVQUFVLEVBQUUsQ0FBQztZQUNuQyxJQUFJLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxTQUFTLENBQUMsRUFBRSxDQUFDO2dCQUNyQyxPQUFPLEtBQUssQ0FBQztZQUNmLENBQUM7UUFDSCxDQUFDO1FBQ0QsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0lBRUQsZUFBZSxDQUFDLFNBQXdCO1FBQ3RDLE1BQU0sY0FBYyxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsU0FBUyxLQUFLLFNBQVMsQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUN4RixPQUFPLGNBQWMsRUFBRSxLQUFLLEtBQUssU0FBUyxDQUFDLEtBQUssQ0FBQztJQUNuRCxDQUFDO0lBRUQsa0JBQWtCO1FBQ2hCLE9BQU8sT0FBTyxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLElBQUksRUFBRSxFQUFFLENBQUMsQ0FBQztJQUM3QyxDQUFDO0lBRUQsV0FBVyxDQUFJLFdBQXdCO1FBQ3JDLE9BQU8sWUFBWSxDQUFDLFdBQVcsQ0FBQyxXQUFXLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQzNELENBQUM7SUFFRCxZQUFZLENBQUMsU0FBaUI7UUFDNUIsT0FBTyxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLFNBQVMsS0FBSyxTQUFTLENBQUMsRUFBRSxLQUFLLENBQUM7SUFDdkUsQ0FBQztJQUVELE1BQU0sQ0FBQyxNQUFNLENBQUMsR0FBaUM7UUFDN0MsTUFBTSxFQUFFLEtBQUssRUFBRSxRQUFRLEVBQUUsR0FBRyxHQUFHLENBQUM7UUFDaEMsTUFBTSxJQUFJLEdBQUcsR0FBRyxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUM7UUFDcEMsTUFBTSxFQUFFLEdBQUcsYUFBYSxDQUFDLGFBQWEsQ0FBQyxRQUFRLENBQUMsRUFBRSxFQUFFLElBQUksQ0FBQyxDQUFDO1FBQzFELE1BQU0sS0FBSyxHQUFHLElBQUksMEJBQTBCLENBQzFDLEVBQUUsRUFDRixJQUFJLEVBQ0osS0FBSyxFQUNMLEdBQUcsQ0FBQyxhQUFhLENBQUMsUUFBUSxFQUMxQixRQUFRLENBQUMsRUFBRSxFQUNYLGFBQWEsQ0FBQyxrQkFBa0IsQ0FBQyxLQUFLLENBQUMsQ0FDeEMsQ0FBQztRQUNGLE9BQU8sS0FBSyxDQUFDO0lBQ2YsQ0FBQztDQUNGIn0=
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import { type EggPrototype, type LoadUnit } from '@eggjs/metadata';
|
|
2
|
+
import { type QualifierInfo } from '@eggjs/tegg';
|
|
3
|
+
export declare const StandaloneLoadUnitType = "StandaloneLoadUnitType";
|
|
4
|
+
export interface InnerObject {
|
|
5
|
+
obj: object;
|
|
6
|
+
qualifiers?: QualifierInfo[];
|
|
7
|
+
}
|
|
8
|
+
export declare class StandaloneLoadUnit implements LoadUnit {
|
|
9
|
+
readonly id: string;
|
|
10
|
+
readonly name: string;
|
|
11
|
+
readonly unitPath: string;
|
|
12
|
+
readonly type: string;
|
|
13
|
+
private innerObject;
|
|
14
|
+
private protoMap;
|
|
15
|
+
constructor(innerObject: Record<string, InnerObject[]>);
|
|
16
|
+
init(): Promise<void>;
|
|
17
|
+
containPrototype(proto: EggPrototype): boolean;
|
|
18
|
+
getEggPrototype(name: string, qualifiers: QualifierInfo[]): EggPrototype[];
|
|
19
|
+
registerEggPrototype(proto: EggPrototype): void;
|
|
20
|
+
deletePrototype(proto: EggPrototype): void;
|
|
21
|
+
destroy(): Promise<void>;
|
|
22
|
+
iterateEggPrototype(): IterableIterator<EggPrototype>;
|
|
23
|
+
}
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
import { EggPrototypeFactory } from '@eggjs/metadata';
|
|
2
|
+
import { ObjectInitType } from '@eggjs/tegg';
|
|
3
|
+
import { MapUtil } from '@eggjs/tegg-common-util';
|
|
4
|
+
import { IdenticalUtil } from '@eggjs/lifecycle';
|
|
5
|
+
import { StandaloneInnerObjectProto } from "./StandaloneInnerObjectProto.js";
|
|
6
|
+
export const StandaloneLoadUnitType = 'StandaloneLoadUnitType';
|
|
7
|
+
export class StandaloneLoadUnit {
|
|
8
|
+
id = 'StandaloneLoadUnit';
|
|
9
|
+
name = 'StandaloneLoadUnit';
|
|
10
|
+
unitPath = 'MockStandaloneLoadUnitPath';
|
|
11
|
+
type = StandaloneLoadUnitType;
|
|
12
|
+
innerObject;
|
|
13
|
+
protoMap = new Map();
|
|
14
|
+
constructor(innerObject) {
|
|
15
|
+
this.innerObject = innerObject;
|
|
16
|
+
}
|
|
17
|
+
async init() {
|
|
18
|
+
for (const [name, objs] of Object.entries(this.innerObject)) {
|
|
19
|
+
for (const { obj, qualifiers } of objs) {
|
|
20
|
+
const proto = new StandaloneInnerObjectProto(IdenticalUtil.createProtoId(this.id, name), name, (() => obj), ObjectInitType.SINGLETON, this.id, qualifiers || []);
|
|
21
|
+
EggPrototypeFactory.instance.registerPrototype(proto, this);
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
containPrototype(proto) {
|
|
26
|
+
return !!this.protoMap.get(proto.name)?.find((t) => t === proto);
|
|
27
|
+
}
|
|
28
|
+
getEggPrototype(name, qualifiers) {
|
|
29
|
+
const protos = this.protoMap.get(name);
|
|
30
|
+
return protos?.filter((proto) => proto.verifyQualifiers(qualifiers)) || [];
|
|
31
|
+
}
|
|
32
|
+
registerEggPrototype(proto) {
|
|
33
|
+
const protoList = MapUtil.getOrStore(this.protoMap, proto.name, []);
|
|
34
|
+
protoList.push(proto);
|
|
35
|
+
}
|
|
36
|
+
deletePrototype(proto) {
|
|
37
|
+
const protos = this.protoMap.get(proto.name);
|
|
38
|
+
if (protos) {
|
|
39
|
+
const index = protos.indexOf(proto);
|
|
40
|
+
if (index !== -1) {
|
|
41
|
+
protos.splice(index, 1);
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
async destroy() {
|
|
46
|
+
for (const namedProtoMap of this.protoMap.values()) {
|
|
47
|
+
for (const proto of namedProtoMap.values()) {
|
|
48
|
+
EggPrototypeFactory.instance.deletePrototype(proto, this);
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
this.protoMap.clear();
|
|
52
|
+
}
|
|
53
|
+
iterateEggPrototype() {
|
|
54
|
+
const protos = Array.from(this.protoMap.values()).reduce((p, c) => {
|
|
55
|
+
p = p.concat(c);
|
|
56
|
+
return p;
|
|
57
|
+
}, []);
|
|
58
|
+
return protos.values();
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiU3RhbmRhbG9uZUxvYWRVbml0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL1N0YW5kYWxvbmVMb2FkVW5pdC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQXFCLG1CQUFtQixFQUFpQixNQUFNLGlCQUFpQixDQUFDO0FBQ3hGLE9BQU8sRUFBeUIsY0FBYyxFQUFzQixNQUFNLGFBQWEsQ0FBQztBQUN4RixPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0seUJBQXlCLENBQUM7QUFDbEQsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBRWpELE9BQU8sRUFBRSwwQkFBMEIsRUFBRSxNQUFNLGlDQUFpQyxDQUFDO0FBRTdFLE1BQU0sQ0FBQyxNQUFNLHNCQUFzQixHQUFHLHdCQUF3QixDQUFDO0FBTy9ELE1BQU0sT0FBTyxrQkFBa0I7SUFDcEIsRUFBRSxHQUFXLG9CQUFvQixDQUFDO0lBQ2xDLElBQUksR0FBVyxvQkFBb0IsQ0FBQztJQUNwQyxRQUFRLEdBQVcsNEJBQTRCLENBQUM7SUFDaEQsSUFBSSxHQUFXLHNCQUFzQixDQUFDO0lBRXZDLFdBQVcsQ0FBZ0M7SUFDM0MsUUFBUSxHQUEwQyxJQUFJLEdBQUcsRUFBRSxDQUFDO0lBRXBFLFlBQVksV0FBMEM7UUFDcEQsSUFBSSxDQUFDLFdBQVcsR0FBRyxXQUFXLENBQUM7SUFDakMsQ0FBQztJQUVELEtBQUssQ0FBQyxJQUFJO1FBQ1IsS0FBSyxNQUFNLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxJQUFJLE1BQU0sQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxFQUFFLENBQUM7WUFDNUQsS0FBSyxNQUFNLEVBQUUsR0FBRyxFQUFFLFVBQVUsRUFBRSxJQUFJLElBQUksRUFBRSxDQUFDO2dCQUN2QyxNQUFNLEtBQUssR0FBRyxJQUFJLDBCQUEwQixDQUMxQyxhQUFhLENBQUMsYUFBYSxDQUFDLElBQUksQ0FBQyxFQUFFLEVBQUUsSUFBSSxDQUFDLEVBQzFDLElBQUksRUFDSixDQUFDLEdBQUcsRUFBRSxDQUFDLEdBQUcsQ0FBUSxFQUNsQixjQUFjLENBQUMsU0FBUyxFQUN4QixJQUFJLENBQUMsRUFBRSxFQUNQLFVBQVUsSUFBSSxFQUFFLENBQ2pCLENBQUM7Z0JBQ0YsbUJBQW1CLENBQUMsUUFBUSxDQUFDLGlCQUFpQixDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsQ0FBQztZQUM5RCxDQUFDO1FBQ0gsQ0FBQztJQUNILENBQUM7SUFFRCxnQkFBZ0IsQ0FBQyxLQUFtQjtRQUNsQyxPQUFPLENBQUMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDLEtBQUssS0FBSyxDQUFDLENBQUM7SUFDbkUsQ0FBQztJQUVELGVBQWUsQ0FBQyxJQUFZLEVBQUUsVUFBMkI7UUFDdkQsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDdkMsT0FBTyxNQUFNLEVBQUUsTUFBTSxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxLQUFLLENBQUMsZ0JBQWdCLENBQUMsVUFBVSxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUM7SUFDN0UsQ0FBQztJQUVELG9CQUFvQixDQUFDLEtBQW1CO1FBQ3RDLE1BQU0sU0FBUyxHQUFHLE9BQU8sQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxLQUFLLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBQ3BFLFNBQVMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDeEIsQ0FBQztJQUVELGVBQWUsQ0FBQyxLQUFtQjtRQUNqQyxNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDN0MsSUFBSSxNQUFNLEVBQUUsQ0FBQztZQUNYLE1BQU0sS0FBSyxHQUFHLE1BQU0sQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUM7WUFDcEMsSUFBSSxLQUFLLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQztnQkFDakIsTUFBTSxDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLENBQUM7WUFDMUIsQ0FBQztRQUNILENBQUM7SUFDSCxDQUFDO0lBRUQsS0FBSyxDQUFDLE9BQU87UUFDWCxLQUFLLE1BQU0sYUFBYSxJQUFJLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBQztZQUNuRCxLQUFLLE1BQU0sS0FBSyxJQUFJLGFBQWEsQ0FBQyxNQUFNLEVBQUUsRUFBRSxDQUFDO2dCQUMzQyxtQkFBbUIsQ0FBQyxRQUFRLENBQUMsZUFBZSxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsQ0FBQztZQUM1RCxDQUFDO1FBQ0gsQ0FBQztRQUNELElBQUksQ0FBQyxRQUFRLENBQUMsS0FBSyxFQUFFLENBQUM7SUFDeEIsQ0FBQztJQUVELG1CQUFtQjtRQUNqQixNQUFNLE1BQU0sR0FBbUIsS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFO1lBQ2hGLENBQUMsR0FBRyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ2hCLE9BQU8sQ0FBQyxDQUFDO1FBQ1gsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBQ1AsT0FBTyxNQUFNLENBQUMsTUFBTSxFQUFFLENBQUM7SUFDekIsQ0FBQztDQUNGIn0=
|
package/dist/index.d.ts
ADDED
package/dist/index.js
ADDED
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
export * from "./EggModuleLoader.js";
|
|
2
|
+
export * from "./Runner.js";
|
|
3
|
+
export * from "./main.js";
|
|
4
|
+
export * from "./StandaloneInnerObjectProto.js";
|
|
5
|
+
export * from "./StandaloneContext.js";
|
|
6
|
+
export * from "./StandaloneInnerObject.js";
|
|
7
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsY0FBYyxzQkFBc0IsQ0FBQztBQUNyQyxjQUFjLGFBQWEsQ0FBQztBQUM1QixjQUFjLFdBQVcsQ0FBQztBQUMxQixjQUFjLGlDQUFpQyxDQUFDO0FBQ2hELGNBQWMsd0JBQXdCLENBQUM7QUFDdkMsY0FBYyw0QkFBNEIsQ0FBQyJ9
|
package/dist/main.d.ts
ADDED
package/dist/main.js
ADDED
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import { Runner } from "./Runner.js";
|
|
2
|
+
export async function preLoad(cwd, dependencies) {
|
|
3
|
+
try {
|
|
4
|
+
await Runner.preLoad(cwd, dependencies);
|
|
5
|
+
}
|
|
6
|
+
catch (e) {
|
|
7
|
+
if (e instanceof Error) {
|
|
8
|
+
e.message = `[tegg/standalone] bootstrap standalone preLoad failed: ${e.message}`;
|
|
9
|
+
}
|
|
10
|
+
throw e;
|
|
11
|
+
}
|
|
12
|
+
}
|
|
13
|
+
export async function main(cwd, options) {
|
|
14
|
+
const runner = new Runner(cwd, options);
|
|
15
|
+
try {
|
|
16
|
+
await runner.init();
|
|
17
|
+
}
|
|
18
|
+
catch (e) {
|
|
19
|
+
if (e instanceof Error) {
|
|
20
|
+
e.message = `[tegg/standalone] bootstrap tegg failed: ${e.message}`;
|
|
21
|
+
}
|
|
22
|
+
throw e;
|
|
23
|
+
}
|
|
24
|
+
try {
|
|
25
|
+
return await runner.run();
|
|
26
|
+
}
|
|
27
|
+
finally {
|
|
28
|
+
runner.destroy().catch((e) => {
|
|
29
|
+
e.message = `[tegg/standalone] destroy tegg failed: ${e.message}`;
|
|
30
|
+
console.warn(e);
|
|
31
|
+
});
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWFpbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9tYWluLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxNQUFNLEVBQXNCLE1BQU0sYUFBYSxDQUFDO0FBRXpELE1BQU0sQ0FBQyxLQUFLLFVBQVUsT0FBTyxDQUFDLEdBQVcsRUFBRSxZQUE0QztJQUNyRixJQUFJLENBQUM7UUFDSCxNQUFNLE1BQU0sQ0FBQyxPQUFPLENBQUMsR0FBRyxFQUFFLFlBQVksQ0FBQyxDQUFDO0lBQzFDLENBQUM7SUFBQyxPQUFPLENBQUMsRUFBRSxDQUFDO1FBQ1gsSUFBSSxDQUFDLFlBQVksS0FBSyxFQUFFLENBQUM7WUFDdkIsQ0FBQyxDQUFDLE9BQU8sR0FBRywwREFBMEQsQ0FBQyxDQUFDLE9BQU8sRUFBRSxDQUFDO1FBQ3BGLENBQUM7UUFDRCxNQUFNLENBQUMsQ0FBQztJQUNWLENBQUM7QUFDSCxDQUFDO0FBRUQsTUFBTSxDQUFDLEtBQUssVUFBVSxJQUFJLENBQVcsR0FBVyxFQUFFLE9BQXVCO0lBQ3ZFLE1BQU0sTUFBTSxHQUFHLElBQUksTUFBTSxDQUFDLEdBQUcsRUFBRSxPQUFPLENBQUMsQ0FBQztJQUN4QyxJQUFJLENBQUM7UUFDSCxNQUFNLE1BQU0sQ0FBQyxJQUFJLEVBQUUsQ0FBQztJQUN0QixDQUFDO0lBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQztRQUNYLElBQUksQ0FBQyxZQUFZLEtBQUssRUFBRSxDQUFDO1lBQ3ZCLENBQUMsQ0FBQyxPQUFPLEdBQUcsNENBQTRDLENBQUMsQ0FBQyxPQUFPLEVBQUUsQ0FBQztRQUN0RSxDQUFDO1FBQ0QsTUFBTSxDQUFDLENBQUM7SUFDVixDQUFDO0lBQ0QsSUFBSSxDQUFDO1FBQ0gsT0FBTyxNQUFNLE1BQU0sQ0FBQyxHQUFHLEVBQUssQ0FBQztJQUMvQixDQUFDO1lBQVMsQ0FBQztRQUNULE1BQU0sQ0FBQyxPQUFPLEVBQUUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRTtZQUMzQixDQUFDLENBQUMsT0FBTyxHQUFHLDBDQUEwQyxDQUFDLENBQUMsT0FBTyxFQUFFLENBQUM7WUFDbEUsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNsQixDQUFDLENBQUMsQ0FBQztJQUNMLENBQUM7QUFDSCxDQUFDIn0=
|
package/package.json
ADDED
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@eggjs/standalone",
|
|
3
|
+
"description": "tegg standalone",
|
|
4
|
+
"version": "4.0.0-beta.0",
|
|
5
|
+
"keywords": [
|
|
6
|
+
"egg",
|
|
7
|
+
"typescript",
|
|
8
|
+
"background",
|
|
9
|
+
"async",
|
|
10
|
+
"tegg",
|
|
11
|
+
"standalone"
|
|
12
|
+
],
|
|
13
|
+
"files": [
|
|
14
|
+
"dist"
|
|
15
|
+
],
|
|
16
|
+
"type": "module",
|
|
17
|
+
"exports": {
|
|
18
|
+
".": "./dist/index.js",
|
|
19
|
+
"./package.json": "./package.json"
|
|
20
|
+
},
|
|
21
|
+
"homepage": "https://github.com/eggjs/egg/tree/next/tegg/standalone/standalone",
|
|
22
|
+
"bugs": {
|
|
23
|
+
"url": "https://github.com/eggjs/egg/issues"
|
|
24
|
+
},
|
|
25
|
+
"repository": {
|
|
26
|
+
"type": "git",
|
|
27
|
+
"url": "git@github.com:eggjs/egg.git",
|
|
28
|
+
"directory": "tegg/standalone/standalone"
|
|
29
|
+
},
|
|
30
|
+
"engines": {
|
|
31
|
+
"node": ">=22.18.0"
|
|
32
|
+
},
|
|
33
|
+
"author": "killagu <killa123@126.com>",
|
|
34
|
+
"license": "MIT",
|
|
35
|
+
"dependencies": {
|
|
36
|
+
"@eggjs/tegg": "4.0.0-beta.29",
|
|
37
|
+
"@eggjs/aop-runtime": "4.0.0-beta.29",
|
|
38
|
+
"@eggjs/lifecycle": "4.0.0-beta.29",
|
|
39
|
+
"@eggjs/tegg-common-util": "4.0.0-beta.29",
|
|
40
|
+
"@eggjs/tegg-dal-plugin": "4.0.0-beta.29",
|
|
41
|
+
"@eggjs/tegg-loader": "4.0.0-beta.29",
|
|
42
|
+
"@eggjs/metadata": "4.0.0-beta.29",
|
|
43
|
+
"@eggjs/tegg-runtime": "4.0.0-beta.29"
|
|
44
|
+
},
|
|
45
|
+
"publishConfig": {
|
|
46
|
+
"access": "public"
|
|
47
|
+
},
|
|
48
|
+
"devDependencies": {
|
|
49
|
+
"@types/node": "^24.9.1",
|
|
50
|
+
"mm": "^4.0.2",
|
|
51
|
+
"typescript": "^5.9.3",
|
|
52
|
+
"tsdown": "0.15.9",
|
|
53
|
+
"unplugin-unused": "^0.5.4",
|
|
54
|
+
"@eggjs/bin": "8.0.0-beta.29",
|
|
55
|
+
"@eggjs/core-decorator": "4.0.0-beta.29",
|
|
56
|
+
"@eggjs/dal-decorator": "4.0.0-beta.29",
|
|
57
|
+
"@eggjs/tegg-ajv-plugin": "4.0.0-beta.29",
|
|
58
|
+
"@eggjs/utils": "5.0.0-beta.29"
|
|
59
|
+
},
|
|
60
|
+
"main": "./dist/index.js",
|
|
61
|
+
"module": "./dist/index.js",
|
|
62
|
+
"types": "./dist/index.d.ts",
|
|
63
|
+
"scripts": {
|
|
64
|
+
"clean": "tsc -b --clean && rimraf dist *.tsbuildinfo",
|
|
65
|
+
"build": "tsdown && npm run clean && tsc -p tsconfig.build.json",
|
|
66
|
+
"typecheck": "tsc --noEmit"
|
|
67
|
+
}
|
|
68
|
+
}
|