@modern-js/utils 2.12.0 → 2.12.1-alpha.0

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 (228) hide show
  1. package/dist/{alias.js → cjs/alias.js} +4 -15
  2. package/dist/{analyzeProject.js → cjs/analyzeProject.js} +5 -25
  3. package/dist/{babel.js → cjs/babel.js} +9 -16
  4. package/dist/{compatRequire.js → cjs/compatRequire.js} +4 -17
  5. package/dist/cjs/emptyDir.js +32 -0
  6. package/dist/{getEntryOptions.js → cjs/getEntryOptions.js} +1 -15
  7. package/dist/{getPackageManager.js → cjs/getPackageManager.js} +19 -41
  8. package/dist/{getPort.js → cjs/getPort.js} +4 -24
  9. package/dist/{getServerConfig.js → cjs/getServerConfig.js} +2 -22
  10. package/dist/{logger.js → cjs/logger.js} +5 -16
  11. package/dist/{monorepo.js → cjs/monorepo.js} +4 -15
  12. package/dist/cjs/nodeEnv.js +55 -0
  13. package/dist/{path.js → cjs/path.js} +1 -1
  14. package/dist/{pathSerializer.js → cjs/pathSerializer.js} +1 -1
  15. package/dist/{react.js → cjs/react.js} +4 -15
  16. package/dist/{runtimeExports.js → cjs/runtimeExports.js} +1 -1
  17. package/dist/{universal → cjs/universal}/nestedRoutes.js +2 -19
  18. package/dist/cjs/version.js +59 -0
  19. package/dist/{watch.js → cjs/watch.js} +9 -29
  20. package/dist/esm/FileSizeReporter.js +180 -0
  21. package/dist/esm/alias.js +83 -0
  22. package/dist/esm/analyzeProject.js +168 -0
  23. package/dist/esm/applyOptionsChain.js +26 -0
  24. package/dist/esm/babel.js +169 -0
  25. package/dist/esm/chainId.js +92 -0
  26. package/dist/esm/clearConsole.js +6 -0
  27. package/dist/esm/commands.js +17 -0
  28. package/dist/esm/compatRequire.js +68 -0
  29. package/dist/esm/compiled.js +34 -0
  30. package/dist/esm/constants.js +317 -0
  31. package/dist/esm/debug.js +5 -0
  32. package/dist/esm/emptyDir.js +158 -0
  33. package/dist/esm/ensureAbsolutePath.js +5 -0
  34. package/dist/esm/ensureArray.js +9 -0
  35. package/dist/esm/findExists.js +27 -0
  36. package/dist/esm/generateMetaTags.js +40 -0
  37. package/dist/esm/getBrowserslist.js +12 -0
  38. package/dist/esm/getCoreJsVersion.js +57 -0
  39. package/dist/esm/getEntryOptions.js +45 -0
  40. package/dist/esm/getPackageManager.js +187 -0
  41. package/dist/esm/getPort.js +215 -0
  42. package/dist/esm/getServerConfig.js +145 -0
  43. package/dist/esm/getTargetDir.js +6 -0
  44. package/dist/esm/import.js +8 -0
  45. package/dist/esm/index.js +44 -0
  46. package/dist/esm/is/index.js +85 -0
  47. package/dist/esm/is/nodeEnv.js +16 -0
  48. package/dist/esm/is/platform.js +7 -0
  49. package/dist/esm/is/type.js +25 -0
  50. package/dist/esm/logger.js +207 -0
  51. package/dist/esm/monorepo.js +109 -0
  52. package/dist/esm/nodeEnv.js +258 -0
  53. package/dist/esm/path.js +85 -0
  54. package/dist/esm/pathSerializer.js +85 -0
  55. package/dist/esm/plugin.js +45 -0
  56. package/dist/esm/prettyInstructions.js +96 -0
  57. package/dist/esm/printBuildError.js +24 -0
  58. package/dist/esm/react.js +43 -0
  59. package/dist/esm/readTsConfig.js +10 -0
  60. package/dist/esm/removeSlash.js +10 -0
  61. package/dist/esm/resolve.js +42 -0
  62. package/dist/esm/routes.js +19 -0
  63. package/dist/esm/runtimeExports.js +65 -0
  64. package/dist/esm/ssr.js +3 -0
  65. package/dist/esm/storage.js +36 -0
  66. package/dist/esm/testUtils.js +13 -0
  67. package/dist/esm/types.js +1 -0
  68. package/dist/esm/universal/constants.js +3 -0
  69. package/dist/esm/universal/formatWebpack.js +108 -0
  70. package/dist/esm/universal/nestedRoutes.js +174 -0
  71. package/dist/esm/universal/remixRouter.js +1 -0
  72. package/dist/esm/universal/serialize.js +7 -0
  73. package/dist/esm/version.js +193 -0
  74. package/dist/esm/wait.js +7 -0
  75. package/dist/esm/watch.js +230 -0
  76. package/dist/esm-node/FileSizeReporter.js +133 -0
  77. package/dist/esm-node/alias.js +61 -0
  78. package/dist/esm-node/analyzeProject.js +17 -0
  79. package/dist/esm-node/applyOptionsChain.js +35 -0
  80. package/dist/esm-node/babel.js +105 -0
  81. package/dist/esm-node/chainId.js +173 -0
  82. package/dist/esm-node/clearConsole.js +8 -0
  83. package/dist/esm-node/commands.js +22 -0
  84. package/dist/esm-node/compatRequire.js +42 -0
  85. package/dist/esm-node/compiled.js +77 -0
  86. package/dist/esm-node/constants.js +264 -0
  87. package/dist/esm-node/debug.js +5 -0
  88. package/dist/esm-node/emptyDir.js +9 -0
  89. package/dist/esm-node/ensureAbsolutePath.js +5 -0
  90. package/dist/esm-node/ensureArray.js +9 -0
  91. package/dist/esm-node/findExists.js +12 -0
  92. package/dist/esm-node/generateMetaTags.js +38 -0
  93. package/dist/esm-node/getBrowserslist.js +7 -0
  94. package/dist/esm-node/getCoreJsVersion.js +13 -0
  95. package/dist/esm-node/getEntryOptions.js +17 -0
  96. package/dist/esm-node/getPackageManager.js +32 -0
  97. package/dist/esm-node/getPort.js +59 -0
  98. package/dist/esm-node/getServerConfig.js +14 -0
  99. package/dist/esm-node/getTargetDir.js +8 -0
  100. package/dist/esm-node/import.js +9 -0
  101. package/dist/esm-node/index.js +44 -0
  102. package/dist/esm-node/is/index.js +71 -0
  103. package/dist/esm-node/is/nodeEnv.js +12 -0
  104. package/dist/esm-node/is/platform.js +6 -0
  105. package/dist/esm-node/is/type.js +34 -0
  106. package/dist/esm-node/logger.js +100 -0
  107. package/dist/esm-node/monorepo.js +87 -0
  108. package/dist/esm-node/nodeEnv.js +30 -0
  109. package/dist/esm-node/path.js +50 -0
  110. package/dist/esm-node/pathSerializer.js +46 -0
  111. package/dist/esm-node/plugin.js +23 -0
  112. package/dist/esm-node/prettyInstructions.js +77 -0
  113. package/dist/esm-node/printBuildError.js +34 -0
  114. package/dist/esm-node/react.js +20 -0
  115. package/dist/esm-node/readTsConfig.js +13 -0
  116. package/dist/esm-node/removeSlash.js +8 -0
  117. package/dist/esm-node/resolve.js +38 -0
  118. package/dist/esm-node/routes.js +24 -0
  119. package/dist/esm-node/runtimeExports.js +40 -0
  120. package/dist/esm-node/ssr.js +6 -0
  121. package/dist/esm-node/storage.js +42 -0
  122. package/dist/esm-node/testUtils.js +15 -0
  123. package/dist/esm-node/types.js +0 -0
  124. package/dist/esm-node/universal/constants.js +6 -0
  125. package/dist/esm-node/universal/formatWebpack.js +77 -0
  126. package/dist/esm-node/universal/nestedRoutes.js +93 -0
  127. package/dist/esm-node/universal/remixRouter.js +1 -0
  128. package/dist/esm-node/universal/serialize.js +7 -0
  129. package/dist/esm-node/version.js +25 -0
  130. package/dist/esm-node/wait.js +6 -0
  131. package/dist/esm-node/watch.js +36 -0
  132. package/package.json +2 -2
  133. package/dist/emptyDir.js +0 -52
  134. package/dist/nodeEnv.js +0 -81
  135. package/dist/version.js +0 -92
  136. /package/dist/{FileSizeReporter.js → cjs/FileSizeReporter.js} +0 -0
  137. /package/dist/{applyOptionsChain.js → cjs/applyOptionsChain.js} +0 -0
  138. /package/dist/{chainId.js → cjs/chainId.js} +0 -0
  139. /package/dist/{clearConsole.js → cjs/clearConsole.js} +0 -0
  140. /package/dist/{commands.js → cjs/commands.js} +0 -0
  141. /package/dist/{compiled.js → cjs/compiled.js} +0 -0
  142. /package/dist/{constants.js → cjs/constants.js} +0 -0
  143. /package/dist/{debug.js → cjs/debug.js} +0 -0
  144. /package/dist/{ensureAbsolutePath.js → cjs/ensureAbsolutePath.js} +0 -0
  145. /package/dist/{ensureArray.js → cjs/ensureArray.js} +0 -0
  146. /package/dist/{findExists.js → cjs/findExists.js} +0 -0
  147. /package/dist/{generateMetaTags.js → cjs/generateMetaTags.js} +0 -0
  148. /package/dist/{getBrowserslist.js → cjs/getBrowserslist.js} +0 -0
  149. /package/dist/{getCoreJsVersion.js → cjs/getCoreJsVersion.js} +0 -0
  150. /package/dist/{getTargetDir.js → cjs/getTargetDir.js} +0 -0
  151. /package/dist/{import.js → cjs/import.js} +0 -0
  152. /package/dist/{index.js → cjs/index.js} +0 -0
  153. /package/dist/{is → cjs/is}/index.js +0 -0
  154. /package/dist/{is → cjs/is}/nodeEnv.js +0 -0
  155. /package/dist/{is → cjs/is}/platform.js +0 -0
  156. /package/dist/{is → cjs/is}/type.js +0 -0
  157. /package/dist/{plugin.js → cjs/plugin.js} +0 -0
  158. /package/dist/{prettyInstructions.js → cjs/prettyInstructions.js} +0 -0
  159. /package/dist/{printBuildError.js → cjs/printBuildError.js} +0 -0
  160. /package/dist/{readTsConfig.js → cjs/readTsConfig.js} +0 -0
  161. /package/dist/{removeSlash.js → cjs/removeSlash.js} +0 -0
  162. /package/dist/{resolve.js → cjs/resolve.js} +0 -0
  163. /package/dist/{routes.js → cjs/routes.js} +0 -0
  164. /package/dist/{ssr.js → cjs/ssr.js} +0 -0
  165. /package/dist/{storage.js → cjs/storage.js} +0 -0
  166. /package/dist/{testUtils.js → cjs/testUtils.js} +0 -0
  167. /package/dist/{types.js → cjs/types.js} +0 -0
  168. /package/dist/{universal → cjs/universal}/constants.js +0 -0
  169. /package/dist/{universal → cjs/universal}/formatWebpack.js +0 -0
  170. /package/dist/{universal → cjs/universal}/remixRouter.js +0 -0
  171. /package/dist/{universal → cjs/universal}/serialize.js +0 -0
  172. /package/dist/{wait.js → cjs/wait.js} +0 -0
  173. /package/dist/{FileSizeReporter.d.ts → types/FileSizeReporter.d.ts} +0 -0
  174. /package/dist/{alias.d.ts → types/alias.d.ts} +0 -0
  175. /package/dist/{analyzeProject.d.ts → types/analyzeProject.d.ts} +0 -0
  176. /package/dist/{applyOptionsChain.d.ts → types/applyOptionsChain.d.ts} +0 -0
  177. /package/dist/{babel.d.ts → types/babel.d.ts} +0 -0
  178. /package/dist/{chainId.d.ts → types/chainId.d.ts} +0 -0
  179. /package/dist/{clearConsole.d.ts → types/clearConsole.d.ts} +0 -0
  180. /package/dist/{commands.d.ts → types/commands.d.ts} +0 -0
  181. /package/dist/{compatRequire.d.ts → types/compatRequire.d.ts} +0 -0
  182. /package/dist/{compiled.d.ts → types/compiled.d.ts} +0 -0
  183. /package/dist/{constants.d.ts → types/constants.d.ts} +0 -0
  184. /package/dist/{debug.d.ts → types/debug.d.ts} +0 -0
  185. /package/dist/{emptyDir.d.ts → types/emptyDir.d.ts} +0 -0
  186. /package/dist/{ensureAbsolutePath.d.ts → types/ensureAbsolutePath.d.ts} +0 -0
  187. /package/dist/{ensureArray.d.ts → types/ensureArray.d.ts} +0 -0
  188. /package/dist/{findExists.d.ts → types/findExists.d.ts} +0 -0
  189. /package/dist/{generateMetaTags.d.ts → types/generateMetaTags.d.ts} +0 -0
  190. /package/dist/{getBrowserslist.d.ts → types/getBrowserslist.d.ts} +0 -0
  191. /package/dist/{getCoreJsVersion.d.ts → types/getCoreJsVersion.d.ts} +0 -0
  192. /package/dist/{getEntryOptions.d.ts → types/getEntryOptions.d.ts} +0 -0
  193. /package/dist/{getPackageManager.d.ts → types/getPackageManager.d.ts} +0 -0
  194. /package/dist/{getPort.d.ts → types/getPort.d.ts} +0 -0
  195. /package/dist/{getServerConfig.d.ts → types/getServerConfig.d.ts} +0 -0
  196. /package/dist/{getTargetDir.d.ts → types/getTargetDir.d.ts} +0 -0
  197. /package/dist/{import.d.ts → types/import.d.ts} +0 -0
  198. /package/dist/{index.d.ts → types/index.d.ts} +0 -0
  199. /package/dist/{is → types/is}/index.d.ts +0 -0
  200. /package/dist/{is → types/is}/nodeEnv.d.ts +0 -0
  201. /package/dist/{is → types/is}/platform.d.ts +0 -0
  202. /package/dist/{is → types/is}/type.d.ts +0 -0
  203. /package/dist/{logger.d.ts → types/logger.d.ts} +0 -0
  204. /package/dist/{monorepo.d.ts → types/monorepo.d.ts} +0 -0
  205. /package/dist/{nodeEnv.d.ts → types/nodeEnv.d.ts} +0 -0
  206. /package/dist/{path.d.ts → types/path.d.ts} +0 -0
  207. /package/dist/{pathSerializer.d.ts → types/pathSerializer.d.ts} +0 -0
  208. /package/dist/{plugin.d.ts → types/plugin.d.ts} +0 -0
  209. /package/dist/{prettyInstructions.d.ts → types/prettyInstructions.d.ts} +0 -0
  210. /package/dist/{printBuildError.d.ts → types/printBuildError.d.ts} +0 -0
  211. /package/dist/{react.d.ts → types/react.d.ts} +0 -0
  212. /package/dist/{readTsConfig.d.ts → types/readTsConfig.d.ts} +0 -0
  213. /package/dist/{removeSlash.d.ts → types/removeSlash.d.ts} +0 -0
  214. /package/dist/{resolve.d.ts → types/resolve.d.ts} +0 -0
  215. /package/dist/{routes.d.ts → types/routes.d.ts} +0 -0
  216. /package/dist/{runtimeExports.d.ts → types/runtimeExports.d.ts} +0 -0
  217. /package/dist/{ssr.d.ts → types/ssr.d.ts} +0 -0
  218. /package/dist/{storage.d.ts → types/storage.d.ts} +0 -0
  219. /package/dist/{testUtils.d.ts → types/testUtils.d.ts} +0 -0
  220. /package/dist/{types.d.ts → types/types.d.ts} +0 -0
  221. /package/dist/{universal → types/universal}/constants.d.ts +0 -0
  222. /package/dist/{universal → types/universal}/formatWebpack.d.ts +0 -0
  223. /package/dist/{universal → types/universal}/nestedRoutes.d.ts +0 -0
  224. /package/dist/{universal → types/universal}/remixRouter.d.ts +0 -0
  225. /package/dist/{universal → types/universal}/serialize.d.ts +0 -0
  226. /package/dist/{version.d.ts → types/version.d.ts} +0 -0
  227. /package/dist/{wait.d.ts → types/wait.d.ts} +0 -0
  228. /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,8 @@
1
+ import * as path from "path";
2
+ const getTargetDir = (from, baseDir, targetBaseDir) => {
3
+ const relativePath = path.relative(baseDir, from);
4
+ return path.resolve(targetBaseDir, relativePath);
5
+ };
6
+ export {
7
+ getTargetDir
8
+ };
@@ -0,0 +1,9 @@
1
+ const lazy = (moduleName, requireFn) => {
2
+ const importLazyLocal = require("../compiled/import-lazy")(requireFn);
3
+ return importLazyLocal(moduleName);
4
+ };
5
+ const Import = { lazy };
6
+ export {
7
+ Import,
8
+ lazy as lazyImport
9
+ };
@@ -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,6 @@
1
+ const isNodeJS = () => typeof process !== "undefined" && process.versions != null && process.versions.node != null && process.versions.electron == null;
2
+ const isBrowser = () => typeof window !== "undefined";
3
+ export {
4
+ isBrowser,
5
+ isNodeJS
6
+ };
@@ -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
+ };