@eggjs/core 6.0.0-beta.2 → 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/README.md +27 -33
- package/dist/commonjs/index.d.ts +7 -2
- package/dist/commonjs/index.js +7 -2
- package/dist/commonjs/lifecycle.d.ts +1 -2
- package/dist/commonjs/loader/context_loader.d.ts +12 -1
- package/dist/commonjs/loader/context_loader.js +3 -2
- package/dist/commonjs/loader/egg_loader.d.ts +2 -2
- package/dist/commonjs/loader/egg_loader.js +14 -17
- package/dist/commonjs/utils/index.d.ts +1 -0
- package/dist/commonjs/utils/index.js +5 -56
- package/dist/commonjs/utils/sequencify.js +2 -2
- package/dist/commonjs/utils/timing.d.ts +1 -2
- package/dist/esm/index.d.ts +7 -2
- package/dist/esm/index.js +8 -3
- package/dist/esm/lifecycle.d.ts +1 -2
- package/dist/esm/loader/context_loader.d.ts +12 -1
- package/dist/esm/loader/context_loader.js +2 -2
- package/dist/esm/loader/egg_loader.d.ts +2 -2
- package/dist/esm/loader/egg_loader.js +14 -17
- package/dist/esm/utils/index.d.ts +1 -0
- package/dist/esm/utils/index.js +5 -56
- package/dist/esm/utils/timing.d.ts +1 -2
- package/package.json +5 -6
- package/src/index.ts +8 -2
- package/src/loader/context_loader.ts +4 -4
- package/src/loader/egg_loader.ts +16 -20
- package/src/utils/index.ts +4 -55
- package/src/utils/timing.ts +1 -1
- package/dist/commonjs/types.d.ts +0 -1
- package/dist/commonjs/types.js +0 -403
- package/dist/esm/types.d.ts +0 -1
- package/dist/esm/types.js +0 -402
- package/src/types.ts +0 -447
package/dist/esm/utils/index.js
CHANGED
|
@@ -1,9 +1,8 @@
|
|
|
1
1
|
import { debuglog } from 'node:util';
|
|
2
2
|
import path from 'node:path';
|
|
3
3
|
import fs from 'node:fs';
|
|
4
|
-
import { pathToFileURL } from 'node:url';
|
|
5
4
|
import BuiltinModule from 'node:module';
|
|
6
|
-
import {
|
|
5
|
+
import { importResolve, importModule } from '@eggjs/utils';
|
|
7
6
|
const debug = debuglog('@eggjs/core:utils');
|
|
8
7
|
// Guard against poorly mocked module constructors.
|
|
9
8
|
const Module = typeof module !== 'undefined' && module.constructor.length > 1
|
|
@@ -13,31 +12,12 @@ const Module = typeof module !== 'undefined' && module.constructor.length > 1
|
|
|
13
12
|
const extensions = Module._extensions;
|
|
14
13
|
const extensionNames = Object.keys(extensions).concat(['.cjs', '.mjs']);
|
|
15
14
|
debug('Module extensions: %j', extensionNames);
|
|
16
|
-
let _customRequire;
|
|
17
|
-
function getCustomRequire() {
|
|
18
|
-
if (!_customRequire && typeof require === 'undefined') {
|
|
19
|
-
_customRequire = createRequire(process.cwd());
|
|
20
|
-
// _customRequire = createRequire(import.meta.url);
|
|
21
|
-
}
|
|
22
|
-
return _customRequire;
|
|
23
|
-
}
|
|
24
15
|
export default {
|
|
25
16
|
deprecated(message) {
|
|
26
17
|
console.warn('[@eggjs/core:deprecated] %s', message);
|
|
27
18
|
},
|
|
28
19
|
extensions,
|
|
29
|
-
|
|
30
|
-
// // try import first
|
|
31
|
-
// let obj: any;
|
|
32
|
-
// try {
|
|
33
|
-
// obj = await import(filepath);
|
|
34
|
-
// } catch (err: any) {
|
|
35
|
-
// debug('await import error, use require instead, %s', err);
|
|
36
|
-
// // use custom require
|
|
37
|
-
// obj = getCustomRequire()(filepath);
|
|
38
|
-
// }
|
|
39
|
-
// return obj;
|
|
40
|
-
// },
|
|
20
|
+
extensionNames,
|
|
41
21
|
async loadFile(filepath) {
|
|
42
22
|
try {
|
|
43
23
|
// if not js module, just return content buffer
|
|
@@ -45,35 +25,7 @@ export default {
|
|
|
45
25
|
if (extname && !extensionNames.includes(extname)) {
|
|
46
26
|
return fs.readFileSync(filepath);
|
|
47
27
|
}
|
|
48
|
-
|
|
49
|
-
let isESM = false;
|
|
50
|
-
if (typeof require === 'function') {
|
|
51
|
-
// commonjs
|
|
52
|
-
obj = require(filepath);
|
|
53
|
-
debug('[loadFile] require %s => %o', filepath, obj);
|
|
54
|
-
if (obj && obj.__esModule) {
|
|
55
|
-
isESM = true;
|
|
56
|
-
}
|
|
57
|
-
}
|
|
58
|
-
else {
|
|
59
|
-
// esm
|
|
60
|
-
debug('[loadFile] await import start: %s', filepath);
|
|
61
|
-
const fileUrl = pathToFileURL(filepath).toString();
|
|
62
|
-
obj = await import(fileUrl);
|
|
63
|
-
debug('[loadFile] await import end: %s => %o', filepath, obj);
|
|
64
|
-
isESM = true;
|
|
65
|
-
if (obj && typeof obj === 'object' && 'default' in obj) {
|
|
66
|
-
// default: { default: [Function (anonymous)] }
|
|
67
|
-
obj = obj.default;
|
|
68
|
-
}
|
|
69
|
-
}
|
|
70
|
-
if (!obj)
|
|
71
|
-
return obj;
|
|
72
|
-
// it's es module, use default export
|
|
73
|
-
if (isESM && typeof obj === 'object') {
|
|
74
|
-
obj = 'default' in obj ? obj.default : obj;
|
|
75
|
-
}
|
|
76
|
-
debug('[loadFile] return %s => %o', filepath, obj);
|
|
28
|
+
const obj = await importModule(filepath, { importDefaultOnly: true });
|
|
77
29
|
return obj;
|
|
78
30
|
}
|
|
79
31
|
catch (e) {
|
|
@@ -84,10 +36,7 @@ export default {
|
|
|
84
36
|
}
|
|
85
37
|
},
|
|
86
38
|
resolvePath(filepath, options) {
|
|
87
|
-
|
|
88
|
-
return require.resolve(filepath, options);
|
|
89
|
-
}
|
|
90
|
-
return getCustomRequire().resolve(filepath, options);
|
|
39
|
+
return importResolve(filepath, options);
|
|
91
40
|
},
|
|
92
41
|
methods: ['head', 'options', 'get', 'put', 'patch', 'post', 'delete'],
|
|
93
42
|
async callFn(fn, args, ctx) {
|
|
@@ -138,4 +87,4 @@ export default {
|
|
|
138
87
|
function prepareObjectStackTrace(_obj, stack) {
|
|
139
88
|
return stack;
|
|
140
89
|
}
|
|
141
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
90
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvdXRpbHMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLFdBQVcsQ0FBQztBQUNyQyxPQUFPLElBQUksTUFBTSxXQUFXLENBQUM7QUFDN0IsT0FBTyxFQUFFLE1BQU0sU0FBUyxDQUFDO0FBQ3pCLE9BQU8sYUFBYSxNQUFNLGFBQWEsQ0FBQztBQUN4QyxPQUFPLEVBQUUsYUFBYSxFQUFFLFlBQVksRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUUzRCxNQUFNLEtBQUssR0FBRyxRQUFRLENBQUMsbUJBQW1CLENBQUMsQ0FBQztBQUk1QyxtREFBbUQ7QUFDbkQsTUFBTSxNQUFNLEdBQUcsT0FBTyxNQUFNLEtBQUssV0FBVyxJQUFJLE1BQU0sQ0FBQyxXQUFXLENBQUMsTUFBTSxHQUFHLENBQUM7SUFDM0UsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxXQUFXO0lBQ3BCLDBCQUEwQjtJQUMxQixDQUFDLENBQUMsYUFBYSxDQUFDO0FBRWxCLE1BQU0sVUFBVSxHQUFJLE1BQWMsQ0FBQyxXQUFXLENBQUM7QUFDL0MsTUFBTSxjQUFjLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBRSxNQUFNLEVBQUUsTUFBTSxDQUFFLENBQUMsQ0FBQztBQUMxRSxLQUFLLENBQUMsdUJBQXVCLEVBQUUsY0FBYyxDQUFDLENBQUM7QUFFL0MsZUFBZTtJQUNiLFVBQVUsQ0FBQyxPQUFlO1FBQ3hCLE9BQU8sQ0FBQyxJQUFJLENBQUMsNkJBQTZCLEVBQUUsT0FBTyxDQUFDLENBQUM7SUFDdkQsQ0FBQztJQUVELFVBQVU7SUFDVixjQUFjO0lBRWQsS0FBSyxDQUFDLFFBQVEsQ0FBQyxRQUFnQjtRQUM3QixJQUFJLENBQUM7WUFDSCwrQ0FBK0M7WUFDL0MsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLE9B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
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
interface TimingItem {
|
|
1
|
+
export interface TimingItem {
|
|
2
2
|
name: string;
|
|
3
3
|
start: number;
|
|
4
4
|
end?: number;
|
|
@@ -19,4 +19,3 @@ export declare class Timing {
|
|
|
19
19
|
itemToString(timelineEnd: number, item: TimingItem, times: number): string;
|
|
20
20
|
toString(prefix?: string, width?: number): string;
|
|
21
21
|
}
|
|
22
|
-
export {};
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@eggjs/core",
|
|
3
|
-
"version": "6.0.
|
|
3
|
+
"version": "6.0.1",
|
|
4
4
|
"publishConfig": {
|
|
5
5
|
"access": "public"
|
|
6
6
|
},
|
|
@@ -13,10 +13,11 @@
|
|
|
13
13
|
"description": "A core plugin framework based on @eggjs/koa",
|
|
14
14
|
"scripts": {
|
|
15
15
|
"lint": "eslint src test --ext ts",
|
|
16
|
+
"pretest": "npm run prepublishOnly",
|
|
16
17
|
"test": "npm run lint -- --fix && npm run test-local",
|
|
17
18
|
"test-local": "egg-bin test",
|
|
19
|
+
"preci": "npm run prepublishOnly",
|
|
18
20
|
"ci": "npm run lint && egg-bin cov && npm run prepublishOnly",
|
|
19
|
-
"contributor": "git-contributor",
|
|
20
21
|
"prepublishOnly": "tshy && tshy-after"
|
|
21
22
|
},
|
|
22
23
|
"repository": {
|
|
@@ -36,6 +37,7 @@
|
|
|
36
37
|
"dependencies": {
|
|
37
38
|
"@eggjs/koa": "^2.18.2",
|
|
38
39
|
"@eggjs/router": "^3.0.5",
|
|
40
|
+
"@eggjs/utils": "^4.0.2",
|
|
39
41
|
"egg-logger": "^3.5.0",
|
|
40
42
|
"egg-path-matching": "^2.0.0",
|
|
41
43
|
"extend2": "^4.0.0",
|
|
@@ -45,7 +47,7 @@
|
|
|
45
47
|
"node-homedir": "^2.0.0",
|
|
46
48
|
"performance-ms": "^1.1.0",
|
|
47
49
|
"ready-callback": "^4.0.0",
|
|
48
|
-
"tsconfig-paths": "^4.
|
|
50
|
+
"tsconfig-paths": "^4.2.0",
|
|
49
51
|
"utility": "^2.1.0"
|
|
50
52
|
},
|
|
51
53
|
"devDependencies": {
|
|
@@ -57,14 +59,11 @@
|
|
|
57
59
|
"await-event": "2",
|
|
58
60
|
"coffee": "5",
|
|
59
61
|
"egg-bin": "6",
|
|
60
|
-
"egg-utils": "2",
|
|
61
62
|
"eslint": "8",
|
|
62
63
|
"eslint-config-egg": "13",
|
|
63
64
|
"gals": "1",
|
|
64
|
-
"git-contributor": "2",
|
|
65
65
|
"js-yaml": "3",
|
|
66
66
|
"mm": "3",
|
|
67
|
-
"spy": "1",
|
|
68
67
|
"supertest": "7",
|
|
69
68
|
"ts-node": "10",
|
|
70
69
|
"tshy": "1",
|
package/src/index.ts
CHANGED
|
@@ -1,6 +1,12 @@
|
|
|
1
1
|
import utils from './utils/index.js';
|
|
2
2
|
|
|
3
|
+
export { utils };
|
|
4
|
+
|
|
3
5
|
export * from './egg.js';
|
|
4
|
-
export * from './loader/egg_loader.js';
|
|
5
6
|
export * from './base_context_class.js';
|
|
6
|
-
export
|
|
7
|
+
export * from './lifecycle.js';
|
|
8
|
+
export * from './loader/egg_loader.js';
|
|
9
|
+
export * from './loader/file_loader.js';
|
|
10
|
+
export * from './loader/context_loader.js';
|
|
11
|
+
export * from './utils/sequencify.js';
|
|
12
|
+
export * from './utils/timing.js';
|
|
@@ -5,12 +5,12 @@ import { FileLoader, EXPORTS, type FileLoaderOptions } from './file_loader.js';
|
|
|
5
5
|
|
|
6
6
|
const CLASS_LOADER = Symbol('classLoader');
|
|
7
7
|
|
|
8
|
-
interface ClassLoaderOptions {
|
|
8
|
+
export interface ClassLoaderOptions {
|
|
9
9
|
ctx: ContextDelegation;
|
|
10
10
|
properties: any;
|
|
11
11
|
}
|
|
12
12
|
|
|
13
|
-
class ClassLoader {
|
|
13
|
+
export class ClassLoader {
|
|
14
14
|
readonly _cache = new Map();
|
|
15
15
|
_ctx: ContextDelegation;
|
|
16
16
|
|
|
@@ -42,7 +42,7 @@ export interface ContextLoaderOptions extends Omit<FileLoaderOptions, 'target'>
|
|
|
42
42
|
/** required inject */
|
|
43
43
|
inject: Record<string, any>;
|
|
44
44
|
/** property name defined to target */
|
|
45
|
-
property: string;
|
|
45
|
+
property: string | symbol;
|
|
46
46
|
/** determine the field name of inject object. */
|
|
47
47
|
fieldClass?: string;
|
|
48
48
|
}
|
|
@@ -86,7 +86,7 @@ export class ContextLoader extends FileLoader {
|
|
|
86
86
|
if (!ctx[CLASS_LOADER]) {
|
|
87
87
|
ctx[CLASS_LOADER] = new Map();
|
|
88
88
|
}
|
|
89
|
-
const classLoader: Map<string, ClassLoader> = ctx[CLASS_LOADER];
|
|
89
|
+
const classLoader: Map<string | symbol, ClassLoader> = ctx[CLASS_LOADER];
|
|
90
90
|
let instance = classLoader.get(property);
|
|
91
91
|
if (!instance) {
|
|
92
92
|
instance = getInstance(target, ctx);
|
package/src/loader/egg_loader.ts
CHANGED
|
@@ -148,16 +148,12 @@ export class EggLoader {
|
|
|
148
148
|
* loader will find all directories from the prototype of Application,
|
|
149
149
|
* you should define `Symbol.for('egg#eggPath')` property.
|
|
150
150
|
*
|
|
151
|
-
* ```
|
|
152
|
-
* //
|
|
153
|
-
*
|
|
154
|
-
* class ExampleApplication extends
|
|
155
|
-
* constructor(options) {
|
|
156
|
-
* super(options);
|
|
157
|
-
* }
|
|
158
|
-
*
|
|
151
|
+
* ```ts
|
|
152
|
+
* // src/example.ts
|
|
153
|
+
* import { Application } from 'egg';
|
|
154
|
+
* class ExampleApplication extends Application {
|
|
159
155
|
* get [Symbol.for('egg#eggPath')]() {
|
|
160
|
-
* return
|
|
156
|
+
* return baseDir;
|
|
161
157
|
* }
|
|
162
158
|
* }
|
|
163
159
|
* ```
|
|
@@ -372,11 +368,11 @@ export class EggLoader {
|
|
|
372
368
|
}
|
|
373
369
|
const eggPath = Reflect.get(proto, Symbol.for('egg#eggPath'));
|
|
374
370
|
if (!eggPath) {
|
|
371
|
+
// if (EggCore) {
|
|
372
|
+
// throw new TypeError('Symbol.for(\'egg#eggPath\') is required on Application');
|
|
373
|
+
// }
|
|
375
374
|
continue;
|
|
376
375
|
}
|
|
377
|
-
|
|
378
|
-
// assert(proto.hasOwnProperty(Symbol.for('egg#eggPath')), 'Symbol.for(\'egg#eggPath\') is required on Application');
|
|
379
|
-
// const eggPath = Reflect.get(proto, Symbol.for('egg#eggPath'));
|
|
380
376
|
assert(typeof eggPath === 'string', 'Symbol.for(\'egg#eggPath\') should be string');
|
|
381
377
|
assert(fs.existsSync(eggPath), `${eggPath} not exists`);
|
|
382
378
|
const realpath = fs.realpathSync(eggPath);
|
|
@@ -384,7 +380,6 @@ export class EggLoader {
|
|
|
384
380
|
eggPaths.unshift(realpath);
|
|
385
381
|
}
|
|
386
382
|
}
|
|
387
|
-
|
|
388
383
|
return eggPaths;
|
|
389
384
|
}
|
|
390
385
|
|
|
@@ -1273,6 +1268,11 @@ export class EggLoader {
|
|
|
1273
1268
|
|
|
1274
1269
|
this.options.logger.info('[@eggjs/core:egg_loader] Loaded middleware from %j', middlewarePaths);
|
|
1275
1270
|
this.timing.end('Load Middleware');
|
|
1271
|
+
|
|
1272
|
+
// add router middleware, make sure router is the last middleware
|
|
1273
|
+
const mw = this.app.router.middleware();
|
|
1274
|
+
Reflect.set(mw, '_name', 'routerMiddleware');
|
|
1275
|
+
this.app.use(mw);
|
|
1276
1276
|
}
|
|
1277
1277
|
/** end Middleware loader */
|
|
1278
1278
|
|
|
@@ -1338,10 +1338,6 @@ export class EggLoader {
|
|
|
1338
1338
|
async loadRouter() {
|
|
1339
1339
|
this.timing.start('Load Router');
|
|
1340
1340
|
await this.loadFile(path.join(this.options.baseDir, 'app/router'));
|
|
1341
|
-
// add router middleware
|
|
1342
|
-
const mw = this.app.router.middleware();
|
|
1343
|
-
Reflect.set(mw, '_name', 'routerMiddleware');
|
|
1344
|
-
this.app.use(mw);
|
|
1345
1341
|
this.timing.end('Load Router');
|
|
1346
1342
|
}
|
|
1347
1343
|
/** end Router loader */
|
|
@@ -1497,12 +1493,12 @@ export class EggLoader {
|
|
|
1497
1493
|
* @param {Object} options - see {@link FileLoader}
|
|
1498
1494
|
* @since 1.0.0
|
|
1499
1495
|
*/
|
|
1500
|
-
async loadToApp(directory: string | string[], property: string, options
|
|
1496
|
+
async loadToApp(directory: string | string[], property: string | symbol, options?: FileLoaderOptions) {
|
|
1501
1497
|
const target = {};
|
|
1502
1498
|
Reflect.set(this.app, property, target);
|
|
1503
1499
|
options = {
|
|
1504
1500
|
...options,
|
|
1505
|
-
directory: options
|
|
1501
|
+
directory: options?.directory ?? directory,
|
|
1506
1502
|
target,
|
|
1507
1503
|
inject: this.app,
|
|
1508
1504
|
};
|
|
@@ -1520,7 +1516,7 @@ export class EggLoader {
|
|
|
1520
1516
|
* @param {Object} options - see {@link ContextLoader}
|
|
1521
1517
|
* @since 1.0.0
|
|
1522
1518
|
*/
|
|
1523
|
-
async loadToContext(directory: string | string[], property: string, options?: ContextLoaderOptions) {
|
|
1519
|
+
async loadToContext(directory: string | string[], property: string | symbol, options?: ContextLoaderOptions) {
|
|
1524
1520
|
options = {
|
|
1525
1521
|
...options,
|
|
1526
1522
|
directory: options?.directory || directory,
|
package/src/utils/index.ts
CHANGED
|
@@ -1,9 +1,8 @@
|
|
|
1
1
|
import { debuglog } from 'node:util';
|
|
2
2
|
import path from 'node:path';
|
|
3
3
|
import fs from 'node:fs';
|
|
4
|
-
import { pathToFileURL } from 'node:url';
|
|
5
4
|
import BuiltinModule from 'node:module';
|
|
6
|
-
import {
|
|
5
|
+
import { importResolve, importModule } from '@eggjs/utils';
|
|
7
6
|
|
|
8
7
|
const debug = debuglog('@eggjs/core:utils');
|
|
9
8
|
|
|
@@ -19,34 +18,13 @@ const extensions = (Module as any)._extensions;
|
|
|
19
18
|
const extensionNames = Object.keys(extensions).concat([ '.cjs', '.mjs' ]);
|
|
20
19
|
debug('Module extensions: %j', extensionNames);
|
|
21
20
|
|
|
22
|
-
let _customRequire: NodeRequire;
|
|
23
|
-
function getCustomRequire() {
|
|
24
|
-
if (!_customRequire && typeof require === 'undefined') {
|
|
25
|
-
_customRequire = createRequire(process.cwd());
|
|
26
|
-
// _customRequire = createRequire(import.meta.url);
|
|
27
|
-
}
|
|
28
|
-
return _customRequire;
|
|
29
|
-
}
|
|
30
|
-
|
|
31
21
|
export default {
|
|
32
22
|
deprecated(message: string) {
|
|
33
23
|
console.warn('[@eggjs/core:deprecated] %s', message);
|
|
34
24
|
},
|
|
35
25
|
|
|
36
26
|
extensions,
|
|
37
|
-
|
|
38
|
-
// async _importOrRequire(filepath: string) {
|
|
39
|
-
// // try import first
|
|
40
|
-
// let obj: any;
|
|
41
|
-
// try {
|
|
42
|
-
// obj = await import(filepath);
|
|
43
|
-
// } catch (err: any) {
|
|
44
|
-
// debug('await import error, use require instead, %s', err);
|
|
45
|
-
// // use custom require
|
|
46
|
-
// obj = getCustomRequire()(filepath);
|
|
47
|
-
// }
|
|
48
|
-
// return obj;
|
|
49
|
-
// },
|
|
27
|
+
extensionNames,
|
|
50
28
|
|
|
51
29
|
async loadFile(filepath: string) {
|
|
52
30
|
try {
|
|
@@ -55,33 +33,7 @@ export default {
|
|
|
55
33
|
if (extname && !extensionNames.includes(extname)) {
|
|
56
34
|
return fs.readFileSync(filepath);
|
|
57
35
|
}
|
|
58
|
-
|
|
59
|
-
let isESM = false;
|
|
60
|
-
if (typeof require === 'function') {
|
|
61
|
-
// commonjs
|
|
62
|
-
obj = require(filepath);
|
|
63
|
-
debug('[loadFile] require %s => %o', filepath, obj);
|
|
64
|
-
if (obj && obj.__esModule) {
|
|
65
|
-
isESM = true;
|
|
66
|
-
}
|
|
67
|
-
} else {
|
|
68
|
-
// esm
|
|
69
|
-
debug('[loadFile] await import start: %s', filepath);
|
|
70
|
-
const fileUrl = pathToFileURL(filepath).toString();
|
|
71
|
-
obj = await import(fileUrl);
|
|
72
|
-
debug('[loadFile] await import end: %s => %o', filepath, obj);
|
|
73
|
-
isESM = true;
|
|
74
|
-
if (obj && typeof obj === 'object' && 'default' in obj) {
|
|
75
|
-
// default: { default: [Function (anonymous)] }
|
|
76
|
-
obj = obj.default;
|
|
77
|
-
}
|
|
78
|
-
}
|
|
79
|
-
if (!obj) return obj;
|
|
80
|
-
// it's es module, use default export
|
|
81
|
-
if (isESM && typeof obj === 'object') {
|
|
82
|
-
obj = 'default' in obj ? obj.default : obj;
|
|
83
|
-
}
|
|
84
|
-
debug('[loadFile] return %s => %o', filepath, obj);
|
|
36
|
+
const obj = await importModule(filepath, { importDefaultOnly: true });
|
|
85
37
|
return obj;
|
|
86
38
|
} catch (e: any) {
|
|
87
39
|
const err = new Error(`[@eggjs/core] load file: ${filepath}, error: ${e.message}`);
|
|
@@ -92,10 +44,7 @@ export default {
|
|
|
92
44
|
},
|
|
93
45
|
|
|
94
46
|
resolvePath(filepath: string, options?: { paths?: string[] }) {
|
|
95
|
-
|
|
96
|
-
return require.resolve(filepath, options);
|
|
97
|
-
}
|
|
98
|
-
return getCustomRequire().resolve(filepath, options);
|
|
47
|
+
return importResolve(filepath, options);
|
|
99
48
|
},
|
|
100
49
|
|
|
101
50
|
methods: [ 'head', 'options', 'get', 'put', 'patch', 'post', 'delete' ],
|
package/src/utils/timing.ts
CHANGED
package/dist/commonjs/types.d.ts
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export {};
|