@eggjs/utils 4.4.1 → 4.5.0-beta.2

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.
Files changed (57) hide show
  1. package/README.md +1 -6
  2. package/dist/_virtual/rolldown_runtime.js +7 -0
  3. package/dist/{commonjs/deprecated.d.ts → deprecated.d.ts} +4 -1
  4. package/dist/deprecated.js +41 -0
  5. package/dist/error/ImportResolveError.d.ts +8 -0
  6. package/dist/error/ImportResolveError.js +16 -0
  7. package/dist/{commonjs/framework.d.ts → framework.d.ts} +6 -4
  8. package/dist/framework.js +60 -0
  9. package/dist/import.d.ts +14 -0
  10. package/dist/import.js +231 -0
  11. package/dist/index.d.ts +28 -0
  12. package/dist/index.js +45 -0
  13. package/dist/plugin.d.ts +51 -0
  14. package/dist/plugin.js +112 -0
  15. package/dist/utils.js +12 -0
  16. package/package.json +26 -58
  17. package/dist/commonjs/deprecated.js +0 -59
  18. package/dist/commonjs/error/ImportResolveError.d.ts +0 -5
  19. package/dist/commonjs/error/ImportResolveError.js +0 -17
  20. package/dist/commonjs/error/index.d.ts +0 -1
  21. package/dist/commonjs/error/index.js +0 -18
  22. package/dist/commonjs/framework.js +0 -84
  23. package/dist/commonjs/import.d.ts +0 -11
  24. package/dist/commonjs/import.js +0 -326
  25. package/dist/commonjs/index.d.ts +0 -26
  26. package/dist/commonjs/index.js +0 -79
  27. package/dist/commonjs/package.json +0 -3
  28. package/dist/commonjs/plugin.d.ts +0 -49
  29. package/dist/commonjs/plugin.js +0 -127
  30. package/dist/commonjs/utils.d.ts +0 -2
  31. package/dist/commonjs/utils.js +0 -25
  32. package/dist/esm/deprecated.d.ts +0 -10
  33. package/dist/esm/deprecated.js +0 -53
  34. package/dist/esm/error/ImportResolveError.d.ts +0 -5
  35. package/dist/esm/error/ImportResolveError.js +0 -13
  36. package/dist/esm/error/index.d.ts +0 -1
  37. package/dist/esm/error/index.js +0 -2
  38. package/dist/esm/framework.d.ts +0 -16
  39. package/dist/esm/framework.js +0 -78
  40. package/dist/esm/import.d.ts +0 -11
  41. package/dist/esm/import.js +0 -316
  42. package/dist/esm/index.d.ts +0 -26
  43. package/dist/esm/index.js +0 -51
  44. package/dist/esm/package.json +0 -3
  45. package/dist/esm/plugin.d.ts +0 -49
  46. package/dist/esm/plugin.js +0 -117
  47. package/dist/esm/utils.d.ts +0 -2
  48. package/dist/esm/utils.js +0 -18
  49. package/dist/package.json +0 -4
  50. package/src/deprecated.ts +0 -58
  51. package/src/error/ImportResolveError.ts +0 -13
  52. package/src/error/index.ts +0 -1
  53. package/src/framework.ts +0 -92
  54. package/src/import.ts +0 -344
  55. package/src/index.ts +0 -58
  56. package/src/plugin.ts +0 -167
  57. package/src/utils.ts +0 -19
