astexplorer.app
Version:
https://astexplorer.net with ES Modules support and Hot Reloading
1 lines • 516 kB
JavaScript
(window.webpackJsonp=window.webpackJsonp||[]).push([[67],{"./node_modules/acorn-jsx/index.js":function(module,exports,__webpack_require__){"use strict";eval("\n\nconst XHTMLEntities = __webpack_require__(\"./node_modules/acorn-jsx/xhtml.js\");\n\nconst hexNumber = /^[\\da-fA-F]+$/;\nconst decimalNumber = /^\\d+$/;\n\n// The map to `acorn-jsx` tokens from `acorn` namespace objects.\nconst acornJsxMap = new WeakMap();\n\n// Get the original tokens for the given `acorn` namespace object.\nfunction getJsxTokens(acorn) {\n acorn = acorn.Parser.acorn || acorn;\n let acornJsx = acornJsxMap.get(acorn);\n if (!acornJsx) {\n const tt = acorn.tokTypes;\n const TokContext = acorn.TokContext;\n const TokenType = acorn.TokenType;\n const tc_oTag = new TokContext('<tag', false);\n const tc_cTag = new TokContext('</tag', false);\n const tc_expr = new TokContext('<tag>...</tag>', true, true);\n const tokContexts = {\n tc_oTag: tc_oTag,\n tc_cTag: tc_cTag,\n tc_expr: tc_expr\n };\n const tokTypes = {\n jsxName: new TokenType('jsxName'),\n jsxText: new TokenType('jsxText', {beforeExpr: true}),\n jsxTagStart: new TokenType('jsxTagStart', {startsExpr: true}),\n jsxTagEnd: new TokenType('jsxTagEnd')\n };\n\n tokTypes.jsxTagStart.updateContext = function() {\n this.context.push(tc_expr); // treat as beginning of JSX expression\n this.context.push(tc_oTag); // start opening tag context\n this.exprAllowed = false;\n };\n tokTypes.jsxTagEnd.updateContext = function(prevType) {\n let out = this.context.pop();\n if (out === tc_oTag && prevType === tt.slash || out === tc_cTag) {\n this.context.pop();\n this.exprAllowed = this.curContext() === tc_expr;\n } else {\n this.exprAllowed = true;\n }\n };\n\n acornJsx = { tokContexts: tokContexts, tokTypes: tokTypes };\n acornJsxMap.set(acorn, acornJsx);\n }\n\n return acornJsx;\n}\n\n// Transforms JSX element name to string.\n\nfunction getQualifiedJSXName(object) {\n if (!object)\n return object;\n\n if (object.type === 'JSXIdentifier')\n return object.name;\n\n if (object.type === 'JSXNamespacedName')\n return object.namespace.name + ':' + object.name.name;\n\n if (object.type === 'JSXMemberExpression')\n return getQualifiedJSXName(object.object) + '.' +\n getQualifiedJSXName(object.property);\n}\n\nmodule.exports = function(options) {\n options = options || {};\n return function(Parser) {\n return plugin({\n allowNamespaces: options.allowNamespaces !== false,\n allowNamespacedObjects: !!options.allowNamespacedObjects\n }, Parser);\n };\n};\n\n// This is `tokTypes` of the peer dep.\n// This can be different instances from the actual `tokTypes` this plugin uses.\nObject.defineProperty(module.exports, \"tokTypes\", {\n get: function get_tokTypes() {\n return getJsxTokens(__webpack_require__(\"./node_modules/acorn/dist/acorn.mjs\")).tokTypes;\n },\n configurable: true,\n enumerable: true\n});\n\nfunction plugin(options, Parser) {\n const acorn = Parser.acorn || __webpack_require__(\"./node_modules/acorn/dist/acorn.mjs\");\n const acornJsx = getJsxTokens(acorn);\n const tt = acorn.tokTypes;\n const tok = acornJsx.tokTypes;\n const tokContexts = acorn.tokContexts;\n const tc_oTag = acornJsx.tokContexts.tc_oTag;\n const tc_cTag = acornJsx.tokContexts.tc_cTag;\n const tc_expr = acornJsx.tokContexts.tc_expr;\n const isNewLine = acorn.isNewLine;\n const isIdentifierStart = acorn.isIdentifierStart;\n const isIdentifierChar = acorn.isIdentifierChar;\n\n return class extends Parser {\n // Expose actual `tokTypes` and `tokContexts` to other plugins.\n static get acornJsx() {\n return acornJsx;\n }\n\n // Reads inline JSX contents token.\n jsx_readToken() {\n let out = '', chunkStart = this.pos;\n for (;;) {\n if (this.pos >= this.input.length)\n this.raise(this.start, 'Unterminated JSX contents');\n let ch = this.input.charCodeAt(this.pos);\n\n switch (ch) {\n case 60: // '<'\n case 123: // '{'\n if (this.pos === this.start) {\n if (ch === 60 && this.exprAllowed) {\n ++this.pos;\n return this.finishToken(tok.jsxTagStart);\n }\n return this.getTokenFromCode(ch);\n }\n out += this.input.slice(chunkStart, this.pos);\n return this.finishToken(tok.jsxText, out);\n\n case 38: // '&'\n out += this.input.slice(chunkStart, this.pos);\n out += this.jsx_readEntity();\n chunkStart = this.pos;\n break;\n\n case 62: // '>'\n case 125: // '}'\n this.raise(\n this.pos,\n \"Unexpected token `\" + this.input[this.pos] + \"`. Did you mean `\" +\n (ch === 62 ? \">\" : \"}\") + \"` or \" + \"`{\\\"\" + this.input[this.pos] + \"\\\"}\" + \"`?\"\n );\n\n default:\n if (isNewLine(ch)) {\n out += this.input.slice(chunkStart, this.pos);\n out += this.jsx_readNewLine(true);\n chunkStart = this.pos;\n } else {\n ++this.pos;\n }\n }\n }\n }\n\n jsx_readNewLine(normalizeCRLF) {\n let ch = this.input.charCodeAt(this.pos);\n let out;\n ++this.pos;\n if (ch === 13 && this.input.charCodeAt(this.pos) === 10) {\n ++this.pos;\n out = normalizeCRLF ? '\\n' : '\\r\\n';\n } else {\n out = String.fromCharCode(ch);\n }\n if (this.options.locations) {\n ++this.curLine;\n this.lineStart = this.pos;\n }\n\n return out;\n }\n\n jsx_readString(quote) {\n let out = '', chunkStart = ++this.pos;\n for (;;) {\n if (this.pos >= this.input.length)\n this.raise(this.start, 'Unterminated string constant');\n let ch = this.input.charCodeAt(this.pos);\n if (ch === quote) break;\n if (ch === 38) { // '&'\n out += this.input.slice(chunkStart, this.pos);\n out += this.jsx_readEntity();\n chunkStart = this.pos;\n } else if (isNewLine(ch)) {\n out += this.input.slice(chunkStart, this.pos);\n out += this.jsx_readNewLine(false);\n chunkStart = this.pos;\n } else {\n ++this.pos;\n }\n }\n out += this.input.slice(chunkStart, this.pos++);\n return this.finishToken(tt.string, out);\n }\n\n jsx_readEntity() {\n let str = '', count = 0, entity;\n let ch = this.input[this.pos];\n if (ch !== '&')\n this.raise(this.pos, 'Entity must start with an ampersand');\n let startPos = ++this.pos;\n while (this.pos < this.input.length && count++ < 10) {\n ch = this.input[this.pos++];\n if (ch === ';') {\n if (str[0] === '#') {\n if (str[1] === 'x') {\n str = str.substr(2);\n if (hexNumber.test(str))\n entity = String.fromCharCode(parseInt(str, 16));\n } else {\n str = str.substr(1);\n if (decimalNumber.test(str))\n entity = String.fromCharCode(parseInt(str, 10));\n }\n } else {\n entity = XHTMLEntities[str];\n }\n break;\n }\n str += ch;\n }\n if (!entity) {\n this.pos = startPos;\n return '&';\n }\n return entity;\n }\n\n // Read a JSX identifier (valid tag or attribute name).\n //\n // Optimized version since JSX identifiers can't contain\n // escape characters and so can be read as single slice.\n // Also assumes that first character was already checked\n // by isIdentifierStart in readToken.\n\n jsx_readWord() {\n let ch, start = this.pos;\n do {\n ch = this.input.charCodeAt(++this.pos);\n } while (isIdentifierChar(ch) || ch === 45); // '-'\n return this.finishToken(tok.jsxName, this.input.slice(start, this.pos));\n }\n\n // Parse next token as JSX identifier\n\n jsx_parseIdentifier() {\n let node = this.startNode();\n if (this.type === tok.jsxName)\n node.name = this.value;\n else if (this.type.keyword)\n node.name = this.type.keyword;\n else\n this.unexpected();\n this.next();\n return this.finishNode(node, 'JSXIdentifier');\n }\n\n // Parse namespaced identifier.\n\n jsx_parseNamespacedName() {\n let startPos = this.start, startLoc = this.startLoc;\n let name = this.jsx_parseIdentifier();\n if (!options.allowNamespaces || !this.eat(tt.colon)) return name;\n var node = this.startNodeAt(startPos, startLoc);\n node.namespace = name;\n node.name = this.jsx_parseIdentifier();\n return this.finishNode(node, 'JSXNamespacedName');\n }\n\n // Parses element name in any form - namespaced, member\n // or single identifier.\n\n jsx_parseElementName() {\n if (this.type === tok.jsxTagEnd) return '';\n let startPos = this.start, startLoc = this.startLoc;\n let node = this.jsx_parseNamespacedName();\n if (this.type === tt.dot && node.type === 'JSXNamespacedName' && !options.allowNamespacedObjects) {\n this.unexpected();\n }\n while (this.eat(tt.dot)) {\n let newNode = this.startNodeAt(startPos, startLoc);\n newNode.object = node;\n newNode.property = this.jsx_parseIdentifier();\n node = this.finishNode(newNode, 'JSXMemberExpression');\n }\n return node;\n }\n\n // Parses any type of JSX attribute value.\n\n jsx_parseAttributeValue() {\n switch (this.type) {\n case tt.braceL:\n let node = this.jsx_parseExpressionContainer();\n if (node.expression.type === 'JSXEmptyExpression')\n this.raise(node.start, 'JSX attributes must only be assigned a non-empty expression');\n return node;\n\n case tok.jsxTagStart:\n case tt.string:\n return this.parseExprAtom();\n\n default:\n this.raise(this.start, 'JSX value should be either an expression or a quoted JSX text');\n }\n }\n\n // JSXEmptyExpression is unique type since it doesn't actually parse anything,\n // and so it should start at the end of last read token (left brace) and finish\n // at the beginning of the next one (right brace).\n\n jsx_parseEmptyExpression() {\n let node = this.startNodeAt(this.lastTokEnd, this.lastTokEndLoc);\n return this.finishNodeAt(node, 'JSXEmptyExpression', this.start, this.startLoc);\n }\n\n // Parses JSX expression enclosed into curly brackets.\n\n jsx_parseExpressionContainer() {\n let node = this.startNode();\n this.next();\n node.expression = this.type === tt.braceR\n ? this.jsx_parseEmptyExpression()\n : this.parseExpression();\n this.expect(tt.braceR);\n return this.finishNode(node, 'JSXExpressionContainer');\n }\n\n // Parses following JSX attribute name-value pair.\n\n jsx_parseAttribute() {\n let node = this.startNode();\n if (this.eat(tt.braceL)) {\n this.expect(tt.ellipsis);\n node.argument = this.parseMaybeAssign();\n this.expect(tt.braceR);\n return this.finishNode(node, 'JSXSpreadAttribute');\n }\n node.name = this.jsx_parseNamespacedName();\n node.value = this.eat(tt.eq) ? this.jsx_parseAttributeValue() : null;\n return this.finishNode(node, 'JSXAttribute');\n }\n\n // Parses JSX opening tag starting after '<'.\n\n jsx_parseOpeningElementAt(startPos, startLoc) {\n let node = this.startNodeAt(startPos, startLoc);\n node.attributes = [];\n let nodeName = this.jsx_parseElementName();\n if (nodeName) node.name = nodeName;\n while (this.type !== tt.slash && this.type !== tok.jsxTagEnd)\n node.attributes.push(this.jsx_parseAttribute());\n node.selfClosing = this.eat(tt.slash);\n this.expect(tok.jsxTagEnd);\n return this.finishNode(node, nodeName ? 'JSXOpeningElement' : 'JSXOpeningFragment');\n }\n\n // Parses JSX closing tag starting after '</'.\n\n jsx_parseClosingElementAt(startPos, startLoc) {\n let node = this.startNodeAt(startPos, startLoc);\n let nodeName = this.jsx_parseElementName();\n if (nodeName) node.name = nodeName;\n this.expect(tok.jsxTagEnd);\n return this.finishNode(node, nodeName ? 'JSXClosingElement' : 'JSXClosingFragment');\n }\n\n // Parses entire JSX element, including it's opening tag\n // (starting after '<'), attributes, contents and closing tag.\n\n jsx_parseElementAt(startPos, startLoc) {\n let node = this.startNodeAt(startPos, startLoc);\n let children = [];\n let openingElement = this.jsx_parseOpeningElementAt(startPos, startLoc);\n let closingElement = null;\n\n if (!openingElement.selfClosing) {\n contents: for (;;) {\n switch (this.type) {\n case tok.jsxTagStart:\n startPos = this.start; startLoc = this.startLoc;\n this.next();\n if (this.eat(tt.slash)) {\n closingElement = this.jsx_parseClosingElementAt(startPos, startLoc);\n break contents;\n }\n children.push(this.jsx_parseElementAt(startPos, startLoc));\n break;\n\n case tok.jsxText:\n children.push(this.parseExprAtom());\n break;\n\n case tt.braceL:\n children.push(this.jsx_parseExpressionContainer());\n break;\n\n default:\n this.unexpected();\n }\n }\n if (getQualifiedJSXName(closingElement.name) !== getQualifiedJSXName(openingElement.name)) {\n this.raise(\n closingElement.start,\n 'Expected corresponding JSX closing tag for <' + getQualifiedJSXName(openingElement.name) + '>');\n }\n }\n let fragmentOrElement = openingElement.name ? 'Element' : 'Fragment';\n\n node['opening' + fragmentOrElement] = openingElement;\n node['closing' + fragmentOrElement] = closingElement;\n node.children = children;\n if (this.type === tt.relational && this.value === \"<\") {\n this.raise(this.start, \"Adjacent JSX elements must be wrapped in an enclosing tag\");\n }\n return this.finishNode(node, 'JSX' + fragmentOrElement);\n }\n\n // Parse JSX text\n\n jsx_parseText() {\n let node = this.parseLiteral(this.value);\n node.type = \"JSXText\";\n return node;\n }\n\n // Parses entire JSX element from current position.\n\n jsx_parseElement() {\n let startPos = this.start, startLoc = this.startLoc;\n this.next();\n return this.jsx_parseElementAt(startPos, startLoc);\n }\n\n parseExprAtom(refShortHandDefaultPos) {\n if (this.type === tok.jsxText)\n return this.jsx_parseText();\n else if (this.type === tok.jsxTagStart)\n return this.jsx_parseElement();\n else\n return super.parseExprAtom(refShortHandDefaultPos);\n }\n\n readToken(code) {\n let context = this.curContext();\n\n if (context === tc_expr) return this.jsx_readToken();\n\n if (context === tc_oTag || context === tc_cTag) {\n if (isIdentifierStart(code)) return this.jsx_readWord();\n\n if (code == 62) {\n ++this.pos;\n return this.finishToken(tok.jsxTagEnd);\n }\n\n if ((code === 34 || code === 39) && context == tc_oTag)\n return this.jsx_readString(code);\n }\n\n if (code === 60 && this.exprAllowed && this.input.charCodeAt(this.pos + 1) !== 33) {\n ++this.pos;\n return this.finishToken(tok.jsxTagStart);\n }\n return super.readToken(code);\n }\n\n updateContext(prevType) {\n if (this.type == tt.braceL) {\n var curContext = this.curContext();\n if (curContext == tc_oTag) this.context.push(tokContexts.b_expr);\n else if (curContext == tc_expr) this.context.push(tokContexts.b_tmpl);\n else super.updateContext(prevType);\n this.exprAllowed = true;\n } else if (this.type === tt.slash && prevType === tok.jsxTagStart) {\n this.context.length -= 2; // do not consider JSX expr -> JSX open tag -> ... anymore\n this.context.push(tc_cTag); // reconsider as closing tag context\n this.exprAllowed = false;\n } else {\n return super.updateContext(prevType);\n }\n }\n };\n}\n\n\n//# sourceURL=webpack:///./node_modules/acorn-jsx/index.js?")},"./node_modules/acorn-jsx/xhtml.js":function(module,exports){eval("module.exports = {\n quot: '\\u0022',\n amp: '&',\n apos: '\\u0027',\n lt: '<',\n gt: '>',\n nbsp: '\\u00A0',\n iexcl: '\\u00A1',\n cent: '\\u00A2',\n pound: '\\u00A3',\n curren: '\\u00A4',\n yen: '\\u00A5',\n brvbar: '\\u00A6',\n sect: '\\u00A7',\n uml: '\\u00A8',\n copy: '\\u00A9',\n ordf: '\\u00AA',\n laquo: '\\u00AB',\n not: '\\u00AC',\n shy: '\\u00AD',\n reg: '\\u00AE',\n macr: '\\u00AF',\n deg: '\\u00B0',\n plusmn: '\\u00B1',\n sup2: '\\u00B2',\n sup3: '\\u00B3',\n acute: '\\u00B4',\n micro: '\\u00B5',\n para: '\\u00B6',\n middot: '\\u00B7',\n cedil: '\\u00B8',\n sup1: '\\u00B9',\n ordm: '\\u00BA',\n raquo: '\\u00BB',\n frac14: '\\u00BC',\n frac12: '\\u00BD',\n frac34: '\\u00BE',\n iquest: '\\u00BF',\n Agrave: '\\u00C0',\n Aacute: '\\u00C1',\n Acirc: '\\u00C2',\n Atilde: '\\u00C3',\n Auml: '\\u00C4',\n Aring: '\\u00C5',\n AElig: '\\u00C6',\n Ccedil: '\\u00C7',\n Egrave: '\\u00C8',\n Eacute: '\\u00C9',\n Ecirc: '\\u00CA',\n Euml: '\\u00CB',\n Igrave: '\\u00CC',\n Iacute: '\\u00CD',\n Icirc: '\\u00CE',\n Iuml: '\\u00CF',\n ETH: '\\u00D0',\n Ntilde: '\\u00D1',\n Ograve: '\\u00D2',\n Oacute: '\\u00D3',\n Ocirc: '\\u00D4',\n Otilde: '\\u00D5',\n Ouml: '\\u00D6',\n times: '\\u00D7',\n Oslash: '\\u00D8',\n Ugrave: '\\u00D9',\n Uacute: '\\u00DA',\n Ucirc: '\\u00DB',\n Uuml: '\\u00DC',\n Yacute: '\\u00DD',\n THORN: '\\u00DE',\n szlig: '\\u00DF',\n agrave: '\\u00E0',\n aacute: '\\u00E1',\n acirc: '\\u00E2',\n atilde: '\\u00E3',\n auml: '\\u00E4',\n aring: '\\u00E5',\n aelig: '\\u00E6',\n ccedil: '\\u00E7',\n egrave: '\\u00E8',\n eacute: '\\u00E9',\n ecirc: '\\u00EA',\n euml: '\\u00EB',\n igrave: '\\u00EC',\n iacute: '\\u00ED',\n icirc: '\\u00EE',\n iuml: '\\u00EF',\n eth: '\\u00F0',\n ntilde: '\\u00F1',\n ograve: '\\u00F2',\n oacute: '\\u00F3',\n ocirc: '\\u00F4',\n otilde: '\\u00F5',\n ouml: '\\u00F6',\n divide: '\\u00F7',\n oslash: '\\u00F8',\n ugrave: '\\u00F9',\n uacute: '\\u00FA',\n ucirc: '\\u00FB',\n uuml: '\\u00FC',\n yacute: '\\u00FD',\n thorn: '\\u00FE',\n yuml: '\\u00FF',\n OElig: '\\u0152',\n oelig: '\\u0153',\n Scaron: '\\u0160',\n scaron: '\\u0161',\n Yuml: '\\u0178',\n fnof: '\\u0192',\n circ: '\\u02C6',\n tilde: '\\u02DC',\n Alpha: '\\u0391',\n Beta: '\\u0392',\n Gamma: '\\u0393',\n Delta: '\\u0394',\n Epsilon: '\\u0395',\n Zeta: '\\u0396',\n Eta: '\\u0397',\n Theta: '\\u0398',\n Iota: '\\u0399',\n Kappa: '\\u039A',\n Lambda: '\\u039B',\n Mu: '\\u039C',\n Nu: '\\u039D',\n Xi: '\\u039E',\n Omicron: '\\u039F',\n Pi: '\\u03A0',\n Rho: '\\u03A1',\n Sigma: '\\u03A3',\n Tau: '\\u03A4',\n Upsilon: '\\u03A5',\n Phi: '\\u03A6',\n Chi: '\\u03A7',\n Psi: '\\u03A8',\n Omega: '\\u03A9',\n alpha: '\\u03B1',\n beta: '\\u03B2',\n gamma: '\\u03B3',\n delta: '\\u03B4',\n epsilon: '\\u03B5',\n zeta: '\\u03B6',\n eta: '\\u03B7',\n theta: '\\u03B8',\n iota: '\\u03B9',\n kappa: '\\u03BA',\n lambda: '\\u03BB',\n mu: '\\u03BC',\n nu: '\\u03BD',\n xi: '\\u03BE',\n omicron: '\\u03BF',\n pi: '\\u03C0',\n rho: '\\u03C1',\n sigmaf: '\\u03C2',\n sigma: '\\u03C3',\n tau: '\\u03C4',\n upsilon: '\\u03C5',\n phi: '\\u03C6',\n chi: '\\u03C7',\n psi: '\\u03C8',\n omega: '\\u03C9',\n thetasym: '\\u03D1',\n upsih: '\\u03D2',\n piv: '\\u03D6',\n ensp: '\\u2002',\n emsp: '\\u2003',\n thinsp: '\\u2009',\n zwnj: '\\u200C',\n zwj: '\\u200D',\n lrm: '\\u200E',\n rlm: '\\u200F',\n ndash: '\\u2013',\n mdash: '\\u2014',\n lsquo: '\\u2018',\n rsquo: '\\u2019',\n sbquo: '\\u201A',\n ldquo: '\\u201C',\n rdquo: '\\u201D',\n bdquo: '\\u201E',\n dagger: '\\u2020',\n Dagger: '\\u2021',\n bull: '\\u2022',\n hellip: '\\u2026',\n permil: '\\u2030',\n prime: '\\u2032',\n Prime: '\\u2033',\n lsaquo: '\\u2039',\n rsaquo: '\\u203A',\n oline: '\\u203E',\n frasl: '\\u2044',\n euro: '\\u20AC',\n image: '\\u2111',\n weierp: '\\u2118',\n real: '\\u211C',\n trade: '\\u2122',\n alefsym: '\\u2135',\n larr: '\\u2190',\n uarr: '\\u2191',\n rarr: '\\u2192',\n darr: '\\u2193',\n harr: '\\u2194',\n crarr: '\\u21B5',\n lArr: '\\u21D0',\n uArr: '\\u21D1',\n rArr: '\\u21D2',\n dArr: '\\u21D3',\n hArr: '\\u21D4',\n forall: '\\u2200',\n part: '\\u2202',\n exist: '\\u2203',\n empty: '\\u2205',\n nabla: '\\u2207',\n isin: '\\u2208',\n notin: '\\u2209',\n ni: '\\u220B',\n prod: '\\u220F',\n sum: '\\u2211',\n minus: '\\u2212',\n lowast: '\\u2217',\n radic: '\\u221A',\n prop: '\\u221D',\n infin: '\\u221E',\n ang: '\\u2220',\n and: '\\u2227',\n or: '\\u2228',\n cap: '\\u2229',\n cup: '\\u222A',\n 'int': '\\u222B',\n there4: '\\u2234',\n sim: '\\u223C',\n cong: '\\u2245',\n asymp: '\\u2248',\n ne: '\\u2260',\n equiv: '\\u2261',\n le: '\\u2264',\n ge: '\\u2265',\n sub: '\\u2282',\n sup: '\\u2283',\n nsub: '\\u2284',\n sube: '\\u2286',\n supe: '\\u2287',\n oplus: '\\u2295',\n otimes: '\\u2297',\n perp: '\\u22A5',\n sdot: '\\u22C5',\n lceil: '\\u2308',\n rceil: '\\u2309',\n lfloor: '\\u230A',\n rfloor: '\\u230B',\n lang: '\\u2329',\n rang: '\\u232A',\n loz: '\\u25CA',\n spades: '\\u2660',\n clubs: '\\u2663',\n hearts: '\\u2665',\n diams: '\\u2666'\n};\n\n\n//# sourceURL=webpack:///./node_modules/acorn-jsx/xhtml.js?")},"./node_modules/acorn-loose/dist/acorn-loose.mjs":function(module,exports,__webpack_require__){"use strict";eval('\n\nObject.defineProperty(exports, "__esModule", {\n value: true\n});\nexports.LooseParser = void 0;\nexports.isDummy = isDummy;\nexports.parse = parse;\n\nvar _acorn = __webpack_require__("./node_modules/acorn/dist/acorn.js");\n\nvar dummyValue = "✖";\n\nfunction isDummy(node) {\n return node.name === dummyValue;\n}\n\nfunction noop() {}\n\nvar LooseParser = function LooseParser(input, options) {\n if (options === void 0) options = {};\n this.toks = this.constructor.BaseParser.tokenizer(input, options);\n this.options = this.toks.options;\n this.input = this.toks.input;\n this.tok = this.last = {\n type: _acorn.tokTypes.eof,\n start: 0,\n end: 0\n };\n this.tok.validateRegExpFlags = noop;\n this.tok.validateRegExpPattern = noop;\n\n if (this.options.locations) {\n var here = this.toks.curPosition();\n this.tok.loc = new _acorn.SourceLocation(this.toks, here, here);\n }\n\n this.ahead = []; // Tokens ahead\n\n this.context = []; // Indentation contexted\n\n this.curIndent = 0;\n this.curLineStart = 0;\n this.nextLineStart = this.lineEnd(this.curLineStart) + 1;\n this.inAsync = false;\n this.inGenerator = false;\n this.inFunction = false;\n};\n\nexports.LooseParser = LooseParser;\n\nLooseParser.prototype.startNode = function startNode() {\n return new _acorn.Node(this.toks, this.tok.start, this.options.locations ? this.tok.loc.start : null);\n};\n\nLooseParser.prototype.storeCurrentPos = function storeCurrentPos() {\n return this.options.locations ? [this.tok.start, this.tok.loc.start] : this.tok.start;\n};\n\nLooseParser.prototype.startNodeAt = function startNodeAt(pos) {\n if (this.options.locations) {\n return new _acorn.Node(this.toks, pos[0], pos[1]);\n } else {\n return new _acorn.Node(this.toks, pos);\n }\n};\n\nLooseParser.prototype.finishNode = function finishNode(node, type) {\n node.type = type;\n node.end = this.last.end;\n\n if (this.options.locations) {\n node.loc.end = this.last.loc.end;\n }\n\n if (this.options.ranges) {\n node.range[1] = this.last.end;\n }\n\n return node;\n};\n\nLooseParser.prototype.dummyNode = function dummyNode(type) {\n var dummy = this.startNode();\n dummy.type = type;\n dummy.end = dummy.start;\n\n if (this.options.locations) {\n dummy.loc.end = dummy.loc.start;\n }\n\n if (this.options.ranges) {\n dummy.range[1] = dummy.start;\n }\n\n this.last = {\n type: _acorn.tokTypes.name,\n start: dummy.start,\n end: dummy.start,\n loc: dummy.loc\n };\n return dummy;\n};\n\nLooseParser.prototype.dummyIdent = function dummyIdent() {\n var dummy = this.dummyNode("Identifier");\n dummy.name = dummyValue;\n return dummy;\n};\n\nLooseParser.prototype.dummyString = function dummyString() {\n var dummy = this.dummyNode("Literal");\n dummy.value = dummy.raw = dummyValue;\n return dummy;\n};\n\nLooseParser.prototype.eat = function eat(type) {\n if (this.tok.type === type) {\n this.next();\n return true;\n } else {\n return false;\n }\n};\n\nLooseParser.prototype.isContextual = function isContextual(name) {\n return this.tok.type === _acorn.tokTypes.name && this.tok.value === name;\n};\n\nLooseParser.prototype.eatContextual = function eatContextual(name) {\n return this.tok.value === name && this.eat(_acorn.tokTypes.name);\n};\n\nLooseParser.prototype.canInsertSemicolon = function canInsertSemicolon() {\n return this.tok.type === _acorn.tokTypes.eof || this.tok.type === _acorn.tokTypes.braceR || _acorn.lineBreak.test(this.input.slice(this.last.end, this.tok.start));\n};\n\nLooseParser.prototype.semicolon = function semicolon() {\n return this.eat(_acorn.tokTypes.semi);\n};\n\nLooseParser.prototype.expect = function expect(type) {\n if (this.eat(type)) {\n return true;\n }\n\n for (var i = 1; i <= 2; i++) {\n if (this.lookAhead(i).type === type) {\n for (var j = 0; j < i; j++) {\n this.next();\n }\n\n return true;\n }\n }\n};\n\nLooseParser.prototype.pushCx = function pushCx() {\n this.context.push(this.curIndent);\n};\n\nLooseParser.prototype.popCx = function popCx() {\n this.curIndent = this.context.pop();\n};\n\nLooseParser.prototype.lineEnd = function lineEnd(pos) {\n while (pos < this.input.length && !(0, _acorn.isNewLine)(this.input.charCodeAt(pos))) {\n ++pos;\n }\n\n return pos;\n};\n\nLooseParser.prototype.indentationAfter = function indentationAfter(pos) {\n for (var count = 0;; ++pos) {\n var ch = this.input.charCodeAt(pos);\n\n if (ch === 32) {\n ++count;\n } else if (ch === 9) {\n count += this.options.tabSize;\n } else {\n return count;\n }\n }\n};\n\nLooseParser.prototype.closes = function closes(closeTok, indent, line, blockHeuristic) {\n if (this.tok.type === closeTok || this.tok.type === _acorn.tokTypes.eof) {\n return true;\n }\n\n return line !== this.curLineStart && this.curIndent < indent && this.tokenStartsLine() && (!blockHeuristic || this.nextLineStart >= this.input.length || this.indentationAfter(this.nextLineStart) < indent);\n};\n\nLooseParser.prototype.tokenStartsLine = function tokenStartsLine() {\n for (var p = this.tok.start - 1; p >= this.curLineStart; --p) {\n var ch = this.input.charCodeAt(p);\n\n if (ch !== 9 && ch !== 32) {\n return false;\n }\n }\n\n return true;\n};\n\nLooseParser.prototype.extend = function extend(name, f) {\n this[name] = f(this[name]);\n};\n\nLooseParser.prototype.parse = function parse() {\n this.next();\n return this.parseTopLevel();\n};\n\nLooseParser.extend = function extend() {\n var plugins = [],\n len = arguments.length;\n\n while (len--) {\n plugins[len] = arguments[len];\n }\n\n var cls = this;\n\n for (var i = 0; i < plugins.length; i++) {\n cls = plugins[i](cls);\n }\n\n return cls;\n};\n\nLooseParser.parse = function parse(input, options) {\n return new this(input, options).parse();\n}; // Allows plugins to extend the base parser / tokenizer used\n\n\nLooseParser.BaseParser = _acorn.Parser;\nvar lp = LooseParser.prototype;\n\nfunction isSpace(ch) {\n return ch < 14 && ch > 8 || ch === 32 || ch === 160 || (0, _acorn.isNewLine)(ch);\n}\n\nlp.next = function () {\n this.last = this.tok;\n\n if (this.ahead.length) {\n this.tok = this.ahead.shift();\n } else {\n this.tok = this.readToken();\n }\n\n if (this.tok.start >= this.nextLineStart) {\n while (this.tok.start >= this.nextLineStart) {\n this.curLineStart = this.nextLineStart;\n this.nextLineStart = this.lineEnd(this.curLineStart) + 1;\n }\n\n this.curIndent = this.indentationAfter(this.curLineStart);\n }\n};\n\nlp.readToken = function () {\n for (;;) {\n try {\n this.toks.next();\n\n if (this.toks.type === _acorn.tokTypes.dot && this.input.substr(this.toks.end, 1) === "." && this.options.ecmaVersion >= 6) {\n this.toks.end++;\n this.toks.type = _acorn.tokTypes.ellipsis;\n }\n\n return new _acorn.Token(this.toks);\n } catch (e) {\n if (!(e instanceof SyntaxError)) {\n throw e;\n } // Try to skip some text, based on the error message, and then continue\n\n\n var msg = e.message,\n pos = e.raisedAt,\n replace = true;\n\n if (/unterminated/i.test(msg)) {\n pos = this.lineEnd(e.pos + 1);\n\n if (/string/.test(msg)) {\n replace = {\n start: e.pos,\n end: pos,\n type: _acorn.tokTypes.string,\n value: this.input.slice(e.pos + 1, pos)\n };\n } else if (/regular expr/i.test(msg)) {\n var re = this.input.slice(e.pos, pos);\n\n try {\n re = new RegExp(re);\n } catch (e) {\n /* ignore compilation error due to new syntax */\n }\n\n replace = {\n start: e.pos,\n end: pos,\n type: _acorn.tokTypes.regexp,\n value: re\n };\n } else if (/template/.test(msg)) {\n replace = {\n start: e.pos,\n end: pos,\n type: _acorn.tokTypes.template,\n value: this.input.slice(e.pos, pos)\n };\n } else {\n replace = false;\n }\n } else if (/invalid (unicode|regexp|number)|expecting unicode|octal literal|is reserved|directly after number|expected number in radix/i.test(msg)) {\n while (pos < this.input.length && !isSpace(this.input.charCodeAt(pos))) {\n ++pos;\n }\n } else if (/character escape|expected hexadecimal/i.test(msg)) {\n while (pos < this.input.length) {\n var ch = this.input.charCodeAt(pos++);\n\n if (ch === 34 || ch === 39 || (0, _acorn.isNewLine)(ch)) {\n break;\n }\n }\n } else if (/unexpected character/i.test(msg)) {\n pos++;\n replace = false;\n } else if (/regular expression/i.test(msg)) {\n replace = true;\n } else {\n throw e;\n }\n\n this.resetTo(pos);\n\n if (replace === true) {\n replace = {\n start: pos,\n end: pos,\n type: _acorn.tokTypes.name,\n value: dummyValue\n };\n }\n\n if (replace) {\n if (this.options.locations) {\n replace.loc = new _acorn.SourceLocation(this.toks, (0, _acorn.getLineInfo)(this.input, replace.start), (0, _acorn.getLineInfo)(this.input, replace.end));\n }\n\n return replace;\n }\n }\n }\n};\n\nlp.resetTo = function (pos) {\n this.toks.pos = pos;\n var ch = this.input.charAt(pos - 1);\n this.toks.exprAllowed = !ch || /[[{(,;:?/*=+\\-~!|&%^<>]/.test(ch) || /[enwfd]/.test(ch) && /\\b(case|else|return|throw|new|in|(instance|type)?of|delete|void)$/.test(this.input.slice(pos - 10, pos));\n\n if (this.options.locations) {\n this.toks.curLine = 1;\n this.toks.lineStart = _acorn.lineBreakG.lastIndex = 0;\n var match;\n\n while ((match = _acorn.lineBreakG.exec(this.input)) && match.index < pos) {\n ++this.toks.curLine;\n this.toks.lineStart = match.index + match[0].length;\n }\n }\n};\n\nlp.lookAhead = function (n) {\n while (n > this.ahead.length) {\n this.ahead.push(this.readToken());\n }\n\n return this.ahead[n - 1];\n};\n\nvar lp$1 = LooseParser.prototype;\n\nlp$1.parseTopLevel = function () {\n var node = this.startNodeAt(this.options.locations ? [0, (0, _acorn.getLineInfo)(this.input, 0)] : 0);\n node.body = [];\n\n while (this.tok.type !== _acorn.tokTypes.eof) {\n node.body.push(this.parseStatement());\n }\n\n this.toks.adaptDirectivePrologue(node.body);\n this.last = this.tok;\n node.sourceType = this.options.sourceType;\n return this.finishNode(node, "Program");\n};\n\nlp$1.parseStatement = function () {\n var starttype = this.tok.type,\n node = this.startNode(),\n kind;\n\n if (this.toks.isLet()) {\n starttype = _acorn.tokTypes._var;\n kind = "let";\n }\n\n switch (starttype) {\n case _acorn.tokTypes._break:\n case _acorn.tokTypes._continue:\n this.next();\n var isBreak = starttype === _acorn.tokTypes._break;\n\n if (this.semicolon() || this.canInsertSemicolon()) {\n node.label = null;\n } else {\n node.label = this.tok.type === _acorn.tokTypes.name ? this.parseIdent() : null;\n this.semicolon();\n }\n\n return this.finishNode(node, isBreak ? "BreakStatement" : "ContinueStatement");\n\n case _acorn.tokTypes._debugger:\n this.next();\n this.semicolon();\n return this.finishNode(node, "DebuggerStatement");\n\n case _acorn.tokTypes._do:\n this.next();\n node.body = this.parseStatement();\n node.test = this.eat(_acorn.tokTypes._while) ? this.parseParenExpression() : this.dummyIdent();\n this.semicolon();\n return this.finishNode(node, "DoWhileStatement");\n\n case _acorn.tokTypes._for:\n this.next(); // `for` keyword\n\n var isAwait = this.options.ecmaVersion >= 9 && this.eatContextual("await");\n this.pushCx();\n this.expect(_acorn.tokTypes.parenL);\n\n if (this.tok.type === _acorn.tokTypes.semi) {\n return this.parseFor(node, null);\n }\n\n var isLet = this.toks.isLet();\n\n if (isLet || this.tok.type === _acorn.tokTypes._var || this.tok.type === _acorn.tokTypes._const) {\n var init$1 = this.parseVar(this.startNode(), true, isLet ? "let" : this.tok.value);\n\n if (init$1.declarations.length === 1 && (this.tok.type === _acorn.tokTypes._in || this.isContextual("of"))) {\n if (this.options.ecmaVersion >= 9 && this.tok.type !== _acorn.tokTypes._in) {\n node.await = isAwait;\n }\n\n return this.parseForIn(node, init$1);\n }\n\n return this.parseFor(node, init$1);\n }\n\n var init = this.parseExpression(true);\n\n if (this.tok.type === _acorn.tokTypes._in || this.isContextual("of")) {\n if (this.options.ecmaVersion >= 9 && this.tok.type !== _acorn.tokTypes._in) {\n node.await = isAwait;\n }\n\n return this.parseForIn(node, this.toAssignable(init));\n }\n\n return this.parseFor(node, init);\n\n case _acorn.tokTypes._function:\n this.next();\n return this.parseFunction(node, true);\n\n case _acorn.tokTypes._if:\n this.next();\n node.test = this.parseParenExpression();\n node.consequent = this.parseStatement();\n node.alternate = this.eat(_acorn.tokTypes._else) ? this.parseStatement() : null;\n return this.finishNode(node, "IfStatement");\n\n case _acorn.tokTypes._return:\n this.next();\n\n if (this.eat(_acorn.tokTypes.semi) || this.canInsertSemicolon()) {\n node.argument = null;\n } else {\n node.argument = this.parseExpression();\n this.semicolon();\n }\n\n return this.finishNode(node, "ReturnStatement");\n\n case _acorn.tokTypes._switch:\n var blockIndent = this.curIndent,\n line = this.curLineStart;\n this.next();\n node.discriminant = this.parseParenExpression();\n node.cases = [];\n this.pushCx();\n this.expect(_acorn.tokTypes.braceL);\n var cur;\n\n while (!this.closes(_acorn.tokTypes.braceR, blockIndent, line, true)) {\n if (this.tok.type === _acorn.tokTypes._case || this.tok.type === _acorn.tokTypes._default) {\n var isCase = this.tok.type === _acorn.tokTypes._case;\n\n if (cur) {\n this.finishNode(cur, "SwitchCase");\n }\n\n node.cases.push(cur = this.startNode());\n cur.consequent = [];\n this.next();\n\n if (isCase) {\n cur.test = this.parseExpression();\n } else {\n cur.test = null;\n }\n\n this.expect(_acorn.tokTypes.colon);\n } else {\n if (!cur) {\n node.cases.push(cur = this.startNode());\n cur.consequent = [];\n cur.test = null;\n }\n\n cur.consequent.push(this.parseStatement());\n }\n }\n\n if (cur) {\n this.finishNode(cur, "SwitchCase");\n }\n\n this.popCx();\n this.eat(_acorn.tokTypes.braceR);\n return this.finishNode(node, "SwitchStatement");\n\n case _acorn.tokTypes._throw:\n this.next();\n node.argument = this.parseExpression();\n this.semicolon();\n return this.finishNode(node, "ThrowStatement");\n\n case _acorn.tokTypes._try:\n this.next();\n node.block = this.parseBlock();\n node.handler = null;\n\n if (this.tok.type === _acorn.tokTypes._catch) {\n var clause = this.startNode();\n this.next();\n\n if (this.eat(_acorn.tokTypes.parenL)) {\n clause.param = this.toAssignable(this.parseExprAtom(), true);\n this.expect(_acorn.tokTypes.parenR);\n } else {\n clause.param = null;\n }\n\n clause.body = this.parseBlock();\n node.handler = this.finishNode(clause, "CatchClause");\n }\n\n node.finalizer = this.eat(_acorn.tokTypes._finally) ? this.parseBlock() : null;\n\n if (!node.handler && !node.finalizer) {\n return node.block;\n }\n\n return this.finishNode(node, "TryStatement");\n\n case _acorn.tokTypes._var:\n case _acorn.tokTypes._const:\n return this.parseVar(node, false, kind || this.tok.value);\n\n case _acorn.tokTypes._while:\n this.next();\n node.test = this.parseParenExpression();\n node.body = this.parseStatement();\n return this.finishNode(node, "WhileStatement");\n\n case _acorn.tokTypes._with:\n this.next();\n node.object = this.parseParenExpression();\n node.body = this.parseStatement();\n return this.finishNode(node, "WithStatement");\n\n case _acorn.tokTypes.braceL:\n return this.parseBlock();\n\n case _acorn.tokTypes.semi:\n this.next();\n return this.finishNode(node, "EmptyStatement");\n\n case _acorn.tokTypes._class:\n return this.parseClass(true);\n\n case _acorn.tokTypes._import:\n if (this.options.ecmaVersion > 10) {\n var nextType = this.lookAhead(1).type;\n\n if (nextType === _acorn.tokTypes.parenL || nextType === _acorn.tokTypes.dot) {\n node.expression = this.parseExpression();\n this.semicolon();\n return this.finishNode(node, "ExpressionStatement");\n }\n }\n\n return this.parseImport();\n\n case _acorn.tokTypes._export:\n return this.parseExport();\n\n default:\n if (this.toks.isAsyncFunction()) {\n this.next();\n this.next();\n return this.parseFunction(node, true, true);\n }\n\n var expr = this.parseExpression();\n\n if (isDummy(expr)) {\n this.next();\n\n if (this.tok.type === _acorn.tokTypes.eof) {\n return this.finishNode(node, "EmptyStatement");\n }\n\n return this.parseStatement();\n } else if (starttype === _acorn.tokTypes.name && expr.type === "Identifier" && this.eat(_acorn.tokTypes.colon)) {\n node.body = this.parseStatement();\n node.label = expr;\n return this.finishNode(node, "LabeledStatement");\n } else {\n node.expression = expr;\n this.semicolon();\n return this.finishNode(node, "ExpressionStatement");\n }\n\n }\n};\n\nlp$1.parseBlock = function () {\n var node = this.startNode();\n this.pushCx();\n this.expect(_acorn.tokTypes.braceL);\n var blockIndent = this.curIndent,\n line = this.curLineStart;\n node.body = [];\n\n while (!this.closes(_acorn.tokTypes.braceR, blockIndent, line, true)) {\n node.body.push(this.parseStatement());\n }\n\n this.popCx();\n this.eat(_acorn.tokTypes.braceR);\n return this.finishNode(node, "BlockStatement");\n};\n\nlp$1.parseFor = function (node, init) {\n node.init = init;\n node.test = node.update = null;\n\n if (this.eat(_acorn.tokTypes.semi) && this.tok.type !== _acorn.tokTypes.semi) {\n node.test = this.parseExpression();\n }\n\n if (this.eat(_acorn.tokTypes.semi) && this.tok.type !== _acorn.tokTypes.parenR) {\n node.update = this.parseExpression();\n }\n\n this.popCx();\n this.expect(_acorn.tokTypes.parenR);\n node.body = this.parseStatement();\n return this.finishNode(node, "ForStatement");\n};\n\nlp$1.parseForIn = function (node, init) {\n var type = this.tok.type === _acorn.tokTypes._in ? "ForInStatement" : "ForOfStatement";\n this.next();\n node.left = init;\n node.right = this.parseExpression();\n this.popCx();\n this.expect(_acorn.tokTypes.parenR);\n node.body = this.parseStatement();\n return this.finishNode(node, type);\n};\n\nlp$1.parseVar = function (node, noIn, kind) {\n node.kind = kind;\n this.next();\n node.declarations = [];\n\n do {\n var decl = this.startNode();\n decl.id = this.options.ecmaVersion >= 6 ? this.toAssignable(this.parseExprAtom(), true) : this.parseIdent();\n decl.init = this.eat(_acorn.tokTypes.eq) ? this.parseMaybeAssign(noIn) : null;\n node.declarations.push(this.finishNode(decl, "VariableDeclarator"));\n } while (this.eat(_acorn.tokTypes.comma));\n\n if (!node.declarations.length) {\n var decl$1 = this.startNode();\n decl$1.id = this.dummyIdent();\n node.declarations.push(this.finishNode(decl$1, "VariableDeclarator"));\n }\n\n if (!noIn) {\n this.semicolon();\n }\n\n return this.finishNode(node, "VariableDeclaration");\n};\n\nlp$1.parseClass = function (isStatement) {\n var node = this.startNode();\n this.next();\n\n if (this.tok.type === _acorn.tokTypes.name) {\n node.id = this.parseIdent();\n } else if (isStatement === true) {\n node.id = this.dummyIdent();\n } else {\n node.id = null;\n }\n\n node.superClass = this.eat(_acorn.tokTypes._extends) ? this.parseExpression() : null;\n node.body = this.startNode();\n node.body.body = [];\n this.pushCx();\n var indent = this.curIndent + 1,\n line = this.curLineStart;\n this.eat(_acorn.tokTypes.braceL);\n\n if (this.curIndent + 1 < indent) {\n indent = this.curIndent;\n line = this.curLineStart;\n }\n\n while (!this.closes(_acorn.tokTypes.braceR, indent, line)) {\n var element = this.parseClassElement();\n\n if (element) {\n node.body.body.push(element);\n }\n }\n\n this.popCx();\n\n if (!this.eat(_acorn.tokTypes.braceR)) {\n // If there is no closing brace, make the node span to the start\n // of the next token (this is useful for Tern)\n this.last.end = this.tok.start;\n\n if (this.options.locations) {\n this.last.loc.end = this.tok.loc.start;\n }\n }\n\n this.semicolon();\n this.finishNode(node.body, "ClassBody");\n return this.finishNode(node, isStatement ? "ClassDeclaration" : "ClassExpression");\n};\n\nlp$1.parseClassElement = function () {\n if (this.eat(_acorn.tokTypes.semi)) {\n return null;\n }\n\n var ref = this.options;\n var ecmaVersion = ref.ecmaVersion;\n var locations = ref.locations;\n var indent = this.curIndent;\n var line = this.curLineStart;\n var node = this.startNode();\n var keyName = "";\n var isGenerator = false;\n var isAsync = false;\n var kind = "method"; // Parse modifiers\n\n node.static = false;\n\n if (this.eatContextual("static")) {\n if (this.isClassElementNameStart() || this.toks.type === _acorn.tokTypes.star) {\n node.static = true;\n } else {\n keyName = "static";\n }\n }\n\n if (!keyName && ecmaVersion >= 8 && this.eatContextual("async")) {\n if ((this.isClassElementNameStart() || this.toks.type === _acorn.tokTypes.star) && !this.canInsertSemicolon()) {\n isAsync = true;\n } else {\n keyName = "async";\n }\n }\n\n if (!keyName) {\n isGenerator = this.eat(_acorn.tokTypes.star);\n var lastValue = this.toks.value;\n\n if (this.eatContextual("get") || this.eatContextual("set")) {\n if (this.isClassElementNameStart()) {\n kind = lastValue;\n } else {\n keyName = lastValue;\n }\n }\n } // Parse element name\n\n\n if (keyName) {\n // \'async\', \'get\', \'set\', or \'static\' were not a keyword contextually.\n // The last token is any of those. Make it the element name.\n node.computed = false;\n node.key = this.startNodeAt(locations ? [this.toks.lastTokStart, this.toks.lastTokStartLoc] : this.toks.lastTokStart);\n node.key.name = keyName;\n this.finishNode(node.key, "Identifier");\n } else {\n this.parseClassElementName(node); // From https://github.com/acornjs/acorn/blob/7deba41118d6384a2c498c61176b3cf434f69590/acorn-loose/src/statement.js#L291\n // Skip broken stuff.\n\n if (isDummy(node.key)) {\n if (isDummy(this.parseMaybeAssign())) {\n this.next();\n }\n\n this.eat(_acorn.tokTypes.comma);\n return null;\n }\n } // Parse element value\n\n\n if (ecmaVersion < 13 || this.toks.type === _acorn.tokTypes.parenL || kind !== "method" || isGenerator || isAsync) {\n // Method\n var isConstructor = !node.computed && !node.static && !isGenerator && !isAsync && kind === "method" && (node.key.type === "Identifier" && node.key.name === "constructor" || node.key.type === "Literal" && node.key.value === "constructor");\n node.kind = isConstructor ? "constructor" : kind;\n node.value = this.parseMethod(isGenerator, isAsync);\n this.finishNode(node, "MethodDefinition");\n } else {\n // Field\n if (this.eat(_acorn.tokTypes.eq)) {\n if (this.curLineStart !== line && this.curIndent <= indent && this.tokenStartsLine()) {\n // Estimated the next line is the next class element by indentations.\n node.value = null;\n } else {\n var oldInAsync = this.inAsync;\n var oldInGenerator = this.inGenerator;\n this.inAsync = false;\n this.inGenerator = false;\n node.value = this.parseMaybeAssign();\n this.inAsync = oldInAsync;\n this.inGenerator = oldInGenerator;\n }\n } else {\n node.value = null;\n }\n\n this.semicolon();\n this.finishNode(node, "PropertyDefinition");\n }\n\n return node;\n};\n\nlp$1.isClassElementNameStart = function () {\n return this.toks.isClassElementNameStart();\n};\n\nlp$1.parseClassElementName = function (element) {\n if (this.toks.type === _acorn.tokTypes.privateId) {\n element.computed = false;\n element.key = this.parsePrivateIdent();\n } else {\n this.parsePropertyName(element);\n }\n};\n\nlp$1.parseFunction = function (node, isStatement, isAsync) {\n var oldInAsync = this.inAsync,\n oldInGenerator = this.inGenerator,\n oldInFunction = this.inFunction;\n this.initFunction(node);\n\n if (this.options.ecmaVersion >= 6) {\n node.generator = this.eat(_acorn.tokTypes.star);\n }\n\n if (this.options.ecmaVersion >= 8) {\n node.async = !!isAsync;\n }\n\n if (this.tok.type === _acorn.tokTypes.name) {\n node.id = this.parseIdent();\n } else if (isStatement === true) {\n node.id = this.dummyIdent();\n }\n\n this.inAsync = node.async;\n this.inGenerator = node.generator;\n this.inFunction = true;\n node.params = this.parseFunctionParams();\n node.body = this.parseBlock();\n this.toks.adaptDirectivePrologue(node.body.body);\n this.inAsync = oldInAsync;\n this.inGenerator = oldInGenerator;\n this.inFunction = oldInFunction;\n return this.finishNode(node, isStatement ? "FunctionDeclaration" : "FunctionExpression");\n};\n\nlp$1.parseExport = function () {\n var node = this.startNode();\n this.next();\n\n if (this.eat(_acorn.tokTypes.star)) {\n if (this.options.ecmaVersion >= 11) {\n if (this.eatContextual("as")) {\n node.exported = this.parseExprAtom();\n } else {\n node.exported = null;\n }\n }\n\n node.source = this.eatContextual("from") ? this.parseExprAtom() : this.dummyString();\n return this.finishNode(node, "ExportAllDeclaration");\n }\n\n if (this.eat(_acorn.tokTypes._default)) {\n // export default (function foo() {}) // This is FunctionExpression.\n var isAsync;\n\n if (this.tok.type === _acorn.tokTypes._function || (isAsync = this.toks.isAsyncFunction())) {\n var fNode = this.startNode();\n this.next();\n\n if (isAsync) {\n this.next();\n }\n\n node.declaration = this.parseFunction(fNode, "nullableID", isAsync);\n } else if (this.tok.type === _acorn.tokTypes._class) {\n node.declaration = this.parseClass("nullableID");\n } else {\n node.declaration = this.parseMaybeAssign();\n this.semicolon();\n }\n\n return this.finishNode(node, "ExportDefaultDeclaration");\n }\n\n if (this.tok.type.keyword || this.toks.isLet() || this.toks.isAsyncFunction()) {\n node.declaration = this.parseStatement();\n node.specifiers = [];\n node.source = null;\n