@eggjs/core 6.0.0 → 6.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/esm/types.js DELETED
@@ -1,402 +0,0 @@
1
- // import type KoaApplication from '@eggjs/koa';
2
- // // import type depd = require('depd');
3
- // import type { Logger } from 'egg-logger';
4
- export {};
5
- // export type EggType = 'application' | 'agent';
6
- // interface PlainObject<T = any> {
7
- // [key: string]: T;
8
- // }
9
- // export interface EggCoreOptions {
10
- // /** egg type, application or agent */
11
- // type?: EggType;
12
- // /** the directory of application */
13
- // baseDir?: EggAppInfo['baseDir'];
14
- // /** server scope */
15
- // serverScope?: string;
16
- // /** custom plugins */
17
- // plugins?: Plugins;
18
- // }
19
- // export interface EggLoaderOptions {
20
- // /** Application instance */
21
- // app: EggCore;
22
- // /** the directory of application */
23
- // baseDir: EggAppInfo['baseDir'];
24
- // /** egg logger */
25
- // logger: Logger;
26
- // /** server scope */
27
- // serverScope?: string;
28
- // /** custom plugins */
29
- // plugins?: Plugins;
30
- // }
31
- // export interface PluginInfo {
32
- // /** the plugin name, it can be used in `dep` */
33
- // name: string;
34
- // /** the package name of plugin */
35
- // package: string;
36
- // /** whether enabled */
37
- // enable: boolean;
38
- // /** the directory of the plugin package */
39
- // path: string;
40
- // /** the dependent plugins, you can use the plugin name */
41
- // dependencies: string[];
42
- // /** the optional dependent plugins. */
43
- // optionalDependencies: string[];
44
- // /** specify the serverEnv that only enable the plugin in it */
45
- // env: string[];
46
- // /** the file plugin config in. */
47
- // from: string;
48
- // }
49
- // export interface Plugins extends PlainObject<PluginInfo> { }
50
- // export interface EggCoreBase<Config> extends KoaApplication {
51
- // /**
52
- // * Whether `application` or `agent`
53
- // * @member {String}
54
- // * @since 1.0.0
55
- // */
56
- // type: EggType;
57
- // /**
58
- // * The current directory of application
59
- // * @member {String}
60
- // * @see {@link EggAppInfo#baseDir}
61
- // * @since 1.0.0
62
- // */
63
- // baseDir: EggAppInfo['baseDir'];
64
- // /**
65
- // * The name of application
66
- // * @member {String}
67
- // * @see {@link EggAppInfo#name}
68
- // * @since 1.0.0
69
- // */
70
- // name: EggAppInfo['name'];
71
- // /**
72
- // * Convert a generator function to a promisable one.
73
- // *
74
- // * Notice: for other kinds of functions, it directly returns you what it is.
75
- // *
76
- // * @param {Function} fn The inputted function.
77
- // * @return {AsyncFunction} An async promise-based function.
78
- // * @example
79
- // * ```javascript
80
- // * const fn = function* (arg) {
81
- // return arg;
82
- // };
83
- // const wrapped = app.toAsyncFunction(fn);
84
- // wrapped(true).then((value) => console.log(value));
85
- // * ```
86
- // */
87
- // toAsyncFunction<T = any>(fn: (...args: any[]) => IterableIterator<T>): (...args: any[]) => Promise<T>;
88
- // /**
89
- // * Convert an object with generator functions to a Promisable one.
90
- // * @param {Mixed} obj The inputted object.
91
- // * @return {Promise} A Promisable result.
92
- // * @example
93
- // * ```javascript
94
- // * const fn = function* (arg) {
95
- // return arg;
96
- // };
97
- // const arr = [ fn(1), fn(2) ];
98
- // const promise = app.toPromise(arr);
99
- // promise.then(res => console.log(res));
100
- // * ```
101
- // */
102
- // toPromise<T = any>(obj: any): Promise<T>;
103
- // /**
104
- // * register an callback function that will be invoked when application is ready.
105
- // * @see https://github.com/node-modules/ready
106
- // * @since 1.0.0
107
- // * @param {boolean|Error|Function} flagOrFunction -
108
- // * @return {Promise|null} return promise when argument is undefined
109
- // * @example
110
- // * const app = new Application(...);
111
- // * app.ready(err => {
112
- // * if (err) throw err;
113
- // * console.log('done');
114
- // * });
115
- // */
116
- // ready(fn?: (err?: Error) => void): any;
117
- // /**
118
- // * Close all, it wil close
119
- // * - callbacks registered by beforeClose
120
- // * - emit `close` event
121
- // * - remove add listeners
122
- // *
123
- // * If error is thrown when it's closing, the promise will reject.
124
- // * It will also reject after following call.
125
- // * @return {Promise} promise
126
- // * @since 1.0.0
127
- // */
128
- // close(): Promise<any>;
129
- // /**
130
- // * If a client starts asynchronously, you can register `readyCallback`,
131
- // * then the application will wait for the callback to ready
132
- // *
133
- // * It will log when the callback is not invoked after 10s
134
- // *
135
- // * Recommend to use {@link EggCore#beforeStart}
136
- // * @since 1.0.0
137
- // *
138
- // * @param {String} name - readyCallback task name
139
- // * @param {object} opts -
140
- // * - {Number} [timeout=10000] - emit `ready_timeout` when it doesn't finish but reach the timeout
141
- // * - {Boolean} [isWeakDep=false] - whether it's a weak dependency
142
- // * @return {Function} - a callback
143
- // * @example
144
- // * const done = app.readyCallback('mysql');
145
- // * mysql.ready(done);
146
- // */
147
- // readyCallback(name: string, opts?: { timeout?: number; isWeakDep?: boolean }): () => void;
148
- // /**
149
- // * The loader instance, the default class is {@link EggLoader}.
150
- // * If you want define
151
- // * @member {EggLoader} EggCore#loader
152
- // * @since 1.0.0
153
- // */
154
- // loader: EggLoader<this, Config>;
155
- // /**
156
- // * The configuration of application
157
- // * @member {Config}
158
- // * @since 1.0.0
159
- // */
160
- // config: Config;
161
- // /**
162
- // * Retrieve enabled plugins
163
- // * @member {Object}
164
- // * @since 1.0.0
165
- // */
166
- // plugins: Plugins;
167
- // /**
168
- // * Register a function that will be called when app close
169
- // */
170
- // beforeClose(fn: () => void): void;
171
- // /**
172
- // * Execute scope after loaded and before app start
173
- // */
174
- // beforeStart(scope: () => void): void;
175
- // /**
176
- // * Alias to {@link https://npmjs.com/package/depd}
177
- // * @member {Function}
178
- // * @since 1.0.0
179
- // */
180
- // deprecate: depd.Deprecate;
181
- // }
182
- // export interface EggCore<Config = PlainObject> extends EggCoreBase<Config> {
183
- // Controller: typeof BaseContextClass;
184
- // Service: typeof BaseContextClass;
185
- // }
186
- // export class EggCore {
187
- // /**
188
- // * @class
189
- // * @param {Object} options - options
190
- // * @param {String} [options.baseDir=process.cwd()] - the directory of application
191
- // * @param {String} [options.type=application|agent] - whether it's running in app worker or agent worker
192
- // * @param {Object} [options.plugins] - custom plugins
193
- // * @since 1.0.0
194
- // */
195
- // constructor(options?: EggCoreOptions);
196
- // }
197
- // /**
198
- // * egg app info
199
- // * @example
200
- // * ```js
201
- // * // config/config.default.ts
202
- // * import { EggAppInfo } from 'egg';
203
- // *
204
- // * export default (appInfo: EggAppInfo) => {
205
- // * return {
206
- // * keys: appInfo.name + '123456',
207
- // * };
208
- // * }
209
- // * ```
210
- // */
211
- // export interface EggAppInfo {
212
- // /** package.json */
213
- // pkg: PlainObject;
214
- // /** the application name from package.json */
215
- // name: string;
216
- // /** current directory of application */
217
- // baseDir: string;
218
- // /** equals to serverEnv */
219
- // env: string;
220
- // /** home directory of the OS */
221
- // HOME: string;
222
- // /** baseDir when local and unittest, HOME when other environment */
223
- // root: string;
224
- // }
225
- // /**
226
- // * BaseContextClass is a base class that can be extended,
227
- // * it's instantiated in context level,
228
- // * {@link Helper}, {@link Service} is extending it.
229
- // */
230
- // export class BaseContextClass<
231
- // Context = any,
232
- // Application = any,
233
- // EggAppConfig = any,
234
- // Service = any
235
- // > {
236
- // constructor(ctx: Context);
237
- // /** request context */
238
- // protected ctx: Context;
239
- // /** Application */
240
- // protected app: Application;
241
- // /** Application config object */
242
- // protected config: EggAppConfig;
243
- // /** service */
244
- // protected service: Service;
245
- // }
246
- // declare interface FileLoaderBase {
247
- // /**
248
- // * attach items to target object. Mapping the directory to properties.
249
- // * `app/controller/group/repository.js` => `target.group.repository`
250
- // * @return {Object} target
251
- // * @since 1.0.0
252
- // */
253
- // load(): object;
254
- // /**
255
- // * Parse files from given directories, then return an items list, each item contains properties and exports.
256
- // *
257
- // * For example, parse `app/controller/group/repository.js`
258
- // *
259
- // * ```js
260
- // * module.exports = app => {
261
- // * return class RepositoryController extends app.Controller {};
262
- // * }
263
- // * ```
264
- // *
265
- // * It returns a item
266
- // *
267
- // * ```js
268
- // * {
269
- // * properties: [ 'group', 'repository' ],
270
- // * exports: app => { ... },
271
- // * }
272
- // * ```
273
- // *
274
- // * `Properties` is an array that contains the directory of a filepath.
275
- // *
276
- // * `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.
277
- // * @return {Array} items
278
- // * @since 1.0.0
279
- // */
280
- // parse(): Array<{ fullpath: string; properties: string[]; exports: any; }>;
281
- // }
282
- // declare interface ContextLoaderBase extends FileLoaderBase {}
283
- // export interface FileLoader {
284
- // /**
285
- // * Load files from directory to target object.
286
- // * @since 1.0.0
287
- // */
288
- // new (options: FileLoaderOption): FileLoaderBase;
289
- // }
290
- // export interface ContextLoader {
291
- // /**
292
- // * Same as {@link FileLoader}, but it will attach file to `inject[fieldClass]`. The exports will be lazy loaded, such as `ctx.group.repository`.
293
- // * @augments FileLoader
294
- // * @since 1.0.0
295
- // */
296
- // new (options: ContextLoaderOption): ContextLoaderBase;
297
- // }
298
- // export class EggLoader<
299
- // T = EggCore,
300
- // Config = any,
301
- // Options extends EggLoaderOptions = EggLoaderOptions
302
- // > {
303
- // app: T;
304
- // eggPaths: string[];
305
- // pkg: PlainObject;
306
- // appInfo: EggAppInfo;
307
- // serverScope: string;
308
- // plugins: Plugins;
309
- // config: Config;
310
- // options: Options;
311
- // /**
312
- // * @class
313
- // * @param {Object} options - options
314
- // * @param {String} options.baseDir - the directory of application
315
- // * @param {EggCore} options.app - Application instance
316
- // * @param {Logger} options.logger - logger
317
- // * @param {Object} [options.plugins] - custom plugins
318
- // * @since 1.0.0
319
- // */
320
- // constructor(options: EggLoaderOptions);
321
- // /**
322
- // * Get home directory
323
- // * @return {String} home directory
324
- // * @since 3.4.0
325
- // */
326
- // getHomedir(): EggAppInfo['HOME'];
327
- // /**
328
- // * Get app info
329
- // * @return {EggAppInfo} appInfo
330
- // * @since 1.0.0
331
- // */
332
- // getAppInfo(): EggAppInfo;
333
- // // Low Level API
334
- // /**
335
- // * Load single file, will invoke when export is function
336
- // *
337
- // * @param {String} filepath - fullpath
338
- // * @param {Array} arguments - pass rest arguments into the function when invoke
339
- // * @return {Object} exports
340
- // * @example
341
- // * ```js
342
- // * app.loader.loadFile(path.join(app.options.baseDir, 'config/router.js'));
343
- // * ```
344
- // * @since 1.0.0
345
- // */
346
- // loadFile<T = any>(filepath: string, ...inject: any[]): T;
347
- // /**
348
- // * Get all loadUnit
349
- // *
350
- // * loadUnit is a directory that can be loaded by EggLoader, it has the same structure.
351
- // * loadUnit has a path and a type(app, framework, plugin).
352
- // *
353
- // * The order of the loadUnits:
354
- // *
355
- // * 1. plugin
356
- // * 2. framework
357
- // * 3. app
358
- // *
359
- // * @return {Array} loadUnits
360
- // * @since 1.0.0
361
- // */
362
- // getLoadUnits(): Array<{ path: string; type: string; }>;
363
- // getEggPaths(): string[];
364
- // getServerEnv(): string;
365
- // /**
366
- // * Load files using {@link FileLoader}, inject to {@link Application}
367
- // * @param {String|Array} directory - see {@link FileLoader}
368
- // * @param {String} property - see {@link FileLoader}
369
- // * @param {Object} opt - see {@link FileLoader}
370
- // * @since 1.0.0
371
- // */
372
- // loadToApp(directory: string | string[], property: string, opt?: Partial<FileLoaderOption>): void;
373
- // /**
374
- // * Load files using {@link ContextLoader}
375
- // * @param {String|Array} directory - see {@link ContextLoader}
376
- // * @param {String} property - see {@link ContextLoader}
377
- // * @param {Object} opt - see {@link ContextLoader}
378
- // * @since 1.0.0
379
- // */
380
- // loadToContext(directory: string | string[], property: string, opt?: Partial<ContextLoaderOption>): void;
381
- // getTypeFiles(filename: string): string[];
382
- // resolveModule(filepath: string): string | undefined;
383
- // FileLoader: FileLoader;
384
- // ContextLoader: ContextLoader;
385
- // // load methods
386
- // protected loadConfig(): void;
387
- // protected loadController(opt?: Partial<FileLoaderOption>): void;
388
- // protected loadCustomLoader(): void;
389
- // protected loadCustomApp(): void;
390
- // protected loadCustomAgent(): void;
391
- // protected loadAgentExtend(): void;
392
- // protected loadApplicationExtend(): void;
393
- // protected loadRequestExtend(): void;
394
- // protected loadResponseExtend(): void;
395
- // protected loadContextExtend(): void;
396
- // protected loadHelperExtend(): void;
397
- // protected loadMiddleware(opt?: Partial<FileLoaderOption>): void;
398
- // protected loadPlugin(): void;
399
- // protected loadRouter(): void;
400
- // protected loadService(opt?: Partial<ContextLoaderOption>): void;
401
- // }
402
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvdHlwZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsZ0RBQWdEO0FBQ2hELHlDQUF5QztBQUN6Qyw0Q0FBNEM7O0FBRTVDLGlEQUFpRDtBQUVqRCxtQ0FBbUM7QUFDbkMsc0JBQXNCO0FBQ3RCLElBQUk7QUFFSixvQ0FBb0M7QUFDcEMsMENBQTBDO0FBQzFDLG9CQUFvQjtBQUNwQix3Q0FBd0M7QUFDeEMscUNBQXFDO0FBQ3JDLHdCQUF3QjtBQUN4QiwwQkFBMEI7QUFDMUIsMEJBQTBCO0FBQzFCLHVCQUF1QjtBQUN2QixJQUFJO0FBRUosc0NBQXNDO0FBQ3RDLGdDQUFnQztBQUNoQyxrQkFBa0I7QUFDbEIsd0NBQXdDO0FBQ3hDLG9DQUFvQztBQUNwQyxzQkFBc0I7QUFDdEIsb0JBQW9CO0FBQ3BCLHdCQUF3QjtBQUN4QiwwQkFBMEI7QUFDMUIsMEJBQTBCO0FBQzFCLHVCQUF1QjtBQUN2QixJQUFJO0FBRUosZ0NBQWdDO0FBQ2hDLG9EQUFvRDtBQUNwRCxrQkFBa0I7QUFDbEIsc0NBQXNDO0FBQ3RDLHFCQUFxQjtBQUNyQiwyQkFBMkI7QUFDM0IscUJBQXFCO0FBQ3JCLCtDQUErQztBQUMvQyxrQkFBa0I7QUFDbEIsOERBQThEO0FBQzlELDRCQUE0QjtBQUM1QiwyQ0FBMkM7QUFDM0Msb0NBQW9DO0FBQ3BDLG1FQUFtRTtBQUNuRSxtQkFBbUI7QUFDbkIsc0NBQXNDO0FBQ3RDLGtCQUFrQjtBQUNsQixJQUFJO0FBRUosK0RBQStEO0FBRS9ELGdFQUFnRTtBQUNoRSxRQUFRO0FBQ1Isd0NBQXdDO0FBQ3hDLHdCQUF3QjtBQUN4QixvQkFBb0I7QUFDcEIsUUFBUTtBQUNSLG1CQUFtQjtBQUVuQixRQUFRO0FBQ1IsNENBQTRDO0FBQzVDLHdCQUF3QjtBQUN4Qix1Q0FBdUM7QUFDdkMsb0JBQW9CO0FBQ3BCLFFBQVE7QUFDUixvQ0FBb0M7QUFFcEMsUUFBUTtBQUNS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