@modern-js/prod-server 2.0.0-beta.0 → 2.0.0-beta.1

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 (113) hide show
  1. package/CHANGELOG.md +55 -0
  2. package/dist/js/modern/constants.js +0 -2
  3. package/dist/js/modern/index.js +0 -1
  4. package/dist/js/modern/libs/context/context.js +10 -56
  5. package/dist/js/modern/libs/hook-api/index.js +0 -31
  6. package/dist/js/modern/libs/hook-api/route.js +0 -8
  7. package/dist/js/modern/libs/hook-api/template.js +0 -16
  8. package/dist/js/modern/libs/loadConfig.js +3 -10
  9. package/dist/js/modern/libs/metrics.js +6 -6
  10. package/dist/js/modern/libs/proxy.js +7 -12
  11. package/dist/js/modern/libs/render/cache/__tests__/cache.fun.test.js +0 -1
  12. package/dist/js/modern/libs/render/cache/__tests__/cache.test.js +0 -9
  13. package/dist/js/modern/libs/render/cache/index.js +8 -16
  14. package/dist/js/modern/libs/render/cache/page-caches/lru.js +0 -10
  15. package/dist/js/modern/libs/render/cache/spr.js +12 -62
  16. package/dist/js/modern/libs/render/cache/util.js +0 -6
  17. package/dist/js/modern/libs/render/index.js +6 -11
  18. package/dist/js/modern/libs/render/measure.js +1 -11
  19. package/dist/js/modern/libs/render/modern/index.js +2 -13
  20. package/dist/js/modern/libs/render/reader.js +13 -24
  21. package/dist/js/modern/libs/render/ssr.js +5 -6
  22. package/dist/js/modern/libs/render/static.js +6 -9
  23. package/dist/js/modern/libs/render/type.js +0 -1
  24. package/dist/js/modern/libs/route/index.js +8 -19
  25. package/dist/js/modern/libs/route/matcher.js +21 -29
  26. package/dist/js/modern/libs/route/route.js +0 -13
  27. package/dist/js/modern/libs/serve-file.js +5 -6
  28. package/dist/js/modern/server/index.js +19 -41
  29. package/dist/js/modern/server/modern-server-split.js +0 -11
  30. package/dist/js/modern/server/modern-server.js +83 -164
  31. package/dist/js/modern/utils.js +2 -21
  32. package/dist/js/modern/worker-server.js +34 -0
  33. package/dist/js/node/constants.js +0 -2
  34. package/dist/js/node/index.js +0 -10
  35. package/dist/js/node/libs/context/context.js +10 -65
  36. package/dist/js/node/libs/context/index.js +0 -3
  37. package/dist/js/node/libs/hook-api/index.js +0 -42
  38. package/dist/js/node/libs/hook-api/route.js +0 -10
  39. package/dist/js/node/libs/hook-api/template.js +0 -22
  40. package/dist/js/node/libs/loadConfig.js +3 -22
  41. package/dist/js/node/libs/metrics.js +6 -6
  42. package/dist/js/node/libs/proxy.js +7 -17
  43. package/dist/js/node/libs/render/cache/__tests__/cache.fun.test.js +0 -5
  44. package/dist/js/node/libs/render/cache/__tests__/cache.test.js +0 -12
  45. package/dist/js/node/libs/render/cache/index.js +8 -22
  46. package/dist/js/node/libs/render/cache/page-caches/index.js +0 -2
  47. package/dist/js/node/libs/render/cache/page-caches/lru.js +0 -14
  48. package/dist/js/node/libs/render/cache/spr.js +12 -71
  49. package/dist/js/node/libs/render/cache/util.js +0 -18
  50. package/dist/js/node/libs/render/index.js +6 -26
  51. package/dist/js/node/libs/render/measure.js +0 -17
  52. package/dist/js/node/libs/render/modern/index.js +2 -20
  53. package/dist/js/node/libs/render/reader.js +12 -39
  54. package/dist/js/node/libs/render/ssr.js +4 -16
  55. package/dist/js/node/libs/render/static.js +6 -18
  56. package/dist/js/node/libs/render/type.js +0 -1
  57. package/dist/js/node/libs/route/index.js +8 -22
  58. package/dist/js/node/libs/route/matcher.js +18 -34
  59. package/dist/js/node/libs/route/route.js +0 -15
  60. package/dist/js/node/libs/serve-file.js +5 -13
  61. package/dist/js/node/server/index.js +19 -61
  62. package/dist/js/node/server/modern-server-split.js +0 -13
  63. package/dist/js/node/server/modern-server.js +83 -193
  64. package/dist/js/node/utils.js +3 -46
  65. package/dist/js/node/worker-server.js +41 -0
  66. package/dist/js/treeshaking/constants.js +28 -0
  67. package/dist/js/treeshaking/index.js +13 -0
  68. package/dist/js/treeshaking/libs/context/context.js +243 -0
  69. package/dist/js/treeshaking/libs/context/index.js +5 -0
  70. package/dist/js/treeshaking/libs/hook-api/index.js +157 -0
  71. package/dist/js/treeshaking/libs/hook-api/route.js +33 -0
  72. package/dist/js/treeshaking/libs/hook-api/template.js +91 -0
  73. package/dist/js/treeshaking/libs/loadConfig.js +39 -0
  74. package/dist/js/treeshaking/libs/metrics.js +12 -0
  75. package/dist/js/treeshaking/libs/proxy.js +80 -0
  76. package/dist/js/treeshaking/libs/render/cache/__tests__/cache.fun.test.js +124 -0
  77. package/dist/js/treeshaking/libs/render/cache/__tests__/cache.test.js +464 -0
  78. package/dist/js/treeshaking/libs/render/cache/__tests__/cacheable.js +53 -0
  79. package/dist/js/treeshaking/libs/render/cache/__tests__/error-configuration.js +35 -0
  80. package/dist/js/treeshaking/libs/render/cache/__tests__/matched-cache.js +121 -0
  81. package/dist/js/treeshaking/libs/render/cache/index.js +184 -0
  82. package/dist/js/treeshaking/libs/render/cache/page-caches/index.js +30 -0
  83. package/dist/js/treeshaking/libs/render/cache/page-caches/lru.js +46 -0
  84. package/dist/js/treeshaking/libs/render/cache/spr.js +362 -0
  85. package/dist/js/treeshaking/libs/render/cache/type.js +1 -0
  86. package/dist/js/treeshaking/libs/render/cache/util.js +101 -0
  87. package/dist/js/treeshaking/libs/render/index.js +100 -0
  88. package/dist/js/treeshaking/libs/render/measure.js +61 -0
  89. package/dist/js/treeshaking/libs/render/modern/browser-list.js +7 -0
  90. package/dist/js/treeshaking/libs/render/modern/index.js +39 -0
  91. package/dist/js/treeshaking/libs/render/reader.js +191 -0
  92. package/dist/js/treeshaking/libs/render/ssr.js +98 -0
  93. package/dist/js/treeshaking/libs/render/static.js +84 -0
  94. package/dist/js/treeshaking/libs/render/type.js +6 -0
  95. package/dist/js/treeshaking/libs/route/index.js +94 -0
  96. package/dist/js/treeshaking/libs/route/matcher.js +113 -0
  97. package/dist/js/treeshaking/libs/route/route.js +26 -0
  98. package/dist/js/treeshaking/libs/serve-file.js +75 -0
  99. package/dist/js/treeshaking/server/index.js +343 -0
  100. package/dist/js/treeshaking/server/modern-server-split.js +152 -0
  101. package/dist/js/treeshaking/server/modern-server.js +945 -0
  102. package/dist/js/treeshaking/type.js +1 -0
  103. package/dist/js/treeshaking/utils.js +87 -0
  104. package/dist/js/treeshaking/worker-server.js +56 -0
  105. package/dist/types/index.d.ts +0 -2
  106. package/dist/types/libs/context/context.d.ts +0 -3
  107. package/dist/types/libs/loadConfig.d.ts +0 -1
  108. package/dist/types/libs/render/cache/index.d.ts +0 -2
  109. package/dist/types/libs/render/cache/spr.d.ts +0 -2
  110. package/dist/types/server/index.d.ts +0 -3
  111. package/dist/types/utils.d.ts +0 -1
  112. package/dist/types/worker-server.d.ts +16 -0
  113. package/package.json +28 -12
