/** * @author Toru Nagashima * See LICENSE file in root directory for full license. */ 'use strict'; Object.defineProperty(exports, '__esModule', { value: true }); function _interopDefault (ex) { return (ex && (typeof ex === 'object') && 'default' in ex) ? ex['default'] : ex; } var path = require('path'); var path__default = _interopDefault(path); var Evk = _interopDefault(require('eslint-visitor-keys')); var sortedLastIndex = _interopDefault(require('lodash/sortedLastIndex')); var assert = _interopDefault(require('assert')); var last = _interopDefault(require('lodash/last')); var findLastIndex = _interopDefault(require('lodash/findLastIndex')); var debugFactory = _interopDefault(require('debug')); var first = _interopDefault(require('lodash/first')); var sortedIndexBy = _interopDefault(require('lodash/sortedIndexBy')); var escope = _interopDefault(require('eslint-scope')); var Module = _interopDefault(require('module')); var semver = require('semver'); var dependencyEspree = require('espree'); var sortedLastIndexBy = _interopDefault(require('lodash/sortedLastIndexBy')); var EventEmitter = _interopDefault(require('events')); var esquery = _interopDefault(require('esquery')); var union = _interopDefault(require('lodash/union')); var intersection = _interopDefault(require('lodash/intersection')); var memoize = _interopDefault(require('lodash/memoize')); function isAcornStyleParseError(x) { return (typeof x.message === "string" && typeof x.pos === "number" && typeof x.loc === "object" && x.loc !== null && typeof x.loc.line === "number" && typeof x.loc.column === "number"); } class ParseError extends SyntaxError { constructor(message, code, offset, line, column) { super(message); this.code = code; this.index = offset; this.lineNumber = line; this.column = column; } static fromCode(code, offset, line, column) { return new ParseError(code, code, offset, line, column); } static normalize(x) { if (ParseError.isParseError(x)) { return x; } if (isAcornStyleParseError(x)) { return new ParseError(x.message, undefined, x.pos, x.loc.line, x.loc.column); } return null; } static isParseError(x) { return (x instanceof ParseError || (typeof x.message === "string" && typeof x.index === "number" && typeof x.lineNumber === "number" && typeof x.column === "number")); } } const NS = Object.freeze({ HTML: "http://www.w3.org/1999/xhtml", MathML: "http://www.w3.org/1998/Math/MathML", SVG: "http://www.w3.org/2000/svg", XLink: "http://www.w3.org/1999/xlink", XML: "http://www.w3.org/XML/1998/namespace", XMLNS: "http://www.w3.org/2000/xmlns/", }); const KEYS = Evk.unionWith({ VAttribute: ["key", "value"], VDirectiveKey: ["name", "argument", "modifiers"], VDocumentFragment: ["children"], VElement: ["startTag", "children", "endTag"], VEndTag: [], VExpressionContainer: ["expression"], VFilter: ["callee", "arguments"], VFilterSequenceExpression: ["expression", "filters"], VForExpression: ["left", "right"], VIdentifier: [], VLiteral: [], VOnExpression: ["body"], VSlotScopeExpression: ["params"], VStartTag: ["attributes"], VText: [], }); function fallbackKeysFilter(key) { let value = null; return (key !== "comments" && key !== "leadingComments" && key !== "loc" && key !== "parent" && key !== "range" && key !== "tokens" && key !== "trailingComments" && (value = this[key]) !== null && typeof value === "object" && (typeof value.type === "string" || Array.isArray(value))); } function getFallbackKeys(node) { return Object.keys(node).filter(fallbackKeysFilter, node); } function isNode(x) { return x !== null && typeof x === "object" && typeof x.type === "string"; } function traverse(node, parent, visitor) { let i = 0; let j = 0; visitor.enterNode(node, parent); const keys = (visitor.visitorKeys || KEYS)[node.type] || getFallbackKeys(node); for (i = 0; i < keys.length; ++i) { const child = node[keys[i]]; if (Array.isArray(child)) { for (j = 0; j < child.length; ++j) { if (isNode(child[j])) { traverse(child[j], node, visitor); } } } else if (isNode(child)) { traverse(child, node, visitor); } } visitor.leaveNode(node, parent); } function traverseNodes(node, visitor) { traverse(node, null, visitor); } var index = /*#__PURE__*/Object.freeze({ __proto__: null, ParseError: ParseError, NS: NS, KEYS: KEYS, traverseNodes: traverseNodes, getFallbackKeys: getFallbackKeys }); class LinesAndColumns { constructor(ltOffsets) { this.ltOffsets = ltOffsets; } getLocFromIndex(index) { const line = sortedLastIndex(this.ltOffsets, index) + 1; const column = index - (line === 1 ? 0 : this.ltOffsets[line - 2]); return { line, column }; } } class LocationCalculatorForHtml extends LinesAndColumns { constructor(gapOffsets, ltOffsets, baseOffset, shiftOffset = 0) { super(ltOffsets); this.gapOffsets = gapOffsets; this.ltOffsets = ltOffsets; this.baseOffset = baseOffset || 0; this.baseIndexOfGap = this.baseOffset === 0 ? 0 : sortedLastIndex(gapOffsets, this.baseOffset); this.shiftOffset = shiftOffset; } getSubCalculatorAfter(offset) { return new LocationCalculatorForHtml(this.gapOffsets, this.ltOffsets, this.baseOffset + offset, this.shiftOffset); } getSubCalculatorShift(offset) { return new LocationCalculatorForHtml(this.gapOffsets, this.ltOffsets, this.baseOffset, this.shiftOffset + offset); } _getGap(index) { const offsets = this.gapOffsets; let g0 = sortedLastIndex(offsets, index + this.baseOffset); let pos = index + this.baseOffset + g0 - this.baseIndexOfGap; while (g0 < offsets.length && offsets[g0] <= pos) { g0 += 1; pos += 1; } return g0 - this.baseIndexOfGap; } getLocation(index) { return this.getLocFromIndex(this.getOffsetWithGap(index)); } getOffsetWithGap(index) { return index + this.getFixOffset(index); } getFixOffset(offset) { const shiftOffset = this.shiftOffset; const gap = this._getGap(offset + shiftOffset); return this.baseOffset + gap + shiftOffset; } } const debug = debugFactory("vue-eslint-parser"); function isScriptElement(node) { return node.type === "VElement" && node.name === "script"; } function isScriptSetupElement(script) { return (isScriptElement(script) && script.startTag.attributes.some((attr) => !attr.directive && attr.key.name === "setup")); } function isTemplateElement(node) { return node.type === "VElement" && node.name === "template"; } function isStyleElement(node) { return node.type === "VElement" && node.name === "style"; } function getOwnerDocument(leafNode) { let node = leafNode; while (node != null && node.type !== "VDocumentFragment") { node = node.parent; } return node; } function isLang(attribute) { return attribute.directive === false && attribute.key.name === "lang"; } function getLang(element) { const langAttr = element && element.startTag.attributes.find(isLang); const lang = langAttr && langAttr.value && langAttr.value.value; return lang || null; } function isSFCFile(parserOptions) { if (parserOptions.filePath === "") { return true; } return path.extname(parserOptions.filePath || "unknown.vue") === ".vue"; } function getScriptParser(parser, doc, block) { if (parser && typeof parser === "object") { if (block === "template") { const parserForTemplate = parser["