@modern-js/runtime 1.4.4 → 1.16.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 +65 -0
- package/dist/js/modern/cli/index.js +6 -6
- package/dist/js/modern/core/app-config.js +10 -0
- package/dist/js/modern/core/compatible.js +241 -0
- package/dist/js/modern/core/index.js +7 -0
- package/dist/js/modern/core/loader/index.js +1 -0
- package/dist/js/modern/core/loader/loaderManager.js +189 -0
- package/dist/js/modern/core/loader/useLoader.js +105 -0
- package/dist/js/modern/core/plugin.js +63 -0
- package/dist/js/modern/core/runtime-context.js +2 -0
- package/dist/js/modern/exports/styled.js +2 -2
- package/dist/js/modern/index.js +1 -1
- package/dist/js/modern/router/runtime/plugin.js +1 -1
- package/dist/js/modern/router/runtime/utils.js +3 -1
- package/dist/js/modern/ssr/index.js +34 -13
- package/dist/js/modern/ssr/index.node.js +1 -1
- package/dist/js/modern/ssr/prefetch.js +2 -2
- package/dist/js/modern/ssr/react/withCallback/index.js +17 -0
- package/dist/js/modern/ssr/serverRender/helmet.js +2 -2
- package/dist/js/modern/ssr/serverRender/index.js +1 -1
- package/dist/js/modern/ssr/serverRender/styledComponent.js +1 -1
- package/dist/js/modern/ssr/utils.js +9 -3
- package/dist/js/modern/state/runtime/plugin.js +1 -1
- package/dist/js/node/cli/index.js +5 -5
- package/dist/js/node/core/app-config.js +22 -0
- package/dist/js/node/core/compatible.js +271 -0
- package/dist/js/node/core/index.js +111 -0
- package/dist/js/node/core/loader/index.js +15 -0
- package/dist/js/node/core/loader/loaderManager.js +201 -0
- package/dist/js/node/core/loader/useLoader.js +118 -0
- package/dist/js/node/core/plugin.js +79 -0
- package/dist/js/node/core/runtime-context.js +11 -0
- package/dist/js/node/exports/styled.js +5 -5
- package/dist/js/node/index.js +10 -10
- package/dist/js/node/router/runtime/plugin.js +3 -3
- package/dist/js/node/router/runtime/utils.js +3 -1
- package/dist/js/node/ssr/index.js +37 -15
- package/dist/js/node/ssr/index.node.js +2 -2
- package/dist/js/node/ssr/react/withCallback/index.js +27 -0
- package/dist/js/node/ssr/serverRender/helmet.js +2 -2
- package/dist/js/node/ssr/serverRender/index.js +2 -2
- package/dist/js/node/ssr/serverRender/styledComponent.js +2 -2
- package/dist/js/node/ssr/utils.js +9 -3
- package/dist/js/node/state/runtime/plugin.js +3 -3
- package/dist/js/treeshaking/cli/index.js +6 -6
- package/dist/js/treeshaking/core/app-config.js +13 -0
- package/dist/js/treeshaking/core/compatible.js +297 -0
- package/dist/js/treeshaking/core/index.js +7 -0
- package/dist/js/treeshaking/core/loader/index.js +1 -0
- package/dist/js/treeshaking/core/loader/loaderManager.js +267 -0
- package/dist/js/treeshaking/core/loader/useLoader.js +107 -0
- package/dist/js/treeshaking/core/plugin.js +105 -0
- package/dist/js/treeshaking/core/runtime-context.js +2 -0
- package/dist/js/treeshaking/exports/styled.js +2 -2
- package/dist/js/treeshaking/index.js +1 -1
- package/dist/js/treeshaking/router/runtime/plugin.js +1 -1
- package/dist/js/treeshaking/router/runtime/utils.js +3 -1
- package/dist/js/treeshaking/ssr/index.js +45 -33
- package/dist/js/treeshaking/ssr/index.node.js +1 -1
- package/dist/js/treeshaking/ssr/prefetch.js +2 -2
- package/dist/js/treeshaking/ssr/react/withCallback/index.js +16 -0
- package/dist/js/treeshaking/ssr/serverRender/helmet.js +2 -2
- package/dist/js/treeshaking/ssr/serverRender/index.js +1 -1
- package/dist/js/treeshaking/ssr/serverRender/styledComponent.js +1 -1
- package/dist/js/treeshaking/ssr/utils.js +8 -3
- package/dist/js/treeshaking/state/runtime/plugin.js +1 -1
- package/dist/types/core/app-config.d.ts +6 -0
- package/dist/types/core/compatible.d.ts +17 -0
- package/dist/types/core/index.d.ts +9 -0
- package/dist/types/core/loader/index.d.ts +2 -0
- package/dist/types/core/loader/loaderManager.d.ts +57 -0
- package/dist/types/core/loader/useLoader.d.ts +54 -0
- package/dist/types/core/plugin.d.ts +215 -0
- package/dist/types/core/runtime-context.d.ts +13 -0
- package/dist/types/exports/styled.d.ts +2 -2
- package/dist/types/index.d.ts +4 -9
- package/dist/types/router/runtime/plugin.d.ts +1 -1
- package/dist/types/ssr/index.d.ts +2 -2
- package/dist/types/ssr/index.node.d.ts +1 -1
- package/dist/types/ssr/prefetch.d.ts +2 -2
- package/dist/types/ssr/react/nossr/index.d.ts +1 -1
- package/dist/types/ssr/react/withCallback/index.d.ts +5 -0
- package/dist/types/ssr/serverRender/entry.d.ts +1 -1
- package/dist/types/ssr/serverRender/index.d.ts +1 -1
- package/dist/types/ssr/serverRender/type.d.ts +1 -1
- package/dist/types/state/runtime/plugin.d.ts +2 -2
- package/lib/types.d.ts +10 -0
- package/package.json +39 -27
|
@@ -0,0 +1,111 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
var _exportNames = {
|
|
7
|
+
createPlugin: true,
|
|
8
|
+
createRuntime: true,
|
|
9
|
+
runtime: true,
|
|
10
|
+
registerInit: true,
|
|
11
|
+
registerPrefetch: true,
|
|
12
|
+
defineConfig: true,
|
|
13
|
+
getConfig: true,
|
|
14
|
+
RuntimeReactContext: true
|
|
15
|
+
};
|
|
16
|
+
Object.defineProperty(exports, "RuntimeReactContext", {
|
|
17
|
+
enumerable: true,
|
|
18
|
+
get: function () {
|
|
19
|
+
return _runtimeContext.RuntimeReactContext;
|
|
20
|
+
}
|
|
21
|
+
});
|
|
22
|
+
Object.defineProperty(exports, "createPlugin", {
|
|
23
|
+
enumerable: true,
|
|
24
|
+
get: function () {
|
|
25
|
+
return _plugin.createPlugin;
|
|
26
|
+
}
|
|
27
|
+
});
|
|
28
|
+
Object.defineProperty(exports, "createRuntime", {
|
|
29
|
+
enumerable: true,
|
|
30
|
+
get: function () {
|
|
31
|
+
return _plugin.createRuntime;
|
|
32
|
+
}
|
|
33
|
+
});
|
|
34
|
+
Object.defineProperty(exports, "defineConfig", {
|
|
35
|
+
enumerable: true,
|
|
36
|
+
get: function () {
|
|
37
|
+
return _appConfig.defineConfig;
|
|
38
|
+
}
|
|
39
|
+
});
|
|
40
|
+
Object.defineProperty(exports, "getConfig", {
|
|
41
|
+
enumerable: true,
|
|
42
|
+
get: function () {
|
|
43
|
+
return _appConfig.getConfig;
|
|
44
|
+
}
|
|
45
|
+
});
|
|
46
|
+
Object.defineProperty(exports, "registerInit", {
|
|
47
|
+
enumerable: true,
|
|
48
|
+
get: function () {
|
|
49
|
+
return _plugin.registerInit;
|
|
50
|
+
}
|
|
51
|
+
});
|
|
52
|
+
Object.defineProperty(exports, "registerPrefetch", {
|
|
53
|
+
enumerable: true,
|
|
54
|
+
get: function () {
|
|
55
|
+
return _plugin.registerPrefetch;
|
|
56
|
+
}
|
|
57
|
+
});
|
|
58
|
+
Object.defineProperty(exports, "runtime", {
|
|
59
|
+
enumerable: true,
|
|
60
|
+
get: function () {
|
|
61
|
+
return _plugin.runtime;
|
|
62
|
+
}
|
|
63
|
+
});
|
|
64
|
+
|
|
65
|
+
var _plugin = require("./plugin");
|
|
66
|
+
|
|
67
|
+
var _appConfig = require("./app-config");
|
|
68
|
+
|
|
69
|
+
var _compatible = require("./compatible");
|
|
70
|
+
|
|
71
|
+
Object.keys(_compatible).forEach(function (key) {
|
|
72
|
+
if (key === "default" || key === "__esModule") return;
|
|
73
|
+
if (Object.prototype.hasOwnProperty.call(_exportNames, key)) return;
|
|
74
|
+
if (key in exports && exports[key] === _compatible[key]) return;
|
|
75
|
+
Object.defineProperty(exports, key, {
|
|
76
|
+
enumerable: true,
|
|
77
|
+
get: function () {
|
|
78
|
+
return _compatible[key];
|
|
79
|
+
}
|
|
80
|
+
});
|
|
81
|
+
});
|
|
82
|
+
|
|
83
|
+
var _runtimeContext = require("./runtime-context");
|
|
84
|
+
|
|
85
|
+
var _loader = require("./loader");
|
|
86
|
+
|
|
87
|
+
Object.keys(_loader).forEach(function (key) {
|
|
88
|
+
if (key === "default" || key === "__esModule") return;
|
|
89
|
+
if (Object.prototype.hasOwnProperty.call(_exportNames, key)) return;
|
|
90
|
+
if (key in exports && exports[key] === _loader[key]) return;
|
|
91
|
+
Object.defineProperty(exports, key, {
|
|
92
|
+
enumerable: true,
|
|
93
|
+
get: function () {
|
|
94
|
+
return _loader[key];
|
|
95
|
+
}
|
|
96
|
+
});
|
|
97
|
+
});
|
|
98
|
+
|
|
99
|
+
var _plugin2 = require("@modern-js/plugin");
|
|
100
|
+
|
|
101
|
+
Object.keys(_plugin2).forEach(function (key) {
|
|
102
|
+
if (key === "default" || key === "__esModule") return;
|
|
103
|
+
if (Object.prototype.hasOwnProperty.call(_exportNames, key)) return;
|
|
104
|
+
if (key in exports && exports[key] === _plugin2[key]) return;
|
|
105
|
+
Object.defineProperty(exports, key, {
|
|
106
|
+
enumerable: true,
|
|
107
|
+
get: function () {
|
|
108
|
+
return _plugin2[key];
|
|
109
|
+
}
|
|
110
|
+
});
|
|
111
|
+
});
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
Object.defineProperty(exports, "useLoader", {
|
|
7
|
+
enumerable: true,
|
|
8
|
+
get: function () {
|
|
9
|
+
return _useLoader.default;
|
|
10
|
+
}
|
|
11
|
+
});
|
|
12
|
+
|
|
13
|
+
var _useLoader = _interopRequireDefault(require("./useLoader"));
|
|
14
|
+
|
|
15
|
+
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
@@ -0,0 +1,201 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.createLoaderManager = exports.LoaderStatus = void 0;
|
|
7
|
+
|
|
8
|
+
var _invariant = _interopRequireDefault(require("invariant"));
|
|
9
|
+
|
|
10
|
+
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
11
|
+
|
|
12
|
+
/**
|
|
13
|
+
* Calc id from string or object
|
|
14
|
+
*/
|
|
15
|
+
const createGetId = () => {
|
|
16
|
+
const idCache = new Map();
|
|
17
|
+
return objectId => {
|
|
18
|
+
const cachedId = idCache.get(objectId);
|
|
19
|
+
|
|
20
|
+
if (cachedId) {
|
|
21
|
+
return cachedId;
|
|
22
|
+
} // WARNING: id should be unique after serialize.
|
|
23
|
+
|
|
24
|
+
|
|
25
|
+
const id = JSON.stringify(objectId);
|
|
26
|
+
(0, _invariant.default)(id, 'params should be not null value');
|
|
27
|
+
idCache.set(objectId, id);
|
|
28
|
+
return id;
|
|
29
|
+
};
|
|
30
|
+
};
|
|
31
|
+
|
|
32
|
+
let LoaderStatus;
|
|
33
|
+
exports.LoaderStatus = LoaderStatus;
|
|
34
|
+
|
|
35
|
+
(function (LoaderStatus) {
|
|
36
|
+
LoaderStatus[LoaderStatus["idle"] = 0] = "idle";
|
|
37
|
+
LoaderStatus[LoaderStatus["loading"] = 1] = "loading";
|
|
38
|
+
LoaderStatus[LoaderStatus["fulfilled"] = 2] = "fulfilled";
|
|
39
|
+
LoaderStatus[LoaderStatus["rejected"] = 3] = "rejected";
|
|
40
|
+
})(LoaderStatus || (exports.LoaderStatus = LoaderStatus = {}));
|
|
41
|
+
|
|
42
|
+
const createLoader = (id, initialData = {
|
|
43
|
+
loading: false,
|
|
44
|
+
reloading: false,
|
|
45
|
+
data: undefined,
|
|
46
|
+
error: undefined
|
|
47
|
+
}, loaderFn, skip = false) => {
|
|
48
|
+
let promise;
|
|
49
|
+
let status = LoaderStatus.idle;
|
|
50
|
+
let {
|
|
51
|
+
data,
|
|
52
|
+
error
|
|
53
|
+
} = initialData;
|
|
54
|
+
let hasLoaded = false;
|
|
55
|
+
const handlers = new Set();
|
|
56
|
+
|
|
57
|
+
const load = async () => {
|
|
58
|
+
if (skip) {
|
|
59
|
+
return promise;
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
if (status === LoaderStatus.loading) {
|
|
63
|
+
return promise;
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
status = LoaderStatus.loading;
|
|
67
|
+
notify();
|
|
68
|
+
promise = loaderFn().then(value => {
|
|
69
|
+
data = value;
|
|
70
|
+
error = null;
|
|
71
|
+
status = LoaderStatus.fulfilled;
|
|
72
|
+
}).catch(e => {
|
|
73
|
+
error = e;
|
|
74
|
+
data = null;
|
|
75
|
+
status = LoaderStatus.rejected;
|
|
76
|
+
}).finally(() => {
|
|
77
|
+
promise = null;
|
|
78
|
+
hasLoaded = true;
|
|
79
|
+
notify();
|
|
80
|
+
});
|
|
81
|
+
return promise;
|
|
82
|
+
};
|
|
83
|
+
|
|
84
|
+
const getResult = () => ({
|
|
85
|
+
loading: !hasLoaded && status === LoaderStatus.loading,
|
|
86
|
+
reloading: hasLoaded && status === LoaderStatus.loading,
|
|
87
|
+
data,
|
|
88
|
+
error: error instanceof Error ? `${error.message}` : error,
|
|
89
|
+
// redundant fields for ssr log
|
|
90
|
+
_error: error
|
|
91
|
+
});
|
|
92
|
+
|
|
93
|
+
const notify = () => {
|
|
94
|
+
// don't iterate handlers directly, since it could be modified during iteration
|
|
95
|
+
[...handlers].forEach(handler => {
|
|
96
|
+
handler(status, getResult());
|
|
97
|
+
});
|
|
98
|
+
};
|
|
99
|
+
|
|
100
|
+
const onChange = handler => {
|
|
101
|
+
handlers.add(handler);
|
|
102
|
+
return () => {
|
|
103
|
+
handlers.delete(handler);
|
|
104
|
+
};
|
|
105
|
+
};
|
|
106
|
+
|
|
107
|
+
return {
|
|
108
|
+
get result() {
|
|
109
|
+
return getResult();
|
|
110
|
+
},
|
|
111
|
+
|
|
112
|
+
get promise() {
|
|
113
|
+
return promise;
|
|
114
|
+
},
|
|
115
|
+
|
|
116
|
+
onChange,
|
|
117
|
+
load
|
|
118
|
+
};
|
|
119
|
+
};
|
|
120
|
+
|
|
121
|
+
/**
|
|
122
|
+
* Create loaders manager. It's returned instance will add to context
|
|
123
|
+
* @param initialDataMap used to initialing loader data
|
|
124
|
+
*/
|
|
125
|
+
const createLoaderManager = (initialDataMap, managerOptions = {}) => {
|
|
126
|
+
const {
|
|
127
|
+
skipStatic = false,
|
|
128
|
+
skipNonStatic = false
|
|
129
|
+
} = managerOptions;
|
|
130
|
+
const loadersMap = new Map();
|
|
131
|
+
const getId = createGetId();
|
|
132
|
+
|
|
133
|
+
const add = (loaderFn, loaderOptions) => {
|
|
134
|
+
const id = getId(loaderOptions.params);
|
|
135
|
+
let loader = loadersMap.get(id); // private property for opting out loader cache, maybe change in future
|
|
136
|
+
|
|
137
|
+
const cache = loaderOptions._cache;
|
|
138
|
+
|
|
139
|
+
if (!loader || cache === false) {
|
|
140
|
+
// ignore non-static loader on static phase
|
|
141
|
+
const ignoreNonStatic = skipNonStatic && !loaderOptions.static; // ignore static loader on non-static phase
|
|
142
|
+
|
|
143
|
+
const ignoreStatic = skipStatic && loaderOptions.static;
|
|
144
|
+
const skipExec = ignoreNonStatic || ignoreStatic;
|
|
145
|
+
loader = createLoader(id, typeof initialDataMap[id] !== 'undefined' ? initialDataMap[id] : {
|
|
146
|
+
data: loaderOptions.initialData
|
|
147
|
+
}, loaderFn, // Todo whether static loader is exec when CSR
|
|
148
|
+
skipExec);
|
|
149
|
+
loadersMap.set(id, loader);
|
|
150
|
+
}
|
|
151
|
+
|
|
152
|
+
return id;
|
|
153
|
+
};
|
|
154
|
+
|
|
155
|
+
const get = id => loadersMap.get(id); // check if there has pending loaders
|
|
156
|
+
|
|
157
|
+
|
|
158
|
+
const hasPendingLoaders = () => {
|
|
159
|
+
for (const loader of loadersMap.values()) {
|
|
160
|
+
const {
|
|
161
|
+
promise
|
|
162
|
+
} = loader;
|
|
163
|
+
|
|
164
|
+
if (promise instanceof Promise) {
|
|
165
|
+
return true;
|
|
166
|
+
}
|
|
167
|
+
}
|
|
168
|
+
|
|
169
|
+
return false;
|
|
170
|
+
}; // waiting for all pending loaders to be settled
|
|
171
|
+
|
|
172
|
+
|
|
173
|
+
const awaitPendingLoaders = async () => {
|
|
174
|
+
const pendingLoaders = [];
|
|
175
|
+
|
|
176
|
+
for (const [id, loader] of loadersMap) {
|
|
177
|
+
const {
|
|
178
|
+
promise
|
|
179
|
+
} = loader;
|
|
180
|
+
|
|
181
|
+
if (promise instanceof Promise) {
|
|
182
|
+
pendingLoaders.push([id, loader]);
|
|
183
|
+
}
|
|
184
|
+
}
|
|
185
|
+
|
|
186
|
+
await Promise.all(pendingLoaders.map(item => item[1].promise));
|
|
187
|
+
return pendingLoaders.reduce((res, [id, loader]) => {
|
|
188
|
+
res[id] = loader.result;
|
|
189
|
+
return res;
|
|
190
|
+
}, {});
|
|
191
|
+
};
|
|
192
|
+
|
|
193
|
+
return {
|
|
194
|
+
hasPendingLoaders,
|
|
195
|
+
awaitPendingLoaders,
|
|
196
|
+
add,
|
|
197
|
+
get
|
|
198
|
+
};
|
|
199
|
+
};
|
|
200
|
+
|
|
201
|
+
exports.createLoaderManager = createLoaderManager;
|
|
@@ -0,0 +1,118 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.default = void 0;
|
|
7
|
+
|
|
8
|
+
var _react = require("react");
|
|
9
|
+
|
|
10
|
+
var _invariant = _interopRequireDefault(require("invariant"));
|
|
11
|
+
|
|
12
|
+
var _runtimeContext = require("../runtime-context");
|
|
13
|
+
|
|
14
|
+
var _loaderManager = require("./loaderManager");
|
|
15
|
+
|
|
16
|
+
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
17
|
+
|
|
18
|
+
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; }
|
|
19
|
+
|
|
20
|
+
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; }
|
|
21
|
+
|
|
22
|
+
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; }
|
|
23
|
+
|
|
24
|
+
const useLoader = (loaderFn, options = {
|
|
25
|
+
params: undefined
|
|
26
|
+
}) => {
|
|
27
|
+
const context = (0, _react.useContext)(_runtimeContext.RuntimeReactContext);
|
|
28
|
+
const isSSRRender = Boolean(context.ssr);
|
|
29
|
+
const {
|
|
30
|
+
loaderManager
|
|
31
|
+
} = context;
|
|
32
|
+
const loaderRef = (0, _react.useRef)();
|
|
33
|
+
const unlistenLoaderChangeRef = (0, _react.useRef)(null); // SSR render should ignore `_cache` prop
|
|
34
|
+
|
|
35
|
+
if (isSSRRender && Object.prototype.hasOwnProperty.call(options, '_cache')) {
|
|
36
|
+
delete options._cache;
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
const load = (0, _react.useCallback)(params => {
|
|
40
|
+
var _unlistenLoaderChange, _window, _window$_SSR_DATA, _window$_SSR_DATA$dat, _window$_SSR_DATA$dat2, _loaderRef$current2;
|
|
41
|
+
|
|
42
|
+
if (typeof params === 'undefined') {
|
|
43
|
+
var _loaderRef$current;
|
|
44
|
+
|
|
45
|
+
return (_loaderRef$current = loaderRef.current) === null || _loaderRef$current === void 0 ? void 0 : _loaderRef$current.load();
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
const id = loaderManager.add(() => {
|
|
49
|
+
try {
|
|
50
|
+
const res = loaderFn(context, params);
|
|
51
|
+
|
|
52
|
+
if (res instanceof Promise) {
|
|
53
|
+
return res;
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
return Promise.resolve(res);
|
|
57
|
+
} catch (e) {
|
|
58
|
+
return Promise.reject(e);
|
|
59
|
+
}
|
|
60
|
+
}, _objectSpread(_objectSpread({}, options), {}, {
|
|
61
|
+
params
|
|
62
|
+
}));
|
|
63
|
+
loaderRef.current = loaderManager.get(id); // unsubscribe old loader onChange event
|
|
64
|
+
|
|
65
|
+
(_unlistenLoaderChange = unlistenLoaderChangeRef.current) === null || _unlistenLoaderChange === void 0 ? void 0 : _unlistenLoaderChange.call(unlistenLoaderChangeRef);
|
|
66
|
+
|
|
67
|
+
if (isSSRRender) {
|
|
68
|
+
return undefined;
|
|
69
|
+
} // skip this loader, then try to unlisten loader change
|
|
70
|
+
|
|
71
|
+
|
|
72
|
+
if (options.skip) {
|
|
73
|
+
return undefined;
|
|
74
|
+
} // do not load data again in CSR hydrate stage if SSR data exists
|
|
75
|
+
|
|
76
|
+
|
|
77
|
+
if (context._hydration && ((_window = window) === null || _window === void 0 ? void 0 : (_window$_SSR_DATA = _window._SSR_DATA) === null || _window$_SSR_DATA === void 0 ? void 0 : (_window$_SSR_DATA$dat = _window$_SSR_DATA.data) === null || _window$_SSR_DATA$dat === void 0 ? void 0 : (_window$_SSR_DATA$dat2 = _window$_SSR_DATA$dat.loadersData[id]) === null || _window$_SSR_DATA$dat2 === void 0 ? void 0 : _window$_SSR_DATA$dat2.error) === null) {
|
|
78
|
+
return undefined;
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
const res = loaderRef.current.load();
|
|
82
|
+
unlistenLoaderChangeRef.current = (_loaderRef$current2 = loaderRef.current) === null || _loaderRef$current2 === void 0 ? void 0 : _loaderRef$current2.onChange((_status, _result) => {
|
|
83
|
+
setResult(_result);
|
|
84
|
+
|
|
85
|
+
if (_status === _loaderManager.LoaderStatus.fulfilled) {
|
|
86
|
+
var _options$onSuccess;
|
|
87
|
+
|
|
88
|
+
options === null || options === void 0 ? void 0 : (_options$onSuccess = options.onSuccess) === null || _options$onSuccess === void 0 ? void 0 : _options$onSuccess.call(options, _result.data);
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
if (_status === _loaderManager.LoaderStatus.rejected) {
|
|
92
|
+
var _options$onError;
|
|
93
|
+
|
|
94
|
+
options === null || options === void 0 ? void 0 : (_options$onError = options.onError) === null || _options$onError === void 0 ? void 0 : _options$onError.call(options, _result.error);
|
|
95
|
+
}
|
|
96
|
+
});
|
|
97
|
+
return res;
|
|
98
|
+
}, [options.skip]);
|
|
99
|
+
(0, _react.useEffect)(() => () => {
|
|
100
|
+
var _unlistenLoaderChange2;
|
|
101
|
+
|
|
102
|
+
(_unlistenLoaderChange2 = unlistenLoaderChangeRef.current) === null || _unlistenLoaderChange2 === void 0 ? void 0 : _unlistenLoaderChange2.call(unlistenLoaderChangeRef);
|
|
103
|
+
}, []);
|
|
104
|
+
(0, _react.useMemo)(() => {
|
|
105
|
+
var _options$params;
|
|
106
|
+
|
|
107
|
+
const p = (_options$params = options.params) !== null && _options$params !== void 0 ? _options$params : loaderFn.id;
|
|
108
|
+
(0, _invariant.default)(typeof p !== 'undefined' && p !== null, 'Params is required in useLoader');
|
|
109
|
+
load(p);
|
|
110
|
+
}, [options.params]);
|
|
111
|
+
const [result, setResult] = (0, _react.useState)(loaderRef.current.result);
|
|
112
|
+
return _objectSpread(_objectSpread({}, result), {}, {
|
|
113
|
+
reload: load
|
|
114
|
+
});
|
|
115
|
+
};
|
|
116
|
+
|
|
117
|
+
var _default = useLoader;
|
|
118
|
+
exports.default = _default;
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.runtime = exports.registerPrefetch = exports.registerInit = exports.createRuntime = exports.createPlugin = void 0;
|
|
7
|
+
|
|
8
|
+
var _plugin = require("@modern-js/plugin");
|
|
9
|
+
|
|
10
|
+
var _loaderManager = require("./loader/loaderManager");
|
|
11
|
+
|
|
12
|
+
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; }
|
|
13
|
+
|
|
14
|
+
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; }
|
|
15
|
+
|
|
16
|
+
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
|
+
const hoc = (0, _plugin.createPipeline)(); // eslint-disable-next-line @typescript-eslint/no-empty-interface
|
|
19
|
+
|
|
20
|
+
const provide = (0, _plugin.createPipeline)();
|
|
21
|
+
const client = (0, _plugin.createAsyncPipeline)();
|
|
22
|
+
const server = (0, _plugin.createAsyncPipeline)();
|
|
23
|
+
const init = (0, _plugin.createAsyncPipeline)();
|
|
24
|
+
const pickContext = (0, _plugin.createPipeline)();
|
|
25
|
+
const runtimeHooks = {
|
|
26
|
+
hoc,
|
|
27
|
+
provide,
|
|
28
|
+
client,
|
|
29
|
+
server,
|
|
30
|
+
init,
|
|
31
|
+
pickContext
|
|
32
|
+
};
|
|
33
|
+
/** All hooks of runtime plugin. */
|
|
34
|
+
|
|
35
|
+
const createRuntime = () => (0, _plugin.createManager)(runtimeHooks);
|
|
36
|
+
/**
|
|
37
|
+
* register init hook. It would be revoked both ssr and csr.
|
|
38
|
+
*/
|
|
39
|
+
|
|
40
|
+
|
|
41
|
+
exports.createRuntime = createRuntime;
|
|
42
|
+
|
|
43
|
+
const registerInit = (App, _init) => {
|
|
44
|
+
const originalInit = App.init;
|
|
45
|
+
|
|
46
|
+
App.init = async context => {
|
|
47
|
+
if (!context.loaderManager) {
|
|
48
|
+
context.loaderManager = (0, _loaderManager.createLoaderManager)({});
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
await Promise.all([originalInit === null || originalInit === void 0 ? void 0 : originalInit(context), _init === null || _init === void 0 ? void 0 : _init(context)]);
|
|
52
|
+
};
|
|
53
|
+
};
|
|
54
|
+
/**
|
|
55
|
+
* register prefetch hook. It would be revoked both ssr and csr.
|
|
56
|
+
* But if ssr success, It wont exec in csr again.
|
|
57
|
+
* If ssr prefetch failed, It will fallback to exec in csr.
|
|
58
|
+
*/
|
|
59
|
+
|
|
60
|
+
|
|
61
|
+
exports.registerInit = registerInit;
|
|
62
|
+
|
|
63
|
+
const registerPrefetch = (App, prefetch) => {
|
|
64
|
+
const originalPrefetch = App.prefetch;
|
|
65
|
+
|
|
66
|
+
App.prefetch = async context => {
|
|
67
|
+
const originResult = await (originalPrefetch === null || originalPrefetch === void 0 ? void 0 : originalPrefetch(context));
|
|
68
|
+
const result = await (prefetch === null || prefetch === void 0 ? void 0 : prefetch(context));
|
|
69
|
+
return _objectSpread(_objectSpread({}, originResult), result);
|
|
70
|
+
};
|
|
71
|
+
};
|
|
72
|
+
|
|
73
|
+
exports.registerPrefetch = registerPrefetch;
|
|
74
|
+
const runtime = createRuntime();
|
|
75
|
+
exports.runtime = runtime;
|
|
76
|
+
const {
|
|
77
|
+
createPlugin
|
|
78
|
+
} = runtime;
|
|
79
|
+
exports.createPlugin = createPlugin;
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, "__esModule", {
|
|
4
|
+
value: true
|
|
5
|
+
});
|
|
6
|
+
exports.RuntimeReactContext = void 0;
|
|
7
|
+
|
|
8
|
+
var _react = require("react");
|
|
9
|
+
|
|
10
|
+
const RuntimeReactContext = /*#__PURE__*/(0, _react.createContext)({});
|
|
11
|
+
exports.RuntimeReactContext = RuntimeReactContext;
|
|
@@ -6,16 +6,16 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
6
6
|
var _exportNames = {};
|
|
7
7
|
exports.default = void 0;
|
|
8
8
|
|
|
9
|
-
var
|
|
9
|
+
var _styledComponents = _interopRequireWildcard(require("styled-components"));
|
|
10
10
|
|
|
11
|
-
Object.keys(
|
|
11
|
+
Object.keys(_styledComponents).forEach(function (key) {
|
|
12
12
|
if (key === "default" || key === "__esModule") return;
|
|
13
13
|
if (Object.prototype.hasOwnProperty.call(_exportNames, key)) return;
|
|
14
|
-
if (key in exports && exports[key] ===
|
|
14
|
+
if (key in exports && exports[key] === _styledComponents[key]) return;
|
|
15
15
|
Object.defineProperty(exports, key, {
|
|
16
16
|
enumerable: true,
|
|
17
17
|
get: function () {
|
|
18
|
-
return
|
|
18
|
+
return _styledComponents[key];
|
|
19
19
|
}
|
|
20
20
|
});
|
|
21
21
|
});
|
|
@@ -24,5 +24,5 @@ function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "functio
|
|
|
24
24
|
|
|
25
25
|
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; }
|
|
26
26
|
|
|
27
|
-
var _default =
|
|
27
|
+
var _default = _styledComponents.default;
|
|
28
28
|
exports.default = _default;
|
package/dist/js/node/index.js
CHANGED
|
@@ -6,56 +6,56 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
6
6
|
Object.defineProperty(exports, "RuntimeReactContext", {
|
|
7
7
|
enumerable: true,
|
|
8
8
|
get: function () {
|
|
9
|
-
return
|
|
9
|
+
return _core.RuntimeReactContext;
|
|
10
10
|
}
|
|
11
11
|
});
|
|
12
12
|
Object.defineProperty(exports, "bootstrap", {
|
|
13
13
|
enumerable: true,
|
|
14
14
|
get: function () {
|
|
15
|
-
return
|
|
15
|
+
return _core.bootstrap;
|
|
16
16
|
}
|
|
17
17
|
});
|
|
18
18
|
Object.defineProperty(exports, "createApp", {
|
|
19
19
|
enumerable: true,
|
|
20
20
|
get: function () {
|
|
21
|
-
return
|
|
21
|
+
return _core.createApp;
|
|
22
22
|
}
|
|
23
23
|
});
|
|
24
24
|
Object.defineProperty(exports, "createPlugin", {
|
|
25
25
|
enumerable: true,
|
|
26
26
|
get: function () {
|
|
27
|
-
return
|
|
27
|
+
return _core.createPlugin;
|
|
28
28
|
}
|
|
29
29
|
});
|
|
30
30
|
Object.defineProperty(exports, "defineConfig", {
|
|
31
31
|
enumerable: true,
|
|
32
32
|
get: function () {
|
|
33
|
-
return
|
|
33
|
+
return _core.defineConfig;
|
|
34
34
|
}
|
|
35
35
|
});
|
|
36
36
|
Object.defineProperty(exports, "registerInit", {
|
|
37
37
|
enumerable: true,
|
|
38
38
|
get: function () {
|
|
39
|
-
return
|
|
39
|
+
return _core.registerInit;
|
|
40
40
|
}
|
|
41
41
|
});
|
|
42
42
|
Object.defineProperty(exports, "registerPrefetch", {
|
|
43
43
|
enumerable: true,
|
|
44
44
|
get: function () {
|
|
45
|
-
return
|
|
45
|
+
return _core.registerPrefetch;
|
|
46
46
|
}
|
|
47
47
|
});
|
|
48
48
|
Object.defineProperty(exports, "useLoader", {
|
|
49
49
|
enumerable: true,
|
|
50
50
|
get: function () {
|
|
51
|
-
return
|
|
51
|
+
return _core.useLoader;
|
|
52
52
|
}
|
|
53
53
|
});
|
|
54
54
|
Object.defineProperty(exports, "useRuntimeContext", {
|
|
55
55
|
enumerable: true,
|
|
56
56
|
get: function () {
|
|
57
|
-
return
|
|
57
|
+
return _core.useRuntimeContext;
|
|
58
58
|
}
|
|
59
59
|
});
|
|
60
60
|
|
|
61
|
-
var
|
|
61
|
+
var _core = require("./core");
|
|
@@ -11,10 +11,10 @@ var _history = require("history");
|
|
|
11
11
|
|
|
12
12
|
var _reactRouterDom = require("react-router-dom");
|
|
13
13
|
|
|
14
|
-
var _runtimeCore = require("@modern-js/runtime-core");
|
|
15
|
-
|
|
16
14
|
var _hoistNonReactStatics = _interopRequireDefault(require("hoist-non-react-statics"));
|
|
17
15
|
|
|
16
|
+
var _core = require("../../core");
|
|
17
|
+
|
|
18
18
|
var _common = require("../../common");
|
|
19
19
|
|
|
20
20
|
var _utils = require("./utils");
|
|
@@ -67,7 +67,7 @@ const routerPlugin = ({
|
|
|
67
67
|
}
|
|
68
68
|
|
|
69
69
|
return props => {
|
|
70
|
-
const runtimeContext = (0, _react.useContext)(
|
|
70
|
+
const runtimeContext = (0, _react.useContext)(_core.RuntimeReactContext);
|
|
71
71
|
const {
|
|
72
72
|
ssrContext
|
|
73
73
|
} = runtimeContext;
|
|
@@ -83,11 +83,13 @@ function renderRoutes(routesConfig, extraProps = {}) {
|
|
|
83
83
|
}
|
|
84
84
|
|
|
85
85
|
function getLocation(serverContext) {
|
|
86
|
+
var _url$replace;
|
|
87
|
+
|
|
86
88
|
const {
|
|
87
89
|
pathname,
|
|
88
90
|
url
|
|
89
91
|
} = (serverContext === null || serverContext === void 0 ? void 0 : serverContext.request) || {};
|
|
90
|
-
const cleanUrl = url.replace('http://', '').replace('https://', '');
|
|
92
|
+
const cleanUrl = url === null || url === void 0 ? void 0 : (_url$replace = url.replace('http://', '')) === null || _url$replace === void 0 ? void 0 : _url$replace.replace('https://', '');
|
|
91
93
|
const index = (cleanUrl || '').indexOf(pathname);
|
|
92
94
|
|
|
93
95
|
if (index === -1) {
|