@modern-js/utils 1.2.2 → 1.3.2

Sign up to get free protection for your applications and to get access to all the features.
Files changed (35) hide show
  1. package/CHANGELOG.md +30 -0
  2. package/dist/js/modern/clearConsole.js +1 -1
  3. package/dist/js/modern/compatRequire.js +5 -0
  4. package/dist/js/modern/constants.js +18 -23
  5. package/dist/js/modern/{formatWebpackMessages.js → format.js} +35 -1
  6. package/dist/js/modern/index.js +3 -2
  7. package/dist/js/modern/prettyInstructions.js +15 -5
  8. package/dist/js/modern/wait.js +5 -0
  9. package/dist/js/node/clearConsole.js +1 -1
  10. package/dist/js/node/compatRequire.js +10 -2
  11. package/dist/js/node/constants.js +20 -28
  12. package/dist/js/node/{formatWebpackMessages.js → format.js} +34 -1
  13. package/dist/js/node/index.js +18 -4
  14. package/dist/js/node/prettyInstructions.js +15 -5
  15. package/dist/js/node/wait.js +12 -0
  16. package/dist/js/treeshaking/clearConsole.js +1 -1
  17. package/dist/js/treeshaking/compatRequire.js +5 -0
  18. package/dist/js/treeshaking/constants.js +18 -23
  19. package/dist/js/treeshaking/{formatWebpackMessages.js → format.js} +43 -1
  20. package/dist/js/treeshaking/index.js +3 -2
  21. package/dist/js/treeshaking/prettyInstructions.js +17 -6
  22. package/dist/js/treeshaking/wait.js +8 -0
  23. package/dist/types/compatRequire.d.ts +2 -1
  24. package/dist/types/constants.d.ts +14 -16
  25. package/dist/types/{formatWebpackMessages.d.ts → format.d.ts} +4 -1
  26. package/dist/types/index.d.ts +3 -2
  27. package/dist/types/wait.d.ts +2 -0
  28. package/package.json +9 -9
  29. package/tests/__snapshots__/prettyInstructions.test.ts.snap +19 -0
  30. package/tests/compatRequire.test.ts +11 -1
  31. package/tests/fixtures/compat-require/foo.js +3 -0
  32. package/tests/format.test.ts +60 -0
  33. package/tests/generateMetaTags.test.ts +19 -0
  34. package/tests/prettyInstructions.test.ts +139 -0
  35. package/tests/wait.ts +38 -0
package/CHANGELOG.md CHANGED
@@ -1,5 +1,35 @@
1
1
  # @modern-js/utils
2
2
 
3
+ ## 1.3.2
4
+
5
+ ### Patch Changes
6
+
7
+ - deeaa602: support svg/proxy/multi-version in unbundled
8
+
9
+ ## 1.3.1
10
+
11
+ ### Patch Changes
12
+
13
+ - 78279953: compiler entry bug fix and dev build console
14
+ - 4d72edea: support dev compiler by entry
15
+
16
+ ## 1.3.0
17
+
18
+ ### Minor Changes
19
+
20
+ - ec4dbffb: feat: support as a pure api service
21
+ - bada2879: refactor plugin-garfish:
22
+ - change @modern-js/plugin-micro-frontend => @modern-js/plugin-garfish
23
+ - remove disableCustomerRouter logic
24
+ - adding unit test
25
+ - fix plugin-garfish type error
26
+
27
+ ### Patch Changes
28
+
29
+ - d099e5c5: fix error when modify modern.config.js
30
+ - 24f616ca: feat: support custom meta info
31
+ - bd819a8d: feat: add wait function
32
+
3
33
  ## 1.2.2
4
34
 
5
35
  ### Patch Changes
@@ -1,5 +1,5 @@
1
1
  export const clearConsole = () => {
2
- if (process.stdout.isTTY) {
2
+ if (process.stdout.isTTY && !process.env.DEBUG) {
3
3
  process.stdout.write('\x1B[H\x1B[2J');
4
4
  }
5
5
  };
@@ -18,4 +18,9 @@ export const requireExistModule = (filename, extensions = ['.ts', '.js']) => {
18
18
  }
19
19
 
20
20
  return compatRequire(exist);
21
+ };
22
+ export const cleanRequireCache = filelist => {
23
+ filelist.forEach(filepath => {
24
+ delete require.cache[filepath];
25
+ });
21
26
  };
@@ -1,16 +1,6 @@
1
- /**
2
- * alias to src directory
3
- */
4
- export const INTERNAL_SRC_ALIAS = '@_modern_js_src';
5
- /**
6
- * alias to node_modules/.modern-js
7
- */
8
-
9
- export const INTERNAL_DIR_ALAIS = '@_modern_js_internal';
10
1
  /**
11
2
  * hmr socket connect path
12
3
  */
13
-
14
4
  export const HMR_SOCK_PATH = '/_modern_js_hmr_ws';
15
5
  /**
16
6
  * route specification file
@@ -47,11 +37,6 @@ export const SERVER_RENDER_FUNCTION_NAME = 'serverRender';
47
37
  */
48
38
 
49
39
  export const LOADABLE_STATS_FILE = 'loadable-stats.json';
50
- /**
51
- * real entry generate by modern.js
52
- */
53
-
54
- export const HIDE_MODERN_JS_DIR = './node_modules/.modern-js';
55
40
  /**
56
41
  * internal specified folder
57
42
  */
@@ -133,8 +118,8 @@ export const INTERNAL_PLUGINS = {
133
118
  cli: '@modern-js/plugin-server/cli',
134
119
  server: '@modern-js/plugin-server/server'
135
120
  },
