@modern-js/utils 2.11.0 → 2.12.1-alpha.0
Sign up to get free protection for your applications and to get access to all the features.
- package/CHANGELOG.md +12 -0
- package/dist/{alias.js → cjs/alias.js} +4 -15
- package/dist/{analyzeProject.js → cjs/analyzeProject.js} +5 -25
- package/dist/{babel.js → cjs/babel.js} +9 -16
- package/dist/{commands.js → cjs/commands.js} +7 -2
- package/dist/{compatRequire.js → cjs/compatRequire.js} +4 -17
- package/dist/cjs/emptyDir.js +32 -0
- package/dist/{getEntryOptions.js → cjs/getEntryOptions.js} +1 -15
- package/dist/{getPackageManager.js → cjs/getPackageManager.js} +19 -41
- package/dist/{getPort.js → cjs/getPort.js} +4 -24
- package/dist/{getServerConfig.js → cjs/getServerConfig.js} +2 -22
- package/dist/{logger.js → cjs/logger.js} +5 -16
- package/dist/{monorepo.js → cjs/monorepo.js} +4 -15
- package/dist/cjs/nodeEnv.js +55 -0
- package/dist/{path.js → cjs/path.js} +1 -1
- package/dist/{pathSerializer.js → cjs/pathSerializer.js} +1 -1
- package/dist/{prettyInstructions.js → cjs/prettyInstructions.js} +13 -16
- package/dist/{react.js → cjs/react.js} +4 -15
- package/dist/{runtimeExports.js → cjs/runtimeExports.js} +1 -1
- package/dist/{universal → cjs/universal}/nestedRoutes.js +2 -19
- package/dist/cjs/version.js +59 -0
- package/dist/{watch.js → cjs/watch.js} +9 -29
- package/dist/esm/FileSizeReporter.js +180 -0
- package/dist/esm/alias.js +83 -0
- package/dist/esm/analyzeProject.js +168 -0
- package/dist/esm/applyOptionsChain.js +26 -0
- package/dist/esm/babel.js +169 -0
- package/dist/esm/chainId.js +92 -0
- package/dist/esm/clearConsole.js +6 -0
- package/dist/esm/commands.js +17 -0
- package/dist/esm/compatRequire.js +68 -0
- package/dist/esm/compiled.js +34 -0
- package/dist/esm/constants.js +317 -0
- package/dist/esm/debug.js +5 -0
- package/dist/esm/emptyDir.js +158 -0
- package/dist/esm/ensureAbsolutePath.js +5 -0
- package/dist/esm/ensureArray.js +9 -0
- package/dist/esm/findExists.js +27 -0
- package/dist/esm/generateMetaTags.js +40 -0
- package/dist/esm/getBrowserslist.js +12 -0
- package/dist/esm/getCoreJsVersion.js +57 -0
- package/dist/esm/getEntryOptions.js +45 -0
- package/dist/esm/getPackageManager.js +187 -0
- package/dist/esm/getPort.js +215 -0
- package/dist/esm/getServerConfig.js +145 -0
- package/dist/esm/getTargetDir.js +6 -0
- package/dist/esm/import.js +8 -0
- package/dist/esm/index.js +44 -0
- package/dist/esm/is/index.js +85 -0
- package/dist/esm/is/nodeEnv.js +16 -0
- package/dist/esm/is/platform.js +7 -0
- package/dist/esm/is/type.js +25 -0
- package/dist/esm/logger.js +207 -0
- package/dist/esm/monorepo.js +109 -0
- package/dist/esm/nodeEnv.js +258 -0
- package/dist/esm/path.js +85 -0
- package/dist/esm/pathSerializer.js +85 -0
- package/dist/esm/plugin.js +45 -0
- package/dist/esm/prettyInstructions.js +96 -0
- package/dist/esm/printBuildError.js +24 -0
- package/dist/esm/react.js +43 -0
- package/dist/esm/readTsConfig.js +10 -0
- package/dist/esm/removeSlash.js +10 -0
- package/dist/esm/resolve.js +42 -0
- package/dist/esm/routes.js +19 -0
- package/dist/esm/runtimeExports.js +65 -0
- package/dist/esm/ssr.js +3 -0
- package/dist/esm/storage.js +36 -0
- package/dist/esm/testUtils.js +13 -0
- package/dist/esm/types.js +1 -0
- package/dist/esm/universal/constants.js +3 -0
- package/dist/esm/universal/formatWebpack.js +108 -0
- package/dist/esm/universal/nestedRoutes.js +174 -0
- package/dist/esm/universal/remixRouter.js +1 -0
- package/dist/esm/universal/serialize.js +7 -0
- package/dist/esm/version.js +193 -0
- package/dist/esm/wait.js +7 -0
- package/dist/esm/watch.js +230 -0
- package/dist/esm-node/FileSizeReporter.js +133 -0
- package/dist/esm-node/alias.js +61 -0
- package/dist/esm-node/analyzeProject.js +17 -0
- package/dist/esm-node/applyOptionsChain.js +35 -0
- package/dist/esm-node/babel.js +105 -0
- package/dist/esm-node/chainId.js +173 -0
- package/dist/esm-node/clearConsole.js +8 -0
- package/dist/esm-node/commands.js +22 -0
- package/dist/esm-node/compatRequire.js +42 -0
- package/dist/esm-node/compiled.js +77 -0
- package/dist/esm-node/constants.js +264 -0
- package/dist/esm-node/debug.js +5 -0
- package/dist/esm-node/emptyDir.js +9 -0
- package/dist/esm-node/ensureAbsolutePath.js +5 -0
- package/dist/esm-node/ensureArray.js +9 -0
- package/dist/esm-node/findExists.js +12 -0
- package/dist/esm-node/generateMetaTags.js +38 -0
- package/dist/esm-node/getBrowserslist.js +7 -0
- package/dist/esm-node/getCoreJsVersion.js +13 -0
- package/dist/esm-node/getEntryOptions.js +17 -0
- package/dist/esm-node/getPackageManager.js +32 -0
- package/dist/esm-node/getPort.js +59 -0
- package/dist/esm-node/getServerConfig.js +14 -0
- package/dist/esm-node/getTargetDir.js +8 -0
- package/dist/esm-node/import.js +9 -0
- package/dist/esm-node/index.js +44 -0
- package/dist/esm-node/is/index.js +71 -0
- package/dist/esm-node/is/nodeEnv.js +12 -0
- package/dist/esm-node/is/platform.js +6 -0
- package/dist/esm-node/is/type.js +34 -0
- package/dist/esm-node/logger.js +100 -0
- package/dist/esm-node/monorepo.js +87 -0
- package/dist/esm-node/nodeEnv.js +30 -0
- package/dist/esm-node/path.js +50 -0
- package/dist/esm-node/pathSerializer.js +46 -0
- package/dist/esm-node/plugin.js +23 -0
- package/dist/esm-node/prettyInstructions.js +77 -0
- package/dist/esm-node/printBuildError.js +34 -0
- package/dist/esm-node/react.js +20 -0
- package/dist/esm-node/readTsConfig.js +13 -0
- package/dist/esm-node/removeSlash.js +8 -0
- package/dist/esm-node/resolve.js +38 -0
- package/dist/esm-node/routes.js +24 -0
- package/dist/esm-node/runtimeExports.js +40 -0
- package/dist/esm-node/ssr.js +6 -0
- package/dist/esm-node/storage.js +42 -0
- package/dist/esm-node/testUtils.js +15 -0
- package/dist/esm-node/types.js +0 -0
- package/dist/esm-node/universal/constants.js +6 -0
- package/dist/esm-node/universal/formatWebpack.js +77 -0
- package/dist/esm-node/universal/nestedRoutes.js +93 -0
- package/dist/esm-node/universal/remixRouter.js +1 -0
- package/dist/esm-node/universal/serialize.js +7 -0
- package/dist/esm-node/version.js +25 -0
- package/dist/esm-node/wait.js +6 -0
- package/dist/esm-node/watch.js +36 -0
- package/dist/types/commands.d.ts +4 -0
- package/dist/{prettyInstructions.d.ts → types/prettyInstructions.d.ts} +4 -3
- package/package.json +4 -4
- package/dist/commands.d.ts +0 -3
- package/dist/emptyDir.js +0 -52
- package/dist/nodeEnv.js +0 -81
- package/dist/version.js +0 -92
- /package/dist/{FileSizeReporter.js → cjs/FileSizeReporter.js} +0 -0
- /package/dist/{applyOptionsChain.js → cjs/applyOptionsChain.js} +0 -0
- /package/dist/{chainId.js → cjs/chainId.js} +0 -0
- /package/dist/{clearConsole.js → cjs/clearConsole.js} +0 -0
- /package/dist/{compiled.js → cjs/compiled.js} +0 -0
- /package/dist/{constants.js → cjs/constants.js} +0 -0
- /package/dist/{debug.js → cjs/debug.js} +0 -0
- /package/dist/{ensureAbsolutePath.js → cjs/ensureAbsolutePath.js} +0 -0
- /package/dist/{ensureArray.js → cjs/ensureArray.js} +0 -0
- /package/dist/{findExists.js → cjs/findExists.js} +0 -0
- /package/dist/{generateMetaTags.js → cjs/generateMetaTags.js} +0 -0
- /package/dist/{getBrowserslist.js → cjs/getBrowserslist.js} +0 -0
- /package/dist/{getCoreJsVersion.js → cjs/getCoreJsVersion.js} +0 -0
- /package/dist/{getTargetDir.js → cjs/getTargetDir.js} +0 -0
- /package/dist/{import.js → cjs/import.js} +0 -0
- /package/dist/{index.js → cjs/index.js} +0 -0
- /package/dist/{is → cjs/is}/index.js +0 -0
- /package/dist/{is → cjs/is}/nodeEnv.js +0 -0
- /package/dist/{is → cjs/is}/platform.js +0 -0
- /package/dist/{is → cjs/is}/type.js +0 -0
- /package/dist/{plugin.js → cjs/plugin.js} +0 -0
- /package/dist/{printBuildError.js → cjs/printBuildError.js} +0 -0
- /package/dist/{readTsConfig.js → cjs/readTsConfig.js} +0 -0
- /package/dist/{removeSlash.js → cjs/removeSlash.js} +0 -0
- /package/dist/{resolve.js → cjs/resolve.js} +0 -0
- /package/dist/{routes.js → cjs/routes.js} +0 -0
- /package/dist/{ssr.js → cjs/ssr.js} +0 -0
- /package/dist/{storage.js → cjs/storage.js} +0 -0
- /package/dist/{testUtils.js → cjs/testUtils.js} +0 -0
- /package/dist/{types.js → cjs/types.js} +0 -0
- /package/dist/{universal → cjs/universal}/constants.js +0 -0
- /package/dist/{universal → cjs/universal}/formatWebpack.js +0 -0
- /package/dist/{universal → cjs/universal}/remixRouter.js +0 -0
- /package/dist/{universal → cjs/universal}/serialize.js +0 -0
- /package/dist/{wait.js → cjs/wait.js} +0 -0
- /package/dist/{FileSizeReporter.d.ts → types/FileSizeReporter.d.ts} +0 -0
- /package/dist/{alias.d.ts → types/alias.d.ts} +0 -0
- /package/dist/{analyzeProject.d.ts → types/analyzeProject.d.ts} +0 -0
- /package/dist/{applyOptionsChain.d.ts → types/applyOptionsChain.d.ts} +0 -0
- /package/dist/{babel.d.ts → types/babel.d.ts} +0 -0
- /package/dist/{chainId.d.ts → types/chainId.d.ts} +0 -0
- /package/dist/{clearConsole.d.ts → types/clearConsole.d.ts} +0 -0
- /package/dist/{compatRequire.d.ts → types/compatRequire.d.ts} +0 -0
- /package/dist/{compiled.d.ts → types/compiled.d.ts} +0 -0
- /package/dist/{constants.d.ts → types/constants.d.ts} +0 -0
- /package/dist/{debug.d.ts → types/debug.d.ts} +0 -0
- /package/dist/{emptyDir.d.ts → types/emptyDir.d.ts} +0 -0
- /package/dist/{ensureAbsolutePath.d.ts → types/ensureAbsolutePath.d.ts} +0 -0
- /package/dist/{ensureArray.d.ts → types/ensureArray.d.ts} +0 -0
- /package/dist/{findExists.d.ts → types/findExists.d.ts} +0 -0
- /package/dist/{generateMetaTags.d.ts → types/generateMetaTags.d.ts} +0 -0
- /package/dist/{getBrowserslist.d.ts → types/getBrowserslist.d.ts} +0 -0
- /package/dist/{getCoreJsVersion.d.ts → types/getCoreJsVersion.d.ts} +0 -0
- /package/dist/{getEntryOptions.d.ts → types/getEntryOptions.d.ts} +0 -0
- /package/dist/{getPackageManager.d.ts → types/getPackageManager.d.ts} +0 -0
- /package/dist/{getPort.d.ts → types/getPort.d.ts} +0 -0
- /package/dist/{getServerConfig.d.ts → types/getServerConfig.d.ts} +0 -0
- /package/dist/{getTargetDir.d.ts → types/getTargetDir.d.ts} +0 -0
- /package/dist/{import.d.ts → types/import.d.ts} +0 -0
- /package/dist/{index.d.ts → types/index.d.ts} +0 -0
- /package/dist/{is → types/is}/index.d.ts +0 -0
- /package/dist/{is → types/is}/nodeEnv.d.ts +0 -0
- /package/dist/{is → types/is}/platform.d.ts +0 -0
- /package/dist/{is → types/is}/type.d.ts +0 -0
- /package/dist/{logger.d.ts → types/logger.d.ts} +0 -0
- /package/dist/{monorepo.d.ts → types/monorepo.d.ts} +0 -0
- /package/dist/{nodeEnv.d.ts → types/nodeEnv.d.ts} +0 -0
- /package/dist/{path.d.ts → types/path.d.ts} +0 -0
- /package/dist/{pathSerializer.d.ts → types/pathSerializer.d.ts} +0 -0
- /package/dist/{plugin.d.ts → types/plugin.d.ts} +0 -0
- /package/dist/{printBuildError.d.ts → types/printBuildError.d.ts} +0 -0
- /package/dist/{react.d.ts → types/react.d.ts} +0 -0
- /package/dist/{readTsConfig.d.ts → types/readTsConfig.d.ts} +0 -0
- /package/dist/{removeSlash.d.ts → types/removeSlash.d.ts} +0 -0
- /package/dist/{resolve.d.ts → types/resolve.d.ts} +0 -0
- /package/dist/{routes.d.ts → types/routes.d.ts} +0 -0
- /package/dist/{runtimeExports.d.ts → types/runtimeExports.d.ts} +0 -0
- /package/dist/{ssr.d.ts → types/ssr.d.ts} +0 -0
- /package/dist/{storage.d.ts → types/storage.d.ts} +0 -0
- /package/dist/{testUtils.d.ts → types/testUtils.d.ts} +0 -0
- /package/dist/{types.d.ts → types/types.d.ts} +0 -0
- /package/dist/{universal → types/universal}/constants.d.ts +0 -0
- /package/dist/{universal → types/universal}/formatWebpack.d.ts +0 -0
- /package/dist/{universal → types/universal}/nestedRoutes.d.ts +0 -0
- /package/dist/{universal → types/universal}/remixRouter.d.ts +0 -0
- /package/dist/{universal → types/universal}/serialize.d.ts +0 -0
- /package/dist/{version.d.ts → types/version.d.ts} +0 -0
- /package/dist/{wait.d.ts → types/wait.d.ts} +0 -0
- /package/dist/{watch.d.ts → types/watch.d.ts} +0 -0
@@ -0,0 +1,13 @@
|
|
1
|
+
import * as fs from "../compiled/fs-extra";
|
2
|
+
const getCoreJsVersion = (corejsPkgPath) => {
|
3
|
+
try {
|
4
|
+
const { version } = fs.readJSONSync(corejsPkgPath);
|
5
|
+
const [major, minor] = version.split(".");
|
6
|
+
return `${major}.${minor}`;
|
7
|
+
} catch (err) {
|
8
|
+
return "3";
|
9
|
+
}
|
10
|
+
};
|
11
|
+
export {
|
12
|
+
getCoreJsVersion
|
13
|
+
};
|
@@ -0,0 +1,17 @@
|
|
1
|
+
import { isPlainObject } from "./is";
|
2
|
+
import { MAIN_ENTRY_NAME } from "./constants";
|
3
|
+
const getEntryOptions = (name, baseOptions, optionsByEntries, packageName) => {
|
4
|
+
if (optionsByEntries) {
|
5
|
+
let optionsByEntry = getOptionsByEntryName(name, optionsByEntries);
|
6
|
+
if (optionsByEntry === void 0 && name === MAIN_ENTRY_NAME && packageName) {
|
7
|
+
optionsByEntry = getOptionsByEntryName(packageName, optionsByEntries);
|
8
|
+
}
|
9
|
+
return optionsByEntry !== void 0 ? isPlainObject(optionsByEntry) && isPlainObject(baseOptions) ? { ...baseOptions, ...optionsByEntry } : optionsByEntry : baseOptions;
|
10
|
+
} else {
|
11
|
+
return baseOptions;
|
12
|
+
}
|
13
|
+
};
|
14
|
+
const getOptionsByEntryName = (name, optionsByEntries) => optionsByEntries.hasOwnProperty(name) ? optionsByEntries[name] : void 0;
|
15
|
+
export {
|
16
|
+
getEntryOptions
|
17
|
+
};
|
@@ -0,0 +1,32 @@
|
|
1
|
+
import os from "os";
|
2
|
+
import path from "path";
|
3
|
+
import { fs } from "./compiled";
|
4
|
+
import { canUsePnpm, canUseYarn } from "./nodeEnv";
|
5
|
+
const MAX_TIMES = 5;
|
6
|
+
async function getPackageManager(cwd = process.cwd()) {
|
7
|
+
let appDirectory = cwd;
|
8
|
+
let times = 0;
|
9
|
+
while (os.homedir() !== appDirectory && times < MAX_TIMES) {
|
10
|
+
times++;
|
11
|
+
if (fs.existsSync(path.resolve(appDirectory, "pnpm-lock.yaml"))) {
|
12
|
+
return "pnpm";
|
13
|
+
}
|
14
|
+
if (fs.existsSync(path.resolve(appDirectory, "yarn.lock"))) {
|
15
|
+
return "yarn";
|
16
|
+
}
|
17
|
+
if (fs.existsSync(path.resolve(appDirectory, "package-lock.json"))) {
|
18
|
+
return "npm";
|
19
|
+
}
|
20
|
+
appDirectory = path.join(appDirectory, "..");
|
21
|
+
}
|
22
|
+
if (await canUsePnpm()) {
|
23
|
+
return "pnpm";
|
24
|
+
}
|
25
|
+
if (await canUseYarn()) {
|
26
|
+
return "yarn";
|
27
|
+
}
|
28
|
+
return "npm";
|
29
|
+
}
|
30
|
+
export {
|
31
|
+
getPackageManager
|
32
|
+
};
|
@@ -0,0 +1,59 @@
|
|
1
|
+
import net from "net";
|
2
|
+
import { chalk } from "./compiled";
|
3
|
+
import { logger } from "./logger";
|
4
|
+
const getPort = async (port, {
|
5
|
+
tryLimits = 20,
|
6
|
+
strictPort = false
|
7
|
+
} = {}) => {
|
8
|
+
if (typeof port === "string") {
|
9
|
+
port = parseInt(port, 10);
|
10
|
+
}
|
11
|
+
if (strictPort) {
|
12
|
+
tryLimits = 1;
|
13
|
+
}
|
14
|
+
const original = port;
|
15
|
+
let found = false;
|
16
|
+
let attempts = 0;
|
17
|
+
while (!found && attempts <= tryLimits) {
|
18
|
+
try {
|
19
|
+
await new Promise((resolve, reject) => {
|
20
|
+
const server = net.createServer();
|
21
|
+
server.unref();
|
22
|
+
server.on("error", reject);
|
23
|
+
server.listen(
|
24
|
+
{
|
25
|
+
port,
|
26
|
+
host: "0.0.0.0"
|
27
|
+
},
|
28
|
+
() => {
|
29
|
+
found = true;
|
30
|
+
server.close(resolve);
|
31
|
+
}
|
32
|
+
);
|
33
|
+
});
|
34
|
+
} catch (e) {
|
35
|
+
if (e.code !== "EADDRINUSE") {
|
36
|
+
throw e;
|
37
|
+
}
|
38
|
+
port++;
|
39
|
+
attempts++;
|
40
|
+
}
|
41
|
+
}
|
42
|
+
if (port !== original) {
|
43
|
+
if (strictPort) {
|
44
|
+
throw new Error(
|
45
|
+
`Port "${original}" is occupied, please choose another one.`
|
46
|
+
);
|
47
|
+
} else {
|
48
|
+
logger.info(
|
49
|
+
`Something is already running on port ${original}. ${chalk.yellow(
|
50
|
+
`Use port ${port} instead.`
|
51
|
+
)}`
|
52
|
+
);
|
53
|
+
}
|
54
|
+
}
|
55
|
+
return port;
|
56
|
+
};
|
57
|
+
export {
|
58
|
+
getPort
|
59
|
+
};
|
@@ -0,0 +1,14 @@
|
|
1
|
+
import * as path from "path";
|
2
|
+
import { CONFIG_FILE_EXTENSIONS } from "./constants";
|
3
|
+
import { findExists } from "./findExists";
|
4
|
+
const getServerConfig = async (appDirectory, configFile) => {
|
5
|
+
const configFilePath = findExists(
|
6
|
+
CONFIG_FILE_EXTENSIONS.map(
|
7
|
+
(extension) => path.resolve(appDirectory, `${configFile}${extension}`)
|
8
|
+
)
|
9
|
+
);
|
10
|
+
return configFilePath;
|
11
|
+
};
|
12
|
+
export {
|
13
|
+
getServerConfig
|
14
|
+
};
|
@@ -0,0 +1,44 @@
|
|
1
|
+
export * from "./compiled";
|
2
|
+
export * from "./commands";
|
3
|
+
export * from "./FileSizeReporter";
|
4
|
+
export * from "./printBuildError";
|
5
|
+
export * from "./debug";
|
6
|
+
export * from "./findExists";
|
7
|
+
export * from "./is";
|
8
|
+
export * from "./compatRequire";
|
9
|
+
export * from "./logger";
|
10
|
+
export * from "./constants";
|
11
|
+
export * from "./ensureArray";
|
12
|
+
export * from "./ensureAbsolutePath";
|
13
|
+
export * from "./clearConsole";
|
14
|
+
export * from "./applyOptionsChain";
|
15
|
+
export * from "./getBrowserslist";
|
16
|
+
export * from "./removeSlash";
|
17
|
+
export * from "./getEntryOptions";
|
18
|
+
export * from "./getPort";
|
19
|
+
export * from "./monorepo";
|
20
|
+
export * from "./getPackageManager";
|
21
|
+
export * from "./runtimeExports";
|
22
|
+
export * from "./readTsConfig";
|
23
|
+
export * from "./path";
|
24
|
+
export * from "./pathSerializer";
|
25
|
+
export * from "./generateMetaTags";
|
26
|
+
export * from "./prettyInstructions";
|
27
|
+
export * from "./alias";
|
28
|
+
export * from "./import";
|
29
|
+
export * from "./watch";
|
30
|
+
export * from "./nodeEnv";
|
31
|
+
export * from "./wait";
|
32
|
+
export * from "./emptyDir";
|
33
|
+
export * from "./getServerConfig";
|
34
|
+
export * from "./resolve";
|
35
|
+
export * from "./analyzeProject";
|
36
|
+
export * from "./chainId";
|
37
|
+
export * from "./version";
|
38
|
+
export * from "./plugin";
|
39
|
+
export * from "./routes";
|
40
|
+
export * from "./testUtils";
|
41
|
+
export * from "./getCoreJsVersion";
|
42
|
+
export * from "./react";
|
43
|
+
export * from "./getTargetDir";
|
44
|
+
export * from "./babel";
|
@@ -0,0 +1,71 @@
|
|
1
|
+
import fs from "fs";
|
2
|
+
import path from "path";
|
3
|
+
import { createDebugger } from "../debug";
|
4
|
+
import { isDev } from "./nodeEnv";
|
5
|
+
const debug = createDebugger("judge-depExists");
|
6
|
+
const isDepExists = (appDirectory, name) => {
|
7
|
+
const pkgPath = path.resolve(appDirectory, "./package.json");
|
8
|
+
if (!fs.existsSync(pkgPath)) {
|
9
|
+
debug(`can't find package.json under: %s`, appDirectory);
|
10
|
+
return false;
|
11
|
+
}
|
12
|
+
const json = require(pkgPath);
|
13
|
+
const { dependencies = {}, devDependencies = {} } = json;
|
14
|
+
return dependencies.hasOwnProperty(name) || devDependencies.hasOwnProperty(name);
|
15
|
+
};
|
16
|
+
const isTypescript = (root) => fs.existsSync(path.resolve(root, "./tsconfig.json"));
|
17
|
+
const isEmpty = (o) => Object.entries(o).length === 0 && o.constructor === Object;
|
18
|
+
const isSSR = (config) => {
|
19
|
+
const { server } = config;
|
20
|
+
if (server == null ? void 0 : server.ssr) {
|
21
|
+
return true;
|
22
|
+
}
|
23
|
+
if ((server == null ? void 0 : server.ssrByEntries) && !isEmpty(server.ssrByEntries)) {
|
24
|
+
for (const name of Object.keys(server.ssrByEntries)) {
|
25
|
+
if (server.ssrByEntries[name]) {
|
26
|
+
return true;
|
27
|
+
}
|
28
|
+
}
|
29
|
+
}
|
30
|
+
return false;
|
31
|
+
};
|
32
|
+
const isUseSSRBundle = (config) => {
|
33
|
+
const { output } = config;
|
34
|
+
if (output == null ? void 0 : output.ssg) {
|
35
|
+
return true;
|
36
|
+
}
|
37
|
+
return isSSR(config);
|
38
|
+
};
|
39
|
+
const isServiceWorker = (config) => {
|
40
|
+
const { output, server } = config;
|
41
|
+
if ((server == null ? void 0 : server.worker) && ((output == null ? void 0 : output.ssg) || isSSR(config))) {
|
42
|
+
return true;
|
43
|
+
}
|
44
|
+
return false;
|
45
|
+
};
|
46
|
+
const isFastRefresh = () => isDev() && process.env.FAST_REFRESH !== "false";
|
47
|
+
const isRouterV5 = (config) => {
|
48
|
+
var _a, _b, _c;
|
49
|
+
return typeof ((_a = config.runtime) == null ? void 0 : _a.router) !== "boolean" && ((_c = (_b = config == null ? void 0 : config.runtime) == null ? void 0 : _b.router) == null ? void 0 : _c.mode) === "react-router-5";
|
50
|
+
};
|
51
|
+
const isSSGEntry = (config, entryName, entrypoints) => {
|
52
|
+
const ssgConfig = config.output.ssg;
|
53
|
+
const useSSG = isSingleEntry(entrypoints) ? Boolean(ssgConfig) : ssgConfig === true || typeof (ssgConfig == null ? void 0 : ssgConfig[0]) === "function" || Boolean(ssgConfig == null ? void 0 : ssgConfig[entryName]);
|
54
|
+
return useSSG;
|
55
|
+
};
|
56
|
+
const isSingleEntry = (entrypoints) => entrypoints.length === 1 && entrypoints[0].entryName === "main";
|
57
|
+
export * from "./nodeEnv";
|
58
|
+
export * from "./platform";
|
59
|
+
export * from "./type";
|
60
|
+
export {
|
61
|
+
isDepExists,
|
62
|
+
isEmpty,
|
63
|
+
isFastRefresh,
|
64
|
+
isRouterV5,
|
65
|
+
isSSGEntry,
|
66
|
+
isSSR,
|
67
|
+
isServiceWorker,
|
68
|
+
isSingleEntry,
|
69
|
+
isTypescript,
|
70
|
+
isUseSSRBundle
|
71
|
+
};
|
@@ -0,0 +1,12 @@
|
|
1
|
+
const getNodeEnv = () => process.env.NODE_ENV || "development";
|
2
|
+
const isDev = () => getNodeEnv() === "development";
|
3
|
+
const isProd = () => getNodeEnv() === "production";
|
4
|
+
const isTest = () => getNodeEnv() === "test";
|
5
|
+
const isProdProfile = () => isProd() && process.argv.includes("--profile");
|
6
|
+
export {
|
7
|
+
getNodeEnv,
|
8
|
+
isDev,
|
9
|
+
isProd,
|
10
|
+
isProdProfile,
|
11
|
+
isTest
|
12
|
+
};
|
@@ -0,0 +1,34 @@
|
|
1
|
+
function isString(str) {
|
2
|
+
return typeof str === "string";
|
3
|
+
}
|
4
|
+
function isUndefined(obj) {
|
5
|
+
return typeof obj === "undefined";
|
6
|
+
}
|
7
|
+
function isArray(obj) {
|
8
|
+
return Array.isArray(obj);
|
9
|
+
}
|
10
|
+
function isFunction(func) {
|
11
|
+
return typeof func === "function";
|
12
|
+
}
|
13
|
+
function isObject(obj) {
|
14
|
+
return obj !== null && typeof obj === "object";
|
15
|
+
}
|
16
|
+
function isPlainObject(obj) {
|
17
|
+
return isObject(obj) && Object.prototype.toString.call(obj) === "[object Object]";
|
18
|
+
}
|
19
|
+
function isPromise(obj) {
|
20
|
+
return Boolean(obj) && (typeof obj === "object" || typeof obj === "function") && typeof obj.then === "function";
|
21
|
+
}
|
22
|
+
function isRegExp(obj) {
|
23
|
+
return Object.prototype.toString.call(obj) === "[object RegExp]";
|
24
|
+
}
|
25
|
+
export {
|
26
|
+
isArray,
|
27
|
+
isFunction,
|
28
|
+
isObject,
|
29
|
+
isPlainObject,
|
30
|
+
isPromise,
|
31
|
+
isRegExp,
|
32
|
+
isString,
|
33
|
+
isUndefined
|
34
|
+
};
|
@@ -0,0 +1,100 @@
|
|
1
|
+
import chalk from "../compiled/chalk";
|
2
|
+
const LOG_LEVEL = {
|
3
|
+
error: 0,
|
4
|
+
warn: 1,
|
5
|
+
info: 2,
|
6
|
+
debug: 3,
|
7
|
+
log: 4
|
8
|
+
};
|
9
|
+
const LOG_TYPES = {
|
10
|
+
error: {
|
11
|
+
color: "red",
|
12
|
+
label: "error",
|
13
|
+
level: "error"
|
14
|
+
},
|
15
|
+
info: {
|
16
|
+
color: "cyan",
|
17
|
+
label: "info",
|
18
|
+
level: "info"
|
19
|
+
},
|
20
|
+
success: {
|
21
|
+
color: "green",
|
22
|
+
label: "Success",
|
23
|
+
level: "info"
|
24
|
+
},
|
25
|
+
warn: {
|
26
|
+
color: "yellow",
|
27
|
+
label: "warn",
|
28
|
+
level: "warn"
|
29
|
+
},
|
30
|
+
debug: {
|
31
|
+
color: "red",
|
32
|
+
label: "debug",
|
33
|
+
level: "debug"
|
34
|
+
},
|
35
|
+
log: { level: "log" }
|
36
|
+
};
|
37
|
+
const DEFAULT_CONFIG = {
|
38
|
+
displayLabel: true,
|
39
|
+
uppercaseLabel: false
|
40
|
+
};
|
41
|
+
class Logger {
|
42
|
+
constructor(options = {}) {
|
43
|
+
this.level = options.level || LOG_TYPES.log.level;
|
44
|
+
this.config = { ...DEFAULT_CONFIG, ...options.config || {} };
|
45
|
+
this.types = {
|
46
|
+
...LOG_TYPES,
|
47
|
+
...options.types || {}
|
48
|
+
};
|
49
|
+
this.longestLabel = this.getLongestLabel();
|
50
|
+
Object.keys(this.types).forEach((type) => {
|
51
|
+
this[type] = this._log.bind(this, type);
|
52
|
+
});
|
53
|
+
}
|
54
|
+
_log(type, message, ...args) {
|
55
|
+
if (message === void 0 || message === null) {
|
56
|
+
console.log();
|
57
|
+
return;
|
58
|
+
}
|
59
|
+
if (LOG_LEVEL[type] > LOG_LEVEL[this.level]) {
|
60
|
+
return;
|
61
|
+
}
|
62
|
+
let label = "";
|
63
|
+
let text = "";
|
64
|
+
const logType = this.types[type];
|
65
|
+
if (this.config.displayLabel && logType.label) {
|
66
|
+
label = this.config.uppercaseLabel ? logType.label.toUpperCase() : logType.label;
|
67
|
+
label = label.padEnd(this.longestLabel.length);
|
68
|
+
label = chalk.bold(logType.color ? chalk[logType.color](label) : label);
|
69
|
+
}
|
70
|
+
if (message instanceof Error) {
|
71
|
+
if (message.stack) {
|
72
|
+
const [name, ...rest] = message.stack.split("\n");
|
73
|
+
text = `${name}
|
74
|
+
${chalk.grey(rest.join("\n"))}`;
|
75
|
+
} else {
|
76
|
+
text = message.message;
|
77
|
+
}
|
78
|
+
} else {
|
79
|
+
text = `${message}`;
|
80
|
+
}
|
81
|
+
const log = label.length > 0 ? `${label} ${text}` : text;
|
82
|
+
console.log(log, ...args);
|
83
|
+
}
|
84
|
+
getLongestLabel() {
|
85
|
+
let longestLabel = "";
|
86
|
+
Object.keys(this.types).forEach((type) => {
|
87
|
+
const { label = "" } = this.types[type];
|
88
|
+
if (label.length > longestLabel.length) {
|
89
|
+
longestLabel = label;
|
90
|
+
}
|
91
|
+
});
|
92
|
+
return longestLabel;
|
93
|
+
}
|
94
|
+
}
|
95
|
+
const logger = new Logger();
|
96
|
+
logger.Logger = Logger;
|
97
|
+
export {
|
98
|
+
Logger,
|
99
|
+
logger
|
100
|
+
};
|
@@ -0,0 +1,87 @@
|
|
1
|
+
import fs from "fs";
|
2
|
+
import path from "path";
|
3
|
+
import { glob, yaml } from "./compiled";
|
4
|
+
const PACKAGE_MAX_DEPTH = 5;
|
5
|
+
const WORKSPACE_FILES = {
|
6
|
+
YARN: "package.json",
|
7
|
+
PNPM: "pnpm-workspace.yaml",
|
8
|
+
LERNA: "lerna.json"
|
9
|
+
};
|
10
|
+
const isLerna = (root) => fs.existsSync(path.join(root, WORKSPACE_FILES.LERNA));
|
11
|
+
const isYarnWorkspaces = (root) => {
|
12
|
+
var _a;
|
13
|
+
const pkg = path.join(root, WORKSPACE_FILES.YARN);
|
14
|
+
if (!fs.existsSync(pkg)) {
|
15
|
+
return false;
|
16
|
+
}
|
17
|
+
const json = JSON.parse(fs.readFileSync(pkg, "utf8"));
|
18
|
+
return Boolean((_a = json.workspaces) == null ? void 0 : _a.packages);
|
19
|
+
};
|
20
|
+
const isPnpmWorkspaces = (root) => fs.existsSync(path.join(root, WORKSPACE_FILES.PNPM));
|
21
|
+
const isMonorepo = (root) => isLerna(root) || isYarnWorkspaces(root) || isPnpmWorkspaces(root);
|
22
|
+
const isModernjsMonorepo = (root) => {
|
23
|
+
const pkgJsonPath = path.join(root, "package.json");
|
24
|
+
if (!fs.existsSync(pkgJsonPath)) {
|
25
|
+
return false;
|
26
|
+
}
|
27
|
+
const json = JSON.parse(fs.readFileSync(pkgJsonPath, "utf8"));
|
28
|
+
const deps = {
|
29
|
+
...json.dependencies || {},
|
30
|
+
...json.devDependencies || {}
|
31
|
+
};
|
32
|
+
return Boolean(deps["@modern-js/monorepo-tools"]);
|
33
|
+
};
|
34
|
+
const findMonorepoRoot = (appDirectory, maxDepth = PACKAGE_MAX_DEPTH) => {
|
35
|
+
let inMonorepo = false;
|
36
|
+
for (let depth = 0; depth < maxDepth; depth++) {
|
37
|
+
if (isMonorepo(appDirectory)) {
|
38
|
+
inMonorepo = true;
|
39
|
+
break;
|
40
|
+
}
|
41
|
+
appDirectory = path.dirname(appDirectory);
|
42
|
+
}
|
43
|
+
return inMonorepo ? appDirectory : void 0;
|
44
|
+
};
|
45
|
+
const getMonorepoPackages = (root) => {
|
46
|
+
let packages = [];
|
47
|
+
if (isYarnWorkspaces(root)) {
|
48
|
+
const json = JSON.parse(
|
49
|
+
fs.readFileSync(path.join(root, "package.json"), "utf8")
|
50
|
+
);
|
51
|
+
({ packages } = json.workspaces);
|
52
|
+
} else if (isLerna(root)) {
|
53
|
+
const json = JSON.parse(
|
54
|
+
fs.readFileSync(path.resolve(root, "lerna.json"), "utf8")
|
55
|
+
);
|
56
|
+
({ packages } = json);
|
57
|
+
} else {
|
58
|
+
({ packages } = yaml.load(
|
59
|
+
fs.readFileSync(path.join(root, WORKSPACE_FILES.PNPM), "utf8")
|
60
|
+
));
|
61
|
+
}
|
62
|
+
if (packages) {
|
63
|
+
return packages.map(
|
64
|
+
(name) => (
|
65
|
+
// The trailing / ensures only dirs are picked up
|
66
|
+
glob.sync(path.join(root, `${name}/`), {
|
67
|
+
ignore: ["**/node_modules/**"]
|
68
|
+
})
|
69
|
+
)
|
70
|
+
).reduce((acc, val) => acc.concat(val), []).filter((filepath) => fs.existsSync(path.resolve(filepath, "package.json"))).map((filepath) => ({
|
71
|
+
path: filepath,
|
72
|
+
name: JSON.parse(
|
73
|
+
fs.readFileSync(path.resolve(filepath, "package.json"), "utf8")
|
74
|
+
).name
|
75
|
+
}));
|
76
|
+
}
|
77
|
+
return [];
|
78
|
+
};
|
79
|
+
export {
|
80
|
+
findMonorepoRoot,
|
81
|
+
getMonorepoPackages,
|
82
|
+
isLerna,
|
83
|
+
isModernjsMonorepo,
|
84
|
+
isMonorepo,
|
85
|
+
isPnpmWorkspaces,
|
86
|
+
isYarnWorkspaces
|
87
|
+
};
|
@@ -0,0 +1,30 @@
|
|
1
|
+
import { execa } from "./compiled";
|
2
|
+
async function canUseNpm() {
|
3
|
+
try {
|
4
|
+
await execa("npm", ["--version"], { env: process.env });
|
5
|
+
return true;
|
6
|
+
} catch (e) {
|
7
|
+
return false;
|
8
|
+
}
|
9
|
+
}
|
10
|
+
async function canUseYarn() {
|
11
|
+
try {
|
12
|
+
await execa("yarn", ["--version"], { env: process.env });
|
13
|
+
return true;
|
14
|
+
} catch (e) {
|
15
|
+
return false;
|
16
|
+
}
|
17
|
+
}
|
18
|
+
async function canUsePnpm() {
|
19
|
+
try {
|
20
|
+
await execa("pnpm", ["--version"], { env: process.env });
|
21
|
+
return true;
|
22
|
+
} catch (e) {
|
23
|
+
return false;
|
24
|
+
}
|
25
|
+
}
|
26
|
+
export {
|
27
|
+
canUseNpm,
|
28
|
+
canUsePnpm,
|
29
|
+
canUseYarn
|
30
|
+
};
|
@@ -0,0 +1,50 @@
|
|
1
|
+
import path from "path";
|
2
|
+
import os from "os";
|
3
|
+
import fs from "fs";
|
4
|
+
import { nanoid, upath, lodash as _ } from "./compiled";
|
5
|
+
const isPathString = (test) => path.posix.basename(test) !== test || path.win32.basename(test) !== test;
|
6
|
+
const isRelativePath = (test) => /^\.\.?($|[\\/])/.test(test);
|
7
|
+
const normalizeOutputPath = (s) => s.replace(/\\/g, "\\\\");
|
8
|
+
const normalizeToPosixPath = (p) => upath.normalizeSafe(path.normalize(p || "")).replace(/^([a-zA-Z]+):/, (_2, m) => `/${m.toLowerCase()}`);
|
9
|
+
const getTemplatePath = (prefix) => {
|
10
|
+
const tmpRoot = fs.realpathSync(os.tmpdir());
|
11
|
+
const parts = [tmpRoot];
|
12
|
+
prefix && parts.push(prefix);
|
13
|
+
parts.push(nanoid());
|
14
|
+
return path.resolve(...parts);
|
15
|
+
};
|
16
|
+
function compilePathMatcherRegExp(match) {
|
17
|
+
if (typeof match !== "string") {
|
18
|
+
return match;
|
19
|
+
}
|
20
|
+
const escaped = _.escapeRegExp(match);
|
21
|
+
return new RegExp(`(?<=\\W|^)${escaped}(?=\\W|$)`);
|
22
|
+
}
|
23
|
+
const _joinPathParts = (_part, i, parts) => _(parts).filter((part) => !["/", "\\"].includes(part)).tap((parts2) => parts2.unshift("")).slice(0, i + 2).join("/");
|
24
|
+
function upwardPaths(start) {
|
25
|
+
return _(start).split(/[/\\]/).filter(Boolean).map(_joinPathParts).reverse().push("/").value();
|
26
|
+
}
|
27
|
+
function getRealTemporaryDirectory() {
|
28
|
+
let ret = null;
|
29
|
+
try {
|
30
|
+
ret = os.tmpdir();
|
31
|
+
ret = fs.realpathSync(ret);
|
32
|
+
} catch {
|
33
|
+
}
|
34
|
+
return ret;
|
35
|
+
}
|
36
|
+
function splitPathString(str) {
|
37
|
+
return str.split(/[\\/]/);
|
38
|
+
}
|
39
|
+
export {
|
40
|
+
_joinPathParts,
|
41
|
+
compilePathMatcherRegExp,
|
42
|
+
getRealTemporaryDirectory,
|
43
|
+
getTemplatePath,
|
44
|
+
isPathString,
|
45
|
+
isRelativePath,
|
46
|
+
normalizeOutputPath,
|
47
|
+
normalizeToPosixPath,
|
48
|
+
splitPathString,
|
49
|
+
upwardPaths
|
50
|
+
};
|
@@ -0,0 +1,46 @@
|
|
1
|
+
import os from "os";
|
2
|
+
import _ from "../compiled/lodash";
|
3
|
+
import {
|
4
|
+
compilePathMatcherRegExp,
|
5
|
+
normalizeToPosixPath,
|
6
|
+
getRealTemporaryDirectory,
|
7
|
+
splitPathString,
|
8
|
+
upwardPaths
|
9
|
+
} from "./path";
|
10
|
+
const matchUpwardPathsAsUnknown = (p) => _(upwardPaths(normalizeToPosixPath(p))).map((match) => ({ match, mark: "unknown" })).slice(1, -1).value();
|
11
|
+
function applyPathMatcher(matcher, str, options = {}) {
|
12
|
+
const regex = compilePathMatcherRegExp(matcher.match);
|
13
|
+
const replacer = (substring, ...args) => {
|
14
|
+
if (options.minPartials && splitPathString(substring).length < options.minPartials) {
|
15
|
+
return substring;
|
16
|
+
}
|
17
|
+
const ret = typeof matcher.mark === "string" ? matcher.mark : matcher.mark(substring, ...args);
|
18
|
+
return `<${_.snakeCase(ret).toUpperCase()}>`;
|
19
|
+
};
|
20
|
+
return str.replace(regex, replacer);
|
21
|
+
}
|
22
|
+
function applyMatcherReplacement(matchers, str, options = {}) {
|
23
|
+
return matchers.reduce((ret, matcher) => {
|
24
|
+
return applyPathMatcher(matcher, ret, options);
|
25
|
+
}, str);
|
26
|
+
}
|
27
|
+
const createDefaultPathMatchers = (root) => {
|
28
|
+
const ret = [
|
29
|
+
{
|
30
|
+
match: /(?<=\/)(\.pnpm\/.+?\/node_modules)(?=\/)/,
|
31
|
+
mark: "pnpmInner"
|
32
|
+
}
|
33
|
+
];
|
34
|
+
const tmpdir = getRealTemporaryDirectory();
|
35
|
+
tmpdir && ret.push({ match: tmpdir, mark: "temp" });
|
36
|
+
ret.push({ match: os.tmpdir(), mark: "temp" });
|
37
|
+
ret.push({ match: os.homedir(), mark: "home" });
|
38
|
+
ret.push(...matchUpwardPathsAsUnknown(root));
|
39
|
+
return ret;
|
40
|
+
};
|
41
|
+
export {
|
42
|
+
applyMatcherReplacement,
|
43
|
+
applyPathMatcher,
|
44
|
+
createDefaultPathMatchers,
|
45
|
+
matchUpwardPathsAsUnknown
|
46
|
+
};
|
@@ -0,0 +1,23 @@
|
|
1
|
+
import { INTERNAL_CLI_PLUGINS } from "./constants";
|
2
|
+
import { isDepExists } from "./is";
|
3
|
+
function getInternalPlugins(appDirectory, internalPlugins = INTERNAL_CLI_PLUGINS) {
|
4
|
+
return [
|
5
|
+
...Object.keys(internalPlugins).filter((name) => {
|
6
|
+
const config = internalPlugins[name];
|
7
|
+
if (typeof config !== "string" && config.forced === true) {
|
8
|
+
return true;
|
9
|
+
}
|
10
|
+
return isDepExists(appDirectory, name);
|
11
|
+
}).map((name) => {
|
12
|
+
const config = internalPlugins[name];
|
13
|
+
if (typeof config !== "string") {
|
14
|
+
return config.path;
|
15
|
+
} else {
|
16
|
+
return config;
|
17
|
+
}
|
18
|
+
})
|
19
|
+
];
|
20
|
+
}
|
21
|
+
export {
|
22
|
+
getInternalPlugins
|
23
|
+
};
|