@eggjs/core 6.5.0 → 6.6.0-beta.10

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (87) hide show
  1. package/README.md +1 -5
  2. package/dist/base_context_class.d.ts +21 -0
  3. package/dist/base_context_class.js +40 -0
  4. package/dist/egg.d.ts +248 -0
  5. package/dist/egg.js +358 -0
  6. package/dist/index.d.ts +12 -0
  7. package/dist/index.js +12 -0
  8. package/dist/lifecycle.d.ts +84 -0
  9. package/dist/lifecycle.js +280 -0
  10. package/dist/loader/context_loader.d.ts +39 -0
  11. package/dist/loader/context_loader.js +79 -0
  12. package/dist/loader/egg_loader.d.ts +374 -0
  13. package/dist/loader/egg_loader.js +1184 -0
  14. package/dist/loader/file_loader.d.ts +105 -0
  15. package/dist/loader/file_loader.js +198 -0
  16. package/dist/singleton.d.ts +33 -0
  17. package/dist/singleton.js +107 -0
  18. package/{src/types.ts → dist/types.d.ts} +7 -7
  19. package/dist/utils/index.d.ts +19 -0
  20. package/dist/utils/index.js +103 -0
  21. package/dist/utils/sequencify.d.ts +16 -0
  22. package/dist/utils/sequencify.js +46 -0
  23. package/dist/utils/timing.d.ts +24 -0
  24. package/dist/utils/timing.js +85 -0
  25. package/package.json +39 -75
  26. package/dist/commonjs/base_context_class.d.ts +0 -16
  27. package/dist/commonjs/base_context_class.js +0 -41
  28. package/dist/commonjs/egg.d.ts +0 -246
  29. package/dist/commonjs/egg.js +0 -401
  30. package/dist/commonjs/index.d.ts +0 -12
  31. package/dist/commonjs/index.js +0 -32
  32. package/dist/commonjs/lifecycle.d.ts +0 -78
  33. package/dist/commonjs/lifecycle.js +0 -315
  34. package/dist/commonjs/loader/context_loader.d.ts +0 -35
  35. package/dist/commonjs/loader/context_loader.js +0 -110
  36. package/dist/commonjs/loader/egg_loader.d.ts +0 -369
  37. package/dist/commonjs/loader/egg_loader.js +0 -1558
  38. package/dist/commonjs/loader/file_loader.d.ts +0 -100
  39. package/dist/commonjs/loader/file_loader.js +0 -260
  40. package/dist/commonjs/package.json +0 -3
  41. package/dist/commonjs/singleton.d.ts +0 -29
  42. package/dist/commonjs/singleton.js +0 -124
  43. package/dist/commonjs/types.d.ts +0 -53
  44. package/dist/commonjs/types.js +0 -3
  45. package/dist/commonjs/utils/index.d.ts +0 -17
  46. package/dist/commonjs/utils/index.js +0 -117
  47. package/dist/commonjs/utils/sequencify.d.ts +0 -13
  48. package/dist/commonjs/utils/sequencify.js +0 -64
  49. package/dist/commonjs/utils/timing.d.ts +0 -21
  50. package/dist/commonjs/utils/timing.js +0 -106
  51. package/dist/esm/base_context_class.d.ts +0 -16
  52. package/dist/esm/base_context_class.js +0 -37
  53. package/dist/esm/egg.d.ts +0 -246
  54. package/dist/esm/egg.js +0 -388
  55. package/dist/esm/index.d.ts +0 -12
  56. package/dist/esm/index.js +0 -12
  57. package/dist/esm/lifecycle.d.ts +0 -78
  58. package/dist/esm/lifecycle.js +0 -308
  59. package/dist/esm/loader/context_loader.d.ts +0 -35
  60. package/dist/esm/loader/context_loader.js +0 -102
  61. package/dist/esm/loader/egg_loader.d.ts +0 -369
  62. package/dist/esm/loader/egg_loader.js +0 -1551
  63. package/dist/esm/loader/file_loader.d.ts +0 -100
  64. package/dist/esm/loader/file_loader.js +0 -253
  65. package/dist/esm/package.json +0 -3
  66. package/dist/esm/singleton.d.ts +0 -29
  67. package/dist/esm/singleton.js +0 -117
  68. package/dist/esm/types.d.ts +0 -53
  69. package/dist/esm/types.js +0 -2
  70. package/dist/esm/utils/index.d.ts +0 -17
  71. package/dist/esm/utils/index.js +0 -112
  72. package/dist/esm/utils/sequencify.d.ts +0 -13
  73. package/dist/esm/utils/sequencify.js +0 -61
  74. package/dist/esm/utils/timing.d.ts +0 -21
  75. package/dist/esm/utils/timing.js +0 -99
  76. package/dist/package.json +0 -4
  77. package/src/base_context_class.ts +0 -39
  78. package/src/egg.ts +0 -617
  79. package/src/index.ts +0 -14
  80. package/src/lifecycle.ts +0 -438
  81. package/src/loader/context_loader.ts +0 -123
  82. package/src/loader/egg_loader.ts +0 -1984
  83. package/src/loader/file_loader.ts +0 -349
  84. package/src/singleton.ts +0 -187
  85. package/src/utils/index.ts +0 -132
  86. package/src/utils/sequencify.ts +0 -105
  87. package/src/utils/timing.ts +0 -128