136
- '@modern-js/plugin-micro-frontend': {
137
- cli: '@modern-js/plugin-micro-frontend/cli'
121
+ '@modern-js/plugin-garfish': {
122
+ cli: '@modern-js/plugin-garfish/cli'
138
123
  },
139
124
  '@modern-js/plugin-jarvis': {
140
125
  cli: '@modern-js/plugin-jarvis/cli'
@@ -166,6 +151,9 @@ export const INTERNAL_PLUGINS = {
166
151
  },
167
152
  '@modern-js/plugin-nocode': {
168
153
  cli: '@modern-js/plugin-nocode/cli'
154
+ },
155
+ '@modern-js/plugin-design-token': {
156
+ cli: '@modern-js/plugin-design-token/cli'
169
157
  }
170
158
  };
171
159
  /**
@@ -237,11 +225,6 @@ export const PLUGIN_SCHEMAS = {
237
225
  schema: {
238
226
  typeof: ['object', 'function']
239
227
  }
240
- }, {
241
- target: 'source.designSystem',
242
- schema: {
243
- typeof: ['object']
244
- }
245
228
  }],
246
229
  '@modern-js/plugin-proxy': [{
247
230
  target: 'dev.proxy',
@@ -284,6 +267,18 @@ export const PLUGIN_SCHEMAS = {
284
267
  type: ['boolean', 'object']
285
268
  }
286
269
  }],
270
+ '@modern-js/plugin-design-token': [// Legacy Features
271
+ {
272
+ target: 'source.designSystem',
273
+ schema: {
274
+ typeof: ['object']
275
+ }
276
+ }, {
277
+ target: 'source.designSystem.supportStyledComponents',
278
+ schema: {
279
+ type: ['boolean']
280
+ }
281
+ }],
287
282
  '@modern-js/plugin-router': [{
288
283
  target: 'runtime.router',
289
284
  schema: {
@@ -301,7 +296,7 @@ export const PLUGIN_SCHEMAS = {
301
296
  typeof: ['object', 'function']
302
297
  }
303
298
  }],
304
- '@modern-js/plugin-micro-frontend': [{
299
+ '@modern-js/plugin-garfish': [{
305
300
  target: 'runtime.masterApp',
306
301
  schema: {
307
302
  type: ['object']
@@ -1,3 +1,9 @@
1
+ function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
2
+
3
+ function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
4
+
5
+ function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
6
+
1
7
  /* eslint-disable no-param-reassign */
2
8
 
3
9
  /* eslint-disable max-statements */
@@ -100,4 +106,32 @@ function formatWebpackMessages(json) {
100
106
  export { formatWebpackMessages };
101
107
  /* eslint-enable max-statements */
102
108
 
103
- /* eslint-enable no-param-reassign */
109
+ /* eslint-enable no-param-reassign */
110
+
111
+ function formatProxyOptions(proxyOptions) {
112
+ const formatedProxy = [];
113
+
114
+ if (!Array.isArray(proxyOptions)) {
115
+ if ('target' in proxyOptions) {
116
+ formatedProxy.push(proxyOptions);
117
+ } else {
118
+ Array.prototype.push.apply(formatedProxy, Object.keys(proxyOptions).reduce((total, source) => {
119
+ const option = proxyOptions[source];
120
+ total.push(_objectSpread({
121
+ context: source,
122
+ changeOrigin: true,
123
+ logLevel: 'warn'
124
+ }, typeof option === 'string' ? {
125
+ target: option
126
+ } : option));
127
+ return total;
128
+ }, []));
129
+ }
130
+ } else {
131
+ formatedProxy.push(...proxyOptions);
132
+ }
133
+
134
+ return formatedProxy;
135
+ }
136
+
137
+ export { formatProxyOptions };
@@ -1,7 +1,7 @@
1
1
  import * as _fs from 'fs-extra';
2
2
  export { _fs as fs };
3
3
  export * from "./chalk";
4
- export * from "./formatWebpackMessages";
4
+ export * from "./format";
5
5
  export * from "./FileSizeReporter";
6
6
  export * from "./printBuildError";
7
7
  export * from "./debug";
@@ -29,4 +29,5 @@ export * from "./prettyInstructions";
29
29
  export * from "./alias";
30
30
  export * from "./import";
31
31
  export * from "./watch";
32
- export * from "./nodeEnv";
32
+ export * from "./nodeEnv";
33
+ export * from "./wait";
@@ -38,13 +38,15 @@ export const prettyInstructions = (appContext, config) => {
38
38
  const {
39
39
  entrypoints,
40
40
  serverRoutes,
41
- port
41
+ port,
42
+ existSrc,
43
+ checkedEntries
42
44
  } = appContext;
43
45
  const urls = getAddressUrls(config.dev.https && isDev() ? 'https' : 'http', port);
44
- const routes = serverRoutes.filter(route => route.entryName);
46
+ const routes = existSrc ? serverRoutes.filter(route => route.entryName) : serverRoutes;
45
47
  let message = 'App running at:\n\n';
46
48
 
47
- if (isSingleEntry(entrypoints)) {
49
+ if (isSingleEntry(entrypoints) || !existSrc) {
48
50
  message += urls.map(({
49
51
  type,
50
52
  url
@@ -58,11 +60,19 @@ export const prettyInstructions = (appContext, config) => {
58
60
  message += ` ${chalk.bold(`> ${type}`)}\n`;
59
61
  routes.forEach(({
60
62
  entryName,
61
- urlPath
63
+ urlPath,
64
+ isSSR
62
65
  }) => {
63
- message += ` ${chalk.yellowBright(entryName.padEnd(maxNameLength + 8))}${chalk.cyanBright(normalizeUrl(`${url}/${urlPath}`))}\n`;
66
+ if (!checkedEntries.includes(entryName)) {
67
+ return;
68
+ }
69
+
70
+ message += ` ${chalk.yellowBright(isSSR ? 'λ' : '○')} ${chalk.yellowBright(entryName.padEnd(maxNameLength + 8))}${chalk.cyanBright(normalizeUrl(`${url}/${urlPath}`))}\n`;
64
71
  });
65
72
  });
73
+ message += '\n';
74
+ message += chalk.cyanBright(' λ (Server) server-side renders at runtime\n');
75
+ message += chalk.cyanBright(' ○ (Static) client-side rendered as static HTML\n');
66
76
  }
67
77
 
68
78
  return message;
@@ -0,0 +1,5 @@
1
+ const wait = (time = 0) => new Promise(resolve => {
2
+ setTimeout(resolve, time);
3
+ });
4
+
5
+ export { wait };
@@ -6,7 +6,7 @@ Object.defineProperty(exports, "__esModule", {
6
6
  exports.clearConsole = void 0;
7
7
 
8
8
  const clearConsole = () => {
9
- if (process.stdout.isTTY) {
9
+ if (process.stdout.isTTY && !process.env.DEBUG) {
10
10
  process.stdout.write('\x1B[H\x1B[2J');
11
11
  }
12
12
  };
@@ -3,7 +3,7 @@
3
3
  Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
- exports.requireExistModule = exports.compatRequire = void 0;
6
+ exports.requireExistModule = exports.compatRequire = exports.cleanRequireCache = void 0;
7
7
 
8
8
  var _findExists = require("./findExists");
9
9
 
@@ -30,4 +30,12 @@ const requireExistModule = (filename, extensions = ['.ts', '.js']) => {
30
30
  return compatRequire(exist);
31
31
  };
32
32
 
33
- exports.requireExistModule = requireExistModule;
33
+ exports.requireExistModule = requireExistModule;
34
+
35
+ const cleanRequireCache = filelist => {
36
+ filelist.forEach(filepath => {
37
+ delete require.cache[filepath];
38
+ });
39
+ };
40
+
41
+ exports.cleanRequireCache = cleanRequireCache;
@@ -3,23 +3,11 @@
3
3
  Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
- exports.SHARED_DIR = exports.SERVER_RENDER_FUNCTION_NAME = exports.SERVER_DIR = exports.SERVER_BUNDLE_DIRECTORY = exports.ROUTE_SPEC_FILE = exports.PLUGIN_SCHEMAS = exports.MAIN_ENTRY_NAME = exports.LOADABLE_STATS_FILE = exports.LAUNCH_EDITOR_ENDPOINT = exports.INTERNAL_SRC_ALIAS = exports.INTERNAL_PLUGINS = exports.INTERNAL_DIR_ALAIS = exports.HMR_SOCK_PATH = exports.HIDE_MODERN_JS_DIR = exports.ENTRY_NAME_PATTERN = exports.API_DIR = void 0;
6
+ exports.SHARED_DIR = exports.SERVER_RENDER_FUNCTION_NAME = exports.SERVER_DIR = exports.SERVER_BUNDLE_DIRECTORY = exports.ROUTE_SPEC_FILE = exports.PLUGIN_SCHEMAS = exports.MAIN_ENTRY_NAME = exports.LOADABLE_STATS_FILE = exports.LAUNCH_EDITOR_ENDPOINT = exports.INTERNAL_PLUGINS = exports.HMR_SOCK_PATH = exports.ENTRY_NAME_PATTERN = exports.API_DIR = void 0;
7
7
 
8
- /**
9
- * alias to src directory
10
- */
11
- const INTERNAL_SRC_ALIAS = '@_modern_js_src';
12
- /**
13
- * alias to node_modules/.modern-js
14
- */
15
-
16
- exports.INTERNAL_SRC_ALIAS = INTERNAL_SRC_ALIAS;
17
- const INTERNAL_DIR_ALAIS = '@_modern_js_internal';
18
8
  /**
19
9
  * hmr socket connect path
20
10
  */
21
-
22
- exports.INTERNAL_DIR_ALAIS = INTERNAL_DIR_ALAIS;
23
11
  const HMR_SOCK_PATH = '/_modern_js_hmr_ws';
24
12
  /**
25
13
  * route specification file
@@ -63,17 +51,11 @@ const SERVER_RENDER_FUNCTION_NAME = 'serverRender';
63
51
 
64
52
  exports.SERVER_RENDER_FUNCTION_NAME = SERVER_RENDER_FUNCTION_NAME;
65
53
  const LOADABLE_STATS_FILE = 'loadable-stats.json';
66
- /**
67
- * real entry generate by modern.js
68
- */
69
-
70
- exports.LOADABLE_STATS_FILE = LOADABLE_STATS_FILE;
71
- const HIDE_MODERN_JS_DIR = './node_modules/.modern-js';
72
54
  /**
73
55
  * internal specified folder
74
56
  */
75
57
 
76
- exports.HIDE_MODERN_JS_DIR = HIDE_MODERN_JS_DIR;
58
+ exports.LOADABLE_STATS_FILE = LOADABLE_STATS_FILE;
77
59
  const API_DIR = 'api';
78
60
  exports.API_DIR = API_DIR;
79
61
  const SERVER_DIR = 'server';
@@ -154,8 +136,8 @@ const INTERNAL_PLUGINS = {
154
136
  cli: '@modern-js/plugin-server/cli',
155
137
  server: '@modern-js/plugin-server/server'
156
138
  },
157
- '@modern-js/plugin-micro-frontend': {
158
- cli: '@modern-js/plugin-micro-frontend/cli'
139
+ '@modern-js/plugin-garfish': {
140
+ cli: '@modern-js/plugin-garfish/cli'
159
141
  },
160
142
  '@modern-js/plugin-jarvis': {
161
143
  cli: '@modern-js/plugin-jarvis/cli'
@@ -187,6 +169,9 @@ const INTERNAL_PLUGINS = {
187
169
  },
188
170
  '@modern-js/plugin-nocode': {
189
171
  cli: '@modern-js/plugin-nocode/cli'
172
+ },
173
+ '@modern-js/plugin-design-token': {
174
+ cli: '@modern-js/plugin-design-token/cli'
190
175
  }
191
176
  };
192
177
  /**
@@ -259,11 +244,6 @@ const PLUGIN_SCHEMAS = {
259
244
  schema: {
260
245
  typeof: ['object', 'function']
261
246
  }
262
- }, {
263
- target: 'source.designSystem',
264
- schema: {
265
- typeof: ['object']
266
- }
267
247
  }],
268
248
  '@modern-js/plugin-proxy': [{
269
249
  target: 'dev.proxy',
@@ -306,6 +286,18 @@ const PLUGIN_SCHEMAS = {
306
286
  type: ['boolean', 'object']
307
287
  }
308
288
  }],
289
+ '@modern-js/plugin-design-token': [// Legacy Features
290
+ {
291
+ target: 'source.designSystem',
292
+ schema: {
293
+ typeof: ['object']
294
+ }
295
+ }, {
296
+ target: 'source.designSystem.supportStyledComponents',
297
+ schema: {
298
+ type: ['boolean']
299
+ }
300
+ }],
309
301
  '@modern-js/plugin-router': [{
310
302
  target: 'runtime.router',
311
303
  schema: {
@@ -323,7 +315,7 @@ const PLUGIN_SCHEMAS = {
323
315
  typeof: ['object', 'function']
324
316
  }
325
317
  }],
326
- '@modern-js/plugin-micro-frontend': [{
318
+ '@modern-js/plugin-garfish': [{
327
319
  target: 'runtime.masterApp',
328
320
  schema: {
329
321
  type: ['object']
@@ -3,8 +3,15 @@
3
3
  Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
+ exports.formatProxyOptions = formatProxyOptions;
6
7
  exports.formatWebpackMessages = formatWebpackMessages;
7
8
 
9
+ function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
10
+
11
+ function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
12
+
13
+ function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
14
+
8
15
  /* eslint-disable no-param-reassign */
9
16
 
10
17
  /* eslint-disable max-statements */
@@ -103,6 +110,32 @@ function formatWebpackMessages(json) {
103
110
 
104
111
  return result;
105
112
  }
113
+
106
114
  /* eslint-enable max-statements */
107
115
 
108
- /* eslint-enable no-param-reassign */
116
+ /* eslint-enable no-param-reassign */
117
+ function formatProxyOptions(proxyOptions) {
118
+ const formatedProxy = [];
119
+
120
+ if (!Array.isArray(proxyOptions)) {
121
+ if ('target' in proxyOptions) {
122
+ formatedProxy.push(proxyOptions);
123
+ } else {
124
+ Array.prototype.push.apply(formatedProxy, Object.keys(proxyOptions).reduce((total, source) => {
125
+ const option = proxyOptions[source];
126
+ total.push(_objectSpread({
127
+ context: source,
128
+ changeOrigin: true,
129
+ logLevel: 'warn'
130
+ }, typeof option === 'string' ? {
131
+ target: option
132
+ } : option));
133
+ return total;
134
+ }, []));
135
+ }
136
+ } else {
137
+ formatedProxy.push(...proxyOptions);
138
+ }
139
+
140
+ return formatedProxy;
141
+ }
@@ -26,16 +26,16 @@ Object.keys(_chalk).forEach(function (key) {
26
26
  });
27
27
  });
28
28
 
29
- var _formatWebpackMessages = require("./formatWebpackMessages");
29
+ var _format = require("./format");
30
30
 
31
- Object.keys(_formatWebpackMessages).forEach(function (key) {
31
+ Object.keys(_format).forEach(function (key) {
32
32
  if (key === "default" || key === "__esModule") return;
33
33
  if (Object.prototype.hasOwnProperty.call(_exportNames, key)) return;
34
- if (key in exports && exports[key] === _formatWebpackMessages[key]) return;
34
+ if (key in exports && exports[key] === _format[key]) return;
35
35
  Object.defineProperty(exports, key, {
36
36
  enumerable: true,
37
37
  get: function () {
38
- return _formatWebpackMessages[key];
38
+ return _format[key];
39
39
  }
40
40
  });
41
41
  });
@@ -432,6 +432,20 @@ Object.keys(_nodeEnv).forEach(function (key) {
432
432
  });
433
433
  });
434
434
 
435
+ var _wait = require("./wait");
436
+
437
+ Object.keys(_wait).forEach(function (key) {
438
+ if (key === "default" || key === "__esModule") return;
439
+ if (Object.prototype.hasOwnProperty.call(_exportNames, key)) return;
440
+ if (key in exports && exports[key] === _wait[key]) return;
441
+ Object.defineProperty(exports, key, {
442
+ enumerable: true,
443
+ get: function () {
444
+ return _wait[key];
445
+ }
446
+ });
447
+ });
448
+
435
449
  function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function (nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
436
450
 
437
451
  function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
@@ -52,13 +52,15 @@ const prettyInstructions = (appContext, config) => {
52
52
  const {
53
53
  entrypoints,
54
54
  serverRoutes,
55
- port
55
+ port,
56
+ existSrc,
57
+ checkedEntries
56
58
  } = appContext;
57
59
  const urls = getAddressUrls(config.dev.https && (0, _is.isDev)() ? 'https' : 'http', port);
58
- const routes = serverRoutes.filter(route => route.entryName);
60
+ const routes = existSrc ? serverRoutes.filter(route => route.entryName) : serverRoutes;
59
61
  let message = 'App running at:\n\n';
60
62
 
61
- if (isSingleEntry(entrypoints)) {
63
+ if (isSingleEntry(entrypoints) || !existSrc) {
62
64
  message += urls.map(({
63
65
  type,
64
66
  url
@@ -72,11 +74,19 @@ const prettyInstructions = (appContext, config) => {
72
74
  message += ` ${_chalk.default.bold(`> ${type}`)}\n`;
73
75
  routes.forEach(({
74
76
  entryName,
75
- urlPath
77
+ urlPath,
78
+ isSSR
76
79
  }) => {
77
- message += ` ${_chalk.default.yellowBright(entryName.padEnd(maxNameLength + 8))}${_chalk.default.cyanBright(normalizeUrl(`${url}/${urlPath}`))}\n`;
80
+ if (!checkedEntries.includes(entryName)) {
81
+ return;
82
+ }
83
+
84
+ message += ` ${_chalk.default.yellowBright(isSSR ? 'λ' : '○')} ${_chalk.default.yellowBright(entryName.padEnd(maxNameLength + 8))}${_chalk.default.cyanBright(normalizeUrl(`${url}/${urlPath}`))}\n`;
78
85
  });
79
86
  });
87
+ message += '\n';
88
+ message += _chalk.default.cyanBright(' λ (Server) server-side renders at runtime\n');
89
+ message += _chalk.default.cyanBright(' ○ (Static) client-side rendered as static HTML\n');
80
90
  }
81
91
 
82
92
  return message;
@@ -0,0 +1,12 @@
1
+ "use strict";
2
+
3
+ Object.defineProperty(exports, "__esModule", {
4
+ value: true
5
+ });
6
+ exports.wait = void 0;
7
+
8
+ const wait = (time = 0) => new Promise(resolve => {
9
+ setTimeout(resolve, time);
10
+ });
11
+
12
+ exports.wait = wait;
@@ -1,5 +1,5 @@
1
1
  export var clearConsole = function clearConsole() {
2
- if (process.stdout.isTTY) {
2
+ if (process.stdout.isTTY && !process.env.DEBUG) {
3
3
  process.stdout.write('\x1B[H\x1B[2J');
4
4
  }
5
5
  };
@@ -21,4 +21,9 @@ export var requireExistModule = function requireExistModule(filename) {
21
21
  }
22
22
 
23
23
  return compatRequire(exist);
24
+ };
25
+ export var cleanRequireCache = function cleanRequireCache(filelist) {
26
+ filelist.forEach(function (filepath) {
27
+ delete require.cache[filepath];
28
+ });
24
29
  };
@@ -1,18 +1,8 @@
1
1
  function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
2
2
 
3
- /**
4
- * alias to src directory
5
- */
6
- export var INTERNAL_SRC_ALIAS = '@_modern_js_src';
7
- /**
8
- * alias to node_modules/.modern-js
9
- */
10
-
11
- export var INTERNAL_DIR_ALAIS = '@_modern_js_internal';
12
3
  /**
13
4
  * hmr socket connect path
14
5
  */
15
-
16
6
  export var HMR_SOCK_PATH = '/_modern_js_hmr_ws';
17
7
  /**
18
8
  * route specification file
@@ -49,11 +39,6 @@ export var SERVER_RENDER_FUNCTION_NAME = 'serverRender';
49
39
  */
50
40
 
51
41
  export var LOADABLE_STATS_FILE = 'loadable-stats.json';
52
- /**
53
- * real entry generate by modern.js
54
- */
55
-
56
- export var HIDE_MODERN_JS_DIR = './node_modules/.modern-js';
57
42
  /**
58
43
  * internal specified folder
59
44
  */
@@ -135,8 +120,8 @@ export var INTERNAL_PLUGINS = {
135
120
  cli: '@modern-js/plugin-server/cli',
136
121
  server: '@modern-js/plugin-server/server'
137
122
  },
138
- '@modern-js/plugin-micro-frontend': {
139
- cli: '@modern-js/plugin-micro-frontend/cli'
123
+ '@modern-js/plugin-garfish': {
124
+ cli: '@modern-js/plugin-garfish/cli'
140
125
  },
141
126
  '@modern-js/plugin-jarvis': {
142
127
  cli: '@modern-js/plugin-jarvis/cli'
@@ -168,6 +153,9 @@ export var INTERNAL_PLUGINS = {
168
153
  },
169
154
  '@modern-js/plugin-nocode': {
170
155
  cli: '@modern-js/plugin-nocode/cli'
156
+ },
157
+ '@modern-js/plugin-design-token': {
158
+ cli: '@modern-js/plugin-design-token/cli'
171
159
  }
172
160
  };
173
161
  /**
@@ -237,11 +225,6 @@ export var PLUGIN_SCHEMAS = {
237
225
  schema: {
238
226
  "typeof": ['object', 'function']
239
227
  }
240
- }, {
241
- target: 'source.designSystem',
242
- schema: {
243
- "typeof": ['object']
244
- }
245
228
  }],
246
229
  '@modern-js/plugin-proxy': [{
247
230
  target: 'dev.proxy',
@@ -284,6 +267,18 @@ export var PLUGIN_SCHEMAS = {
284
267
  type: ['boolean', 'object']
285
268
  }
286
269
  }],
270
+ '@modern-js/plugin-design-token': [// Legacy Features
271
+ {
272
+ target: 'source.designSystem',
273
+ schema: {
274
+ "typeof": ['object']
275
+ }
276
+ }, {
277
+ target: 'source.designSystem.supportStyledComponents',
278
+ schema: {
279
+ type: ['boolean']
280
+ }
281
+ }],
287
282
  '@modern-js/plugin-router': [{
288
283
  target: 'runtime.router',
289
284
  schema: {
@@ -301,7 +296,7 @@ export var PLUGIN_SCHEMAS = {
301
296
  "typeof": ['object', 'function']
302
297
  }
303
298
  }],
304
- '@modern-js/plugin-micro-frontend': [{
299
+ '@modern-js/plugin-garfish': [{
305
300
  target: 'runtime.masterApp',
306
301
  schema: {
307
302
  type: ['object']
@@ -1,3 +1,17 @@
1
+ function _toConsumableArray(arr) { return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread(); }
2
+
3
+ function _nonIterableSpread() { throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
4
+
5
+ function _iterableToArray(iter) { if (typeof Symbol !== "undefined" && iter[Symbol.iterator] != null || iter["@@iterator"] != null) return Array.from(iter); }
6
+
7
+ function _arrayWithoutHoles(arr) { if (Array.isArray(arr)) return _arrayLikeToArray(arr); }
8
+
9
+ function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; }
10
+
11
+ function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
12
+
13
+ function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
14
+
1
15
  function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); }
2
16
 
3
17
  function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); }
@@ -122,4 +136,32 @@ function formatWebpackMessages(json) {
122
136
  export { formatWebpackMessages };
123
137
  /* eslint-enable max-statements */
124
138
 
125
- /* eslint-enable no-param-reassign */
139
+ /* eslint-enable no-param-reassign */
140
+
141
+ function formatProxyOptions(proxyOptions) {
142
+ var formatedProxy = [];
143
+
144
+ if (!Array.isArray(proxyOptions)) {
145
+ if ('target' in proxyOptions) {
146
+ formatedProxy.push(proxyOptions);
147
+ } else {
148
+ Array.prototype.push.apply(formatedProxy, Object.keys(proxyOptions).reduce(function (total, source) {
149
+ var option = proxyOptions[source];
150
+ total.push(_objectSpread({
151
+ context: source,
152
+ changeOrigin: true,
153
+ logLevel: 'warn'
154
+ }, typeof option === 'string' ? {
155
+ target: option
156
+ } : option));
157
+ return total;
158
+ }, []));
159
+ }
160
+ } else {
161
+ formatedProxy.push.apply(formatedProxy, _toConsumableArray(proxyOptions));
162
+ }
163
+
164
+ return formatedProxy;
165
+ }
166
+
167
+ export { formatProxyOptions };
@@ -1,7 +1,7 @@
1
1
  import * as _fs from 'fs-extra';
2
2
  export { _fs as fs };
3
3
  export * from "./chalk";
4
- export * from "./formatWebpackMessages";
4
+ export * from "./format";
5
5
  export * from "./FileSizeReporter";
6
6
  export * from "./printBuildError";
7
7
  export * from "./debug";
@@ -29,4 +29,5 @@ export * from "./prettyInstructions";
29
29
  export * from "./alias";
30
30
  export * from "./import";
31
31
  export * from "./watch";
32
- export * from "./nodeEnv";
32
+ export * from "./nodeEnv";
33
+ export * from "./wait";
@@ -56,14 +56,16 @@ export var prettyInstructions = function prettyInstructions(appContext, config)
56
56
  var _ref = appContext,
57
57
  entrypoints = _ref.entrypoints,
58
58
  serverRoutes = _ref.serverRoutes,
59
- port = _ref.port;
59
+ port = _ref.port,
60
+ existSrc = _ref.existSrc,
61
+ checkedEntries = _ref.checkedEntries;
60
62
  var urls = getAddressUrls(config.dev.https && isDev() ? 'https' : 'http', port);
61
- var routes = serverRoutes.filter(function (route) {
63
+ var routes = existSrc ? serverRoutes.filter(function (route) {
62
64
  return route.entryName;
63
- });
65
+ }) : serverRoutes;
64
66
  var message = 'App running at:\n\n';
65
67
 
66
- if (isSingleEntry(entrypoints)) {
68
+ if (isSingleEntry(entrypoints) || !existSrc) {
67
69
  message += urls.map(function (_ref2) {
68
70
  var type = _ref2.type,
69
71
  url = _ref2.url;
@@ -79,10 +81,19 @@ export var prettyInstructions = function prettyInstructions(appContext, config)
79
81
  message += " ".concat(chalk.bold("> ".concat(type)), "\n");
80
82
  routes.forEach(function (_ref4) {
81
83
  var entryName = _ref4.entryName,
82
- urlPath = _ref4.urlPath;
83
- message += " ".concat(chalk.yellowBright(entryName.padEnd(maxNameLength + 8))).concat(chalk.cyanBright(normalizeUrl("".concat(url, "/").concat(urlPath))), "\n");
84
+ urlPath = _ref4.urlPath,
85
+ isSSR = _ref4.isSSR;
86
+
87
+ if (!checkedEntries.includes(entryName)) {
88
+ return;
89
+ }
90
+
91
+ message += " ".concat(chalk.yellowBright(isSSR ? 'λ' : '○'), " ").concat(chalk.yellowBright(entryName.padEnd(maxNameLength + 8))).concat(chalk.cyanBright(normalizeUrl("".concat(url, "/").concat(urlPath))), "\n");
84
92
  });
85
93
  });
94
+ message += '\n';
95
+ message += chalk.cyanBright(' λ (Server) server-side renders at runtime\n');
96
+ message += chalk.cyanBright(' ○ (Static) client-side rendered as static HTML\n');
86
97
  }
87
98
 
88
99
  return message;
@@ -0,0 +1,8 @@
1
+ var wait = function wait() {
2
+ var time = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0;
3
+ return new Promise(function (resolve) {
4
+ setTimeout(resolve, time);
5
+ });
6
+ };
7
+
8
+ export { wait };
@@ -4,4 +4,5 @@
4
4
  * @returns module export object.
5
5
  */
6
6
  export declare const compatRequire: (filePath: string) => any;
7
- export declare const requireExistModule: (filename: string, extensions?: string[]) => any;
7
+ export declare const requireExistModule: (filename: string, extensions?: string[]) => any;
8
+ export declare const cleanRequireCache: (filelist: string[]) => void;
@@ -1,16 +1,6 @@
1
- /**
2
- * alias to src directory
3
- */
4
- export declare const INTERNAL_SRC_ALIAS = "@_modern_js_src";
5
- /**
6
- * alias to node_modules/.modern-js
7
- */
8
-
9
- export declare const INTERNAL_DIR_ALAIS = "@_modern_js_internal";
10
1
  /**
11
2
  * hmr socket connect path
12
3
  */
13
-
14
4
  export declare const HMR_SOCK_PATH = "/_modern_js_hmr_ws";
15
5
  /**
16
6
  * route specification file
@@ -47,11 +37,6 @@ export declare const SERVER_RENDER_FUNCTION_NAME = "serverRender";
47
37
  */
48
38
 
49
39
  export declare const LOADABLE_STATS_FILE = "loadable-stats.json";
50
- /**
51
- * real entry generate by modern.js
52
- */
53
-
54
- export declare const HIDE_MODERN_JS_DIR = "./node_modules/.modern-js";
55
40
  /**
56
41
  * internal specified folder
57
42
  */
@@ -176,6 +161,19 @@ export declare const PLUGIN_SCHEMAS: {
176
161
  type: string[];
177
162
  };
178
163
  }[];
164
+ '@modern-js/plugin-design-token': ({
165
+ target: string;
166
+ schema: {
167
+ typeof: string[];
168
+ type?: undefined;
169
+ };
170
+ } | {
171
+ target: string;
172
+ schema: {
173
+ type: string[];
174
+ typeof?: undefined;
175
+ };
176
+ })[];
179
177
  '@modern-js/plugin-router': {
180
178
  target: string;
181
179
  schema: {
@@ -188,7 +186,7 @@ export declare const PLUGIN_SCHEMAS: {
188
186
  typeof: string[];
189
187
  };
190
188
  }[];
191
- '@modern-js/plugin-micro-frontend': {
189
+ '@modern-js/plugin-garfish': {
192
190
  target: string;
193
191
  schema: {
194
192
  type: string[];
@@ -6,8 +6,11 @@
6
6
  * https://github.com/facebook/create-react-app/blob/master/LICENSE
7
7
  */
8
8
  import { StatsCompilation } from 'webpack';
9
+ import { ProxyDetail, ProxyOptions } from '@modern-js/types';
9
10
  declare function formatWebpackMessages(json: StatsCompilation): {
10
11
  errors: string[];
11
12
  warnings: string[];
12
13
  };
13
- export { formatWebpackMessages };
14
+ export { formatWebpackMessages };
15
+ declare function formatProxyOptions(proxyOptions: ProxyOptions): ProxyDetail[];
16
+ export { formatProxyOptions };
@@ -1,6 +1,6 @@
1
1
  export * as fs from 'fs-extra';
2
2
  export * from './chalk';
3
- export * from './formatWebpackMessages';
3
+ export * from './format';
4
4
  export * from './FileSizeReporter';
5
5
  export * from './printBuildError';
6
6
  export * from './debug';
@@ -28,4 +28,5 @@ export * from './prettyInstructions';
28
28
  export * from './alias';
29
29
  export * from './import';
30
30
  export * from './watch';
31
- export * from './nodeEnv';
31
+ export * from './nodeEnv';
32
+ export * from './wait';
@@ -0,0 +1,2 @@
1
+ declare const wait: (time?: number) => Promise<unknown>;
2
+ export { wait };
package/package.json CHANGED
@@ -11,7 +11,7 @@
11
11
  "modern",
12
12
  "modern.js"
13
13
  ],
14
- "version": "1.2.2",
14
+ "version": "1.3.2",
15
15
  "jsnext:source": "./src/index.ts",
16
16
  "types": "./dist/types/index.d.ts",
17
17
  "main": "./dist/js/node/index.js",
@@ -26,9 +26,9 @@
26
26
  },
27
27
  "default": "./dist/js/treeshaking/index.js"
28
28
  },
29
- "./formatWebpackMessages": {
30
- "jsnext:source": "./src/formatWebpackMessages.ts",
31
- "default": "./dist/js/treeshaking/formatWebpackMessages.js"
29
+ "./format": {
30
+ "jsnext:source": "./src/format.ts",
31
+ "default": "./dist/js/treeshaking/format.js"
32
32
  },
33
33
  "./constants": {
34
34
  "jsnext:source": "./src/constants.ts",
@@ -37,8 +37,8 @@
37
37
  },
38
38
  "typesVersions": {
39
39
  "*": {
40
- "formatWebpackMessages": [
41
- "./dist/types/formatWebpackMessages.d.ts"
40
+ "format": [
41
+ "./dist/types/format.d.ts"
42
42
  ],
43
43
  "constants": [
44
44
  "./dist/types/constants.d.ts"
@@ -75,13 +75,13 @@
75
75
  "webpack": "^5.54.0",
76
76
  "@scripts/build": "0.0.0",
77
77
  "jest": "^27",
78
- "@scripts/jest-config": "0.0.0"
78
+ "@scripts/jest-config": "0.0.0",
79
+ "@modern-js/types": "^1.3.3"
79
80
  },
80
81
  "sideEffects": false,
81
82
  "publishConfig": {
82
83
  "registry": "https://registry.npmjs.org/",
83
- "access": "public",
84
- "types": "./dist/types/index.d.ts"
84
+ "access": "public"
85
85
  },
86
86
  "scripts": {
87
87
  "new": "modern new",
@@ -0,0 +1,19 @@
1
+ // Jest Snapshot v1, https://goo.gl/fbAQLP
2
+
3
+ exports[`prettyInstructions The src directory does not exist 1`] = `
4
+ "App running at:
5
+
6
+ > Network: http://127.0.0.1:8080/api
7
+ > Network: http://11.11.111.11:8080/api
8
+ > Network: http://10.100.100.100:8080/api
9
+ "
10
+ `;
11
+
12
+ exports[`prettyInstructions basic usage 1`] = `
13
+ "App running at:
14
+
15
+ > Network: http://127.0.0.1:8080/
16
+ > Network: http://11.11.111.11:8080/
17
+ > Network: http://10.100.100.100:8080/
18
+ "
19
+ `;
@@ -1,5 +1,5 @@
1
1
  import path from 'path';
2
- import { compatRequire } from '../src/compatRequire';
2
+ import { compatRequire, cleanRequireCache } from '../src/compatRequire';
3
3
 
4
4
  describe('compat require', () => {
5
5
  const fixturePath = path.resolve(__dirname, './fixtures/compat-require');
@@ -19,4 +19,14 @@ describe('compat require', () => {
19
19
  test(`should return null`, () => {
20
20
  expect(compatRequire(path.join(fixturePath, 'empty.js'))).toEqual(null);
21
21
  });
22
+
23
+ test('should clearn cache after fn', () => {
24
+ const foo = module.require('./fixtures/compat-require/foo');
25
+ const requirePath = require.resolve('./fixtures/compat-require/foo.js');
26
+ expect(foo.name).toBe('foo');
27
+ expect(require.cache[requirePath]).toBeDefined();
28
+ cleanRequireCache([requirePath]);
29
+ jest.resetModules();
30
+ expect(require.cache[requirePath]).toBeUndefined();
31
+ });
22
32
  });
@@ -0,0 +1,3 @@
1
+ module.exports = {
2
+ name: 'foo',
3
+ };
@@ -0,0 +1,60 @@
1
+ import { formatProxyOptions } from '../src/format';
2
+
3
+ describe('test format', () => {
4
+ it('should format correctly use simply options', async () => {
5
+ const proxy = {
6
+ '/simple': `http://localhost`,
7
+ };
8
+
9
+ const options = formatProxyOptions(proxy);
10
+ expect(options).toEqual([
11
+ {
12
+ context: '/simple',
13
+ changeOrigin: true,
14
+ logLevel: 'warn',
15
+ target: 'http://localhost',
16
+ },
17
+ ]);
18
+ });
19
+
20
+ it('should format correctly use simply options', async () => {
21
+ const proxy = {
22
+ '/simple-obj': {
23
+ target: `http://localhost`,
24
+ },
25
+ };
26
+ const options = formatProxyOptions(proxy);
27
+ expect(options).toEqual([
28
+ {
29
+ context: '/simple-obj',
30
+ changeOrigin: true,
31
+ logLevel: 'warn',
32
+ target: 'http://localhost',
33
+ },
34
+ ]);
35
+ });
36
+
37
+ it('should format correctly use simply options', async () => {
38
+ const proxy = {
39
+ context: '/context',
40
+ target: `http://localhost`,
41
+ };
42
+ const options = formatProxyOptions(proxy);
43
+ expect(options).toEqual([
44
+ { context: '/context', target: 'http://localhost' },
45
+ ]);
46
+ });
47
+
48
+ it('should format correctly use simply options', async () => {
49
+ const proxy = [
50
+ {
51
+ context: '/array',
52
+ target: `http://localhost`,
53
+ },
54
+ ];
55
+ const options = formatProxyOptions(proxy);
56
+ expect(options).toEqual([
57
+ { context: '/array', target: 'http://localhost' },
58
+ ]);
59
+ });
60
+ });
@@ -0,0 +1,19 @@
1
+ import { generateMetaTags } from '../src/generateMetaTags';
2
+
3
+ describe('generateMetaTags', () => {
4
+ it('should return empty string when params is empty', () => {
5
+ expect(generateMetaTags()).toEqual('');
6
+ });
7
+
8
+ it('should generate meta tag correctly', () => {
9
+ const options = {
10
+ foo: {
11
+ name: 'viewport',
12
+ content: 'width=500, initial-scale=1',
13
+ },
14
+ };
15
+ expect(generateMetaTags(options).trim()).toEqual(
16
+ '<meta name="viewport" content="width=500, initial-scale=1">',
17
+ );
18
+ });
19
+ });
@@ -0,0 +1,139 @@
1
+ import { prettyInstructions } from '../src/prettyInstructions';
2
+
3
+ const mockNetworkInterfaces = {
4
+ lo0: [
5
+ {
6
+ address: '127.0.0.1',
7
+ netmask: '255.0.0.0',
8
+ family: 'IPv4',
9
+ mac: '00:00:00:00:00:00',
10
+ internal: true,
11
+ cidr: '127.0.0.1/8',
12
+ },
13
+ ],
14
+ en5: [
15
+ {
16
+ address: 'fe80::aede:48ff:fe00:1122',
17
+ netmask: 'ffff:ffff:ffff:ffff::',
18
+ family: 'IPv6',
19
+ mac: 'ac:de:48:00:11:22',
20
+ internal: false,
21
+ cidr: 'fe80::aede:48ff:fe00:1122/64',
22
+ scopeid: 4,
23
+ },
24
+ ],
25
+ en0: [
26
+ {
27
+ address: '11.11.111.11',
28
+ netmask: '255.255.252.0',
29
+ family: 'IPv4',
30
+ mac: '90:9c:4a:cf:11:d2',
31
+ internal: false,
32
+ cidr: '10.85.117.60/22',
33
+ },
34
+ ],
35
+ utun2: [
36
+ {
37
+ address: '10.100.100.100',
38
+ netmask: '255.255.224.0',
39
+ family: 'IPv4',
40
+ mac: '00:00:00:00:00:00',
41
+ internal: false,
42
+ cidr: '10.255.182.172/19',
43
+ },
44
+ ],
45
+ };
46
+
47
+ jest.mock('os', () => {
48
+ const originalModule = jest.requireActual('os');
49
+ return {
50
+ __esModule: true,
51
+ ...originalModule,
52
+ default: {
53
+ networkInterfaces() {
54
+ return mockNetworkInterfaces;
55
+ },
56
+ },
57
+ };
58
+ });
59
+
60
+ jest.mock('chalk', () => ({
61
+ __esModule: true,
62
+ default: {
63
+ bold: jest.fn(str => str),
64
+ green: jest.fn(str => str),
65
+ red: jest.fn(str => str),
66
+ yellow: jest.fn(str => str),
67
+ cyanBright: jest.fn(str => str),
68
+ },
69
+ }));
70
+
71
+ describe('prettyInstructions', () => {
72
+ test('basic usage', () => {
73
+ const mockAppContext = {
74
+ entrypoints: [
75
+ {
76
+ entryName: 'main',
77
+ entry: '/example/node_modules/.modern-js/main/index.js',
78
+ isAutoMount: true,
79
+ customBootstrap: false,
80
+ },
81
+ ],
82
+ serverRoutes: [
83
+ {
84
+ urlPath: '/',
85
+ entryName: 'main',
86
+ entryPath: 'html/main/index.html',
87
+ isSPA: true,
88
+ isSSR: false,
89
+ enableModernMode: false,
90
+ },
91
+ {
92
+ urlPath: '/api',
93
+ isApi: true,
94
+ entryPath: '',
95
+ isSPA: false,
96
+ isSSR: false,
97
+ },
98
+ ],
99
+ port: 8080,
100
+ existSrc: true,
101
+ };
102
+ const mockConfig = {
103
+ dev: {
104
+ https: true,
105
+ },
106
+ };
107
+
108
+ const message = prettyInstructions(mockAppContext, mockConfig);
109
+
110
+ expect(message).toMatchSnapshot();
111
+ });
112
+
113
+ test('The src directory does not exist', () => {
114
+ const mockAppContext = {
115
+ entrypoints: [],
116
+ serverRoutes: [
117
+ {
118
+ urlPath: '/api',
119
+ isApi: true,
120
+ entryPath: '',
121
+ isSPA: false,
122
+ isSSR: false,
123
+ },
124
+ ],
125
+ port: 8080,
126
+ existSrc: false,
127
+ };
128
+
129
+ const mockConfig = {
130
+ dev: {
131
+ https: true,
132
+ },
133
+ };
134
+
135
+ const message = prettyInstructions(mockAppContext, mockConfig);
136
+
137
+ expect(message).toMatchSnapshot();
138
+ });
139
+ });
package/tests/wait.ts ADDED
@@ -0,0 +1,38 @@
1
+ import { wait } from '../src/wait';
2
+
3
+ jest.useRealTimers();
4
+
5
+ describe('wait', () => {
6
+ test('basic usage', async () => {
7
+ const fn1 = jest.fn();
8
+ const fn2 = jest.fn();
9
+ const fn3 = async () => {
10
+ fn1();
11
+ await wait();
12
+ fn2();
13
+ };
14
+
15
+ fn3();
16
+ expect(fn1).toBeCalled();
17
+ expect(fn2).not.toBeCalled();
18
+ await wait();
19
+ expect(fn2).toBeCalled();
20
+ });
21
+
22
+ test('delay', async () => {
23
+ const fn1 = jest.fn();
24
+ const fn2 = jest.fn();
25
+ const time = 100;
26
+ const fn3 = async () => {
27
+ fn1();
28
+ await wait(time);
29
+ fn2();
30
+ };
31
+
32
+ fn3();
33
+ expect(fn1).toBeCalled();
34
+ expect(fn2).not.toBeCalled();
35
+ await wait(time);
36
+ expect(fn2).toBeCalled();
37
+ });
38
+ });