@modern-js/prod-server 2.4.1-beta.0 → 2.5.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 +18 -3
- package/dist/{js/node → cjs}/constants.js +0 -0
- package/dist/{js/node → cjs}/index.js +0 -0
- package/dist/{js/node → cjs}/libs/context/context.js +0 -0
- package/dist/{js/node → cjs}/libs/context/index.js +0 -0
- package/dist/{js/node → cjs}/libs/hook-api/index.js +12 -25
- package/dist/{js/node → cjs}/libs/hook-api/route.js +0 -0
- package/dist/{js/node → cjs}/libs/hook-api/template.js +0 -0
- package/dist/{js/node → cjs}/libs/loadConfig.js +6 -21
- package/dist/{js/node → cjs}/libs/logger.js +5 -16
- package/dist/{js/node → cjs}/libs/metrics.js +0 -0
- package/dist/{js/node → cjs}/libs/proxy.js +6 -39
- package/dist/{js/node → cjs}/libs/render/cache/__tests__/cache.fun.test.js +12 -34
- package/dist/{js/node → cjs}/libs/render/cache/__tests__/cache.test.js +43 -78
- package/dist/{js/node → cjs}/libs/render/cache/__tests__/cacheable.js +0 -0
- package/dist/{js/node → cjs}/libs/render/cache/__tests__/error-configuration.js +0 -0
- package/dist/{js/node → cjs}/libs/render/cache/__tests__/matched-cache.js +0 -0
- package/dist/cjs/libs/render/cache/index.js +97 -0
- package/dist/cjs/libs/render/cache/page-caches/index.js +33 -0
- package/dist/{js/node → cjs}/libs/render/cache/page-caches/lru.js +0 -0
- package/dist/{js/node → cjs}/libs/render/cache/spr.js +69 -97
- package/dist/{js/node → cjs}/libs/render/cache/type.js +0 -0
- package/dist/{js/node → cjs}/libs/render/cache/util.js +19 -41
- package/dist/cjs/libs/render/index.js +93 -0
- package/dist/{js/node → cjs}/libs/render/measure.js +6 -21
- package/dist/{js/node → cjs}/libs/render/reader.js +24 -46
- package/dist/{js/node → cjs}/libs/render/ssr.js +3 -23
- package/dist/{js/node → cjs}/libs/render/static.js +22 -44
- package/dist/{js/node → cjs}/libs/render/type.js +0 -0
- package/dist/{js/node → cjs}/libs/route/index.js +0 -0
- package/dist/{js/node → cjs}/libs/route/matcher.js +0 -0
- package/dist/{js/node → cjs}/libs/route/route.js +0 -0
- package/dist/{js/node → cjs}/libs/serve-file.js +2 -22
- package/dist/{js/node → cjs}/server/index.js +56 -106
- package/dist/{js/node → cjs}/server/modern-server-split.js +9 -40
- package/dist/cjs/server/modern-server.js +490 -0
- package/dist/{js/node → cjs}/type.js +0 -0
- package/dist/{js/node → cjs}/utils.js +1 -15
- package/dist/{js/node → cjs}/worker-server.js +3 -23
- package/dist/{js/treeshaking → esm}/constants.js +0 -0
- package/dist/{js/treeshaking → esm}/index.js +0 -0
- package/dist/{js/treeshaking → esm}/libs/context/context.js +0 -0
- package/dist/{js/treeshaking → esm}/libs/context/index.js +0 -0
- package/dist/{js/treeshaking → esm}/libs/hook-api/index.js +0 -0
- package/dist/{js/treeshaking → esm}/libs/hook-api/route.js +0 -0
- package/dist/{js/treeshaking → esm}/libs/hook-api/template.js +0 -0
- package/dist/{js/treeshaking → esm}/libs/loadConfig.js +0 -0
- package/dist/{js/treeshaking → esm}/libs/logger.js +0 -0
- package/dist/{js/treeshaking → esm}/libs/metrics.js +0 -0
- package/dist/{js/treeshaking → esm}/libs/proxy.js +0 -0
- package/dist/{js/treeshaking → esm}/libs/render/cache/__tests__/cache.fun.test.js +0 -0
- package/dist/{js/treeshaking → esm}/libs/render/cache/__tests__/cache.test.js +0 -0
- package/dist/{js/treeshaking → esm}/libs/render/cache/__tests__/cacheable.js +0 -0
- package/dist/{js/treeshaking → esm}/libs/render/cache/__tests__/error-configuration.js +0 -0
- package/dist/{js/treeshaking → esm}/libs/render/cache/__tests__/matched-cache.js +0 -0
- package/dist/{js/treeshaking → esm}/libs/render/cache/index.js +0 -0
- package/dist/{js/treeshaking → esm}/libs/render/cache/page-caches/index.js +0 -0
- package/dist/{js/treeshaking → esm}/libs/render/cache/page-caches/lru.js +0 -0
- package/dist/{js/treeshaking → esm}/libs/render/cache/spr.js +0 -0
- package/dist/{js/treeshaking → esm}/libs/render/cache/type.js +0 -0
- package/dist/{js/treeshaking → esm}/libs/render/cache/util.js +0 -0
- package/dist/{js/treeshaking → esm}/libs/render/index.js +4 -3
- package/dist/{js/treeshaking → esm}/libs/render/measure.js +0 -0
- package/dist/{js/treeshaking → esm}/libs/render/reader.js +0 -0
- package/dist/{js/treeshaking → esm}/libs/render/ssr.js +0 -0
- package/dist/{js/treeshaking → esm}/libs/render/static.js +0 -0
- package/dist/{js/treeshaking → esm}/libs/render/type.js +0 -0
- package/dist/{js/treeshaking → esm}/libs/route/index.js +0 -0
- package/dist/{js/treeshaking → esm}/libs/route/matcher.js +0 -0
- package/dist/{js/treeshaking → esm}/libs/route/route.js +0 -0
- package/dist/{js/treeshaking → esm}/libs/serve-file.js +0 -0
- package/dist/{js/treeshaking → esm}/server/index.js +0 -0
- package/dist/{js/treeshaking → esm}/server/modern-server-split.js +0 -0
- package/dist/{js/treeshaking → esm}/server/modern-server.js +14 -8
- package/dist/{js/treeshaking → esm}/type.js +0 -0
- package/dist/{js/treeshaking → esm}/utils.js +0 -0
- package/dist/{js/treeshaking → esm}/worker-server.js +0 -0
- package/dist/{js/modern → esm-node}/constants.js +0 -0
- package/dist/{js/modern → esm-node}/index.js +0 -0
- package/dist/{js/modern → esm-node}/libs/context/context.js +0 -0
- package/dist/{js/modern → esm-node}/libs/context/index.js +0 -0
- package/dist/{js/modern → esm-node}/libs/hook-api/index.js +12 -27
- package/dist/{js/modern → esm-node}/libs/hook-api/route.js +0 -0
- package/dist/{js/modern → esm-node}/libs/hook-api/template.js +0 -0
- package/dist/esm-node/libs/loadConfig.js +45 -0
- package/dist/{js/modern → esm-node}/libs/logger.js +5 -18
- package/dist/{js/modern → esm-node}/libs/metrics.js +0 -0
- package/dist/{js/modern → esm-node}/libs/proxy.js +6 -41
- package/dist/esm-node/libs/render/cache/__tests__/cache.fun.test.js +83 -0
- package/dist/esm-node/libs/render/cache/__tests__/cache.test.js +210 -0
- package/dist/{js/modern → esm-node}/libs/render/cache/__tests__/cacheable.js +0 -0
- package/dist/{js/modern → esm-node}/libs/render/cache/__tests__/error-configuration.js +0 -0
- package/dist/{js/modern → esm-node}/libs/render/cache/__tests__/matched-cache.js +0 -0
- package/dist/esm-node/libs/render/cache/index.js +76 -0
- package/dist/esm-node/libs/render/cache/page-caches/index.js +10 -0
- package/dist/{js/modern → esm-node}/libs/render/cache/page-caches/lru.js +0 -0
- package/dist/{js/modern → esm-node}/libs/render/cache/spr.js +69 -97
- package/dist/{js/modern → esm-node}/libs/render/cache/type.js +0 -0
- package/dist/{js/modern → esm-node}/libs/render/cache/util.js +19 -41
- package/dist/esm-node/libs/render/index.js +64 -0
- package/dist/{js/modern → esm-node}/libs/render/measure.js +6 -23
- package/dist/esm-node/libs/render/reader.js +85 -0
- package/dist/{js/modern → esm-node}/libs/render/ssr.js +3 -23
- package/dist/esm-node/libs/render/static.js +38 -0
- package/dist/{js/modern → esm-node}/libs/render/type.js +0 -0
- package/dist/{js/modern → esm-node}/libs/route/index.js +0 -0
- package/dist/{js/modern → esm-node}/libs/route/matcher.js +0 -0
- package/dist/{js/modern → esm-node}/libs/route/route.js +0 -0
- package/dist/{js/modern → esm-node}/libs/serve-file.js +2 -22
- package/dist/esm-node/server/index.js +156 -0
- package/dist/esm-node/server/modern-server-split.js +43 -0
- package/dist/esm-node/server/modern-server.js +483 -0
- package/dist/{js/modern → esm-node}/type.js +0 -0
- package/dist/{js/modern → esm-node}/utils.js +1 -17
- package/dist/{js/modern → esm-node}/worker-server.js +3 -23
- package/dist/types/libs/context/context.d.ts +1 -1
- package/dist/types/libs/render/index.d.ts +3 -1
- package/dist/types/utils.d.ts +1 -1
- package/package.json +15 -16
- package/dist/js/modern/libs/loadConfig.js +0 -62
- package/dist/js/modern/libs/render/cache/__tests__/cache.fun.test.js +0 -114
- package/dist/js/modern/libs/render/cache/__tests__/cache.test.js +0 -254
- package/dist/js/modern/libs/render/cache/index.js +0 -115
- package/dist/js/modern/libs/render/cache/page-caches/index.js +0 -32
- package/dist/js/modern/libs/render/index.js +0 -84
- package/dist/js/modern/libs/render/reader.js +0 -107
- package/dist/js/modern/libs/render/static.js +0 -60
- package/dist/js/modern/server/index.js +0 -208
- package/dist/js/modern/server/modern-server-split.js +0 -74
- package/dist/js/modern/server/modern-server.js +0 -548
- package/dist/js/node/libs/render/cache/index.js +0 -134
- package/dist/js/node/libs/render/cache/page-caches/index.js +0 -55
- package/dist/js/node/libs/render/index.js +0 -113
- package/dist/js/node/server/modern-server.js +0 -553
|
@@ -0,0 +1,97 @@
|
|
|
1
|
+
var __defProp = Object.defineProperty;
|
|
2
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
3
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
4
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
5
|
+
var __export = (target, all) => {
|
|
6
|
+
for (var name in all)
|
|
7
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
8
|
+
};
|
|
9
|
+
var __copyProps = (to, from, except, desc) => {
|
|
10
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
11
|
+
for (let key of __getOwnPropNames(from))
|
|
12
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
13
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
14
|
+
}
|
|
15
|
+
return to;
|
|
16
|
+
};
|
|
17
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
18
|
+
var cache_exports = {};
|
|
19
|
+
__export(cache_exports, {
|
|
20
|
+
default: () => cache_default
|
|
21
|
+
});
|
|
22
|
+
module.exports = __toCommonJS(cache_exports);
|
|
23
|
+
var import_stream = require("stream");
|
|
24
|
+
var import_constants = require("../../../constants");
|
|
25
|
+
var import_spr = require("./spr");
|
|
26
|
+
var import_util = require("./util");
|
|
27
|
+
var cache_default = (renderFn, ctx) => {
|
|
28
|
+
const sprCache = (0, import_spr.createCache)();
|
|
29
|
+
const doRender = async (context) => {
|
|
30
|
+
const cacheContext = {
|
|
31
|
+
entry: context.entryName,
|
|
32
|
+
...context.request
|
|
33
|
+
};
|
|
34
|
+
const cacheFile = await sprCache.get(cacheContext);
|
|
35
|
+
async function afterRender(source, onAfterRender) {
|
|
36
|
+
if (!source) {
|
|
37
|
+
return "";
|
|
38
|
+
}
|
|
39
|
+
if (typeof source === "string") {
|
|
40
|
+
await onAfterRender(source);
|
|
41
|
+
return source;
|
|
42
|
+
} else {
|
|
43
|
+
let htmlForStream = "";
|
|
44
|
+
const cacheStream = new import_stream.Transform({
|
|
45
|
+
write(chunk, _, callback) {
|
|
46
|
+
htmlForStream += chunk.toString();
|
|
47
|
+
this.push(chunk);
|
|
48
|
+
callback();
|
|
49
|
+
}
|
|
50
|
+
});
|
|
51
|
+
cacheStream.on("close", () => onAfterRender(htmlForStream));
|
|
52
|
+
return source(cacheStream);
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
async function saveHtmlIntoCache(html) {
|
|
56
|
+
const { cacheConfig } = context;
|
|
57
|
+
if (html && cacheConfig) {
|
|
58
|
+
await sprCache.set(cacheContext, html, cacheConfig);
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
if (!cacheFile) {
|
|
62
|
+
const renderResult = await renderFn(context);
|
|
63
|
+
return afterRender(renderResult, saveHtmlIntoCache);
|
|
64
|
+
}
|
|
65
|
+
const cacheHash = cacheFile == null ? void 0 : cacheFile.hash;
|
|
66
|
+
if (cacheFile.isGarbage) {
|
|
67
|
+
const renderResult = await renderFn(context);
|
|
68
|
+
return afterRender(renderResult, saveHtmlIntoCache);
|
|
69
|
+
} else if (cacheFile.isStale) {
|
|
70
|
+
const render = (0, import_util.withCoalescedInvoke)(() => renderFn(context)).bind(
|
|
71
|
+
null,
|
|
72
|
+
(0, import_util.namespaceHash)("render", cacheFile.hash),
|
|
73
|
+
[]
|
|
74
|
+
);
|
|
75
|
+
render().then(async (res) => {
|
|
76
|
+
if (res.value && res.isOrigin) {
|
|
77
|
+
const { cacheConfig } = context;
|
|
78
|
+
if (cacheConfig) {
|
|
79
|
+
afterRender(res.value, async (html) => {
|
|
80
|
+
sprCache.set(cacheContext, html, cacheConfig);
|
|
81
|
+
});
|
|
82
|
+
} else {
|
|
83
|
+
sprCache.del(cacheContext, cacheHash);
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
}).catch((e) => {
|
|
87
|
+
sprCache.del(cacheContext, cacheHash);
|
|
88
|
+
ctx.error(import_constants.ERROR_DIGEST.ERENDER, e);
|
|
89
|
+
});
|
|
90
|
+
}
|
|
91
|
+
ctx.res.setHeader("x-modern-spr", "1");
|
|
92
|
+
return cacheFile.content;
|
|
93
|
+
};
|
|
94
|
+
return doRender;
|
|
95
|
+
};
|
|
96
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
97
|
+
0 && (module.exports = {});
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
var __defProp = Object.defineProperty;
|
|
2
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
3
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
4
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
5
|
+
var __export = (target, all) => {
|
|
6
|
+
for (var name in all)
|
|
7
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
8
|
+
};
|
|
9
|
+
var __copyProps = (to, from, except, desc) => {
|
|
10
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
11
|
+
for (let key of __getOwnPropNames(from))
|
|
12
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
13
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
14
|
+
}
|
|
15
|
+
return to;
|
|
16
|
+
};
|
|
17
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
18
|
+
var page_caches_exports = {};
|
|
19
|
+
__export(page_caches_exports, {
|
|
20
|
+
createPageCaches: () => createPageCaches
|
|
21
|
+
});
|
|
22
|
+
module.exports = __toCommonJS(page_caches_exports);
|
|
23
|
+
var import_lru = require("./lru");
|
|
24
|
+
async function createPageCaches(max) {
|
|
25
|
+
const constructorOptions = { max };
|
|
26
|
+
const cacheInstance = new import_lru.LRUCaches(constructorOptions);
|
|
27
|
+
await cacheInstance.init();
|
|
28
|
+
return cacheInstance;
|
|
29
|
+
}
|
|
30
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
31
|
+
0 && (module.exports = {
|
|
32
|
+
createPageCaches
|
|
33
|
+
});
|
|
File without changes
|
|
@@ -21,26 +21,6 @@ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__ge
|
|
|
21
21
|
mod
|
|
22
22
|
));
|
|
23
23
|
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
24
|
-
var __async = (__this, __arguments, generator) => {
|
|
25
|
-
return new Promise((resolve, reject) => {
|
|
26
|
-
var fulfilled = (value) => {
|
|
27
|
-
try {
|
|
28
|
-
step(generator.next(value));
|
|
29
|
-
} catch (e) {
|
|
30
|
-
reject(e);
|
|
31
|
-
}
|
|
32
|
-
};
|
|
33
|
-
var rejected = (value) => {
|
|
34
|
-
try {
|
|
35
|
-
step(generator.throw(value));
|
|
36
|
-
} catch (e) {
|
|
37
|
-
reject(e);
|
|
38
|
-
}
|
|
39
|
-
};
|
|
40
|
-
var step = (x) => x.done ? resolve(x.value) : Promise.resolve(x.value).then(fulfilled, rejected);
|
|
41
|
-
step((generator = generator.apply(__this, __arguments)).next());
|
|
42
|
-
});
|
|
43
|
-
};
|
|
44
24
|
var spr_exports = {};
|
|
45
25
|
__export(spr_exports, {
|
|
46
26
|
createCache: () => createCache,
|
|
@@ -159,15 +139,13 @@ class CacheManager {
|
|
|
159
139
|
const headerFactor = this.factor(headerKeys, requestHeader, headerMatches);
|
|
160
140
|
return headerFactor;
|
|
161
141
|
}
|
|
162
|
-
best(context, cacheKey, data) {
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
return data.caches.get(cacheHash);
|
|
170
|
-
});
|
|
142
|
+
async best(context, cacheKey, data) {
|
|
143
|
+
const { level } = data;
|
|
144
|
+
const cacheHash = this.find[(0, import_util.fname)(level)](context, cacheKey, data);
|
|
145
|
+
if (!cacheHash) {
|
|
146
|
+
return null;
|
|
147
|
+
}
|
|
148
|
+
return data.caches.get(cacheHash);
|
|
171
149
|
}
|
|
172
150
|
createCacheContent(config, caches) {
|
|
173
151
|
return {
|
|
@@ -179,77 +157,71 @@ class CacheManager {
|
|
|
179
157
|
caches
|
|
180
158
|
};
|
|
181
159
|
}
|
|
182
|
-
get(context) {
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
};
|
|
203
|
-
});
|
|
160
|
+
async get(context) {
|
|
161
|
+
const cacheKey = this.generateRequestKey(context);
|
|
162
|
+
const data = this.cache.get(cacheKey);
|
|
163
|
+
if (!data) {
|
|
164
|
+
return null;
|
|
165
|
+
}
|
|
166
|
+
const dest = await this.best(context, cacheKey, data);
|
|
167
|
+
if (!dest) {
|
|
168
|
+
return null;
|
|
169
|
+
}
|
|
170
|
+
const { expireTime, limitTime, html, cacheHash } = dest;
|
|
171
|
+
const isStale = Date.now() - expireTime > 0;
|
|
172
|
+
const isGarbage = limitTime ? Date.now() - limitTime > 0 : false;
|
|
173
|
+
return {
|
|
174
|
+
content: html || "",
|
|
175
|
+
contentType: import_utils.mime.contentType("html"),
|
|
176
|
+
isStale,
|
|
177
|
+
isGarbage,
|
|
178
|
+
hash: cacheHash
|
|
179
|
+
};
|
|
204
180
|
}
|
|
205
|
-
set(context, html, cacheConfig, sync = false) {
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
const
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
size
|
|
235
|
-
});
|
|
236
|
-
this.cache.set(cacheKey, next);
|
|
237
|
-
return true;
|
|
181
|
+
async set(context, html, cacheConfig, sync = false) {
|
|
182
|
+
if (!cacheConfig) {
|
|
183
|
+
return false;
|
|
184
|
+
}
|
|
185
|
+
const cacheKey = this.generateRequestKey(context);
|
|
186
|
+
let data = this.cache.get(cacheKey);
|
|
187
|
+
if (!data) {
|
|
188
|
+
const caches = await (0, import_page_caches.createPageCaches)(MAX_CACHE_EACH_REQ);
|
|
189
|
+
data = this.createCacheContent(cacheConfig, caches);
|
|
190
|
+
}
|
|
191
|
+
const cacheHash = this.find[(0, import_util.fname)(cacheConfig.level)](
|
|
192
|
+
context,
|
|
193
|
+
cacheKey,
|
|
194
|
+
data
|
|
195
|
+
);
|
|
196
|
+
if (!cacheHash) {
|
|
197
|
+
return false;
|
|
198
|
+
}
|
|
199
|
+
const cacheSyncOrAsync = async () => {
|
|
200
|
+
const next = data;
|
|
201
|
+
const limit = cacheConfig.staleLimit;
|
|
202
|
+
const storeHTML = (0, import_util.cacheAddition)(html, cacheHash);
|
|
203
|
+
const size = storeHTML.length;
|
|
204
|
+
await next.caches.set(cacheHash, {
|
|
205
|
+
expireTime: Date.now() + cacheConfig.interval * 1e3,
|
|
206
|
+
limitTime: typeof limit === "number" ? Date.now() + limit * 1e3 : null,
|
|
207
|
+
cacheHash,
|
|
208
|
+
html: storeHTML,
|
|
209
|
+
size
|
|
238
210
|
});
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
211
|
+
this.cache.set(cacheKey, next);
|
|
212
|
+
return true;
|
|
213
|
+
};
|
|
214
|
+
const doCache = (0, import_util.withCoalescedInvoke)(cacheSyncOrAsync).bind(
|
|
215
|
+
null,
|
|
216
|
+
(0, import_util.namespaceHash)("stream", cacheHash),
|
|
217
|
+
[]
|
|
218
|
+
);
|
|
219
|
+
return (0, import_util.maybeSync)(doCache)(sync);
|
|
246
220
|
}
|
|
247
|
-
del(context, cacheHash) {
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
data == null ? void 0 : data.caches.del(cacheHash);
|
|
252
|
-
});
|
|
221
|
+
async del(context, cacheHash) {
|
|
222
|
+
const cacheKey = this.generateRequestKey(context);
|
|
223
|
+
const data = this.cache.get(cacheKey);
|
|
224
|
+
data == null ? void 0 : data.caches.del(cacheHash);
|
|
253
225
|
}
|
|
254
226
|
}
|
|
255
227
|
let manager;
|
|
File without changes
|
|
@@ -21,26 +21,6 @@ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__ge
|
|
|
21
21
|
mod
|
|
22
22
|
));
|
|
23
23
|
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
24
|
-
var __async = (__this, __arguments, generator) => {
|
|
25
|
-
return new Promise((resolve, reject) => {
|
|
26
|
-
var fulfilled = (value) => {
|
|
27
|
-
try {
|
|
28
|
-
step(generator.next(value));
|
|
29
|
-
} catch (e) {
|
|
30
|
-
reject(e);
|
|
31
|
-
}
|
|
32
|
-
};
|
|
33
|
-
var rejected = (value) => {
|
|
34
|
-
try {
|
|
35
|
-
step(generator.throw(value));
|
|
36
|
-
} catch (e) {
|
|
37
|
-
reject(e);
|
|
38
|
-
}
|
|
39
|
-
};
|
|
40
|
-
var step = (x) => x.done ? resolve(x.value) : Promise.resolve(x.value).then(fulfilled, rejected);
|
|
41
|
-
step((generator = generator.apply(__this, __arguments)).next());
|
|
42
|
-
});
|
|
43
|
-
};
|
|
44
24
|
var util_exports = {};
|
|
45
25
|
__export(util_exports, {
|
|
46
26
|
cacheAddition: () => cacheAddition,
|
|
@@ -91,28 +71,26 @@ function cacheAddition(html, hash) {
|
|
|
91
71
|
}
|
|
92
72
|
const globalInvokeCache = /* @__PURE__ */ new Map();
|
|
93
73
|
function withCoalescedInvoke(func) {
|
|
94
|
-
return function(key, args) {
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
throw err;
|
|
112
|
-
});
|
|
113
|
-
globalInvokeCache.set(key, future);
|
|
114
|
-
return future;
|
|
74
|
+
return async function(key, args) {
|
|
75
|
+
const entry = globalInvokeCache.get(key);
|
|
76
|
+
if (entry) {
|
|
77
|
+
return entry.then((res) => ({
|
|
78
|
+
isOrigin: false,
|
|
79
|
+
value: res.value
|
|
80
|
+
}));
|
|
81
|
+
}
|
|
82
|
+
function __wrapper() {
|
|
83
|
+
return func(...args);
|
|
84
|
+
}
|
|
85
|
+
const future = __wrapper().then((res) => {
|
|
86
|
+
globalInvokeCache.delete(key);
|
|
87
|
+
return { isOrigin: true, value: res };
|
|
88
|
+
}).catch((err) => {
|
|
89
|
+
globalInvokeCache.delete(key);
|
|
90
|
+
throw err;
|
|
115
91
|
});
|
|
92
|
+
globalInvokeCache.set(key, future);
|
|
93
|
+
return future;
|
|
116
94
|
};
|
|
117
95
|
}
|
|
118
96
|
function maybeSync(fn) {
|
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
var __create = Object.create;
|
|
2
|
+
var __defProp = Object.defineProperty;
|
|
3
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
4
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
5
|
+
var __getProtoOf = Object.getPrototypeOf;
|
|
6
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
7
|
+
var __export = (target, all) => {
|
|
8
|
+
for (var name in all)
|
|
9
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
10
|
+
};
|
|
11
|
+
var __copyProps = (to, from, except, desc) => {
|
|
12
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
13
|
+
for (let key of __getOwnPropNames(from))
|
|
14
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
15
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
16
|
+
}
|
|
17
|
+
return to;
|
|
18
|
+
};
|
|
19
|
+
var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
|
|
20
|
+
isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
|
|
21
|
+
mod
|
|
22
|
+
));
|
|
23
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
24
|
+
var render_exports = {};
|
|
25
|
+
__export(render_exports, {
|
|
26
|
+
createRenderHandler: () => createRenderHandler
|
|
27
|
+
});
|
|
28
|
+
module.exports = __toCommonJS(render_exports);
|
|
29
|
+
var import_path = __toESM(require("path"));
|
|
30
|
+
var import_utils = require("@modern-js/utils");
|
|
31
|
+
var import_constants = require("../../constants");
|
|
32
|
+
var import_static = require("./static");
|
|
33
|
+
var import_reader = require("./reader");
|
|
34
|
+
var ssr = __toESM(require("./ssr"));
|
|
35
|
+
const createRenderHandler = ({
|
|
36
|
+
distDir,
|
|
37
|
+
staticGenerate,
|
|
38
|
+
forceCSR
|
|
39
|
+
}) => async function render({
|
|
40
|
+
ctx,
|
|
41
|
+
route,
|
|
42
|
+
runner
|
|
43
|
+
}) {
|
|
44
|
+
if (ctx.resHasHandled()) {
|
|
45
|
+
return null;
|
|
46
|
+
}
|
|
47
|
+
const { entryPath, urlPath } = route;
|
|
48
|
+
const entry = import_path.default.join(distDir, entryPath);
|
|
49
|
+
if (!route.isSPA) {
|
|
50
|
+
const result = await (0, import_static.handleDirectory)(ctx, entry, urlPath);
|
|
51
|
+
return result;
|
|
52
|
+
}
|
|
53
|
+
const templatePath = entry;
|
|
54
|
+
if (!import_utils.fs.existsSync(templatePath)) {
|
|
55
|
+
throw new Error(`Could not find template file: ${templatePath}`);
|
|
56
|
+
}
|
|
57
|
+
const content = await (0, import_reader.readFile)(templatePath);
|
|
58
|
+
if (!content) {
|
|
59
|
+
return null;
|
|
60
|
+
}
|
|
61
|
+
const useCSR = forceCSR && ctx.query.csr;
|
|
62
|
+
if (route.isSSR && !useCSR) {
|
|
63
|
+
try {
|
|
64
|
+
const result = await ssr.render(
|
|
65
|
+
ctx,
|
|
66
|
+
{
|
|
67
|
+
distDir,
|
|
68
|
+
entryName: route.entryName,
|
|
69
|
+
urlPath: route.urlPath,
|
|
70
|
+
bundle: route.bundle,
|
|
71
|
+
template: content.toString(),
|
|
72
|
+
staticGenerate
|
|
73
|
+
},
|
|
74
|
+
runner
|
|
75
|
+
);
|
|
76
|
+
return result;
|
|
77
|
+
} catch (err) {
|
|
78
|
+
ctx.error(
|
|
79
|
+
import_constants.ERROR_DIGEST.ERENDER,
|
|
80
|
+
err.stack || err.message
|
|
81
|
+
);
|
|
82
|
+
ctx.res.setHeader("x-modern-ssr-fallback", "1");
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
return {
|
|
86
|
+
content,
|
|
87
|
+
contentType: import_utils.mime.contentType(import_path.default.extname(templatePath))
|
|
88
|
+
};
|
|
89
|
+
};
|
|
90
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
91
|
+
0 && (module.exports = {
|
|
92
|
+
createRenderHandler
|
|
93
|
+
});
|
|
@@ -1,24 +1,7 @@
|
|
|
1
1
|
var __defProp = Object.defineProperty;
|
|
2
|
-
var __defProps = Object.defineProperties;
|
|
3
2
|
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
4
|
-
var __getOwnPropDescs = Object.getOwnPropertyDescriptors;
|
|
5
3
|
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
6
|
-
var __getOwnPropSymbols = Object.getOwnPropertySymbols;
|
|
7
4
|
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
8
|
-
var __propIsEnum = Object.prototype.propertyIsEnumerable;
|
|
9
|
-
var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
|
|
10
|
-
var __spreadValues = (a, b) => {
|
|
11
|
-
for (var prop in b || (b = {}))
|
|
12
|
-
if (__hasOwnProp.call(b, prop))
|
|
13
|
-
__defNormalProp(a, prop, b[prop]);
|
|
14
|
-
if (__getOwnPropSymbols)
|
|
15
|
-
for (var prop of __getOwnPropSymbols(b)) {
|
|
16
|
-
if (__propIsEnum.call(b, prop))
|
|
17
|
-
__defNormalProp(a, prop, b[prop]);
|
|
18
|
-
}
|
|
19
|
-
return a;
|
|
20
|
-
};
|
|
21
|
-
var __spreadProps = (a, b) => __defProps(a, __getOwnPropDescs(b));
|
|
22
5
|
var __export = (target, all) => {
|
|
23
6
|
for (var name in all)
|
|
24
7
|
__defProp(target, name, { get: all[name], enumerable: true });
|
|
@@ -43,16 +26,18 @@ const createMetrics = (context, metrics) => {
|
|
|
43
26
|
const { entryName: entry, request } = context;
|
|
44
27
|
const { pathname = "" } = request || {};
|
|
45
28
|
const emitTimer = (name, cost, tags = {}) => {
|
|
46
|
-
metrics.emitTimer(name, cost,
|
|
29
|
+
metrics.emitTimer(name, cost, {
|
|
30
|
+
...tags,
|
|
47
31
|
pathname,
|
|
48
32
|
entry
|
|
49
|
-
})
|
|
33
|
+
});
|
|
50
34
|
};
|
|
51
35
|
const emitCounter = (name, counter, tags = {}) => {
|
|
52
|
-
metrics.emitCounter(name, counter,
|
|
36
|
+
metrics.emitCounter(name, counter, {
|
|
37
|
+
...tags,
|
|
53
38
|
pathname,
|
|
54
39
|
entry
|
|
55
|
-
})
|
|
40
|
+
});
|
|
56
41
|
};
|
|
57
42
|
return { emitTimer, emitCounter };
|
|
58
43
|
};
|
|
@@ -21,26 +21,6 @@ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__ge
|
|
|
21
21
|
mod
|
|
22
22
|
));
|
|
23
23
|
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
24
|
-
var __async = (__this, __arguments, generator) => {
|
|
25
|
-
return new Promise((resolve, reject) => {
|
|
26
|
-
var fulfilled = (value) => {
|
|
27
|
-
try {
|
|
28
|
-
step(generator.next(value));
|
|
29
|
-
} catch (e) {
|
|
30
|
-
reject(e);
|
|
31
|
-
}
|
|
32
|
-
};
|
|
33
|
-
var rejected = (value) => {
|
|
34
|
-
try {
|
|
35
|
-
step(generator.throw(value));
|
|
36
|
-
} catch (e) {
|
|
37
|
-
reject(e);
|
|
38
|
-
}
|
|
39
|
-
};
|
|
40
|
-
var step = (x) => x.done ? resolve(x.value) : Promise.resolve(x.value).then(fulfilled, rejected);
|
|
41
|
-
step((generator = generator.apply(__this, __arguments)).next());
|
|
42
|
-
});
|
|
43
|
-
};
|
|
44
24
|
var reader_exports = {};
|
|
45
25
|
__export(reader_exports, {
|
|
46
26
|
LruReader: () => LruReader,
|
|
@@ -56,13 +36,13 @@ const Byte = 1;
|
|
|
56
36
|
const KB = 1024 * Byte;
|
|
57
37
|
const MB = 1024 * KB;
|
|
58
38
|
const getContentLength = (cache) => cache.content.length;
|
|
59
|
-
const createCacheItem = (filepath, mtime) =>
|
|
60
|
-
const content =
|
|
39
|
+
const createCacheItem = async (filepath, mtime) => {
|
|
40
|
+
const content = await import_utils.fs.readFile(filepath);
|
|
61
41
|
return {
|
|
62
42
|
content,
|
|
63
43
|
mtime
|
|
64
44
|
};
|
|
65
|
-
}
|
|
45
|
+
};
|
|
66
46
|
class LruReader {
|
|
67
47
|
constructor() {
|
|
68
48
|
this.cache = new import_lru_cache.default({
|
|
@@ -75,26 +55,24 @@ class LruReader {
|
|
|
75
55
|
}
|
|
76
56
|
close() {
|
|
77
57
|
}
|
|
78
|
-
read(filepath) {
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
return item;
|
|
97
|
-
});
|
|
58
|
+
async read(filepath) {
|
|
59
|
+
if (this.cache.has(filepath)) {
|
|
60
|
+
const { content } = this.cache.get(filepath);
|
|
61
|
+
return { content };
|
|
62
|
+
}
|
|
63
|
+
if (!import_utils.fs.existsSync(filepath)) {
|
|
64
|
+
return null;
|
|
65
|
+
}
|
|
66
|
+
const stat = import_utils.fs.statSync(filepath);
|
|
67
|
+
if (stat.isDirectory()) {
|
|
68
|
+
return null;
|
|
69
|
+
}
|
|
70
|
+
if (stat.size > 20 * MB) {
|
|
71
|
+
return null;
|
|
72
|
+
}
|
|
73
|
+
const item = await createCacheItem(filepath, stat.mtime);
|
|
74
|
+
this.cache.set(filepath, item);
|
|
75
|
+
return item;
|
|
98
76
|
}
|
|
99
77
|
update() {
|
|
100
78
|
const { cache } = this;
|
|
@@ -117,10 +95,10 @@ class LruReader {
|
|
|
117
95
|
}
|
|
118
96
|
}
|
|
119
97
|
const reader = new LruReader();
|
|
120
|
-
const readFile = (filepath) =>
|
|
121
|
-
const file =
|
|
98
|
+
const readFile = async (filepath) => {
|
|
99
|
+
const file = await reader.read(filepath);
|
|
122
100
|
return file == null ? void 0 : file.content;
|
|
123
|
-
}
|
|
101
|
+
};
|
|
124
102
|
const updateFile = () => {
|
|
125
103
|
reader.update();
|
|
126
104
|
};
|