package/dist/plugin.js ADDED
@@ -0,0 +1,112 @@
1
+ import { importModule } from "./import.js";
2
+ import path from "node:path";
3
+ import { mkdir, realpath, stat, writeFile } from "node:fs/promises";
4
+ import { debuglog } from "node:util";
5
+ import assert from "node:assert";
6
+ import os from "node:os";
7
+
8
+ //#region src/plugin.ts
9
+ const debug = debuglog("egg/utils/plugin");
10
+ const tmpDir = os.tmpdir();
11
+ function noop() {}
12
+ const logger = {
13
+ debug: noop,
14
+ info: noop,
15
+ warn: noop,
16
+ error: noop
17
+ };
18
+ /**
19
+ * @see https://github.com/eggjs/egg-core/blob/2920f6eade07959d25f5c4f96b154d3fbae877db/lib/loader/mixin/plugin.js#L203
20
+ */
21
+ async function getPlugins(options) {
22
+ const loader = await getLoader(options);
23
+ await loader.loadPlugin();
24
+ return loader.allPlugins;
25
+ }
26
+ /**
27
+ * @see https://github.com/eggjs/egg-core/blob/2920f6eade07959d25f5c4f96b154d3fbae877db/lib/loader/egg_loader.js#L348
28
+ */
29
+ async function getLoadUnits(options) {
30
+ const loader = await getLoader(options);
31
+ await loader.loadPlugin();
32
+ return loader.getLoadUnits();
33
+ }
34
+ async function getConfig(options) {
35
+ const loader = await getLoader(options);
36
+ await loader.loadPlugin();
37
+ await loader.loadConfig();
38
+ return loader.config;
39
+ }
40
+ async function exists(filepath) {
41
+ try {
42
+ await stat(filepath);
43
+ return true;
44
+ } catch {
45
+ return false;
46
+ }
47
+ }
48
+ async function getLoader(options) {
49
+ assert(options.framework, "framework is required");
50
+ assert(await exists(options.framework), `${options.framework} should exist`);
51
+ if (!(options.baseDir && await exists(options.baseDir))) {
52
+ options.baseDir = path.join(tmpDir, "egg_utils", `${Date.now()}`, "tmp_app");
53
+ await mkdir(options.baseDir, { recursive: true });
54
+ await writeFile(path.join(options.baseDir, "package.json"), JSON.stringify({
55
+ name: "tmp_app",
56
+ type: "module"
57
+ }));
58
+ debug("[getLoader] create baseDir: %o", options.baseDir);
59
+ }
60
+ const { EggCore, EggLoader } = await findEggCore(options);
61
+ const mod = await importModule(options.framework);
62
+ const Application = mod.Application ?? mod.default?.Application;
63
+ assert(Application, `Application not export on ${options.framework}`);
64
+ if (options.env) process.env.EGG_SERVER_ENV = options.env;
65
+ return new EggLoader({
66
+ baseDir: options.baseDir,
67
+ logger,
68
+ app: Object.create(Application.prototype),
69
+ EggCoreClass: EggCore
70
+ });
71
+ }
72
+ async function findEggCore(options) {
73
+ const baseDirRealpath = await realpath(options.baseDir);
74
+ const paths = [await realpath(options.framework), baseDirRealpath];
75
+ try {
76
+ const { EggCore, EggLoader } = await importModule("egg", { paths });
77
+ if (EggLoader) return {
78
+ EggCore,
79
+ EggLoader
80
+ };
81
+ } catch (err) {
82
+ debug("[findEggCore] import \"egg\" from paths:%o error: %o", paths, err);
83
+ }
84
+ const names = ["@eggjs/core", "egg-core"];
85
+ for (const name of names) {
86
+ try {
87
+ const { EggCore, EggLoader } = await importModule(name, { paths });
88
+ if (EggLoader) return {
89
+ EggCore,
90
+ EggLoader
91
+ };
92
+ } catch (err) {
93
+ debug("[findEggCore] import \"%s\" from paths:%o error: %o", name, paths, err);
94
+ }
95
+ try {
96
+ const { EggCore, EggLoader } = await importModule(name);
97
+ if (EggLoader) return {
98
+ EggCore,
99
+ EggLoader
100
+ };
101
+ } catch (err) {
102
+ debug("[findEggCore] import \"%s\" error: %o", name, err);
103
+ }
104
+ let eggCorePath = path.join(options.baseDir, `node_modules/${name}`);
105
+ if (!await exists(eggCorePath)) eggCorePath = path.join(options.framework, `node_modules/${name}`);
106
+ if (await exists(eggCorePath)) return await importModule(eggCorePath);
107
+ }
108
+ assert(false, `Can't find ${names.join(" or ")} from ${options.baseDir} and ${options.framework}`);
109
+ }
110
+
111
+ //#endregion
112
+ export { findEggCore, getConfig, getLoadUnits, getLoader, getPlugins };
package/dist/utils.js ADDED
@@ -0,0 +1,12 @@
1
+ import path from "node:path";
2
+ import { existsSync, readFileSync } from "node:fs";
3
+ import { fileURLToPath } from "node:url";
4
+
5
+ //#region src/utils.ts
6
+ function readJSONSync(file) {
7
+ if (!existsSync(file)) throw new Error(`${file} is not found`);
8
+ return JSON.parse(readFileSync(file, "utf-8"));
9
+ }
10
+
11
+ //#endregion
12
+ export { readJSONSync };
package/package.json CHANGED
@@ -1,25 +1,24 @@
1
1
  {
2
2
  "name": "@eggjs/utils",
3
- "version": "4.4.1",
4
- "engine": {
5
- "node": ">=18.19.0"
3
+ "version": "4.5.0-beta.2",
4
+ "engines": {
5
+ "node": ">= 20.19.0"
6
6
  },
7
7
  "publishConfig": {
8
8
  "access": "public"
9
9
  },
10
- "description": "Utils for all egg projects",
11
- "scripts": {
12
- "lint": "eslint src test --ext ts",
13
- "pretest": "npm run clean && npm run lint -- --fix && npm run prepublishOnly",
14
- "test": "egg-bin test",
15
- "posttest": "npm run clean",
16
- "test-local": "egg-bin test",
17
- "preci": "npm run clean && npm run lint && npm run prepublishOnly",
18
- "ci": "egg-bin cov",
19
- "postci": "npm run clean",
20
- "clean": "rimraf dist",
21
- "prepublishOnly": "tshy && tshy-after && attw --pack"
10
+ "main": "./dist/index.js",
11
+ "module": "./dist/index.js",
12
+ "types": "./dist/index.d.ts",
13
+ "files": [
14
+ "dist"
15
+ ],
16
+ "type": "module",
17
+ "exports": {
18
+ ".": "./dist/index.js",
19
+ "./package.json": "./package.json"
22
20
  },
21
+ "description": "Utils for all egg projects",
23
22
  "keywords": [
24
23
  "egg",
25
24
  "utils"
@@ -27,53 +26,22 @@
27
26
  "author": "fengmk2 <fengmk2@gmail.com> (https://github.com/fengmk2)",
28
27
  "repository": {
29
28
  "type": "git",
30
- "url": "git://github.com/eggjs/utils.git"
29
+ "url": "git://github.com/eggjs/egg.git",
30
+ "directory": "packages/utils"
31
31
  },
32
32
  "license": "MIT",
33
33
  "dependencies": {},
34
34
  "devDependencies": {
35
- "@arethetypeswrong/cli": "^0.17.2",
36
- "@eggjs/bin": "^7.0.0",
37
- "@eggjs/tsconfig": "1",
38
- "@types/mocha": "10",
39
- "@types/node": "22",
35
+ "@types/node": "24",
40
36
  "coffee": "5",
41
- "eslint": "8",
42
- "eslint-config-egg": "14",
43
- "mm": "4",
44
- "npminstall": "7",
45
- "rimraf": "6",
46
- "runscript": "2",
47
- "snap-shot-it": "^7.9.10",
48
- "tshy": "3",
49
- "tshy-after": "1",
37
+ "mm": "^4.0.2",
38
+ "runscript": "^2.0.1",
39
+ "tsdown": "^0.14.2",
50
40
  "typescript": "5"
51
41
  },
52
- "files": [
53
- "dist",
54
- "src"
55
- ],
56
- "type": "module",
57
- "tshy": {
58
- "exports": {
59
- "./package.json": "./package.json",
60
- ".": "./src/index.ts"
61
- }
62
- },
63
- "exports": {
64
- "./package.json": "./package.json",
65
- ".": {
66
- "import": {
67
- "types": "./dist/esm/index.d.ts",
68
- "default": "./dist/esm/index.js"
69
- },
70
- "require": {
71
- "types": "./dist/commonjs/index.d.ts",
72
- "default": "./dist/commonjs/index.js"
73
- }
74
- }
75
- },
76
- "main": "./dist/commonjs/index.js",
77
- "types": "./dist/commonjs/index.d.ts",
78
- "module": "./dist/esm/index.js"
79
- }
42
+ "scripts": {
43
+ "build": "tsdown",
44
+ "lint": "oxlint --type-aware",
45
+ "test": "vitest run"
46
+ }
47
+ }
@@ -1,59 +0,0 @@
1
- "use strict";
2
- var __importDefault = (this && this.__importDefault) || function (mod) {
3
- return (mod && mod.__esModule) ? mod : { "default": mod };
4
- };
5
- Object.defineProperty(exports, "__esModule", { value: true });
6
- exports.getFrameworkOrEggPath = getFrameworkOrEggPath;
7
- const node_path_1 = __importDefault(require("node:path"));
8
- const node_fs_1 = require("node:fs");
9
- const utils_js_1 = require("./utils.js");
10
- /**
11
- * Try to get framework dir path
12
- * If can't find any framework, try to find egg dir path
13
- *
14
- * @param {String} cwd - current work path
15
- * @param {Array} [eggNames] - egg names, default is ['egg']
16
- * @return {String} framework or egg dir path
17
- * @deprecated
18
- */
19
- function getFrameworkOrEggPath(cwd, eggNames) {
20
- eggNames = eggNames || ['egg'];
21
- const moduleDir = node_path_1.default.join(cwd, 'node_modules');
22
- if (!(0, node_fs_1.existsSync)(moduleDir)) {
23
- return '';
24
- }
25
- // try to get framework
26
- // 1. try to read egg.framework property on package.json
27
- const pkgFile = node_path_1.default.join(cwd, 'package.json');
28
- if ((0, node_fs_1.existsSync)(pkgFile)) {
29
- const pkg = (0, utils_js_1.readJSONSync)(pkgFile);
30
- if (pkg.egg && pkg.egg.framework) {
31
- return node_path_1.default.join(moduleDir, pkg.egg.framework);
32
- }
33
- }
34
- // 2. try the module dependencies includes eggNames
35
- const names = (0, node_fs_1.readdirSync)(moduleDir);
36
- for (const name of names) {
37
- const pkgfile = node_path_1.default.join(moduleDir, name, 'package.json');
38
- if (!(0, node_fs_1.existsSync)(pkgfile)) {
39
- continue;
40
- }
41
- const pkg = (0, utils_js_1.readJSONSync)(pkgfile);
42
- if (pkg.dependencies) {
43
- for (const eggName of eggNames) {
44
- if (pkg.dependencies[eggName]) {
45
- return node_path_1.default.join(moduleDir, name);
46
- }
47
- }
48
- }
49
- }
50
- // try to get egg
51
- for (const eggName of eggNames) {
52
- const pkgfile = node_path_1.default.join(moduleDir, eggName, 'package.json');
53
- if ((0, node_fs_1.existsSync)(pkgfile)) {
54
- return node_path_1.default.join(moduleDir, eggName);
55
- }
56
- }
57
- return '';
58
- }
59
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVwcmVjYXRlZC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9kZXByZWNhdGVkLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBYUEsc0RBNENDO0FBekRELDBEQUE2QjtBQUM3QixxQ0FBa0Q7QUFDbEQseUNBQTBDO0FBRTFDOzs7Ozs7OztHQVFHO0FBQ0gsU0FBZ0IscUJBQXFCLENBQUMsR0FBVyxFQUFFLFFBQW1CO0lBQ3BFLFFBQVEsR0FBRyxRQUFRLElBQUksQ0FBRSxLQUFLLENBQUUsQ0FBQztJQUNqQyxNQUFNLFNBQVMsR0FBRyxtQkFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUUsY0FBYyxDQUFDLENBQUM7SUFDakQsSUFBSSxDQUFDLElBQUEsb0JBQVUsRUFBQyxTQUFTLENBQUMsRUFBRSxDQUFDO1FBQzNCLE9BQU8sRUFBRSxDQUFDO0lBQ1osQ0FBQztJQUVELHVCQUF1QjtJQUV2Qix3REFBd0Q7SUFDeEQsTUFBTSxPQUFPLEdBQUcsbUJBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFLGNBQWMsQ0FBQyxDQUFDO0lBQy9DLElBQUksSUFBQSxvQkFBVSxFQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUM7UUFDeEIsTUFBTSxHQUFHLEdBQUcsSUFBQSx1QkFBWSxFQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQ2xDLElBQUksR0FBRyxDQUFDLEdBQUcsSUFBSSxHQUFHLENBQUMsR0FBRyxDQUFDLFNBQVMsRUFBRSxDQUFDO1lBQ2pDLE9BQU8sbUJBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFLEdBQUcsQ0FBQyxHQUFHLENBQUMsU0FBUyxDQUFDLENBQUM7UUFDakQsQ0FBQztJQUNILENBQUM7SUFFRCxtREFBbUQ7SUFDbkQsTUFBTSxLQUFLLEdBQUcsSUFBQSxxQkFBVyxFQUFDLFNBQVMsQ0FBQyxDQUFDO0lBQ3JDLEtBQUssTUFBTSxJQUFJLElBQUksS0FBSyxFQUFFLENBQUM7UUFDekIsTUFBTSxPQUFPLEdBQUcsbUJBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFLElBQUksRUFBRSxjQUFjLENBQUMsQ0FBQztRQUMzRCxJQUFJLENBQUMsSUFBQSxvQkFBVSxFQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUM7WUFDekIsU0FBUztRQUNYLENBQUM7UUFDRCxNQUFNLEdBQUcsR0FBRyxJQUFBLHVCQUFZLEVBQUMsT0FBTyxDQUFDLENBQUM7UUFDbEMsSUFBSSxHQUFHLENBQUMsWUFBWSxFQUFFLENBQUM7WUFDckIsS0FBSyxNQUFNLE9BQU8sSUFBSSxRQUFRLEVBQUUsQ0FBQztnQkFDL0IsSUFBSSxHQUFHLENBQUMsWUFBWSxDQUFDLE9BQU8sQ0FBQyxFQUFFLENBQUM7b0JBQzlCLE9BQU8sbUJBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFLElBQUksQ0FBQyxDQUFDO2dCQUNwQyxDQUFDO1lBQ0gsQ0FBQztRQUNILENBQUM7SUFDSCxDQUFDO0lBRUQsaUJBQWlCO0lBQ2pCLEtBQUssTUFBTSxPQUFPLElBQUksUUFBUSxFQUFFLENBQUM7UUFDL0IsTUFBTSxPQUFPLEdBQUcsbUJBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFLE9BQU8sRUFBRSxjQUFjLENBQUMsQ0FBQztRQUM5RCxJQUFJLElBQUEsb0JBQVUsRUFBQyxPQUFPLENBQUMsRUFBRSxDQUFDO1lBQ3hCLE9BQU8sbUJBQUksQ0FBQyxJQUFJLENBQUMsU0FBUyxFQUFFLE9BQU8sQ0FBQyxDQUFDO1FBQ3ZDLENBQUM7SUFDSCxDQUFDO0lBRUQsT0FBTyxFQUFFLENBQUM7QUFDWixDQUFDIn0=
@@ -1,5 +0,0 @@
1
- export declare class ImportResolveError extends Error {
2
- filepath: string;
3
- paths: string[];
4
- constructor(filepath: string, paths: string[], error: Error);
5
- }
@@ -1,17 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.ImportResolveError = void 0;
4
- class ImportResolveError extends Error {
5
- filepath;
6
- paths;
7
- constructor(filepath, paths, error) {
8
- const message = `${error.message}, paths: ${JSON.stringify(paths)}`;
9
- super(message, { cause: error });
10
- this.name = this.constructor.name;
11
- this.filepath = filepath;
12
- this.paths = paths;
13
- Error.captureStackTrace(this, this.constructor);
14
- }
15
- }
16
- exports.ImportResolveError = ImportResolveError;
17
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiSW1wb3J0UmVzb2x2ZUVycm9yLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2Vycm9yL0ltcG9ydFJlc29sdmVFcnJvci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSxNQUFhLGtCQUFtQixTQUFRLEtBQUs7SUFDM0MsUUFBUSxDQUFTO0lBQ2pCLEtBQUssQ0FBVztJQUVoQixZQUFZLFFBQWdCLEVBQUUsS0FBZSxFQUFFLEtBQVk7UUFDekQsTUFBTSxPQUFPLEdBQUcsR0FBRyxLQUFLLENBQUMsT0FBTyxZQUFZLElBQUksQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQztRQUNwRSxLQUFLLENBQUMsT0FBTyxFQUFFLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUM7UUFDakMsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQztRQUNsQyxJQUFJLENBQUMsUUFBUSxHQUFHLFFBQVEsQ0FBQztRQUN6QixJQUFJLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQztRQUNuQixLQUFLLENBQUMsaUJBQWlCLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQztJQUNsRCxDQUFDO0NBQ0Y7QUFaRCxnREFZQyJ9
@@ -1 +0,0 @@
1
- export * from './ImportResolveError.js';
@@ -1,18 +0,0 @@
1
- "use strict";
2
- var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
- if (k2 === undefined) k2 = k;
4
- var desc = Object.getOwnPropertyDescriptor(m, k);
5
- if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
- desc = { enumerable: true, get: function() { return m[k]; } };
7
- }
8
- Object.defineProperty(o, k2, desc);
9
- }) : (function(o, m, k, k2) {
10
- if (k2 === undefined) k2 = k;
11
- o[k2] = m[k];
12
- }));
13
- var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
- for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
- };
16
- Object.defineProperty(exports, "__esModule", { value: true });
17
- __exportStar(require("./ImportResolveError.js"), exports);
18
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvZXJyb3IvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7OztBQUFBLDBEQUF3QyJ9
@@ -1,84 +0,0 @@
1
- "use strict";
2
- var __importDefault = (this && this.__importDefault) || function (mod) {
3
- return (mod && mod.__esModule) ? mod : { "default": mod };
4
- };
5
- Object.defineProperty(exports, "__esModule", { value: true });
6
- exports.getFrameworkPath = getFrameworkPath;
7
- const node_util_1 = require("node:util");
8
- const node_path_1 = __importDefault(require("node:path"));
9
- const node_assert_1 = __importDefault(require("node:assert"));
10
- const node_fs_1 = require("node:fs");
11
- const utils_js_1 = require("./utils.js");
12
- const import_js_1 = require("./import.js");
13
- const debug = (0, node_util_1.debuglog)('@eggjs/utils/framework');
14
- const initCwd = process.cwd();
15
- /**
16
- * Find the framework directory, lookup order
17
- * - specify framework path
18
- * - get framework name from
19
- * - use egg by default
20
- * @param {Object} options - options
21
- * @param {String} options.baseDir - the current directory of application
22
- * @param {String} [options.framework] - the directory of framework
23
- * @return {String} frameworkPath
24
- */
25
- function getFrameworkPath(options) {
26
- const { framework, baseDir } = options;
27
- const pkgPath = node_path_1.default.join(baseDir, 'package.json');
28
- (0, node_assert_1.default)((0, node_fs_1.existsSync)(pkgPath), `${pkgPath} should exist`);
29
- const moduleDir = node_path_1.default.join(baseDir, 'node_modules');
30
- // 1. pass framework or customEgg
31
- if (framework) {
32
- // 1.1 framework is an absolute path
33
- // framework: path.join(baseDir, 'node_modules/${frameworkName}')
34
- if (node_path_1.default.isAbsolute(framework)) {
35
- (0, node_assert_1.default)((0, node_fs_1.existsSync)(framework), `${framework} should exist`);
36
- return framework;
37
- }
38
- // 1.2 framework is a npm package that required by application
39
- // framework: 'frameworkName'
40
- return assertAndReturn(framework, moduleDir);
41
- }
42
- const pkg = (0, utils_js_1.readJSONSync)(pkgPath);
43
- // 2. framework is not specified
44
- // 2.1 use framework name from pkg.egg.framework
45
- if (pkg.egg?.framework) {
46
- return assertAndReturn(pkg.egg.framework, moduleDir);
47
- }
48
- // 2.2 use egg by default
49
- return assertAndReturn('egg', moduleDir);
50
- }
51
- function assertAndReturn(frameworkName, moduleDir) {
52
- const moduleDirs = new Set([
53
- moduleDir,
54
- // find framework from process.cwd, especially for test,
55
- // the application is in test/fixtures/app,
56
- // and framework is install in ${cwd}/node_modules
57
- node_path_1.default.join(process.cwd(), 'node_modules'),
58
- // prevent from mocking process.cwd
59
- node_path_1.default.join(initCwd, 'node_modules'),
60
- ]);
61
- try {
62
- // find framework from global, especially for monorepo
63
- let globalModuleDir;
64
- // if frameworkName is scoped package, like @ali/egg
65
- if (frameworkName.startsWith('@') && frameworkName.includes('/')) {
66
- globalModuleDir = node_path_1.default.join((0, import_js_1.importResolve)(`${frameworkName}/package.json`), '../../..');
67
- }
68
- else {
69
- globalModuleDir = node_path_1.default.join((0, import_js_1.importResolve)(`${frameworkName}/package.json`), '../..');
70
- }
71
- moduleDirs.add(globalModuleDir);
72
- }
73
- catch (err) {
74
- // ignore
75
- debug('importResolve %s on %s error: %s', frameworkName, moduleDir, err);
76
- }
77
- for (const moduleDir of moduleDirs) {
78
- const frameworkPath = node_path_1.default.join(moduleDir, frameworkName);
79
- if ((0, node_fs_1.existsSync)(frameworkPath))
80
- return frameworkPath;
81
- }
82
- throw new Error(`${frameworkName} is not found in ${Array.from(moduleDirs)}`);
83
- }
84
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZnJhbWV3b3JrLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2ZyYW1ld29yay50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQTBCQSw0Q0E0QkM7QUF0REQseUNBQXFDO0FBQ3JDLDBEQUE2QjtBQUM3Qiw4REFBaUM7QUFDakMscUNBQXFDO0FBQ3JDLHlDQUEwQztBQUMxQywyQ0FBNEM7QUFFNUMsTUFBTSxLQUFLLEdBQUcsSUFBQSxvQkFBUSxFQUFDLHdCQUF3QixDQUFDLENBQUM7QUFFakQsTUFBTSxPQUFPLEdBQUcsT0FBTyxDQUFDLEdBQUcsRUFBRSxDQUFDO0FBTzlCOzs7Ozs7Ozs7R0FTRztBQUNILFNBQWdCLGdCQUFnQixDQUFDLE9BQWdCO0lBQy9DLE1BQU0sRUFBRSxTQUFTLEVBQUUsT0FBTyxFQUFFLEdBQUcsT0FBTyxDQUFDO0lBQ3ZDLE1BQU0sT0FBTyxHQUFHLG1CQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxjQUFjLENBQUMsQ0FBQztJQUNuRCxJQUFBLHFCQUFNLEVBQUMsSUFBQSxvQkFBVSxFQUFDLE9BQU8sQ0FBQyxFQUFFLEdBQUcsT0FBTyxlQUFlLENBQUMsQ0FBQztJQUN2RCxNQUFNLFNBQVMsR0FBRyxtQkFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsY0FBYyxDQUFDLENBQUM7SUFFckQsaUNBQWlDO0lBQ2pDLElBQUksU0FBUyxFQUFFLENBQUM7UUFDZCxvQ0FBb0M7UUFDcEMsaUVBQWlFO1FBQ2pFLElBQUksbUJBQUksQ0FBQyxVQUFVLENBQUMsU0FBUyxDQUFDLEVBQUUsQ0FBQztZQUMvQixJQUFBLHFCQUFNLEVBQUMsSUFBQSxvQkFBVSxFQUFDLFNBQVMsQ0FBQyxFQUFFLEdBQUcsU0FBUyxlQUFlLENBQUMsQ0FBQztZQUMzRCxPQUFPLFNBQVMsQ0FBQztRQUNuQixDQUFDO1FBQ0QsOERBQThEO1FBQzlELDZCQUE2QjtRQUM3QixPQUFPLGVBQWUsQ0FBQyxTQUFTLEVBQUUsU0FBUyxDQUFDLENBQUM7SUFDL0MsQ0FBQztJQUVELE1BQU0sR0FBRyxHQUFHLElBQUEsdUJBQVksRUFBQyxPQUFPLENBQUMsQ0FBQztJQUNsQyxnQ0FBZ0M7SUFDaEMsZ0RBQWdEO0lBQ2hELElBQUksR0FBRyxDQUFDLEdBQUcsRUFBRSxTQUFTLEVBQUUsQ0FBQztRQUN2QixPQUFPLGVBQWUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLFNBQVMsRUFBRSxTQUFTLENBQUMsQ0FBQztJQUN2RCxDQUFDO0lBRUQseUJBQXlCO0lBQ3pCLE9BQU8sZUFBZSxDQUFDLEtBQUssRUFBRSxTQUFTLENBQUMsQ0FBQztBQUMzQyxDQUFDO0FBRUQsU0FBUyxlQUFlLENBQUMsYUFBcUIsRUFBRSxTQUFpQjtJQUMvRCxNQUFNLFVBQVUsR0FBRyxJQUFJLEdBQUcsQ0FBQztRQUN6QixTQUFTO1FBQ1Qsd0RBQXdEO1FBQ3hELDJDQUEyQztRQUMzQyxrREFBa0Q7UUFDbEQsbUJBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLEdBQUcsRUFBRSxFQUFFLGNBQWMsQ0FBQztRQUN4QyxtQ0FBbUM7UUFDbkMsbUJBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLGNBQWMsQ0FBQztLQUNuQyxDQUFDLENBQUM7SUFDSCxJQUFJLENBQUM7UUFDSCxzREFBc0Q7UUFDdEQsSUFBSSxlQUFlLENBQUM7UUFDcEIsb0RBQW9EO1FBQ3BELElBQUksYUFBYSxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsSUFBSSxhQUFhLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUM7WUFDakUsZUFBZSxHQUFHLG1CQUFJLENBQUMsSUFBSSxDQUN6QixJQUFBLHlCQUFhLEVBQUMsR0FBRyxhQUFhLGVBQWUsQ0FBQyxFQUM5QyxVQUFVLENBQ1gsQ0FBQztRQUNKLENBQUM7YUFBTSxDQUFDO1lBQ04sZUFBZSxHQUFHLG1CQUFJLENBQUMsSUFBSSxDQUN6QixJQUFBLHlCQUFhLEVBQUMsR0FBRyxhQUFhLGVBQWUsQ0FBQyxFQUM5QyxPQUFPLENBQ1IsQ0FBQztRQUNKLENBQUM7UUFDRCxVQUFVLENBQUMsR0FBRyxDQUFDLGVBQWUsQ0FBQyxDQUFDO0lBQ2xDLENBQUM7SUFBQyxPQUFPLEdBQUcsRUFBRSxDQUFDO1FBQ2IsU0FBUztRQUNULEtBQUssQ0FBQyxrQ0FBa0MsRUFBRSxhQUFhLEVBQUUsU0FBUyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0lBQzNFLENBQUM7SUFDRCxLQUFLLE1BQU0sU0FBUyxJQUFJLFVBQVUsRUFBRSxDQUFDO1FBQ25DLE1BQU0sYUFBYSxHQUFHLG1CQUFJLENBQUMsSUFBSSxDQUFDLFNBQVMsRUFBRSxhQUFhLENBQUMsQ0FBQztRQUMxRCxJQUFJLElBQUEsb0JBQVUsRUFBQyxhQUFhLENBQUM7WUFBRSxPQUFPLGFBQWEsQ0FBQztJQUN0RCxDQUFDO0lBQ0QsTUFBTSxJQUFJLEtBQUssQ0FBQyxHQUFHLGFBQWEsb0JBQW9CLEtBQUssQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ2hGLENBQUMifQ==
@@ -1,11 +0,0 @@
1
- export interface ImportResolveOptions {
2
- paths?: string[];
3
- }
4
- export interface ImportModuleOptions extends ImportResolveOptions {
5
- importDefaultOnly?: boolean;
6
- }
7
- export declare const isESM: boolean;
8
- export declare function getExtensions(): NodeJS.RequireExtensions;
9
- export declare function isSupportTypeScript(): boolean;
10
- export declare function importResolve(filepath: string, options?: ImportResolveOptions): string;
11
- export declare function importModule(filepath: string, options?: ImportModuleOptions): Promise<any>;