@vue/compiler-ssr 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/compiler-ssr.cjs.js +761 -1288
- package/dist/compiler-ssr.d.ts +3 -2
- package/package.json +3 -3
package/dist/compiler-ssr.cjs.js
CHANGED
|
@@ -1,1400 +1,873 @@
|
|
|
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
|
-
'
|
|
2
|
+
* @vue/compiler-ssr 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
|
+
let _vue_compiler_dom = require("@vue/compiler-dom");
|
|
8
|
+
let _vue_shared = require("@vue/shared");
|
|
7
9
|
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
const
|
|
14
|
-
const
|
|
15
|
-
const
|
|
16
|
-
const
|
|
17
|
-
const
|
|
18
|
-
const
|
|
19
|
-
const
|
|
20
|
-
const
|
|
21
|
-
const
|
|
22
|
-
const
|
|
23
|
-
const
|
|
24
|
-
const
|
|
25
|
-
|
|
26
|
-
);
|
|
27
|
-
const
|
|
28
|
-
const SSR_LOOSE_CONTAIN = /* @__PURE__ */ Symbol(`ssrLooseContain`);
|
|
29
|
-
const SSR_RENDER_DYNAMIC_MODEL = /* @__PURE__ */ Symbol(
|
|
30
|
-
`ssrRenderDynamicModel`
|
|
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`);
|
|
10
|
+
//#region packages/compiler-ssr/src/runtimeHelpers.ts
|
|
11
|
+
const SSR_INTERPOLATE = Symbol(`ssrInterpolate`);
|
|
12
|
+
const SSR_RENDER_VNODE = Symbol(`ssrRenderVNode`);
|
|
13
|
+
const SSR_RENDER_COMPONENT = Symbol(`ssrRenderComponent`);
|
|
14
|
+
const SSR_RENDER_SLOT = Symbol(`ssrRenderSlot`);
|
|
15
|
+
const SSR_RENDER_SLOT_INNER = Symbol(`ssrRenderSlotInner`);
|
|
16
|
+
const SSR_RENDER_CLASS = Symbol(`ssrRenderClass`);
|
|
17
|
+
const SSR_RENDER_STYLE = Symbol(`ssrRenderStyle`);
|
|
18
|
+
const SSR_RENDER_ATTRS = Symbol(`ssrRenderAttrs`);
|
|
19
|
+
const SSR_RENDER_ATTR = Symbol(`ssrRenderAttr`);
|
|
20
|
+
const SSR_RENDER_DYNAMIC_ATTR = Symbol(`ssrRenderDynamicAttr`);
|
|
21
|
+
const SSR_RENDER_LIST = Symbol(`ssrRenderList`);
|
|
22
|
+
const SSR_INCLUDE_BOOLEAN_ATTR = Symbol(`ssrIncludeBooleanAttr`);
|
|
23
|
+
const SSR_LOOSE_EQUAL = Symbol(`ssrLooseEqual`);
|
|
24
|
+
const SSR_LOOSE_CONTAIN = Symbol(`ssrLooseContain`);
|
|
25
|
+
const SSR_RENDER_DYNAMIC_MODEL = Symbol(`ssrRenderDynamicModel`);
|
|
26
|
+
const SSR_GET_DYNAMIC_MODEL_PROPS = Symbol(`ssrGetDynamicModelProps`);
|
|
27
|
+
const SSR_RENDER_TELEPORT = Symbol(`ssrRenderTeleport`);
|
|
28
|
+
const SSR_RENDER_SUSPENSE = Symbol(`ssrRenderSuspense`);
|
|
29
|
+
const SSR_GET_DIRECTIVE_PROPS = Symbol(`ssrGetDirectiveProps`);
|
|
38
30
|
const ssrHelpers = {
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
31
|
+
[SSR_INTERPOLATE]: `ssrInterpolate`,
|
|
32
|
+
[SSR_RENDER_VNODE]: `ssrRenderVNode`,
|
|
33
|
+
[SSR_RENDER_COMPONENT]: `ssrRenderComponent`,
|
|
34
|
+
[SSR_RENDER_SLOT]: `ssrRenderSlot`,
|
|
35
|
+
[SSR_RENDER_SLOT_INNER]: `ssrRenderSlotInner`,
|
|
36
|
+
[SSR_RENDER_CLASS]: `ssrRenderClass`,
|
|
37
|
+
[SSR_RENDER_STYLE]: `ssrRenderStyle`,
|
|
38
|
+
[SSR_RENDER_ATTRS]: `ssrRenderAttrs`,
|
|
39
|
+
[SSR_RENDER_ATTR]: `ssrRenderAttr`,
|
|
40
|
+
[SSR_RENDER_DYNAMIC_ATTR]: `ssrRenderDynamicAttr`,
|
|
41
|
+
[SSR_RENDER_LIST]: `ssrRenderList`,
|
|
42
|
+
[SSR_INCLUDE_BOOLEAN_ATTR]: `ssrIncludeBooleanAttr`,
|
|
43
|
+
[SSR_LOOSE_EQUAL]: `ssrLooseEqual`,
|
|
44
|
+
[SSR_LOOSE_CONTAIN]: `ssrLooseContain`,
|
|
45
|
+
[SSR_RENDER_DYNAMIC_MODEL]: `ssrRenderDynamicModel`,
|
|
46
|
+
[SSR_GET_DYNAMIC_MODEL_PROPS]: `ssrGetDynamicModelProps`,
|
|
47
|
+
[SSR_RENDER_TELEPORT]: `ssrRenderTeleport`,
|
|
48
|
+
[SSR_RENDER_SUSPENSE]: `ssrRenderSuspense`,
|
|
49
|
+
[SSR_GET_DIRECTIVE_PROPS]: `ssrGetDirectiveProps`
|
|
58
50
|
};
|
|
59
|
-
|
|
51
|
+
(0, _vue_compiler_dom.registerRuntimeHelpers)(ssrHelpers);
|
|
60
52
|
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
);
|
|
53
|
+
//#endregion
|
|
54
|
+
//#region packages/compiler-ssr/src/transforms/ssrVIf.ts
|
|
55
|
+
const ssrTransformIf = (0, _vue_compiler_dom.createStructuralDirectiveTransform)(/^(?:if|else|else-if)$/, _vue_compiler_dom.processIf);
|
|
65
56
|
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
|
-
}
|
|
57
|
+
const [rootBranch] = node.branches;
|
|
58
|
+
const ifStatement = (0, _vue_compiler_dom.createIfStatement)(rootBranch.condition, processIfBranch(rootBranch, context, disableNestedFragments));
|
|
59
|
+
context.pushStatement(ifStatement);
|
|
60
|
+
let currentIf = ifStatement;
|
|
61
|
+
for (let i = 1; i < node.branches.length; i++) {
|
|
62
|
+
const branch = node.branches[i];
|
|
63
|
+
const branchBlockStatement = processIfBranch(branch, context, disableNestedFragments);
|
|
64
|
+
if (branch.condition) currentIf = currentIf.alternate = (0, _vue_compiler_dom.createIfStatement)(branch.condition, branchBlockStatement);
|
|
65
|
+
else currentIf.alternate = branchBlockStatement;
|
|
66
|
+
}
|
|
67
|
+
if (!currentIf.alternate && !disableComment) currentIf.alternate = (0, _vue_compiler_dom.createBlockStatement)([(0, _vue_compiler_dom.createCallExpression)(`_push`, ["`<!---->`"])]);
|
|
94
68
|
}
|
|
95
69
|
function processIfBranch(branch, context, disableNestedFragments = false) {
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
!(children.length === 1 && children[0].type === 11);
|
|
99
|
-
return processChildrenAsStatement(branch, context, needFragmentWrapper);
|
|
70
|
+
const { children } = branch;
|
|
71
|
+
return processChildrenAsStatement(branch, context, !disableNestedFragments && (children.length !== 1 || children[0].type !== 1) && !(children.length === 1 && children[0].type === 11));
|
|
100
72
|
}
|
|
101
73
|
|
|
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
|
-
context,
|
|
111
|
-
needFragmentWrapper
|
|
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
|
-
}
|
|
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(`<!--]-->`);
|
|
125
84
|
}
|
|
126
85
|
|
|
86
|
+
//#endregion
|
|
87
|
+
//#region packages/compiler-ssr/src/transforms/ssrTransformSlotOutlet.ts
|
|
127
88
|
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
|
-
}
|
|
89
|
+
if ((0, _vue_compiler_dom.isSlotOutlet)(node)) {
|
|
90
|
+
const { slotName, slotProps } = (0, _vue_compiler_dom.processSlotOutlet)(node, context);
|
|
91
|
+
const args = [
|
|
92
|
+
`_ctx.$slots`,
|
|
93
|
+
slotName,
|
|
94
|
+
slotProps || `{}`,
|
|
95
|
+
`null`,
|
|
96
|
+
`_push`,
|
|
97
|
+
`_parent`
|
|
98
|
+
];
|
|
99
|
+
if (context.scopeId && context.slotted !== false) args.push(`"${context.scopeId}-s"`);
|
|
100
|
+
let method = SSR_RENDER_SLOT;
|
|
101
|
+
let parent = context.parent;
|
|
102
|
+
if (parent) {
|
|
103
|
+
const children = parent.children;
|
|
104
|
+
if (parent.type === 10) parent = context.grandParent;
|
|
105
|
+
let componentType;
|
|
106
|
+
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) {
|
|
107
|
+
method = SSR_RENDER_SLOT_INNER;
|
|
108
|
+
if (!(context.scopeId && context.slotted !== false)) args.push("null");
|
|
109
|
+
args.push("true");
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
node.ssrCodegenNode = (0, _vue_compiler_dom.createCallExpression)(context.helper(method), args);
|
|
113
|
+
}
|
|
160
114
|
};
|
|
161
115
|
function ssrProcessSlotOutlet(node, context) {
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
116
|
+
const renderCall = node.ssrCodegenNode;
|
|
117
|
+
if (node.children.length) {
|
|
118
|
+
const fallbackRenderFn = (0, _vue_compiler_dom.createFunctionExpression)([]);
|
|
119
|
+
fallbackRenderFn.body = processChildrenAsStatement(node, context);
|
|
120
|
+
renderCall.arguments[3] = fallbackRenderFn;
|
|
121
|
+
}
|
|
122
|
+
if (context.withSlotScopeId) {
|
|
123
|
+
const slotScopeId = renderCall.arguments[6];
|
|
124
|
+
renderCall.arguments[6] = slotScopeId ? `${slotScopeId} + _scopeId` : `_scopeId`;
|
|
125
|
+
}
|
|
126
|
+
context.pushStatement(node.ssrCodegenNode);
|
|
173
127
|
}
|
|
174
128
|
|
|
129
|
+
//#endregion
|
|
130
|
+
//#region packages/compiler-ssr/src/errors.ts
|
|
175
131
|
function createSSRCompilerError(code, loc) {
|
|
176
|
-
|
|
132
|
+
return (0, _vue_compiler_dom.createCompilerError)(code, loc, SSRErrorMessages);
|
|
177
133
|
}
|
|
178
134
|
const SSRErrorMessages = {
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
135
|
+
[65]: `Unsafe attribute name for SSR.`,
|
|
136
|
+
[66]: `Missing the 'to' prop on teleport element.`,
|
|
137
|
+
[67]: `Invalid AST node during SSR transform.`
|
|
182
138
|
};
|
|
183
139
|
|
|
140
|
+
//#endregion
|
|
141
|
+
//#region packages/compiler-ssr/src/transforms/ssrTransformTeleport.ts
|
|
184
142
|
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
|
-
node,
|
|
209
|
-
"disabled",
|
|
210
|
-
false,
|
|
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
|
-
);
|
|
143
|
+
const targetProp = (0, _vue_compiler_dom.findProp)(node, "to");
|
|
144
|
+
if (!targetProp) {
|
|
145
|
+
context.onError(createSSRCompilerError(66, node.loc));
|
|
146
|
+
return;
|
|
147
|
+
}
|
|
148
|
+
let target;
|
|
149
|
+
if (targetProp.type === 6) target = targetProp.value && (0, _vue_compiler_dom.createSimpleExpression)(targetProp.value.content, true);
|
|
150
|
+
else target = targetProp.exp;
|
|
151
|
+
if (!target) {
|
|
152
|
+
context.onError(createSSRCompilerError(66, targetProp.loc));
|
|
153
|
+
return;
|
|
154
|
+
}
|
|
155
|
+
const disabledProp = (0, _vue_compiler_dom.findProp)(node, "disabled", false, true);
|
|
156
|
+
const disabled = disabledProp ? disabledProp.type === 6 ? `true` : disabledProp.exp || `false` : `false`;
|
|
157
|
+
const contentRenderFn = (0, _vue_compiler_dom.createFunctionExpression)([`_push`], void 0, true, false, node.loc);
|
|
158
|
+
contentRenderFn.body = processChildrenAsStatement(node, context);
|
|
159
|
+
context.pushStatement((0, _vue_compiler_dom.createCallExpression)(context.helper(SSR_RENDER_TELEPORT), [
|
|
160
|
+
`_push`,
|
|
161
|
+
contentRenderFn,
|
|
162
|
+
target,
|
|
163
|
+
disabled,
|
|
164
|
+
`_parent`
|
|
165
|
+
]));
|
|
235
166
|
}
|
|
236
167
|
|
|
168
|
+
//#endregion
|
|
169
|
+
//#region packages/compiler-ssr/src/transforms/ssrTransformSuspense.ts
|
|
237
170
|
const wipMap$3 = /* @__PURE__ */ new WeakMap();
|
|
238
171
|
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
|
-
};
|
|
172
|
+
return () => {
|
|
173
|
+
if (node.children.length) {
|
|
174
|
+
const wipEntry = {
|
|
175
|
+
slotsExp: null,
|
|
176
|
+
wipSlots: []
|
|
177
|
+
};
|
|
178
|
+
wipMap$3.set(node, wipEntry);
|
|
179
|
+
wipEntry.slotsExp = (0, _vue_compiler_dom.buildSlots)(node, context, (_props, _vForExp, children, loc) => {
|
|
180
|
+
const fn = (0, _vue_compiler_dom.createFunctionExpression)([], void 0, true, false, loc);
|
|
181
|
+
wipEntry.wipSlots.push({
|
|
182
|
+
fn,
|
|
183
|
+
children
|
|
184
|
+
});
|
|
185
|
+
return fn;
|
|
186
|
+
}).slots;
|
|
187
|
+
}
|
|
188
|
+
};
|
|
270
189
|
}
|
|
271
190
|
function ssrProcessSuspense(node, context) {
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
}
|
|
281
|
-
context.pushStatement(
|
|
282
|
-
compilerDom.createCallExpression(context.helper(SSR_RENDER_SUSPENSE), [
|
|
283
|
-
`_push`,
|
|
284
|
-
slotsExp
|
|
285
|
-
])
|
|
286
|
-
);
|
|
191
|
+
const wipEntry = wipMap$3.get(node);
|
|
192
|
+
if (!wipEntry) return;
|
|
193
|
+
const { slotsExp, wipSlots } = wipEntry;
|
|
194
|
+
for (let i = 0; i < wipSlots.length; i++) {
|
|
195
|
+
const slot = wipSlots[i];
|
|
196
|
+
slot.fn.body = processChildrenAsStatement(slot, context);
|
|
197
|
+
}
|
|
198
|
+
context.pushStatement((0, _vue_compiler_dom.createCallExpression)(context.helper(SSR_RENDER_SUSPENSE), [`_push`, slotsExp]));
|
|
287
199
|
}
|
|
288
200
|
|
|
201
|
+
//#endregion
|
|
202
|
+
//#region packages/compiler-ssr/src/transforms/ssrTransformElement.ts
|
|
289
203
|
const rawChildrenMap = /* @__PURE__ */ new WeakMap();
|
|
290
204
|
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
|
-
};
|
|
205
|
+
if (node.type !== 1 || node.tagType !== 0) return;
|
|
206
|
+
return function ssrPostTransformElement() {
|
|
207
|
+
const openTag = [`<${node.tag}`];
|
|
208
|
+
const needTagForRuntime = node.tag === "textarea" || node.tag.indexOf("-") > 0;
|
|
209
|
+
const hasDynamicVBind = (0, _vue_compiler_dom.hasDynamicKeyVBind)(node);
|
|
210
|
+
const hasCustomDir = node.props.some((p) => p.type === 7 && !(0, _vue_shared.isBuiltInDirective)(p.name));
|
|
211
|
+
const vShowPropIndex = node.props.findIndex((i) => i.type === 7 && i.name === "show");
|
|
212
|
+
if (vShowPropIndex !== -1) {
|
|
213
|
+
const vShowProp = node.props[vShowPropIndex];
|
|
214
|
+
node.props.splice(vShowPropIndex, 1);
|
|
215
|
+
node.props.push(vShowProp);
|
|
216
|
+
}
|
|
217
|
+
const needMergeProps = hasDynamicVBind || hasCustomDir;
|
|
218
|
+
if (needMergeProps) {
|
|
219
|
+
const { props, directives } = (0, _vue_compiler_dom.buildProps)(node, context, node.props, false, false, true);
|
|
220
|
+
if (props || directives.length) {
|
|
221
|
+
const mergedProps = buildSSRProps(props, directives, context);
|
|
222
|
+
const propsExp = (0, _vue_compiler_dom.createCallExpression)(context.helper(SSR_RENDER_ATTRS), [mergedProps]);
|
|
223
|
+
if (node.tag === "textarea") {
|
|
224
|
+
const existingText = node.children[0];
|
|
225
|
+
if (!hasContentOverrideDirective(node) && (!existingText || existingText.type !== 5)) {
|
|
226
|
+
const tempId = `_temp${context.temps++}`;
|
|
227
|
+
propsExp.arguments = [(0, _vue_compiler_dom.createAssignmentExpression)((0, _vue_compiler_dom.createSimpleExpression)(tempId, false), mergedProps)];
|
|
228
|
+
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)]));
|
|
229
|
+
}
|
|
230
|
+
} else if (node.tag === "input") {
|
|
231
|
+
const vModel = findVModel(node);
|
|
232
|
+
if (vModel) {
|
|
233
|
+
const tempExp = (0, _vue_compiler_dom.createSimpleExpression)(`_temp${context.temps++}`, false);
|
|
234
|
+
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])])])];
|
|
235
|
+
}
|
|
236
|
+
} else if (directives.length && !node.children.length) {
|
|
237
|
+
if (!hasContentOverrideDirective(node)) {
|
|
238
|
+
const tempId = `_temp${context.temps++}`;
|
|
239
|
+
propsExp.arguments = [(0, _vue_compiler_dom.createAssignmentExpression)((0, _vue_compiler_dom.createSimpleExpression)(tempId, false), mergedProps)];
|
|
240
|
+
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));
|
|
241
|
+
}
|
|
242
|
+
}
|
|
243
|
+
if (needTagForRuntime) propsExp.arguments.push(`"${node.tag}"`);
|
|
244
|
+
openTag.push(propsExp);
|
|
245
|
+
}
|
|
246
|
+
}
|
|
247
|
+
let dynamicClassBinding = void 0;
|
|
248
|
+
let staticClassBinding = void 0;
|
|
249
|
+
let dynamicStyleBinding = void 0;
|
|
250
|
+
for (let i = 0; i < node.props.length; i++) {
|
|
251
|
+
const prop = node.props[i];
|
|
252
|
+
if (node.tag === "input" && isTrueFalseValue(prop)) continue;
|
|
253
|
+
if (prop.type === 7) {
|
|
254
|
+
if (prop.name === "html" && prop.exp) rawChildrenMap.set(node, (0, _vue_compiler_dom.createCompoundExpression)([
|
|
255
|
+
`(`,
|
|
256
|
+
prop.exp,
|
|
257
|
+
`) ?? ''`
|
|
258
|
+
]));
|
|
259
|
+
else if (prop.name === "text" && prop.exp) node.children = [(0, _vue_compiler_dom.createInterpolation)(prop.exp, prop.loc)];
|
|
260
|
+
else if (prop.name === "slot") context.onError((0, _vue_compiler_dom.createCompilerError)(40, prop.loc));
|
|
261
|
+
else if (isTextareaWithValue(node, prop) && prop.exp) {
|
|
262
|
+
if (!needMergeProps) node.children = [(0, _vue_compiler_dom.createInterpolation)(prop.exp, prop.loc)];
|
|
263
|
+
} else if (!needMergeProps && prop.name !== "on") {
|
|
264
|
+
const directiveTransform = context.directiveTransforms[prop.name];
|
|
265
|
+
if (directiveTransform) {
|
|
266
|
+
const { props, ssrTagParts } = directiveTransform(prop, node, context);
|
|
267
|
+
if (ssrTagParts) openTag.push(...ssrTagParts);
|
|
268
|
+
for (let j = 0; j < props.length; j++) {
|
|
269
|
+
const { key, value } = props[j];
|
|
270
|
+
if ((0, _vue_compiler_dom.isStaticExp)(key)) {
|
|
271
|
+
let attrName = key.content;
|
|
272
|
+
if (attrName === "key" || attrName === "ref") continue;
|
|
273
|
+
if (attrName === "class") openTag.push(` class="`, dynamicClassBinding = (0, _vue_compiler_dom.createCallExpression)(context.helper(SSR_RENDER_CLASS), [value]), `"`);
|
|
274
|
+
else if (attrName === "style") if (dynamicStyleBinding) mergeCall(dynamicStyleBinding, value);
|
|
275
|
+
else openTag.push(` style="`, dynamicStyleBinding = (0, _vue_compiler_dom.createCallExpression)(context.helper(SSR_RENDER_STYLE), [value]), `"`);
|
|
276
|
+
else {
|
|
277
|
+
attrName = node.tag.indexOf("-") > 0 ? attrName : _vue_shared.propsToAttrMap[attrName] || attrName.toLowerCase();
|
|
278
|
+
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));
|
|
279
|
+
else if ((0, _vue_shared.isSSRSafeAttrName)(attrName)) openTag.push((0, _vue_compiler_dom.createCallExpression)(context.helper(SSR_RENDER_ATTR), [key, value]));
|
|
280
|
+
else context.onError(createSSRCompilerError(65, key.loc));
|
|
281
|
+
}
|
|
282
|
+
} else {
|
|
283
|
+
const args = [key, value];
|
|
284
|
+
if (needTagForRuntime) args.push(`"${node.tag}"`);
|
|
285
|
+
openTag.push((0, _vue_compiler_dom.createCallExpression)(context.helper(SSR_RENDER_DYNAMIC_ATTR), args));
|
|
286
|
+
}
|
|
287
|
+
}
|
|
288
|
+
}
|
|
289
|
+
}
|
|
290
|
+
} else {
|
|
291
|
+
const name = prop.name;
|
|
292
|
+
if (node.tag === "textarea" && name === "value" && prop.value) rawChildrenMap.set(node, (0, _vue_shared.escapeHtml)(prop.value.content));
|
|
293
|
+
else if (!needMergeProps) {
|
|
294
|
+
if (name === "key" || name === "ref") continue;
|
|
295
|
+
if (name === "class" && prop.value) staticClassBinding = JSON.stringify(prop.value.content);
|
|
296
|
+
openTag.push(` ${prop.name}` + (prop.value ? `="${(0, _vue_shared.escapeHtml)(prop.value.content)}"` : ``));
|
|
297
|
+
}
|
|
298
|
+
}
|
|
299
|
+
}
|
|
300
|
+
if (dynamicClassBinding && staticClassBinding) {
|
|
301
|
+
mergeCall(dynamicClassBinding, staticClassBinding);
|
|
302
|
+
removeStaticBinding(openTag, "class");
|
|
303
|
+
}
|
|
304
|
+
if (context.scopeId) openTag.push(` ${context.scopeId}`);
|
|
305
|
+
node.ssrCodegenNode = (0, _vue_compiler_dom.createTemplateLiteral)(openTag);
|
|
306
|
+
};
|
|
536
307
|
};
|
|
537
308
|
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];
|
|
309
|
+
let mergePropsArgs = [];
|
|
310
|
+
if (props) if (props.type === 14) mergePropsArgs = props.arguments;
|
|
311
|
+
else mergePropsArgs.push(props);
|
|
312
|
+
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]));
|
|
313
|
+
return mergePropsArgs.length > 1 ? (0, _vue_compiler_dom.createCallExpression)(context.helper(_vue_compiler_dom.MERGE_PROPS), mergePropsArgs) : mergePropsArgs[0];
|
|
557
314
|
}
|
|
558
315
|
function isTrueFalseValue(prop) {
|
|
559
|
-
|
|
560
|
-
|
|
561
|
-
} else {
|
|
562
|
-
return prop.name === "true-value" || prop.name === "false-value";
|
|
563
|
-
}
|
|
316
|
+
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");
|
|
317
|
+
else return prop.name === "true-value" || prop.name === "false-value";
|
|
564
318
|
}
|
|
565
319
|
function isTextareaWithValue(node, prop) {
|
|
566
|
-
|
|
320
|
+
return !!(node.tag === "textarea" && prop.name === "bind" && (0, _vue_compiler_dom.isStaticArgOf)(prop.arg, "value"));
|
|
567
321
|
}
|
|
568
322
|
function mergeCall(call, arg) {
|
|
569
|
-
|
|
570
|
-
|
|
571
|
-
|
|
572
|
-
} else {
|
|
573
|
-
call.arguments[0] = compilerDom.createArrayExpression([existing, arg]);
|
|
574
|
-
}
|
|
323
|
+
const existing = call.arguments[0];
|
|
324
|
+
if (existing.type === 17) existing.elements.push(arg);
|
|
325
|
+
else call.arguments[0] = (0, _vue_compiler_dom.createArrayExpression)([existing, arg]);
|
|
575
326
|
}
|
|
576
327
|
function removeStaticBinding(tag, binding) {
|
|
577
|
-
|
|
578
|
-
|
|
579
|
-
|
|
580
|
-
tag.splice(i, 1);
|
|
581
|
-
}
|
|
328
|
+
const regExp = new RegExp(`^ ${binding}=".+"$`);
|
|
329
|
+
const i = tag.findIndex((e) => typeof e === "string" && regExp.test(e));
|
|
330
|
+
if (i > -1) tag.splice(i, 1);
|
|
582
331
|
}
|
|
583
332
|
function findVModel(node) {
|
|
584
|
-
|
|
585
|
-
(p) => p.type === 7 && p.name === "model" && p.exp
|
|
586
|
-
);
|
|
333
|
+
return node.props.find((p) => p.type === 7 && p.name === "model" && p.exp);
|
|
587
334
|
}
|
|
588
335
|
function hasContentOverrideDirective(node) {
|
|
589
|
-
|
|
336
|
+
return !!(0, _vue_compiler_dom.findDir)(node, "text") || !!(0, _vue_compiler_dom.findDir)(node, "html");
|
|
590
337
|
}
|
|
591
338
|
function ssrProcessElement(node, context) {
|
|
592
|
-
|
|
593
|
-
|
|
594
|
-
|
|
595
|
-
|
|
596
|
-
|
|
597
|
-
|
|
598
|
-
|
|
599
|
-
|
|
600
|
-
|
|
601
|
-
const rawChildren = rawChildrenMap.get(node);
|
|
602
|
-
if (rawChildren) {
|
|
603
|
-
context.pushStringPart(rawChildren);
|
|
604
|
-
} else if (node.children.length) {
|
|
605
|
-
processChildren(node, context);
|
|
606
|
-
}
|
|
607
|
-
if (!isVoidTag(node.tag)) {
|
|
608
|
-
context.pushStringPart(`</${node.tag}>`);
|
|
609
|
-
}
|
|
339
|
+
const isVoidTag = context.options.isVoidTag || _vue_shared.NO;
|
|
340
|
+
const elementsToAdd = node.ssrCodegenNode.elements;
|
|
341
|
+
for (let j = 0; j < elementsToAdd.length; j++) context.pushStringPart(elementsToAdd[j]);
|
|
342
|
+
if (context.withSlotScopeId) context.pushStringPart((0, _vue_compiler_dom.createSimpleExpression)(`_scopeId`, false));
|
|
343
|
+
context.pushStringPart(`>`);
|
|
344
|
+
const rawChildren = rawChildrenMap.get(node);
|
|
345
|
+
if (rawChildren) context.pushStringPart(rawChildren);
|
|
346
|
+
else if (node.children.length) processChildren(node, context);
|
|
347
|
+
if (!isVoidTag(node.tag)) context.pushStringPart(`</${node.tag}>`);
|
|
610
348
|
}
|
|
611
349
|
|
|
350
|
+
//#endregion
|
|
351
|
+
//#region packages/compiler-ssr/src/transforms/ssrTransformTransitionGroup.ts
|
|
612
352
|
const wipMap$2 = /* @__PURE__ */ new WeakMap();
|
|
613
353
|
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
|
-
};
|
|
354
|
+
return () => {
|
|
355
|
+
const tag = (0, _vue_compiler_dom.findProp)(node, "tag");
|
|
356
|
+
if (tag) {
|
|
357
|
+
const { props, directives } = (0, _vue_compiler_dom.buildProps)(node, context, node.props.filter((p) => p !== tag), true, false, true);
|
|
358
|
+
let propsExp = null;
|
|
359
|
+
if (props || directives.length) propsExp = (0, _vue_compiler_dom.createCallExpression)(context.helper(SSR_RENDER_ATTRS), [buildSSRProps(props, directives, context)]);
|
|
360
|
+
wipMap$2.set(node, {
|
|
361
|
+
tag,
|
|
362
|
+
propsExp,
|
|
363
|
+
scopeId: context.scopeId || null
|
|
364
|
+
});
|
|
365
|
+
}
|
|
366
|
+
};
|
|
639
367
|
}
|
|
640
368
|
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
|
-
if (scopeId) {
|
|
682
|
-
context.pushStringPart(` ${scopeId}`);
|
|
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
|
-
}
|
|
369
|
+
const entry = wipMap$2.get(node);
|
|
370
|
+
if (entry) {
|
|
371
|
+
const { tag, propsExp, scopeId } = entry;
|
|
372
|
+
if (tag.type === 7) {
|
|
373
|
+
context.pushStringPart(`<`);
|
|
374
|
+
context.pushStringPart(tag.exp);
|
|
375
|
+
if (propsExp) context.pushStringPart(propsExp);
|
|
376
|
+
if (scopeId) context.pushStringPart(` ${scopeId}`);
|
|
377
|
+
context.pushStringPart(`>`);
|
|
378
|
+
processChildren(
|
|
379
|
+
node,
|
|
380
|
+
context,
|
|
381
|
+
false,
|
|
382
|
+
/**
|
|
383
|
+
* TransitionGroup has the special runtime behavior of flattening and
|
|
384
|
+
* concatenating all children into a single fragment (in order for them to
|
|
385
|
+
* be patched using the same key map) so we need to account for that here
|
|
386
|
+
* by disabling nested fragment wrappers from being generated.
|
|
387
|
+
*/
|
|
388
|
+
true,
|
|
389
|
+
/**
|
|
390
|
+
* TransitionGroup filters out comment children at runtime and thus
|
|
391
|
+
* doesn't expect comments to be present during hydration. We need to
|
|
392
|
+
* account for that by disabling the empty comment that is otherwise
|
|
393
|
+
* rendered for a falsy v-if that has no v-else specified. (#6715)
|
|
394
|
+
*/
|
|
395
|
+
true
|
|
396
|
+
);
|
|
397
|
+
context.pushStringPart(`</`);
|
|
398
|
+
context.pushStringPart(tag.exp);
|
|
399
|
+
context.pushStringPart(`>`);
|
|
400
|
+
} else {
|
|
401
|
+
context.pushStringPart(`<${tag.value.content}`);
|
|
402
|
+
if (propsExp) context.pushStringPart(propsExp);
|
|
403
|
+
if (scopeId) context.pushStringPart(` ${scopeId}`);
|
|
404
|
+
context.pushStringPart(`>`);
|
|
405
|
+
processChildren(node, context, false, true, true);
|
|
406
|
+
context.pushStringPart(`</${tag.value.content}>`);
|
|
407
|
+
}
|
|
408
|
+
} else processChildren(node, context, true, true, true);
|
|
691
409
|
}
|
|
692
410
|
|
|
411
|
+
//#endregion
|
|
412
|
+
//#region packages/compiler-ssr/src/transforms/ssrTransformTransition.ts
|
|
693
413
|
const wipMap$1 = /* @__PURE__ */ new WeakMap();
|
|
694
414
|
function ssrTransformTransition(node, context) {
|
|
695
|
-
|
|
696
|
-
|
|
697
|
-
|
|
698
|
-
|
|
415
|
+
return () => {
|
|
416
|
+
const appear = (0, _vue_compiler_dom.findProp)(node, "appear", false, true);
|
|
417
|
+
wipMap$1.set(node, !!appear);
|
|
418
|
+
};
|
|
699
419
|
}
|
|
700
420
|
function ssrProcessTransition(node, context) {
|
|
701
|
-
|
|
702
|
-
|
|
703
|
-
|
|
704
|
-
|
|
705
|
-
|
|
706
|
-
|
|
707
|
-
} else {
|
|
708
|
-
processChildren(node, context, false, true);
|
|
709
|
-
}
|
|
421
|
+
node.children = node.children.filter((c) => c.type !== 3);
|
|
422
|
+
if (wipMap$1.get(node)) {
|
|
423
|
+
context.pushStringPart(`<template>`);
|
|
424
|
+
processChildren(node, context, false, true);
|
|
425
|
+
context.pushStringPart(`</template>`);
|
|
426
|
+
} else processChildren(node, context, false, true);
|
|
710
427
|
}
|
|
711
428
|
|
|
429
|
+
//#endregion
|
|
430
|
+
//#region packages/compiler-ssr/src/transforms/ssrTransformComponent.ts
|
|
712
431
|
const wipMap = /* @__PURE__ */ new WeakMap();
|
|
713
|
-
const WIP_SLOT =
|
|
432
|
+
const WIP_SLOT = Symbol();
|
|
714
433
|
const componentTypeMap = /* @__PURE__ */ new WeakMap();
|
|
715
434
|
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
|
-
};
|
|
435
|
+
if (node.type !== 1 || node.tagType !== 1) return;
|
|
436
|
+
const component = (0, _vue_compiler_dom.resolveComponentType)(node, context, true);
|
|
437
|
+
const isDynamicComponent = (0, _vue_shared.isObject)(component) && component.callee === _vue_compiler_dom.RESOLVE_DYNAMIC_COMPONENT;
|
|
438
|
+
componentTypeMap.set(node, component);
|
|
439
|
+
if ((0, _vue_shared.isSymbol)(component)) {
|
|
440
|
+
if (component === _vue_compiler_dom.SUSPENSE) return ssrTransformSuspense(node, context);
|
|
441
|
+
else if (component === _vue_compiler_dom.TRANSITION_GROUP) return ssrTransformTransitionGroup(node, context);
|
|
442
|
+
else if (component === _vue_compiler_dom.TRANSITION) return ssrTransformTransition(node, context);
|
|
443
|
+
return;
|
|
444
|
+
}
|
|
445
|
+
const vnodeBranches = [];
|
|
446
|
+
const clonedNode = clone(node);
|
|
447
|
+
return function ssrPostTransformComponent() {
|
|
448
|
+
if (clonedNode.children.length) (0, _vue_compiler_dom.buildSlots)(clonedNode, context, (props, vFor, children) => {
|
|
449
|
+
vnodeBranches.push(createVNodeSlotBranch(props, vFor, children, context));
|
|
450
|
+
return (0, _vue_compiler_dom.createFunctionExpression)(void 0);
|
|
451
|
+
});
|
|
452
|
+
let propsExp = `null`;
|
|
453
|
+
if (node.props.length) {
|
|
454
|
+
const { props, directives } = (0, _vue_compiler_dom.buildProps)(node, context, void 0, true, isDynamicComponent);
|
|
455
|
+
if (props || directives.length) propsExp = buildSSRProps(props, directives, context);
|
|
456
|
+
}
|
|
457
|
+
const wipEntries = [];
|
|
458
|
+
wipMap.set(node, wipEntries);
|
|
459
|
+
const buildSSRSlotFn = (props, _vForExp, children, loc) => {
|
|
460
|
+
const fn = (0, _vue_compiler_dom.createFunctionExpression)([
|
|
461
|
+
props && (0, _vue_compiler_dom.stringifyExpression)(props) || `_`,
|
|
462
|
+
`_push`,
|
|
463
|
+
`_parent`,
|
|
464
|
+
`_scopeId`
|
|
465
|
+
], void 0, true, true, loc);
|
|
466
|
+
wipEntries.push({
|
|
467
|
+
type: WIP_SLOT,
|
|
468
|
+
fn,
|
|
469
|
+
children,
|
|
470
|
+
vnodeBranch: vnodeBranches[wipEntries.length]
|
|
471
|
+
});
|
|
472
|
+
return fn;
|
|
473
|
+
};
|
|
474
|
+
const slots = node.children.length ? (0, _vue_compiler_dom.buildSlots)(node, context, buildSSRSlotFn).slots : `null`;
|
|
475
|
+
if (typeof component !== "string") node.ssrCodegenNode = (0, _vue_compiler_dom.createCallExpression)(context.helper(SSR_RENDER_VNODE), [
|
|
476
|
+
`_push`,
|
|
477
|
+
(0, _vue_compiler_dom.createCallExpression)(context.helper(_vue_compiler_dom.CREATE_VNODE), [
|
|
478
|
+
component,
|
|
479
|
+
propsExp,
|
|
480
|
+
slots
|
|
481
|
+
]),
|
|
482
|
+
`_parent`
|
|
483
|
+
]);
|
|
484
|
+
else node.ssrCodegenNode = (0, _vue_compiler_dom.createCallExpression)(context.helper(SSR_RENDER_COMPONENT), [
|
|
485
|
+
component,
|
|
486
|
+
propsExp,
|
|
487
|
+
slots,
|
|
488
|
+
`_parent`
|
|
489
|
+
]);
|
|
490
|
+
};
|
|
805
491
|
};
|
|
806
492
|
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
|
-
}
|
|
493
|
+
const component = componentTypeMap.get(node);
|
|
494
|
+
if (!node.ssrCodegenNode) if (component === _vue_compiler_dom.TELEPORT) return ssrProcessTeleport(node, context);
|
|
495
|
+
else if (component === _vue_compiler_dom.SUSPENSE) return ssrProcessSuspense(node, context);
|
|
496
|
+
else if (component === _vue_compiler_dom.TRANSITION_GROUP) return ssrProcessTransitionGroup(node, context);
|
|
497
|
+
else {
|
|
498
|
+
if (parent.type === WIP_SLOT) context.pushStringPart(``);
|
|
499
|
+
if (component === _vue_compiler_dom.TRANSITION) return ssrProcessTransition(node, context);
|
|
500
|
+
processChildren(node, context);
|
|
501
|
+
}
|
|
502
|
+
else {
|
|
503
|
+
const wipEntries = wipMap.get(node) || [];
|
|
504
|
+
for (let i = 0; i < wipEntries.length; i++) {
|
|
505
|
+
const { fn, vnodeBranch } = wipEntries[i];
|
|
506
|
+
fn.body = (0, _vue_compiler_dom.createIfStatement)((0, _vue_compiler_dom.createSimpleExpression)(`_push`, false), processChildrenAsStatement(wipEntries[i], context, false, true), vnodeBranch);
|
|
507
|
+
}
|
|
508
|
+
if (context.withSlotScopeId) node.ssrCodegenNode.arguments.push(`_scopeId`);
|
|
509
|
+
if (typeof component === "string") context.pushStatement((0, _vue_compiler_dom.createCallExpression)(`_push`, [node.ssrCodegenNode]));
|
|
510
|
+
else context.pushStatement(node.ssrCodegenNode);
|
|
511
|
+
}
|
|
850
512
|
}
|
|
851
513
|
const rawOptionsMap = /* @__PURE__ */ new WeakMap();
|
|
852
|
-
const [baseNodeTransforms, baseDirectiveTransforms] =
|
|
853
|
-
const vnodeNodeTransforms = [...baseNodeTransforms, ...
|
|
514
|
+
const [baseNodeTransforms, baseDirectiveTransforms] = (0, _vue_compiler_dom.getBaseTransformPreset)(true);
|
|
515
|
+
const vnodeNodeTransforms = [...baseNodeTransforms, ..._vue_compiler_dom.DOMNodeTransforms];
|
|
854
516
|
const vnodeDirectiveTransforms = {
|
|
855
|
-
|
|
856
|
-
|
|
517
|
+
...baseDirectiveTransforms,
|
|
518
|
+
..._vue_compiler_dom.DOMDirectiveTransforms
|
|
857
519
|
};
|
|
858
520
|
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);
|
|
521
|
+
const rawOptions = rawOptionsMap.get(parentContext.root);
|
|
522
|
+
const subOptions = {
|
|
523
|
+
...rawOptions,
|
|
524
|
+
nodeTransforms: [...vnodeNodeTransforms, ...rawOptions.nodeTransforms || []],
|
|
525
|
+
directiveTransforms: {
|
|
526
|
+
...vnodeDirectiveTransforms,
|
|
527
|
+
...rawOptions.directiveTransforms || {}
|
|
528
|
+
}
|
|
529
|
+
};
|
|
530
|
+
const wrapperProps = [];
|
|
531
|
+
if (slotProps) wrapperProps.push({
|
|
532
|
+
type: 7,
|
|
533
|
+
name: "slot",
|
|
534
|
+
exp: slotProps,
|
|
535
|
+
arg: void 0,
|
|
536
|
+
modifiers: [],
|
|
537
|
+
loc: _vue_compiler_dom.locStub
|
|
538
|
+
});
|
|
539
|
+
if (vFor) wrapperProps.push((0, _vue_shared.extend)({}, vFor));
|
|
540
|
+
subTransform({
|
|
541
|
+
type: 1,
|
|
542
|
+
ns: 0,
|
|
543
|
+
tag: "template",
|
|
544
|
+
tagType: 3,
|
|
545
|
+
props: wrapperProps,
|
|
546
|
+
children,
|
|
547
|
+
loc: _vue_compiler_dom.locStub,
|
|
548
|
+
codegenNode: void 0
|
|
549
|
+
}, subOptions, parentContext);
|
|
550
|
+
return (0, _vue_compiler_dom.createReturnStatement)(children);
|
|
898
551
|
}
|
|
899
552
|
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
|
-
});
|
|
553
|
+
const childRoot = (0, _vue_compiler_dom.createRoot)([node]);
|
|
554
|
+
const childContext = (0, _vue_compiler_dom.createTransformContext)(childRoot, options);
|
|
555
|
+
childContext.ssr = false;
|
|
556
|
+
childContext.scopes = { ...parentContext.scopes };
|
|
557
|
+
childContext.identifiers = { ...parentContext.identifiers };
|
|
558
|
+
childContext.imports = parentContext.imports;
|
|
559
|
+
(0, _vue_compiler_dom.traverseNode)(childRoot, childContext);
|
|
560
|
+
[
|
|
561
|
+
"helpers",
|
|
562
|
+
"components",
|
|
563
|
+
"directives"
|
|
564
|
+
].forEach((key) => {
|
|
565
|
+
childContext[key].forEach((value, helperKey) => {
|
|
566
|
+
if (key === "helpers") {
|
|
567
|
+
const parentCount = parentContext.helpers.get(helperKey);
|
|
568
|
+
if (parentCount === void 0) parentContext.helpers.set(helperKey, value);
|
|
569
|
+
else parentContext.helpers.set(helperKey, value + parentCount);
|
|
570
|
+
} else parentContext[key].add(value);
|
|
571
|
+
});
|
|
572
|
+
});
|
|
921
573
|
}
|
|
922
574
|
function clone(v) {
|
|
923
|
-
|
|
924
|
-
|
|
925
|
-
|
|
926
|
-
|
|
927
|
-
|
|
928
|
-
|
|
929
|
-
}
|
|
930
|
-
return res;
|
|
931
|
-
} else {
|
|
932
|
-
return v;
|
|
933
|
-
}
|
|
575
|
+
if ((0, _vue_shared.isArray)(v)) return v.map(clone);
|
|
576
|
+
else if ((0, _vue_shared.isPlainObject)(v)) {
|
|
577
|
+
const res = {};
|
|
578
|
+
for (const key in v) res[key] = clone(v[key]);
|
|
579
|
+
return res;
|
|
580
|
+
} else return v;
|
|
934
581
|
}
|
|
935
582
|
|
|
583
|
+
//#endregion
|
|
584
|
+
//#region packages/compiler-ssr/src/ssrCodegenTransform.ts
|
|
936
585
|
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)));
|
|
586
|
+
const context = createSSRTransformContext(ast, options);
|
|
587
|
+
if (options.ssrCssVars) {
|
|
588
|
+
const cssContext = (0, _vue_compiler_dom.createTransformContext)((0, _vue_compiler_dom.createRoot)([]), options);
|
|
589
|
+
const varsExp = (0, _vue_compiler_dom.processExpression)((0, _vue_compiler_dom.createSimpleExpression)(options.ssrCssVars, false), cssContext);
|
|
590
|
+
context.body.push((0, _vue_compiler_dom.createCompoundExpression)([
|
|
591
|
+
`const _cssVars = { style: `,
|
|
592
|
+
varsExp,
|
|
593
|
+
`}`
|
|
594
|
+
]));
|
|
595
|
+
Array.from(cssContext.helpers.keys()).forEach((helper) => {
|
|
596
|
+
ast.helpers.add(helper);
|
|
597
|
+
});
|
|
598
|
+
}
|
|
599
|
+
processChildren(ast, context, ast.children.length > 1 && ast.children.some((c) => !(0, _vue_compiler_dom.isText)(c)));
|
|
600
|
+
ast.codegenNode = (0, _vue_compiler_dom.createBlockStatement)(context.body);
|
|
601
|
+
ast.ssrHelpers = Array.from(new Set([...Array.from(ast.helpers).filter((h) => h in ssrHelpers), ...context.helpers]));
|
|
602
|
+
ast.helpers = new Set(Array.from(ast.helpers).filter((h) => !(h in ssrHelpers)));
|
|
961
603
|
}
|
|
962
604
|
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
|
-
};
|
|
605
|
+
const body = [];
|
|
606
|
+
let currentString = null;
|
|
607
|
+
return {
|
|
608
|
+
root,
|
|
609
|
+
options,
|
|
610
|
+
body,
|
|
611
|
+
helpers,
|
|
612
|
+
withSlotScopeId,
|
|
613
|
+
onError: options.onError || ((e) => {
|
|
614
|
+
throw e;
|
|
615
|
+
}),
|
|
616
|
+
helper(name) {
|
|
617
|
+
helpers.add(name);
|
|
618
|
+
return name;
|
|
619
|
+
},
|
|
620
|
+
pushStringPart(part) {
|
|
621
|
+
if (!currentString) {
|
|
622
|
+
const currentCall = (0, _vue_compiler_dom.createCallExpression)(`_push`);
|
|
623
|
+
body.push(currentCall);
|
|
624
|
+
currentString = (0, _vue_compiler_dom.createTemplateLiteral)([]);
|
|
625
|
+
currentCall.arguments.push(currentString);
|
|
626
|
+
}
|
|
627
|
+
const bufferedElements = currentString.elements;
|
|
628
|
+
const lastItem = bufferedElements[bufferedElements.length - 1];
|
|
629
|
+
if ((0, _vue_shared.isString)(part) && (0, _vue_shared.isString)(lastItem)) bufferedElements[bufferedElements.length - 1] += part;
|
|
630
|
+
else bufferedElements.push(part);
|
|
631
|
+
},
|
|
632
|
+
pushStatement(statement) {
|
|
633
|
+
currentString = null;
|
|
634
|
+
body.push(statement);
|
|
635
|
+
}
|
|
636
|
+
};
|
|
998
637
|
}
|
|
999
638
|
function createChildContext(parent, withSlotScopeId = parent.withSlotScopeId) {
|
|
1000
|
-
|
|
1001
|
-
parent.root,
|
|
1002
|
-
parent.options,
|
|
1003
|
-
parent.helpers,
|
|
1004
|
-
withSlotScopeId
|
|
1005
|
-
);
|
|
639
|
+
return createSSRTransformContext(parent.root, parent.options, parent.helpers, withSlotScopeId);
|
|
1006
640
|
}
|
|
1007
641
|
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
|
-
}
|
|
642
|
+
if (asFragment) context.pushStringPart(`<!--[-->`);
|
|
643
|
+
const { children } = parent;
|
|
644
|
+
for (let i = 0; i < children.length; i++) {
|
|
645
|
+
const child = children[i];
|
|
646
|
+
switch (child.type) {
|
|
647
|
+
case 1:
|
|
648
|
+
switch (child.tagType) {
|
|
649
|
+
case 0:
|
|
650
|
+
ssrProcessElement(child, context);
|
|
651
|
+
break;
|
|
652
|
+
case 1:
|
|
653
|
+
ssrProcessComponent(child, context, parent);
|
|
654
|
+
break;
|
|
655
|
+
case 2:
|
|
656
|
+
ssrProcessSlotOutlet(child, context);
|
|
657
|
+
break;
|
|
658
|
+
case 3: break;
|
|
659
|
+
default:
|
|
660
|
+
context.onError(createSSRCompilerError(67, child.loc));
|
|
661
|
+
return child;
|
|
662
|
+
}
|
|
663
|
+
break;
|
|
664
|
+
case 2:
|
|
665
|
+
context.pushStringPart((0, _vue_shared.escapeHtml)(child.content));
|
|
666
|
+
break;
|
|
667
|
+
case 3:
|
|
668
|
+
if (!disableComment) context.pushStringPart(`<!--${child.content}-->`);
|
|
669
|
+
break;
|
|
670
|
+
case 5:
|
|
671
|
+
context.pushStringPart((0, _vue_compiler_dom.createCallExpression)(context.helper(SSR_INTERPOLATE), [child.content]));
|
|
672
|
+
break;
|
|
673
|
+
case 9:
|
|
674
|
+
ssrProcessIf(child, context, disableNestedFragments, disableComment);
|
|
675
|
+
break;
|
|
676
|
+
case 11:
|
|
677
|
+
ssrProcessFor(child, context, disableNestedFragments);
|
|
678
|
+
break;
|
|
679
|
+
case 10: break;
|
|
680
|
+
case 12:
|
|
681
|
+
case 8: break;
|
|
682
|
+
default:
|
|
683
|
+
context.onError(createSSRCompilerError(67, child.loc));
|
|
684
|
+
return child;
|
|
685
|
+
}
|
|
686
|
+
}
|
|
687
|
+
if (asFragment) context.pushStringPart(`<!--]-->`);
|
|
1079
688
|
}
|
|
1080
689
|
function processChildrenAsStatement(parent, parentContext, asFragment = false, withSlotScopeId = parentContext.withSlotScopeId) {
|
|
1081
|
-
|
|
1082
|
-
|
|
1083
|
-
|
|
690
|
+
const childContext = createChildContext(parentContext, withSlotScopeId);
|
|
691
|
+
processChildren(parent, childContext, asFragment);
|
|
692
|
+
return (0, _vue_compiler_dom.createBlockStatement)(childContext.body);
|
|
1084
693
|
}
|
|
1085
694
|
|
|
695
|
+
//#endregion
|
|
696
|
+
//#region packages/compiler-ssr/src/transforms/ssrVModel.ts
|
|
1086
697
|
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
|
-
}
|
|
698
|
+
const model = dir.exp;
|
|
699
|
+
function checkDuplicatedValue() {
|
|
700
|
+
const value = (0, _vue_compiler_dom.findProp)(node, "value");
|
|
701
|
+
if (value) context.onError((0, _vue_compiler_dom.createDOMCompilerError)(61, value.loc));
|
|
702
|
+
}
|
|
703
|
+
const processSelectChildren = (children) => {
|
|
704
|
+
children.forEach((child) => {
|
|
705
|
+
if (child.type === 1) processOption(child);
|
|
706
|
+
else if (child.type === 11) processSelectChildren(child.children);
|
|
707
|
+
else if (child.type === 9) child.branches.forEach((b) => processSelectChildren(b.children));
|
|
708
|
+
});
|
|
709
|
+
};
|
|
710
|
+
function processOption(plainNode) {
|
|
711
|
+
if (plainNode.tag === "option") {
|
|
712
|
+
if (plainNode.props.findIndex((p) => p.name === "selected") === -1) {
|
|
713
|
+
const value = findValueBinding(plainNode);
|
|
714
|
+
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));
|
|
715
|
+
}
|
|
716
|
+
} else if (plainNode.tag === "optgroup") processSelectChildren(plainNode.children);
|
|
717
|
+
}
|
|
718
|
+
if (node.tagType === 0) {
|
|
719
|
+
const res = { props: [] };
|
|
720
|
+
if (node.tag === "input") {
|
|
721
|
+
const defaultProps = [(0, _vue_compiler_dom.createObjectProperty)(`value`, model)];
|
|
722
|
+
const type = (0, _vue_compiler_dom.findProp)(node, "type");
|
|
723
|
+
if (type) {
|
|
724
|
+
const value = findValueBinding(node);
|
|
725
|
+
if (type.type === 7) res.ssrTagParts = [(0, _vue_compiler_dom.createCallExpression)(context.helper(SSR_RENDER_DYNAMIC_MODEL), [
|
|
726
|
+
type.exp,
|
|
727
|
+
model,
|
|
728
|
+
value
|
|
729
|
+
])];
|
|
730
|
+
else if (type.value) switch (type.value.content) {
|
|
731
|
+
case "radio":
|
|
732
|
+
res.props = [(0, _vue_compiler_dom.createObjectProperty)(`checked`, (0, _vue_compiler_dom.createCallExpression)(context.helper(SSR_LOOSE_EQUAL), [model, value]))];
|
|
733
|
+
break;
|
|
734
|
+
case "checkbox":
|
|
735
|
+
const trueValueBinding = (0, _vue_compiler_dom.findProp)(node, "true-value");
|
|
736
|
+
if (trueValueBinding) {
|
|
737
|
+
const trueValue = trueValueBinding.type === 6 ? JSON.stringify(trueValueBinding.value.content) : trueValueBinding.exp;
|
|
738
|
+
res.props = [(0, _vue_compiler_dom.createObjectProperty)(`checked`, (0, _vue_compiler_dom.createCallExpression)(context.helper(SSR_LOOSE_EQUAL), [model, trueValue]))];
|
|
739
|
+
} 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))];
|
|
740
|
+
break;
|
|
741
|
+
case "file":
|
|
742
|
+
context.onError((0, _vue_compiler_dom.createDOMCompilerError)(60, dir.loc));
|
|
743
|
+
break;
|
|
744
|
+
default:
|
|
745
|
+
checkDuplicatedValue();
|
|
746
|
+
res.props = defaultProps;
|
|
747
|
+
break;
|
|
748
|
+
}
|
|
749
|
+
} else if ((0, _vue_compiler_dom.hasDynamicKeyVBind)(node)) {} else {
|
|
750
|
+
checkDuplicatedValue();
|
|
751
|
+
res.props = defaultProps;
|
|
752
|
+
}
|
|
753
|
+
} else if (node.tag === "textarea") {
|
|
754
|
+
checkDuplicatedValue();
|
|
755
|
+
node.children = [(0, _vue_compiler_dom.createInterpolation)(model, model.loc)];
|
|
756
|
+
} else if (node.tag === "select") processSelectChildren(node.children);
|
|
757
|
+
else context.onError((0, _vue_compiler_dom.createDOMCompilerError)(58, dir.loc));
|
|
758
|
+
return res;
|
|
759
|
+
} else return (0, _vue_compiler_dom.transformModel)(dir, node, context);
|
|
1234
760
|
};
|
|
1235
761
|
function findValueBinding(node) {
|
|
1236
|
-
|
|
1237
|
-
|
|
762
|
+
const valueBinding = (0, _vue_compiler_dom.findProp)(node, "value");
|
|
763
|
+
return valueBinding ? valueBinding.type === 7 ? valueBinding.exp : (0, _vue_compiler_dom.createSimpleExpression)(valueBinding.value.content, true) : (0, _vue_compiler_dom.createSimpleExpression)(`null`, false);
|
|
1238
764
|
}
|
|
1239
765
|
|
|
766
|
+
//#endregion
|
|
767
|
+
//#region packages/compiler-ssr/src/transforms/ssrVShow.ts
|
|
1240
768
|
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
|
-
};
|
|
769
|
+
if (!dir.exp) context.onError((0, _vue_compiler_dom.createDOMCompilerError)(62));
|
|
770
|
+
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
771
|
};
|
|
1265
772
|
|
|
773
|
+
//#endregion
|
|
774
|
+
//#region packages/compiler-ssr/src/transforms/ssrInjectFallthroughAttrs.ts
|
|
1266
775
|
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
|
-
}
|
|
776
|
+
if (node.type === 0) context.identifiers._attrs = 1;
|
|
777
|
+
if (node.type === 1 && node.tagType === 1 && (node.tag === "transition" || node.tag === "Transition" || node.tag === "KeepAlive" || node.tag === "keep-alive")) {
|
|
778
|
+
const rootChildren = (0, _vue_compiler_dom.filterNonCommentChildren)(context.root);
|
|
779
|
+
if (rootChildren.length === 1 && rootChildren[0] === node) {
|
|
780
|
+
if ((0, _vue_compiler_dom.hasSingleChild)(node)) injectFallthroughAttrs(node.children[0]);
|
|
781
|
+
return;
|
|
782
|
+
}
|
|
783
|
+
}
|
|
784
|
+
const parent = context.parent;
|
|
785
|
+
if (!parent || parent.type !== 0) return;
|
|
786
|
+
if (node.type === 10 && (0, _vue_compiler_dom.hasSingleChild)(node)) {
|
|
787
|
+
if ((0, _vue_compiler_dom.isSingleIfBlock)(parent)) injectFallthroughAttrs(node.children[0]);
|
|
788
|
+
} else if ((0, _vue_compiler_dom.hasSingleChild)(parent)) injectFallthroughAttrs(node);
|
|
1290
789
|
};
|
|
1291
790
|
function injectFallthroughAttrs(node) {
|
|
1292
|
-
|
|
1293
|
-
|
|
1294
|
-
|
|
1295
|
-
|
|
1296
|
-
|
|
1297
|
-
|
|
1298
|
-
|
|
1299
|
-
|
|
1300
|
-
});
|
|
1301
|
-
}
|
|
791
|
+
if (node.type === 1 && (node.tagType === 0 || node.tagType === 1) && !(0, _vue_compiler_dom.findDir)(node, "for")) node.props.push({
|
|
792
|
+
type: 7,
|
|
793
|
+
name: "bind",
|
|
794
|
+
arg: void 0,
|
|
795
|
+
exp: (0, _vue_compiler_dom.createSimpleExpression)(`_attrs`, false),
|
|
796
|
+
modifiers: [],
|
|
797
|
+
loc: _vue_compiler_dom.locStub
|
|
798
|
+
});
|
|
1302
799
|
}
|
|
1303
800
|
|
|
801
|
+
//#endregion
|
|
802
|
+
//#region packages/compiler-ssr/src/transforms/ssrInjectCssVars.ts
|
|
1304
803
|
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
|
-
}
|
|
804
|
+
if (!context.ssrCssVars) return;
|
|
805
|
+
if (node.type === 0) context.identifiers._cssVars = 1;
|
|
806
|
+
const parent = context.parent;
|
|
807
|
+
if (!parent || parent.type !== 0) return;
|
|
808
|
+
if (node.type === 10) for (const child of node.children) injectCssVars(child);
|
|
809
|
+
else injectCssVars(node);
|
|
1322
810
|
};
|
|
1323
811
|
function injectCssVars(node) {
|
|
1324
|
-
|
|
1325
|
-
|
|
1326
|
-
|
|
1327
|
-
|
|
1328
|
-
|
|
1329
|
-
|
|
1330
|
-
|
|
1331
|
-
|
|
1332
|
-
|
|
1333
|
-
|
|
1334
|
-
node.props.push({
|
|
1335
|
-
type: 7,
|
|
1336
|
-
name: "bind",
|
|
1337
|
-
arg: void 0,
|
|
1338
|
-
exp: compilerDom.createSimpleExpression(`_cssVars`, false),
|
|
1339
|
-
modifiers: [],
|
|
1340
|
-
loc: compilerDom.locStub
|
|
1341
|
-
});
|
|
1342
|
-
}
|
|
1343
|
-
}
|
|
812
|
+
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);
|
|
813
|
+
else injectCssVars(child);
|
|
814
|
+
else node.props.push({
|
|
815
|
+
type: 7,
|
|
816
|
+
name: "bind",
|
|
817
|
+
arg: void 0,
|
|
818
|
+
exp: (0, _vue_compiler_dom.createSimpleExpression)(`_cssVars`, false),
|
|
819
|
+
modifiers: [],
|
|
820
|
+
loc: _vue_compiler_dom.locStub
|
|
821
|
+
});
|
|
1344
822
|
}
|
|
1345
823
|
|
|
824
|
+
//#endregion
|
|
825
|
+
//#region packages/compiler-ssr/src/index.ts
|
|
1346
826
|
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
|
-
once: compilerDom.noopDirectiveTransform,
|
|
1391
|
-
memo: compilerDom.noopDirectiveTransform,
|
|
1392
|
-
...options.directiveTransforms || {}
|
|
1393
|
-
// user transforms
|
|
1394
|
-
}
|
|
1395
|
-
});
|
|
1396
|
-
ssrCodegenTransform(ast, options);
|
|
1397
|
-
return compilerDom.generate(ast, options);
|
|
827
|
+
options = {
|
|
828
|
+
...options,
|
|
829
|
+
..._vue_compiler_dom.parserOptions,
|
|
830
|
+
ssr: true,
|
|
831
|
+
inSSR: true,
|
|
832
|
+
scopeId: options.mode === "function" ? null : options.scopeId,
|
|
833
|
+
prefixIdentifiers: true,
|
|
834
|
+
cacheHandlers: false,
|
|
835
|
+
hoistStatic: false
|
|
836
|
+
};
|
|
837
|
+
const ast = typeof source === "string" ? (0, _vue_compiler_dom.baseParse)(source, options) : source;
|
|
838
|
+
rawOptionsMap.set(ast, options);
|
|
839
|
+
(0, _vue_compiler_dom.transform)(ast, {
|
|
840
|
+
...options,
|
|
841
|
+
hoistStatic: false,
|
|
842
|
+
nodeTransforms: [
|
|
843
|
+
_vue_compiler_dom.transformVBindShorthand,
|
|
844
|
+
ssrTransformIf,
|
|
845
|
+
ssrTransformFor,
|
|
846
|
+
_vue_compiler_dom.trackVForSlotScopes,
|
|
847
|
+
_vue_compiler_dom.transformExpression,
|
|
848
|
+
ssrTransformSlotOutlet,
|
|
849
|
+
ssrInjectFallthroughAttrs,
|
|
850
|
+
ssrInjectCssVars,
|
|
851
|
+
ssrTransformElement,
|
|
852
|
+
ssrTransformComponent,
|
|
853
|
+
_vue_compiler_dom.trackSlotScopes,
|
|
854
|
+
_vue_compiler_dom.transformStyle,
|
|
855
|
+
...options.nodeTransforms || []
|
|
856
|
+
],
|
|
857
|
+
directiveTransforms: {
|
|
858
|
+
bind: _vue_compiler_dom.transformBind,
|
|
859
|
+
on: _vue_compiler_dom.transformOn,
|
|
860
|
+
model: ssrTransformModel,
|
|
861
|
+
show: ssrTransformShow,
|
|
862
|
+
cloak: _vue_compiler_dom.noopDirectiveTransform,
|
|
863
|
+
once: _vue_compiler_dom.noopDirectiveTransform,
|
|
864
|
+
memo: _vue_compiler_dom.noopDirectiveTransform,
|
|
865
|
+
...options.directiveTransforms || {}
|
|
866
|
+
}
|
|
867
|
+
});
|
|
868
|
+
ssrCodegenTransform(ast, options);
|
|
869
|
+
return (0, _vue_compiler_dom.generate)(ast, options);
|
|
1398
870
|
}
|
|
1399
871
|
|
|
1400
|
-
|
|
872
|
+
//#endregion
|
|
873
|
+
exports.compile = compile;
|