@vue/server-renderer 3.6.0-beta.4 → 3.6.0-beta.6
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/dist/server-renderer.cjs.js +773 -979
- package/dist/server-renderer.cjs.prod.js +531 -754
- package/dist/server-renderer.d.ts +40 -26
- package/dist/server-renderer.esm-browser.js +6018 -8067
- package/dist/server-renderer.esm-browser.prod.js +5 -4
- package/dist/server-renderer.esm-bundler.js +1231 -1463
- package/package.json +4 -4
|
@@ -1,857 +1,633 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* @vue/server-renderer v3.6.0-beta.
|
|
3
|
-
* (c) 2018-present Yuxi (Evan) You and Vue contributors
|
|
4
|
-
* @license MIT
|
|
5
|
-
**/
|
|
6
|
-
'
|
|
2
|
+
* @vue/server-renderer v3.6.0-beta.6
|
|
3
|
+
* (c) 2018-present Yuxi (Evan) You and Vue contributors
|
|
4
|
+
* @license MIT
|
|
5
|
+
**/
|
|
6
|
+
Object.defineProperties(exports, { __esModule: { value: true }, [Symbol.toStringTag]: { value: 'Module' } });
|
|
7
|
+
//#region \0rolldown/runtime.js
|
|
8
|
+
var __create = Object.create;
|
|
9
|
+
var __defProp = Object.defineProperty;
|
|
10
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
11
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
12
|
+
var __getProtoOf = Object.getPrototypeOf;
|
|
13
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
14
|
+
var __exportAll = (all, no_symbols) => {
|
|
15
|
+
let target = {};
|
|
16
|
+
for (var name in all) {
|
|
17
|
+
__defProp(target, name, {
|
|
18
|
+
get: all[name],
|
|
19
|
+
enumerable: true
|
|
20
|
+
});
|
|
21
|
+
}
|
|
22
|
+
if (!no_symbols) {
|
|
23
|
+
__defProp(target, Symbol.toStringTag, { value: "Module" });
|
|
24
|
+
}
|
|
25
|
+
return target;
|
|
26
|
+
};
|
|
27
|
+
var __copyProps = (to, from, except, desc) => {
|
|
28
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
29
|
+
for (var keys = __getOwnPropNames(from), i = 0, n = keys.length, key; i < n; i++) {
|
|
30
|
+
key = keys[i];
|
|
31
|
+
if (!__hasOwnProp.call(to, key) && key !== except) {
|
|
32
|
+
__defProp(to, key, {
|
|
33
|
+
get: ((k) => from[k]).bind(null, key),
|
|
34
|
+
enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable
|
|
35
|
+
});
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
return to;
|
|
40
|
+
};
|
|
41
|
+
var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", {
|
|
42
|
+
value: mod,
|
|
43
|
+
enumerable: true
|
|
44
|
+
}) : target, mod));
|
|
7
45
|
|
|
8
|
-
|
|
46
|
+
//#endregion
|
|
47
|
+
let vue = require("vue");
|
|
48
|
+
vue = __toESM(vue);
|
|
49
|
+
let _vue_shared = require("@vue/shared");
|
|
50
|
+
let _vue_compiler_ssr = require("@vue/compiler-ssr");
|
|
9
51
|
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
var compilerSsr = require('@vue/compiler-ssr');
|
|
13
|
-
|
|
14
|
-
function _interopNamespaceDefault(e) {
|
|
15
|
-
var n = Object.create(null);
|
|
16
|
-
if (e) {
|
|
17
|
-
for (var k in e) {
|
|
18
|
-
n[k] = e[k];
|
|
19
|
-
}
|
|
20
|
-
}
|
|
21
|
-
n.default = e;
|
|
22
|
-
return Object.freeze(n);
|
|
23
|
-
}
|
|
24
|
-
|
|
25
|
-
var Vue__namespace = /*#__PURE__*/_interopNamespaceDefault(Vue);
|
|
26
|
-
|
|
27
|
-
const shouldIgnoreProp = /* @__PURE__ */ shared.makeMap(
|
|
28
|
-
`,key,ref,innerHTML,textContent,ref_key,ref_for`
|
|
29
|
-
);
|
|
52
|
+
//#region packages/server-renderer/src/helpers/ssrRenderAttrs.ts
|
|
53
|
+
const shouldIgnoreProp = /* @__PURE__ */ (0, _vue_shared.makeMap)(`,key,ref,innerHTML,textContent,ref_key,ref_for`);
|
|
30
54
|
function ssrRenderAttrs(props, tag) {
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
} else if (key === "style") {
|
|
42
|
-
ret += ` style="${ssrRenderStyle(value)}"`;
|
|
43
|
-
} else {
|
|
44
|
-
ret += ssrRenderDynamicAttr(key, value, tag);
|
|
45
|
-
}
|
|
46
|
-
}
|
|
47
|
-
return ret;
|
|
55
|
+
let ret = "";
|
|
56
|
+
for (let key in props) {
|
|
57
|
+
if (shouldIgnoreProp(key) || (0, _vue_shared.isOn)(key) || tag === "textarea" && key === "value" || key.startsWith(".")) continue;
|
|
58
|
+
const value = props[key];
|
|
59
|
+
if (key.startsWith("^")) key = key.slice(1);
|
|
60
|
+
if (key === "class" || key === "className") ret += ` class="${ssrRenderClass(value)}"`;
|
|
61
|
+
else if (key === "style") ret += ` style="${ssrRenderStyle(value)}"`;
|
|
62
|
+
else ret += ssrRenderDynamicAttr(key, value, tag);
|
|
63
|
+
}
|
|
64
|
+
return ret;
|
|
48
65
|
}
|
|
49
66
|
function ssrRenderDynamicAttr(key, value, tag) {
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
} else {
|
|
59
|
-
console.warn(
|
|
60
|
-
`[@vue/server-renderer] Skipped rendering unsafe attribute name: ${attrKey}`
|
|
61
|
-
);
|
|
62
|
-
return ``;
|
|
63
|
-
}
|
|
67
|
+
if (!(0, _vue_shared.isRenderableAttrValue)(value)) return ``;
|
|
68
|
+
const attrKey = tag && (tag.indexOf("-") > 0 || (0, _vue_shared.isSVGTag)(tag)) ? key : _vue_shared.propsToAttrMap[key] || key.toLowerCase();
|
|
69
|
+
if ((0, _vue_shared.isBooleanAttr)(attrKey)) return (0, _vue_shared.includeBooleanAttr)(value) ? ` ${attrKey}` : ``;
|
|
70
|
+
else if ((0, _vue_shared.isSSRSafeAttrName)(attrKey)) return value === "" ? ` ${attrKey}` : ` ${attrKey}="${(0, _vue_shared.escapeHtml)(value)}"`;
|
|
71
|
+
else {
|
|
72
|
+
console.warn(`[@vue/server-renderer] Skipped rendering unsafe attribute name: ${attrKey}`);
|
|
73
|
+
return ``;
|
|
74
|
+
}
|
|
64
75
|
}
|
|
65
76
|
function ssrRenderAttr(key, value) {
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
}
|
|
69
|
-
return ` ${key}="${shared.escapeHtml(value)}"`;
|
|
77
|
+
if (!(0, _vue_shared.isRenderableAttrValue)(value)) return ``;
|
|
78
|
+
return ` ${key}="${(0, _vue_shared.escapeHtml)(value)}"`;
|
|
70
79
|
}
|
|
71
80
|
function ssrRenderClass(raw) {
|
|
72
|
-
|
|
81
|
+
return (0, _vue_shared.escapeHtml)((0, _vue_shared.normalizeClass)(raw));
|
|
73
82
|
}
|
|
74
83
|
function ssrRenderStyle(raw) {
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
if (shared.isString(raw)) {
|
|
79
|
-
return shared.escapeHtml(raw);
|
|
80
|
-
}
|
|
81
|
-
const styles = shared.normalizeStyle(ssrResetCssVars(raw));
|
|
82
|
-
return shared.escapeHtml(shared.stringifyStyle(styles));
|
|
84
|
+
if (!raw) return "";
|
|
85
|
+
if ((0, _vue_shared.isString)(raw)) return (0, _vue_shared.escapeHtml)(raw);
|
|
86
|
+
return (0, _vue_shared.escapeHtml)((0, _vue_shared.stringifyStyle)((0, _vue_shared.normalizeStyle)(ssrResetCssVars(raw))));
|
|
83
87
|
}
|
|
84
88
|
function ssrResetCssVars(raw) {
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
}
|
|
93
|
-
}
|
|
94
|
-
return res;
|
|
95
|
-
}
|
|
96
|
-
return raw;
|
|
89
|
+
if (!(0, _vue_shared.isArray)(raw) && (0, _vue_shared.isObject)(raw)) {
|
|
90
|
+
const res = {};
|
|
91
|
+
for (const key in raw) if (key.startsWith(":--")) res[key.slice(1)] = (0, _vue_shared.normalizeCssVarValue)(raw[key]);
|
|
92
|
+
else res[key] = raw[key];
|
|
93
|
+
return res;
|
|
94
|
+
}
|
|
95
|
+
return raw;
|
|
97
96
|
}
|
|
98
97
|
|
|
98
|
+
//#endregion
|
|
99
|
+
//#region packages/server-renderer/src/helpers/ssrRenderComponent.ts
|
|
99
100
|
function ssrRenderComponent(comp, props = null, children = null, parentComponent = null, slotScopeId) {
|
|
100
|
-
|
|
101
|
-
Vue.createVNode(comp, props, children),
|
|
102
|
-
parentComponent,
|
|
103
|
-
slotScopeId
|
|
104
|
-
);
|
|
101
|
+
return renderComponentVNode((0, vue.createVNode)(comp, props, children), parentComponent, slotScopeId);
|
|
105
102
|
}
|
|
106
103
|
|
|
107
|
-
|
|
104
|
+
//#endregion
|
|
105
|
+
//#region packages/server-renderer/src/helpers/ssrRenderSlot.ts
|
|
106
|
+
const { ensureValidVNode } = vue.ssrUtils;
|
|
108
107
|
function ssrRenderSlot(slots, slotName, slotProps, fallbackRenderFn, push, parentComponent, slotScopeId) {
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
slotName,
|
|
113
|
-
slotProps,
|
|
114
|
-
fallbackRenderFn,
|
|
115
|
-
push,
|
|
116
|
-
parentComponent,
|
|
117
|
-
slotScopeId
|
|
118
|
-
);
|
|
119
|
-
push(`<!--]-->`);
|
|
108
|
+
push(`<!--[-->`);
|
|
109
|
+
ssrRenderSlotInner(slots, slotName, slotProps, fallbackRenderFn, push, parentComponent, slotScopeId);
|
|
110
|
+
push(`<!--]-->`);
|
|
120
111
|
}
|
|
121
112
|
function ssrRenderSlotInner(slots, slotName, slotProps, fallbackRenderFn, push, parentComponent, slotScopeId, transition) {
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
break;
|
|
157
|
-
}
|
|
158
|
-
}
|
|
159
|
-
}
|
|
160
|
-
if (isEmptySlot) {
|
|
161
|
-
if (fallbackRenderFn) {
|
|
162
|
-
fallbackRenderFn();
|
|
163
|
-
}
|
|
164
|
-
} else {
|
|
165
|
-
let start = 0;
|
|
166
|
-
let end = slotBuffer.length;
|
|
167
|
-
if (transition && slotBuffer[0] === "<!--[-->" && slotBuffer[end - 1] === "<!--]-->") {
|
|
168
|
-
start++;
|
|
169
|
-
end--;
|
|
170
|
-
}
|
|
171
|
-
if (start < end) {
|
|
172
|
-
for (let i = start; i < end; i++) {
|
|
173
|
-
push(slotBuffer[i]);
|
|
174
|
-
}
|
|
175
|
-
} else if (transition) {
|
|
176
|
-
push(`<!---->`);
|
|
177
|
-
}
|
|
178
|
-
}
|
|
179
|
-
}
|
|
180
|
-
} else if (fallbackRenderFn) {
|
|
181
|
-
fallbackRenderFn();
|
|
182
|
-
} else if (transition) {
|
|
183
|
-
push(`<!---->`);
|
|
184
|
-
}
|
|
113
|
+
const slotFn = slots[slotName];
|
|
114
|
+
if (slotFn) {
|
|
115
|
+
const slotBuffer = [];
|
|
116
|
+
const bufferedPush = (item) => {
|
|
117
|
+
slotBuffer.push(item);
|
|
118
|
+
};
|
|
119
|
+
const ret = slotFn(slotProps, bufferedPush, parentComponent, slotScopeId ? " " + slotScopeId : "");
|
|
120
|
+
if ((0, _vue_shared.isArray)(ret)) {
|
|
121
|
+
const validSlotContent = ensureValidVNode(ret);
|
|
122
|
+
if (validSlotContent) renderVNodeChildren(push, validSlotContent, parentComponent, slotScopeId);
|
|
123
|
+
else if (fallbackRenderFn) fallbackRenderFn();
|
|
124
|
+
else if (transition) push(`<!---->`);
|
|
125
|
+
} else {
|
|
126
|
+
let isEmptySlot = true;
|
|
127
|
+
if (transition) isEmptySlot = false;
|
|
128
|
+
else for (let i = 0; i < slotBuffer.length; i++) if (!isComment(slotBuffer[i])) {
|
|
129
|
+
isEmptySlot = false;
|
|
130
|
+
break;
|
|
131
|
+
}
|
|
132
|
+
if (isEmptySlot) {
|
|
133
|
+
if (fallbackRenderFn) fallbackRenderFn();
|
|
134
|
+
} else {
|
|
135
|
+
let start = 0;
|
|
136
|
+
let end = slotBuffer.length;
|
|
137
|
+
if (transition && slotBuffer[0] === "<!--[-->" && slotBuffer[end - 1] === "<!--]-->") {
|
|
138
|
+
start++;
|
|
139
|
+
end--;
|
|
140
|
+
}
|
|
141
|
+
if (start < end) for (let i = start; i < end; i++) push(slotBuffer[i]);
|
|
142
|
+
else if (transition) push(`<!---->`);
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
} else if (fallbackRenderFn) fallbackRenderFn();
|
|
146
|
+
else if (transition) push(`<!---->`);
|
|
185
147
|
}
|
|
186
148
|
const commentTestRE = /^<!--[\s\S]*-->$/;
|
|
187
149
|
const commentRE = /<!--[^]*?-->/gm;
|
|
188
150
|
function isComment(item) {
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
151
|
+
if (typeof item !== "string" || !commentTestRE.test(item)) return false;
|
|
152
|
+
if (item.length <= 8) return true;
|
|
153
|
+
return !item.replace(commentRE, "").trim();
|
|
192
154
|
}
|
|
193
155
|
|
|
156
|
+
//#endregion
|
|
157
|
+
//#region packages/server-renderer/src/helpers/ssrRenderTeleport.ts
|
|
194
158
|
function ssrRenderTeleport(parentPush, contentRenderFn, target, disabled, parentComponent) {
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
159
|
+
parentPush("<!--teleport start-->");
|
|
160
|
+
const context = parentComponent.appContext.provides[vue.ssrContextKey];
|
|
161
|
+
const teleportBuffers = context.__teleportBuffers || (context.__teleportBuffers = {});
|
|
162
|
+
const targetBuffer = teleportBuffers[target] || (teleportBuffers[target] = []);
|
|
163
|
+
const bufferIndex = targetBuffer.length;
|
|
164
|
+
let teleportContent;
|
|
165
|
+
if (disabled) {
|
|
166
|
+
contentRenderFn(parentPush);
|
|
167
|
+
teleportContent = `<!--teleport start anchor--><!--teleport anchor-->`;
|
|
168
|
+
} else {
|
|
169
|
+
const { getBuffer, push } = createBuffer();
|
|
170
|
+
push(`<!--teleport start anchor-->`);
|
|
171
|
+
contentRenderFn(push);
|
|
172
|
+
push(`<!--teleport anchor-->`);
|
|
173
|
+
teleportContent = getBuffer();
|
|
174
|
+
}
|
|
175
|
+
targetBuffer.splice(bufferIndex, 0, teleportContent);
|
|
176
|
+
parentPush("<!--teleport end-->");
|
|
213
177
|
}
|
|
214
178
|
|
|
179
|
+
//#endregion
|
|
180
|
+
//#region packages/server-renderer/src/helpers/ssrInterpolate.ts
|
|
215
181
|
function ssrInterpolate(value) {
|
|
216
|
-
|
|
182
|
+
return (0, _vue_shared.escapeHtml)((0, _vue_shared.toDisplayString)(value));
|
|
217
183
|
}
|
|
218
184
|
|
|
185
|
+
//#endregion
|
|
186
|
+
//#region packages/server-renderer/src/helpers/ssrRenderList.ts
|
|
219
187
|
function ssrRenderList(source, renderItem) {
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
renderItem(arr[i], i);
|
|
233
|
-
}
|
|
234
|
-
} else {
|
|
235
|
-
const keys = Object.keys(source);
|
|
236
|
-
for (let i = 0, l = keys.length; i < l; i++) {
|
|
237
|
-
const key = keys[i];
|
|
238
|
-
renderItem(source[key], key, i);
|
|
239
|
-
}
|
|
240
|
-
}
|
|
241
|
-
}
|
|
188
|
+
if ((0, _vue_shared.isArray)(source) || (0, _vue_shared.isString)(source)) for (let i = 0, l = source.length; i < l; i++) renderItem(source[i], i);
|
|
189
|
+
else if (typeof source === "number") for (let i = 0; i < source; i++) renderItem(i + 1, i);
|
|
190
|
+
else if ((0, _vue_shared.isObject)(source)) if (source[Symbol.iterator]) {
|
|
191
|
+
const arr = Array.from(source);
|
|
192
|
+
for (let i = 0, l = arr.length; i < l; i++) renderItem(arr[i], i);
|
|
193
|
+
} else {
|
|
194
|
+
const keys = Object.keys(source);
|
|
195
|
+
for (let i = 0, l = keys.length; i < l; i++) {
|
|
196
|
+
const key = keys[i];
|
|
197
|
+
renderItem(source[key], key, i);
|
|
198
|
+
}
|
|
199
|
+
}
|
|
242
200
|
}
|
|
243
201
|
|
|
202
|
+
//#endregion
|
|
203
|
+
//#region packages/server-renderer/src/helpers/ssrRenderSuspense.ts
|
|
244
204
|
async function ssrRenderSuspense(push, { default: renderContent }) {
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
} else {
|
|
248
|
-
push(`<!---->`);
|
|
249
|
-
}
|
|
205
|
+
if (renderContent) renderContent();
|
|
206
|
+
else push(`<!---->`);
|
|
250
207
|
}
|
|
251
208
|
|
|
209
|
+
//#endregion
|
|
210
|
+
//#region packages/server-renderer/src/helpers/ssrGetDirectiveProps.ts
|
|
252
211
|
function ssrGetDirectiveProps(instance, dir, value, arg, modifiers = {}) {
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
},
|
|
263
|
-
null
|
|
264
|
-
) || {};
|
|
265
|
-
}
|
|
266
|
-
return {};
|
|
212
|
+
if (typeof dir !== "function" && dir.getSSRProps) return dir.getSSRProps({
|
|
213
|
+
dir,
|
|
214
|
+
instance: vue.ssrUtils.getComponentPublicInstance(instance.$),
|
|
215
|
+
value,
|
|
216
|
+
oldValue: void 0,
|
|
217
|
+
arg,
|
|
218
|
+
modifiers
|
|
219
|
+
}, null) || {};
|
|
220
|
+
return {};
|
|
267
221
|
}
|
|
268
222
|
|
|
269
|
-
|
|
223
|
+
//#endregion
|
|
224
|
+
//#region packages/server-renderer/src/helpers/ssrVModelHelpers.ts
|
|
225
|
+
const ssrLooseEqual = _vue_shared.looseEqual;
|
|
270
226
|
function ssrLooseContain(arr, value) {
|
|
271
|
-
|
|
227
|
+
return (0, _vue_shared.looseIndexOf)(arr, value) > -1;
|
|
272
228
|
}
|
|
273
229
|
function ssrRenderDynamicModel(type, model, value) {
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
default:
|
|
280
|
-
return ssrRenderAttr("value", model);
|
|
281
|
-
}
|
|
230
|
+
switch (type) {
|
|
231
|
+
case "radio": return (0, _vue_shared.looseEqual)(model, value) ? " checked" : "";
|
|
232
|
+
case "checkbox": return ((0, _vue_shared.isArray)(model) ? ssrLooseContain(model, value) : model) ? " checked" : "";
|
|
233
|
+
default: return ssrRenderAttr("value", model);
|
|
234
|
+
}
|
|
282
235
|
}
|
|
283
236
|
function ssrGetDynamicModelProps(existingProps = {}, model) {
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
default:
|
|
291
|
-
return { value: model };
|
|
292
|
-
}
|
|
237
|
+
const { type, value } = existingProps;
|
|
238
|
+
switch (type) {
|
|
239
|
+
case "radio": return (0, _vue_shared.looseEqual)(model, value) ? { checked: true } : null;
|
|
240
|
+
case "checkbox": return ((0, _vue_shared.isArray)(model) ? ssrLooseContain(model, value) : model) ? { checked: true } : null;
|
|
241
|
+
default: return { value: model };
|
|
242
|
+
}
|
|
293
243
|
}
|
|
294
244
|
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
|
|
301
|
-
|
|
302
|
-
|
|
303
|
-
|
|
304
|
-
|
|
305
|
-
|
|
306
|
-
|
|
307
|
-
|
|
308
|
-
|
|
309
|
-
|
|
310
|
-
|
|
311
|
-
|
|
312
|
-
|
|
313
|
-
|
|
314
|
-
|
|
315
|
-
|
|
245
|
+
//#endregion
|
|
246
|
+
//#region packages/server-renderer/src/internal.ts
|
|
247
|
+
var internal_exports = /* @__PURE__ */ __exportAll({
|
|
248
|
+
ssrGetDirectiveProps: () => ssrGetDirectiveProps,
|
|
249
|
+
ssrGetDynamicModelProps: () => ssrGetDynamicModelProps,
|
|
250
|
+
ssrIncludeBooleanAttr: () => _vue_shared.includeBooleanAttr,
|
|
251
|
+
ssrInterpolate: () => ssrInterpolate,
|
|
252
|
+
ssrLooseContain: () => ssrLooseContain,
|
|
253
|
+
ssrLooseEqual: () => ssrLooseEqual,
|
|
254
|
+
ssrRenderAttr: () => ssrRenderAttr,
|
|
255
|
+
ssrRenderAttrs: () => ssrRenderAttrs,
|
|
256
|
+
ssrRenderClass: () => ssrRenderClass,
|
|
257
|
+
ssrRenderComponent: () => ssrRenderComponent,
|
|
258
|
+
ssrRenderDynamicAttr: () => ssrRenderDynamicAttr,
|
|
259
|
+
ssrRenderDynamicModel: () => ssrRenderDynamicModel,
|
|
260
|
+
ssrRenderList: () => ssrRenderList,
|
|
261
|
+
ssrRenderSlot: () => ssrRenderSlot,
|
|
262
|
+
ssrRenderSlotInner: () => ssrRenderSlotInner,
|
|
263
|
+
ssrRenderStyle: () => ssrRenderStyle,
|
|
264
|
+
ssrRenderSuspense: () => ssrRenderSuspense,
|
|
265
|
+
ssrRenderTeleport: () => ssrRenderTeleport,
|
|
266
|
+
ssrRenderVNode: () => renderVNode
|
|
316
267
|
});
|
|
317
268
|
|
|
318
|
-
|
|
269
|
+
//#endregion
|
|
270
|
+
//#region packages/server-renderer/src/helpers/ssrCompile.ts
|
|
271
|
+
const compileCache = Object.create(null);
|
|
319
272
|
function ssrCompile(template, instance) {
|
|
320
|
-
|
|
321
|
-
|
|
322
|
-
|
|
323
|
-
|
|
324
|
-
|
|
325
|
-
|
|
326
|
-
|
|
327
|
-
|
|
328
|
-
|
|
329
|
-
|
|
330
|
-
|
|
331
|
-
|
|
332
|
-
|
|
333
|
-
|
|
334
|
-
|
|
335
|
-
|
|
336
|
-
|
|
337
|
-
|
|
338
|
-
|
|
339
|
-
|
|
340
|
-
|
|
341
|
-
|
|
342
|
-
|
|
343
|
-
|
|
344
|
-
|
|
345
|
-
|
|
346
|
-
|
|
347
|
-
}
|
|
348
|
-
finalCompilerOptions.onError = (err) => {
|
|
349
|
-
{
|
|
350
|
-
throw err;
|
|
351
|
-
}
|
|
352
|
-
};
|
|
353
|
-
const { code } = compilerSsr.compile(template, finalCompilerOptions);
|
|
354
|
-
const requireMap = {
|
|
355
|
-
vue: Vue__namespace,
|
|
356
|
-
"vue/server-renderer": helpers
|
|
357
|
-
};
|
|
358
|
-
const fakeRequire = (id) => requireMap[id];
|
|
359
|
-
return compileCache[cacheKey] = Function("require", code)(fakeRequire);
|
|
273
|
+
const Component = instance.type;
|
|
274
|
+
const { isCustomElement, compilerOptions } = instance.appContext.config;
|
|
275
|
+
const { delimiters, compilerOptions: componentCompilerOptions } = Component;
|
|
276
|
+
const finalCompilerOptions = (0, _vue_shared.extend)((0, _vue_shared.extend)({
|
|
277
|
+
isCustomElement,
|
|
278
|
+
delimiters
|
|
279
|
+
}, compilerOptions), componentCompilerOptions);
|
|
280
|
+
finalCompilerOptions.isCustomElement = finalCompilerOptions.isCustomElement || _vue_shared.NO;
|
|
281
|
+
finalCompilerOptions.isNativeTag = finalCompilerOptions.isNativeTag || _vue_shared.NO;
|
|
282
|
+
const cacheKey = JSON.stringify({
|
|
283
|
+
template,
|
|
284
|
+
compilerOptions: finalCompilerOptions
|
|
285
|
+
}, (key, value) => {
|
|
286
|
+
return (0, _vue_shared.isFunction)(value) ? value.toString() : value;
|
|
287
|
+
});
|
|
288
|
+
const cached = compileCache[cacheKey];
|
|
289
|
+
if (cached) return cached;
|
|
290
|
+
finalCompilerOptions.onError = (err) => {
|
|
291
|
+
throw err;
|
|
292
|
+
};
|
|
293
|
+
const { code } = (0, _vue_compiler_ssr.compile)(template, finalCompilerOptions);
|
|
294
|
+
const requireMap = {
|
|
295
|
+
vue,
|
|
296
|
+
"vue/server-renderer": internal_exports
|
|
297
|
+
};
|
|
298
|
+
const fakeRequire = (id) => requireMap[id];
|
|
299
|
+
return compileCache[cacheKey] = Function("require", code)(fakeRequire);
|
|
360
300
|
}
|
|
361
301
|
|
|
362
|
-
|
|
363
|
-
|
|
364
|
-
|
|
365
|
-
setupComponent,
|
|
366
|
-
renderComponentRoot,
|
|
367
|
-
normalizeVNode,
|
|
368
|
-
pushWarningContext,
|
|
369
|
-
popWarningContext
|
|
370
|
-
} = Vue.ssrUtils;
|
|
302
|
+
//#endregion
|
|
303
|
+
//#region packages/server-renderer/src/render.ts
|
|
304
|
+
const { createComponentInstance, setCurrentRenderingInstance, setupComponent, renderComponentRoot, normalizeVNode, pushWarningContext, popWarningContext } = vue.ssrUtils;
|
|
371
305
|
function createBuffer() {
|
|
372
|
-
|
|
373
|
-
|
|
374
|
-
|
|
375
|
-
|
|
376
|
-
|
|
377
|
-
|
|
378
|
-
|
|
379
|
-
|
|
380
|
-
|
|
381
|
-
|
|
382
|
-
|
|
383
|
-
|
|
384
|
-
|
|
385
|
-
|
|
386
|
-
|
|
387
|
-
|
|
388
|
-
|
|
389
|
-
}
|
|
390
|
-
};
|
|
306
|
+
let appendable = false;
|
|
307
|
+
const buffer = [];
|
|
308
|
+
return {
|
|
309
|
+
getBuffer() {
|
|
310
|
+
return buffer;
|
|
311
|
+
},
|
|
312
|
+
push(item) {
|
|
313
|
+
const isStringItem = (0, _vue_shared.isString)(item);
|
|
314
|
+
if (appendable && isStringItem) {
|
|
315
|
+
buffer[buffer.length - 1] += item;
|
|
316
|
+
return;
|
|
317
|
+
}
|
|
318
|
+
buffer.push(item);
|
|
319
|
+
appendable = isStringItem;
|
|
320
|
+
if ((0, _vue_shared.isPromise)(item) || (0, _vue_shared.isArray)(item) && item.hasAsync) buffer.hasAsync = true;
|
|
321
|
+
}
|
|
322
|
+
};
|
|
391
323
|
}
|
|
392
324
|
function renderComponentVNode(vnode, parentComponent = null, slotScopeId) {
|
|
393
|
-
|
|
394
|
-
|
|
395
|
-
|
|
396
|
-
|
|
397
|
-
|
|
398
|
-
|
|
399
|
-
|
|
400
|
-
|
|
401
|
-
|
|
402
|
-
);
|
|
403
|
-
const hasAsyncSetup = shared.isPromise(res);
|
|
404
|
-
let prefetches = instance.sp;
|
|
405
|
-
if (hasAsyncSetup || prefetches) {
|
|
406
|
-
const p = Promise.resolve(res).then(() => {
|
|
407
|
-
if (hasAsyncSetup) prefetches = instance.sp;
|
|
408
|
-
if (prefetches) {
|
|
409
|
-
return Promise.all(
|
|
410
|
-
prefetches.map((prefetch) => prefetch.call(instance.proxy))
|
|
411
|
-
);
|
|
412
|
-
}
|
|
413
|
-
}).catch(shared.NOOP);
|
|
414
|
-
return p.then(() => renderComponentSubTree(instance, slotScopeId));
|
|
415
|
-
} else {
|
|
416
|
-
return renderComponentSubTree(instance, slotScopeId);
|
|
417
|
-
}
|
|
325
|
+
const instance = vnode.component = createComponentInstance(vnode, parentComponent, null);
|
|
326
|
+
const res = setupComponent(instance, true);
|
|
327
|
+
const hasAsyncSetup = (0, _vue_shared.isPromise)(res);
|
|
328
|
+
let prefetches = instance.sp;
|
|
329
|
+
if (hasAsyncSetup || prefetches) return Promise.resolve(res).then(() => {
|
|
330
|
+
if (hasAsyncSetup) prefetches = instance.sp;
|
|
331
|
+
if (prefetches) return Promise.all(prefetches.map((prefetch) => prefetch.call(instance.proxy)));
|
|
332
|
+
}).catch(_vue_shared.NOOP).then(() => renderComponentSubTree(instance, slotScopeId));
|
|
333
|
+
else return renderComponentSubTree(instance, slotScopeId);
|
|
418
334
|
}
|
|
419
335
|
function renderComponentSubTree(instance, slotScopeId) {
|
|
420
|
-
|
|
421
|
-
|
|
422
|
-
|
|
423
|
-
|
|
424
|
-
|
|
425
|
-
|
|
426
|
-
|
|
427
|
-
|
|
428
|
-
|
|
429
|
-
|
|
430
|
-
|
|
431
|
-
|
|
432
|
-
|
|
433
|
-
|
|
434
|
-
|
|
435
|
-
|
|
436
|
-
|
|
437
|
-
|
|
438
|
-
|
|
439
|
-
|
|
440
|
-
|
|
441
|
-
|
|
442
|
-
|
|
443
|
-
|
|
444
|
-
|
|
445
|
-
|
|
446
|
-
|
|
447
|
-
|
|
448
|
-
|
|
449
|
-
|
|
450
|
-
|
|
451
|
-
|
|
452
|
-
|
|
453
|
-
|
|
454
|
-
|
|
455
|
-
|
|
456
|
-
|
|
457
|
-
|
|
458
|
-
|
|
459
|
-
|
|
460
|
-
|
|
461
|
-
|
|
462
|
-
|
|
463
|
-
|
|
464
|
-
|
|
465
|
-
|
|
466
|
-
ssrRender(
|
|
467
|
-
instance.proxy,
|
|
468
|
-
push,
|
|
469
|
-
instance,
|
|
470
|
-
attrs,
|
|
471
|
-
// compiler-optimized bindings
|
|
472
|
-
instance.props,
|
|
473
|
-
instance.setupState,
|
|
474
|
-
instance.data,
|
|
475
|
-
instance.ctx
|
|
476
|
-
);
|
|
477
|
-
} finally {
|
|
478
|
-
setCurrentRenderingInstance(prev);
|
|
479
|
-
}
|
|
480
|
-
} else if (instance.render && instance.render !== shared.NOOP) {
|
|
481
|
-
renderVNode(
|
|
482
|
-
push,
|
|
483
|
-
instance.subTree = renderComponentRoot(instance),
|
|
484
|
-
instance,
|
|
485
|
-
slotScopeId
|
|
486
|
-
);
|
|
487
|
-
} else {
|
|
488
|
-
const componentName = comp.name || comp.__file || `<Anonymous>`;
|
|
489
|
-
Vue.warn(`Component ${componentName} is missing template or render function.`);
|
|
490
|
-
push(`<!---->`);
|
|
491
|
-
}
|
|
492
|
-
}
|
|
493
|
-
return getBuffer();
|
|
336
|
+
const comp = instance.type;
|
|
337
|
+
const { getBuffer, push } = createBuffer();
|
|
338
|
+
if ((0, _vue_shared.isFunction)(comp)) {
|
|
339
|
+
let root = renderComponentRoot(instance);
|
|
340
|
+
if (!comp.props) {
|
|
341
|
+
for (const key in instance.attrs) if (key.startsWith(`data-v-`)) (root.props || (root.props = {}))[key] = ``;
|
|
342
|
+
}
|
|
343
|
+
renderVNode(push, instance.subTree = root, instance, slotScopeId);
|
|
344
|
+
} else {
|
|
345
|
+
if ((!instance.render || instance.render === _vue_shared.NOOP) && !instance.ssrRender && !comp.ssrRender && (0, _vue_shared.isString)(comp.template)) comp.ssrRender = ssrCompile(comp.template, instance);
|
|
346
|
+
const ssrRender = instance.ssrRender || comp.ssrRender;
|
|
347
|
+
if (ssrRender) {
|
|
348
|
+
let attrs = instance.inheritAttrs !== false ? instance.attrs : void 0;
|
|
349
|
+
let hasCloned = false;
|
|
350
|
+
let cur = instance;
|
|
351
|
+
while (true) {
|
|
352
|
+
const scopeId = cur.vnode.scopeId;
|
|
353
|
+
if (scopeId) {
|
|
354
|
+
if (!hasCloned) {
|
|
355
|
+
attrs = { ...attrs };
|
|
356
|
+
hasCloned = true;
|
|
357
|
+
}
|
|
358
|
+
attrs[scopeId] = "";
|
|
359
|
+
}
|
|
360
|
+
const parent = cur.parent;
|
|
361
|
+
if (parent && parent.subTree && parent.subTree === cur.vnode) cur = parent;
|
|
362
|
+
else break;
|
|
363
|
+
}
|
|
364
|
+
if (slotScopeId) {
|
|
365
|
+
if (!hasCloned) attrs = { ...attrs };
|
|
366
|
+
const slotScopeIdList = slotScopeId.trim().split(" ");
|
|
367
|
+
for (let i = 0; i < slotScopeIdList.length; i++) attrs[slotScopeIdList[i]] = "";
|
|
368
|
+
}
|
|
369
|
+
const prev = setCurrentRenderingInstance(instance);
|
|
370
|
+
try {
|
|
371
|
+
ssrRender(instance.proxy, push, instance, attrs, instance.props, instance.setupState, instance.data, instance.ctx);
|
|
372
|
+
} finally {
|
|
373
|
+
setCurrentRenderingInstance(prev);
|
|
374
|
+
}
|
|
375
|
+
} else if (instance.render && instance.render !== _vue_shared.NOOP) renderVNode(push, instance.subTree = renderComponentRoot(instance), instance, slotScopeId);
|
|
376
|
+
else {
|
|
377
|
+
(0, vue.warn)(`Component ${comp.name || comp.__file || `<Anonymous>`} is missing template or render function.`);
|
|
378
|
+
push(`<!---->`);
|
|
379
|
+
}
|
|
380
|
+
}
|
|
381
|
+
return getBuffer();
|
|
494
382
|
}
|
|
495
383
|
function renderVNode(push, vnode, parentComponent, slotScopeId) {
|
|
496
|
-
|
|
497
|
-
|
|
498
|
-
|
|
499
|
-
|
|
500
|
-
|
|
501
|
-
|
|
502
|
-
|
|
503
|
-
|
|
504
|
-
|
|
505
|
-
|
|
506
|
-
|
|
507
|
-
|
|
508
|
-
|
|
509
|
-
|
|
510
|
-
|
|
511
|
-
|
|
512
|
-
|
|
513
|
-
|
|
514
|
-
|
|
515
|
-
|
|
516
|
-
|
|
517
|
-
|
|
518
|
-
|
|
519
|
-
|
|
520
|
-
parentComponent,
|
|
521
|
-
slotScopeId
|
|
522
|
-
);
|
|
523
|
-
push(`<!--]-->`);
|
|
524
|
-
break;
|
|
525
|
-
default:
|
|
526
|
-
if (shapeFlag & 1) {
|
|
527
|
-
renderElementVNode(push, vnode, parentComponent, slotScopeId);
|
|
528
|
-
} else if (shapeFlag & 6) {
|
|
529
|
-
push(renderComponentVNode(vnode, parentComponent, slotScopeId));
|
|
530
|
-
} else if (shapeFlag & 64) {
|
|
531
|
-
renderTeleportVNode(push, vnode, parentComponent, slotScopeId);
|
|
532
|
-
} else if (shapeFlag & 128) {
|
|
533
|
-
renderVNode(push, vnode.ssContent, parentComponent, slotScopeId);
|
|
534
|
-
} else {
|
|
535
|
-
Vue.warn(
|
|
536
|
-
"[@vue/server-renderer] Invalid VNode type:",
|
|
537
|
-
type,
|
|
538
|
-
`(${typeof type})`
|
|
539
|
-
);
|
|
540
|
-
}
|
|
541
|
-
}
|
|
384
|
+
const { type, shapeFlag, children, dirs, props } = vnode;
|
|
385
|
+
if (dirs) vnode.props = applySSRDirectives(vnode, props, dirs);
|
|
386
|
+
switch (type) {
|
|
387
|
+
case vue.Text:
|
|
388
|
+
push((0, _vue_shared.escapeHtml)(children));
|
|
389
|
+
break;
|
|
390
|
+
case vue.Comment:
|
|
391
|
+
push(children ? `<!--${(0, _vue_shared.escapeHtmlComment)(children)}-->` : `<!---->`);
|
|
392
|
+
break;
|
|
393
|
+
case vue.Static:
|
|
394
|
+
push(children);
|
|
395
|
+
break;
|
|
396
|
+
case vue.Fragment:
|
|
397
|
+
if (vnode.slotScopeIds) slotScopeId = (slotScopeId ? slotScopeId + " " : "") + vnode.slotScopeIds.join(" ");
|
|
398
|
+
push(`<!--[-->`);
|
|
399
|
+
renderVNodeChildren(push, children, parentComponent, slotScopeId);
|
|
400
|
+
push(`<!--]-->`);
|
|
401
|
+
break;
|
|
402
|
+
default: if (shapeFlag & 1) renderElementVNode(push, vnode, parentComponent, slotScopeId);
|
|
403
|
+
else if (shapeFlag & 6) push(renderComponentVNode(vnode, parentComponent, slotScopeId));
|
|
404
|
+
else if (shapeFlag & 64) renderTeleportVNode(push, vnode, parentComponent, slotScopeId);
|
|
405
|
+
else if (shapeFlag & 128) renderVNode(push, vnode.ssContent, parentComponent, slotScopeId);
|
|
406
|
+
else (0, vue.warn)("[@vue/server-renderer] Invalid VNode type:", type, `(${typeof type})`);
|
|
407
|
+
}
|
|
542
408
|
}
|
|
543
409
|
function renderVNodeChildren(push, children, parentComponent, slotScopeId) {
|
|
544
|
-
|
|
545
|
-
renderVNode(push, normalizeVNode(children[i]), parentComponent, slotScopeId);
|
|
546
|
-
}
|
|
410
|
+
for (let i = 0; i < children.length; i++) renderVNode(push, normalizeVNode(children[i]), parentComponent, slotScopeId);
|
|
547
411
|
}
|
|
548
412
|
function renderElementVNode(push, vnode, parentComponent, slotScopeId) {
|
|
549
|
-
|
|
550
|
-
|
|
551
|
-
|
|
552
|
-
|
|
553
|
-
|
|
554
|
-
|
|
555
|
-
|
|
556
|
-
|
|
557
|
-
|
|
558
|
-
|
|
559
|
-
|
|
560
|
-
|
|
561
|
-
|
|
562
|
-
|
|
563
|
-
|
|
564
|
-
|
|
565
|
-
|
|
566
|
-
|
|
567
|
-
|
|
568
|
-
|
|
569
|
-
|
|
570
|
-
|
|
571
|
-
|
|
572
|
-
|
|
573
|
-
|
|
574
|
-
|
|
575
|
-
|
|
576
|
-
|
|
577
|
-
|
|
578
|
-
|
|
579
|
-
|
|
580
|
-
|
|
581
|
-
|
|
582
|
-
|
|
583
|
-
}
|
|
584
|
-
}
|
|
585
|
-
if (!hasChildrenOverride) {
|
|
586
|
-
if (shapeFlag & 8) {
|
|
587
|
-
push(shared.escapeHtml(children));
|
|
588
|
-
} else if (shapeFlag & 16) {
|
|
589
|
-
renderVNodeChildren(
|
|
590
|
-
push,
|
|
591
|
-
children,
|
|
592
|
-
parentComponent,
|
|
593
|
-
slotScopeId
|
|
594
|
-
);
|
|
595
|
-
}
|
|
596
|
-
}
|
|
597
|
-
push(`</${tag}>`);
|
|
598
|
-
}
|
|
413
|
+
const tag = vnode.type;
|
|
414
|
+
let { props, children, shapeFlag, scopeId } = vnode;
|
|
415
|
+
let openTag = `<${tag}`;
|
|
416
|
+
if (props) openTag += ssrRenderAttrs(props, tag);
|
|
417
|
+
if (scopeId) openTag += ` ${scopeId}`;
|
|
418
|
+
let curParent = parentComponent;
|
|
419
|
+
let curVnode = vnode;
|
|
420
|
+
while (curParent && curVnode === curParent.subTree) {
|
|
421
|
+
curVnode = curParent.vnode;
|
|
422
|
+
if (curVnode.scopeId) openTag += ` ${curVnode.scopeId}`;
|
|
423
|
+
curParent = curParent.parent;
|
|
424
|
+
}
|
|
425
|
+
if (slotScopeId) openTag += ` ${slotScopeId}`;
|
|
426
|
+
push(openTag + `>`);
|
|
427
|
+
if (!(0, _vue_shared.isVoidTag)(tag)) {
|
|
428
|
+
let hasChildrenOverride = false;
|
|
429
|
+
if (props) {
|
|
430
|
+
if (props.innerHTML) {
|
|
431
|
+
hasChildrenOverride = true;
|
|
432
|
+
push(props.innerHTML);
|
|
433
|
+
} else if (props.textContent) {
|
|
434
|
+
hasChildrenOverride = true;
|
|
435
|
+
push((0, _vue_shared.escapeHtml)(props.textContent));
|
|
436
|
+
} else if (tag === "textarea" && props.value) {
|
|
437
|
+
hasChildrenOverride = true;
|
|
438
|
+
push((0, _vue_shared.escapeHtml)(props.value));
|
|
439
|
+
}
|
|
440
|
+
}
|
|
441
|
+
if (!hasChildrenOverride) {
|
|
442
|
+
if (shapeFlag & 8) push((0, _vue_shared.escapeHtml)(children));
|
|
443
|
+
else if (shapeFlag & 16) renderVNodeChildren(push, children, parentComponent, slotScopeId);
|
|
444
|
+
}
|
|
445
|
+
push(`</${tag}>`);
|
|
446
|
+
}
|
|
599
447
|
}
|
|
600
448
|
function applySSRDirectives(vnode, rawProps, dirs) {
|
|
601
|
-
|
|
602
|
-
|
|
603
|
-
|
|
604
|
-
|
|
605
|
-
|
|
606
|
-
|
|
607
|
-
|
|
608
|
-
|
|
609
|
-
|
|
610
|
-
|
|
611
|
-
}
|
|
612
|
-
return Vue.mergeProps(rawProps || {}, ...toMerge);
|
|
449
|
+
const toMerge = [];
|
|
450
|
+
for (let i = 0; i < dirs.length; i++) {
|
|
451
|
+
const binding = dirs[i];
|
|
452
|
+
const { dir: { getSSRProps } } = binding;
|
|
453
|
+
if (getSSRProps) {
|
|
454
|
+
const props = getSSRProps(binding, vnode);
|
|
455
|
+
if (props) toMerge.push(props);
|
|
456
|
+
}
|
|
457
|
+
}
|
|
458
|
+
return (0, vue.mergeProps)(rawProps || {}, ...toMerge);
|
|
613
459
|
}
|
|
614
460
|
function renderTeleportVNode(push, vnode, parentComponent, slotScopeId) {
|
|
615
|
-
|
|
616
|
-
|
|
617
|
-
|
|
618
|
-
|
|
619
|
-
|
|
620
|
-
|
|
621
|
-
|
|
622
|
-
|
|
623
|
-
|
|
624
|
-
|
|
625
|
-
|
|
626
|
-
|
|
627
|
-
|
|
628
|
-
}
|
|
629
|
-
ssrRenderTeleport(
|
|
630
|
-
push,
|
|
631
|
-
(push2) => {
|
|
632
|
-
renderVNodeChildren(
|
|
633
|
-
push2,
|
|
634
|
-
vnode.children,
|
|
635
|
-
parentComponent,
|
|
636
|
-
slotScopeId
|
|
637
|
-
);
|
|
638
|
-
},
|
|
639
|
-
target,
|
|
640
|
-
disabled || disabled === "",
|
|
641
|
-
parentComponent
|
|
642
|
-
);
|
|
461
|
+
const target = vnode.props && vnode.props.to;
|
|
462
|
+
const disabled = vnode.props && vnode.props.disabled;
|
|
463
|
+
if (!target) {
|
|
464
|
+
if (!disabled) (0, vue.warn)(`[@vue/server-renderer] Teleport is missing target prop.`);
|
|
465
|
+
return [];
|
|
466
|
+
}
|
|
467
|
+
if (!(0, _vue_shared.isString)(target)) {
|
|
468
|
+
(0, vue.warn)(`[@vue/server-renderer] Teleport target must be a query selector string.`);
|
|
469
|
+
return [];
|
|
470
|
+
}
|
|
471
|
+
ssrRenderTeleport(push, (push) => {
|
|
472
|
+
renderVNodeChildren(push, vnode.children, parentComponent, slotScopeId);
|
|
473
|
+
}, target, disabled || disabled === "", parentComponent);
|
|
643
474
|
}
|
|
644
475
|
|
|
645
|
-
|
|
476
|
+
//#endregion
|
|
477
|
+
//#region packages/server-renderer/src/renderToString.ts
|
|
478
|
+
const { isVNode: isVNode$1 } = vue.ssrUtils;
|
|
646
479
|
function nestedUnrollBuffer(buffer, parentRet, startIndex) {
|
|
647
|
-
|
|
648
|
-
|
|
649
|
-
|
|
650
|
-
|
|
651
|
-
|
|
652
|
-
|
|
653
|
-
|
|
654
|
-
|
|
655
|
-
|
|
656
|
-
|
|
657
|
-
|
|
658
|
-
|
|
659
|
-
|
|
660
|
-
|
|
661
|
-
|
|
662
|
-
|
|
663
|
-
|
|
664
|
-
|
|
665
|
-
|
|
666
|
-
|
|
667
|
-
return nestedUnrollBuffer(buffer, "", i);
|
|
668
|
-
});
|
|
669
|
-
}
|
|
670
|
-
ret = result;
|
|
671
|
-
}
|
|
672
|
-
return ret;
|
|
480
|
+
if (!buffer.hasAsync) return parentRet + unrollBufferSync$1(buffer);
|
|
481
|
+
let ret = parentRet;
|
|
482
|
+
for (let i = startIndex; i < buffer.length; i += 1) {
|
|
483
|
+
const item = buffer[i];
|
|
484
|
+
if ((0, _vue_shared.isString)(item)) {
|
|
485
|
+
ret += item;
|
|
486
|
+
continue;
|
|
487
|
+
}
|
|
488
|
+
if ((0, _vue_shared.isPromise)(item)) return item.then((nestedItem) => {
|
|
489
|
+
buffer[i] = nestedItem;
|
|
490
|
+
return nestedUnrollBuffer(buffer, ret, i);
|
|
491
|
+
});
|
|
492
|
+
const result = nestedUnrollBuffer(item, ret, 0);
|
|
493
|
+
if ((0, _vue_shared.isPromise)(result)) return result.then((nestedItem) => {
|
|
494
|
+
buffer[i] = nestedItem;
|
|
495
|
+
return nestedUnrollBuffer(buffer, "", i);
|
|
496
|
+
});
|
|
497
|
+
ret = result;
|
|
498
|
+
}
|
|
499
|
+
return ret;
|
|
673
500
|
}
|
|
674
501
|
function unrollBuffer$1(buffer) {
|
|
675
|
-
|
|
502
|
+
return nestedUnrollBuffer(buffer, "", 0);
|
|
676
503
|
}
|
|
677
504
|
function unrollBufferSync$1(buffer) {
|
|
678
|
-
|
|
679
|
-
|
|
680
|
-
|
|
681
|
-
|
|
682
|
-
|
|
683
|
-
|
|
684
|
-
|
|
685
|
-
}
|
|
686
|
-
}
|
|
687
|
-
return ret;
|
|
505
|
+
let ret = "";
|
|
506
|
+
for (let i = 0; i < buffer.length; i++) {
|
|
507
|
+
let item = buffer[i];
|
|
508
|
+
if ((0, _vue_shared.isString)(item)) ret += item;
|
|
509
|
+
else ret += unrollBufferSync$1(item);
|
|
510
|
+
}
|
|
511
|
+
return ret;
|
|
688
512
|
}
|
|
689
513
|
async function renderToString(input, context = {}) {
|
|
690
|
-
|
|
691
|
-
|
|
692
|
-
|
|
693
|
-
|
|
694
|
-
|
|
695
|
-
|
|
696
|
-
|
|
697
|
-
|
|
698
|
-
await resolveTeleports(context);
|
|
699
|
-
if (context.__watcherHandles) {
|
|
700
|
-
for (const unwatch of context.__watcherHandles) {
|
|
701
|
-
unwatch();
|
|
702
|
-
}
|
|
703
|
-
}
|
|
704
|
-
return result;
|
|
514
|
+
if (isVNode$1(input)) return renderToString((0, vue.createApp)({ render: () => input }), context);
|
|
515
|
+
const vnode = (0, vue.createVNode)(input._component, input._props);
|
|
516
|
+
vnode.appContext = input._context;
|
|
517
|
+
input.provide(vue.ssrContextKey, context);
|
|
518
|
+
const result = await unrollBuffer$1(await renderComponentVNode(vnode));
|
|
519
|
+
await resolveTeleports(context);
|
|
520
|
+
if (context.__watcherHandles) for (const unwatch of context.__watcherHandles) unwatch();
|
|
521
|
+
return result;
|
|
705
522
|
}
|
|
706
523
|
async function resolveTeleports(context) {
|
|
707
|
-
|
|
708
|
-
|
|
709
|
-
|
|
710
|
-
|
|
711
|
-
await Promise.all([context.__teleportBuffers[key]])
|
|
712
|
-
);
|
|
713
|
-
}
|
|
714
|
-
}
|
|
524
|
+
if (context.__teleportBuffers) {
|
|
525
|
+
context.teleports = context.teleports || {};
|
|
526
|
+
for (const key in context.__teleportBuffers) context.teleports[key] = await unrollBuffer$1(await Promise.all([context.__teleportBuffers[key]]));
|
|
527
|
+
}
|
|
715
528
|
}
|
|
716
529
|
|
|
717
|
-
|
|
530
|
+
//#endregion
|
|
531
|
+
//#region packages/server-renderer/src/renderToStream.ts
|
|
532
|
+
const { isVNode } = vue.ssrUtils;
|
|
718
533
|
async function unrollBuffer(buffer, stream) {
|
|
719
|
-
|
|
720
|
-
|
|
721
|
-
|
|
722
|
-
|
|
723
|
-
|
|
724
|
-
|
|
725
|
-
|
|
726
|
-
stream.push(item);
|
|
727
|
-
} else {
|
|
728
|
-
await unrollBuffer(item, stream);
|
|
729
|
-
}
|
|
730
|
-
}
|
|
731
|
-
} else {
|
|
732
|
-
unrollBufferSync(buffer, stream);
|
|
733
|
-
}
|
|
534
|
+
if (buffer.hasAsync) for (let i = 0; i < buffer.length; i++) {
|
|
535
|
+
let item = buffer[i];
|
|
536
|
+
if ((0, _vue_shared.isPromise)(item)) item = await item;
|
|
537
|
+
if ((0, _vue_shared.isString)(item)) stream.push(item);
|
|
538
|
+
else await unrollBuffer(item, stream);
|
|
539
|
+
}
|
|
540
|
+
else unrollBufferSync(buffer, stream);
|
|
734
541
|
}
|
|
735
542
|
function unrollBufferSync(buffer, stream) {
|
|
736
|
-
|
|
737
|
-
|
|
738
|
-
|
|
739
|
-
|
|
740
|
-
|
|
741
|
-
unrollBufferSync(item, stream);
|
|
742
|
-
}
|
|
743
|
-
}
|
|
543
|
+
for (let i = 0; i < buffer.length; i++) {
|
|
544
|
+
let item = buffer[i];
|
|
545
|
+
if ((0, _vue_shared.isString)(item)) stream.push(item);
|
|
546
|
+
else unrollBufferSync(item, stream);
|
|
547
|
+
}
|
|
744
548
|
}
|
|
745
549
|
function renderToSimpleStream(input, context, stream) {
|
|
746
|
-
|
|
747
|
-
|
|
748
|
-
|
|
749
|
-
|
|
750
|
-
|
|
751
|
-
|
|
752
|
-
|
|
753
|
-
|
|
754
|
-
|
|
755
|
-
|
|
756
|
-
Promise.resolve(renderComponentVNode(vnode)).then((buffer) => unrollBuffer(buffer, stream)).then(() => resolveTeleports(context)).then(() => {
|
|
757
|
-
if (context.__watcherHandles) {
|
|
758
|
-
for (const unwatch of context.__watcherHandles) {
|
|
759
|
-
unwatch();
|
|
760
|
-
}
|
|
761
|
-
}
|
|
762
|
-
}).then(() => stream.push(null)).catch((error) => {
|
|
763
|
-
stream.destroy(error);
|
|
764
|
-
});
|
|
765
|
-
return stream;
|
|
550
|
+
if (isVNode(input)) return renderToSimpleStream((0, vue.createApp)({ render: () => input }), context, stream);
|
|
551
|
+
const vnode = (0, vue.createVNode)(input._component, input._props);
|
|
552
|
+
vnode.appContext = input._context;
|
|
553
|
+
input.provide(vue.ssrContextKey, context);
|
|
554
|
+
Promise.resolve(renderComponentVNode(vnode)).then((buffer) => unrollBuffer(buffer, stream)).then(() => resolveTeleports(context)).then(() => {
|
|
555
|
+
if (context.__watcherHandles) for (const unwatch of context.__watcherHandles) unwatch();
|
|
556
|
+
}).then(() => stream.push(null)).catch((error) => {
|
|
557
|
+
stream.destroy(error);
|
|
558
|
+
});
|
|
559
|
+
return stream;
|
|
766
560
|
}
|
|
561
|
+
/**
|
|
562
|
+
* @deprecated
|
|
563
|
+
*/
|
|
767
564
|
function renderToStream(input, context = {}) {
|
|
768
|
-
|
|
769
|
-
|
|
770
|
-
);
|
|
771
|
-
return renderToNodeStream(input, context);
|
|
565
|
+
console.warn(`[@vue/server-renderer] renderToStream is deprecated - use renderToNodeStream instead.`);
|
|
566
|
+
return renderToNodeStream(input, context);
|
|
772
567
|
}
|
|
773
568
|
function renderToNodeStream(input, context = {}) {
|
|
774
|
-
|
|
775
|
-
|
|
776
|
-
|
|
777
|
-
throw new Error(
|
|
778
|
-
`ESM build of renderToStream() does not support renderToNodeStream(). Use pipeToNodeWritable() with an existing Node.js Writable stream instance instead.`
|
|
779
|
-
);
|
|
780
|
-
}
|
|
781
|
-
return renderToSimpleStream(input, context, stream);
|
|
569
|
+
const stream = new (require("node:stream")).Readable({ read() {} });
|
|
570
|
+
if (!stream) throw new Error("ESM build of renderToStream() does not support renderToNodeStream(). Use pipeToNodeWritable() with an existing Node.js Writable stream instance instead.");
|
|
571
|
+
return renderToSimpleStream(input, context, stream);
|
|
782
572
|
}
|
|
783
573
|
function pipeToNodeWritable(input, context = {}, writable) {
|
|
784
|
-
|
|
785
|
-
|
|
786
|
-
|
|
787
|
-
|
|
788
|
-
|
|
789
|
-
|
|
790
|
-
|
|
791
|
-
|
|
792
|
-
|
|
793
|
-
writable.destroy(err);
|
|
794
|
-
}
|
|
795
|
-
});
|
|
574
|
+
renderToSimpleStream(input, context, {
|
|
575
|
+
push(content) {
|
|
576
|
+
if (content != null) writable.write(content);
|
|
577
|
+
else writable.end();
|
|
578
|
+
},
|
|
579
|
+
destroy(err) {
|
|
580
|
+
writable.destroy(err);
|
|
581
|
+
}
|
|
582
|
+
});
|
|
796
583
|
}
|
|
797
584
|
function renderToWebStream(input, context = {}) {
|
|
798
|
-
|
|
799
|
-
|
|
800
|
-
|
|
801
|
-
|
|
802
|
-
|
|
803
|
-
|
|
804
|
-
|
|
805
|
-
|
|
806
|
-
|
|
807
|
-
|
|
808
|
-
|
|
809
|
-
|
|
810
|
-
|
|
811
|
-
|
|
812
|
-
|
|
813
|
-
|
|
814
|
-
|
|
815
|
-
|
|
816
|
-
|
|
817
|
-
|
|
818
|
-
}
|
|
819
|
-
});
|
|
820
|
-
},
|
|
821
|
-
cancel() {
|
|
822
|
-
cancelled = true;
|
|
823
|
-
}
|
|
824
|
-
});
|
|
585
|
+
if (typeof ReadableStream !== "function") throw new Error("ReadableStream constructor is not available in the global scope. If the target environment does support web streams, consider using pipeToWebWritable() with an existing WritableStream instance instead.");
|
|
586
|
+
const encoder = new TextEncoder();
|
|
587
|
+
let cancelled = false;
|
|
588
|
+
return new ReadableStream({
|
|
589
|
+
start(controller) {
|
|
590
|
+
renderToSimpleStream(input, context, {
|
|
591
|
+
push(content) {
|
|
592
|
+
if (cancelled) return;
|
|
593
|
+
if (content != null) controller.enqueue(encoder.encode(content));
|
|
594
|
+
else controller.close();
|
|
595
|
+
},
|
|
596
|
+
destroy(err) {
|
|
597
|
+
controller.error(err);
|
|
598
|
+
}
|
|
599
|
+
});
|
|
600
|
+
},
|
|
601
|
+
cancel() {
|
|
602
|
+
cancelled = true;
|
|
603
|
+
}
|
|
604
|
+
});
|
|
825
605
|
}
|
|
826
606
|
function pipeToWebWritable(input, context = {}, writable) {
|
|
827
|
-
|
|
828
|
-
|
|
829
|
-
|
|
830
|
-
|
|
831
|
-
|
|
832
|
-
|
|
833
|
-
|
|
834
|
-
|
|
835
|
-
|
|
836
|
-
|
|
837
|
-
|
|
838
|
-
|
|
839
|
-
|
|
840
|
-
|
|
841
|
-
|
|
842
|
-
|
|
843
|
-
|
|
844
|
-
},
|
|
845
|
-
destroy(err) {
|
|
846
|
-
console.log(err);
|
|
847
|
-
writer.close();
|
|
848
|
-
}
|
|
849
|
-
});
|
|
607
|
+
const writer = writable.getWriter();
|
|
608
|
+
const encoder = new TextEncoder();
|
|
609
|
+
let hasReady = false;
|
|
610
|
+
try {
|
|
611
|
+
hasReady = (0, _vue_shared.isPromise)(writer.ready);
|
|
612
|
+
} catch (e) {}
|
|
613
|
+
renderToSimpleStream(input, context, {
|
|
614
|
+
async push(content) {
|
|
615
|
+
if (hasReady) await writer.ready;
|
|
616
|
+
if (content != null) return writer.write(encoder.encode(content));
|
|
617
|
+
else return writer.close();
|
|
618
|
+
},
|
|
619
|
+
destroy(err) {
|
|
620
|
+
console.log(err);
|
|
621
|
+
writer.close();
|
|
622
|
+
}
|
|
623
|
+
});
|
|
850
624
|
}
|
|
851
625
|
|
|
852
|
-
|
|
626
|
+
//#endregion
|
|
627
|
+
//#region packages/server-renderer/src/index.ts
|
|
628
|
+
(0, vue.initDirectivesForSSR)();
|
|
853
629
|
|
|
854
|
-
|
|
630
|
+
//#endregion
|
|
855
631
|
exports.pipeToNodeWritable = pipeToNodeWritable;
|
|
856
632
|
exports.pipeToWebWritable = pipeToWebWritable;
|
|
857
633
|
exports.renderToNodeStream = renderToNodeStream;
|
|
@@ -861,6 +637,7 @@ exports.renderToString = renderToString;
|
|
|
861
637
|
exports.renderToWebStream = renderToWebStream;
|
|
862
638
|
exports.ssrGetDirectiveProps = ssrGetDirectiveProps;
|
|
863
639
|
exports.ssrGetDynamicModelProps = ssrGetDynamicModelProps;
|
|
640
|
+
exports.ssrIncludeBooleanAttr = _vue_shared.includeBooleanAttr;
|
|
864
641
|
exports.ssrInterpolate = ssrInterpolate;
|
|
865
642
|
exports.ssrLooseContain = ssrLooseContain;
|
|
866
643
|
exports.ssrLooseEqual = ssrLooseEqual;
|
|
@@ -876,4 +653,4 @@ exports.ssrRenderSlotInner = ssrRenderSlotInner;
|
|
|
876
653
|
exports.ssrRenderStyle = ssrRenderStyle;
|
|
877
654
|
exports.ssrRenderSuspense = ssrRenderSuspense;
|
|
878
655
|
exports.ssrRenderTeleport = ssrRenderTeleport;
|
|
879
|
-
exports.ssrRenderVNode = renderVNode;
|
|
656
|
+
exports.ssrRenderVNode = renderVNode;
|