@modern-js/utils 2.27.0 → 2.29.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 (54) hide show
  1. package/CHANGELOG.md +32 -0
  2. package/dist/cjs/cli/alias.js +3 -3
  3. package/dist/cjs/cli/constants/chainId.js +10 -0
  4. package/dist/cjs/cli/constants/index.js +1 -2
  5. package/dist/cjs/cli/index.js +0 -1
  6. package/dist/cjs/cli/is/config.js +13 -9
  7. package/dist/cjs/cli/logger.js +9 -0
  8. package/dist/cjs/cli/path.js +0 -23
  9. package/dist/cjs/cli/prettyInstructions.js +6 -5
  10. package/dist/cjs/cli/require.js +2 -1
  11. package/dist/cjs/runtime/nestedRoutes.js +9 -5
  12. package/dist/cjs/runtime-browser/parsed.js +2 -1
  13. package/dist/cjs/universal/formatWebpack.js +55 -8
  14. package/dist/cjs/universal/time.js +38 -0
  15. package/dist/esm/cli/alias.js +3 -3
  16. package/dist/esm/cli/constants/chainId.js +10 -0
  17. package/dist/esm/cli/constants/index.js +1 -2
  18. package/dist/esm/cli/get/data.js +12 -3
  19. package/dist/esm/cli/index.js +0 -1
  20. package/dist/esm/cli/is/config.js +14 -9
  21. package/dist/esm/cli/logger.js +10 -0
  22. package/dist/esm/cli/path.js +2 -22
  23. package/dist/esm/cli/prettyInstructions.js +6 -5
  24. package/dist/esm/cli/require.js +2 -1
  25. package/dist/esm/runtime/nestedRoutes.js +9 -5
  26. package/dist/esm/runtime-browser/parsed.js +2 -1
  27. package/dist/esm/universal/formatWebpack.js +36 -4
  28. package/dist/esm/universal/time.js +29 -0
  29. package/dist/esm-node/cli/alias.js +3 -3
  30. package/dist/esm-node/cli/constants/chainId.js +10 -0
  31. package/dist/esm-node/cli/constants/index.js +1 -2
  32. package/dist/esm-node/cli/index.js +0 -1
  33. package/dist/esm-node/cli/is/config.js +13 -9
  34. package/dist/esm-node/cli/logger.js +6 -0
  35. package/dist/esm-node/cli/path.js +2 -16
  36. package/dist/esm-node/cli/prettyInstructions.js +6 -5
  37. package/dist/esm-node/cli/require.js +2 -1
  38. package/dist/esm-node/runtime/nestedRoutes.js +9 -5
  39. package/dist/esm-node/runtime-browser/parsed.js +2 -1
  40. package/dist/esm-node/universal/formatWebpack.js +43 -5
  41. package/dist/esm-node/universal/time.js +28 -0
  42. package/dist/types/cli/constants/chainId.d.ts +10 -0
  43. package/dist/types/cli/constants/index.d.ts +1 -1
  44. package/dist/types/cli/index.d.ts +0 -1
  45. package/dist/types/cli/is/config.d.ts +1 -1
  46. package/dist/types/cli/logger.d.ts +1 -0
  47. package/dist/types/cli/path.d.ts +0 -9
  48. package/dist/types/universal/formatWebpack.d.ts +14 -1
  49. package/dist/types/universal/time.d.ts +1 -0
  50. package/package.json +12 -4
  51. package/dist/cjs/cli/pathSerializer.js +0 -72
  52. package/dist/esm/cli/pathSerializer.js +0 -60
  53. package/dist/esm-node/cli/pathSerializer.js +0 -46
  54. package/dist/types/cli/pathSerializer.d.ts +0 -16
@@ -1,10 +1,12 @@
1
+ import { MAIN_ENTRY_NAME } from "../constants";
1
2
  import { isEmpty } from "./type";
