@modern-js/prod-server 2.0.0-beta.0 → 2.0.0-beta.2
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 +110 -0
- package/dist/js/modern/constants.js +0 -2
- package/dist/js/modern/index.js +0 -1
- package/dist/js/modern/libs/context/context.js +10 -56
- package/dist/js/modern/libs/hook-api/index.js +0 -31
- package/dist/js/modern/libs/hook-api/route.js +0 -8
- package/dist/js/modern/libs/hook-api/template.js +0 -16
- package/dist/js/modern/libs/loadConfig.js +3 -10
- package/dist/js/modern/libs/metrics.js +6 -6
- package/dist/js/modern/libs/proxy.js +7 -12
- package/dist/js/modern/libs/render/cache/__tests__/cache.fun.test.js +0 -1
- package/dist/js/modern/libs/render/cache/__tests__/cache.test.js +0 -9
- package/dist/js/modern/libs/render/cache/index.js +8 -16
- package/dist/js/modern/libs/render/cache/page-caches/lru.js +0 -10
- package/dist/js/modern/libs/render/cache/spr.js +12 -62
- package/dist/js/modern/libs/render/cache/util.js +0 -6
- package/dist/js/modern/libs/render/index.js +6 -11
- package/dist/js/modern/libs/render/measure.js +1 -11
- package/dist/js/modern/libs/render/modern/index.js +2 -13
- package/dist/js/modern/libs/render/reader.js +13 -24
- package/dist/js/modern/libs/render/ssr.js +5 -6
- package/dist/js/modern/libs/render/static.js +6 -9
- package/dist/js/modern/libs/render/type.js +0 -1
- package/dist/js/modern/libs/route/index.js +8 -19
- package/dist/js/modern/libs/route/matcher.js +21 -29
- package/dist/js/modern/libs/route/route.js +0 -13
- package/dist/js/modern/libs/serve-file.js +5 -6
- package/dist/js/modern/server/index.js +25 -52
- package/dist/js/modern/server/modern-server-split.js +0 -11
- package/dist/js/modern/server/modern-server.js +87 -167
- package/dist/js/modern/utils.js +12 -27
- package/dist/js/modern/worker-server.js +34 -0
- package/dist/js/node/constants.js +0 -2
- package/dist/js/node/index.js +0 -10
- package/dist/js/node/libs/context/context.js +10 -65
- package/dist/js/node/libs/context/index.js +0 -3
- package/dist/js/node/libs/hook-api/index.js +0 -42
- package/dist/js/node/libs/hook-api/route.js +0 -10
- package/dist/js/node/libs/hook-api/template.js +0 -22
- package/dist/js/node/libs/loadConfig.js +3 -22
- package/dist/js/node/libs/metrics.js +6 -6
- package/dist/js/node/libs/proxy.js +7 -17
- package/dist/js/node/libs/render/cache/__tests__/cache.fun.test.js +0 -5
- package/dist/js/node/libs/render/cache/__tests__/cache.test.js +0 -12
- package/dist/js/node/libs/render/cache/index.js +8 -22
- package/dist/js/node/libs/render/cache/page-caches/index.js +0 -2
- package/dist/js/node/libs/render/cache/page-caches/lru.js +0 -14
- package/dist/js/node/libs/render/cache/spr.js +12 -71
- package/dist/js/node/libs/render/cache/util.js +0 -18
- package/dist/js/node/libs/render/index.js +6 -26
- package/dist/js/node/libs/render/measure.js +0 -17
- package/dist/js/node/libs/render/modern/index.js +2 -20
- package/dist/js/node/libs/render/reader.js +12 -39
- package/dist/js/node/libs/render/ssr.js +4 -16
- package/dist/js/node/libs/render/static.js +6 -18
- package/dist/js/node/libs/render/type.js +0 -1
- package/dist/js/node/libs/route/index.js +8 -22
- package/dist/js/node/libs/route/matcher.js +18 -34
- package/dist/js/node/libs/route/route.js +0 -15
- package/dist/js/node/libs/serve-file.js +5 -13
- package/dist/js/node/server/index.js +25 -72
- package/dist/js/node/server/modern-server-split.js +0 -13
- package/dist/js/node/server/modern-server.js +87 -196
- package/dist/js/node/utils.js +13 -52
- package/dist/js/node/worker-server.js +41 -0
- package/dist/js/treeshaking/constants.js +28 -0
- package/dist/js/treeshaking/index.js +13 -0
- package/dist/js/treeshaking/libs/context/context.js +243 -0
- package/dist/js/treeshaking/libs/context/index.js +5 -0
- package/dist/js/treeshaking/libs/hook-api/index.js +157 -0
- package/dist/js/treeshaking/libs/hook-api/route.js +33 -0
- package/dist/js/treeshaking/libs/hook-api/template.js +91 -0
- package/dist/js/treeshaking/libs/loadConfig.js +39 -0
- package/dist/js/treeshaking/libs/metrics.js +12 -0
- package/dist/js/treeshaking/libs/proxy.js +80 -0
- package/dist/js/treeshaking/libs/render/cache/__tests__/cache.fun.test.js +124 -0
- package/dist/js/treeshaking/libs/render/cache/__tests__/cache.test.js +464 -0
- package/dist/js/treeshaking/libs/render/cache/__tests__/cacheable.js +53 -0
- package/dist/js/treeshaking/libs/render/cache/__tests__/error-configuration.js +35 -0
- package/dist/js/treeshaking/libs/render/cache/__tests__/matched-cache.js +121 -0
- package/dist/js/treeshaking/libs/render/cache/index.js +184 -0
- package/dist/js/treeshaking/libs/render/cache/page-caches/index.js +30 -0
- package/dist/js/treeshaking/libs/render/cache/page-caches/lru.js +46 -0
- package/dist/js/treeshaking/libs/render/cache/spr.js +362 -0
- package/dist/js/treeshaking/libs/render/cache/type.js +1 -0
- package/dist/js/treeshaking/libs/render/cache/util.js +101 -0
- package/dist/js/treeshaking/libs/render/index.js +100 -0
- package/dist/js/treeshaking/libs/render/measure.js +61 -0
- package/dist/js/treeshaking/libs/render/modern/browser-list.js +7 -0
- package/dist/js/treeshaking/libs/render/modern/index.js +39 -0
- package/dist/js/treeshaking/libs/render/reader.js +191 -0
- package/dist/js/treeshaking/libs/render/ssr.js +98 -0
- package/dist/js/treeshaking/libs/render/static.js +84 -0
- package/dist/js/treeshaking/libs/render/type.js +6 -0
- package/dist/js/treeshaking/libs/route/index.js +94 -0
- package/dist/js/treeshaking/libs/route/matcher.js +113 -0
- package/dist/js/treeshaking/libs/route/route.js +26 -0
- package/dist/js/treeshaking/libs/serve-file.js +75 -0
- package/dist/js/treeshaking/server/index.js +339 -0
- package/dist/js/treeshaking/server/modern-server-split.js +152 -0
- package/dist/js/treeshaking/server/modern-server.js +946 -0
- package/dist/js/treeshaking/type.js +1 -0
- package/dist/js/treeshaking/utils.js +90 -0
- package/dist/js/treeshaking/worker-server.js +56 -0
- package/dist/types/index.d.ts +0 -2
- package/dist/types/libs/context/context.d.ts +0 -3
- package/dist/types/libs/loadConfig.d.ts +0 -1
- package/dist/types/libs/render/cache/index.d.ts +0 -2
- package/dist/types/libs/render/cache/spr.d.ts +0 -2
- package/dist/types/server/index.d.ts +0 -3
- package/dist/types/utils.d.ts +2 -3
- package/dist/types/worker-server.d.ts +16 -0
- package/package.json +31 -15
|
@@ -4,11 +4,8 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
6
|
exports.templateInjectableStream = exports.TemplateAPI = void 0;
|
|
7
|
-
|
|
8
7
|
var _stream = require("stream");
|
|
9
|
-
|
|
10
8
|
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; }
|
|
11
|
-
|
|
12
9
|
const RegList = {
|
|
13
10
|
before: {
|
|
14
11
|
head: '<head>',
|
|
@@ -19,58 +16,46 @@ const RegList = {
|
|
|
19
16
|
body: '</body>'
|
|
20
17
|
}
|
|
21
18
|
};
|
|
22
|
-
|
|
23
19
|
class TemplateAPI {
|
|
24
20
|
constructor(content) {
|
|
25
21
|
_defineProperty(this, "content", void 0);
|
|
26
|
-
|
|
27
22
|
this.content = content;
|
|
28
23
|
}
|
|
29
|
-
|
|
30
24
|
get() {
|
|
31
25
|
return this.content;
|
|
32
26
|
}
|
|
33
|
-
|
|
34
27
|
set(content) {
|
|
35
28
|
this.content = content;
|
|
36
29
|
}
|
|
37
|
-
|
|
38
30
|
prependHead(fragment) {
|
|
39
31
|
const {
|
|
40
32
|
head
|
|
41
33
|
} = RegList.before;
|
|
42
34
|
return this.replace(head, `${head}${fragment}`);
|
|
43
35
|
}
|
|
44
|
-
|
|
45
36
|
appendHead(fragment) {
|
|
46
37
|
const {
|
|
47
38
|
head
|
|
48
39
|
} = RegList.after;
|
|
49
40
|
return this.replace(head, `${fragment}${head}`);
|
|
50
41
|
}
|
|
51
|
-
|
|
52
42
|
prependBody(fragment) {
|
|
53
43
|
const {
|
|
54
44
|
body
|
|
55
45
|
} = RegList.before;
|
|
56
46
|
return this.replace(body, `${body}${fragment}`);
|
|
57
47
|
}
|
|
58
|
-
|
|
59
48
|
appendBody(fragment) {
|
|
60
49
|
const {
|
|
61
50
|
body
|
|
62
51
|
} = RegList.after;
|
|
63
52
|
return this.replace(body, `${fragment}${body}`);
|
|
64
53
|
}
|
|
65
|
-
|
|
66
54
|
replace(reg, text) {
|
|
67
55
|
this.content = this.content.replace(reg, text);
|
|
68
56
|
}
|
|
69
|
-
|
|
70
57
|
}
|
|
71
|
-
|
|
72
58
|
exports.TemplateAPI = TemplateAPI;
|
|
73
|
-
|
|
74
59
|
const templateInjectableStream = ({
|
|
75
60
|
prependHead,
|
|
76
61
|
appendHead,
|
|
@@ -79,39 +64,32 @@ const templateInjectableStream = ({
|
|
|
79
64
|
}) => new _stream.Transform({
|
|
80
65
|
write(chunk, _, callback) {
|
|
81
66
|
let chunk_str = chunk.toString();
|
|
82
|
-
|
|
83
67
|
if (prependHead) {
|
|
84
68
|
const {
|
|
85
69
|
head
|
|
86
70
|
} = RegList.before;
|
|
87
71
|
chunk_str = chunk_str.replace(head, `${head}${prependHead}`);
|
|
88
72
|
}
|
|
89
|
-
|
|
90
73
|
if (appendHead) {
|
|
91
74
|
const {
|
|
92
75
|
head
|
|
93
76
|
} = RegList.after;
|
|
94
77
|
chunk_str = chunk_str.replace(head, `${appendHead}${head}`);
|
|
95
78
|
}
|
|
96
|
-
|
|
97
79
|
if (prependBody) {
|
|
98
80
|
const {
|
|
99
81
|
body
|
|
100
82
|
} = RegList.before;
|
|
101
83
|
chunk_str = chunk_str.replace(body, `${body}${prependBody}`);
|
|
102
84
|
}
|
|
103
|
-
|
|
104
85
|
if (appendBody) {
|
|
105
86
|
const {
|
|
106
87
|
body
|
|
107
88
|
} = RegList.after;
|
|
108
89
|
chunk_str = chunk_str.replace(body, `${appendBody}${body}`);
|
|
109
90
|
}
|
|
110
|
-
|
|
111
91
|
this.push(chunk_str);
|
|
112
92
|
callback();
|
|
113
93
|
}
|
|
114
|
-
|
|
115
94
|
});
|
|
116
|
-
|
|
117
95
|
exports.templateInjectableStream = templateInjectableStream;
|
|
@@ -4,69 +4,50 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
6
|
exports.requireConfig = exports.loadConfig = exports.getServerConfigPath = void 0;
|
|
7
|
-
|
|
8
7
|
var path = _interopRequireWildcard(require("path"));
|
|
9
|
-
|
|
10
8
|
var _utils = require("@modern-js/utils");
|
|
11
|
-
|
|
12
9
|
var _mergeDeep = _interopRequireDefault(require("merge-deep"));
|
|
13
|
-
|
|
14
10
|
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
15
|
-
|
|
16
11
|
function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function (nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
|
|
17
|
-
|
|
18
12
|
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; }
|
|
19
|
-
|
|
20
13
|
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; }
|
|
21
|
-
|
|
22
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; }
|
|
23
|
-
|
|
24
15
|
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; }
|
|
25
|
-
|
|
26
16
|
const getServerConfigPath = (distDirectory, serverConfigFile = _utils.DEFAULT_SERVER_CONFIG) => {
|
|
27
17
|
const serverConfigPath = path.join(distDirectory, serverConfigFile);
|
|
28
18
|
return `${serverConfigPath}.js`;
|
|
29
19
|
};
|
|
30
|
-
|
|
31
20
|
exports.getServerConfigPath = getServerConfigPath;
|
|
32
|
-
|
|
33
21
|
const requireConfig = serverConfigPath => {
|
|
34
22
|
if (_utils.fs.pathExistsSync(serverConfigPath)) {
|
|
35
23
|
return (0, _utils.compatRequire)(serverConfigPath);
|
|
36
24
|
}
|
|
37
|
-
|
|
38
25
|
return {};
|
|
39
26
|
};
|
|
27
|
+
|
|
40
28
|
/**
|
|
41
29
|
* 对配置进行合并,开发环境下,cliConfig 与 serverConfig 进行深合并
|
|
42
30
|
* 生产环境下,resolvedConfig 与 serverConfig 进行深合并
|
|
43
31
|
* resolvedConfigPath: 构建序列化后的 modern.config.js 文件路径
|
|
44
32
|
*/
|
|
45
|
-
|
|
46
|
-
|
|
47
33
|
exports.requireConfig = requireConfig;
|
|
48
|
-
|
|
49
34
|
const loadConfig = ({
|
|
50
35
|
cliConfig,
|
|
51
36
|
serverConfig,
|
|
52
37
|
resolvedConfigPath
|
|
53
38
|
}) => {
|
|
54
39
|
let config = null;
|
|
55
|
-
|
|
56
40
|
if (process.env.NODE_ENV === 'production') {
|
|
57
|
-
const resolvedConfig = requireConfig(resolvedConfigPath);
|
|
58
|
-
|
|
41
|
+
const resolvedConfig = requireConfig(resolvedConfigPath);
|
|
42
|
+
// cli config has a higher priority,because it's an argument passed in.
|
|
59
43
|
config = (0, _mergeDeep.default)(_objectSpread(_objectSpread({}, resolvedConfig), {}, {
|
|
60
44
|
plugins: [] // filter cli plugins
|
|
61
|
-
|
|
62
45
|
}), serverConfig, cliConfig);
|
|
63
46
|
} else {
|
|
64
47
|
config = (0, _mergeDeep.default)(_objectSpread(_objectSpread({}, cliConfig), {}, {
|
|
65
48
|
plugins: []
|
|
66
49
|
}), serverConfig);
|
|
67
50
|
}
|
|
68
|
-
|
|
69
51
|
return config;
|
|
70
52
|
};
|
|
71
|
-
|
|
72
53
|
exports.loadConfig = loadConfig;
|
|
@@ -5,14 +5,14 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
5
5
|
});
|
|
6
6
|
exports.metrics = void 0;
|
|
7
7
|
const metrics = {
|
|
8
|
-
gauges() {
|
|
8
|
+
gauges() {
|
|
9
|
+
// no impl
|
|
9
10
|
},
|
|
10
|
-
|
|
11
|
-
|
|
11
|
+
emitCounter() {
|
|
12
|
+
// no impl
|
|
12
13
|
},
|
|
13
|
-
|
|
14
|
-
|
|
14
|
+
emitTimer() {
|
|
15
|
+
// no impl
|
|
15
16
|
}
|
|
16
|
-
|
|
17
17
|
};
|
|
18
18
|
exports.metrics = metrics;
|
|
@@ -5,20 +5,13 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
5
5
|
});
|
|
6
6
|
exports.createProxyHandler = void 0;
|
|
7
7
|
exports.formatProxyOptions = formatProxyOptions;
|
|
8
|
-
|
|
9
8
|
var _httpProxyMiddleware = require("http-proxy-middleware");
|
|
10
|
-
|
|
11
9
|
var _utils = require("../utils");
|
|
12
|
-
|
|
13
10
|
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; }
|
|
14
|
-
|
|
15
11
|
function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; }
|
|
16
|
-
|
|
17
12
|
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; }
|
|
18
|
-
|
|
19
13
|
function formatProxyOptions(proxyOptions) {
|
|
20
14
|
const formattedProxy = [];
|
|
21
|
-
|
|
22
15
|
if (!Array.isArray(proxyOptions)) {
|
|
23
16
|
if ('target' in proxyOptions) {
|
|
24
17
|
formattedProxy.push(proxyOptions);
|
|
@@ -38,30 +31,29 @@ function formatProxyOptions(proxyOptions) {
|
|
|
38
31
|
} else {
|
|
39
32
|
formattedProxy.push(...proxyOptions);
|
|
40
33
|
}
|
|
41
|
-
|
|
42
34
|
return formattedProxy;
|
|
43
35
|
}
|
|
44
|
-
|
|
45
36
|
const createProxyHandler = proxyOptions => {
|
|
46
37
|
(0, _utils.debug)('createProxyHandler', proxyOptions);
|
|
47
|
-
|
|
48
38
|
if (!proxyOptions) {
|
|
49
39
|
return null;
|
|
50
|
-
}
|
|
51
|
-
// or an object in the form of { source: ProxyDetail }
|
|
52
|
-
|
|
40
|
+
}
|
|
53
41
|
|
|
42
|
+
// If it is not an array, it may be an object that uses the context attribute
|
|
43
|
+
// or an object in the form of { source: ProxyDetail }
|
|
54
44
|
const formattedProxy = formatProxyOptions(proxyOptions);
|
|
55
45
|
const middlewares = formattedProxy.map(option => {
|
|
56
|
-
const middleware = (0, _httpProxyMiddleware.createProxyMiddleware)(option.context, option);
|
|
46
|
+
const middleware = (0, _httpProxyMiddleware.createProxyMiddleware)(option.context, option);
|
|
57
47
|
|
|
48
|
+
// eslint-disable-next-line consistent-return
|
|
58
49
|
return async (ctx, next) => {
|
|
59
50
|
const {
|
|
60
51
|
req,
|
|
61
52
|
res
|
|
62
53
|
} = ctx;
|
|
63
|
-
const bypassUrl = typeof option.bypass === 'function' ? option.bypass(req, res, option) : null;
|
|
54
|
+
const bypassUrl = typeof option.bypass === 'function' ? option.bypass(req, res, option) : null;
|
|
64
55
|
|
|
56
|
+
// only false, no true
|
|
65
57
|
if (typeof bypassUrl === 'boolean') {
|
|
66
58
|
ctx.status = 404;
|
|
67
59
|
return next();
|
|
@@ -69,11 +61,9 @@ const createProxyHandler = proxyOptions => {
|
|
|
69
61
|
ctx.url = bypassUrl;
|
|
70
62
|
return next();
|
|
71
63
|
}
|
|
72
|
-
|
|
73
64
|
middleware(req, res, next);
|
|
74
65
|
};
|
|
75
66
|
});
|
|
76
67
|
return middlewares;
|
|
77
68
|
};
|
|
78
|
-
|
|
79
69
|
exports.createProxyHandler = createProxyHandler;
|
|
@@ -1,13 +1,9 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
3
|
var _url = _interopRequireDefault(require("url"));
|
|
4
|
-
|
|
5
4
|
var _spr = require("../spr");
|
|
6
|
-
|
|
7
5
|
var _util = require("../util");
|
|
8
|
-
|
|
9
6
|
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
10
|
-
|
|
11
7
|
describe('test spr util functions', () => {
|
|
12
8
|
it('should return value correctly', () => {
|
|
13
9
|
expect((0, _util.connectFactor)('bar', 'foo')).toBe('bar-foo');
|
|
@@ -25,7 +21,6 @@ describe('test spr util functions', () => {
|
|
|
25
21
|
});
|
|
26
22
|
it('should return function correctly', () => {
|
|
27
23
|
const urlParams = (() => new _url.default.URLSearchParams())();
|
|
28
|
-
|
|
29
24
|
urlParams.set('name', 'modern');
|
|
30
25
|
const getParam = (0, _util.valueFactory)(urlParams);
|
|
31
26
|
expect(getParam('name')).toBe('modern');
|
|
@@ -1,19 +1,12 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
|
|
3
3
|
var _spr = require("../spr");
|
|
4
|
-
|
|
5
4
|
var _errorConfiguration = require("./error-configuration");
|
|
6
|
-
|
|
7
5
|
var _cacheable = require("./cacheable");
|
|
8
|
-
|
|
9
6
|
var _matchedCache = require("./matched-cache");
|
|
10
|
-
|
|
11
7
|
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; }
|
|
12
|
-
|
|
13
8
|
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; }
|
|
14
|
-
|
|
15
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; }
|
|
16
|
-
|
|
17
10
|
const createCacheConfig = (config = {}) => _objectSpread({
|
|
18
11
|
excludes: null,
|
|
19
12
|
includes: null,
|
|
@@ -23,7 +16,6 @@ const createCacheConfig = (config = {}) => _objectSpread({
|
|
|
23
16
|
fallback: false,
|
|
24
17
|
matches: null
|
|
25
18
|
}, config);
|
|
26
|
-
|
|
27
19
|
jest.setTimeout(60000);
|
|
28
20
|
describe('cache', () => {
|
|
29
21
|
it('should cache correctly', async () => {
|
|
@@ -60,7 +52,6 @@ describe('cache', () => {
|
|
|
60
52
|
(0, _spr.destroyCache)();
|
|
61
53
|
const cache = (0, _spr.createCache)();
|
|
62
54
|
const content = 'hello';
|
|
63
|
-
|
|
64
55
|
for (const config of _errorConfiguration.errorConfiguration) {
|
|
65
56
|
const cacheConfig = createCacheConfig(config);
|
|
66
57
|
const tmpEntry = Math.random().toString();
|
|
@@ -131,7 +122,6 @@ describe('cache', () => {
|
|
|
131
122
|
it('should get cache correctly', async () => {
|
|
132
123
|
(0, _spr.destroyCache)();
|
|
133
124
|
const cache = (0, _spr.createCache)();
|
|
134
|
-
|
|
135
125
|
for (const cacheable of _cacheable.cacheabelAry) {
|
|
136
126
|
const context = {
|
|
137
127
|
entry: '',
|
|
@@ -148,7 +138,6 @@ describe('cache', () => {
|
|
|
148
138
|
it('should match cache correctly', async () => {
|
|
149
139
|
(0, _spr.destroyCache)();
|
|
150
140
|
const cache = (0, _spr.createCache)();
|
|
151
|
-
|
|
152
141
|
for (const cacheable of _matchedCache.matchedCacheableAry) {
|
|
153
142
|
const [baseCacheable, matchOne, ...other] = cacheable;
|
|
154
143
|
const {
|
|
@@ -171,7 +160,6 @@ describe('cache', () => {
|
|
|
171
160
|
};
|
|
172
161
|
const cacheResult = await cache.get(matchContext);
|
|
173
162
|
expect(cacheResult === null || cacheResult === void 0 ? void 0 : cacheResult.content).toBe(content);
|
|
174
|
-
|
|
175
163
|
for (const notMatch of other) {
|
|
176
164
|
const notMatchContext = {
|
|
177
165
|
entry: '',
|
|
@@ -4,32 +4,25 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
6
|
exports.default = void 0;
|
|
7
|
-
|
|
8
7
|
var _stream = require("stream");
|
|
9
|
-
|
|
10
8
|
var _constants = require("../../../constants");
|
|
11
|
-
|
|
12
9
|
var _spr = require("./spr");
|
|
13
|
-
|
|
14
10
|
var _util = require("./util");
|
|
15
|
-
|
|
16
11
|
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; }
|
|
17
|
-
|
|
18
12
|
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; }
|
|
19
|
-
|
|
20
13
|
function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; }
|
|
21
|
-
|
|
22
14
|
var _default = (renderFn, ctx) => {
|
|
23
15
|
const sprCache = (0, _spr.createCache)();
|
|
24
|
-
|
|
25
16
|
const doRender = async context => {
|
|
26
17
|
const cacheContext = _objectSpread({
|
|
27
18
|
entry: context.entryName
|
|
28
19
|
}, context.request);
|
|
29
|
-
|
|
30
20
|
const cacheFile = await sprCache.get(cacheContext);
|
|
31
|
-
|
|
32
21
|
async function afterRender(source, onAfterRender) {
|
|
22
|
+
// e.g. source is undefined when redirects occur during render
|
|
23
|
+
if (!source) {
|
|
24
|
+
return '';
|
|
25
|
+
}
|
|
33
26
|
if (typeof source === 'string') {
|
|
34
27
|
await onAfterRender(source);
|
|
35
28
|
return source;
|
|
@@ -41,31 +34,28 @@ var _default = (renderFn, ctx) => {
|
|
|
41
34
|
this.push(chunk);
|
|
42
35
|
callback();
|
|
43
36
|
}
|
|
44
|
-
|
|
45
37
|
});
|
|
46
38
|
cacheStream.on('close', () => onAfterRender(htmlForStream));
|
|
47
39
|
return source(cacheStream);
|
|
48
40
|
}
|
|
49
41
|
}
|
|
50
|
-
|
|
51
42
|
async function saveHtmlIntoCache(html) {
|
|
52
43
|
const {
|
|
53
44
|
cacheConfig
|
|
54
45
|
} = context;
|
|
55
|
-
|
|
56
46
|
if (html && cacheConfig) {
|
|
57
47
|
await sprCache.set(cacheContext, html, cacheConfig);
|
|
58
48
|
}
|
|
59
|
-
}
|
|
60
|
-
|
|
49
|
+
}
|
|
61
50
|
|
|
51
|
+
// no cache, render sync
|
|
62
52
|
if (!cacheFile) {
|
|
63
53
|
const renderResult = await renderFn(context);
|
|
64
54
|
return afterRender(renderResult, saveHtmlIntoCache);
|
|
65
55
|
}
|
|
56
|
+
const cacheHash = cacheFile === null || cacheFile === void 0 ? void 0 : cacheFile.hash;
|
|
66
57
|
|
|
67
|
-
|
|
68
|
-
|
|
58
|
+
// completely expired
|
|
69
59
|
if (cacheFile.isGarbage) {
|
|
70
60
|
const renderResult = await renderFn(context);
|
|
71
61
|
return afterRender(renderResult, saveHtmlIntoCache);
|
|
@@ -77,7 +67,6 @@ var _default = (renderFn, ctx) => {
|
|
|
77
67
|
const {
|
|
78
68
|
cacheConfig
|
|
79
69
|
} = context;
|
|
80
|
-
|
|
81
70
|
if (cacheConfig) {
|
|
82
71
|
afterRender(res.value, async html => {
|
|
83
72
|
sprCache.set(cacheContext, html, cacheConfig);
|
|
@@ -91,12 +80,9 @@ var _default = (renderFn, ctx) => {
|
|
|
91
80
|
ctx.error(_constants.ERROR_DIGEST.ERENDER, e);
|
|
92
81
|
});
|
|
93
82
|
}
|
|
94
|
-
|
|
95
83
|
ctx.res.setHeader('x-modern-spr', '1');
|
|
96
84
|
return cacheFile.content;
|
|
97
85
|
};
|
|
98
|
-
|
|
99
86
|
return doRender;
|
|
100
87
|
};
|
|
101
|
-
|
|
102
88
|
exports.default = _default;
|
|
@@ -4,48 +4,34 @@ Object.defineProperty(exports, "__esModule", {
|
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
6
|
exports.LRUCaches = void 0;
|
|
7
|
-
|
|
8
7
|
var _lruCache = _interopRequireDefault(require("lru-cache"));
|
|
9
|
-
|
|
10
8
|
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
11
|
-
|
|
12
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; }
|
|
13
|
-
|
|
14
10
|
class LRUCaches {
|
|
15
11
|
constructor(options) {
|
|
16
12
|
_defineProperty(this, "caches", void 0);
|
|
17
|
-
|
|
18
13
|
_defineProperty(this, "max", void 0);
|
|
19
|
-
|
|
20
14
|
this.max = options.max;
|
|
21
15
|
this.caches = new _lruCache.default(this.max);
|
|
22
16
|
}
|
|
23
|
-
|
|
24
17
|
init() {
|
|
25
18
|
return Promise.resolve();
|
|
26
19
|
}
|
|
27
|
-
|
|
28
20
|
keys() {
|
|
29
21
|
return this.caches.keys();
|
|
30
22
|
}
|
|
31
|
-
|
|
32
23
|
get(key) {
|
|
33
24
|
return Promise.resolve(this.caches.get(key) || null);
|
|
34
25
|
}
|
|
35
|
-
|
|
36
26
|
peek(key) {
|
|
37
27
|
return this.caches.peek(key) || null;
|
|
38
28
|
}
|
|
39
|
-
|
|
40
29
|
set(key, cache) {
|
|
41
30
|
this.caches.set(key, cache);
|
|
42
31
|
return Promise.resolve();
|
|
43
32
|
}
|
|
44
|
-
|
|
45
33
|
del(key) {
|
|
46
34
|
this.caches.del(key);
|
|
47
35
|
}
|
|
48
|
-
|
|
49
36
|
}
|
|
50
|
-
|
|
51
37
|
exports.LRUCaches = LRUCaches;
|