123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883 |
- 'use strict';
- Object.defineProperty(exports, '__esModule', { value: true });
- var acorn = require('acorn');
- var jsx = require('acorn-jsx');
- var visitorKeys = require('eslint-visitor-keys');
- function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }
- function _interopNamespace(e) {
- if (e && e.__esModule) return e;
- var n = Object.create(null);
- if (e) {
- Object.keys(e).forEach(function (k) {
- if (k !== 'default') {
- var d = Object.getOwnPropertyDescriptor(e, k);
- Object.defineProperty(n, k, d.get ? d : {
- enumerable: true,
- get: function () { return e[k]; }
- });
- }
- });
- }
- n["default"] = e;
- return Object.freeze(n);
- }
- var acorn__namespace = _interopNamespace(acorn);
- var jsx__default = _interopDefaultLegacy(jsx);
- var visitorKeys__namespace = _interopNamespace(visitorKeys);
- const Token = {
- Boolean: "Boolean",
- EOF: "<end>",
- Identifier: "Identifier",
- PrivateIdentifier: "PrivateIdentifier",
- Keyword: "Keyword",
- Null: "Null",
- Numeric: "Numeric",
- Punctuator: "Punctuator",
- String: "String",
- RegularExpression: "RegularExpression",
- Template: "Template",
- JSXIdentifier: "JSXIdentifier",
- JSXText: "JSXText"
- };
- function convertTemplatePart(tokens, code) {
- const firstToken = tokens[0],
- lastTemplateToken = tokens[tokens.length - 1];
- const token = {
- type: Token.Template,
- value: code.slice(firstToken.start, lastTemplateToken.end)
- };
- if (firstToken.loc) {
- token.loc = {
- start: firstToken.loc.start,
- end: lastTemplateToken.loc.end
- };
- }
- if (firstToken.range) {
- token.start = firstToken.range[0];
- token.end = lastTemplateToken.range[1];
- token.range = [token.start, token.end];
- }
- return token;
- }
- function TokenTranslator(acornTokTypes, code) {
-
- this._acornTokTypes = acornTokTypes;
-
- this._tokens = [];
-
- this._curlyBrace = null;
-
- this._code = code;
- }
- TokenTranslator.prototype = {
- constructor: TokenTranslator,
-
- translate(token, extra) {
- const type = token.type,
- tt = this._acornTokTypes;
- if (type === tt.name) {
- token.type = Token.Identifier;
-
- if (token.value === "static") {
- token.type = Token.Keyword;
- }
- if (extra.ecmaVersion > 5 && (token.value === "yield" || token.value === "let")) {
- token.type = Token.Keyword;
- }
- } else if (type === tt.privateId) {
- token.type = Token.PrivateIdentifier;
- } else if (type === tt.semi || type === tt.comma ||
- type === tt.parenL || type === tt.parenR ||
- type === tt.braceL || type === tt.braceR ||
- type === tt.dot || type === tt.bracketL ||
- type === tt.colon || type === tt.question ||
- type === tt.bracketR || type === tt.ellipsis ||
- type === tt.arrow || type === tt.jsxTagStart ||
- type === tt.incDec || type === tt.starstar ||
- type === tt.jsxTagEnd || type === tt.prefix ||
- type === tt.questionDot ||
- (type.binop && !type.keyword) ||
- type.isAssign) {
- token.type = Token.Punctuator;
- token.value = this._code.slice(token.start, token.end);
- } else if (type === tt.jsxName) {
- token.type = Token.JSXIdentifier;
- } else if (type.label === "jsxText" || type === tt.jsxAttrValueToken) {
- token.type = Token.JSXText;
- } else if (type.keyword) {
- if (type.keyword === "true" || type.keyword === "false") {
- token.type = Token.Boolean;
- } else if (type.keyword === "null") {
- token.type = Token.Null;
- } else {
- token.type = Token.Keyword;
- }
- } else if (type === tt.num) {
- token.type = Token.Numeric;
- token.value = this._code.slice(token.start, token.end);
- } else if (type === tt.string) {
- if (extra.jsxAttrValueToken) {
- extra.jsxAttrValueToken = false;
- token.type = Token.JSXText;
- } else {
- token.type = Token.String;
- }
- token.value = this._code.slice(token.start, token.end);
- } else if (type === tt.regexp) {
- token.type = Token.RegularExpression;
- const value = token.value;
- token.regex = {
- flags: value.flags,
- pattern: value.pattern
- };
- token.value = `/${value.pattern}/${value.flags}`;
- }
- return token;
- },
-
- onToken(token, extra) {
- const tt = this._acornTokTypes,
- tokens = extra.tokens,
- templateTokens = this._tokens;
-
- const translateTemplateTokens = () => {
- tokens.push(convertTemplatePart(this._tokens, this._code));
- this._tokens = [];
- };
- if (token.type === tt.eof) {
-
- if (this._curlyBrace) {
- tokens.push(this.translate(this._curlyBrace, extra));
- }
- return;
- }
- if (token.type === tt.backQuote) {
-
- if (this._curlyBrace) {
- tokens.push(this.translate(this._curlyBrace, extra));
- this._curlyBrace = null;
- }
- templateTokens.push(token);
-
- if (templateTokens.length > 1) {
- translateTemplateTokens();
- }
- return;
- }
- if (token.type === tt.dollarBraceL) {
- templateTokens.push(token);
- translateTemplateTokens();
- return;
- }
- if (token.type === tt.braceR) {
-
- if (this._curlyBrace) {
- tokens.push(this.translate(this._curlyBrace, extra));
- }
-
- this._curlyBrace = token;
- return;
- }
- if (token.type === tt.template || token.type === tt.invalidTemplate) {
- if (this._curlyBrace) {
- templateTokens.push(this._curlyBrace);
- this._curlyBrace = null;
- }
- templateTokens.push(token);
- return;
- }
- if (this._curlyBrace) {
- tokens.push(this.translate(this._curlyBrace, extra));
- this._curlyBrace = null;
- }
- tokens.push(this.translate(token, extra));
- }
- };
- const SUPPORTED_VERSIONS = [
- 3,
- 5,
- 6,
- 7,
- 8,
- 9,
- 10,
- 11,
- 12,
- 13,
- 14,
- 15
- ];
- function getLatestEcmaVersion() {
- return SUPPORTED_VERSIONS[SUPPORTED_VERSIONS.length - 1];
- }
- function getSupportedEcmaVersions() {
- return [...SUPPORTED_VERSIONS];
- }
- function normalizeEcmaVersion(ecmaVersion = 5) {
- let version = ecmaVersion === "latest" ? getLatestEcmaVersion() : ecmaVersion;
- if (typeof version !== "number") {
- throw new Error(`ecmaVersion must be a number or "latest". Received value of type ${typeof ecmaVersion} instead.`);
- }
-
-
- if (version >= 2015) {
- version -= 2009;
- }
- if (!SUPPORTED_VERSIONS.includes(version)) {
- throw new Error("Invalid ecmaVersion.");
- }
- return version;
- }
- function normalizeSourceType(sourceType = "script") {
- if (sourceType === "script" || sourceType === "module") {
- return sourceType;
- }
- if (sourceType === "commonjs") {
- return "script";
- }
- throw new Error("Invalid sourceType.");
- }
- function normalizeOptions(options) {
- const ecmaVersion = normalizeEcmaVersion(options.ecmaVersion);
- const sourceType = normalizeSourceType(options.sourceType);
- const ranges = options.range === true;
- const locations = options.loc === true;
- if (ecmaVersion !== 3 && options.allowReserved) {
-
- throw new Error("`allowReserved` is only supported when ecmaVersion is 3");
- }
- if (typeof options.allowReserved !== "undefined" && typeof options.allowReserved !== "boolean") {
- throw new Error("`allowReserved`, when present, must be `true` or `false`");
- }
- const allowReserved = ecmaVersion === 3 ? (options.allowReserved || "never") : false;
- const ecmaFeatures = options.ecmaFeatures || {};
- const allowReturnOutsideFunction = options.sourceType === "commonjs" ||
- Boolean(ecmaFeatures.globalReturn);
- if (sourceType === "module" && ecmaVersion < 6) {
- throw new Error("sourceType 'module' is not supported when ecmaVersion < 2015. Consider adding `{ ecmaVersion: 2015 }` to the parser options.");
- }
- return Object.assign({}, options, {
- ecmaVersion,
- sourceType,
- ranges,
- locations,
- allowReserved,
- allowReturnOutsideFunction
- });
- }
- const STATE = Symbol("espree's internal state");
- const ESPRIMA_FINISH_NODE = Symbol("espree's esprimaFinishNode");
- function convertAcornCommentToEsprimaComment(block, text, start, end, startLoc, endLoc, code) {
- let type;
- if (block) {
- type = "Block";
- } else if (code.slice(start, start + 2) === "#!") {
- type = "Hashbang";
- } else {
- type = "Line";
- }
- const comment = {
- type,
- value: text
- };
- if (typeof start === "number") {
- comment.start = start;
- comment.end = end;
- comment.range = [start, end];
- }
- if (typeof startLoc === "object") {
- comment.loc = {
- start: startLoc,
- end: endLoc
- };
- }
- return comment;
- }
- var espree = () => Parser => {
- const tokTypes = Object.assign({}, Parser.acorn.tokTypes);
- if (Parser.acornJsx) {
- Object.assign(tokTypes, Parser.acornJsx.tokTypes);
- }
- return class Espree extends Parser {
- constructor(opts, code) {
- if (typeof opts !== "object" || opts === null) {
- opts = {};
- }
- if (typeof code !== "string" && !(code instanceof String)) {
- code = String(code);
- }
-
- const originalSourceType = opts.sourceType;
- const options = normalizeOptions(opts);
- const ecmaFeatures = options.ecmaFeatures || {};
- const tokenTranslator =
- options.tokens === true
- ? new TokenTranslator(tokTypes, code)
- : null;
-
- const state = {
- originalSourceType: originalSourceType || options.sourceType,
- tokens: tokenTranslator ? [] : null,
- comments: options.comment === true ? [] : null,
- impliedStrict: ecmaFeatures.impliedStrict === true && options.ecmaVersion >= 5,
- ecmaVersion: options.ecmaVersion,
- jsxAttrValueToken: false,
- lastToken: null,
- templateElements: []
- };
-
- super({
-
- ecmaVersion: options.ecmaVersion,
- sourceType: options.sourceType,
- ranges: options.ranges,
- locations: options.locations,
- allowReserved: options.allowReserved,
-
- allowReturnOutsideFunction: options.allowReturnOutsideFunction,
-
- onToken(token) {
- if (tokenTranslator) {
-
- tokenTranslator.onToken(token, state);
- }
- if (token.type !== tokTypes.eof) {
- state.lastToken = token;
- }
- },
-
- onComment(block, text, start, end, startLoc, endLoc) {
- if (state.comments) {
- const comment = convertAcornCommentToEsprimaComment(block, text, start, end, startLoc, endLoc, code);
- state.comments.push(comment);
- }
- }
- }, code);
-
- this[STATE] = state;
- }
- tokenize() {
- do {
- this.next();
- } while (this.type !== tokTypes.eof);
-
- this.next();
- const extra = this[STATE];
- const tokens = extra.tokens;
- if (extra.comments) {
- tokens.comments = extra.comments;
- }
- return tokens;
- }
- finishNode(...args) {
- const result = super.finishNode(...args);
- return this[ESPRIMA_FINISH_NODE](result);
- }
- finishNodeAt(...args) {
- const result = super.finishNodeAt(...args);
- return this[ESPRIMA_FINISH_NODE](result);
- }
- parse() {
- const extra = this[STATE];
- const program = super.parse();
- program.sourceType = extra.originalSourceType;
- if (extra.comments) {
- program.comments = extra.comments;
- }
- if (extra.tokens) {
- program.tokens = extra.tokens;
- }
-
- if (program.body.length) {
- const [firstNode] = program.body;
- if (program.range) {
- program.range[0] = firstNode.range[0];
- }
- if (program.loc) {
- program.loc.start = firstNode.loc.start;
- }
- program.start = firstNode.start;
- }
- if (extra.lastToken) {
- if (program.range) {
- program.range[1] = extra.lastToken.range[1];
- }
- if (program.loc) {
- program.loc.end = extra.lastToken.loc.end;
- }
- program.end = extra.lastToken.end;
- }
-
- this[STATE].templateElements.forEach(templateElement => {
- const startOffset = -1;
- const endOffset = templateElement.tail ? 1 : 2;
- templateElement.start += startOffset;
- templateElement.end += endOffset;
- if (templateElement.range) {
- templateElement.range[0] += startOffset;
- templateElement.range[1] += endOffset;
- }
- if (templateElement.loc) {
- templateElement.loc.start.column += startOffset;
- templateElement.loc.end.column += endOffset;
- }
- });
- return program;
- }
- parseTopLevel(node) {
- if (this[STATE].impliedStrict) {
- this.strict = true;
- }
- return super.parseTopLevel(node);
- }
-
- raise(pos, message) {
- const loc = Parser.acorn.getLineInfo(this.input, pos);
- const err = new SyntaxError(message);
- err.index = pos;
- err.lineNumber = loc.line;
- err.column = loc.column + 1;
- throw err;
- }
-
- raiseRecoverable(pos, message) {
- this.raise(pos, message);
- }
-
- unexpected(pos) {
- let message = "Unexpected token";
- if (pos !== null && pos !== void 0) {
- this.pos = pos;
- if (this.options.locations) {
- while (this.pos < this.lineStart) {
- this.lineStart = this.input.lastIndexOf("\n", this.lineStart - 2) + 1;
- --this.curLine;
- }
- }
- this.nextToken();
- }
- if (this.end > this.start) {
- message += ` ${this.input.slice(this.start, this.end)}`;
- }
- this.raise(this.start, message);
- }
-
- jsx_readString(quote) {
- const result = super.jsx_readString(quote);
- if (this.type === tokTypes.string) {
- this[STATE].jsxAttrValueToken = true;
- }
- return result;
- }
-
- [ESPRIMA_FINISH_NODE](result) {
-
-
- if (result.type === "TemplateElement") {
-
- this[STATE].templateElements.push(result);
- }
- if (result.type.includes("Function") && !result.generator) {
- result.generator = false;
- }
- return result;
- }
- };
- };
- const version$1 = "9.6.1";
- const parsers = {
- _regular: null,
- _jsx: null,
- get regular() {
- if (this._regular === null) {
- this._regular = acorn__namespace.Parser.extend(espree());
- }
- return this._regular;
- },
- get jsx() {
- if (this._jsx === null) {
- this._jsx = acorn__namespace.Parser.extend(jsx__default["default"](), espree());
- }
- return this._jsx;
- },
- get(options) {
- const useJsx = Boolean(
- options &&
- options.ecmaFeatures &&
- options.ecmaFeatures.jsx
- );
- return useJsx ? this.jsx : this.regular;
- }
- };
- function tokenize(code, options) {
- const Parser = parsers.get(options);
-
- if (!options || options.tokens !== true) {
- options = Object.assign({}, options, { tokens: true });
- }
- return new Parser(options, code).tokenize();
- }
- function parse(code, options) {
- const Parser = parsers.get(options);
- return new Parser(options, code).parse();
- }
- const version = version$1;
- const name = "espree";
- const VisitorKeys = (function() {
- return visitorKeys__namespace.KEYS;
- }());
- const Syntax = (function() {
- let key,
- types = {};
- if (typeof Object.create === "function") {
- types = Object.create(null);
- }
- for (key in VisitorKeys) {
- if (Object.hasOwnProperty.call(VisitorKeys, key)) {
- types[key] = key;
- }
- }
- if (typeof Object.freeze === "function") {
- Object.freeze(types);
- }
- return types;
- }());
- const latestEcmaVersion = getLatestEcmaVersion();
- const supportedEcmaVersions = getSupportedEcmaVersions();
- exports.Syntax = Syntax;
- exports.VisitorKeys = VisitorKeys;
- exports.latestEcmaVersion = latestEcmaVersion;
- exports.name = name;
- exports.parse = parse;
- exports.supportedEcmaVersions = supportedEcmaVersions;
- exports.tokenize = tokenize;
- exports.version = version;
|