2
3
  export var isSSR = function(config) {
4
+ var _server, _server1;
3
5
  var server = config.server;
4
- if (server === null || server === void 0 ? void 0 : server.ssr) {
6
+ if ((_server = server) === null || _server === void 0 ? void 0 : _server.ssr) {
5
7
  return true;
6
8
  }
7
- if ((server === null || server === void 0 ? void 0 : server.ssrByEntries) && !isEmpty(server.ssrByEntries)) {
9
+ if (((_server1 = server) === null || _server1 === void 0 ? void 0 : _server1.ssrByEntries) && !isEmpty(server.ssrByEntries)) {
8
10
  var _iteratorNormalCompletion = true, _didIteratorError = false, _iteratorError = void 0;
9
11
  try {
10
12
  for (var _iterator = Object.keys(server.ssrByEntries)[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true) {
@@ -31,29 +33,32 @@ export var isSSR = function(config) {
31
33
  return false;
32
34
  };
33
35
  export var isUseSSRBundle = function(config) {
36
+ var _output;
34
37
  var output = config.output;
35
- if (output === null || output === void 0 ? void 0 : output.ssg) {
38
+ if ((_output = output) === null || _output === void 0 ? void 0 : _output.ssg) {
36
39
  return true;
37
40
  }
38
41
  return isSSR(config);
39
42
  };
40
43
  export var isServiceWorker = function(config) {
41
- var _deploy_worker;
44
+ var _deploy_worker, _deploy, _output;
42
45
  var output = config.output, deploy = config.deploy;
43
- if ((deploy === null || deploy === void 0 ? void 0 : (_deploy_worker = deploy.worker) === null || _deploy_worker === void 0 ? void 0 : _deploy_worker.ssr) && ((output === null || output === void 0 ? void 0 : output.ssg) || isSSR(config))) {
46
+ if (((_deploy = deploy) === null || _deploy === void 0 ? void 0 : (_deploy_worker = _deploy.worker) === null || _deploy_worker === void 0 ? void 0 : _deploy_worker.ssr) && (((_output = output) === null || _output === void 0 ? void 0 : _output.ssg) || isSSR(config))) {
44
47
  return true;
45
48
  }
46
49
  return false;
47
50
  };
48
51
  export var isRouterV5 = function(config) {
49
- var _config_runtime, _config_runtime1, _config_runtime_router;
50
- return typeof ((_config_runtime = config.runtime) === null || _config_runtime === void 0 ? void 0 : _config_runtime.router) !== "boolean" && (config === null || config === void 0 ? void 0 : (_config_runtime1 = config.runtime) === null || _config_runtime1 === void 0 ? void 0 : (_config_runtime_router = _config_runtime1.router) === null || _config_runtime_router === void 0 ? void 0 : _config_runtime_router.mode) === "react-router-5";
52
+ var _config_runtime, _config_runtime_router, _config_runtime1, _config;
53
+ return typeof ((_config_runtime = config.runtime) === null || _config_runtime === void 0 ? void 0 : _config_runtime.router) !== "boolean" && ((_config = config) === null || _config === void 0 ? void 0 : (_config_runtime1 = _config.runtime) === null || _config_runtime1 === void 0 ? void 0 : (_config_runtime_router = _config_runtime1.router) === null || _config_runtime_router === void 0 ? void 0 : _config_runtime_router.mode) === "react-router-5";
51
54
  };
52
55
  export var isSSGEntry = function(config, entryName, entrypoints) {
56
+ var _config_source, _ssgConfig, _ssgConfig1;
53
57
  var ssgConfig = config.output.ssg;
54
- var useSSG = isSingleEntry(entrypoints) ? Boolean(ssgConfig) : ssgConfig === true || typeof (ssgConfig === null || ssgConfig === void 0 ? void 0 : ssgConfig[0]) === "function" || Boolean(ssgConfig === null || ssgConfig === void 0 ? void 0 : ssgConfig[entryName]);
58
+ var useSSG = isSingleEntry(entrypoints, (_config_source = config.source) === null || _config_source === void 0 ? void 0 : _config_source.mainEntryName) ? Boolean(ssgConfig) : ssgConfig === true || typeof ((_ssgConfig = ssgConfig) === null || _ssgConfig === void 0 ? void 0 : _ssgConfig[0]) === "function" || Boolean((_ssgConfig1 = ssgConfig) === null || _ssgConfig1 === void 0 ? void 0 : _ssgConfig1[entryName]);
55
59
  return useSSG;
56
60
  };
57
61
  export var isSingleEntry = function(entrypoints) {
58
- return entrypoints.length === 1 && entrypoints[0].entryName === "main";
62
+ var mainEntryName = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : MAIN_ENTRY_NAME;
63
+ return entrypoints.length === 1 && entrypoints[0].entryName === mainEntryName;
59
64
  };
@@ -45,6 +45,11 @@ var DEFAULT_CONFIG = {
45
45
  displayLabel: true,
46
46
  uppercaseLabel: false
47
47
  };
48
+ var errorStackRegExp = /^\s*at\s.*:\d+:\d+[\s)]*$/;
49
+ var anonymousErrorStackRegExp = /^\s*at\s.*\(<anonymous>\)$/;
50
+ export var isErrorStackMessage = function(message) {
51
+ return errorStackRegExp.test(message) || anonymousErrorStackRegExp.test(message);
52
+ };
48
53
  var Logger = /* @__PURE__ */ function() {
49
54
  "use strict";
50
55
  function Logger2() {
@@ -87,6 +92,11 @@ var Logger = /* @__PURE__ */ function() {
87
92
  } else {
88
93
  text = message.message;
89
94
  }
95
+ } else if (logType.level === "error" && typeof message === "string") {
96
+ var lines = message.split("\n");
97
+ text = lines.map(function(line) {
98
+ return isErrorStackMessage(line) ? chalk.gray(line) : line;
99
+ }).join("\n");
90
100
  } else {
91
101
  text = "".concat(message);
92
102
  }
@@ -2,7 +2,7 @@ import { _ as _to_consumable_array } from "@swc/helpers/_/_to_consumable_array";
2
2
  import path from "path";
3
3
  import os from "os";
4
4
  import fs from "fs";
5
- import { nanoid, upath, lodash as _ } from "../compiled";
5
+ import { nanoid, upath } from "../compiled";
6
6
  export var isPathString = function(test) {
7
7
  return path.posix.basename(test) !== test || path.win32.basename(test) !== test;
8
8
  };
@@ -13,7 +13,7 @@ export var normalizeOutputPath = function(s) {
13
13
  return s.replace(/\\/g, "\\\\");
14
14
  };
15
15
  export var normalizeToPosixPath = function(p) {
16
- return upath.normalizeSafe(path.normalize(p || "")).replace(/^([a-zA-Z]+):/, function(_2, m) {
16
+ return upath.normalizeSafe(path.normalize(p || "")).replace(/^([a-zA-Z]+):/, function(_, m) {
17
17
  return "/".concat(m.toLowerCase());
18
18
  });
19
19
  };
@@ -27,26 +27,6 @@ export var getTemplatePath = function(prefix) {
27
27
  parts.push(nanoid());
28
28
  return (_path = path).resolve.apply(_path, _to_consumable_array(parts));
29
29
  };
30
- export function compilePathMatcherRegExp(match) {
31
- if (typeof match !== "string") {
32
- return match;
33
- }
34
- var escaped = _.escapeRegExp(match);
35
- return new RegExp("(?<=\\W|^)".concat(escaped, "(?=\\W|$)"));
36
- }
37
- export var _joinPathParts = function(_part, i, parts) {
38
- return _(parts).filter(function(part) {
39
- return ![
40
- "/",
41
- "\\"
42
- ].includes(part);
43
- }).tap(function(parts2) {
44
- return parts2.unshift("");
45
- }).slice(0, i + 2).join("/");
46
- };
47
- export function upwardPaths(start) {
48
- return _(start).split(/[/\\]/).filter(Boolean).map(_joinPathParts).reverse().push("/").value();
49
- }
50
30
  export function getRealTemporaryDirectory() {
51
31
  var ret = null;
52
32
  try {
@@ -24,7 +24,8 @@ export var getAddressUrls = function() {
24
24
  var LOCAL_LABEL = "Local: ";
25
25
  var NETWORK_LABEL = "Network: ";
26
26
  var isLocalhost = function(url) {
27
- return url === null || url === void 0 ? void 0 : url.includes("localhost");
27
+ var _url;
28
+ return (_url = url) === null || _url === void 0 ? void 0 : _url.includes("localhost");
28
29
  };
29
30
  if (host && host !== DEFAULT_DEV_HOST) {
30
31
  return [
@@ -51,15 +52,15 @@ export var getAddressUrls = function() {
51
52
  }, []);
52
53
  };
53
54
  export var prettyInstructions = function(appContext, config) {
54
- var _appContext_builder_context_devServer, _appContext_builder, _config_dev;
55
+ var _appContext_builder_context_devServer, _appContext_builder, _config_dev, _config_source;
55
56
  var entrypoints = appContext.entrypoints, serverRoutes = appContext.serverRoutes, port = appContext.port, apiOnly = appContext.apiOnly, checkedEntries = appContext.checkedEntries;
56
- var isHttps = isDev() && ((_appContext_builder_context_devServer = (_appContext_builder = appContext.builder) === null || _appContext_builder === void 0 ? void 0 : _appContext_builder.context.devServer) === null || _appContext_builder_context_devServer === void 0 ? void 0 : _appContext_builder_context_devServer.https);
57
+ var isHttps = isDev() && ((_appContext_builder = appContext.builder) === null || _appContext_builder === void 0 ? void 0 : (_appContext_builder_context_devServer = _appContext_builder.context.devServer) === null || _appContext_builder_context_devServer === void 0 ? void 0 : _appContext_builder_context_devServer.https);
57
58
  var urls = getAddressUrls(isHttps ? "https" : "http", port, (_config_dev = config.dev) === null || _config_dev === void 0 ? void 0 : _config_dev.host);
58
59
  var routes = !apiOnly ? serverRoutes.filter(function(route) {
59
60
  return route.entryName;
60
61
  }) : serverRoutes;
61
62
  var message = "App running at:\n\n";
62
- if (isSingleEntry(entrypoints) || apiOnly) {
63
+ if (isSingleEntry(entrypoints, (_config_source = config.source) === null || _config_source === void 0 ? void 0 : _config_source.mainEntryName) || apiOnly) {
63
64
  message += urls.map(function(param) {
64
65
  var label = param.label, url = param.url;
65
66
  return " ".concat(chalk.bold("> ".concat(label.padEnd(10)))).concat(chalk.cyanBright(normalizeUrl("".concat(url, "/").concat(routes[0].urlPath))), "\n");
@@ -71,7 +72,7 @@ export var prettyInstructions = function(appContext, config) {
71
72
  })));
72
73
  urls.forEach(function(param) {
73
74
  var label = param.label, url = param.url;
74
- message += " ".concat(chalk.bold("> ".concat(label)), "\n");
75
+ message += " ".concat(chalk.bold("> ".concat(label))).concat(routes.length === 0 ? chalk.cyanBright(url) : "", "\n");
75
76
  routes.forEach(function(param2) {
76
77
  var entryName = param2.entryName, urlPath = param2.urlPath, isSSR = param2.isSSR;
77
78
  if (!checkedEntries.includes(entryName)) {
@@ -2,8 +2,9 @@ import { _ as _object_spread } from "@swc/helpers/_/_object_spread";
2
2
  import { findExists } from "./fs";
3
3
  export var compatRequire = function(filePath) {
4
4
  var interop = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : true;
5
+ var _mod;
5
6
  var mod = require(filePath);
6
- var rtnESMDefault = interop && (mod === null || mod === void 0 ? void 0 : mod.__esModule);
7
+ var rtnESMDefault = interop && ((_mod = mod) === null || _mod === void 0 ? void 0 : _mod.__esModule);
7
8
  return rtnESMDefault ? mod.default : mod;
8
9
  };
9
10
  export var dynamicImport = new Function("modulePath", "return import(modulePath)");
@@ -30,6 +30,7 @@ export var transformNestedRoutes = function(routes) {
30
30
  };
31
31
  export var renderNestedRoute = function(nestedRoute) {
32
32
  var options = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : {};
33
+ var _config, _children;
33
34
  var children = nestedRoute.children, index = nestedRoute.index, id = nestedRoute.id, component = nestedRoute.component, isRoot = nestedRoute.isRoot, lazyImport = nestedRoute.lazyImport, config = nestedRoute.config, handle = nestedRoute.handle;
34
35
  var Component = component;
35
36
  var parent = options.parent, DeferredDataComponent = options.DeferredDataComponent, _options_props = options.props, props = _options_props === void 0 ? {} : _options_props;
@@ -41,7 +42,7 @@ export var renderNestedRoute = function(nestedRoute) {
41
42
  action: nestedRoute.action,
42
43
  hasErrorBoundary: nestedRoute.hasErrorBoundary,
43
44
  shouldRevalidate: nestedRoute.shouldRevalidate,
44
- handle: _object_spread({}, handle, typeof config === "object" ? config === null || config === void 0 ? void 0 : config.handle : {}),
45
+ handle: _object_spread({}, handle, typeof config === "object" ? (_config = config) === null || _config === void 0 ? void 0 : _config.handle : {}),
45
46
  index: nestedRoute.index,
46
47
  element: nestedRoute.element,
47
48
  errorElement: nestedRoute.errorElement
@@ -52,7 +53,8 @@ export var renderNestedRoute = function(nestedRoute) {
52
53
  }
53
54
  var element;
54
55
  if (Component) {
55
- if ((parent === null || parent === void 0 ? void 0 : parent.loading) && lazyImport) {
56
+ var _parent;
57
+ if (((_parent = parent) === null || _parent === void 0 ? void 0 : _parent.loading) && lazyImport) {
56
58
  var Loading = parent.loading;
57
59
  if (isLoadableComponent(Component)) {
58
60
  element = /* @__PURE__ */ _jsx(Component, {
@@ -67,11 +69,12 @@ export var renderNestedRoute = function(nestedRoute) {
67
69
  } else if (isLoadableComponent(Component) && lazyImport) {
68
70
  element = /* @__PURE__ */ _jsx(Component, {});
69
71
  } else if (isRoot) {
72
+ var _props;
70
73
  element = /* @__PURE__ */ _jsxs(_Fragment, {
71
74
  children: [
72
75
  /* @__PURE__ */ _jsx(Component, _object_spread({}, props)),
73
76
  typeof document === "undefined" && DeferredDataComponent && /* @__PURE__ */ _jsx(DeferredDataComponent, {
74
- nonce: props === null || props === void 0 ? void 0 : props.nonce
77
+ nonce: (_props = props) === null || _props === void 0 ? void 0 : _props.nonce
75
78
  })
76
79
  ]
77
80
  });
@@ -84,12 +87,13 @@ export var renderNestedRoute = function(nestedRoute) {
84
87
  element = /* @__PURE__ */ _jsx(Component, {});
85
88
  }
86
89
  } else {
87
- nestedRoute.loading = parent === null || parent === void 0 ? void 0 : parent.loading;
90
+ var _parent1;
91
+ nestedRoute.loading = (_parent1 = parent) === null || _parent1 === void 0 ? void 0 : _parent1.loading;
88
92
  }
89
93
  if (element) {
90
94
  routeProps.element = element;
91
95
  }
92
- var childElements = children === null || children === void 0 ? void 0 : children.map(function(childRoute) {
96
+ var childElements = (_children = children) === null || _children === void 0 ? void 0 : _children.map(function(childRoute) {
93
97
  return renderNestedRoute(childRoute, {
94
98
  parent: nestedRoute
95
99
  });
@@ -6,7 +6,8 @@ export var parsedJSONFromElement = function(id) {
6
6
  var element = elements[elements.length - 1];
7
7
  if (element) {
8
8
  try {
9
- var parsed = JSON.parse((element === null || element === void 0 ? void 0 : element.textContent) || "");
9
+ var _element;
10
+ var parsed = JSON.parse(((_element = element) === null || _element === void 0 ? void 0 : _element.textContent) || "");
10
11
  return parsed;
11
12
  } catch (e) {
12
13
  console.error("parse ".concat(id, " error"), e);
@@ -40,13 +40,44 @@ function formatMessage(stats) {
40
40
  message = lines.join("\n");
41
41
  return message.trim();
42
42
  }
43
+ var noop = function(message) {
44
+ return message;
45
+ };
46
+ var defaultColor = {
47
+ gray: noop,
48
+ cyan: noop,
49
+ green: noop,
50
+ yellow: noop,
51
+ underline: noop
52
+ };
53
+ export function addErrorTips(errors) {
54
+ var color = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : defaultColor;
55
+ var errorHelpers = [
56
+ {
57
+ validator: function validator(message) {
58
+ return (message.includes("You may need an appropriate loader") || message.includes("You may need an additional loader")) && message.includes(".ts");
59
+ },
60
+ formatter: function formatter(message) {
61
+ return "".concat(message, "\n\n").concat(color.yellow('If it is a TypeScript file, you can use "source.include" config to compile it. see '.concat(color.underline("https://modernjs.dev/builder/en/api/config-source.html#sourceinclude"))), "\n\n").concat(color.green("".concat(color.gray("// config file"), "\nexport default {\n source: {\n include: [\n ").concat(color.gray("// add some include rules"), "\n ]\n }\n}")), "\n ");
62
+ }
63
+ }
64
+ ];
65
+ return errors.map(function(error) {
66
+ var helper = errorHelpers.find(function(item) {
67
+ return item.validator(error);
68
+ });
69
+ return helper ? helper.formatter(error) : error;
70
+ });
71
+ }
43
72
  function formatWebpackMessages(json) {
44
- var _json_errors, _json_warnings, _result_errors;
45
- var formattedErrors = json === null || json === void 0 ? void 0 : (_json_errors = json.errors) === null || _json_errors === void 0 ? void 0 : _json_errors.map(formatMessage);
46
- var formattedWarnings = json === null || json === void 0 ? void 0 : (_json_warnings = json.warnings) === null || _json_warnings === void 0 ? void 0 : _json_warnings.map(formatMessage);
73
+ var color = arguments.length > 1 && arguments[1] !== void 0 ? arguments[1] : defaultColor;
74
+ var _json_errors, _json, _json_warnings, _json1, _result_errors;
75
+ var formattedErrors = (_json = json) === null || _json === void 0 ? void 0 : (_json_errors = _json.errors) === null || _json_errors === void 0 ? void 0 : _json_errors.map(formatMessage);
76
+ var formattedWarnings = (_json1 = json) === null || _json1 === void 0 ? void 0 : (_json_warnings = _json1.warnings) === null || _json_warnings === void 0 ? void 0 : _json_warnings.map(formatMessage);
47
77
  var result = {
48
78
  errors: formattedErrors || [],
49
- warnings: formattedWarnings || []
79
+ warnings: formattedWarnings || [],
80
+ errorTips: []
50
81
  };
51
82
  if ((_result_errors = result.errors) === null || _result_errors === void 0 ? void 0 : _result_errors.some(isLikelyASyntaxError)) {
52
83
  result.errors = result.errors.filter(isLikelyASyntaxError);
@@ -54,6 +85,7 @@ function formatWebpackMessages(json) {
54
85
  if (result.errors.length > 1) {
55
86
  result.errors.length = 1;
56
87
  }
88
+ result.errors = addErrorTips(result.errors, color);
57
89
  return result;
58
90
  }
59
91
  export { formatWebpackMessages };
@@ -0,0 +1,29 @@
1
+ import { _ as _sliced_to_array } from "@swc/helpers/_/_sliced_to_array";
2
+ function processHrtime(previousTimestamp) {
3
+ var now = (/* @__PURE__ */ new Date()).getTime();
4
+ var clocktime = now * 1e-3;
5
+ var seconds = Math.floor(clocktime);
6
+ var nanoseconds = Math.floor(clocktime % 1 * 1e9);
7
+ if (previousTimestamp) {
8
+ seconds -= previousTimestamp[0];
9
+ nanoseconds -= previousTimestamp[1];
10
+ if (nanoseconds < 0) {
11
+ seconds--;
12
+ nanoseconds += 1e9;
13
+ }
14
+ }
15
+ return [
16
+ seconds,
17
+ nanoseconds
18
+ ];
19
+ }
20
+ var getLatency = function(hrtime) {
21
+ var _processHrtime = _sliced_to_array(processHrtime(hrtime), 2), s = _processHrtime[0], ns = _processHrtime[1];
22
+ return s * 1e3 + ns / 1e6;
23
+ };
24
+ export var time = function() {
25
+ var hrtime = processHrtime();
26
+ return function() {
27
+ return getLatency(hrtime);
28
+ };
29
+ };
@@ -20,7 +20,7 @@ export const validAlias = (modernConfig, { tsconfigPath }) => {
20
20
  };
21
21
  export const mergeAlias = (alias) => applyOptionsChain({}, alias);
22
22
  export const getAliasConfig = (aliasOption, option) => {
23
- var _tsconfig_compilerOptions, _tsconfig_compilerOptions1;
23
+ var _tsconfig_compilerOptions, _tsconfig, _tsconfig_compilerOptions1, _tsconfig1;
24
24
  const isTsProject = fs.existsSync(option.tsconfigPath);
25
25
  const alias = mergeAlias(aliasOption);
26
26
  if (!isTsProject) {
@@ -32,12 +32,12 @@ export const getAliasConfig = (aliasOption, option) => {
32
32
  };
33
33
  }
34
34
  const tsconfig = readTsConfigByFile(option.tsconfigPath);
35
- const baseUrl = tsconfig === null || tsconfig === void 0 ? void 0 : (_tsconfig_compilerOptions = tsconfig.compilerOptions) === null || _tsconfig_compilerOptions === void 0 ? void 0 : _tsconfig_compilerOptions.baseUrl;
35
+ const baseUrl = (_tsconfig = tsconfig) === null || _tsconfig === void 0 ? void 0 : (_tsconfig_compilerOptions = _tsconfig.compilerOptions) === null || _tsconfig_compilerOptions === void 0 ? void 0 : _tsconfig_compilerOptions.baseUrl;
36
36
  return {
37
37
  absoluteBaseUrl: baseUrl ? path.join(option.appDirectory, baseUrl) : option.appDirectory,
38
38
  paths: {
39
39
  ...alias,
40
- ...tsconfig === null || tsconfig === void 0 ? void 0 : (_tsconfig_compilerOptions1 = tsconfig.compilerOptions) === null || _tsconfig_compilerOptions1 === void 0 ? void 0 : _tsconfig_compilerOptions1.paths
40
+ ...(_tsconfig1 = tsconfig) === null || _tsconfig1 === void 0 ? void 0 : (_tsconfig_compilerOptions1 = _tsconfig1.compilerOptions) === null || _tsconfig_compilerOptions1 === void 0 ? void 0 : _tsconfig_compilerOptions1.paths
41
41
  },
42
42
  isTsPath: true,
43
43
  isTsProject
@@ -37,6 +37,8 @@ export const CHAIN_ID = {
37
37
  YAML: "yaml",
38
38
  /** Rule for wasm */
39
39
  WASM: "wasm",
40
+ /** Rule for node */
41
+ NODE: "node",
40
42
  /** Rule for bff */
41
43
  JS_BFF_API: "js-bff-api"
42
44
  },
@@ -75,6 +77,8 @@ export const CHAIN_ID = {
75
77
  TOML: "toml",
76
78
  /** html-loader */
77
79
  HTML: "html",
80
+ /** node-loader */
81
+ NODE: "html",
78
82
  /** babel-loader */
79
83
  BABEL: "babel",
80
84
  /** esbuild-loader */
@@ -93,6 +97,8 @@ export const CHAIN_ID = {
93
97
  CSS_MODULES_TS: "css-modules-typescript",
94
98
  /** mini-css-extract-plugin.loader */
95
99
  MINI_CSS_EXTRACT: "mini-css-extract",
100
+ /** resolve-url-loader */
101
+ RESOLVE_URL_LOADER_FOR_SASS: "resolve-url-loader",
96
102
  /** builder-plugin-image-compress.loader */
97
103
  IMAGE_COMPRESS: "image-compress",
98
104
  /** builder-plugin-image-compress svgo-loader */
@@ -140,6 +146,10 @@ export const CHAIN_ID = {
140
146
  HTML_NONCE: "html-nonce",
141
147
  /** HtmlCrossOriginPlugin */
142
148
  HTML_CROSS_ORIGIN: "html-cross-origin",
149
+ /** htmlPreconnectPlugin */
150
+ HTML_PRECONNECT: "html-preconnect-plugin",
151
+ /** htmlDnsPrefetchPlugin */
152
+ HTML_DNS_PREFETCH: "html-dns-prefetch-plugin",
143
153
  /** MiniCssExtractPlugin */
144
154
  MINI_CSS_EXTRACT: "mini-css-extract",
145
155
  /** VueLoaderPlugin */
@@ -9,7 +9,7 @@ export const LOADABLE_STATS_FILE = "loadable-stats.json";
9
9
  export const API_DIR = "api";
10
10
  export const SERVER_DIR = "server";
11
11
  export const SHARED_DIR = "shared";
12
- export const CONFIG_CACHE_DIR = "./node_modules/.cache/node-bundle-require";
12
+ export const CONFIG_CACHE_DIR = "./node_modules/.cache/bundle-require";
13
13
  export const CONFIG_FILE_EXTENSIONS = [
14
14
  ".js",
15
15
  ".ts",
@@ -41,7 +41,6 @@ export const INTERNAL_APP_TOOLS_RUNTIME_PLUGINS = {
41
41
  };
42
42
  export const INTERNAL_MODULE_TOOLS_PLUGINS = {
43
43
  "@modern-js/module-tools": "@modern-js/module-tools",
44
- "@modern-js/doc-tools": "@modern-js/doc-tools",
45
44
  "@modern-js/runtime": "@modern-js/runtime/cli",
46
45
  "@modern-js/plugin-testing": "@modern-js/plugin-testing/cli",
47
46
  "@modern-js/plugin-storybook": "@modern-js/plugin-storybook/cli",
@@ -12,7 +12,6 @@ export * from "./logger";
12
12
  export * from "./monorepo";
13
13
  export * from "./package";
14
14
  export * from "./path";
15
- export * from "./pathSerializer";
16
15
  export * from "./port";
17
16
  export * from "./prettyInstructions";
18
17
  export * from "./require";
@@ -1,10 +1,12 @@
1
+ import { MAIN_ENTRY_NAME } from "../constants";
1
2
  import { isEmpty } from "./type";
2
3
  export const isSSR = (config) => {
4
+ var _server, _server1;
3
5
  const { server } = config;
4
- if (server === null || server === void 0 ? void 0 : server.ssr) {
6
+ if ((_server = server) === null || _server === void 0 ? void 0 : _server.ssr) {
5
7
  return true;
6
8
  }
7
- if ((server === null || server === void 0 ? void 0 : server.ssrByEntries) && !isEmpty(server.ssrByEntries)) {
9
+ if (((_server1 = server) === null || _server1 === void 0 ? void 0 : _server1.ssrByEntries) && !isEmpty(server.ssrByEntries)) {
8
10
  for (const name of Object.keys(server.ssrByEntries)) {
9
11
  if (server.ssrByEntries[name]) {
10
12
  return true;
@@ -14,27 +16,29 @@ export const isSSR = (config) => {
14
16
  return false;
15
17
  };
16
18
  export const isUseSSRBundle = (config) => {
19
+ var _output;
17
20
  const { output } = config;
18
- if (output === null || output === void 0 ? void 0 : output.ssg) {
21
+ if ((_output = output) === null || _output === void 0 ? void 0 : _output.ssg) {
19
22
  return true;
20
23
  }
21
24
  return isSSR(config);
22
25
  };
23
26
  export const isServiceWorker = (config) => {
24
- var _deploy_worker;
27
+ var _deploy_worker, _deploy, _output;
25
28
  const { output, deploy } = config;
26
- if ((deploy === null || deploy === void 0 ? void 0 : (_deploy_worker = deploy.worker) === null || _deploy_worker === void 0 ? void 0 : _deploy_worker.ssr) && ((output === null || output === void 0 ? void 0 : output.ssg) || isSSR(config))) {
29
+ if (((_deploy = deploy) === null || _deploy === void 0 ? void 0 : (_deploy_worker = _deploy.worker) === null || _deploy_worker === void 0 ? void 0 : _deploy_worker.ssr) && (((_output = output) === null || _output === void 0 ? void 0 : _output.ssg) || isSSR(config))) {
27
30
  return true;
28
31
  }
29
32
  return false;
30
33
  };
31
34
  export const isRouterV5 = (config) => {
32
- var _config_runtime, _config_runtime1, _config_runtime_router;
33
- return typeof ((_config_runtime = config.runtime) === null || _config_runtime === void 0 ? void 0 : _config_runtime.router) !== "boolean" && (config === null || config === void 0 ? void 0 : (_config_runtime1 = config.runtime) === null || _config_runtime1 === void 0 ? void 0 : (_config_runtime_router = _config_runtime1.router) === null || _config_runtime_router === void 0 ? void 0 : _config_runtime_router.mode) === "react-router-5";
35
+ var _config_runtime, _config_runtime_router, _config_runtime1, _config;
36
+ return typeof ((_config_runtime = config.runtime) === null || _config_runtime === void 0 ? void 0 : _config_runtime.router) !== "boolean" && ((_config = config) === null || _config === void 0 ? void 0 : (_config_runtime1 = _config.runtime) === null || _config_runtime1 === void 0 ? void 0 : (_config_runtime_router = _config_runtime1.router) === null || _config_runtime_router === void 0 ? void 0 : _config_runtime_router.mode) === "react-router-5";
34
37
  };
35
38
  export const isSSGEntry = (config, entryName, entrypoints) => {
39
+ var _config_source, _ssgConfig, _ssgConfig1;
36
40
  const ssgConfig = config.output.ssg;
37
- const useSSG = isSingleEntry(entrypoints) ? Boolean(ssgConfig) : ssgConfig === true || typeof (ssgConfig === null || ssgConfig === void 0 ? void 0 : ssgConfig[0]) === "function" || Boolean(ssgConfig === null || ssgConfig === void 0 ? void 0 : ssgConfig[entryName]);
41
+ const useSSG = isSingleEntry(entrypoints, (_config_source = config.source) === null || _config_source === void 0 ? void 0 : _config_source.mainEntryName) ? Boolean(ssgConfig) : ssgConfig === true || typeof ((_ssgConfig = ssgConfig) === null || _ssgConfig === void 0 ? void 0 : _ssgConfig[0]) === "function" || Boolean((_ssgConfig1 = ssgConfig) === null || _ssgConfig1 === void 0 ? void 0 : _ssgConfig1[entryName]);
38
42
  return useSSG;
39
43
  };
40
- export const isSingleEntry = (entrypoints) => entrypoints.length === 1 && entrypoints[0].entryName === "main";
44
+ export const isSingleEntry = (entrypoints, mainEntryName = MAIN_ENTRY_NAME) => entrypoints.length === 1 && entrypoints[0].entryName === mainEntryName;
@@ -40,6 +40,9 @@ const DEFAULT_CONFIG = {
40
40
  displayLabel: true,
41
41
  uppercaseLabel: false
42
42
  };
43
+ const errorStackRegExp = /^\s*at\s.*:\d+:\d+[\s)]*$/;
44
+ const anonymousErrorStackRegExp = /^\s*at\s.*\(<anonymous>\)$/;
45
+ export const isErrorStackMessage = (message) => errorStackRegExp.test(message) || anonymousErrorStackRegExp.test(message);
43
46
  class Logger {
44
47
  _log(type, message, ...args) {
45
48
  if (message === void 0 || message === null) {
@@ -65,6 +68,9 @@ ${chalk.grey(rest.join("\n"))}`;
65
68
  } else {
66
69
  text = message.message;
67
70
  }
71
+ } else if (logType.level === "error" && typeof message === "string") {
72
+ const lines = message.split("\n");
73
+ text = lines.map((line) => isErrorStackMessage(line) ? chalk.gray(line) : line).join("\n");
68
74
  } else {
69
75
  text = `${message}`;
70
76
  }
@@ -1,11 +1,11 @@
1
1
  import path from "path";
2
2
  import os from "os";
3
3
  import fs from "fs";
4
- import { nanoid, upath, lodash as _ } from "../compiled";
4
+ import { nanoid, upath } from "../compiled";
5
5
  export const isPathString = (test) => path.posix.basename(test) !== test || path.win32.basename(test) !== test;
6
6
  export const isRelativePath = (test) => /^\.\.?($|[\\/])/.test(test);
7
7
  export const normalizeOutputPath = (s) => s.replace(/\\/g, "\\\\");
8
- export const normalizeToPosixPath = (p) => upath.normalizeSafe(path.normalize(p || "")).replace(/^([a-zA-Z]+):/, (_2, m) => `/${m.toLowerCase()}`);
8
+ export const normalizeToPosixPath = (p) => upath.normalizeSafe(path.normalize(p || "")).replace(/^([a-zA-Z]+):/, (_, m) => `/${m.toLowerCase()}`);
9
9
  export const getTemplatePath = (prefix) => {
10
10
  const tmpRoot = fs.realpathSync(os.tmpdir());
11
11
  const parts = [
@@ -15,20 +15,6 @@ export const getTemplatePath = (prefix) => {
15
15
  parts.push(nanoid());
16
16
  return path.resolve(...parts);
17
17
  };
18
- export function compilePathMatcherRegExp(match) {
19
- if (typeof match !== "string") {
20
- return match;
21
- }
22
- const escaped = _.escapeRegExp(match);
23
- return new RegExp(`(?<=\\W|^)${escaped}(?=\\W|$)`);
24
- }
25
- export const _joinPathParts = (_part, i, parts) => _(parts).filter((part) => ![
26
- "/",
27
- "\\"
28
- ].includes(part)).tap((parts2) => parts2.unshift("")).slice(0, i + 2).join("/");
29
- export function upwardPaths(start) {
30
- return _(start).split(/[/\\]/).filter(Boolean).map(_joinPathParts).reverse().push("/").value();
31
- }
32
18
  export function getRealTemporaryDirectory() {
33
19
  let ret = null;
34
20
  try {
@@ -20,7 +20,8 @@ export const getAddressUrls = (protocol = "http", port, host) => {
20
20
  const LOCAL_LABEL = "Local: ";
21
21
  const NETWORK_LABEL = "Network: ";
22
22
  const isLocalhost = (url) => {
23
- return url === null || url === void 0 ? void 0 : url.includes("localhost");
23
+ var _url;
24
+ return (_url = url) === null || _url === void 0 ? void 0 : _url.includes("localhost");
24
25
  };
25
26
  if (host && host !== DEFAULT_DEV_HOST) {
26
27
  return [
@@ -47,19 +48,19 @@ export const getAddressUrls = (protocol = "http", port, host) => {
47
48
  }, []);
48
49
  };
49
50
  export const prettyInstructions = (appContext, config) => {
50
- var _appContext_builder_context_devServer, _appContext_builder, _config_dev;
51
+ var _appContext_builder_context_devServer, _appContext_builder, _config_dev, _config_source;
51
52
  const { entrypoints, serverRoutes, port, apiOnly, checkedEntries } = appContext;
52
- const isHttps = isDev() && ((_appContext_builder_context_devServer = (_appContext_builder = appContext.builder) === null || _appContext_builder === void 0 ? void 0 : _appContext_builder.context.devServer) === null || _appContext_builder_context_devServer === void 0 ? void 0 : _appContext_builder_context_devServer.https);
53
+ const isHttps = isDev() && ((_appContext_builder = appContext.builder) === null || _appContext_builder === void 0 ? void 0 : (_appContext_builder_context_devServer = _appContext_builder.context.devServer) === null || _appContext_builder_context_devServer === void 0 ? void 0 : _appContext_builder_context_devServer.https);
53
54
  const urls = getAddressUrls(isHttps ? "https" : "http", port, (_config_dev = config.dev) === null || _config_dev === void 0 ? void 0 : _config_dev.host);
54
55
  const routes = !apiOnly ? serverRoutes.filter((route) => route.entryName) : serverRoutes;
55
56
  let message = "App running at:\n\n";
56
- if (isSingleEntry(entrypoints) || apiOnly) {
57
+ if (isSingleEntry(entrypoints, (_config_source = config.source) === null || _config_source === void 0 ? void 0 : _config_source.mainEntryName) || apiOnly) {
57
58
  message += urls.map(({ label, url }) => ` ${chalk.bold(`> ${label.padEnd(10)}`)}${chalk.cyanBright(normalizeUrl(`${url}/${routes[0].urlPath}`))}
58
59
  `).join("");
59
60
  } else {
60
61
  const maxNameLength = Math.max(...routes.map((r) => r.entryName.length));
61
62
  urls.forEach(({ label, url }) => {
62
- message += ` ${chalk.bold(`> ${label}`)}
63
+ message += ` ${chalk.bold(`> ${label}`)}${routes.length === 0 ? chalk.cyanBright(url) : ""}
63
64
  `;
64
65
  routes.forEach(({ entryName, urlPath, isSSR }) => {
65
66
  if (!checkedEntries.includes(entryName)) {
@@ -1,7 +1,8 @@
1
1
  import { findExists } from "./fs";
2
2
  export const compatRequire = (filePath, interop = true) => {
3
+ var _mod;
3
4
  const mod = require(filePath);
4
- const rtnESMDefault = interop && (mod === null || mod === void 0 ? void 0 : mod.__esModule);
5
+ const rtnESMDefault = interop && ((_mod = mod) === null || _mod === void 0 ? void 0 : _mod.__esModule);
5
6
  return rtnESMDefault ? mod.default : mod;
6
7
  };
7
8
  export const dynamicImport = new Function("modulePath", "return import(modulePath)");
@@ -10,6 +10,7 @@ export const transformNestedRoutes = (routes) => {
10
10
  return createRoutesFromElements(routeElements);
11
11
  };
12
12
  export const renderNestedRoute = (nestedRoute, options = {}) => {
13
+ var _config, _children;
13
14
  const { children, index, id, component, isRoot, lazyImport, config, handle } = nestedRoute;
14
15
  const Component = component;
15
16
  const { parent, DeferredDataComponent, props = {} } = options;
@@ -23,7 +24,7 @@ export const renderNestedRoute = (nestedRoute, options = {}) => {
23
24
  shouldRevalidate: nestedRoute.shouldRevalidate,
24
25
  handle: {
25
26
  ...handle,
26
- ...typeof config === "object" ? config === null || config === void 0 ? void 0 : config.handle : {}
27
+ ...typeof config === "object" ? (_config = config) === null || _config === void 0 ? void 0 : _config.handle : {}
27
28
  },
28
29
  index: nestedRoute.index,
29
30
  element: nestedRoute.element,
@@ -35,7 +36,8 @@ export const renderNestedRoute = (nestedRoute, options = {}) => {
35
36
  }
36
37
  let element;
37
38
  if (Component) {
38
- if ((parent === null || parent === void 0 ? void 0 : parent.loading) && lazyImport) {
39
+ var _parent;
40
+ if (((_parent = parent) === null || _parent === void 0 ? void 0 : _parent.loading) && lazyImport) {
39
41
  const Loading = parent.loading;
40
42
  if (isLoadableComponent(Component)) {
41
43
  element = /* @__PURE__ */ _jsx(Component, {
@@ -50,13 +52,14 @@ export const renderNestedRoute = (nestedRoute, options = {}) => {
50
52
  } else if (isLoadableComponent(Component) && lazyImport) {
51
53
  element = /* @__PURE__ */ _jsx(Component, {});
52
54
  } else if (isRoot) {
55
+ var _props;
53
56
  element = /* @__PURE__ */ _jsxs(_Fragment, {
54
57
  children: [
55
58
  /* @__PURE__ */ _jsx(Component, {
56
59
  ...props
57
60
  }),
58
61
  typeof document === "undefined" && DeferredDataComponent && /* @__PURE__ */ _jsx(DeferredDataComponent, {
59
- nonce: props === null || props === void 0 ? void 0 : props.nonce
62
+ nonce: (_props = props) === null || _props === void 0 ? void 0 : _props.nonce
60
63
  })
61
64
  ]
62
65
  });
@@ -69,12 +72,13 @@ export const renderNestedRoute = (nestedRoute, options = {}) => {
69
72
  element = /* @__PURE__ */ _jsx(Component, {});
70
73
  }
71
74
  } else {
72
- nestedRoute.loading = parent === null || parent === void 0 ? void 0 : parent.loading;
75
+ var _parent1;
76
+ nestedRoute.loading = (_parent1 = parent) === null || _parent1 === void 0 ? void 0 : _parent1.loading;
73
77
  }
74
78
  if (element) {
75
79
  routeProps.element = element;
76
80
  }
77
- const childElements = children === null || children === void 0 ? void 0 : children.map((childRoute) => {
81
+ const childElements = (_children = children) === null || _children === void 0 ? void 0 : _children.map((childRoute) => {
78
82
  return renderNestedRoute(childRoute, {
79
83
  parent: nestedRoute
80
84
  });