@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.
@@ -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 { createRequire } from 'node:module';
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
- // async _importOrRequire(filepath: string) {
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
- let obj;
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
- if (typeof require !== 'undefined') {
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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvdXRpbHMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLFdBQVcsQ0FBQztBQUNyQyxPQUFPLElBQUksTUFBTSxXQUFXLENBQUM7QUFDN0IsT0FBTyxFQUFFLE1BQU0sU0FBUyxDQUFDO0FBQ3pCLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxVQUFVLENBQUM7QUFDekMsT0FBTyxhQUFhLE1BQU0sYUFBYSxDQUFDO0FBQ3hDLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFFNUMsTUFBTSxLQUFLLEdBQUcsUUFBUSxDQUFDLG1CQUFtQixDQUFDLENBQUM7QUFJNUMsbURBQW1EO0FBQ25ELE1BQU0sTUFBTSxHQUFHLE9BQU8sTUFBTSxLQUFLLFdBQVcsSUFBSSxNQUFNLENBQUMsV0FBVyxDQUFDLE1BQU0sR0FBRyxDQUFDO0lBQzNFLENBQUMsQ0FBQyxNQUFNLENBQUMsV0FBVztJQUNwQiwwQkFBMEI7SUFDMUIsQ0FBQyxDQUFDLGFBQWEsQ0FBQztBQUVsQixNQUFNLFVBQVUsR0FBSSxNQUFjLENBQUMsV0FBVyxDQUFDO0FBQy9DLE1BQU0sY0FBYyxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUUsTUFBTSxFQUFFLE1BQU0sQ0FBRSxDQUFDLENBQUM7QUFDMUUsS0FBSyxDQUFDLHVCQUF1QixFQUFFLGNBQWMsQ0FBQyxDQUFDO0FBRS9DLElBQUksY0FBMkIsQ0FBQztBQUNoQyxTQUFTLGdCQUFnQjtJQUN2QixJQUFJLENBQUMsY0FBYyxJQUFJLE9BQU8sT0FBTyxLQUFLLFdBQVcsRUFBRSxDQUFDO1FBQ3RELGNBQWMsR0FBRyxhQUFhLENBQUMsT0FBTyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUM7UUFDOUMsbURBQW1EO0lBQ3JELENBQUM7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
90
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvdXRpbHMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLFdBQVcsQ0FBQztBQUNyQyxPQUFPLElBQUksTUFBTSxXQUFXLENBQUM7QUFDN0IsT0FBTyxFQUFFLE1BQU0sU0FBUyxDQUFDO0FBQ3pCLE9BQU8sYUFBYSxNQUFNLGFBQWEsQ0FBQztBQUN4QyxPQUFPLEVBQUUsYUFBYSxFQUFFLFlBQVksRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUUzRCxNQUFNLEtBQUssR0FBRyxRQUFRLENBQUMsbUJBQW1CLENBQUMsQ0FBQztBQUk1QyxtREFBbUQ7QUFDbkQsTUFBTSxNQUFNLEdBQUcsT0FBTyxNQUFNLEtBQUssV0FBVyxJQUFJLE1BQU0sQ0FBQyxXQUFXLENBQUMsTUFBTSxHQUFHLENBQUM7SUFDM0UsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxXQUFXO0lBQ3BCLDBCQUEwQjtJQUMxQixDQUFDLENBQUMsYUFBYSxDQUFDO0FBRWxCLE1BQU0sVUFBVSxHQUFJLE1BQWMsQ0FBQyxXQUFXLENBQUM7QUFDL0MsTUFBTSxjQUFjLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBRSxNQUFNLEVBQUUsTUFBTSxDQUFFLENBQUMsQ0FBQztBQUMxRSxLQUFLLENBQUMsdUJBQXVCLEVBQUUsY0FBYyxDQUFDLENBQUM7QUFFL0MsZUFBZTtJQUNiLFVBQVUsQ0FBQyxPQUFlO1FBQ3hCLE9BQU8sQ0FBQyxJQUFJLENBQUMsNkJBQTZCLEVBQUUsT0FBTyxDQUFDLENBQUM7SUFDdkQsQ0FBQztJQUVELFVBQVU7SUFDVixjQUFjO0lBRWQsS0FBSyxDQUFDLFFBQVEsQ0FBQyxRQUFnQjtRQUM3QixJQUFJLENBQUM7WUFDSCwrQ0FBK0M7WUFDL0MsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsQ0FBQztZQUN2QyxJQUFJLE9BQU8sSUFBSSxDQUFDLGNBQWMsQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQztnQkFDakQsT0FBTyxFQUFFLENBQUMsWUFBWSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1lBQ25DLENBQUM7WUFDRCxNQUFNLEdBQUcsR0FBRyxNQUFNLFlBQVksQ0FBQyxRQUFRLEVBQUUsRUFBRSxpQkFBaUIsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO1lBQ3RFLE9BQU8sR0FBRyxDQUFDO1FBQ2IsQ0FBQztRQUFDLE9BQU8sQ0FBTSxFQUFFLENBQUM7WUFDaEIsTUFBTSxHQUFHLEdBQUcsSUFBSSxLQUFLLENBQUMsNEJBQTRCLFFBQVEsWUFBWSxDQUFDLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQztZQUNuRixHQUFHLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQztZQUNkLEtBQUssQ0FBQyxnQ0FBZ0MsRUFBRSxRQUFRLEVBQUUsQ0FBQyxDQUFDLENBQUM7WUFDckQsTUFBTSxHQUFHLENBQUM7UUFDWixDQUFDO0lBQ0gsQ0FBQztJQUVELFdBQVcsQ0FBQyxRQUFnQixFQUFFLE9BQThCO1FBQzFELE9BQU8sYUFBYSxDQUFDLFFBQVEsRUFBRSxPQUFPLENBQUMsQ0FBQztJQUMxQyxDQUFDO0lBRUQsT0FBTyxFQUFFLENBQUUsTUFBTSxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsUUFBUSxDQUFFO0lBRXZFLEtBQUssQ0FBQyxNQUFNLENBQUMsRUFBTyxFQUFFLElBQVksRUFBRSxHQUFTO1FBQzNDLElBQUksR0FBRyxJQUFJLElBQUksRUFBRSxDQUFDO1FBQ2xCLElBQUksT0FBTyxFQUFFLEtBQUssVUFBVTtZQUFFLE9BQU87UUFDckMsT0FBTyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDO0lBQ25ELENBQUM7SUFFRCxrQkFBa0IsQ0FBQyxRQUFrQixFQUFFLFVBQW1CO1FBQ3hELFVBQVUsR0FBRyxVQUFVLEtBQUssU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFVBQVUsQ0FBQztRQUN2RCxNQUFNLEtBQUssR0FBRyxLQUFLLENBQUMsZUFBZSxDQUFDO1FBQ3BDLE1BQU0sSUFBSSxHQUFHLEtBQUssQ0FBQyxpQkFBaUIsQ0FBQztRQUVyQyxLQUFLLENBQUMsaUJBQWlCLEdBQUcsdUJBQXVCLENBQUM7UUFDbEQsS0FBSyxDQUFDLGVBQWUsR0FBRyxDQUFDLENBQUM7UUFFMUIsb0JBQW9CO1FBQ3BCLE1BQU0sR0FBRyxHQUFRLEVBQUUsQ0FBQztRQUNwQixLQUFLLENBQUMsaUJBQWlCLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDN0IsSUFBSSxRQUFRLEdBQUcsR0FBRyxDQUFDLEtBQUssQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUNyQyxJQUFJLFFBQVEsR0FBRyxFQUFFLENBQUM7UUFDbEIsSUFBSSxRQUFRLEVBQUUsQ0FBQztZQUNiLCtCQUErQjtZQUMvQixnRUFBZ0U7WUFDaEUsUUFBUSxHQUFHLFFBQVEsQ0FBQyxXQUFXLEVBQUUsQ0FBQztZQUNsQyx3QkFBd0I7WUFDeEIsSUFBSSxRQUFRLElBQUksUUFBUSxDQUFDLFFBQVEsQ0FBQyxxQkFBcUIsQ0FBQyxFQUFFLENBQUM7Z0JBQ3pELGlCQUFpQjtnQkFDakIsUUFBUSxHQUFHLEdBQUcsQ0FBQyxLQUFLLENBQUMsVUFBVSxHQUFHLENBQUMsQ0FBQyxDQUFDO2dCQUNyQyxRQUFRLEdBQUcsUUFBUSxDQUFDLFdBQVcsRUFBRSxDQUFDO1lBQ3BDLENBQUM7UUFDSCxDQUFDO1FBRUQsS0FBSyxDQUFDLGlCQUFpQixHQUFHLElBQUksQ0FBQztRQUMvQixLQUFLLENBQUMsZUFBZSxHQUFHLEtBQUssQ0FBQztRQUU5QixJQUFJLENBQUMsUUFBUSxJQUFJLENBQUMsUUFBUTtZQUFFLE9BQU8sYUFBYSxDQUFDO1FBQ2pELElBQUksQ0FBQyxRQUFRO1lBQUUsT0FBTyxRQUFRLENBQUM7UUFDL0IsT0FBTyxHQUFHLFFBQVEsSUFBSSxRQUFRLENBQUMsYUFBYSxFQUFFLElBQUksUUFBUSxDQUFDLGVBQWUsRUFBRSxFQUFFLENBQUM7SUFDakYsQ0FBQztJQUVELG1CQUFtQixDQUFDLFFBQWdCLEVBQUUsT0FBZTtRQUNuRCxNQUFNLEdBQUcsR0FBRyxRQUFRLENBQUM7UUFDckIsT0FBTyxRQUFRLENBQUMsT0FBTyxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUM7SUFDcEUsQ0FBQztDQUNGLENBQUM7QUFFRjs7O0dBR0c7QUFDSCxTQUFTLHVCQUF1QixDQUFDLElBQVMsRUFBRSxLQUFVO0lBQ3BELE9BQU8sS0FBSyxDQUFDO0FBQ2YsQ0FBQyJ9
@@ -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.0-beta.2",
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.1.1",
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 { utils };
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);
@@ -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
- * // lib/example.js
153
- * const egg = require('egg');
154
- * class ExampleApplication extends egg.Application {
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 path.join(__dirname, '..');
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: FileLoaderOptions) {
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.directory ?? directory,
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,
@@ -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 { createRequire } from 'node:module';
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
- let obj: any;
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
- if (typeof require !== 'undefined') {
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' ],
@@ -4,7 +4,7 @@ import assert from 'node:assert';
4
4
 
5
5
  const debug = debuglog('@eggjs/core:utils:timing');
6
6
 
7
- interface TimingItem {
7
+ export interface TimingItem {
8
8
  name: string;
9
9
  start: number;
10
10
  end?: number;
@@ -1 +0,0 @@
1
- export {};