yansu 0.0.0-beta.1
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/README.md +1 -0
- package/bin.mjs +18 -0
- package/dist/cli.d.mts +2 -0
- package/dist/cli.mjs +68 -0
- package/dist/dirs.d.mts +4 -0
- package/dist/dirs.mjs +6 -0
- package/dist/index.d.mts +78 -0
- package/dist/index.mjs +121 -0
- package/dist/nitro.json +15 -0
- package/dist/public/_nuxt/BHIHUtPz.js +4 -0
- package/dist/public/_nuxt/CCgOhniq.js +1 -0
- package/dist/public/_nuxt/CR6vfq1R.js +1 -0
- package/dist/public/_nuxt/DmxzK6E8.js +1 -0
- package/dist/public/_nuxt/builds/latest.json +1 -0
- package/dist/public/_nuxt/builds/meta/e9079134-f314-434b-b3a7-092c4a1e187d.json +1 -0
- package/dist/public/_nuxt/entry.DJ3VOi_0.css +1 -0
- package/dist/public/_nuxt/error-404.lC6KBLNm.css +1 -0
- package/dist/public/_nuxt/error-500.NtBcR2wE.css +1 -0
- package/dist/server/chunks/_/error-500.mjs +9 -0
- package/dist/server/chunks/build/_plugin-vue_export-helper-DjsbPc54.mjs +29 -0
- package/dist/server/chunks/build/client.precomputed.mjs +3 -0
- package/dist/server/chunks/build/error-404-Du0ot2hm.mjs +369 -0
- package/dist/server/chunks/build/error-500-Y3RUV6n2.mjs +73 -0
- package/dist/server/chunks/build/server.mjs +727 -0
- package/dist/server/chunks/nitro/nitro.mjs +5176 -0
- package/dist/server/chunks/routes/api/metadata.json.mjs +147 -0
- package/dist/server/chunks/routes/api/platform.json.mjs +20 -0
- package/dist/server/chunks/routes/renderer.mjs +408 -0
- package/dist/server/chunks/virtual/_virtual_spa-template.mjs +3 -0
- package/dist/server/index.mjs +9 -0
- package/dist/server/node_modules/.nitro/@vue/shared@3.5.25/dist/shared.cjs.prod.js +604 -0
- package/dist/server/node_modules/.nitro/@vue/shared@3.5.25/package.json +47 -0
- package/dist/server/node_modules/.nitro/@vue/shared@3.5.26/dist/shared.cjs.prod.js +604 -0
- package/dist/server/node_modules/.nitro/@vue/shared@3.5.26/package.json +47 -0
- package/dist/server/node_modules/@babel/parser/lib/index.js +14662 -0
- package/dist/server/node_modules/@babel/parser/package.json +50 -0
- package/dist/server/node_modules/@vue/compiler-core/dist/compiler-core.cjs.prod.js +6763 -0
- package/dist/server/node_modules/@vue/compiler-core/package.json +58 -0
- package/dist/server/node_modules/@vue/compiler-dom/dist/compiler-dom.cjs.prod.js +689 -0
- package/dist/server/node_modules/@vue/compiler-dom/package.json +57 -0
- package/dist/server/node_modules/@vue/compiler-ssr/dist/compiler-ssr.cjs.js +1413 -0
- package/dist/server/node_modules/@vue/compiler-ssr/package.json +34 -0
- package/dist/server/node_modules/@vue/reactivity/dist/reactivity.cjs.prod.js +1853 -0
- package/dist/server/node_modules/@vue/reactivity/package.json +55 -0
- package/dist/server/node_modules/@vue/runtime-core/dist/runtime-core.cjs.prod.js +6770 -0
- package/dist/server/node_modules/@vue/runtime-core/package.json +52 -0
- package/dist/server/node_modules/@vue/runtime-dom/dist/runtime-dom.cjs.prod.js +1732 -0
- package/dist/server/node_modules/@vue/runtime-dom/package.json +60 -0
- package/dist/server/node_modules/@vue/server-renderer/dist/server-renderer.cjs.prod.js +879 -0
- package/dist/server/node_modules/@vue/server-renderer/package.json +55 -0
- package/dist/server/node_modules/ansis/index.cjs +1 -0
- package/dist/server/node_modules/ansis/index.mjs +1 -0
- package/dist/server/node_modules/ansis/package.json +25 -0
- package/dist/server/node_modules/birpc/dist/index.mjs +173 -0
- package/dist/server/node_modules/birpc/package.json +56 -0
- package/dist/server/node_modules/consola/dist/chunks/prompt.mjs +280 -0
- package/dist/server/node_modules/consola/dist/core.mjs +512 -0
- package/dist/server/node_modules/consola/dist/index.mjs +651 -0
- package/dist/server/node_modules/consola/dist/shared/consola.DRwqZj3T.mjs +72 -0
- package/dist/server/node_modules/consola/dist/shared/consola.DXBYu-KD.mjs +288 -0
- package/dist/server/node_modules/consola/package.json +136 -0
- package/dist/server/node_modules/devalue/index.js +4 -0
- package/dist/server/node_modules/devalue/package.json +37 -0
- package/dist/server/node_modules/devalue/src/base64.js +110 -0
- package/dist/server/node_modules/devalue/src/constants.js +6 -0
- package/dist/server/node_modules/devalue/src/parse.js +205 -0
- package/dist/server/node_modules/devalue/src/stringify.js +265 -0
- package/dist/server/node_modules/devalue/src/uneval.js +407 -0
- package/dist/server/node_modules/devalue/src/utils.js +118 -0
- package/dist/server/node_modules/entities/dist/commonjs/decode-codepoint.js +77 -0
- package/dist/server/node_modules/entities/dist/commonjs/decode.js +568 -0
- package/dist/server/node_modules/entities/dist/commonjs/generated/decode-data-html.js +7 -0
- package/dist/server/node_modules/entities/dist/commonjs/generated/decode-data-xml.js +7 -0
- package/dist/server/node_modules/entities/dist/commonjs/internal/bin-trie-flags.js +21 -0
- package/dist/server/node_modules/entities/dist/commonjs/internal/decode-shared.js +31 -0
- package/dist/server/node_modules/entities/dist/commonjs/package.json +3 -0
- package/dist/server/node_modules/entities/package.json +113 -0
- package/dist/server/node_modules/estree-walker/dist/umd/estree-walker.js +344 -0
- package/dist/server/node_modules/estree-walker/package.json +37 -0
- package/dist/server/node_modules/get-port-please/dist/index.mjs +430 -0
- package/dist/server/node_modules/get-port-please/package.json +39 -0
- package/dist/server/node_modules/hookable/dist/index.mjs +290 -0
- package/dist/server/node_modules/hookable/package.json +49 -0
- package/dist/server/node_modules/source-map-js/lib/array-set.js +121 -0
- package/dist/server/node_modules/source-map-js/lib/base64-vlq.js +140 -0
- package/dist/server/node_modules/source-map-js/lib/base64.js +67 -0
- package/dist/server/node_modules/source-map-js/lib/binary-search.js +111 -0
- package/dist/server/node_modules/source-map-js/lib/mapping-list.js +79 -0
- package/dist/server/node_modules/source-map-js/lib/quick-sort.js +132 -0
- package/dist/server/node_modules/source-map-js/lib/source-map-consumer.js +1188 -0
- package/dist/server/node_modules/source-map-js/lib/source-map-generator.js +444 -0
- package/dist/server/node_modules/source-map-js/lib/source-node.js +413 -0
- package/dist/server/node_modules/source-map-js/lib/util.js +594 -0
- package/dist/server/node_modules/source-map-js/package.json +71 -0
- package/dist/server/node_modules/source-map-js/source-map.js +8 -0
- package/dist/server/node_modules/structured-clone-es/dist/index.mjs +285 -0
- package/dist/server/node_modules/structured-clone-es/package.json +56 -0
- package/dist/server/node_modules/ufo/dist/index.mjs +638 -0
- package/dist/server/node_modules/ufo/package.json +47 -0
- package/dist/server/node_modules/unhead/dist/index.mjs +9 -0
- package/dist/server/node_modules/unhead/dist/parser.mjs +508 -0
- package/dist/server/node_modules/unhead/dist/plugins.mjs +101 -0
- package/dist/server/node_modules/unhead/dist/scripts.mjs +30 -0
- package/dist/server/node_modules/unhead/dist/server.mjs +182 -0
- package/dist/server/node_modules/unhead/dist/shared/unhead.B578PsDV.mjs +266 -0
- package/dist/server/node_modules/unhead/dist/shared/unhead.BPM0-cfG.mjs +44 -0
- package/dist/server/node_modules/unhead/dist/shared/unhead.BYvz9V1x.mjs +43 -0
- package/dist/server/node_modules/unhead/dist/shared/unhead.BpRRHAhY.mjs +194 -0
- package/dist/server/node_modules/unhead/dist/shared/unhead.CApf5sj3.mjs +148 -0
- package/dist/server/node_modules/unhead/dist/shared/unhead.DH45uomy.mjs +180 -0
- package/dist/server/node_modules/unhead/dist/shared/unhead.DQc16pHI.mjs +196 -0
- package/dist/server/node_modules/unhead/dist/shared/unhead.DZbvapt-.mjs +70 -0
- package/dist/server/node_modules/unhead/dist/shared/unhead.Djo8ep_Y.mjs +166 -0
- package/dist/server/node_modules/unhead/dist/shared/unhead.yem5I2v_.mjs +38 -0
- package/dist/server/node_modules/unhead/dist/utils.mjs +5 -0
- package/dist/server/node_modules/unhead/package.json +105 -0
- package/dist/server/node_modules/vue/dist/vue.cjs.js +80 -0
- package/dist/server/node_modules/vue/dist/vue.cjs.prod.js +66 -0
- package/dist/server/node_modules/vue/index.js +7 -0
- package/dist/server/node_modules/vue/index.mjs +1 -0
- package/dist/server/node_modules/vue/package.json +112 -0
- package/dist/server/node_modules/vue/server-renderer/index.mjs +1 -0
- package/dist/server/node_modules/vue-bundle-renderer/dist/runtime.mjs +301 -0
- package/dist/server/node_modules/vue-bundle-renderer/package.json +55 -0
- package/dist/server/node_modules/ws/lib/buffer-util.js +131 -0
- package/dist/server/node_modules/ws/lib/constants.js +19 -0
- package/dist/server/node_modules/ws/lib/event-target.js +292 -0
- package/dist/server/node_modules/ws/lib/extension.js +203 -0
- package/dist/server/node_modules/ws/lib/limiter.js +55 -0
- package/dist/server/node_modules/ws/lib/permessage-deflate.js +528 -0
- package/dist/server/node_modules/ws/lib/receiver.js +706 -0
- package/dist/server/node_modules/ws/lib/sender.js +602 -0
- package/dist/server/node_modules/ws/lib/stream.js +161 -0
- package/dist/server/node_modules/ws/lib/subprotocol.js +62 -0
- package/dist/server/node_modules/ws/lib/validation.js +152 -0
- package/dist/server/node_modules/ws/lib/websocket-server.js +554 -0
- package/dist/server/node_modules/ws/lib/websocket.js +1393 -0
- package/dist/server/node_modules/ws/package.json +69 -0
- package/dist/server/node_modules/ws/wrapper.mjs +8 -0
- package/dist/server/package.json +32 -0
- package/dist/shared/yansu.DmdNF4qf.mjs +151 -0
- package/package.json +50 -0
|
@@ -0,0 +1,1413 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @vue/compiler-ssr v3.5.26
|
|
3
|
+
* (c) 2018-present Yuxi (Evan) You and Vue contributors
|
|
4
|
+
* @license MIT
|
|
5
|
+
**/
|
|
6
|
+
'use strict';
|
|
7
|
+
|
|
8
|
+
Object.defineProperty(exports, '__esModule', { value: true });
|
|
9
|
+
|
|
10
|
+
var compilerDom = require('@vue/compiler-dom');
|
|
11
|
+
var shared = require('@vue/shared');
|
|
12
|
+
|
|
13
|
+
const SSR_INTERPOLATE = /* @__PURE__ */ Symbol(`ssrInterpolate`);
|
|
14
|
+
const SSR_RENDER_VNODE = /* @__PURE__ */ Symbol(`ssrRenderVNode`);
|
|
15
|
+
const SSR_RENDER_COMPONENT = /* @__PURE__ */ Symbol(`ssrRenderComponent`);
|
|
16
|
+
const SSR_RENDER_SLOT = /* @__PURE__ */ Symbol(`ssrRenderSlot`);
|
|
17
|
+
const SSR_RENDER_SLOT_INNER = /* @__PURE__ */ Symbol(`ssrRenderSlotInner`);
|
|
18
|
+
const SSR_RENDER_CLASS = /* @__PURE__ */ Symbol(`ssrRenderClass`);
|
|
19
|
+
const SSR_RENDER_STYLE = /* @__PURE__ */ Symbol(`ssrRenderStyle`);
|
|
20
|
+
const SSR_RENDER_ATTRS = /* @__PURE__ */ Symbol(`ssrRenderAttrs`);
|
|
21
|
+
const SSR_RENDER_ATTR = /* @__PURE__ */ Symbol(`ssrRenderAttr`);
|
|
22
|
+
const SSR_RENDER_DYNAMIC_ATTR = /* @__PURE__ */ Symbol(`ssrRenderDynamicAttr`);
|
|
23
|
+
const SSR_RENDER_LIST = /* @__PURE__ */ Symbol(`ssrRenderList`);
|
|
24
|
+
const SSR_INCLUDE_BOOLEAN_ATTR = /* @__PURE__ */ Symbol(
|
|
25
|
+
`ssrIncludeBooleanAttr`
|
|
26
|
+
);
|
|
27
|
+
const SSR_LOOSE_EQUAL = /* @__PURE__ */ Symbol(`ssrLooseEqual`);
|
|
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`);
|
|
38
|
+
const ssrHelpers = {
|
|
39
|
+
[SSR_INTERPOLATE]: `ssrInterpolate`,
|
|
40
|
+
[SSR_RENDER_VNODE]: `ssrRenderVNode`,
|
|
41
|
+
[SSR_RENDER_COMPONENT]: `ssrRenderComponent`,
|
|
42
|
+
[SSR_RENDER_SLOT]: `ssrRenderSlot`,
|
|
43
|
+
[SSR_RENDER_SLOT_INNER]: `ssrRenderSlotInner`,
|
|
44
|
+
[SSR_RENDER_CLASS]: `ssrRenderClass`,
|
|
45
|
+
[SSR_RENDER_STYLE]: `ssrRenderStyle`,
|
|
46
|
+
[SSR_RENDER_ATTRS]: `ssrRenderAttrs`,
|
|
47
|
+
[SSR_RENDER_ATTR]: `ssrRenderAttr`,
|
|
48
|
+
[SSR_RENDER_DYNAMIC_ATTR]: `ssrRenderDynamicAttr`,
|
|
49
|
+
[SSR_RENDER_LIST]: `ssrRenderList`,
|
|
50
|
+
[SSR_INCLUDE_BOOLEAN_ATTR]: `ssrIncludeBooleanAttr`,
|
|
51
|
+
[SSR_LOOSE_EQUAL]: `ssrLooseEqual`,
|
|
52
|
+
[SSR_LOOSE_CONTAIN]: `ssrLooseContain`,
|
|
53
|
+
[SSR_RENDER_DYNAMIC_MODEL]: `ssrRenderDynamicModel`,
|
|
54
|
+
[SSR_GET_DYNAMIC_MODEL_PROPS]: `ssrGetDynamicModelProps`,
|
|
55
|
+
[SSR_RENDER_TELEPORT]: `ssrRenderTeleport`,
|
|
56
|
+
[SSR_RENDER_SUSPENSE]: `ssrRenderSuspense`,
|
|
57
|
+
[SSR_GET_DIRECTIVE_PROPS]: `ssrGetDirectiveProps`
|
|
58
|
+
};
|
|
59
|
+
compilerDom.registerRuntimeHelpers(ssrHelpers);
|
|
60
|
+
|
|
61
|
+
const ssrTransformIf = compilerDom.createStructuralDirectiveTransform(
|
|
62
|
+
/^(?:if|else|else-if)$/,
|
|
63
|
+
compilerDom.processIf
|
|
64
|
+
);
|
|
65
|
+
function ssrProcessIf(node, context, disableNestedFragments = false, disableComment = false) {
|
|
66
|
+
const [rootBranch] = node.branches;
|
|
67
|
+
const ifStatement = compilerDom.createIfStatement(
|
|
68
|
+
rootBranch.condition,
|
|
69
|
+
processIfBranch(rootBranch, context, disableNestedFragments)
|
|
70
|
+
);
|
|
71
|
+
context.pushStatement(ifStatement);
|
|
72
|
+
let currentIf = ifStatement;
|
|
73
|
+
for (let i = 1; i < node.branches.length; i++) {
|
|
74
|
+
const branch = node.branches[i];
|
|
75
|
+
const branchBlockStatement = processIfBranch(
|
|
76
|
+
branch,
|
|
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
|
+
}
|
|
94
|
+
}
|
|
95
|
+
function processIfBranch(branch, context, disableNestedFragments = false) {
|
|
96
|
+
const { children } = branch;
|
|
97
|
+
const needFragmentWrapper = !disableNestedFragments && (children.length !== 1 || children[0].type !== 1) && // optimize away nested fragments when the only child is a ForNode
|
|
98
|
+
!(children.length === 1 && children[0].type === 11);
|
|
99
|
+
return processChildrenAsStatement(branch, context, needFragmentWrapper);
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
const ssrTransformFor = compilerDom.createStructuralDirectiveTransform("for", compilerDom.processFor);
|
|
103
|
+
function ssrProcessFor(node, context, disableNestedFragments = false) {
|
|
104
|
+
const needFragmentWrapper = !disableNestedFragments && (node.children.length !== 1 || node.children[0].type !== 1);
|
|
105
|
+
const renderLoop = compilerDom.createFunctionExpression(
|
|
106
|
+
compilerDom.createForLoopParams(node.parseResult)
|
|
107
|
+
);
|
|
108
|
+
renderLoop.body = processChildrenAsStatement(
|
|
109
|
+
node,
|
|
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
|
+
}
|
|
125
|
+
}
|
|
126
|
+
|
|
127
|
+
const ssrTransformSlotOutlet = (node, context) => {
|
|
128
|
+
if (compilerDom.isSlotOutlet(node)) {
|
|
129
|
+
const { slotName, slotProps } = compilerDom.processSlotOutlet(node, context);
|
|
130
|
+
const args = [
|
|
131
|
+
`_ctx.$slots`,
|
|
132
|
+
slotName,
|
|
133
|
+
slotProps || `{}`,
|
|
134
|
+
// fallback content placeholder. will be replaced in the process phase
|
|
135
|
+
`null`,
|
|
136
|
+
`_push`,
|
|
137
|
+
`_parent`
|
|
138
|
+
];
|
|
139
|
+
if (context.scopeId && context.slotted !== false) {
|
|
140
|
+
args.push(`"${context.scopeId}-s"`);
|
|
141
|
+
}
|
|
142
|
+
let method = SSR_RENDER_SLOT;
|
|
143
|
+
let parent = context.parent;
|
|
144
|
+
if (parent) {
|
|
145
|
+
const children = parent.children;
|
|
146
|
+
if (parent.type === 10) {
|
|
147
|
+
parent = context.grandParent;
|
|
148
|
+
}
|
|
149
|
+
let componentType;
|
|
150
|
+
if (parent.type === 1 && parent.tagType === 1 && ((componentType = compilerDom.resolveComponentType(parent, context, true)) === compilerDom.TRANSITION || componentType === compilerDom.TRANSITION_GROUP) && children.filter((c) => c.type === 1).length === 1) {
|
|
151
|
+
method = SSR_RENDER_SLOT_INNER;
|
|
152
|
+
if (!(context.scopeId && context.slotted !== false)) {
|
|
153
|
+
args.push("null");
|
|
154
|
+
}
|
|
155
|
+
args.push("true");
|
|
156
|
+
}
|
|
157
|
+
}
|
|
158
|
+
node.ssrCodegenNode = compilerDom.createCallExpression(context.helper(method), args);
|
|
159
|
+
}
|
|
160
|
+
};
|
|
161
|
+
function ssrProcessSlotOutlet(node, context) {
|
|
162
|
+
const renderCall = node.ssrCodegenNode;
|
|
163
|
+
if (node.children.length) {
|
|
164
|
+
const fallbackRenderFn = compilerDom.createFunctionExpression([]);
|
|
165
|
+
fallbackRenderFn.body = processChildrenAsStatement(node, context);
|
|
166
|
+
renderCall.arguments[3] = fallbackRenderFn;
|
|
167
|
+
}
|
|
168
|
+
if (context.withSlotScopeId) {
|
|
169
|
+
const slotScopeId = renderCall.arguments[6];
|
|
170
|
+
renderCall.arguments[6] = slotScopeId ? `${slotScopeId} + _scopeId` : `_scopeId`;
|
|
171
|
+
}
|
|
172
|
+
context.pushStatement(node.ssrCodegenNode);
|
|
173
|
+
}
|
|
174
|
+
|
|
175
|
+
function createSSRCompilerError(code, loc) {
|
|
176
|
+
return compilerDom.createCompilerError(code, loc, SSRErrorMessages);
|
|
177
|
+
}
|
|
178
|
+
const SSRErrorMessages = {
|
|
179
|
+
[65]: `Unsafe attribute name for SSR.`,
|
|
180
|
+
[66]: `Missing the 'to' prop on teleport element.`,
|
|
181
|
+
[67]: `Invalid AST node during SSR transform.`
|
|
182
|
+
};
|
|
183
|
+
|
|
184
|
+
function ssrProcessTeleport(node, context) {
|
|
185
|
+
const targetProp = compilerDom.findProp(node, "to");
|
|
186
|
+
if (!targetProp) {
|
|
187
|
+
context.onError(
|
|
188
|
+
createSSRCompilerError(66, node.loc)
|
|
189
|
+
);
|
|
190
|
+
return;
|
|
191
|
+
}
|
|
192
|
+
let target;
|
|
193
|
+
if (targetProp.type === 6) {
|
|
194
|
+
target = targetProp.value && compilerDom.createSimpleExpression(targetProp.value.content, true);
|
|
195
|
+
} else {
|
|
196
|
+
target = targetProp.exp;
|
|
197
|
+
}
|
|
198
|
+
if (!target) {
|
|
199
|
+
context.onError(
|
|
200
|
+
createSSRCompilerError(
|
|
201
|
+
66,
|
|
202
|
+
targetProp.loc
|
|
203
|
+
)
|
|
204
|
+
);
|
|
205
|
+
return;
|
|
206
|
+
}
|
|
207
|
+
const disabledProp = compilerDom.findProp(
|
|
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
|
+
);
|
|
235
|
+
}
|
|
236
|
+
|
|
237
|
+
const wipMap$3 = /* @__PURE__ */ new WeakMap();
|
|
238
|
+
function ssrTransformSuspense(node, context) {
|
|
239
|
+
return () => {
|
|
240
|
+
if (node.children.length) {
|
|
241
|
+
const wipEntry = {
|
|
242
|
+
slotsExp: null,
|
|
243
|
+
// to be immediately set
|
|
244
|
+
wipSlots: []
|
|
245
|
+
};
|
|
246
|
+
wipMap$3.set(node, wipEntry);
|
|
247
|
+
wipEntry.slotsExp = compilerDom.buildSlots(
|
|
248
|
+
node,
|
|
249
|
+
context,
|
|
250
|
+
(_props, _vForExp, children, loc) => {
|
|
251
|
+
const fn = compilerDom.createFunctionExpression(
|
|
252
|
+
[],
|
|
253
|
+
void 0,
|
|
254
|
+
// no return, assign body later
|
|
255
|
+
true,
|
|
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
|
+
};
|
|
270
|
+
}
|
|
271
|
+
function ssrProcessSuspense(node, context) {
|
|
272
|
+
const wipEntry = wipMap$3.get(node);
|
|
273
|
+
if (!wipEntry) {
|
|
274
|
+
return;
|
|
275
|
+
}
|
|
276
|
+
const { slotsExp, wipSlots } = wipEntry;
|
|
277
|
+
for (let i = 0; i < wipSlots.length; i++) {
|
|
278
|
+
const slot = wipSlots[i];
|
|
279
|
+
slot.fn.body = processChildrenAsStatement(slot, context);
|
|
280
|
+
}
|
|
281
|
+
context.pushStatement(
|
|
282
|
+
compilerDom.createCallExpression(context.helper(SSR_RENDER_SUSPENSE), [
|
|
283
|
+
`_push`,
|
|
284
|
+
slotsExp
|
|
285
|
+
])
|
|
286
|
+
);
|
|
287
|
+
}
|
|
288
|
+
|
|
289
|
+
const rawChildrenMap = /* @__PURE__ */ new WeakMap();
|
|
290
|
+
const ssrTransformElement = (node, context) => {
|
|
291
|
+
if (node.type !== 1 || node.tagType !== 0) {
|
|
292
|
+
return;
|
|
293
|
+
}
|
|
294
|
+
return function ssrPostTransformElement() {
|
|
295
|
+
const openTag = [`<${node.tag}`];
|
|
296
|
+
const needTagForRuntime = node.tag === "textarea" || node.tag.indexOf("-") > 0;
|
|
297
|
+
const hasDynamicVBind = compilerDom.hasDynamicKeyVBind(node);
|
|
298
|
+
const hasCustomDir = node.props.some(
|
|
299
|
+
(p) => p.type === 7 && !shared.isBuiltInDirective(p.name)
|
|
300
|
+
);
|
|
301
|
+
const vShowPropIndex = node.props.findIndex(
|
|
302
|
+
(i) => i.type === 7 && i.name === "show"
|
|
303
|
+
);
|
|
304
|
+
if (vShowPropIndex !== -1) {
|
|
305
|
+
const vShowProp = node.props[vShowPropIndex];
|
|
306
|
+
node.props.splice(vShowPropIndex, 1);
|
|
307
|
+
node.props.push(vShowProp);
|
|
308
|
+
}
|
|
309
|
+
const needMergeProps = hasDynamicVBind || hasCustomDir;
|
|
310
|
+
if (needMergeProps) {
|
|
311
|
+
const { props, directives } = compilerDom.buildProps(
|
|
312
|
+
node,
|
|
313
|
+
context,
|
|
314
|
+
node.props,
|
|
315
|
+
false,
|
|
316
|
+
false,
|
|
317
|
+
true
|
|
318
|
+
);
|
|
319
|
+
if (props || directives.length) {
|
|
320
|
+
const mergedProps = buildSSRProps(props, directives, context);
|
|
321
|
+
const propsExp = compilerDom.createCallExpression(
|
|
322
|
+
context.helper(SSR_RENDER_ATTRS),
|
|
323
|
+
[mergedProps]
|
|
324
|
+
);
|
|
325
|
+
if (node.tag === "textarea") {
|
|
326
|
+
const existingText = node.children[0];
|
|
327
|
+
if (!hasContentOverrideDirective(node) && (!existingText || existingText.type !== 5)) {
|
|
328
|
+
const tempId = `_temp${context.temps++}`;
|
|
329
|
+
propsExp.arguments = [
|
|
330
|
+
compilerDom.createAssignmentExpression(
|
|
331
|
+
compilerDom.createSimpleExpression(tempId, false),
|
|
332
|
+
mergedProps
|
|
333
|
+
)
|
|
334
|
+
];
|
|
335
|
+
rawChildrenMap.set(
|
|
336
|
+
node,
|
|
337
|
+
compilerDom.createCallExpression(context.helper(SSR_INTERPOLATE), [
|
|
338
|
+
compilerDom.createConditionalExpression(
|
|
339
|
+
compilerDom.createSimpleExpression(`"value" in ${tempId}`, false),
|
|
340
|
+
compilerDom.createSimpleExpression(`${tempId}.value`, false),
|
|
341
|
+
compilerDom.createSimpleExpression(
|
|
342
|
+
existingText ? existingText.content : ``,
|
|
343
|
+
true
|
|
344
|
+
),
|
|
345
|
+
false
|
|
346
|
+
)
|
|
347
|
+
])
|
|
348
|
+
);
|
|
349
|
+
}
|
|
350
|
+
} else if (node.tag === "input") {
|
|
351
|
+
const vModel = findVModel(node);
|
|
352
|
+
if (vModel) {
|
|
353
|
+
const tempId = `_temp${context.temps++}`;
|
|
354
|
+
const tempExp = compilerDom.createSimpleExpression(tempId, false);
|
|
355
|
+
propsExp.arguments = [
|
|
356
|
+
compilerDom.createSequenceExpression([
|
|
357
|
+
compilerDom.createAssignmentExpression(tempExp, mergedProps),
|
|
358
|
+
compilerDom.createCallExpression(context.helper(compilerDom.MERGE_PROPS), [
|
|
359
|
+
tempExp,
|
|
360
|
+
compilerDom.createCallExpression(
|
|
361
|
+
context.helper(SSR_GET_DYNAMIC_MODEL_PROPS),
|
|
362
|
+
[
|
|
363
|
+
tempExp,
|
|
364
|
+
// existing props
|
|
365
|
+
vModel.exp
|
|
366
|
+
// model
|
|
367
|
+
]
|
|
368
|
+
)
|
|
369
|
+
])
|
|
370
|
+
])
|
|
371
|
+
];
|
|
372
|
+
}
|
|
373
|
+
} else if (directives.length && !node.children.length) {
|
|
374
|
+
if (!hasContentOverrideDirective(node)) {
|
|
375
|
+
const tempId = `_temp${context.temps++}`;
|
|
376
|
+
propsExp.arguments = [
|
|
377
|
+
compilerDom.createAssignmentExpression(
|
|
378
|
+
compilerDom.createSimpleExpression(tempId, false),
|
|
379
|
+
mergedProps
|
|
380
|
+
)
|
|
381
|
+
];
|
|
382
|
+
rawChildrenMap.set(
|
|
383
|
+
node,
|
|
384
|
+
compilerDom.createConditionalExpression(
|
|
385
|
+
compilerDom.createSimpleExpression(`"textContent" in ${tempId}`, false),
|
|
386
|
+
compilerDom.createCallExpression(context.helper(SSR_INTERPOLATE), [
|
|
387
|
+
compilerDom.createSimpleExpression(`${tempId}.textContent`, false)
|
|
388
|
+
]),
|
|
389
|
+
compilerDom.createSimpleExpression(`${tempId}.innerHTML ?? ''`, false),
|
|
390
|
+
false
|
|
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
|
+
};
|
|
536
|
+
};
|
|
537
|
+
function buildSSRProps(props, directives, context) {
|
|
538
|
+
let mergePropsArgs = [];
|
|
539
|
+
if (props) {
|
|
540
|
+
if (props.type === 14) {
|
|
541
|
+
mergePropsArgs = props.arguments;
|
|
542
|
+
} else {
|
|
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];
|
|
557
|
+
}
|
|
558
|
+
function isTrueFalseValue(prop) {
|
|
559
|
+
if (prop.type === 7) {
|
|
560
|
+
return prop.name === "bind" && prop.arg && compilerDom.isStaticExp(prop.arg) && (prop.arg.content === "true-value" || prop.arg.content === "false-value");
|
|
561
|
+
} else {
|
|
562
|
+
return prop.name === "true-value" || prop.name === "false-value";
|
|
563
|
+
}
|
|
564
|
+
}
|
|
565
|
+
function isTextareaWithValue(node, prop) {
|
|
566
|
+
return !!(node.tag === "textarea" && prop.name === "bind" && compilerDom.isStaticArgOf(prop.arg, "value"));
|
|
567
|
+
}
|
|
568
|
+
function mergeCall(call, arg) {
|
|
569
|
+
const existing = call.arguments[0];
|
|
570
|
+
if (existing.type === 17) {
|
|
571
|
+
existing.elements.push(arg);
|
|
572
|
+
} else {
|
|
573
|
+
call.arguments[0] = compilerDom.createArrayExpression([existing, arg]);
|
|
574
|
+
}
|
|
575
|
+
}
|
|
576
|
+
function removeStaticBinding(tag, binding) {
|
|
577
|
+
const regExp = new RegExp(`^ ${binding}=".+"$`);
|
|
578
|
+
const i = tag.findIndex((e) => typeof e === "string" && regExp.test(e));
|
|
579
|
+
if (i > -1) {
|
|
580
|
+
tag.splice(i, 1);
|
|
581
|
+
}
|
|
582
|
+
}
|
|
583
|
+
function findVModel(node) {
|
|
584
|
+
return node.props.find(
|
|
585
|
+
(p) => p.type === 7 && p.name === "model" && p.exp
|
|
586
|
+
);
|
|
587
|
+
}
|
|
588
|
+
function hasContentOverrideDirective(node) {
|
|
589
|
+
return !!compilerDom.findDir(node, "text") || !!compilerDom.findDir(node, "html");
|
|
590
|
+
}
|
|
591
|
+
function ssrProcessElement(node, context) {
|
|
592
|
+
const isVoidTag = context.options.isVoidTag || shared.NO;
|
|
593
|
+
const elementsToAdd = node.ssrCodegenNode.elements;
|
|
594
|
+
for (let j = 0; j < elementsToAdd.length; j++) {
|
|
595
|
+
context.pushStringPart(elementsToAdd[j]);
|
|
596
|
+
}
|
|
597
|
+
if (context.withSlotScopeId) {
|
|
598
|
+
context.pushStringPart(compilerDom.createSimpleExpression(`_scopeId`, false));
|
|
599
|
+
}
|
|
600
|
+
context.pushStringPart(`>`);
|
|
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
|
+
}
|
|
610
|
+
}
|
|
611
|
+
|
|
612
|
+
const wipMap$2 = /* @__PURE__ */ new WeakMap();
|
|
613
|
+
function ssrTransformTransitionGroup(node, context) {
|
|
614
|
+
return () => {
|
|
615
|
+
const tag = compilerDom.findProp(node, "tag");
|
|
616
|
+
if (tag) {
|
|
617
|
+
const otherProps = node.props.filter((p) => p !== tag);
|
|
618
|
+
const { props, directives } = compilerDom.buildProps(
|
|
619
|
+
node,
|
|
620
|
+
context,
|
|
621
|
+
otherProps,
|
|
622
|
+
true,
|
|
623
|
+
false,
|
|
624
|
+
true
|
|
625
|
+
);
|
|
626
|
+
let propsExp = null;
|
|
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
|
+
};
|
|
639
|
+
}
|
|
640
|
+
function ssrProcessTransitionGroup(node, context) {
|
|
641
|
+
const entry = wipMap$2.get(node);
|
|
642
|
+
if (entry) {
|
|
643
|
+
const { tag, propsExp, scopeId } = entry;
|
|
644
|
+
if (tag.type === 7) {
|
|
645
|
+
context.pushStringPart(`<`);
|
|
646
|
+
context.pushStringPart(tag.exp);
|
|
647
|
+
if (propsExp) {
|
|
648
|
+
context.pushStringPart(propsExp);
|
|
649
|
+
}
|
|
650
|
+
if (scopeId) {
|
|
651
|
+
context.pushStringPart(` ${scopeId}`);
|
|
652
|
+
}
|
|
653
|
+
context.pushStringPart(`>`);
|
|
654
|
+
processChildren(
|
|
655
|
+
node,
|
|
656
|
+
context,
|
|
657
|
+
false,
|
|
658
|
+
/**
|
|
659
|
+
* TransitionGroup has the special runtime behavior of flattening and
|
|
660
|
+
* concatenating all children into a single fragment (in order for them to
|
|
661
|
+
* be patched using the same key map) so we need to account for that here
|
|
662
|
+
* by disabling nested fragment wrappers from being generated.
|
|
663
|
+
*/
|
|
664
|
+
true,
|
|
665
|
+
/**
|
|
666
|
+
* TransitionGroup filters out comment children at runtime and thus
|
|
667
|
+
* doesn't expect comments to be present during hydration. We need to
|
|
668
|
+
* account for that by disabling the empty comment that is otherwise
|
|
669
|
+
* rendered for a falsy v-if that has no v-else specified. (#6715)
|
|
670
|
+
*/
|
|
671
|
+
true
|
|
672
|
+
);
|
|
673
|
+
context.pushStringPart(`</`);
|
|
674
|
+
context.pushStringPart(tag.exp);
|
|
675
|
+
context.pushStringPart(`>`);
|
|
676
|
+
} else {
|
|
677
|
+
context.pushStringPart(`<${tag.value.content}`);
|
|
678
|
+
if (propsExp) {
|
|
679
|
+
context.pushStringPart(propsExp);
|
|
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
|
+
}
|
|
691
|
+
}
|
|
692
|
+
|
|
693
|
+
const wipMap$1 = /* @__PURE__ */ new WeakMap();
|
|
694
|
+
function ssrTransformTransition(node, context) {
|
|
695
|
+
return () => {
|
|
696
|
+
const appear = compilerDom.findProp(node, "appear", false, true);
|
|
697
|
+
wipMap$1.set(node, !!appear);
|
|
698
|
+
};
|
|
699
|
+
}
|
|
700
|
+
function ssrProcessTransition(node, context) {
|
|
701
|
+
node.children = node.children.filter((c) => c.type !== 3);
|
|
702
|
+
const appear = wipMap$1.get(node);
|
|
703
|
+
if (appear) {
|
|
704
|
+
context.pushStringPart(`<template>`);
|
|
705
|
+
processChildren(node, context, false, true);
|
|
706
|
+
context.pushStringPart(`</template>`);
|
|
707
|
+
} else {
|
|
708
|
+
processChildren(node, context, false, true);
|
|
709
|
+
}
|
|
710
|
+
}
|
|
711
|
+
|
|
712
|
+
const wipMap = /* @__PURE__ */ new WeakMap();
|
|
713
|
+
const WIP_SLOT = /* @__PURE__ */ Symbol();
|
|
714
|
+
const componentTypeMap = /* @__PURE__ */ new WeakMap();
|
|
715
|
+
const ssrTransformComponent = (node, context) => {
|
|
716
|
+
if (node.type !== 1 || node.tagType !== 1) {
|
|
717
|
+
return;
|
|
718
|
+
}
|
|
719
|
+
const component = compilerDom.resolveComponentType(
|
|
720
|
+
node,
|
|
721
|
+
context,
|
|
722
|
+
true
|
|
723
|
+
/* ssr */
|
|
724
|
+
);
|
|
725
|
+
const isDynamicComponent = shared.isObject(component) && component.callee === compilerDom.RESOLVE_DYNAMIC_COMPONENT;
|
|
726
|
+
componentTypeMap.set(node, component);
|
|
727
|
+
if (shared.isSymbol(component)) {
|
|
728
|
+
if (component === compilerDom.SUSPENSE) {
|
|
729
|
+
return ssrTransformSuspense(node, context);
|
|
730
|
+
} else if (component === compilerDom.TRANSITION_GROUP) {
|
|
731
|
+
return ssrTransformTransitionGroup(node, context);
|
|
732
|
+
} else if (component === compilerDom.TRANSITION) {
|
|
733
|
+
return ssrTransformTransition(node);
|
|
734
|
+
}
|
|
735
|
+
return;
|
|
736
|
+
}
|
|
737
|
+
const vnodeBranches = [];
|
|
738
|
+
const clonedNode = clone(node);
|
|
739
|
+
return function ssrPostTransformComponent() {
|
|
740
|
+
if (clonedNode.children.length) {
|
|
741
|
+
compilerDom.buildSlots(clonedNode, context, (props, vFor, children) => {
|
|
742
|
+
vnodeBranches.push(
|
|
743
|
+
createVNodeSlotBranch(props, vFor, children, context)
|
|
744
|
+
);
|
|
745
|
+
return compilerDom.createFunctionExpression(void 0);
|
|
746
|
+
});
|
|
747
|
+
}
|
|
748
|
+
let propsExp = `null`;
|
|
749
|
+
if (node.props.length) {
|
|
750
|
+
const { props, directives } = compilerDom.buildProps(
|
|
751
|
+
node,
|
|
752
|
+
context,
|
|
753
|
+
void 0,
|
|
754
|
+
true,
|
|
755
|
+
isDynamicComponent
|
|
756
|
+
);
|
|
757
|
+
if (props || directives.length) {
|
|
758
|
+
propsExp = buildSSRProps(props, directives, context);
|
|
759
|
+
}
|
|
760
|
+
}
|
|
761
|
+
const wipEntries = [];
|
|
762
|
+
wipMap.set(node, wipEntries);
|
|
763
|
+
const buildSSRSlotFn = (props, _vForExp, children, loc) => {
|
|
764
|
+
const param0 = props && compilerDom.stringifyExpression(props) || `_`;
|
|
765
|
+
const fn = compilerDom.createFunctionExpression(
|
|
766
|
+
[param0, `_push`, `_parent`, `_scopeId`],
|
|
767
|
+
void 0,
|
|
768
|
+
// no return, assign body later
|
|
769
|
+
true,
|
|
770
|
+
// newline
|
|
771
|
+
true,
|
|
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
|
+
};
|
|
805
|
+
};
|
|
806
|
+
function ssrProcessComponent(node, context, parent) {
|
|
807
|
+
const component = componentTypeMap.get(node);
|
|
808
|
+
if (!node.ssrCodegenNode) {
|
|
809
|
+
if (component === compilerDom.TELEPORT) {
|
|
810
|
+
return ssrProcessTeleport(node, context);
|
|
811
|
+
} else if (component === compilerDom.SUSPENSE) {
|
|
812
|
+
return ssrProcessSuspense(node, context);
|
|
813
|
+
} else if (component === compilerDom.TRANSITION_GROUP) {
|
|
814
|
+
return ssrProcessTransitionGroup(node, context);
|
|
815
|
+
} else {
|
|
816
|
+
if (parent.type === WIP_SLOT) {
|
|
817
|
+
context.pushStringPart(``);
|
|
818
|
+
}
|
|
819
|
+
if (component === compilerDom.TRANSITION) {
|
|
820
|
+
return ssrProcessTransition(node, context);
|
|
821
|
+
}
|
|
822
|
+
processChildren(node, context);
|
|
823
|
+
}
|
|
824
|
+
} else {
|
|
825
|
+
const wipEntries = wipMap.get(node) || [];
|
|
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
|
+
}
|
|
850
|
+
}
|
|
851
|
+
const rawOptionsMap = /* @__PURE__ */ new WeakMap();
|
|
852
|
+
const [baseNodeTransforms, baseDirectiveTransforms] = compilerDom.getBaseTransformPreset(true);
|
|
853
|
+
const vnodeNodeTransforms = [...baseNodeTransforms, ...compilerDom.DOMNodeTransforms];
|
|
854
|
+
const vnodeDirectiveTransforms = {
|
|
855
|
+
...baseDirectiveTransforms,
|
|
856
|
+
...compilerDom.DOMDirectiveTransforms
|
|
857
|
+
};
|
|
858
|
+
function createVNodeSlotBranch(slotProps, vFor, children, parentContext) {
|
|
859
|
+
const rawOptions = rawOptionsMap.get(parentContext.root);
|
|
860
|
+
const subOptions = {
|
|
861
|
+
...rawOptions,
|
|
862
|
+
// overwrite with vnode-based transforms
|
|
863
|
+
nodeTransforms: [
|
|
864
|
+
...vnodeNodeTransforms,
|
|
865
|
+
...rawOptions.nodeTransforms || []
|
|
866
|
+
],
|
|
867
|
+
directiveTransforms: {
|
|
868
|
+
...vnodeDirectiveTransforms,
|
|
869
|
+
...rawOptions.directiveTransforms || {}
|
|
870
|
+
}
|
|
871
|
+
};
|
|
872
|
+
const wrapperProps = [];
|
|
873
|
+
if (slotProps) {
|
|
874
|
+
wrapperProps.push({
|
|
875
|
+
type: 7,
|
|
876
|
+
name: "slot",
|
|
877
|
+
exp: slotProps,
|
|
878
|
+
arg: void 0,
|
|
879
|
+
modifiers: [],
|
|
880
|
+
loc: compilerDom.locStub
|
|
881
|
+
});
|
|
882
|
+
}
|
|
883
|
+
if (vFor) {
|
|
884
|
+
wrapperProps.push(shared.extend({}, vFor));
|
|
885
|
+
}
|
|
886
|
+
const wrapperNode = {
|
|
887
|
+
type: 1,
|
|
888
|
+
ns: 0,
|
|
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);
|
|
898
|
+
}
|
|
899
|
+
function subTransform(node, options, parentContext) {
|
|
900
|
+
const childRoot = compilerDom.createRoot([node]);
|
|
901
|
+
const childContext = compilerDom.createTransformContext(childRoot, options);
|
|
902
|
+
childContext.ssr = false;
|
|
903
|
+
childContext.scopes = { ...parentContext.scopes };
|
|
904
|
+
childContext.identifiers = { ...parentContext.identifiers };
|
|
905
|
+
childContext.imports = parentContext.imports;
|
|
906
|
+
compilerDom.traverseNode(childRoot, childContext);
|
|
907
|
+
["helpers", "components", "directives"].forEach((key) => {
|
|
908
|
+
childContext[key].forEach((value, helperKey) => {
|
|
909
|
+
if (key === "helpers") {
|
|
910
|
+
const parentCount = parentContext.helpers.get(helperKey);
|
|
911
|
+
if (parentCount === void 0) {
|
|
912
|
+
parentContext.helpers.set(helperKey, value);
|
|
913
|
+
} else {
|
|
914
|
+
parentContext.helpers.set(helperKey, value + parentCount);
|
|
915
|
+
}
|
|
916
|
+
} else {
|
|
917
|
+
parentContext[key].add(value);
|
|
918
|
+
}
|
|
919
|
+
});
|
|
920
|
+
});
|
|
921
|
+
}
|
|
922
|
+
function clone(v) {
|
|
923
|
+
if (shared.isArray(v)) {
|
|
924
|
+
return v.map(clone);
|
|
925
|
+
} else if (shared.isPlainObject(v)) {
|
|
926
|
+
const res = {};
|
|
927
|
+
for (const key in v) {
|
|
928
|
+
res[key] = clone(v[key]);
|
|
929
|
+
}
|
|
930
|
+
return res;
|
|
931
|
+
} else {
|
|
932
|
+
return v;
|
|
933
|
+
}
|
|
934
|
+
}
|
|
935
|
+
|
|
936
|
+
function ssrCodegenTransform(ast, options) {
|
|
937
|
+
const context = createSSRTransformContext(ast, options);
|
|
938
|
+
if (options.ssrCssVars) {
|
|
939
|
+
const cssContext = compilerDom.createTransformContext(compilerDom.createRoot([]), options);
|
|
940
|
+
const varsExp = compilerDom.processExpression(
|
|
941
|
+
compilerDom.createSimpleExpression(options.ssrCssVars, false),
|
|
942
|
+
cssContext
|
|
943
|
+
);
|
|
944
|
+
context.body.push(
|
|
945
|
+
compilerDom.createCompoundExpression([`const _cssVars = { style: `, varsExp, `}`])
|
|
946
|
+
);
|
|
947
|
+
Array.from(cssContext.helpers.keys()).forEach((helper) => {
|
|
948
|
+
ast.helpers.add(helper);
|
|
949
|
+
});
|
|
950
|
+
}
|
|
951
|
+
const isFragment = ast.children.length > 1 && ast.children.some((c) => !compilerDom.isText(c));
|
|
952
|
+
processChildren(ast, context, isFragment);
|
|
953
|
+
ast.codegenNode = compilerDom.createBlockStatement(context.body);
|
|
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)));
|
|
961
|
+
}
|
|
962
|
+
function createSSRTransformContext(root, options, helpers = /* @__PURE__ */ new Set(), withSlotScopeId = false) {
|
|
963
|
+
const body = [];
|
|
964
|
+
let currentString = null;
|
|
965
|
+
return {
|
|
966
|
+
root,
|
|
967
|
+
options,
|
|
968
|
+
body,
|
|
969
|
+
helpers,
|
|
970
|
+
withSlotScopeId,
|
|
971
|
+
onError: options.onError || ((e) => {
|
|
972
|
+
throw e;
|
|
973
|
+
}),
|
|
974
|
+
helper(name) {
|
|
975
|
+
helpers.add(name);
|
|
976
|
+
return name;
|
|
977
|
+
},
|
|
978
|
+
pushStringPart(part) {
|
|
979
|
+
if (!currentString) {
|
|
980
|
+
const currentCall = compilerDom.createCallExpression(`_push`);
|
|
981
|
+
body.push(currentCall);
|
|
982
|
+
currentString = compilerDom.createTemplateLiteral([]);
|
|
983
|
+
currentCall.arguments.push(currentString);
|
|
984
|
+
}
|
|
985
|
+
const bufferedElements = currentString.elements;
|
|
986
|
+
const lastItem = bufferedElements[bufferedElements.length - 1];
|
|
987
|
+
if (shared.isString(part) && shared.isString(lastItem)) {
|
|
988
|
+
bufferedElements[bufferedElements.length - 1] += part;
|
|
989
|
+
} else {
|
|
990
|
+
bufferedElements.push(part);
|
|
991
|
+
}
|
|
992
|
+
},
|
|
993
|
+
pushStatement(statement) {
|
|
994
|
+
currentString = null;
|
|
995
|
+
body.push(statement);
|
|
996
|
+
}
|
|
997
|
+
};
|
|
998
|
+
}
|
|
999
|
+
function createChildContext(parent, withSlotScopeId = parent.withSlotScopeId) {
|
|
1000
|
+
return createSSRTransformContext(
|
|
1001
|
+
parent.root,
|
|
1002
|
+
parent.options,
|
|
1003
|
+
parent.helpers,
|
|
1004
|
+
withSlotScopeId
|
|
1005
|
+
);
|
|
1006
|
+
}
|
|
1007
|
+
function processChildren(parent, context, asFragment = false, disableNestedFragments = false, disableComment = false) {
|
|
1008
|
+
if (asFragment) {
|
|
1009
|
+
context.pushStringPart(`<!--[-->`);
|
|
1010
|
+
}
|
|
1011
|
+
const { children } = parent;
|
|
1012
|
+
for (let i = 0; i < children.length; i++) {
|
|
1013
|
+
const child = children[i];
|
|
1014
|
+
switch (child.type) {
|
|
1015
|
+
case 1:
|
|
1016
|
+
switch (child.tagType) {
|
|
1017
|
+
case 0:
|
|
1018
|
+
ssrProcessElement(child, context);
|
|
1019
|
+
break;
|
|
1020
|
+
case 1:
|
|
1021
|
+
ssrProcessComponent(child, context, parent);
|
|
1022
|
+
break;
|
|
1023
|
+
case 2:
|
|
1024
|
+
ssrProcessSlotOutlet(child, context);
|
|
1025
|
+
break;
|
|
1026
|
+
case 3:
|
|
1027
|
+
break;
|
|
1028
|
+
default:
|
|
1029
|
+
context.onError(
|
|
1030
|
+
createSSRCompilerError(
|
|
1031
|
+
67,
|
|
1032
|
+
child.loc
|
|
1033
|
+
)
|
|
1034
|
+
);
|
|
1035
|
+
const exhaustiveCheck2 = child;
|
|
1036
|
+
return exhaustiveCheck2;
|
|
1037
|
+
}
|
|
1038
|
+
break;
|
|
1039
|
+
case 2:
|
|
1040
|
+
context.pushStringPart(shared.escapeHtml(child.content));
|
|
1041
|
+
break;
|
|
1042
|
+
case 3:
|
|
1043
|
+
if (!disableComment) {
|
|
1044
|
+
context.pushStringPart(`<!--${child.content}-->`);
|
|
1045
|
+
}
|
|
1046
|
+
break;
|
|
1047
|
+
case 5:
|
|
1048
|
+
context.pushStringPart(
|
|
1049
|
+
compilerDom.createCallExpression(context.helper(SSR_INTERPOLATE), [
|
|
1050
|
+
child.content
|
|
1051
|
+
])
|
|
1052
|
+
);
|
|
1053
|
+
break;
|
|
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
|
+
}
|
|
1079
|
+
}
|
|
1080
|
+
function processChildrenAsStatement(parent, parentContext, asFragment = false, withSlotScopeId = parentContext.withSlotScopeId) {
|
|
1081
|
+
const childContext = createChildContext(parentContext, withSlotScopeId);
|
|
1082
|
+
processChildren(parent, childContext, asFragment);
|
|
1083
|
+
return compilerDom.createBlockStatement(childContext.body);
|
|
1084
|
+
}
|
|
1085
|
+
|
|
1086
|
+
const ssrTransformModel = (dir, node, context) => {
|
|
1087
|
+
const model = dir.exp;
|
|
1088
|
+
function checkDuplicatedValue() {
|
|
1089
|
+
const value = compilerDom.findProp(node, "value");
|
|
1090
|
+
if (value) {
|
|
1091
|
+
context.onError(
|
|
1092
|
+
compilerDom.createDOMCompilerError(
|
|
1093
|
+
61,
|
|
1094
|
+
value.loc
|
|
1095
|
+
)
|
|
1096
|
+
);
|
|
1097
|
+
}
|
|
1098
|
+
}
|
|
1099
|
+
const processSelectChildren = (children) => {
|
|
1100
|
+
children.forEach((child) => {
|
|
1101
|
+
if (child.type === 1) {
|
|
1102
|
+
processOption(child);
|
|
1103
|
+
} else if (child.type === 11) {
|
|
1104
|
+
processSelectChildren(child.children);
|
|
1105
|
+
} else if (child.type === 9) {
|
|
1106
|
+
child.branches.forEach((b) => processSelectChildren(b.children));
|
|
1107
|
+
}
|
|
1108
|
+
});
|
|
1109
|
+
};
|
|
1110
|
+
function processOption(plainNode) {
|
|
1111
|
+
if (plainNode.tag === "option") {
|
|
1112
|
+
if (plainNode.props.findIndex((p) => p.name === "selected") === -1) {
|
|
1113
|
+
const value = findValueBinding(plainNode);
|
|
1114
|
+
plainNode.ssrCodegenNode.elements.push(
|
|
1115
|
+
compilerDom.createConditionalExpression(
|
|
1116
|
+
compilerDom.createCallExpression(context.helper(SSR_INCLUDE_BOOLEAN_ATTR), [
|
|
1117
|
+
compilerDom.createConditionalExpression(
|
|
1118
|
+
compilerDom.createCallExpression(`Array.isArray`, [model]),
|
|
1119
|
+
compilerDom.createCallExpression(context.helper(SSR_LOOSE_CONTAIN), [
|
|
1120
|
+
model,
|
|
1121
|
+
value
|
|
1122
|
+
]),
|
|
1123
|
+
compilerDom.createCallExpression(context.helper(SSR_LOOSE_EQUAL), [
|
|
1124
|
+
model,
|
|
1125
|
+
value
|
|
1126
|
+
])
|
|
1127
|
+
)
|
|
1128
|
+
]),
|
|
1129
|
+
compilerDom.createSimpleExpression(" selected", true),
|
|
1130
|
+
compilerDom.createSimpleExpression("", true),
|
|
1131
|
+
false
|
|
1132
|
+
)
|
|
1133
|
+
);
|
|
1134
|
+
}
|
|
1135
|
+
} else if (plainNode.tag === "optgroup") {
|
|
1136
|
+
processSelectChildren(plainNode.children);
|
|
1137
|
+
}
|
|
1138
|
+
}
|
|
1139
|
+
if (node.tagType === 0) {
|
|
1140
|
+
const res = { props: [] };
|
|
1141
|
+
if (node.tag === "input") {
|
|
1142
|
+
const defaultProps = [
|
|
1143
|
+
// default value binding for text type inputs
|
|
1144
|
+
compilerDom.createObjectProperty(`value`, model)
|
|
1145
|
+
];
|
|
1146
|
+
const type = compilerDom.findProp(node, "type");
|
|
1147
|
+
if (type) {
|
|
1148
|
+
const value = findValueBinding(node);
|
|
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
|
+
}
|
|
1234
|
+
};
|
|
1235
|
+
function findValueBinding(node) {
|
|
1236
|
+
const valueBinding = compilerDom.findProp(node, "value");
|
|
1237
|
+
return valueBinding ? valueBinding.type === 7 ? valueBinding.exp : compilerDom.createSimpleExpression(valueBinding.value.content, true) : compilerDom.createSimpleExpression(`null`, false);
|
|
1238
|
+
}
|
|
1239
|
+
|
|
1240
|
+
const ssrTransformShow = (dir, node, context) => {
|
|
1241
|
+
if (!dir.exp) {
|
|
1242
|
+
context.onError(
|
|
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
|
+
};
|
|
1264
|
+
};
|
|
1265
|
+
|
|
1266
|
+
const filterChild = (node) => node.children.filter((n) => !compilerDom.isCommentOrWhitespace(n));
|
|
1267
|
+
const hasSingleChild = (node) => filterChild(node).length === 1;
|
|
1268
|
+
const ssrInjectFallthroughAttrs = (node, context) => {
|
|
1269
|
+
if (node.type === 0) {
|
|
1270
|
+
context.identifiers._attrs = 1;
|
|
1271
|
+
}
|
|
1272
|
+
if (node.type === 1 && node.tagType === 1 && (node.tag === "transition" || node.tag === "Transition" || node.tag === "KeepAlive" || node.tag === "keep-alive")) {
|
|
1273
|
+
const rootChildren = filterChild(context.root);
|
|
1274
|
+
if (rootChildren.length === 1 && rootChildren[0] === node) {
|
|
1275
|
+
if (hasSingleChild(node)) {
|
|
1276
|
+
injectFallthroughAttrs(node.children[0]);
|
|
1277
|
+
}
|
|
1278
|
+
return;
|
|
1279
|
+
}
|
|
1280
|
+
}
|
|
1281
|
+
const parent = context.parent;
|
|
1282
|
+
if (!parent || parent.type !== 0) {
|
|
1283
|
+
return;
|
|
1284
|
+
}
|
|
1285
|
+
if (node.type === 10 && hasSingleChild(node)) {
|
|
1286
|
+
let hasEncounteredIf = false;
|
|
1287
|
+
for (const c of filterChild(parent)) {
|
|
1288
|
+
if (c.type === 9 || c.type === 1 && compilerDom.findDir(c, "if")) {
|
|
1289
|
+
if (hasEncounteredIf) return;
|
|
1290
|
+
hasEncounteredIf = true;
|
|
1291
|
+
} else if (
|
|
1292
|
+
// node before v-if
|
|
1293
|
+
!hasEncounteredIf || // non else nodes
|
|
1294
|
+
!(c.type === 1 && compilerDom.findDir(c, /else/, true))
|
|
1295
|
+
) {
|
|
1296
|
+
return;
|
|
1297
|
+
}
|
|
1298
|
+
}
|
|
1299
|
+
injectFallthroughAttrs(node.children[0]);
|
|
1300
|
+
} else if (hasSingleChild(parent)) {
|
|
1301
|
+
injectFallthroughAttrs(node);
|
|
1302
|
+
}
|
|
1303
|
+
};
|
|
1304
|
+
function injectFallthroughAttrs(node) {
|
|
1305
|
+
if (node.type === 1 && (node.tagType === 0 || node.tagType === 1) && !compilerDom.findDir(node, "for")) {
|
|
1306
|
+
node.props.push({
|
|
1307
|
+
type: 7,
|
|
1308
|
+
name: "bind",
|
|
1309
|
+
arg: void 0,
|
|
1310
|
+
exp: compilerDom.createSimpleExpression(`_attrs`, false),
|
|
1311
|
+
modifiers: [],
|
|
1312
|
+
loc: compilerDom.locStub
|
|
1313
|
+
});
|
|
1314
|
+
}
|
|
1315
|
+
}
|
|
1316
|
+
|
|
1317
|
+
const ssrInjectCssVars = (node, context) => {
|
|
1318
|
+
if (!context.ssrCssVars) {
|
|
1319
|
+
return;
|
|
1320
|
+
}
|
|
1321
|
+
if (node.type === 0) {
|
|
1322
|
+
context.identifiers._cssVars = 1;
|
|
1323
|
+
}
|
|
1324
|
+
const parent = context.parent;
|
|
1325
|
+
if (!parent || parent.type !== 0) {
|
|
1326
|
+
return;
|
|
1327
|
+
}
|
|
1328
|
+
if (node.type === 10) {
|
|
1329
|
+
for (const child of node.children) {
|
|
1330
|
+
injectCssVars(child);
|
|
1331
|
+
}
|
|
1332
|
+
} else {
|
|
1333
|
+
injectCssVars(node);
|
|
1334
|
+
}
|
|
1335
|
+
};
|
|
1336
|
+
function injectCssVars(node) {
|
|
1337
|
+
if (node.type === 1 && (node.tagType === 0 || node.tagType === 1) && !compilerDom.findDir(node, "for")) {
|
|
1338
|
+
if (node.tag === "suspense" || node.tag === "Suspense") {
|
|
1339
|
+
for (const child of node.children) {
|
|
1340
|
+
if (child.type === 1 && child.tagType === 3) {
|
|
1341
|
+
child.children.forEach(injectCssVars);
|
|
1342
|
+
} else {
|
|
1343
|
+
injectCssVars(child);
|
|
1344
|
+
}
|
|
1345
|
+
}
|
|
1346
|
+
} else {
|
|
1347
|
+
node.props.push({
|
|
1348
|
+
type: 7,
|
|
1349
|
+
name: "bind",
|
|
1350
|
+
arg: void 0,
|
|
1351
|
+
exp: compilerDom.createSimpleExpression(`_cssVars`, false),
|
|
1352
|
+
modifiers: [],
|
|
1353
|
+
loc: compilerDom.locStub
|
|
1354
|
+
});
|
|
1355
|
+
}
|
|
1356
|
+
}
|
|
1357
|
+
}
|
|
1358
|
+
|
|
1359
|
+
function compile(source, options = {}) {
|
|
1360
|
+
options = {
|
|
1361
|
+
...options,
|
|
1362
|
+
...compilerDom.parserOptions,
|
|
1363
|
+
ssr: true,
|
|
1364
|
+
inSSR: true,
|
|
1365
|
+
scopeId: options.mode === "function" ? null : options.scopeId,
|
|
1366
|
+
// always prefix since compiler-ssr doesn't have size concern
|
|
1367
|
+
prefixIdentifiers: true,
|
|
1368
|
+
// disable optimizations that are unnecessary for ssr
|
|
1369
|
+
cacheHandlers: false,
|
|
1370
|
+
hoistStatic: false
|
|
1371
|
+
};
|
|
1372
|
+
const ast = typeof source === "string" ? compilerDom.baseParse(source, options) : source;
|
|
1373
|
+
rawOptionsMap.set(ast, options);
|
|
1374
|
+
compilerDom.transform(ast, {
|
|
1375
|
+
...options,
|
|
1376
|
+
hoistStatic: false,
|
|
1377
|
+
nodeTransforms: [
|
|
1378
|
+
compilerDom.transformVBindShorthand,
|
|
1379
|
+
ssrTransformIf,
|
|
1380
|
+
ssrTransformFor,
|
|
1381
|
+
compilerDom.trackVForSlotScopes,
|
|
1382
|
+
compilerDom.transformExpression,
|
|
1383
|
+
ssrTransformSlotOutlet,
|
|
1384
|
+
ssrInjectFallthroughAttrs,
|
|
1385
|
+
ssrInjectCssVars,
|
|
1386
|
+
ssrTransformElement,
|
|
1387
|
+
ssrTransformComponent,
|
|
1388
|
+
compilerDom.trackSlotScopes,
|
|
1389
|
+
compilerDom.transformStyle,
|
|
1390
|
+
...options.nodeTransforms || []
|
|
1391
|
+
// user transforms
|
|
1392
|
+
],
|
|
1393
|
+
directiveTransforms: {
|
|
1394
|
+
// reusing core v-bind
|
|
1395
|
+
bind: compilerDom.transformBind,
|
|
1396
|
+
on: compilerDom.transformOn,
|
|
1397
|
+
// model and show have dedicated SSR handling
|
|
1398
|
+
model: ssrTransformModel,
|
|
1399
|
+
show: ssrTransformShow,
|
|
1400
|
+
// the following are ignored during SSR
|
|
1401
|
+
// on: noopDirectiveTransform,
|
|
1402
|
+
cloak: compilerDom.noopDirectiveTransform,
|
|
1403
|
+
once: compilerDom.noopDirectiveTransform,
|
|
1404
|
+
memo: compilerDom.noopDirectiveTransform,
|
|
1405
|
+
...options.directiveTransforms || {}
|
|
1406
|
+
// user transforms
|
|
1407
|
+
}
|
|
1408
|
+
});
|
|
1409
|
+
ssrCodegenTransform(ast, options);
|
|
1410
|
+
return compilerDom.generate(ast, options);
|
|
1411
|
+
}
|
|
1412
|
+
|
|
1413
|
+
exports.compile = compile;
|