vue2/packages/vue-server-renderer/build.dev.js

8194 lines
275 KiB
JavaScript

'use strict';
Object.defineProperty(exports, '__esModule', { value: true });
var stream = require('stream');
var emptyObject = Object.freeze({});
// These helpers produce better VM code in JS engines due to their
// explicitness and function inlining.
function isUndef(v) {
return v === undefined || v === null;
}
function isDef(v) {
return v !== undefined && v !== null;
}
function isTrue(v) {
return v === true;
}
function isFalse(v) {
return v === false;
}
/**
* Check if value is primitive.
*/
function isPrimitive(value) {
return (typeof value === 'string' ||
typeof value === 'number' ||
// $flow-disable-line
typeof value === 'symbol' ||
typeof value === 'boolean');
}
/**
* Quick object check - this is primarily used to tell
* Objects from primitive values when we know the value
* is a JSON-compliant type.
*/
function isObject(obj) {
return obj !== null && typeof obj === 'object';
}
/**
* Get the raw type string of a value, e.g., [object Object].
*/
var _toString = Object.prototype.toString;
function toRawType(value) {
return _toString.call(value).slice(8, -1);
}
/**
* Strict object type check. Only returns true
* for plain JavaScript objects.
*/
function isPlainObject(obj) {
return _toString.call(obj) === '[object Object]';
}
/**
* Check if val is a valid array index.
*/
function isValidArrayIndex(val) {
var n = parseFloat(String(val));
return n >= 0 && Math.floor(n) === n && isFinite(val);
}
function isPromise(val) {
return (isDef(val) &&
typeof val.then === 'function' &&
typeof val.catch === 'function');
}
/**
* Convert a value to a string that is actually rendered.
*/
function toString(val) {
return val == null
? ''
: Array.isArray(val) || (isPlainObject(val) && val.toString === _toString)
? JSON.stringify(val, null, 2)
: String(val);
}
/**
* Convert an input value to a number for persistence.
* If the conversion fails, return original string.
*/
function toNumber(val) {
var n = parseFloat(val);
return isNaN(n) ? val : n;
}
/**
* Make a map and return a function for checking if a key
* is in that map.
*/
function makeMap(str, expectsLowerCase) {
var map = Object.create(null);
var list = str.split(',');
for (var i = 0; i < list.length; i++) {
map[list[i]] = true;
}
return expectsLowerCase ? function (val) { return map[val.toLowerCase()]; } : function (val) { return map[val]; };
}
/**
* Check if a tag is a built-in tag.
*/
var isBuiltInTag = makeMap('slot,component', true);
/**
* Check if an attribute is a reserved attribute.
*/
var isReservedAttribute = makeMap('key,ref,slot,slot-scope,is');
/**
* Remove an item from an array.
*/
function remove$1(arr, item) {
if (arr.length) {
var index = arr.indexOf(item);
if (index > -1) {
return arr.splice(index, 1);
}
}
}
/**
* Check whether an object has the property.
*/
var hasOwnProperty = Object.prototype.hasOwnProperty;
function hasOwn(obj, key) {
return hasOwnProperty.call(obj, key);
}
/**
* Create a cached version of a pure function.
*/
function cached(fn) {
var cache = Object.create(null);
return function cachedFn(str) {
var hit = cache[str];
return hit || (cache[str] = fn(str));
};
}
/**
* Camelize a hyphen-delimited string.
*/
var camelizeRE = /-(\w)/g;
var camelize = cached(function (str) {
return str.replace(camelizeRE, function (_, c) { return (c ? c.toUpperCase() : ''); });
});
/**
* Capitalize a string.
*/
var capitalize = cached(function (str) {
return str.charAt(0).toUpperCase() + str.slice(1);
});
/**
* Hyphenate a camelCase string.
*/
var hyphenateRE = /\B([A-Z])/g;
var hyphenate = cached(function (str) {
return str.replace(hyphenateRE, '-$1').toLowerCase();
});
/**
* Mix properties into target object.
*/
function extend(to, _from) {
for (var key in _from) {
to[key] = _from[key];
}
return to;
}
/**
* Merge an Array of Objects into a single Object.
*/
function toObject(arr) {
var res = {};
for (var i = 0; i < arr.length; i++) {
if (arr[i]) {
extend(res, arr[i]);
}
}
return res;
}
/* eslint-disable no-unused-vars */
/**
* Perform no operation.
* Stubbing args to make Flow happy without leaving useless transpiled code
* with ...rest (https://flow.org/blog/2017/05/07/Strict-Function-Call-Arity/).
*/
function noop$1(a, b, c) { }
/**
* Always return false.
*/
var no = function (a, b, c) { return false; };
/* eslint-enable no-unused-vars */
/**
* Return the same value.
*/
var identity = function (_) { return _; };
/**
* Generate a string containing static keys from compiler modules.
*/
function genStaticKeys(modules) {
return modules
.reduce(function (keys, m) {
return keys.concat(m.staticKeys || []);
}, [])
.join(',');
}
/**
* Check if two values are loosely equal - that is,
* if they are plain objects, do they have the same shape?
*/
function looseEqual(a, b) {
if (a === b)
{ return true; }
var isObjectA = isObject(a);
var isObjectB = isObject(b);
if (isObjectA && isObjectB) {
try {
var isArrayA = Array.isArray(a);
var isArrayB = Array.isArray(b);
if (isArrayA && isArrayB) {
return (a.length === b.length &&
a.every(function (e, i) {
return looseEqual(e, b[i]);
}));
}
else if (a instanceof Date && b instanceof Date) {
return a.getTime() === b.getTime();
}
else if (!isArrayA && !isArrayB) {
var keysA = Object.keys(a);
var keysB = Object.keys(b);
return (keysA.length === keysB.length &&
keysA.every(function (key) {
return looseEqual(a[key], b[key]);
}));
}
else {
/* istanbul ignore next */
return false;
}
}
catch (e) {
/* istanbul ignore next */
return false;
}
}
else if (!isObjectA && !isObjectB) {
return String(a) === String(b);
}
else {
return false;
}
}
/**
* Return the first index at which a loosely equal value can be
* found in the array (if value is a plain object, the array must
* contain an object of the same shape), or -1 if it is not present.
*/
function looseIndexOf(arr, val) {
for (var i = 0; i < arr.length; i++) {
if (looseEqual(arr[i], val))
{ return i; }
}
return -1;
}
var isAttr = makeMap('accept,accept-charset,accesskey,action,align,alt,async,autocomplete,' +
'autofocus,autoplay,autosave,bgcolor,border,buffered,challenge,charset,' +
'checked,cite,class,code,codebase,color,cols,colspan,content,' +
'contenteditable,contextmenu,controls,coords,data,datetime,default,' +
'defer,dir,dirname,disabled,download,draggable,dropzone,enctype,for,' +
'form,formaction,headers,height,hidden,high,href,hreflang,http-equiv,' +
'icon,id,ismap,itemprop,keytype,kind,label,lang,language,list,loop,low,' +
'manifest,max,maxlength,media,method,GET,POST,min,multiple,email,file,' +
'muted,name,novalidate,open,optimum,pattern,ping,placeholder,poster,' +
'preload,radiogroup,readonly,rel,required,reversed,rows,rowspan,sandbox,' +
'scope,scoped,seamless,selected,shape,size,type,text,password,sizes,span,' +
'spellcheck,src,srcdoc,srclang,srcset,start,step,style,summary,tabindex,' +
'target,title,usemap,value,width,wrap');
var unsafeAttrCharRE = /[>/="'\u0009\u000a\u000c\u0020]/; // eslint-disable-line no-control-regex
var isSSRUnsafeAttr = function (name) {
return unsafeAttrCharRE.test(name);
};
/* istanbul ignore next */
var isRenderableAttr = function (name) {
return (isAttr(name) || name.indexOf('data-') === 0 || name.indexOf('aria-') === 0);
};
var propsToAttrMap = {
acceptCharset: 'accept-charset',
className: 'class',
htmlFor: 'for',
httpEquiv: 'http-equiv',
};
var ESC = {
'<': '&lt;',
'>': '&gt;',
'"': '&quot;',
'&': '&amp;',
};
function escape(s) {
return s.replace(/[<>"&]/g, escapeChar);
}
function escapeChar(a) {
return ESC[a] || a;
}
var noUnitNumericStyleProps = {
'animation-iteration-count': true,
'border-image-outset': true,
'border-image-slice': true,
'border-image-width': true,
'box-flex': true,
'box-flex-group': true,
'box-ordinal-group': true,
'column-count': true,
columns: true,
flex: true,
'flex-grow': true,
'flex-positive': true,
'flex-shrink': true,
'flex-negative': true,
'flex-order': true,
'grid-row': true,
'grid-row-end': true,
'grid-row-span': true,
'grid-row-start': true,
'grid-column': true,
'grid-column-end': true,
'grid-column-span': true,
'grid-column-start': true,
'font-weight': true,
'line-clamp': true,
'line-height': true,
opacity: true,
order: true,
orphans: true,
'tab-size': true,
widows: true,
'z-index': true,
zoom: true,
// SVG
'fill-opacity': true,
'flood-opacity': true,
'stop-opacity': true,
'stroke-dasharray': true,
'stroke-dashoffset': true,
'stroke-miterlimit': true,
'stroke-opacity': true,
'stroke-width': true,
};
// these are reserved for web because they are directly compiled away
// during template compilation
makeMap('style,class');
// attributes that should be using props for binding
var acceptValue = makeMap('input,textarea,option,select,progress');
var mustUseProp = function (tag, type, attr) {
return ((attr === 'value' && acceptValue(tag) && type !== 'button') ||
(attr === 'selected' && tag === 'option') ||
(attr === 'checked' && tag === 'input') ||
(attr === 'muted' && tag === 'video'));
};
var isEnumeratedAttr = makeMap('contenteditable,draggable,spellcheck');
var isValidContentEditableValue = makeMap('events,caret,typing,plaintext-only');
var convertEnumeratedValue = function (key, value) {
return isFalsyAttrValue(value) || value === 'false'
? 'false'
: // allow arbitrary string value for contenteditable
key === 'contenteditable' && isValidContentEditableValue(value)
? value
: 'true';
};
var isBooleanAttr = makeMap('allowfullscreen,async,autofocus,autoplay,checked,compact,controls,declare,' +
'default,defaultchecked,defaultmuted,defaultselected,defer,disabled,' +
'enabled,formnovalidate,hidden,indeterminate,inert,ismap,itemscope,loop,multiple,' +
'muted,nohref,noresize,noshade,novalidate,nowrap,open,pauseonexit,readonly,' +
'required,reversed,scoped,seamless,selected,sortable,' +
'truespeed,typemustmatch,visible');
var isFalsyAttrValue = function (val) {
return val == null || val === false;
};
function renderAttrs$1(node) {
var attrs = node.data.attrs;
var res = '';
var opts = node.parent && node.parent.componentOptions;
if (isUndef(opts) || opts.Ctor.options.inheritAttrs !== false) {
var parent_1 = node.parent;
while (isDef(parent_1)) {
// Stop fallthrough in case parent has inheritAttrs option set to false
if (parent_1.componentOptions &&
parent_1.componentOptions.Ctor.options.inheritAttrs === false) {
break;
}
if (isDef(parent_1.data) && isDef(parent_1.data.attrs)) {
attrs = extend(extend({}, attrs), parent_1.data.attrs);
}
parent_1 = parent_1.parent;
}
}
if (isUndef(attrs)) {
return res;
}
for (var key in attrs) {
if (isSSRUnsafeAttr(key)) {
continue;
}
if (key === 'style') {
// leave it to the style module
continue;
}
res += renderAttr(key, attrs[key]);
}
return res;
}
function renderAttr(key, value) {
if (isBooleanAttr(key)) {
if (!isFalsyAttrValue(value)) {
return " " + key + "=\"" + key + "\"";
}
}
else if (isEnumeratedAttr(key)) {
return " " + key + "=\"" + escape(convertEnumeratedValue(key, value)) + "\"";
}
else if (!isFalsyAttrValue(value)) {
return " " + key + "=\"" + escape(String(value)) + "\"";
}
return '';
}
var VNode = /** @class */ (function () {
function VNode(tag, data, children, text, elm, context, componentOptions, asyncFactory) {
this.tag = tag;
this.data = data;
this.children = children;
this.text = text;
this.elm = elm;
this.ns = undefined;
this.context = context;
this.fnContext = undefined;
this.fnOptions = undefined;
this.fnScopeId = undefined;
this.key = data && data.key;
this.componentOptions = componentOptions;
this.componentInstance = undefined;
this.parent = undefined;
this.raw = false;
this.isStatic = false;
this.isRootInsert = true;
this.isComment = false;
this.isCloned = false;
this.isOnce = false;
this.asyncFactory = asyncFactory;
this.asyncMeta = undefined;
this.isAsyncPlaceholder = false;
}
Object.defineProperty(VNode.prototype, "child", {
// DEPRECATED: alias for componentInstance for backwards compat.
/* istanbul ignore next */
get: function () {
return this.componentInstance;
},
enumerable: false,
configurable: true
});
return VNode;
}());
var createEmptyVNode = function (text) {
if (text === void 0) { text = ''; }
var node = new VNode();
node.text = text;
node.isComment = true;
return node;
};
function createTextVNode(val) {
return new VNode(undefined, undefined, undefined, String(val));
}
// optimized shallow clone
// used for static nodes and slot nodes because they may be reused across
// multiple renders, cloning them avoids errors when DOM manipulations rely
// on their elm reference.
function cloneVNode(vnode) {
var cloned = new VNode(
//@ts-expect-error void type not valid here
vnode.tag, vnode.data,
// #7975
// clone children array to avoid mutating original in case of cloning
// a child.
vnode.children && vnode.children.slice(), vnode.text, vnode.elm, vnode.context, vnode.componentOptions, vnode.asyncFactory);
cloned.ns = vnode.ns;
cloned.isStatic = vnode.isStatic;
cloned.key = vnode.key;
cloned.isComment = vnode.isComment;
cloned.fnContext = vnode.fnContext;
cloned.fnOptions = vnode.fnOptions;
cloned.fnScopeId = vnode.fnScopeId;
cloned.asyncMeta = vnode.asyncMeta;
cloned.isCloned = true;
return cloned;
}
function renderDOMProps$1(node) {
var props = node.data.domProps;
var res = '';
var parent = node.parent;
while (isDef(parent)) {
if (parent.data && parent.data.domProps) {
props = extend(extend({}, props), parent.data.domProps);
}
parent = parent.parent;
}
if (isUndef(props)) {
return res;
}
var attrs = node.data.attrs;
for (var key in props) {
if (key === 'innerHTML') {
setText(node, props[key], true);
}
else if (key === 'textContent') {
setText(node, props[key], false);
}
else if (key === 'value' && node.tag === 'textarea') {
setText(node, toString(props[key]), false);
}
else {
// $flow-disable-line (WTF?)
var attr = propsToAttrMap[key] || key.toLowerCase();
if (isRenderableAttr(attr) &&
// avoid rendering double-bound props/attrs twice
!(isDef(attrs) && isDef(attrs[attr]))) {
res += renderAttr(attr, props[key]);
}
}
}
return res;
}
function setText(node, text, raw) {
var child = new VNode(undefined, undefined, undefined, text);
child.raw = raw;
node.children = [child];
}
/**
* unicode letters used for parsing html tags, component names and property paths.
* using https://www.w3.org/TR/html53/semantics-scripting.html#potentialcustomelementname
* skipping \u10000-\uEFFFF due to it freezing up PhantomJS
*/
var unicodeRegExp = /a-zA-Z\u00B7\u00C0-\u00D6\u00D8-\u00F6\u00F8-\u037D\u037F-\u1FFF\u200C-\u200D\u203F-\u2040\u2070-\u218F\u2C00-\u2FEF\u3001-\uD7FF\uF900-\uFDCF\uFDF0-\uFFFD/;
/**
* Define a property.
*/
function def(obj, key, val, enumerable) {
Object.defineProperty(obj, key, {
value: val,
enumerable: !!enumerable,
writable: true,
configurable: true,
});
}
// can we use __proto__?
var hasProto = '__proto__' in {};
// Browser environment sniffing
var inBrowser = typeof window !== 'undefined';
// @ts-ignore
var inWeex =
// @ts-ignore
typeof WXEnvironment !== 'undefined' && !!WXEnvironment.platform;
// @ts-ignore
var weexPlatform = inWeex && WXEnvironment.platform.toLowerCase();
var UA = inBrowser && window.navigator.userAgent.toLowerCase();
var isIE = UA && /msie|trident/.test(UA);
UA && UA.indexOf('msie 9.0') > 0;
var isEdge = UA && UA.indexOf('edge/') > 0;
(UA && UA.indexOf('android') > 0) || weexPlatform === 'android';
(UA && /iphone|ipad|ipod|ios/.test(UA)) || weexPlatform === 'ios';
UA && /chrome\/\d+/.test(UA) && !isEdge;
UA && /phantomjs/.test(UA);
UA && UA.match(/firefox\/(\d+)/);
// Firefox has a "watch" function on Object.prototype...
// @ts-ignore
var nativeWatch = {}.watch;
var supportsPassive = false;
if (inBrowser) {
try {
var opts = {};
Object.defineProperty(opts, 'passive', {
get: function () {
/* istanbul ignore next */
supportsPassive = true;
},
}); // https://github.com/facebook/flow/issues/285
// @ts-ignore
window.addEventListener('test-passive', null, opts);
}
catch (e) { }
}
// this needs to be lazy-evaled because vue may be required before
// vue-server-renderer can set VUE_ENV
var _isServer;
var isServerRendering = function () {
if (_isServer === undefined) {
/* istanbul ignore if */
if (!inBrowser && !inWeex && typeof global !== 'undefined') {
// detect presence of vue-server-renderer and avoid
// Webpack shimming the process
_isServer =
global['process'] && global['process'].env.VUE_ENV === 'server';
}
else {
_isServer = false;
}
}
return _isServer;
};
/* istanbul ignore next */
function isNative(Ctor) {
return typeof Ctor === 'function' && /native code/.test(Ctor.toString());
}
var hasSymbol = typeof Symbol !== 'undefined' &&
isNative(Symbol) &&
typeof Reflect !== 'undefined' &&
isNative(Reflect.ownKeys);
var _Set; // $flow-disable-line
/* istanbul ignore if */ if (typeof Set !== 'undefined' && isNative(Set)) {
// use native Set when available.
_Set = Set;
}
else {
// a non-standard Set polyfill that only works with primitive keys.
_Set = /** @class */ (function () {
function Set() {
this.set = Object.create(null);
}
Set.prototype.has = function (key) {
return this.set[key] === true;
};
Set.prototype.add = function (key) {
this.set[key] = true;
};
Set.prototype.clear = function () {
this.set = Object.create(null);
};
return Set;
}());
}
var SSR_ATTR = 'data-server-rendered';
var ASSET_TYPES = ['component', 'directive', 'filter'];
var LIFECYCLE_HOOKS = [
'beforeCreate',
'created',
'beforeMount',
'mounted',
'beforeUpdate',
'updated',
'beforeDestroy',
'destroyed',
'activated',
'deactivated',
'errorCaptured',
'serverPrefetch' ];
var config = {
/**
* Option merge strategies (used in core/util/options)
*/
// $flow-disable-line
optionMergeStrategies: Object.create(null),
/**
* Whether to suppress warnings.
*/
silent: false,
/**
* Show production mode tip message on boot?
*/
productionTip: "development" !== 'production',
/**
* Whether to enable devtools
*/
devtools: "development" !== 'production',
/**
* Whether to record perf
*/
performance: false,
/**
* Error handler for watcher errors
*/
errorHandler: null,
/**
* Warn handler for watcher warns
*/
warnHandler: null,
/**
* Ignore certain custom elements
*/
ignoredElements: [],
/**
* Custom user key aliases for v-on
*/
// $flow-disable-line
keyCodes: Object.create(null),
/**
* Check if a tag is reserved so that it cannot be registered as a
* component. This is platform-dependent and may be overwritten.
*/
isReservedTag: no,
/**
* Check if an attribute is reserved so that it cannot be used as a component
* prop. This is platform-dependent and may be overwritten.
*/
isReservedAttr: no,
/**
* Check if a tag is an unknown element.
* Platform-dependent.
*/
isUnknownElement: no,
/**
* Get the namespace of an element
*/
getTagNamespace: noop$1,
/**
* Parse the real tag name for the specific platform.
*/
parsePlatformTagName: identity,
/**
* Check if an attribute must be bound using property, e.g. value
* Platform-dependent.
*/
mustUseProp: no,
/**
* Perform updates asynchronously. Intended to be used by Vue Test Utils
* This will significantly reduce performance if set to false.
*/
async: true,
/**
* Exposed for legacy reasons
*/
_lifecycleHooks: LIFECYCLE_HOOKS,
};
var warn$2 = noop$1;
var tip = noop$1;
var generateComponentTrace; // work around flow check
var formatComponentName;
{
var hasConsole_1 = typeof console !== 'undefined';
var classifyRE_1 = /(?:^|[-_])(\w)/g;
var classify_1 = function (str) {
return str.replace(classifyRE_1, function (c) { return c.toUpperCase(); }).replace(/[-_]/g, '');
};
warn$2 = function (msg, vm) {
var trace = vm ? generateComponentTrace(vm) : '';
if (hasConsole_1 && !config.silent) {
console.error("[Vue warn]: " + msg + trace);
}
};
tip = function (msg, vm) {
if (hasConsole_1 && !config.silent) {
console.warn("[Vue tip]: " + msg + (vm ? generateComponentTrace(vm) : ''));
}
};
formatComponentName = function (vm, includeFile) {
if (vm.$root === vm) {
return '<Root>';
}
var options =
// @ts-ignore
typeof vm === 'function' && vm.cid != null
? // @ts-ignore
vm.options
: vm._isVue
? // @ts-ignore
vm.$options || vm.constructor.options
: vm;
var name = options.name || options._componentTag;
var file = options.__file;
if (!name && file) {
var match = file.match(/([^/\\]+)\.vue$/);
name = match && match[1];
}
return ((name ? "<" + classify_1(name) + ">" : "<Anonymous>") +
(file && includeFile !== false ? " at " + file : ''));
};
var repeat_1 = function (str, n) {
var res = '';
while (n) {
if (n % 2 === 1)
{ res += str; }
if (n > 1)
{ str += str; }
n >>= 1;
}
return res;
};
generateComponentTrace = function (vm) {
// @ts-ignore
if (vm._isVue && vm.$parent) {
var tree = [];
var currentRecursiveSequence = 0;
while (vm) {
if (tree.length > 0) {
var last = tree[tree.length - 1];
if (last.constructor === vm.constructor) {
currentRecursiveSequence++;
vm = vm.$parent;
continue;
}
else if (currentRecursiveSequence > 0) {
tree[tree.length - 1] = [last, currentRecursiveSequence];
currentRecursiveSequence = 0;
}
}
tree.push(vm);
vm = vm.$parent;
}
return ('\n\nfound in\n\n' +
tree
.map(function (vm, i) {
return "" + (i === 0 ? '---> ' : repeat_1(' ', 5 + i * 2)) + (Array.isArray(vm)
? formatComponentName(vm[0]) + "... (" + vm[1] + " recursive calls)"
: formatComponentName(vm));
})
.join('\n'));
}
else {
return "\n\n(found in " + formatComponentName(vm) + ")";
}
};
}
var uid = 0;
/**
* A dep is an observable that can have multiple
* directives subscribing to it.
*/
var Dep = /** @class */ (function () {
function Dep() {
this.id = uid++;
this.subs = [];
}
Dep.prototype.addSub = function (sub) {
this.subs.push(sub);
};
Dep.prototype.removeSub = function (sub) {
remove$1(this.subs, sub);
};
Dep.prototype.depend = function () {
if (Dep.target) {
Dep.target.addDep(this);
}
};
Dep.prototype.notify = function () {
// stabilize the subscriber list first
var subs = this.subs.slice();
for (var i = 0, l = subs.length; i < l; i++) {
subs[i].update();
}
};
return Dep;
}());
// The current target watcher being evaluated.
// This is globally unique because only one watcher
// can be evaluated at a time.
Dep.target = null;
var targetStack = [];
function pushTarget(target) {
targetStack.push(target);
Dep.target = target;
}
function popTarget() {
targetStack.pop();
Dep.target = targetStack[targetStack.length - 1];
}
/*
* not type checking this file because flow doesn't play well with
* dynamically accessing methods on Array prototype
*/
var arrayProto = Array.prototype;
var arrayMethods = Object.create(arrayProto);
var methodsToPatch = [
'push',
'pop',
'shift',
'unshift',
'splice',
'sort',
'reverse' ];
/**
* Intercept mutating methods and emit events
*/
methodsToPatch.forEach(function (method) {
// cache original method
var original = arrayProto[method];
def(arrayMethods, method, function mutator() {
var arguments$1 = arguments;
var args = [];
for (var _i = 0; _i < arguments.length; _i++) {
args[_i] = arguments$1[_i];
}
var result = original.apply(this, args);
var ob = this.__ob__;
var inserted;
switch (method) {
case 'push':
case 'unshift':
inserted = args;
break;
case 'splice':
inserted = args.slice(2);
break;
}
if (inserted)
{ ob.observeArray(inserted); }
// notify change
ob.dep.notify();
return result;
});
});
var arrayKeys = Object.getOwnPropertyNames(arrayMethods);
/**
* In some cases we may want to disable observation inside a component's
* update computation.
*/
var shouldObserve = true;
function toggleObserving(value) {
shouldObserve = value;
}
/**
* Observer class that is attached to each observed
* object. Once attached, the observer converts the target
* object's property keys into getter/setters that
* collect dependencies and dispatch updates.
*/
var Observer = /** @class */ (function () {
function Observer(value) {
this.value = value;
this.dep = new Dep();
this.vmCount = 0;
def(value, '__ob__', this);
if (Array.isArray(value)) {
if (hasProto) {
protoAugment(value, arrayMethods);
}
else {
copyAugment(value, arrayMethods, arrayKeys);
}
this.observeArray(value);
}
else {
this.walk(value);
}
}
/**
* Walk through all properties and convert them into
* getter/setters. This method should only be called when
* value type is Object.
*/
Observer.prototype.walk = function (obj) {
var keys = Object.keys(obj);
for (var i = 0; i < keys.length; i++) {
defineReactive(obj, keys[i]);
}
};
/**
* Observe a list of Array items.
*/
Observer.prototype.observeArray = function (items) {
for (var i = 0, l = items.length; i < l; i++) {
observe(items[i]);
}
};
return Observer;
}());
// helpers
/**
* Augment a target Object or Array by intercepting
* the prototype chain using __proto__
*/
function protoAugment(target, src) {
/* eslint-disable no-proto */
target.__proto__ = src;
/* eslint-enable no-proto */
}
/**
* Augment a target Object or Array by defining
* hidden properties.
*/
/* istanbul ignore next */
function copyAugment(target, src, keys) {
for (var i = 0, l = keys.length; i < l; i++) {
var key = keys[i];
def(target, key, src[key]);
}
}
/**
* Attempt to create an observer instance for a value,
* returns the new observer if successfully observed,
* or the existing observer if the value already has one.
*/
function observe(value, asRootData) {
if (!isObject(value) || value instanceof VNode) {
return;
}
var ob;
if (hasOwn(value, '__ob__') && value.__ob__ instanceof Observer) {
ob = value.__ob__;
}
else if (shouldObserve &&
!isServerRendering() &&
(Array.isArray(value) || isPlainObject(value)) &&
Object.isExtensible(value) &&
!value._isVue) {
ob = new Observer(value);
}
if (asRootData && ob) {
ob.vmCount++;
}
return ob;
}
/**
* Define a reactive property on an Object.
*/
function defineReactive(obj, key, val, customSetter, shallow) {
var dep = new Dep();
var property = Object.getOwnPropertyDescriptor(obj, key);
if (property && property.configurable === false) {
return;
}
// cater for pre-defined getter/setters
var getter = property && property.get;
var setter = property && property.set;
if ((!getter || setter) && arguments.length === 2) {
val = obj[key];
}
var childOb = !shallow && observe(val);
Object.defineProperty(obj, key, {
enumerable: true,
configurable: true,
get: function reactiveGetter() {
var value = getter ? getter.call(obj) : val;
if (Dep.target) {
dep.depend();
if (childOb) {
childOb.dep.depend();
if (Array.isArray(value)) {
dependArray(value);
}
}
}
return value;
},
set: function reactiveSetter(newVal) {
var value = getter ? getter.call(obj) : val;
/* eslint-disable no-self-compare */
if (newVal === value || (newVal !== newVal && value !== value)) {
return;
}
/* eslint-enable no-self-compare */
if (customSetter) {
customSetter();
}
// #7981: for accessor properties without setter
if (getter && !setter)
{ return; }
if (setter) {
setter.call(obj, newVal);
}
else {
val = newVal;
}
childOb = !shallow && observe(newVal);
dep.notify();
},
});
}
/**
* Set a property on an object. Adds the new property and
* triggers change notification if the property doesn't
* already exist.
*/
function set(target, key, val) {
if ((isUndef(target) || isPrimitive(target))) {
warn$2("Cannot set reactive property on undefined, null, or primitive value: " + target);
}
if (Array.isArray(target) && isValidArrayIndex(key)) {
target.length = Math.max(target.length, key);
target.splice(key, 1, val);
return val;
}
if (key in target && !(key in Object.prototype)) {
target[key] = val;
return val;
}
var ob = target.__ob__;
// @ts-ignore
if (target._isVue || (ob && ob.vmCount)) {
warn$2('Avoid adding reactive properties to a Vue instance or its root $data ' +
'at runtime - declare it upfront in the data option.');
return val;
}
if (!ob) {
target[key] = val;
return val;
}
defineReactive(ob.value, key, val);
ob.dep.notify();
return val;
}
/**
* Collect dependencies on array elements when the array is touched, since
* we cannot intercept array element access like property getters.
*/
function dependArray(value) {
for (var e = void 0, i = 0, l = value.length; i < l; i++) {
e = value[i];
e && e.__ob__ && e.__ob__.dep.depend();
if (Array.isArray(e)) {
dependArray(e);
}
}
}
/**
* Option overwriting strategies are functions that handle
* how to merge a parent option value and a child option
* value into the final value.
*/
var strats = config.optionMergeStrategies;
/**
* Options with restrictions
*/
{
strats.el = strats.propsData = function (parent, child, vm, key) {
if (!vm) {
warn$2("option \"" + key + "\" can only be used during instance " +
'creation with the `new` keyword.');
}
return defaultStrat(parent, child);
};
}
/**
* Helper that recursively merges two data objects together.
*/
function mergeData(to, from) {
if (!from)
{ return to; }
var key, toVal, fromVal;
var keys = hasSymbol
? Reflect.ownKeys(from)
: Object.keys(from);
for (var i = 0; i < keys.length; i++) {
key = keys[i];
// in case the object is already observed...
if (key === '__ob__')
{ continue; }
toVal = to[key];
fromVal = from[key];
if (!hasOwn(to, key)) {
set(to, key, fromVal);
}
else if (toVal !== fromVal &&
isPlainObject(toVal) &&
isPlainObject(fromVal)) {
mergeData(toVal, fromVal);
}
}
return to;
}
/**
* Data
*/
function mergeDataOrFn(parentVal, childVal, vm) {
if (!vm) {
// in a Vue.extend merge, both should be functions
if (!childVal) {
return parentVal;
}
if (!parentVal) {
return childVal;
}
// when parentVal & childVal are both present,
// we need to return a function that returns the
// merged result of both functions... no need to
// check if parentVal is a function here because
// it has to be a function to pass previous merges.
return function mergedDataFn() {
return mergeData(
// @ts-ignore
typeof childVal === 'function' ? childVal.call(this, this) : childVal,
// @ts-ignore
typeof parentVal === 'function' ? parentVal.call(this, this) : parentVal);
};
}
else {
return function mergedInstanceDataFn() {
// instance merge
var instanceData = typeof childVal === 'function' ? childVal.call(vm, vm) : childVal;
var defaultData = typeof parentVal === 'function' ? parentVal.call(vm, vm) : parentVal;
if (instanceData) {
return mergeData(instanceData, defaultData);
}
else {
return defaultData;
}
};
}
}
strats.data = function (parentVal, childVal, vm) {
if (!vm) {
if (childVal && typeof childVal !== 'function') {
warn$2('The "data" option should be a function ' +
'that returns a per-instance value in component ' +
'definitions.', vm);
return parentVal;
}
return mergeDataOrFn(parentVal, childVal);
}
return mergeDataOrFn(parentVal, childVal, vm);
};
/**
* Hooks and props are merged as arrays.
*/
function mergeHook$1(parentVal, childVal) {
var res = childVal
? parentVal
? parentVal.concat(childVal)
: Array.isArray(childVal)
? childVal
: [childVal]
: parentVal;
return res ? dedupeHooks(res) : res;
}
function dedupeHooks(hooks) {
var res = [];
for (var i = 0; i < hooks.length; i++) {
if (res.indexOf(hooks[i]) === -1) {
res.push(hooks[i]);
}
}
return res;
}
LIFECYCLE_HOOKS.forEach(function (hook) {
strats[hook] = mergeHook$1;
});
/**
* Assets
*
* When a vm is present (instance creation), we need to do
* a three-way merge between constructor options, instance
* options and parent options.
*/
function mergeAssets(parentVal, childVal, vm, key) {
var res = Object.create(parentVal || null);
if (childVal) {
assertObjectType(key, childVal, vm);
return extend(res, childVal);
}
else {
return res;
}
}
ASSET_TYPES.forEach(function (type) {
strats[type + 's'] = mergeAssets;
});
/**
* Watchers.
*
* Watchers hashes should not overwrite one
* another, so we merge them as arrays.
*/
strats.watch = function (parentVal, childVal, vm, key) {
// work around Firefox's Object.prototype.watch...
//@ts-expect-error work around
if (parentVal === nativeWatch)
{ parentVal = undefined; }
//@ts-expect-error work around
if (childVal === nativeWatch)
{ childVal = undefined; }
/* istanbul ignore if */
if (!childVal)
{ return Object.create(parentVal || null); }
{
assertObjectType(key, childVal, vm);
}
if (!parentVal)
{ return childVal; }
var ret = {};
extend(ret, parentVal);
for (var key_1 in childVal) {
var parent_1 = ret[key_1];
var child = childVal[key_1];
if (parent_1 && !Array.isArray(parent_1)) {
parent_1 = [parent_1];
}
ret[key_1] = parent_1
? parent_1.concat(child)
: Array.isArray(child)
? child
: [child];
}
return ret;
};
/**
* Other object hashes.
*/
strats.props = strats.methods = strats.inject = strats.computed = function (parentVal, childVal, vm, key) {
if (childVal && "development" !== 'production') {
assertObjectType(key, childVal, vm);
}
if (!parentVal)
{ return childVal; }
var ret = Object.create(null);
extend(ret, parentVal);
if (childVal)
{ extend(ret, childVal); }
return ret;
};
strats.provide = mergeDataOrFn;
/**
* Default strategy.
*/
var defaultStrat = function (parentVal, childVal) {
return childVal === undefined ? parentVal : childVal;
};
/**
* Validate component names
*/
function checkComponents(options) {
for (var key in options.components) {
validateComponentName(key);
}
}
function validateComponentName(name) {
if (!new RegExp("^[a-zA-Z][\\-\\.0-9_" + unicodeRegExp.source + "]*$").test(name)) {
warn$2('Invalid component name: "' +
name +
'". Component names ' +
'should conform to valid custom element name in html5 specification.');
}
if (isBuiltInTag(name) || config.isReservedTag(name)) {
warn$2('Do not use built-in or reserved HTML elements as component ' +
'id: ' +
name);
}
}
/**
* Ensure all props option syntax are normalized into the
* Object-based format.
*/
function normalizeProps(options, vm) {
var props = options.props;
if (!props)
{ return; }
var res = {};
var i, val, name;
if (Array.isArray(props)) {
i = props.length;
while (i--) {
val = props[i];
if (typeof val === 'string') {
name = camelize(val);
res[name] = { type: null };
}
else {
warn$2('props must be strings when using array syntax.');
}
}
}
else if (isPlainObject(props)) {
for (var key in props) {
val = props[key];
name = camelize(key);
res[name] = isPlainObject(val) ? val : { type: val };
}
}
else {
warn$2("Invalid value for option \"props\": expected an Array or an Object, " +
("but got " + toRawType(props) + "."), vm);
}
options.props = res;
}
/**
* Normalize all injections into Object-based format
*/
function normalizeInject(options, vm) {
var inject = options.inject;
if (!inject)
{ return; }
var normalized = (options.inject = {});
if (Array.isArray(inject)) {
for (var i = 0; i < inject.length; i++) {
normalized[inject[i]] = { from: inject[i] };
}
}
else if (isPlainObject(inject)) {
for (var key in inject) {
var val = inject[key];
normalized[key] = isPlainObject(val)
? extend({ from: key }, val)
: { from: val };
}
}
else {
warn$2("Invalid value for option \"inject\": expected an Array or an Object, " +
("but got " + toRawType(inject) + "."), vm);
}
}
/**
* Normalize raw function directives into object format.
*/
function normalizeDirectives(options) {
var dirs = options.directives;
if (dirs) {
for (var key in dirs) {
var def = dirs[key];
if (typeof def === 'function') {
dirs[key] = { bind: def, update: def };
}
}
}
}
function assertObjectType(name, value, vm) {
if (!isPlainObject(value)) {
warn$2("Invalid value for option \"" + name + "\": expected an Object, " +
("but got " + toRawType(value) + "."), vm);
}
}
/**
* Merge two option objects into a new one.
* Core utility used in both instantiation and inheritance.
*/
function mergeOptions(parent, child, vm) {
{
checkComponents(child);
}
if (typeof child === 'function') {
// @ts-expect-error
child = child.options;
}
normalizeProps(child, vm);
normalizeInject(child, vm);
normalizeDirectives(child);
// Apply extends and mixins on the child options,
// but only if it is a raw options object that isn't
// the result of another mergeOptions call.
// Only merged options has the _base property.
if (!child._base) {
if (child.extends) {
parent = mergeOptions(parent, child.extends, vm);
}
if (child.mixins) {
for (var i = 0, l = child.mixins.length; i < l; i++) {
parent = mergeOptions(parent, child.mixins[i], vm);
}
}
}
var options = {};
var key;
for (key in parent) {
mergeField(key);
}
for (key in child) {
if (!hasOwn(parent, key)) {
mergeField(key);
}
}
function mergeField(key) {
var strat = strats[key] || defaultStrat;
options[key] = strat(parent[key], child[key], vm, key);
}
return options;
}
/**
* Resolve an asset.
* This function is used because child instances need access
* to assets defined in its ancestor chain.
*/
function resolveAsset(options, type, id, warnMissing) {
/* istanbul ignore if */
if (typeof id !== 'string') {
return;
}
var assets = options[type];
// check local registration variations first
if (hasOwn(assets, id))
{ return assets[id]; }
var camelizedId = camelize(id);
if (hasOwn(assets, camelizedId))
{ return assets[camelizedId]; }
var PascalCaseId = capitalize(camelizedId);
if (hasOwn(assets, PascalCaseId))
{ return assets[PascalCaseId]; }
// fallback to prototype chain
var res = assets[id] || assets[camelizedId] || assets[PascalCaseId];
if (warnMissing && !res) {
warn$2('Failed to resolve ' + type.slice(0, -1) + ': ' + id, options);
}
return res;
}
function validateProp(key, propOptions, propsData, vm) {
var prop = propOptions[key];
var absent = !hasOwn(propsData, key);
var value = propsData[key];
// boolean casting
var booleanIndex = getTypeIndex(Boolean, prop.type);
if (booleanIndex > -1) {
if (absent && !hasOwn(prop, 'default')) {
value = false;
}
else if (value === '' || value === hyphenate(key)) {
// only cast empty string / same name to boolean if
// boolean has higher priority
var stringIndex = getTypeIndex(String, prop.type);
if (stringIndex < 0 || booleanIndex < stringIndex) {
value = true;
}
}
}
// check default value
if (value === undefined) {
value = getPropDefaultValue(vm, prop, key);
// since the default value is a fresh copy,
// make sure to observe it.
var prevShouldObserve = shouldObserve;
toggleObserving(true);
observe(value);
toggleObserving(prevShouldObserve);
}
{
assertProp(prop, key, value, vm, absent);
}
return value;
}
/**
* Get the default value of a prop.
*/
function getPropDefaultValue(vm, prop, key) {
// no default, return undefined
if (!hasOwn(prop, 'default')) {
return undefined;
}
var def = prop.default;
// warn against non-factory defaults for Object & Array
if (isObject(def)) {
warn$2('Invalid default value for prop "' +
key +
'": ' +
'Props with type Object/Array must use a factory function ' +
'to return the default value.', vm);
}
// the raw prop value was also undefined from previous render,
// return previous default value to avoid unnecessary watcher trigger
if (vm &&
vm.$options.propsData &&
vm.$options.propsData[key] === undefined &&
vm._props[key] !== undefined) {
return vm._props[key];
}
// call factory function for non-Function types
// a value is Function if its prototype is function even across different execution context
return typeof def === 'function' && getType(prop.type) !== 'Function'
? def.call(vm)
: def;
}
/**
* Assert whether a prop is valid.
*/
function assertProp(prop, name, value, vm, absent) {
if (prop.required && absent) {
warn$2('Missing required prop: "' + name + '"', vm);
return;
}
if (value == null && !prop.required) {
return;
}
var type = prop.type;
// @ts-ignore
var valid = !type || type === true;
var expectedTypes = [];
if (type) {
if (!Array.isArray(type)) {
type = [type];
}
for (var i = 0; i < type.length && !valid; i++) {
var assertedType = assertType(value, type[i], vm);
expectedTypes.push(assertedType.expectedType || '');
valid = assertedType.valid;
}
}
var haveExpectedTypes = expectedTypes.some(function (t) { return t; });
if (!valid && haveExpectedTypes) {
warn$2(getInvalidTypeMessage(name, value, expectedTypes), vm);
return;
}
var validator = prop.validator;
if (validator) {
if (!validator(value)) {
warn$2('Invalid prop: custom validator check failed for prop "' + name + '".', vm);
}
}
}
var simpleCheckRE = /^(String|Number|Boolean|Function|Symbol|BigInt)$/;
function assertType(value, type, vm) {
var valid;
var expectedType = getType(type);
if (simpleCheckRE.test(expectedType)) {
var t = typeof value;
valid = t === expectedType.toLowerCase();
// for primitive wrapper objects
if (!valid && t === 'object') {
valid = value instanceof type;
}
}
else if (expectedType === 'Object') {
valid = isPlainObject(value);
}
else if (expectedType === 'Array') {
valid = Array.isArray(value);
}
else {
try {
valid = value instanceof type;
}
catch (e) {
warn$2('Invalid prop type: "' + String(type) + '" is not a constructor', vm);
valid = false;
}
}
return {
valid: valid,
expectedType: expectedType,
};
}
var functionTypeCheckRE = /^\s*function (\w+)/;
/**
* Use function string name to check built-in types,
* because a simple equality check will fail when running
* across different vms / iframes.
*/
function getType(fn) {
var match = fn && fn.toString().match(functionTypeCheckRE);
return match ? match[1] : '';
}
function isSameType(a, b) {
return getType(a) === getType(b);
}
function getTypeIndex(type, expectedTypes) {
if (!Array.isArray(expectedTypes)) {
return isSameType(expectedTypes, type) ? 0 : -1;
}
for (var i = 0, len = expectedTypes.length; i < len; i++) {
if (isSameType(expectedTypes[i], type)) {
return i;
}
}
return -1;
}
function getInvalidTypeMessage(name, value, expectedTypes) {
var message = "Invalid prop: type check failed for prop \"" + name + "\"." +
(" Expected " + expectedTypes.map(capitalize).join(', '));
var expectedType = expectedTypes[0];
var receivedType = toRawType(value);
// check if we need to specify expected value
if (expectedTypes.length === 1 &&
isExplicable(expectedType) &&
isExplicable(typeof value) &&
!isBoolean(expectedType, receivedType)) {
message += " with value " + styleValue(value, expectedType);
}
message += ", got " + receivedType + " ";
// check if we need to specify received value
if (isExplicable(receivedType)) {
message += "with value " + styleValue(value, receivedType) + ".";
}
return message;
}
function styleValue(value, type) {
if (type === 'String') {
return "\"" + value + "\"";
}
else if (type === 'Number') {
return "" + Number(value);
}
else {
return "" + value;
}
}
var EXPLICABLE_TYPES = ['string', 'number', 'boolean'];
function isExplicable(value) {
return EXPLICABLE_TYPES.some(function (elem) { return value.toLowerCase() === elem; });
}
function isBoolean() {
var arguments$1 = arguments;
var args = [];
for (var _i = 0; _i < arguments.length; _i++) {
args[_i] = arguments$1[_i];
}
return args.some(function (elem) { return elem.toLowerCase() === 'boolean'; });
}
function handleError(err, vm, info) {
// Deactivate deps tracking while processing error handler to avoid possible infinite rendering.
// See: https://github.com/vuejs/vuex/issues/1505
pushTarget();
try {
if (vm) {
var cur = vm;
while ((cur = cur.$parent)) {
var hooks = cur.$options.errorCaptured;
if (hooks) {
for (var i = 0; i < hooks.length; i++) {
try {
var capture = hooks[i].call(cur, err, vm, info) === false;
if (capture)
{ return; }
}
catch (e) {
globalHandleError(e, cur, 'errorCaptured hook');
}
}
}
}
}
globalHandleError(err, vm, info);
}
finally {
popTarget();
}
}
function invokeWithErrorHandling(handler, context, args, vm, info) {
var res;
try {
res = args ? handler.apply(context, args) : handler.call(context);
if (res && !res._isVue && isPromise(res) && !res._handled) {
res.catch(function (e) { return handleError(e, vm, info + " (Promise/async)"); });
// issue #9511
// avoid catch triggering multiple times when nested calls
res._handled = true;
}
}
catch (e) {
handleError(e, vm, info);
}
return res;
}
function globalHandleError(err, vm, info) {
logError(err, vm, info);
}
function logError(err, vm, info) {
{
warn$2("Error in " + info + ": \"" + err.toString() + "\"", vm);
}
/* istanbul ignore else */
if ((inBrowser || inWeex) && typeof console !== 'undefined') {
console.error(err);
}
else {
throw err;
}
}
/* globals MutationObserver */
var callbacks = [];
function flushCallbacks() {
var copies = callbacks.slice(0);
callbacks.length = 0;
for (var i = 0; i < copies.length; i++) {
copies[i]();
}
}
// The nextTick behavior leverages the microtask queue, which can be accessed
// via either native Promise.then or MutationObserver.
// MutationObserver has wider support, however it is seriously bugged in
// UIWebView in iOS >= 9.3.3 when triggered in touch event handlers. It
// completely stops working after triggering a few times... so, if native
// Promise is available, we will use it:
/* istanbul ignore next, $flow-disable-line */
if (typeof Promise !== 'undefined' && isNative(Promise)) ;
else if (!isIE &&
typeof MutationObserver !== 'undefined' &&
(isNative(MutationObserver) ||
// PhantomJS and iOS 7.x
MutationObserver.toString() === '[object MutationObserverConstructor]')) {
// Use MutationObserver where native Promise is not available,
// e.g. PhantomJS, iOS7, Android 4.4
// (#6466 MutationObserver is unreliable in IE11)
var counter_1 = 1;
var observer = new MutationObserver(flushCallbacks);
var textNode_1 = document.createTextNode(String(counter_1));
observer.observe(textNode_1, {
characterData: true,
});
}
else if (typeof setImmediate !== 'undefined' && isNative(setImmediate)) ;
else ;
function genClassForVnode(vnode) {
var data = vnode.data;
var parentNode = vnode;
var childNode = vnode;
while (isDef(childNode.componentInstance)) {
childNode = childNode.componentInstance._vnode;
if (childNode && childNode.data) {
data = mergeClassData(childNode.data, data);
}
}
while (isDef((parentNode = parentNode.parent))) {
if (parentNode && parentNode.data) {
data = mergeClassData(data, parentNode.data);
}
}
return renderClass$1(data.staticClass, data.class);
}
function mergeClassData(child, parent) {
return {
staticClass: concat(child.staticClass, parent.staticClass),
class: isDef(child.class) ? [child.class, parent.class] : parent.class,
};
}
function renderClass$1(staticClass, dynamicClass) {
if (isDef(staticClass) || isDef(dynamicClass)) {
return concat(staticClass, stringifyClass(dynamicClass));
}
/* istanbul ignore next */
return '';
}
function concat(a, b) {
return a ? (b ? a + ' ' + b : a) : b || '';
}
function stringifyClass(value) {
if (Array.isArray(value)) {
return stringifyArray(value);
}
if (isObject(value)) {
return stringifyObject(value);
}
if (typeof value === 'string') {
return value;
}
/* istanbul ignore next */
return '';
}
function stringifyArray(value) {
var res = '';
var stringified;
for (var i = 0, l = value.length; i < l; i++) {
if (isDef((stringified = stringifyClass(value[i]))) && stringified !== '') {
if (res)
{ res += ' '; }
res += stringified;
}
}
return res;
}
function stringifyObject(value) {
var res = '';
for (var key in value) {
if (value[key]) {
if (res)
{ res += ' '; }
res += key;
}
}
return res;
}
var isHTMLTag = makeMap('html,body,base,head,link,meta,style,title,' +
'address,article,aside,footer,header,h1,h2,h3,h4,h5,h6,hgroup,nav,section,' +
'div,dd,dl,dt,figcaption,figure,picture,hr,img,li,main,ol,p,pre,ul,' +
'a,b,abbr,bdi,bdo,br,cite,code,data,dfn,em,i,kbd,mark,q,rp,rt,rtc,ruby,' +
's,samp,small,span,strong,sub,sup,time,u,var,wbr,area,audio,map,track,video,' +
'embed,object,param,source,canvas,script,noscript,del,ins,' +
'caption,col,colgroup,table,thead,tbody,td,th,tr,' +
'button,datalist,fieldset,form,input,label,legend,meter,optgroup,option,' +
'output,progress,select,textarea,' +
'details,dialog,menu,menuitem,summary,' +
'content,element,shadow,template,blockquote,iframe,tfoot');
// this map is intentionally selective, only covering SVG elements that may
// contain child elements.
var isSVG = makeMap('svg,animate,circle,clippath,cursor,defs,desc,ellipse,filter,font-face,' +
'foreignobject,g,glyph,image,line,marker,mask,missing-glyph,path,pattern,' +
'polygon,polyline,rect,switch,symbol,text,textpath,tspan,use,view', true);
var isPreTag = function (tag) { return tag === 'pre'; };
var isReservedTag = function (tag) {
return isHTMLTag(tag) || isSVG(tag);
};
function getTagNamespace(tag) {
if (isSVG(tag)) {
return 'svg';
}
// basic support for MathML
// note it doesn't support other MathML elements being component roots
if (tag === 'math') {
return 'math';
}
}
makeMap('text,number,password,search,email,tel,url');
function renderClass(node) {
var classList = genClassForVnode(node);
if (classList !== '') {
return " class=\"" + escape(classList) + "\"";
}
}
var parseStyleText = cached(function (cssText) {
var res = {};
var listDelimiter = /;(?![^(]*\))/g;
var propertyDelimiter = /:(.+)/;
cssText.split(listDelimiter).forEach(function (item) {
if (item) {
var tmp = item.split(propertyDelimiter);
tmp.length > 1 && (res[tmp[0].trim()] = tmp[1].trim());
}
});
return res;
});
// merge static and dynamic style data on the same vnode
function normalizeStyleData(data) {
var style = normalizeStyleBinding(data.style);
// static style is pre-processed into an object during compilation
// and is always a fresh object, so it's safe to merge into it
return data.staticStyle ? extend(data.staticStyle, style) : style;
}
// normalize possible array / string values into Object
function normalizeStyleBinding(bindingStyle) {
if (Array.isArray(bindingStyle)) {
return toObject(bindingStyle);
}
if (typeof bindingStyle === 'string') {
return parseStyleText(bindingStyle);
}
return bindingStyle;
}
/**
* parent component style should be after child's
* so that parent component's style could override it
*/
function getStyle(vnode, checkChild) {
var res = {};
var styleData;
if (checkChild) {
var childNode = vnode;
while (childNode.componentInstance) {
childNode = childNode.componentInstance._vnode;
if (childNode &&
childNode.data &&
(styleData = normalizeStyleData(childNode.data))) {
extend(res, styleData);
}
}
}
if ((styleData = normalizeStyleData(vnode.data))) {
extend(res, styleData);
}
var parentNode = vnode;
while ((parentNode = parentNode.parent)) {
if (parentNode.data && (styleData = normalizeStyleData(parentNode.data))) {
extend(res, styleData);
}
}
return res;
}
function genStyle(style) {
var styleText = '';
for (var key in style) {
var value = style[key];
var hyphenatedKey = hyphenate(key);
if (Array.isArray(value)) {
for (var i = 0, len = value.length; i < len; i++) {
styleText += normalizeValue(hyphenatedKey, value[i]);
}
}
else {
styleText += normalizeValue(hyphenatedKey, value);
}
}
return styleText;
}
function normalizeValue(key, value) {
if (typeof value === 'string' ||
(typeof value === 'number' && noUnitNumericStyleProps[key]) ||
value === 0) {
return key + ":" + value + ";";
}
else {
// invalid values
return "";
}
}
function renderStyle(vnode) {
var styleText = genStyle(getStyle(vnode, false));
if (styleText !== '') {
return " style=" + JSON.stringify(escape(styleText));
}
}
var modules$1 = [renderAttrs$1, renderDOMProps$1, renderClass, renderStyle];
function show(node, dir) {
if (!dir.value) {
var style = node.data.style || (node.data.style = {});
if (Array.isArray(style)) {
style.push({ display: 'none' });
}
else {
style.display = 'none';
}
}
}
// this is only applied for <select v-model> because it is the only edge case
// that must be done at runtime instead of compile time.
function model$2(node, dir) {
if (!node.children)
{ return; }
var value = dir.value;
var isMultiple = node.data.attrs && node.data.attrs.multiple;
for (var i = 0, l = node.children.length; i < l; i++) {
var option = node.children[i];
if (option.tag === 'option') {
if (isMultiple) {
var selected = Array.isArray(value) && looseIndexOf(value, getValue(option)) > -1;
if (selected) {
setSelected(option);
}
}
else {
if (looseEqual(value, getValue(option))) {
setSelected(option);
return;
}
}
}
}
}
function getValue(option) {
var data = option.data || {};
return ((data.attrs && data.attrs.value) ||
(data.domProps && data.domProps.value) ||
(option.children && option.children[0] && option.children[0].text));
}
function setSelected(option) {
var data = option.data || (option.data = {});
var attrs = data.attrs || (data.attrs = {});
attrs.selected = '';
}
var baseDirectives$1 = {
show: show,
model: model$2,
};
var isUnaryTag = makeMap('area,base,br,col,embed,frame,hr,img,input,isindex,keygen,' +
'link,meta,param,source,track,wbr');
// Elements that you can, intentionally, leave open
// (and which close themselves)
var canBeLeftOpenTag = makeMap('colgroup,dd,dt,li,options,p,td,tfoot,th,thead,tr,source');
// HTML5 tags https://html.spec.whatwg.org/multipage/indices.html#elements-3
// Phrasing Content https://html.spec.whatwg.org/multipage/dom.html#phrasing-content
var isNonPhrasingTag = makeMap('address,article,aside,base,blockquote,body,caption,col,colgroup,dd,' +
'details,dialog,div,dl,dt,fieldset,figcaption,figure,footer,form,' +
'h1,h2,h3,h4,h5,h6,head,header,hgroup,hr,html,legend,li,menuitem,meta,' +
'optgroup,option,param,rp,rt,source,style,summary,tbody,td,tfoot,th,thead,' +
'title,tr,track');
/*! *****************************************************************************
Copyright (c) Microsoft Corporation.
Permission to use, copy, modify, and/or distribute this software for any
purpose with or without fee is hereby granted.
THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH
REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,
INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
PERFORMANCE OF THIS SOFTWARE.
***************************************************************************** */
/* global Reflect, Promise */
var extendStatics = function(d, b) {
extendStatics = Object.setPrototypeOf ||
({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };
return extendStatics(d, b);
};
function __extends(d, b) {
if (typeof b !== "function" && b !== null)
throw new TypeError("Class extends value " + String(b) + " is not a constructor or null");
extendStatics(d, b);
function __() { this.constructor = d; }
d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
}
var MAX_STACK_DEPTH = 800;
var noop = function (_) { return _; };
var defer = typeof process !== 'undefined' && process.nextTick
? process.nextTick
: typeof Promise !== 'undefined'
? function (fn) { return Promise.resolve().then(fn); }
: typeof setTimeout !== 'undefined'
? setTimeout
: noop;
if (defer === noop) {
throw new Error('Your JavaScript runtime does not support any asynchronous primitives ' +
'that are required by vue-server-renderer. Please use a polyfill for ' +
'either Promise or setTimeout.');
}
function createWriteFunction(write, onError) {
var stackDepth = 0;
var cachedWrite = function (text, next) {
if (text && cachedWrite.caching) {
cachedWrite.cacheBuffer[cachedWrite.cacheBuffer.length - 1] += text;
}
var waitForNext = write(text, next);
if (waitForNext !== true) {
if (stackDepth >= MAX_STACK_DEPTH) {
defer(function () {
try {
next();
}
catch (e) {
onError(e);
}
});
}
else {
stackDepth++;
next();
stackDepth--;
}
}
};
cachedWrite.caching = false;
cachedWrite.cacheBuffer = [];
cachedWrite.componentBuffer = [];
return cachedWrite;
}
/**
* Original RenderStream implementation by Sasha Aickin (@aickin)
* Licensed under the Apache License, Version 2.0
* http://www.apache.org/licenses/LICENSE-2.0
*
* Modified by Evan You (@yyx990803)
*/
var RenderStream = /** @class */ (function (_super) {
__extends(RenderStream, _super);
function RenderStream(render) {
var _this = _super.call(this) || this;
_this.buffer = '';
//@ts-expect-error
_this.render = render;
_this.expectedSize = 0;
_this.write = createWriteFunction(function (text, next) {
var n = _this.expectedSize;
_this.buffer += text;
if (_this.buffer.length >= n) {
_this.next = next;
_this.pushBySize(n);
return true; // we will decide when to call next
}
return false;
}, function (err) {
_this.emit('error', err);
});
_this.end = function () {
_this.emit('beforeEnd');
// the rendering is finished; we should push out the last of the buffer.
_this.done = true;
_this.push(_this.buffer);
};
return _this;
}
RenderStream.prototype.pushBySize = function (n) {
var bufferToPush = this.buffer.substring(0, n);
this.buffer = this.buffer.substring(n);
this.push(bufferToPush);
};
RenderStream.prototype.tryRender = function () {
try {
this.render(this.write, this.end);
}
catch (e) {
this.emit('error', e);
}
};
RenderStream.prototype.tryNext = function () {
try {
this.next();
}
catch (e) {
this.emit('error', e);
}
};
RenderStream.prototype._read = function (n) {
this.expectedSize = n;
// it's possible that the last chunk added bumped the buffer up to > 2 * n,
// which means we will need to go through multiple read calls to drain it
// down to < n.
if (isTrue(this.done)) {
this.push(null);
return;
}
if (this.buffer.length >= n) {
this.pushBySize(n);
return;
}
if (isUndef(this.next)) {
// start the rendering chain.
this.tryRender();
}
else {
// continue with the rendering.
this.tryNext();
}
};
return RenderStream;
}(stream.Readable));
var RenderContext = /** @class */ (function () {
function RenderContext(options) {
this.userContext = options.userContext;
this.activeInstance = options.activeInstance;
this.renderStates = [];
this.write = options.write;
this.done = options.done;
this.renderNode = options.renderNode;
this.isUnaryTag = options.isUnaryTag;
this.modules = options.modules;
this.directives = options.directives;
var cache = options.cache;
if (cache && (!cache.get || !cache.set)) {
throw new Error('renderer cache must implement at least get & set.');
}
this.cache = cache;
this.get = cache && normalizeAsync(cache, 'get');
this.has = cache && normalizeAsync(cache, 'has');
//@ts-expect-error
this.next = this.next.bind(this);
}
//@ts-expect-error
RenderContext.prototype.next = function () {
var _loop_1 = function () {
var lastState = this_1.renderStates[this_1.renderStates.length - 1];
if (isUndef(lastState)) {
return { value: this_1.done() };
}
/* eslint-disable no-case-declarations */
switch (lastState.type) {
case 'Element':
case 'Fragment':
var children = lastState.children, total = lastState.total;
var rendered = lastState.rendered++;
if (rendered < total) {
return { value: this_1.renderNode(children[rendered], false, this_1) };
}
else {
this_1.renderStates.pop();
if (lastState.type === 'Element') {
return { value: this_1.write(lastState.endTag, this_1.next) };
}
}
break;
case 'Component':
this_1.renderStates.pop();
this_1.activeInstance = lastState.prevActive;
break;
case 'ComponentWithCache':
this_1.renderStates.pop();
var buffer = lastState.buffer, bufferIndex = lastState.bufferIndex, componentBuffer = lastState.componentBuffer, key = lastState.key;
var result = {
html: buffer[bufferIndex],
components: componentBuffer[bufferIndex],
};
this_1.cache.set(key, result);
if (bufferIndex === 0) {
// this is a top-level cached component,
// exit caching mode.
//@ts-expect-error
this_1.write.caching = false;
}
else {
// parent component is also being cached,
// merge self into parent's result
buffer[bufferIndex - 1] += result.html;
var prev_1 = componentBuffer[bufferIndex - 1];
result.components.forEach(function (c) { return prev_1.add(c); });
}
buffer.length = bufferIndex;
componentBuffer.length = bufferIndex;
break;
}
};
var this_1 = this;
// eslint-disable-next-line
while (true) {
var state_1 = _loop_1();
if (typeof state_1 === "object")
{ return state_1.value; }
}
};
return RenderContext;
}());
function normalizeAsync(cache, method) {
var fn = cache[method];
if (isUndef(fn)) {
return;
}
else if (fn.length > 1) {
return function (key, cb) { return fn.call(cache, key, cb); };
}
else {
return function (key, cb) { return cb(fn.call(cache, key)); };
}
}
var validDivisionCharRE = /[\w).+\-_$\]]/;
function parseFilters(exp) {
var inSingle = false;
var inDouble = false;
var inTemplateString = false;
var inRegex = false;
var curly = 0;
var square = 0;
var paren = 0;
var lastFilterIndex = 0;
var c, prev, i, expression, filters;
for (i = 0; i < exp.length; i++) {
prev = c;
c = exp.charCodeAt(i);
if (inSingle) {
if (c === 0x27 && prev !== 0x5c)
{ inSingle = false; }
}
else if (inDouble) {
if (c === 0x22 && prev !== 0x5c)
{ inDouble = false; }
}
else if (inTemplateString) {
if (c === 0x60 && prev !== 0x5c)
{ inTemplateString = false; }
}
else if (inRegex) {
if (c === 0x2f && prev !== 0x5c)
{ inRegex = false; }
}
else if (c === 0x7c && // pipe
exp.charCodeAt(i + 1) !== 0x7c &&
exp.charCodeAt(i - 1) !== 0x7c &&
!curly &&
!square &&
!paren) {
if (expression === undefined) {
// first filter, end of expression
lastFilterIndex = i + 1;
expression = exp.slice(0, i).trim();
}
else {
pushFilter();
}
}
else {
switch (c) {
case 0x22:
inDouble = true;
break; // "
case 0x27:
inSingle = true;
break; // '
case 0x60:
inTemplateString = true;
break; // `
case 0x28:
paren++;
break; // (
case 0x29:
paren--;
break; // )
case 0x5b:
square++;
break; // [
case 0x5d:
square--;
break; // ]
case 0x7b:
curly++;
break; // {
case 0x7d:
curly--;
break; // }
}
if (c === 0x2f) {
// /
var j = i - 1;
var p
// find first non-whitespace prev char
= void 0;
// find first non-whitespace prev char
for (; j >= 0; j--) {
p = exp.charAt(j);
if (p !== ' ')
{ break; }
}
if (!p || !validDivisionCharRE.test(p)) {
inRegex = true;
}
}
}
}
if (expression === undefined) {
expression = exp.slice(0, i).trim();
}
else if (lastFilterIndex !== 0) {
pushFilter();
}
function pushFilter() {
(filters || (filters = [])).push(exp.slice(lastFilterIndex, i).trim());
lastFilterIndex = i + 1;
}
if (filters) {
for (i = 0; i < filters.length; i++) {
expression = wrapFilter(expression, filters[i]);
}
}
return expression;
}
function wrapFilter(exp, filter) {
var i = filter.indexOf('(');
if (i < 0) {
// _f: resolveFilter
return "_f(\"" + filter + "\")(" + exp + ")";
}
else {
var name_1 = filter.slice(0, i);
var args = filter.slice(i + 1);
return "_f(\"" + name_1 + "\")(" + exp + (args !== ')' ? ',' + args : args);
}
}
var defaultTagRE = /\{\{((?:.|\r?\n)+?)\}\}/g;
var regexEscapeRE = /[-.*+?^${}()|[\]\/\\]/g;
var buildRegex = cached(function (delimiters) {
var open = delimiters[0].replace(regexEscapeRE, '\\$&');
var close = delimiters[1].replace(regexEscapeRE, '\\$&');
return new RegExp(open + '((?:.|\\n)+?)' + close, 'g');
});
function parseText(text, delimiters) {
//@ts-expect-error
var tagRE = delimiters ? buildRegex(delimiters) : defaultTagRE;
if (!tagRE.test(text)) {
return;
}
var tokens = [];
var rawTokens = [];
var lastIndex = (tagRE.lastIndex = 0);
var match, index, tokenValue;
while ((match = tagRE.exec(text))) {
index = match.index;
// push text token
if (index > lastIndex) {
rawTokens.push((tokenValue = text.slice(lastIndex, index)));
tokens.push(JSON.stringify(tokenValue));
}
// tag token
var exp = parseFilters(match[1].trim());
tokens.push("_s(" + exp + ")");
rawTokens.push({ '@binding': exp });
lastIndex = index + match[0].length;
}
if (lastIndex < text.length) {
rawTokens.push((tokenValue = text.slice(lastIndex)));
tokens.push(JSON.stringify(tokenValue));
}
return {
expression: tokens.join('+'),
tokens: rawTokens,
};
}
/* eslint-disable no-unused-vars */
function baseWarn(msg, range) {
console.error("[Vue compiler]: " + msg);
}
/* eslint-enable no-unused-vars */
function pluckModuleFunction(modules, key) {
return modules ? modules.map(function (m) { return m[key]; }).filter(function (_) { return _; }) : [];
}
function addProp(el, name, value, range, dynamic) {
(el.props || (el.props = [])).push(rangeSetItem({ name: name, value: value, dynamic: dynamic }, range));
el.plain = false;
}
function addAttr(el, name, value, range, dynamic) {
var attrs = dynamic
? el.dynamicAttrs || (el.dynamicAttrs = [])
: el.attrs || (el.attrs = []);
attrs.push(rangeSetItem({ name: name, value: value, dynamic: dynamic }, range));
el.plain = false;
}
// add a raw attr (use this in preTransforms)
function addRawAttr(el, name, value, range) {
el.attrsMap[name] = value;
el.attrsList.push(rangeSetItem({ name: name, value: value }, range));
}
function addDirective(el, name, rawName, value, arg, isDynamicArg, modifiers, range) {
(el.directives || (el.directives = [])).push(rangeSetItem({
name: name,
rawName: rawName,
value: value,
arg: arg,
isDynamicArg: isDynamicArg,
modifiers: modifiers,
}, range));
el.plain = false;
}
function prependModifierMarker(symbol, name, dynamic) {
return dynamic ? "_p(" + name + ",\"" + symbol + "\")" : symbol + name; // mark the event as captured
}
function addHandler(el, name, value, modifiers, important, warn, range, dynamic) {
modifiers = modifiers || emptyObject;
// warn prevent and passive modifier
/* istanbul ignore if */
if (warn &&
modifiers.prevent &&
modifiers.passive) {
warn("passive and prevent can't be used together. " +
"Passive handler can't prevent default event.", range);
}
// normalize click.right and click.middle since they don't actually fire
// this is technically browser-specific, but at least for now browsers are
// the only target envs that have right/middle clicks.
if (modifiers.right) {
if (dynamic) {
name = "(" + name + ")==='click'?'contextmenu':(" + name + ")";
}
else if (name === 'click') {
name = 'contextmenu';
delete modifiers.right;
}
}
else if (modifiers.middle) {
if (dynamic) {
name = "(" + name + ")==='click'?'mouseup':(" + name + ")";
}
else if (name === 'click') {
name = 'mouseup';
}
}
// check capture modifier
if (modifiers.capture) {
delete modifiers.capture;
name = prependModifierMarker('!', name, dynamic);
}
if (modifiers.once) {
delete modifiers.once;
name = prependModifierMarker('~', name, dynamic);
}
/* istanbul ignore if */
if (modifiers.passive) {
delete modifiers.passive;
name = prependModifierMarker('&', name, dynamic);
}
var events;
if (modifiers.native) {
delete modifiers.native;
events = el.nativeEvents || (el.nativeEvents = {});
}
else {
events = el.events || (el.events = {});
}
var newHandler = rangeSetItem({ value: value.trim(), dynamic: dynamic }, range);
if (modifiers !== emptyObject) {
newHandler.modifiers = modifiers;
}
var handlers = events[name];
/* istanbul ignore if */
if (Array.isArray(handlers)) {
important ? handlers.unshift(newHandler) : handlers.push(newHandler);
}
else if (handlers) {
events[name] = important ? [newHandler, handlers] : [handlers, newHandler];
}
else {
events[name] = newHandler;
}
el.plain = false;
}
function getRawBindingAttr(el, name) {
return (el.rawAttrsMap[':' + name] ||
el.rawAttrsMap['v-bind:' + name] ||
el.rawAttrsMap[name]);
}
function getBindingAttr(el, name, getStatic) {
var dynamicValue = getAndRemoveAttr(el, ':' + name) || getAndRemoveAttr(el, 'v-bind:' + name);
if (dynamicValue != null) {
return parseFilters(dynamicValue);
}
else if (getStatic !== false) {
var staticValue = getAndRemoveAttr(el, name);
if (staticValue != null) {
return JSON.stringify(staticValue);
}
}
}
// note: this only removes the attr from the Array (attrsList) so that it
// doesn't get processed by processAttrs.
// By default it does NOT remove it from the map (attrsMap) because the map is
// needed during codegen.
function getAndRemoveAttr(el, name, removeFromMap) {
var val;
if ((val = el.attrsMap[name]) != null) {
var list = el.attrsList;
for (var i = 0, l = list.length; i < l; i++) {
if (list[i].name === name) {
list.splice(i, 1);
break;
}
}
}
if (removeFromMap) {
delete el.attrsMap[name];
}
return val;
}
function getAndRemoveAttrByRegex(el, name) {
var list = el.attrsList;
for (var i = 0, l = list.length; i < l; i++) {
var attr = list[i];
if (name.test(attr.name)) {
list.splice(i, 1);
return attr;
}
}
}
function rangeSetItem(item, range) {
if (range) {
if (range.start != null) {
item.start = range.start;
}
if (range.end != null) {
item.end = range.end;
}
}
return item;
}
function transformNode$1(el, options) {
var warn = options.warn || baseWarn;
var staticClass = getAndRemoveAttr(el, 'class');
if (staticClass) {
var res = parseText(staticClass, options.delimiters);
if (res) {
warn("class=\"" + staticClass + "\": " +
'Interpolation inside attributes has been removed. ' +
'Use v-bind or the colon shorthand instead. For example, ' +
'instead of <div class="{{ val }}">, use <div :class="val">.', el.rawAttrsMap['class']);
}
}
if (staticClass) {
el.staticClass = JSON.stringify(staticClass);
}
var classBinding = getBindingAttr(el, 'class', false /* getStatic */);
if (classBinding) {
el.classBinding = classBinding;
}
}
function genData$2(el) {
var data = '';
if (el.staticClass) {
data += "staticClass:" + el.staticClass + ",";
}
if (el.classBinding) {
data += "class:" + el.classBinding + ",";
}
return data;
}
var klass = {
staticKeys: ['staticClass'],
transformNode: transformNode$1,
genData: genData$2,
};
function transformNode(el, options) {
var warn = options.warn || baseWarn;
var staticStyle = getAndRemoveAttr(el, 'style');
if (staticStyle) {
/* istanbul ignore if */
{
var res = parseText(staticStyle, options.delimiters);
if (res) {
warn("style=\"" + staticStyle + "\": " +
'Interpolation inside attributes has been removed. ' +
'Use v-bind or the colon shorthand instead. For example, ' +
'instead of <div style="{{ val }}">, use <div :style="val">.', el.rawAttrsMap['style']);
}
}
el.staticStyle = JSON.stringify(parseStyleText(staticStyle));
}
var styleBinding = getBindingAttr(el, 'style', false /* getStatic */);
if (styleBinding) {
el.styleBinding = styleBinding;
}
}
function genData$1(el) {
var data = '';
if (el.staticStyle) {
data += "staticStyle:" + el.staticStyle + ",";
}
if (el.styleBinding) {
data += "style:(" + el.styleBinding + "),";
}
return data;
}
var style = {
staticKeys: ['staticStyle'],
transformNode: transformNode,
genData: genData$1,
};
/**
* Not type-checking this file because it's mostly vendor code.
*/
// Regular Expressions for parsing tags and attributes
var attribute = /^\s*([^\s"'<>\/=]+)(?:\s*(=)\s*(?:"([^"]*)"+|'([^']*)'+|([^\s"'=<>`]+)))?/;
var dynamicArgAttribute = /^\s*((?:v-[\w-]+:|@|:|#)\[[^=]+?\][^\s"'<>\/=]*)(?:\s*(=)\s*(?:"([^"]*)"+|'([^']*)'+|([^\s"'=<>`]+)))?/;
var ncname = "[a-zA-Z_][\\-\\.0-9_a-zA-Z" + unicodeRegExp.source + "]*";
var qnameCapture = "((?:" + ncname + "\\:)?" + ncname + ")";
var startTagOpen = new RegExp("^<" + qnameCapture);
var startTagClose = /^\s*(\/?)>/;
var endTag = new RegExp("^<\\/" + qnameCapture + "[^>]*>");
var doctype = /^<!DOCTYPE [^>]+>/i;
// #7298: escape - to avoid being passed as HTML comment when inlined in page
var comment = /^<!\--/;
var conditionalComment = /^<!\[/;
// Special Elements (can contain anything)
var isPlainTextElement = makeMap('script,style,textarea', true);
var reCache = {};
var decodingMap = {
'&lt;': '<',
'&gt;': '>',
'&quot;': '"',
'&amp;': '&',
'&#10;': '\n',
'&#9;': '\t',
'&#39;': "'",
};
var encodedAttr = /&(?:lt|gt|quot|amp|#39);/g;
var encodedAttrWithNewLines = /&(?:lt|gt|quot|amp|#39|#10|#9);/g;
// #5992
var isIgnoreNewlineTag = makeMap('pre,textarea', true);
var shouldIgnoreFirstNewline = function (tag, html) {
return tag && isIgnoreNewlineTag(tag) && html[0] === '\n';
};
function decodeAttr(value, shouldDecodeNewlines) {
var re = shouldDecodeNewlines ? encodedAttrWithNewLines : encodedAttr;
return value.replace(re, function (match) { return decodingMap[match]; });
}
function parseHTML(html, options) {
var stack = [];
var expectHTML = options.expectHTML;
var isUnaryTag = options.isUnaryTag || no;
var canBeLeftOpenTag = options.canBeLeftOpenTag || no;
var index = 0;
var last, lastTag;
var _loop_1 = function () {
last = html;
// Make sure we're not in a plaintext content element like script/style
if (!lastTag || !isPlainTextElement(lastTag)) {
var textEnd = html.indexOf('<');
if (textEnd === 0) {
// Comment:
if (comment.test(html)) {
var commentEnd = html.indexOf('-->');
if (commentEnd >= 0) {
if (options.shouldKeepComment) {
options.comment(html.substring(4, commentEnd), index, index + commentEnd + 3);
}
advance(commentEnd + 3);
return "continue";
}
}
// http://en.wikipedia.org/wiki/Conditional_comment#Downlevel-revealed_conditional_comment
if (conditionalComment.test(html)) {
var conditionalEnd = html.indexOf(']>');
if (conditionalEnd >= 0) {
advance(conditionalEnd + 2);
return "continue";
}
}
// Doctype:
var doctypeMatch = html.match(doctype);
if (doctypeMatch) {
advance(doctypeMatch[0].length);
return "continue";
}
// End tag:
var endTagMatch = html.match(endTag);
if (endTagMatch) {
var curIndex = index;
advance(endTagMatch[0].length);
parseEndTag(endTagMatch[1], curIndex, index);
return "continue";
}
// Start tag:
var startTagMatch = parseStartTag();
if (startTagMatch) {
handleStartTag(startTagMatch);
if (shouldIgnoreFirstNewline(startTagMatch.tagName, html)) {
advance(1);
}
return "continue";
}
}
var text = void 0, rest = void 0, next = void 0;
if (textEnd >= 0) {
rest = html.slice(textEnd);
while (!endTag.test(rest) &&
!startTagOpen.test(rest) &&
!comment.test(rest) &&
!conditionalComment.test(rest)) {
// < in plain text, be forgiving and treat it as text
next = rest.indexOf('<', 1);
if (next < 0)
{ break; }
textEnd += next;
rest = html.slice(textEnd);
}
text = html.substring(0, textEnd);
}
if (textEnd < 0) {
text = html;
}
if (text) {
advance(text.length);
}
if (options.chars && text) {
options.chars(text, index - text.length, index);
}
}
else {
var endTagLength_1 = 0;
var stackedTag_1 = lastTag.toLowerCase();
var reStackedTag = reCache[stackedTag_1] ||
(reCache[stackedTag_1] = new RegExp('([\\s\\S]*?)(</' + stackedTag_1 + '[^>]*>)', 'i'));
var rest = html.replace(reStackedTag, function (all, text, endTag) {
endTagLength_1 = endTag.length;
if (!isPlainTextElement(stackedTag_1) && stackedTag_1 !== 'noscript') {
text = text
.replace(/<!\--([\s\S]*?)-->/g, '$1') // #7298
.replace(/<!\[CDATA\[([\s\S]*?)]]>/g, '$1');
}
if (shouldIgnoreFirstNewline(stackedTag_1, text)) {
text = text.slice(1);
}
if (options.chars) {
options.chars(text);
}
return '';
});
index += html.length - rest.length;
html = rest;
parseEndTag(stackedTag_1, index - endTagLength_1, index);
}
if (html === last) {
options.chars && options.chars(html);
if (!stack.length &&
options.warn) {
options.warn("Mal-formatted tag at end of template: \"" + html + "\"", {
start: index + html.length,
});
}
return "break";
}
};
while (html) {
var state_1 = _loop_1();
if (state_1 === "break")
{ break; }
}
// Clean up any remaining tags
parseEndTag();
function advance(n) {
index += n;
html = html.substring(n);
}
function parseStartTag() {
var start = html.match(startTagOpen);
if (start) {
var match = {
tagName: start[1],
attrs: [],
start: index,
};
advance(start[0].length);
var end = void 0, attr = void 0;
while (!(end = html.match(startTagClose)) &&
(attr = html.match(dynamicArgAttribute) || html.match(attribute))) {
attr.start = index;
advance(attr[0].length);
attr.end = index;
match.attrs.push(attr);
}
if (end) {
match.unarySlash = end[1];
advance(end[0].length);
match.end = index;
return match;
}
}
}
function handleStartTag(match) {
var tagName = match.tagName;
var unarySlash = match.unarySlash;
if (expectHTML) {
if (lastTag === 'p' && isNonPhrasingTag(tagName)) {
parseEndTag(lastTag);
}
if (canBeLeftOpenTag(tagName) && lastTag === tagName) {
parseEndTag(tagName);
}
}
var unary = isUnaryTag(tagName) || !!unarySlash;
var l = match.attrs.length;
var attrs = new Array(l);
for (var i = 0; i < l; i++) {
var args = match.attrs[i];
var value = args[3] || args[4] || args[5] || '';
var shouldDecodeNewlines = tagName === 'a' && args[1] === 'href'
? options.shouldDecodeNewlinesForHref
: options.shouldDecodeNewlines;
attrs[i] = {
name: args[1],
value: decodeAttr(value, shouldDecodeNewlines),
};
if (options.outputSourceRange) {
attrs[i].start = args.start + args[0].match(/^\s*/).length;
attrs[i].end = args.end;
}
}
if (!unary) {
stack.push({
tag: tagName,
lowerCasedTag: tagName.toLowerCase(),
attrs: attrs,
start: match.start,
end: match.end,
});
lastTag = tagName;
}
if (options.start) {
options.start(tagName, attrs, unary, match.start, match.end);
}
}
function parseEndTag(tagName, start, end) {
var pos, lowerCasedTagName;
if (start == null)
{ start = index; }
if (end == null)
{ end = index; }
// Find the closest opened tag of the same type
if (tagName) {
lowerCasedTagName = tagName.toLowerCase();
for (pos = stack.length - 1; pos >= 0; pos--) {
if (stack[pos].lowerCasedTag === lowerCasedTagName) {
break;
}
}
}
else {
// If no tag name is provided, clean shop
pos = 0;
}
if (pos >= 0) {
// Close all the open elements, up the stack
for (var i = stack.length - 1; i >= pos; i--) {
if ((i > pos || !tagName) &&
options.warn) {
options.warn("tag <" + stack[i].tag + "> has no matching end tag.", {
start: stack[i].start,
end: stack[i].end,
});
}
if (options.end) {
options.end(stack[i].tag, start, end);
}
}
// Remove the open elements from the stack
stack.length = pos;
lastTag = pos && stack[pos - 1].tag;
}
else if (lowerCasedTagName === 'br') {
if (options.start) {
options.start(tagName, [], true, start, end);
}
}
else if (lowerCasedTagName === 'p') {
if (options.start) {
options.start(tagName, [], false, start, end);
}
if (options.end) {
options.end(tagName, start, end);
}
}
}
}
/**
* Cross-platform code generation for component v-model
*/
function genComponentModel(el, value, modifiers) {
var _a = modifiers || {}, number = _a.number, trim = _a.trim;
var baseValueExpression = '$$v';
var valueExpression = baseValueExpression;
if (trim) {
valueExpression =
"(typeof " + baseValueExpression + " === 'string'" +
("? " + baseValueExpression + ".trim()") +
(": " + baseValueExpression + ")");
}
if (number) {
valueExpression = "_n(" + valueExpression + ")";
}
var assignment = genAssignmentCode(value, valueExpression);
el.model = {
value: "(" + value + ")",
expression: JSON.stringify(value),
callback: "function (" + baseValueExpression + ") {" + assignment + "}",
};
}
/**
* Cross-platform codegen helper for generating v-model value assignment code.
*/
function genAssignmentCode(value, assignment) {
var res = parseModel(value);
if (res.key === null) {
return value + "=" + assignment;
}
else {
return "$set(" + res.exp + ", " + res.key + ", " + assignment + ")";
}
}
/**
* Parse a v-model expression into a base path and a final key segment.
* Handles both dot-path and possible square brackets.
*
* Possible cases:
*
* - test
* - test[key]
* - test[test1[key]]
* - test["a"][key]
* - xxx.test[a[a].test1[key]]
* - test.xxx.a["asa"][test1[key]]
*
*/
var len, str, chr, index, expressionPos, expressionEndPos;
function parseModel(val) {
// Fix https://github.com/vuejs/vue/pull/7730
// allow v-model="obj.val " (trailing whitespace)
val = val.trim();
len = val.length;
if (val.indexOf('[') < 0 || val.lastIndexOf(']') < len - 1) {
index = val.lastIndexOf('.');
if (index > -1) {
return {
exp: val.slice(0, index),
key: '"' + val.slice(index + 1) + '"',
};
}
else {
return {
exp: val,
key: null,
};
}
}
str = val;
index = expressionPos = expressionEndPos = 0;
while (!eof()) {
chr = next();
/* istanbul ignore if */
if (isStringStart(chr)) {
parseString(chr);
}
else if (chr === 0x5b) {
parseBracket(chr);
}
}
return {
exp: val.slice(0, expressionPos),
key: val.slice(expressionPos + 1, expressionEndPos),
};
}
function next() {
return str.charCodeAt(++index);
}
function eof() {
return index >= len;
}
function isStringStart(chr) {
return chr === 0x22 || chr === 0x27;
}
function parseBracket(chr) {
var inBracket = 1;
expressionPos = index;
while (!eof()) {
chr = next();
if (isStringStart(chr)) {
parseString(chr);
continue;
}
if (chr === 0x5b)
{ inBracket++; }
if (chr === 0x5d)
{ inBracket--; }
if (inBracket === 0) {
expressionEndPos = index;
break;
}
}
}
function parseString(chr) {
var stringQuote = chr;
while (!eof()) {
chr = next();
if (chr === stringQuote) {
break;
}
}
}
var he = require('he');
var onRE = /^@|^v-on:/;
var dirRE = /^v-|^@|^:|^#/;
var forAliasRE = /([\s\S]*?)\s+(?:in|of)\s+([\s\S]*)/;
var forIteratorRE = /,([^,\}\]]*)(?:,([^,\}\]]*))?$/;
var stripParensRE = /^\(|\)$/g;
var dynamicArgRE = /^\[.*\]$/;
var argRE = /:(.*)$/;
var bindRE = /^:|^\.|^v-bind:/;
var modifierRE = /\.[^.\]]+(?=[^\]]*$)/g;
var slotRE = /^v-slot(:|$)|^#/;
var lineBreakRE = /[\r\n]/;
var whitespaceRE = /[ \f\t\r\n]+/g;
var invalidAttributeRE = /[\s"'<>\/=]/;
var decodeHTMLCached = cached(he.decode);
var emptySlotScopeToken = "_empty_";
// configurable state
var warn$1;
var delimiters;
var transforms;
var preTransforms;
var postTransforms;
var platformIsPreTag;
var platformMustUseProp;
var platformGetTagNamespace;
var maybeComponent;
function createASTElement(tag, attrs, parent) {
return {
type: 1,
tag: tag,
attrsList: attrs,
attrsMap: makeAttrsMap(attrs),
rawAttrsMap: {},
parent: parent,
children: [],
};
}
/**
* Convert HTML string to AST.
*/
function parse(template, options) {
warn$1 = options.warn || baseWarn;
platformIsPreTag = options.isPreTag || no;
platformMustUseProp = options.mustUseProp || no;
platformGetTagNamespace = options.getTagNamespace || no;
var isReservedTag = options.isReservedTag || no;
maybeComponent = function (el) { return !!el.component || !isReservedTag(el.tag); };
transforms = pluckModuleFunction(options.modules, 'transformNode');
preTransforms = pluckModuleFunction(options.modules, 'preTransformNode');
postTransforms = pluckModuleFunction(options.modules, 'postTransformNode');
delimiters = options.delimiters;
var stack = [];
var preserveWhitespace = options.preserveWhitespace !== false;
var whitespaceOption = options.whitespace;
var root;
var currentParent;
var inVPre = false;
var inPre = false;
var warned = false;
function warnOnce(msg, range) {
if (!warned) {
warned = true;
warn$1(msg, range);
}
}
function closeElement(element) {
trimEndingWhitespace(element);
if (!inVPre && !element.processed) {
element = processElement(element, options);
}
// tree management
if (!stack.length && element !== root) {
// allow root elements with v-if, v-else-if and v-else
if (root.if && (element.elseif || element.else)) {
{
checkRootConstraints(element);
}
addIfCondition(root, {
exp: element.elseif,
block: element,
});
}
else {
warnOnce("Component template should contain exactly one root element. " +
"If you are using v-if on multiple elements, " +
"use v-else-if to chain them instead.", { start: element.start });
}
}
if (currentParent && !element.forbidden) {
if (element.elseif || element.else) {
processIfConditions(element, currentParent);
}
else {
if (element.slotScope) {
// scoped slot
// keep it in the children list so that v-else(-if) conditions can
// find it as the prev node.
var name_1 = element.slotTarget || '"default"';
(currentParent.scopedSlots || (currentParent.scopedSlots = {}))[name_1] = element;
}
currentParent.children.push(element);
element.parent = currentParent;
}
}
// final children cleanup
// filter out scoped slots
element.children = element.children.filter(function (c) { return !c.slotScope; });
// remove trailing whitespace node again
trimEndingWhitespace(element);
// check pre state
if (element.pre) {
inVPre = false;
}
if (platformIsPreTag(element.tag)) {
inPre = false;
}
// apply post-transforms
for (var i = 0; i < postTransforms.length; i++) {
postTransforms[i](element, options);
}
}
function trimEndingWhitespace(el) {
// remove trailing whitespace node
if (!inPre) {
var lastNode = void 0;
while ((lastNode = el.children[el.children.length - 1]) &&
lastNode.type === 3 &&
lastNode.text === ' ') {
el.children.pop();
}
}
}
function checkRootConstraints(el) {
if (el.tag === 'slot' || el.tag === 'template') {
warnOnce("Cannot use <" + el.tag + "> as component root element because it may " +
'contain multiple nodes.', { start: el.start });
}
if (el.attrsMap.hasOwnProperty('v-for')) {
warnOnce('Cannot use v-for on stateful component root element because ' +
'it renders multiple elements.', el.rawAttrsMap['v-for']);
}
}
parseHTML(template, {
warn: warn$1,
expectHTML: options.expectHTML,
isUnaryTag: options.isUnaryTag,
canBeLeftOpenTag: options.canBeLeftOpenTag,
shouldDecodeNewlines: options.shouldDecodeNewlines,
shouldDecodeNewlinesForHref: options.shouldDecodeNewlinesForHref,
shouldKeepComment: options.comments,
outputSourceRange: options.outputSourceRange,
start: function (tag, attrs, unary, start, end) {
// check namespace.
// inherit parent ns if there is one
var ns = (currentParent && currentParent.ns) || platformGetTagNamespace(tag);
// handle IE svg bug
/* istanbul ignore if */
if (isIE && ns === 'svg') {
attrs = guardIESVGBug(attrs);
}
var element = createASTElement(tag, attrs, currentParent);
if (ns) {
element.ns = ns;
}
{
if (options.outputSourceRange) {
element.start = start;
element.end = end;
element.rawAttrsMap = element.attrsList.reduce(function (cumulated, attr) {
cumulated[attr.name] = attr;
return cumulated;
}, {});
}
attrs.forEach(function (attr) {
if (invalidAttributeRE.test(attr.name)) {
warn$1("Invalid dynamic argument expression: attribute names cannot contain " +
"spaces, quotes, <, >, / or =.", {
start: attr.start + attr.name.indexOf("["),
end: attr.start + attr.name.length,
});
}
});
}
if (isForbiddenTag(element) && !isServerRendering()) {
element.forbidden = true;
warn$1('Templates should only be responsible for mapping the state to the ' +
'UI. Avoid placing tags with side-effects in your templates, such as ' +
("<" + tag + ">") +
', as they will not be parsed.', { start: element.start });
}
// apply pre-transforms
for (var i = 0; i < preTransforms.length; i++) {
element = preTransforms[i](element, options) || element;
}
if (!inVPre) {
processPre(element);
if (element.pre) {
inVPre = true;
}
}
if (platformIsPreTag(element.tag)) {
inPre = true;
}
if (inVPre) {
processRawAttrs(element);
}
else if (!element.processed) {
// structural directives
processFor(element);
processIf(element);
processOnce(element);
}
if (!root) {
root = element;
{
checkRootConstraints(root);
}
}
if (!unary) {
currentParent = element;
stack.push(element);
}
else {
closeElement(element);
}
},
end: function (tag, start, end) {
var element = stack[stack.length - 1];
// pop stack
stack.length -= 1;
currentParent = stack[stack.length - 1];
if (options.outputSourceRange) {
element.end = end;
}
closeElement(element);
},
chars: function (text, start, end) {
if (!currentParent) {
{
if (text === template) {
warnOnce('Component template requires a root element, rather than just text.', { start: start });
}
else if ((text = text.trim())) {
warnOnce("text \"" + text + "\" outside root element will be ignored.", {
start: start,
});
}
}
return;
}
// IE textarea placeholder bug
/* istanbul ignore if */
if (isIE &&
currentParent.tag === 'textarea' &&
currentParent.attrsMap.placeholder === text) {
return;
}
var children = currentParent.children;
if (inPre || text.trim()) {
text = isTextTag(currentParent) ? text : decodeHTMLCached(text);
}
else if (!children.length) {
// remove the whitespace-only node right after an opening tag
text = '';
}
else if (whitespaceOption) {
if (whitespaceOption === 'condense') {
// in condense mode, remove the whitespace node if it contains
// line break, otherwise condense to a single space
text = lineBreakRE.test(text) ? '' : ' ';
}
else {
text = ' ';
}
}
else {
text = preserveWhitespace ? ' ' : '';
}
if (text) {
if (!inPre && whitespaceOption === 'condense') {
// condense consecutive whitespaces into single space
text = text.replace(whitespaceRE, ' ');
}
var res = void 0;
var child = void 0;
if (!inVPre && text !== ' ' && (res = parseText(text, delimiters))) {
child = {
type: 2,
expression: res.expression,
tokens: res.tokens,
text: text,
};
}
else if (text !== ' ' ||
!children.length ||
children[children.length - 1].text !== ' ') {
child = {
type: 3,
text: text,
};
}
if (child) {
if (options.outputSourceRange) {
child.start = start;
child.end = end;
}
children.push(child);
}
}
},
comment: function (text, start, end) {
// adding anything as a sibling to the root node is forbidden
// comments should still be allowed, but ignored
if (currentParent) {
var child = {
type: 3,
text: text,
isComment: true,
};
if (options.outputSourceRange) {
child.start = start;
child.end = end;
}
currentParent.children.push(child);
}
},
});
return root;
}
function processPre(el) {
if (getAndRemoveAttr(el, 'v-pre') != null) {
el.pre = true;
}
}
function processRawAttrs(el) {
var list = el.attrsList;
var len = list.length;
if (len) {
var attrs = (el.attrs = new Array(len));
for (var i = 0; i < len; i++) {
attrs[i] = {
name: list[i].name,
value: JSON.stringify(list[i].value),
};
if (list[i].start != null) {
attrs[i].start = list[i].start;
attrs[i].end = list[i].end;
}
}
}
else if (!el.pre) {
// non root node in pre blocks with no attributes
el.plain = true;
}
}
function processElement(element, options) {
processKey(element);
// determine whether this is a plain element after
// removing structural attributes
element.plain =
!element.key && !element.scopedSlots && !element.attrsList.length;
processRef(element);
processSlotContent(element);
processSlotOutlet(element);
processComponent(element);
for (var i = 0; i < transforms.length; i++) {
element = transforms[i](element, options) || element;
}
processAttrs(element);
return element;
}
function processKey(el) {
var exp = getBindingAttr(el, 'key');
if (exp) {
{
if (el.tag === 'template') {
warn$1("<template> cannot be keyed. Place the key on real elements instead.", getRawBindingAttr(el, 'key'));
}
if (el.for) {
var iterator = el.iterator2 || el.iterator1;
var parent_1 = el.parent;
if (iterator &&
iterator === exp &&
parent_1 &&
parent_1.tag === 'transition-group') {
warn$1("Do not use v-for index as key on <transition-group> children, " +
"this is the same as not using keys.", getRawBindingAttr(el, 'key'), true /* tip */);
}
}
}
el.key = exp;
}
}
function processRef(el) {
var ref = getBindingAttr(el, 'ref');
if (ref) {
el.ref = ref;
el.refInFor = checkInFor(el);
}
}
function processFor(el) {
var exp;
if ((exp = getAndRemoveAttr(el, 'v-for'))) {
var res = parseFor(exp);
if (res) {
extend(el, res);
}
else {
warn$1("Invalid v-for expression: " + exp, el.rawAttrsMap['v-for']);
}
}
}
function parseFor(exp) {
var inMatch = exp.match(forAliasRE);
if (!inMatch)
{ return; }
var res = {};
res.for = inMatch[2].trim();
var alias = inMatch[1].trim().replace(stripParensRE, '');
var iteratorMatch = alias.match(forIteratorRE);
if (iteratorMatch) {
res.alias = alias.replace(forIteratorRE, '').trim();
res.iterator1 = iteratorMatch[1].trim();
if (iteratorMatch[2]) {
res.iterator2 = iteratorMatch[2].trim();
}
}
else {
res.alias = alias;
}
return res;
}
function processIf(el) {
var exp = getAndRemoveAttr(el, 'v-if');
if (exp) {
el.if = exp;
addIfCondition(el, {
exp: exp,
block: el,
});
}
else {
if (getAndRemoveAttr(el, 'v-else') != null) {
el.else = true;
}
var elseif = getAndRemoveAttr(el, 'v-else-if');
if (elseif) {
el.elseif = elseif;
}
}
}
function processIfConditions(el, parent) {
var prev = findPrevElement(parent.children);
if (prev && prev.if) {
addIfCondition(prev, {
exp: el.elseif,
block: el,
});
}
else {
warn$1("v-" + (el.elseif ? 'else-if="' + el.elseif + '"' : 'else') + " " +
("used on element <" + el.tag + "> without corresponding v-if."), el.rawAttrsMap[el.elseif ? 'v-else-if' : 'v-else']);
}
}
function findPrevElement(children) {
var i = children.length;
while (i--) {
if (children[i].type === 1) {
return children[i];
}
else {
if (children[i].text !== ' ') {
warn$1("text \"" + children[i].text.trim() + "\" between v-if and v-else(-if) " +
"will be ignored.", children[i]);
}
children.pop();
}
}
}
function addIfCondition(el, condition) {
if (!el.ifConditions) {
el.ifConditions = [];
}
el.ifConditions.push(condition);
}
function processOnce(el) {
var once = getAndRemoveAttr(el, 'v-once');
if (once != null) {
el.once = true;
}
}
// handle content being passed to a component as slot,
// e.g. <template slot="xxx">, <div slot-scope="xxx">
function processSlotContent(el) {
var slotScope;
if (el.tag === 'template') {
slotScope = getAndRemoveAttr(el, 'scope');
/* istanbul ignore if */
if (slotScope) {
warn$1("the \"scope\" attribute for scoped slots have been deprecated and " +
"replaced by \"slot-scope\" since 2.5. The new \"slot-scope\" attribute " +
"can also be used on plain elements in addition to <template> to " +
"denote scoped slots.", el.rawAttrsMap['scope'], true);
}
el.slotScope = slotScope || getAndRemoveAttr(el, 'slot-scope');
}
else if ((slotScope = getAndRemoveAttr(el, 'slot-scope'))) {
/* istanbul ignore if */
if (el.attrsMap['v-for']) {
warn$1("Ambiguous combined usage of slot-scope and v-for on <" + el.tag + "> " +
"(v-for takes higher priority). Use a wrapper <template> for the " +
"scoped slot to make it clearer.", el.rawAttrsMap['slot-scope'], true);
}
el.slotScope = slotScope;
}
// slot="xxx"
var slotTarget = getBindingAttr(el, 'slot');
if (slotTarget) {
el.slotTarget = slotTarget === '""' ? '"default"' : slotTarget;
el.slotTargetDynamic = !!(el.attrsMap[':slot'] || el.attrsMap['v-bind:slot']);
// preserve slot as an attribute for native shadow DOM compat
// only for non-scoped slots.
if (el.tag !== 'template' && !el.slotScope) {
addAttr(el, 'slot', slotTarget, getRawBindingAttr(el, 'slot'));
}
}
// 2.6 v-slot syntax
{
if (el.tag === 'template') {
// v-slot on <template>
var slotBinding = getAndRemoveAttrByRegex(el, slotRE);
if (slotBinding) {
{
if (el.slotTarget || el.slotScope) {
warn$1("Unexpected mixed usage of different slot syntaxes.", el);
}
if (el.parent && !maybeComponent(el.parent)) {
warn$1("<template v-slot> can only appear at the root level inside " +
"the receiving component", el);
}
}
var _a = getSlotName(slotBinding), name_2 = _a.name, dynamic = _a.dynamic;
el.slotTarget = name_2;
el.slotTargetDynamic = dynamic;
el.slotScope = slotBinding.value || emptySlotScopeToken; // force it into a scoped slot for perf
}
}
else {
// v-slot on component, denotes default slot
var slotBinding = getAndRemoveAttrByRegex(el, slotRE);
if (slotBinding) {
{
if (!maybeComponent(el)) {
warn$1("v-slot can only be used on components or <template>.", slotBinding);
}
if (el.slotScope || el.slotTarget) {
warn$1("Unexpected mixed usage of different slot syntaxes.", el);
}
if (el.scopedSlots) {
warn$1("To avoid scope ambiguity, the default slot should also use " +
"<template> syntax when there are other named slots.", slotBinding);
}
}
// add the component's children to its default slot
var slots = el.scopedSlots || (el.scopedSlots = {});
var _b = getSlotName(slotBinding), name_3 = _b.name, dynamic = _b.dynamic;
var slotContainer_1 = (slots[name_3] = createASTElement('template', [], el));
slotContainer_1.slotTarget = name_3;
slotContainer_1.slotTargetDynamic = dynamic;
slotContainer_1.children = el.children.filter(function (c) {
if (!c.slotScope) {
c.parent = slotContainer_1;
return true;
}
});
slotContainer_1.slotScope = slotBinding.value || emptySlotScopeToken;
// remove children as they are returned from scopedSlots now
el.children = [];
// mark el non-plain so data gets generated
el.plain = false;
}
}
}
}
function getSlotName(binding) {
var name = binding.name.replace(slotRE, '');
if (!name) {
if (binding.name[0] !== '#') {
name = 'default';
}
else {
warn$1("v-slot shorthand syntax requires a slot name.", binding);
}
}
return dynamicArgRE.test(name)
? // dynamic [name]
{ name: name.slice(1, -1), dynamic: true }
: // static name
{ name: "\"" + name + "\"", dynamic: false };
}
// handle <slot/> outlets
function processSlotOutlet(el) {
if (el.tag === 'slot') {
el.slotName = getBindingAttr(el, 'name');
if (el.key) {
warn$1("`key` does not work on <slot> because slots are abstract outlets " +
"and can possibly expand into multiple elements. " +
"Use the key on a wrapping element instead.", getRawBindingAttr(el, 'key'));
}
}
}
function processComponent(el) {
var binding;
if ((binding = getBindingAttr(el, 'is'))) {
el.component = binding;
}
if (getAndRemoveAttr(el, 'inline-template') != null) {
el.inlineTemplate = true;
}
}
function processAttrs(el) {
var list = el.attrsList;
var i, l, name, rawName, value, modifiers, syncGen, isDynamic;
for (i = 0, l = list.length; i < l; i++) {
name = rawName = list[i].name;
value = list[i].value;
if (dirRE.test(name)) {
// mark element as dynamic
el.hasBindings = true;
// modifiers
modifiers = parseModifiers(name.replace(dirRE, ''));
// support .foo shorthand syntax for the .prop modifier
if (modifiers) {
name = name.replace(modifierRE, '');
}
if (bindRE.test(name)) {
// v-bind
name = name.replace(bindRE, '');
value = parseFilters(value);
isDynamic = dynamicArgRE.test(name);
if (isDynamic) {
name = name.slice(1, -1);
}
if (value.trim().length === 0) {
warn$1("The value for a v-bind expression cannot be empty. Found in \"v-bind:" + name + "\"");
}
if (modifiers) {
if (modifiers.prop && !isDynamic) {
name = camelize(name);
if (name === 'innerHtml')
{ name = 'innerHTML'; }
}
if (modifiers.camel && !isDynamic) {
name = camelize(name);
}
if (modifiers.sync) {
syncGen = genAssignmentCode(value, "$event");
if (!isDynamic) {
addHandler(el, "update:" + camelize(name), syncGen, null, false, warn$1, list[i]);
if (hyphenate(name) !== camelize(name)) {
addHandler(el, "update:" + hyphenate(name), syncGen, null, false, warn$1, list[i]);
}
}
else {
// handler w/ dynamic event name
addHandler(el, "\"update:\"+(" + name + ")", syncGen, null, false, warn$1, list[i], true // dynamic
);
}
}
}
if ((modifiers && modifiers.prop) ||
(!el.component && platformMustUseProp(el.tag, el.attrsMap.type, name))) {
addProp(el, name, value, list[i], isDynamic);
}
else {
addAttr(el, name, value, list[i], isDynamic);
}
}
else if (onRE.test(name)) {
// v-on
name = name.replace(onRE, '');
isDynamic = dynamicArgRE.test(name);
if (isDynamic) {
name = name.slice(1, -1);
}
addHandler(el, name, value, modifiers, false, warn$1, list[i], isDynamic);
}
else {
// normal directives
name = name.replace(dirRE, '');
// parse arg
var argMatch = name.match(argRE);
var arg = argMatch && argMatch[1];
isDynamic = false;
if (arg) {
name = name.slice(0, -(arg.length + 1));
if (dynamicArgRE.test(arg)) {
arg = arg.slice(1, -1);
isDynamic = true;
}
}
addDirective(el, name, rawName, value, arg, isDynamic, modifiers, list[i]);
if (name === 'model') {
checkForAliasModel(el, value);
}
}
}
else {
// literal attribute
{
var res = parseText(value, delimiters);
if (res) {
warn$1(name + "=\"" + value + "\": " +
'Interpolation inside attributes has been removed. ' +
'Use v-bind or the colon shorthand instead. For example, ' +
'instead of <div id="{{ val }}">, use <div :id="val">.', list[i]);
}
}
addAttr(el, name, JSON.stringify(value), list[i]);
// #6887 firefox doesn't update muted state if set via attribute
// even immediately after element creation
if (!el.component &&
name === 'muted' &&
platformMustUseProp(el.tag, el.attrsMap.type, name)) {
addProp(el, name, 'true', list[i]);
}
}
}
}
function checkInFor(el) {
var parent = el;
while (parent) {
if (parent.for !== undefined) {
return true;
}
parent = parent.parent;
}
return false;
}
function parseModifiers(name) {
var match = name.match(modifierRE);
if (match) {
var ret_1 = {};
match.forEach(function (m) {
ret_1[m.slice(1)] = true;
});
return ret_1;
}
}
function makeAttrsMap(attrs) {
var map = {};
for (var i = 0, l = attrs.length; i < l; i++) {
if (map[attrs[i].name] &&
!isIE &&
!isEdge) {
warn$1('duplicate attribute: ' + attrs[i].name, attrs[i]);
}
map[attrs[i].name] = attrs[i].value;
}
return map;
}
// for script (e.g. type="x/template") or style, do not decode content
function isTextTag(el) {
return el.tag === 'script' || el.tag === 'style';
}
function isForbiddenTag(el) {
return (el.tag === 'style' ||
(el.tag === 'script' &&
(!el.attrsMap.type || el.attrsMap.type === 'text/javascript')));
}
var ieNSBug = /^xmlns:NS\d+/;
var ieNSPrefix = /^NS\d+:/;
/* istanbul ignore next */
function guardIESVGBug(attrs) {
var res = [];
for (var i = 0; i < attrs.length; i++) {
var attr = attrs[i];
if (!ieNSBug.test(attr.name)) {
attr.name = attr.name.replace(ieNSPrefix, '');
res.push(attr);
}
}
return res;
}
function checkForAliasModel(el, value) {
var _el = el;
while (_el) {
if (_el.for && _el.alias === value) {
warn$1("<" + el.tag + " v-model=\"" + value + "\">: " +
"You are binding v-model directly to a v-for iteration alias. " +
"This will not be able to modify the v-for source array because " +
"writing to the alias is like modifying a function local variable. " +
"Consider using an array of objects and use v-model on an object property instead.", el.rawAttrsMap['v-model']);
}
_el = _el.parent;
}
}
/**
* Expand input[v-model] with dynamic type bindings into v-if-else chains
* Turn this:
* <input v-model="data[type]" :type="type">
* into this:
* <input v-if="type === 'checkbox'" type="checkbox" v-model="data[type]">
* <input v-else-if="type === 'radio'" type="radio" v-model="data[type]">
* <input v-else :type="type" v-model="data[type]">
*/
function preTransformNode(el, options) {
if (el.tag === 'input') {
var map = el.attrsMap;
if (!map['v-model']) {
return;
}
var typeBinding = void 0;
if (map[':type'] || map['v-bind:type']) {
typeBinding = getBindingAttr(el, 'type');
}
if (!map.type && !typeBinding && map['v-bind']) {
typeBinding = "(" + map['v-bind'] + ").type";
}
if (typeBinding) {
var ifCondition = getAndRemoveAttr(el, 'v-if', true);
var ifConditionExtra = ifCondition ? "&&(" + ifCondition + ")" : "";
var hasElse = getAndRemoveAttr(el, 'v-else', true) != null;
var elseIfCondition = getAndRemoveAttr(el, 'v-else-if', true);
// 1. checkbox
var branch0 = cloneASTElement(el);
// process for on the main node
processFor(branch0);
addRawAttr(branch0, 'type', 'checkbox');
processElement(branch0, options);
branch0.processed = true; // prevent it from double-processed
branch0.if = "(" + typeBinding + ")==='checkbox'" + ifConditionExtra;
addIfCondition(branch0, {
exp: branch0.if,
block: branch0,
});
// 2. add radio else-if condition
var branch1 = cloneASTElement(el);
getAndRemoveAttr(branch1, 'v-for', true);
addRawAttr(branch1, 'type', 'radio');
processElement(branch1, options);
addIfCondition(branch0, {
exp: "(" + typeBinding + ")==='radio'" + ifConditionExtra,
block: branch1,
});
// 3. other
var branch2 = cloneASTElement(el);
getAndRemoveAttr(branch2, 'v-for', true);
addRawAttr(branch2, ':type', typeBinding);
processElement(branch2, options);
addIfCondition(branch0, {
exp: ifCondition,
block: branch2,
});
if (hasElse) {
branch0.else = true;
}
else if (elseIfCondition) {
branch0.elseif = elseIfCondition;
}
return branch0;
}
}
}
function cloneASTElement(el) {
return createASTElement(el.tag, el.attrsList.slice(), el.parent);
}
var model$1 = {
preTransformNode: preTransformNode,
};
var modules = [klass, style, model$1];
var warn;
// in some cases, the event used has to be determined at runtime
// so we used some reserved tokens during compile.
var RANGE_TOKEN = '__r';
function model(el, dir, _warn) {
warn = _warn;
var value = dir.value;
var modifiers = dir.modifiers;
var tag = el.tag;
var type = el.attrsMap.type;
{
// inputs with type="file" are read only and setting the input's
// value will throw an error.
if (tag === 'input' && type === 'file') {
warn("<" + el.tag + " v-model=\"" + value + "\" type=\"file\">:\n" +
"File inputs are read only. Use a v-on:change listener instead.", el.rawAttrsMap['v-model']);
}
}
if (el.component) {
genComponentModel(el, value, modifiers);
// component v-model doesn't need extra runtime
return false;
}
else if (tag === 'select') {
genSelect(el, value, modifiers);
}
else if (tag === 'input' && type === 'checkbox') {
genCheckboxModel(el, value, modifiers);
}
else if (tag === 'input' && type === 'radio') {
genRadioModel(el, value, modifiers);
}
else if (tag === 'input' || tag === 'textarea') {
genDefaultModel(el, value, modifiers);
}
else {
genComponentModel(el, value, modifiers);
// component v-model doesn't need extra runtime
return false;
}
// ensure runtime directive metadata
return true;
}
function genCheckboxModel(el, value, modifiers) {
var number = modifiers && modifiers.number;
var valueBinding = getBindingAttr(el, 'value') || 'null';
var trueValueBinding = getBindingAttr(el, 'true-value') || 'true';
var falseValueBinding = getBindingAttr(el, 'false-value') || 'false';
addProp(el, 'checked', "Array.isArray(" + value + ")" +
("?_i(" + value + "," + valueBinding + ")>-1") +
(trueValueBinding === 'true'
? ":(" + value + ")"
: ":_q(" + value + "," + trueValueBinding + ")"));
addHandler(el, 'change', "var $$a=" + value + "," +
'$$el=$event.target,' +
("$$c=$$el.checked?(" + trueValueBinding + "):(" + falseValueBinding + ");") +
'if(Array.isArray($$a)){' +
("var $$v=" + (number ? '_n(' + valueBinding + ')' : valueBinding) + ",") +
'$$i=_i($$a,$$v);' +
("if($$el.checked){$$i<0&&(" + genAssignmentCode(value, '$$a.concat([$$v])') + ")}") +
("else{$$i>-1&&(" + genAssignmentCode(value, '$$a.slice(0,$$i).concat($$a.slice($$i+1))') + ")}") +
("}else{" + genAssignmentCode(value, '$$c') + "}"), null, true);
}
function genRadioModel(el, value, modifiers) {
var number = modifiers && modifiers.number;
var valueBinding = getBindingAttr(el, 'value') || 'null';
valueBinding = number ? "_n(" + valueBinding + ")" : valueBinding;
addProp(el, 'checked', "_q(" + value + "," + valueBinding + ")");
addHandler(el, 'change', genAssignmentCode(value, valueBinding), null, true);
}
function genSelect(el, value, modifiers) {
var number = modifiers && modifiers.number;
var selectedVal = "Array.prototype.filter" +
".call($event.target.options,function(o){return o.selected})" +
".map(function(o){var val = \"_value\" in o ? o._value : o.value;" +
("return " + (number ? '_n(val)' : 'val') + "})");
var assignment = '$event.target.multiple ? $$selectedVal : $$selectedVal[0]';
var code = "var $$selectedVal = " + selectedVal + ";";
code = code + " " + genAssignmentCode(value, assignment);
addHandler(el, 'change', code, null, true);
}
function genDefaultModel(el, value, modifiers) {
var type = el.attrsMap.type;
// warn if v-bind:value conflicts with v-model
// except for inputs with v-bind:type
{
var value_1 = el.attrsMap['v-bind:value'] || el.attrsMap[':value'];
var typeBinding = el.attrsMap['v-bind:type'] || el.attrsMap[':type'];
if (value_1 && !typeBinding) {
var binding = el.attrsMap['v-bind:value'] ? 'v-bind:value' : ':value';
warn(binding + "=\"" + value_1 + "\" conflicts with v-model on the same element " +
'because the latter already expands to a value binding internally', el.rawAttrsMap[binding]);
}
}
var _a = modifiers || {}, lazy = _a.lazy, number = _a.number, trim = _a.trim;
var needCompositionGuard = !lazy && type !== 'range';
var event = lazy ? 'change' : type === 'range' ? RANGE_TOKEN : 'input';
var valueExpression = '$event.target.value';
if (trim) {
valueExpression = "$event.target.value.trim()";
}
if (number) {
valueExpression = "_n(" + valueExpression + ")";
}
var code = genAssignmentCode(value, valueExpression);
if (needCompositionGuard) {
code = "if($event.target.composing)return;" + code;
}
addProp(el, 'value', "(" + value + ")");
addHandler(el, event, code, null, true);
if (trim || number) {
addHandler(el, 'blur', '$forceUpdate()');
}
}
function text(el, dir) {
if (dir.value) {
addProp(el, 'textContent', "_s(" + dir.value + ")", dir);
}
}
function html(el, dir) {
if (dir.value) {
addProp(el, 'innerHTML', "_s(" + dir.value + ")", dir);
}
}
var directives = {
model: model,
text: text,
html: html,
};
var baseOptions = {
expectHTML: true,
modules: modules,
directives: directives,
isPreTag: isPreTag,
isUnaryTag: isUnaryTag,
mustUseProp: mustUseProp,
canBeLeftOpenTag: canBeLeftOpenTag,
isReservedTag: isReservedTag,
getTagNamespace: getTagNamespace,
// @ts-ignore
staticKeys: genStaticKeys(modules),
};
var fnExpRE = /^([\w$_]+|\([^)]*?\))\s*=>|^function(?:\s+[\w$]+)?\s*\(/;
var fnInvokeRE = /\([^)]*?\);*$/;
var simplePathRE = /^[A-Za-z_$][\w$]*(?:\.[A-Za-z_$][\w$]*|\['[^']*?']|\["[^"]*?"]|\[\d+]|\[[A-Za-z_$][\w$]*])*$/;
// KeyboardEvent.keyCode aliases
var keyCodes = {
esc: 27,
tab: 9,
enter: 13,
space: 32,
up: 38,
left: 37,
right: 39,
down: 40,
delete: [8, 46],
};
// KeyboardEvent.key aliases
var keyNames = {
// #7880: IE11 and Edge use `Esc` for Escape key name.
esc: ['Esc', 'Escape'],
tab: 'Tab',
enter: 'Enter',
// #9112: IE11 uses `Spacebar` for Space key name.
space: [' ', 'Spacebar'],
// #7806: IE11 uses key names without `Arrow` prefix for arrow keys.
up: ['Up', 'ArrowUp'],
left: ['Left', 'ArrowLeft'],
right: ['Right', 'ArrowRight'],
down: ['Down', 'ArrowDown'],
// #9112: IE11 uses `Del` for Delete key name.
delete: ['Backspace', 'Delete', 'Del'],
};
// #4868: modifiers that prevent the execution of the listener
// need to explicitly return null so that we can determine whether to remove
// the listener for .once
var genGuard = function (condition) { return "if(" + condition + ")return null;"; };
var modifierCode = {
stop: '$event.stopPropagation();',
prevent: '$event.preventDefault();',
self: genGuard("$event.target !== $event.currentTarget"),
ctrl: genGuard("!$event.ctrlKey"),
shift: genGuard("!$event.shiftKey"),
alt: genGuard("!$event.altKey"),
meta: genGuard("!$event.metaKey"),
left: genGuard("'button' in $event && $event.button !== 0"),
middle: genGuard("'button' in $event && $event.button !== 1"),
right: genGuard("'button' in $event && $event.button !== 2"),
};
function genHandlers(events, isNative) {
var prefix = isNative ? 'nativeOn:' : 'on:';
var staticHandlers = "";
var dynamicHandlers = "";
for (var name_1 in events) {
var handlerCode = genHandler(events[name_1]);
//@ts-expect-error
if (events[name_1] && events[name_1].dynamic) {
dynamicHandlers += name_1 + "," + handlerCode + ",";
}
else {
staticHandlers += "\"" + name_1 + "\":" + handlerCode + ",";
}
}
staticHandlers = "{" + staticHandlers.slice(0, -1) + "}";
if (dynamicHandlers) {
return prefix + ("_d(" + staticHandlers + ",[" + dynamicHandlers.slice(0, -1) + "])");
}
else {
return prefix + staticHandlers;
}
}
function genHandler(handler) {
if (!handler) {
return 'function(){}';
}
if (Array.isArray(handler)) {
return "[" + handler.map(function (handler) { return genHandler(handler); }).join(',') + "]";
}
var isMethodPath = simplePathRE.test(handler.value);
var isFunctionExpression = fnExpRE.test(handler.value);
var isFunctionInvocation = simplePathRE.test(handler.value.replace(fnInvokeRE, ''));
if (!handler.modifiers) {
if (isMethodPath || isFunctionExpression) {
return handler.value;
}
return "function($event){" + (isFunctionInvocation ? "return " + handler.value : handler.value) + "}"; // inline statement
}
else {
var code = '';
var genModifierCode = '';
var keys = [];
var _loop_1 = function (key) {
if (modifierCode[key]) {
genModifierCode += modifierCode[key];
// left/right
if (keyCodes[key]) {
keys.push(key);
}
}
else if (key === 'exact') {
var modifiers_1 = handler.modifiers;
genModifierCode += genGuard(['ctrl', 'shift', 'alt', 'meta']
.filter(function (keyModifier) { return !modifiers_1[keyModifier]; })
.map(function (keyModifier) { return "$event." + keyModifier + "Key"; })
.join('||'));
}
else {
keys.push(key);
}
};
for (var key in handler.modifiers) {
_loop_1(key);
}
if (keys.length) {
code += genKeyFilter(keys);
}
// Make sure modifiers like prevent and stop get executed after key filtering
if (genModifierCode) {
code += genModifierCode;
}
var handlerCode = isMethodPath
? "return " + handler.value + ".apply(null, arguments)"
: isFunctionExpression
? "return (" + handler.value + ").apply(null, arguments)"
: isFunctionInvocation
? "return " + handler.value
: handler.value;
return "function($event){" + code + handlerCode + "}";
}
}
function genKeyFilter(keys) {
return (
// make sure the key filters only apply to KeyboardEvents
// #9441: can't use 'keyCode' in $event because Chrome autofill fires fake
// key events that do not have keyCode property...
"if(!$event.type.indexOf('key')&&" +
(keys.map(genFilterCode).join('&&') + ")return null;"));
}
function genFilterCode(key) {
var keyVal = parseInt(key, 10);
if (keyVal) {
return "$event.keyCode!==" + keyVal;
}
var keyCode = keyCodes[key];
var keyName = keyNames[key];
return ("_k($event.keyCode," +
(JSON.stringify(key) + ",") +
(JSON.stringify(keyCode) + ",") +
"$event.key," +
("" + JSON.stringify(keyName)) +
")");
}
function on(el, dir) {
if (dir.modifiers) {
warn$2("v-on without argument does not support modifiers.");
}
el.wrapListeners = function (code) { return "_g(" + code + "," + dir.value + ")"; };
}
function bind(el, dir) {
el.wrapData = function (code) {
return "_b(" + code + ",'" + el.tag + "'," + dir.value + "," + (dir.modifiers && dir.modifiers.prop ? 'true' : 'false') + (dir.modifiers && dir.modifiers.sync ? ',true' : '') + ")";
};
}
var baseDirectives = {
on: on,
bind: bind,
cloak: noop$1,
};
var CodegenState = /** @class */ (function () {
function CodegenState(options) {
this.options = options;
this.warn = options.warn || baseWarn;
//@ts-expect-error `this.transforms ` is a different type than `options.modules.transformCode`
this.transforms = pluckModuleFunction(options.modules, 'transformCode');
this.dataGenFns = pluckModuleFunction(options.modules, 'genData');
this.directives = extend(extend({}, baseDirectives), options.directives);
var isReservedTag = options.isReservedTag || no;
this.maybeComponent = function (el) {
return !!el.component || !isReservedTag(el.tag);
};
this.onceId = 0;
this.staticRenderFns = [];
this.pre = false;
}
return CodegenState;
}());
function generate$1(ast, options) {
var state = new CodegenState(options);
// fix #11483, Root level <script> tags should not be rendered.
var code = ast
? ast.tag === 'script'
? 'null'
: genElement(ast, state)
: '_c("div")';
return {
render: "with(this){return " + code + "}",
staticRenderFns: state.staticRenderFns,
};
}
function genElement(el, state) {
if (el.parent) {
el.pre = el.pre || el.parent.pre;
}
if (el.staticRoot && !el.staticProcessed) {
return genStatic(el, state);
}
else if (el.once && !el.onceProcessed) {
return genOnce(el, state);
}
else if (el.for && !el.forProcessed) {
return genFor(el, state);
}
else if (el.if && !el.ifProcessed) {
return genIf(el, state);
}
else if (el.tag === 'template' && !el.slotTarget && !state.pre) {
return genChildren(el, state) || 'void 0';
}
else if (el.tag === 'slot') {
return genSlot(el, state);
}
else {
// component or element
var code = void 0;
if (el.component) {
code = genComponent(el.component, el, state);
}
else {
var data = void 0;
if (!el.plain || (el.pre && state.maybeComponent(el))) {
data = genData(el, state);
}
var children = el.inlineTemplate ? null : genChildren(el, state, true);
code = "_c('" + el.tag + "'" + (data ? "," + data : '' // data
) + (children ? "," + children : '' // children
) + ")";
}
// module transforms
for (var i = 0; i < state.transforms.length; i++) {
code = state.transforms[i](el, code);
}
return code;
}
}
// hoist static sub-trees out
function genStatic(el, state) {
el.staticProcessed = true;
// Some elements (templates) need to behave differently inside of a v-pre
// node. All pre nodes are static roots, so we can use this as a location to
// wrap a state change and reset it upon exiting the pre node.
var originalPreState = state.pre;
if (el.pre) {
state.pre = el.pre;
}
state.staticRenderFns.push("with(this){return " + genElement(el, state) + "}");
state.pre = originalPreState;
return "_m(" + (state.staticRenderFns.length - 1) + (el.staticInFor ? ',true' : '') + ")";
}
// v-once
function genOnce(el, state) {
el.onceProcessed = true;
if (el.if && !el.ifProcessed) {
return genIf(el, state);
}
else if (el.staticInFor) {
var key = '';
var parent_1 = el.parent;
while (parent_1) {
if (parent_1.for) {
key = parent_1.key;
break;
}
parent_1 = parent_1.parent;
}
if (!key) {
state.warn("v-once can only be used inside v-for that is keyed. ", el.rawAttrsMap['v-once']);
return genElement(el, state);
}
return "_o(" + genElement(el, state) + "," + state.onceId++ + "," + key + ")";
}
else {
return genStatic(el, state);
}
}
function genIf(el, state, altGen, altEmpty) {
el.ifProcessed = true; // avoid recursion
return genIfConditions(el.ifConditions.slice(), state, altGen, altEmpty);
}
function genIfConditions(conditions, state, altGen, altEmpty) {
if (!conditions.length) {
return altEmpty || '_e()';
}
var condition = conditions.shift();
if (condition.exp) {
return "(" + condition.exp + ")?" + genTernaryExp(condition.block) + ":" + genIfConditions(conditions, state, altGen, altEmpty);
}
else {
return "" + genTernaryExp(condition.block);
}
// v-if with v-once should generate code like (a)?_m(0):_m(1)
function genTernaryExp(el) {
return altGen
? altGen(el, state)
: el.once
? genOnce(el, state)
: genElement(el, state);
}
}
function genFor(el, state, altGen, altHelper) {
var exp = el.for;
var alias = el.alias;
var iterator1 = el.iterator1 ? "," + el.iterator1 : '';
var iterator2 = el.iterator2 ? "," + el.iterator2 : '';
if (state.maybeComponent(el) &&
el.tag !== 'slot' &&
el.tag !== 'template' &&
!el.key) {
state.warn("<" + el.tag + " v-for=\"" + alias + " in " + exp + "\">: component lists rendered with " +
"v-for should have explicit keys. " +
"See https://vuejs.org/guide/list.html#key for more info.", el.rawAttrsMap['v-for'], true /* tip */);
}
el.forProcessed = true; // avoid recursion
return ((altHelper || '_l') + "((" + exp + ")," +
("function(" + alias + iterator1 + iterator2 + "){") +
("return " + (altGen || genElement)(el, state)) +
'})');
}
function genData(el, state) {
var data = '{';
// directives first.
// directives may mutate the el's other properties before they are generated.
var dirs = genDirectives(el, state);
if (dirs)
{ data += dirs + ','; }
// key
if (el.key) {
data += "key:" + el.key + ",";
}
// ref
if (el.ref) {
data += "ref:" + el.ref + ",";
}
if (el.refInFor) {
data += "refInFor:true,";
}
// pre
if (el.pre) {
data += "pre:true,";
}
// record original tag name for components using "is" attribute
if (el.component) {
data += "tag:\"" + el.tag + "\",";
}
// module data generation functions
for (var i = 0; i < state.dataGenFns.length; i++) {
data += state.dataGenFns[i](el);
}
// attributes
if (el.attrs) {
data += "attrs:" + genProps(el.attrs) + ",";
}
// DOM props
if (el.props) {
data += "domProps:" + genProps(el.props) + ",";
}
// event handlers
if (el.events) {
data += genHandlers(el.events, false) + ",";
}
if (el.nativeEvents) {
data += genHandlers(el.nativeEvents, true) + ",";
}
// slot target
// only for non-scoped slots
if (el.slotTarget && !el.slotScope) {
data += "slot:" + el.slotTarget + ",";
}
// scoped slots
if (el.scopedSlots) {
data += genScopedSlots(el, el.scopedSlots, state) + ",";
}
// component v-model
if (el.model) {
data += "model:{value:" + el.model.value + ",callback:" + el.model.callback + ",expression:" + el.model.expression + "},";
}
// inline-template
if (el.inlineTemplate) {
var inlineTemplate = genInlineTemplate(el, state);
if (inlineTemplate) {
data += inlineTemplate + ",";
}
}
data = data.replace(/,$/, '') + '}';
// v-bind dynamic argument wrap
// v-bind with dynamic arguments must be applied using the same v-bind object
// merge helper so that class/style/mustUseProp attrs are handled correctly.
if (el.dynamicAttrs) {
data = "_b(" + data + ",\"" + el.tag + "\"," + genProps(el.dynamicAttrs) + ")";
}
// v-bind data wrap
if (el.wrapData) {
data = el.wrapData(data);
}
// v-on data wrap
if (el.wrapListeners) {
data = el.wrapListeners(data);
}
return data;
}
function genDirectives(el, state) {
var dirs = el.directives;
if (!dirs)
{ return; }
var res = 'directives:[';
var hasRuntime = false;
var i, l, dir, needRuntime;
for (i = 0, l = dirs.length; i < l; i++) {
dir = dirs[i];
needRuntime = true;
var gen = state.directives[dir.name];
if (gen) {
// compile-time directive that manipulates AST.
// returns true if it also needs a runtime counterpart.
needRuntime = !!gen(el, dir, state.warn);
}
if (needRuntime) {
hasRuntime = true;
res += "{name:\"" + dir.name + "\",rawName:\"" + dir.rawName + "\"" + (dir.value
? ",value:(" + dir.value + "),expression:" + JSON.stringify(dir.value)
: '') + (dir.arg ? ",arg:" + (dir.isDynamicArg ? dir.arg : "\"" + dir.arg + "\"") : '') + (dir.modifiers ? ",modifiers:" + JSON.stringify(dir.modifiers) : '') + "},";
}
}
if (hasRuntime) {
return res.slice(0, -1) + ']';
}
}
function genInlineTemplate(el, state) {
var ast = el.children[0];
if ((el.children.length !== 1 || ast.type !== 1)) {
state.warn('Inline-template components must have exactly one child element.', { start: el.start });
}
if (ast && ast.type === 1) {
var inlineRenderFns = generate$1(ast, state.options);
return "inlineTemplate:{render:function(){" + inlineRenderFns.render + "},staticRenderFns:[" + inlineRenderFns.staticRenderFns
.map(function (code) { return "function(){" + code + "}"; })
.join(',') + "]}";
}
}
function genScopedSlots(el, slots, state) {
// by default scoped slots are considered "stable", this allows child
// components with only scoped slots to skip forced updates from parent.
// but in some cases we have to bail-out of this optimization
// for example if the slot contains dynamic names, has v-if or v-for on them...
var needsForceUpdate = el.for ||
Object.keys(slots).some(function (key) {
var slot = slots[key];
return (slot.slotTargetDynamic || slot.if || slot.for || containsSlotChild(slot) // is passing down slot from parent which may be dynamic
);
});
// #9534: if a component with scoped slots is inside a conditional branch,
// it's possible for the same component to be reused but with different
// compiled slot content. To avoid that, we generate a unique key based on
// the generated code of all the slot contents.
var needsKey = !!el.if;
// OR when it is inside another scoped slot or v-for (the reactivity may be
// disconnected due to the intermediate scope variable)
// #9438, #9506
// TODO: this can be further optimized by properly analyzing in-scope bindings
// and skip force updating ones that do not actually use scope variables.
if (!needsForceUpdate) {
var parent_2 = el.parent;
while (parent_2) {
if ((parent_2.slotScope && parent_2.slotScope !== emptySlotScopeToken) ||
parent_2.for) {
needsForceUpdate = true;
break;
}
if (parent_2.if) {
needsKey = true;
}
parent_2 = parent_2.parent;
}
}
var generatedSlots = Object.keys(slots)
.map(function (key) { return genScopedSlot(slots[key], state); })
.join(',');
return "scopedSlots:_u([" + generatedSlots + "]" + (needsForceUpdate ? ",null,true" : "") + (!needsForceUpdate && needsKey ? ",null,false," + hash(generatedSlots) : "") + ")";
}
function hash(str) {
var hash = 5381;
var i = str.length;
while (i) {
hash = (hash * 33) ^ str.charCodeAt(--i);
}
return hash >>> 0;
}
function containsSlotChild(el) {
if (el.type === 1) {
if (el.tag === 'slot') {
return true;
}
return el.children.some(containsSlotChild);
}
return false;
}
function genScopedSlot(el, state) {
var isLegacySyntax = el.attrsMap['slot-scope'];
if (el.if && !el.ifProcessed && !isLegacySyntax) {
return genIf(el, state, genScopedSlot, "null");
}
if (el.for && !el.forProcessed) {
return genFor(el, state, genScopedSlot);
}
var slotScope = el.slotScope === emptySlotScopeToken ? "" : String(el.slotScope);
var fn = "function(" + slotScope + "){" +
("return " + (el.tag === 'template'
? el.if && isLegacySyntax
? "(" + el.if + ")?" + (genChildren(el, state) || 'undefined') + ":undefined"
: genChildren(el, state) || 'undefined'
: genElement(el, state)) + "}");
// reverse proxy v-slot without scope on this.$slots
var reverseProxy = slotScope ? "" : ",proxy:true";
return "{key:" + (el.slotTarget || "\"default\"") + ",fn:" + fn + reverseProxy + "}";
}
function genChildren(el, state, checkSkip, altGenElement, altGenNode) {
var children = el.children;
if (children.length) {
var el_1 = children[0];
// optimize single v-for
if (children.length === 1 &&
el_1.for &&
el_1.tag !== 'template' &&
el_1.tag !== 'slot') {
var normalizationType_1 = checkSkip
? state.maybeComponent(el_1)
? ",1"
: ",0"
: "";
return "" + (altGenElement || genElement)(el_1, state) + normalizationType_1;
}
var normalizationType = checkSkip
? getNormalizationType(children, state.maybeComponent)
: 0;
var gen_1 = altGenNode || genNode;
return "[" + children.map(function (c) { return gen_1(c, state); }).join(',') + "]" + (normalizationType ? "," + normalizationType : '');
}
}
// determine the normalization needed for the children array.
// 0: no normalization needed
// 1: simple normalization needed (possible 1-level deep nested array)
// 2: full normalization needed
function getNormalizationType(children, maybeComponent) {
var res = 0;
for (var i = 0; i < children.length; i++) {
var el = children[i];
if (el.type !== 1) {
continue;
}
if (needsNormalization(el) ||
(el.ifConditions &&
el.ifConditions.some(function (c) { return needsNormalization(c.block); }))) {
res = 2;
break;
}
if (maybeComponent(el) ||
(el.ifConditions && el.ifConditions.some(function (c) { return maybeComponent(c.block); }))) {
res = 1;
}
}
return res;
}
function needsNormalization(el) {
return el.for !== undefined || el.tag === 'template' || el.tag === 'slot';
}
function genNode(node, state) {
if (node.type === 1) {
return genElement(node, state);
}
else if (node.type === 3 && node.isComment) {
return genComment(node);
}
else {
return genText(node);
}
}
function genText(text) {
return "_v(" + (text.type === 2
? text.expression // no need for () because already wrapped in _s()
: transformSpecialNewlines(JSON.stringify(text.text))) + ")";
}
function genComment(comment) {
return "_e(" + JSON.stringify(comment.text) + ")";
}
function genSlot(el, state) {
var slotName = el.slotName || '"default"';
var children = genChildren(el, state);
var res = "_t(" + slotName + (children ? "," + children : '');
var attrs = el.attrs || el.dynamicAttrs
? genProps((el.attrs || []).concat(el.dynamicAttrs || []).map(function (attr) { return ({
// slot props are camelized
name: camelize(attr.name),
value: attr.value,
dynamic: attr.dynamic,
}); }))
: null;
var bind = el.attrsMap['v-bind'];
if ((attrs || bind) && !children) {
res += ",null";
}
if (attrs) {
res += "," + attrs;
}
if (bind) {
res += (attrs ? '' : ',null') + "," + bind;
}
return res + ')';
}
// componentName is el.component, take it as argument to shun flow's pessimistic refinement
function genComponent(componentName, el, state) {
var children = el.inlineTemplate ? null : genChildren(el, state, true);
return "_c(" + componentName + "," + genData(el, state) + (children ? "," + children : '') + ")";
}
function genProps(props) {
var staticProps = "";
var dynamicProps = "";
for (var i = 0; i < props.length; i++) {
var prop = props[i];
var value = transformSpecialNewlines(prop.value);
if (prop.dynamic) {
dynamicProps += prop.name + "," + value + ",";
}
else {
staticProps += "\"" + prop.name + "\":" + value + ",";
}
}
staticProps = "{" + staticProps.slice(0, -1) + "}";
if (dynamicProps) {
return "_d(" + staticProps + ",[" + dynamicProps.slice(0, -1) + "])";
}
else {
return staticProps;
}
}
// #3895, #4268
function transformSpecialNewlines(text) {
return text.replace(/\u2028/g, '\\u2028').replace(/\u2029/g, '\\u2029');
}
var plainStringRE = /^"(?:[^"\\]|\\.)*"$|^'(?:[^'\\]|\\.)*'$/;
// let the model AST transform translate v-model into appropriate
// props bindings
function applyModelTransform(el, state) {
if (el.directives) {
for (var i = 0; i < el.directives.length; i++) {
var dir = el.directives[i];
if (dir.name === 'model') {
state.directives.model(el, dir, state.warn);
// remove value for textarea as its converted to text
if (el.tag === 'textarea' && el.props) {
el.props = el.props.filter(function (p) { return p.name !== 'value'; });
}
break;
}
}
}
}
function genAttrSegments(attrs) {
return attrs.map(function (_a) {
var name = _a.name, value = _a.value;
return genAttrSegment(name, value);
});
}
function genDOMPropSegments(props, attrs) {
var segments = [];
props.forEach(function (_a) {
var name = _a.name, value = _a.value;
name = propsToAttrMap[name] || name.toLowerCase();
if (isRenderableAttr(name) &&
!(attrs && attrs.some(function (a) { return a.name === name; }))) {
segments.push(genAttrSegment(name, value));
}
});
return segments;
}
function genAttrSegment(name, value) {
if (plainStringRE.test(value)) {
// force double quote
value = value.replace(/^'|'$/g, '"');
// force enumerated attr to "true"
if (isEnumeratedAttr(name) && value !== "\"false\"") {
value = "\"true\"";
}
return {
type: RAW,
value: isBooleanAttr(name)
? " " + name + "=\"" + name + "\""
: value === '""'
? " " + name
: " " + name + "=\"" + JSON.parse(value) + "\"",
};
}
else {
return {
type: EXPRESSION,
value: "_ssrAttr(" + JSON.stringify(name) + "," + value + ")",
};
}
}
function genClassSegments(staticClass, classBinding) {
if (staticClass && !classBinding) {
return [{ type: RAW, value: " class=\"" + JSON.parse(staticClass) + "\"" }];
}
else {
return [
{
type: EXPRESSION,
value: "_ssrClass(" + (staticClass || 'null') + "," + (classBinding || 'null') + ")",
} ];
}
}
function genStyleSegments(staticStyle, parsedStaticStyle, styleBinding, vShowExpression) {
if (staticStyle && !styleBinding && !vShowExpression) {
return [{ type: RAW, value: " style=" + JSON.stringify(staticStyle) }];
}
else {
return [
{
type: EXPRESSION,
value: "_ssrStyle(" + (parsedStaticStyle || 'null') + "," + (styleBinding || 'null') + ", " + (vShowExpression
? "{ display: (" + vShowExpression + ") ? '' : 'none' }"
: 'null') + ")",
} ];
}
}
/**
* In SSR, the vdom tree is generated only once and never patched, so
* we can optimize most element / trees into plain string render functions.
* The SSR optimizer walks the AST tree to detect optimizable elements and trees.
*
* The criteria for SSR optimizability is quite a bit looser than static tree
* detection (which is designed for client re-render). In SSR we bail only for
* components/slots/custom directives.
*/
// optimizability constants
var optimizability = {
FALSE: 0,
FULL: 1,
SELF: 2,
CHILDREN: 3,
PARTIAL: 4, // self un-optimizable with some un-optimizable children
};
var isPlatformReservedTag;
function optimize(root, options) {
if (!root)
{ return; }
isPlatformReservedTag = options.isReservedTag || no;
walk(root, true);
}
function walk(node, isRoot) {
if (isUnOptimizableTree(node)) {
node.ssrOptimizability = optimizability.FALSE;
return;
}
// root node or nodes with custom directives should always be a VNode
var selfUnoptimizable = isRoot || hasCustomDirective(node);
var check = function (child) {
if (child.ssrOptimizability !== optimizability.FULL) {
node.ssrOptimizability = selfUnoptimizable
? optimizability.PARTIAL
: optimizability.SELF;
}
};
if (selfUnoptimizable) {
node.ssrOptimizability = optimizability.CHILDREN;
}
if (node.type === 1) {
for (var i = 0, l = node.children.length; i < l; i++) {
var child = node.children[i];
walk(child);
check(child);
}
if (node.ifConditions) {
for (var i = 1, l = node.ifConditions.length; i < l; i++) {
var block = node.ifConditions[i].block;
walk(block, isRoot);
check(block);
}
}
if (node.ssrOptimizability == null ||
(!isRoot && (node.attrsMap['v-html'] || node.attrsMap['v-text']))) {
node.ssrOptimizability = optimizability.FULL;
}
else {
node.children = optimizeSiblings(node);
}
}
else {
node.ssrOptimizability = optimizability.FULL;
}
}
function optimizeSiblings(el) {
var children = el.children;
var optimizedChildren = [];
var currentOptimizableGroup = [];
var pushGroup = function () {
if (currentOptimizableGroup.length) {
optimizedChildren.push({
type: 1,
parent: el,
tag: 'template',
attrsList: [],
attrsMap: {},
rawAttrsMap: {},
children: currentOptimizableGroup,
ssrOptimizability: optimizability.FULL,
});
}
currentOptimizableGroup = [];
};
for (var i = 0; i < children.length; i++) {
var c = children[i];
if (c.ssrOptimizability === optimizability.FULL) {
currentOptimizableGroup.push(c);
}
else {
// wrap fully-optimizable adjacent siblings inside a template tag
// so that they can be optimized into a single ssrNode by codegen
pushGroup();
optimizedChildren.push(c);
}
}
pushGroup();
return optimizedChildren;
}
function isUnOptimizableTree(node) {
if (node.type === 2 || node.type === 3) {
// text or expression
return false;
}
return (isBuiltInTag(node.tag) || // built-in (slot, component)
!isPlatformReservedTag(node.tag) || // custom component
!!node.component || // "is" component
isSelectWithModel(node) // <select v-model> requires runtime inspection
);
}
var isBuiltInDir = makeMap('text,html,show,on,bind,model,pre,cloak,once');
function hasCustomDirective(node) {
return (node.type === 1 &&
node.directives &&
node.directives.some(function (d) { return !isBuiltInDir(d.name); }));
}
// <select v-model> cannot be optimized because it requires a runtime check
// to determine proper selected option
function isSelectWithModel(node) {
return (node.type === 1 &&
node.tag === 'select' &&
node.directives != null &&
node.directives.some(function (d) { return d.name === 'model'; }));
}
// The SSR codegen is essentially extending the default codegen to handle
// segment types
var RAW = 0;
var INTERPOLATION = 1;
var EXPRESSION = 2;
function generate(ast, options) {
var state = new CodegenState(options);
var code = ast ? genSSRElement(ast, state) : '_c("div")';
return {
render: "with(this){return " + code + "}",
staticRenderFns: state.staticRenderFns,
};
}
function genSSRElement(el, state) {
if (el.for && !el.forProcessed) {
return genFor(el, state, genSSRElement);
}
else if (el.if && !el.ifProcessed) {
return genIf(el, state, genSSRElement);
}
else if (el.tag === 'template' && !el.slotTarget) {
return el.ssrOptimizability === optimizability.FULL
? genChildrenAsStringNode(el, state)
: genSSRChildren(el, state) || 'void 0';
}
switch (el.ssrOptimizability) {
case optimizability.FULL:
// stringify whole tree
return genStringElement(el, state);
case optimizability.SELF:
// stringify self and check children
return genStringElementWithChildren(el, state);
case optimizability.CHILDREN:
// generate self as VNode and stringify children
return genNormalElement(el, state, true);
case optimizability.PARTIAL:
// generate self as VNode and check children
return genNormalElement(el, state, false);
default:
// bail whole tree
return genElement(el, state);
}
}
function genNormalElement(el, state, stringifyChildren) {
var data = el.plain ? undefined : genData(el, state);
var children = stringifyChildren
? "[" + genChildrenAsStringNode(el, state) + "]"
: genSSRChildren(el, state, true);
return "_c('" + el.tag + "'" + (data ? "," + data : '') + (children ? "," + children : '') + ")";
}
function genSSRChildren(el, state, checkSkip) {
return genChildren(el, state, checkSkip, genSSRElement, genSSRNode);
}
function genSSRNode(el, state) {
return el.type === 1 ? genSSRElement(el, state) : genText(el);
}
function genChildrenAsStringNode(el, state) {
return el.children.length
? "_ssrNode(" + flattenSegments(childrenToSegments(el, state)) + ")"
: '';
}
function genStringElement(el, state) {
return "_ssrNode(" + elementToString(el, state) + ")";
}
function genStringElementWithChildren(el, state) {
var children = genSSRChildren(el, state, true);
return "_ssrNode(" + flattenSegments(elementToOpenTagSegments(el, state)) + ",\"</" + el.tag + ">\"" + (children ? "," + children : '') + ")";
}
function elementToString(el, state) {
return "(" + flattenSegments(elementToSegments(el, state)) + ")";
}
function elementToSegments(el, state) {
// v-for / v-if
if (el.for && !el.forProcessed) {
el.forProcessed = true;
return [
{
type: EXPRESSION,
value: genFor(el, state, elementToString, '_ssrList'),
} ];
}
else if (el.if && !el.ifProcessed) {
el.ifProcessed = true;
return [
{
type: EXPRESSION,
value: genIf(el, state, elementToString, '"<!---->"'),
} ];
}
else if (el.tag === 'template') {
return childrenToSegments(el, state);
}
var openSegments = elementToOpenTagSegments(el, state);
var childrenSegments = childrenToSegments(el, state);
var isUnaryTag = state.options.isUnaryTag;
var close = isUnaryTag && isUnaryTag(el.tag)
? []
: [{ type: RAW, value: "</" + el.tag + ">" }];
return openSegments.concat(childrenSegments, close);
}
function elementToOpenTagSegments(el, state) {
applyModelTransform(el, state);
var binding;
var segments = [{ type: RAW, value: "<" + el.tag }];
// attrs
if (el.attrs) {
segments.push.apply(segments, genAttrSegments(el.attrs));
}
// domProps
if (el.props) {
segments.push.apply(segments, genDOMPropSegments(el.props, el.attrs));
}
// v-bind="object"
if ((binding = el.attrsMap['v-bind'])) {
segments.push({ type: EXPRESSION, value: "_ssrAttrs(" + binding + ")" });
}
// v-bind.prop="object"
if ((binding = el.attrsMap['v-bind.prop'])) {
segments.push({ type: EXPRESSION, value: "_ssrDOMProps(" + binding + ")" });
}
// class
if (el.staticClass || el.classBinding) {
segments.push.apply(segments, genClassSegments(el.staticClass, el.classBinding));
}
// style & v-show
if (el.staticStyle || el.styleBinding || el.attrsMap['v-show']) {
segments.push.apply(segments, genStyleSegments(el.attrsMap.style, el.staticStyle, el.styleBinding, el.attrsMap['v-show']));
}
// _scopedId
if (state.options.scopeId) {
segments.push({ type: RAW, value: " " + state.options.scopeId });
}
segments.push({ type: RAW, value: ">" });
return segments;
}
function childrenToSegments(el, state) {
var binding;
if ((binding = el.attrsMap['v-html'])) {
return [{ type: EXPRESSION, value: "_s(" + binding + ")" }];
}
if ((binding = el.attrsMap['v-text'])) {
return [{ type: INTERPOLATION, value: "_s(" + binding + ")" }];
}
if (el.tag === 'textarea' && (binding = el.attrsMap['v-model'])) {
return [{ type: INTERPOLATION, value: "_s(" + binding + ")" }];
}
return el.children ? nodesToSegments(el.children, state) : [];
}
function nodesToSegments(children, state) {
var segments = [];
for (var i = 0; i < children.length; i++) {
var c = children[i];
if (c.type === 1) {
segments.push.apply(segments, elementToSegments(c, state));
}
else if (c.type === 2) {
segments.push({ type: INTERPOLATION, value: c.expression });
}
else if (c.type === 3) {
var text = escape(c.text);
if (c.isComment) {
text = '<!--' + text + '-->';
}
segments.push({ type: RAW, value: text });
}
}
return segments;
}
function flattenSegments(segments) {
var mergedSegments = [];
var textBuffer = '';
var pushBuffer = function () {
if (textBuffer) {
mergedSegments.push(JSON.stringify(textBuffer));
textBuffer = '';
}
};
for (var i = 0; i < segments.length; i++) {
var s = segments[i];
if (s.type === RAW) {
textBuffer += s.value;
}
else if (s.type === INTERPOLATION) {
pushBuffer();
mergedSegments.push("_ssrEscape(" + s.value + ")");
}
else if (s.type === EXPRESSION) {
pushBuffer();
mergedSegments.push("(" + s.value + ")");
}
}
pushBuffer();
return mergedSegments.join('+');
}
// these keywords should not appear inside expressions, but operators like
// typeof, instanceof and in are allowed
var prohibitedKeywordRE = new RegExp('\\b' +
('do,if,for,let,new,try,var,case,else,with,await,break,catch,class,const,' +
'super,throw,while,yield,delete,export,import,return,switch,default,' +
'extends,finally,continue,debugger,function,arguments')
.split(',')
.join('\\b|\\b') +
'\\b');
// these unary operators should not be used as property/method names
var unaryOperatorsRE = new RegExp('\\b' +
'delete,typeof,void'.split(',').join('\\s*\\([^\\)]*\\)|\\b') +
'\\s*\\([^\\)]*\\)');
// strip strings in expressions
var stripStringRE = /'(?:[^'\\]|\\.)*'|"(?:[^"\\]|\\.)*"|`(?:[^`\\]|\\.)*\$\{|\}(?:[^`\\]|\\.)*`|`(?:[^`\\]|\\.)*`/g;
// detect problematic expressions in a template
function detectErrors(ast, warn) {
if (ast) {
checkNode(ast, warn);
}
}
function checkNode(node, warn) {
if (node.type === 1) {
for (var name_1 in node.attrsMap) {
if (dirRE.test(name_1)) {
var value = node.attrsMap[name_1];
if (value) {
var range = node.rawAttrsMap[name_1];
if (name_1 === 'v-for') {
checkFor(node, "v-for=\"" + value + "\"", warn, range);
}
else if (name_1 === 'v-slot' || name_1[0] === '#') {
checkFunctionParameterExpression(value, name_1 + "=\"" + value + "\"", warn, range);
}
else if (onRE.test(name_1)) {
checkEvent(value, name_1 + "=\"" + value + "\"", warn, range);
}
else {
checkExpression(value, name_1 + "=\"" + value + "\"", warn, range);
}
}
}
}
if (node.children) {
for (var i = 0; i < node.children.length; i++) {
checkNode(node.children[i], warn);
}
}
}
else if (node.type === 2) {
checkExpression(node.expression, node.text, warn, node);
}
}
function checkEvent(exp, text, warn, range) {
var stripped = exp.replace(stripStringRE, '');
var keywordMatch = stripped.match(unaryOperatorsRE);
if (keywordMatch && stripped.charAt(keywordMatch.index - 1) !== '$') {
warn("avoid using JavaScript unary operator as property name: " +
("\"" + keywordMatch[0] + "\" in expression " + text.trim()), range);
}
checkExpression(exp, text, warn, range);
}
function checkFor(node, text, warn, range) {
checkExpression(node.for || '', text, warn, range);
checkIdentifier(node.alias, 'v-for alias', text, warn, range);
checkIdentifier(node.iterator1, 'v-for iterator', text, warn, range);
checkIdentifier(node.iterator2, 'v-for iterator', text, warn, range);
}
function checkIdentifier(ident, type, text, warn, range) {
if (typeof ident === 'string') {
try {
new Function("var " + ident + "=_");
}
catch (e) {
warn("invalid " + type + " \"" + ident + "\" in expression: " + text.trim(), range);
}
}
}
function checkExpression(exp, text, warn, range) {
try {
new Function("return " + exp);
}
catch (e) {
var keywordMatch = exp
.replace(stripStringRE, '')
.match(prohibitedKeywordRE);
if (keywordMatch) {
warn("avoid using JavaScript keyword as property name: " +
("\"" + keywordMatch[0] + "\"\n Raw expression: " + text.trim()), range);
}
else {
warn("invalid expression: " + e.message + " in\n\n" +
(" " + exp + "\n\n") +
(" Raw expression: " + text.trim() + "\n"), range);
}
}
}
function checkFunctionParameterExpression(exp, text, warn, range) {
try {
new Function(exp, '');
}
catch (e) {
warn("invalid function parameter expression: " + e.message + " in\n\n" +
(" " + exp + "\n\n") +
(" Raw expression: " + text.trim() + "\n"), range);
}
}
var range = 2;
function generateCodeFrame(source, start, end) {
if (start === void 0) { start = 0; }
if (end === void 0) { end = source.length; }
var lines = source.split(/\r?\n/);
var count = 0;
var res = [];
for (var i = 0; i < lines.length; i++) {
count += lines[i].length + 1;
if (count >= start) {
for (var j = i - range; j <= i + range || end > count; j++) {
if (j < 0 || j >= lines.length)
{ continue; }
res.push("" + (j + 1) + repeat(" ", 3 - String(j + 1).length) + "| " + lines[j]);
var lineLength = lines[j].length;
if (j === i) {
// push underline
var pad = start - (count - lineLength) + 1;
var length_1 = end > count ? lineLength - pad : end - start;
res.push(" | " + repeat(" ", pad) + repeat("^", length_1));
}
else if (j > i) {
if (end > count) {
var length_2 = Math.min(end - count, lineLength);
res.push(" | " + repeat("^", length_2));
}
count += lineLength + 1;
}
}
break;
}
}
return res.join('\n');
}
function repeat(str, n) {
var result = '';
if (n > 0) {
while (true) {
// eslint-disable-line
if (n & 1)
{ result += str; }
n >>>= 1;
if (n <= 0)
{ break; }
str += str;
}
}
return result;
}
function createFunction(code, errors) {
try {
return new Function(code);
}
catch (err) {
errors.push({ err: err, code: code });
return noop$1;
}
}
function createCompileToFunctionFn(compile) {
var cache = Object.create(null);
return function compileToFunctions(template, options, vm) {
options = extend({}, options);
var warn = options.warn || warn$2;
delete options.warn;
/* istanbul ignore if */
{
// detect possible CSP restriction
try {
new Function('return 1');
}
catch (e) {
if (e.toString().match(/unsafe-eval|CSP/)) {
warn('It seems you are using the standalone build of Vue.js in an ' +
'environment with Content Security Policy that prohibits unsafe-eval. ' +
'The template compiler cannot work in this environment. Consider ' +
'relaxing the policy to allow unsafe-eval or pre-compiling your ' +
'templates into render functions.');
}
}
}
// check cache
var key = options.delimiters
? String(options.delimiters) + template
: template;
if (cache[key]) {
return cache[key];
}
// compile
var compiled = compile(template, options);
// check compilation errors/tips
{
if (compiled.errors && compiled.errors.length) {
if (options.outputSourceRange) {
compiled.errors.forEach(function (e) {
warn("Error compiling template:\n\n" + e.msg + "\n\n" +
generateCodeFrame(template, e.start, e.end), vm);
});
}
else {
warn("Error compiling template:\n\n" + template + "\n\n" +
compiled.errors.map(function (e) { return "- " + e; }).join('\n') +
'\n', vm);
}
}
if (compiled.tips && compiled.tips.length) {
if (options.outputSourceRange) {
compiled.tips.forEach(function (e) { return tip(e.msg, vm); });
}
else {
compiled.tips.forEach(function (msg) { return tip(msg, vm); });
}
}
}
// turn code into functions
var res = {};
var fnGenErrors = [];
res.render = createFunction(compiled.render, fnGenErrors);
res.staticRenderFns = compiled.staticRenderFns.map(function (code) {
return createFunction(code, fnGenErrors);
});
// check function generation errors.
// this should only happen if there is a bug in the compiler itself.
// mostly for codegen development use
/* istanbul ignore if */
{
if ((!compiled.errors || !compiled.errors.length) && fnGenErrors.length) {
warn("Failed to generate render function:\n\n" +
fnGenErrors
.map(function (_a) {
var err = _a.err, code = _a.code;
return err.toString() + " in\n\n" + code + "\n";
})
.join('\n'), vm);
}
}
return (cache[key] = res);
};
}
function createCompilerCreator(baseCompile) {
return function createCompiler(baseOptions) {
function compile(template, options) {
var finalOptions = Object.create(baseOptions);
var errors = [];
var tips = [];
var warn = function (msg, range, tip) {
(tip ? tips : errors).push(msg);
};
if (options) {
if (options.outputSourceRange) {
// $flow-disable-line
var leadingSpaceLength_1 = template.match(/^\s*/)[0].length;
warn = function (msg, range, tip) {
var data = { msg: msg };
if (range) {
if (range.start != null) {
data.start = range.start + leadingSpaceLength_1;
}
if (range.end != null) {
data.end = range.end + leadingSpaceLength_1;
}
}
(tip ? tips : errors).push(data);
};
}
// merge custom modules
if (options.modules) {
finalOptions.modules = (baseOptions.modules || []).concat(options.modules);
}
// merge custom directives
if (options.directives) {
finalOptions.directives = extend(Object.create(baseOptions.directives || null), options.directives);
}
// copy other options
for (var key in options) {
if (key !== 'modules' && key !== 'directives') {
finalOptions[key] = options[key];
}
}
}
finalOptions.warn = warn;
var compiled = baseCompile(template.trim(), finalOptions);
{
detectErrors(compiled.ast, warn);
}
compiled.errors = errors;
compiled.tips = tips;
return compiled;
}
return {
compile: compile,
compileToFunctions: createCompileToFunctionFn(compile),
};
};
}
var createCompiler = createCompilerCreator(function baseCompile(template, options) {
var ast = parse(template.trim(), options);
optimize(ast, options);
var code = generate(ast, options);
return {
ast: ast,
render: code.render,
staticRenderFns: code.staticRenderFns,
};
});
var _a = createCompiler(baseOptions), compileToFunctions = _a.compileToFunctions;
// The template compiler attempts to minimize the need for normalization by
// statically analyzing the template at compile time.
//
// For plain HTML markup, normalization can be completely skipped because the
// generated render function is guaranteed to return Array<VNode>. There are
// two cases where extra normalization is needed:
// 1. When the children contains components - because a functional component
// may return an Array instead of a single root. In this case, just a simple
// normalization is needed - if any child is an Array, we flatten the whole
// thing with Array.prototype.concat. It is guaranteed to be only 1-level deep
// because functional components already normalize their own children.
function simpleNormalizeChildren(children) {
for (var i = 0; i < children.length; i++) {
if (Array.isArray(children[i])) {
return Array.prototype.concat.apply([], children);
}
}
return children;
}
// 2. When the children contains constructs that always generated nested Arrays,
// e.g. <template>, <slot>, v-for, or when the children is provided by user
// with hand-written render functions / JSX. In such cases a full normalization
// is needed to cater to all possible types of children values.
function normalizeChildren(children) {
return isPrimitive(children)
? [createTextVNode(children)]
: Array.isArray(children)
? normalizeArrayChildren(children)
: undefined;
}
function isTextNode(node) {
return isDef(node) && isDef(node.text) && isFalse(node.isComment);
}
function normalizeArrayChildren(children, nestedIndex) {
var res = [];
var i, c, lastIndex, last;
for (i = 0; i < children.length; i++) {
c = children[i];
if (isUndef(c) || typeof c === 'boolean')
{ continue; }
lastIndex = res.length - 1;
last = res[lastIndex];
// nested
if (Array.isArray(c)) {
if (c.length > 0) {
c = normalizeArrayChildren(c, (nestedIndex || '') + "_" + i);
// merge adjacent text nodes
if (isTextNode(c[0]) && isTextNode(last)) {
res[lastIndex] = createTextVNode(last.text + c[0].text);
c.shift();
}
res.push.apply(res, c);
}
}
else if (isPrimitive(c)) {
if (isTextNode(last)) {
// merge adjacent text nodes
// this is necessary for SSR hydration because text nodes are
// essentially merged when rendered to HTML strings
res[lastIndex] = createTextVNode(last.text + c);
}
else if (c !== '') {
// convert primitive to vnode
res.push(createTextVNode(c));
}
}
else {
if (isTextNode(c) && isTextNode(last)) {
// merge adjacent text nodes
res[lastIndex] = createTextVNode(last.text + c.text);
}
else {
// default key for nested array children (likely generated by v-for)
if (isTrue(children._isVList) &&
isDef(c.tag) &&
isUndef(c.key) &&
isDef(nestedIndex)) {
c.key = "__vlist" + nestedIndex + "_" + i + "__";
}
res.push(c);
}
}
}
return res;
}
var ssrHelpers = {
_ssrEscape: escape,
_ssrNode: renderStringNode$1,
_ssrList: renderStringList,
_ssrAttr: renderAttr,
_ssrAttrs: renderAttrs,
_ssrDOMProps: renderDOMProps,
_ssrClass: renderSSRClass,
_ssrStyle: renderSSRStyle,
};
function installSSRHelpers(vm) {
if (vm._ssrNode) {
return;
}
var Vue = vm.constructor;
// @ts-expect-error
while (Vue.super) {
// @ts-expect-error
Vue = Vue.super;
}
extend(Vue.prototype, ssrHelpers);
// @ts-expect-error
if (Vue.FunctionalRenderContext) {
// @ts-expect-error
extend(Vue.FunctionalRenderContext.prototype, ssrHelpers);
}
}
var StringNode = /** @class */ (function () {
function StringNode(open, close, children, normalizationType) {
this.isString = true;
this.open = open;
this.close = close;
if (children) {
this.children =
normalizationType === 1
? simpleNormalizeChildren(children)
: normalizationType === 2
? normalizeChildren(children)
: children;
}
else {
this.children = void 0;
}
}
return StringNode;
}());
function renderStringNode$1(open, close, children, normalizationType) {
return new StringNode(open, close, children, normalizationType);
}
function renderStringList(val, render) {
var ret = '';
var i, l, keys, key;
if (Array.isArray(val) || typeof val === 'string') {
for (i = 0, l = val.length; i < l; i++) {
ret += render(val[i], i);
}
}
else if (typeof val === 'number') {
for (i = 0; i < val; i++) {
ret += render(i + 1, i);
}
}
else if (isObject(val)) {
keys = Object.keys(val);
for (i = 0, l = keys.length; i < l; i++) {
key = keys[i];
ret += render(val[key], key, i);
}
}
return ret;
}
function renderAttrs(obj) {
var res = '';
for (var key in obj) {
if (isSSRUnsafeAttr(key)) {
continue;
}
res += renderAttr(key, obj[key]);
}
return res;
}
function renderDOMProps(obj) {
var res = '';
for (var key in obj) {
var attr = propsToAttrMap[key] || key.toLowerCase();
if (isRenderableAttr(attr)) {
res += renderAttr(attr, obj[key]);
}
}
return res;
}
function renderSSRClass(staticClass, dynamic) {
var res = renderClass$1(staticClass, dynamic);
return res === '' ? res : " class=\"" + escape(res) + "\"";
}
function renderSSRStyle(staticStyle, dynamic, extra) {
var style = {};
if (staticStyle)
{ extend(style, staticStyle); }
if (dynamic)
{ extend(style, normalizeStyleBinding(dynamic)); }
if (extra)
{ extend(style, extra); }
var res = genStyle(style);
return res === '' ? res : " style=" + JSON.stringify(escape(res));
}
/* not type checking this file because flow doesn't play well with Proxy */
{
makeMap('Infinity,undefined,NaN,isFinite,isNaN,' +
'parseFloat,parseInt,decodeURI,decodeURIComponent,encodeURI,encodeURIComponent,' +
'Math,Number,Date,Array,Object,Boolean,String,RegExp,Map,Set,JSON,Intl,BigInt,' +
'require' // for Webpack/Browserify
);
var hasProxy_1 = typeof Proxy !== 'undefined' && isNative(Proxy);
if (hasProxy_1) {
var isBuiltInModifier_1 = makeMap('stop,prevent,self,ctrl,shift,alt,meta,exact');
config.keyCodes = new Proxy(config.keyCodes, {
set: function (target, key, value) {
if (isBuiltInModifier_1(key)) {
warn$2("Avoid overwriting built-in modifier in config.keyCodes: ." + key);
return false;
}
else {
target[key] = value;
return true;
}
},
});
}
}
var seenObjects = new _Set();
/**
* Recursively traverse an object to evoke all converted
* getters, so that every nested property inside the object
* is collected as a "deep" dependency.
*/
function traverse(val) {
_traverse(val, seenObjects);
seenObjects.clear();
}
function _traverse(val, seen) {
var i, keys;
var isA = Array.isArray(val);
if ((!isA && !isObject(val)) ||
Object.isFrozen(val) ||
val instanceof VNode) {
return;
}
if (val.__ob__) {
var depId = val.__ob__.dep.id;
if (seen.has(depId)) {
return;
}
seen.add(depId);
}
if (isA) {
i = val.length;
while (i--)
{ _traverse(val[i], seen); }
}
else {
keys = Object.keys(val);
i = keys.length;
while (i--)
{ _traverse(val[keys[i]], seen); }
}
}
{
var perf_1 = inBrowser && window.performance;
/* istanbul ignore if */
if (perf_1 &&
perf_1.mark &&
perf_1.measure &&
perf_1.clearMarks &&
perf_1.clearMeasures) ;
}
var normalizeEvent = cached(function (name) {
var passive = name.charAt(0) === '&';
name = passive ? name.slice(1) : name;
var once = name.charAt(0) === '~'; // Prefixed last, checked first
name = once ? name.slice(1) : name;
var capture = name.charAt(0) === '!';
name = capture ? name.slice(1) : name;
return {
name: name,
once: once,
capture: capture,
passive: passive,
};
});
function createFnInvoker(fns, vm) {
function invoker() {
var arguments$1 = arguments;
var fns = invoker.fns;
if (Array.isArray(fns)) {
var cloned = fns.slice();
for (var i = 0; i < cloned.length; i++) {
invokeWithErrorHandling(cloned[i], null, arguments$1, vm, "v-on handler");
}
}
else {
// return handler return value for single handlers
return invokeWithErrorHandling(fns, null, arguments, vm, "v-on handler");
}
}
invoker.fns = fns;
return invoker;
}
function updateListeners(on, oldOn, add, remove, createOnceHandler, vm) {
var name, cur, old, event;
for (name in on) {
cur = on[name];
old = oldOn[name];
event = normalizeEvent(name);
if (isUndef(cur)) {
warn$2("Invalid handler for event \"" + event.name + "\": got " + String(cur), vm);
}
else if (isUndef(old)) {
if (isUndef(cur.fns)) {
cur = on[name] = createFnInvoker(cur, vm);
}
if (isTrue(event.once)) {
cur = on[name] = createOnceHandler(event.name, cur, event.capture);
}
add(event.name, cur, event.capture, event.passive, event.params);
}
else if (cur !== old) {
old.fns = cur;
on[name] = old;
}
}
for (name in oldOn) {
if (isUndef(on[name])) {
event = normalizeEvent(name);
remove(event.name, oldOn[name], event.capture);
}
}
}
function extractPropsFromVNodeData(data, Ctor, tag) {
// we are only extracting raw values here.
// validation and default values are handled in the child
// component itself.
var propOptions = Ctor.options.props;
if (isUndef(propOptions)) {
return;
}
var res = {};
var attrs = data.attrs, props = data.props;
if (isDef(attrs) || isDef(props)) {
for (var key in propOptions) {
var altKey = hyphenate(key);
{
var keyInLowerCase = key.toLowerCase();
if (key !== keyInLowerCase && attrs && hasOwn(attrs, keyInLowerCase)) {
tip("Prop \"" + keyInLowerCase + "\" is passed to component " +
(formatComponentName(
// @ts-ignore
tag || Ctor) + ", but the declared prop name is") +
(" \"" + key + "\". ") +
"Note that HTML attributes are case-insensitive and camelCased " +
"props need to use their kebab-case equivalents when using in-DOM " +
("templates. You should probably use \"" + altKey + "\" instead of \"" + key + "\"."));
}
}
checkProp(res, props, key, altKey, true) ||
checkProp(res, attrs, key, altKey, false);
}
}
return res;
}
function checkProp(res, hash, key, altKey, preserve) {
if (isDef(hash)) {
if (hasOwn(hash, key)) {
res[key] = hash[key];
if (!preserve) {
delete hash[key];
}
return true;
}
else if (hasOwn(hash, altKey)) {
res[key] = hash[altKey];
if (!preserve) {
delete hash[altKey];
}
return true;
}
}
return false;
}
var SIMPLE_NORMALIZE = 1;
var ALWAYS_NORMALIZE = 2;
// wrapper function for providing a more flexible interface
// without getting yelled at by flow
function createElement(context, tag, data, children, normalizationType, alwaysNormalize) {
if (Array.isArray(data) || isPrimitive(data)) {
normalizationType = children;
children = data;
data = undefined;
}
if (isTrue(alwaysNormalize)) {
normalizationType = ALWAYS_NORMALIZE;
}
return _createElement(context, tag, data, children, normalizationType);
}
function _createElement(context, tag, data, children, normalizationType) {
if (isDef(data) && isDef(data.__ob__)) {
warn$2("Avoid using observed data object as vnode data: " + JSON.stringify(data) + "\n" + 'Always create fresh vnode data objects in each render!', context);
return createEmptyVNode();
}
// object syntax in v-bind
if (isDef(data) && isDef(data.is)) {
tag = data.is;
}
if (!tag) {
// in case of component :is set to falsy value
return createEmptyVNode();
}
// warn against non-primitive key
if (isDef(data) &&
isDef(data.key) &&
!isPrimitive(data.key)) {
// @ts-expect-error
{
warn$2('Avoid using non-primitive value as key, ' +
'use string/number value instead.', context);
}
}
// support single function children as default scoped slot
if (Array.isArray(children) && typeof children[0] === 'function') {
data = data || {};
data.scopedSlots = { default: children[0] };
children.length = 0;
}
if (normalizationType === ALWAYS_NORMALIZE) {
children = normalizeChildren(children);
}
else if (normalizationType === SIMPLE_NORMALIZE) {
children = simpleNormalizeChildren(children);
}
var vnode, ns;
if (typeof tag === 'string') {
var Ctor = void 0;
ns = (context.$vnode && context.$vnode.ns) || config.getTagNamespace(tag);
if ((!data || !data.pre) &&
isDef((Ctor = resolveAsset(context.$options, 'components', tag)))) {
// component
vnode = createComponent(Ctor, data, context, children, tag);
}
else {
// unknown or unlisted namespaced elements
// check at runtime because it may get assigned a namespace when its
// parent normalizes children
vnode = new VNode(tag, data, children, undefined, undefined, context);
}
}
else {
// direct component options / constructor
vnode = createComponent(tag, data, context, children);
}
if (Array.isArray(vnode)) {
return vnode;
}
else if (isDef(vnode)) {
if (isDef(ns))
{ applyNS(vnode, ns); }
if (isDef(data))
{ registerDeepBindings(data); }
return vnode;
}
else {
return createEmptyVNode();
}
}
function applyNS(vnode, ns, force) {
vnode.ns = ns;
if (vnode.tag === 'foreignObject') {
// use default namespace inside foreignObject
ns = undefined;
force = true;
}
if (isDef(vnode.children)) {
for (var i = 0, l = vnode.children.length; i < l; i++) {
var child = vnode.children[i];
if (isDef(child.tag) &&
(isUndef(child.ns) || (isTrue(force) && child.tag !== 'svg'))) {
applyNS(child, ns, force);
}
}
}
}
// ref #5318
// necessary to ensure parent re-render when deep bindings like :style and
// :class are used on slot nodes
function registerDeepBindings(data) {
if (isObject(data.style)) {
traverse(data.style);
}
if (isObject(data.class)) {
traverse(data.class);
}
}
/**
* Runtime helper for rendering v-for lists.
*/
function renderList(val, render) {
var ret = null, i, l, keys, key;
if (Array.isArray(val) || typeof val === 'string') {
ret = new Array(val.length);
for (i = 0, l = val.length; i < l; i++) {
ret[i] = render(val[i], i);
}
}
else if (typeof val === 'number') {
ret = new Array(val);
for (i = 0; i < val; i++) {
ret[i] = render(i + 1, i);
}
}
else if (isObject(val)) {
if (hasSymbol && val[Symbol.iterator]) {
ret = [];
var iterator = val[Symbol.iterator]();
var result = iterator.next();
while (!result.done) {
ret.push(render(result.value, ret.length));
result = iterator.next();
}
}
else {
keys = Object.keys(val);
ret = new Array(keys.length);
for (i = 0, l = keys.length; i < l; i++) {
key = keys[i];
ret[i] = render(val[key], key, i);
}
}
}
if (!isDef(ret)) {
ret = [];
}
ret._isVList = true;
return ret;
}
/**
* Runtime helper for rendering <slot>
*/
function renderSlot(name, fallback, props, bindObject) {
var scopedSlotFn = this.$scopedSlots[name];
var nodes;
if (scopedSlotFn) {
// scoped slot
props = props || {};
if (bindObject) {
if (!isObject(bindObject)) {
warn$2('slot v-bind without argument expects an Object', this);
}
props = extend(extend({}, bindObject), props);
}
nodes = scopedSlotFn(props) || fallback;
}
else {
nodes = this.$slots[name] || fallback;
}
var target = props && props.slot;
if (target) {
return this.$createElement('template', { slot: target }, nodes);
}
else {
return nodes;
}
}
/**
* Runtime helper for resolving filters
*/
function resolveFilter(id) {
return resolveAsset(this.$options, 'filters', id, true) || identity;
}
function isKeyNotMatch(expect, actual) {
if (Array.isArray(expect)) {
return expect.indexOf(actual) === -1;
}
else {
return expect !== actual;
}
}
/**
* Runtime helper for checking keyCodes from config.
* exposed as Vue.prototype._k
* passing in eventKeyName as last argument separately for backwards compat
*/
function checkKeyCodes(eventKeyCode, key, builtInKeyCode, eventKeyName, builtInKeyName) {
var mappedKeyCode = config.keyCodes[key] || builtInKeyCode;
if (builtInKeyName && eventKeyName && !config.keyCodes[key]) {
return isKeyNotMatch(builtInKeyName, eventKeyName);
}
else if (mappedKeyCode) {
return isKeyNotMatch(mappedKeyCode, eventKeyCode);
}
else if (eventKeyName) {
return hyphenate(eventKeyName) !== key;
}
}
/**
* Runtime helper for merging v-bind="object" into a VNode's data.
*/
function bindObjectProps(data, tag, value, asProp, isSync) {
if (value) {
if (!isObject(value)) {
warn$2('v-bind without argument expects an Object or Array value', this);
}
else {
if (Array.isArray(value)) {
value = toObject(value);
}
var hash = void 0;
var _loop_1 = function (key) {
if (key === 'class' || key === 'style' || isReservedAttribute(key)) {
hash = data;
}
else {
var type = data.attrs && data.attrs.type;
hash =
asProp || config.mustUseProp(tag, type, key)
? data.domProps || (data.domProps = {})
: data.attrs || (data.attrs = {});
}
var camelizedKey = camelize(key);
var hyphenatedKey = hyphenate(key);
if (!(camelizedKey in hash) && !(hyphenatedKey in hash)) {
hash[key] = value[key];
if (isSync) {
var on = data.on || (data.on = {});
on["update:" + key] = function ($event) {
value[key] = $event;
};
}
}
};
for (var key in value) {
_loop_1(key);
}
}
}
return data;
}
/**
* Runtime helper for rendering static trees.
*/
function renderStatic(index, isInFor) {
var cached = this._staticTrees || (this._staticTrees = []);
var tree = cached[index];
// if has already-rendered static tree and not inside v-for,
// we can reuse the same tree.
if (tree && !isInFor) {
return tree;
}
// otherwise, render a fresh tree.
tree = cached[index] = this.$options.staticRenderFns[index].call(this._renderProxy, null, this // for render fns generated for functional component templates
);
markStatic(tree, "__static__" + index, false);
return tree;
}
/**
* Runtime helper for v-once.
* Effectively it means marking the node as static with a unique key.
*/
function markOnce(tree, index, key) {
markStatic(tree, "__once__" + index + (key ? "_" + key : ""), true);
return tree;
}
function markStatic(tree, key, isOnce) {
if (Array.isArray(tree)) {
for (var i = 0; i < tree.length; i++) {
if (tree[i] && typeof tree[i] !== 'string') {
markStaticNode(tree[i], key + "_" + i, isOnce);
}
}
}
else {
markStaticNode(tree, key, isOnce);
}
}
function markStaticNode(node, key, isOnce) {
node.isStatic = true;
node.key = key;
node.isOnce = isOnce;
}
function bindObjectListeners(data, value) {
if (value) {
if (!isPlainObject(value)) {
warn$2('v-on without argument expects an Object value', this);
}
else {
var on = (data.on = data.on ? extend({}, data.on) : {});
for (var key in value) {
var existing = on[key];
var ours = value[key];
on[key] = existing ? [].concat(existing, ours) : ours;
}
}
}
return data;
}
function resolveScopedSlots(fns, res,
// the following are added in 2.6
hasDynamicKeys, contentHashKey) {
res = res || { $stable: !hasDynamicKeys };
for (var i = 0; i < fns.length; i++) {
var slot = fns[i];
if (Array.isArray(slot)) {
resolveScopedSlots(slot, res, hasDynamicKeys);
}
else if (slot) {
// marker for reverse proxying v-slot without scope on this.$slots
// @ts-expect-error
if (slot.proxy) {
// @ts-expect-error
slot.fn.proxy = true;
}
res[slot.key] = slot.fn;
}
}
if (contentHashKey) {
res.$key = contentHashKey;
}
return res;
}
// helper to process dynamic keys for dynamic arguments in v-bind and v-on.
function bindDynamicKeys(baseObj, values) {
for (var i = 0; i < values.length; i += 2) {
var key = values[i];
if (typeof key === 'string' && key) {
baseObj[values[i]] = values[i + 1];
}
else if (key !== '' &&
key !== null) {
// null is a special value for explicitly removing a binding
warn$2("Invalid value for dynamic directive argument (expected string or null): " + key, this);
}
}
return baseObj;
}
// helper to dynamically append modifier runtime markers to event names.
// ensure only append when value is already string, otherwise it will be cast
// to string and cause the type check to miss.
function prependModifier(value, symbol) {
return typeof value === 'string' ? symbol + value : value;
}
function installRenderHelpers(target) {
target._o = markOnce;
target._n = toNumber;
target._s = toString;
target._l = renderList;
target._t = renderSlot;
target._q = looseEqual;
target._i = looseIndexOf;
target._m = renderStatic;
target._f = resolveFilter;
target._k = checkKeyCodes;
target._b = bindObjectProps;
target._v = createTextVNode;
target._e = createEmptyVNode;
target._u = resolveScopedSlots;
target._g = bindObjectListeners;
target._d = bindDynamicKeys;
target._p = prependModifier;
}
/**
* Runtime helper for resolving raw children VNodes into a slot object.
*/
function resolveSlots(children, context) {
if (!children || !children.length) {
return {};
}
var slots = {};
for (var i = 0, l = children.length; i < l; i++) {
var child = children[i];
var data = child.data;
// remove slot attribute if the node is resolved as a Vue slot node
if (data && data.attrs && data.attrs.slot) {
delete data.attrs.slot;
}
// named slots should only be respected if the vnode was rendered in the
// same context.
if ((child.context === context || child.fnContext === context) &&
data &&
data.slot != null) {
var name_1 = data.slot;
var slot = slots[name_1] || (slots[name_1] = []);
if (child.tag === 'template') {
slot.push.apply(slot, child.children || []);
}
else {
slot.push(child);
}
}
else {
(slots.default || (slots.default = [])).push(child);
}
}
// ignore slots that contains only whitespace
for (var name_2 in slots) {
if (slots[name_2].every(isWhitespace)) {
delete slots[name_2];
}
}
return slots;
}
function isWhitespace(node) {
return (node.isComment && !node.asyncFactory) || node.text === ' ';
}
function normalizeScopedSlots(slots, normalSlots, prevSlots) {
var res;
var hasNormalSlots = Object.keys(normalSlots).length > 0;
var isStable = slots ? !!slots.$stable : !hasNormalSlots;
var key = slots && slots.$key;
if (!slots) {
res = {};
}
else if (slots._normalized) {
// fast path 1: child component re-render only, parent did not change
return slots._normalized;
}
else if (isStable &&
prevSlots &&
prevSlots !== emptyObject &&
key === prevSlots.$key &&
!hasNormalSlots &&
!prevSlots.$hasNormal) {
// fast path 2: stable scoped slots w/ no normal slots to proxy,
// only need to normalize once
return prevSlots;
}
else {
res = {};
for (var key_1 in slots) {
if (slots[key_1] && key_1[0] !== '$') {
res[key_1] = normalizeScopedSlot(normalSlots, key_1, slots[key_1]);
}
}
}
// expose normal slots on scopedSlots
for (var key_2 in normalSlots) {
if (!(key_2 in res)) {
res[key_2] = proxyNormalSlot(normalSlots, key_2);
}
}
// avoriaz seems to mock a non-extensible $scopedSlots object
// and when that is passed down this would cause an error
if (slots && Object.isExtensible(slots)) {
slots._normalized = res;
}
def(res, '$stable', isStable);
def(res, '$key', key);
def(res, '$hasNormal', hasNormalSlots);
return res;
}
function normalizeScopedSlot(normalSlots, key, fn) {
var normalized = function () {
var res = arguments.length ? fn.apply(null, arguments) : fn({});
res =
res && typeof res === 'object' && !Array.isArray(res)
? [res] // single vnode
: normalizeChildren(res);
return res && (res.length === 0 || (res.length === 1 && res[0].isComment)) // #9658
? undefined
: res;
};
// this is a slot using the new v-slot syntax without scope. although it is
// compiled as a scoped slot, render fn users would expect it to be present
// on this.$slots because the usage is semantically a normal slot.
if (fn.proxy) {
Object.defineProperty(normalSlots, key, {
get: normalized,
enumerable: true,
configurable: true,
});
}
return normalized;
}
function proxyNormalSlot(slots, key) {
return function () { return slots[key]; };
}
function createAsyncPlaceholder(factory, data, context, children, tag) {
var node = createEmptyVNode();
node.asyncFactory = factory;
node.asyncMeta = { data: data, context: context, children: children, tag: tag };
return node;
}
function resolveAsyncComponent(factory, baseCtor) {
if (isTrue(factory.error) && isDef(factory.errorComp)) {
return factory.errorComp;
}
if (isDef(factory.resolved)) {
return factory.resolved;
}
if (isTrue(factory.loading) && isDef(factory.loadingComp)) {
return factory.loadingComp;
}
}
var target;
function add(event, fn) {
target.$on(event, fn);
}
function remove(event, fn) {
target.$off(event, fn);
}
function createOnceHandler(event, fn) {
var _target = target;
return function onceHandler() {
var res = fn.apply(null, arguments);
if (res !== null) {
_target.$off(event, onceHandler);
}
};
}
function updateComponentListeners(vm, listeners, oldListeners) {
target = vm;
updateListeners(listeners, oldListeners || {}, add, remove, createOnceHandler, vm);
target = undefined;
}
var activeInstance = null;
function updateChildComponent(vm, propsData, listeners, parentVnode, renderChildren) {
// determine whether component has slot children
// we need to do this before overwriting $options._renderChildren.
// check if there are dynamic scopedSlots (hand-written or compiled but with
// dynamic slot names). Static scoped slots compiled from template has the
// "$stable" marker.
var newScopedSlots = parentVnode.data.scopedSlots;
var oldScopedSlots = vm.$scopedSlots;
var hasDynamicScopedSlot = !!((newScopedSlots && !newScopedSlots.$stable) ||
(oldScopedSlots !== emptyObject && !oldScopedSlots.$stable) ||
(newScopedSlots && vm.$scopedSlots.$key !== newScopedSlots.$key));
// Any static slot children from the parent may have changed during parent's
// update. Dynamic scoped slots may also have changed. In such cases, a forced
// update is necessary to ensure correctness.
var needsForceUpdate = !!(renderChildren || // has new static slots
vm.$options._renderChildren || // has old static slots
hasDynamicScopedSlot);
// @ts-ignore
vm.$options._parentVnode = parentVnode;
// @ts-ignore
vm.$vnode = parentVnode; // update vm's placeholder node without re-render
if (vm._vnode) {
// update child tree's parent
// @ts-ignore
vm._vnode.parent = parentVnode;
}
vm.$options._renderChildren = renderChildren;
// update $attrs and $listeners hash
// these are also reactive so they may trigger child update if the child
// used them during render
vm.$attrs = parentVnode.data.attrs || emptyObject;
// @ts-ignore
vm.$listeners = listeners || emptyObject;
// update props
if (propsData && vm.$options.props) {
toggleObserving(false);
var props = vm._props;
var propKeys = vm.$options._propKeys || [];
for (var i = 0; i < propKeys.length; i++) {
var key = propKeys[i];
var propOptions = vm.$options.props; // wtf flow?
props[key] = validateProp(key, propOptions, propsData, vm);
}
toggleObserving(true);
// keep a copy of raw propsData
vm.$options.propsData = propsData;
}
// update listeners
listeners = listeners || emptyObject;
var oldListeners = vm.$options._parentListeners;
vm.$options._parentListeners = listeners;
updateComponentListeners(vm, listeners, oldListeners);
// resolve slots + force update if has children
if (needsForceUpdate) {
vm.$slots = resolveSlots(renderChildren, parentVnode.context);
vm.$forceUpdate();
}
}
function isInInactiveTree(vm) {
while (vm && (vm = vm.$parent)) {
if (vm._inactive)
{ return true; }
}
return false;
}
function activateChildComponent(vm, direct) {
if (direct) {
vm._directInactive = false;
if (isInInactiveTree(vm)) {
return;
}
}
else if (vm._directInactive) {
return;
}
if (vm._inactive || vm._inactive === null) {
vm._inactive = false;
for (var i = 0; i < vm.$children.length; i++) {
activateChildComponent(vm.$children[i]);
}
callHook(vm, 'activated');
}
}
function deactivateChildComponent(vm, direct) {
if (direct) {
vm._directInactive = true;
if (isInInactiveTree(vm)) {
return;
}
}
if (!vm._inactive) {
vm._inactive = true;
for (var i = 0; i < vm.$children.length; i++) {
deactivateChildComponent(vm.$children[i]);
}
callHook(vm, 'deactivated');
}
}
function callHook(vm, hook) {
// #7573 disable dep collection when invoking lifecycle hooks
pushTarget();
var handlers = vm.$options[hook];
var info = hook + " hook";
if (handlers) {
for (var i = 0, j = handlers.length; i < j; i++) {
invokeWithErrorHandling(handlers[i], vm, null, vm, info);
}
}
if (vm._hasHookEvent) {
vm.$emit('hook:' + hook);
}
popTarget();
}
// Async edge case fix requires storing an event listener's attach timestamp.
var getNow = Date.now;
// Determine what event timestamp the browser is using. Annoyingly, the
// timestamp can either be hi-res (relative to page load) or low-res
// (relative to UNIX epoch), so in order to compare time we have to use the
// same timestamp type when saving the flush timestamp.
// All IE versions use low-res event timestamps, and have problematic clock
// implementations (#9632)
if (inBrowser && !isIE) {
var performance_1 = window.performance;
if (performance_1 &&
typeof performance_1.now === 'function' &&
getNow() > document.createEvent('Event').timeStamp) {
// if the event timestamp, although evaluated AFTER the Date.now(), is
// smaller than it, it means the event is using a hi-res timestamp,
// and we need to use the hi-res version for event listener timestamps as
// well.
getNow = function () { return performance_1.now(); };
}
}
/**
* Queue a kept-alive component that was activated during patch.
* The queue will be processed after the entire tree has been patched.
*/
function queueActivatedComponent(vm) {
// setting _inactive to false here so that a render function can
// rely on checking whether it's in an inactive tree (e.g. router-view)
vm._inactive = false;
}
function resolveInject(inject, vm) {
if (inject) {
// inject is :any because flow is not smart enough to figure out cached
var result = Object.create(null);
var keys = hasSymbol ? Reflect.ownKeys(inject) : Object.keys(inject);
for (var i = 0; i < keys.length; i++) {
var key = keys[i];
// #6574 in case the inject object is observed...
if (key === '__ob__')
{ continue; }
var provideKey = inject[key].from;
var source = vm;
while (source) {
if (source._provided && hasOwn(source._provided, provideKey)) {
result[key] = source._provided[provideKey];
break;
}
// @ts-expect-error
source = source.$parent;
}
if (!source) {
if ('default' in inject[key]) {
var provideDefault = inject[key].default;
result[key] =
typeof provideDefault === 'function'
? provideDefault.call(vm)
: provideDefault;
}
else {
// @ts-ignore
warn$2("Injection \"" + key + "\" not found", vm);
}
}
}
return result;
}
}
function resolveConstructorOptions(Ctor) {
var options = Ctor.options;
if (Ctor.super) {
var superOptions = resolveConstructorOptions(Ctor.super);
var cachedSuperOptions = Ctor.superOptions;
if (superOptions !== cachedSuperOptions) {
// super option changed,
// need to resolve new options.
Ctor.superOptions = superOptions;
// check if there are any late-modified/attached options (#4976)
var modifiedOptions = resolveModifiedOptions(Ctor);
// update base extend options
if (modifiedOptions) {
extend(Ctor.extendOptions, modifiedOptions);
}
options = Ctor.options = mergeOptions(superOptions, Ctor.extendOptions);
if (options.name) {
options.components[options.name] = Ctor;
}
}
}
return options;
}
function resolveModifiedOptions(Ctor) {
var modified;
var latest = Ctor.options;
var sealed = Ctor.sealedOptions;
for (var key in latest) {
if (latest[key] !== sealed[key]) {
if (!modified)
{ modified = {}; }
modified[key] = latest[key];
}
}
return modified;
}
function FunctionalRenderContext(data, props, children, parent, Ctor) {
var _this = this;
var options = Ctor.options;
// ensure the createElement function in functional components
// gets a unique context - this is necessary for correct named slot check
var contextVm;
if (hasOwn(parent, '_uid')) {
contextVm = Object.create(parent);
// $flow-disable-line
contextVm._original = parent;
}
else {
// the context vm passed in is a functional context as well.
// in this case we want to make sure we are able to get a hold to the
// real context instance.
contextVm = parent;
// $flow-disable-line
parent = parent._original;
}
var isCompiled = isTrue(options._compiled);
var needNormalization = !isCompiled;
this.data = data;
this.props = props;
this.children = children;
this.parent = parent;
this.listeners = data.on || emptyObject;
this.injections = resolveInject(options.inject, parent);
this.slots = function () {
if (!_this.$slots) {
normalizeScopedSlots(data.scopedSlots, (_this.$slots = resolveSlots(children, parent)));
}
return _this.$slots;
};
Object.defineProperty(this, 'scopedSlots', {
enumerable: true,
get: function () {
return normalizeScopedSlots(data.scopedSlots, this.slots());
},
});
// support for compiled functional template
if (isCompiled) {
// exposing $options for renderStatic()
this.$options = options;
// pre-resolve slots for renderSlot()
this.$slots = this.slots();
this.$scopedSlots = normalizeScopedSlots(data.scopedSlots, this.$slots);
}
if (options._scopeId) {
this._c = function (a, b, c, d) {
var vnode = createElement(contextVm, a, b, c, d, needNormalization);
if (vnode && !Array.isArray(vnode)) {
vnode.fnScopeId = options._scopeId;
vnode.fnContext = parent;
}
return vnode;
};
}
else {
this._c = function (a, b, c, d) {
return createElement(contextVm, a, b, c, d, needNormalization);
};
}
}
installRenderHelpers(FunctionalRenderContext.prototype);
function createFunctionalComponent(Ctor, propsData, data, contextVm, children) {
var options = Ctor.options;
var props = {};
var propOptions = options.props;
if (isDef(propOptions)) {
for (var key in propOptions) {
props[key] = validateProp(key, propOptions, propsData || emptyObject);
}
}
else {
if (isDef(data.attrs))
{ mergeProps(props, data.attrs); }
if (isDef(data.props))
{ mergeProps(props, data.props); }
}
var renderContext = new FunctionalRenderContext(data, props, children, contextVm, Ctor);
var vnode = options.render.call(null, renderContext._c, renderContext);
if (vnode instanceof VNode) {
return cloneAndMarkFunctionalResult(vnode, data, renderContext.parent, options, renderContext);
}
else if (Array.isArray(vnode)) {
var vnodes = normalizeChildren(vnode) || [];
var res = new Array(vnodes.length);
for (var i = 0; i < vnodes.length; i++) {
res[i] = cloneAndMarkFunctionalResult(vnodes[i], data, renderContext.parent, options, renderContext);
}
return res;
}
}
function cloneAndMarkFunctionalResult(vnode, data, contextVm, options, renderContext) {
// #7817 clone node before setting fnContext, otherwise if the node is reused
// (e.g. it was from a cached normal slot) the fnContext causes named slots
// that should not be matched to match.
var clone = cloneVNode(vnode);
clone.fnContext = contextVm;
clone.fnOptions = options;
{
(clone.devtoolsMeta = clone.devtoolsMeta || {}).renderContext = renderContext;
}
if (data.slot) {
(clone.data || (clone.data = {})).slot = data.slot;
}
return clone;
}
function mergeProps(to, from) {
for (var key in from) {
to[camelize(key)] = from[key];
}
}
// inline hooks to be invoked on component VNodes during patch
var componentVNodeHooks = {
init: function (vnode, hydrating) {
if (vnode.componentInstance &&
!vnode.componentInstance._isDestroyed &&
vnode.data.keepAlive) {
// kept-alive components, treat as a patch
var mountedNode = vnode; // work around flow
componentVNodeHooks.prepatch(mountedNode, mountedNode);
}
else {
var child = (vnode.componentInstance = createComponentInstanceForVnode(vnode, activeInstance));
child.$mount(hydrating ? vnode.elm : undefined, hydrating);
}
},
prepatch: function (oldVnode, vnode) {
var options = vnode.componentOptions;
var child = (vnode.componentInstance = oldVnode.componentInstance);
updateChildComponent(child, options.propsData, // updated props
options.listeners, // updated listeners
vnode, // new parent vnode
options.children // new children
);
},
insert: function (vnode) {
var context = vnode.context, componentInstance = vnode.componentInstance;
if (!componentInstance._isMounted) {
componentInstance._isMounted = true;
callHook(componentInstance, 'mounted');
}
if (vnode.data.keepAlive) {
if (context._isMounted) {
// vue-router#1212
// During updates, a kept-alive component's child components may
// change, so directly walking the tree here may call activated hooks
// on incorrect children. Instead we push them into a queue which will
// be processed after the whole patch process ended.
queueActivatedComponent(componentInstance);
}
else {
activateChildComponent(componentInstance, true /* direct */);
}
}
},
destroy: function (vnode) {
var componentInstance = vnode.componentInstance;
if (!componentInstance._isDestroyed) {
if (!vnode.data.keepAlive) {
componentInstance.$destroy();
}
else {
deactivateChildComponent(componentInstance, true /* direct */);
}
}
},
};
var hooksToMerge = Object.keys(componentVNodeHooks);
function createComponent(Ctor, data, context, children, tag) {
if (isUndef(Ctor)) {
return;
}
var baseCtor = context.$options._base;
// plain options object: turn it into a constructor
if (isObject(Ctor)) {
Ctor = baseCtor.extend(Ctor);
}
// if at this stage it's not a constructor or an async component factory,
// reject.
if (typeof Ctor !== 'function') {
{
warn$2("Invalid Component definition: " + String(Ctor), context);
}
return;
}
// async component
var asyncFactory;
// @ts-expect-error
if (isUndef(Ctor.cid)) {
asyncFactory = Ctor;
Ctor = resolveAsyncComponent(asyncFactory);
if (Ctor === undefined) {
// return a placeholder node for async component, which is rendered
// as a comment node but preserves all the raw information for the node.
// the information will be used for async server-rendering and hydration.
return createAsyncPlaceholder(asyncFactory, data, context, children, tag);
}
}
data = data || {};
// resolve constructor options in case global mixins are applied after
// component constructor creation
resolveConstructorOptions(Ctor);
// transform component v-model data into props & events
if (isDef(data.model)) {
// @ts-expect-error
transformModel(Ctor.options, data);
}
// extract props
// @ts-expect-error
var propsData = extractPropsFromVNodeData(data, Ctor, tag);
// functional component
// @ts-expect-error
if (isTrue(Ctor.options.functional)) {
return createFunctionalComponent(Ctor, propsData, data, context, children);
}
// extract listeners, since these needs to be treated as
// child component listeners instead of DOM listeners
var listeners = data.on;
// replace with listeners with .native modifier
// so it gets processed during parent component patch.
data.on = data.nativeOn;
// @ts-expect-error
if (isTrue(Ctor.options.abstract)) {
// abstract components do not keep anything
// other than props & listeners & slot
// work around flow
var slot = data.slot;
data = {};
if (slot) {
data.slot = slot;
}
}
// install component management hooks onto the placeholder node
installComponentHooks(data);
// return a placeholder vnode
// @ts-expect-error
var name = Ctor.options.name || tag;
var vnode = new VNode(
// @ts-expect-error
"vue-component-" + Ctor.cid + (name ? "-" + name : ''), data, undefined, undefined, undefined, context,
// @ts-expect-error
{ Ctor: Ctor, propsData: propsData, listeners: listeners, tag: tag, children: children }, asyncFactory);
return vnode;
}
function createComponentInstanceForVnode(
// we know it's MountedComponentVNode but flow doesn't
vnode,
// activeInstance in lifecycle state
parent) {
var options = {
_isComponent: true,
_parentVnode: vnode,
parent: parent,
};
// check inline-template render functions
var inlineTemplate = vnode.data.inlineTemplate;
if (isDef(inlineTemplate)) {
options.render = inlineTemplate.render;
options.staticRenderFns = inlineTemplate.staticRenderFns;
}
return new vnode.componentOptions.Ctor(options);
}
function installComponentHooks(data) {
var hooks = data.hook || (data.hook = {});
for (var i = 0; i < hooksToMerge.length; i++) {
var key = hooksToMerge[i];
var existing = hooks[key];
var toMerge = componentVNodeHooks[key];
// @ts-expect-error
if (existing !== toMerge && !(existing && existing._merged)) {
hooks[key] = existing ? mergeHook(toMerge, existing) : toMerge;
}
}
}
function mergeHook(f1, f2) {
var merged = function (a, b) {
// flow complains about extra args which is why we use any
f1(a, b);
f2(a, b);
};
merged._merged = true;
return merged;
}
// transform component v-model info (value and callback) into
// prop and event handler respectively.
function transformModel(options, data) {
var prop = (options.model && options.model.prop) || 'value';
var event = (options.model && options.model.event) || 'input';
(data.attrs || (data.attrs = {}))[prop] = data.model.value;
var on = data.on || (data.on = {});
var existing = on[event];
var callback = data.model.callback;
if (isDef(existing)) {
if (Array.isArray(existing)
? existing.indexOf(callback) === -1
: existing !== callback) {
on[event] = [callback].concat(existing);
}
}
else {
on[event] = callback;
}
}
var warned = Object.create(null);
var warnOnce = function (msg) {
if (!warned[msg]) {
warned[msg] = true;
// eslint-disable-next-line no-console
console.warn("\n\u001B[31m" + msg + "\u001B[39m\n");
}
};
var onCompilationError = function (err, vm) {
var trace = vm ? generateComponentTrace(vm) : '';
throw new Error("\n\u001B[31m" + err + trace + "\u001B[39m\n");
};
var normalizeRender = function (vm) {
var _a = vm.$options, render = _a.render, template = _a.template, _scopeId = _a._scopeId;
if (isUndef(render)) {
if (template) {
var compiled = compileToFunctions(template, {
scopeId: _scopeId,
warn: onCompilationError,
}, vm);
vm.$options.render = compiled.render;
vm.$options.staticRenderFns = compiled.staticRenderFns;
}
else {
throw new Error("render function or template not defined in component: " + (vm.$options.name || vm.$options._componentTag || 'anonymous'));
}
}
};
function waitForServerPrefetch(vm, resolve, reject) {
var handlers = vm.$options.serverPrefetch;
if (isDef(handlers)) {
if (!Array.isArray(handlers))
{ handlers = [handlers]; }
try {
var promises = [];
for (var i = 0, j = handlers.length; i < j; i++) {
var result = handlers[i].call(vm, vm);
if (result && typeof result.then === 'function') {
promises.push(result);
}
}
Promise.all(promises).then(resolve).catch(reject);
return;
}
catch (e) {
reject(e);
}
}
resolve();
}
function renderNode(node, isRoot, context) {
if (node.isString) {
renderStringNode(node, context);
}
else if (isDef(node.componentOptions)) {
renderComponent(node, isRoot, context);
}
else if (isDef(node.tag)) {
renderElement(node, isRoot, context);
}
else if (isTrue(node.isComment)) {
if (isDef(node.asyncFactory)) {
// async component
renderAsyncComponent(node, isRoot, context);
}
else {
context.write("<!--" + node.text + "-->", context.next);
}
}
else {
context.write(node.raw ? node.text : escape(String(node.text)), context.next);
}
}
function registerComponentForCache(options, write) {
// exposed by vue-loader, need to call this if cache hit because
// component lifecycle hooks will not be called.
var register = options._ssrRegister;
if (write.caching && isDef(register)) {
write.componentBuffer[write.componentBuffer.length - 1].add(register);
}
return register;
}
function renderComponent(node, isRoot, context) {
var write = context.write, next = context.next, userContext = context.userContext;
// check cache hit
var Ctor = node.componentOptions.Ctor;
var getKey = Ctor.options.serverCacheKey;
var name = Ctor.options.name;
var cache = context.cache;
var registerComponent = registerComponentForCache(Ctor.options, write);
if (isDef(getKey) && isDef(cache) && isDef(name)) {
var rawKey = getKey(node.componentOptions.propsData);
if (rawKey === false) {
renderComponentInner(node, isRoot, context);
return;
}
var key_1 = name + '::' + rawKey;
var has = context.has, get_1 = context.get;
if (isDef(has)) {
has(key_1, function (hit) {
if (hit === true && isDef(get_1)) {
get_1(key_1, function (res) {
if (isDef(registerComponent)) {
registerComponent(userContext);
}
res.components.forEach(function (register) { return register(userContext); });
write(res.html, next);
});
}
else {
renderComponentWithCache(node, isRoot, key_1, context);
}
});
}
else if (isDef(get_1)) {
get_1(key_1, function (res) {
if (isDef(res)) {
if (isDef(registerComponent)) {
registerComponent(userContext);
}
res.components.forEach(function (register) { return register(userContext); });
write(res.html, next);
}
else {
renderComponentWithCache(node, isRoot, key_1, context);
}
});
}
}
else {
if (isDef(getKey) && isUndef(cache)) {
warnOnce("[vue-server-renderer] Component " + (Ctor.options.name || '(anonymous)') + " implemented serverCacheKey, " +
'but no cache was provided to the renderer.');
}
if (isDef(getKey) && isUndef(name)) {
warnOnce("[vue-server-renderer] Components that implement \"serverCacheKey\" " +
"must also define a unique \"name\" option.");
}
renderComponentInner(node, isRoot, context);
}
}
function renderComponentWithCache(node, isRoot, key, context) {
var write = context.write;
write.caching = true;
var buffer = write.cacheBuffer;
var bufferIndex = buffer.push('') - 1;
var componentBuffer = write.componentBuffer;
componentBuffer.push(new Set());
context.renderStates.push({
type: 'ComponentWithCache',
key: key,
buffer: buffer,
bufferIndex: bufferIndex,
componentBuffer: componentBuffer,
});
renderComponentInner(node, isRoot, context);
}
function renderComponentInner(node, isRoot, context) {
var prevActive = context.activeInstance;
// expose userContext on vnode
node.ssrContext = context.userContext;
var child = (context.activeInstance = createComponentInstanceForVnode(node, context.activeInstance));
normalizeRender(child);
var resolve = function () {
var childNode = child._render();
childNode.parent = node;
context.renderStates.push({
type: 'Component',
prevActive: prevActive,
});
renderNode(childNode, isRoot, context);
};
var reject = context.done;
waitForServerPrefetch(child, resolve, reject);
}
function renderAsyncComponent(node, isRoot, context) {
var factory = node.asyncFactory;
var resolve = function (comp) {
if (comp.__esModule && comp.default) {
comp = comp.default;
}
var _a = node.asyncMeta, data = _a.data, children = _a.children, tag = _a.tag;
var nodeContext = node.asyncMeta.context;
var resolvedNode = createComponent(comp, data, nodeContext, children, tag);
if (resolvedNode) {
if (resolvedNode.componentOptions) {
// normal component
renderComponent(resolvedNode, isRoot, context);
}
else if (!Array.isArray(resolvedNode)) {
// single return node from functional component
renderNode(resolvedNode, isRoot, context);
}
else {
// multiple return nodes from functional component
context.renderStates.push({
type: 'Fragment',
children: resolvedNode,
rendered: 0,
total: resolvedNode.length,
});
context.next();
}
}
else {
// invalid component, but this does not throw on the client
// so render empty comment node
context.write("<!---->", context.next);
}
};
if (factory.resolved) {
resolve(factory.resolved);
return;
}
var reject = context.done;
var res;
try {
res = factory(resolve, reject);
}
catch (e) {
reject(e);
}
if (res) {
if (typeof res.then === 'function') {
res.then(resolve, reject).catch(reject);
}
else {
// new syntax in 2.3
var comp = res.component;
if (comp && typeof comp.then === 'function') {
comp.then(resolve, reject).catch(reject);
}
}
}
}
function renderStringNode(el, context) {
var write = context.write, next = context.next;
if (isUndef(el.children) || el.children.length === 0) {
write(el.open + (el.close || ''), next);
}
else {
var children = el.children;
context.renderStates.push({
type: 'Element',
children: children,
rendered: 0,
total: children.length,
endTag: el.close,
});
write(el.open, next);
}
}
function renderElement(el, isRoot, context) {
var write = context.write, next = context.next;
if (isTrue(isRoot)) {
if (!el.data)
{ el.data = {}; }
if (!el.data.attrs)
{ el.data.attrs = {}; }
el.data.attrs[SSR_ATTR] = 'true';
}
if (el.fnOptions) {
registerComponentForCache(el.fnOptions, write);
}
var startTag = renderStartingTag(el, context);
var endTag = "</" + el.tag + ">";
if (context.isUnaryTag(el.tag)) {
write(startTag, next);
}
else if (isUndef(el.children) || el.children.length === 0) {
write(startTag + endTag, next);
}
else {
var children = el.children;
context.renderStates.push({
type: 'Element',
children: children,
rendered: 0,
total: children.length,
endTag: endTag,
});
write(startTag, next);
}
}
function hasAncestorData(node) {
var parentNode = node.parent;
return (isDef(parentNode) && (isDef(parentNode.data) || hasAncestorData(parentNode)));
}
function getVShowDirectiveInfo(node) {
var dir;
var tmp;
while (isDef(node)) {
if (node.data && node.data.directives) {
tmp = node.data.directives.find(function (dir) { return dir.name === 'show'; });
if (tmp) {
dir = tmp;
}
}
node = node.parent;
}
//@ts-expect-error
return dir;
}
function renderStartingTag(node, context) {
var markup = "<" + node.tag;
var directives = context.directives, modules = context.modules;
// construct synthetic data for module processing
// because modules like style also produce code by parent VNode data
if (isUndef(node.data) && hasAncestorData(node)) {
node.data = {};
}
if (isDef(node.data)) {
// check directives
var dirs = node.data.directives;
if (dirs) {
for (var i = 0; i < dirs.length; i++) {
var name_1 = dirs[i].name;
if (name_1 !== 'show') {
var dirRenderer = resolveAsset(context, 'directives', name_1);
if (dirRenderer) {
// directives mutate the node's data
// which then gets rendered by modules
dirRenderer(node, dirs[i]);
}
}
}
}
// v-show directive needs to be merged from parent to child
var vshowDirectiveInfo = getVShowDirectiveInfo(node);
if (vshowDirectiveInfo) {
directives.show(node, vshowDirectiveInfo);
}
// apply other modules
for (var i = 0; i < modules.length; i++) {
var res = modules[i](node);
if (res) {
markup += res;
}
}
}
// attach scoped CSS ID
var scopeId;
var activeInstance = context.activeInstance;
if (isDef(activeInstance) &&
activeInstance !== node.context &&
isDef((scopeId = activeInstance.$options._scopeId))) {
markup += " " + scopeId;
}
if (isDef(node.fnScopeId)) {
markup += " " + node.fnScopeId;
}
else {
while (isDef(node)) {
//@ts-expect-error
if (isDef((scopeId = node.context.$options._scopeId))) {
markup += " " + scopeId;
}
node = node.parent;
}
}
return markup + '>';
}
function createRenderFunction(modules, directives, isUnaryTag, cache) {
return function render(component, write, userContext, done) {
warned = Object.create(null);
var context = new RenderContext({
activeInstance: component,
userContext: userContext,
write: write,
done: done,
renderNode: renderNode,
isUnaryTag: isUnaryTag,
modules: modules,
directives: directives,
cache: cache,
});
installSSRHelpers(component);
normalizeRender(component);
var resolve = function () {
renderNode(component._render(), true, context);
};
waitForServerPrefetch(component, resolve, done);
};
}
var isJS = function (file) { return /\.js(\?[^.]+)?$/.test(file); };
var isCSS = function (file) { return /\.css(\?[^.]+)?$/.test(file); };
function createPromiseCallback() {
var resolve, reject;
var promise = new Promise(function (_resolve, _reject) {
resolve = _resolve;
reject = _reject;
});
var cb = function (err, res) {
if (err)
{ return reject(err); }
resolve(res || '');
};
return { promise: promise, cb: cb };
}
var TemplateStream = /** @class */ (function (_super) {
__extends(TemplateStream, _super);
function TemplateStream(renderer, template, context) {
var _this = _super.call(this) || this;
_this.started = false;
_this.renderer = renderer;
_this.template = template;
_this.context = context || {};
_this.inject = renderer.inject;
return _this;
}
TemplateStream.prototype._transform = function (data, encoding, done) {
if (!this.started) {
this.emit('beforeStart');
this.start();
}
this.push(data);
done();
};
TemplateStream.prototype.start = function () {
this.started = true;
this.push(this.template.head(this.context));
if (this.inject) {
// inline server-rendered head meta information
if (this.context.head) {
this.push(this.context.head);
}
// inline preload/prefetch directives for initial/async chunks
var links = this.renderer.renderResourceHints(this.context);
if (links) {
this.push(links);
}
// CSS files and inline server-rendered CSS collected by vue-style-loader
var styles = this.renderer.renderStyles(this.context);
if (styles) {
this.push(styles);
}
}
this.push(this.template.neck(this.context));
};
TemplateStream.prototype._flush = function (done) {
this.emit('beforeEnd');
if (this.inject) {
// inline initial store state
var state = this.renderer.renderState(this.context);
if (state) {
this.push(state);
}
// embed scripts needed
var scripts = this.renderer.renderScripts(this.context);
if (scripts) {
this.push(scripts);
}
}
this.push(this.template.tail(this.context));
done();
};
return TemplateStream;
}(stream.Transform));
var compile = require('lodash.template');
var compileOptions = {
escape: /{{([^{][\s\S]+?[^}])}}/g,
interpolate: /{{{([\s\S]+?)}}}/g,
};
function parseTemplate(template, contentPlaceholder) {
if (contentPlaceholder === void 0) { contentPlaceholder = '<!--vue-ssr-outlet-->'; }
if (typeof template === 'object') {
return template;
}
var i = template.indexOf('</head>');
var j = template.indexOf(contentPlaceholder);
if (j < 0) {
throw new Error("Content placeholder not found in template.");
}
if (i < 0) {
i = template.indexOf('<body>');
if (i < 0) {
i = j;
}
}
return {
head: compile(template.slice(0, i), compileOptions),
neck: compile(template.slice(i, j), compileOptions),
tail: compile(template.slice(j + contentPlaceholder.length), compileOptions),
};
}
/**
* Creates a mapper that maps components used during a server-side render
* to async chunk files in the client-side build, so that we can inline them
* directly in the rendered HTML to avoid waterfall requests.
*/
function createMapper(clientManifest) {
var map = createMap(clientManifest);
// map server-side moduleIds to client-side files
return function mapper(moduleIds) {
var res = new Set();
for (var i = 0; i < moduleIds.length; i++) {
var mapped = map.get(moduleIds[i]);
if (mapped) {
for (var j = 0; j < mapped.length; j++) {
res.add(mapped[j]);
}
}
}
return Array.from(res);
};
}
function createMap(clientManifest) {
var map = new Map();
Object.keys(clientManifest.modules).forEach(function (id) {
map.set(id, mapIdToFile(id, clientManifest));
});
return map;
}
function mapIdToFile(id, clientManifest) {
var files = [];
var fileIndices = clientManifest.modules[id];
if (fileIndices) {
fileIndices.forEach(function (index) {
var file = clientManifest.all[index];
// only include async files or non-js, non-css assets
if (file &&
(clientManifest.async.indexOf(file) > -1 ||
!/\.(js|css)($|\?)/.test(file))) {
files.push(file);
}
});
}
return files;
}
var path$2 = require('path');
var serialize = require('serialize-javascript');
var TemplateRenderer = /** @class */ (function () {
function TemplateRenderer(options) {
this.options = options;
this.inject = options.inject !== false;
// if no template option is provided, the renderer is created
// as a utility object for rendering assets like preload links and scripts.
var template = options.template;
this.parsedTemplate = template
? typeof template === 'string'
? parseTemplate(template)
: template
: null;
// function used to serialize initial state JSON
this.serialize =
options.serializer ||
(function (state) {
return serialize(state, { isJSON: true });
});
// extra functionality with client manifest
if (options.clientManifest) {
var clientManifest = (this.clientManifest = options.clientManifest);
// ensure publicPath ends with /
this.publicPath =
clientManifest.publicPath === ''
? ''
: clientManifest.publicPath.replace(/([^\/])$/, '$1/');
// preload/prefetch directives
this.preloadFiles = (clientManifest.initial || []).map(normalizeFile);
this.prefetchFiles = (clientManifest.async || []).map(normalizeFile);
// initial async chunk mapping
this.mapFiles = createMapper(clientManifest);
}
}
TemplateRenderer.prototype.bindRenderFns = function (context) {
var renderer = this;
['ResourceHints', 'State', 'Scripts', 'Styles'].forEach(function (type) {
context["render" + type] = renderer["render" + type].bind(renderer, context);
});
// also expose getPreloadFiles, useful for HTTP/2 push
context.getPreloadFiles = renderer.getPreloadFiles.bind(renderer, context);
};
// render synchronously given rendered app content and render context
TemplateRenderer.prototype.render = function (content, context) {
var template = this.parsedTemplate;
if (!template) {
throw new Error('render cannot be called without a template.');
}
context = context || {};
if (typeof template === 'function') {
return template(content, context);
}
if (this.inject) {
return (template.head(context) +
(context.head || '') +
this.renderResourceHints(context) +
this.renderStyles(context) +
template.neck(context) +
content +
this.renderState(context) +
this.renderScripts(context) +
template.tail(context));
}
else {
return (template.head(context) +
template.neck(context) +
content +
template.tail(context));
}
};
TemplateRenderer.prototype.renderStyles = function (context) {
var _this = this;
var initial = this.preloadFiles || [];
var async = this.getUsedAsyncFiles(context) || [];
var cssFiles = initial.concat(async).filter(function (_a) {
var file = _a.file;
return isCSS(file);
});
return (
// render links for css files
(cssFiles.length
? cssFiles
.map(function (_a) {
var file = _a.file;
return "<link rel=\"stylesheet\" href=\"" + _this.publicPath + file + "\">";
})
.join('')
: '') +
// context.styles is a getter exposed by vue-style-loader which contains
// the inline component styles collected during SSR
(context.styles || ''));
};
TemplateRenderer.prototype.renderResourceHints = function (context) {
return this.renderPreloadLinks(context) + this.renderPrefetchLinks(context);
};
TemplateRenderer.prototype.getPreloadFiles = function (context) {
var usedAsyncFiles = this.getUsedAsyncFiles(context);
if (this.preloadFiles || usedAsyncFiles) {
return (this.preloadFiles || []).concat(usedAsyncFiles || []);
}
else {
return [];
}
};
TemplateRenderer.prototype.renderPreloadLinks = function (context) {
var _this = this;
var files = this.getPreloadFiles(context);
var shouldPreload = this.options.shouldPreload;
if (files.length) {
return files
.map(function (_a) {
var file = _a.file, extension = _a.extension, fileWithoutQuery = _a.fileWithoutQuery, asType = _a.asType;
var extra = '';
// by default, we only preload scripts or css
if (!shouldPreload && asType !== 'script' && asType !== 'style') {
return '';
}
// user wants to explicitly control what to preload
if (shouldPreload && !shouldPreload(fileWithoutQuery, asType)) {
return '';
}
if (asType === 'font') {
extra = " type=\"font/" + extension + "\" crossorigin";
}
return "<link rel=\"preload\" href=\"" + _this.publicPath + file + "\"" + (asType !== '' ? " as=\"" + asType + "\"" : '') + extra + ">";
})
.join('');
}
else {
return '';
}
};
TemplateRenderer.prototype.renderPrefetchLinks = function (context) {
var _this = this;
var shouldPrefetch = this.options.shouldPrefetch;
if (this.prefetchFiles) {
var usedAsyncFiles_1 = this.getUsedAsyncFiles(context);
var alreadyRendered_1 = function (file) {
return usedAsyncFiles_1 && usedAsyncFiles_1.some(function (f) { return f.file === file; });
};
return this.prefetchFiles
.map(function (_a) {
var file = _a.file, fileWithoutQuery = _a.fileWithoutQuery, asType = _a.asType;
if (shouldPrefetch && !shouldPrefetch(fileWithoutQuery, asType)) {
return '';
}
if (alreadyRendered_1(file)) {
return '';
}
return "<link rel=\"prefetch\" href=\"" + _this.publicPath + file + "\">";
})
.join('');
}
else {
return '';
}
};
TemplateRenderer.prototype.renderState = function (context, options) {
var _a = options || {}, _b = _a.contextKey, contextKey = _b === void 0 ? 'state' : _b, _c = _a.windowKey, windowKey = _c === void 0 ? '__INITIAL_STATE__' : _c;
var state = this.serialize(context[contextKey]);
var autoRemove = '';
var nonceAttr = context.nonce ? " nonce=\"" + context.nonce + "\"" : '';
return context[contextKey]
? "<script" + nonceAttr + ">window." + windowKey + "=" + state + autoRemove + "</script>"
: '';
};
TemplateRenderer.prototype.renderScripts = function (context) {
var _this = this;
if (this.clientManifest) {
var initial = this.preloadFiles.filter(function (_a) {
var file = _a.file;
return isJS(file);
});
var async = (this.getUsedAsyncFiles(context) || []).filter(function (_a) {
var file = _a.file;
return isJS(file);
});
var needed = [initial[0]].concat(async, initial.slice(1));
return needed
.map(function (_a) {
var file = _a.file;
return "<script src=\"" + _this.publicPath + file + "\" defer></script>";
})
.join('');
}
else {
return '';
}
};
TemplateRenderer.prototype.getUsedAsyncFiles = function (context) {
if (!context._mappedFiles &&
context._registeredComponents &&
this.mapFiles) {
var registered = Array.from(context._registeredComponents);
context._mappedFiles = this.mapFiles(registered).map(normalizeFile);
}
return context._mappedFiles;
};
// create a transform stream
TemplateRenderer.prototype.createStream = function (context) {
if (!this.parsedTemplate) {
throw new Error('createStream cannot be called without a template.');
}
//@ts-expect-error
return new TemplateStream(this, this.parsedTemplate, context || {});
};
return TemplateRenderer;
}());
function normalizeFile(file) {
var withoutQuery = file.replace(/\?.*/, '');
var extension = path$2.extname(withoutQuery).slice(1);
return {
file: file,
extension: extension,
fileWithoutQuery: withoutQuery,
asType: getPreloadType(extension),
};
}
function getPreloadType(ext) {
if (ext === 'js') {
return 'script';
}
else if (ext === 'css') {
return 'style';
}
else if (/jpe?g|png|svg|gif|webp|ico/.test(ext)) {
return 'image';
}
else if (/woff2?|ttf|otf|eot/.test(ext)) {
return 'font';
}
else {
// not exhausting all possibilities here, but above covers common cases
return '';
}
}
function createRenderer$1(_a) {
var _b = _a === void 0 ? {} : _a, _c = _b.modules, modules = _c === void 0 ? [] : _c, _d = _b.directives, directives = _d === void 0 ? {} : _d, _e = _b.isUnaryTag, isUnaryTag = _e === void 0 ? function () { return false; } : _e, template = _b.template, inject = _b.inject, cache = _b.cache, shouldPreload = _b.shouldPreload, shouldPrefetch = _b.shouldPrefetch, clientManifest = _b.clientManifest, serializer = _b.serializer;
var render = createRenderFunction(modules, directives, isUnaryTag, cache);
var templateRenderer = new TemplateRenderer({
template: template,
inject: inject,
// @ts-expect-error
shouldPreload: shouldPreload,
// @ts-expect-error
shouldPrefetch: shouldPrefetch,
clientManifest: clientManifest,
serializer: serializer,
});
return {
renderToString: function (component, context, cb) {
var _a;
if (typeof context === 'function') {
cb = context;
context = {};
}
if (context) {
templateRenderer.bindRenderFns(context);
}
// no callback, return Promise
var promise;
if (!cb) {
(_a = createPromiseCallback(), promise = _a.promise, cb = _a.cb);
}
var result = '';
var write = createWriteFunction(function (text) {
result += text;
return false;
}, cb);
try {
// @ts-expect-error TODO improve
render(component, write, context, function (err) {
if (err) {
return cb(err);
}
if (context && context.rendered) {
context.rendered(context);
}
if (template) {
try {
var res = templateRenderer.render(result, context);
if (typeof res !== 'string') {
// function template returning promise
res.then(function (html) { return cb(null, html); }).catch(cb);
}
else {
cb(null, res);
}
}
catch (e) {
cb(e);
}
}
else {
cb(null, result);
}
});
}
catch (e) {
cb(e);
}
return promise;
},
renderToStream: function (component, context) {
if (context) {
templateRenderer.bindRenderFns(context);
}
var renderStream = new RenderStream(function (write, done) {
// @ts-expect-error
render(component, write, context, done);
});
if (!template) {
// @ts-expect-error
if (context && context.rendered) {
// @ts-expect-error
var rendered_1 = context.rendered;
renderStream.once('beforeEnd', function () {
rendered_1(context);
});
}
return renderStream;
}
else if (typeof template === 'function') {
throw new Error("function template is only supported in renderToString.");
}
else {
var templateStream_1 = templateRenderer.createStream(context);
renderStream.on('error', function (err) {
templateStream_1.emit('error', err);
});
renderStream.pipe(templateStream_1);
//@ts-expect-error
if (context && context.rendered) {
//@ts-expect-error
var rendered_2 = context.rendered;
renderStream.once('beforeEnd', function () {
rendered_2(context);
});
}
return templateStream_1;
}
},
};
}
var vm = require('vm');
var path$1 = require('path');
var resolve = require('resolve');
var NativeModule = require('module');
function createSandbox(context) {
var sandbox = {
Buffer: Buffer,
console: console,
process: process,
setTimeout: setTimeout,
setInterval: setInterval,
setImmediate: setImmediate,
clearTimeout: clearTimeout,
clearInterval: clearInterval,
clearImmediate: clearImmediate,
__VUE_SSR_CONTEXT__: context,
};
// @ts-expect-error
sandbox.global = sandbox;
return sandbox;
}
function compileModule(files, basedir, runInNewContext) {
var compiledScripts = {};
var resolvedModules = {};
function getCompiledScript(filename) {
if (compiledScripts[filename]) {
return compiledScripts[filename];
}
var code = files[filename];
var wrapper = NativeModule.wrap(code);
var script = new vm.Script(wrapper, {
filename: filename,
displayErrors: true,
});
compiledScripts[filename] = script;
return script;
}
function evaluateModule(filename, sandbox, evaluatedFiles) {
if (evaluatedFiles === void 0) { evaluatedFiles = {}; }
if (evaluatedFiles[filename]) {
return evaluatedFiles[filename];
}
var script = getCompiledScript(filename);
var compiledWrapper = runInNewContext === false
? script.runInThisContext()
: script.runInNewContext(sandbox);
var m = { exports: {} };
var r = function (file) {
file = path$1.posix.join('.', file);
if (files[file]) {
return evaluateModule(file, sandbox, evaluatedFiles);
}
else if (basedir) {
return require(resolvedModules[file] ||
(resolvedModules[file] = resolve.sync(file, { basedir: basedir })));
}
else {
return require(file);
}
};
compiledWrapper.call(m.exports, m.exports, r, m);
var res = Object.prototype.hasOwnProperty.call(m.exports, 'default')
? // @ts-expect-error
m.exports.default
: m.exports;
evaluatedFiles[filename] = res;
return res;
}
return evaluateModule;
}
function deepClone(val) {
if (isPlainObject(val)) {
var res = {};
for (var key in val) {
res[key] = deepClone(val[key]);
}
return res;
}
else if (Array.isArray(val)) {
return val.slice();
}
else {
return val;
}
}
function createBundleRunner(entry, files, basedir, runInNewContext) {
var evaluate = compileModule(files, basedir, runInNewContext);
if (runInNewContext !== false && runInNewContext !== 'once') {
// new context mode: creates a fresh context and re-evaluate the bundle
// on each render. Ensures entire application state is fresh for each
// render, but incurs extra evaluation cost.
return function (userContext) {
if (userContext === void 0) { userContext = {}; }
return new Promise(function (resolve) {
// @ts-expect-error
userContext._registeredComponents = new Set();
var res = evaluate(entry, createSandbox(userContext));
resolve(typeof res === 'function' ? res(userContext) : res);
});
};
}
else {
// direct mode: instead of re-evaluating the whole bundle on
// each render, it simply calls the exported function. This avoids the
// module evaluation costs but requires the source code to be structured
// slightly differently.
var runner_1; // lazy creation so that errors can be caught by user
var initialContext_1;
return function (userContext) {
if (userContext === void 0) { userContext = {}; }
return new Promise(function (resolve) {
if (!runner_1) {
var sandbox = runInNewContext === 'once' ? createSandbox() : global;
// the initial context is only used for collecting possible non-component
// styles injected by vue-style-loader.
// @ts-expect-error
initialContext_1 = sandbox.__VUE_SSR_CONTEXT__ = {};
runner_1 = evaluate(entry, sandbox);
// On subsequent renders, __VUE_SSR_CONTEXT__ will not be available
// to prevent cross-request pollution.
// @ts-expect-error
delete sandbox.__VUE_SSR_CONTEXT__;
if (typeof runner_1 !== 'function') {
throw new Error('bundle export should be a function when using ' +
'{ runInNewContext: false }.');
}
}
// @ts-expect-error
userContext._registeredComponents = new Set();
// vue-style-loader styles imported outside of component lifecycle hooks
if (initialContext_1._styles) {
// @ts-expect-error
userContext._styles = deepClone(initialContext_1._styles);
// #6353 ensure "styles" is exposed even if no styles are injected
// in component lifecycles.
// the renderStyles fn is exposed by vue-style-loader >= 3.0.3
var renderStyles_1 = initialContext_1._renderStyles;
if (renderStyles_1) {
Object.defineProperty(userContext, 'styles', {
enumerable: true,
get: function () {
// @ts-expect-error
return renderStyles_1(userContext._styles);
},
});
}
}
resolve(runner_1(userContext));
});
};
}
}
var SourceMapConsumer = require('source-map').SourceMapConsumer;
var filenameRE = /\(([^)]+\.js):(\d+):(\d+)\)$/;
function createSourceMapConsumers(rawMaps) {
var maps = {};
Object.keys(rawMaps).forEach(function (file) {
maps[file] = new SourceMapConsumer(rawMaps[file]);
});
return maps;
}
function rewriteErrorTrace(e, mapConsumers) {
if (e && typeof e.stack === 'string') {
e.stack = e.stack
.split('\n')
.map(function (line) {
return rewriteTraceLine(line, mapConsumers);
})
.join('\n');
}
}
function rewriteTraceLine(trace, mapConsumers) {
var m = trace.match(filenameRE);
var map = m && mapConsumers[m[1]];
if (m != null && map) {
var originalPosition = map.originalPositionFor({
line: Number(m[2]),
column: Number(m[3]),
});
if (originalPosition.source != null) {
var source = originalPosition.source, line = originalPosition.line, column = originalPosition.column;
var mappedPosition = "(" + source.replace(/^webpack:\/\/\//, '') + ":" + String(line) + ":" + String(column) + ")";
return trace.replace(filenameRE, mappedPosition);
}
else {
return trace;
}
}
else {
return trace;
}
}
var fs = require('fs');
var path = require('path');
var PassThrough = require('stream').PassThrough;
var INVALID_MSG = 'Invalid server-rendering bundle format. Should be a string ' +
'or a bundle Object of type:\n\n' +
"{\n entry: string;\n files: { [filename: string]: string; };\n maps: { [filename: string]: string; };\n}\n";
function createBundleRendererCreator(createRenderer) {
return function createBundleRenderer(bundle, rendererOptions) {
if (rendererOptions === void 0) { rendererOptions = {}; }
var files, entry, maps;
var basedir = rendererOptions.basedir;
// load bundle if given filepath
if (typeof bundle === 'string' &&
/\.js(on)?$/.test(bundle) &&
path.isAbsolute(bundle)) {
if (fs.existsSync(bundle)) {
var isJSON = /\.json$/.test(bundle);
basedir = basedir || path.dirname(bundle);
bundle = fs.readFileSync(bundle, 'utf-8');
if (isJSON) {
try {
// @ts-expect-error
bundle = JSON.parse(bundle);
}
catch (e) {
throw new Error("Invalid JSON bundle file: " + bundle);
}
}
}
else {
throw new Error("Cannot locate bundle file: " + bundle);
}
}
if (typeof bundle === 'object') {
entry = bundle.entry;
files = bundle.files;
basedir = basedir || bundle.basedir;
maps = createSourceMapConsumers(bundle.maps);
if (typeof entry !== 'string' || typeof files !== 'object') {
throw new Error(INVALID_MSG);
}
}
else if (typeof bundle === 'string') {
entry = '__vue_ssr_bundle__';
files = { __vue_ssr_bundle__: bundle };
maps = {};
}
else {
throw new Error(INVALID_MSG);
}
var renderer = createRenderer(rendererOptions);
var run = createBundleRunner(entry, files, basedir, rendererOptions.runInNewContext);
return {
renderToString: function (context, cb) {
var _a;
if (typeof context === 'function') {
cb = context;
context = {};
}
var promise;
if (!cb) {
(_a = createPromiseCallback(), promise = _a.promise, cb = _a.cb);
}
run(context)
.catch(function (err) {
rewriteErrorTrace(err, maps);
cb(err);
})
.then(function (app) {
if (app) {
//@ts-expect-error
renderer.renderToString(app, context, function (err, res) {
rewriteErrorTrace(err, maps);
cb(err, res);
});
}
});
return promise;
},
renderToStream: function (context) {
var res = new PassThrough();
run(context)
.catch(function (err) {
rewriteErrorTrace(err, maps);
// avoid emitting synchronously before user can
// attach error listener
process.nextTick(function () {
res.emit('error', err);
});
})
.then(function (app) {
if (app) {
//@ts-expect-error
var renderStream = renderer.renderToStream(app, context);
renderStream.on('error', function (err) {
rewriteErrorTrace(err, maps);
res.emit('error', err);
});
// relay HTMLStream special events
if (rendererOptions && rendererOptions.template) {
renderStream.on('beforeStart', function () {
res.emit('beforeStart');
});
renderStream.on('beforeEnd', function () {
res.emit('beforeEnd');
});
}
renderStream.pipe(res);
}
});
return res;
},
};
};
}
process.env.VUE_ENV = 'server';
function createRenderer(options) {
if (options === void 0) { options = {}; }
return createRenderer$1(extend(extend({}, options), {
isUnaryTag: isUnaryTag,
canBeLeftOpenTag: canBeLeftOpenTag,
modules: modules$1,
// user can provide server-side implementations for custom directives
// when creating the renderer.
directives: extend(baseDirectives$1, options.directives),
}));
}
var createBundleRenderer = createBundleRendererCreator(createRenderer);
exports.createBundleRenderer = createBundleRenderer;
exports.createRenderer = createRenderer;