@eggjs/core 7.0.0-beta.35 → 7.0.0-beta.36
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/base_context_class.d.ts +19 -14
- package/dist/base_context_class.js +39 -36
- package/dist/egg.d.ts +279 -277
- package/dist/egg.js +394 -426
- package/dist/index.d.ts +12 -12
- package/dist/index.js +12 -12
- package/dist/lifecycle.d.ts +79 -75
- package/dist/lifecycle.js +280 -306
- package/dist/loader/context_loader.d.ts +34 -30
- package/dist/loader/context_loader.js +76 -99
- package/dist/loader/egg_loader.d.ts +370 -366
- package/dist/loader/egg_loader.js +1169 -1567
- package/dist/loader/file_loader.d.ts +99 -95
- package/dist/loader/file_loader.js +190 -241
- package/dist/singleton.d.ts +31 -27
- package/dist/singleton.js +107 -117
- package/dist/types.d.ts +54 -51
- package/dist/utils/index.d.ts +16 -14
- package/dist/utils/index.js +96 -105
- package/dist/utils/sequencify.d.ts +13 -10
- package/dist/utils/sequencify.js +44 -58
- package/dist/utils/timing.d.ts +22 -19
- package/dist/utils/timing.js +85 -92
- package/package.json +35 -40
- package/dist/types.js +0 -2
package/dist/singleton.js
CHANGED
|
@@ -1,117 +1,107 @@
|
|
|
1
|
-
import assert from
|
|
2
|
-
import { isAsyncFunction } from
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2luZ2xldG9uLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL3NpbmdsZXRvbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLE1BQU0sTUFBTSxhQUFhLENBQUM7QUFFakMsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLFlBQVksQ0FBQztBQWdCN0MsTUFBTSxPQUFPLFNBQVM7SUFDWCxPQUFPLEdBQW1CLElBQUksR0FBRyxFQUFhLENBQUM7SUFDL0MsR0FBRyxDQUFVO0lBQ2IsTUFBTSxDQUF3QjtJQUM5QixJQUFJLENBQVM7SUFDYixPQUFPLENBQXNCO0lBRXRDLFlBQVksT0FBeUI7UUFDbkMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxJQUFJLEVBQUUscUVBQXFFLENBQUMsQ0FBQztRQUM1RixNQUFNLENBQUMsT0FBTyxDQUFDLEdBQUcsRUFBRSxvRUFBb0UsQ0FBQyxDQUFDO1FBQzFGLE1BQU0sQ0FBQyxPQUFPLENBQUMsTUFBTSxFQUFFLHVFQUF1RSxDQUFDLENBQUM7UUFDaEcsTUFBTSxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsSUFBSSxJQUFJLE9BQU8sQ0FBQyxHQUFHLENBQUMsRUFBRSx3QkFBd0IsT0FBTyxDQUFDLElBQUksMkJBQTJCLENBQUMsQ0FBQztRQUN4RyxJQUFJLENBQUMsR0FBRyxHQUFHLE9BQU8sQ0FBQyxHQUFHLENBQUM7UUFDdkIsSUFBSSxDQUFDLElBQUksR0FBRyxPQUFPLENBQUMsSUFBSSxDQUFDO1FBQ3pCLElBQUksQ0FBQyxNQUFNLEdBQUcsT0FBTyxDQUFDLE1BQU0sQ0FBQztRQUM3QixJQUFJLENBQUMsT0FBTyxHQUFHLE9BQU8sQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7SUFDckQsQ0FBQztJQUVELElBQUk7UUFDRixPQUFPLGVBQWUsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FB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
|
|
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 };
|
package/dist/types.d.ts
CHANGED
|
@@ -1,55 +1,58 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
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;
|
|
16
17
|
}
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
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;
|
|
38
|
+
/** whether skip merge plugin config from package.json */
|
|
39
|
+
skipMerge?: boolean;
|
|
39
40
|
}
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
41
|
+
interface CustomLoaderConfigItem {
|
|
42
|
+
/** the directory of the custom loader */
|
|
43
|
+
directory: string;
|
|
44
|
+
/** the inject object, it can be app or ctx */
|
|
45
|
+
inject: string;
|
|
46
|
+
/** whether load unit files */
|
|
47
|
+
loadunit?: boolean;
|
|
47
48
|
}
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
49
|
+
interface EggAppConfig extends Record<string, any> {
|
|
50
|
+
coreMiddleware: string[];
|
|
51
|
+
middleware: string[];
|
|
52
|
+
customLoader?: Record<string, CustomLoaderConfigItem>;
|
|
53
|
+
controller?: {
|
|
54
|
+
supportParams?: boolean;
|
|
55
|
+
};
|
|
55
56
|
}
|
|
57
|
+
//#endregion
|
|
58
|
+
export { CustomLoaderConfigItem, EggAppConfig, EggAppInfo, EggPluginInfo };
|
package/dist/utils/index.d.ts
CHANGED
|
@@ -1,16 +1,18 @@
|
|
|
1
|
-
|
|
1
|
+
//#region src/utils/index.d.ts
|
|
2
|
+
type Fun = (...args: unknown[]) => unknown;
|
|
2
3
|
declare const utils: {
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
4
|
+
deprecated(message: string): void;
|
|
5
|
+
extensions: Record<string, 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: readonly ["head", "options", "get", "put", "patch", "post", "delete"];
|
|
13
|
+
callFn(fn: Fun, args?: unknown[], ctx?: unknown): Promise<unknown>;
|
|
14
|
+
getCalleeFromStack: (withLine?: boolean, stackIndex?: number) => string;
|
|
15
|
+
getResolvedFilename(filepath: string, baseDir: string): string;
|
|
15
16
|
};
|
|
16
|
-
|
|
17
|
+
//#endregion
|
|
18
|
+
export { Fun, utils };
|
package/dist/utils/index.js
CHANGED
|
@@ -1,112 +1,103 @@
|
|
|
1
|
-
import
|
|
2
|
-
import
|
|
3
|
-
import
|
|
4
|
-
import path from
|
|
5
|
-
import { debuglog } from
|
|
6
|
-
import {
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
const
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
const extensionNames = Object.keys(extensions).concat(['.cjs', '.mjs']);
|
|
14
|
-
debug('Module extensions: %j', extensionNames);
|
|
1
|
+
import BuiltinModule from "node:module";
|
|
2
|
+
import fs from "node:fs";
|
|
3
|
+
import { stat } from "node:fs/promises";
|
|
4
|
+
import path from "node:path";
|
|
5
|
+
import { debuglog } from "node:util";
|
|
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);
|
|
15
13
|
function getCalleeFromStack(withLine, stackIndex) {
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
Error.stackTraceLimit = limit;
|
|
38
|
-
if (!callSite || !fileName)
|
|
39
|
-
return '<anonymous>';
|
|
40
|
-
if (!withLine)
|
|
41
|
-
return fileName;
|
|
42
|
-
return `${fileName}:${callSite.getLineNumber()}:${callSite.getColumnNumber()}`;
|
|
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
|
+
if (fileName && fileName.endsWith("egg-mock/lib/app.js")) {
|
|
26
|
+
callSite = obj.stack[stackIndex + 1];
|
|
27
|
+
fileName = callSite.getFileName();
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
Error.prepareStackTrace = prep;
|
|
31
|
+
Error.stackTraceLimit = limit;
|
|
32
|
+
if (!callSite || !fileName) return "<anonymous>";
|
|
33
|
+
if (!withLine) return fileName;
|
|
34
|
+
return `${fileName}:${callSite.getLineNumber()}:${callSite.getColumnNumber()}`;
|
|
43
35
|
}
|
|
44
36
|
const utils = {
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
const reg = /[/\\]/g;
|
|
101
|
-
return filepath.replace(baseDir + path.sep, '').replace(reg, '/');
|
|
102
|
-
},
|
|
37
|
+
deprecated(message) {
|
|
38
|
+
if (debug.enabled) console.trace("[@eggjs/core/deprecated] %s", message);
|
|
39
|
+
else {
|
|
40
|
+
console.log("[@eggjs/core/deprecated] %s", message);
|
|
41
|
+
console.log("[@eggjs/core/deprecated] set NODE_DEBUG=@eggjs/core/utils can show call stack");
|
|
42
|
+
}
|
|
43
|
+
},
|
|
44
|
+
extensions,
|
|
45
|
+
extensionNames,
|
|
46
|
+
async existsPath(filepath) {
|
|
47
|
+
try {
|
|
48
|
+
await stat(filepath);
|
|
49
|
+
return true;
|
|
50
|
+
} catch {
|
|
51
|
+
return false;
|
|
52
|
+
}
|
|
53
|
+
},
|
|
54
|
+
async loadFile(filepath) {
|
|
55
|
+
debug("[loadFile:start] filepath: %s", filepath);
|
|
56
|
+
try {
|
|
57
|
+
const extname = path.extname(filepath);
|
|
58
|
+
if (extname && !extensionNames.includes(extname) && extname !== ".ts") return fs.readFileSync(filepath);
|
|
59
|
+
return await importModule(filepath, { importDefaultOnly: true });
|
|
60
|
+
} catch (e) {
|
|
61
|
+
if (!(e instanceof Error)) {
|
|
62
|
+
console.trace(e);
|
|
63
|
+
throw e;
|
|
64
|
+
}
|
|
65
|
+
const err = /* @__PURE__ */ new Error(`[egg/core] load file: ${filepath}, error: ${e.message}`);
|
|
66
|
+
err.cause = e;
|
|
67
|
+
debug("[loadFile] handle %s error: %s", filepath, e);
|
|
68
|
+
throw err;
|
|
69
|
+
}
|
|
70
|
+
},
|
|
71
|
+
resolvePath(filepath, options) {
|
|
72
|
+
return importResolve(filepath, options);
|
|
73
|
+
},
|
|
74
|
+
methods: [
|
|
75
|
+
"head",
|
|
76
|
+
"options",
|
|
77
|
+
"get",
|
|
78
|
+
"put",
|
|
79
|
+
"patch",
|
|
80
|
+
"post",
|
|
81
|
+
"delete"
|
|
82
|
+
],
|
|
83
|
+
async callFn(fn, args, ctx) {
|
|
84
|
+
args = args || [];
|
|
85
|
+
if (typeof fn !== "function") return;
|
|
86
|
+
return ctx ? fn.call(ctx, ...args) : fn(...args);
|
|
87
|
+
},
|
|
88
|
+
getCalleeFromStack,
|
|
89
|
+
getResolvedFilename(filepath, baseDir) {
|
|
90
|
+
return filepath.replace(baseDir + path.sep, "").replace(/[/\\]/g, "/");
|
|
91
|
+
}
|
|
103
92
|
};
|
|
104
|
-
|
|
93
|
+
var utils_default = utils;
|
|
105
94
|
/**
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
95
|
+
* Capture call site stack from v8.
|
|
96
|
+
* https://github.com/v8/v8/wiki/Stack-Trace-API
|
|
97
|
+
*/
|
|
109
98
|
function prepareObjectStackTrace(_obj, stack) {
|
|
110
|
-
|
|
99
|
+
return stack;
|
|
111
100
|
}
|
|
112
|
-
|
|
101
|
+
|
|
102
|
+
//#endregion
|
|
103
|
+
export { utils_default as default };
|
|
@@ -1,13 +1,16 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
1
|
+
//#region src/utils/sequencify.d.ts
|
|
2
|
+
interface SequencifyResult {
|
|
3
|
+
sequence: string[];
|
|
4
|
+
requires: Record<string, true>;
|
|
4
5
|
}
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
6
|
+
interface SequencifyTask {
|
|
7
|
+
dependencies: string[];
|
|
8
|
+
optionalDependencies: string[];
|
|
8
9
|
}
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
10
|
+
declare function sequencify(tasks: Record<string, SequencifyTask>, names: string[]): {
|
|
11
|
+
sequence: string[];
|
|
12
|
+
missingTasks: string[];
|
|
13
|
+
recursiveDependencies: string[];
|
|
13
14
|
};
|
|
15
|
+
//#endregion
|
|
16
|
+
export { SequencifyResult, SequencifyTask, sequencify };
|