@modern-js/prod-server 2.19.0 → 2.20.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 (69) hide show
  1. package/CHANGELOG.md +20 -0
  2. package/dist/cjs/index.js +3 -15
  3. package/dist/cjs/libs/context/context.js +10 -26
  4. package/dist/cjs/libs/hook-api/index.js +13 -29
  5. package/dist/cjs/libs/hook-api/route.js +4 -16
  6. package/dist/cjs/libs/hook-api/template.js +2 -14
  7. package/dist/cjs/libs/loadConfig.js +4 -47
  8. package/dist/cjs/libs/logger.js +5 -17
  9. package/dist/cjs/libs/render/cache/__tests__/cache.fun.test.js +2 -6
  10. package/dist/cjs/libs/render/cache/page-caches/lru.js +5 -21
  11. package/dist/cjs/libs/render/cache/spr.js +7 -23
  12. package/dist/cjs/libs/render/cache/util.js +2 -6
  13. package/dist/cjs/libs/render/index.js +4 -47
  14. package/dist/cjs/libs/render/reader.js +4 -20
  15. package/dist/cjs/libs/render/ssr.js +3 -7
  16. package/dist/cjs/libs/render/static.js +2 -6
  17. package/dist/cjs/libs/route/index.js +3 -15
  18. package/dist/cjs/libs/route/matcher.js +5 -17
  19. package/dist/cjs/libs/route/route.js +10 -22
  20. package/dist/cjs/libs/serveFile.js +2 -6
  21. package/dist/cjs/server/index.js +9 -25
  22. package/dist/cjs/server/modernServer.js +25 -80
  23. package/dist/cjs/workerServer.js +103 -48
  24. package/dist/esm/libs/context/context.js +4 -42
  25. package/dist/esm/libs/hook-api/index.js +6 -132
  26. package/dist/esm/libs/hook-api/route.js +3 -35
  27. package/dist/esm/libs/hook-api/template.js +3 -35
  28. package/dist/esm/libs/loadConfig.js +2 -52
  29. package/dist/esm/libs/logger.js +7 -101
  30. package/dist/esm/libs/proxy.js +5 -194
  31. package/dist/esm/libs/render/cache/__tests__/cache.fun.test.js +6 -192
  32. package/dist/esm/libs/render/cache/__tests__/cache.test.js +13 -202
  33. package/dist/esm/libs/render/cache/index.js +8 -164
  34. package/dist/esm/libs/render/cache/page-caches/index.js +3 -132
  35. package/dist/esm/libs/render/cache/page-caches/lru.js +3 -35
  36. package/dist/esm/libs/render/cache/spr.js +10 -171
  37. package/dist/esm/libs/render/cache/util.js +6 -211
  38. package/dist/esm/libs/render/index.js +3 -132
  39. package/dist/esm/libs/render/measure.js +4 -93
  40. package/dist/esm/libs/render/reader.js +8 -169
  41. package/dist/esm/libs/render/ssr.js +3 -132
  42. package/dist/esm/libs/render/static.js +3 -132
  43. package/dist/esm/libs/route/index.js +3 -35
  44. package/dist/esm/libs/route/matcher.js +3 -35
  45. package/dist/esm/libs/route/route.js +2 -18
  46. package/dist/esm/libs/serveFile.js +3 -132
  47. package/dist/esm/server/index.js +16 -247
  48. package/dist/esm/server/modernServer.js +21 -227
  49. package/dist/esm/server/modernServerSplit.js +12 -253
  50. package/dist/esm/utils.js +2 -62
  51. package/dist/esm/workerServer.js +134 -190
  52. package/dist/esm-node/libs/context/context.js +1 -13
  53. package/dist/esm-node/libs/hook-api/index.js +1 -13
  54. package/dist/esm-node/libs/hook-api/route.js +1 -13
  55. package/dist/esm-node/libs/hook-api/template.js +1 -13
  56. package/dist/esm-node/libs/logger.js +1 -13
  57. package/dist/esm-node/libs/render/cache/page-caches/lru.js +1 -13
  58. package/dist/esm-node/libs/render/cache/spr.js +1 -13
  59. package/dist/esm-node/libs/render/reader.js +1 -13
  60. package/dist/esm-node/libs/route/index.js +1 -13
  61. package/dist/esm-node/libs/route/matcher.js +1 -13
  62. package/dist/esm-node/libs/route/route.js +1 -13
  63. package/dist/esm-node/server/index.js +1 -13
  64. package/dist/esm-node/server/modernServer.js +1 -13
  65. package/dist/esm-node/workerServer.js +102 -47
  66. package/dist/types/libs/context/context.d.ts +1 -1
  67. package/dist/types/utils.d.ts +1 -1
  68. package/dist/types/workerServer.d.ts +33 -4
  69. package/package.json +8 -7
