@vue/compiler-ssr 3.6.0-beta.1 → 3.6.0-beta.11
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/compiler-ssr.cjs.js +776 -1316
- package/dist/compiler-ssr.d.ts +3 -2
- package/package.json +3 -3
package/dist/compiler-ssr.cjs.js
CHANGED
|
@@ -1,1400 +1,860 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* @vue/compiler-ssr v3.6.0-beta.
|
|
3
|
-
* (c) 2018-present Yuxi (Evan) You and Vue contributors
|
|
4
|
-
* @license MIT
|
|
5
|
-
**/
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
const SSR_INTERPOLATE =
|
|
14
|
-
const SSR_RENDER_VNODE =
|
|
15
|
-
const SSR_RENDER_COMPONENT =
|
|
16
|
-
const SSR_RENDER_SLOT =
|
|
17
|
-
const SSR_RENDER_SLOT_INNER =
|
|
18
|
-
const SSR_RENDER_CLASS =
|
|
19
|
-
const SSR_RENDER_STYLE =
|
|
20
|
-
const SSR_RENDER_ATTRS =
|
|
21
|
-
const SSR_RENDER_ATTR =
|
|
22
|
-
const SSR_RENDER_DYNAMIC_ATTR =
|
|
23
|
-
const SSR_RENDER_LIST =
|
|
24
|
-
const SSR_INCLUDE_BOOLEAN_ATTR =
|
|
25
|
-
|
|
26
|
-
);
|
|
27
|
-
const
|
|
28
|
-
const
|
|
29
|
-
const
|
|
30
|
-
|
|
31
|
-
);
|
|
32
|
-
const SSR_GET_DYNAMIC_MODEL_PROPS = /* @__PURE__ */ Symbol(
|
|
33
|
-
`ssrGetDynamicModelProps`
|
|
34
|
-
);
|
|
35
|
-
const SSR_RENDER_TELEPORT = /* @__PURE__ */ Symbol(`ssrRenderTeleport`);
|
|
36
|
-
const SSR_RENDER_SUSPENSE = /* @__PURE__ */ Symbol(`ssrRenderSuspense`);
|
|
37
|
-
const SSR_GET_DIRECTIVE_PROPS = /* @__PURE__ */ Symbol(`ssrGetDirectiveProps`);
|
|
2
|
+
* @vue/compiler-ssr v3.6.0-beta.11
|
|
3
|
+
* (c) 2018-present Yuxi (Evan) You and Vue contributors
|
|
4
|
+
* @license MIT
|
|
5
|
+
**/
|
|
6
|
+
Object.defineProperties(exports, {
|
|
7
|
+
__esModule: { value: true },
|
|
8
|
+
[Symbol.toStringTag]: { value: "Module" }
|
|
9
|
+
});
|
|
10
|
+
let _vue_compiler_dom = require("@vue/compiler-dom");
|
|
11
|
+
let _vue_shared = require("@vue/shared");
|
|
12
|
+
//#region packages/compiler-ssr/src/runtimeHelpers.ts
|
|
13
|
+
const SSR_INTERPOLATE = Symbol(`ssrInterpolate`);
|
|
14
|
+
const SSR_RENDER_VNODE = Symbol(`ssrRenderVNode`);
|
|
15
|
+
const SSR_RENDER_COMPONENT = Symbol(`ssrRenderComponent`);
|
|
16
|
+
const SSR_RENDER_SLOT = Symbol(`ssrRenderSlot`);
|
|
17
|
+
const SSR_RENDER_SLOT_INNER = Symbol(`ssrRenderSlotInner`);
|
|
18
|
+
const SSR_RENDER_CLASS = Symbol(`ssrRenderClass`);
|
|
19
|
+
const SSR_RENDER_STYLE = Symbol(`ssrRenderStyle`);
|
|
20
|
+
const SSR_RENDER_ATTRS = Symbol(`ssrRenderAttrs`);
|
|
21
|
+
const SSR_RENDER_ATTR = Symbol(`ssrRenderAttr`);
|
|
22
|
+
const SSR_RENDER_DYNAMIC_ATTR = Symbol(`ssrRenderDynamicAttr`);
|
|
23
|
+
const SSR_RENDER_LIST = Symbol(`ssrRenderList`);
|
|
24
|
+
const SSR_INCLUDE_BOOLEAN_ATTR = Symbol(`ssrIncludeBooleanAttr`);
|
|
25
|
+
const SSR_LOOSE_EQUAL = Symbol(`ssrLooseEqual`);
|
|
26
|
+
const SSR_LOOSE_CONTAIN = Symbol(`ssrLooseContain`);
|
|
27
|
+
const SSR_RENDER_DYNAMIC_MODEL = Symbol(`ssrRenderDynamicModel`);
|
|
28
|
+
const SSR_GET_DYNAMIC_MODEL_PROPS = Symbol(`ssrGetDynamicModelProps`);
|
|
29
|
+
const SSR_RENDER_TELEPORT = Symbol(`ssrRenderTeleport`);
|
|
30
|
+
const SSR_RENDER_SUSPENSE = Symbol(`ssrRenderSuspense`);
|
|
31
|
+
const SSR_GET_DIRECTIVE_PROPS = Symbol(`ssrGetDirectiveProps`);
|
|
38
32
|
const ssrHelpers = {
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
33
|
+
[SSR_INTERPOLATE]: `ssrInterpolate`,
|
|
34
|
+
[SSR_RENDER_VNODE]: `ssrRenderVNode`,
|
|
35
|
+
[SSR_RENDER_COMPONENT]: `ssrRenderComponent`,
|
|
36
|
+
[SSR_RENDER_SLOT]: `ssrRenderSlot`,
|
|
37
|
+
[SSR_RENDER_SLOT_INNER]: `ssrRenderSlotInner`,
|
|
38
|
+
[SSR_RENDER_CLASS]: `ssrRenderClass`,
|
|
39
|
+
[SSR_RENDER_STYLE]: `ssrRenderStyle`,
|
|
40
|
+
[SSR_RENDER_ATTRS]: `ssrRenderAttrs`,
|
|
41
|
+
[SSR_RENDER_ATTR]: `ssrRenderAttr`,
|
|
42
|
+
[SSR_RENDER_DYNAMIC_ATTR]: `ssrRenderDynamicAttr`,
|
|
43
|
+
[SSR_RENDER_LIST]: `ssrRenderList`,
|
|
44
|
+
[SSR_INCLUDE_BOOLEAN_ATTR]: `ssrIncludeBooleanAttr`,
|
|
45
|
+
[SSR_LOOSE_EQUAL]: `ssrLooseEqual`,
|
|
46
|
+
[SSR_LOOSE_CONTAIN]: `ssrLooseContain`,
|
|
47
|
+
[SSR_RENDER_DYNAMIC_MODEL]: `ssrRenderDynamicModel`,
|
|
48
|
+
[SSR_GET_DYNAMIC_MODEL_PROPS]: `ssrGetDynamicModelProps`,
|
|
49
|
+
[SSR_RENDER_TELEPORT]: `ssrRenderTeleport`,
|
|
50
|
+
[SSR_RENDER_SUSPENSE]: `ssrRenderSuspense`,
|
|
51
|
+
[SSR_GET_DIRECTIVE_PROPS]: `ssrGetDirectiveProps`
|
|
58
52
|
};
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
compilerDom.processIf
|
|
64
|
-
);
|
|
53
|
+
(0, _vue_compiler_dom.registerRuntimeHelpers)(ssrHelpers);
|
|
54
|
+
//#endregion
|
|
55
|
+
//#region packages/compiler-ssr/src/transforms/ssrVIf.ts
|
|
56
|
+
const ssrTransformIf = (0, _vue_compiler_dom.createStructuralDirectiveTransform)(/^(?:if|else|else-if)$/, _vue_compiler_dom.processIf);
|
|
65
57
|
function ssrProcessIf(node, context, disableNestedFragments = false, disableComment = false) {
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
context,
|
|
78
|
-
disableNestedFragments
|
|
79
|
-
);
|
|
80
|
-
if (branch.condition) {
|
|
81
|
-
currentIf = currentIf.alternate = compilerDom.createIfStatement(
|
|
82
|
-
branch.condition,
|
|
83
|
-
branchBlockStatement
|
|
84
|
-
);
|
|
85
|
-
} else {
|
|
86
|
-
currentIf.alternate = branchBlockStatement;
|
|
87
|
-
}
|
|
88
|
-
}
|
|
89
|
-
if (!currentIf.alternate && !disableComment) {
|
|
90
|
-
currentIf.alternate = compilerDom.createBlockStatement([
|
|
91
|
-
compilerDom.createCallExpression(`_push`, ["`<!---->`"])
|
|
92
|
-
]);
|
|
93
|
-
}
|
|
58
|
+
const [rootBranch] = node.branches;
|
|
59
|
+
const ifStatement = (0, _vue_compiler_dom.createIfStatement)(rootBranch.condition, processIfBranch(rootBranch, context, disableNestedFragments));
|
|
60
|
+
context.pushStatement(ifStatement);
|
|
61
|
+
let currentIf = ifStatement;
|
|
62
|
+
for (let i = 1; i < node.branches.length; i++) {
|
|
63
|
+
const branch = node.branches[i];
|
|
64
|
+
const branchBlockStatement = processIfBranch(branch, context, disableNestedFragments);
|
|
65
|
+
if (branch.condition) currentIf = currentIf.alternate = (0, _vue_compiler_dom.createIfStatement)(branch.condition, branchBlockStatement);
|
|
66
|
+
else currentIf.alternate = branchBlockStatement;
|
|
67
|
+
}
|
|
68
|
+
if (!currentIf.alternate && !disableComment) currentIf.alternate = (0, _vue_compiler_dom.createBlockStatement)([(0, _vue_compiler_dom.createCallExpression)(`_push`, ["`<!---->`"])]);
|
|
94
69
|
}
|
|
95
70
|
function processIfBranch(branch, context, disableNestedFragments = false) {
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
!(children.length === 1 && children[0].type === 11);
|
|
99
|
-
return processChildrenAsStatement(branch, context, needFragmentWrapper);
|
|
71
|
+
const { children } = branch;
|
|
72
|
+
return processChildrenAsStatement(branch, context, !disableNestedFragments && (children.length !== 1 || children[0].type !== 1) && !(children.length === 1 && children[0].type === 11));
|
|
100
73
|
}
|
|
101
|
-
|
|
102
|
-
|
|
74
|
+
//#endregion
|
|
75
|
+
//#region packages/compiler-ssr/src/transforms/ssrVFor.ts
|
|
76
|
+
const ssrTransformFor = (0, _vue_compiler_dom.createStructuralDirectiveTransform)("for", _vue_compiler_dom.processFor);
|
|
103
77
|
function ssrProcessFor(node, context, disableNestedFragments = false) {
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
if (!disableNestedFragments) {
|
|
114
|
-
context.pushStringPart(`<!--[-->`);
|
|
115
|
-
}
|
|
116
|
-
context.pushStatement(
|
|
117
|
-
compilerDom.createCallExpression(context.helper(SSR_RENDER_LIST), [
|
|
118
|
-
node.source,
|
|
119
|
-
renderLoop
|
|
120
|
-
])
|
|
121
|
-
);
|
|
122
|
-
if (!disableNestedFragments) {
|
|
123
|
-
context.pushStringPart(`<!--]-->`);
|
|
124
|
-
}
|
|
125
|
-
}
|
|
126
|
-
|
|
78
|
+
const needFragmentWrapper = !disableNestedFragments && (node.children.length !== 1 || node.children[0].type !== 1);
|
|
79
|
+
const renderLoop = (0, _vue_compiler_dom.createFunctionExpression)((0, _vue_compiler_dom.createForLoopParams)(node.parseResult));
|
|
80
|
+
renderLoop.body = processChildrenAsStatement(node, context, needFragmentWrapper);
|
|
81
|
+
if (!disableNestedFragments) context.pushStringPart(`<!--[-->`);
|
|
82
|
+
context.pushStatement((0, _vue_compiler_dom.createCallExpression)(context.helper(SSR_RENDER_LIST), [node.source, renderLoop]));
|
|
83
|
+
if (!disableNestedFragments) context.pushStringPart(`<!--]-->`);
|
|
84
|
+
}
|
|
85
|
+
//#endregion
|
|
86
|
+
//#region packages/compiler-ssr/src/transforms/ssrTransformSlotOutlet.ts
|
|
127
87
|
const ssrTransformSlotOutlet = (node, context) => {
|
|
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
|
-
args.push("null");
|
|
154
|
-
}
|
|
155
|
-
args.push("true");
|
|
156
|
-
}
|
|
157
|
-
}
|
|
158
|
-
node.ssrCodegenNode = compilerDom.createCallExpression(context.helper(method), args);
|
|
159
|
-
}
|
|
88
|
+
if ((0, _vue_compiler_dom.isSlotOutlet)(node)) {
|
|
89
|
+
const { slotName, slotProps } = (0, _vue_compiler_dom.processSlotOutlet)(node, context);
|
|
90
|
+
const args = [
|
|
91
|
+
`_ctx.$slots`,
|
|
92
|
+
slotName,
|
|
93
|
+
slotProps || `{}`,
|
|
94
|
+
`null`,
|
|
95
|
+
`_push`,
|
|
96
|
+
`_parent`
|
|
97
|
+
];
|
|
98
|
+
if (context.scopeId && context.slotted !== false) args.push(`"${context.scopeId}-s"`);
|
|
99
|
+
let method = SSR_RENDER_SLOT;
|
|
100
|
+
let parent = context.parent;
|
|
101
|
+
if (parent) {
|
|
102
|
+
const children = parent.children;
|
|
103
|
+
if (parent.type === 10) parent = context.grandParent;
|
|
104
|
+
let componentType;
|
|
105
|
+
if (parent.type === 1 && parent.tagType === 1 && ((componentType = (0, _vue_compiler_dom.resolveComponentType)(parent, context, true)) === _vue_compiler_dom.TRANSITION || componentType === _vue_compiler_dom.TRANSITION_GROUP) && children.filter((c) => c.type === 1).length === 1) {
|
|
106
|
+
method = SSR_RENDER_SLOT_INNER;
|
|
107
|
+
if (!(context.scopeId && context.slotted !== false)) args.push("null");
|
|
108
|
+
args.push("true");
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
node.ssrCodegenNode = (0, _vue_compiler_dom.createCallExpression)(context.helper(method), args);
|
|
112
|
+
}
|
|
160
113
|
};
|
|
161
114
|
function ssrProcessSlotOutlet(node, context) {
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
}
|
|
174
|
-
|
|
115
|
+
const renderCall = node.ssrCodegenNode;
|
|
116
|
+
if (node.children.length) {
|
|
117
|
+
const fallbackRenderFn = (0, _vue_compiler_dom.createFunctionExpression)([]);
|
|
118
|
+
fallbackRenderFn.body = processChildrenAsStatement(node, context);
|
|
119
|
+
renderCall.arguments[3] = fallbackRenderFn;
|
|
120
|
+
}
|
|
121
|
+
if (context.withSlotScopeId) {
|
|
122
|
+
const slotScopeId = renderCall.arguments[6];
|
|
123
|
+
renderCall.arguments[6] = slotScopeId ? `${slotScopeId} + _scopeId` : `_scopeId`;
|
|
124
|
+
}
|
|
125
|
+
context.pushStatement(node.ssrCodegenNode);
|
|
126
|
+
}
|
|
127
|
+
//#endregion
|
|
128
|
+
//#region packages/compiler-ssr/src/errors.ts
|
|
175
129
|
function createSSRCompilerError(code, loc) {
|
|
176
|
-
|
|
130
|
+
return (0, _vue_compiler_dom.createCompilerError)(code, loc, SSRErrorMessages);
|
|
177
131
|
}
|
|
178
132
|
const SSRErrorMessages = {
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
133
|
+
[65]: `Unsafe attribute name for SSR.`,
|
|
134
|
+
[66]: `Missing the 'to' prop on teleport element.`,
|
|
135
|
+
[67]: `Invalid AST node during SSR transform.`
|
|
182
136
|
};
|
|
183
|
-
|
|
137
|
+
//#endregion
|
|
138
|
+
//#region packages/compiler-ssr/src/transforms/ssrTransformTeleport.ts
|
|
184
139
|
function ssrProcessTeleport(node, context) {
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
true
|
|
212
|
-
/* allow empty */
|
|
213
|
-
);
|
|
214
|
-
const disabled = disabledProp ? disabledProp.type === 6 ? `true` : disabledProp.exp || `false` : `false`;
|
|
215
|
-
const contentRenderFn = compilerDom.createFunctionExpression(
|
|
216
|
-
[`_push`],
|
|
217
|
-
void 0,
|
|
218
|
-
// Body is added later
|
|
219
|
-
true,
|
|
220
|
-
// newline
|
|
221
|
-
false,
|
|
222
|
-
// isSlot
|
|
223
|
-
node.loc
|
|
224
|
-
);
|
|
225
|
-
contentRenderFn.body = processChildrenAsStatement(node, context);
|
|
226
|
-
context.pushStatement(
|
|
227
|
-
compilerDom.createCallExpression(context.helper(SSR_RENDER_TELEPORT), [
|
|
228
|
-
`_push`,
|
|
229
|
-
contentRenderFn,
|
|
230
|
-
target,
|
|
231
|
-
disabled,
|
|
232
|
-
`_parent`
|
|
233
|
-
])
|
|
234
|
-
);
|
|
235
|
-
}
|
|
236
|
-
|
|
140
|
+
const targetProp = (0, _vue_compiler_dom.findProp)(node, "to");
|
|
141
|
+
if (!targetProp) {
|
|
142
|
+
context.onError(createSSRCompilerError(66, node.loc));
|
|
143
|
+
return;
|
|
144
|
+
}
|
|
145
|
+
let target;
|
|
146
|
+
if (targetProp.type === 6) target = targetProp.value && (0, _vue_compiler_dom.createSimpleExpression)(targetProp.value.content, true);
|
|
147
|
+
else target = targetProp.exp;
|
|
148
|
+
if (!target) {
|
|
149
|
+
context.onError(createSSRCompilerError(66, targetProp.loc));
|
|
150
|
+
return;
|
|
151
|
+
}
|
|
152
|
+
const disabledProp = (0, _vue_compiler_dom.findProp)(node, "disabled", false, true);
|
|
153
|
+
const disabled = disabledProp ? disabledProp.type === 6 ? `true` : disabledProp.exp || `false` : `false`;
|
|
154
|
+
const contentRenderFn = (0, _vue_compiler_dom.createFunctionExpression)([`_push`], void 0, true, false, node.loc);
|
|
155
|
+
contentRenderFn.body = processChildrenAsStatement(node, context);
|
|
156
|
+
context.pushStatement((0, _vue_compiler_dom.createCallExpression)(context.helper(SSR_RENDER_TELEPORT), [
|
|
157
|
+
`_push`,
|
|
158
|
+
contentRenderFn,
|
|
159
|
+
target,
|
|
160
|
+
disabled,
|
|
161
|
+
`_parent`
|
|
162
|
+
]));
|
|
163
|
+
}
|
|
164
|
+
//#endregion
|
|
165
|
+
//#region packages/compiler-ssr/src/transforms/ssrTransformSuspense.ts
|
|
237
166
|
const wipMap$3 = /* @__PURE__ */ new WeakMap();
|
|
238
167
|
function ssrTransformSuspense(node, context) {
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
// newline
|
|
257
|
-
false,
|
|
258
|
-
// suspense slots are not treated as normal slots
|
|
259
|
-
loc
|
|
260
|
-
);
|
|
261
|
-
wipEntry.wipSlots.push({
|
|
262
|
-
fn,
|
|
263
|
-
children
|
|
264
|
-
});
|
|
265
|
-
return fn;
|
|
266
|
-
}
|
|
267
|
-
).slots;
|
|
268
|
-
}
|
|
269
|
-
};
|
|
168
|
+
return () => {
|
|
169
|
+
if (node.children.length) {
|
|
170
|
+
const wipEntry = {
|
|
171
|
+
slotsExp: null,
|
|
172
|
+
wipSlots: []
|
|
173
|
+
};
|
|
174
|
+
wipMap$3.set(node, wipEntry);
|
|
175
|
+
wipEntry.slotsExp = (0, _vue_compiler_dom.buildSlots)(node, context, (_props, _vForExp, children, loc) => {
|
|
176
|
+
const fn = (0, _vue_compiler_dom.createFunctionExpression)([], void 0, true, false, loc);
|
|
177
|
+
wipEntry.wipSlots.push({
|
|
178
|
+
fn,
|
|
179
|
+
children
|
|
180
|
+
});
|
|
181
|
+
return fn;
|
|
182
|
+
}).slots;
|
|
183
|
+
}
|
|
184
|
+
};
|
|
270
185
|
}
|
|
271
186
|
function ssrProcessSuspense(node, context) {
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
`_push`,
|
|
284
|
-
slotsExp
|
|
285
|
-
])
|
|
286
|
-
);
|
|
287
|
-
}
|
|
288
|
-
|
|
187
|
+
const wipEntry = wipMap$3.get(node);
|
|
188
|
+
if (!wipEntry) return;
|
|
189
|
+
const { slotsExp, wipSlots } = wipEntry;
|
|
190
|
+
for (let i = 0; i < wipSlots.length; i++) {
|
|
191
|
+
const slot = wipSlots[i];
|
|
192
|
+
slot.fn.body = processChildrenAsStatement(slot, context);
|
|
193
|
+
}
|
|
194
|
+
context.pushStatement((0, _vue_compiler_dom.createCallExpression)(context.helper(SSR_RENDER_SUSPENSE), [`_push`, slotsExp]));
|
|
195
|
+
}
|
|
196
|
+
//#endregion
|
|
197
|
+
//#region packages/compiler-ssr/src/transforms/ssrTransformElement.ts
|
|
289
198
|
const rawChildrenMap = /* @__PURE__ */ new WeakMap();
|
|
290
199
|
const ssrTransformElement = (node, context) => {
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
|
|
301
|
-
|
|
302
|
-
|
|
303
|
-
|
|
304
|
-
|
|
305
|
-
|
|
306
|
-
|
|
307
|
-
|
|
308
|
-
|
|
309
|
-
|
|
310
|
-
|
|
311
|
-
|
|
312
|
-
|
|
313
|
-
|
|
314
|
-
|
|
315
|
-
|
|
316
|
-
|
|
317
|
-
|
|
318
|
-
|
|
319
|
-
|
|
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
|
-
|
|
349
|
-
|
|
350
|
-
|
|
351
|
-
|
|
352
|
-
|
|
353
|
-
|
|
354
|
-
|
|
355
|
-
|
|
356
|
-
|
|
357
|
-
|
|
358
|
-
|
|
359
|
-
|
|
360
|
-
|
|
361
|
-
|
|
362
|
-
|
|
363
|
-
|
|
364
|
-
|
|
365
|
-
|
|
366
|
-
|
|
367
|
-
|
|
368
|
-
|
|
369
|
-
|
|
370
|
-
|
|
371
|
-
|
|
372
|
-
|
|
373
|
-
|
|
374
|
-
|
|
375
|
-
|
|
376
|
-
|
|
377
|
-
|
|
378
|
-
|
|
379
|
-
|
|
380
|
-
|
|
381
|
-
|
|
382
|
-
|
|
383
|
-
|
|
384
|
-
|
|
385
|
-
|
|
386
|
-
|
|
387
|
-
|
|
388
|
-
|
|
389
|
-
|
|
390
|
-
|
|
391
|
-
|
|
392
|
-
|
|
393
|
-
}
|
|
394
|
-
}
|
|
395
|
-
if (needTagForRuntime) {
|
|
396
|
-
propsExp.arguments.push(`"${node.tag}"`);
|
|
397
|
-
}
|
|
398
|
-
openTag.push(propsExp);
|
|
399
|
-
}
|
|
400
|
-
}
|
|
401
|
-
let dynamicClassBinding = void 0;
|
|
402
|
-
let staticClassBinding = void 0;
|
|
403
|
-
let dynamicStyleBinding = void 0;
|
|
404
|
-
for (let i = 0; i < node.props.length; i++) {
|
|
405
|
-
const prop = node.props[i];
|
|
406
|
-
if (node.tag === "input" && isTrueFalseValue(prop)) {
|
|
407
|
-
continue;
|
|
408
|
-
}
|
|
409
|
-
if (prop.type === 7) {
|
|
410
|
-
if (prop.name === "html" && prop.exp) {
|
|
411
|
-
rawChildrenMap.set(
|
|
412
|
-
node,
|
|
413
|
-
compilerDom.createCompoundExpression([`(`, prop.exp, `) ?? ''`])
|
|
414
|
-
);
|
|
415
|
-
} else if (prop.name === "text" && prop.exp) {
|
|
416
|
-
node.children = [compilerDom.createInterpolation(prop.exp, prop.loc)];
|
|
417
|
-
} else if (prop.name === "slot") {
|
|
418
|
-
context.onError(
|
|
419
|
-
compilerDom.createCompilerError(40, prop.loc)
|
|
420
|
-
);
|
|
421
|
-
} else if (isTextareaWithValue(node, prop) && prop.exp) {
|
|
422
|
-
if (!needMergeProps) {
|
|
423
|
-
node.children = [compilerDom.createInterpolation(prop.exp, prop.loc)];
|
|
424
|
-
}
|
|
425
|
-
} else if (!needMergeProps && prop.name !== "on") {
|
|
426
|
-
const directiveTransform = context.directiveTransforms[prop.name];
|
|
427
|
-
if (directiveTransform) {
|
|
428
|
-
const { props, ssrTagParts } = directiveTransform(
|
|
429
|
-
prop,
|
|
430
|
-
node,
|
|
431
|
-
context
|
|
432
|
-
);
|
|
433
|
-
if (ssrTagParts) {
|
|
434
|
-
openTag.push(...ssrTagParts);
|
|
435
|
-
}
|
|
436
|
-
for (let j = 0; j < props.length; j++) {
|
|
437
|
-
const { key, value } = props[j];
|
|
438
|
-
if (compilerDom.isStaticExp(key)) {
|
|
439
|
-
let attrName = key.content;
|
|
440
|
-
if (attrName === "key" || attrName === "ref") {
|
|
441
|
-
continue;
|
|
442
|
-
}
|
|
443
|
-
if (attrName === "class") {
|
|
444
|
-
openTag.push(
|
|
445
|
-
` class="`,
|
|
446
|
-
dynamicClassBinding = compilerDom.createCallExpression(
|
|
447
|
-
context.helper(SSR_RENDER_CLASS),
|
|
448
|
-
[value]
|
|
449
|
-
),
|
|
450
|
-
`"`
|
|
451
|
-
);
|
|
452
|
-
} else if (attrName === "style") {
|
|
453
|
-
if (dynamicStyleBinding) {
|
|
454
|
-
mergeCall(dynamicStyleBinding, value);
|
|
455
|
-
} else {
|
|
456
|
-
openTag.push(
|
|
457
|
-
` style="`,
|
|
458
|
-
dynamicStyleBinding = compilerDom.createCallExpression(
|
|
459
|
-
context.helper(SSR_RENDER_STYLE),
|
|
460
|
-
[value]
|
|
461
|
-
),
|
|
462
|
-
`"`
|
|
463
|
-
);
|
|
464
|
-
}
|
|
465
|
-
} else {
|
|
466
|
-
attrName = node.tag.indexOf("-") > 0 ? attrName : shared.propsToAttrMap[attrName] || attrName.toLowerCase();
|
|
467
|
-
if (shared.isBooleanAttr(attrName)) {
|
|
468
|
-
openTag.push(
|
|
469
|
-
compilerDom.createConditionalExpression(
|
|
470
|
-
compilerDom.createCallExpression(
|
|
471
|
-
context.helper(SSR_INCLUDE_BOOLEAN_ATTR),
|
|
472
|
-
[value]
|
|
473
|
-
),
|
|
474
|
-
compilerDom.createSimpleExpression(" " + attrName, true),
|
|
475
|
-
compilerDom.createSimpleExpression("", true),
|
|
476
|
-
false
|
|
477
|
-
)
|
|
478
|
-
);
|
|
479
|
-
} else if (shared.isSSRSafeAttrName(attrName)) {
|
|
480
|
-
openTag.push(
|
|
481
|
-
compilerDom.createCallExpression(context.helper(SSR_RENDER_ATTR), [
|
|
482
|
-
key,
|
|
483
|
-
value
|
|
484
|
-
])
|
|
485
|
-
);
|
|
486
|
-
} else {
|
|
487
|
-
context.onError(
|
|
488
|
-
createSSRCompilerError(
|
|
489
|
-
65,
|
|
490
|
-
key.loc
|
|
491
|
-
)
|
|
492
|
-
);
|
|
493
|
-
}
|
|
494
|
-
}
|
|
495
|
-
} else {
|
|
496
|
-
const args = [key, value];
|
|
497
|
-
if (needTagForRuntime) {
|
|
498
|
-
args.push(`"${node.tag}"`);
|
|
499
|
-
}
|
|
500
|
-
openTag.push(
|
|
501
|
-
compilerDom.createCallExpression(
|
|
502
|
-
context.helper(SSR_RENDER_DYNAMIC_ATTR),
|
|
503
|
-
args
|
|
504
|
-
)
|
|
505
|
-
);
|
|
506
|
-
}
|
|
507
|
-
}
|
|
508
|
-
}
|
|
509
|
-
}
|
|
510
|
-
} else {
|
|
511
|
-
const name = prop.name;
|
|
512
|
-
if (node.tag === "textarea" && name === "value" && prop.value) {
|
|
513
|
-
rawChildrenMap.set(node, shared.escapeHtml(prop.value.content));
|
|
514
|
-
} else if (!needMergeProps) {
|
|
515
|
-
if (name === "key" || name === "ref") {
|
|
516
|
-
continue;
|
|
517
|
-
}
|
|
518
|
-
if (name === "class" && prop.value) {
|
|
519
|
-
staticClassBinding = JSON.stringify(prop.value.content);
|
|
520
|
-
}
|
|
521
|
-
openTag.push(
|
|
522
|
-
` ${prop.name}` + (prop.value ? `="${shared.escapeHtml(prop.value.content)}"` : ``)
|
|
523
|
-
);
|
|
524
|
-
}
|
|
525
|
-
}
|
|
526
|
-
}
|
|
527
|
-
if (dynamicClassBinding && staticClassBinding) {
|
|
528
|
-
mergeCall(dynamicClassBinding, staticClassBinding);
|
|
529
|
-
removeStaticBinding(openTag, "class");
|
|
530
|
-
}
|
|
531
|
-
if (context.scopeId) {
|
|
532
|
-
openTag.push(` ${context.scopeId}`);
|
|
533
|
-
}
|
|
534
|
-
node.ssrCodegenNode = compilerDom.createTemplateLiteral(openTag);
|
|
535
|
-
};
|
|
200
|
+
if (node.type !== 1 || node.tagType !== 0) return;
|
|
201
|
+
return function ssrPostTransformElement() {
|
|
202
|
+
const openTag = [`<${node.tag}`];
|
|
203
|
+
const needTagForRuntime = node.tag === "textarea" || node.tag.indexOf("-") > 0;
|
|
204
|
+
const hasDynamicVBind = (0, _vue_compiler_dom.hasDynamicKeyVBind)(node);
|
|
205
|
+
const hasCustomDir = node.props.some((p) => p.type === 7 && !(0, _vue_shared.isBuiltInDirective)(p.name));
|
|
206
|
+
const vShowPropIndex = node.props.findIndex((i) => i.type === 7 && i.name === "show");
|
|
207
|
+
if (vShowPropIndex !== -1) {
|
|
208
|
+
const vShowProp = node.props[vShowPropIndex];
|
|
209
|
+
node.props.splice(vShowPropIndex, 1);
|
|
210
|
+
node.props.push(vShowProp);
|
|
211
|
+
}
|
|
212
|
+
const needMergeProps = hasDynamicVBind || hasCustomDir;
|
|
213
|
+
if (needMergeProps) {
|
|
214
|
+
const { props, directives } = (0, _vue_compiler_dom.buildProps)(node, context, node.props, false, false, true);
|
|
215
|
+
if (props || directives.length) {
|
|
216
|
+
const mergedProps = buildSSRProps(props, directives, context);
|
|
217
|
+
const propsExp = (0, _vue_compiler_dom.createCallExpression)(context.helper(SSR_RENDER_ATTRS), [mergedProps]);
|
|
218
|
+
if (node.tag === "textarea") {
|
|
219
|
+
const existingText = node.children[0];
|
|
220
|
+
if (!hasContentOverrideDirective(node) && (!existingText || existingText.type !== 5)) {
|
|
221
|
+
const tempId = `_temp${context.temps++}`;
|
|
222
|
+
propsExp.arguments = [(0, _vue_compiler_dom.createAssignmentExpression)((0, _vue_compiler_dom.createSimpleExpression)(tempId, false), mergedProps)];
|
|
223
|
+
rawChildrenMap.set(node, (0, _vue_compiler_dom.createCallExpression)(context.helper(SSR_INTERPOLATE), [(0, _vue_compiler_dom.createConditionalExpression)((0, _vue_compiler_dom.createSimpleExpression)(`"value" in ${tempId}`, false), (0, _vue_compiler_dom.createSimpleExpression)(`${tempId}.value`, false), (0, _vue_compiler_dom.createSimpleExpression)(existingText ? existingText.content : ``, true), false)]));
|
|
224
|
+
}
|
|
225
|
+
} else if (node.tag === "input") {
|
|
226
|
+
const vModel = findVModel(node);
|
|
227
|
+
if (vModel) {
|
|
228
|
+
const tempExp = (0, _vue_compiler_dom.createSimpleExpression)(`_temp${context.temps++}`, false);
|
|
229
|
+
propsExp.arguments = [(0, _vue_compiler_dom.createSequenceExpression)([(0, _vue_compiler_dom.createAssignmentExpression)(tempExp, mergedProps), (0, _vue_compiler_dom.createCallExpression)(context.helper(_vue_compiler_dom.MERGE_PROPS), [tempExp, (0, _vue_compiler_dom.createCallExpression)(context.helper(SSR_GET_DYNAMIC_MODEL_PROPS), [tempExp, vModel.exp])])])];
|
|
230
|
+
}
|
|
231
|
+
} else if (directives.length && !node.children.length) {
|
|
232
|
+
if (!hasContentOverrideDirective(node)) {
|
|
233
|
+
const tempId = `_temp${context.temps++}`;
|
|
234
|
+
propsExp.arguments = [(0, _vue_compiler_dom.createAssignmentExpression)((0, _vue_compiler_dom.createSimpleExpression)(tempId, false), mergedProps)];
|
|
235
|
+
rawChildrenMap.set(node, (0, _vue_compiler_dom.createConditionalExpression)((0, _vue_compiler_dom.createSimpleExpression)(`"textContent" in ${tempId}`, false), (0, _vue_compiler_dom.createCallExpression)(context.helper(SSR_INTERPOLATE), [(0, _vue_compiler_dom.createSimpleExpression)(`${tempId}.textContent`, false)]), (0, _vue_compiler_dom.createSimpleExpression)(`${tempId}.innerHTML ?? ''`, false), false));
|
|
236
|
+
}
|
|
237
|
+
}
|
|
238
|
+
if (needTagForRuntime) propsExp.arguments.push(`"${node.tag}"`);
|
|
239
|
+
openTag.push(propsExp);
|
|
240
|
+
}
|
|
241
|
+
}
|
|
242
|
+
let dynamicClassBinding = void 0;
|
|
243
|
+
let staticClassBinding = void 0;
|
|
244
|
+
let dynamicStyleBinding = void 0;
|
|
245
|
+
for (let i = 0; i < node.props.length; i++) {
|
|
246
|
+
const prop = node.props[i];
|
|
247
|
+
if (node.tag === "input" && isTrueFalseValue(prop)) continue;
|
|
248
|
+
if (prop.type === 7) {
|
|
249
|
+
if (prop.name === "html" && prop.exp) rawChildrenMap.set(node, (0, _vue_compiler_dom.createCompoundExpression)([
|
|
250
|
+
`(`,
|
|
251
|
+
prop.exp,
|
|
252
|
+
`) ?? ''`
|
|
253
|
+
]));
|
|
254
|
+
else if (prop.name === "text" && prop.exp) node.children = [(0, _vue_compiler_dom.createInterpolation)(prop.exp, prop.loc)];
|
|
255
|
+
else if (prop.name === "slot") context.onError((0, _vue_compiler_dom.createCompilerError)(40, prop.loc));
|
|
256
|
+
else if (isTextareaWithValue(node, prop) && prop.exp) {
|
|
257
|
+
if (!needMergeProps) node.children = [(0, _vue_compiler_dom.createInterpolation)(prop.exp, prop.loc)];
|
|
258
|
+
} else if (!needMergeProps && prop.name !== "on") {
|
|
259
|
+
const directiveTransform = context.directiveTransforms[prop.name];
|
|
260
|
+
if (directiveTransform) {
|
|
261
|
+
const { props, ssrTagParts } = directiveTransform(prop, node, context);
|
|
262
|
+
if (ssrTagParts) openTag.push(...ssrTagParts);
|
|
263
|
+
for (let j = 0; j < props.length; j++) {
|
|
264
|
+
const { key, value } = props[j];
|
|
265
|
+
if ((0, _vue_compiler_dom.isStaticExp)(key)) {
|
|
266
|
+
let attrName = key.content;
|
|
267
|
+
if (attrName === "key" || attrName === "ref") continue;
|
|
268
|
+
if (attrName === "class") openTag.push(` class="`, dynamicClassBinding = (0, _vue_compiler_dom.createCallExpression)(context.helper(SSR_RENDER_CLASS), [value]), `"`);
|
|
269
|
+
else if (attrName === "style") if (dynamicStyleBinding) mergeCall(dynamicStyleBinding, value);
|
|
270
|
+
else openTag.push(` style="`, dynamicStyleBinding = (0, _vue_compiler_dom.createCallExpression)(context.helper(SSR_RENDER_STYLE), [value]), `"`);
|
|
271
|
+
else {
|
|
272
|
+
attrName = node.tag.indexOf("-") > 0 ? attrName : _vue_shared.propsToAttrMap[attrName] || attrName.toLowerCase();
|
|
273
|
+
if ((0, _vue_shared.isBooleanAttr)(attrName)) openTag.push((0, _vue_compiler_dom.createConditionalExpression)((0, _vue_compiler_dom.createCallExpression)(context.helper(SSR_INCLUDE_BOOLEAN_ATTR), [value]), (0, _vue_compiler_dom.createSimpleExpression)(" " + attrName, true), (0, _vue_compiler_dom.createSimpleExpression)("", true), false));
|
|
274
|
+
else if ((0, _vue_shared.isSSRSafeAttrName)(attrName)) openTag.push((0, _vue_compiler_dom.createCallExpression)(context.helper(SSR_RENDER_ATTR), [key, value]));
|
|
275
|
+
else context.onError(createSSRCompilerError(65, key.loc));
|
|
276
|
+
}
|
|
277
|
+
} else {
|
|
278
|
+
const args = [key, value];
|
|
279
|
+
if (needTagForRuntime) args.push(`"${node.tag}"`);
|
|
280
|
+
openTag.push((0, _vue_compiler_dom.createCallExpression)(context.helper(SSR_RENDER_DYNAMIC_ATTR), args));
|
|
281
|
+
}
|
|
282
|
+
}
|
|
283
|
+
}
|
|
284
|
+
}
|
|
285
|
+
} else {
|
|
286
|
+
const name = prop.name;
|
|
287
|
+
if (node.tag === "textarea" && name === "value" && prop.value) rawChildrenMap.set(node, (0, _vue_shared.escapeHtml)(prop.value.content));
|
|
288
|
+
else if (!needMergeProps) {
|
|
289
|
+
if (name === "key" || name === "ref") continue;
|
|
290
|
+
if (name === "class" && prop.value) staticClassBinding = JSON.stringify(prop.value.content);
|
|
291
|
+
openTag.push(` ${prop.name}` + (prop.value ? `="${(0, _vue_shared.escapeHtml)(prop.value.content)}"` : ``));
|
|
292
|
+
}
|
|
293
|
+
}
|
|
294
|
+
}
|
|
295
|
+
if (dynamicClassBinding && staticClassBinding) {
|
|
296
|
+
mergeCall(dynamicClassBinding, staticClassBinding);
|
|
297
|
+
removeStaticBinding(openTag, "class");
|
|
298
|
+
}
|
|
299
|
+
if (context.scopeId) openTag.push(` ${context.scopeId}`);
|
|
300
|
+
node.ssrCodegenNode = (0, _vue_compiler_dom.createTemplateLiteral)(openTag);
|
|
301
|
+
};
|
|
536
302
|
};
|
|
537
303
|
function buildSSRProps(props, directives, context) {
|
|
538
|
-
|
|
539
|
-
|
|
540
|
-
|
|
541
|
-
|
|
542
|
-
|
|
543
|
-
mergePropsArgs.push(props);
|
|
544
|
-
}
|
|
545
|
-
}
|
|
546
|
-
if (directives.length) {
|
|
547
|
-
for (const dir of directives) {
|
|
548
|
-
mergePropsArgs.push(
|
|
549
|
-
compilerDom.createCallExpression(context.helper(SSR_GET_DIRECTIVE_PROPS), [
|
|
550
|
-
`_ctx`,
|
|
551
|
-
...compilerDom.buildDirectiveArgs(dir, context).elements
|
|
552
|
-
])
|
|
553
|
-
);
|
|
554
|
-
}
|
|
555
|
-
}
|
|
556
|
-
return mergePropsArgs.length > 1 ? compilerDom.createCallExpression(context.helper(compilerDom.MERGE_PROPS), mergePropsArgs) : mergePropsArgs[0];
|
|
304
|
+
let mergePropsArgs = [];
|
|
305
|
+
if (props) if (props.type === 14) mergePropsArgs = props.arguments;
|
|
306
|
+
else mergePropsArgs.push(props);
|
|
307
|
+
if (directives.length) for (const dir of directives) mergePropsArgs.push((0, _vue_compiler_dom.createCallExpression)(context.helper(SSR_GET_DIRECTIVE_PROPS), [`_ctx`, ...(0, _vue_compiler_dom.buildDirectiveArgs)(dir, context).elements]));
|
|
308
|
+
return mergePropsArgs.length > 1 ? (0, _vue_compiler_dom.createCallExpression)(context.helper(_vue_compiler_dom.MERGE_PROPS), mergePropsArgs) : mergePropsArgs[0];
|
|
557
309
|
}
|
|
558
310
|
function isTrueFalseValue(prop) {
|
|
559
|
-
|
|
560
|
-
|
|
561
|
-
} else {
|
|
562
|
-
return prop.name === "true-value" || prop.name === "false-value";
|
|
563
|
-
}
|
|
311
|
+
if (prop.type === 7) return prop.name === "bind" && prop.arg && (0, _vue_compiler_dom.isStaticExp)(prop.arg) && (prop.arg.content === "true-value" || prop.arg.content === "false-value");
|
|
312
|
+
else return prop.name === "true-value" || prop.name === "false-value";
|
|
564
313
|
}
|
|
565
314
|
function isTextareaWithValue(node, prop) {
|
|
566
|
-
|
|
315
|
+
return !!(node.tag === "textarea" && prop.name === "bind" && (0, _vue_compiler_dom.isStaticArgOf)(prop.arg, "value"));
|
|
567
316
|
}
|
|
568
317
|
function mergeCall(call, arg) {
|
|
569
|
-
|
|
570
|
-
|
|
571
|
-
|
|
572
|
-
} else {
|
|
573
|
-
call.arguments[0] = compilerDom.createArrayExpression([existing, arg]);
|
|
574
|
-
}
|
|
318
|
+
const existing = call.arguments[0];
|
|
319
|
+
if (existing.type === 17) existing.elements.push(arg);
|
|
320
|
+
else call.arguments[0] = (0, _vue_compiler_dom.createArrayExpression)([existing, arg]);
|
|
575
321
|
}
|
|
576
322
|
function removeStaticBinding(tag, binding) {
|
|
577
|
-
|
|
578
|
-
|
|
579
|
-
|
|
580
|
-
tag.splice(i, 1);
|
|
581
|
-
}
|
|
323
|
+
const regExp = new RegExp(`^ ${binding}=".+"$`);
|
|
324
|
+
const i = tag.findIndex((e) => typeof e === "string" && regExp.test(e));
|
|
325
|
+
if (i > -1) tag.splice(i, 1);
|
|
582
326
|
}
|
|
583
327
|
function findVModel(node) {
|
|
584
|
-
|
|
585
|
-
(p) => p.type === 7 && p.name === "model" && p.exp
|
|
586
|
-
);
|
|
328
|
+
return node.props.find((p) => p.type === 7 && p.name === "model" && p.exp);
|
|
587
329
|
}
|
|
588
330
|
function hasContentOverrideDirective(node) {
|
|
589
|
-
|
|
331
|
+
return !!(0, _vue_compiler_dom.findDir)(node, "text") || !!(0, _vue_compiler_dom.findDir)(node, "html");
|
|
590
332
|
}
|
|
591
333
|
function ssrProcessElement(node, context) {
|
|
592
|
-
|
|
593
|
-
|
|
594
|
-
|
|
595
|
-
|
|
596
|
-
|
|
597
|
-
|
|
598
|
-
|
|
599
|
-
|
|
600
|
-
|
|
601
|
-
|
|
602
|
-
|
|
603
|
-
|
|
604
|
-
} else if (node.children.length) {
|
|
605
|
-
processChildren(node, context);
|
|
606
|
-
}
|
|
607
|
-
if (!isVoidTag(node.tag)) {
|
|
608
|
-
context.pushStringPart(`</${node.tag}>`);
|
|
609
|
-
}
|
|
610
|
-
}
|
|
611
|
-
|
|
334
|
+
const isVoidTag = context.options.isVoidTag || _vue_shared.NO;
|
|
335
|
+
const elementsToAdd = node.ssrCodegenNode.elements;
|
|
336
|
+
for (let j = 0; j < elementsToAdd.length; j++) context.pushStringPart(elementsToAdd[j]);
|
|
337
|
+
if (context.withSlotScopeId) context.pushStringPart((0, _vue_compiler_dom.createSimpleExpression)(`_scopeId`, false));
|
|
338
|
+
context.pushStringPart(`>`);
|
|
339
|
+
const rawChildren = rawChildrenMap.get(node);
|
|
340
|
+
if (rawChildren) context.pushStringPart(rawChildren);
|
|
341
|
+
else if (node.children.length) processChildren(node, context);
|
|
342
|
+
if (!isVoidTag(node.tag)) context.pushStringPart(`</${node.tag}>`);
|
|
343
|
+
}
|
|
344
|
+
//#endregion
|
|
345
|
+
//#region packages/compiler-ssr/src/transforms/ssrTransformTransitionGroup.ts
|
|
612
346
|
const wipMap$2 = /* @__PURE__ */ new WeakMap();
|
|
613
347
|
function ssrTransformTransitionGroup(node, context) {
|
|
614
|
-
|
|
615
|
-
|
|
616
|
-
|
|
617
|
-
|
|
618
|
-
|
|
619
|
-
|
|
620
|
-
|
|
621
|
-
|
|
622
|
-
|
|
623
|
-
|
|
624
|
-
|
|
625
|
-
|
|
626
|
-
|
|
627
|
-
if (props || directives.length) {
|
|
628
|
-
propsExp = compilerDom.createCallExpression(context.helper(SSR_RENDER_ATTRS), [
|
|
629
|
-
buildSSRProps(props, directives, context)
|
|
630
|
-
]);
|
|
631
|
-
}
|
|
632
|
-
wipMap$2.set(node, {
|
|
633
|
-
tag,
|
|
634
|
-
propsExp,
|
|
635
|
-
scopeId: context.scopeId || null
|
|
636
|
-
});
|
|
637
|
-
}
|
|
638
|
-
};
|
|
348
|
+
return () => {
|
|
349
|
+
const tag = (0, _vue_compiler_dom.findProp)(node, "tag");
|
|
350
|
+
if (tag) {
|
|
351
|
+
const { props, directives } = (0, _vue_compiler_dom.buildProps)(node, context, node.props.filter((p) => p !== tag), true, false, true);
|
|
352
|
+
let propsExp = null;
|
|
353
|
+
if (props || directives.length) propsExp = (0, _vue_compiler_dom.createCallExpression)(context.helper(SSR_RENDER_ATTRS), [buildSSRProps(props, directives, context)]);
|
|
354
|
+
wipMap$2.set(node, {
|
|
355
|
+
tag,
|
|
356
|
+
propsExp,
|
|
357
|
+
scopeId: context.scopeId || null
|
|
358
|
+
});
|
|
359
|
+
}
|
|
360
|
+
};
|
|
639
361
|
}
|
|
640
362
|
function ssrProcessTransitionGroup(node, context) {
|
|
641
|
-
|
|
642
|
-
|
|
643
|
-
|
|
644
|
-
|
|
645
|
-
|
|
646
|
-
|
|
647
|
-
|
|
648
|
-
|
|
649
|
-
|
|
650
|
-
|
|
651
|
-
|
|
652
|
-
|
|
653
|
-
|
|
654
|
-
|
|
655
|
-
|
|
656
|
-
|
|
657
|
-
|
|
658
|
-
|
|
659
|
-
|
|
660
|
-
|
|
661
|
-
|
|
662
|
-
|
|
663
|
-
|
|
664
|
-
|
|
665
|
-
|
|
666
|
-
|
|
667
|
-
|
|
668
|
-
|
|
669
|
-
|
|
670
|
-
|
|
671
|
-
|
|
672
|
-
|
|
673
|
-
|
|
674
|
-
|
|
675
|
-
|
|
676
|
-
|
|
677
|
-
|
|
678
|
-
|
|
679
|
-
|
|
680
|
-
|
|
681
|
-
|
|
682
|
-
|
|
683
|
-
|
|
684
|
-
context.pushStringPart(`>`);
|
|
685
|
-
processChildren(node, context, false, true, true);
|
|
686
|
-
context.pushStringPart(`</${tag.value.content}>`);
|
|
687
|
-
}
|
|
688
|
-
} else {
|
|
689
|
-
processChildren(node, context, true, true, true);
|
|
690
|
-
}
|
|
691
|
-
}
|
|
692
|
-
|
|
363
|
+
const entry = wipMap$2.get(node);
|
|
364
|
+
if (entry) {
|
|
365
|
+
const { tag, propsExp, scopeId } = entry;
|
|
366
|
+
if (tag.type === 7) {
|
|
367
|
+
context.pushStringPart(`<`);
|
|
368
|
+
context.pushStringPart(tag.exp);
|
|
369
|
+
if (propsExp) context.pushStringPart(propsExp);
|
|
370
|
+
if (scopeId) context.pushStringPart(` ${scopeId}`);
|
|
371
|
+
context.pushStringPart(`>`);
|
|
372
|
+
processChildren(
|
|
373
|
+
node,
|
|
374
|
+
context,
|
|
375
|
+
false,
|
|
376
|
+
/**
|
|
377
|
+
* TransitionGroup has the special runtime behavior of flattening and
|
|
378
|
+
* concatenating all children into a single fragment (in order for them to
|
|
379
|
+
* be patched using the same key map) so we need to account for that here
|
|
380
|
+
* by disabling nested fragment wrappers from being generated.
|
|
381
|
+
*/
|
|
382
|
+
true,
|
|
383
|
+
/**
|
|
384
|
+
* TransitionGroup filters out comment children at runtime and thus
|
|
385
|
+
* doesn't expect comments to be present during hydration. We need to
|
|
386
|
+
* account for that by disabling the empty comment that is otherwise
|
|
387
|
+
* rendered for a falsy v-if that has no v-else specified. (#6715)
|
|
388
|
+
*/
|
|
389
|
+
true
|
|
390
|
+
);
|
|
391
|
+
context.pushStringPart(`</`);
|
|
392
|
+
context.pushStringPart(tag.exp);
|
|
393
|
+
context.pushStringPart(`>`);
|
|
394
|
+
} else {
|
|
395
|
+
context.pushStringPart(`<${tag.value.content}`);
|
|
396
|
+
if (propsExp) context.pushStringPart(propsExp);
|
|
397
|
+
if (scopeId) context.pushStringPart(` ${scopeId}`);
|
|
398
|
+
context.pushStringPart(`>`);
|
|
399
|
+
processChildren(node, context, false, true, true);
|
|
400
|
+
context.pushStringPart(`</${tag.value.content}>`);
|
|
401
|
+
}
|
|
402
|
+
} else processChildren(node, context, true, true, true);
|
|
403
|
+
}
|
|
404
|
+
//#endregion
|
|
405
|
+
//#region packages/compiler-ssr/src/transforms/ssrTransformTransition.ts
|
|
693
406
|
const wipMap$1 = /* @__PURE__ */ new WeakMap();
|
|
694
407
|
function ssrTransformTransition(node, context) {
|
|
695
|
-
|
|
696
|
-
|
|
697
|
-
|
|
698
|
-
|
|
408
|
+
return () => {
|
|
409
|
+
const appear = (0, _vue_compiler_dom.findProp)(node, "appear", false, true);
|
|
410
|
+
wipMap$1.set(node, !!appear);
|
|
411
|
+
};
|
|
699
412
|
}
|
|
700
413
|
function ssrProcessTransition(node, context) {
|
|
701
|
-
|
|
702
|
-
|
|
703
|
-
|
|
704
|
-
|
|
705
|
-
|
|
706
|
-
|
|
707
|
-
|
|
708
|
-
|
|
709
|
-
|
|
710
|
-
}
|
|
711
|
-
|
|
414
|
+
node.children = node.children.filter((c) => c.type !== 3);
|
|
415
|
+
if (wipMap$1.get(node)) {
|
|
416
|
+
context.pushStringPart(`<template>`);
|
|
417
|
+
processChildren(node, context, false, true);
|
|
418
|
+
context.pushStringPart(`</template>`);
|
|
419
|
+
} else processChildren(node, context, false, true);
|
|
420
|
+
}
|
|
421
|
+
//#endregion
|
|
422
|
+
//#region packages/compiler-ssr/src/transforms/ssrTransformComponent.ts
|
|
712
423
|
const wipMap = /* @__PURE__ */ new WeakMap();
|
|
713
|
-
const WIP_SLOT =
|
|
424
|
+
const WIP_SLOT = Symbol();
|
|
714
425
|
const componentTypeMap = /* @__PURE__ */ new WeakMap();
|
|
715
426
|
const ssrTransformComponent = (node, context) => {
|
|
716
|
-
|
|
717
|
-
|
|
718
|
-
|
|
719
|
-
|
|
720
|
-
|
|
721
|
-
|
|
722
|
-
|
|
723
|
-
|
|
724
|
-
|
|
725
|
-
|
|
726
|
-
|
|
727
|
-
|
|
728
|
-
|
|
729
|
-
|
|
730
|
-
|
|
731
|
-
|
|
732
|
-
|
|
733
|
-
|
|
734
|
-
|
|
735
|
-
|
|
736
|
-
|
|
737
|
-
|
|
738
|
-
|
|
739
|
-
|
|
740
|
-
|
|
741
|
-
|
|
742
|
-
|
|
743
|
-
|
|
744
|
-
|
|
745
|
-
|
|
746
|
-
|
|
747
|
-
|
|
748
|
-
|
|
749
|
-
|
|
750
|
-
|
|
751
|
-
|
|
752
|
-
|
|
753
|
-
|
|
754
|
-
|
|
755
|
-
|
|
756
|
-
|
|
757
|
-
|
|
758
|
-
|
|
759
|
-
|
|
760
|
-
|
|
761
|
-
|
|
762
|
-
|
|
763
|
-
|
|
764
|
-
|
|
765
|
-
|
|
766
|
-
|
|
767
|
-
|
|
768
|
-
|
|
769
|
-
|
|
770
|
-
|
|
771
|
-
|
|
772
|
-
// isSlot
|
|
773
|
-
loc
|
|
774
|
-
);
|
|
775
|
-
wipEntries.push({
|
|
776
|
-
type: WIP_SLOT,
|
|
777
|
-
fn,
|
|
778
|
-
children,
|
|
779
|
-
// also collect the corresponding vnode branch built earlier
|
|
780
|
-
vnodeBranch: vnodeBranches[wipEntries.length]
|
|
781
|
-
});
|
|
782
|
-
return fn;
|
|
783
|
-
};
|
|
784
|
-
const slots = node.children.length ? compilerDom.buildSlots(node, context, buildSSRSlotFn).slots : `null`;
|
|
785
|
-
if (typeof component !== "string") {
|
|
786
|
-
node.ssrCodegenNode = compilerDom.createCallExpression(
|
|
787
|
-
context.helper(SSR_RENDER_VNODE),
|
|
788
|
-
[
|
|
789
|
-
`_push`,
|
|
790
|
-
compilerDom.createCallExpression(context.helper(compilerDom.CREATE_VNODE), [
|
|
791
|
-
component,
|
|
792
|
-
propsExp,
|
|
793
|
-
slots
|
|
794
|
-
]),
|
|
795
|
-
`_parent`
|
|
796
|
-
]
|
|
797
|
-
);
|
|
798
|
-
} else {
|
|
799
|
-
node.ssrCodegenNode = compilerDom.createCallExpression(
|
|
800
|
-
context.helper(SSR_RENDER_COMPONENT),
|
|
801
|
-
[component, propsExp, slots, `_parent`]
|
|
802
|
-
);
|
|
803
|
-
}
|
|
804
|
-
};
|
|
427
|
+
if (node.type !== 1 || node.tagType !== 1) return;
|
|
428
|
+
const component = (0, _vue_compiler_dom.resolveComponentType)(node, context, true);
|
|
429
|
+
const isDynamicComponent = (0, _vue_shared.isObject)(component) && component.callee === _vue_compiler_dom.RESOLVE_DYNAMIC_COMPONENT;
|
|
430
|
+
componentTypeMap.set(node, component);
|
|
431
|
+
if ((0, _vue_shared.isSymbol)(component)) {
|
|
432
|
+
if (component === _vue_compiler_dom.SUSPENSE) return ssrTransformSuspense(node, context);
|
|
433
|
+
else if (component === _vue_compiler_dom.TRANSITION_GROUP) return ssrTransformTransitionGroup(node, context);
|
|
434
|
+
else if (component === _vue_compiler_dom.TRANSITION) return ssrTransformTransition(node, context);
|
|
435
|
+
return;
|
|
436
|
+
}
|
|
437
|
+
const vnodeBranches = [];
|
|
438
|
+
const clonedNode = clone(node);
|
|
439
|
+
return function ssrPostTransformComponent() {
|
|
440
|
+
if (clonedNode.children.length) (0, _vue_compiler_dom.buildSlots)(clonedNode, context, (props, vFor, children) => {
|
|
441
|
+
vnodeBranches.push(createVNodeSlotBranch(props, vFor, children, context));
|
|
442
|
+
return (0, _vue_compiler_dom.createFunctionExpression)(void 0);
|
|
443
|
+
});
|
|
444
|
+
let propsExp = `null`;
|
|
445
|
+
if (node.props.length) {
|
|
446
|
+
const { props, directives } = (0, _vue_compiler_dom.buildProps)(node, context, void 0, true, isDynamicComponent);
|
|
447
|
+
if (props || directives.length) propsExp = buildSSRProps(props, directives, context);
|
|
448
|
+
}
|
|
449
|
+
const wipEntries = [];
|
|
450
|
+
wipMap.set(node, wipEntries);
|
|
451
|
+
const buildSSRSlotFn = (props, _vForExp, children, loc) => {
|
|
452
|
+
const fn = (0, _vue_compiler_dom.createFunctionExpression)([
|
|
453
|
+
props && (0, _vue_compiler_dom.stringifyExpression)(props) || `_`,
|
|
454
|
+
`_push`,
|
|
455
|
+
`_parent`,
|
|
456
|
+
`_scopeId`
|
|
457
|
+
], void 0, true, true, loc);
|
|
458
|
+
wipEntries.push({
|
|
459
|
+
type: WIP_SLOT,
|
|
460
|
+
fn,
|
|
461
|
+
children,
|
|
462
|
+
vnodeBranch: vnodeBranches[wipEntries.length]
|
|
463
|
+
});
|
|
464
|
+
return fn;
|
|
465
|
+
};
|
|
466
|
+
const slots = node.children.length ? (0, _vue_compiler_dom.buildSlots)(node, context, buildSSRSlotFn).slots : `null`;
|
|
467
|
+
if (typeof component !== "string") node.ssrCodegenNode = (0, _vue_compiler_dom.createCallExpression)(context.helper(SSR_RENDER_VNODE), [
|
|
468
|
+
`_push`,
|
|
469
|
+
(0, _vue_compiler_dom.createCallExpression)(context.helper(_vue_compiler_dom.CREATE_VNODE), [
|
|
470
|
+
component,
|
|
471
|
+
propsExp,
|
|
472
|
+
slots
|
|
473
|
+
]),
|
|
474
|
+
`_parent`
|
|
475
|
+
]);
|
|
476
|
+
else node.ssrCodegenNode = (0, _vue_compiler_dom.createCallExpression)(context.helper(SSR_RENDER_COMPONENT), [
|
|
477
|
+
component,
|
|
478
|
+
propsExp,
|
|
479
|
+
slots,
|
|
480
|
+
`_parent`
|
|
481
|
+
]);
|
|
482
|
+
};
|
|
805
483
|
};
|
|
806
484
|
function ssrProcessComponent(node, context, parent) {
|
|
807
|
-
|
|
808
|
-
|
|
809
|
-
|
|
810
|
-
|
|
811
|
-
|
|
812
|
-
|
|
813
|
-
|
|
814
|
-
|
|
815
|
-
|
|
816
|
-
|
|
817
|
-
|
|
818
|
-
|
|
819
|
-
|
|
820
|
-
|
|
821
|
-
|
|
822
|
-
|
|
823
|
-
|
|
824
|
-
|
|
825
|
-
|
|
826
|
-
for (let i = 0; i < wipEntries.length; i++) {
|
|
827
|
-
const { fn, vnodeBranch } = wipEntries[i];
|
|
828
|
-
fn.body = compilerDom.createIfStatement(
|
|
829
|
-
compilerDom.createSimpleExpression(`_push`, false),
|
|
830
|
-
processChildrenAsStatement(
|
|
831
|
-
wipEntries[i],
|
|
832
|
-
context,
|
|
833
|
-
false,
|
|
834
|
-
true
|
|
835
|
-
),
|
|
836
|
-
vnodeBranch
|
|
837
|
-
);
|
|
838
|
-
}
|
|
839
|
-
if (context.withSlotScopeId) {
|
|
840
|
-
node.ssrCodegenNode.arguments.push(`_scopeId`);
|
|
841
|
-
}
|
|
842
|
-
if (typeof component === "string") {
|
|
843
|
-
context.pushStatement(
|
|
844
|
-
compilerDom.createCallExpression(`_push`, [node.ssrCodegenNode])
|
|
845
|
-
);
|
|
846
|
-
} else {
|
|
847
|
-
context.pushStatement(node.ssrCodegenNode);
|
|
848
|
-
}
|
|
849
|
-
}
|
|
485
|
+
const component = componentTypeMap.get(node);
|
|
486
|
+
if (!node.ssrCodegenNode) if (component === _vue_compiler_dom.TELEPORT) return ssrProcessTeleport(node, context);
|
|
487
|
+
else if (component === _vue_compiler_dom.SUSPENSE) return ssrProcessSuspense(node, context);
|
|
488
|
+
else if (component === _vue_compiler_dom.TRANSITION_GROUP) return ssrProcessTransitionGroup(node, context);
|
|
489
|
+
else {
|
|
490
|
+
if (parent.type === WIP_SLOT) context.pushStringPart(``);
|
|
491
|
+
if (component === _vue_compiler_dom.TRANSITION) return ssrProcessTransition(node, context);
|
|
492
|
+
processChildren(node, context);
|
|
493
|
+
}
|
|
494
|
+
else {
|
|
495
|
+
const wipEntries = wipMap.get(node) || [];
|
|
496
|
+
for (let i = 0; i < wipEntries.length; i++) {
|
|
497
|
+
const { fn, vnodeBranch } = wipEntries[i];
|
|
498
|
+
fn.body = (0, _vue_compiler_dom.createIfStatement)((0, _vue_compiler_dom.createSimpleExpression)(`_push`, false), processChildrenAsStatement(wipEntries[i], context, false, true), vnodeBranch);
|
|
499
|
+
}
|
|
500
|
+
if (context.withSlotScopeId) node.ssrCodegenNode.arguments.push(`_scopeId`);
|
|
501
|
+
if (typeof component === "string") context.pushStatement((0, _vue_compiler_dom.createCallExpression)(`_push`, [node.ssrCodegenNode]));
|
|
502
|
+
else context.pushStatement(node.ssrCodegenNode);
|
|
503
|
+
}
|
|
850
504
|
}
|
|
851
505
|
const rawOptionsMap = /* @__PURE__ */ new WeakMap();
|
|
852
|
-
const [baseNodeTransforms, baseDirectiveTransforms] =
|
|
853
|
-
const vnodeNodeTransforms = [...baseNodeTransforms, ...
|
|
506
|
+
const [baseNodeTransforms, baseDirectiveTransforms] = (0, _vue_compiler_dom.getBaseTransformPreset)(true);
|
|
507
|
+
const vnodeNodeTransforms = [...baseNodeTransforms, ..._vue_compiler_dom.DOMNodeTransforms];
|
|
854
508
|
const vnodeDirectiveTransforms = {
|
|
855
|
-
|
|
856
|
-
|
|
509
|
+
...baseDirectiveTransforms,
|
|
510
|
+
..._vue_compiler_dom.DOMDirectiveTransforms
|
|
857
511
|
};
|
|
858
512
|
function createVNodeSlotBranch(slotProps, vFor, children, parentContext) {
|
|
859
|
-
|
|
860
|
-
|
|
861
|
-
|
|
862
|
-
|
|
863
|
-
|
|
864
|
-
|
|
865
|
-
|
|
866
|
-
|
|
867
|
-
|
|
868
|
-
|
|
869
|
-
|
|
870
|
-
|
|
871
|
-
|
|
872
|
-
|
|
873
|
-
|
|
874
|
-
|
|
875
|
-
|
|
876
|
-
|
|
877
|
-
|
|
878
|
-
|
|
879
|
-
|
|
880
|
-
|
|
881
|
-
|
|
882
|
-
|
|
883
|
-
|
|
884
|
-
|
|
885
|
-
|
|
886
|
-
|
|
887
|
-
|
|
888
|
-
|
|
889
|
-
tag: "template",
|
|
890
|
-
tagType: 3,
|
|
891
|
-
props: wrapperProps,
|
|
892
|
-
children,
|
|
893
|
-
loc: compilerDom.locStub,
|
|
894
|
-
codegenNode: void 0
|
|
895
|
-
};
|
|
896
|
-
subTransform(wrapperNode, subOptions, parentContext);
|
|
897
|
-
return compilerDom.createReturnStatement(children);
|
|
513
|
+
const rawOptions = rawOptionsMap.get(parentContext.root);
|
|
514
|
+
const subOptions = {
|
|
515
|
+
...rawOptions,
|
|
516
|
+
nodeTransforms: [...vnodeNodeTransforms, ...rawOptions.nodeTransforms || []],
|
|
517
|
+
directiveTransforms: {
|
|
518
|
+
...vnodeDirectiveTransforms,
|
|
519
|
+
...rawOptions.directiveTransforms || {}
|
|
520
|
+
}
|
|
521
|
+
};
|
|
522
|
+
const wrapperProps = [];
|
|
523
|
+
if (slotProps) wrapperProps.push({
|
|
524
|
+
type: 7,
|
|
525
|
+
name: "slot",
|
|
526
|
+
exp: slotProps,
|
|
527
|
+
arg: void 0,
|
|
528
|
+
modifiers: [],
|
|
529
|
+
loc: _vue_compiler_dom.locStub
|
|
530
|
+
});
|
|
531
|
+
if (vFor) wrapperProps.push((0, _vue_shared.extend)({}, vFor));
|
|
532
|
+
subTransform({
|
|
533
|
+
type: 1,
|
|
534
|
+
ns: 0,
|
|
535
|
+
tag: "template",
|
|
536
|
+
tagType: 3,
|
|
537
|
+
props: wrapperProps,
|
|
538
|
+
children,
|
|
539
|
+
loc: _vue_compiler_dom.locStub,
|
|
540
|
+
codegenNode: void 0
|
|
541
|
+
}, subOptions, parentContext);
|
|
542
|
+
return (0, _vue_compiler_dom.createReturnStatement)(children);
|
|
898
543
|
}
|
|
899
544
|
function subTransform(node, options, parentContext) {
|
|
900
|
-
|
|
901
|
-
|
|
902
|
-
|
|
903
|
-
|
|
904
|
-
|
|
905
|
-
|
|
906
|
-
|
|
907
|
-
|
|
908
|
-
|
|
909
|
-
|
|
910
|
-
|
|
911
|
-
|
|
912
|
-
|
|
913
|
-
|
|
914
|
-
|
|
915
|
-
|
|
916
|
-
|
|
917
|
-
|
|
918
|
-
|
|
919
|
-
|
|
920
|
-
|
|
545
|
+
const childRoot = (0, _vue_compiler_dom.createRoot)([node]);
|
|
546
|
+
const childContext = (0, _vue_compiler_dom.createTransformContext)(childRoot, options);
|
|
547
|
+
childContext.ssr = false;
|
|
548
|
+
childContext.scopes = { ...parentContext.scopes };
|
|
549
|
+
childContext.identifiers = { ...parentContext.identifiers };
|
|
550
|
+
childContext.identifierScopes = Object.create(null);
|
|
551
|
+
for (const name in parentContext.identifierScopes) childContext.identifierScopes[name] = parentContext.identifierScopes[name].slice();
|
|
552
|
+
childContext.imports = parentContext.imports;
|
|
553
|
+
(0, _vue_compiler_dom.traverseNode)(childRoot, childContext);
|
|
554
|
+
[
|
|
555
|
+
"helpers",
|
|
556
|
+
"components",
|
|
557
|
+
"directives"
|
|
558
|
+
].forEach((key) => {
|
|
559
|
+
childContext[key].forEach((value, helperKey) => {
|
|
560
|
+
if (key === "helpers") {
|
|
561
|
+
const parentCount = parentContext.helpers.get(helperKey);
|
|
562
|
+
if (parentCount === void 0) parentContext.helpers.set(helperKey, value);
|
|
563
|
+
else parentContext.helpers.set(helperKey, value + parentCount);
|
|
564
|
+
} else parentContext[key].add(value);
|
|
565
|
+
});
|
|
566
|
+
});
|
|
921
567
|
}
|
|
922
568
|
function clone(v) {
|
|
923
|
-
|
|
924
|
-
|
|
925
|
-
|
|
926
|
-
|
|
927
|
-
|
|
928
|
-
|
|
929
|
-
|
|
930
|
-
|
|
931
|
-
|
|
932
|
-
return v;
|
|
933
|
-
}
|
|
934
|
-
}
|
|
935
|
-
|
|
569
|
+
if ((0, _vue_shared.isArray)(v)) return v.map(clone);
|
|
570
|
+
else if ((0, _vue_shared.isPlainObject)(v)) {
|
|
571
|
+
const res = {};
|
|
572
|
+
for (const key in v) res[key] = clone(v[key]);
|
|
573
|
+
return res;
|
|
574
|
+
} else return v;
|
|
575
|
+
}
|
|
576
|
+
//#endregion
|
|
577
|
+
//#region packages/compiler-ssr/src/ssrCodegenTransform.ts
|
|
936
578
|
function ssrCodegenTransform(ast, options) {
|
|
937
|
-
|
|
938
|
-
|
|
939
|
-
|
|
940
|
-
|
|
941
|
-
|
|
942
|
-
|
|
943
|
-
|
|
944
|
-
|
|
945
|
-
|
|
946
|
-
|
|
947
|
-
|
|
948
|
-
|
|
949
|
-
|
|
950
|
-
|
|
951
|
-
|
|
952
|
-
|
|
953
|
-
|
|
954
|
-
ast.ssrHelpers = Array.from(
|
|
955
|
-
/* @__PURE__ */ new Set([
|
|
956
|
-
...Array.from(ast.helpers).filter((h) => h in ssrHelpers),
|
|
957
|
-
...context.helpers
|
|
958
|
-
])
|
|
959
|
-
);
|
|
960
|
-
ast.helpers = new Set(Array.from(ast.helpers).filter((h) => !(h in ssrHelpers)));
|
|
579
|
+
const context = createSSRTransformContext(ast, options);
|
|
580
|
+
if (options.ssrCssVars) {
|
|
581
|
+
const cssContext = (0, _vue_compiler_dom.createTransformContext)((0, _vue_compiler_dom.createRoot)([]), options);
|
|
582
|
+
const varsExp = (0, _vue_compiler_dom.processExpression)((0, _vue_compiler_dom.createSimpleExpression)(options.ssrCssVars, false), cssContext);
|
|
583
|
+
context.body.push((0, _vue_compiler_dom.createCompoundExpression)([
|
|
584
|
+
`const _cssVars = { style: `,
|
|
585
|
+
varsExp,
|
|
586
|
+
`}`
|
|
587
|
+
]));
|
|
588
|
+
Array.from(cssContext.helpers.keys()).forEach((helper) => {
|
|
589
|
+
ast.helpers.add(helper);
|
|
590
|
+
});
|
|
591
|
+
}
|
|
592
|
+
processChildren(ast, context, ast.children.length > 1 && ast.children.some((c) => !(0, _vue_compiler_dom.isText)(c)));
|
|
593
|
+
ast.codegenNode = (0, _vue_compiler_dom.createBlockStatement)(context.body);
|
|
594
|
+
ast.ssrHelpers = Array.from(new Set([...Array.from(ast.helpers).filter((h) => h in ssrHelpers), ...context.helpers]));
|
|
595
|
+
ast.helpers = new Set(Array.from(ast.helpers).filter((h) => !(h in ssrHelpers)));
|
|
961
596
|
}
|
|
962
597
|
function createSSRTransformContext(root, options, helpers = /* @__PURE__ */ new Set(), withSlotScopeId = false) {
|
|
963
|
-
|
|
964
|
-
|
|
965
|
-
|
|
966
|
-
|
|
967
|
-
|
|
968
|
-
|
|
969
|
-
|
|
970
|
-
|
|
971
|
-
|
|
972
|
-
|
|
973
|
-
|
|
974
|
-
|
|
975
|
-
|
|
976
|
-
|
|
977
|
-
|
|
978
|
-
|
|
979
|
-
|
|
980
|
-
|
|
981
|
-
|
|
982
|
-
|
|
983
|
-
|
|
984
|
-
|
|
985
|
-
|
|
986
|
-
|
|
987
|
-
|
|
988
|
-
|
|
989
|
-
|
|
990
|
-
|
|
991
|
-
|
|
992
|
-
|
|
993
|
-
|
|
994
|
-
|
|
995
|
-
body.push(statement);
|
|
996
|
-
}
|
|
997
|
-
};
|
|
598
|
+
const body = [];
|
|
599
|
+
let currentString = null;
|
|
600
|
+
return {
|
|
601
|
+
root,
|
|
602
|
+
options,
|
|
603
|
+
body,
|
|
604
|
+
helpers,
|
|
605
|
+
withSlotScopeId,
|
|
606
|
+
onError: options.onError || ((e) => {
|
|
607
|
+
throw e;
|
|
608
|
+
}),
|
|
609
|
+
helper(name) {
|
|
610
|
+
helpers.add(name);
|
|
611
|
+
return name;
|
|
612
|
+
},
|
|
613
|
+
pushStringPart(part) {
|
|
614
|
+
if (!currentString) {
|
|
615
|
+
const currentCall = (0, _vue_compiler_dom.createCallExpression)(`_push`);
|
|
616
|
+
body.push(currentCall);
|
|
617
|
+
currentString = (0, _vue_compiler_dom.createTemplateLiteral)([]);
|
|
618
|
+
currentCall.arguments.push(currentString);
|
|
619
|
+
}
|
|
620
|
+
const bufferedElements = currentString.elements;
|
|
621
|
+
const lastItem = bufferedElements[bufferedElements.length - 1];
|
|
622
|
+
if ((0, _vue_shared.isString)(part) && (0, _vue_shared.isString)(lastItem)) bufferedElements[bufferedElements.length - 1] += part;
|
|
623
|
+
else bufferedElements.push(part);
|
|
624
|
+
},
|
|
625
|
+
pushStatement(statement) {
|
|
626
|
+
currentString = null;
|
|
627
|
+
body.push(statement);
|
|
628
|
+
}
|
|
629
|
+
};
|
|
998
630
|
}
|
|
999
631
|
function createChildContext(parent, withSlotScopeId = parent.withSlotScopeId) {
|
|
1000
|
-
|
|
1001
|
-
parent.root,
|
|
1002
|
-
parent.options,
|
|
1003
|
-
parent.helpers,
|
|
1004
|
-
withSlotScopeId
|
|
1005
|
-
);
|
|
632
|
+
return createSSRTransformContext(parent.root, parent.options, parent.helpers, withSlotScopeId);
|
|
1006
633
|
}
|
|
1007
634
|
function processChildren(parent, context, asFragment = false, disableNestedFragments = false, disableComment = false) {
|
|
1008
|
-
|
|
1009
|
-
|
|
1010
|
-
|
|
1011
|
-
|
|
1012
|
-
|
|
1013
|
-
|
|
1014
|
-
|
|
1015
|
-
|
|
1016
|
-
|
|
1017
|
-
|
|
1018
|
-
|
|
1019
|
-
|
|
1020
|
-
|
|
1021
|
-
|
|
1022
|
-
|
|
1023
|
-
|
|
1024
|
-
|
|
1025
|
-
|
|
1026
|
-
|
|
1027
|
-
|
|
1028
|
-
|
|
1029
|
-
|
|
1030
|
-
|
|
1031
|
-
|
|
1032
|
-
|
|
1033
|
-
|
|
1034
|
-
|
|
1035
|
-
|
|
1036
|
-
|
|
1037
|
-
|
|
1038
|
-
|
|
1039
|
-
|
|
1040
|
-
|
|
1041
|
-
|
|
1042
|
-
|
|
1043
|
-
|
|
1044
|
-
|
|
1045
|
-
|
|
1046
|
-
|
|
1047
|
-
|
|
1048
|
-
|
|
1049
|
-
|
|
1050
|
-
|
|
1051
|
-
|
|
1052
|
-
|
|
1053
|
-
|
|
1054
|
-
case 9:
|
|
1055
|
-
ssrProcessIf(child, context, disableNestedFragments, disableComment);
|
|
1056
|
-
break;
|
|
1057
|
-
case 11:
|
|
1058
|
-
ssrProcessFor(child, context, disableNestedFragments);
|
|
1059
|
-
break;
|
|
1060
|
-
case 10:
|
|
1061
|
-
break;
|
|
1062
|
-
case 12:
|
|
1063
|
-
case 8:
|
|
1064
|
-
break;
|
|
1065
|
-
default:
|
|
1066
|
-
context.onError(
|
|
1067
|
-
createSSRCompilerError(
|
|
1068
|
-
67,
|
|
1069
|
-
child.loc
|
|
1070
|
-
)
|
|
1071
|
-
);
|
|
1072
|
-
const exhaustiveCheck = child;
|
|
1073
|
-
return exhaustiveCheck;
|
|
1074
|
-
}
|
|
1075
|
-
}
|
|
1076
|
-
if (asFragment) {
|
|
1077
|
-
context.pushStringPart(`<!--]-->`);
|
|
1078
|
-
}
|
|
635
|
+
if (asFragment) context.pushStringPart(`<!--[-->`);
|
|
636
|
+
const { children } = parent;
|
|
637
|
+
for (let i = 0; i < children.length; i++) {
|
|
638
|
+
const child = children[i];
|
|
639
|
+
switch (child.type) {
|
|
640
|
+
case 1:
|
|
641
|
+
switch (child.tagType) {
|
|
642
|
+
case 0:
|
|
643
|
+
ssrProcessElement(child, context);
|
|
644
|
+
break;
|
|
645
|
+
case 1:
|
|
646
|
+
ssrProcessComponent(child, context, parent);
|
|
647
|
+
break;
|
|
648
|
+
case 2:
|
|
649
|
+
ssrProcessSlotOutlet(child, context);
|
|
650
|
+
break;
|
|
651
|
+
case 3: break;
|
|
652
|
+
default:
|
|
653
|
+
context.onError(createSSRCompilerError(67, child.loc));
|
|
654
|
+
return child;
|
|
655
|
+
}
|
|
656
|
+
break;
|
|
657
|
+
case 2:
|
|
658
|
+
context.pushStringPart((0, _vue_shared.escapeHtml)(child.content));
|
|
659
|
+
break;
|
|
660
|
+
case 3:
|
|
661
|
+
if (!disableComment) context.pushStringPart(`<!--${child.content}-->`);
|
|
662
|
+
break;
|
|
663
|
+
case 5:
|
|
664
|
+
context.pushStringPart((0, _vue_compiler_dom.createCallExpression)(context.helper(SSR_INTERPOLATE), [child.content]));
|
|
665
|
+
break;
|
|
666
|
+
case 9:
|
|
667
|
+
ssrProcessIf(child, context, disableNestedFragments, disableComment);
|
|
668
|
+
break;
|
|
669
|
+
case 11:
|
|
670
|
+
ssrProcessFor(child, context, disableNestedFragments);
|
|
671
|
+
break;
|
|
672
|
+
case 10: break;
|
|
673
|
+
case 12:
|
|
674
|
+
case 8: break;
|
|
675
|
+
default:
|
|
676
|
+
context.onError(createSSRCompilerError(67, child.loc));
|
|
677
|
+
return child;
|
|
678
|
+
}
|
|
679
|
+
}
|
|
680
|
+
if (asFragment) context.pushStringPart(`<!--]-->`);
|
|
1079
681
|
}
|
|
1080
682
|
function processChildrenAsStatement(parent, parentContext, asFragment = false, withSlotScopeId = parentContext.withSlotScopeId) {
|
|
1081
|
-
|
|
1082
|
-
|
|
1083
|
-
|
|
683
|
+
const childContext = createChildContext(parentContext, withSlotScopeId);
|
|
684
|
+
processChildren(parent, childContext, asFragment);
|
|
685
|
+
return (0, _vue_compiler_dom.createBlockStatement)(childContext.body);
|
|
1084
686
|
}
|
|
1085
|
-
|
|
687
|
+
//#endregion
|
|
688
|
+
//#region packages/compiler-ssr/src/transforms/ssrVModel.ts
|
|
1086
689
|
const ssrTransformModel = (dir, node, context) => {
|
|
1087
|
-
|
|
1088
|
-
|
|
1089
|
-
|
|
1090
|
-
|
|
1091
|
-
|
|
1092
|
-
|
|
1093
|
-
|
|
1094
|
-
|
|
1095
|
-
|
|
1096
|
-
|
|
1097
|
-
|
|
1098
|
-
|
|
1099
|
-
|
|
1100
|
-
|
|
1101
|
-
|
|
1102
|
-
|
|
1103
|
-
|
|
1104
|
-
|
|
1105
|
-
|
|
1106
|
-
|
|
1107
|
-
|
|
1108
|
-
|
|
1109
|
-
|
|
1110
|
-
|
|
1111
|
-
|
|
1112
|
-
|
|
1113
|
-
|
|
1114
|
-
|
|
1115
|
-
|
|
1116
|
-
|
|
1117
|
-
|
|
1118
|
-
|
|
1119
|
-
|
|
1120
|
-
|
|
1121
|
-
|
|
1122
|
-
|
|
1123
|
-
|
|
1124
|
-
|
|
1125
|
-
|
|
1126
|
-
|
|
1127
|
-
|
|
1128
|
-
|
|
1129
|
-
|
|
1130
|
-
|
|
1131
|
-
|
|
1132
|
-
|
|
1133
|
-
|
|
1134
|
-
|
|
1135
|
-
|
|
1136
|
-
|
|
1137
|
-
|
|
1138
|
-
|
|
1139
|
-
|
|
1140
|
-
|
|
1141
|
-
|
|
1142
|
-
|
|
1143
|
-
|
|
1144
|
-
|
|
1145
|
-
|
|
1146
|
-
|
|
1147
|
-
|
|
1148
|
-
|
|
1149
|
-
if (type.type === 7) {
|
|
1150
|
-
res.ssrTagParts = [
|
|
1151
|
-
compilerDom.createCallExpression(context.helper(SSR_RENDER_DYNAMIC_MODEL), [
|
|
1152
|
-
type.exp,
|
|
1153
|
-
model,
|
|
1154
|
-
value
|
|
1155
|
-
])
|
|
1156
|
-
];
|
|
1157
|
-
} else if (type.value) {
|
|
1158
|
-
switch (type.value.content) {
|
|
1159
|
-
case "radio":
|
|
1160
|
-
res.props = [
|
|
1161
|
-
compilerDom.createObjectProperty(
|
|
1162
|
-
`checked`,
|
|
1163
|
-
compilerDom.createCallExpression(context.helper(SSR_LOOSE_EQUAL), [
|
|
1164
|
-
model,
|
|
1165
|
-
value
|
|
1166
|
-
])
|
|
1167
|
-
)
|
|
1168
|
-
];
|
|
1169
|
-
break;
|
|
1170
|
-
case "checkbox":
|
|
1171
|
-
const trueValueBinding = compilerDom.findProp(node, "true-value");
|
|
1172
|
-
if (trueValueBinding) {
|
|
1173
|
-
const trueValue = trueValueBinding.type === 6 ? JSON.stringify(trueValueBinding.value.content) : trueValueBinding.exp;
|
|
1174
|
-
res.props = [
|
|
1175
|
-
compilerDom.createObjectProperty(
|
|
1176
|
-
`checked`,
|
|
1177
|
-
compilerDom.createCallExpression(context.helper(SSR_LOOSE_EQUAL), [
|
|
1178
|
-
model,
|
|
1179
|
-
trueValue
|
|
1180
|
-
])
|
|
1181
|
-
)
|
|
1182
|
-
];
|
|
1183
|
-
} else {
|
|
1184
|
-
res.props = [
|
|
1185
|
-
compilerDom.createObjectProperty(
|
|
1186
|
-
`checked`,
|
|
1187
|
-
compilerDom.createConditionalExpression(
|
|
1188
|
-
compilerDom.createCallExpression(`Array.isArray`, [model]),
|
|
1189
|
-
compilerDom.createCallExpression(context.helper(SSR_LOOSE_CONTAIN), [
|
|
1190
|
-
model,
|
|
1191
|
-
value
|
|
1192
|
-
]),
|
|
1193
|
-
model
|
|
1194
|
-
)
|
|
1195
|
-
)
|
|
1196
|
-
];
|
|
1197
|
-
}
|
|
1198
|
-
break;
|
|
1199
|
-
case "file":
|
|
1200
|
-
context.onError(
|
|
1201
|
-
compilerDom.createDOMCompilerError(
|
|
1202
|
-
60,
|
|
1203
|
-
dir.loc
|
|
1204
|
-
)
|
|
1205
|
-
);
|
|
1206
|
-
break;
|
|
1207
|
-
default:
|
|
1208
|
-
checkDuplicatedValue();
|
|
1209
|
-
res.props = defaultProps;
|
|
1210
|
-
break;
|
|
1211
|
-
}
|
|
1212
|
-
}
|
|
1213
|
-
} else if (compilerDom.hasDynamicKeyVBind(node)) ; else {
|
|
1214
|
-
checkDuplicatedValue();
|
|
1215
|
-
res.props = defaultProps;
|
|
1216
|
-
}
|
|
1217
|
-
} else if (node.tag === "textarea") {
|
|
1218
|
-
checkDuplicatedValue();
|
|
1219
|
-
node.children = [compilerDom.createInterpolation(model, model.loc)];
|
|
1220
|
-
} else if (node.tag === "select") {
|
|
1221
|
-
processSelectChildren(node.children);
|
|
1222
|
-
} else {
|
|
1223
|
-
context.onError(
|
|
1224
|
-
compilerDom.createDOMCompilerError(
|
|
1225
|
-
58,
|
|
1226
|
-
dir.loc
|
|
1227
|
-
)
|
|
1228
|
-
);
|
|
1229
|
-
}
|
|
1230
|
-
return res;
|
|
1231
|
-
} else {
|
|
1232
|
-
return compilerDom.transformModel(dir, node, context);
|
|
1233
|
-
}
|
|
690
|
+
const model = dir.exp;
|
|
691
|
+
function checkDuplicatedValue() {
|
|
692
|
+
const value = (0, _vue_compiler_dom.findProp)(node, "value");
|
|
693
|
+
if (value) context.onError((0, _vue_compiler_dom.createDOMCompilerError)(61, value.loc));
|
|
694
|
+
}
|
|
695
|
+
const processSelectChildren = (children) => {
|
|
696
|
+
children.forEach((child) => {
|
|
697
|
+
if (child.type === 1) processOption(child);
|
|
698
|
+
else if (child.type === 11) processSelectChildren(child.children);
|
|
699
|
+
else if (child.type === 9) child.branches.forEach((b) => processSelectChildren(b.children));
|
|
700
|
+
});
|
|
701
|
+
};
|
|
702
|
+
function processOption(plainNode) {
|
|
703
|
+
if (plainNode.tag === "option") {
|
|
704
|
+
if (plainNode.props.findIndex((p) => p.name === "selected") === -1) {
|
|
705
|
+
const value = findValueBinding(plainNode);
|
|
706
|
+
plainNode.ssrCodegenNode.elements.push((0, _vue_compiler_dom.createConditionalExpression)((0, _vue_compiler_dom.createCallExpression)(context.helper(SSR_INCLUDE_BOOLEAN_ATTR), [(0, _vue_compiler_dom.createConditionalExpression)((0, _vue_compiler_dom.createCallExpression)(`Array.isArray`, [model]), (0, _vue_compiler_dom.createCallExpression)(context.helper(SSR_LOOSE_CONTAIN), [model, value]), (0, _vue_compiler_dom.createCallExpression)(context.helper(SSR_LOOSE_EQUAL), [model, value]))]), (0, _vue_compiler_dom.createSimpleExpression)(" selected", true), (0, _vue_compiler_dom.createSimpleExpression)("", true), false));
|
|
707
|
+
}
|
|
708
|
+
} else if (plainNode.tag === "optgroup") processSelectChildren(plainNode.children);
|
|
709
|
+
}
|
|
710
|
+
if (node.tagType === 0) {
|
|
711
|
+
const res = { props: [] };
|
|
712
|
+
if (node.tag === "input") {
|
|
713
|
+
const defaultProps = [(0, _vue_compiler_dom.createObjectProperty)(`value`, model)];
|
|
714
|
+
const type = (0, _vue_compiler_dom.findProp)(node, "type");
|
|
715
|
+
if (type) {
|
|
716
|
+
const value = findValueBinding(node);
|
|
717
|
+
if (type.type === 7) res.ssrTagParts = [(0, _vue_compiler_dom.createCallExpression)(context.helper(SSR_RENDER_DYNAMIC_MODEL), [
|
|
718
|
+
type.exp,
|
|
719
|
+
model,
|
|
720
|
+
value
|
|
721
|
+
])];
|
|
722
|
+
else if (type.value) switch (type.value.content) {
|
|
723
|
+
case "radio":
|
|
724
|
+
res.props = [(0, _vue_compiler_dom.createObjectProperty)(`checked`, (0, _vue_compiler_dom.createCallExpression)(context.helper(SSR_LOOSE_EQUAL), [model, value]))];
|
|
725
|
+
break;
|
|
726
|
+
case "checkbox":
|
|
727
|
+
const trueValueBinding = (0, _vue_compiler_dom.findProp)(node, "true-value");
|
|
728
|
+
if (trueValueBinding) {
|
|
729
|
+
const trueValue = trueValueBinding.type === 6 ? JSON.stringify(trueValueBinding.value.content) : trueValueBinding.exp;
|
|
730
|
+
res.props = [(0, _vue_compiler_dom.createObjectProperty)(`checked`, (0, _vue_compiler_dom.createCallExpression)(context.helper(SSR_LOOSE_EQUAL), [model, trueValue]))];
|
|
731
|
+
} else res.props = [(0, _vue_compiler_dom.createObjectProperty)(`checked`, (0, _vue_compiler_dom.createConditionalExpression)((0, _vue_compiler_dom.createCallExpression)(`Array.isArray`, [model]), (0, _vue_compiler_dom.createCallExpression)(context.helper(SSR_LOOSE_CONTAIN), [model, value]), model))];
|
|
732
|
+
break;
|
|
733
|
+
case "file":
|
|
734
|
+
context.onError((0, _vue_compiler_dom.createDOMCompilerError)(60, dir.loc));
|
|
735
|
+
break;
|
|
736
|
+
default:
|
|
737
|
+
checkDuplicatedValue();
|
|
738
|
+
res.props = defaultProps;
|
|
739
|
+
break;
|
|
740
|
+
}
|
|
741
|
+
} else if ((0, _vue_compiler_dom.hasDynamicKeyVBind)(node)) {} else {
|
|
742
|
+
checkDuplicatedValue();
|
|
743
|
+
res.props = defaultProps;
|
|
744
|
+
}
|
|
745
|
+
} else if (node.tag === "textarea") {
|
|
746
|
+
checkDuplicatedValue();
|
|
747
|
+
node.children = [(0, _vue_compiler_dom.createInterpolation)(model, model.loc)];
|
|
748
|
+
} else if (node.tag === "select") processSelectChildren(node.children);
|
|
749
|
+
else context.onError((0, _vue_compiler_dom.createDOMCompilerError)(58, dir.loc));
|
|
750
|
+
return res;
|
|
751
|
+
} else return (0, _vue_compiler_dom.transformModel)(dir, node, context);
|
|
1234
752
|
};
|
|
1235
753
|
function findValueBinding(node) {
|
|
1236
|
-
|
|
1237
|
-
|
|
754
|
+
const valueBinding = (0, _vue_compiler_dom.findProp)(node, "value");
|
|
755
|
+
return valueBinding ? valueBinding.type === 7 ? valueBinding.exp : (0, _vue_compiler_dom.createSimpleExpression)(valueBinding.value.content, true) : (0, _vue_compiler_dom.createSimpleExpression)(`null`, false);
|
|
1238
756
|
}
|
|
1239
|
-
|
|
757
|
+
//#endregion
|
|
758
|
+
//#region packages/compiler-ssr/src/transforms/ssrVShow.ts
|
|
1240
759
|
const ssrTransformShow = (dir, node, context) => {
|
|
1241
|
-
|
|
1242
|
-
|
|
1243
|
-
compilerDom.createDOMCompilerError(62)
|
|
1244
|
-
);
|
|
1245
|
-
}
|
|
1246
|
-
return {
|
|
1247
|
-
props: [
|
|
1248
|
-
compilerDom.createObjectProperty(
|
|
1249
|
-
`style`,
|
|
1250
|
-
compilerDom.createConditionalExpression(
|
|
1251
|
-
dir.exp,
|
|
1252
|
-
compilerDom.createSimpleExpression(`null`, false),
|
|
1253
|
-
compilerDom.createObjectExpression([
|
|
1254
|
-
compilerDom.createObjectProperty(
|
|
1255
|
-
`display`,
|
|
1256
|
-
compilerDom.createSimpleExpression(`none`, true)
|
|
1257
|
-
)
|
|
1258
|
-
]),
|
|
1259
|
-
false
|
|
1260
|
-
)
|
|
1261
|
-
)
|
|
1262
|
-
]
|
|
1263
|
-
};
|
|
760
|
+
if (!dir.exp) context.onError((0, _vue_compiler_dom.createDOMCompilerError)(62));
|
|
761
|
+
return { props: [(0, _vue_compiler_dom.createObjectProperty)(`style`, (0, _vue_compiler_dom.createConditionalExpression)(dir.exp, (0, _vue_compiler_dom.createSimpleExpression)(`null`, false), (0, _vue_compiler_dom.createObjectExpression)([(0, _vue_compiler_dom.createObjectProperty)(`display`, (0, _vue_compiler_dom.createSimpleExpression)(`none`, true))]), false))] };
|
|
1264
762
|
};
|
|
1265
|
-
|
|
763
|
+
//#endregion
|
|
764
|
+
//#region packages/compiler-ssr/src/transforms/ssrInjectFallthroughAttrs.ts
|
|
1266
765
|
const ssrInjectFallthroughAttrs = (node, context) => {
|
|
1267
|
-
|
|
1268
|
-
|
|
1269
|
-
|
|
1270
|
-
|
|
1271
|
-
|
|
1272
|
-
|
|
1273
|
-
|
|
1274
|
-
|
|
1275
|
-
|
|
1276
|
-
|
|
1277
|
-
|
|
1278
|
-
|
|
1279
|
-
|
|
1280
|
-
if (!parent || parent.type !== 0) {
|
|
1281
|
-
return;
|
|
1282
|
-
}
|
|
1283
|
-
if (node.type === 10 && compilerDom.hasSingleChild(node)) {
|
|
1284
|
-
if (compilerDom.isSingleIfBlock(parent)) {
|
|
1285
|
-
injectFallthroughAttrs(node.children[0]);
|
|
1286
|
-
}
|
|
1287
|
-
} else if (compilerDom.hasSingleChild(parent)) {
|
|
1288
|
-
injectFallthroughAttrs(node);
|
|
1289
|
-
}
|
|
766
|
+
if (node.type === 0) context.identifiers._attrs = 1;
|
|
767
|
+
if (node.type === 1 && node.tagType === 1 && (node.tag === "transition" || node.tag === "Transition" || node.tag === "KeepAlive" || node.tag === "keep-alive")) {
|
|
768
|
+
const rootChildren = (0, _vue_compiler_dom.filterNonCommentChildren)(context.root);
|
|
769
|
+
if (rootChildren.length === 1 && rootChildren[0] === node) {
|
|
770
|
+
if ((0, _vue_compiler_dom.hasSingleChild)(node)) injectFallthroughAttrs(node.children[0]);
|
|
771
|
+
return;
|
|
772
|
+
}
|
|
773
|
+
}
|
|
774
|
+
const parent = context.parent;
|
|
775
|
+
if (!parent || parent.type !== 0) return;
|
|
776
|
+
if (node.type === 10 && (0, _vue_compiler_dom.hasSingleChild)(node)) {
|
|
777
|
+
if ((0, _vue_compiler_dom.isSingleIfBlock)(parent)) injectFallthroughAttrs(node.children[0]);
|
|
778
|
+
} else if ((0, _vue_compiler_dom.hasSingleChild)(parent)) injectFallthroughAttrs(node);
|
|
1290
779
|
};
|
|
1291
780
|
function injectFallthroughAttrs(node) {
|
|
1292
|
-
|
|
1293
|
-
|
|
1294
|
-
|
|
1295
|
-
|
|
1296
|
-
|
|
1297
|
-
|
|
1298
|
-
|
|
1299
|
-
|
|
1300
|
-
|
|
1301
|
-
|
|
1302
|
-
|
|
1303
|
-
|
|
781
|
+
if (node.type === 1 && (node.tagType === 0 || node.tagType === 1) && !(0, _vue_compiler_dom.findDir)(node, "for")) node.props.push({
|
|
782
|
+
type: 7,
|
|
783
|
+
name: "bind",
|
|
784
|
+
arg: void 0,
|
|
785
|
+
exp: (0, _vue_compiler_dom.createSimpleExpression)(`_attrs`, false),
|
|
786
|
+
modifiers: [],
|
|
787
|
+
loc: _vue_compiler_dom.locStub
|
|
788
|
+
});
|
|
789
|
+
}
|
|
790
|
+
//#endregion
|
|
791
|
+
//#region packages/compiler-ssr/src/transforms/ssrInjectCssVars.ts
|
|
1304
792
|
const ssrInjectCssVars = (node, context) => {
|
|
1305
|
-
|
|
1306
|
-
|
|
1307
|
-
|
|
1308
|
-
|
|
1309
|
-
|
|
1310
|
-
|
|
1311
|
-
const parent = context.parent;
|
|
1312
|
-
if (!parent || parent.type !== 0) {
|
|
1313
|
-
return;
|
|
1314
|
-
}
|
|
1315
|
-
if (node.type === 10) {
|
|
1316
|
-
for (const child of node.children) {
|
|
1317
|
-
injectCssVars(child);
|
|
1318
|
-
}
|
|
1319
|
-
} else {
|
|
1320
|
-
injectCssVars(node);
|
|
1321
|
-
}
|
|
793
|
+
if (!context.ssrCssVars) return;
|
|
794
|
+
if (node.type === 0) context.identifiers._cssVars = 1;
|
|
795
|
+
const parent = context.parent;
|
|
796
|
+
if (!parent || parent.type !== 0) return;
|
|
797
|
+
if (node.type === 10) for (const child of node.children) injectCssVars(child);
|
|
798
|
+
else injectCssVars(node);
|
|
1322
799
|
};
|
|
1323
800
|
function injectCssVars(node) {
|
|
1324
|
-
|
|
1325
|
-
|
|
1326
|
-
|
|
1327
|
-
|
|
1328
|
-
|
|
1329
|
-
|
|
1330
|
-
|
|
1331
|
-
|
|
1332
|
-
|
|
1333
|
-
|
|
1334
|
-
|
|
1335
|
-
|
|
1336
|
-
|
|
1337
|
-
arg: void 0,
|
|
1338
|
-
exp: compilerDom.createSimpleExpression(`_cssVars`, false),
|
|
1339
|
-
modifiers: [],
|
|
1340
|
-
loc: compilerDom.locStub
|
|
1341
|
-
});
|
|
1342
|
-
}
|
|
1343
|
-
}
|
|
1344
|
-
}
|
|
1345
|
-
|
|
801
|
+
if (node.type === 1 && (node.tagType === 0 || node.tagType === 1) && !(0, _vue_compiler_dom.findDir)(node, "for")) if (node.tag === "suspense" || node.tag === "Suspense") for (const child of node.children) if (child.type === 1 && child.tagType === 3) child.children.forEach(injectCssVars);
|
|
802
|
+
else injectCssVars(child);
|
|
803
|
+
else node.props.push({
|
|
804
|
+
type: 7,
|
|
805
|
+
name: "bind",
|
|
806
|
+
arg: void 0,
|
|
807
|
+
exp: (0, _vue_compiler_dom.createSimpleExpression)(`_cssVars`, false),
|
|
808
|
+
modifiers: [],
|
|
809
|
+
loc: _vue_compiler_dom.locStub
|
|
810
|
+
});
|
|
811
|
+
}
|
|
812
|
+
//#endregion
|
|
813
|
+
//#region packages/compiler-ssr/src/index.ts
|
|
1346
814
|
function compile(source, options = {}) {
|
|
1347
|
-
|
|
1348
|
-
|
|
1349
|
-
|
|
1350
|
-
|
|
1351
|
-
|
|
1352
|
-
|
|
1353
|
-
|
|
1354
|
-
|
|
1355
|
-
|
|
1356
|
-
|
|
1357
|
-
|
|
1358
|
-
|
|
1359
|
-
|
|
1360
|
-
|
|
1361
|
-
|
|
1362
|
-
|
|
1363
|
-
|
|
1364
|
-
|
|
1365
|
-
|
|
1366
|
-
|
|
1367
|
-
|
|
1368
|
-
|
|
1369
|
-
|
|
1370
|
-
|
|
1371
|
-
|
|
1372
|
-
|
|
1373
|
-
|
|
1374
|
-
|
|
1375
|
-
|
|
1376
|
-
|
|
1377
|
-
|
|
1378
|
-
|
|
1379
|
-
|
|
1380
|
-
|
|
1381
|
-
|
|
1382
|
-
|
|
1383
|
-
|
|
1384
|
-
|
|
1385
|
-
|
|
1386
|
-
|
|
1387
|
-
|
|
1388
|
-
|
|
1389
|
-
|
|
1390
|
-
|
|
1391
|
-
|
|
1392
|
-
...options.directiveTransforms || {}
|
|
1393
|
-
// user transforms
|
|
1394
|
-
}
|
|
1395
|
-
});
|
|
1396
|
-
ssrCodegenTransform(ast, options);
|
|
1397
|
-
return compilerDom.generate(ast, options);
|
|
1398
|
-
}
|
|
1399
|
-
|
|
815
|
+
options = {
|
|
816
|
+
...options,
|
|
817
|
+
..._vue_compiler_dom.parserOptions,
|
|
818
|
+
ssr: true,
|
|
819
|
+
inSSR: true,
|
|
820
|
+
scopeId: options.mode === "function" ? null : options.scopeId,
|
|
821
|
+
prefixIdentifiers: true,
|
|
822
|
+
cacheHandlers: false,
|
|
823
|
+
hoistStatic: false
|
|
824
|
+
};
|
|
825
|
+
const ast = typeof source === "string" ? (0, _vue_compiler_dom.baseParse)(source, options) : source;
|
|
826
|
+
rawOptionsMap.set(ast, options);
|
|
827
|
+
(0, _vue_compiler_dom.transform)(ast, {
|
|
828
|
+
...options,
|
|
829
|
+
hoistStatic: false,
|
|
830
|
+
nodeTransforms: [
|
|
831
|
+
_vue_compiler_dom.transformVBindShorthand,
|
|
832
|
+
ssrTransformIf,
|
|
833
|
+
ssrTransformFor,
|
|
834
|
+
_vue_compiler_dom.trackVForSlotScopes,
|
|
835
|
+
_vue_compiler_dom.transformExpression,
|
|
836
|
+
ssrTransformSlotOutlet,
|
|
837
|
+
ssrInjectFallthroughAttrs,
|
|
838
|
+
ssrInjectCssVars,
|
|
839
|
+
ssrTransformElement,
|
|
840
|
+
ssrTransformComponent,
|
|
841
|
+
_vue_compiler_dom.trackSlotScopes,
|
|
842
|
+
_vue_compiler_dom.transformStyle,
|
|
843
|
+
...options.nodeTransforms || []
|
|
844
|
+
],
|
|
845
|
+
directiveTransforms: {
|
|
846
|
+
bind: _vue_compiler_dom.transformBind,
|
|
847
|
+
on: _vue_compiler_dom.transformOn,
|
|
848
|
+
model: ssrTransformModel,
|
|
849
|
+
show: ssrTransformShow,
|
|
850
|
+
cloak: _vue_compiler_dom.noopDirectiveTransform,
|
|
851
|
+
once: _vue_compiler_dom.noopDirectiveTransform,
|
|
852
|
+
memo: _vue_compiler_dom.noopDirectiveTransform,
|
|
853
|
+
...options.directiveTransforms || {}
|
|
854
|
+
}
|
|
855
|
+
});
|
|
856
|
+
ssrCodegenTransform(ast, options);
|
|
857
|
+
return (0, _vue_compiler_dom.generate)(ast, options);
|
|
858
|
+
}
|
|
859
|
+
//#endregion
|
|
1400
860
|
exports.compile = compile;
|