egg 4.0.1 → 4.0.3

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.
@@ -18,7 +18,7 @@ exports.default = {
18
18
  */
19
19
  session: {
20
20
  enable: true,
21
- package: 'egg-session',
21
+ package: '@eggjs/session',
22
22
  },
23
23
  /**
24
24
  * i18n
@@ -58,7 +58,7 @@ exports.default = {
58
58
  */
59
59
  security: {
60
60
  enable: true,
61
- package: 'egg-security',
61
+ package: '@eggjs/security',
62
62
  },
63
63
  /**
64
64
  * local development helper
@@ -121,4 +121,4 @@ exports.default = {
121
121
  package: 'egg-view',
122
122
  },
123
123
  };
124
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGx1Z2luLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2NvbmZpZy9wbHVnaW4udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFBQSxrQkFBZTtJQUNiOzs7O09BSUc7SUFDSCxPQUFPLEVBQUU7UUFDUCxNQUFNLEVBQUUsSUFBSTtRQUNaLE9BQU8sRUFBRSxhQUFhO0tBQ3ZCO0lBRUQ7Ozs7O09BS0c7SUFDSCxPQUFPLEVBQUU7UUFDUCxNQUFNLEVBQUUsSUFBSTtRQUNaLE9BQU8sRUFBRSxhQUFhO0tBQ3ZCO0lBRUQ7Ozs7O09BS0c7SUFDSCxJQUFJLEVBQUU7UUFDSixNQUFNLEVBQUUsSUFBSTtRQUNaLE9BQU8sRUFBRSxhQUFhO0tBQ3ZCO0lBRUQ7Ozs7O09BS0c7SUFDSCxPQUFPLEVBQUU7UUFDUCxNQUFNLEVBQUUsSUFBSTtRQUNaLE9BQU8sRUFBRSxnQkFBZ0I7S0FDMUI7SUFFRDs7Ozs7T0FLRztJQUNILFNBQVMsRUFBRTtRQUNULE1BQU0sRUFBRSxJQUFJO1FBQ1osT0FBTyxFQUFFLGVBQWU7S0FDekI7SUFFRDs7Ozs7T0FLRztJQUNILFFBQVEsRUFBRTtRQUNSLE1BQU0sRUFBRSxJQUFJO1FBQ1osT0FBTyxFQUFFLGNBQWM7S0FDeEI7SUFFRDs7Ozs7T0FLRztJQUNILFdBQVcsRUFBRTtRQUNYLE1BQU0sRUFBRSxJQUFJO1FBQ1osT0FBTyxFQUFFLG9CQUFvQjtLQUM5QjtJQUVEOzs7OztPQUtHO0lBQ0gsVUFBVSxFQUFFO1FBQ1YsTUFBTSxFQUFFLElBQUk7UUFDWixPQUFPLEVBQUUsZ0JBQWdCO0tBQzFCO0lBRUQ7Ozs7O09BS0c7SUFDSCxRQUFRLEVBQUU7UUFDUixNQUFNLEVBQUUsSUFBSTtRQUNaLE9BQU8sRUFBRSxpQkFBaUI7S0FDM0I7SUFFRDs7Ozs7T0FLRztJQUNILE1BQU0sRUFBRTtRQUNOLE1BQU0sRUFBRSxJQUFJO1FBQ1osT0FBTyxFQUFFLGVBQWU7S0FDekI7SUFFRDs7Ozs7T0FLRztJQUNILEtBQUssRUFBRTtRQUNMLE1BQU0sRUFBRSxJQUFJO1FBQ1osT0FBTyxFQUFFLGNBQWM7S0FDeEI7SUFFRDs7Ozs7T0FLRztJQUNILElBQUksRUFBRTtRQUNKLE1BQU0sRUFBRSxJQUFJO1FBQ1osT0FBTyxFQUFFLFVBQVU7S0FDcEI7Q0FDRixDQUFDIn0=
124
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGx1Z2luLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2NvbmZpZy9wbHVnaW4udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFBQSxrQkFBZTtJQUNiOzs7O09BSUc7SUFDSCxPQUFPLEVBQUU7UUFDUCxNQUFNLEVBQUUsSUFBSTtRQUNaLE9BQU8sRUFBRSxhQUFhO0tBQ3ZCO0lBRUQ7Ozs7O09BS0c7SUFDSCxPQUFPLEVBQUU7UUFDUCxNQUFNLEVBQUUsSUFBSTtRQUNaLE9BQU8sRUFBRSxnQkFBZ0I7S0FDMUI7SUFFRDs7Ozs7T0FLRztJQUNILElBQUksRUFBRTtRQUNKLE1BQU0sRUFBRSxJQUFJO1FBQ1osT0FBTyxFQUFFLGFBQWE7S0FDdkI7SUFFRDs7Ozs7T0FLRztJQUNILE9BQU8sRUFBRTtRQUNQLE1BQU0sRUFBRSxJQUFJO1FBQ1osT0FBTyxFQUFFLGdCQUFnQjtLQUMxQjtJQUVEOzs7OztPQUtHO0lBQ0gsU0FBUyxFQUFFO1FBQ1QsTUFBTSxFQUFFLElBQUk7UUFDWixPQUFPLEVBQUUsZUFBZTtLQUN6QjtJQUVEOzs7OztPQUtHO0lBQ0gsUUFBUSxFQUFFO1FBQ1IsTUFBTSxFQUFFLElBQUk7UUFDWixPQUFPLEVBQUUsaUJBQWlCO0tBQzNCO0lBRUQ7Ozs7O09BS0c7SUFDSCxXQUFXLEVBQUU7UUFDWCxNQUFNLEVBQUUsSUFBSTtRQUNaLE9BQU8sRUFBRSxvQkFBb0I7S0FDOUI7SUFFRDs7Ozs7T0FLRztJQUNILFVBQVUsRUFBRTtRQUNWLE1BQU0sRUFBRSxJQUFJO1FBQ1osT0FBTyxFQUFFLGdCQUFnQjtLQUMxQjtJQUVEOzs7OztPQUtHO0lBQ0gsUUFBUSxFQUFFO1FBQ1IsTUFBTSxFQUFFLElBQUk7UUFDWixPQUFPLEVBQUUsaUJBQWlCO0tBQzNCO0lBRUQ7Ozs7O09BS0c7SUFDSCxNQUFNLEVBQUU7UUFDTixNQUFNLEVBQUUsSUFBSTtRQUNaLE9BQU8sRUFBRSxlQUFlO0tBQ3pCO0lBRUQ7Ozs7O09BS0c7SUFDSCxLQUFLLEVBQUU7UUFDTCxNQUFNLEVBQUUsSUFBSTtRQUNaLE9BQU8sRUFBRSxjQUFjO0tBQ3hCO0lBRUQ7Ozs7O09BS0c7SUFDSCxJQUFJLEVBQUU7UUFDSixNQUFNLEVBQUUsSUFBSTtRQUNaLE9BQU8sRUFBRSxVQUFVO0tBQ3BCO0NBQ0YsQ0FBQyJ9
@@ -9,6 +9,7 @@ export type { Helper as IHelper, };
9
9
  export * from './lib/egg.js';
10
10
  export * from './lib/types.js';
11
11
  export * from './lib/start.js';
12
+ export { Singleton, type SingletonCreateMethod, type SingletonOptions, } from '@eggjs/core';
12
13
  export * from './lib/error/index.js';
13
14
  export type { LoggerLevel, EggLogger, } from 'egg-logger';
14
15
  export * from './lib/core/httpclient.js';
@@ -20,7 +20,7 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
20
20
  return (mod && mod.__esModule) ? mod : { "default": mod };
21
21
  };
22
22
  Object.defineProperty(exports, "__esModule", { value: true });
23
- exports.Boot = exports.BaseContextClass = exports.Subscription = exports.Service = exports.Controller = exports.AgentWorkerLoader = exports.AppWorkerLoader = exports.Agent = exports.Application = exports.start = exports.Helper = void 0;
23
+ exports.Boot = exports.BaseContextClass = exports.Subscription = exports.Service = exports.Controller = exports.AgentWorkerLoader = exports.AppWorkerLoader = exports.Agent = exports.Application = exports.start = exports.Singleton = exports.Helper = void 0;
24
24
  const base_context_class_js_1 = require("./lib/core/base_context_class.js");
25
25
  Object.defineProperty(exports, "Controller", { enumerable: true, get: function () { return base_context_class_js_1.BaseContextClass; } });
26
26
  Object.defineProperty(exports, "Service", { enumerable: true, get: function () { return base_context_class_js_1.BaseContextClass; } });
@@ -33,6 +33,9 @@ exports.Helper = helper_js_1.default;
33
33
  __exportStar(require("./lib/egg.js"), exports);
34
34
  __exportStar(require("./lib/types.js"), exports);
35
35
  __exportStar(require("./lib/start.js"), exports);
36
+ // export singleton
37
+ var core_1 = require("@eggjs/core");
38
+ Object.defineProperty(exports, "Singleton", { enumerable: true, get: function () { return core_1.Singleton; } });
36
39
  // export errors
37
40
  __exportStar(require("./lib/error/index.js"), exports);
38
41
  // export httpClients
@@ -77,4 +80,4 @@ Object.defineProperty(exports, "BaseContextClass", { enumerable: true, get: func
77
80
  */
78
81
  var base_hook_class_js_1 = require("./lib/core/base_hook_class.js");
79
82
  Object.defineProperty(exports, "Boot", { enumerable: true, get: function () { return base_hook_class_js_1.BaseHookClass; } });
80
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBOztHQUVHOzs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUVILDRFQUFvRTtBQWdGOUMsMkZBaEZiLHdDQUFnQixPQWdGTztBQVFWLHdGQXhGYix3Q0FBZ0IsT0F3Rkk7QUFRUCw2RkFoR2Isd0NBQWdCLE9BZ0dTO0FBL0ZsQyw2Q0FJd0I7QUF5Q1Ysc0ZBNUNaLG1CQUFRLE9BNENTO0FBeENuQix1RUFBNEM7QUFJMUMsaUJBSkssbUJBQU0sQ0FJTDtBQU9SLGVBQWU7QUFDZiwrQ0FBNkI7QUFDN0IsaURBQStCO0FBQy9CLGlEQUErQjtBQUUvQixnQkFBZ0I7QUFDaEIsdURBQXFDO0FBUXJDLHFCQUFxQjtBQUNyQiwyREFBeUM7QUFDekMsbUVBQWlEO0FBRWpEOzs7R0FHRztBQUNILGlEQUErQjtBQVkvQjs7O0dBR0c7QUFDSCx1REFBbUQ7QUFBMUMsNkdBQUEsV0FBVyxPQUFBO0FBRXBCOzs7R0FHRztBQUNILDJDQUF1QztBQUE5QixpR0FBQSxLQUFLLE9BQUE7QUFFZDs7O0dBR0c7QUFFSDs7O0dBR0c7QUFFSCxrREFBMkU7QUFBbEUsMkdBQUEsZUFBZSxPQUFBO0FBQUUsNkdBQUEsaUJBQWlCLE9BQUE7QUEwQjNDOzs7R0FHRztBQUNILDBFQUFvRTtBQUEzRCx5SEFBQSxnQkFBZ0IsT0FBQTtBQUV6Qjs7R0FFRztBQUNILG9FQUFzRTtBQUE3RCwwR0FBQSxhQUFhLE9BQVEifQ==
83
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBOztHQUVHOzs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUVILDRFQUFvRTtBQXVGOUMsMkZBdkZiLHdDQUFnQixPQXVGTztBQVFWLHdGQS9GYix3Q0FBZ0IsT0ErRkk7QUFRUCw2RkF2R2Isd0NBQWdCLE9BdUdTO0FBdEdsQyw2Q0FJd0I7QUFnRFYsc0ZBbkRaLG1CQUFRLE9BbURTO0FBL0NuQix1RUFBNEM7QUFJMUMsaUJBSkssbUJBQU0sQ0FJTDtBQU9SLGVBQWU7QUFDZiwrQ0FBNkI7QUFDN0IsaURBQStCO0FBQy9CLGlEQUErQjtBQUUvQixtQkFBbUI7QUFDbkIsb0NBSXFCO0FBSG5CLGlHQUFBLFNBQVMsT0FBQTtBQUtYLGdCQUFnQjtBQUNoQix1REFBcUM7QUFRckMscUJBQXFCO0FBQ3JCLDJEQUF5QztBQUN6QyxtRUFBaUQ7QUFFakQ7OztHQUdHO0FBQ0gsaURBQStCO0FBWS9COzs7R0FHRztBQUNILHVEQUFtRDtBQUExQyw2R0FBQSxXQUFXLE9BQUE7QUFFcEI7OztHQUdHO0FBQ0gsMkNBQXVDO0FBQTlCLGlHQUFBLEtBQUssT0FBQTtBQUVkOzs7R0FHRztBQUVIOzs7R0FHRztBQUVILGtEQUEyRTtBQUFsRSwyR0FBQSxlQUFlLE9BQUE7QUFBRSw2R0FBQSxpQkFBaUIsT0FBQTtBQTBCM0M7OztHQUdHO0FBQ0gsMEVBQW9FO0FBQTNELHlIQUFBLGdCQUFnQixPQUFBO0FBRXpCOztHQUVHO0FBQ0gsb0VBQXNFO0FBQTdELDBHQUFBLGFBQWEsT0FBUSJ9
@@ -11,7 +11,6 @@ import type { EggAppConfig } from './types.js';
11
11
  import { IMessenger } from './core/messenger/index.js';
12
12
  import { ContextHttpClient } from './core/context_httpclient.js';
13
13
  import { HttpClient, type HttpClientRequestOptions, type HttpClientRequestURL, type HttpClientResponse, type HttpClientOptions } from './core/httpclient.js';
14
- import { type SingletonCreateMethod } from './core/singleton.js';
15
14
  import { BaseContextClass } from './core/base_context_class.js';
16
15
  import { BaseHookClass } from './core/base_hook_class.js';
17
16
  import type { EggApplicationLoader } from './loader/index.js';
@@ -261,12 +260,6 @@ export declare class EggApplicationCore extends EggCore {
261
260
  */
262
261
  get proxy(): boolean;
263
262
  set proxy(_: boolean);
264
- /**
265
- * create a singleton instance
266
- * @param {String} name - unique name for singleton
267
- * @param {Function|AsyncFunction} create - method will be invoked when singleton instance create
268
- */
269
- addSingleton(name: string, create: SingletonCreateMethod): void;
270
263
  /**
271
264
  * Create an anonymous context, the context isn't request level, so the request is mocked.
272
265
  * then you can use context level API like `ctx.service`
@@ -289,8 +282,6 @@ declare module '@eggjs/core' {
289
282
  inspect(): any;
290
283
  get currentContext(): EggContext | undefined;
291
284
  ctxStorage: AsyncLocalStorage<EggContext>;
292
- get logger(): EggLogger;
293
- get coreLogger(): EggLogger;
294
285
  getLogger(name: string): EggLogger;
295
286
  createHttpClient(options?: HttpClientOptions): HttpClient;
296
287
  HttpClient: typeof HttpClient;
@@ -59,7 +59,6 @@ const index_js_1 = require("./core/messenger/index.js");
59
59
  const context_httpclient_js_1 = require("./core/context_httpclient.js");
60
60
  const httpclient_js_1 = require("./core/httpclient.js");
61
61
  const logger_js_1 = require("./core/logger.js");
62
- const singleton_js_1 = require("./core/singleton.js");
63
62
  const utils_js_1 = require("./core/utils.js");
64
63
  const base_context_class_js_1 = require("./core/base_context_class.js");
65
64
  const base_hook_class_js_1 = require("./core/base_hook_class.js");
@@ -537,25 +536,6 @@ class EggApplicationCore extends core_1.EggCore {
537
536
  }
538
537
  /* eslint no-empty-function: off */
539
538
  set proxy(_) { }
540
- /**
541
- * create a singleton instance
542
- * @param {String} name - unique name for singleton
543
- * @param {Function|AsyncFunction} create - method will be invoked when singleton instance create
544
- */
545
- addSingleton(name, create) {
546
- const options = {
547
- name,
548
- create,
549
- app: this,
550
- };
551
- const singleton = new singleton_js_1.Singleton(options);
552
- const initPromise = singleton.init();
553
- if (initPromise) {
554
- this.beforeStart(async () => {
555
- await initPromise;
556
- });
557
- }
558
- }
559
539
  #patchClusterClient(client) {
560
540
  const rawCreate = client.create;
561
541
  client.create = (...args) => {
@@ -629,4 +609,4 @@ class EggApplicationCore extends core_1.EggCore {
629
609
  }
630
610
  }
631
611
  exports.EggApplicationCore = EggApplicationCore;
632
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZWdnLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2xpYi9lZ2cudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUEscURBQThDO0FBQzlDLDBEQUE2QjtBQUM3QixzREFBeUI7QUFDekIsMERBQTRFO0FBQzVFLG9FQUF1QztBQUV2QyxzQ0FLcUI7QUFzRW5CLHVGQXZFQSxhQUFNLE9BdUVBO0FBaEVSLDZEQUE2RDtBQUM3RCxhQUFhO0FBQ2IsaUVBQWtGO0FBQ2xGLHFDQUFpQztBQUNqQywyQ0FBc0Y7QUFDdEYsNENBQTJEO0FBQzNELDZEQUE2RDtBQUM3RCxhQUFhO0FBQ2Isa0ZBQWlEO0FBR2pELDBFQUErQztBQW9EN0Msa0JBcERLLG9CQUFPLENBb0RMO0FBbERULHdEQUFrRjtBQUNsRix3RUFBaUU7QUFDakUsd0RBSThCO0FBQzlCLGdEQUFpRDtBQUNqRCxzREFFNkI7QUFDN0IsOENBQWdEO0FBQ2hELHdFQUFnRTtBQUNoRSxrRUFBMEQ7QUFFMUQseUNBQThDO0FBRTlDLE1BQU0sUUFBUSxHQUFHLE1BQU0sQ0FBQyxHQUFHLENBQUMsYUFBYSxDQUFDLENBQUM7QUFRM0MsTUFBYSxPQUFRLFNBQVEsY0FBYztDQUkxQztBQUpELDBCQUlDO0FBRUQsTUFBYSxRQUFTLFNBQVEsZUFBZTtDQUk1QztBQUpELDRCQUlDO0FBbUJEOzs7OztHQUtHO0FBQ0gsTUFBYSxrQkFBbUIsU0FBUSxjQUFPO0lBRTdDLGdHQUFnRztJQUNoRyxjQUFjLEdBQUcsaUJBQWMsQ0FBQztJQUNoQyxhQUFhLEdBQUcsNkJBQWEsQ0FBQztJQUM5QixpQkFBaUIsR0FBRyx5Q0FBaUIsQ0FBQztJQUN0QyxVQUFVLEdBQUcsMEJBQVUsQ0FBQztJQUN4Qix1Q0FBdUM7SUFDdkMsY0FBYyxHQUFHLDBCQUFVLENBQUM7SUFDNUI7Ozs7T0FJRztJQUNILGdCQUFnQixHQUFHLHdDQUFnQixD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
612
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZWdnLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2xpYi9lZ2cudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUEscURBQThDO0FBQzlDLDBEQUE2QjtBQUM3QixzREFBeUI7QUFDekIsMERBQTRFO0FBQzVFLG9FQUF1QztBQUV2QyxzQ0FLcUI7QUFtRW5CLHVGQXBFQSxhQUFNLE9Bb0VBO0FBN0RSLDZEQUE2RDtBQUM3RCxhQUFhO0FBQ2IsaUVBQWtGO0FBQ2xGLHFDQUFpQztBQUNqQywyQ0FBc0Y7QUFDdEYsNENBQTJEO0FBQzNELDZEQUE2RDtBQUM3RCxhQUFhO0FBQ2Isa0ZBQWlEO0FBR2pELDBFQUErQztBQWlEN0Msa0JBakRLLG9CQUFPLENBaURMO0FBL0NULHdEQUFrRjtBQUNsRix3RUFBaUU7QUFDakUsd0RBSThCO0FBQzlCLGdEQUFpRDtBQUNqRCw4Q0FBZ0Q7QUFDaEQsd0VBQWdFO0FBQ2hFLGtFQUEwRDtBQUUxRCx5Q0FBOEM7QUFFOUMsTUFBTSxRQUFRLEdBQUcsTUFBTSxDQUFDLEdBQUcsQ0FBQyxhQUFhLENBQUMsQ0FBQztBQVEzQyxNQUFhLE9BQVEsU0FBUSxjQUFjO0NBSTFDO0FBSkQsMEJBSUM7QUFFRCxNQUFhLFFBQVMsU0FBUSxlQUFlO0NBSTVDO0FBSkQsNEJBSUM7QUFtQkQ7Ozs7O0dBS0c7QUFDSCxNQUFhLGtCQUFtQixTQUFRLGNBQU87SUFFN0MsZ0dBQWdHO0lBQ2hHLGNBQWMsR0FBRyxpQkFBYyxDQUFDO0lBQ2hDLGFBQWEsR0FBRyw2QkFBYSxDQUFDO0lBQzlCLGlCQUFpQixHQUFHLHlDQUFpQixDQUFDO0lBQ3RDLFVBQVUsR0FBRywwQkFBVSxDQUFDO0lBQ3hCLHVDQUF1QztJQUN2QyxjQUFjLEdBQUcsMEJBQVUsQ0FBQztJQUM1Qjs7OztPQUlHO0lBQ0gsZ0JBQWdCLEdBQUcsd0NBQWdCLENBQUM7SUFFcEM7Ozs7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
@@ -11,6 +11,9 @@ import '@eggjs/development';
11
11
  import '@eggjs/jsonp';
12
12
  import '@eggjs/i18n';
13
13
  import '@eggjs/static';
14
+ import '@eggjs/security';
15
+ import '@eggjs/schedule';
16
+ import '@eggjs/session';
14
17
  export type { EggAppInfo, } from '@eggjs/core';
15
18
  type IgnoreItem = string | RegExp | ((ctx: Context) => boolean);
16
19
  type IgnoreOrMatch = IgnoreItem | IgnoreItem[];
@@ -175,30 +178,6 @@ export interface EggAppConfig extends EggCoreAppConfig {
175
178
  */
176
179
  pkg: Record<string, any>;
177
180
  rundir: string;
178
- security: {
179
- domainWhiteList: string[];
180
- protocolWhiteList: string[];
181
- defaultMiddleware: string;
182
- csrf: any;
183
- ssrf: {
184
- ipBlackList: string[];
185
- ipExceptionList: string[];
186
- checkAddress?(ip: string): boolean;
187
- };
188
- xframe: {
189
- enable: boolean;
190
- value: 'SAMEORIGIN' | 'DENY' | 'ALLOW-FROM';
191
- };
192
- hsts: any;
193
- methodnoallow: {
194
- enable: boolean;
195
- };
196
- noopen: {
197
- enable: boolean;
198
- };
199
- xssProtection: any;
200
- csp: any;
201
- };
202
181
  siteFile: SiteFileMiddlewareOptions;
203
182
  meta: MetaMiddlewareOptions;
204
183
  notfound: NotFoundMiddlewareOptions;
@@ -6,4 +6,7 @@ require("@eggjs/development");
6
6
  require("@eggjs/jsonp");
7
7
  require("@eggjs/i18n");
8
8
  require("@eggjs/static");
9
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbGliL3R5cGVzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBa0JBLHVCQUF1QjtBQUN2QiwwQkFBd0I7QUFDeEIsOEJBQTRCO0FBQzVCLHdCQUFzQjtBQUN0Qix1QkFBcUI7QUFDckIseUJBQXVCIn0=
9
+ require("@eggjs/security");
10
+ require("@eggjs/schedule");
11
+ require("@eggjs/session");
12
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbGliL3R5cGVzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBa0JBLHVCQUF1QjtBQUN2QiwwQkFBd0I7QUFDeEIsOEJBQTRCO0FBQzVCLHdCQUFzQjtBQUN0Qix1QkFBcUI7QUFDckIseUJBQXVCO0FBQ3ZCLDJCQUF5QjtBQUN6QiwyQkFBeUI7QUFDekIsMEJBQXdCIn0=
@@ -16,7 +16,7 @@ export default {
16
16
  */
17
17
  session: {
18
18
  enable: true,
19
- package: 'egg-session',
19
+ package: '@eggjs/session',
20
20
  },
21
21
  /**
22
22
  * i18n
@@ -56,7 +56,7 @@ export default {
56
56
  */
57
57
  security: {
58
58
  enable: true,
59
- package: 'egg-security',
59
+ package: '@eggjs/security',
60
60
  },
61
61
  /**
62
62
  * local development helper
@@ -119,4 +119,4 @@ export default {
119
119
  package: 'egg-view',
120
120
  },
121
121
  };
122
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGx1Z2luLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2NvbmZpZy9wbHVnaW4udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsZUFBZTtJQUNiOzs7O09BSUc7SUFDSCxPQUFPLEVBQUU7UUFDUCxNQUFNLEVBQUUsSUFBSTtRQUNaLE9BQU8sRUFBRSxhQUFhO0tBQ3ZCO0lBRUQ7Ozs7O09BS0c7SUFDSCxPQUFPLEVBQUU7UUFDUCxNQUFNLEVBQUUsSUFBSTtRQUNaLE9BQU8sRUFBRSxhQUFhO0tBQ3ZCO0lBRUQ7Ozs7O09BS0c7SUFDSCxJQUFJLEVBQUU7UUFDSixNQUFNLEVBQUUsSUFBSTtRQUNaLE9BQU8sRUFBRSxhQUFhO0tBQ3ZCO0lBRUQ7Ozs7O09BS0c7SUFDSCxPQUFPLEVBQUU7UUFDUCxNQUFNLEVBQUUsSUFBSTtRQUNaLE9BQU8sRUFBRSxnQkFBZ0I7S0FDMUI7SUFFRDs7Ozs7T0FLRztJQUNILFNBQVMsRUFBRTtRQUNULE1BQU0sRUFBRSxJQUFJO1FBQ1osT0FBTyxFQUFFLGVBQWU7S0FDekI7SUFFRDs7Ozs7T0FLRztJQUNILFFBQVEsRUFBRTtRQUNSLE1BQU0sRUFBRSxJQUFJO1FBQ1osT0FBTyxFQUFFLGNBQWM7S0FDeEI7SUFFRDs7Ozs7T0FLRztJQUNILFdBQVcsRUFBRTtRQUNYLE1BQU0sRUFBRSxJQUFJO1FBQ1osT0FBTyxFQUFFLG9CQUFvQjtLQUM5QjtJQUVEOzs7OztPQUtHO0lBQ0gsVUFBVSxFQUFFO1FBQ1YsTUFBTSxFQUFFLElBQUk7UUFDWixPQUFPLEVBQUUsZ0JBQWdCO0tBQzFCO0lBRUQ7Ozs7O09BS0c7SUFDSCxRQUFRLEVBQUU7UUFDUixNQUFNLEVBQUUsSUFBSTtRQUNaLE9BQU8sRUFBRSxpQkFBaUI7S0FDM0I7SUFFRDs7Ozs7T0FLRztJQUNILE1BQU0sRUFBRTtRQUNOLE1BQU0sRUFBRSxJQUFJO1FBQ1osT0FBTyxFQUFFLGVBQWU7S0FDekI7SUFFRDs7Ozs7T0FLRztJQUNILEtBQUssRUFBRTtRQUNMLE1BQU0sRUFBRSxJQUFJO1FBQ1osT0FBTyxFQUFFLGNBQWM7S0FDeEI7SUFFRDs7Ozs7T0FLRztJQUNILElBQUksRUFBRTtRQUNKLE1BQU0sRUFBRSxJQUFJO1FBQ1osT0FBTyxFQUFFLFVBQVU7S0FDcEI7Q0FDRixDQUFDIn0=
122
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGx1Z2luLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2NvbmZpZy9wbHVnaW4udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsZUFBZTtJQUNiOzs7O09BSUc7SUFDSCxPQUFPLEVBQUU7UUFDUCxNQUFNLEVBQUUsSUFBSTtRQUNaLE9BQU8sRUFBRSxhQUFhO0tBQ3ZCO0lBRUQ7Ozs7O09BS0c7SUFDSCxPQUFPLEVBQUU7UUFDUCxNQUFNLEVBQUUsSUFBSTtRQUNaLE9BQU8sRUFBRSxnQkFBZ0I7S0FDMUI7SUFFRDs7Ozs7T0FLRztJQUNILElBQUksRUFBRTtRQUNKLE1BQU0sRUFBRSxJQUFJO1FBQ1osT0FBTyxFQUFFLGFBQWE7S0FDdkI7SUFFRDs7Ozs7T0FLRztJQUNILE9BQU8sRUFBRTtRQUNQLE1BQU0sRUFBRSxJQUFJO1FBQ1osT0FBTyxFQUFFLGdCQUFnQjtLQUMxQjtJQUVEOzs7OztPQUtHO0lBQ0gsU0FBUyxFQUFFO1FBQ1QsTUFBTSxFQUFFLElBQUk7UUFDWixPQUFPLEVBQUUsZUFBZTtLQUN6QjtJQUVEOzs7OztPQUtHO0lBQ0gsUUFBUSxFQUFFO1FBQ1IsTUFBTSxFQUFFLElBQUk7UUFDWixPQUFPLEVBQUUsaUJBQWlCO0tBQzNCO0lBRUQ7Ozs7O09BS0c7SUFDSCxXQUFXLEVBQUU7UUFDWCxNQUFNLEVBQUUsSUFBSTtRQUNaLE9BQU8sRUFBRSxvQkFBb0I7S0FDOUI7SUFFRDs7Ozs7T0FLRztJQUNILFVBQVUsRUFBRTtRQUNWLE1BQU0sRUFBRSxJQUFJO1FBQ1osT0FBTyxFQUFFLGdCQUFnQjtLQUMxQjtJQUVEOzs7OztPQUtHO0lBQ0gsUUFBUSxFQUFFO1FBQ1IsTUFBTSxFQUFFLElBQUk7UUFDWixPQUFPLEVBQUUsaUJBQWlCO0tBQzNCO0lBRUQ7Ozs7O09BS0c7SUFDSCxNQUFNLEVBQUU7UUFDTixNQUFNLEVBQUUsSUFBSTtRQUNaLE9BQU8sRUFBRSxlQUFlO0tBQ3pCO0lBRUQ7Ozs7O09BS0c7SUFDSCxLQUFLLEVBQUU7UUFDTCxNQUFNLEVBQUUsSUFBSTtRQUNaLE9BQU8sRUFBRSxjQUFjO0tBQ3hCO0lBRUQ7Ozs7O09BS0c7SUFDSCxJQUFJLEVBQUU7UUFDSixNQUFNLEVBQUUsSUFBSTtRQUNaLE9BQU8sRUFBRSxVQUFVO0tBQ3BCO0NBQ0YsQ0FBQyJ9
@@ -9,6 +9,7 @@ export type { Helper as IHelper, };
9
9
  export * from './lib/egg.js';
10
10
  export * from './lib/types.js';
11
11
  export * from './lib/start.js';
12
+ export { Singleton, type SingletonCreateMethod, type SingletonOptions, } from '@eggjs/core';
12
13
  export * from './lib/error/index.js';
13
14
  export type { LoggerLevel, EggLogger, } from 'egg-logger';
14
15
  export * from './lib/core/httpclient.js';
package/dist/esm/index.js CHANGED
@@ -10,6 +10,8 @@ export { Helper, };
10
10
  export * from './lib/egg.js';
11
11
  export * from './lib/types.js';
12
12
  export * from './lib/start.js';
13
+ // export singleton
14
+ export { Singleton, } from '@eggjs/core';
13
15
  // export errors
14
16
  export * from './lib/error/index.js';
15
17
  // export httpClients
@@ -68,4 +70,4 @@ export { BaseContextClass } from './lib/core/base_context_class.js';
68
70
  * @member {Boot} Egg#Boot
69
71
  */
70
72
  export { BaseHookClass as Boot } from './lib/core/base_hook_class.js';
71
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7O0dBRUc7QUFFSCxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQztBQUNwRSxPQUFPLEVBQ0wsUUFBUSxHQUdULE1BQU0sZ0JBQWdCLENBQUM7QUFDeEIsT0FBTyxNQUFNLE1BQU0sd0JBQXdCLENBQUM7QUFFNUMsaUJBQWlCO0FBQ2pCLE9BQU8sRUFDTCxNQUFNLEdBQ1AsQ0FBQztBQU1GLGVBQWU7QUFDZixjQUFjLGNBQWMsQ0FBQztBQUM3QixjQUFjLGdCQUFnQixDQUFDO0FBQy9CLGNBQWMsZ0JBQWdCLENBQUM7QUFFL0IsZ0JBQWdCO0FBQ2hCLGNBQWMsc0JBQXNCLENBQUM7QUFRckMscUJBQXFCO0FBQ3JCLGNBQWMsMEJBQTBCLENBQUM7QUFDekMsY0FBYyxrQ0FBa0MsQ0FBQztBQUVqRDs7O0dBR0c7QUFDSCxjQUFjLGdCQUFnQixDQUFDO0FBRS9COzs7R0FHRztBQUNILE9BQU8sRUFDTCxRQUFRLElBQUksS0FBSyxHQUdsQixDQUFDO0FBRUY7OztHQUdHO0FBQ0gsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBRW5EOzs7R0FHRztBQUNILE9BQU8sRUFBRSxLQUFLLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUV2Qzs7O0dBR0c7QUFFSDs7O0dBR0c7QUFFSCxPQUFPLEVBQUUsZUFBZSxFQUFFLGlCQUFpQixFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFFM0U7OztHQUdHO0FBQ0gsT0FBTyxFQUNMLGdCQUFnQixJQUFJLFVBQVUsR0FDL0IsQ0FBQztBQUVGOzs7R0FHRztBQUNILE9BQU8sRUFDTCxnQkFBZ0IsSUFBSSxPQUFPLEdBQzVCLENBQUM7QUFFRjs7O0dBR0c7QUFDSCxPQUFPLEVBQ0wsZ0JBQWdCLElBQUksWUFBWSxHQUNqQyxDQUFDO0FBRUY7OztHQUdHO0FBQ0gsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sa0NBQWtDLENBQUM7QUFFcEU7O0dBRUc7QUFDSCxPQUFPLEVBQUUsYUFBYSxJQUFJLElBQUksRUFBRSxNQUFNLCtCQUErQixDQUFDIn0=
73
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7O0dBRUc7QUFFSCxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQztBQUNwRSxPQUFPLEVBQ0wsUUFBUSxHQUdULE1BQU0sZ0JBQWdCLENBQUM7QUFDeEIsT0FBTyxNQUFNLE1BQU0sd0JBQXdCLENBQUM7QUFFNUMsaUJBQWlCO0FBQ2pCLE9BQU8sRUFDTCxNQUFNLEdBQ1AsQ0FBQztBQU1GLGVBQWU7QUFDZixjQUFjLGNBQWMsQ0FBQztBQUM3QixjQUFjLGdCQUFnQixDQUFDO0FBQy9CLGNBQWMsZ0JBQWdCLENBQUM7QUFFL0IsbUJBQW1CO0FBQ25CLE9BQU8sRUFDTCxTQUFTLEdBR1YsTUFBTSxhQUFhLENBQUM7QUFFckIsZ0JBQWdCO0FBQ2hCLGNBQWMsc0JBQXNCLENBQUM7QUFRckMscUJBQXFCO0FBQ3JCLGNBQWMsMEJBQTBCLENBQUM7QUFDekMsY0FBYyxrQ0FBa0MsQ0FBQztBQUVqRDs7O0dBR0c7QUFDSCxjQUFjLGdCQUFnQixDQUFDO0FBRS9COzs7R0FHRztBQUNILE9BQU8sRUFDTCxRQUFRLElBQUksS0FBSyxHQUdsQixDQUFDO0FBRUY7OztHQUdHO0FBQ0gsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBRW5EOzs7R0FHRztBQUNILE9BQU8sRUFBRSxLQUFLLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUV2Qzs7O0dBR0c7QUFFSDs7O0dBR0c7QUFFSCxPQUFPLEVBQUUsZUFBZSxFQUFFLGlCQUFpQixFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFFM0U7OztHQUdHO0FBQ0gsT0FBTyxFQUNMLGdCQUFnQixJQUFJLFVBQVUsR0FDL0IsQ0FBQztBQUVGOzs7R0FHRztBQUNILE9BQU8sRUFDTCxnQkFBZ0IsSUFBSSxPQUFPLEdBQzVCLENBQUM7QUFFRjs7O0dBR0c7QUFDSCxPQUFPLEVBQ0wsZ0JBQWdCLElBQUksWUFBWSxHQUNqQyxDQUFDO0FBRUY7OztHQUdHO0FBQ0gsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sa0NBQWtDLENBQUM7QUFFcEU7O0dBRUc7QUFDSCxPQUFPLEVBQUUsYUFBYSxJQUFJLElBQUksRUFBRSxNQUFNLCtCQUErQixDQUFDIn0=
@@ -11,7 +11,6 @@ import type { EggAppConfig } from './types.js';
11
11
  import { IMessenger } from './core/messenger/index.js';
12
12
  import { ContextHttpClient } from './core/context_httpclient.js';
13
13
  import { HttpClient, type HttpClientRequestOptions, type HttpClientRequestURL, type HttpClientResponse, type HttpClientOptions } from './core/httpclient.js';
14
- import { type SingletonCreateMethod } from './core/singleton.js';
15
14
  import { BaseContextClass } from './core/base_context_class.js';
16
15
  import { BaseHookClass } from './core/base_hook_class.js';
17
16
  import type { EggApplicationLoader } from './loader/index.js';
@@ -261,12 +260,6 @@ export declare class EggApplicationCore extends EggCore {
261
260
  */
262
261
  get proxy(): boolean;
263
262
  set proxy(_: boolean);
264
- /**
265
- * create a singleton instance
266
- * @param {String} name - unique name for singleton
267
- * @param {Function|AsyncFunction} create - method will be invoked when singleton instance create
268
- */
269
- addSingleton(name: string, create: SingletonCreateMethod): void;
270
263
  /**
271
264
  * Create an anonymous context, the context isn't request level, so the request is mocked.
272
265
  * then you can use context level API like `ctx.service`
@@ -289,8 +282,6 @@ declare module '@eggjs/core' {
289
282
  inspect(): any;
290
283
  get currentContext(): EggContext | undefined;
291
284
  ctxStorage: AsyncLocalStorage<EggContext>;
292
- get logger(): EggLogger;
293
- get coreLogger(): EggLogger;
294
285
  getLogger(name: string): EggLogger;
295
286
  createHttpClient(options?: HttpClientOptions): HttpClient;
296
287
  HttpClient: typeof HttpClient;
@@ -18,7 +18,6 @@ import { create as createMessenger } from './core/messenger/index.js';
18
18
  import { ContextHttpClient } from './core/context_httpclient.js';
19
19
  import { HttpClient, } from './core/httpclient.js';
20
20
  import { createLoggers } from './core/logger.js';
21
- import { Singleton, } from './core/singleton.js';
22
21
  import { convertObject } from './core/utils.js';
23
22
  import { BaseContextClass } from './core/base_context_class.js';
24
23
  import { BaseHookClass } from './core/base_hook_class.js';
@@ -496,25 +495,6 @@ export class EggApplicationCore extends EggCore {
496
495
  }
497
496
  /* eslint no-empty-function: off */
498
497
  set proxy(_) { }
499
- /**
500
- * create a singleton instance
501
- * @param {String} name - unique name for singleton
502
- * @param {Function|AsyncFunction} create - method will be invoked when singleton instance create
503
- */
504
- addSingleton(name, create) {
505
- const options = {
506
- name,
507
- create,
508
- app: this,
509
- };
510
- const singleton = new Singleton(options);
511
- const initPromise = singleton.init();
512
- if (initPromise) {
513
- this.beforeStart(async () => {
514
- await initPromise;
515
- });
516
- }
517
- }
518
498
  #patchClusterClient(client) {
519
499
  const rawCreate = client.create;
520
500
  client.create = (...args) => {
@@ -587,4 +567,4 @@ export class EggApplicationCore extends EggCore {
587
567
  return context;
588
568
  }
589
569
  }
590
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZWdnLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2xpYi9lZ2cudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQzlDLE9BQU8sSUFBSSxNQUFNLFdBQVcsQ0FBQztBQUM3QixPQUFPLEVBQUUsTUFBTSxTQUFTLENBQUM7QUFDekIsT0FBTyxJQUFtRCxNQUFNLFdBQVcsQ0FBQztBQUM1RSxPQUFPLFNBQVMsTUFBTSxnQkFBZ0IsQ0FBQztBQUV2QyxPQUFPLEVBQ0wsT0FBTyxFQUNQLE9BQU8sSUFBSSxjQUFjLEVBQ3pCLFFBQVEsSUFBSSxlQUFlLEVBQzNCLE1BQU0sR0FDUCxNQUFNLGFBQWEsQ0FBQztBQU1yQiw2REFBNkQ7QUFDN0QsYUFBYTtBQUNiLE9BQU8sbUJBQW1CLEVBQUUsRUFBRSxLQUFLLElBQUksa0JBQWtCLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUNsRixPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sU0FBUyxDQUFDO0FBQ2pDLE9BQU8sRUFBRSxnQkFBZ0IsSUFBSSxhQUFhLEVBQXlCLE1BQU0sWUFBWSxDQUFDO0FBQ3RGLE9BQU8sRUFBRSxPQUFPLElBQUksY0FBYyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDM0QsNkRBQTZEO0FBQzdELGFBQWE7QUFDYixPQUFPLFlBQVksTUFBTSx1QkFBdUIsQ0FBQztBQUdqRCxPQUFPLE9BQU8sTUFBTSwwQkFBMEIsQ0FBQztBQUUvQyxPQUFPLEVBQUUsTUFBTSxJQUFJLGVBQWUsRUFBYyxNQUFNLDJCQUEyQixDQUFDO0FBQ2xGLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBQ2pFLE9BQU8sRUFDTCxVQUFVLEdBR1gsTUFBTSxzQkFBc0IsQ0FBQztBQUM5QixPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFDakQsT0FBTyxFQUNMLFNBQVMs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
570
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZWdnLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2xpYi9lZ2cudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQzlDLE9BQU8sSUFBSSxNQUFNLFdBQVcsQ0FBQztBQUM3QixPQUFPLEVBQUUsTUFBTSxTQUFTLENBQUM7QUFDekIsT0FBTyxJQUFtRCxNQUFNLFdBQVcsQ0FBQztBQUM1RSxPQUFPLFNBQVMsTUFBTSxnQkFBZ0IsQ0FBQztBQUV2QyxPQUFPLEVBQ0wsT0FBTyxFQUNQLE9BQU8sSUFBSSxjQUFjLEVBQ3pCLFFBQVEsSUFBSSxlQUFlLEVBQzNCLE1BQU0sR0FDUCxNQUFNLGFBQWEsQ0FBQztBQU1yQiw2REFBNkQ7QUFDN0QsYUFBYTtBQUNiLE9BQU8sbUJBQW1CLEVBQUUsRUFBRSxLQUFLLElBQUksa0JBQWtCLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUNsRixPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sU0FBUyxDQUFDO0FBQ2pDLE9BQU8sRUFBRSxnQkFBZ0IsSUFBSSxhQUFhLEVBQXlCLE1BQU0sWUFBWSxDQUFDO0FBQ3RGLE9BQU8sRUFBRSxPQUFPLElBQUksY0FBYyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDM0QsNkRBQTZEO0FBQzdELGFBQWE7QUFDYixPQUFPLFlBQVksTUFBTSx1QkFBdUIsQ0FBQztBQUdqRCxPQUFPLE9BQU8sTUFBTSwwQkFBMEIsQ0FBQztBQUUvQyxPQUFPLEVBQUUsTUFBTSxJQUFJLGVBQWUsRUFBYyxNQUFNLDJCQUEyQixDQUFDO0FBQ2xGLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBQ2pFLE9BQU8sRUFDTCxVQUFVLEdBR1gsTUFBTSxzQkFBc0IsQ0FBQztBQUM5QixPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFDakQsT0FBTyxFQUFFLGFBQWEs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
@@ -11,6 +11,9 @@ import '@eggjs/development';
11
11
  import '@eggjs/jsonp';
12
12
  import '@eggjs/i18n';
13
13
  import '@eggjs/static';
14
+ import '@eggjs/security';
15
+ import '@eggjs/schedule';
16
+ import '@eggjs/session';
14
17
  export type { EggAppInfo, } from '@eggjs/core';
15
18
  type IgnoreItem = string | RegExp | ((ctx: Context) => boolean);
16
19
  type IgnoreOrMatch = IgnoreItem | IgnoreItem[];
@@ -175,30 +178,6 @@ export interface EggAppConfig extends EggCoreAppConfig {
175
178
  */
176
179
  pkg: Record<string, any>;
177
180
  rundir: string;
178
- security: {
179
- domainWhiteList: string[];
180
- protocolWhiteList: string[];
181
- defaultMiddleware: string;
182
- csrf: any;
183
- ssrf: {
184
- ipBlackList: string[];
185
- ipExceptionList: string[];
186
- checkAddress?(ip: string): boolean;
187
- };
188
- xframe: {
189
- enable: boolean;
190
- value: 'SAMEORIGIN' | 'DENY' | 'ALLOW-FROM';
191
- };
192
- hsts: any;
193
- methodnoallow: {
194
- enable: boolean;
195
- };
196
- noopen: {
197
- enable: boolean;
198
- };
199
- xssProtection: any;
200
- csp: any;
201
- };
202
181
  siteFile: SiteFileMiddlewareOptions;
203
182
  meta: MetaMiddlewareOptions;
204
183
  notfound: NotFoundMiddlewareOptions;
@@ -4,4 +4,7 @@ import '@eggjs/development';
4
4
  import '@eggjs/jsonp';
5
5
  import '@eggjs/i18n';
6
6
  import '@eggjs/static';
7
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbGliL3R5cGVzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQWtCQSx1QkFBdUI7QUFDdkIsT0FBTyxnQkFBZ0IsQ0FBQztBQUN4QixPQUFPLG9CQUFvQixDQUFDO0FBQzVCLE9BQU8sY0FBYyxDQUFDO0FBQ3RCLE9BQU8sYUFBYSxDQUFDO0FBQ3JCLE9BQU8sZUFBZSxDQUFDIn0=
7
+ import '@eggjs/security';
8
+ import '@eggjs/schedule';
9
+ import '@eggjs/session';
10
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbGliL3R5cGVzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQWtCQSx1QkFBdUI7QUFDdkIsT0FBTyxnQkFBZ0IsQ0FBQztBQUN4QixPQUFPLG9CQUFvQixDQUFDO0FBQzVCLE9BQU8sY0FBYyxDQUFDO0FBQ3RCLE9BQU8sYUFBYSxDQUFDO0FBQ3JCLE9BQU8sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8saUJBQWlCLENBQUM7QUFDekIsT0FBTyxpQkFBaUIsQ0FBQztBQUN6QixPQUFPLGdCQUFnQixDQUFDIn0=
package/dist/package.json CHANGED
@@ -1,4 +1,4 @@
1
1
  {
2
2
  "name": "egg",
3
- "version": "4.0.1"
3
+ "version": "4.0.3"
4
4
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "egg",
3
- "version": "4.0.1",
3
+ "version": "4.0.3",
4
4
  "engines": {
5
5
  "node": ">= 18.19.0"
6
6
  },
@@ -21,11 +21,13 @@
21
21
  "dependencies": {
22
22
  "@eggjs/cluster": "^3.0.0",
23
23
  "@eggjs/cookies": "^3.0.0",
24
- "@eggjs/core": "^6.2.13",
24
+ "@eggjs/core": "^6.3.0",
25
25
  "@eggjs/development": "^4.0.0",
26
26
  "@eggjs/i18n": "^3.0.1",
27
27
  "@eggjs/jsonp": "^3.0.0",
28
28
  "@eggjs/schedule": "^5.0.2",
29
+ "@eggjs/security": "^4.0.0",
30
+ "@eggjs/session": "^4.0.0",
29
31
  "@eggjs/static": "^3.0.0",
30
32
  "@eggjs/utils": "^4.2.4",
31
33
  "@eggjs/watcher": "^4.0.3",
@@ -36,8 +38,6 @@
36
38
  "egg-logrotator": "^3.1.0",
37
39
  "egg-multipart": "^3.1.0",
38
40
  "egg-onerror": "^2.1.1",
39
- "egg-security": "^3.0.0",
40
- "egg-session": "^3.3.0",
41
41
  "egg-view": "^2.1.3",
42
42
  "extend2": "^4.0.0",
43
43
  "graceful": "^2.0.0",
@@ -94,10 +94,15 @@
94
94
  "test": "egg-bin test",
95
95
  "test-local": "egg-bin test",
96
96
  "test:changed": "egg-bin test --changed",
97
- "preci": "npm run clean && npm run lint",
97
+ "preci": "npm run clean && npm run lint",
98
98
  "ci": "egg-bin cov",
99
99
  "postci": "npm run prepublishOnly && npm run clean",
100
100
  "prepublishOnly": "tshy && tshy-after && attw --pack --profile node16",
101
+ "ci:app": "npm run ci \"test/app/**/*.test.ts,test/*.test.ts\"",
102
+ "ci:cluster1": "npm run ci \"test/cluster1/**/*.test.ts\"",
103
+ "ci:cluster2": "npm run ci \"test/cluster2/**/*.test.ts\"",
104
+ "ci:lib/core": "npm run ci \"test/lib/core/**/*.test.ts\"",
105
+ "ci:lib/plugins": "npm run ci \"test/lib/plugins/**/*.test.ts\"",
101
106
  "site:dev": "cross-env APP_ROOT=./site dumi dev",
102
107
  "site:build": "cross-env APP_ROOT=./site dumi build",
103
108
  "site:prettier": "prettier --config site/.prettierrc --ignore-path site/.prettierignore --write \"site/**/*.{js,jsx,tsx,ts,less,md,json}\"",
@@ -17,7 +17,7 @@ export default {
17
17
  */
18
18
  session: {
19
19
  enable: true,
20
- package: 'egg-session',
20
+ package: '@eggjs/session',
21
21
  },
22
22
 
23
23
  /**
@@ -61,7 +61,7 @@ export default {
61
61
  */
62
62
  security: {
63
63
  enable: true,
64
- package: 'egg-security',
64
+ package: '@eggjs/security',
65
65
  },
66
66
 
67
67
  /**
package/src/index.ts CHANGED
@@ -24,6 +24,13 @@ export * from './lib/egg.js';
24
24
  export * from './lib/types.js';
25
25
  export * from './lib/start.js';
26
26
 
27
+ // export singleton
28
+ export {
29
+ Singleton,
30
+ type SingletonCreateMethod,
31
+ type SingletonOptions,
32
+ } from '@eggjs/core';
33
+
27
34
  // export errors
28
35
  export * from './lib/error/index.js';
29
36
 
package/src/lib/egg.ts CHANGED
@@ -36,9 +36,6 @@ import {
36
36
  type HttpClientOptions,
37
37
  } from './core/httpclient.js';
38
38
  import { createLoggers } from './core/logger.js';
39
- import {
40
- Singleton, type SingletonCreateMethod, type SingletonOptions,
41
- } from './core/singleton.js';
42
39
  import { convertObject } from './core/utils.js';
43
40
  import { BaseContextClass } from './core/base_context_class.js';
44
41
  import { BaseHookClass } from './core/base_hook_class.js';
@@ -595,26 +592,6 @@ export class EggApplicationCore extends EggCore {
595
592
  /* eslint no-empty-function: off */
596
593
  set proxy(_) {}
597
594
 
598
- /**
599
- * create a singleton instance
600
- * @param {String} name - unique name for singleton
601
- * @param {Function|AsyncFunction} create - method will be invoked when singleton instance create
602
- */
603
- addSingleton(name: string, create: SingletonCreateMethod) {
604
- const options: SingletonOptions = {
605
- name,
606
- create,
607
- app: this,
608
- };
609
- const singleton = new Singleton(options);
610
- const initPromise = singleton.init();
611
- if (initPromise) {
612
- this.beforeStart(async () => {
613
- await initPromise;
614
- });
615
- }
616
- }
617
-
618
595
  #patchClusterClient(client: any) {
619
596
  const rawCreate = client.create;
620
597
  client.create = (...args: any) => {
@@ -695,8 +672,6 @@ declare module '@eggjs/core' {
695
672
  inspect(): any;
696
673
  get currentContext(): EggContext | undefined;
697
674
  ctxStorage: AsyncLocalStorage<EggContext>;
698
- get logger(): EggLogger;
699
- get coreLogger(): EggLogger;
700
675
  getLogger(name: string): EggLogger;
701
676
  createHttpClient(options?: HttpClientOptions): HttpClient;
702
677
  HttpClient: typeof HttpClient;
package/src/lib/types.ts CHANGED
@@ -22,12 +22,14 @@ import '@eggjs/development';
22
22
  import '@eggjs/jsonp';
23
23
  import '@eggjs/i18n';
24
24
  import '@eggjs/static';
25
+ import '@eggjs/security';
26
+ import '@eggjs/schedule';
27
+ import '@eggjs/session';
25
28
 
26
29
  export type {
27
30
  EggAppInfo,
28
31
  } from '@eggjs/core';
29
32
 
30
-
31
33
  type IgnoreItem = string | RegExp | ((ctx: Context) => boolean);
32
34
  type IgnoreOrMatch = IgnoreItem | IgnoreItem[];
33
35
 
@@ -214,27 +216,6 @@ export interface EggAppConfig extends EggCoreAppConfig {
214
216
 
215
217
  rundir: string;
216
218
 
217
- security: {
218
- domainWhiteList: string[];
219
- protocolWhiteList: string[];
220
- defaultMiddleware: string;
221
- csrf: any;
222
- ssrf: {
223
- ipBlackList: string[];
224
- ipExceptionList: string[];
225
- checkAddress?(ip: string): boolean;
226
- };
227
- xframe: {
228
- enable: boolean;
229
- value: 'SAMEORIGIN' | 'DENY' | 'ALLOW-FROM';
230
- };
231
- hsts: any;
232
- methodnoallow: { enable: boolean };
233
- noopen: { enable: boolean; }
234
- xssProtection: any;
235
- csp: any;
236
- };
237
-
238
219
  siteFile: SiteFileMiddlewareOptions;
239
220
  meta: MetaMiddlewareOptions;
240
221
  notfound: NotFoundMiddlewareOptions;
@@ -1,23 +0,0 @@
1
- import type { EggApplicationCore } from '../egg.js';
2
- export type SingletonCreateMethod = (config: Record<string, any>, app: EggApplicationCore, clientName: string) => unknown | Promise<unknown>;
3
- export interface SingletonOptions {
4
- name: string;
5
- app: EggApplicationCore;
6
- create: SingletonCreateMethod;
7
- }
8
- export declare class Singleton {
9
- #private;
10
- readonly clients: Map<string, any>;
11
- readonly app: EggApplicationCore;
12
- readonly create: SingletonCreateMethod;
13
- readonly name: string;
14
- readonly options: Record<string, any>;
15
- constructor(options: SingletonOptions);
16
- init(): void | Promise<void>;
17
- initSync(): void;
18
- initAsync(): Promise<void>;
19
- get(id: string): any;
20
- getSingletonInstance(id: string): any;
21
- createInstance(config: Record<string, any>, clientName: string): unknown;
22
- createInstanceAsync(config: Record<string, any>, clientName: string): Promise<unknown>;
23
- }
@@ -1,120 +0,0 @@
1
- "use strict";
2
- var __importDefault = (this && this.__importDefault) || function (mod) {
3
- return (mod && mod.__esModule) ? mod : { "default": mod };
4
- };
5
- Object.defineProperty(exports, "__esModule", { value: true });
6
- exports.Singleton = void 0;
7
- const node_assert_1 = __importDefault(require("node:assert"));
8
- const is_type_of_1 = require("is-type-of");
9
- class Singleton {
10
- clients = new Map();
11
- app;
12
- create;
13
- name;
14
- options;
15
- constructor(options) {
16
- (0, node_assert_1.default)(options.name, '[egg:singleton] Singleton#constructor options.name is required');
17
- (0, node_assert_1.default)(options.app, '[egg:singleton] Singleton#constructor options.app is required');
18
- (0, node_assert_1.default)(options.create, '[egg:singleton] Singleton#constructor options.create is required');
19
- (0, node_assert_1.default)(!(options.name in options.app), `[egg:singleton] ${options.name} is already exists in app`);
20
- this.app = options.app;
21
- this.name = options.name;
22
- this.create = options.create;
23
- this.options = options.app.config[this.name] ?? {};
24
- }
25
- init() {
26
- return (0, is_type_of_1.isAsyncFunction)(this.create) ? this.initAsync() : this.initSync();
27
- }
28
- initSync() {
29
- const options = this.options;
30
- (0, node_assert_1.default)(!(options.client && options.clients), `[egg:singleton] ${this.name} can not set options.client and options.clients both`);
31
- // alias app[name] as client, but still support createInstance method
32
- if (options.client) {
33
- const client = this.createInstance(options.client, options.name);
34
- this.#setClientToApp(client);
35
- this.#extendDynamicMethods(client);
36
- return;
37
- }
38
- // multi client, use app[name].getInstance(id)
39
- if (options.clients) {
40
- Object.keys(options.clients).forEach(id => {
41
- const client = this.createInstance(options.clients[id], id);
42
- this.clients.set(id, client);
43
- });
44
- this.#setClientToApp(this);
45
- return;
46
- }
47
- // no config.clients and config.client
48
- this.#setClientToApp(this);
49
- }
50
- async initAsync() {
51
- const options = this.options;
52
- (0, node_assert_1.default)(!(options.client && options.clients), `[egg:singleton] ${this.name} can not set options.client and options.clients both`);
53
- // alias app[name] as client, but still support createInstance method
54
- if (options.client) {
55
- const client = await this.createInstanceAsync(options.client, options.name);
56
- this.#setClientToApp(client);
57
- this.#extendDynamicMethods(client);
58
- return;
59
- }
60
- // multi client, use app[name].getInstance(id)
61
- if (options.clients) {
62
- await Promise.all(Object.keys(options.clients).map((id) => {
63
- return this.createInstanceAsync(options.clients[id], id)
64
- .then(client => this.clients.set(id, client));
65
- }));
66
- this.#setClientToApp(this);
67
- return;
68
- }
69
- // no config.clients and config.client
70
- this.#setClientToApp(this);
71
- }
72
- #setClientToApp(client) {
73
- Reflect.set(this.app, this.name, client);
74
- }
75
- get(id) {
76
- return this.clients.get(id);
77
- }
78
- // alias to `get(id)`
79
- getSingletonInstance(id) {
80
- return this.clients.get(id);
81
- }
82
- createInstance(config, clientName) {
83
- // async creator only support createInstanceAsync
84
- (0, node_assert_1.default)(!(0, is_type_of_1.isAsyncFunction)(this.create), `egg:singleton ${this.name} only support create asynchronous, please use createInstanceAsync`);
85
- // options.default will be merge in to options.clients[id]
86
- config = {
87
- ...this.options.default,
88
- ...config,
89
- };
90
- return this.create(config, this.app, clientName);
91
- }
92
- async createInstanceAsync(config, clientName) {
93
- // options.default will be merge in to options.clients[id]
94
- config = {
95
- ...this.options.default,
96
- ...config,
97
- };
98
- return await this.create(config, this.app, clientName);
99
- }
100
- #extendDynamicMethods(client) {
101
- (0, node_assert_1.default)(!client.createInstance, 'singleton instance should not have createInstance method');
102
- (0, node_assert_1.default)(!client.createInstanceAsync, 'singleton instance should not have createInstanceAsync method');
103
- try {
104
- let extendable = client;
105
- // Object.preventExtensions() or Object.freeze()
106
- if (!Object.isExtensible(client) || Object.isFrozen(client)) {
107
- // eslint-disable-next-line no-proto
108
- extendable = client.__proto__ || client;
109
- }
110
- extendable.createInstance = this.createInstance.bind(this);
111
- extendable.createInstanceAsync = this.createInstanceAsync.bind(this);
112
- }
113
- catch (err) {
114
- this.app.coreLogger.warn('[egg:singleton] %s dynamic create is disabled because of client is un-extendable', this.name);
115
- this.app.coreLogger.warn(err);
116
- }
117
- }
118
- }
119
- exports.Singleton = Singleton;
120
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2luZ2xldG9uLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2xpYi9jb3JlL3NpbmdsZXRvbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7QUFBQSw4REFBaUM7QUFDakMsMkNBQTZDO0FBWTdDLE1BQWEsU0FBUztJQUNYLE9BQU8sR0FBRyxJQUFJLEdBQUcsRUFBZSxDQUFDO0lBQ2pDLEdBQUcsQ0FBcUI7SUFDeEIsTUFBTSxDQUF3QjtJQUM5QixJQUFJLENBQVM7SUFDYixPQUFPLENBQXNCO0lBRXRDLFlBQVksT0FBeUI7UUFDbkMsSUFBQSxxQkFBTSxFQUFDLE9BQU8sQ0FBQyxJQUFJLEVBQUUsZ0VBQWdFLENBQUMsQ0FBQztRQUN2RixJQUFBLHFCQUFNLEVBQUMsT0FBTyxDQUFDLEdBQUcsRUFBRSwrREFBK0QsQ0FBQyxDQUFDO1FBQ3JGLElBQUEscUJBQU0sRUFBQyxPQUFPLENBQUMsTUFBTSxFQUFFLGtFQUFrRSxDQUFDLENBQUM7UUFDM0YsSUFBQSxxQkFBTSxFQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsSUFBSSxJQUFJLE9BQU8sQ0FBQyxHQUFHLENBQUMsRUFBRSxtQkFBbUIsT0FBTyxDQUFDLElBQUksMkJBQTJCLENBQUMsQ0FBQztRQUNuRyxJQUFJLENBQUMsR0FBRyxHQUFHLE9BQU8sQ0FBQyxHQUFHLENBQUM7UUFDdkIsSUFBSSxDQUFDLElBQUksR0FBRyxPQUFPLENBQUMsSUFBSSxDQUFDO1FBQ3pCLElBQUksQ0FBQyxNQUFNLEdBQUcsT0FBTyxDQUFDLE1BQU0sQ0FBQztRQUM3QixJQUFJLENBQUMsT0FBTyxHQUFHLE9BQU8sQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7SUFDckQsQ0FBQztJQUVELElBQUk7UUFDRixPQUFPLElBQUEsNEJBQWUsRUFBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUks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
@@ -1,23 +0,0 @@
1
- import type { EggApplicationCore } from '../egg.js';
2
- export type SingletonCreateMethod = (config: Record<string, any>, app: EggApplicationCore, clientName: string) => unknown | Promise<unknown>;
3
- export interface SingletonOptions {
4
- name: string;
5
- app: EggApplicationCore;
6
- create: SingletonCreateMethod;
7
- }
8
- export declare class Singleton {
9
- #private;
10
- readonly clients: Map<string, any>;
11
- readonly app: EggApplicationCore;
12
- readonly create: SingletonCreateMethod;
13
- readonly name: string;
14
- readonly options: Record<string, any>;
15
- constructor(options: SingletonOptions);
16
- init(): void | Promise<void>;
17
- initSync(): void;
18
- initAsync(): Promise<void>;
19
- get(id: string): any;
20
- getSingletonInstance(id: string): any;
21
- createInstance(config: Record<string, any>, clientName: string): unknown;
22
- createInstanceAsync(config: Record<string, any>, clientName: string): Promise<unknown>;
23
- }
@@ -1,113 +0,0 @@
1
- import assert from 'node:assert';
2
- import { isAsyncFunction } from 'is-type-of';
3
- export class Singleton {
4
- clients = new Map();
5
- app;
6
- create;
7
- name;
8
- options;
9
- constructor(options) {
10
- assert(options.name, '[egg:singleton] Singleton#constructor options.name is required');
11
- assert(options.app, '[egg:singleton] Singleton#constructor options.app is required');
12
- assert(options.create, '[egg:singleton] Singleton#constructor options.create is required');
13
- assert(!(options.name in options.app), `[egg:singleton] ${options.name} is already exists in app`);
14
- this.app = options.app;
15
- this.name = options.name;
16
- this.create = options.create;
17
- this.options = options.app.config[this.name] ?? {};
18
- }
19
- init() {
20
- return isAsyncFunction(this.create) ? this.initAsync() : this.initSync();
21
- }
22
- initSync() {
23
- const options = this.options;
24
- assert(!(options.client && options.clients), `[egg:singleton] ${this.name} can not set options.client and options.clients both`);
25
- // alias app[name] as client, but still support createInstance method
26
- if (options.client) {
27
- const client = this.createInstance(options.client, options.name);
28
- this.#setClientToApp(client);
29
- this.#extendDynamicMethods(client);
30
- return;
31
- }
32
- // multi client, use app[name].getInstance(id)
33
- if (options.clients) {
34
- Object.keys(options.clients).forEach(id => {
35
- const client = this.createInstance(options.clients[id], id);
36
- this.clients.set(id, client);
37
- });
38
- this.#setClientToApp(this);
39
- return;
40
- }
41
- // no config.clients and config.client
42
- this.#setClientToApp(this);
43
- }
44
- async initAsync() {
45
- const options = this.options;
46
- assert(!(options.client && options.clients), `[egg:singleton] ${this.name} can not set options.client and options.clients both`);
47
- // alias app[name] as client, but still support createInstance method
48
- if (options.client) {
49
- const client = await this.createInstanceAsync(options.client, options.name);
50
- this.#setClientToApp(client);
51
- this.#extendDynamicMethods(client);
52
- return;
53
- }
54
- // multi client, use app[name].getInstance(id)
55
- if (options.clients) {
56
- await Promise.all(Object.keys(options.clients).map((id) => {
57
- return this.createInstanceAsync(options.clients[id], id)
58
- .then(client => this.clients.set(id, client));
59
- }));
60
- this.#setClientToApp(this);
61
- return;
62
- }
63
- // no config.clients and config.client
64
- this.#setClientToApp(this);
65
- }
66
- #setClientToApp(client) {
67
- Reflect.set(this.app, this.name, client);
68
- }
69
- get(id) {
70
- return this.clients.get(id);
71
- }
72
- // alias to `get(id)`
73
- getSingletonInstance(id) {
74
- return this.clients.get(id);
75
- }
76
- createInstance(config, clientName) {
77
- // async creator only support createInstanceAsync
78
- assert(!isAsyncFunction(this.create), `egg:singleton ${this.name} only support create asynchronous, please use createInstanceAsync`);
79
- // options.default will be merge in to options.clients[id]
80
- config = {
81
- ...this.options.default,
82
- ...config,
83
- };
84
- return this.create(config, this.app, clientName);
85
- }
86
- async createInstanceAsync(config, clientName) {
87
- // options.default will be merge in to options.clients[id]
88
- config = {
89
- ...this.options.default,
90
- ...config,
91
- };
92
- return await this.create(config, this.app, clientName);
93
- }
94
- #extendDynamicMethods(client) {
95
- assert(!client.createInstance, 'singleton instance should not have createInstance method');
96
- assert(!client.createInstanceAsync, 'singleton instance should not have createInstanceAsync method');
97
- try {
98
- let extendable = client;
99
- // Object.preventExtensions() or Object.freeze()
100
- if (!Object.isExtensible(client) || Object.isFrozen(client)) {
101
- // eslint-disable-next-line no-proto
102
- extendable = client.__proto__ || client;
103
- }
104
- extendable.createInstance = this.createInstance.bind(this);
105
- extendable.createInstanceAsync = this.createInstanceAsync.bind(this);
106
- }
107
- catch (err) {
108
- this.app.coreLogger.warn('[egg:singleton] %s dynamic create is disabled because of client is un-extendable', this.name);
109
- this.app.coreLogger.warn(err);
110
- }
111
- }
112
- }
113
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2luZ2xldG9uLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2xpYi9jb3JlL3NpbmdsZXRvbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLE1BQU0sTUFBTSxhQUFhLENBQUM7QUFDakMsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLFlBQVksQ0FBQztBQVk3QyxNQUFNLE9BQU8sU0FBUztJQUNYLE9BQU8sR0FBRyxJQUFJLEdBQUcsRUFBZSxDQUFDO0lBQ2pDLEdBQUcsQ0FBcUI7SUFDeEIsTUFBTSxDQUF3QjtJQUM5QixJQUFJLENBQVM7SUFDYixPQUFPLENBQXNCO0lBRXRDLFlBQVksT0FBeUI7UUFDbkMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxJQUFJLEVBQUUsZ0VBQWdFLENBQUMsQ0FBQztRQUN2RixNQUFNLENBQUMsT0FBTyxDQUFDLEdBQUcsRUFBRSwrREFBK0QsQ0FBQyxDQUFDO1FBQ3JGLE1BQU0sQ0FBQyxPQUFPLENBQUMsTUFBTSxFQUFFLGtFQUFrRSxDQUFDLENBQUM7UUFDM0YsTUFBTSxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsSUFBSSxJQUFJLE9BQU8sQ0FBQyxHQUFHLENBQUMsRUFBRSxtQkFBbUIsT0FBTyxDQUFDLElBQUksMkJBQTJCLENBQUMsQ0FBQztRQUNuRyxJQUFJLENBQUMsR0FBRyxHQUFHLE9BQU8sQ0FBQyxHQUFHLENBQUM7UUFDdkIsSUFBSSxDQUFDLElBQUksR0FBRyxPQUFPLENBQUMsSUFBSSxDQUFDO1FBQ3pCLElBQUksQ0FBQyxNQUFNLEdBQUcsT0FBTyxDQUFDLE1BQU0sQ0FBQztRQUM3QixJQUFJLENBQUMsT0FBTyxHQUFHLE9BQU8sQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7SUFDckQsQ0FBQztJQUVELElBQUk7UUFDRixPQUFPLGVBQWUsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO0lBQzNFLENBQUM7SUFFRCxRQUFRO1FBQ04sTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQztRQUM3QixNQUFNLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxNQUFNLElBQUksT0FBTyxDQUFDLE9BQU8sQ0FBQyxFQUN6QyxtQkFBbUIsSUFBSSxDQUFDLElBQUksc0RBQXNELENBQUMsQ0FBQztRQUV0RixxRUFBcUU7UUFDckUsSUFBSSxPQUFPLENBQUMsTUFBTSxFQUFFLENBQUM7WUFDbkIsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxPQUFPLENBQUMsTUFBTSxFQUFFLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUNqRSxJQUFJLENBQUMsZUFBZSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1lBQzdCLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxNQUFNLENBQUMsQ0FBQztZQUNuQyxPQUFPO1FBQ1QsQ0FBQztRQUVELDhDQUE4QztRQUM5QyxJQUFJLE9BQU8sQ0FBQyxPQUFPLEVBQUUsQ0FBQztZQUNwQixNQUFNLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDLEVBQUU7Z0JBQ3hDLE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQztnQkFDNUQsSUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsRUFBRSxFQUFFLE1BQU0sQ0FBQyxDQUFDO1lBQy9CLENBQUMsQ0FBQyxDQUFDO1lBQ0gsSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUMzQixPQUFPO1FBQ1QsQ0FBQztRQUVELHNDQUFzQztRQUN0QyxJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQzdCLENBQUM7SUFFRCxLQUFLLENBQUMsU0FBUztRQUNiLE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUM7UUFDN0IsTUFBTSxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsTUFBTSxJQUFJLE9BQU8sQ0FBQyxPQUFPLENBQUMsRUFDekMsbUJBQW1CLElBQUksQ0FBQyxJQUFJLHNEQUFzRCxDQUFDLENBQUM7UUFFdEYscUVBQXFFO1FBQ3JFLElBQUksT0FBTyxDQUFDLE1BQU0sRUFBRSxDQUFDO1lBQ25CLE1BQU0sTUFBTSxHQUFHLE1BQU0sSUFBSSxDQUFDLG1CQUFtQixDQUFDLE9BQU8sQ0FBQyxNQUFNLEVBQUUsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQzVFLElBQUksQ0FBQyxlQUFlLENBQUMsTUFBTSxDQUFDLENBQUM7WUFDN0IsSUFBSSxDQUFDLHFCQUFxQixDQUFDLE1BQU0sQ0FBQyxDQUFDO1lBQ25DLE9BQU87UUFDVCxDQUFDO1FBRUQsOENBQThDO1FBQzlDLElBQUksT0FBTyxDQUFDLE9BQU8sRUFBRSxDQUFDO1lBQ3BCLE1BQU0sT0FBTyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFVLEVBQUUsRUFBRTtnQkFDaEUsT0FBTyxJQUFJLENBQUMsbUJBQW1CLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUM7cUJBQ3JELElBQUksQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLEVBQUUsRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDO1lBQ2xELENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDSixJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQzNCLE9BQU87UUFDVCxDQUFDO1FBRUQsc0NBQXNDO1FBQ3RDLElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDN0IsQ0FBQztJQUVELGVBQWUsQ0FBQyxNQUFlO1FBQzdCLE9BQU8sQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsSUFBSSxFQUFFLE1BQU0sQ0FBQyxDQUFDO0lBQzNDLENBQUM7SUFFRCxHQUFHLENBQUMsRUFBVTtRQUNaLE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDOUIsQ0FBQztJQUVELHFCQUFxQjtJQUNyQixvQkFBb0IsQ0FBQyxFQUFVO1FBQzdCLE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDOUIsQ0FBQztJQUVELGNBQWMsQ0FBQyxNQUEyQixFQUFFLFVBQWtCO1FBQzVELGlEQUFpRDtRQUNqRCxNQUFNLENBQUMsQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxFQUNsQyxpQkFBaUIsSUFBSSxDQUFDLElBQUksbUVBQW1FLENBQUMsQ0FBQztRQUNqRywwREFBMEQ7UUFDMUQsTUFBTSxHQUFHO1lBQ1AsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLE9BQU87WUFDdkIsR0FBRyxNQUFNO1NBQ1YsQ0FBQztRQUNGLE9BQVEsSUFBSSxDQUFDLE1BQWdDLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxHQUFHLEVBQUUsVUFBVSxDQUFDLENBQUM7SUFDOUUsQ0FBQztJQUVELEtBQUssQ0FBQyxtQkFBbUIsQ0FBQyxNQUEyQixFQUFFLFVBQWtCO1FBQ3ZFLDBEQUEwRDtRQUMxRCxNQUFNLEdBQUc7WUFDUCxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsT0FBTztZQUN2QixHQUFHLE1BQU07U0FDVixDQUFDO1FBQ0YsT0FBTyxNQUFNLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxHQUFHLEVBQUUsVUFBVSxDQUFDLENBQUM7SUFDekQsQ0FBQztJQUVELHFCQUFxQixDQUFDLE1BQVc7UUFDL0IsTUFBTSxDQUFDLENBQUMsTUFBTSxDQUFDLGNBQWMsRUFBRSwwREFBMEQsQ0FBQyxDQUFDO1FBQzNGLE1BQU0sQ0FBQyxDQUFDLE1BQU0sQ0FBQyxtQkFBbUIsRUFBRSwrREFBK0QsQ0FBQyxDQUFDO1FBRXJHLElBQUksQ0FBQztZQUNILElBQUksVUFBVSxHQUFHLE1BQU0sQ0FBQztZQUN4QixnREFBZ0Q7WUFDaEQsSUFBSSxDQUFDLE1BQU0sQ0FBQyxZQUFZLENBQUMsTUFBTSxDQUFDLElBQUksTUFBTSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDO2dCQUM1RCxvQ0FBb0M7Z0JBQ3BDLFVBQVUsR0FBRyxNQUFNLENBQUMsU0FBUyxJQUFJLE1BQU0sQ0FBQztZQUMxQyxDQUFDO1lBQ0QsVUFBVSxDQUFDLGNBQWMsR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUMzRCxVQUFVLENBQUMsbUJBQW1CLEdBQUcsSUFBSSxDQUFDLG1CQUFtQixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUN2RSxDQUFDO1FBQUMsT0FBTyxHQUFHLEVBQUUsQ0FBQztZQUNiLElBQUksQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFDLElBQUksQ0FDdEIsa0ZBQWtGLEVBQ2xGLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUNiLElBQUksQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUNoQyxDQUFDO0lBQ0gsQ0FBQztDQUNGIn0=
@@ -1,144 +0,0 @@
1
- import assert from 'node:assert';
2
- import { isAsyncFunction } from 'is-type-of';
3
- import type { EggApplicationCore } from '../egg.js';
4
-
5
- export type SingletonCreateMethod =
6
- (config: Record<string, any>, app: EggApplicationCore, clientName: string) => unknown | Promise<unknown>;
7
-
8
- export interface SingletonOptions {
9
- name: string;
10
- app: EggApplicationCore;
11
- create: SingletonCreateMethod;
12
- }
13
-
14
- export class Singleton {
15
- readonly clients = new Map<string, any>();
16
- readonly app: EggApplicationCore;
17
- readonly create: SingletonCreateMethod;
18
- readonly name: string;
19
- readonly options: Record<string, any>;
20
-
21
- constructor(options: SingletonOptions) {
22
- assert(options.name, '[egg:singleton] Singleton#constructor options.name is required');
23
- assert(options.app, '[egg:singleton] Singleton#constructor options.app is required');
24
- assert(options.create, '[egg:singleton] Singleton#constructor options.create is required');
25
- assert(!(options.name in options.app), `[egg:singleton] ${options.name} is already exists in app`);
26
- this.app = options.app;
27
- this.name = options.name;
28
- this.create = options.create;
29
- this.options = options.app.config[this.name] ?? {};
30
- }
31
-
32
- init() {
33
- return isAsyncFunction(this.create) ? this.initAsync() : this.initSync();
34
- }
35
-
36
- initSync() {
37
- const options = this.options;
38
- assert(!(options.client && options.clients),
39
- `[egg:singleton] ${this.name} can not set options.client and options.clients both`);
40
-
41
- // alias app[name] as client, but still support createInstance method
42
- if (options.client) {
43
- const client = this.createInstance(options.client, options.name);
44
- this.#setClientToApp(client);
45
- this.#extendDynamicMethods(client);
46
- return;
47
- }
48
-
49
- // multi client, use app[name].getInstance(id)
50
- if (options.clients) {
51
- Object.keys(options.clients).forEach(id => {
52
- const client = this.createInstance(options.clients[id], id);
53
- this.clients.set(id, client);
54
- });
55
- this.#setClientToApp(this);
56
- return;
57
- }
58
-
59
- // no config.clients and config.client
60
- this.#setClientToApp(this);
61
- }
62
-
63
- async initAsync() {
64
- const options = this.options;
65
- assert(!(options.client && options.clients),
66
- `[egg:singleton] ${this.name} can not set options.client and options.clients both`);
67
-
68
- // alias app[name] as client, but still support createInstance method
69
- if (options.client) {
70
- const client = await this.createInstanceAsync(options.client, options.name);
71
- this.#setClientToApp(client);
72
- this.#extendDynamicMethods(client);
73
- return;
74
- }
75
-
76
- // multi client, use app[name].getInstance(id)
77
- if (options.clients) {
78
- await Promise.all(Object.keys(options.clients).map((id: string) => {
79
- return this.createInstanceAsync(options.clients[id], id)
80
- .then(client => this.clients.set(id, client));
81
- }));
82
- this.#setClientToApp(this);
83
- return;
84
- }
85
-
86
- // no config.clients and config.client
87
- this.#setClientToApp(this);
88
- }
89
-
90
- #setClientToApp(client: unknown) {
91
- Reflect.set(this.app, this.name, client);
92
- }
93
-
94
- get(id: string) {
95
- return this.clients.get(id);
96
- }
97
-
98
- // alias to `get(id)`
99
- getSingletonInstance(id: string) {
100
- return this.clients.get(id);
101
- }
102
-
103
- createInstance(config: Record<string, any>, clientName: string) {
104
- // async creator only support createInstanceAsync
105
- assert(!isAsyncFunction(this.create),
106
- `egg:singleton ${this.name} only support create asynchronous, please use createInstanceAsync`);
107
- // options.default will be merge in to options.clients[id]
108
- config = {
109
- ...this.options.default,
110
- ...config,
111
- };
112
- return (this.create as SingletonCreateMethod)(config, this.app, clientName);
113
- }
114
-
115
- async createInstanceAsync(config: Record<string, any>, clientName: string) {
116
- // options.default will be merge in to options.clients[id]
117
- config = {
118
- ...this.options.default,
119
- ...config,
120
- };
121
- return await this.create(config, this.app, clientName);
122
- }
123
-
124
- #extendDynamicMethods(client: any) {
125
- assert(!client.createInstance, 'singleton instance should not have createInstance method');
126
- assert(!client.createInstanceAsync, 'singleton instance should not have createInstanceAsync method');
127
-
128
- try {
129
- let extendable = client;
130
- // Object.preventExtensions() or Object.freeze()
131
- if (!Object.isExtensible(client) || Object.isFrozen(client)) {
132
- // eslint-disable-next-line no-proto
133
- extendable = client.__proto__ || client;
134
- }
135
- extendable.createInstance = this.createInstance.bind(this);
136
- extendable.createInstanceAsync = this.createInstanceAsync.bind(this);
137
- } catch (err) {
138
- this.app.coreLogger.warn(
139
- '[egg:singleton] %s dynamic create is disabled because of client is un-extendable',
140
- this.name);
141
- this.app.coreLogger.warn(err);
142
- }
143
- }
144
- }