@@ -1,169 +1,8 @@
1
- function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) {
2
- try {
3
- var info = gen[key](arg);
4
- var value = info.value;
5
- } catch (error) {
6
- reject(error);
7
- return;
8
- }
9
- if (info.done) {
10
- resolve(value);
11
- } else {
12
- Promise.resolve(value).then(_next, _throw);
13
- }
14
- }
15
- function _async_to_generator(fn) {
16
- return function() {
17
- var self = this, args = arguments;
18
- return new Promise(function(resolve, reject) {
19
- var gen = fn.apply(self, args);
20
- function _next(value) {
21
- asyncGeneratorStep(gen, resolve, reject, _next, _throw, "next", value);
22
- }
23
- function _throw(err) {
24
- asyncGeneratorStep(gen, resolve, reject, _next, _throw, "throw", err);
25
- }
26
- _next(void 0);
27
- });
28
- };
29
- }
30
- function _class_call_check(instance, Constructor) {
31
- if (!(instance instanceof Constructor)) {
32
- throw new TypeError("Cannot call a class as a function");
33
- }
34
- }
35
- function _defineProperties(target, props) {
36
- for (var i = 0; i < props.length; i++) {
37
- var descriptor = props[i];
38
- descriptor.enumerable = descriptor.enumerable || false;
39
- descriptor.configurable = true;
40
- if ("value" in descriptor)
41
- descriptor.writable = true;
42
- Object.defineProperty(target, descriptor.key, descriptor);
43
- }
44
- }
45
- function _create_class(Constructor, protoProps, staticProps) {
46
- if (protoProps)
47
- _defineProperties(Constructor.prototype, protoProps);
48
- if (staticProps)
49
- _defineProperties(Constructor, staticProps);
50
- return Constructor;
51
- }
52
- function _define_property(obj, key, value) {
53
- if (key in obj) {
54
- Object.defineProperty(obj, key, {
55
- value: value,
56
- enumerable: true,
57
- configurable: true,
58
- writable: true
59
- });
60
- } else {
61
- obj[key] = value;
62
- }
63
- return obj;
64
- }
65
- var __generator = function(thisArg, body) {
66
- var f, y, t, g, _ = {
67
- label: 0,
68
- sent: function() {
69
- if (t[0] & 1)
70
- throw t[1];
71
- return t[1];
72
- },
73
- trys: [],
74
- ops: []
75
- };
76
- return g = {
77
- next: verb(0),
78
- "throw": verb(1),
79
- "return": verb(2)
80
- }, typeof Symbol === "function" && (g[Symbol.iterator] = function() {
81
- return this;
82
- }), g;
83
- function verb(n) {
84
- return function(v) {
85
- return step([
86
- n,
87
- v
88
- ]);
89
- };
90
- }
91
- function step(op) {
92
- if (f)
93
- throw new TypeError("Generator is already executing.");
94
- while (_)
95
- try {
96
- if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done)
97
- return t;
98
- if (y = 0, t)
99
- op = [
100
- op[0] & 2,
101
- t.value
102
- ];
103
- switch (op[0]) {
104
- case 0:
105
- case 1:
106
- t = op;
107
- break;
108
- case 4:
109
- _.label++;
110
- return {
111
- value: op[1],
112
- done: false
113
- };
114
- case 5:
115
- _.label++;
116
- y = op[1];
117
- op = [
118
- 0
119
- ];
120
- continue;
121
- case 7:
122
- op = _.ops.pop();
123
- _.trys.pop();
124
- continue;
125
- default:
126
- if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) {
127
- _ = 0;
128
- continue;
129
- }
130
- if (op[0] === 3 && (!t || op[1] > t[0] && op[1] < t[3])) {
131
- _.label = op[1];
132
- break;
133
- }
134
- if (op[0] === 6 && _.label < t[1]) {
135
- _.label = t[1];
136
- t = op;
137
- break;
138
- }
139
- if (t && _.label < t[2]) {
140
- _.label = t[2];
141
- _.ops.push(op);
142
- break;
143
- }
144
- if (t[2])
145
- _.ops.pop();
146
- _.trys.pop();
147
- continue;
148
- }
149
- op = body.call(thisArg, _);
150
- } catch (e) {
151
- op = [
152
- 6,
153
- e
154
- ];
155
- y = 0;
156
- } finally {
157
- f = t = 0;
158
- }
159
- if (op[0] & 5)
160
- throw op[1];
161
- return {
162
- value: op[0] ? op[1] : void 0,
163
- done: true
164
- };
165
- }
166
- };
1
+ import { _ as _async_to_generator } from "@swc/helpers/_/_async_to_generator";
2
+ import { _ as _class_call_check } from "@swc/helpers/_/_class_call_check";
3
+ import { _ as _create_class } from "@swc/helpers/_/_create_class";
4
+ import { _ as _define_property } from "@swc/helpers/_/_define_property";
5
+ import { _ as _ts_generator } from "@swc/helpers/_/_ts_generator";
167
6
  import { fs } from "@modern-js/utils";
