@eggjs/core 7.0.0-beta.35 → 7.0.0-beta.36

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.
@@ -1,35 +1,39 @@
1
- import type { Context } from '../egg.ts';
2
- import { FileLoader, type FileLoaderOptions } from './file_loader.ts';
3
- export interface ClassLoaderOptions {
4
- ctx: Context;
5
- properties: any;
1
+ import { FileLoader, FileLoaderOptions } from "./file_loader.js";
2
+ import { Context } from "../egg.js";
3
+
4
+ //#region src/loader/context_loader.d.ts
5
+ interface ClassLoaderOptions {
6
+ ctx: Context;
7
+ properties: any;
6
8
  }
7
- export declare class ClassLoader {
8
- #private;
9
- readonly _cache: Map<string, any>;
10
- _ctx: Context;
11
- constructor(options: ClassLoaderOptions);
9
+ declare class ClassLoader {
10
+ #private;
11
+ readonly _cache: Map<string, any>;
12
+ _ctx: Context;
13
+ constructor(options: ClassLoaderOptions);
12
14
  }
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;
15
+ interface ContextLoaderOptions extends Omit<FileLoaderOptions, "target"> {
16
+ /** required inject */
17
+ inject: Record<string, any>;
18
+ /** property name defined to target */
19
+ property: string | symbol;
20
+ /** determine the field name of inject object. */
21
+ fieldClass?: string;
20
22
  }
21
23
  /**
22
- * Same as {@link FileLoader}, but it will attach file to `inject[fieldClass]`.
23
- * The exports will be lazy loaded, such as `ctx.group.repository`.
24
- * @augments FileLoader
25
- * @since 1.0.0
26
- */
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);
24
+ * Same as {@link FileLoader}, but it will attach file to `inject[fieldClass]`.
25
+ * The exports will be lazy loaded, such as `ctx.group.repository`.
26
+ * @augments FileLoader
27
+ * @since 1.0.0
28
+ */
29
+ declare class ContextLoader extends FileLoader {
30
+ #private;
31
+ /**
32
+ * @class
33
+ * @param {Object} options - options same as {@link FileLoader}
34
+ * @param {String} options.fieldClass - determine the field name of inject object.
35
+ */
36
+ constructor(options: ContextLoaderOptions);
35
37
  }
38
+ //#endregion
39
+ export { ClassLoader, ClassLoaderOptions, ContextLoader, ContextLoaderOptions };
@@ -1,102 +1,79 @@
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
- }
1
+ import { EXPORTS, FileLoader } from "./file_loader.js";
2
+ import assert from "node:assert";
3
+ import { isClass, isPrimitive } from "is-type-of";
4
+
5
+ //#region src/loader/context_loader.ts
6
+ const CLASS_LOADER = Symbol("classLoader");
7
+ var ClassLoader = class {
8
+ _cache = /* @__PURE__ */ new Map();
9
+ _ctx;
10
+ constructor(options) {
11
+ assert(options.ctx, "options.ctx is required");
12
+ const properties = options.properties;
13
+ this._ctx = options.ctx;
14
+ for (const property in properties) this.#defineProperty(property, properties[property]);
15
+ }
16
+ #defineProperty(property, values) {
17
+ Object.defineProperty(this, property, { get() {
18
+ let instance = this._cache.get(property);
19
+ if (!instance) {
20
+ instance = getInstance(values, this._ctx);
21
+ this._cache.set(property, instance);
22
+ }
23
+ return instance;
24
+ } });
25
+ }
26
+ };
29
27
  /**
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
- }
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
+ var ContextLoader = class extends FileLoader {
34
+ #inject;
35
+ /**
36
+ * @class
37
+ * @param {Object} options - options same as {@link FileLoader}
38
+ * @param {String} options.fieldClass - determine the field name of inject object.
39
+ */
40
+ constructor(options) {
41
+ assert(options.property, "options.property is required");
42
+ assert(options.inject, "options.inject is required");
43
+ const target = {};
44
+ if (options.fieldClass) options.inject[options.fieldClass] = target;
45
+ super({
46
+ ...options,
47
+ target
48
+ });
49
+ this.#inject = this.options.inject;
50
+ const app = this.#inject;
51
+ const property = options.property;
52
+ Object.defineProperty(app.context, property, { get() {
53
+ const ctx = this;
54
+ if (!ctx[CLASS_LOADER]) ctx[CLASS_LOADER] = /* @__PURE__ */ new Map();
55
+ const classLoader = ctx[CLASS_LOADER];
56
+ let instance = classLoader.get(property);
57
+ if (!instance) {
58
+ instance = getInstance(target, ctx);
59
+ classLoader.set(property, instance);
60
+ }
61
+ return instance;
62
+ } });
63
+ }
64
+ };
78
65
  function getInstance(values, ctx) {
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;
66
+ const Class = values[EXPORTS] ? values : null;
67
+ let instance;
68
+ if (Class) if (isClass(Class)) instance = new Class(ctx);
69
+ else instance = Class;
70
+ else if (isPrimitive(values)) instance = values;
71
+ else instance = new ClassLoader({
72
+ ctx,
73
+ properties: values
74
+ });
75
+ return instance;
101
76
  }
102
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29udGV4dF9sb2FkZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvbG9hZGVyL2NvbnRleHRfbG9hZGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sTUFBTSxNQUFNLGFBQWEsQ0FBQztBQUVqQyxPQUFPLEVBQUUsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLFlBQVksQ0FBQztBQUdsRCxPQUFPLEVBQUUsVUFBVSxFQUFFLE9BQU8sRUFBMEIsTUFBTSxrQkFBa0IsQ0FBQztBQUUvRSxNQUFNLFlBQVksR0FBRyxNQUFNLENBQUMsYUFBYSxDQUFDLENBQUM7QUFPM0MsTUFBTSxPQUFPLFdBQVc7SUFDYixNQUFNLEdBQXFCLElBQUksR0FBRyxFQUFFLENBQUM7SUFDOUMsSUFBSSxDQUFVO0lBRWQsWUFBWSxPQUEyQjtRQUNyQyxNQUFNLENBQUMsT0FBTyxDQUFDLEdBQUcsRUFBRSx5QkFBeUIsQ0FBQyxDQUFDO1FBQy9DLE1BQU0sVUFBVSxHQUFHLE9BQU8sQ0FBQyxVQUFVLENBQUM7UUFDdEMsSUFBSSxDQUFDLElBQUksR0FBRyxPQUFPLENBQUMsR0FBRyxDQUFDO1FBRXhCLEtBQUssTUFBTSxRQUFRLElBQUksVUFBVSxFQUFFLENBQUM7WUFDbEMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxRQUFRLEVBQUUsVUFBVSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUM7UUFDdkQsQ0FBQztJQUNILENBQUM7SUFFRCxlQUFlLENBQUMsUUFBZ0IsRUFBRSxNQUFXO1FBQzNDLE1BQU0sQ0FBQyxjQUFjLENBQUMsSUFBSSxFQUFFLFFBQVEsRUFBRTtZQUNwQyxHQUFHO2dCQUNELElBQUksUUFBUSxHQUFRLElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxDQUFDO2dCQUM5QyxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7b0JBQ2QsUUFBUSxHQUFHLFdBQVcsQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLElB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
77
+
78
+ //#endregion
79
+ export { ClassLoader, ContextLoader };