@@ -1,100 +0,0 @@
1
- import { type Fun } from '../utils/index.js';
2
- export declare const FULLPATH: unique symbol;
3
- export declare const EXPORTS: unique symbol;
4
- export declare enum CaseStyle {
5
- camel = "camel",
6
- lower = "lower",
7
- upper = "upper"
8
- }
9
- export type CaseStyleFunction = (filepath: string) => string[];
10
- export type FileLoaderInitializer = (exports: unknown, options: {
11
- path: string;
12
- pathName: string;
13
- }) => unknown;
14
- export type FileLoaderFilter = (exports: unknown) => boolean;
15
- export interface FileLoaderOptions {
16
- /** directories to be loaded */
17
- directory: string | string[];
18
- /** attach the target object from loaded files */
19
- target: Record<string, any>;
20
- /** match the files when load, support glob, default to all js files */
21
- match?: string | string[];
22
- /** ignore the files when load, support glob */
23
- ignore?: string | string[];
24
- /** custom file exports, receive two parameters, first is the inject object(if not js file, will be content buffer), second is an `options` object that contain `path` */
25
- initializer?: FileLoaderInitializer;
26
- /** determine whether invoke when exports is function */
27
- call?: boolean;
28
- /** determine whether override the property when get the same name */
29
- override?: boolean;
30
- /** an object that be the argument when invoke the function */
31
- inject?: Record<string, any>;
32
- /** a function that filter the exports which can be loaded */
33
- filter?: FileLoaderFilter;
34
- /** set property's case when converting a filepath to property list. */
35
- caseStyle?: CaseStyle | CaseStyleFunction;
36
- lowercaseFirst?: boolean;
37
- }
38
- export interface FileLoaderParseItem {
39
- fullpath: string;
40
- properties: string[];
41
- exports: object | Fun;
42
- }
43
- /**
44
- * Load files from directory to target object.
45
- * @since 1.0.0
46
- */
47
- export declare class FileLoader {
48
- static get FULLPATH(): symbol;
49
- static get EXPORTS(): symbol;
50
- readonly options: FileLoaderOptions & Required<Pick<FileLoaderOptions, 'caseStyle'>>;
51
- /**
52
- * @class
53
- * @param {Object} options - options
54
- * @param {String|Array} options.directory - directories to be loaded
55
- * @param {Object} options.target - attach the target object from loaded files
56
- * @param {String} options.match - match the files when load, support glob, default to all js files
57
- * @param {String} options.ignore - ignore the files when load, support glob
58
- * @param {Function} options.initializer - custom file exports, receive two parameters, first is the inject object(if not js file, will be content buffer), second is an `options` object that contain `path`
59
- * @param {Boolean} options.call - determine whether invoke when exports is function
60
- * @param {Boolean} options.override - determine whether override the property when get the same name
61
- * @param {Object} options.inject - an object that be the argument when invoke the function
62
- * @param {Function} options.filter - a function that filter the exports which can be loaded
63
- * @param {String|Function} options.caseStyle - set property's case when converting a filepath to property list.
64
- */
65
- constructor(options: FileLoaderOptions);
66
- /**
67
- * attach items to target object. Mapping the directory to properties.
68
- * `app/controller/group/repository.js` => `target.group.repository`
69
- * @returns {Object} target
70
- * @since 1.0.0
71
- */
72
- load(): Promise<object>;
73
- /**
74
- * Parse files from given directories, then return an items list, each item contains properties and exports.
75
- *
76
- * For example, parse `app/controller/group/repository.js`
77
- *
78
- * ```
79
- * module.exports = app => {
80
- * return class RepositoryController extends app.Controller {};
81
- * }
82
- * ```
83
- *
84
- * It returns a item
85
- *
86
- * ```
87
- * {
88
- * properties: [ 'group', 'repository' ],
89
- * exports: app => { ... },
90
- * }
91
- * ```
92
- *
93
- * `Properties` is an array that contains the directory of a filepath.
94
- *
95
- * `Exports` depends on type, if exports is a function, it will be called. if initializer is specified, it will be called with exports for customizing.
96
- * @returns {Array} items
97
- * @since 1.0.0
98
- */
99
- protected parse(): Promise<FileLoaderParseItem[]>;
100
- }
@@ -1,253 +0,0 @@
1
- import assert from 'node:assert';
2
- import fs from 'node:fs';
3
- import { debuglog } from 'node:util';
4
- import path from 'node:path';
5
- import globby from 'globby';
6
- import { isClass, isGeneratorFunction, isAsyncFunction, isPrimitive, } from 'is-type-of';
7
- import { isSupportTypeScript } from '@eggjs/utils';
8
- import utils from '../utils/index.js';
9
- const debug = debuglog('@eggjs/core/file_loader');
10
- export const FULLPATH = Symbol('EGG_LOADER_ITEM_FULLPATH');
11
- export const EXPORTS = Symbol('EGG_LOADER_ITEM_EXPORTS');
12
- export var CaseStyle;
13
- (function (CaseStyle) {
14
- CaseStyle["camel"] = "camel";
15
- CaseStyle["lower"] = "lower";
16
- CaseStyle["upper"] = "upper";
17
- })(CaseStyle || (CaseStyle = {}));
18
- /**
19
- * Load files from directory to target object.
20
- * @since 1.0.0
21
- */
22
- export class FileLoader {
23
- static get FULLPATH() {
24
- return FULLPATH;
25
- }
26
- static get EXPORTS() {
27
- return EXPORTS;
28
- }
29
- options;
30
- /**
31
- * @class
32
- * @param {Object} options - options
33
- * @param {String|Array} options.directory - directories to be loaded
34
- * @param {Object} options.target - attach the target object from loaded files
35
- * @param {String} options.match - match the files when load, support glob, default to all js files
36
- * @param {String} options.ignore - ignore the files when load, support glob
37
- * @param {Function} options.initializer - custom file exports, receive two parameters, first is the inject object(if not js file, will be content buffer), second is an `options` object that contain `path`
38
- * @param {Boolean} options.call - determine whether invoke when exports is function
39
- * @param {Boolean} options.override - determine whether override the property when get the same name
40
- * @param {Object} options.inject - an object that be the argument when invoke the function
41
- * @param {Function} options.filter - a function that filter the exports which can be loaded
42
- * @param {String|Function} options.caseStyle - set property's case when converting a filepath to property list.
43
- */
44
- constructor(options) {
45
- assert(options.directory, 'options.directory is required');
46
- assert(options.target, 'options.target is required');
47
- this.options = {
48
- caseStyle: CaseStyle.camel,
49
- call: true,
50
- override: false,
51
- ...options,
52
- };
53
- // compatible old options _lowercaseFirst_
54
- if (this.options.lowercaseFirst === true) {
55
- utils.deprecated('lowercaseFirst is deprecated, use caseStyle instead');
56
- this.options.caseStyle = CaseStyle.lower;
57
- }
58
- }
59
- /**
60
- * attach items to target object. Mapping the directory to properties.
61
- * `app/controller/group/repository.js` => `target.group.repository`
62
- * @returns {Object} target
63
- * @since 1.0.0
64
- */
65
- async load() {
66
- const items = await this.parse();
67
- const target = this.options.target;
68
- for (const item of items) {
69
- debug('loading item: %o', item);
70
- // item { properties: [ 'a', 'b', 'c'], exports }
71
- // => target.a.b.c = exports
72
- // oxlint-disable-next-line unicorn/no-array-reduce
73
- item.properties.reduce((target, property, index) => {
74
- let obj;
75
- const properties = item.properties.slice(0, index + 1).join('.');
76
- if (index === item.properties.length - 1) {
77
- if (property in target && !this.options.override) {
78
- throw new Error(`can't overwrite property '${properties}' from ${target[property][FULLPATH]} by ${item.fullpath}`);
79
- }
80
- obj = item.exports;
81
- if (obj && !isPrimitive(obj)) {
82
- Reflect.set(obj, FULLPATH, item.fullpath);
83
- Reflect.set(obj, EXPORTS, true);
84
- }
85
- }
86
- else {
87
- obj = target[property] || {};
88
- }
89
- target[property] = obj;
90
- debug('loaded item properties: %o => %o', properties, obj);
91
- return obj;
92
- }, target);
93
- }
94
- return target;
95
- }
96
- /**
97
- * Parse files from given directories, then return an items list, each item contains properties and exports.
98
- *
99
- * For example, parse `app/controller/group/repository.js`
100
- *
101
- * ```
102
- * module.exports = app => {
103
- * return class RepositoryController extends app.Controller {};
104
- * }
105
- * ```
106
- *
107
- * It returns a item
108
- *
109
- * ```
110
- * {
111
- * properties: [ 'group', 'repository' ],
112
- * exports: app => { ... },
113
- * }
114
- * ```
115
- *
116
- * `Properties` is an array that contains the directory of a filepath.
117
- *
118
- * `Exports` depends on type, if exports is a function, it will be called. if initializer is specified, it will be called with exports for customizing.
119
- * @returns {Array} items
120
- * @since 1.0.0
121
- */
122
- async parse() {
123
- let files = this.options.match;
124
- if (files) {
125
- files = Array.isArray(files) ? files : [files];
126
- }
127
- else {
128
- files = isSupportTypeScript()
129
- ? ['**/*.(js|ts)', '!**/*.d.ts']
130
- : ['**/*.js'];
131
- }
132
- let ignore = this.options.ignore;
133
- if (ignore) {
134
- ignore = Array.isArray(ignore) ? ignore : [ignore];
135
- ignore = ignore.filter(f => !!f).map(f => '!' + f);
136
- files = files.concat(ignore);
137
- }
138
- let directories = this.options.directory;
139
- if (!Array.isArray(directories)) {
140
- directories = [directories];
141
- }
142
- const filter = typeof this.options.filter === 'function' ? this.options.filter : null;
143
- const items = [];
144
- debug('[parse] parsing directories: %j', directories);
145
- for (const directory of directories) {
146
- const filepaths = globby.sync(files, { cwd: directory });
147
- debug('[parse] globby files: %o, cwd: %o => %o', files, directory, filepaths);
148
- for (const filepath of filepaths) {
149
- const fullpath = path.join(directory, filepath);
150
- if (!fs.statSync(fullpath).isFile())
151
- continue;
152
- if (filepath.endsWith('.js')) {
153
- const filepathTs = filepath.replace(/\.js$/, '.ts');
154
- if (filepaths.includes(filepathTs)) {
155
- debug('[parse] ignore %s, because %s exists', fullpath, filepathTs);
156
- continue;
157
- }
158
- }
159
- // get properties
160
- // app/service/foo/bar.js => [ 'foo', 'bar' ]
161
- const properties = getProperties(filepath, this.options.caseStyle);
162
- // app/service/foo/bar.js => service.foo.bar
163
- const pathName = directory.split(/[/\\]/).slice(-1) + '.' + properties.join('.');
164
- // get exports from the file
165
- const exports = await getExports(fullpath, this.options, pathName);
166
- // ignore exports when it's null or false returned by filter function
167
- if (exports === null ||
168
- exports === undefined ||
169
- (filter && filter(exports) === false)) {
170
- continue;
171
- }
172
- // set properties of class
173
- if (isClass(exports)) {
174
- exports.prototype.pathName = pathName;
175
- exports.prototype.fullPath = fullpath;
176
- }
177
- items.push({ fullpath, properties, exports });
178
- debug('[parse] parse %s, properties %j, exports %o', fullpath, properties, exports);
179
- }
180
- }
181
- return items;
182
- }
183
- }
184
- // convert file path to an array of properties
185
- // a/b/c.js => ['a', 'b', 'c']
186
- function getProperties(filepath, caseStyle) {
187
- // if caseStyle is function, return the result of function
188
- if (typeof caseStyle === 'function') {
189
- const result = caseStyle(filepath);
190
- assert(Array.isArray(result), `caseStyle expect an array, but got ${JSON.stringify(result)}`);
191
- return result;
192
- }
193
- // use default camelize
194
- return defaultCamelize(filepath, caseStyle);
195
- }
196
- // Get exports from filepath
197
- // If exports is null/undefined, it will be ignored
198
- async function getExports(fullpath, options, pathName) {
199
- let exports = await utils.loadFile(fullpath);
200
- // process exports as you like
201
- if (options.initializer) {
202
- exports = options.initializer(exports, { path: fullpath, pathName });
203
- debug('[getExports] after initializer => %o', exports);
204
- }
205
- if (isGeneratorFunction(exports)) {
206
- throw new TypeError(`Support for generators was removed, fullpath: ${fullpath}`);
207
- }
208
- // return exports when it's a class or async function
209
- //
210
- // module.exports = class Service {};
211
- // or
212
- // module.exports = async function() {}
213
- if (isClass(exports) || isAsyncFunction(exports)) {
214
- return exports;
215
- }
216
- // return exports after call when it's a function
217
- //
218
- // module.exports = function(app) {
219
- // return {};
220
- // }
221
- if (options.call && typeof exports === 'function') {
222
- exports = exports(options.inject);
223
- if (exports !== null && exports !== undefined) {
224
- return exports;
225
- }
226
- }
227
- // return exports what is
228
- return exports;
229
- }
230
- function defaultCamelize(filepath, caseStyle) {
231
- const properties = filepath.slice(0, filepath.lastIndexOf('.')).split('/');
232
- return properties.map(property => {
233
- if (!/^[a-z][a-z0-9_-]*$/i.test(property)) {
234
- throw new Error(`${property} is not match 'a-z0-9_-' in ${filepath}`);
235
- }
236
- // use default camelize, will capitalize the first letter
237
- // foo_bar.js > FooBar
238
- // fooBar.js > FooBar
239
- // FooBar.js > FooBar
240
- // FooBar.js > FooBar
241
- // FooBar.js > fooBar (if lowercaseFirst is true)
242
- property = property.replaceAll(/[_-][a-z]/gi, s => s.slice(1).toUpperCase());
243
- let first = property[0];
244
- if (caseStyle === CaseStyle.lower) {
245
- first = first.toLowerCase();
246
- }
247
- else if (caseStyle === CaseStyle.upper) {
248
- first = first.toUpperCase();
249
- }
250
- return first + property.slice(1);
251
- });
252
- }
253
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmlsZV9sb2FkZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbG9hZGVyL2ZpbGVfbG9hZGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sTUFBTSxNQUFNLGFBQWEsQ0FBQztBQUNqQyxPQUFPLEVBQUUsTUFBTSxTQUFTLENBQUM7QUFDekIsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLFdBQVcsQ0FBQztBQUNyQyxPQUFPLElBQUksTUFBTSxXQUFXLENBQUM7QUFFN0IsT0FBTyxNQUFNLE1BQU0sUUFBUSxDQUFDO0FBQzVCLE9BQU8sRUFDTCxPQUFPLEVBQ1AsbUJBQW1CLEVBQ25CLGVBQWUsRUFDZixXQUFXLEdBQ1osTUFBTSxZQUFZLENBQUM7QUFDcEIsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sY0FBYyxDQUFDO0FBRW5ELE9BQU8sS0FBbUIsTUFBTSxtQkFBbUIsQ0FBQztBQUVwRCxNQUFNLEtBQUssR0FBRyxRQUFRLENBQUMseUJBQXlCLENBQUMsQ0FBQztBQUVsRCxNQUFNLENBQUMsTUFBTSxRQUFRLEdBQUcsTUFBTSxDQUFDLDBCQUEwQixDQUFDLENBQUM7QUFDM0QsTUFBTSxDQUFDLE1BQU0sT0FBTyxHQUFHLE1BQU0sQ0FBQyx5QkFBeUIsQ0FBQyxDQUFDO0FBRXpELE1BQU0sQ0FBTixJQUFZLFNBSVg7QUFKRCxXQUFZLFNBQVM7SUFDbkIsNEJBQWUsQ0FBQTtJQUNmLDRCQUFlLENBQUE7SUFDZiw0QkFBZSxDQUFBO0FBQ2pCLENBQUMsRUFKVyxTQUFTLEtBQVQsU0FBUyxRQUlwQjtBQXlDRDs7O0dBR0c7QUFDSCxNQUFNLE9BQU8sVUFBVTtJQUNyQixNQUFNLEtBQUssUUFBUTtRQUNqQixPQUFPLFFBQVEsQ0FBQztJQUNsQixDQUFDO0lBRUQsTUFBTSxLQUFLLE9BQU87UUFDaEIsT0FBTyxPQUFPLENBQUM7SUFDakIsQ0FBQztJQUVRLE9BQU8sQ0FDaUM7SUFFakQ7Ozs7Ozs7Ozs7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
@@ -1,3 +0,0 @@
1
- {
2
- "type": "module"
3
- }
@@ -1,29 +0,0 @@
1
- import type { EggCore } from './egg.js';
2
- export type SingletonCreateMethod = (config: Record<string, any>, app: EggCore, clientName: string) => unknown | Promise<unknown>;
3
- export interface SingletonOptions {
4
- name: string;
5
- app: EggCore;
6
- create: SingletonCreateMethod;
7
- }
8
- export declare class Singleton<T = any> {
9
- #private;
10
- readonly clients: Map<string, T>;
11
- readonly app: EggCore;
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
- /**
20
- * @deprecated please use `getSingletonInstance(id)` instead
21
- */
22
- get(id: string): T;
23
- /**
24
- * Get singleton instance by id
25
- */
26
- getSingletonInstance(id: string): T;
27
- createInstance(config: Record<string, any>, clientName: string): T;
28
- createInstanceAsync(config: Record<string, any>, clientName: string): Promise<T>;
29
- }
@@ -1,117 +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, '[@eggjs/core/singleton] Singleton#constructor options.name is required');
11
- assert(options.app, '[@eggjs/core/singleton] Singleton#constructor options.app is required');
12
- assert(options.create, '[@eggjs/core/singleton] Singleton#constructor options.create is required');
13
- assert(!(options.name in options.app), `[@eggjs/core/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), `[@eggjs/core/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].getSingletonInstance(id)
33
- if (options.clients) {
34
- for (const id of Object.keys(options.clients)) {
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), `[@eggjs/core/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).then(client => this.clients.set(id, client));
58
- }));
59
- this.#setClientToApp(this);
60
- return;
61
- }
62
- // no config.clients and config.client
63
- this.#setClientToApp(this);
64
- }
65
- #setClientToApp(client) {
66
- Reflect.set(this.app, this.name, client);
67
- }
68
- /**
69
- * @deprecated please use `getSingletonInstance(id)` instead
70
- */
71
- get(id) {
72
- return this.clients.get(id);
73
- }
74
- /**
75
- * Get singleton instance by id
76
- */
77
- getSingletonInstance(id) {
78
- return this.clients.get(id);
79
- }
80
- createInstance(config, clientName) {
81
- // async creator only support createInstanceAsync
82
- assert(!isAsyncFunction(this.create), `[@eggjs/core/singleton] ${this.name} only support asynchronous creation, please use createInstanceAsync`);
83
- // options.default will be merge in to options.clients[id]
84
- config = {
85
- ...this.options.default,
86
- ...config,
87
- };
88
- return this.create(config, this.app, clientName);
89
- }
90
- async createInstanceAsync(config, clientName) {
91
- // options.default will be merge in to options.clients[id]
92
- config = {
93
- ...this.options.default,
94
- ...config,
95
- };
96
- return (await this.create(config, this.app, clientName));
97
- }
98
- #extendDynamicMethods(client) {
99
- assert(!client.createInstance, '[@eggjs/core/singleton] singleton instance should not have createInstance method');
100
- assert(!client.createInstanceAsync, '[@eggjs/core/singleton] singleton instance should not have createInstanceAsync method');
101
- try {
102
- let extendable = client;
103
- // Object.preventExtensions() or Object.freeze()
104
- if (!Object.isExtensible(client) || Object.isFrozen(client)) {
105
- // eslint-disable-next-line no-proto
106
- extendable = client.__proto__ || client;
107
- }
108
- extendable.createInstance = this.createInstance.bind(this);
109
- extendable.createInstanceAsync = this.createInstanceAsync.bind(this);
110
- }
111
- catch (err) {
112
- this.app.coreLogger.warn('[@eggjs/core/singleton] %s dynamic create is disabled because of client is un-extendable', this.name);
113
- this.app.coreLogger.warn(err);
114
- }
115
- }
116
- }
117
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2luZ2xldG9uLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3NpbmdsZXRvbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLE1BQU0sTUFBTSxhQUFhLENBQUM7QUFDakMsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLFlBQVksQ0FBQztBQWU3QyxNQUFNLE9BQU8sU0FBUztJQUNYLE9BQU8sR0FBRyxJQUFJLEdBQUcsRUFBYSxDQUFDO0lBQy9CLEdBQUcsQ0FBVTtJQUNiLE1BQU0sQ0FBd0I7SUFDOUIsSUFBSSxDQUFTO0lBQ2IsT0FBTyxDQUFzQjtJQUV0QyxZQUFZLE9BQXlCO1FBQ25DLE1BQU0sQ0FDSixPQUFPLENBQUMsSUFBSSxFQUNaLHdFQUF3RSxDQUN6RSxDQUFDO1FBQ0YsTUFBTSxDQUNKLE9BQU8sQ0FBQyxHQUFHLEVBQ1gsdUVBQXVFLENBQ3hFLENBQUM7UUFDRixNQUFNLENBQ0osT0FBTyxDQUFDLE1BQU0sRUFDZCwwRUFBMEUsQ0FDM0UsQ0FBQztRQUNGLE1BQU0sQ0FDSixDQUFDLENBQUMsT0FBTyxDQUFDLElBQUksSUFBSSxPQUFPLENBQUMsR0FBRyxDQUFDLEVBQzlCLDJCQUEyQixPQUFPLENBQUMsSUFBSSwyQkFBMkIsQ0FDbkUsQ0FBQztRQUNGLElBQUksQ0FBQyxHQUFHLEdBQUcsT0FBTyxDQUFDLEdBQUcsQ0FBQztRQUN2QixJQUFJLENBQUMsSUFBSSxHQUFHLE9BQU8sQ0FBQyxJQUFJLENBQUM7UUFDekIsSUFBSSxDQUFDLE1BQU0sR0FBRyxPQUFPLENBQUMsTUFBTSxDQUFDO1FBQzdCLElBQUksQ0FBQyxPQUFPLEdBQUcsT0FBTyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztJQUNyRCxDQUFDO0lBRUQsSUFBSTtRQUNGLE9BQU8sZUFBZSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7SUFDM0UsQ0FBQztJQUVELFFBQVE7UUFDTixNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDO1FBQzdCLE1BQU0sQ0FDSixDQUFDLENBQUMsT0FBTyxDQUFDLE1BQU0sSUFBSSxPQUFPLENBQUMsT0FBTyxDQUFDLEVBQ3BDLDJCQUEyQixJQUFJLENBQUMsSUFBSSxzREFBc0QsQ0FDM0YsQ0FBQztRQUVGLHFFQUFxRTtRQUNyRSxJQUFJLE9BQU8sQ0FBQyxNQUFNLEVBQUUsQ0FBQztZQUNuQixNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLE9BQU8sQ0FBQyxNQUFNLEVBQUUsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQ2pFLElBQUksQ0FBQyxlQUFlLENBQUMsTUFBTSxDQUFDLENBQUM7WUFDN0IsSUFBSSxDQUFDLHFCQUFxQixDQUFDLE1BQU0sQ0FBQyxDQUFDO1lBQ25DLE9BQU87UUFDVCxDQUFDO1FBRUQsdURBQXVEO1FBQ3ZELElBQUksT0FBTyxDQUFDLE9BQU8sRUFBRSxDQUFDO1lBQ3BCLEtBQUssTUFBTSxFQUFFLElBQUksTUFBTSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQztnQkFDOUMsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDO2dCQUM1RCxJQUFJLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxFQUFFLEVBQUUsTUFBTSxDQUFDLENBQUM7WUFDL0IsQ0FBQztZQUNELElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDM0IsT0FBTztRQUNULENBQUM7UUFFRCxzQ0FBc0M7UUFDdEMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUM3QixDQUFDO0lBRUQsS0FBSyxDQUFDLFNBQVM7UUFDYixNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDO1FBQzdCLE1BQU0sQ0FDSixDQUFDLENBQUMsT0FBTyxDQUFDLE1BQU0sSUFBSSxPQUFPLENBQUMsT0FBTyxDQUFDLEVBQ3BDLDJCQUEyQixJQUFJLENBQUMsSUFBSSxzREFBc0QsQ0FDM0YsQ0FBQztRQUVGLHFFQUFxRTtRQUNyRSxJQUFJLE9BQU8sQ0FBQyxNQUFNLEVBQUUsQ0FBQztZQUNuQixNQUFNLE1BQU0sR0FBRyxNQUFNLElBQUksQ0FBQyxtQkFBbUIsQ0FDM0MsT0FBTyxDQUFDLE1BQU0sRUFDZCxPQUFPLENBQUMsSUFBSSxDQUNiLENBQUM7WUFDRixJQUFJLENBQUMsZUFBZSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1lBQzdCLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxNQUFNLENBQUMsQ0FBQztZQUNuQyxPQUFPO1FBQ1QsQ0FBQztRQUVELDhDQUE4QztRQUM5QyxJQUFJLE9BQU8sQ0FBQyxPQUFPLEVBQUUsQ0FBQztZQUNwQixNQUFNLE9BQU8sQ0FBQyxHQUFHLENBQ2YsTUFBTSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBVSxFQUFFLEVBQUU7Z0JBQzlDLE9BQU8sSUFBSSxDQUFDLG1CQUFtQixDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUMzRCxNQUFNLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLEVBQUUsRUFBRSxNQUFNLENBQUMsQ0FDdkMsQ0FBQztZQUNKLENBQUMsQ0FBQyxDQUNILENBQUM7WUFDRixJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQzNCLE9BQU87UUFDVCxDQUFDO1FBRUQsc0NBQXNDO1FBQ3RDLElBQUksQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDN0IsQ0FBQztJQUVELGVBQWUsQ0FBQyxNQUFlO1FBQzdCLE9BQU8sQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsSUFBSSxFQUFFLE1BQU0sQ0FBQyxDQUFDO0lBQzNDLENBQUM7SUFFRDs7T0FFRztJQUNILEdBQUcsQ0FBQyxFQUFVO1FBQ1osT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQU0sQ0FBQztJQUNuQyxDQUFDO0lBRUQ7O09BRUc7SUFDSCxvQkFBb0IsQ0FBQyxFQUFVO1FBQzdCLE9BQU8sSUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFNLENBQUM7SUFDbkMsQ0FBQztJQUVELGNBQWMsQ0FBQyxNQUEyQixFQUFFLFVBQWtCO1FBQzVELGlEQUFpRDtRQUNqRCxNQUFNLENBQ0osQ0FBQyxlQUFlLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxFQUM3QiwyQkFBMkIsSUFBSSxDQUFDLElBQUkscUVBQXFFLENBQzFHLENBQUM7UUFDRiwwREFBMEQ7UUFDMUQsTUFBTSxHQUFHO1lBQ1AsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLE9BQU87WUFDdkIsR0FBRyxNQUFNO1NBQ1YsQ0FBQztRQUNGLE9BQVEsSUFBSSxDQUFDLE1BQWdDLENBQzNDLE1BQU0sRUFDTixJQUFJLENBQUMsR0FBRyxFQUNSLFVBQVUsQ0FDTixDQUFDO0lBQ1QsQ0FBQztJQUVELEtBQUssQ0FBQyxtQkFBbUIsQ0FBQyxNQUEyQixFQUFFLFVBQWtCO1FBQ3ZFLDBEQUEwRDtRQUMxRCxNQUFNLEdBQUc7WUFDUCxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsT0FBTztZQUN2QixHQUFHLE1BQU07U0FDVixDQUFDO1FBQ0YsT0FBTyxDQUFDLE1BQU0sSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLEdBQUcsRUFBRSxVQUFVLENBQUMsQ0FBTSxDQUFDO0lBQ2hFLENBQUM7SUFFRCxxQkFBcUIsQ0FBQyxNQUFXO1FBQy9CLE1BQU0sQ0FDSixDQUFDLE1BQU0sQ0FBQyxjQUFjLEVBQ3RCLGtGQUFrRixDQUNuRixDQUFDO1FBQ0YsTUFBTSxDQUNKLENBQUMsTUFBTSxDQUFDLG1CQUFtQixFQUMzQix1RkFBdUYsQ0FDeEYsQ0FBQztRQUVGLElBQUksQ0FBQztZQUNILElBQUksVUFBVSxHQUFHLE1BQU0sQ0FBQztZQUN4QixnREFBZ0Q7WUFDaEQsSUFBSSxDQUFDLE1BQU0sQ0FBQyxZQUFZLENBQUMsTUFBTSxDQUFDLElBQUksTUFBTSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDO2dCQUM1RCxvQ0FBb0M7Z0JBQ3BDLFVBQVUsR0FBRyxNQUFNLENBQUMsU0FBUyxJQUFJLE1BQU0sQ0FBQztZQUMxQyxDQUFDO1lBQ0QsVUFBVSxDQUFDLGNBQWMsR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUMzRCxVQUFVLENBQUMsbUJBQW1CLEdBQUcsSUFBSSxDQUFDLG1CQUFtQixDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUN2RSxDQUFDO1FBQUMsT0FBTyxHQUFHLEVBQUUsQ0FBQztZQUNiLElBQUksQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFDLElBQUksQ0FDdEIsMEZBQTBGLEVBQzFGLElBQUksQ0FBQyxJQUFJLENBQ1YsQ0FBQztZQUNGLElBQUksQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUNoQyxDQUFDO0lBQ0gsQ0FBQztDQUNGIn0=
@@ -1,53 +0,0 @@
1
- export interface EggAppInfo {
2
- /** package.json */
3
- pkg: Record<string, any>;
4
- /** the application name from package.json */
5
- name: string;
6
- /** current directory of application */
7
- baseDir: string;
8
- /** equals to serverEnv */
9
- env: string;
10
- /** equals to serverScope */
11
- scope: string;
12
- /** home directory of the OS */
13
- HOME: string;
14
- /** baseDir when local and unittest, HOME when other environment */
15
- root: string;
16
- }
17
- export interface EggPluginInfo {
18
- /** the plugin name, it can be used in `dep` */
19
- name: string;
20
- /** the package name of plugin */
21
- package?: string;
22
- version?: string;
23
- /** whether enabled */
24
- enable: boolean;
25
- implicitEnable?: boolean;
26
- /** the directory of the plugin package */
27
- path?: string;
28
- /** the dependent plugins, you can use the plugin name */
29
- dependencies: string[];
30
- /** the optional dependent plugins. */
31
- optionalDependencies: string[];
32
- dependents?: string[];
33
- /** specify the serverEnv that only enable the plugin in it */
34
- env: string[];
35
- /** the file plugin config in. */
36
- from: string;
37
- }
38
- export interface CustomLoaderConfigItem {
39
- /** the directory of the custom loader */
40
- directory: string;
41
- /** the inject object, it can be app or ctx */
42
- inject: string;
43
- /** whether load unit files */
44
- loadunit?: boolean;
45
- }
46
- export interface EggAppConfig extends Record<string, any> {
47
- coreMiddleware: string[];
48
- middleware: string[];
49
- customLoader?: Record<string, CustomLoaderConfigItem>;
50
- controller?: {
51
- supportParams?: boolean;
52
- };
53
- }
package/dist/esm/types.js DELETED
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvdHlwZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiJ9
@@ -1,17 +0,0 @@
1
- export type Fun = (...args: unknown[]) => unknown;
2
- declare function getCalleeFromStack(withLine?: boolean, stackIndex?: number): string;
3
- declare const _default: {
4
- deprecated(message: string): void;
5
- extensions: any;
6
- extensionNames: string[];
7
- existsPath(filepath: string): Promise<boolean>;
8
- loadFile(filepath: string): Promise<any>;
9
- resolvePath(filepath: string, options?: {
10
- paths?: string[];
11
- }): string;
12
- methods: string[];
13
- callFn(fn: Fun, args?: unknown[], ctx?: unknown): Promise<unknown>;
14
- getCalleeFromStack: typeof getCalleeFromStack;
15
- getResolvedFilename(filepath: string, baseDir: string): string;
16
- };
17
- export default _default;