@eggjs/core 7.0.0-beta.19 → 7.0.0-beta.21
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/base_context_class.d.ts +10 -15
- package/dist/base_context_class.js +36 -39
- package/dist/egg.d.ts +241 -243
- package/dist/egg.js +383 -353
- package/dist/index.d.ts +12 -12
- package/dist/index.js +12 -12
- package/dist/lifecycle.d.ts +74 -80
- package/dist/lifecycle.js +306 -280
- package/dist/loader/context_loader.d.ts +25 -29
- package/dist/loader/context_loader.js +99 -76
- package/dist/loader/egg_loader.d.ts +365 -371
- package/dist/loader/egg_loader.js +1551 -1163
- package/dist/loader/file_loader.d.ts +92 -96
- package/dist/loader/file_loader.js +241 -190
- package/dist/singleton.d.ts +27 -31
- package/dist/singleton.js +117 -107
- package/dist/types.d.ts +49 -52
- package/dist/types.js +2 -0
- package/dist/utils/index.d.ts +14 -16
- package/dist/utils/index.js +107 -97
- package/dist/utils/sequencify.d.ts +10 -13
- package/dist/utils/sequencify.js +58 -44
- package/dist/utils/timing.d.ts +19 -22
- package/dist/utils/timing.js +92 -85
- package/package.json +9 -9
|
@@ -1,24 +1,22 @@
|
|
|
1
|
-
import { FileLoader, FileLoaderOptions } from
|
|
2
|
-
import { Context } from
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
ctx: Context;
|
|
7
|
-
properties: any;
|
|
1
|
+
import { FileLoader, type FileLoaderOptions } from './file_loader.ts';
|
|
2
|
+
import type { Context } from '../egg.ts';
|
|
3
|
+
export interface ClassLoaderOptions {
|
|
4
|
+
ctx: Context;
|
|
5
|
+
properties: any;
|
|
8
6
|
}
|
|
9
|
-
declare class ClassLoader {
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
7
|
+
export declare class ClassLoader {
|
|
8
|
+
#private;
|
|
9
|
+
readonly _cache: Map<any, any>;
|
|
10
|
+
_ctx: Context;
|
|
11
|
+
constructor(options: ClassLoaderOptions);
|
|
14
12
|
}
|
|
15
|
-
interface ContextLoaderOptions extends Omit<FileLoaderOptions, 'target'> {
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
13
|
+
export interface ContextLoaderOptions extends Omit<FileLoaderOptions, 'target'> {
|
|
14
|
+
/** required inject */
|
|
15
|
+
inject: Record<string, any>;
|
|
16
|
+
/** property name defined to target */
|
|
17
|
+
property: string | symbol;
|
|
18
|
+
/** determine the field name of inject object. */
|
|
19
|
+
fieldClass?: string;
|
|
22
20
|
}
|
|
23
21
|
/**
|
|
24
22
|
* Same as {@link FileLoader}, but it will attach file to `inject[fieldClass]`.
|
|
@@ -26,14 +24,12 @@ interface ContextLoaderOptions extends Omit<FileLoaderOptions, 'target'> {
|
|
|
26
24
|
* @augments FileLoader
|
|
27
25
|
* @since 1.0.0
|
|
28
26
|
*/
|
|
29
|
-
declare class ContextLoader extends FileLoader {
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
27
|
+
export declare class ContextLoader extends FileLoader {
|
|
28
|
+
#private;
|
|
29
|
+
/**
|
|
30
|
+
* @class
|
|
31
|
+
* @param {Object} options - options same as {@link FileLoader}
|
|
32
|
+
* @param {String} options.fieldClass - determine the field name of inject object.
|
|
33
|
+
*/
|
|
34
|
+
constructor(options: ContextLoaderOptions);
|
|
37
35
|
}
|
|
38
|
-
//#endregion
|
|
39
|
-
export { ClassLoader, ClassLoaderOptions, ContextLoader, ContextLoaderOptions };
|
|
@@ -1,79 +1,102 @@
|
|
|
1
|
-
import
|
|
2
|
-
import
|
|
3
|
-
import {
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
};
|
|
1
|
+
import assert from 'node:assert';
|
|
2
|
+
import { isClass, isPrimitive } from 'is-type-of';
|
|
3
|
+
import { FileLoader, EXPORTS } from "./file_loader.js";
|
|
4
|
+
const CLASS_LOADER = Symbol('classLoader');
|
|
5
|
+
export class ClassLoader {
|
|
6
|
+
_cache = new Map();
|
|
7
|
+
_ctx;
|
|
8
|
+
constructor(options) {
|
|
9
|
+
assert(options.ctx, 'options.ctx is required');
|
|
10
|
+
const properties = options.properties;
|
|
11
|
+
this._ctx = options.ctx;
|
|
12
|
+
for (const property in properties) {
|
|
13
|
+
this.#defineProperty(property, properties[property]);
|
|
14
|
+
}
|
|
15
|
+
}
|
|
16
|
+
#defineProperty(property, values) {
|
|
17
|
+
Object.defineProperty(this, property, {
|
|
18
|
+
get() {
|
|
19
|
+
let instance = this._cache.get(property);
|
|
20
|
+
if (!instance) {
|
|
21
|
+
instance = getInstance(values, this._ctx);
|
|
22
|
+
this._cache.set(property, instance);
|
|
23
|
+
}
|
|
24
|
+
return instance;
|
|
25
|
+
},
|
|
26
|
+
});
|
|
27
|
+
}
|
|
28
|
+
}
|
|
27
29
|
/**
|
|
28
|
-
* Same as {@link FileLoader}, but it will attach file to `inject[fieldClass]`.
|
|
29
|
-
* The exports will be lazy loaded, such as `ctx.group.repository`.
|
|
30
|
-
* @augments FileLoader
|
|
31
|
-
* @since 1.0.0
|
|
32
|
-
*/
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
}
|
|
30
|
+
* Same as {@link FileLoader}, but it will attach file to `inject[fieldClass]`.
|
|
31
|
+
* The exports will be lazy loaded, such as `ctx.group.repository`.
|
|
32
|
+
* @augments FileLoader
|
|
33
|
+
* @since 1.0.0
|
|
34
|
+
*/
|
|
35
|
+
export class ContextLoader extends FileLoader {
|
|
36
|
+
#inject;
|
|
37
|
+
/**
|
|
38
|
+
* @class
|
|
39
|
+
* @param {Object} options - options same as {@link FileLoader}
|
|
40
|
+
* @param {String} options.fieldClass - determine the field name of inject object.
|
|
41
|
+
*/
|
|
42
|
+
constructor(options) {
|
|
43
|
+
assert(options.property, 'options.property is required');
|
|
44
|
+
assert(options.inject, 'options.inject is required');
|
|
45
|
+
const target = {};
|
|
46
|
+
if (options.fieldClass) {
|
|
47
|
+
options.inject[options.fieldClass] = target;
|
|
48
|
+
}
|
|
49
|
+
super({
|
|
50
|
+
...options,
|
|
51
|
+
target,
|
|
52
|
+
});
|
|
53
|
+
this.#inject = this.options.inject;
|
|
54
|
+
const app = this.#inject;
|
|
55
|
+
const property = options.property;
|
|
56
|
+
// define ctx.service
|
|
57
|
+
Object.defineProperty(app.context, property, {
|
|
58
|
+
get() {
|
|
59
|
+
// oxlint-disable-next-line unicorn/no-this-assignment, typescript/no-this-alias
|
|
60
|
+
const ctx = this;
|
|
61
|
+
// distinguish property cache,
|
|
62
|
+
// cache's lifecycle is the same with this context instance
|
|
63
|
+
// e.x. ctx.service1 and ctx.service2 have different cache
|
|
64
|
+
if (!ctx[CLASS_LOADER]) {
|
|
65
|
+
ctx[CLASS_LOADER] = new Map();
|
|
66
|
+
}
|
|
67
|
+
const classLoader = ctx[CLASS_LOADER];
|
|
68
|
+
let instance = classLoader.get(property);
|
|
69
|
+
if (!instance) {
|
|
70
|
+
instance = getInstance(target, ctx);
|
|
71
|
+
classLoader.set(property, instance);
|
|
72
|
+
}
|
|
73
|
+
return instance;
|
|
74
|
+
},
|
|
75
|
+
});
|
|
76
|
+
}
|
|
77
|
+
}
|
|
65
78
|
function getInstance(values, ctx) {
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
79
|
+
// it's a directory when it has no exports
|
|
80
|
+
// then use ClassLoader
|
|
81
|
+
const Class = values[EXPORTS] ? values : null;
|
|
82
|
+
let instance;
|
|
83
|
+
if (Class) {
|
|
84
|
+
if (isClass(Class)) {
|
|
85
|
+
instance = new Class(ctx);
|
|
86
|
+
}
|
|
87
|
+
else {
|
|
88
|
+
// it's just an object
|
|
89
|
+
instance = Class;
|
|
90
|
+
}
|
|
91
|
+
// Can't set property to primitive, so check again
|
|
92
|
+
// e.x. module.exports = 1;
|
|
93
|
+
}
|
|
94
|
+
else if (isPrimitive(values)) {
|
|
95
|
+
instance = values;
|
|
96
|
+
}
|
|
97
|
+
else {
|
|
98
|
+
instance = new ClassLoader({ ctx, properties: values });
|
|
99
|
+
}
|
|
100
|
+
return instance;
|
|
76
101
|
}
|
|
77
|
-
|
|
78
|
-
//#endregion
|
|
79
|
-
export { ClassLoader, ContextLoader };
|
|
102
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29udGV4dF9sb2FkZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvbG9hZGVyL2NvbnRleHRfbG9hZGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sTUFBTSxNQUFNLGFBQWEsQ0FBQztBQUVqQyxPQUFPLEVBQUUsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLFlBQVksQ0FBQztBQUVsRCxPQUFPLEVBQUUsVUFBVSxFQUFFLE9BQU8sRUFBMEIsTUFBTSxrQkFBa0IsQ0FBQztBQUcvRSxNQUFNLFlBQVksR0FBRyxNQUFNLENBQUMsYUFBYSxDQUFDLENBQUM7QUFPM0MsTUFBTSxPQUFPLFdBQVc7SUFDYixNQUFNLEdBQUcsSUFBSSxHQUFHLEVBQUUsQ0FBQztJQUM1QixJQUFJLENBQVU7SUFFZCxZQUFZLE9BQTJCO1FBQ3JDLE1BQU0sQ0FBQyxPQUFPLENBQUMsR0FBRyxFQUFFLHlCQUF5QixDQUFDLENBQUM7UUFDL0MsTUFBTSxVQUFVLEdBQUcsT0FBTyxDQUFDLFVBQVUsQ0FBQztRQUN0QyxJQUFJLENBQUMsSUFBSSxHQUFHLE9BQU8sQ0FBQyxHQUFHLENBQUM7UUFFeEIsS0FBSyxNQUFNLFFBQVEsSUFBSSxVQUFVLEVBQUUsQ0FBQztZQUNsQyxJQUFJLENBQUMsZUFBZSxDQUFDLFFBQVEsRUFBRSxVQUFVLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQztRQUN2RCxDQUFDO0lBQ0gsQ0FBQztJQUVELGVBQWUsQ0FBQyxRQUFnQixFQUFFLE1BQVc7UUFDM0MsTUFBTSxDQUFDLGNBQWMsQ0FBQyxJQUFJLEVBQUUsUUFBUSxFQUFFO1lBQ3BDLEdBQUc7Z0JBQ0QsSUFBSSxRQUFRLEdBQVEsSUFBSSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLENBQUM7Z0JBQzlDLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztvQkFDZCxRQUFRLEdBQUcsV0FBVyxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsSUFB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
|