@vue/server-renderer 3.6.0-beta.9 → 3.6.0-rc.10
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/server-renderer.cjs.js +171 -327
- package/dist/server-renderer.cjs.prod.js +169 -63
- package/dist/server-renderer.d.ts +8 -11
- package/dist/server-renderer.esm-browser.js +956 -481
- package/dist/server-renderer.esm-browser.prod.js +2 -2
- package/dist/server-renderer.esm-bundler.js +149 -820
- package/package.json +4 -6
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* @vue/server-renderer v3.6.0-
|
|
2
|
+
* @vue/server-renderer v3.6.0-rc.10
|
|
3
3
|
* (c) 2018-present Yuxi (Evan) You and Vue contributors
|
|
4
4
|
* @license MIT
|
|
5
5
|
**/
|
|
@@ -33,17 +33,17 @@ var __copyProps = (to, from, except, desc) => {
|
|
|
33
33
|
}
|
|
34
34
|
return to;
|
|
35
35
|
};
|
|
36
|
-
var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", {
|
|
36
|
+
var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(isNodeMode || !mod || !mod.__esModule || !__hasOwnProp.call(mod, "default") ? __defProp(target, "default", {
|
|
37
37
|
value: mod,
|
|
38
38
|
enumerable: true
|
|
39
39
|
}) : target, mod));
|
|
40
40
|
//#endregion
|
|
41
|
-
let
|
|
42
|
-
|
|
41
|
+
let _vue_runtime_dom = require("@vue/runtime-dom");
|
|
42
|
+
_vue_runtime_dom = __toESM(_vue_runtime_dom);
|
|
43
43
|
let _vue_shared = require("@vue/shared");
|
|
44
44
|
let _vue_compiler_ssr = require("@vue/compiler-ssr");
|
|
45
45
|
//#region packages/server-renderer/src/helpers/ssrRenderAttrs.ts
|
|
46
|
-
const shouldIgnoreProp =
|
|
46
|
+
const shouldIgnoreProp = /*@__PURE__*/ (0, _vue_shared.makeMap)(`,key,ref,innerHTML,textContent,ref_key,ref_for`);
|
|
47
47
|
function ssrRenderAttrs(props, tag) {
|
|
48
48
|
let ret = "";
|
|
49
49
|
for (let key in props) {
|
|
@@ -61,7 +61,7 @@ function ssrRenderAttrs(props, tag) {
|
|
|
61
61
|
function ssrRenderDynamicAttr(key, value, tag) {
|
|
62
62
|
if (!(0, _vue_shared.isRenderableAttrValue)(value)) return ``;
|
|
63
63
|
const attrKey = tag && (tag.indexOf("-") > 0 || (0, _vue_shared.isSVGTag)(tag)) ? key : _vue_shared.propsToAttrMap[key] || key.toLowerCase();
|
|
64
|
-
if ((0, _vue_shared.isBooleanAttr)(attrKey)) return (0, _vue_shared.includeBooleanAttr)(value) ? ` ${attrKey}` : ``;
|
|
64
|
+
if ((0, _vue_shared.isBooleanAttr)(attrKey) || attrKey === "hidden" && (typeof value === "boolean" || typeof value === "number")) return (0, _vue_shared.includeBooleanAttr)(value) ? ` ${attrKey}` : ``;
|
|
65
65
|
else if ((0, _vue_shared.isSSRSafeAttrName)(attrKey)) return value === "" ? ` ${attrKey}` : ` ${attrKey}="${(0, _vue_shared.escapeHtml)(value)}"`;
|
|
66
66
|
else {
|
|
67
67
|
console.warn(`[@vue/server-renderer] Skipped rendering unsafe attribute name: ${attrKey}`);
|
|
@@ -78,7 +78,8 @@ function ssrRenderClass(raw) {
|
|
|
78
78
|
function ssrRenderStyle(raw) {
|
|
79
79
|
if (!raw) return "";
|
|
80
80
|
if ((0, _vue_shared.isString)(raw)) return (0, _vue_shared.escapeHtml)(raw);
|
|
81
|
-
|
|
81
|
+
const styles = (0, _vue_shared.normalizeStyle)(ssrResetCssVars(raw));
|
|
82
|
+
return (0, _vue_shared.escapeHtml)((0, _vue_shared.stringifyStyle)(styles));
|
|
82
83
|
}
|
|
83
84
|
function ssrResetCssVars(raw) {
|
|
84
85
|
if (!(0, _vue_shared.isArray)(raw) && (0, _vue_shared.isObject)(raw)) {
|
|
@@ -90,53 +91,76 @@ function ssrResetCssVars(raw) {
|
|
|
90
91
|
return raw;
|
|
91
92
|
}
|
|
92
93
|
//#endregion
|
|
93
|
-
//#region packages/server-renderer/src/helpers/ssrRenderComponent.ts
|
|
94
|
-
function ssrRenderComponent(comp, props = null, children = null, parentComponent = null, slotScopeId) {
|
|
95
|
-
return renderComponentVNode((0, vue.createVNode)(comp, props, children), parentComponent, slotScopeId);
|
|
96
|
-
}
|
|
97
|
-
//#endregion
|
|
98
94
|
//#region packages/server-renderer/src/helpers/ssrRenderSlot.ts
|
|
99
|
-
const { ensureValidVNode } =
|
|
95
|
+
const { ensureValidVNode, rawVaporSlotKey: rawVaporSlotKey$1 } = _vue_runtime_dom.ssrUtils;
|
|
96
|
+
let vaporSlots = 0;
|
|
100
97
|
function ssrRenderSlot(slots, slotName, slotProps, fallbackRenderFn, push, parentComponent, slotScopeId) {
|
|
101
|
-
push(`<!--[-->`);
|
|
102
98
|
ssrRenderSlotInner(slots, slotName, slotProps, fallbackRenderFn, push, parentComponent, slotScopeId);
|
|
103
|
-
push(`<!--]-->`);
|
|
104
99
|
}
|
|
105
100
|
function ssrRenderSlotInner(slots, slotName, slotProps, fallbackRenderFn, push, parentComponent, slotScopeId, transition) {
|
|
106
101
|
const slotFn = slots[slotName];
|
|
102
|
+
let fallback = false;
|
|
107
103
|
if (slotFn) {
|
|
104
|
+
if (slotFn[rawVaporSlotKey$1]) vaporSlots++;
|
|
105
|
+
const before = vaporSlots;
|
|
108
106
|
const slotBuffer = [];
|
|
109
107
|
const bufferedPush = (item) => {
|
|
110
108
|
slotBuffer.push(item);
|
|
111
109
|
};
|
|
112
|
-
const ret = slotFn(slotProps, bufferedPush, parentComponent, slotScopeId ? " " + slotScopeId : "");
|
|
110
|
+
const ret = slotFn(slotProps || {}, bufferedPush, parentComponent, slotScopeId ? " " + slotScopeId : "");
|
|
111
|
+
let vnodes;
|
|
113
112
|
if ((0, _vue_shared.isArray)(ret)) {
|
|
114
|
-
|
|
115
|
-
if (
|
|
113
|
+
vnodes = ensureValidVNode(ret);
|
|
114
|
+
if (vnodes && isVaporSlotContent(vnodes)) {
|
|
115
|
+
renderVNodeChildren(bufferedPush, vnodes, parentComponent, slotScopeId);
|
|
116
|
+
vnodes = void 0;
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
if (vnodes !== void 0) {
|
|
120
|
+
if (!transition) {
|
|
121
|
+
fallback = !vnodes && !!fallbackRenderFn;
|
|
122
|
+
push(fallback ? `<!--(-->` : `<!--[-->`);
|
|
123
|
+
}
|
|
124
|
+
if (vnodes) renderVNodeChildren(push, vnodes, parentComponent, slotScopeId);
|
|
116
125
|
else if (fallbackRenderFn) fallbackRenderFn();
|
|
117
126
|
else if (transition) push(`<!---->`);
|
|
118
127
|
} else {
|
|
119
128
|
let isEmptySlot = true;
|
|
120
|
-
|
|
129
|
+
const owner = (0, _vue_runtime_dom.getCurrentInstance)();
|
|
130
|
+
if (transition || !(owner && owner.type.__vapor) && !fallbackRenderFn && vaporSlots !== before) isEmptySlot = false;
|
|
121
131
|
else for (let i = 0; i < slotBuffer.length; i++) if (!isComment(slotBuffer[i])) {
|
|
122
132
|
isEmptySlot = false;
|
|
123
133
|
break;
|
|
124
134
|
}
|
|
135
|
+
if (!transition) {
|
|
136
|
+
fallback = isEmptySlot && !!fallbackRenderFn;
|
|
137
|
+
push(fallback ? `<!--(-->` : `<!--[-->`);
|
|
138
|
+
}
|
|
125
139
|
if (isEmptySlot) {
|
|
126
140
|
if (fallbackRenderFn) fallbackRenderFn();
|
|
127
141
|
} else {
|
|
128
142
|
let start = 0;
|
|
129
143
|
let end = slotBuffer.length;
|
|
130
|
-
if (transition
|
|
131
|
-
|
|
132
|
-
end
|
|
144
|
+
if (transition) {
|
|
145
|
+
const first = slotBuffer[0];
|
|
146
|
+
if ((first === "<!--[-->" || first === "<!--(-->") && slotBuffer[end - 1] === (first === "<!--(-->" ? "<!--)-->" : "<!--]-->")) {
|
|
147
|
+
start++;
|
|
148
|
+
end--;
|
|
149
|
+
}
|
|
133
150
|
}
|
|
134
151
|
if (start < end) for (let i = start; i < end; i++) push(slotBuffer[i]);
|
|
135
152
|
else if (transition) push(`<!---->`);
|
|
136
153
|
}
|
|
137
154
|
}
|
|
138
|
-
} else
|
|
139
|
-
|
|
155
|
+
} else {
|
|
156
|
+
if (!transition) {
|
|
157
|
+
fallback = !!fallbackRenderFn;
|
|
158
|
+
push(fallback ? `<!--(-->` : `<!--[-->`);
|
|
159
|
+
}
|
|
160
|
+
if (fallbackRenderFn) fallbackRenderFn();
|
|
161
|
+
else if (transition) push(`<!---->`);
|
|
162
|
+
}
|
|
163
|
+
if (!transition) push(fallback ? `<!--)-->` : `<!--]-->`);
|
|
140
164
|
}
|
|
141
165
|
const commentTestRE = /^<!--[\s\S]*-->$/;
|
|
142
166
|
const commentRE = /<!--[^]*?-->/gm;
|
|
@@ -146,10 +170,20 @@ function isComment(item) {
|
|
|
146
170
|
return !item.replace(commentRE, "").trim();
|
|
147
171
|
}
|
|
148
172
|
//#endregion
|
|
173
|
+
//#region packages/server-renderer/src/helpers/ssrRenderComponent.ts
|
|
174
|
+
function ssrRenderComponent(comp, props = null, children = null, parentComponent = null, slotScopeId) {
|
|
175
|
+
if ((0, _vue_shared.isString)(comp)) {
|
|
176
|
+
const { getBuffer, push } = createBuffer();
|
|
177
|
+
renderVNode(push, (0, _vue_runtime_dom.createVNode)(comp, props, children), parentComponent, slotScopeId);
|
|
178
|
+
return getBuffer();
|
|
179
|
+
}
|
|
180
|
+
return renderComponentVNode((0, _vue_runtime_dom.createVNode)(comp, props, children), parentComponent, slotScopeId);
|
|
181
|
+
}
|
|
182
|
+
//#endregion
|
|
149
183
|
//#region packages/server-renderer/src/helpers/ssrRenderTeleport.ts
|
|
150
184
|
function ssrRenderTeleport(parentPush, contentRenderFn, target, disabled, parentComponent) {
|
|
151
185
|
parentPush("<!--teleport start-->");
|
|
152
|
-
const context = parentComponent.appContext.provides[
|
|
186
|
+
const context = parentComponent.appContext.provides[_vue_runtime_dom.ssrContextKey];
|
|
153
187
|
const teleportBuffers = context.__teleportBuffers || (context.__teleportBuffers = {});
|
|
154
188
|
const targetBuffer = teleportBuffers[target] || (teleportBuffers[target] = []);
|
|
155
189
|
const bufferIndex = targetBuffer.length;
|
|
@@ -165,6 +199,7 @@ function ssrRenderTeleport(parentPush, contentRenderFn, target, disabled, parent
|
|
|
165
199
|
teleportContent = getBuffer();
|
|
166
200
|
}
|
|
167
201
|
targetBuffer.splice(bufferIndex, 0, teleportContent);
|
|
202
|
+
if ((0, _vue_shared.isPromise)(teleportContent) || (0, _vue_shared.isArray)(teleportContent) && teleportContent.hasAsync) targetBuffer.hasAsync = true;
|
|
168
203
|
parentPush("<!--teleport end-->");
|
|
169
204
|
}
|
|
170
205
|
//#endregion
|
|
@@ -173,291 +208,31 @@ function ssrInterpolate(value) {
|
|
|
173
208
|
return (0, _vue_shared.escapeHtml)((0, _vue_shared.toDisplayString)(value));
|
|
174
209
|
}
|
|
175
210
|
//#endregion
|
|
176
|
-
//#region packages/reactivity/src/system.ts
|
|
177
|
-
let activeSub = void 0;
|
|
178
|
-
function setActiveSub(sub) {
|
|
179
|
-
try {
|
|
180
|
-
return activeSub;
|
|
181
|
-
} finally {
|
|
182
|
-
activeSub = sub;
|
|
183
|
-
}
|
|
184
|
-
}
|
|
185
|
-
//#endregion
|
|
186
|
-
//#region packages/reactivity/src/reactive.ts
|
|
187
|
-
/**
|
|
188
|
-
* Returns the raw, original object of a Vue-created proxy.
|
|
189
|
-
*
|
|
190
|
-
* `toRaw()` can return the original object from proxies created by
|
|
191
|
-
* {@link reactive}, {@link readonly}, {@link shallowReactive} or
|
|
192
|
-
* {@link shallowReadonly}.
|
|
193
|
-
*
|
|
194
|
-
* This is an escape hatch that can be used to temporarily read without
|
|
195
|
-
* incurring proxy access / tracking overhead or write without triggering
|
|
196
|
-
* changes. It is **not** recommended to hold a persistent reference to the
|
|
197
|
-
* original object. Use with caution.
|
|
198
|
-
*
|
|
199
|
-
* @example
|
|
200
|
-
* ```js
|
|
201
|
-
* const foo = {}
|
|
202
|
-
* const reactiveFoo = reactive(foo)
|
|
203
|
-
*
|
|
204
|
-
* console.log(toRaw(reactiveFoo) === foo) // true
|
|
205
|
-
* ```
|
|
206
|
-
*
|
|
207
|
-
* @param observed - The object for which the "raw" value is requested.
|
|
208
|
-
* @see {@link https://vuejs.org/api/reactivity-advanced.html#toraw}
|
|
209
|
-
*/
|
|
210
|
-
/* @__NO_SIDE_EFFECTS__ */
|
|
211
|
-
function toRaw(observed) {
|
|
212
|
-
const raw = observed && observed["__v_raw"];
|
|
213
|
-
return raw ? /* @__PURE__ */ toRaw(raw) : observed;
|
|
214
|
-
}
|
|
215
|
-
//#endregion
|
|
216
|
-
//#region packages/reactivity/src/ref.ts
|
|
217
|
-
/* @__NO_SIDE_EFFECTS__ */
|
|
218
|
-
function isRef(r) {
|
|
219
|
-
return r ? r["__v_isRef"] === true : false;
|
|
220
|
-
}
|
|
221
|
-
//#endregion
|
|
222
|
-
//#region packages/runtime-core/src/warning.ts
|
|
223
|
-
const stack = [];
|
|
224
|
-
/**
|
|
225
|
-
* @internal
|
|
226
|
-
*/
|
|
227
|
-
function pushWarningContext$1(ctx) {
|
|
228
|
-
stack.push(ctx);
|
|
229
|
-
}
|
|
230
|
-
/**
|
|
231
|
-
* @internal
|
|
232
|
-
*/
|
|
233
|
-
function popWarningContext$1() {
|
|
234
|
-
stack.pop();
|
|
235
|
-
}
|
|
236
|
-
let isWarning = false;
|
|
237
|
-
function warn$3(msg, ...args) {
|
|
238
|
-
if (isWarning) return;
|
|
239
|
-
isWarning = true;
|
|
240
|
-
const prevSub = setActiveSub();
|
|
241
|
-
const entry = stack.length ? stack[stack.length - 1] : null;
|
|
242
|
-
const instance = isVNode$2(entry) ? entry.component : entry;
|
|
243
|
-
const appWarnHandler = instance && instance.appContext.config.warnHandler;
|
|
244
|
-
const trace = getComponentTrace();
|
|
245
|
-
if (appWarnHandler) callWithErrorHandling(appWarnHandler, instance, 11, [
|
|
246
|
-
msg + args.map((a) => {
|
|
247
|
-
const toString = a.toString;
|
|
248
|
-
return toString == null ? JSON.stringify(a) : toString.call(a);
|
|
249
|
-
}).join(""),
|
|
250
|
-
instance && instance.proxy || instance,
|
|
251
|
-
trace.map(({ ctx }) => `at <${formatComponentName(instance, ctx.type)}>`).join("\n"),
|
|
252
|
-
trace
|
|
253
|
-
]);
|
|
254
|
-
else {
|
|
255
|
-
const warnArgs = [`[Vue warn]: ${msg}`, ...args];
|
|
256
|
-
if (trace.length && true)
|
|
257
|
-
/* v8 ignore next 2 */
|
|
258
|
-
warnArgs.push(`\n`, ...formatTrace(trace));
|
|
259
|
-
console.warn(...warnArgs);
|
|
260
|
-
}
|
|
261
|
-
setActiveSub(prevSub);
|
|
262
|
-
isWarning = false;
|
|
263
|
-
}
|
|
264
|
-
function getComponentTrace() {
|
|
265
|
-
let currentCtx = stack[stack.length - 1];
|
|
266
|
-
if (!currentCtx) return [];
|
|
267
|
-
const normalizedStack = [];
|
|
268
|
-
while (currentCtx) {
|
|
269
|
-
const last = normalizedStack[0];
|
|
270
|
-
if (last && last.ctx === currentCtx) last.recurseCount++;
|
|
271
|
-
else normalizedStack.push({
|
|
272
|
-
ctx: currentCtx,
|
|
273
|
-
recurseCount: 0
|
|
274
|
-
});
|
|
275
|
-
if (isVNode$2(currentCtx)) {
|
|
276
|
-
const parent = currentCtx.component && currentCtx.component.parent;
|
|
277
|
-
currentCtx = parent && parent.vnode || parent;
|
|
278
|
-
} else currentCtx = currentCtx.parent;
|
|
279
|
-
}
|
|
280
|
-
return normalizedStack;
|
|
281
|
-
}
|
|
282
|
-
/* v8 ignore start */
|
|
283
|
-
function formatTrace(trace) {
|
|
284
|
-
const logs = [];
|
|
285
|
-
trace.forEach((entry, i) => {
|
|
286
|
-
logs.push(...i === 0 ? [] : [`\n`], ...formatTraceEntry(entry));
|
|
287
|
-
});
|
|
288
|
-
return logs;
|
|
289
|
-
}
|
|
290
|
-
function formatTraceEntry({ ctx, recurseCount }) {
|
|
291
|
-
const postfix = recurseCount > 0 ? `... (${recurseCount} recursive calls)` : ``;
|
|
292
|
-
const instance = isVNode$2(ctx) ? ctx.component : ctx;
|
|
293
|
-
const isRoot = instance ? instance.parent == null : false;
|
|
294
|
-
const open = ` at <${formatComponentName(instance, ctx.type, isRoot)}`;
|
|
295
|
-
const close = `>` + postfix;
|
|
296
|
-
return ctx.props ? [
|
|
297
|
-
open,
|
|
298
|
-
...formatProps(ctx.props),
|
|
299
|
-
close
|
|
300
|
-
] : [open + close];
|
|
301
|
-
}
|
|
302
|
-
function formatProps(props) {
|
|
303
|
-
const res = [];
|
|
304
|
-
const keys = Object.keys(props);
|
|
305
|
-
keys.slice(0, 3).forEach((key) => {
|
|
306
|
-
res.push(...formatProp(key, props[key]));
|
|
307
|
-
});
|
|
308
|
-
if (keys.length > 3) res.push(` ...`);
|
|
309
|
-
return res;
|
|
310
|
-
}
|
|
311
|
-
function formatProp(key, value, raw) {
|
|
312
|
-
if ((0, _vue_shared.isString)(value)) {
|
|
313
|
-
value = JSON.stringify(value);
|
|
314
|
-
return raw ? value : [`${key}=${value}`];
|
|
315
|
-
} else if (typeof value === "number" || typeof value === "boolean" || value == null) return raw ? value : [`${key}=${value}`];
|
|
316
|
-
else if (/* @__PURE__ */ isRef(value)) {
|
|
317
|
-
value = formatProp(key, /* @__PURE__ */ toRaw(value.value), true);
|
|
318
|
-
return raw ? value : [
|
|
319
|
-
`${key}=Ref<`,
|
|
320
|
-
value,
|
|
321
|
-
`>`
|
|
322
|
-
];
|
|
323
|
-
} else if ((0, _vue_shared.isFunction)(value)) return [`${key}=fn${value.name ? `<${value.name}>` : ``}`];
|
|
324
|
-
else {
|
|
325
|
-
value = /* @__PURE__ */ toRaw(value);
|
|
326
|
-
return raw ? value : [`${key}=`, value];
|
|
327
|
-
}
|
|
328
|
-
}
|
|
329
|
-
/* v8 ignore stop */
|
|
330
|
-
//#endregion
|
|
331
|
-
//#region packages/runtime-core/src/errorHandling.ts
|
|
332
|
-
const ErrorTypeStrings = {
|
|
333
|
-
["sp"]: "serverPrefetch hook",
|
|
334
|
-
["bc"]: "beforeCreate hook",
|
|
335
|
-
["c"]: "created hook",
|
|
336
|
-
["bm"]: "beforeMount hook",
|
|
337
|
-
["m"]: "mounted hook",
|
|
338
|
-
["bu"]: "beforeUpdate hook",
|
|
339
|
-
["u"]: "updated",
|
|
340
|
-
["bum"]: "beforeUnmount hook",
|
|
341
|
-
["um"]: "unmounted hook",
|
|
342
|
-
["a"]: "activated hook",
|
|
343
|
-
["da"]: "deactivated hook",
|
|
344
|
-
["ec"]: "errorCaptured hook",
|
|
345
|
-
["rtc"]: "renderTracked hook",
|
|
346
|
-
["rtg"]: "renderTriggered hook",
|
|
347
|
-
[0]: "setup function",
|
|
348
|
-
[1]: "render function",
|
|
349
|
-
[2]: "watcher getter",
|
|
350
|
-
[3]: "watcher callback",
|
|
351
|
-
[4]: "watcher cleanup function",
|
|
352
|
-
[5]: "native event handler",
|
|
353
|
-
[6]: "component event handler",
|
|
354
|
-
[7]: "vnode hook",
|
|
355
|
-
[8]: "directive hook",
|
|
356
|
-
[9]: "transition hook",
|
|
357
|
-
[10]: "app errorHandler",
|
|
358
|
-
[11]: "app warnHandler",
|
|
359
|
-
[12]: "ref function",
|
|
360
|
-
[13]: "async component loader",
|
|
361
|
-
[14]: "scheduler flush",
|
|
362
|
-
[15]: "component update",
|
|
363
|
-
[16]: "app unmount cleanup function"
|
|
364
|
-
};
|
|
365
|
-
function callWithErrorHandling(fn, instance, type, args) {
|
|
366
|
-
try {
|
|
367
|
-
return args ? fn(...args) : fn();
|
|
368
|
-
} catch (err) {
|
|
369
|
-
handleError(err, instance, type);
|
|
370
|
-
}
|
|
371
|
-
}
|
|
372
|
-
function handleError(err, instance, type, throwInDev = true) {
|
|
373
|
-
const { errorHandler, throwUnhandledErrorInProduction } = instance && instance.appContext.config || _vue_shared.EMPTY_OBJ;
|
|
374
|
-
if (instance) {
|
|
375
|
-
let cur = instance.parent;
|
|
376
|
-
const exposedInstance = instance.proxy || instance;
|
|
377
|
-
const errorInfo = ErrorTypeStrings[type];
|
|
378
|
-
while (cur) {
|
|
379
|
-
const errorCapturedHooks = cur.ec;
|
|
380
|
-
if (errorCapturedHooks) {
|
|
381
|
-
for (let i = 0; i < errorCapturedHooks.length; i++) if (errorCapturedHooks[i](err, exposedInstance, errorInfo) === false) return;
|
|
382
|
-
}
|
|
383
|
-
cur = cur.parent;
|
|
384
|
-
}
|
|
385
|
-
if (errorHandler) {
|
|
386
|
-
const prevSub = setActiveSub();
|
|
387
|
-
callWithErrorHandling(errorHandler, null, 10, [
|
|
388
|
-
err,
|
|
389
|
-
exposedInstance,
|
|
390
|
-
errorInfo
|
|
391
|
-
]);
|
|
392
|
-
setActiveSub(prevSub);
|
|
393
|
-
return;
|
|
394
|
-
}
|
|
395
|
-
}
|
|
396
|
-
logError(err, type, instance, throwInDev, throwUnhandledErrorInProduction);
|
|
397
|
-
}
|
|
398
|
-
function logError(err, type, instance, throwInDev = true, throwInProd = false) {
|
|
399
|
-
{
|
|
400
|
-
const info = ErrorTypeStrings[type];
|
|
401
|
-
if (instance) pushWarningContext$1(instance);
|
|
402
|
-
warn$3(`Unhandled error${info ? ` during execution of ${info}` : ``}`);
|
|
403
|
-
if (instance) popWarningContext$1();
|
|
404
|
-
if (throwInDev) throw err;
|
|
405
|
-
else console.error(err);
|
|
406
|
-
}
|
|
407
|
-
}
|
|
408
|
-
//#endregion
|
|
409
|
-
//#region packages/runtime-core/src/vnode.ts
|
|
410
|
-
function isVNode$2(value) {
|
|
411
|
-
return value ? value.__v_isVNode === true : false;
|
|
412
|
-
}
|
|
413
|
-
//#endregion
|
|
414
|
-
//#region packages/runtime-core/src/component.ts
|
|
415
|
-
const classifyRE = /(?:^|[-_])\w/g;
|
|
416
|
-
const classify = (str) => str.replace(classifyRE, (c) => c.toUpperCase()).replace(/[-_]/g, "");
|
|
417
|
-
function getComponentName(Component, includeInferred = true) {
|
|
418
|
-
return (0, _vue_shared.isFunction)(Component) ? Component.displayName || Component.name : Component.name || includeInferred && Component.__name;
|
|
419
|
-
}
|
|
420
|
-
function formatComponentName(instance, Component, isRoot = false) {
|
|
421
|
-
let name = getComponentName(Component);
|
|
422
|
-
if (!name && Component.__file) {
|
|
423
|
-
const match = Component.__file.match(/([^/\\]+)\.\w+$/);
|
|
424
|
-
if (match) name = match[1];
|
|
425
|
-
}
|
|
426
|
-
if (!name && instance) {
|
|
427
|
-
const inferFromRegistry = (registry) => {
|
|
428
|
-
for (const key in registry) if (registry[key] === Component) return key;
|
|
429
|
-
};
|
|
430
|
-
name = inferFromRegistry(instance.components) || instance.parent && inferFromRegistry(instance.parent.type.components) || inferFromRegistry(instance.appContext.components);
|
|
431
|
-
}
|
|
432
|
-
return name ? classify(name) : isRoot ? `App` : `Anonymous`;
|
|
433
|
-
}
|
|
434
|
-
//#endregion
|
|
435
|
-
//#region packages/runtime-core/src/index.ts
|
|
436
|
-
const warn$2 = warn$3;
|
|
437
|
-
//#endregion
|
|
438
211
|
//#region packages/server-renderer/src/helpers/ssrRenderList.ts
|
|
439
212
|
function ssrRenderList(source, renderItem) {
|
|
440
213
|
if ((0, _vue_shared.isArray)(source) || (0, _vue_shared.isString)(source)) for (let i = 0, l = source.length; i < l; i++) renderItem(source[i], i);
|
|
441
214
|
else if (typeof source === "number") {
|
|
442
215
|
if (!Number.isInteger(source) || source < 0) {
|
|
443
|
-
warn
|
|
216
|
+
(0, _vue_runtime_dom.warn)(`The v-for range expects a positive integer value but got ${source}.`);
|
|
444
217
|
return;
|
|
445
218
|
}
|
|
446
219
|
for (let i = 0; i < source; i++) renderItem(i + 1, i);
|
|
447
|
-
} else if ((0, _vue_shared.isObject)(source))
|
|
448
|
-
|
|
449
|
-
|
|
450
|
-
|
|
451
|
-
|
|
452
|
-
|
|
453
|
-
|
|
454
|
-
|
|
220
|
+
} else if ((0, _vue_shared.isObject)(source)) {
|
|
221
|
+
if (source[Symbol.iterator]) {
|
|
222
|
+
let i = 0;
|
|
223
|
+
for (const item of source) renderItem(item, i++);
|
|
224
|
+
} else {
|
|
225
|
+
const keys = Object.keys(source);
|
|
226
|
+
for (let i = 0, l = keys.length; i < l; i++) {
|
|
227
|
+
const key = keys[i];
|
|
228
|
+
renderItem(source[key], key, i);
|
|
229
|
+
}
|
|
455
230
|
}
|
|
456
231
|
}
|
|
457
232
|
}
|
|
458
233
|
//#endregion
|
|
459
234
|
//#region packages/server-renderer/src/helpers/ssrRenderSuspense.ts
|
|
460
|
-
|
|
235
|
+
function ssrRenderSuspense(push, { default: renderContent }) {
|
|
461
236
|
if (renderContent) renderContent();
|
|
462
237
|
else push(`<!---->`);
|
|
463
238
|
}
|
|
@@ -466,7 +241,7 @@ async function ssrRenderSuspense(push, { default: renderContent }) {
|
|
|
466
241
|
function ssrGetDirectiveProps(instance, dir, value, arg, modifiers = {}) {
|
|
467
242
|
if (typeof dir !== "function" && dir.getSSRProps) return dir.getSSRProps({
|
|
468
243
|
dir,
|
|
469
|
-
instance:
|
|
244
|
+
instance: _vue_runtime_dom.ssrUtils.getComponentPublicInstance(instance.$),
|
|
470
245
|
value,
|
|
471
246
|
oldValue: void 0,
|
|
472
247
|
arg,
|
|
@@ -543,12 +318,12 @@ function ssrCompile(template, instance) {
|
|
|
543
318
|
{
|
|
544
319
|
const message = `[@vue/server-renderer] Template compilation error: ${err.message}`;
|
|
545
320
|
const codeFrame = err.loc && (0, _vue_shared.generateCodeFrame)(template, err.loc.start.offset, err.loc.end.offset);
|
|
546
|
-
(0,
|
|
321
|
+
(0, _vue_runtime_dom.warn)(codeFrame ? `${message}\n${codeFrame}` : message);
|
|
547
322
|
}
|
|
548
323
|
};
|
|
549
324
|
const { code } = (0, _vue_compiler_ssr.compile)(template, finalCompilerOptions);
|
|
550
325
|
const requireMap = {
|
|
551
|
-
vue,
|
|
326
|
+
vue: _vue_runtime_dom,
|
|
552
327
|
"vue/server-renderer": internal_exports
|
|
553
328
|
};
|
|
554
329
|
const fakeRequire = (id) => requireMap[id];
|
|
@@ -556,7 +331,7 @@ function ssrCompile(template, instance) {
|
|
|
556
331
|
}
|
|
557
332
|
//#endregion
|
|
558
333
|
//#region packages/server-renderer/src/render.ts
|
|
559
|
-
const { createComponentInstance, setCurrentRenderingInstance, setupComponent, renderComponentRoot, normalizeVNode, pushWarningContext, popWarningContext } =
|
|
334
|
+
const { createComponentInstance, setCurrentRenderingInstance, setupComponent, renderComponentRoot, isVNode: isVNode$2, normalizeVNode, pushWarningContext, popWarningContext, VaporSlot, rawVaporSlotKey, invokeSlotFallback } = _vue_runtime_dom.ssrUtils;
|
|
560
335
|
function cleanupContext(context) {
|
|
561
336
|
let firstError;
|
|
562
337
|
if (context.__watcherHandles) {
|
|
@@ -596,9 +371,43 @@ function createBuffer() {
|
|
|
596
371
|
}
|
|
597
372
|
};
|
|
598
373
|
}
|
|
374
|
+
const vaporOutlets = /* @__PURE__ */ new WeakMap();
|
|
375
|
+
const vaporInterface = { attachSlotOutlet(content, fallback, owner) {
|
|
376
|
+
const lone = isVaporSlotContent(content);
|
|
377
|
+
if (lone) vaporOutlets.set(content, {
|
|
378
|
+
fallback,
|
|
379
|
+
owner
|
|
380
|
+
});
|
|
381
|
+
return lone;
|
|
382
|
+
} };
|
|
383
|
+
function isVaporSlotContent(children) {
|
|
384
|
+
const lone = findVaporSlot(children);
|
|
385
|
+
vaporSlot = null;
|
|
386
|
+
return lone;
|
|
387
|
+
}
|
|
388
|
+
let vaporSlot = null;
|
|
389
|
+
function findVaporSlot(children) {
|
|
390
|
+
for (let i = 0; i < children.length; i++) {
|
|
391
|
+
const child = children[i];
|
|
392
|
+
if (!isVNode$2(child)) return false;
|
|
393
|
+
if (child.type === VaporSlot) {
|
|
394
|
+
if (vaporSlot) return false;
|
|
395
|
+
vaporSlot = child;
|
|
396
|
+
} else if (child.type === _vue_runtime_dom.Fragment) {
|
|
397
|
+
if (child.patchFlag > 0 && child.patchFlag & 384 || !findVaporSlot(child.children)) return false;
|
|
398
|
+
} else if (child.type !== _vue_runtime_dom.Comment) return false;
|
|
399
|
+
}
|
|
400
|
+
return true;
|
|
401
|
+
}
|
|
599
402
|
function renderComponentVNode(vnode, parentComponent = null, slotScopeId) {
|
|
403
|
+
const ctx = vnode.ctx;
|
|
404
|
+
if (vnode.shapeFlag & 32 && ctx && ctx.type.__vapor) {
|
|
405
|
+
const slots = vnode.children;
|
|
406
|
+
for (const name in slots) if ((0, _vue_shared.isFunction)(slots[name])) slots[name][rawVaporSlotKey] = slots[name];
|
|
407
|
+
if (!ctx.appContext.vapor) ctx.appContext.vapor = vaporInterface;
|
|
408
|
+
}
|
|
600
409
|
const instance = vnode.component = createComponentInstance(vnode, parentComponent, null);
|
|
601
|
-
const context = instance.appContext.provides[
|
|
410
|
+
const context = instance.appContext.provides[_vue_runtime_dom.ssrContextKey];
|
|
602
411
|
if (context) (context.__instanceScopes || (context.__instanceScopes = [])).push(instance.scope);
|
|
603
412
|
pushWarningContext(vnode);
|
|
604
413
|
const res = setupComponent(instance, true);
|
|
@@ -609,7 +418,11 @@ function renderComponentVNode(vnode, parentComponent = null, slotScopeId) {
|
|
|
609
418
|
if (hasAsyncSetup) prefetches = instance.sp;
|
|
610
419
|
if (prefetches) return Promise.all(prefetches.map((prefetch) => prefetch.call(instance.proxy)));
|
|
611
420
|
}).catch(_vue_shared.NOOP).then(() => renderComponentSubTree(instance, slotScopeId));
|
|
612
|
-
else
|
|
421
|
+
else try {
|
|
422
|
+
return renderComponentSubTree(instance, slotScopeId);
|
|
423
|
+
} catch (err) {
|
|
424
|
+
return Promise.reject(err);
|
|
425
|
+
}
|
|
613
426
|
}
|
|
614
427
|
function renderComponentSubTree(instance, slotScopeId) {
|
|
615
428
|
pushWarningContext(instance.vnode);
|
|
@@ -649,12 +462,15 @@ function renderComponentSubTree(instance, slotScopeId) {
|
|
|
649
462
|
const prev = setCurrentRenderingInstance(instance);
|
|
650
463
|
try {
|
|
651
464
|
ssrRender(instance.proxy, push, instance, attrs, instance.props, instance.setupState, instance.data, instance.ctx);
|
|
465
|
+
} catch (err) {
|
|
466
|
+
(0, _vue_runtime_dom.handleError)(err, instance, 1);
|
|
652
467
|
} finally {
|
|
653
468
|
setCurrentRenderingInstance(prev);
|
|
654
469
|
}
|
|
655
470
|
} else if (instance.render && instance.render !== _vue_shared.NOOP) renderVNode(push, instance.subTree = renderComponentRoot(instance), instance, slotScopeId);
|
|
656
471
|
else {
|
|
657
|
-
|
|
472
|
+
const componentName = comp.name || comp.__file || `<Anonymous>`;
|
|
473
|
+
(0, _vue_runtime_dom.warn)(`Component ${componentName} is missing template or render function.`);
|
|
658
474
|
push(`<!---->`);
|
|
659
475
|
}
|
|
660
476
|
}
|
|
@@ -665,28 +481,46 @@ function renderVNode(push, vnode, parentComponent, slotScopeId) {
|
|
|
665
481
|
const { type, shapeFlag, children, dirs, props } = vnode;
|
|
666
482
|
if (dirs) vnode.props = applySSRDirectives(vnode, props, dirs);
|
|
667
483
|
switch (type) {
|
|
668
|
-
case
|
|
484
|
+
case _vue_runtime_dom.Text:
|
|
669
485
|
push((0, _vue_shared.escapeHtml)(children));
|
|
670
486
|
break;
|
|
671
|
-
case
|
|
487
|
+
case _vue_runtime_dom.Comment:
|
|
672
488
|
push(children ? `<!--${(0, _vue_shared.escapeHtmlComment)(children)}-->` : `<!---->`);
|
|
673
489
|
break;
|
|
674
|
-
case
|
|
490
|
+
case _vue_runtime_dom.Static:
|
|
675
491
|
push(children);
|
|
676
492
|
break;
|
|
677
|
-
case
|
|
493
|
+
case _vue_runtime_dom.Fragment: {
|
|
678
494
|
if (vnode.slotScopeIds) slotScopeId = (slotScopeId ? slotScopeId + " " : "") + vnode.slotScopeIds.join(" ");
|
|
679
|
-
|
|
495
|
+
const outlet = vnode.vo && vaporOutlets.get(children);
|
|
496
|
+
if (outlet) {
|
|
497
|
+
renderVaporOutlet(push, (_, push) => renderVNodeChildren(push, children, parentComponent, slotScopeId), null, outlet, parentComponent, slotScopeId);
|
|
498
|
+
break;
|
|
499
|
+
}
|
|
500
|
+
const isFallback = shapeFlag & 1024;
|
|
501
|
+
push(isFallback ? `<!--(-->` : `<!--[-->`);
|
|
680
502
|
renderVNodeChildren(push, children, parentComponent, slotScopeId);
|
|
681
|
-
push(`<!--]-->`);
|
|
503
|
+
push(isFallback ? `<!--)-->` : `<!--]-->`);
|
|
504
|
+
break;
|
|
505
|
+
}
|
|
506
|
+
case VaporSlot: {
|
|
507
|
+
if (vnode.slotScopeIds) slotScopeId = (slotScopeId ? slotScopeId + " " : "") + vnode.slotScopeIds.join(" ");
|
|
508
|
+
const { slot, outlets } = vnode.vs;
|
|
509
|
+
renderVaporOutlet(push, slot, vnode.props, outlets && outlets[0], parentComponent, slotScopeId);
|
|
682
510
|
break;
|
|
511
|
+
}
|
|
683
512
|
default: if (shapeFlag & 1) renderElementVNode(push, vnode, parentComponent, slotScopeId);
|
|
684
513
|
else if (shapeFlag & 6) push(renderComponentVNode(vnode, parentComponent, slotScopeId));
|
|
685
514
|
else if (shapeFlag & 64) renderTeleportVNode(push, vnode, parentComponent, slotScopeId);
|
|
686
515
|
else if (shapeFlag & 128) renderVNode(push, vnode.ssContent, parentComponent, slotScopeId);
|
|
687
|
-
else (0,
|
|
516
|
+
else (0, _vue_runtime_dom.warn)("[@vue/server-renderer] Invalid VNode type:", type, `(${typeof type})`);
|
|
688
517
|
}
|
|
689
518
|
}
|
|
519
|
+
function renderVaporOutlet(push, slot, props, outlet, parentComponent, slotScopeId) {
|
|
520
|
+
const prev = setCurrentRenderingInstance(parentComponent);
|
|
521
|
+
ssrRenderSlot({ default: slot }, "default", props, outlet ? () => renderVNodeChildren(push, invokeSlotFallback(outlet.fallback, outlet.owner), parentComponent, slotScopeId) : null, push, parentComponent, slotScopeId);
|
|
522
|
+
setCurrentRenderingInstance(prev);
|
|
523
|
+
}
|
|
690
524
|
function renderVNodeChildren(push, children, parentComponent, slotScopeId) {
|
|
691
525
|
for (let i = 0; i < children.length; i++) renderVNode(push, normalizeVNode(children[i]), parentComponent, slotScopeId);
|
|
692
526
|
}
|
|
@@ -695,15 +529,25 @@ function renderElementVNode(push, vnode, parentComponent, slotScopeId) {
|
|
|
695
529
|
let { props, children, shapeFlag, scopeId } = vnode;
|
|
696
530
|
let openTag = `<${tag}`;
|
|
697
531
|
if (props) openTag += ssrRenderAttrs(props, tag);
|
|
698
|
-
|
|
532
|
+
const renderedScopeIds = [];
|
|
533
|
+
const appendScopeId = (id) => {
|
|
534
|
+
if (id && (!props || !(0, _vue_shared.hasOwn)(props, id)) && !renderedScopeIds.includes(id)) {
|
|
535
|
+
openTag += ` ${id}`;
|
|
536
|
+
renderedScopeIds.push(id);
|
|
537
|
+
}
|
|
538
|
+
};
|
|
539
|
+
if (scopeId) appendScopeId(scopeId);
|
|
699
540
|
let curParent = parentComponent;
|
|
700
541
|
let curVnode = vnode;
|
|
701
542
|
while (curParent && curVnode === curParent.subTree) {
|
|
702
543
|
curVnode = curParent.vnode;
|
|
703
|
-
if (curVnode.scopeId)
|
|
544
|
+
if (curVnode.scopeId) appendScopeId(curVnode.scopeId);
|
|
704
545
|
curParent = curParent.parent;
|
|
705
546
|
}
|
|
706
|
-
if (slotScopeId)
|
|
547
|
+
if (slotScopeId) {
|
|
548
|
+
const slotScopeIdList = slotScopeId.trim().split(" ");
|
|
549
|
+
for (let i = 0; i < slotScopeIdList.length; i++) appendScopeId(slotScopeIdList[i]);
|
|
550
|
+
}
|
|
707
551
|
push(openTag + `>`);
|
|
708
552
|
if (!(0, _vue_shared.isVoidTag)(tag)) {
|
|
709
553
|
let hasChildrenOverride = false;
|
|
@@ -736,17 +580,17 @@ function applySSRDirectives(vnode, rawProps, dirs) {
|
|
|
736
580
|
if (props) toMerge.push(props);
|
|
737
581
|
}
|
|
738
582
|
}
|
|
739
|
-
return (0,
|
|
583
|
+
return (0, _vue_runtime_dom.mergeProps)(rawProps || {}, ...toMerge);
|
|
740
584
|
}
|
|
741
585
|
function renderTeleportVNode(push, vnode, parentComponent, slotScopeId) {
|
|
742
586
|
const target = vnode.props && vnode.props.to;
|
|
743
587
|
const disabled = vnode.props && vnode.props.disabled;
|
|
744
588
|
if (!target) {
|
|
745
|
-
if (!disabled) (0,
|
|
589
|
+
if (!disabled) (0, _vue_runtime_dom.warn)(`[@vue/server-renderer] Teleport is missing target prop.`);
|
|
746
590
|
return [];
|
|
747
591
|
}
|
|
748
592
|
if (!(0, _vue_shared.isString)(target)) {
|
|
749
|
-
(0,
|
|
593
|
+
(0, _vue_runtime_dom.warn)(`[@vue/server-renderer] Teleport target must be a query selector string.`);
|
|
750
594
|
return [];
|
|
751
595
|
}
|
|
752
596
|
ssrRenderTeleport(push, (push) => {
|
|
@@ -755,7 +599,7 @@ function renderTeleportVNode(push, vnode, parentComponent, slotScopeId) {
|
|
|
755
599
|
}
|
|
756
600
|
//#endregion
|
|
757
601
|
//#region packages/server-renderer/src/renderToString.ts
|
|
758
|
-
const { isVNode: isVNode$1 } =
|
|
602
|
+
const { isVNode: isVNode$1 } = _vue_runtime_dom.ssrUtils;
|
|
759
603
|
function nestedUnrollBuffer(buffer, parentRet, startIndex) {
|
|
760
604
|
if (!buffer.hasAsync) return parentRet + unrollBufferSync$1(buffer);
|
|
761
605
|
let ret = parentRet;
|
|
@@ -791,10 +635,10 @@ function unrollBufferSync$1(buffer) {
|
|
|
791
635
|
return ret;
|
|
792
636
|
}
|
|
793
637
|
async function renderToString(input, context = {}) {
|
|
794
|
-
if (isVNode$1(input)) return renderToString((0,
|
|
795
|
-
const vnode = (0,
|
|
638
|
+
if (isVNode$1(input)) return renderToString((0, _vue_runtime_dom.createApp)({ render: () => input }), context);
|
|
639
|
+
const vnode = (0, _vue_runtime_dom.createVNode)(input._component, input._props);
|
|
796
640
|
vnode.appContext = input._context;
|
|
797
|
-
input.provide(
|
|
641
|
+
input.provide(_vue_runtime_dom.ssrContextKey, context);
|
|
798
642
|
try {
|
|
799
643
|
const result = await unrollBuffer$1(await renderComponentVNode(vnode));
|
|
800
644
|
await resolveTeleports(context);
|
|
@@ -806,12 +650,12 @@ async function renderToString(input, context = {}) {
|
|
|
806
650
|
async function resolveTeleports(context) {
|
|
807
651
|
if (context.__teleportBuffers) {
|
|
808
652
|
context.teleports = context.teleports || {};
|
|
809
|
-
for (const key in context.__teleportBuffers) context.teleports[key] = await unrollBuffer$1(
|
|
653
|
+
for (const key in context.__teleportBuffers) context.teleports[key] = await unrollBuffer$1(context.__teleportBuffers[key]);
|
|
810
654
|
}
|
|
811
655
|
}
|
|
812
656
|
//#endregion
|
|
813
657
|
//#region packages/server-renderer/src/renderToStream.ts
|
|
814
|
-
const { isVNode } =
|
|
658
|
+
const { isVNode } = _vue_runtime_dom.ssrUtils;
|
|
815
659
|
async function unrollBuffer(buffer, stream) {
|
|
816
660
|
if (buffer.hasAsync) for (let i = 0; i < buffer.length; i++) {
|
|
817
661
|
let item = buffer[i];
|
|
@@ -829,10 +673,10 @@ function unrollBufferSync(buffer, stream) {
|
|
|
829
673
|
}
|
|
830
674
|
}
|
|
831
675
|
function renderToSimpleStream(input, context, stream) {
|
|
832
|
-
if (isVNode(input)) return renderToSimpleStream((0,
|
|
833
|
-
const vnode = (0,
|
|
676
|
+
if (isVNode(input)) return renderToSimpleStream((0, _vue_runtime_dom.createApp)({ render: () => input }), context, stream);
|
|
677
|
+
const vnode = (0, _vue_runtime_dom.createVNode)(input._component, input._props);
|
|
834
678
|
vnode.appContext = input._context;
|
|
835
|
-
input.provide(
|
|
679
|
+
input.provide(_vue_runtime_dom.ssrContextKey, context);
|
|
836
680
|
let cleaned = false;
|
|
837
681
|
const finalize = () => {
|
|
838
682
|
if (cleaned) return;
|
|
@@ -916,7 +760,7 @@ function pipeToWebWritable(input, context = {}, writable) {
|
|
|
916
760
|
}
|
|
917
761
|
//#endregion
|
|
918
762
|
//#region packages/server-renderer/src/index.ts
|
|
919
|
-
(0,
|
|
763
|
+
(0, _vue_runtime_dom.initDirectivesForSSR)();
|
|
920
764
|
//#endregion
|
|
921
765
|
exports.pipeToNodeWritable = pipeToNodeWritable;
|
|
922
766
|
exports.pipeToWebWritable = pipeToWebWritable;
|