168
7
  import LRU from "lru-cache";
169
8
  var Byte = 1;
@@ -175,7 +14,7 @@ var getContentLength = function(cache) {
175
14
  var createCacheItem = function() {
176
15
  var _ref = _async_to_generator(function(filepath, mtime) {
177
16
  var content;
178
- return __generator(this, function(_state) {
17
+ return _ts_generator(this, function(_state) {
179
18
  switch (_state.label) {
180
19
  case 0:
181
20
  return [
@@ -226,7 +65,7 @@ export var LruReader = /* @__PURE__ */ function() {
226
65
  var _this = this;
227
66
  return _async_to_generator(function() {
228
67
  var content, stat, item;
229
- return __generator(this, function(_state) {
68
+ return _ts_generator(this, function(_state) {
230
69
  switch (_state.label) {
231
70
  case 0:
232
71
  if (_this.cache.has(filepath)) {
@@ -319,7 +158,7 @@ var reader = new LruReader();
319
158
  export var readFile = function() {
320
159
  var _ref = _async_to_generator(function(filepath) {
321
160
  var file;
322
- return __generator(this, function(_state) {
161
+ return _ts_generator(this, function(_state) {
323
162
  switch (_state.label) {
324
163
  case 0:
325
164
  return [
@@ -1,134 +1,5 @@
1
- function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) {
2
- try {
3
- var info = gen[key](arg);
4
- var value = info.value;
5
- } catch (error) {
6
- reject(error);
7
- return;
8
- }
9
- if (info.done) {
10
- resolve(value);
11
- } else {
12
- Promise.resolve(value).then(_next, _throw);
13
- }
14
- }
15
- function _async_to_generator(fn) {
16
- return function() {
17
- var self = this, args = arguments;
18
- return new Promise(function(resolve, reject) {
19
- var gen = fn.apply(self, args);
20
- function _next(value) {
21
- asyncGeneratorStep(gen, resolve, reject, _next, _throw, "next", value);
22
- }
23
- function _throw(err) {
24
- asyncGeneratorStep(gen, resolve, reject, _next, _throw, "throw", err);
25
- }
26
- _next(void 0);
27
- });
28
- };
29
- }
30
- var __generator = function(thisArg, body) {
31
- var f, y, t, g, _ = {
32
- label: 0,
33
- sent: function() {
34
- if (t[0] & 1)
35
- throw t[1];
36
- return t[1];
37
- },
38
- trys: [],
39
- ops: []
40
- };
41
- return g = {
42
- next: verb(0),
43
- "throw": verb(1),
44
- "return": verb(2)
45
- }, typeof Symbol === "function" && (g[Symbol.iterator] = function() {
46
- return this;
47
- }), g;
48
- function verb(n) {
49
- return function(v) {
50
- return step([
51
- n,
52
- v
53
- ]);
54
- };
55
- }
56
- function step(op) {
57
- if (f)
58
- throw new TypeError("Generator is already executing.");
59
- while (_)
60
- try {
61
- if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done)
62
- return t;
63
- if (y = 0, t)
64
- op = [
65
- op[0] & 2,
66
- t.value
67
- ];
68
- switch (op[0]) {
69
- case 0:
70
- case 1:
71
- t = op;
72
- break;
73
- case 4:
74
- _.label++;
75
- return {
76
- value: op[1],
77
- done: false
78
- };
79
- case 5:
80
- _.label++;
81
- y = op[1];
82
- op = [
83
- 0
84
- ];
85
- continue;
86
- case 7:
87
- op = _.ops.pop();
88
- _.trys.pop();
89
- continue;
90
- default:
91
- if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) {
92
- _ = 0;
93
- continue;
94
- }
95
- if (op[0] === 3 && (!t || op[1] > t[0] && op[1] < t[3])) {
96
- _.label = op[1];
97
- break;
98
- }
99
- if (op[0] === 6 && _.label < t[1]) {
100
- _.label = t[1];
101
- t = op;
102
- break;
103
- }
104
- if (t && _.label < t[2]) {
105
- _.label = t[2];
106
- _.ops.push(op);
107
- break;
108
- }
109
- if (t[2])
110
- _.ops.pop();
111
- _.trys.pop();
112
- continue;
113
- }
114
- op = body.call(thisArg, _);
115
- } catch (e) {
116
- op = [
117
- 6,
118
- e
119
- ];
120
- y = 0;
121
- } finally {
122
- f = t = 0;
123
- }
124
- if (op[0] & 5)
125
- throw op[1];
126
- return {
127
- value: op[0] ? op[1] : void 0,
128
- done: true
129
- };
130
- }
131
- };
1
+ import { _ as _async_to_generator } from "@swc/helpers/_/_async_to_generator";
2
+ import { _ as _ts_generator } from "@swc/helpers/_/_ts_generator";
132
3
  import path from "path";
133
4
  import { fs, mime, LOADABLE_STATS_FILE, ROUTE_MANIFEST_FILE, SERVER_RENDER_FUNCTION_NAME } from "@modern-js/utils";
134
5
  import cache from "./cache";
@@ -137,7 +8,7 @@ import { injectServerDataStream, injectServerData } from "./utils";
137
8
  export var render = function() {
138
9
  var _ref = _async_to_generator(function(ctx, renderOptions, runner) {
139
10
  var _ctx_res, urlPath, bundle, distDir, template, entryName, staticGenerate, _renderOptions_enableUnsafeCtx, enableUnsafeCtx, bundleJS, loadableUri, loadableStats, routesManifestUri, routeManifest, context, serverRender, content, _context_redirection, url, _context_redirection_status, status;
140
- return __generator(this, function(_state) {
11
+ return _ts_generator(this, function(_state) {
141
12
  switch (_state.label) {
142
13
  case 0:
143
14
  urlPath = renderOptions.urlPath, bundle = renderOptions.bundle, distDir = renderOptions.distDir, template = renderOptions.template, entryName = renderOptions.entryName, staticGenerate = renderOptions.staticGenerate, _renderOptions_enableUnsafeCtx = renderOptions.enableUnsafeCtx, enableUnsafeCtx = _renderOptions_enableUnsafeCtx === void 0 ? false : _renderOptions_enableUnsafeCtx;
@@ -1,134 +1,5 @@
1
- function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) {
2
- try {
3
- var info = gen[key](arg);
4
- var value = info.value;
5
- } catch (error) {
6
- reject(error);
7
- return;
8
- }
9
- if (info.done) {
10
- resolve(value);
11
- } else {
12
- Promise.resolve(value).then(_next, _throw);
13
- }
14
- }
15
- function _async_to_generator(fn) {
16
- return function() {
17
- var self = this, args = arguments;
18
- return new Promise(function(resolve, reject) {
19
- var gen = fn.apply(self, args);
20
- function _next(value) {
21
- asyncGeneratorStep(gen, resolve, reject, _next, _throw, "next", value);
22
- }
23
- function _throw(err) {
24
- asyncGeneratorStep(gen, resolve, reject, _next, _throw, "throw", err);
25
- }
26
- _next(void 0);
27
- });
28
- };
29
- }
30
- var __generator = function(thisArg, body) {
31
- var f, y, t, g, _ = {
32
- label: 0,
33
- sent: function() {
34
- if (t[0] & 1)
35
- throw t[1];
36
- return t[1];
37
- },
38
- trys: [],
39
- ops: []
40
- };
41
- return g = {
42
- next: verb(0),
43
- "throw": verb(1),
44
- "return": verb(2)
45
- }, typeof Symbol === "function" && (g[Symbol.iterator] = function() {
46
- return this;
47
- }), g;
48
- function verb(n) {
49
- return function(v) {
50
- return step([
51
- n,
52
- v
53
- ]);
54
- };
55
- }
56
- function step(op) {
57
- if (f)
58
- throw new TypeError("Generator is already executing.");
59
- while (_)
60
- try {
61
- if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done)
62
- return t;
63
- if (y = 0, t)
64
- op = [
65
- op[0] & 2,
66
- t.value
67
- ];
68
- switch (op[0]) {
69
- case 0:
70
- case 1:
71
- t = op;
72
- break;
73
- case 4:
74
- _.label++;
75
- return {
76
- value: op[1],
77
- done: false
78
- };
79
- case 5:
80
- _.label++;
81
- y = op[1];
82
- op = [
83
- 0
84
- ];
85
- continue;
86
- case 7:
87
- op = _.ops.pop();
88
- _.trys.pop();
89
- continue;
90
- default:
91
- if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) {
92
- _ = 0;
93
- continue;
94
- }
95
- if (op[0] === 3 && (!t || op[1] > t[0] && op[1] < t[3])) {
96
- _.label = op[1];
97
- break;
98
- }
99
- if (op[0] === 6 && _.label < t[1]) {
100
- _.label = t[1];
101
- t = op;
102
- break;
103
- }
104
- if (t && _.label < t[2]) {
105
- _.label = t[2];
106
- _.ops.push(op);
107
- break;
108
- }
109
- if (t[2])
110
- _.ops.pop();
111
- _.trys.pop();
112
- continue;
113
- }
114
- op = body.call(thisArg, _);
115
- } catch (e) {
116
- op = [
117
- 6,
118
- e
119
- ];
120
- y = 0;
121
- } finally {
122
- f = t = 0;
123
- }
124
- if (op[0] & 5)
125
- throw op[1];
126
- return {
127
- value: op[0] ? op[1] : void 0,
128
- done: true
129
- };
130
- }
131
- };
1
+ import { _ as _async_to_generator } from "@swc/helpers/_/_async_to_generator";
2
+ import { _ as _ts_generator } from "@swc/helpers/_/_ts_generator";
132
3
  import path from "path";
133
4
  import { mime } from "@modern-js/utils";
134
5
  import { readFile } from "./reader";
@@ -138,7 +9,7 @@ export function handleDirectory(ctx, entryPath, urlPath) {
138
9
  function _handleDirectory() {
139
10
  _handleDirectory = _async_to_generator(function(ctx, entryPath, urlPath) {
140
11
  var pathname, filepath, content, contentType;
141
- return __generator(this, function(_state) {
12
+ return _ts_generator(this, function(_state) {
142
13
  switch (_state.label) {
143
14
  case 0:
144
15
  pathname = ctx.path;
@@ -1,38 +1,6 @@
1
- function _class_call_check(instance, Constructor) {
2
- if (!(instance instanceof Constructor)) {
3
- throw new TypeError("Cannot call a class as a function");
4
- }
5
- }
6
- function _defineProperties(target, props) {
7
- for (var i = 0; i < props.length; i++) {
8
- var descriptor = props[i];
9
- descriptor.enumerable = descriptor.enumerable || false;
10
- descriptor.configurable = true;
11
- if ("value" in descriptor)
12
- descriptor.writable = true;
13
- Object.defineProperty(target, descriptor.key, descriptor);
14
- }
15
- }
16
- function _create_class(Constructor, protoProps, staticProps) {
17
- if (protoProps)
18
- _defineProperties(Constructor.prototype, protoProps);
19
- if (staticProps)
20
- _defineProperties(Constructor, staticProps);
21
- return Constructor;
22
- }
23
- function _define_property(obj, key, value) {
24
- if (key in obj) {
25
- Object.defineProperty(obj, key, {
26
- value: value,
27
- enumerable: true,
28
- configurable: true,
29
- writable: true
30
- });
31
- } else {
32
- obj[key] = value;
33
- }
34
- return obj;
35
- }
1
+ import { _ as _class_call_check } from "@swc/helpers/_/_class_call_check";
2
+ import { _ as _create_class } from "@swc/helpers/_/_create_class";
3
+ import { _ as _define_property } from "@swc/helpers/_/_define_property";
36
4
  import { RouteMatcher } from "./matcher";
37
5
  export var RouteMatchManager = /* @__PURE__ */ function() {
38
6
  "use strict";
@@ -1,38 +1,6 @@
1
- function _class_call_check(instance, Constructor) {
2
- if (!(instance instanceof Constructor)) {
3
- throw new TypeError("Cannot call a class as a function");
4
- }
5
- }
6
- function _defineProperties(target, props) {
7
- for (var i = 0; i < props.length; i++) {
8
- var descriptor = props[i];
9
- descriptor.enumerable = descriptor.enumerable || false;
10
- descriptor.configurable = true;
11
- if ("value" in descriptor)
12
- descriptor.writable = true;
13
- Object.defineProperty(target, descriptor.key, descriptor);
14
- }
15
- }
16
- function _create_class(Constructor, protoProps, staticProps) {
17
- if (protoProps)
18
- _defineProperties(Constructor.prototype, protoProps);
19
- if (staticProps)
20
- _defineProperties(Constructor, staticProps);
21
- return Constructor;
22
- }
23
- function _define_property(obj, key, value) {
24
- if (key in obj) {
25
- Object.defineProperty(obj, key, {
26
- value: value,
27
- enumerable: true,
28
- configurable: true,
29
- writable: true
30
- });
31
- } else {
32
- obj[key] = value;
33
- }
34
- return obj;
35
- }
1
+ import { _ as _class_call_check } from "@swc/helpers/_/_class_call_check";
2
+ import { _ as _create_class } from "@swc/helpers/_/_create_class";
3
+ import { _ as _define_property } from "@swc/helpers/_/_define_property";
36
4
  import { match, pathToRegexp, compile } from "path-to-regexp";
37
5
  import { ModernRoute } from "./route";
38
6
  var removeTailSlash = function(s) {
@@ -1,21 +1,5 @@
1
- function _class_call_check(instance, Constructor) {
2
- if (!(instance instanceof Constructor)) {
3
- throw new TypeError("Cannot call a class as a function");
4
- }
5
- }
6
- function _define_property(obj, key, value) {
7
- if (key in obj) {
8
- Object.defineProperty(obj, key, {
9
- value: value,
10
- enumerable: true,
11
- configurable: true,
12
- writable: true
13
- });
14
- } else {
15
- obj[key] = value;
16
- }
17
- return obj;
18
- }
1
+ import { _ as _class_call_check } from "@swc/helpers/_/_class_call_check";
2
+ import { _ as _define_property } from "@swc/helpers/_/_define_property";
19
3
  export var ModernRoute = function ModernRoute2(routeSpec) {
20
4
  "use strict";
21
5
  _class_call_check(this, ModernRoute2);