@modern-js/runtime 2.9.0 → 2.11.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.
- package/CHANGELOG.md +48 -0
- package/dist/cjs/core/compatible.js +7 -3
- package/dist/cjs/router/runtime/DeferredDataScripts.node.js +2 -2
- package/dist/cjs/router/runtime/PrefetchLink.js +205 -0
- package/dist/cjs/router/runtime/index.js +6 -1
- package/dist/cjs/router/runtime/plugin.js +12 -1
- package/dist/cjs/router/runtime/plugin.node.js +7 -2
- package/dist/cjs/router/runtime/utils.js +19 -9
- package/dist/cjs/ssr/index.js +3 -0
- package/dist/cjs/ssr/serverRender/renderToStream/buildTemplate.after.js +9 -2
- package/dist/cjs/ssr/serverRender/renderToStream/bulidTemplate.before.js +2 -2
- package/dist/cjs/ssr/serverRender/renderToStream/template.js +2 -3
- package/dist/cjs/ssr/serverRender/renderToString/entry.js +1 -1
- package/dist/esm/core/compatible.js +3 -2
- package/dist/esm/router/runtime/DeferredDataScripts.node.js +2 -2
- package/dist/esm/router/runtime/PrefetchLink.js +446 -0
- package/dist/esm/router/runtime/index.js +3 -2
- package/dist/esm/router/runtime/plugin.js +10 -1
- package/dist/esm/router/runtime/plugin.node.js +5 -2
- package/dist/esm/router/runtime/utils.js +12 -9
- package/dist/esm/ssr/index.js +3 -0
- package/dist/esm/ssr/serverRender/renderToStream/buildTemplate.after.js +6 -2
- package/dist/esm/ssr/serverRender/renderToStream/bulidTemplate.before.js +2 -2
- package/dist/esm/ssr/serverRender/renderToStream/template.js +2 -3
- package/dist/esm/ssr/serverRender/renderToString/entry.js +1 -1
- package/dist/esm-node/core/compatible.js +7 -3
- package/dist/esm-node/router/runtime/DeferredDataScripts.node.js +2 -2
- package/dist/esm-node/router/runtime/PrefetchLink.js +177 -0
- package/dist/esm-node/router/runtime/index.js +4 -1
- package/dist/esm-node/router/runtime/plugin.js +12 -1
- package/dist/esm-node/router/runtime/plugin.node.js +7 -2
- package/dist/esm-node/router/runtime/utils.js +19 -9
- package/dist/esm-node/ssr/index.js +3 -0
- package/dist/esm-node/ssr/serverRender/renderToStream/buildTemplate.after.js +9 -2
- package/dist/esm-node/ssr/serverRender/renderToStream/bulidTemplate.before.js +2 -2
- package/dist/esm-node/ssr/serverRender/renderToStream/template.js +2 -3
- package/dist/esm-node/ssr/serverRender/renderToString/entry.js +1 -1
- package/dist/types/router/runtime/PrefetchLink.d.ts +30 -0
- package/dist/types/router/runtime/index.d.ts +3 -1
- package/dist/types/router/runtime/types.d.ts +10 -1
- package/dist/types/router/runtime/utils.d.ts +13 -3
- package/dist/types/runtimeContext.d.ts +3 -1
- package/dist/types/ssr/serverRender/renderToStream/buildTemplate.after.d.ts +2 -4
- package/package.json +12 -12
|
@@ -0,0 +1,446 @@
|
|
|
1
|
+
function _arrayLikeToArray(arr, len) {
|
|
2
|
+
if (len == null || len > arr.length) len = arr.length;
|
|
3
|
+
for(var i = 0, arr2 = new Array(len); i < len; i++)arr2[i] = arr[i];
|
|
4
|
+
return arr2;
|
|
5
|
+
}
|
|
6
|
+
function _arrayWithHoles(arr) {
|
|
7
|
+
if (Array.isArray(arr)) return arr;
|
|
8
|
+
}
|
|
9
|
+
function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) {
|
|
10
|
+
try {
|
|
11
|
+
var info = gen[key](arg);
|
|
12
|
+
var value = info.value;
|
|
13
|
+
} catch (error) {
|
|
14
|
+
reject(error);
|
|
15
|
+
return;
|
|
16
|
+
}
|
|
17
|
+
if (info.done) {
|
|
18
|
+
resolve(value);
|
|
19
|
+
} else {
|
|
20
|
+
Promise.resolve(value).then(_next, _throw);
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
function _asyncToGenerator(fn) {
|
|
24
|
+
return function() {
|
|
25
|
+
var self = this, args = arguments;
|
|
26
|
+
return new Promise(function(resolve, reject) {
|
|
27
|
+
var gen = fn.apply(self, args);
|
|
28
|
+
function _next(value) {
|
|
29
|
+
asyncGeneratorStep(gen, resolve, reject, _next, _throw, "next", value);
|
|
30
|
+
}
|
|
31
|
+
function _throw(err) {
|
|
32
|
+
asyncGeneratorStep(gen, resolve, reject, _next, _throw, "throw", err);
|
|
33
|
+
}
|
|
34
|
+
_next(undefined);
|
|
35
|
+
});
|
|
36
|
+
};
|
|
37
|
+
}
|
|
38
|
+
function _defineProperty(obj, key, value) {
|
|
39
|
+
if (key in obj) {
|
|
40
|
+
Object.defineProperty(obj, key, {
|
|
41
|
+
value: value,
|
|
42
|
+
enumerable: true,
|
|
43
|
+
configurable: true,
|
|
44
|
+
writable: true
|
|
45
|
+
});
|
|
46
|
+
} else {
|
|
47
|
+
obj[key] = value;
|
|
48
|
+
}
|
|
49
|
+
return obj;
|
|
50
|
+
}
|
|
51
|
+
function _iterableToArrayLimit(arr, i) {
|
|
52
|
+
var _i = arr == null ? null : typeof Symbol !== "undefined" && arr[Symbol.iterator] || arr["@@iterator"];
|
|
53
|
+
if (_i == null) return;
|
|
54
|
+
var _arr = [];
|
|
55
|
+
var _n = true;
|
|
56
|
+
var _d = false;
|
|
57
|
+
var _s, _e;
|
|
58
|
+
try {
|
|
59
|
+
for(_i = _i.call(arr); !(_n = (_s = _i.next()).done); _n = true){
|
|
60
|
+
_arr.push(_s.value);
|
|
61
|
+
if (i && _arr.length === i) break;
|
|
62
|
+
}
|
|
63
|
+
} catch (err) {
|
|
64
|
+
_d = true;
|
|
65
|
+
_e = err;
|
|
66
|
+
} finally{
|
|
67
|
+
try {
|
|
68
|
+
if (!_n && _i["return"] != null) _i["return"]();
|
|
69
|
+
} finally{
|
|
70
|
+
if (_d) throw _e;
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
return _arr;
|
|
74
|
+
}
|
|
75
|
+
function _nonIterableRest() {
|
|
76
|
+
throw new TypeError("Invalid attempt to destructure non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.");
|
|
77
|
+
}
|
|
78
|
+
function _objectSpread(target) {
|
|
79
|
+
for(var i = 1; i < arguments.length; i++){
|
|
80
|
+
var source = arguments[i] != null ? arguments[i] : {};
|
|
81
|
+
var ownKeys = Object.keys(source);
|
|
82
|
+
if (typeof Object.getOwnPropertySymbols === "function") {
|
|
83
|
+
ownKeys = ownKeys.concat(Object.getOwnPropertySymbols(source).filter(function(sym) {
|
|
84
|
+
return Object.getOwnPropertyDescriptor(source, sym).enumerable;
|
|
85
|
+
}));
|
|
86
|
+
}
|
|
87
|
+
ownKeys.forEach(function(key) {
|
|
88
|
+
_defineProperty(target, key, source[key]);
|
|
89
|
+
});
|
|
90
|
+
}
|
|
91
|
+
return target;
|
|
92
|
+
}
|
|
93
|
+
function _objectWithoutProperties(source, excluded) {
|
|
94
|
+
if (source == null) return {};
|
|
95
|
+
var target = _objectWithoutPropertiesLoose(source, excluded);
|
|
96
|
+
var key, i;
|
|
97
|
+
if (Object.getOwnPropertySymbols) {
|
|
98
|
+
var sourceSymbolKeys = Object.getOwnPropertySymbols(source);
|
|
99
|
+
for(i = 0; i < sourceSymbolKeys.length; i++){
|
|
100
|
+
key = sourceSymbolKeys[i];
|
|
101
|
+
if (excluded.indexOf(key) >= 0) continue;
|
|
102
|
+
if (!Object.prototype.propertyIsEnumerable.call(source, key)) continue;
|
|
103
|
+
target[key] = source[key];
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
return target;
|
|
107
|
+
}
|
|
108
|
+
function _objectWithoutPropertiesLoose(source, excluded) {
|
|
109
|
+
if (source == null) return {};
|
|
110
|
+
var target = {};
|
|
111
|
+
var sourceKeys = Object.keys(source);
|
|
112
|
+
var key, i;
|
|
113
|
+
for(i = 0; i < sourceKeys.length; i++){
|
|
114
|
+
key = sourceKeys[i];
|
|
115
|
+
if (excluded.indexOf(key) >= 0) continue;
|
|
116
|
+
target[key] = source[key];
|
|
117
|
+
}
|
|
118
|
+
return target;
|
|
119
|
+
}
|
|
120
|
+
function _slicedToArray(arr, i) {
|
|
121
|
+
return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest();
|
|
122
|
+
}
|
|
123
|
+
function _unsupportedIterableToArray(o, minLen) {
|
|
124
|
+
if (!o) return;
|
|
125
|
+
if (typeof o === "string") return _arrayLikeToArray(o, minLen);
|
|
126
|
+
var n = Object.prototype.toString.call(o).slice(8, -1);
|
|
127
|
+
if (n === "Object" && o.constructor) n = o.constructor.name;
|
|
128
|
+
if (n === "Map" || n === "Set") return Array.from(n);
|
|
129
|
+
if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen);
|
|
130
|
+
}
|
|
131
|
+
var __generator = this && this.__generator || function(thisArg, body) {
|
|
132
|
+
var f, y, t, g, _ = {
|
|
133
|
+
label: 0,
|
|
134
|
+
sent: function() {
|
|
135
|
+
if (t[0] & 1) throw t[1];
|
|
136
|
+
return t[1];
|
|
137
|
+
},
|
|
138
|
+
trys: [],
|
|
139
|
+
ops: []
|
|
140
|
+
};
|
|
141
|
+
return g = {
|
|
142
|
+
next: verb(0),
|
|
143
|
+
"throw": verb(1),
|
|
144
|
+
"return": verb(2)
|
|
145
|
+
}, typeof Symbol === "function" && (g[Symbol.iterator] = function() {
|
|
146
|
+
return this;
|
|
147
|
+
}), g;
|
|
148
|
+
function verb(n) {
|
|
149
|
+
return function(v) {
|
|
150
|
+
return step([
|
|
151
|
+
n,
|
|
152
|
+
v
|
|
153
|
+
]);
|
|
154
|
+
};
|
|
155
|
+
}
|
|
156
|
+
function step(op) {
|
|
157
|
+
if (f) throw new TypeError("Generator is already executing.");
|
|
158
|
+
while(_)try {
|
|
159
|
+
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) return t;
|
|
160
|
+
if (y = 0, t) op = [
|
|
161
|
+
op[0] & 2,
|
|
162
|
+
t.value
|
|
163
|
+
];
|
|
164
|
+
switch(op[0]){
|
|
165
|
+
case 0:
|
|
166
|
+
case 1:
|
|
167
|
+
t = op;
|
|
168
|
+
break;
|
|
169
|
+
case 4:
|
|
170
|
+
_.label++;
|
|
171
|
+
return {
|
|
172
|
+
value: op[1],
|
|
173
|
+
done: false
|
|
174
|
+
};
|
|
175
|
+
case 5:
|
|
176
|
+
_.label++;
|
|
177
|
+
y = op[1];
|
|
178
|
+
op = [
|
|
179
|
+
0
|
|
180
|
+
];
|
|
181
|
+
continue;
|
|
182
|
+
case 7:
|
|
183
|
+
op = _.ops.pop();
|
|
184
|
+
_.trys.pop();
|
|
185
|
+
continue;
|
|
186
|
+
default:
|
|
187
|
+
if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) {
|
|
188
|
+
_ = 0;
|
|
189
|
+
continue;
|
|
190
|
+
}
|
|
191
|
+
if (op[0] === 3 && (!t || op[1] > t[0] && op[1] < t[3])) {
|
|
192
|
+
_.label = op[1];
|
|
193
|
+
break;
|
|
194
|
+
}
|
|
195
|
+
if (op[0] === 6 && _.label < t[1]) {
|
|
196
|
+
_.label = t[1];
|
|
197
|
+
t = op;
|
|
198
|
+
break;
|
|
199
|
+
}
|
|
200
|
+
if (t && _.label < t[2]) {
|
|
201
|
+
_.label = t[2];
|
|
202
|
+
_.ops.push(op);
|
|
203
|
+
break;
|
|
204
|
+
}
|
|
205
|
+
if (t[2]) _.ops.pop();
|
|
206
|
+
_.trys.pop();
|
|
207
|
+
continue;
|
|
208
|
+
}
|
|
209
|
+
op = body.call(thisArg, _);
|
|
210
|
+
} catch (e) {
|
|
211
|
+
op = [
|
|
212
|
+
6,
|
|
213
|
+
e
|
|
214
|
+
];
|
|
215
|
+
y = 0;
|
|
216
|
+
} finally{
|
|
217
|
+
f = t = 0;
|
|
218
|
+
}
|
|
219
|
+
if (op[0] & 5) throw op[1];
|
|
220
|
+
return {
|
|
221
|
+
value: op[0] ? op[1] : void 0,
|
|
222
|
+
done: true
|
|
223
|
+
};
|
|
224
|
+
}
|
|
225
|
+
};
|
|
226
|
+
import { Fragment, jsx, jsxs } from "react/jsx-runtime";
|
|
227
|
+
import React, { useContext, useMemo } from "react";
|
|
228
|
+
import { Link as RouterLink, matchRoutes, useResolvedPath, useHref, useMatches, NavLink as RouterNavLink } from "react-router-dom";
|
|
229
|
+
import { RuntimeReactContext } from "../../core";
|
|
230
|
+
function composeEventHandlers(theirHandler, ourHandler) {
|
|
231
|
+
return function(event) {
|
|
232
|
+
theirHandler === null || theirHandler === void 0 ? void 0 : theirHandler(event);
|
|
233
|
+
if (!event.defaultPrevented) {
|
|
234
|
+
ourHandler(event);
|
|
235
|
+
}
|
|
236
|
+
};
|
|
237
|
+
}
|
|
238
|
+
var ABSOLUTE_URL_REGEX = /^(?:[a-z][a-z0-9+.-]*:|\/\/)/i;
|
|
239
|
+
function usePrefetchBehavior(prefetch, theirElementProps) {
|
|
240
|
+
var _React_useState = _slicedToArray(React.useState(false), 2), maybePrefetch = _React_useState[0], setMaybePrefetch = _React_useState[1];
|
|
241
|
+
var _React_useState1 = _slicedToArray(React.useState(false), 2), shouldPrefetch = _React_useState1[0], setShouldPrefetch = _React_useState1[1];
|
|
242
|
+
var onFocus = theirElementProps.onFocus, onBlur = theirElementProps.onBlur, onMouseEnter = theirElementProps.onMouseEnter, onMouseLeave = theirElementProps.onMouseLeave, onTouchStart = theirElementProps.onTouchStart;
|
|
243
|
+
React.useEffect(function() {
|
|
244
|
+
if (prefetch === "render") {
|
|
245
|
+
setShouldPrefetch(true);
|
|
246
|
+
}
|
|
247
|
+
}, [
|
|
248
|
+
prefetch
|
|
249
|
+
]);
|
|
250
|
+
var setIntent = function() {
|
|
251
|
+
if (prefetch === "intent") {
|
|
252
|
+
setMaybePrefetch(true);
|
|
253
|
+
}
|
|
254
|
+
};
|
|
255
|
+
var cancelIntent = function() {
|
|
256
|
+
if (prefetch === "intent") {
|
|
257
|
+
setMaybePrefetch(false);
|
|
258
|
+
setShouldPrefetch(false);
|
|
259
|
+
}
|
|
260
|
+
};
|
|
261
|
+
React.useEffect(function() {
|
|
262
|
+
if (maybePrefetch) {
|
|
263
|
+
var id = setTimeout(function() {
|
|
264
|
+
setShouldPrefetch(true);
|
|
265
|
+
}, 100);
|
|
266
|
+
return function() {
|
|
267
|
+
clearTimeout(id);
|
|
268
|
+
};
|
|
269
|
+
}
|
|
270
|
+
}, [
|
|
271
|
+
maybePrefetch
|
|
272
|
+
]);
|
|
273
|
+
return [
|
|
274
|
+
shouldPrefetch,
|
|
275
|
+
{
|
|
276
|
+
onFocus: composeEventHandlers(onFocus, setIntent),
|
|
277
|
+
onBlur: composeEventHandlers(onBlur, cancelIntent),
|
|
278
|
+
onMouseEnter: composeEventHandlers(onMouseEnter, setIntent),
|
|
279
|
+
onMouseLeave: composeEventHandlers(onMouseLeave, cancelIntent),
|
|
280
|
+
onTouchStart: composeEventHandlers(onTouchStart, setIntent)
|
|
281
|
+
}
|
|
282
|
+
];
|
|
283
|
+
}
|
|
284
|
+
function loadRouteModule(route, routeAssets) {
|
|
285
|
+
return _loadRouteModule.apply(this, arguments);
|
|
286
|
+
}
|
|
287
|
+
function _loadRouteModule() {
|
|
288
|
+
_loadRouteModule = _asyncToGenerator(function(route, routeAssets) {
|
|
289
|
+
var routeId, chunkIds, error;
|
|
290
|
+
return __generator(this, function(_state) {
|
|
291
|
+
switch(_state.label){
|
|
292
|
+
case 0:
|
|
293
|
+
routeId = route.id;
|
|
294
|
+
if (!routeId) {
|
|
295
|
+
return [
|
|
296
|
+
2
|
|
297
|
+
];
|
|
298
|
+
}
|
|
299
|
+
if (!routeAssets[routeId]) {
|
|
300
|
+
return [
|
|
301
|
+
2
|
|
302
|
+
];
|
|
303
|
+
}
|
|
304
|
+
chunkIds = routeAssets[routeId].chunkIds;
|
|
305
|
+
if (!chunkIds) {
|
|
306
|
+
return [
|
|
307
|
+
2
|
|
308
|
+
];
|
|
309
|
+
}
|
|
310
|
+
_state.label = 1;
|
|
311
|
+
case 1:
|
|
312
|
+
_state.trys.push([
|
|
313
|
+
1,
|
|
314
|
+
3,
|
|
315
|
+
,
|
|
316
|
+
4
|
|
317
|
+
]);
|
|
318
|
+
return [
|
|
319
|
+
4,
|
|
320
|
+
Promise.all(chunkIds.map(function(chunkId) {
|
|
321
|
+
return __webpack_chunk_load__ === null || __webpack_chunk_load__ === void 0 ? void 0 : __webpack_chunk_load__(String(chunkId));
|
|
322
|
+
}))
|
|
323
|
+
];
|
|
324
|
+
case 2:
|
|
325
|
+
_state.sent();
|
|
326
|
+
return [
|
|
327
|
+
3,
|
|
328
|
+
4
|
|
329
|
+
];
|
|
330
|
+
case 3:
|
|
331
|
+
error = _state.sent();
|
|
332
|
+
console.error(error);
|
|
333
|
+
return [
|
|
334
|
+
3,
|
|
335
|
+
4
|
|
336
|
+
];
|
|
337
|
+
case 4:
|
|
338
|
+
return [
|
|
339
|
+
2
|
|
340
|
+
];
|
|
341
|
+
}
|
|
342
|
+
});
|
|
343
|
+
});
|
|
344
|
+
return _loadRouteModule.apply(this, arguments);
|
|
345
|
+
}
|
|
346
|
+
var getRequestUrl = function(pathname, routeId) {
|
|
347
|
+
var LOADER_ID_PARAM = "__loader";
|
|
348
|
+
var DIRECT_PARAM = "__ssrDirect";
|
|
349
|
+
var _window_location = window.location, protocol = _window_location.protocol, host = _window_location.host;
|
|
350
|
+
var url = new URL(pathname, "".concat(protocol, "//").concat(host));
|
|
351
|
+
url.searchParams.append(LOADER_ID_PARAM, routeId);
|
|
352
|
+
url.searchParams.append(DIRECT_PARAM, "true");
|
|
353
|
+
return url;
|
|
354
|
+
};
|
|
355
|
+
var createDataHref = function(href) {
|
|
356
|
+
return /* @__PURE__ */ jsx("link", {
|
|
357
|
+
rel: "prefetch",
|
|
358
|
+
as: "fetch",
|
|
359
|
+
href: href
|
|
360
|
+
}, href);
|
|
361
|
+
};
|
|
362
|
+
var getDataHref = function(route, pathname, basename) {
|
|
363
|
+
var id = route.id;
|
|
364
|
+
var path = basename === "/" ? pathname : "".concat(basename).concat(pathname);
|
|
365
|
+
var url = getRequestUrl(path, id);
|
|
366
|
+
return createDataHref(url.toString());
|
|
367
|
+
};
|
|
368
|
+
var PrefetchPageLinks = function(param) {
|
|
369
|
+
var pathname = param.pathname;
|
|
370
|
+
var context = useContext(RuntimeReactContext);
|
|
371
|
+
var routeManifest = context.routeManifest, routes = context.routes;
|
|
372
|
+
var routeAssets = routeManifest.routeAssets;
|
|
373
|
+
var matches = Array.isArray(routes) ? matchRoutes(routes, pathname) : [];
|
|
374
|
+
if (Array.isArray(matches)) {
|
|
375
|
+
matches === null || matches === void 0 ? void 0 : matches.forEach(function(match) {
|
|
376
|
+
return loadRouteModule(match.route, routeAssets);
|
|
377
|
+
});
|
|
378
|
+
}
|
|
379
|
+
if (!window._SSR_DATA) {
|
|
380
|
+
return null;
|
|
381
|
+
}
|
|
382
|
+
return /* @__PURE__ */ jsx(PrefetchDataLinks, {
|
|
383
|
+
matches: matches,
|
|
384
|
+
pathname: pathname,
|
|
385
|
+
routeManifest: routeManifest
|
|
386
|
+
});
|
|
387
|
+
};
|
|
388
|
+
var PrefetchDataLinks = function(param) {
|
|
389
|
+
var matches = param.matches, pathname = param.pathname, routeManifest = param.routeManifest;
|
|
390
|
+
var currentMatches = useMatches();
|
|
391
|
+
var basename = useHref("/");
|
|
392
|
+
var dataHrefs = useMemo(function() {
|
|
393
|
+
return matches === null || matches === void 0 ? void 0 : matches.filter(function(match) {
|
|
394
|
+
return match.route.loader && typeof match.route.loader === "function" && match.route.loader.length > 0;
|
|
395
|
+
}).filter(function(match, index) {
|
|
396
|
+
var currentMatch = currentMatches[index];
|
|
397
|
+
if (!currentMatch || currentMatch.id !== match.route.id) {
|
|
398
|
+
return true;
|
|
399
|
+
}
|
|
400
|
+
if (currentMatch.pathname !== match.pathname) {
|
|
401
|
+
return true;
|
|
402
|
+
}
|
|
403
|
+
if (currentMatch.pathname.endsWith("*") && currentMatch.params["*"] !== match.params["*"]) {
|
|
404
|
+
return true;
|
|
405
|
+
}
|
|
406
|
+
return false;
|
|
407
|
+
}).map(function(match) {
|
|
408
|
+
return getDataHref(match.route, pathname, basename);
|
|
409
|
+
});
|
|
410
|
+
}, [
|
|
411
|
+
matches,
|
|
412
|
+
pathname,
|
|
413
|
+
routeManifest
|
|
414
|
+
]);
|
|
415
|
+
return /* @__PURE__ */ jsx(Fragment, {
|
|
416
|
+
children: dataHrefs
|
|
417
|
+
});
|
|
418
|
+
};
|
|
419
|
+
var createPrefetchLink = function(Link2) {
|
|
420
|
+
return React.forwardRef(function(_param, forwardedRef) {
|
|
421
|
+
var to = _param.to, _param_prefetch = _param.prefetch, prefetch = _param_prefetch === void 0 ? "none" : _param_prefetch, props = _objectWithoutProperties(_param, [
|
|
422
|
+
"to",
|
|
423
|
+
"prefetch"
|
|
424
|
+
]);
|
|
425
|
+
var isAbsolute = typeof to === "string" && ABSOLUTE_URL_REGEX.test(to);
|
|
426
|
+
var _usePrefetchBehavior = _slicedToArray(usePrefetchBehavior(prefetch, props), 2), shouldPrefetch = _usePrefetchBehavior[0], prefetchHandlers = _usePrefetchBehavior[1];
|
|
427
|
+
var resolvedPath = useResolvedPath(to);
|
|
428
|
+
var pathname = resolvedPath.pathname;
|
|
429
|
+
return /* @__PURE__ */ jsxs(Fragment, {
|
|
430
|
+
children: [
|
|
431
|
+
/* @__PURE__ */ jsx(Link2, _objectSpread({
|
|
432
|
+
ref: forwardedRef,
|
|
433
|
+
to: to
|
|
434
|
+
}, props, prefetchHandlers)),
|
|
435
|
+
shouldPrefetch && __webpack_chunk_load__ && !isAbsolute ? /* @__PURE__ */ jsx(PrefetchPageLinks, {
|
|
436
|
+
pathname: pathname
|
|
437
|
+
}) : null
|
|
438
|
+
]
|
|
439
|
+
});
|
|
440
|
+
});
|
|
441
|
+
};
|
|
442
|
+
var Link = createPrefetchLink(RouterLink);
|
|
443
|
+
Link.displayName = "Link";
|
|
444
|
+
var NavLink = createPrefetchLink(RouterNavLink);
|
|
445
|
+
NavLink.displayName = "NavLink";
|
|
446
|
+
export { Link as PrefetchLink, NavLink as PrefetchNavLink, composeEventHandlers };
|
|
@@ -2,6 +2,7 @@ import { routerPlugin } from "./plugin";
|
|
|
2
2
|
var runtime_default = routerPlugin;
|
|
3
3
|
import { modifyRoutes } from "./plugin";
|
|
4
4
|
export * from "./withRouter";
|
|
5
|
+
import { PrefetchLink, PrefetchNavLink } from "./PrefetchLink";
|
|
5
6
|
import { createBrowserRouter, createHashRouter, createMemoryRouter, RouterProvider, BrowserRouter, HashRouter, MemoryRouter, Router, Await, Form, Link, NavLink, Navigate, Outlet, Route, Routes, ScrollRestoration, useActionData, useAsyncError, useAsyncValue, useBeforeUnload, useFetcher, useFetchers, useFormAction, useHref, useInRouterContext, useLinkClickHandler, useLoaderData, useLocation, useMatch, useMatches, useNavigate, useNavigation, useNavigationType, useOutlet, useOutletContext, useParams, useResolvedPath, useRevalidator, useRouteError, useRouteLoaderData, useRoutes, useSearchParams, useSubmit, createRoutesFromChildren, createRoutesFromElements, createSearchParams, generatePath, isRouteErrorResponse, matchPath, matchRoutes, renderMatches, resolvePath } from "react-router-dom";
|
|
6
|
-
import { defer, json, redirect } from "@modern-js/utils/remix-router";
|
|
7
|
-
export { Await, BrowserRouter, Form, HashRouter, Link, MemoryRouter, NavLink, Navigate, Outlet, Route, Router, RouterProvider, Routes, ScrollRestoration, createBrowserRouter, createHashRouter, createMemoryRouter, createRoutesFromChildren, createRoutesFromElements, createSearchParams, runtime_default as default, defer, generatePath, isRouteErrorResponse, json, matchPath, matchRoutes, modifyRoutes, redirect, renderMatches, resolvePath, useActionData, useAsyncError, useAsyncValue, useBeforeUnload, useFetcher, useFetchers, useFormAction, useHref, useInRouterContext, useLinkClickHandler, useLoaderData, useLocation, useMatch, useMatches, useNavigate, useNavigation, useNavigationType, useOutlet, useOutletContext, useParams, useResolvedPath, useRevalidator, useRouteError, useRouteLoaderData, useRoutes, useSearchParams, useSubmit };
|
|
7
|
+
import { defer, json, redirect } from "@modern-js/utils/universal/remix-router";
|
|
8
|
+
export { Await, BrowserRouter, Form, HashRouter, Link, MemoryRouter, NavLink, Navigate, Outlet, PrefetchLink, PrefetchNavLink, Route, Router, RouterProvider, Routes, ScrollRestoration, createBrowserRouter, createHashRouter, createMemoryRouter, createRoutesFromChildren, createRoutesFromElements, createSearchParams, runtime_default as default, defer, generatePath, isRouteErrorResponse, json, matchPath, matchRoutes, modifyRoutes, redirect, renderMatches, resolvePath, useActionData, useAsyncError, useAsyncValue, useBeforeUnload, useFetcher, useFetchers, useFormAction, useHref, useInRouterContext, useLinkClickHandler, useLoaderData, useLocation, useMatch, useMatches, useNavigate, useNavigation, useNavigationType, useOutlet, useOutletContext, useParams, useResolvedPath, useRevalidator, useRouteError, useRouteLoaderData, useRoutes, useSearchParams, useSubmit };
|
|
@@ -74,6 +74,7 @@ var routerPlugin = function(param) {
|
|
|
74
74
|
return pathname.search(baseUrl) === 0;
|
|
75
75
|
}) || "/";
|
|
76
76
|
};
|
|
77
|
+
var routes = [];
|
|
77
78
|
finalRouteConfig = routesConfig;
|
|
78
79
|
return {
|
|
79
80
|
name: "@modern-js/plugin-router",
|
|
@@ -85,6 +86,11 @@ var routerPlugin = function(param) {
|
|
|
85
86
|
useMatches: useMatches,
|
|
86
87
|
useLocation: useLocation
|
|
87
88
|
};
|
|
89
|
+
Object.defineProperty(context, "routes", {
|
|
90
|
+
get: function get() {
|
|
91
|
+
return routes;
|
|
92
|
+
}
|
|
93
|
+
});
|
|
88
94
|
return next({
|
|
89
95
|
context: context
|
|
90
96
|
});
|
|
@@ -100,7 +106,10 @@ var routerPlugin = function(param) {
|
|
|
100
106
|
return function(props) {
|
|
101
107
|
var _window__SERVER_DATA;
|
|
102
108
|
beforeCreateRouter = true;
|
|
103
|
-
|
|
109
|
+
routes = createRoutes ? createRoutes() : createRoutesFromElements(renderRoutes({
|
|
110
|
+
routesConfig: finalRouteConfig,
|
|
111
|
+
props: props
|
|
112
|
+
}));
|
|
104
113
|
var baseUrl = ((_window__SERVER_DATA = window._SERVER_DATA) === null || _window__SERVER_DATA === void 0 ? void 0 : _window__SERVER_DATA.router.baseUrl) || select(location.pathname);
|
|
105
114
|
var _basename = baseUrl === "/" ? urlJoin(baseUrl, basename) : baseUrl;
|
|
106
115
|
var hydrationData = window._ROUTER_DATA;
|
|
@@ -229,7 +229,7 @@ var __generator = this && this.__generator || function(thisArg, body) {
|
|
|
229
229
|
};
|
|
230
230
|
import { jsx } from "react/jsx-runtime";
|
|
231
231
|
import { useContext } from "react";
|
|
232
|
-
import { createStaticHandler } from "@modern-js/utils/remix-router";
|
|
232
|
+
import { createStaticHandler } from "@modern-js/utils/universal/remix-router";
|
|
233
233
|
import { createStaticRouter, StaticRouterProvider } from "react-router-dom/server";
|
|
234
234
|
import hoistNonReactStatics from "hoist-non-react-statics";
|
|
235
235
|
import { createRoutesFromElements } from "react-router-dom";
|
|
@@ -321,7 +321,10 @@ var routerPlugin = function(param) {
|
|
|
321
321
|
_context_ssrContext = context.ssrContext, request = _context_ssrContext.request, ssrMode = _context_ssrContext.mode;
|
|
322
322
|
baseUrl = request.baseUrl;
|
|
323
323
|
_basename = baseUrl === "/" ? urlJoin(baseUrl, basename) : baseUrl;
|
|
324
|
-
routes = createRoutes ? createRoutes() : createRoutesFromElements(renderRoutes(
|
|
324
|
+
routes = createRoutes ? createRoutes() : createRoutesFromElements(renderRoutes({
|
|
325
|
+
routesConfig: routesConfig,
|
|
326
|
+
ssrMode: ssrMode
|
|
327
|
+
}));
|
|
325
328
|
query = createStaticHandler(routes, {
|
|
326
329
|
basename: _basename
|
|
327
330
|
}).query;
|
|
@@ -132,23 +132,23 @@ function _unsupportedIterableToArray(o, minLen) {
|
|
|
132
132
|
}
|
|
133
133
|
import { jsx } from "react/jsx-runtime";
|
|
134
134
|
import { Route } from "react-router-dom";
|
|
135
|
-
import {
|
|
136
|
-
import {
|
|
135
|
+
import { ErrorResponse, isRouteErrorResponse } from "@modern-js/utils/universal/remix-router";
|
|
136
|
+
import { renderNestedRoute } from "@modern-js/utils/universal/nestedRoutes";
|
|
137
137
|
import { DefaultNotFound } from "./DefaultNotFound";
|
|
138
138
|
import DeferredDataScripts from "./DeferredDataScripts";
|
|
139
139
|
function getRouteComponents(routes, param) {
|
|
140
|
-
var globalApp = param.globalApp, ssrMode = param.ssrMode;
|
|
140
|
+
var globalApp = param.globalApp, ssrMode = param.ssrMode, props = param.props;
|
|
141
141
|
var Layout = function(_param) {
|
|
142
|
-
var Component = _param.Component,
|
|
142
|
+
var Component = _param.Component, props2 = _objectWithoutProperties(_param, [
|
|
143
143
|
"Component"
|
|
144
144
|
]);
|
|
145
145
|
var GlobalLayout = globalApp;
|
|
146
146
|
if (!GlobalLayout) {
|
|
147
|
-
return /* @__PURE__ */ jsx(Component, _objectSpread({},
|
|
147
|
+
return /* @__PURE__ */ jsx(Component, _objectSpread({}, props2));
|
|
148
148
|
}
|
|
149
149
|
return /* @__PURE__ */ jsx(GlobalLayout, _objectSpread({
|
|
150
150
|
Component: Component
|
|
151
|
-
},
|
|
151
|
+
}, props2));
|
|
152
152
|
};
|
|
153
153
|
var routeElements = [];
|
|
154
154
|
var _iteratorNormalCompletion = true, _didIteratorError = false, _iteratorError = undefined;
|
|
@@ -157,7 +157,8 @@ function getRouteComponents(routes, param) {
|
|
|
157
157
|
var route = _step.value;
|
|
158
158
|
if (route.type === "nested") {
|
|
159
159
|
var routeElement = renderNestedRoute(route, {
|
|
160
|
-
DeferredDataComponent: ssrMode === "stream" ? DeferredDataScripts : void 0
|
|
160
|
+
DeferredDataComponent: ssrMode === "stream" ? DeferredDataScripts : void 0,
|
|
161
|
+
props: props
|
|
161
162
|
});
|
|
162
163
|
routeElements.push(routeElement);
|
|
163
164
|
} else {
|
|
@@ -190,7 +191,8 @@ function getRouteComponents(routes, param) {
|
|
|
190
191
|
}, "*"));
|
|
191
192
|
return routeElements;
|
|
192
193
|
}
|
|
193
|
-
function renderRoutes(
|
|
194
|
+
function renderRoutes(param) {
|
|
195
|
+
var routesConfig = param.routesConfig, props = param.props, ssrMode = param.ssrMode;
|
|
194
196
|
if (!routesConfig) {
|
|
195
197
|
return null;
|
|
196
198
|
}
|
|
@@ -200,7 +202,8 @@ function renderRoutes(routesConfig, ssrMode) {
|
|
|
200
202
|
}
|
|
201
203
|
var routeElements = getRouteComponents(routes, {
|
|
202
204
|
globalApp: globalApp,
|
|
203
|
-
ssrMode: ssrMode
|
|
205
|
+
ssrMode: ssrMode,
|
|
206
|
+
props: props
|
|
204
207
|
});
|
|
205
208
|
return routeElements;
|
|
206
209
|
}
|
package/dist/esm/ssr/index.js
CHANGED
|
@@ -243,6 +243,9 @@ var ssr = function(config) {
|
|
|
243
243
|
return __generator(this, function(_state) {
|
|
244
244
|
App = param.App, context = param.context, ModernRender = param.ModernRender, ModernHydrate = param.ModernHydrate;
|
|
245
245
|
hydrateContext = _objectSpreadProps(_objectSpread({}, context), {
|
|
246
|
+
get routes () {
|
|
247
|
+
return context.routes;
|
|
248
|
+
},
|
|
246
249
|
_hydration: true
|
|
247
250
|
});
|
|
248
251
|
callback = function() {
|
|
@@ -26,19 +26,23 @@ function _objectSpread(target) {
|
|
|
26
26
|
}
|
|
27
27
|
return target;
|
|
28
28
|
}
|
|
29
|
-
import { serializeJson } from "@modern-js/utils/serialize";
|
|
29
|
+
import { serializeJson } from "@modern-js/utils/universal/serialize";
|
|
30
30
|
import { buildTemplate } from "./buildTemplate.share";
|
|
31
31
|
function buildShellAfterTemplate(afterAppTemplate, options) {
|
|
32
32
|
var injectSSRDataScript = function injectSSRDataScript(template) {
|
|
33
33
|
var ssrDataScript = buildSSRDataScript();
|
|
34
34
|
return template.replace("<!--<?- SSRDataScript ?>-->", ssrDataScript);
|
|
35
35
|
function buildSSRDataScript() {
|
|
36
|
-
var
|
|
36
|
+
var _options_context = options.context, ssrContext = _options_context.ssrContext, initialData = _options_context.initialData, __i18nData__ = _options_context.__i18nData__, renderLevel = options.renderLevel;
|
|
37
37
|
var request = ssrContext.request, enableUnsafeCtx = ssrContext.enableUnsafeCtx;
|
|
38
38
|
var unsafeContext = {
|
|
39
39
|
headers: request.headers
|
|
40
40
|
};
|
|
41
41
|
var SSRData = {
|
|
42
|
+
data: {
|
|
43
|
+
initialData: initialData,
|
|
44
|
+
i18nData: __i18nData__
|
|
45
|
+
},
|
|
42
46
|
context: {
|
|
43
47
|
request: _objectSpread({
|
|
44
48
|
params: request.params,
|
|
@@ -81,8 +81,8 @@ function getHeadTemplate(beforeEntryTemplate, context) {
|
|
|
81
81
|
var routeManifest2 = routeAssets[routeId];
|
|
82
82
|
if (routeManifest2) {
|
|
83
83
|
var _cssChunks;
|
|
84
|
-
var
|
|
85
|
-
var _cssChunks1 =
|
|
84
|
+
var _routeManifest2_referenceCssAssets = routeManifest2.referenceCssAssets, referenceCssAssets = _routeManifest2_referenceCssAssets === void 0 ? [] : _routeManifest2_referenceCssAssets;
|
|
85
|
+
var _cssChunks1 = referenceCssAssets.filter(function(asset) {
|
|
86
86
|
return asset === null || asset === void 0 ? void 0 : asset.endsWith(".css");
|
|
87
87
|
});
|
|
88
88
|
(_cssChunks = cssChunks).push.apply(_cssChunks, _toConsumableArray(_cssChunks1));
|
|
@@ -48,12 +48,11 @@ import { buildShellAfterTemplate } from "./buildTemplate.after";
|
|
|
48
48
|
import { buildShellBeforeTemplate } from "./bulidTemplate.before";
|
|
49
49
|
var HTML_SEPARATOR = "<!--<?- html ?>-->";
|
|
50
50
|
var getTemplates = function(context, renderLevel) {
|
|
51
|
-
var ssrContext = context.ssrContext
|
|
51
|
+
var ssrContext = context.ssrContext;
|
|
52
52
|
var _ref = _slicedToArray(ssrContext.template.split(HTML_SEPARATOR) || [], 2), tmp = _ref[0], beforeAppTemplate = tmp === void 0 ? "" : tmp, tmp1 = _ref[1], afterAppHtmlTemplate = tmp1 === void 0 ? "" : tmp1;
|
|
53
53
|
var builtBeforeTemplate = buildShellBeforeTemplate(beforeAppTemplate, context);
|
|
54
54
|
var builtAfterTemplate = buildShellAfterTemplate(afterAppHtmlTemplate, {
|
|
55
|
-
|
|
56
|
-
routerContext: routerContext,
|
|
55
|
+
context: context,
|
|
57
56
|
renderLevel: renderLevel
|
|
58
57
|
});
|
|
59
58
|
return {
|
|
@@ -171,7 +171,7 @@ var __generator = this && this.__generator || function(thisArg, body) {
|
|
|
171
171
|
};
|
|
172
172
|
import React from "react";
|
|
173
173
|
import ReactDomServer from "react-dom/server";
|
|
174
|
-
import { serializeJson } from "@modern-js/utils/serialize";
|
|
174
|
+
import { serializeJson } from "@modern-js/utils/universal/serialize";
|
|
175
175
|
import ReactHelmet from "react-helmet";
|
|
176
176
|
import { serializeErrors } from "../../../router/runtime/utils";
|
|
177
177
|
import helmetReplace from "../helmet";
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { jsx } from "react/jsx-runtime";
|
|
2
2
|
import React, { useContext, useMemo } from "react";
|
|
3
3
|
import hoistNonReactStatics from "hoist-non-react-statics";
|
|
4
|
-
import { ROUTE_MANIFEST } from "@modern-js/utils/constants";
|
|
4
|
+
import { ROUTE_MANIFEST } from "@modern-js/utils/universal/constants";
|
|
5
5
|
import {
|
|
6
6
|
RuntimeReactContext
|
|
7
7
|
} from "../runtimeContext";
|
|
@@ -24,10 +24,14 @@ const createApp = ({ plugins }) => {
|
|
|
24
24
|
return (App) => {
|
|
25
25
|
const runner = appRuntime.init();
|
|
26
26
|
const WrapperComponent = (props) => {
|
|
27
|
+
var _a;
|
|
27
28
|
const element = React.createElement(
|
|
28
29
|
App || React.Fragment,
|
|
29
|
-
{ ...props },
|
|
30
|
-
props.children
|
|
30
|
+
App ? { ...props } : null,
|
|
31
|
+
App ? props.children : React.cloneElement(props.children, {
|
|
32
|
+
...(_a = props.children) == null ? void 0 : _a.props,
|
|
33
|
+
...props
|
|
34
|
+
})
|
|
31
35
|
);
|
|
32
36
|
const context = useContext(RuntimeReactContext);
|
|
33
37
|
return runner.provide(
|