"use strict" Object.defineProperty(exports, "__esModule", { value: true }) function _interopDefault(ex) { return ex && typeof ex === "object" && "default" in ex ? ex["default"] : ex } var deindent = _interopDefault(require("de-indent")) var he = _interopDefault(require("he")) var babel = _interopDefault(require("@babel/core"))//fixed by xxxxxx var prettier = _interopDefault(require("prettier")) var t = require("@babel/types")//fixed by xxxxxx var generate = _interopDefault(require("@babel/generator"))//fixed by xxxxxx var template = _interopDefault(require("@babel/template"))//fixed by xxxxxx //fixed by xxxxxx function makeRandom(len) { return 'E'; // var text = ""; // var possible = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789"; // // for (var i = 0; i < len; i++) // text += possible.charAt(Math.floor(Math.random() * possible.length)); // // return text; } /* */ // these helpers produces better vm code in JS engines due to their // explicitness and function inlining /** * Check if value is primitive */ /** * 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" } var _toString = Object.prototype.toString /** * 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(val) return n >= 0 && Math.floor(n) === n && isFinite(val) } /** * Convert a value to a string that is actually rendered. */ /** * Convert a input value to a number for persistence. * If the conversion fails, return original string. */ /** * 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 a attribute is a reserved attribute. */ var isReservedAttribute = makeMap("key,ref,slot,is") /** * Remove an item from an array */ function remove(arr, item) { if (arr.length) { var index = arr.indexOf(item) if (index > -1) { return arr.splice(index, 1) } } } /** * Check whether the 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. */ /** * Hyphenate a camelCase string. */ var hyphenateRE = /([^-])([A-Z])/g var hyphenate = cached(function(str) { return str .replace(hyphenateRE, "$1-$2") .replace(hyphenateRE, "$1-$2") .toLowerCase() }) /** * Simple bind, faster than native */ /** * Convert an Array-like object to a real Array. */ /** * 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. */ /** * 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(a, b, c) {} /** * Always return false. */ var no = function(a, b, c) { return false } /** * Return same value */ var identity = function(_) { return _ } /** * Generate a static keys string 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? */ /** * Ensure a function is called only once. */ /* */ 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" ) /** * Not type-checking this file because it's mostly vendor code. */ /*! * HTML Parser By John Resig (ejohn.org) * Modified by Juriy "kangax" Zaytsev * Original code by Erik Arvidsson, Mozilla Public License * http://erik.eae.net/simplehtmlparser/simplehtmlparser.js */ // Regular Expressions for parsing tags and attributes var singleAttrIdentifier = /([^\s"'<>/=]+)/ var singleAttrAssign = /(?:=)/ var singleAttrValues = [ // attr value double quotes /"([^"]*)"+/.source, // attr value, single quotes /'([^']*)'+/.source, // attr value, no quotes /([^\s"'=<>`]+)/.source ] var attribute = new RegExp( "^\\s*" + singleAttrIdentifier.source + "(?:\\s*(" + singleAttrAssign.source + ")" + "\\s*(?:" + singleAttrValues.join("|") + "))?" ) // could use https://www.w3.org/TR/1999/REC-xml-names-19990114/#NT-QName // but for Vue templates we can enforce a simple charset var ncname = "[a-zA-Z_][\\w\\-\\.]*" var qnameCapture = "((?:" + ncname + "\\:)?" + ncname + ")" var startTagOpen = new RegExp("^<" + qnameCapture) var startTagClose = /^\s*(\/?)>/ var endTag = new RegExp("^<\\/" + qnameCapture + "[^>]*>") var doctype = /^]+>/i var comment = /^") if (commentEnd >= 0) { if (options.shouldKeepComment) { options.comment(html.substring(4, commentEnd)) } advance(commentEnd + 3) 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) continue } } // Doctype: var doctypeMatch = html.match(doctype) if (doctypeMatch) { advance(doctypeMatch[0].length) continue } // End tag: var endTagMatch = html.match(endTag) if (endTagMatch) { var curIndex = index advance(endTagMatch[0].length) parseEndTag(endTagMatch[1], curIndex, index) continue } // Start tag: var startTagMatch = parseStartTag() if (startTagMatch) { handleStartTag(startTagMatch) 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) advance(textEnd) } if (textEnd < 0) { text = html html = "" } if (options.chars && text) { options.chars(text) } } else { var endTagLength = 0 var stackedTag = lastTag.toLowerCase() var reStackedTag = reCache[stackedTag] || (reCache[stackedTag] = new RegExp("([\\s\\S]*?)(]*>)", "i")) var rest$1 = html.replace(reStackedTag, function(all, text, endTag) { endTagLength = endTag.length if (!isPlainTextElement(stackedTag) && stackedTag !== "noscript") { text = text .replace(//g, "$1") .replace(//g, "$1") } if (shouldIgnoreFirstNewline(stackedTag, text)) { text = text.slice(1) } if (options.chars) { options.chars(text) } return "" }) index += html.length - rest$1.length html = rest$1 parseEndTag(stackedTag, index - endTagLength, index) } if (html === last) { options.chars && options.chars(html) if (process.env.NODE_ENV !== "production" && !stack.length && options.warn) { options.warn('Mal-formatted tag at end of template: "' + html + '"') } 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, attr while (!(end = html.match(startTagClose)) && (attr = html.match(attribute))) { advance(attr[0].length) 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$$1(tagName) && lastTag === tagName) { parseEndTag(tagName) } } var unary = isUnaryTag$$1(tagName) || !!unarySlash var l = match.attrs.length var attrs = new Array(l) for (var i = 0; i < l; i++) { var args = match.attrs[i] // hackish work around FF bug https://bugzilla.mozilla.org/show_bug.cgi?id=369778 if (IS_REGEX_CAPTURING_BROKEN && args[0].indexOf('""') === -1) { if (args[3] === "") { delete args[3] } if (args[4] === "") { delete args[4] } if (args[5] === "") { delete args[5] } } var value = args[3] || args[4] || args[5] || "" attrs[i] = { name: args[1], value: decodeAttr(value, options.shouldDecodeNewlines) } } if (!unary) { stack.push({ tag: tagName, lowerCasedTag: tagName.toLowerCase(), attrs: attrs }) 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 } if (tagName) { lowerCasedTagName = tagName.toLowerCase() } // Find the closest opened tag of the same type if (tagName) { 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 ( process.env.NODE_ENV !== "production" && (i > pos || !tagName) && options.warn ) { options.warn("tag <" + stack[i].tag + "> has no matching end tag.") } 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) } } } } /* */ var splitRE = /\r?\n/g var replaceRE = /./g var isSpecialTag = makeMap("script,style,template", true) /** * Parse a single-file component (*.vue) file into an SFC Descriptor Object. */ function parseComponent(content, options) { if (options === void 0) options = {} var sfc = { template: null, script: null, styles: [], customBlocks: [] } var depth = 0 var currentBlock = null function start(tag, attrs, unary, start, end) { if (depth === 0) { currentBlock = { type: tag, content: "", start: end, attrs: attrs.reduce(function(cumulated, ref) { var name = ref.name var value = ref.value cumulated[name] = value || true return cumulated }, Object.create(null)) } if (isSpecialTag(tag)) { checkAttrs(currentBlock, attrs) if (tag === "style") { sfc.styles.push(currentBlock) } else { sfc[tag] = currentBlock } } else { // custom blocks sfc.customBlocks.push(currentBlock) } } if (!unary) { depth++ } } function checkAttrs(block, attrs) { for (var i = 0; i < attrs.length; i++) { var attr = attrs[i] if (attr.name === "lang") { block.lang = attr.value } if (attr.name === "scoped") { block.scoped = true } if (attr.name === "module") { block.module = attr.value || true } if (attr.name === "src") { block.src = attr.value } } } function end(tag, start, end) { if (depth === 1 && currentBlock) { currentBlock.end = start var text = deindent(content.slice(currentBlock.start, currentBlock.end)) // pad content so that linters and pre-processors can output correct // line numbers in errors and warnings if (currentBlock.type !== "template" && options.pad) { text = padContent(currentBlock, options.pad) + text } currentBlock.content = text currentBlock = null } depth-- } function padContent(block, pad) { if (pad === "space") { return content.slice(0, block.start).replace(replaceRE, " ") } else { var offset = content.slice(0, block.start).split(splitRE).length var padChar = block.type === "script" && !block.lang //fixed by xxxxxx script 节点使用//注释后会影响 babel 的retainLines ? "\n" : "\n" return Array(offset).join(padChar) } } parseHTML(content, { start: start, end: end }) return sfc } /* globals renderer */ var isPreTag = function(tag) { return tag === "pre" } var isReservedTag = makeMap( "template,script,style,element,content,slot,link,meta,svg,view," + "a,div,img,image,text,span,richtext,input,switch,textarea,spinner,select," + "slider,slider-neighbor,indicator,trisition,trisition-group,canvas," + "list,cell,header,loading,loading-indicator,refresh,scrollable,scroller," + "video,web,embed,tabbar,tabheader,datepicker,timepicker,marquee,countdown", true ) // these are reserved for web because they are directly compiled away // during template compilation var isReservedAttr = makeMap("style,class") // Elements that you can, intentionally, leave open (and which close themselves) // more flexable than web var canBeLeftOpenTag$1 = makeMap( "web,spinner,switch,video,textarea,canvas," + "indicator,marquee,countdown", true ) var isUnaryTag$1 = makeMap("embed,img,image,input,link,meta", true) function mustUseProp() { /* console.log('mustUseProp') */ } function getTagNamespace() { /* console.log('getTagNamespace') */ } // 用于小程序的 event type 到 web 的 event /* */ 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 = 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 = filter.slice(0, i) var args = filter.slice(i + 1) return '_f("' + name + '")(' + exp + "," + args } } /* */ var defaultTagRE = /\{\{((?:.|\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) { var tagRE = delimiters ? buildRegex(delimiters) : defaultTagRE if (!tagRE.test(text)) { return } var tokens = [] var lastIndex = (tagRE.lastIndex = 0) var match, index while ((match = tagRE.exec(text))) { index = match.index // push text token if (index > lastIndex) { tokens.push(JSON.stringify(text.slice(lastIndex, index))) } // tag token var exp = parseFilters(match[1].trim()) tokens.push("_s(" + exp + ")") lastIndex = index + match[0].length } if (lastIndex < text.length) { tokens.push(JSON.stringify(text.slice(lastIndex))) } return tokens.join("+") } /* */ function baseWarn(msg) { console.error("[Vue compiler]: " + msg) } function pluckModuleFunction(modules, key) { return modules ? modules .map(function(m) { return m[key] }) .filter(function(_) { return _ }) : [] } function addProp(el, name, value) { ;(el.props || (el.props = [])).push({ name: name, value: value }) } function addAttr(el, name, value) { ;(el.attrs || (el.attrs = [])).push({ name: name, value: value }) } function addDirective(el, name, rawName, value, arg, modifiers) { ;(el.directives || (el.directives = [])).push({ name: name, rawName: rawName, value: value, arg: arg, modifiers: modifiers }) } function addHandler(el, name, value, modifiers, important, warn) { // warn prevent and passive modifier /* istanbul ignore if */ if ( process.env.NODE_ENV !== "production" && warn && modifiers && modifiers.prevent && modifiers.passive ) { warn( "passive and prevent can't be used together. " + "Passive handler can't prevent default event." ) } // check capture modifier if (modifiers && modifiers.capture) { delete modifiers.capture name = "!" + name // mark the event as captured } if (modifiers && modifiers.once) { delete modifiers.once name = "~" + name // mark the event as once } /* istanbul ignore if */ if (modifiers && modifiers.passive) { delete modifiers.passive name = "&" + name // mark the event as passive } var events if (modifiers && modifiers.native) { delete modifiers.native events = el.nativeEvents || (el.nativeEvents = {}) } else { events = el.events || (el.events = {}) } var newHandler = { value: value, 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 } } 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) } } } function getAndRemoveAttr(el, name) { 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 } } } return val } /* */ function transformNode(el, options) { var warn = options.warn || baseWarn var staticClass = getAndRemoveAttr(el, "class") if (process.env.NODE_ENV !== "production" && staticClass) { var expression = parseText(staticClass, options.delimiters) if (expression) { warn( 'class="' + staticClass + '": ' + "Interpolation inside attributes has been removed. " + "Use v-bind or the colon shorthand instead. For example, " + 'instead of
, use
.' ) } } if (staticClass) { el.staticClass = JSON.stringify(staticClass) } var classBinding = getBindingAttr(el, "class", false /* getStatic */) if (classBinding) { el.classBinding = classBinding } } function genData(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, genData: genData } /* */ 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 }) // normalize possible array / string values into Object /** * parent component style should be after child's * so that parent component's style could override it */ /* */ function transformNode$1(el, options) { var warn = options.warn || baseWarn var staticStyle = getAndRemoveAttr(el, "style") if (staticStyle) { /* istanbul ignore if */ if (process.env.NODE_ENV !== "production") { var expression = parseText(staticStyle, options.delimiters) if (expression) { warn( 'style="' + staticStyle + '": ' + "Interpolation inside attributes has been removed. " + "Use v-bind or the colon shorthand instead. For example, " + 'instead of
, use
.' ) } } 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$1, genData: genData$1 } var modules = [klass, style] var ASSET_TYPES = ["component", "directive", "filter"] var LIFECYCLE_HOOKS = [ "beforeCreate", "created", "beforeMount", "mounted", "beforeUpdate", "updated", "beforeDestroy", "destroyed", "activated", "deactivated", "onLaunch", "onLoad", "onShow", "onReady", "onHide", "onUnload", "onPullDownRefresh", "onReachBottom", "onShareAppMessage", "onPageScroll", "onTabItemTap", "attached", "ready", "moved", "detached" ] /* */ var config = { /** * Option merge strategies (used in core/util/options) */ optionMergeStrategies: Object.create(null), /** * Whether to suppress warnings. */ silent: false, /** * Show production mode tip message on boot? */ productionTip: process.env.NODE_ENV !== "production", /** * Whether to enable devtools */ devtools: process.env.NODE_ENV !== "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 */ 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, /** * 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, /** * Exposed for legacy reasons */ _lifecycleHooks: LIFECYCLE_HOOKS } /* */ /** * Cross-platform code generation for component v-model */ function genComponentModel(el, value, modifiers) { var ref = modifiers || {} var number = ref.number var trim = ref.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: '"' + value + '"', callback: "function (" + baseValueExpression + ") {" + assignment + "}" } } /** * Cross-platform codegen helper for generating v-model value assignment code. */ function genAssignmentCode(value, assignment) { var modelRs = parseModel(value) if (modelRs.idx === null) { return value + "=" + assignment } else { return "$set(" + modelRs.exp + ", " + modelRs.idx + ", " + assignment + ")" } } /** * parse directive model to do the array update transform. a[idx] = val => $$a.splice($$idx, 1, val) * * for loop possible cases: * * - test * - test[idx] * - test[test1[idx]] * - test["a"][idx] * - xxx.test[a[a].test1[idx]] * - test.xxx.a["asa"][test1[idx]] * */ var len var str var chr var index var expressionPos var expressionEndPos function parseModel(val) { str = val len = str.length index = expressionPos = expressionEndPos = 0 if (val.indexOf("[") < 0 || val.lastIndexOf("]") < len - 1) { return { exp: val, idx: null } } while (!eof()) { chr = next() /* istanbul ignore if */ if (isStringStart(chr)) { parseString(chr) } else if (chr === 0x5b) { parseBracket(chr) } } return { exp: val.substring(0, expressionPos), idx: val.substring(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 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" var CHECKBOX_RADIO_TOKEN = "__c" function model(el, dir, _warn) { warn = _warn var value = dir.value var modifiers = dir.modifiers var tag = el.tag var type = el.attrsMap.type if (process.env.NODE_ENV !== "production") { var dynamicType = el.attrsMap["v-bind:type"] || el.attrsMap[":type"] if (tag === "input" && dynamicType) { warn( ':\n' + "v-model does not support dynamic input types. Use v-if branches instead." ) } // 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." ) } } 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 if (!config.isReservedTag(tag)) { genComponentModel(el, value, modifiers) // component v-model doesn't need extra runtime return false } else if (process.env.NODE_ENV !== "production") { warn( "<" + el.tag + ' v-model="' + value + '">: ' + "v-model is not supported on this element type. " + "If you are working with contenteditable, it's recommended to " + "wrap a library dedicated for that purpose inside a custom component." ) } // 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, CHECKBOX_RADIO_TOKEN, "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($$c){$$i<0&&(" + value + "=$$a.concat($$v))}" + "else{$$i>-1&&(" + 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, CHECKBOX_RADIO_TOKEN, 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 var ref = modifiers || {} var lazy = ref.lazy var number = ref.number var trim = ref.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 + ")") } } /* */ function html(el, dir) { if (dir.value) { addProp(el, "innerHTML", "_s(" + dir.value + ")") } } var directives = { model: model, text: text, html: html } /* */ var isUnaryTag$2 = 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$2 = 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$1 = 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" ) /* */ var baseOptions = { expectHTML: true, modules: modules, directives: directives, isPreTag: isPreTag, isUnaryTag: isUnaryTag$2, mustUseProp: mustUseProp, canBeLeftOpenTag: canBeLeftOpenTag$2, isReservedTag: isReservedTag, getTagNamespace: getTagNamespace, staticKeys: genStaticKeys(modules) } /* */ var warn$2 = noop var tip = noop var formatComponentName = null // work around flow check if (process.env.NODE_ENV !== "production") { var hasConsole = typeof console !== "undefined" var classifyRE = /(?:^|[-_])(\w)/g var classify = function(str) { return str .replace(classifyRE, function(c) { return c.toUpperCase() }) .replace(/[-_]/g, "") } warn$2 = function(msg, vm) { var trace = vm ? generateComponentTrace(vm) : "" if (config.warnHandler) { config.warnHandler.call(null, msg, vm, trace) } else if (hasConsole && !config.silent) { console.error("[Vue warn]: " + msg + trace) } } tip = function(msg, vm) { if (hasConsole && !config.silent) { console.warn("[Vue tip]: " + msg + (vm ? generateComponentTrace(vm) : "")) } } formatComponentName = function(vm, includeFile) { if (vm.$root === vm) { return "" } var name = typeof vm === "string" ? vm : typeof vm === "function" && vm.options ? vm.options.name : vm._isVue ? vm.$options.name || vm.$options._componentTag : vm.name var file = vm._isVue && vm.$options.__file if (!name && file) { var match = file.match(/([^/\\]+)\.vue$/) name = match && match[1] } return ( (name ? "<" + classify(name) + ">" : "") + (file && includeFile !== false ? " at " + file : "") ) } var repeat = function(str, n) { var res = "" while (n) { if (n % 2 === 1) { res += str } if (n > 1) { str += str } n >>= 1 } return res } var generateComponentTrace = function(vm) { 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(" ", 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) + ")" } } } /* */ function handleError(err, vm, info) { if (config.errorHandler) { config.errorHandler.call(null, err, vm, info) } else { if (process.env.NODE_ENV !== "production") { warn$2("Error in " + info + ': "' + err.toString() + '"', vm) } /* istanbul ignore else */ if (inBrowser && typeof console !== "undefined") { //fixed by xxxxxx //console.error(err); } else { throw err } } } /* */ // can we use __proto__? var hasProto = "__proto__" in {} // Browser environment sniffing var inBrowser = typeof window !== "undefined" var UA = ["mpvue-runtime"].join() var isIE = UA && /msie|trident/.test(UA) var isIE9 = UA && UA.indexOf("msie 9.0") > 0 var isEdge = UA && UA.indexOf("edge/") > 0 var isAndroid = UA && UA.indexOf("android") > 0 var isIOS = UA && /iphone|ipad|ipod|ios/.test(UA) var isChrome = UA && /chrome\/\d+/.test(UA) && !isEdge // Firefix has a "watch" function on Object.prototype... var nativeWatch = {}.watch var supportsPassive = false if (inBrowser) { try { var opts = {} Object.defineProperty(opts, "passive", { get: function get() { /* istanbul ignore next */ supportsPassive = true } }) // https://github.com/facebook/flow/issues/285 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 && typeof global !== "undefined") { // detect presence of vue-server-renderer and avoid // Webpack shimming the process _isServer = global["process"].env.VUE_ENV === "server" } else { _isServer = false } } return _isServer } // detect devtools /* 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) /** * Defer a task to execute it asynchronously. */ var nextTick = (function() { var callbacks = [] var pending = false var timerFunc function nextTickHandler() { pending = false 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 if */ if (typeof Promise !== "undefined" && isNative(Promise)) { var p = Promise.resolve() var logError = function(err) { console.error(err) } timerFunc = function() { p.then(nextTickHandler).catch(logError) // in problematic UIWebViews, Promise.then doesn't completely break, but // it can get stuck in a weird state where callbacks are pushed into the // microtask queue but the queue isn't being flushed, until the browser // needs to do some other work, e.g. handle a timer. Therefore we can // "force" the microtask queue to be flushed by adding an empty timer. if (isIOS) { setTimeout(noop) } } // } else if (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 IE11, iOS7, Android 4.4 // var counter = 1 // var observer = new MutationObserver(nextTickHandler) // var textNode = document.createTextNode(String(counter)) // observer.observe(textNode, { // characterData: true // }) // timerFunc = () => { // counter = (counter + 1) % 2 // textNode.data = String(counter) // } } else { // fallback to setTimeout /* istanbul ignore next */ timerFunc = function() { setTimeout(nextTickHandler, 0) } } return function queueNextTick(cb, ctx) { var _resolve callbacks.push(function() { if (cb) { try { cb.call(ctx) } catch (e) { handleError(e, ctx, "nextTick") } } else if (_resolve) { _resolve(ctx) } }) if (!pending) { pending = true timerFunc() } if (!cb && typeof Promise !== "undefined") { return new Promise(function(resolve, reject) { _resolve = resolve }) } } })() var _Set /* 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 = (function() { function Set() { this.set = Object.create(null) } Set.prototype.has = function has(key) { return this.set[key] === true } Set.prototype.add = function add(key) { this.set[key] = true } Set.prototype.clear = function clear() { this.set = Object.create(null) } return Set })() } /* */ var onRE = /^@|^v-on:/ var dirRE = /^v-|^@|^:/ var forAliasRE = /(.*?)\s+(?:in|of)\s+(.*)/ // fix: 解决括号内无,和iterator时匹配错误的问题 fix by gsq var forIteratorRE = /\((\{[^}]*\}|[^,]*),?([^,]*)(?:,([^,]*))?\)/ var argRE = /:(.*)$/ var bindRE = /^:|^v-bind:/ var modifierRE = /\.[^.]+/g var decodeHTMLCached = cached(he.decode) // configurable state var warn$1 var delimiters var transforms var preTransforms var postTransforms var platformIsPreTag var platformMustUseProp var platformGetTagNamespace /** * Convert HTML string to AST. */ function parse(template$$1, options) { warn$1 = options.warn || baseWarn platformIsPreTag = options.isPreTag || no platformMustUseProp = options.mustUseProp || no platformGetTagNamespace = options.getTagNamespace || no 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 root var currentParent var inVPre = false var inPre = false var warned = false function warnOnce(msg) { if (!warned) { warned = true warn$1(msg) } } function endPre(element) { // check pre state if (element.pre) { inVPre = false } if (platformIsPreTag(element.tag)) { inPre = false } // apply post-transforms for (var i$2 = 0; i$2 < postTransforms.length; i$2++) { postTransforms[i$2](element, options) } } parseHTML(template$$1, { warn: warn$1, expectHTML: options.expectHTML, isUnaryTag: options.isUnaryTag, canBeLeftOpenTag: options.canBeLeftOpenTag, shouldDecodeNewlines: options.shouldDecodeNewlines, shouldKeepComment: options.comments, start: function start(tag, attrs, unary) { // 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 = { type: 1, tag: tag, attrsList: attrs, attrsMap: makeAttrsMap(attrs), parent: currentParent, children: [] } if (ns) { element.ns = ns } if (isForbiddenTag(element) && !isServerRendering()) { element.forbidden = true process.env.NODE_ENV !== "production" && 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." ) } // apply pre-transforms for (var i = 0; i < preTransforms.length; i++) { preTransforms[i](element, options) } if (!inVPre) { processPre(element) if (element.pre) { inVPre = true } } if (platformIsPreTag(element.tag)) { inPre = true } if (inVPre) { processRawAttrs(element) } else { processFor(element) processIf(element) processOnce(element) processKey(element) // determine whether this is a plain element after // removing structural attributes element.plain = !element.key && !attrs.length processRef(element) processSlot(element) processComponent(element) for (var i$1 = 0; i$1 < transforms.length; i$1++) { transforms[i$1](element, options) } processAttrs(element) } function checkRootConstraints(el) { if (process.env.NODE_ENV !== "production") { if (el.tag === "slot" || el.tag === "template") { warnOnce( "Cannot use <" + el.tag + "> as component root element because it may " + "contain multiple nodes." ) } if (el.attrsMap.hasOwnProperty("v-for")) { warnOnce( "Cannot use v-for on stateful component root element because " + "it renders multiple elements." ) } } } // tree management if (!root) { root = element checkRootConstraints(root) } else if (!stack.length) { // 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 if (process.env.NODE_ENV !== "production") { 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." ) } } if (currentParent && !element.forbidden) { if (element.elseif || element.else) { processIfConditions(element, currentParent) } else if (element.slotScope) { // scoped slot currentParent.plain = false var name = element.slotTarget || '"default"' ;(currentParent.scopedSlots || (currentParent.scopedSlots = {}))[name] = element } else { currentParent.children.push(element) element.parent = currentParent } } if (!unary) { currentParent = element stack.push(element) } else { endPre(element) } }, end: function end() { // remove trailing whitespace var element = stack[stack.length - 1] var lastNode = element.children[element.children.length - 1] if (lastNode && lastNode.type === 3 && lastNode.text === " " && !inPre) { element.children.pop() } // pop stack stack.length -= 1 currentParent = stack[stack.length - 1] endPre(element) }, chars: function chars(text) { if (!currentParent) { if (process.env.NODE_ENV !== "production") { if (text === template$$1) { warnOnce( "Component template requires a root element, rather than just text." ) } else if ((text = text.trim())) { warnOnce('text "' + text + '" outside root element will be ignored.') } } return } // IE textarea placeholder bug /* istanbul ignore if */ if ( isIE && currentParent.tag === "textarea" && currentParent.attrsMap.placeholder === text ) { return } var children = currentParent.children text = inPre || text.trim() ? isTextTag(currentParent) ? text : decodeHTMLCached(text) : // only preserve whitespace if its not right after a starting tag preserveWhitespace && children.length ? " " : "" if (text) { var expression if (!inVPre && text !== " " && (expression = parseText(text, delimiters))) { children.push({ type: 2, expression: expression, text: text }) } else if ( text !== " " || !children.length || children[children.length - 1].text !== " " ) { children.push({ type: 3, text: text }) } } }, comment: function comment(text) { currentParent.children.push({ type: 3, text: text, isComment: true }) } }) return root } function processPre(el) { if (getAndRemoveAttr(el, "v-pre") != null) { el.pre = true } } function processRawAttrs(el) { var l = el.attrsList.length if (l) { var attrs = (el.attrs = new Array(l)) for (var i = 0; i < l; i++) { attrs[i] = { name: el.attrsList[i].name, value: JSON.stringify(el.attrsList[i].value) } } } else if (!el.pre) { // non root node in pre blocks with no attributes el.plain = true } } function processKey(el) { var exp = getBindingAttr(el, "key") if (exp) { if (process.env.NODE_ENV !== "production" && el.tag === "template") { warn$1("