@eggjs/core 7.0.0-beta.19 → 7.0.0-beta.21

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/singleton.js CHANGED
@@ -1,107 +1,117 @@
1
- import assert from "node:assert";
2
- import { isAsyncFunction } from "is-type-of";
3
-
4
- //#region src/singleton.ts
5
- var Singleton = class {
6
- clients = /* @__PURE__ */ new Map();
7
- app;
8
- create;
9
- name;
10
- options;
11
- constructor(options) {
12
- assert(options.name, "[egg/core/singleton] Singleton#constructor options.name is required");
13
- assert(options.app, "[egg/core/singleton] Singleton#constructor options.app is required");
14
- assert(options.create, "[egg/core/singleton] Singleton#constructor options.create is required");
15
- assert(!(options.name in options.app), `[egg/core/singleton] ${options.name} is already exists in app`);
16
- this.app = options.app;
17
- this.name = options.name;
18
- this.create = options.create;
19
- this.options = options.app.config[this.name] ?? {};
20
- }
21
- init() {
22
- return isAsyncFunction(this.create) ? this.initAsync() : this.initSync();
23
- }
24
- initSync() {
25
- const options = this.options;
26
- assert(!(options.client && options.clients), `[egg/core/singleton] ${this.name} can not set options.client and options.clients both`);
27
- if (options.client) {
28
- const client = this.createInstance(options.client, options.name);
29
- this.#setClientToApp(client);
30
- this.#extendDynamicMethods(client);
31
- return;
32
- }
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
- this.#setClientToApp(this);
42
- }
43
- async initAsync() {
44
- const options = this.options;
45
- assert(!(options.client && options.clients), `[egg/core/singleton] ${this.name} can not set options.client and options.clients both`);
46
- if (options.client) {
47
- const client = await this.createInstanceAsync(options.client, options.name);
48
- this.#setClientToApp(client);
49
- this.#extendDynamicMethods(client);
50
- return;
51
- }
52
- if (options.clients) {
53
- await Promise.all(Object.keys(options.clients).map((id) => {
54
- return this.createInstanceAsync(options.clients[id], id).then((client) => this.clients.set(id, client));
55
- }));
56
- this.#setClientToApp(this);
57
- return;
58
- }
59
- this.#setClientToApp(this);
60
- }
61
- #setClientToApp(client) {
62
- Reflect.set(this.app, this.name, client);
63
- }
64
- /**
65
- * @deprecated please use `getSingletonInstance(id)` instead
66
- */
67
- get(id) {
68
- return this.clients.get(id);
69
- }
70
- /**
71
- * Get singleton instance by id
72
- */
73
- getSingletonInstance(id) {
74
- return this.clients.get(id);
75
- }
76
- createInstance(config, clientName) {
77
- assert(!isAsyncFunction(this.create), `[egg/core/singleton] ${this.name} only support asynchronous creation, please use createInstanceAsync`);
78
- config = {
79
- ...this.options.default,
80
- ...config
81
- };
82
- return this.create(config, this.app, clientName);
83
- }
84
- async createInstanceAsync(config, clientName) {
85
- config = {
86
- ...this.options.default,
87
- ...config
88
- };
89
- return await this.create(config, this.app, clientName);
90
- }
91
- #extendDynamicMethods(client) {
92
- assert(!client.createInstance, "[egg/core/singleton] singleton instance should not have createInstance method");
93
- assert(!client.createInstanceAsync, "[egg/core/singleton] singleton instance should not have createInstanceAsync method");
94
- try {
95
- let extendable = client;
96
- if (!Object.isExtensible(client) || Object.isFrozen(client)) extendable = client.__proto__ || client;
97
- extendable.createInstance = this.createInstance.bind(this);
98
- extendable.createInstanceAsync = this.createInstanceAsync.bind(this);
99
- } catch (err) {
100
- this.app.coreLogger.warn("[egg/core/singleton] %s dynamic create is disabled because of client is un-extendable", this.name);
101
- this.app.coreLogger.warn(err);
102
- }
103
- }
104
- };
105
-
106
- //#endregion
107
- export { Singleton };
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/core/singleton] Singleton#constructor options.name is required');
11
+ assert(options.app, '[egg/core/singleton] Singleton#constructor options.app is required');
12
+ assert(options.create, '[egg/core/singleton] Singleton#constructor options.create is required');
13
+ assert(!(options.name in options.app), `[egg/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), `[egg/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), `[egg/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), `[egg/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, '[egg/core/singleton] singleton instance should not have createInstance method');
100
+ assert(!client.createInstanceAsync, '[egg/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('[egg/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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2luZ2xldG9uLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL3NpbmdsZXRvbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLE1BQU0sTUFBTSxhQUFhLENBQUM7QUFFakMsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLFlBQVksQ0FBQztBQWdCN0MsTUFBTSxPQUFPLFNBQVM7SUFDWCxPQUFPLEdBQUcsSUFBSSxHQUFHLEVBQWEsQ0FBQztJQUMvQixHQUFHLENBQVU7SUFDYixNQUFNLENBQXdCO0lBQzlCLElBQUksQ0FBUztJQUNiLE9BQU8sQ0FBc0I7SUFFdEMsWUFBWSxPQUF5QjtRQUNuQyxNQUFNLENBQUMsT0FBTyxDQUFDLElBQUksRUFBRSxxRUFBcUUsQ0FBQyxDQUFDO1FBQzVGLE1BQU0sQ0FBQyxPQUFPLENBQUMsR0FBRyxFQUFFLG9FQUFvRSxDQUFDLENBQUM7UUFDMUYsTUFBTSxDQUFDLE9BQU8sQ0FBQyxNQUFNLEVBQUUsdUVBQXVFLENBQUMsQ0FBQztRQUNoRyxNQUFNLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxJQUFJLElBQUksT0FBTyxDQUFDLEdBQUcsQ0FBQyxFQUFFLHdCQUF3QixPQUFPLENBQUMsSUFBSSwyQkFBMkIsQ0FBQyxDQUFDO1FBQ3hHLElBQUksQ0FBQyxHQUFHLEdBQUcsT0FBTyxDQUFDLEdBQUcsQ0FBQztRQUN2QixJQUFJLENBQUMsSUFBSSxHQUFHLE9BQU8sQ0FBQyxJQUFJLENBQUM7UUFDekIsSUFBSSxDQUFDLE1BQU0sR0FBRyxPQUFPLENBQUMsTUFBTSxDQUFDO1FBQzdCLElBQUksQ0FBQyxPQUFPLEdBQUcsT0FBTyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztJQUNyRCxDQUFDO0lBRUQsSUFBSTtRQUNGLE9BQU8sZUFBZSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFD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
package/dist/types.d.ts CHANGED
@@ -1,56 +1,53 @@
1
- //#region src/types.d.ts
2
- interface EggAppInfo {
3
- /** package.json */
4
- pkg: Record<string, any>;
5
- /** the application name from package.json */
6
- name: string;
7
- /** current directory of application */
8
- baseDir: string;
9
- /** equals to serverEnv */
10
- env: string;
11
- /** equals to serverScope */
12
- scope: string;
13
- /** home directory of the OS */
14
- HOME: string;
15
- /** baseDir when local and unittest, HOME when other environment */
16
- root: string;
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;
17
16
  }
18
- interface EggPluginInfo {
19
- /** the plugin name, it can be used in `dep` */
20
- name: string;
21
- /** the package name of plugin */
22
- package?: string;
23
- version?: string;
24
- /** whether enabled */
25
- enable: boolean;
26
- implicitEnable?: boolean;
27
- /** the directory of the plugin package */
28
- path?: string;
29
- /** the dependent plugins, you can use the plugin name */
30
- dependencies: string[];
31
- /** the optional dependent plugins. */
32
- optionalDependencies: string[];
33
- dependents?: string[];
34
- /** specify the serverEnv that only enable the plugin in it */
35
- env: string[];
36
- /** the file plugin config in. */
37
- from: string;
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;
38
37
  }
39
- interface CustomLoaderConfigItem {
40
- /** the directory of the custom loader */
41
- directory: string;
42
- /** the inject object, it can be app or ctx */
43
- inject: string;
44
- /** whether load unit files */
45
- loadunit?: boolean;
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;
46
45
  }
47
- interface EggAppConfig extends Record<string, any> {
48
- coreMiddleware: string[];
49
- middleware: string[];
50
- customLoader?: Record<string, CustomLoaderConfigItem>;
51
- controller?: {
52
- supportParams?: boolean;
53
- };
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
+ };
54
53
  }
55
- //#endregion
56
- export { CustomLoaderConfigItem, EggAppConfig, EggAppInfo, EggPluginInfo };
package/dist/types.js ADDED
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvdHlwZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiJ9
@@ -1,19 +1,17 @@
1
- //#region src/utils/index.d.ts
2
- type Fun = (...args: unknown[]) => unknown;
1
+ export type Fun = (...args: unknown[]) => unknown;
3
2
  declare function getCalleeFromStack(withLine?: boolean, stackIndex?: number): string;
4
3
  declare const _default: {
5
- deprecated(message: string): void;
6
- extensions: any;
7
- extensionNames: string[];
8
- existsPath(filepath: string): Promise<boolean>;
9
- loadFile(filepath: string): Promise<any>;
10
- resolvePath(filepath: string, options?: {
11
- paths?: string[];
12
- }): string;
13
- methods: string[];
14
- callFn(fn: Fun, args?: unknown[], ctx?: unknown): Promise<unknown>;
15
- getCalleeFromStack: typeof getCalleeFromStack;
16
- getResolvedFilename(filepath: string, baseDir: string): string;
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;
17
16
  };
18
- //#endregion
19
- export { Fun, _default };
17
+ export default _default;
@@ -1,103 +1,113 @@
1
- import BuiltinModule from "node:module";
2
- import { debuglog } from "node:util";
3
- import path from "node:path";
4
- import fs from "node:fs";
5
- import { stat } from "node:fs/promises";
6
- import { importModule, importResolve } from "@eggjs/utils";
7
-
8
- //#region src/utils/index.ts
9
- const debug = debuglog("egg/core/utils");
10
- const extensions = (typeof module !== "undefined" && module.constructor.length > 1 ? module.constructor : BuiltinModule)._extensions;
11
- const extensionNames = Object.keys(extensions).concat([".cjs", ".mjs"]);
12
- debug("Module extensions: %j", extensionNames);
1
+ import { debuglog } from 'node:util';
2
+ import path from 'node:path';
3
+ import fs from 'node:fs';
4
+ import { stat } from 'node:fs/promises';
5
+ import BuiltinModule from 'node:module';
6
+ import { importResolve, importModule } from '@eggjs/utils';
7
+ const debug = debuglog('egg/core/utils');
8
+ // Guard against poorly mocked module constructors.
9
+ const Module = typeof module !== 'undefined' && module.constructor.length > 1
10
+ ? module.constructor
11
+ : /* istanbul ignore next */
12
+ BuiltinModule;
13
+ const extensions = Module._extensions;
14
+ const extensionNames = Object.keys(extensions).concat(['.cjs', '.mjs']);
15
+ debug('Module extensions: %j', extensionNames);
13
16
  function getCalleeFromStack(withLine, stackIndex) {
14
- stackIndex = stackIndex === void 0 ? 2 : stackIndex;
15
- const limit = Error.stackTraceLimit;
16
- const prep = Error.prepareStackTrace;
17
- Error.prepareStackTrace = prepareObjectStackTrace;
18
- Error.stackTraceLimit = 5;
19
- const obj = {};
20
- Error.captureStackTrace(obj);
21
- let callSite = obj.stack[stackIndex];
22
- let fileName = "";
23
- if (callSite) {
24
- fileName = callSite.getFileName();
25
- /* istanbul ignore if */
26
- if (fileName && fileName.endsWith("egg-mock/lib/app.js")) {
27
- callSite = obj.stack[stackIndex + 1];
28
- fileName = callSite.getFileName();
29
- }
30
- }
31
- Error.prepareStackTrace = prep;
32
- Error.stackTraceLimit = limit;
33
- if (!callSite || !fileName) return "<anonymous>";
34
- if (!withLine) return fileName;
35
- return `${fileName}:${callSite.getLineNumber()}:${callSite.getColumnNumber()}`;
17
+ stackIndex = stackIndex === undefined ? 2 : stackIndex;
18
+ const limit = Error.stackTraceLimit;
19
+ const prep = Error.prepareStackTrace;
20
+ Error.prepareStackTrace = prepareObjectStackTrace;
21
+ Error.stackTraceLimit = 5;
22
+ // capture the stack
23
+ const obj = {};
24
+ Error.captureStackTrace(obj);
25
+ let callSite = obj.stack[stackIndex];
26
+ let fileName = '';
27
+ if (callSite) {
28
+ // egg-mock will create a proxy
29
+ // https://github.com/eggjs/egg-mock/blob/master/lib/app.js#L174
30
+ fileName = callSite.getFileName();
31
+ /* istanbul ignore if */
32
+ if (fileName && fileName.endsWith('egg-mock/lib/app.js')) {
33
+ // TODO: add test
34
+ callSite = obj.stack[stackIndex + 1];
35
+ fileName = callSite.getFileName();
36
+ }
37
+ }
38
+ Error.prepareStackTrace = prep;
39
+ Error.stackTraceLimit = limit;
40
+ if (!callSite || !fileName)
41
+ return '<anonymous>';
42
+ if (!withLine)
43
+ return fileName;
44
+ return `${fileName}:${callSite.getLineNumber()}:${callSite.getColumnNumber()}`;
36
45
  }
37
- var utils_default = {
38
- deprecated(message) {
39
- if (debug.enabled) console.trace("[@eggjs/core/deprecated] %s", message);
40
- else {
41
- console.log("[@eggjs/core/deprecated] %s", message);
42
- console.log("[@eggjs/core/deprecated] set NODE_DEBUG=@eggjs/core/utils can show call stack");
43
- }
44
- },
45
- extensions,
46
- extensionNames,
47
- async existsPath(filepath) {
48
- try {
49
- await stat(filepath);
50
- return true;
51
- } catch {
52
- return false;
53
- }
54
- },
55
- async loadFile(filepath) {
56
- debug("[loadFile:start] filepath: %s", filepath);
57
- try {
58
- const extname = path.extname(filepath);
59
- if (extname && !extensionNames.includes(extname) && extname !== ".ts") return fs.readFileSync(filepath);
60
- return await importModule(filepath, { importDefaultOnly: true });
61
- } catch (e) {
62
- if (!(e instanceof Error)) {
63
- console.trace(e);
64
- throw e;
65
- }
66
- const err = /* @__PURE__ */ new Error(`[egg/core] load file: ${filepath}, error: ${e.message}`);
67
- err.cause = e;
68
- debug("[loadFile] handle %s error: %s", filepath, e);
69
- throw err;
70
- }
71
- },
72
- resolvePath(filepath, options) {
73
- return importResolve(filepath, options);
74
- },
75
- methods: [
76
- "head",
77
- "options",
78
- "get",
79
- "put",
80
- "patch",
81
- "post",
82
- "delete"
83
- ],
84
- async callFn(fn, args, ctx) {
85
- args = args || [];
86
- if (typeof fn !== "function") return;
87
- return ctx ? fn.call(ctx, ...args) : fn(...args);
88
- },
89
- getCalleeFromStack,
90
- getResolvedFilename(filepath, baseDir) {
91
- return filepath.replace(baseDir + path.sep, "").replace(/[/\\]/g, "/");
92
- }
46
+ export default {
47
+ deprecated(message) {
48
+ if (debug.enabled) {
49
+ console.trace('[@eggjs/core/deprecated] %s', message);
50
+ }
51
+ else {
52
+ console.log('[@eggjs/core/deprecated] %s', message);
53
+ console.log('[@eggjs/core/deprecated] set NODE_DEBUG=@eggjs/core/utils can show call stack');
54
+ }
55
+ },
56
+ extensions,
57
+ extensionNames,
58
+ async existsPath(filepath) {
59
+ try {
60
+ await stat(filepath);
61
+ return true;
62
+ }
63
+ catch {
64
+ return false;
65
+ }
66
+ },
67
+ async loadFile(filepath) {
68
+ debug('[loadFile:start] filepath: %s', filepath);
69
+ try {
70
+ // if not js module, just return content buffer
71
+ const extname = path.extname(filepath);
72
+ if (extname && !extensionNames.includes(extname) && extname !== '.ts') {
73
+ return fs.readFileSync(filepath);
74
+ }
75
+ const obj = await importModule(filepath, { importDefaultOnly: true });
76
+ return obj;
77
+ }
78
+ catch (e) {
79
+ if (!(e instanceof Error)) {
80
+ // ts error: test/fixtures/apps/app-ts/app/extend/context.ts(5,17): error TS2339: Property 'url' does not exist on type 'Context'
81
+ console.trace(e);
82
+ throw e;
83
+ }
84
+ const err = new Error(`[egg/core] load file: ${filepath}, error: ${e.message}`);
85
+ err.cause = e;
86
+ debug('[loadFile] handle %s error: %s', filepath, e);
87
+ throw err;
88
+ }
89
+ },
90
+ resolvePath(filepath, options) {
91
+ return importResolve(filepath, options);
92
+ },
93
+ methods: ['head', 'options', 'get', 'put', 'patch', 'post', 'delete'],
94
+ async callFn(fn, args, ctx) {
95
+ args = args || [];
96
+ if (typeof fn !== 'function')
97
+ return;
98
+ return ctx ? fn.call(ctx, ...args) : fn(...args);
99
+ },
100
+ getCalleeFromStack,
101
+ getResolvedFilename(filepath, baseDir) {
102
+ const reg = /[/\\]/g;
103
+ return filepath.replace(baseDir + path.sep, '').replace(reg, '/');
104
+ },
93
105
  };
94
106
  /**
95
- * Capture call site stack from v8.
96
- * https://github.com/v8/v8/wiki/Stack-Trace-API
97
- */
107
+ * Capture call site stack from v8.
108
+ * https://github.com/v8/v8/wiki/Stack-Trace-API
109
+ */
98
110
  function prepareObjectStackTrace(_obj, stack) {
99
- return stack;
111
+ return stack;
100
112
  }
101
-
102
- //#endregion
103
- export { utils_default as default };
113
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvdXRpbHMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLFdBQVcsQ0FBQztBQUNyQyxPQUFPLElBQUksTUFBTSxXQUFXLENBQUM7QUFDN0IsT0FBTyxFQUFFLE1BQU0sU0FBUyxDQUFDO0FBQ3pCLE9BQU8sRUFBRSxJQUFJLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUN4QyxPQUFPLGFBQWEsTUFBTSxhQUFhLENBQUM7QUFFeEMsT0FBTyxFQUFFLGFBQWEsRUFBRSxZQUFZLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFFM0QsTUFBTSxLQUFLLEdBQUcsUUFBUSxDQUFDLGdCQUFnQixDQUFDLENBQUM7QUFJekMsbURBQW1EO0FBQ25ELE1BQU0sTUFBTSxHQUNWLE9BQU8sTUFBTSxLQUFLLFdBQVcsSUFBSSxNQUFNLENBQUMsV0FBVyxDQUFDLE1BQU0sR0FBRyxDQUFDO0lBQzVELENBQUMsQ0FBQyxNQUFNLENBQUMsV0FBVztJQUNwQixDQUFDLENBQUMsMEJBQTBCO1FBQzFCLGFBQWEsQ0FBQztBQUVwQixNQUFNLFVBQVUsR0FBSSxNQUFjLENBQUMsV0FBVyxDQUFDO0FBQy9DLE1BQU0sY0FBYyxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsTUFBTSxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUM7QUFDeEUsS0FBSyxDQUFDLHVCQUF1QixFQUFFLGNBQWMsQ0FBQyxDQUFDO0FBRS9DLFNBQVMsa0JBQWtCLENBQUMsUUFBa0IsRUFBRSxVQUFtQjtJQUNqRSxVQUFVLEdBQUcsVUFBVSxLQUFLLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUM7SUFDdkQsTUFBTSxLQUFLLEdBQUcsS0FBSyxDQUFDLGVBQWUsQ0FBQztJQUNwQyxNQUFN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
@@ -1,16 +1,13 @@
1
- //#region src/utils/sequencify.d.ts
2
- interface SequencifyResult {
3
- sequence: string[];
4
- requires: Record<string, true>;
1
+ export interface SequencifyResult {
2
+ sequence: string[];
3
+ requires: Record<string, true>;
5
4
  }
6
- interface SequencifyTask {
7
- dependencies: string[];
8
- optionalDependencies: string[];
5
+ export interface SequencifyTask {
6
+ dependencies: string[];
7
+ optionalDependencies: string[];
9
8
  }
10
- declare function sequencify(tasks: Record<string, SequencifyTask>, names: string[]): {
11
- sequence: string[];
12
- missingTasks: string[];
13
- recursiveDependencies: string[];
9
+ export declare function sequencify(tasks: Record<string, SequencifyTask>, names: string[]): {
10
+ sequence: string[];
11
+ missingTasks: string[];
12
+ recursiveDependencies: string[];
14
13
  };
15
- //#endregion
16
- export { SequencifyResult, SequencifyTask, sequencify };