@@ -4,21 +4,14 @@ Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
6
  exports.updateFile = exports.readFile = exports.init = exports.close = exports.LruReader = void 0;
7
-
8
7
  var _utils = require("@modern-js/utils");
9
-
10
8
  var _lruCache = _interopRequireDefault(require("lru-cache"));
11
-
12
9
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
13
-
14
10
  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; }
15
-
16
11
  const Byte = 1;
17
12
  const KB = 1024 * Byte;
18
13
  const MB = 1024 * KB;
19
-
20
14
  const getContentLength = cache => cache.content.length;
21
-
22
15
  const createCacheItem = async (filepath, mtime) => {
23
16
  const content = await _utils.fs.readFile(filepath);
24
17
  return {
@@ -26,28 +19,26 @@ const createCacheItem = async (filepath, mtime) => {
26
19
  mtime
27
20
  };
28
21
  };
29
-
30
22
  class LruReader {
31
23
  // private timer?: NodeJS.Timeout;
24
+
32
25
  constructor() {
33
26
  _defineProperty(this, "cache", void 0);
34
-
35
27
  this.cache = new _lruCache.default({
36
28
  max: 256 * MB,
37
29
  length: getContentLength,
38
30
  maxAge: 5 * 60 * 5000 // 60s
39
-
40
31
  });
41
32
  }
42
33
 
43
- init() {// this.timeTask();
34
+ init() {
35
+ // this.timeTask();
44
36
  }
45
-
46
- close() {// if (this.timer) {
37
+ close() {
38
+ // if (this.timer) {
47
39
  // clearInterval(this.timer);
48
40
  // }
49
41
  }
50
-
51
42
  async read(filepath) {
52
43
  if (this.cache.has(filepath)) {
53
44
  const {
@@ -57,47 +48,38 @@ class LruReader {
57
48
  content
58
49
  };
59
50
  }
60
-
61
51
  if (!_utils.fs.existsSync(filepath)) {
62
52
  return null;
63
53
  }
64
-
65
54
  const stat = _utils.fs.statSync(filepath);
66
-
67
55
  if (stat.isDirectory()) {
68
56
  return null;
69
- } // if file more than 20 MB
70
-
57
+ }
71
58
 
59
+ // if file more than 20 MB
72
60
  if (stat.size > 20 * MB) {
73
61
  return null;
74
62
  }
75
-
76
63
  const item = await createCacheItem(filepath, stat.mtime);
77
64
  this.cache.set(filepath, item);
78
65
  return item;
79
66
  }
80
-
81
67
  update() {
82
68
  const {
83
69
  cache
84
70
  } = this;
85
71
  const files = cache.keys();
86
-
87
72
  for (const filepath of files) {
88
73
  if (!_utils.fs.existsSync(filepath)) {
89
74
  cache.del(filepath);
90
75
  }
91
-
92
76
  try {
93
77
  const item = cache.get(filepath);
94
-
95
78
  const stat = _utils.fs.statSync(filepath);
96
-
97
79
  const {
98
80
  mtime
99
- } = stat; // file is modify
100
-
81
+ } = stat;
82
+ // file is modify
101
83
  if (item.mtime < mtime) {
102
84
  cache.del(filepath);
103
85
  }
@@ -106,37 +88,28 @@ class LruReader {
106
88
  cache.del(filepath);
107
89
  }
108
90
  }
109
- } // private timeTask() {
91
+ }
92
+
93
+ // private timeTask() {
110
94
  // this.timer = setInterval(() => this.update, 5 * 60 * 1000).unref();
111
95
  // }
112
-
113
-
114
96
  }
115
-
116
97
  exports.LruReader = LruReader;
117
98
  const reader = new LruReader();
118
-
119
99
  const readFile = async filepath => {
120
100
  const file = await reader.read(filepath);
121
101
  return file === null || file === void 0 ? void 0 : file.content;
122
102
  };
123
-
124
103
  exports.readFile = readFile;
125
-
126
104
  const updateFile = () => {
127
105
  reader.update();
128
106
  };
129
-
130
107
  exports.updateFile = updateFile;
131
-
132
108
  const init = () => {
133
109
  reader.init();
134
110
  };
135
-
136
111
  exports.init = init;
137
-
138
112
  const close = () => {
139
113
  reader.close();
140
114
  };
141
-
142
115
  exports.close = close;
@@ -4,22 +4,14 @@ Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
6
  exports.render = void 0;
7
-
8
7
  var _path = _interopRequireDefault(require("path"));
9
-
10
8
  var _utils = require("@modern-js/utils");
11
-
12
9
  var _cookie = _interopRequireDefault(require("cookie"));
13
-
14
10
  var _cache = _interopRequireDefault(require("./cache"));
15
-
16
11
  var _measure = require("./measure");
17
-
18
12
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
19
-
20
13
  const render = async (ctx, renderOptions, runner) => {
21
14
  var _ctx$res;
22
-
23
15
  const {
24
16
  urlPath,
25
17
  bundle,
@@ -28,12 +20,11 @@ const render = async (ctx, renderOptions, runner) => {
28
20
  entryName,
29
21
  staticGenerate
30
22
  } = renderOptions;
31
-
32
23
  const bundleJS = _path.default.join(distDir, bundle);
33
-
34
24
  const loadableUri = _path.default.join(distDir, _utils.LOADABLE_STATS_FILE);
35
-
36
25
  const loadableStats = _utils.fs.existsSync(loadableUri) ? require(loadableUri) : '';
26
+ const routesManifestUri = _path.default.join(distDir, _utils.ROUTE_MINIFEST_FILE);
27
+ const routeManifest = _utils.fs.existsSync(routesManifestUri) ? require(routesManifestUri) : undefined;
37
28
  const context = {
38
29
  request: {
39
30
  baseUrl: urlPath,
@@ -57,6 +48,8 @@ const render = async (ctx, renderOptions, runner) => {
57
48
  redirection: {},
58
49
  template,
59
50
  loadableStats,
51
+ routeManifest,
52
+ // for streaming ssr
60
53
  entryName,
61
54
  staticGenerate,
62
55
  logger: undefined,
@@ -67,15 +60,12 @@ const render = async (ctx, renderOptions, runner) => {
67
60
  context.logger = (0, _measure.createLogger)(context, ctx.logger);
68
61
  context.metrics = (0, _measure.createMetrics)(context, ctx.metrics);
69
62
  runner.extendSSRContext(context);
70
-
71
63
  const serverRender = require(bundleJS)[_utils.SERVER_RENDER_FUNCTION_NAME];
72
-
73
64
  const content = await (0, _cache.default)(serverRender, ctx)(context);
74
65
  const {
75
66
  url,
76
67
  status = 302
77
68
  } = context.redirection;
78
-
79
69
  if (url) {
80
70
  return {
81
71
  content: url,
@@ -84,7 +74,6 @@ const render = async (ctx, renderOptions, runner) => {
84
74
  redirect: true
85
75
  };
86
76
  }
87
-
88
77
  if (typeof content === 'string') {
89
78
  return {
90
79
  content,
@@ -98,5 +87,4 @@ const render = async (ctx, renderOptions, runner) => {
98
87
  };
99
88
  }
100
89
  };
101
-
102
90
  exports.render = render;
@@ -4,59 +4,47 @@ Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
6
  exports.handleDirectory = handleDirectory;
7
-
8
7
  var _path = _interopRequireDefault(require("path"));
9
-
10
8
  var _utils = require("@modern-js/utils");
11
-
12
9
  var _reader = require("./reader");
13
-
14
10
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
15
-
16
11
  async function handleDirectory(ctx, entryPath, urlPath) {
17
12
  const {
18
13
  path: pathname
19
14
  } = ctx;
15
+ const filepath = _path.default.join(entryPath, trimLeft(pathname, urlPath));
20
16
 
21
- const filepath = _path.default.join(entryPath, trimLeft(pathname, urlPath)); // If can match accurately, always return the one that matches accurately
22
-
23
-
17
+ // If can match accurately, always return the one that matches accurately
24
18
  let content = await (0, _reader.readFile)(filepath);
19
+ let contentType = _utils.mime.contentType(_path.default.extname(filepath) || '');
25
20
 
26
- let contentType = _utils.mime.contentType(_path.default.extname(filepath) || ''); // automatic addressing
27
-
28
-
21
+ // automatic addressing
29
22
  if (!content) {
30
23
  if (pathname.endsWith('/')) {
31
24
  content = await (0, _reader.readFile)(`${filepath}index.html`);
32
25
  } else if (!pathname.includes('.')) {
33
26
  content = await (0, _reader.readFile)(`${filepath}.html`);
34
-
35
27
  if (!content) {
36
28
  content = await (0, _reader.readFile)(`${filepath}/index.html`);
37
29
  }
38
- } // set content-type as html
39
-
30
+ }
40
31
 
32
+ // set content-type as html
41
33
  if (content) {
42
34
  contentType = _utils.mime.contentType('html');
43
35
  }
44
36
  }
45
-
46
37
  if (!content) {
47
38
  return null;
48
39
  }
49
-
50
40
  return {
51
41
  content,
52
42
  contentType: contentType || ''
53
43
  };
54
44
  }
55
-
56
45
  const trimLeft = (str, prefix) => {
57
46
  if (str.startsWith(prefix)) {
58
47
  return str.substring(prefix.length);
59
48
  }
60
-
61
49
  return str;
62
50
  };
@@ -6,7 +6,6 @@ Object.defineProperty(exports, "__esModule", {
6
6
  exports.RenderLevel = void 0;
7
7
  let RenderLevel;
8
8
  exports.RenderLevel = RenderLevel;
9
-
10
9
  (function (RenderLevel) {
11
10
  RenderLevel[RenderLevel["CLIENT_RENDER"] = 0] = "CLIENT_RENDER";
12
11
  RenderLevel[RenderLevel["SERVER_PREFETCH"] = 1] = "SERVER_PREFETCH";
@@ -10,53 +10,43 @@ Object.defineProperty(exports, "RouteMatcher", {
10
10
  return _matcher.RouteMatcher;
11
11
  }
12
12
  });
13
-
14
13
  var _matcher = require("./matcher");
15
-
16
14
  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; }
17
-
18
15
  class RouteMatchManager {
19
16
  constructor() {
20
17
  _defineProperty(this, "matchers", void 0);
21
-
22
18
  _defineProperty(this, "specs", []);
23
-
24
19
  this.matchers = [];
25
- } // get all routes matches pathname
26
-
20
+ }
27
21
 
22
+ // get all routes matches pathname
28
23
  filter(pathname) {
29
24
  return this.matchers.reduce((matches, matcher) => {
30
25
  if (matcher.matchUrlPath(pathname)) {
31
26
  matches.push(matcher);
32
27
  }
33
-
34
28
  return matches;
35
29
  }, []);
36
- } // get best match from a set of matches
37
-
30
+ }
38
31
 
32
+ // get best match from a set of matches
39
33
  best(pathname, matches) {
40
34
  let best;
41
35
  let matchedLen = 0;
42
-
43
36
  for (const match of matches) {
44
37
  const len = match.matchLength(pathname);
45
-
46
38
  if (len === null) {
47
39
  continue;
48
40
  }
49
-
50
41
  if (len > matchedLen) {
51
42
  best = match;
52
43
  matchedLen = len;
53
44
  }
54
45
  }
55
-
56
46
  return best;
57
- } // reset routes matcher
58
-
47
+ }
59
48
 
49
+ // reset routes matcher
60
50
  reset(specs) {
61
51
  this.specs = specs;
62
52
  const matchers = specs.reduce((ms, spec) => {
@@ -64,24 +54,20 @@ class RouteMatchManager {
64
54
  return ms;
65
55
  }, []);
66
56
  this.matchers = matchers;
67
- } // get best match from all matcher in manager
68
-
57
+ }
69
58
 
59
+ // get best match from all matcher in manager
70
60
  match(pathname) {
71
61
  const matches = this.filter(pathname);
72
62
  const best = this.best(pathname, matches);
73
63
  return best;
74
64
  }
75
-
76
65
  matchEntry(entryname) {
77
66
  return this.matchers.find(matcher => matcher.matchEntry(entryname));
78
67
  }
79
-
80
68
  getBundles() {
81
69
  const bundles = this.specs.filter(route => route.isSSR).map(route => route.bundle);
82
70
  return bundles;
83
71
  }
84
-
85
72
  }
86
-
87
73
  exports.RouteMatchManager = RouteMatchManager;
@@ -4,47 +4,40 @@ Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
6
  exports.RouteMatcher = void 0;
7
-
8
- var _utils = require("@modern-js/utils");
9
-
10
7
  var _pathToRegexp = require("path-to-regexp");
11
-
12
- var _utils2 = require("../../utils");
13
-
14
8
  var _route = require("./route");
15
-
16
9
  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; }
10
+ // avoid import @modern-js/utils
11
+ const removeTailSlash = s => s.replace(/\/+$/, '');
12
+ const toPath = (reg, params) => {
13
+ const fn = (0, _pathToRegexp.compile)(reg, {
14
+ encode: encodeURIComponent
15
+ });
16
+ return fn(params);
17
+ };
17
18
 
18
19
  // eslint-disable-next-line no-useless-escape
19
20
  const regCharsDetector = /[^a-zA-Z\-_0-9\/\.]/;
20
-
21
21
  class RouteMatcher {
22
22
  constructor(spec) {
23
23
  _defineProperty(this, "spec", void 0);
24
-
25
24
  _defineProperty(this, "urlPath", '');
26
-
27
25
  _defineProperty(this, "urlMatcher", void 0);
28
-
29
26
  _defineProperty(this, "urlReg", void 0);
30
-
31
27
  this.spec = spec;
32
28
  this.setupUrlPath();
33
- } // generate modern route object
34
-
29
+ }
35
30
 
31
+ // generate modern route object
36
32
  generate(url) {
37
33
  const route = new _route.ModernRoute(this.spec);
38
-
39
34
  if (this.urlPath) {
40
35
  const params = this.parseURLParams(url);
41
- route.urlPath = (0, _utils2.toPath)(route.urlPath, params);
36
+ route.urlPath = toPath(route.urlPath, params);
42
37
  route.params = params;
43
38
  }
44
-
45
39
  return route;
46
40
  }
47
-
48
41
  parseURLParams(pathname) {
49
42
  if (!this.urlMatcher) {
50
43
  return {};
@@ -52,28 +45,25 @@ class RouteMatcher {
52
45
  const matchResult = this.urlMatcher(pathname);
53
46
  return matchResult.params;
54
47
  }
55
- } // get match url length
56
-
48
+ }
57
49
 
50
+ // get match url length
58
51
  matchLength(pathname) {
59
52
  if (!this.urlReg) {
60
53
  return this.urlPath.length;
61
54
  } else {
62
55
  var _result$;
63
-
64
56
  const result = this.urlReg.exec(pathname);
65
57
  return (result === null || result === void 0 ? void 0 : (_result$ = result[0]) === null || _result$ === void 0 ? void 0 : _result$.length) || null;
66
58
  }
67
- } // if match url path
68
-
59
+ }
69
60
 
61
+ // if match url path
70
62
  matchUrlPath(requestUrl) {
71
63
  let urlWithoutSlash = requestUrl.endsWith('/') && requestUrl !== '/' ? requestUrl.slice(0, -1) : requestUrl;
72
-
73
64
  if (urlWithoutSlash.endsWith('.html')) {
74
65
  urlWithoutSlash = urlWithoutSlash.slice(0, -5);
75
66
  }
76
-
77
67
  if (this.urlMatcher) {
78
68
  return Boolean(this.urlMatcher(urlWithoutSlash));
79
69
  } else {
@@ -82,26 +72,22 @@ class RouteMatcher {
82
72
  if (this.urlPath !== '/' && urlWithoutSlash.length > this.urlPath.length && !urlWithoutSlash.startsWith(`${this.urlPath}/`)) {
83
73
  return false;
84
74
  }
85
-
86
75
  return true;
87
76
  }
88
-
89
77
  return false;
90
78
  }
91
79
  }
92
-
93
80
  matchEntry(entryName) {
94
81
  return this.spec.entryName === entryName;
95
- } // compiler urlPath to regexp if necessary
96
-
82
+ }
97
83
 
84
+ // compiler urlPath to regexp if necessary
98
85
  setupUrlPath() {
99
86
  const {
100
87
  urlPath
101
88
  } = this.spec;
102
- this.urlPath = urlPath === '/' ? urlPath : (0, _utils.removeTailSlash)(urlPath);
89
+ this.urlPath = urlPath === '/' ? urlPath : removeTailSlash(urlPath);
103
90
  const useReg = regCharsDetector.test(urlPath);
104
-
105
91
  if (useReg) {
106
92
  this.urlMatcher = (0, _pathToRegexp.match)(urlPath, {
107
93
  end: false,
@@ -112,7 +98,5 @@ class RouteMatcher {
112
98
  });
113
99
  }
114
100
  }
115
-
116
101
  }
117
-
118
102
  exports.RouteMatcher = RouteMatcher;
@@ -4,33 +4,20 @@ Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
6
  exports.ModernRoute = void 0;
7
-
8
7
  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; }
9
-
10
8
  class ModernRoute {
11
9
  constructor(routeSpec) {
12
10
  var _routeSpec$enableMode;
13
-
14
11
  _defineProperty(this, "entryName", void 0);
15
-
16
12
  _defineProperty(this, "urlPath", void 0);
17
-
18
13
  _defineProperty(this, "entryPath", void 0);
19
-
20
14
  _defineProperty(this, "bundle", void 0);
21
-
22
15
  _defineProperty(this, "isApi", void 0);
23
-
24
16
  _defineProperty(this, "isSSR", void 0);
25
-
26
17
  _defineProperty(this, "isSPA", void 0);
27
-
28
18
  _defineProperty(this, "enableModernMode", void 0);
29
-
30
19
  _defineProperty(this, "params", {});
31
-
32
20
  _defineProperty(this, "responseHeaders", void 0);
33
-
34
21
  this.entryName = routeSpec.entryName || '';
35
22
  this.urlPath = routeSpec.urlPath;
36
23
  this.entryPath = routeSpec.entryPath || '';
@@ -41,7 +28,5 @@ class ModernRoute {
41
28
  this.enableModernMode = (_routeSpec$enableMode = routeSpec.enableModernMode) !== null && _routeSpec$enableMode !== void 0 ? _routeSpec$enableMode : false;
42
29
  this.responseHeaders = routeSpec.responseHeaders;
43
30
  }
44
-
45
31
  }
46
-
47
32
  exports.ModernRoute = ModernRoute;
@@ -4,16 +4,12 @@ Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
6
  exports.faviconFallbackHandler = exports.createStaticFileHandler = void 0;
7
-
8
7
  var _serveStatic = _interopRequireDefault(require("serve-static"));
9
-
10
8
  var _utils = require("@modern-js/utils");
11
-
12
9
  var _utils2 = require("../utils");
13
-
14
10
  function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
15
-
16
11
  // Todo 看看是不是能 fork 一份,即使命中也返回
12
+
17
13
  const removedPrefix = (req, prefix) => {
18
14
  if ((0, _utils2.useLocalPrefix)(prefix)) {
19
15
  req.url = req.url.slice(prefix.length);
@@ -21,11 +17,11 @@ const removedPrefix = (req, prefix) => {
21
17
  req.url = prefix + req.url;
22
18
  };
23
19
  } else {
24
- return () => {// emptyy
20
+ return () => {
21
+ // emptyy
25
22
  };
26
23
  }
27
24
  };
28
-
29
25
  const faviconFallbackHandler = (context, next) => {
30
26
  if (context.url === '/favicon.ico') {
31
27
  context.res.statusCode = 204;
@@ -34,10 +30,9 @@ const faviconFallbackHandler = (context, next) => {
34
30
  next();
35
31
  }
36
32
  };
37
-
38
33
  exports.faviconFallbackHandler = faviconFallbackHandler;
39
-
40
- const createStaticFileHandler = (rules, output = {}) => // eslint-disable-next-line consistent-return
34
+ const createStaticFileHandler = (rules, output = {}) =>
35
+ // eslint-disable-next-line consistent-return
41
36
  async (context, next) => {
42
37
  const {
43
38
  url: requestUrl,
@@ -53,10 +48,8 @@ async (context, next) => {
53
48
  } else if ((0, _utils.isRegExp)(item.path) && item.path.test(requestUrl)) {
54
49
  return true;
55
50
  }
56
-
57
51
  return false;
58
52
  });
59
-
60
53
  if (hitRule) {
61
54
  const resume = removedPrefix(req, assetPrefix);
62
55
  (0, _serveStatic.default)(hitRule.target)(req, res, () => {
@@ -67,5 +60,4 @@ async (context, next) => {
67
60
  return next();
68
61
  }
69
62
  };
70
-
71
63
  exports.createStaticFileHandler = createStaticFileHandler;