storybook
Version:
Storybook: Develop, document, and test UI components in isolation
6,040 lines • 351 kB
JavaScript
import CJS_COMPAT_NODE_URL_at6j9ae2j2t from 'node:url';
import CJS_COMPAT_NODE_PATH_at6j9ae2j2t from 'node:path';
import CJS_COMPAT_NODE_MODULE_at6j9ae2j2t from "node:module";
var __filename = CJS_COMPAT_NODE_URL_at6j9ae2j2t.fileURLToPath(import.meta.url);
var __dirname = CJS_COMPAT_NODE_PATH_at6j9ae2j2t.dirname(__filename);
var require = CJS_COMPAT_NODE_MODULE_at6j9ae2j2t.createRequire(import.meta.url);
// ------------------------------------------------------------
// end of CJS compatibility banner, injected by Storybook's esbuild configuration
// ------------------------------------------------------------
import {
any,
invariant,
up2 as up
} from "./chunk-PFJRSBIJ.js";
import {
resolvePackageDir
} from "./chunk-O7UZQAUS.js";
import {
require_dist
} from "./chunk-SLZHVDN6.js";
import {
babelParse,
recast,
traverse,
types
} from "./chunk-N2XJQMXW.js";
import {
require_picocolors
} from "./chunk-LE232J7F.js";
import {
__commonJS,
__require,
__toESM
} from "./chunk-DRM3MJ7Y.js";
// ../node_modules/esprima/dist/esprima.js
var require_esprima = __commonJS({
"../node_modules/esprima/dist/esprima.js"(exports, module) {
(function(root, factory) {
typeof exports == "object" && typeof module == "object" ? module.exports = factory() : typeof define == "function" && define.amd ? define([], factory) : typeof exports == "object" ? exports.esprima = factory() : root.esprima = factory();
})(exports, function() {
return (
/******/
(function(modules) {
var installedModules = {};
function __webpack_require__(moduleId) {
if (installedModules[moduleId])
return installedModules[moduleId].exports;
var module2 = installedModules[moduleId] = {
/******/
exports: {},
/******/
id: moduleId,
/******/
loaded: !1
/******/
};
return modules[moduleId].call(module2.exports, module2, module2.exports, __webpack_require__), module2.loaded = !0, module2.exports;
}
return __webpack_require__.m = modules, __webpack_require__.c = installedModules, __webpack_require__.p = "", __webpack_require__(0);
})([
/* 0 */
/***/
function(module2, exports2, __webpack_require__) {
"use strict";
Object.defineProperty(exports2, "__esModule", { value: !0 });
var comment_handler_1 = __webpack_require__(1), jsx_parser_1 = __webpack_require__(3), parser_1 = __webpack_require__(8), tokenizer_1 = __webpack_require__(15);
function parse(code, options, delegate) {
var commentHandler = null, proxyDelegate = function(node, metadata) {
delegate && delegate(node, metadata), commentHandler && commentHandler.visit(node, metadata);
}, parserDelegate = typeof delegate == "function" ? proxyDelegate : null, collectComment = !1;
if (options) {
collectComment = typeof options.comment == "boolean" && options.comment;
var attachComment = typeof options.attachComment == "boolean" && options.attachComment;
(collectComment || attachComment) && (commentHandler = new comment_handler_1.CommentHandler(), commentHandler.attach = attachComment, options.comment = !0, parserDelegate = proxyDelegate);
}
var isModule = !1;
options && typeof options.sourceType == "string" && (isModule = options.sourceType === "module");
var parser;
options && typeof options.jsx == "boolean" && options.jsx ? parser = new jsx_parser_1.JSXParser(code, options, parserDelegate) : parser = new parser_1.Parser(code, options, parserDelegate);
var program = isModule ? parser.parseModule() : parser.parseScript(), ast = program;
return collectComment && commentHandler && (ast.comments = commentHandler.comments), parser.config.tokens && (ast.tokens = parser.tokens), parser.config.tolerant && (ast.errors = parser.errorHandler.errors), ast;
}
exports2.parse = parse;
function parseModule(code, options, delegate) {
var parsingOptions = options || {};
return parsingOptions.sourceType = "module", parse(code, parsingOptions, delegate);
}
exports2.parseModule = parseModule;
function parseScript(code, options, delegate) {
var parsingOptions = options || {};
return parsingOptions.sourceType = "script", parse(code, parsingOptions, delegate);
}
exports2.parseScript = parseScript;
function tokenize(code, options, delegate) {
var tokenizer = new tokenizer_1.Tokenizer(code, options), tokens;
tokens = [];
try {
for (; ; ) {
var token = tokenizer.getNextToken();
if (!token)
break;
delegate && (token = delegate(token)), tokens.push(token);
}
} catch (e) {
tokenizer.errorHandler.tolerate(e);
}
return tokenizer.errorHandler.tolerant && (tokens.errors = tokenizer.errors()), tokens;
}
exports2.tokenize = tokenize;
var syntax_1 = __webpack_require__(2);
exports2.Syntax = syntax_1.Syntax, exports2.version = "4.0.1";
},
/* 1 */
/***/
function(module2, exports2, __webpack_require__) {
"use strict";
Object.defineProperty(exports2, "__esModule", { value: !0 });
var syntax_1 = __webpack_require__(2), CommentHandler = (function() {
function CommentHandler2() {
this.attach = !1, this.comments = [], this.stack = [], this.leading = [], this.trailing = [];
}
return CommentHandler2.prototype.insertInnerComments = function(node, metadata) {
if (node.type === syntax_1.Syntax.BlockStatement && node.body.length === 0) {
for (var innerComments = [], i = this.leading.length - 1; i >= 0; --i) {
var entry = this.leading[i];
metadata.end.offset >= entry.start && (innerComments.unshift(entry.comment), this.leading.splice(i, 1), this.trailing.splice(i, 1));
}
innerComments.length && (node.innerComments = innerComments);
}
}, CommentHandler2.prototype.findTrailingComments = function(metadata) {
var trailingComments = [];
if (this.trailing.length > 0) {
for (var i = this.trailing.length - 1; i >= 0; --i) {
var entry_1 = this.trailing[i];
entry_1.start >= metadata.end.offset && trailingComments.unshift(entry_1.comment);
}
return this.trailing.length = 0, trailingComments;
}
var entry = this.stack[this.stack.length - 1];
if (entry && entry.node.trailingComments) {
var firstComment = entry.node.trailingComments[0];
firstComment && firstComment.range[0] >= metadata.end.offset && (trailingComments = entry.node.trailingComments, delete entry.node.trailingComments);
}
return trailingComments;
}, CommentHandler2.prototype.findLeadingComments = function(metadata) {
for (var leadingComments = [], target; this.stack.length > 0; ) {
var entry = this.stack[this.stack.length - 1];
if (entry && entry.start >= metadata.start.offset)
target = entry.node, this.stack.pop();
else
break;
}
if (target) {
for (var count = target.leadingComments ? target.leadingComments.length : 0, i = count - 1; i >= 0; --i) {
var comment = target.leadingComments[i];
comment.range[1] <= metadata.start.offset && (leadingComments.unshift(comment), target.leadingComments.splice(i, 1));
}
return target.leadingComments && target.leadingComments.length === 0 && delete target.leadingComments, leadingComments;
}
for (var i = this.leading.length - 1; i >= 0; --i) {
var entry = this.leading[i];
entry.start <= metadata.start.offset && (leadingComments.unshift(entry.comment), this.leading.splice(i, 1));
}
return leadingComments;
}, CommentHandler2.prototype.visitNode = function(node, metadata) {
if (!(node.type === syntax_1.Syntax.Program && node.body.length > 0)) {
this.insertInnerComments(node, metadata);
var trailingComments = this.findTrailingComments(metadata), leadingComments = this.findLeadingComments(metadata);
leadingComments.length > 0 && (node.leadingComments = leadingComments), trailingComments.length > 0 && (node.trailingComments = trailingComments), this.stack.push({
node,
start: metadata.start.offset
});
}
}, CommentHandler2.prototype.visitComment = function(node, metadata) {
var type = node.type[0] === "L" ? "Line" : "Block", comment = {
type,
value: node.value
};
if (node.range && (comment.range = node.range), node.loc && (comment.loc = node.loc), this.comments.push(comment), this.attach) {
var entry = {
comment: {
type,
value: node.value,
range: [metadata.start.offset, metadata.end.offset]
},
start: metadata.start.offset
};
node.loc && (entry.comment.loc = node.loc), node.type = type, this.leading.push(entry), this.trailing.push(entry);
}
}, CommentHandler2.prototype.visit = function(node, metadata) {
node.type === "LineComment" ? this.visitComment(node, metadata) : node.type === "BlockComment" ? this.visitComment(node, metadata) : this.attach && this.visitNode(node, metadata);
}, CommentHandler2;
})();
exports2.CommentHandler = CommentHandler;
},
/* 2 */
/***/
function(module2, exports2) {
"use strict";
Object.defineProperty(exports2, "__esModule", { value: !0 }), exports2.Syntax = {
AssignmentExpression: "AssignmentExpression",
AssignmentPattern: "AssignmentPattern",
ArrayExpression: "ArrayExpression",
ArrayPattern: "ArrayPattern",
ArrowFunctionExpression: "ArrowFunctionExpression",
AwaitExpression: "AwaitExpression",
BlockStatement: "BlockStatement",
BinaryExpression: "BinaryExpression",
BreakStatement: "BreakStatement",
CallExpression: "CallExpression",
CatchClause: "CatchClause",
ClassBody: "ClassBody",
ClassDeclaration: "ClassDeclaration",
ClassExpression: "ClassExpression",
ConditionalExpression: "ConditionalExpression",
ContinueStatement: "ContinueStatement",
DoWhileStatement: "DoWhileStatement",
DebuggerStatement: "DebuggerStatement",
EmptyStatement: "EmptyStatement",
ExportAllDeclaration: "ExportAllDeclaration",
ExportDefaultDeclaration: "ExportDefaultDeclaration",
ExportNamedDeclaration: "ExportNamedDeclaration",
ExportSpecifier: "ExportSpecifier",
ExpressionStatement: "ExpressionStatement",
ForStatement: "ForStatement",
ForOfStatement: "ForOfStatement",
ForInStatement: "ForInStatement",
FunctionDeclaration: "FunctionDeclaration",
FunctionExpression: "FunctionExpression",
Identifier: "Identifier",
IfStatement: "IfStatement",
ImportDeclaration: "ImportDeclaration",
ImportDefaultSpecifier: "ImportDefaultSpecifier",
ImportNamespaceSpecifier: "ImportNamespaceSpecifier",
ImportSpecifier: "ImportSpecifier",
Literal: "Literal",
LabeledStatement: "LabeledStatement",
LogicalExpression: "LogicalExpression",
MemberExpression: "MemberExpression",
MetaProperty: "MetaProperty",
MethodDefinition: "MethodDefinition",
NewExpression: "NewExpression",
ObjectExpression: "ObjectExpression",
ObjectPattern: "ObjectPattern",
Program: "Program",
Property: "Property",
RestElement: "RestElement",
ReturnStatement: "ReturnStatement",
SequenceExpression: "SequenceExpression",
SpreadElement: "SpreadElement",
Super: "Super",
SwitchCase: "SwitchCase",
SwitchStatement: "SwitchStatement",
TaggedTemplateExpression: "TaggedTemplateExpression",
TemplateElement: "TemplateElement",
TemplateLiteral: "TemplateLiteral",
ThisExpression: "ThisExpression",
ThrowStatement: "ThrowStatement",
TryStatement: "TryStatement",
UnaryExpression: "UnaryExpression",
UpdateExpression: "UpdateExpression",
VariableDeclaration: "VariableDeclaration",
VariableDeclarator: "VariableDeclarator",
WhileStatement: "WhileStatement",
WithStatement: "WithStatement",
YieldExpression: "YieldExpression"
};
},
/* 3 */
/***/
function(module2, exports2, __webpack_require__) {
"use strict";
var __extends = this && this.__extends || (function() {
var extendStatics = Object.setPrototypeOf || { __proto__: [] } instanceof Array && function(d, b) {
d.__proto__ = b;
} || function(d, b) {
for (var p in b) b.hasOwnProperty(p) && (d[p] = b[p]);
};
return function(d, b) {
extendStatics(d, b);
function __() {
this.constructor = d;
}
d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
};
})();
Object.defineProperty(exports2, "__esModule", { value: !0 });
var character_1 = __webpack_require__(4), JSXNode = __webpack_require__(5), jsx_syntax_1 = __webpack_require__(6), Node = __webpack_require__(7), parser_1 = __webpack_require__(8), token_1 = __webpack_require__(13), xhtml_entities_1 = __webpack_require__(14);
token_1.TokenName[
100
/* Identifier */
] = "JSXIdentifier", token_1.TokenName[
101
/* Text */
] = "JSXText";
function getQualifiedElementName(elementName) {
var qualifiedName;
switch (elementName.type) {
case jsx_syntax_1.JSXSyntax.JSXIdentifier:
var id = elementName;
qualifiedName = id.name;
break;
case jsx_syntax_1.JSXSyntax.JSXNamespacedName:
var ns = elementName;
qualifiedName = getQualifiedElementName(ns.namespace) + ":" + getQualifiedElementName(ns.name);
break;
case jsx_syntax_1.JSXSyntax.JSXMemberExpression:
var expr = elementName;
qualifiedName = getQualifiedElementName(expr.object) + "." + getQualifiedElementName(expr.property);
break;
/* istanbul ignore next */
default:
break;
}
return qualifiedName;
}
var JSXParser = (function(_super) {
__extends(JSXParser2, _super);
function JSXParser2(code, options, delegate) {
return _super.call(this, code, options, delegate) || this;
}
return JSXParser2.prototype.parsePrimaryExpression = function() {
return this.match("<") ? this.parseJSXRoot() : _super.prototype.parsePrimaryExpression.call(this);
}, JSXParser2.prototype.startJSX = function() {
this.scanner.index = this.startMarker.index, this.scanner.lineNumber = this.startMarker.line, this.scanner.lineStart = this.startMarker.index - this.startMarker.column;
}, JSXParser2.prototype.finishJSX = function() {
this.nextToken();
}, JSXParser2.prototype.reenterJSX = function() {
this.startJSX(), this.expectJSX("}"), this.config.tokens && this.tokens.pop();
}, JSXParser2.prototype.createJSXNode = function() {
return this.collectComments(), {
index: this.scanner.index,
line: this.scanner.lineNumber,
column: this.scanner.index - this.scanner.lineStart
};
}, JSXParser2.prototype.createJSXChildNode = function() {
return {
index: this.scanner.index,
line: this.scanner.lineNumber,
column: this.scanner.index - this.scanner.lineStart
};
}, JSXParser2.prototype.scanXHTMLEntity = function(quote) {
for (var result = "&", valid = !0, terminated = !1, numeric = !1, hex = !1; !this.scanner.eof() && valid && !terminated; ) {
var ch = this.scanner.source[this.scanner.index];
if (ch === quote)
break;
if (terminated = ch === ";", result += ch, ++this.scanner.index, !terminated)
switch (result.length) {
case 2:
numeric = ch === "#";
break;
case 3:
numeric && (hex = ch === "x", valid = hex || character_1.Character.isDecimalDigit(ch.charCodeAt(0)), numeric = numeric && !hex);
break;
default:
valid = valid && !(numeric && !character_1.Character.isDecimalDigit(ch.charCodeAt(0))), valid = valid && !(hex && !character_1.Character.isHexDigit(ch.charCodeAt(0)));
break;
}
}
if (valid && terminated && result.length > 2) {
var str = result.substr(1, result.length - 2);
numeric && str.length > 1 ? result = String.fromCharCode(parseInt(str.substr(1), 10)) : hex && str.length > 2 ? result = String.fromCharCode(parseInt("0" + str.substr(1), 16)) : !numeric && !hex && xhtml_entities_1.XHTMLEntities[str] && (result = xhtml_entities_1.XHTMLEntities[str]);
}
return result;
}, JSXParser2.prototype.lexJSX = function() {
var cp2 = this.scanner.source.charCodeAt(this.scanner.index);
if (cp2 === 60 || cp2 === 62 || cp2 === 47 || cp2 === 58 || cp2 === 61 || cp2 === 123 || cp2 === 125) {
var value = this.scanner.source[this.scanner.index++];
return {
type: 7,
value,
lineNumber: this.scanner.lineNumber,
lineStart: this.scanner.lineStart,
start: this.scanner.index - 1,
end: this.scanner.index
};
}
if (cp2 === 34 || cp2 === 39) {
for (var start = this.scanner.index, quote = this.scanner.source[this.scanner.index++], str = ""; !this.scanner.eof(); ) {
var ch = this.scanner.source[this.scanner.index++];
if (ch === quote)
break;
ch === "&" ? str += this.scanXHTMLEntity(quote) : str += ch;
}
return {
type: 8,
value: str,
lineNumber: this.scanner.lineNumber,
lineStart: this.scanner.lineStart,
start,
end: this.scanner.index
};
}
if (cp2 === 46) {
var n1 = this.scanner.source.charCodeAt(this.scanner.index + 1), n2 = this.scanner.source.charCodeAt(this.scanner.index + 2), value = n1 === 46 && n2 === 46 ? "..." : ".", start = this.scanner.index;
return this.scanner.index += value.length, {
type: 7,
value,
lineNumber: this.scanner.lineNumber,
lineStart: this.scanner.lineStart,
start,
end: this.scanner.index
};
}
if (cp2 === 96)
return {
type: 10,
value: "",
lineNumber: this.scanner.lineNumber,
lineStart: this.scanner.lineStart,
start: this.scanner.index,
end: this.scanner.index
};
if (character_1.Character.isIdentifierStart(cp2) && cp2 !== 92) {
var start = this.scanner.index;
for (++this.scanner.index; !this.scanner.eof(); ) {
var ch = this.scanner.source.charCodeAt(this.scanner.index);
if (character_1.Character.isIdentifierPart(ch) && ch !== 92)
++this.scanner.index;
else if (ch === 45)
++this.scanner.index;
else
break;
}
var id = this.scanner.source.slice(start, this.scanner.index);
return {
type: 100,
value: id,
lineNumber: this.scanner.lineNumber,
lineStart: this.scanner.lineStart,
start,
end: this.scanner.index
};
}
return this.scanner.lex();
}, JSXParser2.prototype.nextJSXToken = function() {
this.collectComments(), this.startMarker.index = this.scanner.index, this.startMarker.line = this.scanner.lineNumber, this.startMarker.column = this.scanner.index - this.scanner.lineStart;
var token = this.lexJSX();
return this.lastMarker.index = this.scanner.index, this.lastMarker.line = this.scanner.lineNumber, this.lastMarker.column = this.scanner.index - this.scanner.lineStart, this.config.tokens && this.tokens.push(this.convertToken(token)), token;
}, JSXParser2.prototype.nextJSXText = function() {
this.startMarker.index = this.scanner.index, this.startMarker.line = this.scanner.lineNumber, this.startMarker.column = this.scanner.index - this.scanner.lineStart;
for (var start = this.scanner.index, text = ""; !this.scanner.eof(); ) {
var ch = this.scanner.source[this.scanner.index];
if (ch === "{" || ch === "<")
break;
++this.scanner.index, text += ch, character_1.Character.isLineTerminator(ch.charCodeAt(0)) && (++this.scanner.lineNumber, ch === "\r" && this.scanner.source[this.scanner.index] === `
` && ++this.scanner.index, this.scanner.lineStart = this.scanner.index);
}
this.lastMarker.index = this.scanner.index, this.lastMarker.line = this.scanner.lineNumber, this.lastMarker.column = this.scanner.index - this.scanner.lineStart;
var token = {
type: 101,
value: text,
lineNumber: this.scanner.lineNumber,
lineStart: this.scanner.lineStart,
start,
end: this.scanner.index
};
return text.length > 0 && this.config.tokens && this.tokens.push(this.convertToken(token)), token;
}, JSXParser2.prototype.peekJSXToken = function() {
var state = this.scanner.saveState();
this.scanner.scanComments();
var next = this.lexJSX();
return this.scanner.restoreState(state), next;
}, JSXParser2.prototype.expectJSX = function(value) {
var token = this.nextJSXToken();
(token.type !== 7 || token.value !== value) && this.throwUnexpectedToken(token);
}, JSXParser2.prototype.matchJSX = function(value) {
var next = this.peekJSXToken();
return next.type === 7 && next.value === value;
}, JSXParser2.prototype.parseJSXIdentifier = function() {
var node = this.createJSXNode(), token = this.nextJSXToken();
return token.type !== 100 && this.throwUnexpectedToken(token), this.finalize(node, new JSXNode.JSXIdentifier(token.value));
}, JSXParser2.prototype.parseJSXElementName = function() {
var node = this.createJSXNode(), elementName = this.parseJSXIdentifier();
if (this.matchJSX(":")) {
var namespace = elementName;
this.expectJSX(":");
var name_1 = this.parseJSXIdentifier();
elementName = this.finalize(node, new JSXNode.JSXNamespacedName(namespace, name_1));
} else if (this.matchJSX("."))
for (; this.matchJSX("."); ) {
var object = elementName;
this.expectJSX(".");
var property = this.parseJSXIdentifier();
elementName = this.finalize(node, new JSXNode.JSXMemberExpression(object, property));
}
return elementName;
}, JSXParser2.prototype.parseJSXAttributeName = function() {
var node = this.createJSXNode(), attributeName, identifier = this.parseJSXIdentifier();
if (this.matchJSX(":")) {
var namespace = identifier;
this.expectJSX(":");
var name_2 = this.parseJSXIdentifier();
attributeName = this.finalize(node, new JSXNode.JSXNamespacedName(namespace, name_2));
} else
attributeName = identifier;
return attributeName;
}, JSXParser2.prototype.parseJSXStringLiteralAttribute = function() {
var node = this.createJSXNode(), token = this.nextJSXToken();
token.type !== 8 && this.throwUnexpectedToken(token);
var raw = this.getTokenRaw(token);
return this.finalize(node, new Node.Literal(token.value, raw));
}, JSXParser2.prototype.parseJSXExpressionAttribute = function() {
var node = this.createJSXNode();
this.expectJSX("{"), this.finishJSX(), this.match("}") && this.tolerateError("JSX attributes must only be assigned a non-empty expression");
var expression = this.parseAssignmentExpression();
return this.reenterJSX(), this.finalize(node, new JSXNode.JSXExpressionContainer(expression));
}, JSXParser2.prototype.parseJSXAttributeValue = function() {
return this.matchJSX("{") ? this.parseJSXExpressionAttribute() : this.matchJSX("<") ? this.parseJSXElement() : this.parseJSXStringLiteralAttribute();
}, JSXParser2.prototype.parseJSXNameValueAttribute = function() {
var node = this.createJSXNode(), name = this.parseJSXAttributeName(), value = null;
return this.matchJSX("=") && (this.expectJSX("="), value = this.parseJSXAttributeValue()), this.finalize(node, new JSXNode.JSXAttribute(name, value));
}, JSXParser2.prototype.parseJSXSpreadAttribute = function() {
var node = this.createJSXNode();
this.expectJSX("{"), this.expectJSX("..."), this.finishJSX();
var argument = this.parseAssignmentExpression();
return this.reenterJSX(), this.finalize(node, new JSXNode.JSXSpreadAttribute(argument));
}, JSXParser2.prototype.parseJSXAttributes = function() {
for (var attributes = []; !this.matchJSX("/") && !this.matchJSX(">"); ) {
var attribute = this.matchJSX("{") ? this.parseJSXSpreadAttribute() : this.parseJSXNameValueAttribute();
attributes.push(attribute);
}
return attributes;
}, JSXParser2.prototype.parseJSXOpeningElement = function() {
var node = this.createJSXNode();
this.expectJSX("<");
var name = this.parseJSXElementName(), attributes = this.parseJSXAttributes(), selfClosing = this.matchJSX("/");
return selfClosing && this.expectJSX("/"), this.expectJSX(">"), this.finalize(node, new JSXNode.JSXOpeningElement(name, selfClosing, attributes));
}, JSXParser2.prototype.parseJSXBoundaryElement = function() {
var node = this.createJSXNode();
if (this.expectJSX("<"), this.matchJSX("/")) {
this.expectJSX("/");
var name_3 = this.parseJSXElementName();
return this.expectJSX(">"), this.finalize(node, new JSXNode.JSXClosingElement(name_3));
}
var name = this.parseJSXElementName(), attributes = this.parseJSXAttributes(), selfClosing = this.matchJSX("/");
return selfClosing && this.expectJSX("/"), this.expectJSX(">"), this.finalize(node, new JSXNode.JSXOpeningElement(name, selfClosing, attributes));
}, JSXParser2.prototype.parseJSXEmptyExpression = function() {
var node = this.createJSXChildNode();
return this.collectComments(), this.lastMarker.index = this.scanner.index, this.lastMarker.line = this.scanner.lineNumber, this.lastMarker.column = this.scanner.index - this.scanner.lineStart, this.finalize(node, new JSXNode.JSXEmptyExpression());
}, JSXParser2.prototype.parseJSXExpressionContainer = function() {
var node = this.createJSXNode();
this.expectJSX("{");
var expression;
return this.matchJSX("}") ? (expression = this.parseJSXEmptyExpression(), this.expectJSX("}")) : (this.finishJSX(), expression = this.parseAssignmentExpression(), this.reenterJSX()), this.finalize(node, new JSXNode.JSXExpressionContainer(expression));
}, JSXParser2.prototype.parseJSXChildren = function() {
for (var children = []; !this.scanner.eof(); ) {
var node = this.createJSXChildNode(), token = this.nextJSXText();
if (token.start < token.end) {
var raw = this.getTokenRaw(token), child = this.finalize(node, new JSXNode.JSXText(token.value, raw));
children.push(child);
}
if (this.scanner.source[this.scanner.index] === "{") {
var container = this.parseJSXExpressionContainer();
children.push(container);
} else
break;
}
return children;
}, JSXParser2.prototype.parseComplexJSXElement = function(el) {
for (var stack = []; !this.scanner.eof(); ) {
el.children = el.children.concat(this.parseJSXChildren());
var node = this.createJSXChildNode(), element = this.parseJSXBoundaryElement();
if (element.type === jsx_syntax_1.JSXSyntax.JSXOpeningElement) {
var opening = element;
if (opening.selfClosing) {
var child = this.finalize(node, new JSXNode.JSXElement(opening, [], null));
el.children.push(child);
} else
stack.push(el), el = { node, opening, closing: null, children: [] };
}
if (element.type === jsx_syntax_1.JSXSyntax.JSXClosingElement) {
el.closing = element;
var open_1 = getQualifiedElementName(el.opening.name), close_1 = getQualifiedElementName(el.closing.name);
if (open_1 !== close_1 && this.tolerateError("Expected corresponding JSX closing tag for %0", open_1), stack.length > 0) {
var child = this.finalize(el.node, new JSXNode.JSXElement(el.opening, el.children, el.closing));
el = stack[stack.length - 1], el.children.push(child), stack.pop();
} else
break;
}
}
return el;
}, JSXParser2.prototype.parseJSXElement = function() {
var node = this.createJSXNode(), opening = this.parseJSXOpeningElement(), children = [], closing = null;
if (!opening.selfClosing) {
var el = this.parseComplexJSXElement({ node, opening, closing, children });
children = el.children, closing = el.closing;
}
return this.finalize(node, new JSXNode.JSXElement(opening, children, closing));
}, JSXParser2.prototype.parseJSXRoot = function() {
this.config.tokens && this.tokens.pop(), this.startJSX();
var element = this.parseJSXElement();
return this.finishJSX(), element;
}, JSXParser2.prototype.isStartOfExpression = function() {
return _super.prototype.isStartOfExpression.call(this) || this.match("<");
}, JSXParser2;
})(parser_1.Parser);
exports2.JSXParser = JSXParser;
},
/* 4 */
/***/
function(module2, exports2) {
"use strict";
Object.defineProperty(exports2, "__esModule", { value: !0 });
var Regex = {
// Unicode v8.0.0 NonAsciiIdentifierStart:
NonAsciiIdentifierStart: /[\xAA\xB5\xBA\xC0-\xD6\xD8-\xF6\xF8-\u02C1\u02C6-\u02D1\u02E0-\u02E4\u02EC\u02EE\u0370-\u0374\u0376\u0377\u037A-\u037D\u037F\u0386\u0388-\u038A\u038C\u038E-\u03A1\u03A3-\u03F5\u03F7-\u0481\u048A-\u052F\u0531-\u0556\u0559\u0561-\u0587\u05D0-\u05EA\u05F0-\u05F2\u0620-\u064A\u066E\u066F\u0671-\u06D3\u06D5\u06E5\u06E6\u06EE\u06EF\u06FA-\u06FC\u06FF\u0710\u0712-\u072F\u074D-\u07A5\u07B1\u07CA-\u07EA\u07F4\u07F5\u07FA\u0800-\u0815\u081A\u0824\u0828\u0840-\u0858\u08A0-\u08B4\u0904-\u0939\u093D\u0950\u0958-\u0961\u0971-\u0980\u0985-\u098C\u098F\u0990\u0993-\u09A8\u09AA-\u09B0\u09B2\u09B6-\u09B9\u09BD\u09CE\u09DC\u09DD\u09DF-\u09E1\u09F0\u09F1\u0A05-\u0A0A\u0A0F\u0A10\u0A13-\u0A28\u0A2A-\u0A30\u0A32\u0A33\u0A35\u0A36\u0A38\u0A39\u0A59-\u0A5C\u0A5E\u0A72-\u0A74\u0A85-\u0A8D\u0A8F-\u0A91\u0A93-\u0AA8\u0AAA-\u0AB0\u0AB2\u0AB3\u0AB5-\u0AB9\u0ABD\u0AD0\u0AE0\u0AE1\u0AF9\u0B05-\u0B0C\u0B0F\u0B10\u0B13-\u0B28\u0B2A-\u0B30\u0B32\u0B33\u0B35-\u0B39\u0B3D\u0B5C\u0B5D\u0B5F-\u0B61\u0B71\u0B83\u0B85-\u0B8A\u0B8E-\u0B90\u0B92-\u0B95\u0B99\u0B9A\u0B9C\u0B9E\u0B9F\u0BA3\u0BA4\u0BA8-\u0BAA\u0BAE-\u0BB9\u0BD0\u0C05-\u0C0C\u0C0E-\u0C10\u0C12-\u0C28\u0C2A-\u0C39\u0C3D\u0C58-\u0C5A\u0C60\u0C61\u0C85-\u0C8C\u0C8E-\u0C90\u0C92-\u0CA8\u0CAA-\u0CB3\u0CB5-\u0CB9\u0CBD\u0CDE\u0CE0\u0CE1\u0CF1\u0CF2\u0D05-\u0D0C\u0D0E-\u0D10\u0D12-\u0D3A\u0D3D\u0D4E\u0D5F-\u0D61\u0D7A-\u0D7F\u0D85-\u0D96\u0D9A-\u0DB1\u0DB3-\u0DBB\u0DBD\u0DC0-\u0DC6\u0E01-\u0E30\u0E32\u0E33\u0E40-\u0E46\u0E81\u0E82\u0E84\u0E87\u0E88\u0E8A\u0E8D\u0E94-\u0E97\u0E99-\u0E9F\u0EA1-\u0EA3\u0EA5\u0EA7\u0EAA\u0EAB\u0EAD-\u0EB0\u0EB2\u0EB3\u0EBD\u0EC0-\u0EC4\u0EC6\u0EDC-\u0EDF\u0F00\u0F40-\u0F47\u0F49-\u0F6C\u0F88-\u0F8C\u1000-\u102A\u103F\u1050-\u1055\u105A-\u105D\u1061\u1065\u1066\u106E-\u1070\u1075-\u1081\u108E\u10A0-\u10C5\u10C7\u10CD\u10D0-\u10FA\u10FC-\u1248\u124A-\u124D\u1250-\u1256\u1258\u125A-\u125D\u1260-\u1288\u128A-\u128D\u1290-\u12B0\u12B2-\u12B5\u12B8-\u12BE\u12C0\u12C2-\u12C5\u12C8-\u12D6\u12D8-\u1310\u1312-\u1315\u1318-\u135A\u1380-\u138F\u13A0-\u13F5\u13F8-\u13FD\u1401-\u166C\u166F-\u167F\u1681-\u169A\u16A0-\u16EA\u16EE-\u16F8\u1700-\u170C\u170E-\u1711\u1720-\u1731\u1740-\u1751\u1760-\u176C\u176E-\u1770\u1780-\u17B3\u17D7\u17DC\u1820-\u1877\u1880-\u18A8\u18AA\u18B0-\u18F5\u1900-\u191E\u1950-\u196D\u1970-\u1974\u1980-\u19AB\u19B0-\u19C9\u1A00-\u1A16\u1A20-\u1A54\u1AA7\u1B05-\u1B33\u1B45-\u1B4B\u1B83-\u1BA0\u1BAE\u1BAF\u1BBA-\u1BE5\u1C00-\u1C23\u1C4D-\u1C4F\u1C5A-\u1C7D\u1CE9-\u1CEC\u1CEE-\u1CF1\u1CF5\u1CF6\u1D00-\u1DBF\u1E00-\u1F15\u1F18-\u1F1D\u1F20-\u1F45\u1F48-\u1F4D\u1F50-\u1F57\u1F59\u1F5B\u1F5D\u1F5F-\u1F7D\u1F80-\u1FB4\u1FB6-\u1FBC\u1FBE\u1FC2-\u1FC4\u1FC6-\u1FCC\u1FD0-\u1FD3\u1FD6-\u1FDB\u1FE0-\u1FEC\u1FF2-\u1FF4\u1FF6-\u1FFC\u2071\u207F\u2090-\u209C\u2102\u2107\u210A-\u2113\u2115\u2118-\u211D\u2124\u2126\u2128\u212A-\u2139\u213C-\u213F\u2145-\u2149\u214E\u2160-\u2188\u2C00-\u2C2E\u2C30-\u2C5E\u2C60-\u2CE4\u2CEB-\u2CEE\u2CF2\u2CF3\u2D00-\u2D25\u2D27\u2D2D\u2D30-\u2D67\u2D6F\u2D80-\u2D96\u2DA0-\u2DA6\u2DA8-\u2DAE\u2DB0-\u2DB6\u2DB8-\u2DBE\u2DC0-\u2DC6\u2DC8-\u2DCE\u2DD0-\u2DD6\u2DD8-\u2DDE\u3005-\u3007\u3021-\u3029\u3031-\u3035\u3038-\u303C\u3041-\u3096\u309B-\u309F\u30A1-\u30FA\u30FC-\u30FF\u3105-\u312D\u3131-\u318E\u31A0-\u31BA\u31F0-\u31FF\u3400-\u4DB5\u4E00-\u9FD5\uA000-\uA48C\uA4D0-\uA4FD\uA500-\uA60C\uA610-\uA61F\uA62A\uA62B\uA640-\uA66E\uA67F-\uA69D\uA6A0-\uA6EF\uA717-\uA71F\uA722-\uA788\uA78B-\uA7AD\uA7B0-\uA7B7\uA7F7-\uA801\uA803-\uA805\uA807-\uA80A\uA80C-\uA822\uA840-\uA873\uA882-\uA8B3\uA8F2-\uA8F7\uA8FB\uA8FD\uA90A-\uA925\uA930-\uA946\uA960-\uA97C\uA984-\uA9B2\uA9CF\uA9E0-\uA9E4\uA9E6-\uA9EF\uA9FA-\uA9FE\uAA00-\uAA28\uAA40-\uAA42\uAA44-\uAA4B\uAA60-\uAA76\uAA7A\uAA7E-\uAAAF\uAAB1\uAAB5\uAAB6\uAAB9-\uAABD\uAAC0\uAAC2\uAADB-\uAADD\uAAE0-\uAAEA\uAAF2-\uAAF4\uAB01-\uAB06\uAB09-\uAB0E\uAB11-\uAB16\uAB20-\uAB26\uAB28-\uAB2E\uAB30-\uAB5A\uAB5C-\uAB65\uAB70-\uABE2\uAC00-\uD7A3\uD7B0-\uD7C6\uD7CB-\uD7FB\uF900-\uFA6D\uFA70-\uFAD9\uFB00-\uFB06\uFB13-\uFB17\uFB1D\uFB1F-\uFB28\uFB2A-\uFB36\uFB38-\uFB3C\uFB3E\uFB40\uFB41\uFB43\uFB44\uFB46-\uFBB1\uFBD3-\uFD3D\uFD50-\uFD8F\uFD92-\uFDC7\uFDF0-\uFDFB\uFE70-\uFE74\uFE76-\uFEFC\uFF21-\uFF3A\uFF41-\uFF5A\uFF66-\uFFBE\uFFC2-\uFFC7\uFFCA-\uFFCF\uFFD2-\uFFD7\uFFDA-\uFFDC]|\uD800[\uDC00-\uDC0B\uDC0D-\uDC26\uDC28-\uDC3A\uDC3C\uDC3D\uDC3F-\uDC4D\uDC50-\uDC5D\uDC80-\uDCFA\uDD40-\uDD74\uDE80-\uDE9C\uDEA0-\uDED0\uDF00-\uDF1F\uDF30-\uDF4A\uDF50-\uDF75\uDF80-\uDF9D\uDFA0-\uDFC3\uDFC8-\uDFCF\uDFD1-\uDFD5]|\uD801[\uDC00-\uDC9D\uDD00-\uDD27\uDD30-\uDD63\uDE00-\uDF36\uDF40-\uDF55\uDF60-\uDF67]|\uD802[\uDC00-\uDC05\uDC08\uDC0A-\uDC35\uDC37\uDC38\uDC3C\uDC3F-\uDC55\uDC60-\uDC76\uDC80-\uDC9E\uDCE0-\uDCF2\uDCF4\uDCF5\uDD00-\uDD15\uDD20-\uDD39\uDD80-\uDDB7\uDDBE\uDDBF\uDE00\uDE10-\uDE13\uDE15-\uDE17\uDE19-\uDE33\uDE60-\uDE7C\uDE80-\uDE9C\uDEC0-\uDEC7\uDEC9-\uDEE4\uDF00-\uDF35\uDF40-\uDF55\uDF60-\uDF72\uDF80-\uDF91]|\uD803[\uDC00-\uDC48\uDC80-\uDCB2\uDCC0-\uDCF2]|\uD804[\uDC03-\uDC37\uDC83-\uDCAF\uDCD0-\uDCE8\uDD03-\uDD26\uDD50-\uDD72\uDD76\uDD83-\uDDB2\uDDC1-\uDDC4\uDDDA\uDDDC\uDE00-\uDE11\uDE13-\uDE2B\uDE80-\uDE86\uDE88\uDE8A-\uDE8D\uDE8F-\uDE9D\uDE9F-\uDEA8\uDEB0-\uDEDE\uDF05-\uDF0C\uDF0F\uDF10\uDF13-\uDF28\uDF2A-\uDF30\uDF32\uDF33\uDF35-\uDF39\uDF3D\uDF50\uDF5D-\uDF61]|\uD805[\uDC80-\uDCAF\uDCC4\uDCC5\uDCC7\uDD80-\uDDAE\uDDD8-\uDDDB\uDE00-\uDE2F\uDE44\uDE80-\uDEAA\uDF00-\uDF19]|\uD806[\uDCA0-\uDCDF\uDCFF\uDEC0-\uDEF8]|\uD808[\uDC00-\uDF99]|\uD809[\uDC00-\uDC6E\uDC80-\uDD43]|[\uD80C\uD840-\uD868\uD86A-\uD86C\uD86F-\uD872][\uDC00-\uDFFF]|\uD80D[\uDC00-\uDC2E]|\uD811[\uDC00-\uDE46]|\uD81A[\uDC00-\uDE38\uDE40-\uDE5E\uDED0-\uDEED\uDF00-\uDF2F\uDF40-\uDF43\uDF63-\uDF77\uDF7D-\uDF8F]|\uD81B[\uDF00-\uDF44\uDF50\uDF93-\uDF9F]|\uD82C[\uDC00\uDC01]|\uD82F[\uDC00-\uDC6A\uDC70-\uDC7C\uDC80-\uDC88\uDC90-\uDC99]|\uD835[\uDC00-\uDC54\uDC56-\uDC9C\uDC9E\uDC9F\uDCA2\uDCA5\uDCA6\uDCA9-\uDCAC\uDCAE-\uDCB9\uDCBB\uDCBD-\uDCC3\uDCC5-\uDD05\uDD07-\uDD0A\uDD0D-\uDD14\uDD16-\uDD1C\uDD1E-\uDD39\uDD3B-\uDD3E\uDD40-\uDD44\uDD46\uDD4A-\uDD50\uDD52-\uDEA5\uDEA8-\uDEC0\uDEC2-\uDEDA\uDEDC-\uDEFA\uDEFC-\uDF14\uDF16-\uDF34\uDF36-\uDF4E\uDF50-\uDF6E\uDF70-\uDF88\uDF8A-\uDFA8\uDFAA-\uDFC2\uDFC4-\uDFCB]|\uD83A[\uDC00-\uDCC4]|\uD83B[\uDE00-\uDE03\uDE05-\uDE1F\uDE21\uDE22\uDE24\uDE27\uDE29-\uDE32\uDE34-\uDE37\uDE39\uDE3B\uDE42\uDE47\uDE49\uDE4B\uDE4D-\uDE4F\uDE51\uDE52\uDE54\uDE57\uDE59\uDE5B\uDE5D\uDE5F\uDE61\uDE62\uDE64\uDE67-\uDE6A\uDE6C-\uDE72\uDE74-\uDE77\uDE79-\uDE7C\uDE7E\uDE80-\uDE89\uDE8B-\uDE9B\uDEA1-\uDEA3\uDEA5-\uDEA9\uDEAB-\uDEBB]|\uD869[\uDC00-\uDED6\uDF00-\uDFFF]|\uD86D[\uDC00-\uDF34\uDF40-\uDFFF]|\uD86E[\uDC00-\uDC1D\uDC20-\uDFFF]|\uD873[\uDC00-\uDEA1]|\uD87E[\uDC00-\uDE1D]/,
// Unicode v8.0.0 NonAsciiIdentifierPart:
NonAsciiIdentifierPart: /[\xAA\xB5\xB7\xBA\xC0-\xD6\xD8-\xF6\xF8-\u02C1\u02C6-\u02D1\u02E0-\u02E4\u02EC\u02EE\u0300-\u0374\u0376\u0377\u037A-\u037D\u037F\u0386-\u038A\u038C\u038E-\u03A1\u03A3-\u03F5\u03F7-\u0481\u0483-\u0487\u048A-\u052F\u0531-\u0556\u0559\u0561-\u0587\u0591-\u05BD\u05BF\u05C1\u05C2\u05C4\u05C5\u05C7\u05D0-\u05EA\u05F0-\u05F2\u0610-\u061A\u0620-\u0669\u066E-\u06D3\u06D5-\u06DC\u06DF-\u06E8\u06EA-\u06FC\u06FF\u0710-\u074A\u074D-\u07B1\u07C0-\u07F5\u07FA\u0800-\u082D\u0840-\u085B\u08A0-\u08B4\u08E3-\u0963\u0966-\u096F\u0971-\u0983\u0985-\u098C\u098F\u0990\u0993-\u09A8\u09AA-\u09B0\u09B2\u09B6-\u09B9\u09BC-\u09C4\u09C7\u09C8\u09CB-\u09CE\u09D7\u09DC\u09DD\u09DF-\u09E3\u09E6-\u09F1\u0A01-\u0A03\u0A05-\u0A0A\u0A0F\u0A10\u0A13-\u0A28\u0A2A-\u0A30\u0A32\u0A33\u0A35\u0A36\u0A38\u0A39\u0A3C\u0A3E-\u0A42\u0A47\u0A48\u0A4B-\u0A4D\u0A51\u0A59-\u0A5C\u0A5E\u0A66-\u0A75\u0A81-\u0A83\u0A85-\u0A8D\u0A8F-\u0A91\u0A93-\u0AA8\u0AAA-\u0AB0\u0AB2\u0AB3\u0AB5-\u0AB9\u0ABC-\u0AC5\u0AC7-\u0AC9\u0ACB-\u0ACD\u0AD0\u0AE0-\u0AE3\u0AE6-\u0AEF\u0AF9\u0B01-\u0B03\u0B05-\u0B0C\u0B0F\u0B10\u0B13-\u0B28\u0B2A-\u0B30\u0B32\u0B33\u0B35-\u0B39\u0B3C-\u0B44\u0B47\u0B48\u0B4B-\u0B4D\u0B56\u0B57\u0B5C\u0B5D\u0B5F-\u0B63\u0B66-\u0B6F\u0B71\u0B82\u0B83\u0B85-\u0B8A\u0B8E-\u0B90\u0B92-\u0B95\u0B99\u0B9A\u0B9C\u0B9E\u0B9F\u0BA3\u0BA4\u0BA8-\u0BAA\u0BAE-\u0BB9\u0BBE-\u0BC2\u0BC6-\u0BC8\u0BCA-\u0BCD\u0BD0\u0BD7\u0BE6-\u0BEF\u0C00-\u0C03\u0C05-\u0C0C\u0C0E-\u0C10\u0C12-\u0C28\u0C2A-\u0C39\u0C3D-\u0C44\u0C46-\u0C48\u0C4A-\u0C4D\u0C55\u0C56\u0C58-\u0C5A\u0C60-\u0C63\u0C66-\u0C6F\u0C81-\u0C83\u0C85-\u0C8C\u0C8E-\u0C90\u0C92-\u0CA8\u0CAA-\u0CB3\u0CB5-\u0CB9\u0CBC-\u0CC4\u0CC6-\u0CC8\u0CCA-\u0CCD\u0CD5\u0CD6\u0CDE\u0CE0-\u0CE3\u0CE6-\u0CEF\u0CF1\u0CF2\u0D01-\u0D03\u0D05-\u0D0C\u0D0E-\u0D10\u0D12-\u0D3A\u0D3D-\u0D44\u0D46-\u0D48\u0D4A-\u0D4E\u0D57\u0D5F-\u0D63\u0D66-\u0D6F\u0D7A-\u0D7F\u0D82\u0D83\u0D85-\u0D96\u0D9A-\u0DB1\u0DB3-\u0DBB\u0DBD\u0DC0-\u0DC6\u0DCA\u0DCF-\u0DD4\u0DD6\u0DD8-\u0DDF\u0DE6-\u0DEF\u0DF2\u0DF3\u0E01-\u0E3A\u0E40-\u0E4E\u0E50-\u0E59\u0E81\u0E82\u0E84\u0E87\u0E88\u0E8A\u0E8D\u0E94-\u0E97\u0E99-\u0E9F\u0EA1-\u0EA3\u0EA5\u0EA7\u0EAA\u0EAB\u0EAD-\u0EB9\u0EBB-\u0EBD\u0EC0-\u0EC4\u0EC6\u0EC8-\u0ECD\u0ED0-\u0ED9\u0EDC-\u0EDF\u0F00\u0F18\u0F19\u0F20-\u0F29\u0F35\u0F37\u0F39\u0F3E-\u0F47\u0F49-\u0F6C\u0F71-\u0F84\u0F86-\u0F97\u0F99-\u0FBC\u0FC6\u1000-\u1049\u1050-\u109D\u10A0-\u10C5\u10C7\u10CD\u10D0-\u10FA\u10FC-\u1248\u124A-\u124D\u1250-\u1256\u1258\u125A-\u125D\u1260-\u1288\u128A-\u128D\u1290-\u12B0\u12B2-\u12B5\u12B8-\u12BE\u12C0\u12C2-\u12C5\u12C8-\u12D6\u12D8-\u1310\u1312-\u1315\u1318-\u135A\u135D-\u135F\u1369-\u1371\u1380-\u138F\u13A0-\u13F5\u13F8-\u13FD\u1401-\u166C\u166F-\u167F\u1681-\u169A\u16A0-\u16EA\u16EE-\u16F8\u1700-\u170C\u170E-\u1714\u1720-\u1734\u1740-\u1753\u1760-\u176C\u176E-\u1770\u1772\u1773\u1780-\u17D3\u17D7\u17DC\u17DD\u17E0-\u17E9\u180B-\u180D\u1810-\u1819\u1820-\u1877\u1880-\u18AA\u18B0-\u18F5\u1900-\u191E\u1920-\u192B\u1930-\u193B\u1946-\u196D\u1970-\u1974\u1980-\u19AB\u19B0-\u19C9\u19D0-\u19DA\u1A00-\u1A1B\u1A20-\u1A5E\u1A60-\u1A7C\u1A7F-\u1A89\u1A90-\u1A99\u1AA7\u1AB0-\u1ABD\u1B00-\u1B4B\u1B50-\u1B59\u1B6B-\u1B73\u1B80-\u1BF3\u1C00-\u1C37\u1C40-\u1C49\u1C4D-\u1C7D\u1CD0-\u1CD2\u1CD4-\u1CF6\u1CF8\u1CF9\u1D00-\u1DF5\u1DFC-\u1F15\u1F18-\u1F1D\u1F20-\u1F45\u1F48-\u1F4D\u1F50-\u1F57\u1F59\u1F5B\u1F5D\u1F5F-\u1F7D\u1F80-\u1FB4\u1FB6-\u1FBC\u1FBE\u1FC2-\u1FC4\u1FC6-\u1FCC\u1FD0-\u1FD3\u1FD6-\u1FDB\u1FE0-\u1FEC\u1FF2-\u1FF4\u1FF6-\u1FFC\u200C\u200D\u203F\u2040\u2054\u2071\u207F\u2090-\u209C\u20D0-\u20DC\u20E1\u20E5-\u20F0\u2102\u2107\u210A-\u2113\u2115\u2118-\u211D\u2124\u2126\u2128\u212A-\u2139\u213C-\u213F\u2145-\u2149\u214E\u2160-\u2188\u2C00-\u2C2E\u2C30-\u2C5E\u2C60-\u2CE4\u2CEB-\u2CF3\u2D00-\u2D25\u2D27\u2D2D\u2D30-\u2D67\u2D6F\u2D7F-\u2D96\u2DA0-\u2DA6\u2DA8-\u2DAE\u2DB0-\u2DB6\u2DB8-\u2DBE\u2DC0-\u2DC6\u2DC8-\u2DCE\u2DD0-\u2DD6\u2DD8-\u2DDE\u2DE0-\u2DFF\u3005-\u3007\u3021-\u302F\u3031-\u3035\u3038-\u303C\u3041-\u3096\u3099-\u309F\u30A1-\u30FA\u30FC-\u30FF\u3105-\u312D\u3131-\u318E\u31A0-\u31BA\u31F0-\u31FF\u3400-\u4DB5\u4E00-\u9FD5\uA000-\uA48C\uA4D0-\uA4FD\uA500-\uA60C\uA610-\uA62B\uA640-\uA66F\uA674-\uA67D\uA67F-\uA6F1\uA717-\uA71F\uA722-\uA788\uA78B-\uA7AD\uA7B0-\uA7B7\uA7F7-\uA827\uA840-\uA873\uA880-\uA8C4\uA8D0-\uA8D9\uA8E0-\uA8F7\uA8FB\uA8FD\uA900-\uA92D\uA930-\uA953\uA960-\uA97C\uA980-\uA9C0\uA9CF-\uA9D9\uA9E0-\uA9FE\uAA00-\uAA36\uAA40-\uAA4D\uAA50-\uAA59\uAA60-\uAA76\uAA7A-\uAAC2\uAADB-\uAADD\uAAE0-\uAAEF\uAAF2-\uAAF6\uAB01-\uAB06\uAB09-\uAB0E\uAB11-\uAB16\uAB20-\uAB26\uAB28-\uAB2E\uAB30-\uAB5A\uAB5C-\uAB65\uAB70-\uABEA\uABEC\uABED\uABF0-\uABF9\uAC00-\uD7A3\uD7B0-\uD7C6\uD7CB-\uD7FB\uF900-\uFA6D\uFA70-\uFAD9\uFB00-\uFB06\uFB13-\uFB17\uFB1D-\uFB28\uFB2A-\uFB36\uFB38-\uFB3C\uFB3E\uFB40\uFB41\uFB43\uFB44\uFB46-\uFBB1\uFBD3-\uFD3D\uFD50-\uFD8F\uFD92-\uFDC7\uFDF0-\uFDFB\uFE00-\uFE0F\uFE20-\uFE2F\uFE33\uFE34\uFE4D-\uFE4F\uFE70-\uFE74\uFE76-\uFEFC\uFF10-\uFF19\uFF21-\uFF3A\uFF3F\uFF41-\uFF5A\uFF66-\uFFBE\uFFC2-\uFFC7\uFFCA-\uFFCF\uFFD2-\uFFD7\uFFDA-\uFFDC]|\uD800[\uDC00-\uDC0B\uDC0D-\uDC26\uDC28-\uDC3A\uDC3C\uDC3D\uDC3F-\uDC4D\uDC50-\uDC5D\uDC80-\uDCFA\uDD40-\uDD74\uDDFD\uDE80-\uDE9C\uDEA0-\uDED0\uDEE0\uDF00-\uDF1F\uDF30-\uDF4A\uDF50-\uDF7A\uDF80-\uDF9D\uDFA0-\uDFC3\uDFC8-\uDFCF\uDFD1-\uDFD5]|\uD801[\uDC00-\uDC9D\uDCA0-\uDCA9\uDD00-\uDD27\uDD30-\uDD63\uDE00-\uDF36\uDF40-\uDF55\uDF60-\uDF67]|\uD802[\uDC00-\uDC05\uDC08\uDC0A-\uDC35\uDC37\uDC38\uDC3C\uDC3F-\uDC55\uDC60-\uDC76\uDC80-\uDC9E\uDCE0-\uDCF2\uDCF4\uDCF5\uDD00-\uDD15\uDD20-\uDD39\uDD80-\uDDB7\uDDBE\uDDBF\uDE00-\uDE03\uDE05\uDE06\uDE0C-\uDE13\uDE15-\uDE17\uDE19-\uDE33\uDE38-\uDE3A\uDE3F\uDE60-\uDE7C\uDE80-\uDE9C\uDEC0-\uDEC7\uDEC9-\uDEE6\uDF00-\uDF35\uDF40-\uDF55\uDF60-\uDF72\uDF80-\uDF91]|\uD803[\uDC00-\uDC48\uDC80-\uDCB2\uDCC0-\uDCF2]|\uD804[\uDC00-\uDC46\uDC66-\uDC6F\uDC7F-\uDCBA\uDCD0-\uDCE8\uDCF0-\uDCF9\uDD00-\uDD34\uDD36-\uDD3F\uDD50-\uDD73\uDD76\uDD80-\uDDC4\uDDCA-\uDDCC\uDDD0-\uDDDA\uDDDC\uDE00-\uDE11\uDE13-\uDE37\uDE80-\uDE86\uDE88\uDE8A-\uDE8D\uDE8F-\uDE9D\uDE9F-\uDEA8\uDEB0-\uDEEA\uDEF0-\uDEF9\uDF00-\uDF03\uDF05-\uDF0C\uDF0F\uDF10\uDF13-\uDF28\uDF2A-\uDF30\uDF32\uDF33\uDF35-\uDF39\uDF3C-\uDF44\uDF47\uDF48\uDF4B-\uDF4D\uDF50\uDF57\uDF5D-\uDF63\uDF66-\uDF6C\uDF70-\uDF74]|\uD805[\uDC80-\uDCC5\uDCC7\uDCD0-\uDCD9\uDD80-\uDDB5\uDDB8-\uDDC0\uDDD8-\uDDDD\uDE00-\uDE40\uDE44\uDE50-\uDE59\uDE80-\uDEB7\uDEC0-\uDEC9\uDF00-\uDF19\uDF1D-\uDF2B\uDF30-\uDF39]|\uD806[\uDCA0-\uDCE9\uDCFF\uDEC0-\uDEF8]|\uD808[\uDC00-\uDF99]|\uD809[\uDC00-\uDC6E\uDC80-\uDD43]|[\uD80C\uD840-\uD868\uD86A-\uD86C\uD86F-\uD872][\uDC00-\uDFFF]|\uD80D[\uDC00-\uDC2E]|\uD811[\uDC00-\uDE46]|\uD81A[\uDC00-\uDE38\uDE40-\uDE5E\uDE60-\uDE69\uDED0-\uDEED\uDEF0-\uDEF4\uDF00-\uDF36\uDF40-\uDF43\uDF50-\uDF59\uDF63-\uDF77\uDF7D-\uDF8F]|\uD81B[\uDF00-\uDF44\uDF50-\uDF7E\uDF8F-\uDF9F]|\uD82C[\uDC00\uDC01]|\uD82F[\uDC00-\uDC6A\uDC70-\uDC7C\uDC80-\uDC88\uDC90-\uDC99\uDC9D\uDC9E]|\uD834[\uDD65-\uDD69\uDD6D-\uDD72\uDD7B-\uDD82\uDD85-\uDD8B\uDDAA-\uDDAD\uDE42-\uDE44]|\uD835[\uDC00-\uDC54\uDC56-\uDC9C\uDC9E\uDC9F\uDCA2\uDCA5\uDCA6\uDCA9-\uDCAC\uDCAE-\uDCB9\uDCBB\uDCBD-\uDCC3\uDCC5-\uDD05\uDD07-\uDD0A\uDD0D-\uDD14\uDD16-\uDD1C\uDD1E-\uDD39\uDD3B-\uDD3E\uDD40-\uDD44\uDD46\uDD4A-\uDD50\uDD52-\uDEA5\uDEA8-\uDEC0\uDEC2-\uDEDA\uDEDC-\uDEFA\uDEFC-\uDF14\uDF16-\uDF34\uDF36-\uDF4E\uDF50-\uDF6E\uDF70-\uDF88\uDF8A-\uDFA8\uDFAA-\uDFC2\uDFC4-\uDFCB\uDFCE-\uDFFF]|\uD836[\uDE00-\uDE36\uDE3B-\uDE6C\uDE75\uDE84\uDE9B-\uDE9F\uDEA1-\uDEAF]|\uD83A[\uDC00-\uDCC4\uDCD0-\uDCD6]|\uD83B[\uDE00-\uDE03\uDE05-\uDE1F\uDE21\uDE22\uDE24\uDE27\uDE29-\uDE32\uDE34-\uDE37\uDE39\uDE3B\uDE42\uDE47\uDE49\uDE4B\uDE4D-\uDE4F\uDE51\uDE52\uDE54\uDE57\uDE59\uDE5B\uDE5D\uDE5F\uDE61\uDE62\uDE64\uDE67-\uDE6A\uDE6C-\uDE72\uDE74-\uDE77\uDE79-\uDE7C\uDE7E\uDE80-\uDE89\uDE8B-\uDE9B\uDEA1-\uDEA3\uDEA5-\uDEA9\uDEAB-\uDEBB]|\uD869[\uDC00-\uDED6\uDF00-\uDFFF]|\uD86D[\uDC00-\uDF34\uDF40-\uDFFF]|\uD86E[\uDC00-\uDC1D\uDC20-\uDFFF]|\uD873[\uDC00-\uDEA1]|\uD87E[\uDC00-\uDE1D]|\uDB40[\uDD00-\uDDEF]/
};
exports2.Character = {
/* tslint:disable:no-bitwise */
fromCodePoint: function(cp2) {
return cp2 < 65536 ? String.fromCharCode(cp2) : String.fromCharCode(55296 + (cp2 - 65536 >> 10)) + String.fromCharCode(56320 + (cp2 - 65536 & 1023));
},
// https://tc39.github.io/ecma262/#sec-white-space
isWhiteSpace: function(cp2) {
return cp2 === 32 || cp2 === 9 || cp2 === 11 || cp2 === 12 || cp2 === 160 || cp2 >= 5760 && [5760, 8192, 8193, 8194, 8195, 8196, 8197, 8198, 8199, 8200, 8201, 8202, 8239, 8287, 12288, 65279].indexOf(cp2) >= 0;
},
// https://tc39.github.io/ecma262/#sec-line-terminators
isLineTerminator: function(cp2) {
return cp2 === 10 || cp2 === 13 || cp2 === 8232 || cp2 === 8233;
},
// https://tc39.github.io/ecma262/#sec-names-and-keywords
isIdentifierStart: function(cp2) {
return cp2 === 36 || cp2 === 95 || cp2 >= 65 && cp2 <= 90 || cp2 >= 97 && cp2 <= 122 || cp2 === 92 || cp2 >= 128 && Regex.NonAsciiIdentifierStart.test(exports2.Character.fromCodePoint(cp2));
},
isIdentifierPart: function(cp2) {
return cp2 === 36 || cp2 === 95 || cp2 >= 65 && cp2 <= 90 || cp2 >= 97 && cp2 <= 122 || cp2 >= 48 && cp2 <= 57 || cp2 === 92 || cp2 >= 128 && Regex.NonAsciiIdentifierPart.test(exports2.Character.fromCodePoint(cp2));
},
// https://tc39.github.io/ecma262/#sec-literals-numeric-literals
isDecimalDigit: function(cp2) {
return cp2 >= 48 && cp2 <= 57;
},
isHexDigit: function(cp2) {
return cp2 >= 48 && cp2 <= 57 || cp2 >= 65 && cp2 <= 70 || cp2 >= 97 && cp2 <= 102;
},
isOctalDigit: function(cp2) {
return cp2 >= 48 && cp2 <= 55;
}
};
},
/* 5 */
/***/
function(module2, exports2, __webpack_require__) {
"use strict";
Object.defineProperty(exports2, "__esModule", { value: !0 });
var jsx_syntax_1 = __webpack_require__(6), JSXClosingElement = /* @__PURE__ */ (function() {
function JSXClosingElement2(name) {
this.type = jsx_syntax_1.JSXSyntax.JSXClosingElement, this.name = name;
}
return JSXClosingElement2;
})();
exports2.JSXClosingElement = JSXClosingElement;
var JSXElement = /* @__PURE__ */ (function() {
function JSXElement2(openingElement, children, closingElement) {
this.type = jsx_syntax_1.JSXSyntax.JSXElement, this.openingElement = openingElement, this.children = children, this.closingElement = closingElement;
}
return JSXElement2;
})();
exports2.JSXElement = JSXElement;
var JSXEmptyExpression = /* @__PURE__ */ (function() {
function JSXEmptyExpression2() {
this.type = jsx_syntax_1.JSXSyntax.JSXEmptyExpression;
}
return JSXEmptyExpression2;
})();
exports2.JSXEmptyExpression = JSXEmptyExpression;
var JSXExpressionContainer = /* @__PURE__ */ (function() {
function JSXExpressionContainer2(expression) {
this.type = jsx_syntax_1.JSXSyntax.JSXExpressionContainer, this.expression = expression;
}
return JSXExpressionContainer2;
})();
exports2.JSXExpressionContainer = JSXExpressionContainer;
var JSXIdentifier = /* @__PURE__ */ (function() {
function JSXIdentifier2(name) {
this.type = jsx_syntax_1.JSXSyntax.JSXIdentifier, this.name = name;
}
return JSXIdentifier2;
})();
exports2.JSXIdentifier = JSXIdentifier;
var JSXMemberExpression = /* @__PURE__ */ (function() {
function JSXMemberExpression2(object, property) {
this.type = jsx_syntax_1.JSXSyntax.JSXMemberExpression, this.object = object, this.property = property;
}
return JSXMemberExpression2;
})();
exports2.JSXMemberExpression = JSXMemberExpression;
var JSXAttribute = /* @__PURE__ */ (function() {
function JSXAttribute2(name, value) {
this.type = jsx_syntax_1.JSXSyntax.JSXAttribute, this.name = name, this.value = value;
}
return JSXAttribute2;
})();
exports2.JSXAttribute = JSXAttribute;
var JSXNamespacedName = /* @__PURE__ */ (function() {
function JSXNamespacedName2(namespace, name) {
this.type = jsx_syntax_1.JSXSyntax.JSXNamespacedName, this.namespace = namespace, this.name = name;
}
return JSXNamespacedName2;
})();
exports2.JSXNamespacedName = JSXNamespacedName;
var JSXOpeningElement = /* @__PURE__ */ (function() {
function JSXOpeningElement2(name, selfClosing, attributes) {
this.type = jsx_syntax_1.JSXSyntax.JSXOpeningElement, this.name = name, this.selfClosing = selfClosing, this.attributes = attributes;
}
return JSXOpeningElement2;
})();
exports2.JSXOpeningElement = JSXOpeningElement;
var JSXSpreadAttribute = /* @__PURE__ */ (function() {
function JSXSpreadAttribute2(argument) {
this.type = jsx_syntax_1.JSXSyntax.JSXSpreadAttribute, this.argument = argument;
}
return JSXSpreadAttribute2;
})();
exports2.JSXSpreadAttribute = JSXSpreadAttribute;
var JSXText = /* @__PURE__ */ (function() {
function JSXText2(value, raw) {
this.type = jsx_syntax_1.JSXSyntax.JSXText, this.value = value, this.raw = raw;
}
return JSXText2;
})();
exports2.JSXText = JSXText;
},
/* 6 */
/***/
function(module2, exports2) {
"use strict";
Object.defineProperty(exports2, "__esModule", { value: !0 }), exports2.JSXSyntax = {
JSXAttribute: "JSXAttribute",
JSXClosingElement: "JSXClosingElement",
JSXElement: "JSXElement",
JSXEmptyExpression: "JSXEmptyExpression",
JSXExpressionContainer: "JSXExpressionContainer",
JSXIdentifier: "JSXIdentifier",
JSXMemberExpression: "JSXMemberExpression",
JSXNamespacedName: "JSXNamespacedName",
JSXOpeningElement: "JSXOpeningElement",
JSXSpreadAttribute: "JSXSpreadAttribute",
JSXText: "JSXText"
};
},
/* 7 */
/***/
function(module2, exports2, __webpack_require__) {
"use strict";
Object.defineProperty(exports2, "__esModule", { value: !0 });
var syntax_1 = __webpack_require__(2), ArrayExpression = /* @__PURE__ */ (function() {
function ArrayExpression2(elements) {
this.type = syntax_1.Syntax.ArrayExpression, this.elements = elements;
}
return ArrayExpression2;
})();
exports2.ArrayExpression = ArrayExpression;
var ArrayPattern = /* @__PURE__ */ (function() {
function ArrayPattern2(elements) {
this.type = syntax_1.Syntax.ArrayPattern, this.elements = elements;
}
return ArrayPattern2;
})();
exports2.ArrayPattern = ArrayPattern;
var ArrowFunctionExpression = /* @__PURE__ */ (function() {
function ArrowFunctionExpression2(params, body, expression) {
this.type = syntax_1.Syntax.ArrowFunctionExpression, this.id = null, this.params = params, this.body = body, this.generator = !1, this.expression = expression, this.async = !1;
}
return ArrowFunctionExpression2;
})();
exports2.ArrowFunctionExpression = ArrowFunctionExpression;
var AssignmentExpression = /* @__PURE__ */ (function() {
function AssignmentExpression2(operator, left, right) {
this.type = syntax_1.Syntax.AssignmentExpression, this.operator = operator, this.left = left, this.right = right;
}
return AssignmentExpression2;
})();
exports2.AssignmentExpression = AssignmentExpression;
var AssignmentPattern = /* @__PURE__ */ (function() {
function AssignmentPattern2(left, right) {
this.type = syntax_1.Syntax.AssignmentPattern, this.left = left, this.right = right;
}
return AssignmentPattern2;
})();
exports2.AssignmentPattern = AssignmentPattern;
var AsyncArrowFunctionExpression = /* @__PURE__ */ (function() {
function AsyncArrowFunctionExpression2(params, body, expression) {
this.type = syntax_1.Syntax.ArrowFunctionExpression, this.id = null, this.params = params, this.body = body, this.generator = !1, this.expression = expression, this.async = !0;
}
return AsyncArrowFunctionExpression2;
})();
exports2.AsyncArrowFunctionExpression = AsyncArrowFunctionExpression;
var AsyncFunctionDeclaration = /* @__PURE__ */ (function() {
function AsyncFunctionDeclaration2(id, params, body) {
this.type = syntax_1.Syntax.FunctionDeclaration, this.id = id, this.params = params, this.body = body, this.generator = !1, this.expression = !1, this.async = !0;
}
return AsyncFunctionDeclaration2;
})();
exports2.AsyncFunctionDeclaration = AsyncFunctionDeclaration;
var AsyncFunctionExpression = /* @__PURE__ */ (function() {
function AsyncFunctionExpression2(id, params, body) {
this.type = syntax_1.Syntax.FunctionExpression, this.id = id, this.params = params, this.body = body, this.generator = !1, this.expression = !1, this.async = !0;
}
return AsyncFunctionExpression2;
})();
exports2.AsyncFunctionExpression = AsyncFunctionExpression;
var AwaitExpression = /* @__PURE__ */ (function() {
function AwaitExpression2(argument) {
this.type = syntax_1.Syntax.AwaitExpression, this.argument = argument;
}
return AwaitExpression2;
})();
exports2.AwaitExpression = AwaitExpression;
var BinaryExpression = /* @__PURE__ */ (function() {
function BinaryExpression2(operator, left, right) {
var logical = operator === "||" || operator === "&&";
this.type = logical ? syntax_1.Syntax.LogicalExpression : syntax_1.Syntax.BinaryExpression, this.operator = operator, this.left = left, this.right = right;
}
return BinaryExpression2;
})();
exports2.BinaryExpression = BinaryExpression;
var BlockStatement = /* @__PURE__ */ (function() {
function BlockStatement2(body) {
this.type = syntax_1.Syntax.BlockStatement, this.body = body;
}
return BlockStatement2;
})();
exports2.BlockStatement = BlockStatement;
var BreakStatement = /* @__PURE__ */ (function() {
function BreakStatement2(label) {
this.type = syntax_1.Syntax.BreakStatement, this.label = label;
}
return BreakStatement2;
})();
exports2.BreakStatement = BreakStatement;
var CallExpression = /* @__PURE__ */ (function() {
function CallExpression2(callee, args) {
this.type = syntax_1.Syntax.CallExpression, this.callee = callee, this.arguments = args;
}
return CallExpression2;
})();
exports2.CallExpression = CallExpression;
var CatchClause = /* @__PURE__ */ (function() {
function CatchClause2(param, body) {
this.type = syntax_1.Syntax.CatchClause, this.param = param, this.body = body;
}
return CatchClause2;
})();
exports2.CatchClause = CatchClause;
var ClassBody = /* @__PURE__ */ (function() {
function ClassBody2(body) {
this.type = syntax_1.Syntax.ClassBody, this.body = body;
}
return ClassBody2;
})();
exports2.ClassBody = ClassBody;
var ClassDeclaration = /* @__PURE__ */ (function() {
function ClassDeclaration2(id, superClass, body) {
this.type = syntax_1.Syntax.ClassDeclaration, this.id = id, this.superClass = superClass, this.body = body;
}
return ClassDeclaration2;
})();
exports2.ClassDeclaration = ClassDeclaration;
var ClassExpression = /* @__PURE__ */ (function() {
function ClassExpression2(id, superClass, body) {
this.type = syntax_1.Syntax.ClassExpression, this.id = id, this.superClass = superClass, this.body = body;
}
return ClassExpression2;
})();
exports2.ClassExpression = ClassExpression;
var ComputedMemberExpression = /* @__PURE__ */ (function() {
function ComputedMemberExpression2(object, property) {
this.type = syntax_1.Syntax.MemberExpression, this.computed = !0, this.object = object, this.property = property;
}
return ComputedMemberExpression2;
})();
exports2.ComputedMemberExpression = ComputedMemberExpression;
var ConditionalExpression = /* @__PURE__ */ (function() {
function ConditionalExpression2(test, consequent, alternate) {
this.type = syntax_1.Syntax.ConditionalExpression, this.test = test, this.consequent = consequent, this.alternate = alternate;
}
return ConditionalExpression2;
})();
exports2.ConditionalExpression = ConditionalExpression;
var ContinueStatement = /* @__PURE__ */ (function() {
function ContinueStatement2(label) {
this.type = syntax_1.Syntax.ContinueStatement, this.label = label;
}
return ContinueStatement2;
})();
exports2.ContinueStatement = ContinueStatement;
var DebuggerStatement = /* @__PURE__ */ (function() {
function DebuggerStatement2() {
this.type = syntax_1.Syntax.DebuggerStatement;
}
return DebuggerStatement2;
})();
exports2.DebuggerStatement = DebuggerStatement;
var Directive = /* @__PURE__ */ (function() {
function Directive2(expression, directive) {
this.type = syntax_1.Syntax.ExpressionStatement, this.expression = expression, this.directive = directive;
}
return Directive2;
})();
exports2.Directive = Directive;
var DoWhileStatement = /* @__PURE__ */ (function() {
function DoWhileStatement2(body, test) {
this.type = syntax_1.Syntax.DoWhileStatement, this.body = body, this.test = test;
}
return DoWhileStatement2;
})();
exports2.DoWhileStatement = DoWhileStatement;
var EmptyStatement = /* @__PURE__ */ (function() {
function EmptyStatement2() {
this.type = syntax_1.Syntax.EmptyStatement;
}
return EmptyStatement2;
})();
exports2.EmptyStatement = EmptyStatement;
var ExportAllDeclaration = /* @__PURE__ */ (function() {
function ExportAllDeclaration2(source) {
this.type = syntax_1.Syntax.ExportAllDeclaration, this.source = source;
}
return ExportAllDeclaration2;
})();
exports2.ExportAllDeclaration = ExportAllDeclaration;
var ExportDefaultDeclaration = /* @__PURE__ */ (function() {
function ExportDefaultDeclaration2(declaration) {
this.type = syntax_1.Syntax.ExportDefaultDeclaration, this.declaration = declaration;
}
return ExportDefaultDeclaration2;
})();
exports2.ExportDefaultDeclaration = ExportDefaultDeclaration;
var ExportNamedDeclaration = /* @__PURE__ */ (function() {
function ExportNamedDeclaration2(declaration, specifiers, source) {
this.type = syntax_1.Syntax.ExportNamedDeclaration, this.declaration = declaration, this.specifiers = specifiers, this.source = source;
}
return ExportNamedDeclaration2;
})();
exports2.ExportNamedDeclaration = ExportNamedDeclaration;
var ExportSpecifier = /* @__PURE__ */ (function() {
function ExportSpecifier2(local, exported) {
this.type = syntax_1.Syntax.ExportSpecifier, this.exported = exported, this.local = local;
}
return ExportSpecifier2;
})();
exports2.ExportSpecifier = ExportSpecifier;
var ExpressionStatement = /* @__PURE__ */ (function() {
function ExpressionStatement2(expression) {
this.type = syntax_1.Syntax.ExpressionStatement, this.expression = expression;
}
return ExpressionStatement2;
})();
exports2.ExpressionStatement = ExpressionStatement;
var ForInStatement = /* @__PURE__ */ (function() {
function ForInStatement2(left, right, body) {
this.type = syntax_1.Syntax.ForInStatement, this.left = left, this.right = right, this.body = body, this.each = !1;
}
return ForInStatement2;
})();
exports2.ForInStatement = ForInStatement;
var ForOfStatement = /* @__PURE__ */ (function() {
function ForOfStatement2(left, right, body) {
this.type = syntax_1.Syntax.ForOfStatement, this.left = left, this.right = right, this.body = body;
}
return ForOfStatement2;
})();
exports2.ForOfStatement = ForOfStatement;
var ForStatement = /* @__PURE__ */ (function() {
function ForStatement2(init, test, update, body) {
this.type = syntax_1.Syntax.ForStatement, this.init = init, this.test = test, this.update = update, this.body = body;
}
return ForStatement2;
})();
exports2.ForStatement = ForStatement;
var FunctionDeclaration = /* @__PURE__ */ (function() {
function FunctionDeclaration2(id, params, body, generator) {
this.type = syntax_1.Syntax.FunctionDeclaration, this.id = id, this.params = params, this.body = body, this.generator = generator, this.expression = !1, this.async = !1;
}
return FunctionDeclaration2;
})();
exports2.FunctionDeclaration = FunctionDeclaration;
var FunctionExpression = /* @__PURE__ */ (function() {
function FunctionExpression2(id, params, body, generator) {
this.type = syntax_1.Syntax.FunctionExpression, this.id = id, this.params = params, this.body = body, this.generator = generator, this.expression = !1, this.async = !1;
}
return FunctionExpression2;
})();
exports2.FunctionExpression = FunctionExpression;
var Identifier = /* @__PURE__ */ (function() {
function Identifier2(name) {
this.type = syntax_1.Syntax.Identifier, this.name = name;
}
return Identifier2;
})();
exports2.Identifier = Identifier;
var IfStatement = /* @__PURE__ */ (function() {
function IfStatement2(test, consequent, alternate) {
this.type = syntax_1.Syntax.IfStatement, this.test = test, this.consequent = consequent, this.alternate = alternate;
}
return IfStatement2;
})();
exports2.IfStatement = IfStatement;
var ImportDeclaration = /* @__PURE__ */ (function() {
function ImportDeclaration2(specifiers, source) {
this.type = syntax_1.Syntax.ImportDeclaration, this.specifiers = specifiers, this.source = source;
}
return ImportDeclaration2;
})();
exports2.ImportDeclaration = ImportDeclaration;
var ImportDefaultSpecifier = /* @__PURE__ */ (function() {
function ImportDefaultSpecifier2(local) {
this.type = syntax_1.Syntax.ImportDefaultSpecifier, this.local = local;
}
return ImportDefaultSpecifier2;
})();
exports2.ImportDefaultSpecifier = ImportDefaultSpecifier;
var ImportNamespaceSpecifier = /* @__PURE__ */ (function() {
function ImportNamespaceSpecifier2(local) {
this.type = syntax_1.Syntax.ImportNamespaceSpecifier, this.local = local;
}
return ImportNamespaceSpecifier2;
})();
exports2.ImportNamespaceSpecifier = ImportNamespaceSpecifier;
var ImportSpecifier = /* @__PURE__ */ (function() {
function ImportSpecifier2(local, imported) {
this.type = syntax_1.Syntax.ImportSpecifier, this.local = local, this.imported = imported;
}
return ImportSpecifier2;
})();
exports2.ImportSpecifier = ImportSpecifier;
var LabeledStatement = /* @__PURE__ */ (function() {
function LabeledStatement2(label, body) {
this.type = syntax_1.Syntax.LabeledStatement, this.label = label, this.body = body;
}
return LabeledStatement2;
})();
exports2.LabeledStatement = LabeledStatement;
var Literal = /* @__PURE__ */ (function() {
function Literal2(value, raw) {
this.type = syntax_1.Syntax.Literal, this.value = value, this.raw = raw;
}
return Literal2;
})();
exports2.Literal = Literal;
var MetaProperty = /* @__PURE__ */ (function() {
function MetaProperty2(meta, property) {
this.type = syntax_1.Syntax.MetaProperty, this.meta = meta, this.property = property;
}
return MetaProperty2;
})();
exports2.MetaProperty = MetaProperty;
var MethodDefinition = /* @__PURE__ */ (function() {
function MethodDefinition2(key, computed, value, kind, isStatic) {
this.type = syntax_1.Syntax.MethodDefinition, this.key = key, this.computed = computed, this.value = value, this.kind = kind, this.static = isStatic;
}
return MethodDefinition2;
})();
exports2.MethodDefinition = MethodDefinition;
var Module = /* @__PURE__ */ (function() {
function Module2(body) {
this.type = syntax_1.Syntax.Program, this.body = body, this.sourceType = "module";
}
return Module2;
})();
exports2.Module = Module;
var NewExpression = /* @__PURE__ */ (function() {
function NewExpression2(callee, args) {
this.type = syntax_1.Syntax.NewExpression, this.callee = callee, this.arguments = args;
}
return NewExpression2;
})();
exports2.NewExpression = NewExpression;
var ObjectExpression = /* @__PURE__ */ (function() {
function ObjectExpression2(properties) {
this.type = syntax_1.Syntax.ObjectExpression, this.properties = properties;
}
return ObjectExpression2;
})();
exports2.ObjectExpression = ObjectExpression;
var ObjectPattern = /* @__PURE__ */ (function() {
function ObjectPattern2(properties) {
this.type = syntax_1.Syntax.ObjectPattern, this.properties = properties;
}
return ObjectPattern2;
})();
exports2.ObjectPattern = ObjectPattern;
var Property = /* @__PURE__ */ (function() {
function Property2(kind, key, computed, value, method, shorthand) {
this.type = syntax_1.Syntax.Property, this.key = key, this.computed = computed, this.value = value, this.kind = kind, this.method = method, this.shorthand = shorthand;
}
return Property2;
})();
exports2.Property = Property;
var RegexLiteral = /* @__PURE__ */ (function() {
function RegexLiteral2(value, raw, pattern, flags) {
this.type = syntax_1.Syntax.Literal, this.value = value, this.raw = raw, this.regex = { pattern, flags };
}
return RegexLiteral2;
})();
exports2.RegexLiteral = RegexLiteral;
var RestElement = /* @__PURE__ */ (function() {
function RestElement2(argument) {
this.type = syntax_1.Syntax.RestElement, this.argument = argument;
}
return RestElement2;
})();
exports2.RestElement = RestElement;
var ReturnStatement = /* @__PURE__ */ (function() {
function ReturnStatement2(argument) {
this.type = syntax_1.Syntax.ReturnStatement, this.argument = argument;
}
return ReturnStatement2;
})();
exports2.ReturnStatement = ReturnStatement;
var Script = /* @__PURE__ */ (function() {
function Script2(body) {
this.type = syntax_1.Syntax.Program, this.body = body, this.sourceType = "script";
}
return Script2;
})();
exports2.Script = Script;
var SequenceExpression = /* @__PURE__ */ (function() {
function SequenceExpression2(expressions) {
this.type = syntax_1.Syntax.SequenceExpression, this.expressions = expressions;
}
return SequenceExpression2;
})();
exports2.SequenceExpression = SequenceExpression;
var SpreadElement = /* @__PURE__ */ (function() {
function SpreadElement2(argument) {
this.type = syntax_1.Syntax.SpreadElement, this.argument = argument;
}
return SpreadElement2;
})();
exports2.SpreadElement = SpreadElement;
var StaticMemberExpression = /* @__PURE__ */ (function() {
function StaticMemberExpression2(object, property) {
this.type = syntax_1.Syntax.MemberExpression, this.computed = !1, this.object = object, this.property = property;
}
return StaticMemberExpression2;
})();
exports2.StaticMemberExpression = StaticMemberExpression;
var Super = /* @__PURE__ */ (function() {
function Super2() {
this.type = syntax_1.Syntax.Super;
}
return Super2;
})();
exports2.Super = Super;
var SwitchCase = /* @__PURE__ */ (function() {
function SwitchCase2(test, consequent) {
this.type = syntax_1.Syntax.SwitchCase, this.test = test, this.consequent = consequent;
}
return SwitchCase2;
})();
exports2.SwitchCase = SwitchCase;
var SwitchStatement = /* @__PURE__ */ (function() {
function SwitchStatement2(discriminant, cases) {
this.type = syntax_1.Syntax.SwitchStatement, this.discriminant = discriminant, this.cases = cases;
}
return SwitchStatement2;
})();
exports2.SwitchStatement = SwitchStatement;
var TaggedTemplateExpression = /* @__PURE__ */ (function() {
function TaggedTemplateExpression2(tag, quasi) {
this.type = syntax_1.Syntax.TaggedTemplateExpression, this.tag = tag, this.quasi = quasi;
}
return TaggedTemplateExpression2;
})();
exports2.TaggedTemplateExpression = TaggedTemplateExpression;
var TemplateElement = /* @__PURE__ */ (function() {
function TemplateElement2(value, tail) {
this.type = syntax_1.Syntax.TemplateElement, this.value = value, this.tail = tail;
}
return TemplateElement2;
})();
exports2.TemplateElement = TemplateElement;
var TemplateLiteral = /* @__PURE__ */ (function() {
function TemplateLiteral2(quasis, expressions) {
this.type = syntax_1.Syntax.TemplateLiteral, this.quasis = quasis, this.expressions = expressions;
}
return TemplateLiteral2;
})();
exports2.TemplateLiteral = TemplateLiteral;
var ThisExpression = /* @__PURE__ */ (function() {
function ThisExpression2() {
this.type = syntax_1.Syntax.ThisExpression;
}
return ThisExpression2;
})();
exports2.ThisExpression = ThisExpression;
var ThrowStatement = /* @__PURE__ */ (function() {
function ThrowStatement2(argument) {
this.type = syntax_1.Syntax.ThrowStatement, this.argument = argument;
}
return ThrowStatement2;
})();
exports2.ThrowStatement = ThrowStatement;
var TryStatement = /* @__PURE__ */ (function() {
function TryStatement2(block, handler, finalizer) {
this.type = syntax_1.Syntax.TryStatement, this.block = block, this.handler = handler, this.finalizer = finalizer;
}
return TryStatement2;
})();
exports2.TryStatement = TryStatement;
var UnaryExpression = /* @__PURE__ */ (function() {
function UnaryExpression2(operator, argument) {
this.type = syntax_1.Syntax.UnaryExpression, this.operator = operator, this.argument = argument, this.prefix = !0;
}
return UnaryExpression2;
})();
exports2.UnaryExpression = UnaryExpression;
var UpdateExpression = /* @__PURE__ */ (function() {
function UpdateExpression2(operator, argument, prefix) {
this.type = syntax_1.Syntax.UpdateExpression, this.operator = operator, this.argument = argument, this.prefix = prefix;
}
return UpdateExpression2;
})();
exports2.UpdateExpression = UpdateExpression;
var VariableDeclaration = /* @__PURE__ */ (function() {
function VariableDeclaration2(declarations, kind) {
this.type = syntax_1.Syntax.VariableDeclaration, this.declarations = declarations, this.kind = kind;
}
return VariableDeclaration2;
})();
exports2.VariableDeclaration = VariableDeclaration;
var VariableDeclarator = /* @__PURE__ */ (function() {
function VariableDeclarator2(id, init) {
this.type = syntax_1.Syntax.VariableDeclarator, this.id = id, this.init = init;
}
return VariableDeclarator2;
})();
exports2.VariableDeclarator = VariableDeclarator;
var WhileStatement = /* @__PURE__ */ (function() {
function WhileStatement2(test, body) {
this.type = syntax_1.Syntax.WhileStatement, this.test = test, this.body = body;
}
return WhileStatement2;
})();
exports2.WhileStatement = WhileStatement;
var WithStatement = /* @__PURE__ */ (function() {
function WithStatement2(object, body) {
this.type = syntax_1.Syntax.WithStatement, this.object = object, this.body = body;
}
return WithStatement2;
})();
exports2.WithStatement = WithStatement;
var YieldExpression = /* @__PURE__ */ (function() {
function YieldExpression2(argument, delegate) {
this.type = syntax_1.Syntax.YieldExpression, this.argument = argument, this.delegate = delegate;
}
return YieldExpression2;
})();
exports2.YieldExpression = YieldExpression;
},
/* 8 */
/***/
function(module2, exports2, __webpack_require__) {
"use strict";
Object.defineProperty(exports2, "__esModule", { value: !0 });
var assert_1 = __webpack_require__(9), error_handler_1 = __webpack_require__(10), messages_1 = __webpack_require__(11), Node = __webpack_require__(7), scanner_1 = __webpack_require__(12), syntax_1 = __webpack_require__(2), token_1 = __webpack_require__(13), ArrowParameterPlaceHolder = "ArrowParameterPlaceHolder", Parser = (function() {
function Parser2(code, options, delegate) {
options === void 0 && (options = {}), this.config = {
range: typeof options.range == "boolean" && options.range,
loc: typeof options.loc == "boolean" && options.loc,
source: null,
tokens: typeof options.tokens == "boolean" && options.tokens,
comment: typeof options.comment == "boolean" && options.comment,
tolerant: typeof options.tolerant == "boolean" && options.tolerant
}, this.config.loc && options.source && options.source !== null && (this.config.source = String(options.source)), this.delegate = delegate, this.errorHandler = new error_handler_1.ErrorHandler(), this.errorHandler.tolerant = this.config.tolerant, this.scanner = new scanner_1.Scanner(code, this.errorHandler), this.scanner.trackComment = this.config.comment, this.operatorPrecedence = {
")": 0,
";": 0,
",": 0,
"=": 0,
"]": 0,
"||": 1,
"&&": 2,
"|": 3,
"^": 4,
"&": 5,
"==": 6,
"!=": 6,
"===": 6,
"!==": 6,
"<": 7,
">": 7,
"<=": 7,
">=": 7,
"<<": 8,
">>": 8,
">>>": 8,
"+": 9,
"-": 9,
"*": 11,
"/": 11,
"%": 11
}, this.lookahead = {
type: 2,
value: "",
lineNumber: this.scanner.lineNumber,
lineStart: 0,
start: 0,
end: 0
}, this.hasLineTerminator = !1, this.context = {
isModule: !1,
await: !1,
allowIn: !0,
allowStrictDirective: !0,
allowYield: !0,
firstCoverInitializedNameError: null,
isAssignmentTarget: !1,
isBindingElement: !1,
inFunctionBody: !1,
inIteration: !1,
inSwitch: !1,
labelSet: {},
strict: !1
}, this.tokens = [], this.startMarker = {
index: 0,
line: this.scanner.lineNumber,
column: 0
}, this.lastMarker = {
index: 0,
line: this.scanner.lineNumber,
column: 0
}, this.nextToken(), this.lastMarker = {
index: this.scanner.index,
line: this.scanner.lineNumber,
column: this.scanner.index - this.scanner.lineStart
};
}
return Parser2.prototype.throwError = function(messageFormat) {
for (var values = [], _i = 1; _i < arguments.length; _i++)
values[_i - 1] = arguments[_i];
var args = Array.prototype.slice.call(arguments, 1), msg = messageFormat.replace(/%(\d)/g, function(whole, idx) {
return assert_1.assert(idx < args.length, "Message reference must be in range"), args[idx];
}), index = this.lastMarker.index, line = this.lastMarker.line, column = this.lastMarker.column + 1;
throw this.errorHandler.createError(index, line, column, msg);
}, Parser2.prototype.tolerateError = function(messageFormat) {
for (var values = [], _i = 1; _i < arguments.length; _i++)
values[_i - 1] = arguments[_i];
var args = Array.prototype.slice.call(arguments, 1), msg = messageFormat.replace(/%(\d)/g, function(whole, idx) {
return assert_1.assert(idx < args.length, "Message reference must be in range"), args[idx];
}), index = this.lastMarker.index, line = this.scanner.lineNumber, column = this.lastMarker.column + 1;
this.errorHandler.tolerateError(index, line, column, msg);
}, Parser2.prototype.unexpectedTokenError = function(token, message) {
var msg = message || messages_1.Messages.UnexpectedToken, value;
if (token ? (message || (msg = token.type === 2 ? messages_1.Messages.UnexpectedEOS : token.type === 3 ? messages_1.Messages.UnexpectedIdentifier : token.type === 6 ? messages_1.Messages.UnexpectedNumber : token.type === 8 ? messages_1.Messages.UnexpectedString : token.type === 10 ? messages_1.Messages.UnexpectedTemplate : messages_1.Messages.UnexpectedToken, token.type === 4 && (this.scanner.isFutureReservedWord(token.value) ? msg = messages_1.Messages.UnexpectedReserved : this.context.strict && this.scanner.isStrictModeReservedWord(token.value) && (msg = messages_1.Messages.StrictReservedWord))), value = token.value) : value = "ILLEGAL", msg = msg.replace("%0", value), token && typeof token.lineNumber == "number") {
var index = token.start, line = token.lineNumber, lastMarkerLineStart = this.lastMarker.index - this.lastMarker.column, column = token.start - lastMarkerLineStart + 1;
return this.errorHandler.createError(index, line, column, msg);
} else {
var index = this.lastMarker.index, line = this.lastMarker.line, column = this.lastMarker.column + 1;
return this.errorHandler.createError(index, line, column, msg);
}
}, Parser2.prototype.throwUnexpectedToken = function(token, message) {
throw this.unexpectedTokenError(token, message);
}, Parser2.prototype.tolerateUnexpectedToken = function(token, message) {
this.errorHandler.tolerate(this.unexpectedTokenError(token, message));
}, Parser2.prototype.collectComments = function() {
if (!this.config.comment)
this.scanner.scanComments();
else {
var comments = this.scanner.scanComments();
if (comments.length > 0 && this.delegate)
for (var i = 0; i < comments.length; ++i) {
var e = comments[i], node = void 0;
node = {
type: e.multiLine ? "BlockComment" : "LineComment",
value: this.scanner.source.slice(e.slice[0], e.slice[1])
}, this.config.range && (node.range = e.range), this.config.loc && (node.loc = e.loc);
var metadata = {
start: {
line: e.loc.start.line,
column: e.loc.start.column,
offset: e.range[0]
},
end: {
line: e.loc.end.line,
column: e.loc.end.column,
offset: e.range[1]
}
};
this.delegate(node, metadata);
}
}
}, Parser2.prototype.getTokenRaw = function(token) {
return this.scanner.source.slice(token.start, token.end);
}, Parser2.prototype.convertToken = function(token) {
var t = {
type: token_1.TokenName[token.type],
value: this.getTokenRaw(token)
};
if (this.config.range && (t.range = [token.start, token.end]), this.config.loc && (t.loc = {
start: {
line: this.startMarker.line,
column: this.startMarker.column
},
end: {
line: this.scanner.lineNumber,
column: this.scanner.index - this.scanner.lineStart
}
}), token.type === 9) {
var pattern = token.pattern, flags = token.flags;
t.regex = { pattern, flags };
}
return t;
}, Parser2.prototype.nextToken = function() {
var token = this.lookahead;
this.lastMarker.index = this.scanner.index, this.lastMarker.line = this.scanner.lineNumber, this.lastMarker.column = this.scanner.index - this.scanner.lineStart, this.collectComments(), this.scanner.index !== this.startMarker.index && (this.startMarker.index = this.scanner.index, this.startMarker.line = this.scanner.lineNumber, this.startMarker.column = this.scanner.index - this.scanner.lineStart);
var next = this.scanner.lex();
return this.hasLineTerminator = token.lineNumber !== next.lineNumber, next && this.context.strict && next.type === 3 && this.scanner.isStrictModeReservedWord(next.value) && (next.type = 4), this.lookahead = next, this.config.tokens && next.type !== 2 && this.tokens.push(this.convertToken(next)), token;
}, Parser2.prototype.nextRegexToken = function() {
this.collectComments();
var token = this.scanner.scanRegExp();
return this.config.tokens && (this.tokens.pop(), this.tokens.push(this.convertToken(token))), this.lookahead = token, this.nextToken(), token;
}, Parser2.prototype.createNode = function() {
return {
index: this.startMarker.index,
line: this.startMarker.line,
column: this.startMarker.column
};
}, Parser2.prototype.startNode = function(token, lastLineStart) {
lastLineStart === void 0 && (lastLineStart = 0);
var column = token.start - token.lineStart, line = token.lineNumber;
return column < 0 && (column += lastLineStart, line--), {
index: token.start,
line,
column
};
}, Parser2.prototype.finalize = function(marker, node) {
if (this.config.range && (node.range = [marker.index, this.lastMarker.index]), this.config.loc && (node.loc = {
start: {
line: marker.line,
column: marker.column
},
end: {
line: this.lastMarker.line,
column: this.lastMarker.column
}
}, this.config.source && (node.loc.source = this.config.source)), this.delegate) {
var metadata = {
start: {
line: marker.line,
column: marker.column,
offset: marker.index
},
end: {
line: this.lastMarker.line,
column: this.lastMarker.column,
offset: this.lastMarker.index
}
};
this.delegate(node, metadata);
}
return node;
}, Parser2.prototype.expect = function(value) {
var token = this.nextToken();
(token.type !== 7 || token.value !== value) && this.throwUnexpectedToken(token);
}, Parser2.prototype.expectCommaSeparator = function() {
if (this.config.tolerant) {
var token = this.lookahead;
token.type === 7 && token.value === "," ? this.nextToken() : token.type === 7 && token.value === ";" ? (this.nextToken(), this.tolerateUnexpectedToken(token)) : this.tolerateUnexpectedToken(token, messages_1.Messages.UnexpectedToken);
} else
this.expect(",");
}, Parser2.prototype.expectKeyword = function(keyword) {
var token = this.nextToken();
(token.type !== 4 || token.value !== keyword) && this.throwUnexpectedToken(token);
}, Parser2.prototype.match = function(value) {
return this.lookahead.type === 7 && this.lookahead.value === value;
}, Parser2.prototype.matchKeyword = function(keyword) {
return this.lookahead.type === 4 && this.lookahead.value === keyword;
}, Parser2.prototype.matchContextualKeyword = function(keyword) {
return this.lookahead.type === 3 && this.lookahead.value === keyword;
}, Parser2.prototype.matchAssign = function() {
if (this.lookahead.type !== 7)
return !1;
var op = this.lookahead.value;
return op === "=" || op === "*=" || op === "**=" || op === "/=" || op === "%=" || op === "+=" || op === "-=" || op === "<<=" || op === ">>=" || op === ">>>=" || op === "&=" || op === "^=" || op === "|=";
}, Parser2.prototype.isolateCoverGrammar = function(parseFunction) {
var previousIsBindingElement = this.context.isBindingElement, previousIsAssignmentTarget = this.context.isAssignmentTarget, previousFirstCoverInitializedNameError = this.context.firstCoverInitializedNameError;
this.context.isBindingElement = !0, this.context.isAssignmentTarget = !0, this.context.firstCoverInitializedNameError = null;
var result = parseFunction.call(this);
return this.context.firstCoverInitializedNameError !== null && this.throwUnexpectedToken(this.context.firstCoverInitializedNameError), this.context.isBindingElement = previousIsBindingElement, this.context.isAssignmentTarget = previousIsAssignmentTarget, this.context.firstCoverInitializedNameError = previousFirstCoverInitializedNameError, result;
}, Parser2.prototype.inheritCoverGrammar = function(parseFunction) {
var previousIsBindingElement = this.context.isBindingElement, previousIsAssignmentTarget = this.context.isAssignmentTarget, previousFirstCoverInitializedNameError = this.context.firstCoverInitializedNameError;
this.context.isBindingElement = !0, this.context.isAssignmentTarget = !0, this.context.firstCoverInitializedNameError = null;
var result = parseFunction.call(this);
return this.context.isBindingElement = this.context.isBindingElement && previousIsBindingElement, this.context.isAssignmentTarget = this.context.isAssignmentTarget && previousIsAssignmentTarget, this.context.firstCoverInitializedNameError = previousFirstCoverInitializedNameError || this.context.firstCoverInitializedNameError, result;
}, Parser2.prototype.consumeSemicolon = function() {
this.match(";") ? this.nextToken() : this.hasLineTerminator || (this.lookahead.type !== 2 && !this.match("}") && this.throwUnexpectedToken(this.lookahead), this.lastMarker.index = this.startMarker.index, this.lastMarker.line = this.startMarker.line, this.lastMarker.column = this.startMarker.column);
}, Parser2.prototype.parsePrimaryExpression = function() {
var node = this.createNode(), expr, token, raw;
switch (this.lookahead.type) {
case 3:
(this.context.isModule || this.context.await) && this.lookahead.value === "await" && this.tolerateUnexpectedToken(this.lookahead), expr = this.matchAsyncFunction() ? this.parseFunctionExpression() : this.finalize(node, new Node.Identifier(this.nextToken().value));
break;
case 6:
case 8:
this.context.strict && this.lookahead.octal && this.tolerateUnexpectedToken(this.lookahead, messages_1.Messages.StrictOctalLiteral), this.context.isAssignmentTarget = !1, this.context.isBindingElement = !1, token = this.nextToken(), raw = this.getTokenRaw(token), expr = this.finalize(node, new Node.Literal(token.value, raw));
break;
case 1:
this.context.isAssignmentTarget = !1, this.context.isBindingElement = !1, token = this.nextToken(), raw = this.getTokenRaw(token), expr = this.finalize(node, new Node.Literal(token.value === "true", raw));
break;
case 5:
this.context.isAssignmentTarget = !1, this.context.isBindingElement = !1, token = this.nextToken(), raw = this.getTokenRaw(token), expr = this.finalize(node, new Node.Literal(null, raw));
break;
case 10:
expr = this.parseTemplateLiteral();
break;
case 7:
switch (this.lookahead.value) {
case "(":
this.context.isBindingElement = !1, expr = this.inheritCoverGrammar(this.parseGroupExpression);
break;
case "[":
expr = this.inheritCoverGrammar(this.parseArrayInitializer);
break;
case "{":
expr = this.inheritCoverGrammar(this.parseObjectInitializer);
break;
case "/":
case "/=":
this.context.isAssignmentTarget = !1, this.context.isBindingElement = !1, this.scanner.index = this.startMarker.index, token = this.nextRegexToken(), raw = this.getTokenRaw(token), expr = this.finalize(node, new Node.RegexLiteral(token.regex, raw, token.pattern, token.flags));
break;
default:
expr = this.throwUnexpectedToken(this.nextToken());
}
break;
case 4:
!this.context.strict && this.context.allowYield && this.matchKeyword("yield") ? expr = this.parseIdentifierName() : !this.context.strict && this.matchKeyword("let") ? expr = this.finalize(node, new Node.Identifier(this.nextToken().value)) : (this.context.isAssignmentTarget = !1, this.context.isBindingElement = !1, this.matchKeyword("function") ? expr = this.parseFunctionExpression() : this.matchKeyword("this") ? (this.nextToken(), expr = this.finalize(node, new Node.ThisExpression())) : this.matchKeyword("class") ? expr = this.parseClassExpression() : expr = this.throwUnexpectedToken(this.nextToken()));
break;
default:
expr = this.throwUnexpectedToken(this.nextToken());
}
return expr;
}, Parser2.prototype.parseSpreadElement = function() {
var node = this.createNode();
this.expect("...");
var arg = this.inheritCoverGrammar(this.parseAssignmentExpression);
return this.finalize(node, new Node.SpreadElement(arg));
}, Parser2.prototype.parseArrayInitializer = function() {
var node = this.createNode(), elements = [];
for (this.expect("["); !this.match("]"); )
if (this.match(","))
this.nextToken(), elements.push(null);
else if (this.match("...")) {
var element = this.parseSpreadElement();
this.match("]") || (this.context.isAssignmentTarget = !1, this.context.isBindingElement = !1, this.expect(",")), elements.push(element);
} else
elements.push(this.inheritCoverGrammar(this.parseAssignmentExpression)), this.match("]") || this.expect(",");
return this.expect("]"), this.finalize(node, new Node.ArrayExpression(elements));
}, Parser2.prototype.parsePropertyMethod = function(params) {
this.context.isAssignmentTarget = !1, this.context.isBindingElement = !1;
var previousStrict = this.context.strict, previousAllowStrictDirective = this.context.allowStrictDirective;
this.context.allowStrictDirective = params.simple;
var body = this.isolateCoverGrammar(this.parseFunctionSourceElements);
return this.context.strict && params.firstRestricted && this.tolerateUnexpectedToken(params.firstRestricted, params.message), this.context.strict && params.stricted && this.tolerateUnexpectedToken(params.stricted, params.message), this.context.strict = previousStrict, this.context.allowStrictDirective = previousAllowStrictDirective, body;
}, Parser2.prototype.parsePropertyMethodFunction = function() {
var isGenerator = !1, node = this.createNode(), previousAllowYield = this.context.allowYield;
this.context.allowYield = !0;
var params = this.parseFormalParameters(), method = this.parsePropertyMethod(params);
return this.context.allowYield = previousAllowYield, this.finalize(node, new Node.FunctionExpression(null, params.params, method, isGenerator));
}, Parser2.prototype.parsePropertyMethodAsyncFunction = function() {
var node = this.createNode(), previousAllowYield = this.context.allowYield, previousAwait = this.context.await;
this.context.allowYield = !1, this.context.await = !0;
var params = this.parseFormalParameters(), method = this.parsePropertyMethod(params);
return this.context.allowYield = previousAllowYield, this.context.await = previousAwait, this.finalize(node, new Node.AsyncFunctionExpression(null, params.params, method));
}, Parser2.prototype.parseObjectPropertyKey = function() {
var node = this.createNode(), token = this.nextToken(), key;
switch (token.type) {
case 8:
case 6:
this.context.strict && token.octal && this.tolerateUnexpectedToken(token, messages_1.Messages.StrictOctalLiteral);
var raw = this.getTokenRaw(token);
key = this.finalize(node, new Node.Literal(token.value, raw));
break;
case 3:
case 1:
case 5:
case 4:
key = this.finalize(node, new Node.Identifier(token.value));
break;
case 7:
token.value === "[" ? (key = this.isolateCoverGrammar(this.parseAssignmentExpression), this.expect("]")) : key = this.throwUnexpectedToken(token);
break;
default:
key = this.throwUnexpectedToken(token);
}
return key;
}, Parser2.prototype.isPropertyKey = function(key, value) {
return key.type === syntax_1.Syntax.Identifier && key.name === value || key.type === syntax_1.Syntax.Literal && key.value === value;
}, Parser2.prototype.parseObjectProperty = function(hasProto) {
var node = this.createNode(), token = this.lookahead, kind, key = null, value = null, computed = !1, method = !1, shorthand = !1, isAsync = !1;
if (token.type === 3) {
var id = token.value;
this.nextToken(), computed = this.match("["), isAsync = !this.hasLineTerminator && id === "async" && !this.match(":") && !this.match("(") && !this.match("*") && !this.match(","), key = isAsync ? this.parseObjectPropertyKey() : this.finalize(node, new Node.Identifier(id));
} else this.match("*") ? this.nextToken() : (computed = this.match("["), key = this.parseObjectPropertyKey());
var lookaheadPropertyKey = this.qualifiedPropertyName(this.lookahead);
if (token.type === 3 && !isAsync && token.value === "get" && lookaheadPropertyKey)
kind = "get", computed = this.match("["), key = this.parseObjectPropertyKey(), this.context.allowYield = !1, value = this.parseGetterMethod();
else if (token.type === 3 && !isAsync && token.value === "set" && lookaheadPropertyKey)
kind = "set", computed = this.match("["), key = this.parseObjectPropertyKey(), value = this.parseSetterMethod();
else if (token.type === 7 && token.value === "*" && lookaheadPropertyKey)
kind = "init", computed = this.match("["), key = this.parseObjectPropertyKey(), value = this.parseGeneratorMethod(), method = !0;
else if (key || this.throwUnexpectedToken(this.lookahead), kind = "init", this.match(":") && !isAsync)
!computed && this.isPropertyKey(key, "__proto__") && (hasProto.value && this.tolerateError(messages_1.Messages.DuplicateProtoProperty), hasProto.value = !0), this.nextToken(), value = this.inheritCoverGrammar(this.parseAssignmentExpression);
else if (this.match("("))
value = isAsync ? this.parsePropertyMethodAsyncFunction() : this.parsePropertyMethodFunction(), method = !0;
else if (token.type === 3) {
var id = this.finalize(node, new Node.Identifier(token.value));
if (this.match("=")) {
this.context.firstCoverInitializedNameError = this.lookahead, this.nextToken(), shorthand = !0;
var init = this.isolateCoverGrammar(this.parseAssignmentExpression);
value = this.finalize(node, new Node.AssignmentPattern(id, init));
} else
shorthand = !0, value = id;
} else
this.throwUnexpectedToken(this.nextToken());
return this.finalize(node, new Node.Property(kind, key, computed, value, method, shorthand));
}, Parser2.prototype.parseObjectInitializer = function() {
var node = this.createNode();
this.expect("{");
for (var properties = [], hasProto = { value: !1 }; !this.match("}"); )
properties.push(this.parseObjectProperty(hasProto)), this.match("}") || this.expectCommaSeparator();
return this.expect("}"), this.finalize(node, new Node.ObjectExpression(properties));
}, Parser2.prototype.parseTemplateHead = function() {
assert_1.assert(this.lookahead.head, "Template literal must start with a template head");
var node = this.createNode(), token = this.nextToken(), raw = token.value, cooked = token.cooked;
return this.finalize(node, new Node.TemplateElement({ raw, cooked }, token.tail));
}, Parser2.prototype.parseTemplateElement = function() {
this.lookahead.type !== 10 && this.throwUnexpectedToken();
var node = this.createNode(), token = this.nextToken(), raw = token.value, cooked = token.cooked;
return this.finalize(node, new Node.TemplateElement({ raw, cooked }, token.tail));
}, Parser2.prototype.parseTemplateLiteral = function() {
var node = this.createNode(), expressions = [], quasis = [], quasi = this.parseTemplateHead();
for (quasis.push(quasi); !quasi.tail; )
expressions.push(this.parseExpression()), quasi = this.parseTemplateElement(), quasis.push(quasi);
return this.finalize(node, new Node.TemplateLiteral(quasis, expressions));
}, Parser2.prototype.reinterpretExpressionAsPattern = function(expr) {
switch (expr.type) {
case syntax_1.Syntax.Identifier:
case syntax_1.Syntax.MemberExpression:
case syntax_1.Syntax.RestElement:
case syntax_1.Syntax.AssignmentPattern:
break;
case syntax_1.Syntax.SpreadElement:
expr.type = syntax_1.Syntax.RestElement, this.reinterpretExpressionAsPattern(expr.argument);
break;
case syntax_1.Syntax.ArrayExpression:
expr.type = syntax_1.Syntax.ArrayPattern;
for (var i = 0; i < expr.elements.length; i++)
expr.elements[i] !== null && this.reinterpretExpressionAsPattern(expr.elements[i]);
break;
case syntax_1.Syntax.ObjectExpression:
expr.type = syntax_1.Syntax.ObjectPattern;
for (var i = 0; i < expr.properties.length; i++)
this.reinterpretExpressionAsPattern(expr.properties[i].value);
break;
case syntax_1.Syntax.AssignmentExpression:
expr.type = syntax_1.Syntax.AssignmentPattern, delete expr.operator, this.reinterpretExpressionAsPattern(expr.left);
break;
default:
break;
}
}, Parser2.prototype.parseGroupExpression = function() {
var expr;
if (this.expect("("), this.match(")"))
this.nextToken(), this.match("=>") || this.expect("=>"), expr = {
type: ArrowParameterPlaceHolder,
params: [],
async: !1
};
else {
var startToken = this.lookahead, params = [];
if (this.match("..."))
expr = this.parseRestElement(params), this.expect(")"), this.match("=>") || this.expect("=>"), expr = {
type: ArrowParameterPlaceHolder,
params: [expr],
async: !1
};
else {
var arrow = !1;
if (this.context.isBindingElement = !0, expr = this.inheritCoverGrammar(this.parseAssignmentExpression), this.match(",")) {
var expressions = [];
for (this.context.isAssignmentTarget = !1, expressions.push(expr); this.lookahead.type !== 2 && this.match(","); ) {
if (this.nextToken(), this.match(")")) {
this.nextToken();
for (var i = 0; i < expressions.length; i++)
this.reinterpretExpressionAsPattern(expressions[i]);
arrow = !0, expr = {
type: ArrowParameterPlaceHolder,
params: expressions,
async: !1
};
} else if (this.match("...")) {
this.context.isBindingElement || this.throwUnexpectedToken(this.lookahead), expressions.push(this.parseRestElement(params)), this.expect(")"), this.match("=>") || this.expect("=>"), this.context.isBindingElement = !1;
for (var i = 0; i < expressions.length; i++)
this.reinterpretExpressionAsPattern(expressions[i]);
arrow = !0, expr = {
type: ArrowParameterPlaceHolder,
params: expressions,
async: !1
};
} else
expressions.push(this.inheritCoverGrammar(this.parseAssignmentExpression));
if (arrow)
break;
}
arrow || (expr = this.finalize(this.startNode(startToken), new Node.SequenceExpression(expressions)));
}
if (!arrow) {
if (this.expect(")"), this.match("=>") && (expr.type === syntax_1.Syntax.Identifier && expr.name === "yield" && (arrow = !0, expr = {
type: ArrowParameterPlaceHolder,
params: [expr],
async: !1
}), !arrow)) {
if (this.context.isBindingElement || this.throwUnexpectedToken(this.lookahead), expr.type === syntax_1.Syntax.SequenceExpression)
for (var i = 0; i < expr.expressions.length; i++)
this.reinterpretExpressionAsPattern(expr.expressions[i]);
else
this.reinterpretExpressionAsPattern(expr);
var parameters = expr.type === syntax_1.Syntax.SequenceExpression ? expr.expressions : [expr];
expr = {
type: ArrowParameterPlaceHolder,
params: parameters,
async: !1
};
}
this.context.isBindingElement = !1;
}
}
}
return expr;
}, Parser2.prototype.parseArguments = function() {
this.expect("(");
var args = [];
if (!this.match(")"))
for (; ; ) {
var expr = this.match("...") ? this.parseSpreadElement() : this.isolateCoverGrammar(this.parseAssignmentExpression);
if (args.push(expr), this.match(")") || (this.expectCommaSeparator(), this.match(")")))
break;
}
return this.expect(")"), args;
}, Parser2.prototype.isIdentifierName = function(token) {
return token.type === 3 || token.type === 4 || token.type === 1 || token.type === 5;
}, Parser2.prototype.parseIdentifierName = function() {
var node = this.createNode(), token = this.nextToken();
return this.isIdentifierName(token) || this.throwUnexpectedToken(token), this.finalize(node, new Node.Identifier(token.value));
}, Parser2.prototype.parseNewExpression = function() {
var node = this.createNode(), id = this.parseIdentifierName();
assert_1.assert(id.name === "new", "New expression must start with `new`");
var expr;
if (this.match("."))
if (this.nextToken(), this.lookahead.type === 3 && this.context.inFunctionBody && this.lookahead.value === "target") {
var property = this.parseIdentifierName();
expr = new Node.MetaProperty(id, property);
} else
this.throwUnexpectedToken(this.lookahead);
else {
var callee = this.isolateCoverGrammar(this.parseLeftHandSideExpression), args = this.match("(") ? this.parseArguments() : [];
expr = new Node.NewExpression(callee, args), this.context.isAssignmentTarget = !1, this.context.isBindingElement = !1;
}
return this.finalize(node, expr);
}, Parser2.prototype.parseAsyncArgument = function() {
var arg = this.parseAssignmentExpression();
return this.context.firstCoverInitializedNameError = null, arg;
}, Parser2.prototype.parseAsyncArguments = function() {
this.expect("(");
var args = [];
if (!this.match(")"))
for (; ; ) {
var expr = this.match("...") ? this.parseSpreadElement() : this.isolateCoverGrammar(this.parseAsyncArgument);
if (args.push(expr), this.match(")") || (this.expectCommaSeparator(), this.match(")")))
break;
}
return this.expect(")"), args;
}, Parser2.prototype.parseLeftHandSideExpressionAllowCall = function() {
var startToken = this.lookahead, maybeAsync = this.matchContextualKeyword("async"), previousAllowIn = this.context.allowIn;
this.context.allowIn = !0;
var expr;
for (this.matchKeyword("super") && this.context.inFunctionBody ? (expr = this.createNode(), this.nextToken(), expr = this.finalize(expr, new Node.Super()), !this.match("(") && !this.match(".") && !this.match("[") && this.throwUnexpectedToken(this.lookahead)) : expr = this.inheritCoverGrammar(this.matchKeyword("new") ? this.parseNewExpression : this.parsePrimaryExpression); ; )
if (this.match(".")) {
this.context.isBindingElement = !1, this.context.isAssignmentTarget = !0, this.expect(".");
var property = this.parseIdentifierName();
expr = this.finalize(this.startNode(startToken), new Node.StaticMemberExpression(expr, property));
} else if (this.match("(")) {
var asyncArrow = maybeAsync && startToken.lineNumber === this.lookahead.lineNumber;
this.context.isBindingElement = !1, this.context.isAssignmentTarget = !1;
var args = asyncArrow ? this.parseAsyncArguments() : this.parseArguments();
if (expr = this.finalize(this.startNode(startToken), new Node.CallExpression(expr, args)), asyncArrow && this.match("=>")) {
for (var i = 0; i < args.length; ++i)
this.reinterpretExpressionAsPattern(args[i]);
expr = {
type: ArrowParameterPlaceHolder,
params: args,
async: !0
};
}
} else if (this.match("[")) {
this.context.isBindingElement = !1, this.context.isAssignmentTarget = !0, this.expect("[");
var property = this.isolateCoverGrammar(this.parseExpression);
this.expect("]"), expr = this.finalize(this.startNode(startToken), new Node.ComputedMemberExpression(expr, property));
} else if (this.lookahead.type === 10 && this.lookahead.head) {
var quasi = this.parseTemplateLiteral();
expr = this.finalize(this.startNode(startToken), new Node.TaggedTemplateExpression(expr, quasi));
} else
break;
return this.context.allowIn = previousAllowIn, expr;
}, Parser2.prototype.parseSuper = function() {
var node = this.createNode();
return this.expectKeyword("super"), !this.match("[") && !this.match(".") && this.throwUnexpectedToken(this.lookahead), this.finalize(node, new Node.Super());
}, Parser2.prototype.parseLeftHandSideExpression = function() {
assert_1.assert(this.context.allowIn, "callee of new expression always allow in keyword.");
for (var node = this.startNode(this.lookahead), expr = this.matchKeyword("super") && this.context.inFunctionBody ? this.parseSuper() : this.inheritCoverGrammar(this.matchKeyword("new") ? this.parseNewExpression : this.parsePrimaryExpression); ; )
if (this.match("[")) {
this.context.isBindingElement = !1, this.context.isAssignmentTarget = !0, this.expect("[");
var property = this.isolateCoverGrammar(this.parseExpression);
this.expect("]"), expr = this.finalize(node, new Node.ComputedMemberExpression(expr, property));
} else if (this.match(".")) {
this.context.isBindingElement = !1, this.context.isAssignmentTarget = !0, this.expect(".");
var property = this.parseIdentifierName();
expr = this.finalize(node, new Node.StaticMemberExpression(expr, property));
} else if (this.lookahead.type === 10 && this.lookahead.head) {
var quasi = this.parseTemplateLiteral();
expr = this.finalize(node, new Node.TaggedTemplateExpression(expr, quasi));
} else
break;
return expr;
}, Parser2.prototype.parseUpdateExpression = function() {
var expr, startToken = this.lookahead;
if (this.match("++") || this.match("--")) {
var node = this.startNode(startToken), token = this.nextToken();
expr = this.inheritCoverGrammar(this.parseUnaryExpression), this.context.strict && expr.type === syntax_1.Syntax.Identifier && this.scanner.isRestrictedWord(expr.name) && this.tolerateError(messages_1.Messages.StrictLHSPrefix), this.context.isAssignmentTarget || this.tolerateError(messages_1.Messages.InvalidLHSInAssignment);
var prefix = !0;
expr = this.finalize(node, new Node.UpdateExpression(token.value, expr, prefix)), this.context.isAssignmentTarget = !1, this.context.isBindingElement = !1;
} else if (expr = this.inheritCoverGrammar(this.parseLeftHandSideExpressionAllowCall), !this.hasLineTerminator && this.lookahead.type === 7 && (this.match("++") || this.match("--"))) {
this.context.strict && expr.type === syntax_1.Syntax.Identifier && this.scanner.isRestrictedWord(expr.name) && this.tolerateError(messages_1.Messages.StrictLHSPostfix), this.context.isAssignmentTarget || this.tolerateError(messages_1.Messages.InvalidLHSInAssignment), this.context.isAssignmentTarget = !1, this.context.isBindingElement = !1;
var operator = this.nextToken().value, prefix = !1;
expr = this.finalize(this.startNode(startToken), new Node.UpdateExpression(operator, expr, prefix));
}
return expr;
}, Parser2.prototype.parseAwaitExpression = function() {
var node = this.createNode();
this.nextToken();
var argument = this.parseUnaryExpression();
return this.finalize(node, new Node.AwaitExpression(argument));
}, Parser2.prototype.parseUnaryExpression = function() {
var expr;
if (this.match("+") || this.match("-") || this.match("~") || this.match("!") || this.matchKeyword("delete") || this.matchKeyword("void") || this.matchKeyword("typeof")) {
var node = this.startNode(this.lookahead), token = this.nextToken();
expr = this.inheritCoverGrammar(this.parseUnaryExpression), expr = this.finalize(node, new Node.UnaryExpression(token.value, expr)), this.context.strict && expr.operator === "delete" && expr.argument.type === syntax_1.Syntax.Identifier && this.tolerateError(messages_1.Messages.StrictDelete), this.context.isAssignmentTarget = !1, this.context.isBindingElement = !1;
} else this.context.await && this.matchContextualKeyword("await") ? expr = this.parseAwaitExpression() : expr = this.parseUpdateExpression();
return expr;
}, Parser2.prototype.parseExponentiationExpression = function() {
var startToken = this.lookahead, expr = this.inheritCoverGrammar(this.parseUnaryExpression);
if (expr.type !== syntax_1.Syntax.UnaryExpression && this.match("**")) {
this.nextToken(), this.context.isAssignmentTarget = !1, this.context.isBindingElement = !1;
var left = expr, right = this.isolateCoverGrammar(this.parseExponentiationExpression);
expr = this.finalize(this.startNode(startToken), new Node.BinaryExpression("**", left, right));
}
return expr;
}, Parser2.prototype.binaryPrecedence = function(token) {
var op = token.value, precedence;
return token.type === 7 ? precedence = this.operatorPrecedence[op] || 0 : token.type === 4 ? precedence = op === "instanceof" || this.context.allowIn && op === "in" ? 7 : 0 : precedence = 0, precedence;
}, Parser2.prototype.parseBinaryExpression = function() {
var startToken = this.lookahead, expr = this.inheritCoverGrammar(this.parseExponentiationExpression), token = this.lookahead, prec = this.binaryPrecedence(token);
if (prec > 0) {
this.nextToken(), this.context.isAssignmentTarget = !1, this.context.isBindingElement = !1;
for (var markers = [startToken, this.lookahead], left = expr, right = this.isolateCoverGrammar(this.parseExponentiationExpression), stack = [left, token.value, right], precedences = [prec]; prec = this.binaryPrecedence(this.lookahead), !(prec <= 0); ) {
for (; stack.length > 2 && prec <= precedences[precedences.length - 1]; ) {
right = stack.pop();
var operator = stack.pop();
precedences.pop(), left = stack.pop(), markers.pop();
var node = this.startNode(markers[markers.length - 1]);
stack.push(this.finalize(node, new Node.BinaryExpression(operator, left, right)));
}
stack.push(this.nextToken().value), precedences.push(prec), markers.push(this.lookahead), stack.push(this.isolateCoverGrammar(this.parseExponentiationExpression));
}
var i = stack.length - 1;
expr = stack[i];
for (var lastMarker = markers.pop(); i > 1; ) {
var marker = markers.pop(), lastLineStart = lastMarker && lastMarker.lineStart, node = this.startNode(marker, lastLineStart), operator = stack[i - 1];
expr = this.finalize(node, new Node.BinaryExpression(operator, stack[i - 2], expr)), i -= 2, lastMarker = marker;
}
}
return expr;
}, Parser2.prototype.parseConditionalExpression = function() {
var startToken = this.lookahead, expr = this.inheritCoverGrammar(this.parseBinaryExpression);
if (this.match("?")) {
this.nextToken();
var previousAllowIn = this.context.allowIn;
this.context.allowIn = !0;
var consequent = this.isolateCoverGrammar(this.parseAssignmentExpression);
this.context.allowIn = previousAllowIn, this.expect(":");
var alternate = this.isolateCoverGrammar(this.parseAssignmentExpression);
expr = this.finalize(this.startNode(startToken), new Node.ConditionalExpression(expr, consequent, alternate)), this.context.isAssignmentTarget = !1, this.context.isBindingElement = !1;
}
return expr;
}, Parser2.prototype.checkPatternParam = function(options, param) {
switch (param.type) {
case syntax_1.Syntax.Identifier:
this.validateParam(options, param, param.name);
break;
case syntax_1.Syntax.RestElement:
this.checkPatternParam(options, param.argument);
break;
case syntax_1.Syntax.AssignmentPattern:
this.checkPatternParam(options, param.left);
break;
case syntax_1.Syntax.ArrayPattern:
for (var i = 0; i < param.elements.length; i++)
param.elements[i] !== null && this.checkPatternParam(options, param.elements[i]);
break;
case syntax_1.Syntax.ObjectPattern:
for (var i = 0; i < param.properties.length; i++)
this.checkPatternParam(options, param.properties[i].value);
break;
default:
break;
}
options.simple = options.simple && param instanceof Node.Identifier;
}, Parser2.prototype.reinterpretAsCoverFormalsList = function(expr) {
var params = [expr], options, asyncArrow = !1;
switch (expr.type) {
case syntax_1.Syntax.Identifier:
break;
case ArrowParameterPlaceHolder:
params = expr.params, asyncArrow = expr.async;
break;
default:
return null;
}
options = {
simple: !0,
paramSet: {}
};
for (var i = 0; i < params.length; ++i) {
var param = params[i];
param.type === syntax_1.Syntax.AssignmentPattern ? param.right.type === syntax_1.Syntax.YieldExpression && (param.right.argument && this.throwUnexpectedToken(this.lookahead), param.right.type = syntax_1.Syntax.Identifier, param.right.name = "yield", delete param.right.argument, delete param.right.delegate) : asyncArrow && param.type === syntax_1.Syntax.Identifier && param.name === "await" && this.throwUnexpectedToken(this.lookahead), this.checkPatternParam(options, param), params[i] = param;
}
if (this.context.strict || !this.context.allowYield)
for (var i = 0; i < params.length; ++i) {
var param = params[i];
param.type === syntax_1.Syntax.YieldExpression && this.throwUnexpectedToken(this.lookahead);
}
if (options.message === messages_1.Messages.StrictParamDupe) {
var token = this.context.strict ? options.stricted : options.firstRestricted;
this.throwUnexpectedToken(token, options.message);
}
return {
simple: options.simple,
params,
stricted: options.stricted,
firstRestricted: options.firstRestricted,
message: options.message
};
}, Parser2.prototype.parseAssignmentExpression = function() {
var expr;
if (!this.context.allowYield && this.matchKeyword("yield"))
expr = this.parseYieldExpression();
else {
var startToken = this.lookahead, token = startToken;
if (expr = this.parseConditionalExpression(), token.type === 3 && token.lineNumber === this.lookahead.lineNumber && token.value === "async" && (this.lookahead.type === 3 || this.matchKeyword("yield"))) {
var arg = this.parsePrimaryExpression();
this.reinterpretExpressionAsPattern(arg), expr = {
type: ArrowParameterPlaceHolder,
params: [arg],
async: !0
};
}
if (expr.type === ArrowParameterPlaceHolder || this.match("=>")) {
this.context.isAssignmentTarget = !1, this.context.isBindingElement = !1;
var isAsync = expr.async, list = this.reinterpretAsCoverFormalsList(expr);
if (list) {
this.hasLineTerminator && this.tolerateUnexpectedToken(this.lookahead), this.context.firstCoverInitializedNameError = null;
var previousStrict = this.context.strict, previousAllowStrictDirective = this.context.allowStrictDirective;
this.context.allowStrictDirective = list.simple;
var previousAllowYield = this.context.allowYield, previousAwait = this.context.await;
this.context.allowYield = !0, this.context.await = isAsync;
var node = this.startNode(startToken);
this.expect("=>");
var body = void 0;
if (this.match("{")) {
var previousAllowIn = this.context.allowIn;
this.context.allowIn = !0, body = this.parseFunctionSourceElements(), this.context.allowIn = previousAllowIn;
} else
body = this.isolateCoverGrammar(this.parseAssignmentExpression);
var expression = body.type !== syntax_1.Syntax.BlockStatement;
this.context.strict && list.firstRestricted && this.throwUnexpectedToken(list.firstRestricted, list.message), this.context.strict && list.stricted && this.tolerateUnexpectedToken(list.stricted, list.message), expr = isAsync ? this.finalize(node, new Node.AsyncArrowFunctionExpression(list.params, body, expression)) : this.finalize(node, new Node.ArrowFunctionExpression(list.params, body, expression)), this.context.strict = previousStrict, this.context.allowStrictDirective = previousAllowStrictDirective, this.context.allowYield = previousAllowYield, this.context.await = previousAwait;
}
} else if (this.matchAssign()) {
if (this.context.isAssignmentTarget || this.tolerateError(messages_1.Messages.InvalidLHSInAssignment), this.context.strict && expr.type === syntax_1.Syntax.Identifier) {
var id = expr;
this.scanner.isRestrictedWord(id.name) && this.tolerateUnexpectedToken(token, messages_1.Messages.StrictLHSAssignment), this.scanner.isStrictModeReservedWord(id.name) && this.tolerateUnexpectedToken(token, messages_1.Messages.StrictReservedWord);
}
this.match("=") ? this.reinterpretExpressionAsPattern(expr) : (this.context.isAssignmentTarget = !1, this.context.isBindingElement = !1), token = this.nextToken();
var operator = token.value, right = this.isolateCoverGrammar(this.parseAssignmentExpression);
expr = this.finalize(this.startNode(startToken), new Node.AssignmentExpression(operator, expr, right)), this.context.firstCoverInitializedNameError = null;
}
}
return expr;
}, Parser2.prototype.parseExpression = function() {
var startToken = this.lookahead, expr = this.isolateCoverGrammar(this.parseAssignmentExpression);
if (this.match(",")) {
var expressions = [];
for (expressions.push(expr); this.lookahead.type !== 2 && this.match(","); )
this.nextToken(), expressions.push(this.isolateCoverGrammar(this.parseAssignmentExpression));
expr = this.finalize(this.startNode(startToken), new Node.SequenceExpression(expressions));
}
return expr;
}, Parser2.prototype.parseStatementListItem = function() {
var statement;
if (this.context.isAssignmentTarget = !0, this.context.isBindingElement = !0, this.lookahead.type === 4)
switch (this.lookahead.value) {
case "export":
this.context.isModule || this.tolerateUnexpectedToken(this.lookahead, messages_1.Messages.IllegalExportDeclaration), statement = this.parseExportDeclaration();
break;
case "import":
this.context.isModule || this.tolerateUnexpectedToken(this.lookahead, messages_1.Messages.IllegalImportDeclaration), statement = this.parseImportDeclaration();
break;
case "const":
statement = this.parseLexicalDeclaration({ inFor: !1 });
break;
case "function":
statement = this.parseFunctionDeclaration();
break;
case "class":
statement = this.parseClassDeclaration();
break;
case "let":
statement = this.isLexicalDeclaration() ? this.parseLexicalDeclaration({ inFor: !1 }) : this.parseStatement();
break;
default:
statement = this.parseStatement();
break;
}
else
statement = this.parseStatement();
return statement;
}, Parser2.prototype.parseBlock = function() {
var node = this.createNode();
this.expect("{");
for (var block = []; !this.match("}"); )
block.push(this.parseStatementListItem());
return this.expect("}"), this.finalize(node, new Node.BlockStatement(block));
}, Parser2.prototype.parseLexicalBinding = function(kind, options) {
var node = this.createNode(), params = [], id = this.parsePattern(params, kind);
this.context.strict && id.type === syntax_1.Syntax.Identifier && this.scanner.isRestrictedWord(id.name) && this.tolerateError(messages_1.Messages.StrictVarName);
var init = null;
return kind === "const" ? !this.matchKeyword("in") && !this.matchContextualKeyword("of") && (this.match("=") ? (this.nextToken(), init = this.isolateCoverGrammar(this.parseAssignmentExpression)) : this.throwError(messages_1.Messages.DeclarationMissingInitializer, "const")) : (!options.inFor && id.type !== syntax_1.Syntax.Identifier || this.match("=")) && (this.expect("="), init = this.isolateCoverGrammar(this.parseAssignmentExpression)), this.finalize(node, new Node.VariableDeclarator(id, init));
}, Parser2.prototype.parseBindingList = function(kind, options) {
for (var list = [this.parseLexicalBinding(kind, options)]; this.match(","); )
this.nextToken(), list.push(this.parseLexicalBinding(kind, options));
return list;
}, Parser2.prototype.isLexicalDeclaration = function() {
var state = this.scanner.saveState();
this.scanner.scanComments();
var next = this.scanner.lex();
return this.scanner.restoreState(state), next.type === 3 || next.type === 7 && next.value === "[" || next.type === 7 && next.value === "{" || next.type === 4 && next.value === "let" || next.type === 4 && next.value === "yield";
}, Parser2.prototype.parseLexicalDeclaration = function(options) {
var node = this.createNode(), kind = this.nextToken().value;
assert_1.assert(kind === "let" || kind === "const", "Lexical declaration must be either let or const");
var declarations = this.parseBindingList(kind, options);
return this.consumeSemicolon(), this.finalize(node, new Node.VariableDeclaration(declarations, kind));
}, Parser2.prototype.parseBindingRestElement = function(params, kind) {
var node = this.createNode();
this.expect("...");
var arg = this.parsePattern(params, kind);
return this.finalize(node, new Node.RestElement(arg));
}, Parser2.prototype.parseArrayPattern = function(params, kind) {
var node = this.createNode();
this.expect("[");
for (var elements = []; !this.match("]"); )
if (this.match(","))
this.nextToken(), elements.push(null);
else {
if (this.match("...")) {
elements.push(this.parseBindingRestElement(params, kind));
break;
} else
elements.push(this.parsePatternWithDefault(params, kind));
this.match("]") || this.expect(",");
}
return this.expect("]"), this.finalize(node, new Node.ArrayPattern(elements));
}, Parser2.prototype.parsePropertyPattern = function(params, kind) {
var node = this.createNode(), computed = !1, shorthand = !1, method = !1, key, value;
if (this.lookahead.type === 3) {
var keyToken = this.lookahead;
key = this.parseVariableIdentifier();
var init = this.finalize(node, new Node.Identifier(keyToken.value));
if (this.match("=")) {
params.push(keyToken), shorthand = !0, this.nextToken();
var expr = this.parseAssignmentExpression();
value = this.finalize(this.startNode(keyToken), new Node.AssignmentPattern(init, expr));
} else this.match(":") ? (this.expect(":"), value = this.parsePatternWithDefault(params, kind)) : (params.push(keyToken), shorthand = !0, value = init);
} else
computed = this.match("["), key = this.parseObjectPropertyKey(), this.expect(":"), value = this.parsePatternWithDefault(params, kind);
return this.finalize(node, new Node.Property("init", key, computed, value, method, shorthand));
}, Parser2.prototype.parseObjectPattern = function(params, kind) {
var node = this.createNode(), properties = [];
for (this.expect("{"); !this.match("}"); )
properties.push(this.parsePropertyPattern(params, kind)), this.match("}") || this.expect(",");
return this.expect("}"), this.finalize(node, new Node.ObjectPattern(properties));
}, Parser2.prototype.parsePattern = function(params, kind) {
var pattern;
return this.match("[") ? pattern = this.parseArrayPattern(params, kind) : this.match("{") ? pattern = this.parseObjectPattern(params, kind) : (this.matchKeyword("let") && (kind === "const" || kind === "let") && this.tolerateUnexpectedToken(this.lookahead, messages_1.Messages.LetInLexicalBinding), params.push(this.lookahead), pattern = this.parseVariableIdentifier(kind)), pattern;
}, Parser2.prototype.parsePatternWithDefault = function(params, kind) {
var startToken = this.lookahead, pattern = this.parsePattern(params, kind);
if (this.match("=")) {
this.nextToken();
var previousAllowYield = this.context.allowYield;
this.context.allowYield = !0;
var right = this.isolateCoverGrammar(this.parseAssignmentExpression);
this.context.allowYield = previousAllowYield, pattern = this.finalize(this.startNode(startToken), new Node.AssignmentPattern(pattern, right));
}
return pattern;
}, Parser2.prototype.parseVariableIdentifier = function(kind) {
var node = this.createNode(), token = this.nextToken();
return token.type === 4 && token.value === "yield" ? this.context.strict ? this.tolerateUnexpectedToken(token, messages_1.Messages.StrictReservedWord) : this.context.allowYield || this.throwUnexpectedToken(token) : token.type !== 3 ? this.context.strict && token.type === 4 && this.scanner.isStrictModeReservedWord(token.value) ? this.tolerateUnexpectedToken(token, messages_1.Messages.StrictReservedWord) : (this.context.strict || token.value !== "let" || kind !== "var") && this.throwUnexpectedToken(token) : (this.context.isModule || this.context.await) && token.type === 3 && token.value === "await" && this.tolerateUnexpectedToken(token), this.finalize(node, new Node.Identifier(token.value));
}, Parser2.prototype.parseVariableDeclaration = function(options) {
var node = this.createNode(), params = [], id = this.parsePattern(params, "var");
this.context.strict && id.type === syntax_1.Syntax.Identifier && this.scanner.isRestrictedWord(id.name) && this.tolerateError(messages_1.Messages.StrictVarName);
var init = null;
return this.match("=") ? (this.nextToken(), init = this.isolateCoverGrammar(this.parseAssignmentExpression)) : id.type !== syntax_1.Syntax.Identifier && !options.inFor && this.expect("="), this.finalize(node, new Node.VariableDeclarator(id, init));
}, Parser2.prototype.parseVariableDeclarationList = function(options) {
var opt = { inFor: options.inFor }, list = [];
for (list.push(this.parseVariableDeclaration(opt)); this.match(","); )
this.nextToken(), list.push(this.parseVariableDeclaration(opt));
return list;
}, Parser2.prototype.parseVariableStatement = function() {
var node = this.createNode();
this.expectKeyword("var");
var declarations = this.parseVariableDeclarationList({ inFor: !1 });
return this.consumeSemicolon(), this.finalize(node, new Node.VariableDeclaration(declarations, "var"));
}, Parser2.prototype.parseEmptyStatement = function() {
var node = this.createNode();
return this.expect(";"), this.finalize(node, new Node.EmptyStatement());
}, Parser2.prototype.parseExpressionStatement = function() {
var node = this.createNode(), expr = this.parseExpression();
return this.consumeSemicolon(), this.finalize(node, new Node.ExpressionStatement(expr));
}, Parser2.prototype.parseIfClause = function() {
return this.context.strict && this.matchKeyword("function") && this.tolerateError(messages_1.Messages.StrictFunction), this.parseStatement();
}, Parser2.prototype.parseIfStatement = function() {
var node = this.createNode(), consequent, alternate = null;
this.expectKeyword("if"), this.expect("(");
var test = this.parseExpression();
return !this.match(")") && this.config.tolerant ? (this.tolerateUnexpectedToken(this.nextToken()), consequent = this.finalize(this.createNode(), new Node.EmptyStatement())) : (this.expect(")"), consequent = this.parseIfClause(), this.matchKeyword("else") && (this.nextToken(), alternate = this.parseIfClause())), this.finalize(node, new Node.IfStatement(test, consequent, alternate));
}, Parser2.prototype.parseDoWhileStatement = function() {
var node = this.createNode();
this.expectKeyword("do");
var previousInIteration = this.context.inIteration;
this.context.inIteration = !0;
var body = this.parseStatement();
this.context.inIteration = previousInIteration, this.expectKeyword("while"), this.expect("(");
var test = this.parseExpression();
return !this.match(")") && this.config.tolerant ? this.tolerateUnexpectedToken(this.nextToken()) : (this.expect(")"), this.match(";") && this.nextToken()), this.finalize(node, new Node.DoWhileStatement(body, test));
}, Parser2.prototype.parseWhileStatement = function() {
var node = this.createNode(), body;
this.expectKeyword("while"), this.expect("(");
var test = this.parseExpression();
if (!this.match(")") && this.config.tolerant)
this.tolerateUnexpectedToken(this.nextToken()), body = this.finalize(this.createNode(), new Node.EmptyStatement());
else {
this.expect(")");
var previousInIteration = this.context.inIteration;
this.context.inIteration = !0, body = this.parseStatement(), this.context.inIteration = previousInIteration;
}
return this.finalize(node, new Node.WhileStatement(test, body));
}, Parser2.prototype.parseForStatement = function() {
var init = null, test = null, update = null, forIn = !0, left, right, node = this.createNode();
if (this.expectKeyword("for"), this.expect("("), this.match(";"))
this.nextToken();
else if (this.matchKeyword("var")) {
init = this.createNode(), this.nextToken();
var previousAllowIn = this.context.allowIn;
this.context.allowIn = !1;
var declarations = this.parseVariableDeclarationList({ inFor: !0 });
if (this.context.allowIn = previousAllowIn, declarations.length === 1 && this.matchKeyword("in")) {
var decl = declarations[0];
decl.init && (decl.id.type === syntax_1.Syntax.ArrayPattern || decl.id.type === syntax_1.Syntax.ObjectPattern || this.context.strict) && this.tolerateError(messages_1.Messages.ForInOfLoopInitializer, "for-in"), init = this.finalize(init, new Node.VariableDeclaration(declarations, "var")), this.nextToken(), left = init, right = this.parseExpression(), init = null;
} else declarations.length === 1 && declarations[0].init === null && this.matchContextualKeyword("of") ? (init = this.finalize(init, new Node.VariableDeclaration(declarations, "var")), this.nextToken(), left = init, right = this.parseAssignmentExpression(), init = null, forIn = !1) : (init = this.finalize(init, new Node.VariableDeclaration(declarations, "var")), this.expect(";"));
} else if (this.matchKeyword("const") || this.matchKeyword("let")) {
init = this.createNode();
var kind = this.nextToken().value;
if (!this.context.strict && this.lookahead.value === "in")
init = this.finalize(init, new Node.Identifier(kind)), this.nextToken(), left = init, right = this.parseExpression(), init = null;
else {
var previousAllowIn = this.context.allowIn;
this.context.allowIn = !1;
var declarations = this.parseBindingList(kind, { inFor: !0 });
this.context.allowIn = previousAllowIn, declarations.length === 1 && declarations[0].init === null && this.matchKeyword("in") ? (init = this.finalize(init, new Node.VariableDeclaration(declarations, kind)), this.nextToken(), left = init, right = this.parseExpression(), init = null) : declarations.length === 1 && declarations[0].init === null && this.matchContextualKeyword("of") ? (init = this.finalize(init, new Node.VariableDeclaration(declarations, kind)), this.nextToken(), left = init, right = this.parseAssignmentExpression(), init = null, forIn = !1) : (this.consumeSemicolon(), init = this.finalize(init, new Node.VariableDeclaration(declarations, kind)));
}
} else {
var initStartToken = this.lookahead, previousAllowIn = this.context.allowIn;
if (this.context.allowIn = !1, init = this.inheritCoverGrammar(this.parseAssignmentExpression), this.context.allowIn = previousAllowIn, this.matchKeyword("in"))
(!this.context.isAssignmentTarget || init.type === syntax_1.Syntax.AssignmentExpression) && this.tolerateError(messages_1.Messages.InvalidLHSInForIn), this.nextToken(), this.reinterpretExpressionAsPattern(init), left = init, right = this.parseExpression(), init = null;
else if (this.matchContextualKeyword("of"))
(!this.context.isAssignmentTarget || init.type === syntax_1.Syntax.AssignmentExpression) && this.tolerateError(messages_1.Messages.InvalidLHSInForLoop), this.nextToken(), this.reinterpretExpressionAsPattern(init), left = init, right = this.parseAssignmentExpression(), init = null, forIn = !1;
else {
if (this.match(",")) {
for (var initSeq = [init]; this.match(","); )
this.nextToken(), initSeq.push(this.isolateCoverGrammar(this.parseAssignmentExpression));
init = this.finalize(this.startNode(initStartToken), new Node.SequenceExpression(initSeq));
}
this.expect(";");
}
}
typeof left > "u" && (this.match(";") || (test = this.parseExpression()), this.expect(";"), this.match(")") || (update = this.parseExpression()));
var body;
if (!this.match(")") && this.config.tolerant)
this.tolerateUnexpectedToken(this.nextToken()), body = this.finalize(this.createNode(), new Node.EmptyStatement());
else {
this.expect(")");
var previousInIteration = this.context.inIteration;
this.context.inIteration = !0, body = this.isolateCoverGrammar(this.parseStatement), this.context.inIteration = previousInIteration;
}
return typeof left > "u" ? this.finalize(node, new Node.ForStatement(init, test, update, body)) : forIn ? this.finalize(node, new Node.ForInStatement(left, right, body)) : this.finalize(node, new Node.ForOfStatement(left, right, body));
}, Parser2.prototype.parseContinueStatement = function() {
var node = this.createNode();
this.expectKeyword("continue");
var label = null;
if (this.lookahead.type === 3 && !this.hasLineTerminator) {
var id = this.parseVariableIdentifier();
label = id;
var key = "$" + id.name;
Object.prototype.hasOwnProperty.call(this.context.labelSet, key) || this.throwError(messages_1.Messages.UnknownLabel, id.name);
}
return this.consumeSemicolon(), label === null && !this.context.inIteration && this.throwError(messages_1.Messages.IllegalContinue), this.finalize(node, new Node.ContinueStatement(label));
}, Parser2.prototype.parseBreakStatement = function() {
var node = this.createNode();
this.expectKeyword("break");
var label = null;
if (this.lookahead.type === 3 && !this.hasLineTerminator) {
var id = this.parseVariableIdentifier(), key = "$" + id.name;
Object.prototype.hasOwnProperty.call(this.context.labelSet, key) || this.throwError(messages_1.Messages.UnknownLabel, id.name), label = id;
}
return this.consumeSemicolon(), label === null && !this.context.inIteration && !this.context.inSwitch && this.throwError(messages_1.Messages.IllegalBreak), this.finalize(node, new Node.BreakStatement(label));
}, Parser2.prototype.parseReturnStatement = function() {
this.context.inFunctionBody || this.tolerateError(messages_1.Messages.IllegalReturn);
var node = this.createNode();
this.expectKeyword("return");
var hasArgument = !this.match(";") && !this.match("}") && !this.hasLineTerminator && this.lookahead.type !== 2 || this.lookahead.type === 8 || this.lookahead.type === 10, argument = hasArgument ? this.parseExpression() : null;
return this.consumeSemicolon(), this.finalize(node, new Node.ReturnStatement(argument));
}, Parser2.prototype.parseWithStatement = function() {
this.context.strict && this.tolerateError(messages_1.Messages.StrictModeWith);
var node = this.createNode(), body;
this.expectKeyword("with"), this.expect("(");
var object = this.parseExpression();
return !this.match(")") && this.config.tolerant ? (this.tolerateUnexpectedToken(this.nextToken()), body = this.finalize(this.createNode(), new Node.EmptyStatement())) : (this.expect(")"), body = this.parseStatement()), this.finalize(node, new Node.WithStatement(object, body));
}, Parser2.prototype.parseSwitchCase = function() {
var node = this.createNode(), test;
this.matchKeyword("default") ? (this.nextToken(), test = null) : (this.expectKeyword("case"), test = this.parseExpression()), this.expect(":");
for (var consequent = []; !(this.match("}") || this.matchKeyword("default") || this.matchKeyword("case")); )
consequent.push(this.parseStatementListItem());
return this.finalize(node, new Node.SwitchCase(test, consequent));
}, Parser2.prototype.parseSwitchStatement = function() {
var node = this.createNode();
this.expectKeyword("switch"), this.expect("(");
var discriminant = this.parseExpression();
this.expect(")");
var previousInSwitch = this.context.inSwitch;
this.context.inSwitch = !0;
var cases = [], defaultFound = !1;
for (this.expect("{"); !this.match("}"); ) {
var clause = this.parseSwitchCase();
clause.test === null && (defaultFound && this.throwError(messages_1.Messages.MultipleDefaultsInSwitch), defaultFound = !0), cases.push(clause);
}
return this.expect("}"), this.context.inSwitch = previousInSwitch, this.finalize(node, new Node.SwitchStatement(discriminant, cases));
}, Parser2.prototype.parseLabelledStatement = function() {
var node = this.createNode(), expr = this.parseExpression(), statement;
if (expr.type === syntax_1.Syntax.Identifier && this.match(":")) {
this.nextToken();
var id = expr, key = "$" + id.name;
Object.prototype.hasOwnProperty.call(this.context.labelSet, key) && this.throwError(messages_1.Messages.Redeclaration, "Label", id.name), this.context.labelSet[key] = !0;
var body = void 0;
if (this.matchKeyword("class"))
this.tolerateUnexpectedToken(this.lookahead), body = this.parseClassDeclaration();
else if (this.matchKeyword("function")) {
var token = this.lookahead, declaration = this.parseFunctionDeclaration();
this.context.strict ? this.tolerateUnexpectedToken(token, messages_1.Messages.StrictFunction) : declaration.generator && this.tolerateUnexpectedToken(token, messages_1.Messages.GeneratorInLegacyContext), body = declaration;
} else
body = this.parseStatement();
delete this.context.labelSet[key], statement = new Node.LabeledStatement(id, body);
} else
this.consumeSemicolon(), statement = new Node.ExpressionStatement(expr);
return this.finalize(node, statement);
}, Parser2.prototype.parseThrowStatement = function() {
var node = this.createNode();
this.expectKeyword("throw"), this.hasLineTerminator && this.throwError(messages_1.Messages.NewlineAfterThrow);
var argument = this.parseExpression();
return this.consumeSemicolon(), this.finalize(node, new Node.ThrowStatement(argument));
}, Parser2.prototype.parseCatchClause = function() {
var node = this.createNode();
this.expectKeyword("catch"), this.expect("("), this.match(")") && this.throwUnexpectedToken(this.lookahead);
for (var params = [], param = this.parsePattern(params), paramMap = {}, i = 0; i < params.length; i++) {
var key = "$" + params[i].value;
Object.prototype.hasOwnProperty.call(paramMap, key) && this.tolerateError(messages_1.Messages.DuplicateBinding, params[i].value), paramMap[key] = !0;
}
this.context.strict && param.type === syntax_1.Syntax.Identifier && this.scanner.isRestrictedWord(param.name) && this.tolerateError(messages_1.Messages.StrictCatchVariable), this.expect(")");
var body = this.parseBlock();
return this.finalize(node, new Node.CatchClause(param, body));
}, Parser2.prototype.parseFinallyClause = function() {
return this.expectKeyword("finally"), this.parseBlock();
}, Parser2.prototype.parseTryStatement = function() {
var node = this.createNode();
this.expectKeyword("try");
var block = this.parseBlock(), handler = this.matchKeyword("catch") ? this.parseCatchClause() : null, finalizer = this.matchKeyword("finally") ? this.parseFinallyClause() : null;
return !handler && !finalizer && this.throwError(messages_1.Messages.NoCatchOrFinally), this.finalize(node, new Node.TryStatement(block, handler, finalizer));
}, Parser2.prototype.parseDebuggerStatement = function() {
var node = this.createNode();
return this.expectKeyword("debugger"), this.consumeSemicolon(), this.finalize(node, new Node.DebuggerStatement());
}, Parser2.prototype.parseStatement = function() {
var statement;
switch (this.lookahead.type) {
case 1:
case 5:
case 6:
case 8:
case 10:
case 9:
statement = this.parseExpressionStatement();
break;
case 7:
var value = this.lookahead.value;
value === "{" ? statement = this.parseBlock() : value === "(" ? statement = this.parseExpressionStatement() : value === ";" ? statement = this.parseEmptyStatement() : statement = this.parseExpressionStatement();
break;
case 3:
statement = this.matchAsyncFunction() ? this.parseFunctionDeclaration() : this.parseLabelledStatement();
break;
case 4:
switch (this.lookahead.value) {
case "break":
statement = this.parseBreakStatement();
break;
case "continue":
statement = this.parseContinueStatement();
break;
case "debugger":
statement = this.parseDebuggerStatement();
break;
case "do":
statement = this.parseDoWhileStatement();
break;
case "for":
statement = this.parseForStatement();
break;
case "function":
statement = this.parseFunctionDeclaration();
break;
case "if":
statement = this.parseIfStatement();
break;
case "return":
statement = this.parseReturnStatement();
break;
case "switch":
statement = this.parseSwitchStatement();
break;
case "throw":
statement = this.parseThrowStatement();
break;
case "try":
statement = this.parseTryStatement();
break;
case "var":
statement = this.parseVariableStatement();
break;
case "while":
statement = this.parseWhileStatement();
break;
case "with":
statement = this.parseWithStatement();
break;
default:
statement = this.parseExpressionStatement();
break;
}
break;
default:
statement = this.throwUnexpectedToken(this.lookahead);
}
return statement;
}, Parser2.prototype.parseFunctionSourceElements = function() {
var node = this.createNode();
this.expect("{");
var body = this.parseDirectivePrologues(), previousLabelSet = this.context.labelSet, previousInIteration = this.context.inIteration, previousInSwitch = this.context.inSwitch, previousInFunctionBody = this.context.inFunctionBody;
for (this.context.labelSet = {}, this.context.inIteration = !1, this.context.inSwitch = !1, this.context.inFunctionBody = !0; this.lookahead.type !== 2 && !this.match("}"); )
body.push(this.parseStatementListItem());
return this.expect("}"), this.context.labelSet = previousLabelSet, this.context.inIteration = previousInIteration, this.context.inSwitch = previousInSwitch, this.context.inFunctionBody = previousInFunctionBody, this.finalize(node, new Node.BlockStatement(body));
}, Parser2.prototype.validateParam = function(options, param, name) {
var key = "$" + name;
this.context.strict ? (this.scanner.isRestrictedWord(name) && (options.stricted = param, options.message = messages_1.Messages.StrictParamName), Object.prototype.hasOwnProperty.call(options.paramSet, key) && (options.stricted = param, options.message = messages_1.Messages.StrictParamDupe)) : options.firstRestricted || (this.scanner.isRestrictedWord(name) ? (options.firstRestricted = param, options.message = messages_1.Messages.StrictParamName) : this.scanner.isStrictModeReservedWord(name) ? (options.firstRestricted = param, options.message = messages_1.Messages.StrictReservedWord) : Object.prototype.hasOwnProperty.call(options.paramSet, key) && (options.stricted = param, options.message = messages_1.Messages.StrictParamDupe)), typeof Object.defineProperty == "function" ? Object.defineProperty(options.paramSet, key, { value: !0, enumerable: !0, writable: !0, configurable: !0 }) : options.paramSet[key] = !0;
}, Parser2.prototype.parseRestElement = function(params) {
var node = this.createNode();
this.expect("...");
var arg = this.parsePattern(params);
return this.match("=") && this.throwError(messages_1.Messages.DefaultRestParameter), this.match(")") || this.throwError(messages_1.Messages.ParameterAfterRestParameter), this.finalize(node, new Node.RestElement(arg));
}, Parser2.prototype.parseFormalParameter = function(options) {
for (var params = [], param = this.match("...") ? this.parseRestElement(params) : this.parsePatternWithDefault(params), i = 0; i < params.length; i++)
this.validateParam(options, params[i], params[i].value);
options.simple = options.simple && param instanceof Node.Identifier, options.params.push(param);
}, Parser2.prototype.parseFormalParameters = function(firstRestricted) {
var options;
if (options = {
simple: !0,
params: [],
firstRestricted
}, this.expect("("), !this.match(")"))
for (options.paramSet = {}; this.lookahead.type !== 2 && (this.parseFormalParameter(options), !(this.match(")") || (this.expect(","), this.match(")")))); )
;
return this.expect(")"), {
simple: options.simple,
params: options.params,
stricted: options.stricted,
firstRestricted: options.firstRestricted,
message: options.message
};
}, Parser2.prototype.matchAsyncFunction = function() {
var match = this.matchContextualKeyword("async");
if (match) {
var state = this.scanner.saveState();
this.scanner.scanComments();
var next = this.scanner.lex();
this.scanner.restoreState(state), match = state.lineNumber === next.lineNumber && next.type === 4 && next.value === "function";
}
return match;
}, Parser2.prototype.parseFunctionDeclaration = function(identifierIsOptional) {
var node = this.createNode(), isAsync = this.matchContextualKeyword("async");
isAsync && this.nextToken(), this.expectKeyword("function");
var isGenerator = isAsync ? !1 : this.match("*");
isGenerator && this.nextToken();
var message, id = null, firstRestricted = null;
if (!identifierIsOptional || !this.match("(")) {
var token = this.lookahead;
id = this.parseVariableIdentifier(), this.context.strict ? this.scanner.isRestrictedWord(token.value) && this.tolerateUnexpectedToken(token, messages_1.Messages.StrictFunctionName) : this.scanner.isRestrictedWord(token.value) ? (firstRestricted = token, message = messages_1.Messages.StrictFunctionName) : this.scanner.isStrictModeReservedWord(token.value) && (firstRestricted = token, message = messages_1.Messages.StrictReservedWord);
}
var previousAllowAwait = this.context.await, previousAllowYield = this.context.allowYield;
this.context.await = isAsync, this.context.allowYield = !isGenerator;
var formalParameters = this.parseFormalParameters(firstRestricted), params = formalParameters.params, stricted = formalParameters.stricted;
firstRestricted = formalParameters.firstRestricted, formalParameters.message && (message = formalParameters.message);
var previousStrict = this.context.strict, previousAllowStrictDirective = this.context.allowStrictDirective;
this.context.allowStrictDirective = formalParameters.simple;
var body = this.parseFunctionSourceElements();
return this.context.strict && firstRestricted && this.throwUnexpectedToken(firstRestricted, message), this.context.strict && stricted && this.tolerateUnexpectedToken(stricted, message), this.context.strict = previousStrict, this.context.allowStrictDirective = previousAllowStrictDirective, this.context.await = previousAllowAwait, this.context.allowYield = previousAllowYield, isAsync ? this.finalize(node, new Node.AsyncFunctionDeclaration(id, params, body)) : this.finalize(node, new Node.FunctionDeclaration(id, params, body, isGenerator));
}, Parser2.prototype.parseFunctionExpression = function() {
var node = this.createNode(), isAsync = this.matchContextualKeyword("async");
isAsync && this.nextToken(), this.expectKeyword("function");
var isGenerator = isAsync ? !1 : this.match("*");
isGenerator && this.nextToken();
var message, id = null, firstRestricted, previousAllowAwait = this.context.await, previousAllowYield = this.context.allowYield;
if (this.context.await = isAsync, this.context.allowYield = !isGenerator, !this.match("(")) {
var token = this.lookahead;
id = !this.context.strict && !isGenerator && this.matchKeyword("yield") ? this.parseIdentifierName() : this.parseVariableIdentifier(), this.context.strict ? this.scanner.isRestrictedWord(token.value) && this.tolerateUnexpectedToken(token, messages_1.Messages.StrictFunctionName) : this.scanner.isRestrictedWord(token.value) ? (firstRestricted = token, message = messages_1.Messages.StrictFunctionName) : this.scanner.isStrictModeReservedWord(token.value) && (firstRestricted = token, message = messages_1.Messages.StrictReservedWord);
}
var formalParameters = this.parseFormalParameters(firstRestricted), params = formalParameters.params, stricted = formalParameters.stricted;
firstRestricted = formalParameters.firstRestricted, formalParameters.message && (message = formalParameters.message);
var previousStrict = this.context.strict, previousAllowStrictDirective = this.context.allowStrictDirective;
this.context.allowStrictDirective = formalParameters.simple;
var body = this.parseFunctionSourceElements();
return this.context.strict && firstRestricted && this.throwUnexpectedToken(firstRestricted, message), this.context.strict && stricted && this.tolerateUnexpectedToken(stricted, message), this.context.strict = previousStrict, this.context.allowStrictDirective = previousAllowStrictDirective, this.context.await = previousAllowAwait, this.context.allowYield = previousAllowYield, isAsync ? this.finalize(node, new Node.AsyncFunctionExpression(id, params, body)) : this.finalize(node, new Node.FunctionExpression(id, params, body, isGenerator));
}, Parser2.prototype.parseDirective = function() {
var token = this.lookahead, node = this.createNode(), expr = this.parseExpression(), directive = expr.type === syntax_1.Syntax.Literal ? this.getTokenRaw(token).slice(1, -1) : null;
return this.consumeSemicolon(), this.finalize(node, directive ? new Node.Directive(expr, directive) : new Node.ExpressionStatement(expr));
}, Parser2.prototype.parseDirectivePrologues = function() {
for (var firstRestricted = null, body = []; ; ) {
var token = this.lookahead;
if (token.type !== 8)
break;
var statement = this.parseDirective();
body.push(statement);
var directive = statement.directive;
if (typeof directive != "string")
break;
directive === "use strict" ? (this.context.strict = !0, firstRestricted && this.tolerateUnexpectedToken(firstRestricted, messages_1.Messages.StrictOctalLiteral), this.context.allowStrictDirective || this.tolerateUnexpectedToken(token, messages_1.Messages.IllegalLanguageModeDirective)) : !firstRestricted && token.octal && (firstRestricted = token);
}
return body;
}, Parser2.prototype.qualifiedPropertyName = function(token) {
switch (token.type) {
case 3:
case 8:
case 1:
case 5:
case 6:
case 4:
return !0;
case 7:
return token.value === "[";
default:
break;
}
return !1;
}, Parser2.prototype.parseGetterMethod = function() {
var node = this.createNode(), isGenerator = !1, previousAllowYield = this.context.allowYield;
this.context.allowYield = !isGenerator;
var formalParameters = this.parseFormalParameters();
formalParameters.params.length > 0 && this.tolerateError(messages_1.Messages.BadGetterArity);
var method = this.parsePropertyMethod(formalParameters);
return this.context.allowYield = previousAllowYield, this.finalize(node, new Node.FunctionExpression(null, formalParameters.params, method, isGenerator));
}, Parser2.prototype.parseSetterMethod = function() {
var node = this.createNode(), isGenerator = !1, previousAllowYield = this.context.allowYield;
this.context.allowYield = !isGenerator;
var formalParameters = this.parseFormalParameters();
formalParameters.params.length !== 1 ? this.tolerateError(messages_1.Messages.BadSetterArity) : formalParameters.params[0] instanceof Node.RestElement && this.tolerateError(messages_1.Messages.BadSetterRestParameter);
var method = this.parsePropertyMethod(formalParameters);
return this.context.allowYield = previousAllowYield, this.finalize(node, new Node.FunctionExpression(null, formalParameters.params, method, isGenerator));
}, Parser2.prototype.parseGeneratorMethod = function() {
var node = this.createNode(), isGenerator = !0, previousAllowYield = this.context.allowYield;
this.context.allowYield = !0;
var params = this.parseFormalParameters();
this.context.allowYield = !1;
var method = this.parsePropertyMethod(params);
return this.context.allowYield = previousAllowYield, this.finalize(node, new Node.FunctionExpression(null, params.params, method, isGenerator));
}, Parser2.prototype.isStartOfExpression = function() {
var start = !0, value = this.lookahead.value;
switch (this.lookahead.type) {
case 7:
start = value === "[" || value === "(" || value === "{" || value === "+" || value === "-" || value === "!" || value === "~" || value === "++" || value === "--" || value === "/" || value === "/=";
break;
case 4:
start = value === "class" || value === "delete" || value === "function" || value === "let" || value === "new" || value === "super" || value === "this" || value === "typeof" || value === "void" || value === "yield";
break;
default:
break;
}
return start;
}, Parser2.prototype.parseYieldExpression = function() {
var node = this.createNode();
this.expectKeyword("yield");
var argument = null, delegate = !1;
if (!this.hasLineTerminator) {
var previousAllowYield = this.context.allowYield;
this.context.allowYield = !1, delegate = this.match("*"), delegate ? (this.nextToken(), argument = this.parseAssignmentExpression()) : this.isStartOfExpression() && (argument = this.parseAssignmentExpression()), this.context.allowYield = previousAllowYield;
}
return this.finalize(node, new Node.YieldExpression(argument, delegate));
}, Parser2.prototype.parseClassElement = function(hasConstructor) {
var token = this.lookahead, node = this.createNode(), kind = "", key = null, value = null, computed = !1, method = !1, isStatic = !1, isAsync = !1;
if (this.match("*"))
this.nextToken();
else {
computed = this.match("["), key = this.parseObjectPropertyKey();
var id = key;
if (id.name === "static" && (this.qualifiedPropertyName(this.lookahead) || this.match("*")) && (token = this.lookahead, isStatic = !0, computed = this.match("["), this.match("*") ? this.nextToken() : key = this.parseObjectPropertyKey()), token.type === 3 && !this.hasLineTerminator && token.value === "async") {
var punctuator = this.lookahead.value;
punctuator !== ":" && punctuator !== "(" && punctuator !== "*" && (isAsync = !0, token = this.lookahead, key = this.parseObjectPropertyKey(), token.type === 3 && token.value === "constructor" && this.tolerateUnexpectedToken(token, messages_1.Messages.ConstructorIsAsync));
}
}
var lookaheadPropertyKey = this.qualifiedPropertyName(this.lookahead);
return token.type === 3 ? token.value === "get" && lookaheadPropertyKey ? (kind = "get", computed = this.match("["), key = this.parseObjectPropertyKey(), this.context.allowYield = !1, value = this.parseGetterMethod()) : token.value === "set" && lookaheadPropertyKey && (kind = "set", computed = this.match("["), key = this.parseObjectPropertyKey(), value = this.parseSetterMethod()) : token.type === 7 && token.value === "*" && lookaheadPropertyKey && (kind = "init", computed = this.match("["), key = this.parseObjectPropertyKey(), value = this.parseGeneratorMethod(), method = !0), !kind && key && this.match("(") && (kind = "init", value = isAsync ? this.parsePropertyMethodAsyncFunction() : this.parsePropertyMethodFunction(), method = !0), kind || this.throwUnexpectedToken(this.lookahead), kind === "init" && (kind = "method"), computed || (isStatic && this.isPropertyKey(key, "prototype") && this.throwUnexpectedToken(token, messages_1.Messages.StaticPrototype), !isStatic && this.isPropertyKey(key, "constructor") && ((kind !== "method" || !method || value && value.generator) && this.throwUnexpectedToken(token, messages_1.Messages.ConstructorSpecialMethod), hasConstructor.value ? this.throwUnexpectedToken(token, messages_1.Messages.DuplicateConstructor) : hasConstructor.value = !0, kind = "constructor")), this.finalize(node, new Node.MethodDefinition(key, computed, value, kind, isStatic));
}, Parser2.prototype.parseClassElementList = function() {
var body = [], hasConstructor = { value: !1 };
for (this.expect("{"); !this.match("}"); )
this.match(";") ? this.nextToken() : body.push(this.parseClassElement(hasConstructor));
return this.expect("}"), body;
}, Parser2.prototype.parseClassBody = function() {
var node = this.createNode(), elementList = this.parseClassElementList();
return this.finalize(node, new Node.ClassBody(elementList));
}, Parser2.prototype.parseClassDeclaration = function(identifierIsOptional) {
var node = this.createNode(), previousStrict = this.context.strict;
this.context.strict = !0, this.expectKeyword("class");
var id = identifierIsOptional && this.lookahead.type !== 3 ? null : this.parseVariableIdentifier(), superClass = null;
this.matchKeyword("extends") && (this.nextToken(), superClass = this.isolateCoverGrammar(this.parseLeftHandSideExpressionAllowCall));
var classBody = this.parseClassBody();
return this.context.strict = previousStrict, this.finalize(node, new Node.ClassDeclaration(id, superClass, classBody));
}, Parser2.prototype.parseClassExpression = function() {
var node = this.createNode(), previousStrict = this.context.strict;
this.context.strict = !0, this.expectKeyword("class");
var id = this.lookahead.type === 3 ? this.parseVariableIdentifier() : null, superClass = null;
this.matchKeyword("extends") && (this.nextToken(), superClass = this.isolateCoverGrammar(this.parseLeftHandSideExpressionAllowCall));
var classBody = this.parseClassBody();
return this.context.strict = previousStrict, this.finalize(node, new Node.ClassExpression(id, superClass, classBody));
}, Parser2.prototype.parseModule = function() {
this.context.strict = !0, this.context.isModule = !0, this.scanner.isModule = !0;
for (var node = this.createNode(), body = this.parseDirectivePrologues(); this.lookahead.type !== 2; )
body.push(this.parseStatementListItem());
return this.finalize(node, new Node.Module(body));
}, Parser2.prototype.parseScript = function() {
for (var node = this.createNode(), body = this.parseDirectivePrologues(); this.lookahead.type !== 2; )
body.push(this.parseStatementListItem());
return this.finalize(node, new Node.Script(body));
}, Parser2.prototype.parseModuleSpecifier = function() {
var node = this.createNode();
this.lookahead.type !== 8 && this.throwError(messages_1.Messages.InvalidModuleSpecifier);
var token = this.nextToken(), raw = this.getTokenRaw(token);
return this.finalize(node, new Node.Literal(token.value, raw));
}, Parser2.prototype.parseImportSpecifier = function() {
var node = this.createNode(), imported, local;
return this.lookahead.type === 3 ? (imported = this.parseVariableIdentifier(), local = imported, this.matchContextualKeyword("as") && (this.nextToken(), local = this.parseVariableIdentifier())) : (imported = this.parseIdentifierName(), local = imported, this.matchContextualKeyword("as") ? (this.nextToken(), local = this.parseVariableIdentifier()) : this.throwUnexpectedToken(this.nextToken())), this.finalize(node, new Node.ImportSpecifier(local, imported));
}, Parser2.prototype.parseNamedImports = function() {
this.expect("{");
for (var specifiers = []; !this.match("}"); )
specifiers.push(this.parseImportSpecifier()), this.match("}") || this.expect(",");
return this.expect("}"), specifiers;
}, Parser2.prototype.parseImportDefaultSpecifier = function() {
var node = this.createNode(), local = this.parseIdentifierName();
return this.finalize(node, new Node.ImportDefaultSpecifier(local));
}, Parser2.prototype.parseImportNamespaceSpecifier = function() {
var node = this.createNode();
this.expect("*"), this.matchContextualKeyword("as") || this.throwError(messages_1.Messages.NoAsAfterImportNamespace), this.nextToken();
var local = this.parseIdentifierName();
return this.finalize(node, new Node.ImportNamespaceSpecifier(local));
}, Parser2.prototype.parseImportDeclaration = function() {
this.context.inFunctionBody && this.throwError(messages_1.Messages.IllegalImportDeclaration);
var node = this.createNode();
this.expectKeyword("import");
var src, specifiers = [];
if (this.lookahead.type === 8)
src = this.parseModuleSpecifier();
else {
if (this.match("{") ? specifiers = specifiers.concat(this.parseNamedImports()) : this.match("*") ? specifiers.push(this.parseImportNamespaceSpecifier()) : this.isIdentifierName(this.lookahead) && !this.matchKeyword("default") ? (specifiers.push(this.parseImportDefaultSpecifier()), this.match(",") && (this.nextToken(), this.match("*") ? specifiers.push(this.parseImportNamespaceSpecifier()) : this.match("{") ? specifiers = specifiers.concat(this.parseNamedImports()) : this.throwUnexpectedToken(this.lookahead))) : this.throwUnexpectedToken(this.nextToken()), !this.matchContextualKeyword("from")) {
var message = this.lookahead.value ? messages_1.Messages.UnexpectedToken : messages_1.Messages.MissingFromClause;
this.throwError(message, this.lookahead.value);
}
this.nextToken(), src = this.parseModuleSpecifier();
}
return this.consumeSemicolon(), this.finalize(node, new Node.ImportDeclaration(specifiers, src));
}, Parser2.prototype.parseExportSpecifier = function() {
var node = this.createNode(), local = this.parseIdentifierName(), exported = local;
return this.matchContextualKeyword("as") && (this.nextToken(), exported = this.parseIdentifierName()), this.finalize(node, new Node.ExportSpecifier(local, exported));
}, Parser2.prototype.parseExportDeclaration = function() {
this.context.inFunctionBody && this.throwError(messages_1.Messages.IllegalExportDeclaration);
var node = this.createNode();
this.expectKeyword("export");
var exportDeclaration;
if (this.matchKeyword("default"))
if (this.nextToken(), this.matchKeyword("function")) {
var declaration = this.parseFunctionDeclaration(!0);
exportDeclaration = this.finalize(node, new Node.ExportDefaultDeclaration(declaration));
} else if (this.matchKeyword("class")) {
var declaration = this.parseClassDeclaration(!0);
exportDeclaration = this.finalize(node, new Node.ExportDefaultDeclaration(declaration));
} else if (this.matchContextualKeyword("async")) {
var declaration = this.matchAsyncFunction() ? this.parseFunctionDeclaration(!0) : this.parseAssignmentExpression();
exportDeclaration = this.finalize(node, new Node.ExportDefaultDeclaration(declaration));
} else {
this.matchContextualKeyword("from") && this.throwError(messages_1.Messages.UnexpectedToken, this.lookahead.value);
var declaration = this.match("{") ? this.parseObjectInitializer() : this.match("[") ? this.parseArrayInitializer() : this.parseAssignmentExpression();
this.consumeSemicolon(), exportDeclaration = this.finalize(node, new Node.ExportDefaultDeclaration(declaration));
}
else if (this.match("*")) {
if (this.nextToken(), !this.matchContextualKeyword("from")) {
var message = this.lookahead.value ? messages_1.Messages.UnexpectedToken : messages_1.Messages.MissingFromClause;
this.throwError(message, this.lookahead.value);
}
this.nextToken();
var src = this.parseModuleSpecifier();
this.consumeSemicolon(), exportDeclaration = this.finalize(node, new Node.ExportAllDeclaration(src));
} else if (this.lookahead.type === 4) {
var declaration = void 0;
switch (this.lookahead.value) {
case "let":
case "const":
declaration = this.parseLexicalDeclaration({ inFor: !1 });
break;
case "var":
case "class":
case "function":
declaration = this.parseStatementListItem();
break;
default:
this.throwUnexpectedToken(this.lookahead);
}
exportDeclaration = this.finalize(node, new Node.ExportNamedDeclaration(declaration, [], null));
} else if (this.matchAsyncFunction()) {
var declaration = this.parseFunctionDeclaration();
exportDeclaration = this.finalize(node, new Node.ExportNamedDeclaration(declaration, [], null));
} else {
var specifiers = [], source = null, isExportFromIdentifier = !1;
for (this.expect("{"); !this.match("}"); )
isExportFromIdentifier = isExportFromIdentifier || this.matchKeyword("default"), specifiers.push(this.parseExportSpecifier()), this.match("}") || this.expect(",");
if (this.expect("}"), this.matchContextualKeyword("from"))
this.nextToken(), source = this.parseModuleSpecifier(), this.consumeSemicolon();
else if (isExportFromIdentifier) {
var message = this.lookahead.value ? messages_1.Messages.UnexpectedToken : messages_1.Messages.MissingFromClause;
this.throwError(message, this.lookahead.value);
} else
this.consumeSemicolon();
exportDeclaration = this.finalize(node, new Node.ExportNamedDeclaration(null, specifiers, source));
}
return exportDeclaration;
}, Parser2;
})();
exports2.Parser = Parser;
},
/* 9 */
/***/
function(module2, exports2) {
"use strict";
Object.defineProperty(exports2, "__esModule", { value: !0 });
function assert(condition, message) {
if (!condition)
throw new Error("ASSERT: " + message);
}
exports2.assert = assert;
},
/* 10 */
/***/
function(module2, exports2) {
"use strict";
Object.defineProperty(exports2, "__esModule", { value: !0 });
var ErrorHandler = (function() {
function ErrorHandler2() {
this.errors = [], this.tolerant = !1;
}
return ErrorHandler2.prototype.recordError = function(error) {
this.errors.push(error);
}, ErrorHandler2.prototype.tolerate = function(error) {
if (this.tolerant)
this.recordError(error);
else
throw error;
}, ErrorHandler2.prototype.constructError = function(msg, column) {
var error = new Error(msg);
try {
throw error;
} catch (base) {
Object.create && Object.defineProperty && (error = Object.create(base), Object.defineProperty(error, "column", { value: column }));
}
return error;
}, ErrorHandler2.prototype.createError = function(index, line, col, description) {
var msg = "Line " + line + ": " + description, error = this.constructError(msg, col);
return error.index = index, error.lineNumber = line, error.description = description, error;
}, ErrorHandler2.prototype.throwError = function(index, line, col, description) {
throw this.createError(index, line, col, description);
}, ErrorHandler2.prototype.tolerateError = function(index, line, col, description) {
var error = this.createError(index, line, col, description);
if (this.tolerant)
this.recordError(error);
else
throw error;
}, ErrorHandler2;
})();
exports2.ErrorHandler = ErrorHandler;
},
/* 11 */
/***/
function(module2, exports2) {
"use strict";
Object.defineProperty(exports2, "__esModule", { value: !0 }), exports2.Messages = {
BadGetterArity: "Getter must not have any formal parameters",
BadSetterArity: "Setter must have exactly one formal parameter",
BadSetterRestParameter: "Setter function argument must not be a rest parameter",
ConstructorIsAsync: "Class constructor may not be an async method",
ConstructorSpecialMethod: "Class constructor may not be an accessor",
DeclarationMissingInitializer: "Missing initializer in %0 declaration",
DefaultRestParameter: "Unexpected token =",
DuplicateBinding: "Duplicate binding %0",
DuplicateConstructor: "A class may only have one constructor",
DuplicateProtoProperty: "Duplicate __proto__ fields are not allowed in object literals",
ForInOfLoopInitializer: "%0 loop variable declaration may not have an initializer",
GeneratorInLegacyContext: "Generator declarations are not allowed in legacy contexts",
IllegalBreak: "Illegal break statement",
IllegalContinue: "Illegal continue statement",
IllegalExportDeclaration: "Unexpected token",
IllegalImportDeclaration: "Unexpected token",
IllegalLanguageModeDirective: "Illegal 'use strict' directive in function with non-simple parameter list",
IllegalReturn: "Illegal return statement",
InvalidEscapedReservedWord: "Keyword must not contain escaped characters",
InvalidHexEscapeSequence: "Invalid hexadecimal escape sequence",
InvalidLHSInAssignment: "Invalid left-hand side in assignment",
InvalidLHSInForIn: "Invalid left-hand side in for-in",
InvalidLHSInForLoop: "Invalid left-hand side in for-loop",
InvalidModuleSpecifier: "Unexpected token",
InvalidRegExp: "Invalid regular expression",
LetInLexicalBinding: "let is disallowed as a lexically bound name",
MissingFromClause: "Unexpected token",
MultipleDefaultsInSwitch: "More than one default clause in switch statement",
NewlineAfterThrow: "Illegal newline after throw",
NoAsAfterImportNamespace: "Unexpected token",
NoCatchOrFinally: "Missing catch or finally after try",
ParameterAfterRestParameter: "Rest parameter must be last formal parameter",
Redeclaration: "%0 '%1' has already been declared",
StaticPrototype: "Classes may not have static property named prototype",
StrictCatchVariable: "Catch variable may not be eval or arguments in strict mode",
StrictDelete: "Delete of an unqualified identifier in strict mode.",
StrictFunction: "In strict mode code, functions can only be declared at top level or inside a block",
StrictFunctionName: "Function name may not be eval or arguments in strict mode",
StrictLHSAssignment: "Assignment to eval or arguments is not allowed in strict mode",
StrictLHSPostfix: "Postfix increment/decrement may not have eval or arguments operand in strict mode",
StrictLHSPrefix: "Prefix increment/decrement may not have eval or arguments operand in strict mode",
StrictModeWith: "Strict mode code may not include a with statement",
StrictOctalLiteral: "Octal literals are not allowed in strict mode.",
StrictParamDupe: "Strict mode function may not have duplicate parameter names",
StrictParamName: "Parameter name eval or arguments is not allowed in strict mode",
StrictReservedWord: "Use of future reserved word in strict mode",
StrictVarName: "Variable name may not be eval or arguments in strict mode",
TemplateOctalLiteral: "Octal literals are not allowed in template strings.",
UnexpectedEOS: "Unexpected end of input",
UnexpectedIdentifier: "Unexpected identifier",
UnexpectedNumber: "Unexpected number",
UnexpectedReserved: "Unexpected reserved word",
UnexpectedString: "Unexpected string",
UnexpectedTemplate: "Unexpected quasi %0",
UnexpectedToken: "Unexpected token %0",
UnexpectedTokenIllegal: "Unexpected token ILLEGAL",
UnknownLabel: "Undefined label '%0'",
UnterminatedRegExp: "Invalid regular expression: missing /"
};
},
/* 12 */
/***/
function(module2, exports2, __webpack_require__) {
"use strict";
Object.defineProperty(exports2, "__esModule", { value: !0 });
var assert_1 = __webpack_require__(9), character_1 = __webpack_require__(4), messages_1 = __webpack_require__(11);
function hexValue(ch) {
return "0123456789abcdef".indexOf(ch.toLowerCase());
}
function octalValue(ch) {
return "01234567".indexOf(ch);
}
var Scanner = (function() {
function Scanner2(code, handler) {
this.source = code, this.errorHandler = handler, this.trackComment = !1, this.isModule = !1, this.length = code.length, this.index = 0, this.lineNumber = code.length > 0 ? 1 : 0, this.lineStart = 0, this.curlyStack = [];
}
return Scanner2.prototype.saveState = function() {
return {
index: this.index,
lineNumber: this.lineNumber,
lineStart: this.lineStart
};
}, Scanner2.prototype.restoreState = function(state) {
this.index = state.index, this.lineNumber = state.lineNumber, this.lineStart = state.lineStart;
}, Scanner2.prototype.eof = function() {
return this.index >= this.length;
}, Scanner2.prototype.throwUnexpectedToken = function(message) {
return message === void 0 && (message = messages_1.Messages.UnexpectedTokenIllegal), this.errorHandler.throwError(this.index, this.lineNumber, this.index - this.lineStart + 1, message);
}, Scanner2.prototype.tolerateUnexpectedToken = function(message) {
message === void 0 && (message = messages_1.Messages.UnexpectedTokenIllegal), this.errorHandler.tolerateError(this.index, this.lineNumber, this.index - this.lineStart + 1, message);
}, Scanner2.prototype.skipSingleLineComment = function(offset) {
var comments = [], start, loc;
for (this.trackComment && (comments = [], start = this.index - offset, loc = {
start: {
line: this.lineNumber,
column: this.index - this.lineStart - offset
},
end: {}
}); !this.eof(); ) {
var ch = this.source.charCodeAt(this.index);
if (++this.index, character_1.Character.isLineTerminator(ch)) {
if (this.trackComment) {
loc.end = {
line: this.lineNumber,
column: this.index - this.lineStart - 1
};
var entry = {
multiLine: !1,
slice: [start + offset, this.index - 1],
range: [start, this.index - 1],
loc
};
comments.push(entry);
}
return ch === 13 && this.source.charCodeAt(this.index) === 10 && ++this.index, ++this.lineNumber, this.lineStart = this.index, comments;
}
}
if (this.trackComment) {
loc.end = {
line: this.lineNumber,
column: this.index - this.lineStart
};
var entry = {
multiLine: !1,
slice: [start + offset, this.index],
range: [start, this.index],
loc
};
comments.push(entry);
}
return comments;
}, Scanner2.prototype.skipMultiLineComment = function() {
var comments = [], start, loc;
for (this.trackComment && (comments = [], start = this.index - 2, loc = {
start: {
line: this.lineNumber,
column: this.index - this.lineStart - 2
},
end: {}
}); !this.eof(); ) {
var ch = this.source.charCodeAt(this.index);
if (character_1.Character.isLineTerminator(ch))
ch === 13 && this.source.charCodeAt(this.index + 1) === 10 && ++this.index, ++this.lineNumber, ++this.index, this.lineStart = this.index;
else if (ch === 42) {
if (this.source.charCodeAt(this.index + 1) === 47) {
if (this.index += 2, this.trackComment) {
loc.end = {
line: this.lineNumber,
column: this.index - this.lineStart
};
var entry = {
multiLine: !0,
slice: [start + 2, this.index - 2],
range: [start, this.index],
loc
};
comments.push(entry);
}
return comments;
}
++this.index;
} else
++this.index;
}
if (this.trackComment) {
loc.end = {
line: this.lineNumber,
column: this.index - this.lineStart
};
var entry = {
multiLine: !0,
slice: [start + 2, this.index],
range: [start, this.index],
loc
};
comments.push(entry);
}
return this.tolerateUnexpectedToken(), comments;
}, Scanner2.prototype.scanComments = function() {
var comments;
this.trackComment && (comments = []);
for (var start = this.index === 0; !this.eof(); ) {
var ch = this.source.charCodeAt(this.index);
if (character_1.Character.isWhiteSpace(ch))
++this.index;
else if (character_1.Character.isLineTerminator(ch))
++this.index, ch === 13 && this.source.charCodeAt(this.index) === 10 && ++this.index, ++this.lineNumber, this.lineStart = this.index, start = !0;
else if (ch === 47)
if (ch = this.source.charCodeAt(this.index + 1), ch === 47) {
this.index += 2;
var comment = this.skipSingleLineComment(2);
this.trackComment && (comments = comments.concat(comment)), start = !0;
} else if (ch === 42) {
this.index += 2;
var comment = this.skipMultiLineComment();
this.trackComment && (comments = comments.concat(comment));
} else
break;
else if (start && ch === 45)
if (this.source.charCodeAt(this.index + 1) === 45 && this.source.charCodeAt(this.index + 2) === 62) {
this.index += 3;
var comment = this.skipSingleLineComment(3);
this.trackComment && (comments = comments.concat(comment));
} else
break;
else if (ch === 60 && !this.isModule)
if (this.source.slice(this.index + 1, this.index + 4) === "!--") {
this.index += 4;
var comment = this.skipSingleLineComment(4);
this.trackComment && (comments = comments.concat(comment));
} else
break;
else
break;
}
return comments;
}, Scanner2.prototype.isFutureReservedWord = function(id) {
switch (id) {
case "enum":
case "export":
case "import":
case "super":
return !0;
default:
return !1;
}
}, Scanner2.prototype.isStrictModeReservedWord = function(id) {
switch (id) {
case "implements":
case "interface":
case "package":
case "private":
case "protected":
case "public":
case "static":
case "yield":
case "let":
return !0;
default:
return !1;
}
}, Scanner2.prototype.isRestrictedWord = function(id) {
return id === "eval" || id === "arguments";
}, Scanner2.prototype.isKeyword = function(id) {
switch (id.length) {
case 2:
return id === "if" || id === "in" || id === "do";
case 3:
return id === "var" || id === "for" || id === "new" || id === "try" || id === "let";
case 4:
return id === "this" || id === "else" || id === "case" || id === "void" || id === "with" || id === "enum";
case 5:
return id === "while" || id === "break" || id === "catch" || id === "throw" || id === "const" || id === "yield" || id === "class" || id === "super";
case 6:
return id === "return" || id === "typeof" || id === "delete" || id === "switch" || id === "export" || id === "import";
case 7:
return id === "default" || id === "finally" || id === "extends";
case 8:
return id === "function" || id === "continue" || id === "debugger";
case 10:
return id === "instanceof";
default:
return !1;
}
}, Scanner2.prototype.codePointAt = function(i) {
var cp2 = this.source.charCodeAt(i);
if (cp2 >= 55296 && cp2 <= 56319) {
var second = this.source.charCodeAt(i + 1);
if (second >= 56320 && second <= 57343) {
var first = cp2;
cp2 = (first - 55296) * 1024 + second - 56320 + 65536;
}
}
return cp2;
}, Scanner2.prototype.scanHexEscape = function(prefix) {
for (var len = prefix === "u" ? 4 : 2, code = 0, i = 0; i < len; ++i)
if (!this.eof() && character_1.Character.isHexDigit(this.source.charCodeAt(this.index)))
code = code * 16 + hexValue(this.source[this.index++]);
else
return null;
return String.fromCharCode(code);
}, Scanner2.prototype.scanUnicodeCodePointEscape = function() {
var ch = this.source[this.index], code = 0;
for (ch === "}" && this.throwUnexpectedToken(); !this.eof() && (ch = this.source[this.index++], !!character_1.Character.isHexDigit(ch.charCodeAt(0))); )
code = code * 16 + hexValue(ch);
return (code > 1114111 || ch !== "}") && this.throwUnexpectedToken(), character_1.Character.fromCodePoint(code);
}, Scanner2.prototype.getIdentifier = function() {
for (var start = this.index++; !this.eof(); ) {
var ch = this.source.charCodeAt(this.index);
if (ch === 92)
return this.index = start, this.getComplexIdentifier();
if (ch >= 55296 && ch < 57343)
return this.index = start, this.getComplexIdentifier();
if (character_1.Character.isIdentifierPart(ch))
++this.index;
else
break;
}
return this.source.slice(start, this.index);
}, Scanner2.prototype.getComplexIdentifier = function() {
var cp2 = this.codePointAt(this.index), id = character_1.Character.fromCodePoint(cp2);
this.index += id.length;
var ch;
for (cp2 === 92 && (this.source.charCodeAt(this.index) !== 117 && this.throwUnexpectedToken(), ++this.index, this.source[this.index] === "{" ? (++this.index, ch = this.scanUnicodeCodePointEscape()) : (ch = this.scanHexEscape("u"), (ch === null || ch === "\\" || !character_1.Character.isIdentifierStart(ch.charCodeAt(0))) && this.throwUnexpectedToken()), id = ch); !this.eof() && (cp2 = this.codePointAt(this.index), !!character_1.Character.isIdentifierPart(cp2)); )
ch = character_1.Character.fromCodePoint(cp2), id += ch, this.index += ch.length, cp2 === 92 && (id = id.substr(0, id.length - 1), this.source.charCodeAt(this.index) !== 117 && this.throwUnexpectedToken(), ++this.index, this.source[this.index] === "{" ? (++this.index, ch = this.scanUnicodeCodePointEscape()) : (ch = this.scanHexEscape("u"), (ch === null || ch === "\\" || !character_1.Character.isIdentifierPart(ch.charCodeAt(0))) && this.throwUnexpectedToken()), id += ch);
return id;
}, Scanner2.prototype.octalToDecimal = function(ch) {
var octal = ch !== "0", code = octalValue(ch);
return !this.eof() && character_1.Character.isOctalDigit(this.source.charCodeAt(this.index)) && (octal = !0, code = code * 8 + octalValue(this.source[this.index++]), "0123".indexOf(ch) >= 0 && !this.eof() && character_1.Character.isOctalDigit(this.source.charCodeAt(this.index)) && (code = code * 8 + octalValue(this.source[this.index++]))), {
code,
octal
};
}, Scanner2.prototype.scanIdentifier = function() {
var type, start = this.index, id = this.source.charCodeAt(start) === 92 ? this.getComplexIdentifier() : this.getIdentifier();
if (id.length === 1 ? type = 3 : this.isKeyword(id) ? type = 4 : id === "null" ? type = 5 : id === "true" || id === "false" ? type = 1 : type = 3, type !== 3 && start + id.length !== this.index) {
var restore = this.index;
this.index = start, this.tolerateUnexpectedToken(messages_1.Messages.InvalidEscapedReservedWord), this.index = restore;
}
return {
type,
value: id,
lineNumber: this.lineNumber,
lineStart: this.lineStart,
start,
end: this.index
};
}, Scanner2.prototype.scanPunctuator = function() {
var start = this.index, str = this.source[this.index];
switch (str) {
case "(":
case "{":
str === "{" && this.curlyStack.push("{"), ++this.index;
break;
case ".":
++this.index, this.source[this.index] === "." && this.source[this.index + 1] === "." && (this.index += 2, str = "...");
break;
case "}":
++this.index, this.curlyStack.pop();
break;
case ")":
case ";":
case ",":
case "[":
case "]":
case ":":
case "?":
case "~":
++this.index;
break;
default:
str = this.source.substr(this.index, 4), str === ">>>=" ? this.index += 4 : (str = str.substr(0, 3), str === "===" || str === "!==" || str === ">>>" || str === "<<=" || str === ">>=" || str === "**=" ? this.index += 3 : (str = str.substr(0, 2), str === "&&" || str === "||" || str === "==" || str === "!=" || str === "+=" || str === "-=" || str === "*=" || str === "/=" || str === "++" || str === "--" || str === "<<" || str === ">>" || str === "&=" || str === "|=" || str === "^=" || str === "%=" || str === "<=" || str === ">=" || str === "=>" || str === "**" ? this.index += 2 : (str = this.source[this.index], "<>=!+-*%&|^/".indexOf(str) >= 0 && ++this.index)));
}
return this.index === start && this.throwUnexpectedToken(), {
type: 7,
value: str,
lineNumber: this.lineNumber,
lineStart: this.lineStart,
start,
end: this.index
};
}, Scanner2.prototype.scanHexLiteral = function(start) {
for (var num = ""; !this.eof() && character_1.Character.isHexDigit(this.source.charCodeAt(this.index)); )
num += this.source[this.index++];
return num.length === 0 && this.throwUnexpectedToken(), character_1.Character.isIdentifierStart(this.source.charCodeAt(this.index)) && this.throwUnexpectedToken(), {
type: 6,
value: parseInt("0x" + num, 16),
lineNumber: this.lineNumber,
lineStart: this.lineStart,
start,
end: this.index
};
}, Scanner2.prototype.scanBinaryLiteral = function(start) {
for (var num = "", ch; !this.eof() && (ch = this.source[this.index], !(ch !== "0" && ch !== "1")); )
num += this.source[this.index++];
return num.length === 0 && this.throwUnexpectedToken(), this.eof() || (ch = this.source.charCodeAt(this.index), (character_1.Character.isIdentifierStart(ch) || character_1.Character.isDecimalDigit(ch)) && this.throwUnexpectedToken()), {
type: 6,
value: parseInt(num, 2),
lineNumber: this.lineNumber,
lineStart: this.lineStart,
start,
end: this.index
};
}, Scanner2.prototype.scanOctalLiteral = function(prefix, start) {
var num = "", octal = !1;
for (character_1.Character.isOctalDigit(prefix.charCodeAt(0)) ? (octal = !0, num = "0" + this.source[this.index++]) : ++this.index; !this.eof() && character_1.Character.isOctalDigit(this.source.charCodeAt(this.index)); )
num += this.source[this.index++];
return !octal && num.length === 0 && this.throwUnexpectedToken(), (character_1.Character.isIdentifierStart(this.source.charCodeAt(this.index)) || character_1.Character.isDecimalDigit(this.source.charCodeAt(this.index))) && this.throwUnexpectedToken(), {
type: 6,
value: parseInt(num, 8),
octal,
lineNumber: this.lineNumber,
lineStart: this.lineStart,
start,
end: this.index
};
}, Scanner2.prototype.isImplicitOctalLiteral = function() {
for (var i = this.index + 1; i < this.length; ++i) {
var ch = this.source[i];
if (ch === "8" || ch === "9")
return !1;
if (!character_1.Character.isOctalDigit(ch.charCodeAt(0)))
return !0;
}
return !0;
}, Scanner2.prototype.scanNumericLiteral = function() {
var start = this.index, ch = this.source[start];
assert_1.assert(character_1.Character.isDecimalDigit(ch.charCodeAt(0)) || ch === ".", "Numeric literal must start with a decimal digit or a decimal point");
var num = "";
if (ch !== ".") {
if (num = this.source[this.index++], ch = this.source[this.index], num === "0") {
if (ch === "x" || ch === "X")
return ++this.index, this.scanHexLiteral(start);
if (ch === "b" || ch === "B")
return ++this.index, this.scanBinaryLiteral(start);
if (ch === "o" || ch === "O")
return this.scanOctalLiteral(ch, start);
if (ch && character_1.Character.isOctalDigit(ch.charCodeAt(0)) && this.isImplicitOctalLiteral())
return this.scanOctalLiteral(ch, start);
}
for (; character_1.Character.isDecimalDigit(this.source.charCodeAt(this.index)); )
num += this.source[this.index++];
ch = this.source[this.index];
}
if (ch === ".") {
for (num += this.source[this.index++]; character_1.Character.isDecimalDigit(this.source.charCodeAt(this.index)); )
num += this.source[this.index++];
ch = this.source[this.index];
}
if (ch === "e" || ch === "E")
if (num += this.source[this.index++], ch = this.source[this.index], (ch === "+" || ch === "-") && (num += this.source[this.index++]), character_1.Character.isDecimalDigit(this.source.charCodeAt(this.index)))
for (; character_1.Character.isDecimalDigit(this.source.charCodeAt(this.index)); )
num += this.source[this.index++];
else
this.throwUnexpectedToken();
return character_1.Character.isIdentifierStart(this.source.charCodeAt(this.index)) && this.throwUnexpectedToken(), {
type: 6,
value: parseFloat(num),
lineNumber: this.lineNumber,
lineStart: this.lineStart,
start,
end: this.index
};
}, Scanner2.prototype.scanStringLiteral = function() {
var start = this.index, quote = this.source[start];
assert_1.assert(quote === "'" || quote === '"', "String literal must starts with a quote"), ++this.index;
for (var octal = !1, str = ""; !this.eof(); ) {
var ch = this.source[this.index++];
if (ch === quote) {
quote = "";
break;
} else if (ch === "\\")
if (ch = this.source[this.index++], !ch || !character_1.Character.isLineTerminator(ch.charCodeAt(0)))
switch (ch) {
case "u":
if (this.source[this.index] === "{")
++this.index, str += this.scanUnicodeCodePointEscape();
else {
var unescaped_1 = this.scanHexEscape(ch);
unescaped_1 === null && this.throwUnexpectedToken(), str += unescaped_1;
}
break;
case "x":
var unescaped = this.scanHexEscape(ch);
unescaped === null && this.throwUnexpectedToken(messages_1.Messages.InvalidHexEscapeSequence), str += unescaped;
break;
case "n":
str += `
`;
break;
case "r":
str += "\r";
break;
case "t":
str += " ";
break;
case "b":
str += "\b";
break;
case "f":
str += "\f";
break;
case "v":
str += "\v";
break;
case "8":
case "9":
str += ch, this.tolerateUnexpectedToken();
break;
default:
if (ch && character_1.Character.isOctalDigit(ch.charCodeAt(0))) {
var octToDec = this.octalToDecimal(ch);
octal = octToDec.octal || octal, str += String.fromCharCode(octToDec.code);
} else
str += ch;
break;
}
else
++this.lineNumber, ch === "\r" && this.source[this.index] === `
` && ++this.index, this.lineStart = this.index;
else {
if (character_1.Character.isLineTerminator(ch.charCodeAt(0)))
break;
str += ch;
}
}
return quote !== "" && (this.index = start, this.throwUnexpectedToken()), {
type: 8,
value: str,
octal,
lineNumber: this.lineNumber,
lineStart: this.lineStart,
start,
end: this.index
};
}, Scanner2.prototype.scanTemplate = function() {
var cooked = "", terminated = !1, start = this.index, head = this.source[start] === "`", tail = !1, rawOffset = 2;
for (++this.index; !this.eof(); ) {
var ch = this.source[this.index++];
if (ch === "`") {
rawOffset = 1, tail = !0, terminated = !0;
break;
} else if (ch === "$") {
if (this.source[this.index] === "{") {
this.curlyStack.push("${"), ++this.index, terminated = !0;
break;
}
cooked += ch;
} else if (ch === "\\")
if (ch = this.source[this.index++], character_1.Character.isLineTerminator(ch.charCodeAt(0)))
++this.lineNumber, ch === "\r" && this.source[this.index] === `
` && ++this.index, this.lineStart = this.index;
else
switch (ch) {
case "n":
cooked += `
`;
break;
case "r":
cooked += "\r";
break;
case "t":
cooked += " ";
break;
case "u":
if (this.source[this.index] === "{")
++this.index, cooked += this.scanUnicodeCodePointEscape();
else {
var restore = this.index, unescaped_2 = this.scanHexEscape(ch);
unescaped_2 !== null ? cooked += unescaped_2 : (this.index = restore, cooked += ch);
}
break;
case "x":
var unescaped = this.scanHexEscape(ch);
unescaped === null && this.throwUnexpectedToken(messages_1.Messages.InvalidHexEscapeSequence), cooked += unescaped;
break;
case "b":
cooked += "\b";
break;
case "f":
cooked += "\f";
break;
case "v":
cooked += "\v";
break;
default:
ch === "0" ? (character_1.Character.isDecimalDigit(this.source.charCodeAt(this.index)) && this.throwUnexpectedToken(messages_1.Messages.TemplateOctalLiteral), cooked += "\0") : character_1.Character.isOctalDigit(ch.charCodeAt(0)) ? this.throwUnexpectedToken(messages_1.Messages.TemplateOctalLiteral) : cooked += ch;
break;
}
else character_1.Character.isLineTerminator(ch.charCodeAt(0)) ? (++this.lineNumber, ch === "\r" && this.source[this.index] === `
` && ++this.index, this.lineStart = this.index, cooked += `
`) : cooked += ch;
}
return terminated || this.throwUnexpectedToken(), head || this.curlyStack.pop(), {
type: 10,
value: this.source.slice(start + 1, this.index - rawOffset),
cooked,
head,
tail,
lineNumber: this.lineNumber,
lineStart: this.lineStart,
start,
end: this.index
};
}, Scanner2.prototype.testRegExp = function(pattern, flags) {
var astralSubstitute = "\uFFFF", tmp = pattern, self = this;
flags.indexOf("u") >= 0 && (tmp = tmp.replace(/\\u\{([0-9a-fA-F]+)\}|\\u([a-fA-F0-9]{4})/g, function($0, $1, $2) {
var codePoint = parseInt($1 || $2, 16);
return codePoint > 1114111 && self.throwUnexpectedToken(messages_1.Messages.InvalidRegExp), codePoint <= 65535 ? String.fromCharCode(codePoint) : astralSubstitute;
}).replace(/[\uD800-\uDBFF][\uDC00-\uDFFF]/g, astralSubstitute));
try {
RegExp(tmp);
} catch {
this.throwUnexpectedToken(messages_1.Messages.InvalidRegExp);
}
try {
return new RegExp(pattern, flags);
} catch {
return null;
}
}, Scanner2.prototype.scanRegExpBody = function() {
var ch = this.source[this.index];
assert_1.assert(ch === "/", "Regular expression literal must start with a slash");
for (var str = this.source[this.index++], classMarker = !1, terminated = !1; !this.eof(); )
if (ch = this.source[this.index++], str += ch, ch === "\\")
ch = this.source[this.index++], character_1.Character.isLineTerminator(ch.charCodeAt(0)) && this.throwUnexpectedToken(messages_1.Messages.UnterminatedRegExp), str += ch;
else if (character_1.Character.isLineTerminator(ch.charCodeAt(0)))
this.throwUnexpectedToken(messages_1.Messages.UnterminatedRegExp);
else if (classMarker)
ch === "]" && (classMarker = !1);
else if (ch === "/") {
terminated = !0;
break;
} else ch === "[" && (classMarker = !0);
return terminated || this.throwUnexpectedToken(messages_1.Messages.UnterminatedRegExp), str.substr(1, str.length - 2);
}, Scanner2.prototype.scanRegExpFlags = function() {
for (var str = "", flags = ""; !this.eof(); ) {
var ch = this.source[this.index];
if (!character_1.Character.isIdentifierPart(ch.charCodeAt(0)))
break;
if (++this.index, ch === "\\" && !this.eof())
if (ch = this.source[this.index], ch === "u") {
++this.index;
var restore = this.index, char = this.scanHexEscape("u");
if (char !== null)
for (flags += char, str += "\\u"; restore < this.index; ++restore)
str += this.source[restore];
else
this.index = restore, flags += "u", str += "\\u";
this.tolerateUnexpectedToken();
} else
str += "\\", this.tolerateUnexpectedToken();
else
flags += ch, str += ch;
}
return flags;
}, Scanner2.prototype.scanRegExp = function() {
var start = this.index, pattern = this.scanRegExpBody(), flags = this.scanRegExpFlags(), value = this.testRegExp(pattern, flags);
return {
type: 9,
value: "",
pattern,
flags,
regex: value,
lineNumber: this.lineNumber,
lineStart: this.lineStart,
start,
end: this.index
};
}, Scanner2.prototype.lex = function() {
if (this.eof())
return {
type: 2,
value: "",
lineNumber: this.lineNumber,
lineStart: this.lineStart,
start: this.index,
end: this.index
};
var cp2 = this.source.charCodeAt(this.index);
return character_1.Character.isIdentifierStart(cp2) ? this.scanIdentifier() : cp2 === 40 || cp2 === 41 || cp2 === 59 ? this.scanPunctuator() : cp2 === 39 || cp2 === 34 ? this.scanStringLiteral() : cp2 === 46 ? character_1.Character.isDecimalDigit(this.source.charCodeAt(this.index + 1)) ? this.scanNumericLiteral() : this.scanPunctuator() : character_1.Character.isDecimalDigit(cp2) ? this.scanNumericLiteral() : cp2 === 96 || cp2 === 125 && this.curlyStack[this.curlyStack.length - 1] === "${" ? this.scanTemplate() : cp2 >= 55296 && cp2 < 57343 && character_1.Character.isIdentifierStart(this.codePointAt(this.index)) ? this.scanIdentifier() : this.scanPunctuator();
}, Scanner2;
})();
exports2.Scanner = Scanner;
},
/* 13 */
/***/
function(module2, exports2) {
"use strict";
Object.defineProperty(exports2, "__esModule", { value: !0 }), exports2.TokenName = {}, exports2.TokenName[
1
/* BooleanLiteral */
] = "Boolean", exports2.TokenName[
2
/* EOF */
] = "<end>", exports2.TokenName[
3
/* Identifier */
] = "Identifier", exports2.TokenName[
4
/* Keyword */
] = "Keyword", exports2.TokenName[
5
/* NullLiteral */
] = "Null", exports2.TokenName[
6
/* NumericLiteral */
] = "Numeric", exports2.TokenName[
7
/* Punctuator */
] = "Punctuator", exports2.TokenName[
8
/* StringLiteral */
] = "String", exports2.TokenName[
9
/* RegularExpression */
] = "RegularExpression", exports2.TokenName[
10
/* Template */
] = "Template";
},
/* 14 */
/***/
function(module2, exports2) {
"use strict";
Object.defineProperty(exports2, "__esModule", { value: !0 }), exports2.XHTMLEntities = {
quot: '"',
amp: "&",
apos: "'",
gt: ">",
nbsp: "\xA0",
iexcl: "\xA1",
cent: "\xA2",
pound: "\xA3",
curren: "\xA4",
yen: "\xA5",
brvbar: "\xA6",
sect: "\xA7",
uml: "\xA8",
copy: "\xA9",
ordf: "\xAA",
laquo: "\xAB",
not: "\xAC",
shy: "\xAD",
reg: "\xAE",
macr: "\xAF",
deg: "\xB0",
plusmn: "\xB1",
sup2: "\xB2",
sup3: "\xB3",
acute: "\xB4",
micro: "\xB5",
para: "\xB6",
middot: "\xB7",
cedil: "\xB8",
sup1: "\xB9",
ordm: "\xBA",
raquo: "\xBB",
frac14: "\xBC",
frac12: "\xBD",
frac34: "\xBE",
iquest: "\xBF",
Agrave: "\xC0",
Aacute: "\xC1",
Acirc: "\xC2",
Atilde: "\xC3",
Auml: "\xC4",
Aring: "\xC5",
AElig: "\xC6",
Ccedil: "\xC7",
Egrave: "\xC8",
Eacute: "\xC9",
Ecirc: "\xCA",
Euml: "\xCB",
Igrave: "\xCC",
Iacute: "\xCD",
Icirc: "\xCE",
Iuml: "\xCF",
ETH: "\xD0",
Ntilde: "\xD1",
Ograve: "\xD2",
Oacute: "\xD3",
Ocirc: "\xD4",
Otilde: "\xD5",
Ouml: "\xD6",
times: "\xD7",
Oslash: "\xD8",
Ugrave: "\xD9",
Uacute: "\xDA",
Ucirc: "\xDB",
Uuml: "\xDC",
Yacute: "\xDD",
THORN: "\xDE",
szlig: "\xDF",
agrave: "\xE0",
aacute: "\xE1",
acirc: "\xE2",
atilde: "\xE3",
auml: "\xE4",
aring: "\xE5",
aelig: "\xE6",
ccedil: "\xE7",
egrave: "\xE8",
eacute: "\xE9",
ecirc: "\xEA",
euml: "\xEB",
igrave: "\xEC",
iacute: "\xED",
icirc: "\xEE",
iuml: "\xEF",
eth: "\xF0",
ntilde: "\xF1",
ograve: "\xF2",
oacute: "\xF3",
ocirc: "\xF4",
otilde: "\xF5",
ouml: "\xF6",
divide: "\xF7",
oslash: "\xF8",
ugrave: "\xF9",
uacute: "\xFA",
ucirc: "\xFB",
uuml: "\xFC",
yacute: "\xFD",
thorn: "\xFE",
yuml: "\xFF",
OElig: "\u0152",
oelig: "\u0153",
Scaron: "\u0160",
scaron: "\u0161",
Yuml: "\u0178",
fnof: "\u0192",
circ: "\u02C6",
tilde: "\u02DC",
Alpha: "\u0391",
Beta: "\u0392",
Gamma: "\u0393",
Delta: "\u0394",
Epsilon: "\u0395",
Zeta: "\u0396",
Eta: "\u0397",
Theta: "\u0398",
Iota: "\u0399",
Kappa: "\u039A",
Lambda: "\u039B",
Mu: "\u039C",
Nu: "\u039D",
Xi: "\u039E",
Omicron: "\u039F",
Pi: "\u03A0",
Rho: "\u03A1",
Sigma: "\u03A3",
Tau: "\u03A4",
Upsilon: "\u03A5",
Phi: "\u03A6",
Chi: "\u03A7",
Psi: "\u03A8",
Omega: "\u03A9",
alpha: "\u03B1",
beta: "\u03B2",
gamma: "\u03B3",
delta: "\u03B4",
epsilon: "\u03B5",
zeta: "\u03B6",
eta: "\u03B7",
theta: "\u03B8",
iota: "\u03B9",
kappa: "\u03BA",
lambda: "\u03BB",
mu: "\u03BC",
nu: "\u03BD",
xi: "\u03BE",
omicron: "\u03BF",
pi: "\u03C0",
rho: "\u03C1",
sigmaf: "\u03C2",
sigma: "\u03C3",
tau: "\u03C4",
upsilon: "\u03C5",
phi: "\u03C6",
chi: "\u03C7",
psi: "\u03C8",
omega: "\u03C9",
thetasym: "\u03D1",
upsih: "\u03D2",
piv: "\u03D6",
ensp: "\u2002",
emsp: "\u2003",
thinsp: "\u2009",
zwnj: "\u200C",
zwj: "\u200D",
lrm: "\u200E",
rlm: "\u200F",
ndash: "\u2013",
mdash: "\u2014",
lsquo: "\u2018",
rsquo: "\u2019",
sbquo: "\u201A",
ldquo: "\u201C",
rdquo: "\u201D",
bdquo: "\u201E",
dagger: "\u2020",
Dagger: "\u2021",
bull: "\u2022",
hellip: "\u2026",
permil: "\u2030",
prime: "\u2032",
Prime: "\u2033",
lsaquo: "\u2039",
rsaquo: "\u203A",
oline: "\u203E",
frasl: "\u2044",
euro: "\u20AC",
image: "\u2111",
weierp: "\u2118",
real: "\u211C",
trade: "\u2122",
alefsym: "\u2135",
larr: "\u2190",
uarr: "\u2191",
rarr: "\u2192",
darr: "\u2193",
harr: "\u2194",
crarr: "\u21B5",
lArr: "\u21D0",
uArr: "\u21D1",
rArr: "\u21D2",
dArr: "\u21D3",
hArr: "\u21D4",
forall: "\u2200",
part: "\u2202",
exist: "\u2203",
empty: "\u2205",
nabla: "\u2207",
isin: "\u2208",
notin: "\u2209",
ni: "\u220B",
prod: "\u220F",
sum: "\u2211",
minus: "\u2212",
lowast: "\u2217",
radic: "\u221A",
prop: "\u221D",
infin: "\u221E",
ang: "\u2220",
and: "\u2227",
or: "\u2228",
cap: "\u2229",
cup: "\u222A",
int: "\u222B",
there4: "\u2234",
sim: "\u223C",
cong: "\u2245",
asymp: "\u2248",
ne: "\u2260",
equiv: "\u2261",
le: "\u2264",
ge: "\u2265",
sub: "\u2282",
sup: "\u2283",
nsub: "\u2284",
sube: "\u2286",
supe: "\u2287",
oplus: "\u2295",
otimes: "\u2297",
perp: "\u22A5",
sdot: "\u22C5",
lceil: "\u2308",
rceil: "\u2309",
lfloor: "\u230A",
rfloor: "\u230B",
loz: "\u25CA",
spades: "\u2660",
clubs: "\u2663",
hearts: "\u2665",
diams: "\u2666",
lang: "\u27E8",
rang: "\u27E9"
};
},
/* 15 */
/***/
function(module2, exports2, __webpack_require__) {
"use strict";
Object.defineProperty(exports2, "__esModule", { value: !0 });
var error_handler_1 = __webpack_require__(10), scanner_1 = __webpack_require__(12), token_1 = __webpack_require__(13), Reader = (function() {
function Reader2() {
this.values = [], this.curly = this.paren = -1;
}
return Reader2.prototype.beforeFunctionExpression = function(t) {
return [
"(",
"{",
"[",
"in",
"typeof",
"instanceof",
"new",
"return",
"case",
"delete",
"throw",
"void",
// assignment operators
"=",
"+=",
"-=",
"*=",
"**=",
"/=",
"%=",
"<<=",
">>=",
">>>=",
"&=",
"|=",
"^=",
",",
// binary/unary operators
"+",
"-",
"*",
"**",
"/",
"%",
"++",
"--",
"<<",
">>",
">>>",
"&",
"|",
"^",
"!",
"~",
"&&",
"||",
"?",
":",
"===",
"==",
">=",
"<=",
"<",
">",
"!=",
"!=="
].indexOf(t) >= 0;
}, Reader2.prototype.isRegexStart = function() {
var previous = this.values[this.values.length - 1], regex = previous !== null;
switch (previous) {
case "this":
case "]":
regex = !1;
break;
case ")":
var keyword = this.values[this.paren - 1];
regex = keyword === "if" || keyword === "while" || keyword === "for" || keyword === "with";
break;
case "}":
if (regex = !1, this.values[this.curly - 3] === "function") {
var check = this.values[this.curly - 4];
regex = check ? !this.beforeFunctionExpression(check) : !1;
} else if (this.values[this.curly - 4] === "function") {
var check = this.values[this.curly - 5];
regex = check ? !this.beforeFunctionExpression(check) : !0;
}
break;
default:
break;
}
return regex;
}, Reader2.prototype.push = function(token) {
token.type === 7 || token.type === 4 ? (token.value === "{" ? this.curly = this.values.length : token.value === "(" && (this.paren = this.values.length), this.values.push(token.value)) : this.values.push(null);
}, Reader2;
})(), Tokenizer = (function() {
function Tokenizer2(code, config) {
this.errorHandler = new error_handler_1.ErrorHandler(), this.errorHandler.tolerant = config ? typeof config.tolerant == "boolean" && config.tolerant : !1, this.scanner = new scanner_1.Scanner(code, this.errorHandler), this.scanner.trackComment = config ? typeof config.comment == "boolean" && config.comment : !1, this.trackRange = config ? typeof config.range == "boolean" && config.range : !1, this.trackLoc = config ? typeof config.loc == "boolean" && config.loc : !1, this.buffer = [], this.reader = new Reader();
}
return Tokenizer2.prototype.errors = function() {
return this.errorHandler.errors;
}, Tokenizer2.prototype.getNextToken = function() {
if (this.buffer.length === 0) {
var comments = this.scanner.scanComments();
if (this.scanner.trackComment)
for (var i = 0; i < comments.length; ++i) {
var e = comments[i], value = this.scanner.source.slice(e.slice[0], e.slice[1]), comment = {
type: e.multiLine ? "BlockComment" : "LineComment",
value
};
this.trackRange && (comment.range = e.range), this.trackLoc && (comment.loc = e.loc), this.buffer.push(comment);
}
if (!this.scanner.eof()) {
var loc = void 0;
this.trackLoc && (loc = {
start: {
line: this.scanner.lineNumber,
column: this.scanner.index - this.scanner.lineStart
},
end: {}
});
var startRegex = this.scanner.source[this.scanner.index] === "/" && this.reader.isRegexStart(), token = startRegex ? this.scanner.scanRegExp() : this.scanner.lex();
this.reader.push(token);
var entry = {
type: token_1.TokenName[token.type],
value: this.scanner.source.slice(token.start, token.end)
};
if (this.trackRange && (entry.range = [token.start, token.end]), this.trackLoc && (loc.end = {
line: this.scanner.lineNumber,
column: this.scanner.index - this.scanner.lineStart
}, entry.loc = loc), token.type === 9) {
var pattern = token.pattern, flags = token.flags;
entry.regex = { pattern, flags };
}
this.buffer.push(entry);
}
}
return this.buffer.shift();
}, Tokenizer2;
})();
exports2.Tokenizer = Tokenizer;
}
/******/
])
);
});
}
});
// ../node_modules/core-util-is/lib/util.js
var require_util = __commonJS({
"../node_modules/core-util-is/lib/util.js"(exports) {
function isArray(arg) {
return Array.isArray ? Array.isArray(arg) : objectToString(arg) === "[object Array]";
}
exports.isArray = isArray;
function isBoolean(arg) {
return typeof arg == "boolean";
}
exports.isBoolean = isBoolean;
function isNull(arg) {
return arg === null;
}
exports.isNull = isNull;
function isNullOrUndefined(arg) {
return arg == null;
}
exports.isNullOrUndefined = isNullOrUndefined;
function isNumber(arg) {
return typeof arg == "number";
}
exports.isNumber = isNumber;
function isString(arg) {
return typeof arg == "string";
}
exports.isString = isString;
function isSymbol(arg) {
return typeof arg == "symbol";
}
exports.isSymbol = isSymbol;
function isUndefined(arg) {
return arg === void 0;
}
exports.isUndefined = isUndefined;
function isRegExp(re) {
return objectToString(re) === "[object RegExp]";
}
exports.isRegExp = isRegExp;
function isObject(arg) {
return typeof arg == "object" && arg !== null;
}
exports.isObject = isObject;
function isDate(d) {
return objectToString(d) === "[object Date]";
}
exports.isDate = isDate;
function isError(e) {
return objectToString(e) === "[object Error]" || e instanceof Error;
}
exports.isError = isError;
function isFunction(arg) {
return typeof arg == "function";
}
exports.isFunction = isFunction;
function isPrimitive(arg) {
return arg === null || typeof arg == "boolean" || typeof arg == "number" || typeof arg == "string" || typeof arg == "symbol" || // ES6 symbol
typeof arg > "u";
}
exports.isPrimitive = isPrimitive;
exports.isBuffer = __require("buffer").Buffer.isBuffer;
function objectToString(o) {
return Object.prototype.toString.call(o);
}
}
});
// ../node_modules/array-timsort/src/index.js
var require_src = __commonJS({
"../node_modules/array-timsort/src/index.js"(exports, module) {
var POWERS_OF_TEN = [1, 10, 100, 1e3, 1e4, 1e5, 1e6, 1e7, 1e8, 1e9], results, log10 = (x) => x < 1e5 ? x < 100 ? x < 10 ? 0 : 1 : x < 1e4 ? x < 1e3 ? 2 : 3 : 4 : x < 1e7 ? x < 1e6 ? 5 : 6 : x < 1e9 ? x < 1e8 ? 7 : 8 : 9;
function alphabeticalCompare(a, b) {
if (a === b)
return 0;
if (~~a === a && ~~b === b) {
if (a === 0 || b === 0)
return a < b ? -1 : 1;
if (a < 0 || b < 0) {
if (b >= 0)
return -1;
if (a >= 0)
return 1;
a = -a, b = -b;
}
let al = log10(a), bl = log10(b), t = 0;
return al < bl ? (a *= POWERS_OF_TEN[bl - al - 1], b /= 10, t = -1) : al > bl && (b *= POWERS_OF_TEN[al - bl - 1], a /= 10, t = 1), a === b ? t : a < b ? -1 : 1;
}
let aStr = String(a), bStr = String(b);
return aStr === bStr ? 0 : aStr < bStr ? -1 : 1;
}
function minRunLength(n) {
let r = 0;
for (; n >= 32; )
r |= n & 1, n >>= 1;
return n + r;
}
function makeAscendingRun(array, lo, hi, compare) {
let runHi = lo + 1;
if (runHi === hi)
return 1;
if (compare(array[runHi++], array[lo]) < 0) {
for (; runHi < hi && compare(array[runHi], array[runHi - 1]) < 0; )
runHi++;
reverseRun(array, lo, runHi), reverseRun(results, lo, runHi);
} else
for (; runHi < hi && compare(array[runHi], array[runHi - 1]) >= 0; )
runHi++;
return runHi - lo;
}
function reverseRun(array, lo, hi) {
for (hi--; lo < hi; ) {
let t = array[lo];
array[lo++] = array[hi], array[hi--] = t;
}
}
function binaryInsertionSort(array, lo, hi, start, compare) {
for (start === lo && start++; start < hi; start++) {
let pivot = array[start], pivotIndex = results[start], left = lo, right = start;
for (; left < right; ) {
let mid = left + right >>> 1;
compare(pivot, array[mid]) < 0 ? right = mid : left = mid + 1;
}
let n = start - left;
switch (n) {
case 3:
array[left + 3] = array[left + 2], results[left + 3] = results[left + 2];
/* falls through */
case 2:
array[left + 2] = array[left + 1], results[left + 2] = results[left + 1];
/* falls through */
case 1:
array[left + 1] = array[left], results[left + 1] = results[left];
break;
default:
for (; n > 0; )
array[left + n] = array[left + n - 1], results[left + n] = results[left + n - 1], n--;
}
array[left] = pivot, results[left] = pivotIndex;
}
}
function gallopLeft(value, array, start, length, hint, compare) {
let lastOffset = 0, maxOffset = 0, offset = 1;
if (compare(value, array[start + hint]) > 0) {
for (maxOffset = length - hint; offset < maxOffset && compare(value, array[start + hint + offset]) > 0; )
lastOffset = offset, offset = (offset << 1) + 1, offset <= 0 && (offset = maxOffset);
offset > maxOffset && (offset = maxOffset), lastOffset += hint, offset += hint;
} else {
for (maxOffset = hint + 1; offset < maxOffset && compare(value, array[start + hint - offset]) <= 0; )
lastOffset = offset, offset = (offset << 1) + 1, offset <= 0 && (offset = maxOffset);
offset > maxOffset && (offset = maxOffset);
let tmp = lastOffset;
lastOffset = hint - offset, offset = hint - tmp;
}
for (lastOffset++; lastOffset < offset; ) {
let m = lastOffset + (offset - lastOffset >>> 1);
compare(value, array[start + m]) > 0 ? lastOffset = m + 1 : offset = m;
}
return offset;
}
function gallopRight(value, array, start, length, hint, compare) {
let lastOffset = 0, maxOffset = 0, offset = 1;
if (compare(value, array[start + hint]) < 0) {
for (maxOffset = hint + 1; offset < maxOffset && compare(value, array[start + hint - offset]) < 0; )
lastOffset = offset, offset = (offset << 1) + 1, offset <= 0 && (offset = maxOffset);
offset > maxOffset && (offset = maxOffset);
let tmp = lastOffset;
lastOffset = hint - offset, offset = hint - tmp;
} else {
for (maxOffset = length - hint; offset < maxOffset && compare(value, array[start + hint + offset]) >= 0; )
lastOffset = offset, offset = (offset << 1) + 1, offset <= 0 && (offset = maxOffset);
offset > maxOffset && (offset = maxOffset), lastOffset += hint, offset += hint;
}
for (lastOffset++; lastOffset < offset; ) {
let m = lastOffset + (offset - lastOffset >>> 1);
compare(value, array[start + m]) < 0 ? offset = m : lastOffset = m + 1;
}
return offset;
}
var TimSort = class {
constructor(array, compare) {
this.array = array, this.compare = compare;
let { length } = array;
this.length = length, this.minGallop = 7, this.tmpStorageLength = length < 2 * 256 ? length >>> 1 : 256, this.tmp = new Array(this.tmpStorageLength), this.tmpIndex = new Array(this.tmpStorageLength), this.stackLength = length < 120 ? 5 : length < 1542 ? 10 : length < 119151 ? 19 : 40, this.runStart = new Array(this.stackLength), this.runLength = new Array(this.stackLength), this.stackSize = 0;
}
/**
* Push a new run on TimSort's stack.
*
* @param {number} runStart - Start index of the run in the original array.
* @param {number} runLength - Length of the run;
*/
pushRun(runStart, runLength) {
this.runStart[this.stackSize] = runStart, this.runLength[this.stackSize] = runLength, this.stackSize += 1;
}
/**
* Merge runs on TimSort's stack so that the following holds for all i:
* 1) runLength[i - 3] > runLength[i - 2] + runLength[i - 1]
* 2) runLength[i - 2] > runLength[i - 1]
*/
mergeRuns() {
for (; this.stackSize > 1; ) {
let n = this.stackSize - 2;
if (n >= 1 && this.runLength[n - 1] <= this.runLength[n] + this.runLength[n + 1] || n >= 2 && this.runLength[n - 2] <= this.runLength[n] + this.runLength[n - 1])
this.runLength[n - 1] < this.runLength[n + 1] && n--;
else if (this.runLength[n] > this.runLength[n + 1])
break;
this.mergeAt(n);
}
}
/**
* Merge all runs on TimSort's stack until only one remains.
*/
forceMergeRuns() {
for (; this.stackSize > 1; ) {
let n = this.stackSize - 2;
n > 0 && this.runLength[n - 1] < this.runLength[n + 1] && n--, this.mergeAt(n);
}
}
/**
* Merge the runs on the stack at positions i and i+1. Must be always be called
* with i=stackSize-2 or i=stackSize-3 (that is, we merge on top of the stack).
*
* @param {number} i - Index of the run to merge in TimSort's stack.
*/
mergeAt(i) {
let { compare } = this, { array } = this, start1 = this.runStart[i], length1 = this.runLength[i], start2 = this.runStart[i + 1], length2 = this.runLength[i + 1];
this.runLength[i] = length1 + length2, i === this.stackSize - 3 && (this.runStart[i + 1] = this.runStart[i + 2], this.runLength[i + 1] = this.runLength[i + 2]), this.stackSize--;
let k = gallopRight(array[start2], array, start1, length1, 0, compare);
start1 += k, length1 -= k, length1 !== 0 && (length2 = gallopLeft(
array[start1 + length1 - 1],
array,
start2,
length2,
length2 - 1,
compare
), length2 !== 0 && (length1 <= length2 ? this.mergeLow(start1, length1, start2, length2) : this.mergeHigh(start1, length1, start2, length2)));
}
/**
* Merge two adjacent runs in a stable way. The runs must be such that the
* first element of run1 is bigger than the first element in run2 and the
* last element of run1 is greater than all the elements in run2.
* The method should be called when run1.length <= run2.length as it uses
* TimSort temporary array to store run1. Use mergeHigh if run1.length >
* run2.length.
*
* @param {number} start1 - First element in run1.
* @param {number} length1 - Length of run1.
* @param {number} start2 - First element in run2.
* @param {number} length2 - Length of run2.
*/
mergeLow(start1, length1, start2, length2) {
let { compare } = this, { array } = this, { tmp } = this, { tmpIndex } = this, i = 0;
for (i = 0; i < length1; i++)
tmp[i] = array[start1 + i], tmpIndex[i] = results[start1 + i];
let cursor1 = 0, cursor2 = start2, dest = start1;
if (array[dest] = array[cursor2], results[dest] = results[cursor2], dest++, cursor2++, --length2 === 0) {
for (i = 0; i < length1; i++)
array[dest + i] = tmp[cursor1 + i], results[dest + i] = tmpIndex[cursor1 + i];
return;
}
if (length1 === 1) {
for (i = 0; i < length2; i++)
array[dest + i] = array[cursor2 + i], results[dest + i] = results[cursor2 + i];
array[dest + length2] = tmp[cursor1], results[dest + length2] = tmpIndex[cursor1];
return;
}
let { minGallop } = this;
for (; ; ) {
let count1 = 0, count2 = 0, exit = !1;
do
if (compare(array[cursor2], tmp[cursor1]) < 0) {
if (array[dest] = array[cursor2], results[dest] = results[cursor2], dest++, cursor2++, count2++, count1 = 0, --length2 === 0) {
exit = !0;
break;
}
} else if (array[dest] = tmp[cursor1], results[dest] = tmpIndex[cursor1], dest++, cursor1++, count1++, count2 = 0, --length1 === 1) {
exit = !0;
break;
}
while ((count1 | count2) < minGallop);
if (exit)
break;
do {
if (count1 = gallopRight(array[cursor2], tmp, cursor1, length1, 0, compare), count1 !== 0) {
for (i = 0; i < count1; i++)
array[dest + i] = tmp[cursor1 + i], results[dest + i] = tmpIndex[cursor1 + i];
if (dest += count1, cursor1 += count1, length1 -= count1, length1 <= 1) {
exit = !0;
break;
}
}
if (array[dest] = array[cursor2], results[dest] = results[cursor2], dest++, cursor2++, --length2 === 0) {
exit = !0;
break;
}
if (count2 = gallopLeft(tmp[cursor1], array, cursor2, length2, 0, compare), count2 !== 0) {
for (i = 0; i < count2; i++)
array[dest + i] = array[cursor2 + i], results[dest + i] = results[cursor2 + i];
if (dest += count2, cursor2 += count2, length2 -= count2, length2 === 0) {
exit = !0;
break;
}
}
if (array[dest] = tmp[cursor1], results[dest] = tmpIndex[cursor1], dest++, cursor1++, --length1 === 1) {
exit = !0;
break;
}
minGallop--;
} while (count1 >= 7 || count2 >= 7);
if (exit)
break;
minGallop < 0 && (minGallop = 0), minGallop += 2;
}
if (this.minGallop = minGallop, minGallop < 1 && (this.minGallop = 1), length1 === 1) {
for (i = 0; i < length2; i++)
array[dest + i] = array[cursor2 + i], results[dest + i] = results[cursor2 + i];
array[dest + length2] = tmp[cursor1], results[dest + length2] = tmpIndex[cursor1];
} else {
if (length1 === 0)
throw new Error("mergeLow preconditions were not respected");
for (i = 0; i < length1; i++)
array[dest + i] = tmp[cursor1 + i], results[dest + i] = tmpIndex[cursor1 + i];
}
}
/**
* Merge two adjacent runs in a stable way. The runs must be such that the
* first element of run1 is bigger than the first element in run2 and the
* last element of run1 is greater than all the elements in run2.
* The method should be called when run1.length > run2.length as it uses
* TimSort temporary array to store run2. Use mergeLow if run1.length <=
* run2.length.
*
* @param {number} start1 - First element in run1.
* @param {number} length1 - Length of run1.
* @param {number} start2 - First element in run2.
* @param {number} length2 - Length of run2.
*/
mergeHigh(start1, length1, start2, length2) {
let { compare } = this, { array } = this, { tmp } = this, { tmpIndex } = this, i = 0;
for (i = 0; i < length2; i++)
tmp[i] = array[start2 + i], tmpIndex[i] = results[start2 + i];
let cursor1 = start1 + length1 - 1, cursor2 = length2 - 1, dest = start2 + length2 - 1, customCursor = 0, customDest = 0;
if (array[dest] = array[cursor1], results[dest] = results[cursor1], dest--, cursor1--, --length1 === 0) {
for (customCursor = dest - (length2 - 1), i = 0; i < length2; i++)
array[customCursor + i] = tmp[i], results[customCursor + i] = tmpIndex[i];
return;
}
if (length2 === 1) {
for (dest -= length1, cursor1 -= length1, customDest = dest + 1, customCursor = cursor1 + 1, i = length1 - 1; i >= 0; i--)
array[customDest + i] = array[customCursor + i], results[customDest + i] = results[customCursor + i];
array[dest] = tmp[cursor2], results[dest] = tmpIndex[cursor2];
return;
}
let { minGallop } = this;
for (; ; ) {
let count1 = 0, count2 = 0, exit = !1;
do
if (compare(tmp[cursor2], array[cursor1]) < 0) {
if (array[dest] = array[cursor1], results[dest] = results[cursor1], dest--, cursor1--, count1++, count2 = 0, --length1 === 0) {
exit = !0;
break;
}
} else if (array[dest] = tmp[cursor2], results[dest] = tmpIndex[cursor2], dest--, cursor2--, count2++, count1 = 0, --length2 === 1) {
exit = !0;
break;
}
while ((count1 | count2) < minGallop);
if (exit)
break;
do {
if (count1 = length1 - gallopRight(
tmp[cursor2],
array,
start1,
length1,
length1 - 1,
compare
), count1 !== 0) {
for (dest -= count1, cursor1 -= count1, length1 -= count1, customDest = dest + 1, customCursor = cursor1 + 1, i = count1 - 1; i >= 0; i--)
array[customDest + i] = array[customCursor + i], results[customDest + i] = results[customCursor + i];
if (length1 === 0) {
exit = !0;
break;
}
}
if (array[dest] = tmp[cursor2], results[dest] = tmpIndex[cursor2], dest--, cursor2--, --length2 === 1) {
exit = !0;
break;
}
if (count2 = length2 - gallopLeft(
array[cursor1],
tmp,
0,
length2,
length2 - 1,
compare
), count2 !== 0) {
for (dest -= count2, cursor2 -= count2, length2 -= count2, customDest = dest + 1, customCursor = cursor2 + 1, i = 0; i < count2; i++)
array[customDest + i] = tmp[customCursor + i], results[customDest + i] = tmpIndex[customCursor + i];
if (length2 <= 1) {
exit = !0;
break;
}
}
if (array[dest] = array[cursor1], results[dest] = results[cursor1], dest--, cursor1--, --length1 === 0) {
exit = !0;
break;
}
minGallop--;
} while (count1 >= 7 || count2 >= 7);
if (exit)
break;
minGallop < 0 && (minGallop = 0), minGallop += 2;
}
if (this.minGallop = minGallop, minGallop < 1 && (this.minGallop = 1), length2 === 1) {
for (dest -= length1, cursor1 -= length1, customDest = dest + 1, customCursor = cursor1 + 1, i = length1 - 1; i >= 0; i--)
array[customDest + i] = array[customCursor + i], results[customDest + i] = results[customCursor + i];
array[dest] = tmp[cursor2], results[dest] = tmpIndex[cursor2];
} else {
if (length2 === 0)
throw new Error("mergeHigh preconditions were not respected");
for (customCursor = dest - (length2 - 1), i = 0; i < length2; i++)
array[customCursor + i] = tmp[i], results[customCursor + i] = tmpIndex[i];
}
}
};
function sort(array, compare, lo, hi) {
if (!Array.isArray(array))
throw new TypeError(
`The "array" argument must be an array. Received ${array}`
);
results = [];
let { length } = array, i = 0;
for (; i < length; )
results[i] = i++;
compare ? typeof compare != "function" && (hi = lo, lo = compare, compare = alphabeticalCompare) : compare = alphabeticalCompare, lo || (lo = 0), hi || (hi = length);
let remaining = hi - lo;
if (remaining < 2)
return results;
let runLength = 0;
if (remaining < 32)
return runLength = makeAscendingRun(array, lo, hi, compare), binaryInsertionSort(array, lo, hi, lo + runLength, compare), results;
let ts = new TimSort(array, compare), minRun = minRunLength(remaining);
do {
if (runLength = makeAscendingRun(array, lo, hi, compare), runLength < minRun) {
let force = remaining;
force > minRun && (force = minRun), binaryInsertionSort(array, lo, lo + force, lo + runLength, compare), runLength = force;
}
ts.pushRun(lo, runLength), ts.mergeRuns(), remaining -= runLength, lo += runLength;
} while (remaining !== 0);
return ts.forceMergeRuns(), results;
}
module.exports = {
sort
};
}
});
// ../node_modules/comment-json/src/common.js
var require_common = __commonJS({
"../node_modules/comment-json/src/common.js"(exports, module) {
var {
isObject,
isArray,
isString,
isNumber,
isFunction
} = require_util(), PREFIX_BEFORE = "before", PREFIX_AFTER_PROP = "after-prop", PREFIX_AFTER_COLON = "after-colon", PREFIX_AFTER_VALUE = "after-value", PREFIX_AFTER = "after", PREFIX_BEFORE_ALL = "before-all", PREFIX_AFTER_ALL = "after-all", BRACKET_OPEN = "[", BRACKET_CLOSE = "]", CURLY_BRACKET_OPEN = "{", CURLY_BRACKET_CLOSE = "}", COMMA = ",", EMPTY = "", MINUS = "-", SYMBOL_PREFIXES = [
PREFIX_BEFORE,
PREFIX_AFTER_PROP,
PREFIX_AFTER_COLON,
PREFIX_AFTER_VALUE,
PREFIX_AFTER
], NON_PROP_SYMBOL_KEYS = [
PREFIX_BEFORE,
PREFIX_BEFORE_ALL,
PREFIX_AFTER_ALL
].map(Symbol.for), COLON = ":", UNDEFINED = void 0, symbol = (prefix, key) => Symbol.for(prefix + COLON + key), define2 = (target, key, value) => Object.defineProperty(target, key, {
value,
writable: !0,
configurable: !0
}), copy_comments_by_kind = (target, source, target_key, source_key, prefix, remove_source) => {
let source_prop = symbol(prefix, source_key);
if (!Object.hasOwn(source, source_prop))
return;
let target_prop = target_key === source_key ? source_prop : symbol(prefix, target_key);
define2(target, target_prop, source[source_prop]), remove_source && delete source[source_prop];
}, copy_comments = (target, source, target_key, source_key, remove_source) => {
SYMBOL_PREFIXES.forEach((prefix) => {
copy_comments_by_kind(
target,
source,
target_key,
source_key,
prefix,
remove_source
);
});
}, swap_comments = (array, from, to) => {
from !== to && SYMBOL_PREFIXES.forEach((prefix) => {
let target_prop = symbol(prefix, to);
if (!Object.hasOwn(array, target_prop)) {
copy_comments_by_kind(array, array, to, from, prefix, !0);
return;
}
let comments = array[target_prop];
delete array[target_prop], copy_comments_by_kind(array, array, to, from, prefix, !0), define2(array, symbol(prefix, from), comments);
});
}, assign_non_prop_comments = (target, source) => {
NON_PROP_SYMBOL_KEYS.forEach((key) => {
let comments = source[key];
comments && define2(target, key, comments);
});
}, assign = (target, source, keys) => (keys.forEach((key) => {
!isString(key) && !isNumber(key) || Object.hasOwn(source, key) && (target[key] = source[key], copy_comments(target, source, key, key));
}), target), is_raw_json = isFunction(JSON.isRawJSON) ? JSON.isRawJSON : () => !1;
module.exports = {
SYMBOL_PREFIXES,
PREFIX_BEFORE,
PREFIX_AFTER_PROP,
PREFIX_AFTER_COLON,
PREFIX_AFTER_VALUE,
PREFIX_AFTER,
PREFIX_BEFORE_ALL,
PREFIX_AFTER_ALL,
BRACKET_OPEN,
BRACKET_CLOSE,
CURLY_BRACKET_OPEN,
CURLY_BRACKET_CLOSE,
COLON,
COMMA,
MINUS,
EMPTY,
UNDEFINED,
symbol,
define: define2,
copy_comments,
swap_comments,
assign_non_prop_comments,
is_raw_json,
assign(target, source, keys) {
if (!isObject(target))
throw new TypeError("Cannot convert undefined or null to object");
if (!isObject(source))
return target;
if (keys === UNDEFINED)
keys = Object.keys(source), assign_non_prop_comments(target, source);
else if (isArray(keys))
keys.length === 0 && assign_non_prop_comments(target, source);
else throw new TypeError("keys must be array or undefined");
return assign(target, source, keys);
}
};
}
});
// ../node_modules/comment-json/src/array.js
var require_array = __commonJS({
"../node_modules/comment-json/src/array.js"(exports, module) {
var { isArray } = require_util(), { sort } = require_src(), {
SYMBOL_PREFIXES,
UNDEFINED,
symbol,
copy_comments,
swap_comments
} = require_common(), reverse_comments = (array) => {
let { length } = array, i = 0, max = length / 2;
for (; i < max; i++)
swap_comments(array, i, length - i - 1);
}, move_comment = (target, source, i, offset, remove) => {
copy_comments(target, source, i + offset, i, remove);
}, move_comments = (target, source, start, count, offset, remove) => {
if (offset > 0) {
let i2 = count;
for (; i2-- > 0; )
move_comment(target, source, start + i2, offset, remove);
return;
}
let i = 0;
for (; i < count; ) {
let ii = i++;
move_comment(target, source, start + ii, offset, remove);
}
}, remove_comments = (array, key) => {
SYMBOL_PREFIXES.forEach((prefix) => {
let prop = symbol(prefix, key);
delete array[prop];
});
}, get_mapped = (map, key) => {
let mapped = key;
for (; mapped in map; )
mapped = map[mapped];
return mapped;
}, CommentArray = class _CommentArray extends Array {
// - deleteCount + items.length
// We should avoid `splice(begin, deleteCount, ...items)`,
// because `splice(0, undefined)` is not equivalent to `splice(0)`,
// as well as:
// - slice
splice(...args) {
let { length } = this, ret = super.splice(...args), [begin, deleteCount, ...items] = args;
begin < 0 && (begin += length), arguments.length === 1 ? deleteCount = length - begin : deleteCount = Math.min(length - begin, deleteCount);
let {
length: item_length
} = items, offset = item_length - deleteCount, start = begin + deleteCount, count = length - start;
return move_comments(this, this, start, count, offset, !0), ret;
}
slice(...args) {
let { length } = this, array = super.slice(...args);
if (!array.length)
return new _CommentArray();
let [begin, before] = args;
return before === UNDEFINED ? before = length : before < 0 && (before += length), begin < 0 ? begin += length : begin === UNDEFINED && (begin = 0), move_comments(array, this, begin, before - begin, -begin), array;
}
unshift(...items) {
let { length } = this, ret = super.unshift(...items), {
length: items_length
} = items;
return items_length > 0 && move_comments(this, this, 0, length, items_length, !0), ret;
}
shift() {
let ret = super.shift(), { length } = this;
return remove_comments(this, 0), move_comments(this, this, 1, length, -1, !0), ret;
}
reverse() {
return super.reverse(), reverse_comments(this), this;
}
pop() {
let ret = super.pop();
return remove_comments(this, this.length), ret;
}
concat(...items) {
let { length } = this, ret = super.concat(...items);
return items.length && (move_comments(ret, this, 0, this.length, 0), items.forEach((item) => {
let prev = length;
length += isArray(item) ? item.length : 1, item instanceof _CommentArray && move_comments(ret, item, 0, item.length, prev);
})), ret;
}
sort(...args) {
let result = sort(
this,
...args.slice(0, 1)
), map = /* @__PURE__ */ Object.create(null);
return result.forEach((source_index, index) => {
if (source_index === index)
return;
let real_source_index = get_mapped(map, source_index);
real_source_index !== index && (map[index] = real_source_index, swap_comments(this, index, real_source_index));
}), this;
}
};
module.exports = {
CommentArray
};
}
});
// ../node_modules/comment-json/src/parse.js
var require_parse = __commonJS({
"../node_modules/comment-json/src/parse.js"(exports, module) {
var esprima = require_esprima(), {
CommentArray
} = require_array(), {
PREFIX_BEFORE,
PREFIX_AFTER_PROP,
PREFIX_AFTER_COLON,
PREFIX_AFTER_VALUE,
PREFIX_AFTER,
PREFIX_BEFORE_ALL,
PREFIX_AFTER_ALL,
BRACKET_OPEN,
BRACKET_CLOSE,
CURLY_BRACKET_OPEN,
CURLY_BRACKET_CLOSE,
COLON,
COMMA,
MINUS,
EMPTY,
UNDEFINED,
define: define2,
assign_non_prop_comments
} = require_common(), tokenize = (code) => esprima.tokenize(code, {
comment: !0,
loc: !0
}), current_code, previous_hosts = [], comments_host = null, unassigned_comments = null, previous_props = [], last_prop, remove_comments = !1, inline = !1, tokens = null, last = null, current = null, index, reviver = null, clean = () => {
current_code = UNDEFINED, previous_props.length = previous_hosts.length = 0, last = null, last_prop = UNDEFINED;
}, free = () => {
clean(), tokens.length = 0, unassigned_comments = comments_host = tokens = last = current = reviver = null, current_code = UNDEFINED;
}, symbolFor = (prefix) => Symbol.for(
last_prop !== UNDEFINED ? prefix + COLON + last_prop : prefix
), transform = (k, { value, context = {} }) => reviver ? reviver(k, value, context) : value, unexpected = () => {
let error = new SyntaxError(`Unexpected token '${current.value.slice(0, 1)}', "${current_code}" is not valid JSON`);
throw Object.assign(error, current.loc.start), free(), error;
}, unexpected_end = () => {
let error = new SyntaxError("Unexpected end of JSON input");
throw Object.assign(error, last ? last.loc.end : {
line: 1,
column: 0
}), free(), error;
}, next = () => {
let new_token = tokens[++index];
inline = current && new_token && current.loc.end.line === new_token.loc.start.line || !1, last = current, current = new_token;
}, type = () => (current || unexpected_end(), current.type === "Punctuator" ? current.value : current.type), is = (t) => type() === t, expect = (a) => {
is(a) || unexpected();
}, set_comments_host = (new_host) => {
previous_hosts.push(comments_host), comments_host = new_host;
}, restore_comments_host = () => {
comments_host = previous_hosts.pop();
}, assign_after_comments = () => {
if (!unassigned_comments)
return;
let after_comments = [];
for (let comment of unassigned_comments)
if (comment.inline)
after_comments.push(comment);
else
break;
let { length } = after_comments;
length && (length === unassigned_comments.length ? unassigned_comments = null : unassigned_comments.splice(0, length), define2(comments_host, symbolFor(PREFIX_AFTER), after_comments));
}, assign_comments = (prefix) => {
unassigned_comments && (define2(comments_host, symbolFor(prefix), unassigned_comments), unassigned_comments = null);
}, parse_comments = (prefix) => {
let comments = [];
for (; current && (is("LineComment") || is("BlockComment")); ) {
let comment = {
...current,
inline
};
comments.push(comment), next();
}
if (!remove_comments && comments.length) {
if (prefix) {
define2(comments_host, symbolFor(prefix), comments);
return;
}
unassigned_comments = comments;
}
}, set_prop = (prop, push) => {
push && previous_props.push(last_prop), last_prop = prop;
}, restore_prop = () => {
last_prop = previous_props.pop();
}, parse_object = () => {
let obj = {};
set_comments_host(obj), set_prop(UNDEFINED, !0);
let started = !1, name;
for (parse_comments(); !is(CURLY_BRACKET_CLOSE) && !(started && (assign_comments(PREFIX_AFTER_VALUE), expect(COMMA), next(), parse_comments(), assign_after_comments(), is(CURLY_BRACKET_CLOSE))); )
started = !0, expect("String"), name = JSON.parse(current.value), set_prop(name), assign_comments(PREFIX_BEFORE), next(), parse_comments(PREFIX_AFTER_PROP), expect(COLON), next(), parse_comments(PREFIX_AFTER_COLON), obj[name] = transform(name, walk()), parse_comments();
return started && assign_comments(PREFIX_AFTER), next(), last_prop = void 0, started || assign_comments(PREFIX_BEFORE), restore_comments_host(), restore_prop(), obj;
}, parse_array = () => {
let array = new CommentArray();
set_comments_host(array), set_prop(UNDEFINED, !0);
let started = !1, i = 0;
for (parse_comments(); !is(BRACKET_CLOSE) && !(started && (assign_comments(PREFIX_AFTER_VALUE), expect(COMMA), next(), parse_comments(), assign_after_comments(), is(BRACKET_CLOSE))); )
started = !0, set_prop(i), assign_comments(PREFIX_BEFORE), array[i] = transform(i, walk()), i++, parse_comments();
return started && assign_comments(PREFIX_AFTER), next(), last_prop = void 0, started || assign_comments(PREFIX_BEFORE), restore_comments_host(), restore_prop(), array;
};
function walk() {
let tt = type();
if (tt === CURLY_BRACKET_OPEN)
return next(), {
value: parse_object()
};
if (tt === BRACKET_OPEN)
return next(), {
value: parse_array()
};
let negative = EMPTY;
tt === MINUS && (next(), tt = type(), negative = MINUS);
let v, source;
switch (tt) {
case "String":
case "Boolean":
case "Null":
case "Numeric":
return v = current.value, next(), source = negative + v, {
value: JSON.parse(source),
context: {
source
}
};
default:
return {};
}
}
var isObject = (subject) => Object(subject) === subject, parse = (code, rev, no_comments) => {
clean(), current_code = code, tokens = tokenize(code), reviver = rev, remove_comments = no_comments, tokens.length || unexpected_end(), index = -1, next(), set_comments_host({}), parse_comments(PREFIX_BEFORE_ALL);
let final = walk();
parse_comments(PREFIX_AFTER_ALL), current && unexpected();
let result = transform("", final);
return !no_comments && result !== null && (isObject(result) || (result = new Object(result)), assign_non_prop_comments(result, comments_host)), restore_comments_host(), free(), result;
};
module.exports = {
parse,
tokenize
};
}
});
// ../node_modules/comment-json/src/stringify.js
var require_stringify = __commonJS({
"../node_modules/comment-json/src/stringify.js"(exports, module) {
var {
isArray,
isObject,
isFunction,
isNumber,
isString
} = require_util(), {
PREFIX_BEFORE_ALL,
PREFIX_BEFORE,
PREFIX_AFTER_PROP,
PREFIX_AFTER_COLON,
PREFIX_AFTER_VALUE,
PREFIX_AFTER,
PREFIX_AFTER_ALL,
BRACKET_OPEN,
BRACKET_CLOSE,
CURLY_BRACKET_OPEN,
CURLY_BRACKET_CLOSE,
COLON,
COMMA,
EMPTY,
UNDEFINED,
is_raw_json
} = require_common(), ESCAPABLE = /[\\"\x00-\x1f\x7f-\x9f\u00ad\u0600-\u0604\u070f\u17b4\u17b5\u200c-\u200f\u2028-\u202f\u2060-\u206f\ufeff\ufff0-\uffff]/g, SPACE = " ", LF = `
`, STR_NULL = "null", BEFORE = (prop) => `${PREFIX_BEFORE}:${prop}`, AFTER_PROP = (prop) => `${PREFIX_AFTER_PROP}:${prop}`, AFTER_COLON = (prop) => `${PREFIX_AFTER_COLON}:${prop}`, AFTER_VALUE = (prop) => `${PREFIX_AFTER_VALUE}:${prop}`, AFTER = (prop) => `${PREFIX_AFTER}:${prop}`, meta = {
"\b": "\\b",
" ": "\\t",
"\n": "\\n",
"\f": "\\f",
"\r": "\\r",
'"': '\\"',
"\\": "\\\\"
}, escape = (string) => (ESCAPABLE.lastIndex = 0, ESCAPABLE.test(string) ? string.replace(ESCAPABLE, (a) => {
let c = meta[a];
return typeof c == "string" ? c : a;
}) : string), quote = (string) => `"${escape(string)}"`, comment_stringify = (value, line) => line ? `//${value}` : `/*${value}*/`, process_comments = (host, symbol_tag, deeper_gap, display_block) => {
let comments = host[Symbol.for(symbol_tag)];
if (!comments || !comments.length)
return EMPTY;
let is_line_comment = !1, str = comments.reduce((prev, {
inline,
type,
value
}) => {
let delimiter = inline ? SPACE : LF + deeper_gap;
return is_line_comment = type === "LineComment", prev + delimiter + comment_stringify(value, is_line_comment);
}, EMPTY);
return display_block || is_line_comment ? str + LF + deeper_gap : str;
}, replacer = null, indent = EMPTY, clean = () => {
replacer = null, indent = EMPTY;
}, join5 = (one, two, gap) => one ? two ? one + two.trim() + LF + gap : one.trimRight() + LF + gap : two ? two.trimRight() + LF + gap : EMPTY, join_content = (inside, value, gap) => {
let comment = process_comments(value, PREFIX_BEFORE, gap + indent, !0);
return join5(comment, inside, gap);
}, array_stringify = (value, gap) => {
let deeper_gap = gap + indent, { length } = value, inside = EMPTY, after_comma = EMPTY;
for (let i = 0; i < length; i++) {
i !== 0 && (inside += COMMA);
let before = join5(
after_comma,
process_comments(value, BEFORE(i), deeper_gap),
deeper_gap
);
inside += before || LF + deeper_gap, inside += stringify(i, value, deeper_gap) || STR_NULL, inside += process_comments(value, AFTER_VALUE(i), deeper_gap), after_comma = process_comments(value, AFTER(i), deeper_gap);
}
return inside += join5(
after_comma,
process_comments(value, PREFIX_AFTER, deeper_gap),
deeper_gap
), BRACKET_OPEN + join_content(inside, value, gap) + BRACKET_CLOSE;
}, object_stringify = (value, gap) => {
if (!value)
return "null";
let deeper_gap = gap + indent, inside = EMPTY, after_comma = EMPTY, first = !0, keys = isArray(replacer) ? replacer : Object.keys(value), iteratee = (key) => {
let sv = stringify(key, value, deeper_gap);
if (sv === UNDEFINED)
return;
first || (inside += COMMA), first = !1;
let before = join5(
after_comma,
process_comments(value, BEFORE(key), deeper_gap),
deeper_gap
);
inside += before || LF + deeper_gap, inside += quote(key) + process_comments(value, AFTER_PROP(key), deeper_gap) + COLON + process_comments(value, AFTER_COLON(key), deeper_gap) + SPACE + sv + process_comments(value, AFTER_VALUE(key), deeper_gap), after_comma = process_comments(value, AFTER(key), deeper_gap);
};
return keys.forEach(iteratee), inside += join5(
after_comma,
process_comments(value, PREFIX_AFTER, deeper_gap),
deeper_gap
), CURLY_BRACKET_OPEN + join_content(inside, value, gap) + CURLY_BRACKET_CLOSE;
};
function stringify(key, holder, gap) {
let value = holder[key];
switch (isObject(value) && isFunction(value.toJSON) && (value = value.toJSON(key)), isFunction(replacer) && (value = replacer.call(holder, key, value)), typeof value) {
case "string":
return quote(value);
case "number":
return Number.isFinite(value) ? String(value) : STR_NULL;
case "boolean":
case "null":
return String(value);
// If the type is 'object', we might be dealing with an object or an array or
// null.
case "object":
return is_raw_json(value) ? value.rawJSON : isArray(value) ? array_stringify(value, gap) : object_stringify(value, gap);
// undefined
default:
}
}
var get_indent = (space) => isString(space) ? space : isNumber(space) ? SPACE.repeat(space) : EMPTY, { toString } = Object.prototype, PRIMITIVE_OBJECT_TYPES = [
"[object Number]",
"[object String]",
"[object Boolean]"
], is_primitive_object = (subject) => {
if (typeof subject != "object")
return !1;
let str = toString.call(subject);
return PRIMITIVE_OBJECT_TYPES.includes(str);
};
module.exports = (value, replacer_, space) => {
let indent_ = get_indent(space);
if (!indent_)
return JSON.stringify(value, replacer_);
!isFunction(replacer_) && !isArray(replacer_) && (replacer_ = null), replacer = replacer_, indent = indent_;
let str = is_primitive_object(value) ? JSON.stringify(value) : stringify("", { "": value }, EMPTY);
return clean(), isObject(value) ? process_comments(value, PREFIX_BEFORE_ALL, EMPTY, !0).trimLeft() + str + process_comments(value, PREFIX_AFTER_ALL, EMPTY).trimRight() : str;
};
}
});
// ../node_modules/comment-json/src/index.js
var require_src2 = __commonJS({
"../node_modules/comment-json/src/index.js"(exports, module) {
var { parse, tokenize } = require_parse(), stringify = require_stringify(), { CommentArray } = require_array(), {
PREFIX_BEFORE,
PREFIX_AFTER_PROP,
PREFIX_AFTER_COLON,
PREFIX_AFTER_VALUE,
PREFIX_AFTER,
PREFIX_BEFORE_ALL,
PREFIX_AFTER_ALL,
assign
} = require_common();
module.exports = {
PREFIX_BEFORE,
PREFIX_AFTER_PROP,
PREFIX_AFTER_COLON,
PREFIX_AFTER_VALUE,
PREFIX_AFTER,
PREFIX_BEFORE_ALL,
PREFIX_AFTER_ALL,
parse,
stringify,
tokenize,
CommentArray,
assign
};
}
});
// src/cli/helpers.ts
var import_picocolors = __toESM(require_picocolors(), 1);
import { cpSync, existsSync, readFileSync, writeFileSync } from "node:fs";
import { cp, readFile as readFile2, writeFile } from "node:fs/promises";
import { join as join3, resolve as resolve2 } from "node:path";
import {
frameworkToRenderer
} from "storybook/internal/common";
import { logger } from "storybook/internal/node-logger";
import {
SupportedLanguage
} from "storybook/internal/types";
import { Feature } from "storybook/internal/types";
import { coerce, satisfies } from "semver";
// ../node_modules/strip-json-comments/index.js
var singleComment = Symbol("singleComment"), multiComment = Symbol("multiComment"), stripWithoutWhitespace = () => "", stripWithWhitespace = (string, start, end) => string.slice(start, end).replace(/[^ \t\r\n]/g, " "), isEscaped = (jsonString, quotePosition) => {
let index = quotePosition - 1, backslashCount = 0;
for (; jsonString[index] === "\\"; )
index -= 1, backslashCount += 1;
return !!(backslashCount % 2);
};
function stripJsonComments(jsonString, { whitespace = !0, trailingCommas = !1 } = {}) {
if (typeof jsonString != "string")
throw new TypeError(`Expected argument \`jsonString\` to be a \`string\`, got \`${typeof jsonString}\``);
let strip = whitespace ? stripWithWhitespace : stripWithoutWhitespace, isInsideString = !1, isInsideComment = !1, offset = 0, buffer = "", result = "", commaIndex = -1;
for (let index = 0; index < jsonString.length; index++) {
let currentCharacter = jsonString[index], nextCharacter = jsonString[index + 1];
if (!isInsideComment && currentCharacter === '"' && (isEscaped(jsonString, index) || (isInsideString = !isInsideString)), !isInsideString)
if (!isInsideComment && currentCharacter + nextCharacter === "//")
buffer += jsonString.slice(offset, index), offset = index, isInsideComment = singleComment, index++;
else if (isInsideComment === singleComment && currentCharacter + nextCharacter === `\r
`) {
index++, isInsideComment = !1, buffer += strip(jsonString, offset, index), offset = index;
continue;
} else if (isInsideComment === singleComment && currentCharacter === `
`)
isInsideComment = !1, buffer += strip(jsonString, offset, index), offset = index;
else if (!isInsideComment && currentCharacter + nextCharacter === "/*") {
buffer += jsonString.slice(offset, index), offset = index, isInsideComment = multiComment, index++;
continue;
} else if (isInsideComment === multiComment && currentCharacter + nextCharacter === "*/") {
index++, isInsideComment = !1, buffer += strip(jsonString, offset, index + 1), offset = index + 1;
continue;
} else trailingCommas && !isInsideComment && (commaIndex !== -1 ? currentCharacter === "}" || currentCharacter === "]" ? (buffer += jsonString.slice(offset, index), result += strip(buffer, 0, 1) + buffer.slice(1), buffer = "", offset = index, commaIndex = -1) : currentCharacter !== " " && currentCharacter !== " " && currentCharacter !== "\r" && currentCharacter !== `
` && (buffer += jsonString.slice(offset, index), offset = index, commaIndex = -1) : currentCharacter === "," && (result += buffer + jsonString.slice(offset, index), buffer = "", offset = index, commaIndex = index));
}
let remaining = isInsideComment === singleComment ? strip(jsonString, offset) : jsonString.slice(offset);
return result + buffer + remaining;
}
// src/cli/dirs.ts
import { join as join2 } from "node:path";
import { Readable as Readable2 } from "node:stream";
import { pipeline as pipeline2 } from "node:stream/promises";
import { createGunzip } from "node:zlib";
import {
frameworkPackages,
rendererPackages,
temporaryDirectory,
versions
} from "storybook/internal/common";
// ../node_modules/get-npm-tarball-url/lib/index.mjs
function src_default(pkgName, pkgVersion, opts) {
let registry;
opts?.registry ? registry = opts.registry.endsWith("/") ? opts.registry : `${opts.registry}/` : registry = "https://registry.npmjs.org/";
let scopelessName = getScopelessName(pkgName);
return `${registry}${pkgName}/-/${scopelessName}-${removeBuildMetadataFromVersion(pkgVersion)}.tgz`;
}
function removeBuildMetadataFromVersion(version) {
let plusPos = version.indexOf("+");
return plusPos === -1 ? version : version.substring(0, plusPos);
}
function getScopelessName(name) {
return name[0] !== "@" ? name : name.split("/")[1];
}
// ../node_modules/modern-tar/dist/unpacker-BKKRRs7i.js
var FLAGTYPE = {
0: "file",
1: "link",
2: "symlink",
3: "character-device",
4: "block-device",
5: "directory",
6: "fifo",
x: "pax-header",
g: "pax-global-header",
L: "gnu-long-name",
K: "gnu-long-link-name"
}, ZERO_BLOCK = new Uint8Array(512), encoder = new TextEncoder(), decoder = new TextDecoder();
function readString(view, offset, size) {
let end = view.indexOf(0, offset), sliceEnd = end === -1 || end > offset + size ? offset + size : end;
return decoder.decode(view.subarray(offset, sliceEnd));
}
function readOctal(view, offset, size) {
let value = 0, end = offset + size;
for (let i = offset; i < end; i++) {
let charCode = view[i];
if (charCode === 0) break;
charCode !== 32 && (value = (value << 3) + (charCode - 48));
}
return value;
}
function readNumeric(view, offset, size) {
if (view[offset] & 128) {
let result = 0;
result = view[offset] & 127;
for (let i = 1; i < size; i++) result = result * 256 + view[offset + i];
if (!Number.isSafeInteger(result)) throw new Error("TAR number too large");
return result;
}
return readOctal(view, offset, size);
}
var CHECKSUM_SPACE = 32;
function validateChecksum(block) {
let stored = readOctal(block, 148, 8), sum = 0;
for (let i = 0; i < block.length; i++) i >= 148 && i < 156 ? sum += CHECKSUM_SPACE : sum += block[i];
return stored === sum;
}
function parseUstarHeader(block, strict) {
if (strict && !validateChecksum(block)) throw new Error("Invalid tar header checksum.");
let typeflag = readString(block, 156, 1), header = {
name: readString(block, 0, 100),
mode: readOctal(block, 100, 8),
uid: readNumeric(block, 108, 8),
gid: readNumeric(block, 116, 8),
size: readNumeric(block, 124, 12),
mtime: new Date(readNumeric(block, 136, 12) * 1e3),
type: FLAGTYPE[typeflag] || "file",
linkname: readString(block, 157, 100)
}, magic = readString(block, 257, 6);
return magic.trim() === "ustar" && (header.uname = readString(block, 265, 32), header.gname = readString(block, 297, 32)), magic === "ustar" && (header.prefix = readString(block, 345, 155)), header;
}
var PAX_MAPPING = {
path: ["name", (v) => v],
linkpath: ["linkname", (v) => v],
size: ["size", (v) => parseInt(v, 10)],
mtime: ["mtime", parseFloat],
uid: ["uid", (v) => parseInt(v, 10)],
gid: ["gid", (v) => parseInt(v, 10)],
uname: ["uname", (v) => v],
gname: ["gname", (v) => v]
};
function parsePax(buffer) {
let decoder$1 = new TextDecoder("utf-8"), overrides = {}, pax = {}, offset = 0;
for (; offset < buffer.length; ) {
let spaceIndex = buffer.indexOf(32, offset);
if (spaceIndex === -1) break;
let length = parseInt(decoder$1.decode(buffer.subarray(offset, spaceIndex)), 10);
if (Number.isNaN(length) || length === 0) break;
let recordEnd = offset + length, [key, value] = decoder$1.decode(buffer.subarray(spaceIndex + 1, recordEnd - 1)).split("=", 2);
if (key && value !== void 0) {
pax[key] = value;
let mapping = PAX_MAPPING[key];
if (mapping) {
let [targetKey, parser] = mapping, parsedValue = parser(value);
(typeof parsedValue == "string" || !Number.isNaN(parsedValue)) && (overrides[targetKey] = parsedValue);
}
}
offset = recordEnd;
}
return Object.keys(pax).length > 0 && (overrides.pax = pax), overrides;
}
function applyOverrides(header, overrides) {
overrides.name !== void 0 && (header.name = overrides.name), overrides.linkname !== void 0 && (header.linkname = overrides.linkname), overrides.size !== void 0 && (header.size = overrides.size), overrides.mtime !== void 0 && (header.mtime = new Date(overrides.mtime * 1e3)), overrides.uid !== void 0 && (header.uid = overrides.uid), overrides.gid !== void 0 && (header.gid = overrides.gid), overrides.uname !== void 0 && (header.uname = overrides.uname), overrides.gname !== void 0 && (header.gname = overrides.gname), overrides.pax && (header.pax = Object.assign({}, header.pax ?? {}, overrides.pax));
}
function getMetaParser(type) {
switch (type) {
case "pax-global-header":
case "pax-header":
return parsePax;
case "gnu-long-name":
return (data) => ({ name: readString(data, 0, data.length) });
case "gnu-long-link-name":
return (data) => ({ linkname: readString(data, 0, data.length) });
default:
return;
}
}
var EOF_BUFFER = new Uint8Array(512 * 2);
function transformHeader(header, options) {
let { strip, filter, map } = options;
if (!strip && !filter && !map) return header;
let h = { ...header };
if (strip && strip > 0) {
let components = h.name.split("/").filter(Boolean);
if (strip >= components.length) return null;
let newName = components.slice(strip).join("/");
if (h.name = h.type === "directory" && !newName.endsWith("/") ? `${newName}/` : newName, h.linkname?.startsWith("/")) {
let linkComponents = h.linkname.split("/").filter(Boolean);
h.linkname = strip >= linkComponents.length ? "/" : `/${linkComponents.slice(strip).join("/")}`;
}
}
if (filter?.(h) === !1) return null;
let result = map ? map(h) : h;
return result && (!result.name || !result.name.trim() || result.name === "." || result.name === "/") ? null : result;
}
var STATE_HEADER = 0, STATE_BODY = 1, STATE_PADDING = 2, STATE_AWAIT_EOF = 3;
function createTarUnpacker(handler, options = {}) {
let strict = options.strict ?? !1, chunkQueue = [], totalAvailable = 0, state = STATE_HEADER, waitingForData = !1, currentEntry = null, paxGlobals = {}, nextEntryOverrides = {};
function consume(size, callback) {
let remaining = Math.min(size, totalAvailable), initialRemaining = remaining;
for (; remaining > 0 && chunkQueue.length > 0; ) {
let chunkNode = chunkQueue[0], available = chunkNode.data.length - chunkNode.consumed, toProcess = Math.min(remaining, available);
callback && callback(chunkNode.data.subarray(chunkNode.consumed, chunkNode.consumed + toProcess)), chunkNode.consumed += toProcess, remaining -= toProcess, chunkNode.consumed >= chunkNode.data.length && chunkQueue.shift();
}
return totalAvailable -= initialRemaining - remaining, initialRemaining - remaining;
}
function read(size) {
let toRead = Math.min(size, totalAvailable);
if (toRead === 0) return null;
let chunk = chunkQueue[0];
if (chunk && chunk.data.length - chunk.consumed >= toRead) {
let result$1 = chunk.data.subarray(chunk.consumed, chunk.consumed + toRead);
return chunk.consumed += toRead, totalAvailable -= toRead, chunk.consumed >= chunk.data.length && chunkQueue.shift(), result$1;
}
let result = new Uint8Array(toRead), offset = 0;
return consume(toRead, (data) => {
result.set(data, offset), offset += data.length;
}), result;
}
function process2() {
for (; ; ) switch (state) {
case STATE_HEADER: {
if (totalAvailable < 512) {
waitingForData = !0;
return;
}
let headerBlock = read(512);
if (!headerBlock) {
waitingForData = !0;
return;
}
if (isZeroBlock(headerBlock)) {
state = STATE_AWAIT_EOF;
continue;
}
waitingForData = !1;
try {
let internalHeader = parseUstarHeader(headerBlock, strict), header = {
...internalHeader,
name: internalHeader.name
}, metaParser = getMetaParser(header.type);
if (metaParser) {
let paddedSize = header.size + 511 & -512;
if (totalAvailable < paddedSize) {
waitingForData = !0, chunkQueue.unshift({
data: headerBlock,
consumed: 0
}), totalAvailable += 512;
return;
}
let metaBlock = read(paddedSize);
if (!metaBlock) {
waitingForData = !0;
return;
}
let overrides = metaParser(metaBlock.subarray(0, header.size));
header.type === "pax-global-header" ? Object.assign(paxGlobals, overrides) : Object.assign(nextEntryOverrides, overrides);
continue;
}
internalHeader.prefix && (header.name = `${internalHeader.prefix}/${header.name}`), applyOverrides(header, paxGlobals), applyOverrides(header, nextEntryOverrides), nextEntryOverrides = {}, handler.onHeader(header), header.size > 0 ? (currentEntry = {
remaining: header.size,
padding: -header.size & 511
}, state = STATE_BODY) : handler.onEndEntry();
} catch (error) {
handler.onError(error);
return;
}
continue;
}
case STATE_BODY: {
if (!currentEntry) throw new Error("No current entry for body");
let toForward = Math.min(currentEntry.remaining, totalAvailable);
if (toForward > 0) {
let consumed = consume(toForward, handler.onData);
currentEntry.remaining -= consumed;
}
if (currentEntry.remaining === 0)
state = currentEntry.padding > 0 ? STATE_PADDING : STATE_HEADER, state === STATE_HEADER && (handler.onEndEntry(), currentEntry = null);
else if (totalAvailable === 0) {
waitingForData = !0;
return;
}
continue;
}
case STATE_PADDING:
if (!currentEntry) throw new Error("No current entry for padding");
if (totalAvailable < currentEntry.padding) {
waitingForData = !0;
return;
}
currentEntry.padding > 0 && consume(currentEntry.padding), handler.onEndEntry(), currentEntry = null, state = STATE_HEADER;
continue;
case STATE_AWAIT_EOF: {
if (totalAvailable < 512) {
waitingForData = !0;
return;
}
let secondBlock = read(512);
if (!secondBlock) {
waitingForData = !0;
return;
}
if (isZeroBlock(secondBlock)) return;
if (strict) {
handler.onError(new Error("Invalid EOF"));
return;
}
chunkQueue.unshift({
data: secondBlock,
consumed: 0
}), totalAvailable += 512, state = STATE_HEADER;
continue;
}
default:
throw new Error("Invalid state in tar unpacker.");
}
}
return {
write(chunk) {
if (chunk.length !== 0 && (chunkQueue.push({
data: chunk,
consumed: 0
}), totalAvailable += chunk.length, waitingForData)) {
waitingForData = !1;
try {
process2();
} catch (error) {
handler.onError(error);
}
}
},
end() {
try {
if (waitingForData || process2(), strict) {
if (currentEntry && currentEntry.remaining > 0) {
let error = new Error("Tar archive is truncated.");
throw handler.onError(error), error;
}
if (totalAvailable > 0 && read(totalAvailable)?.some((b) => b !== 0)) {
let error = new Error("Invalid EOF.");
throw handler.onError(error), error;
}
if (waitingForData) {
let error = new Error("Tar archive is truncated.");
throw handler.onError(error), error;
}
} else currentEntry && (handler.onEndEntry(), currentEntry = null);
} catch (error) {
handler.onError(error);
}
}
};
}
function isZeroBlock(block) {
if (block.byteOffset % 8 === 0) {
let view = new BigUint64Array(block.buffer, block.byteOffset, block.length / 8);
for (let i = 0; i < view.length; i++) if (view[i] !== 0n) return !1;
return !0;
}
for (let i = 0; i < block.length; i++) if (block[i] !== 0) return !1;
return !0;
}
// ../node_modules/modern-tar/dist/fs/index.js
import * as fs from "node:fs/promises";
import { cpus } from "node:os";
import * as path from "node:path";
import { PassThrough, Readable, Writable } from "node:stream";
import { createWriteStream } from "node:fs";
import { pipeline } from "node:stream/promises";
var unicodeCache = /* @__PURE__ */ new Map(), normalizeUnicode = (s) => {
let result = unicodeCache.get(s);
return result !== void 0 && unicodeCache.delete(s), result = result ?? s.normalize("NFD"), unicodeCache.set(s, result), unicodeCache.size > 1e4 && unicodeCache.delete(unicodeCache.keys().next().value), result;
};
function validateBounds(targetPath, destDir, errorMessage) {
let target = normalizeUnicode(path.resolve(targetPath)), dest = path.resolve(destDir);
if (target !== dest && !target.startsWith(dest + path.sep)) throw new Error(errorMessage);
}
var win32Reserved = {
":": "\uF03A",
"<": "\uF03C",
">": "\uF03E",
"|": "\uF07C",
"?": "\uF03F",
"*": "\uF02A",
'"': "\uF022"
};
function normalizeName(name) {
let path$1 = name.replace(/\\/g, "/");
if (path$1.split("/").includes("..") || /^[a-zA-Z]:\.\./.test(path$1)) throw new Error(`${name} points outside extraction directory`);
let relative = path$1;
return /^[a-zA-Z]:/.test(relative) ? relative = relative.replace(/^[a-zA-Z]:[/\\]?/, "") : relative.startsWith("/") && (relative = relative.replace(/^\/+/, "")), process.platform === "win32" ? relative.replace(/[<>:"|?*]/g, (char) => win32Reserved[char]) : relative;
}
var normalizeHeaderName = (s) => normalizeUnicode(normalizeName(s.replace(/\/+$/, "")));
function unpackTar(directoryPath, options = {}) {
let { streamTimeout = 5e3, ...fsOptions } = options, timeoutId = null, { handler, signal } = createFSHandler(directoryPath, fsOptions), unpacker = createTarUnpacker(handler, fsOptions), stream;
function resetTimeout() {
timeoutId && clearTimeout(timeoutId), streamTimeout !== 1 / 0 && streamTimeout > 0 && (timeoutId = setTimeout(() => {
let err = new Error(`Stream timed out after ${streamTimeout}ms of inactivity.`);
stream.destroy(err);
}, streamTimeout));
}
return stream = new Writable({
write(chunk, _, callback) {
if (resetTimeout(), signal.aborted) return callback(signal.reason);
try {
unpacker.write(chunk), callback();
} catch (writeErr) {
callback(writeErr);
}
},
async final(callback) {
timeoutId && clearTimeout(timeoutId);
try {
if (signal.aborted) return callback(signal.reason);
unpacker.end(), await handler.process(), callback();
} catch (finalErr) {
callback(finalErr);
}
}
}), stream.on("close", () => {
timeoutId && clearTimeout(timeoutId);
}), resetTimeout(), stream;
}
function createFSHandler(directoryPath, options) {
let { maxDepth = 1024, dmode, fmode, concurrency = cpus().length || 8 } = options, abortController = new AbortController(), { signal } = abortController, opQueue = [], activeOps = 0, pathPromises = /* @__PURE__ */ new Map(), activeEntryStream = null, processingEnded = !1, resolveDrain, drainPromise = new Promise((resolve3) => {
resolveDrain = resolve3;
}), processQueue = () => {
for (signal.aborted && (opQueue.length = 0); activeOps < concurrency && opQueue.length > 0; ) {
activeOps++;
let op = opQueue.shift();
if (!op) break;
op();
}
processingEnded && activeOps === 0 && opQueue.length === 0 && resolveDrain();
}, destDirPromise = (async () => {
let symbolic = normalizeUnicode(path.resolve(directoryPath));
await fs.mkdir(symbolic, { recursive: !0 });
try {
let real = await fs.realpath(symbolic);
return {
symbolic,
real
};
} catch (err) {
throw signal.aborted ? signal.reason : err;
}
})();
destDirPromise.catch((err) => {
signal.aborted || abortController.abort(err);
});
let ensureDirectoryExists = (dirPath) => {
let promise = pathPromises.get(dirPath);
return promise || (promise = (async () => {
if (signal.aborted) throw signal.reason;
let destDir = await destDirPromise;
if (dirPath === destDir.symbolic) return "directory";
if (await ensureDirectoryExists(path.dirname(dirPath)), signal.aborted) throw signal.reason;
try {
let stat2 = await fs.lstat(dirPath);
if (stat2.isDirectory()) return "directory";
if (stat2.isSymbolicLink()) {
let realPath = await fs.realpath(dirPath);
if (validateBounds(realPath, destDir.real, `Symlink "${dirPath}" points outside the extraction directory.`), (await fs.stat(realPath)).isDirectory()) return "directory";
}
throw new Error(`"${dirPath}" is not a valid directory component.`);
} catch (err) {
if (err.code === "ENOENT")
return await fs.mkdir(dirPath, { mode: dmode }), "directory";
throw err;
}
})(), pathPromises.set(dirPath, promise), promise);
};
return {
handler: {
onHeader(header) {
if (signal.aborted) return;
activeEntryStream = new PassThrough({ highWaterMark: header.size > 1048576 ? 524288 : void 0 });
let entryStream = activeEntryStream, startOperation = () => {
let opPromise;
try {
let transformed = transformHeader(header, options);
if (!transformed) {
entryStream.resume(), activeOps--, processQueue();
return;
}
let name = normalizeHeaderName(transformed.name), target = path.join(path.resolve(directoryPath), name);
opPromise = (pathPromises.get(target) || Promise.resolve(void 0)).then(async (priorOp) => {
if (signal.aborted) throw signal.reason;
if (priorOp && (priorOp === "directory" && transformed.type !== "directory" || priorOp !== "directory" && transformed.type === "directory"))
throw new Error(`Path conflict ${transformed.type} over existing ${priorOp} at "${transformed.name}"`);
try {
let destDir = await destDirPromise;
if (maxDepth !== 1 / 0 && name.split("/").length > maxDepth) throw new Error("Tar exceeds max specified depth.");
let outPath = path.join(destDir.symbolic, name);
validateBounds(outPath, destDir.symbolic, `Entry "${transformed.name}" points outside the extraction directory.`);
let parentDir = path.dirname(outPath);
switch (await ensureDirectoryExists(parentDir), transformed.type) {
case "directory":
await fs.mkdir(outPath, {
recursive: !0,
mode: dmode ?? transformed.mode
});
break;
case "file": {
let fileStream = createWriteStream(outPath, {
mode: fmode ?? transformed.mode,
highWaterMark: transformed.size > 1048576 ? 524288 : void 0
});
await pipeline(entryStream, fileStream);
break;
}
case "symlink": {
let { linkname } = transformed;
if (!linkname) return transformed.type;
let target$1 = path.resolve(parentDir, linkname);
validateBounds(target$1, destDir.symbolic, `Symlink "${linkname}" points outside the extraction directory.`), await fs.symlink(linkname, outPath);
break;
}
case "link": {
let { linkname } = transformed;
if (!linkname) return transformed.type;
let normalizedLink = normalizeUnicode(linkname);
if (path.isAbsolute(normalizedLink)) throw new Error(`Hardlink "${linkname}" points outside the extraction directory.`);
let linkTarget = path.join(destDir.symbolic, normalizedLink);
validateBounds(linkTarget, destDir.symbolic, `Hardlink "${linkname}" points outside the extraction directory.`), await ensureDirectoryExists(path.dirname(linkTarget));
let realTargetParent = await fs.realpath(path.dirname(linkTarget)), realLinkTarget = path.join(realTargetParent, path.basename(linkTarget));
if (validateBounds(realLinkTarget, destDir.real, `Hardlink "${linkname}" points outside the extraction directory.`), linkTarget === outPath) return transformed.type;
let targetPromise = pathPromises.get(linkTarget);
targetPromise && await targetPromise, await fs.link(linkTarget, outPath);
break;
}
default:
return transformed.type;
}
return transformed.mtime && await (transformed.type === "symlink" ? fs.lutimes : fs.utimes)(outPath, transformed.mtime, transformed.mtime).catch(() => {
}), transformed.type;
} finally {
entryStream.readableEnded || entryStream.resume();
}
}), pathPromises.set(target, opPromise);
} catch (err) {
opPromise = Promise.reject(err), abortController.abort(err);
}
opPromise.catch((err) => abortController.abort(err)).finally(() => {
activeOps--, processQueue();
});
};
opQueue.push(startOperation), processQueue();
},
onData(chunk) {
signal.aborted || activeEntryStream?.write(chunk);
},
onEndEntry() {
activeEntryStream?.end(), activeEntryStream = null;
},
onError(error) {
abortController.abort(error);
},
async process() {
if (processingEnded = !0, processQueue(), await drainPromise, signal.aborted) throw signal.reason;
}
},
signal
};
}
// src/cli/dirs.ts
var resolveUsingBranchInstall = async (packageManager, request) => {
let tempDirectory = await temporaryDirectory(), version = versions[request] || await packageManager.latestVersion(request), url = (src_default.default || src_default)(request, version, {
registry: await packageManager.getRegistryURL()
}), response = await fetch(url);
if (!response.ok || !response.body)
throw new Error(`Failed to download tarball from ${url}`);
return await pipeline2(
Readable2.fromWeb(response.body),
createGunzip(),
unpackTar(tempDirectory)
), join2(tempDirectory, "package");
};
async function getRendererDir(packageManager, renderer) {
let [externalFramework] = Object.entries({ ...frameworkPackages, ...rendererPackages }).find(
([key, value]) => value === renderer
) ?? [];
if (!externalFramework)
return null;
let packageJsonPath = join2(externalFramework, "package.json"), errors = [];
try {
return resolvePackageDir(externalFramework, process.cwd());
} catch (e) {
invariant(e instanceof Error), errors.push(e);
}
try {
return await resolveUsingBranchInstall(packageManager, externalFramework);
} catch (e) {
invariant(e instanceof Error), errors.push(e);
}
throw new Error(`Cannot find ${packageJsonPath}, ${errors.map((e) => e.stack).join(`
`)}`);
}
// src/cli/helpers.ts
function readFileAsJson(jsonPath, allowComments) {
let filePath = resolve2(jsonPath);
if (!existsSync(filePath))
return !1;
let fileContent = readFileSync(filePath, "utf8"), jsonContent = allowComments ? stripJsonComments(fileContent) : fileContent;
try {
return JSON.parse(jsonContent);
} catch (e) {
throw logger.error(import_picocolors.default.red(`Invalid json in file: ${filePath}`)), e;
}
}
var writeFileAsJson = (jsonPath, content) => {
let filePath = resolve2(jsonPath);
return existsSync(filePath) ? (writeFileSync(filePath, `${JSON.stringify(content, null, 2)}
`), !0) : !1;
};
async function getBabelDependencies(packageManager) {
let dependenciesToAdd = [], babelLoaderVersion = "^8.0.0-0", babelCoreVersion = packageManager.getDependencyVersion("babel-core");
if (babelCoreVersion) {
let latestCompatibleBabelVersion = await packageManager.latestVersion(
"babel-core",
babelCoreVersion
);
latestCompatibleBabelVersion && satisfies(latestCompatibleBabelVersion, "^6.0.0") && (babelLoaderVersion = "^7.0.0");
} else if (!packageManager.getDependencyVersion("@babel/core")) {
let babelCoreInstallVersion = await packageManager.getVersion("@babel/core");
dependenciesToAdd.push(`@babel/core@${babelCoreInstallVersion}`);
}
if (!packageManager.getDependencyVersion("babel-loader")) {
let babelLoaderInstallVersion = await packageManager.getVersion(
"babel-loader",
babelLoaderVersion
);
dependenciesToAdd.push(`babel-loader@${babelLoaderInstallVersion}`);
}
return dependenciesToAdd;
}
function addToDevDependenciesIfNotPresent(packageJson, name, packageVersion) {
!packageJson.dependencies?.[name] && !packageJson.devDependencies?.[name] && (packageJson.devDependencies ? packageJson.devDependencies[name] = packageVersion : packageJson.devDependencies = {
[name]: packageVersion
});
}
function copyTemplate(templateRoot, destination = ".") {
let templateDir = resolve2(templateRoot, "template-csf/");
if (!existsSync(templateDir))
throw new Error("Couldn't find template dir");
cpSync(templateDir, destination, { recursive: !0 });
}
async function getVersionSafe(packageManager, packageName) {
try {
let version = await packageManager.getInstalledVersion(packageName);
return version || (version = packageManager.getAllDependencies()[packageName] ?? ""), coerce(version, { includePrerelease: !0 })?.toString();
} catch {
}
}
var cliStoriesTargetPath = async () => existsSync("./src") ? "./src/stories" : "./stories";
async function copyTemplateFiles({
packageManager,
templateLocation,
language,
destination,
commonAssetsDir,
features
}) {
let languageFolderMapping = {
[SupportedLanguage.JAVASCRIPT]: "js",
[SupportedLanguage.TYPESCRIPT]: "ts"
}, templatePath = async () => {
let baseDir = await getRendererDir(packageManager, templateLocation);
if (!baseDir)
return null;
let assetsDir = join3(baseDir, "template", "cli"), assetsLanguage = join3(assetsDir, languageFolderMapping[language]), assetsJS = join3(assetsDir, languageFolderMapping[SupportedLanguage.JAVASCRIPT]), assetsTS = join3(assetsDir, languageFolderMapping.typescript);
if (existsSync(assetsLanguage))
return assetsLanguage;
if (existsSync(assetsTS))
return assetsTS;
if (existsSync(assetsJS))
return assetsJS;
if (existsSync(assetsDir))
return assetsDir;
throw new Error(`Unsupported renderer: ${templateLocation} (${baseDir})`);
}, destinationPath = destination ?? await cliStoriesTargetPath(), filter = (file) => features.has(Feature.DOCS) || !file.endsWith(".mdx");
commonAssetsDir && await cp(commonAssetsDir, destinationPath, { recursive: !0, filter });
let tmpPath = await templatePath();
if (tmpPath && await cp(tmpPath, destinationPath, { recursive: !0, filter }), commonAssetsDir && features.has(Feature.DOCS)) {
let rendererType = frameworkToRenderer[templateLocation] || "react";
await adjustTemplate(join3(destinationPath, "Configure.mdx"), { renderer: rendererType });
}
}
async function adjustTemplate(templatePath, templateData) {
let template = await readFile2(templatePath, { encoding: "utf8" });
Object.keys(templateData).forEach((key) => {
template = template.replaceAll(`{{${key}}}`, `${templateData[key]}`);
}), await writeFile(templatePath, template);
}
function coerceSemver(version) {
let coercedSemver = coerce(version);
return invariant(coercedSemver != null, `Could not coerce ${version} into a semver.`), coercedSemver;
}
function hasStorybookDependencies(packageManager) {
let currentPackageDeps = packageManager.getAllDependencies();
return Object.keys(currentPackageDeps).some((dep) => dep.includes("storybook"));
}
// src/cli/angular/helpers.ts
import { existsSync as existsSync2, readFileSync as readFileSync2, writeFileSync as writeFileSync2 } from "node:fs";
import { join as join4 } from "node:path";
import { prompt } from "storybook/internal/node-logger";
import { MissingAngularJsonError } from "storybook/internal/server-errors";
var ANGULAR_JSON_PATH = "angular.json", AngularJSON = class {
constructor() {
if (!existsSync2(ANGULAR_JSON_PATH))
throw new MissingAngularJsonError({ path: join4(process.cwd(), ANGULAR_JSON_PATH) });
let jsonContent = readFileSync2(ANGULAR_JSON_PATH, "utf8");
this.json = JSON.parse(jsonContent);
}
get projects() {
return this.json.projects;
}
get projectsWithoutStorybook() {
return Object.keys(this.projects).filter((projectName) => {
let { architect } = this.projects[projectName];
return !architect.storybook;
});
}
get hasStorybookBuilder() {
return Object.keys(this.projects).some((projectName) => {
let { architect } = this.projects[projectName];
return Object.keys(architect).some((key) => architect[key].builder === "@storybook/angular:start-storybook");
});
}
get rootProject() {
let rootProjectName = Object.keys(this.projects).find((projectName) => {
let { root } = this.projects[projectName];
return root === "" || root === ".";
});
return rootProjectName ? this.projects[rootProjectName] : null;
}
getProjectSettingsByName(projectName) {
return this.projects[projectName];
}
async getProjectName() {
return this.projectsWithoutStorybook.length > 1 ? prompt.select({
message: "For which project do you want to generate Storybook configuration?",
options: this.projectsWithoutStorybook.map((name) => ({
label: name,
value: name
}))
}) : this.projectsWithoutStorybook[0];
}
addStorybookEntries({
angularProjectName,
storybookFolder,
useCompodoc,
root
}) {
let { architect } = this.projects[angularProjectName], baseOptions = {
configDir: storybookFolder,
browserTarget: `${angularProjectName}:build`,
compodoc: useCompodoc,
...useCompodoc && { compodocArgs: ["-e", "json", "-d", root || "."] }
};
architect.storybook || (architect.storybook = {
builder: "@storybook/angular:start-storybook",
options: {
...baseOptions,
port: 6006
}
}), architect["build-storybook"] || (architect["build-storybook"] = {
builder: "@storybook/angular:build-storybook",
options: {
...baseOptions,
outputDir: Object.keys(this.projects).length === 1 ? "storybook-static" : `dist/storybook/${angularProjectName}`
}
});
}
write() {
writeFileSync2(ANGULAR_JSON_PATH, JSON.stringify(this.json, null, 2));
}
};
// src/cli/projectTypes.ts
var ProjectType = /* @__PURE__ */ ((ProjectType2) => (ProjectType2.ANGULAR = "angular", ProjectType2.EMBER = "ember", ProjectType2.HTML = "html", ProjectType2.NEXTJS = "nextjs", ProjectType2.NUXT = "nuxt", ProjectType2.NX = "nx", ProjectType2.PREACT = "preact", ProjectType2.QWIK = "qwik", ProjectType2.REACT = "react", ProjectType2.REACT_NATIVE = "react_native", ProjectType2.REACT_NATIVE_AND_RNW = "react_native_and_rnw", ProjectType2.REACT_NATIVE_WEB = "react_native_web", ProjectType2.REACT_SCRIPTS = "react_scripts", ProjectType2.SERVER = "server", ProjectType2.SOLID = "solid", ProjectType2.SVELTE = "svelte", ProjectType2.SVELTEKIT = "sveltekit", ProjectType2.UNDETECTED = "undetected", ProjectType2.UNSUPPORTED = "unsupported", ProjectType2.VUE3 = "vue3", ProjectType2.WEB_COMPONENTS = "web_components", ProjectType2))(ProjectType || {});
// src/cli/eslintPlugin.ts
var import_comment_json = __toESM(require_src2(), 1);
import { readFile as readFile3, writeFile as writeFile2 } from "node:fs/promises";
import { getProjectRoot } from "storybook/internal/common";
import { readConfig, writeConfig } from "storybook/internal/csf-tools";
import { logger as logger2, prompt as prompt2 } from "storybook/internal/node-logger";
// ../node_modules/detect-indent/index.js
var INDENT_REGEX = /^(?:( )+|\t+)/, INDENT_TYPE_SPACE = "space";
function shouldIgnoreSingleSpace(ignoreSingleSpaces, indentType, value) {
return ignoreSingleSpaces && indentType === INDENT_TYPE_SPACE && value === 1;
}
function makeIndentsMap(string, ignoreSingleSpaces) {
let indents = /* @__PURE__ */ new Map(), previousSize = 0, previousIndentType, key;
for (let line of string.split(/\n/g)) {
if (!line)
continue;
let matches = line.match(INDENT_REGEX);
if (matches === null)
previousSize = 0, previousIndentType = "";
else {
let indent = matches[0].length, indentType = matches[1] ? INDENT_TYPE_SPACE : "tab";
if (shouldIgnoreSingleSpace(ignoreSingleSpaces, indentType, indent))
continue;
indentType !== previousIndentType && (previousSize = 0), previousIndentType = indentType;
let use = 1, weight = 0, indentDifference = indent - previousSize;
if (previousSize = indent, indentDifference === 0)
use = 0, weight = 1;
else {
let absoluteIndentDifference = Math.abs(indentDifference);
if (shouldIgnoreSingleSpace(ignoreSingleSpaces, indentType, absoluteIndentDifference))
continue;
key = encodeIndentsKey(indentType, absoluteIndentDifference);
}
let entry = indents.get(key);
indents.set(key, entry === void 0 ? [1, 0] : [entry[0] + use, entry[1] + weight]);
}
}
return indents;
}
function encodeIndentsKey(indentType, indentAmount) {
return (indentType === INDENT_TYPE_SPACE ? "s" : "t") + String(indentAmount);
}
function decodeIndentsKey(indentsKey) {
let type = indentsKey[0] === "s" ? INDENT_TYPE_SPACE : "tab", amount = Number(indentsKey.slice(1));
return { type, amount };
}
function getMostUsedKey(indents) {
let result, maxUsed = 0, maxWeight = 0;
for (let [key, [usedCount, weight]] of indents)
(usedCount > maxUsed || usedCount === maxUsed && weight > maxWeight) && (maxUsed = usedCount, maxWeight = weight, result = key);
return result;
}
function makeIndentString(type, amount) {
return (type === INDENT_TYPE_SPACE ? " " : " ").repeat(amount);
}
function detectIndent(string) {
if (typeof string != "string")
throw new TypeError("Expected a string");
let indents = makeIndentsMap(string, !0);
indents.size === 0 && (indents = makeIndentsMap(string, !1));
let keyOfMostUsedIndent = getMostUsedKey(indents), type, amount = 0, indent = "";
return keyOfMostUsedIndent !== void 0 && ({ type, amount } = decodeIndentsKey(keyOfMostUsedIndent), indent = makeIndentString(type, amount)), {
amount,
type,
indent
};
}
// src/cli/eslintPlugin.ts
var import_picocolors2 = __toESM(require_picocolors(), 1), import_ts_dedent = __toESM(require_dist(), 1);
var SUPPORTED_ESLINT_EXTENSIONS = ["ts", "mts", "cts", "mjs", "js", "cjs", "json"], UNSUPPORTED_ESLINT_EXTENSIONS = ["yaml", "yml"], findEslintFile = (instanceDir) => {
let filePrefixes = ["eslint.config", ".eslintrc"];
for (let prefix of filePrefixes)
for (let ext of UNSUPPORTED_ESLINT_EXTENSIONS)
if (up(`${prefix}.${ext}`, { cwd: instanceDir, last: getProjectRoot() }))
throw new Error(`Unsupported ESLint config extension: .${ext}`);
for (let prefix of filePrefixes)
for (let ext of SUPPORTED_ESLINT_EXTENSIONS) {
let file = up(`${prefix}.${ext}`, { cwd: instanceDir, last: getProjectRoot() });
if (file)
return file;
}
};
function unwrapTSExpression(expr) {
return expr && (types.isTSAsExpression(expr) || types.isTSSatisfiesExpression(expr) ? unwrapTSExpression(expr.expression) : expr);
}
var configureFlatConfig = async (code) => {
let ast = babelParse(code), tsEslintLocalName = "", eslintConfigExpression = null;
return traverse(ast, {
ImportDeclaration(path2) {
if (path2.node.source.value === "typescript-eslint") {
let defaultSpecifier = path2.node.specifiers.find((s) => types.isImportDefaultSpecifier(s));
defaultSpecifier && (tsEslintLocalName = defaultSpecifier.local.name);
}
},
ExportDefaultDeclaration(path2) {
let node = path2.node;
eslintConfigExpression = unwrapTSExpression(node.declaration);
let storybookConfig = types.memberExpression(
types.memberExpression(types.identifier("storybook"), types.identifier("configs")),
types.stringLiteral("flat/recommended"),
!0
);
if (types.isArrayExpression(eslintConfigExpression) && eslintConfigExpression.elements.push(types.spreadElement(storybookConfig)), types.isCallExpression(eslintConfigExpression) && types.isMemberExpression(eslintConfigExpression.callee) && tsEslintLocalName && types.isIdentifier(eslintConfigExpression.callee.object, { name: tsEslintLocalName }) && types.isIdentifier(eslintConfigExpression.callee.property, { name: "config" }) && eslintConfigExpression.arguments.push(storybookConfig), types.isIdentifier(eslintConfigExpression)) {
let binding = path2.scope.getBinding(eslintConfigExpression.name);
if (binding && types.isVariableDeclarator(binding.path.node)) {
let init = unwrapTSExpression(binding.path.node.init);
types.isArrayExpression(init) && init.elements.push(types.spreadElement(storybookConfig));
}
}
},
Program(path2) {
if (!path2.node.body.some(
(node) => types.isImportDeclaration(node) && node.source.value === "eslint-plugin-storybook"
)) {
let importDecl = types.importDeclaration(
[types.importDefaultSpecifier(types.identifier("storybook"))],
types.stringLiteral("eslint-plugin-storybook")
);
importDecl.comments = [
{
type: "CommentLine",
value: " For more info, see https://github.com/storybookjs/eslint-plugin-storybook#configuration-flat-config-format"
}
], path2.node.body.unshift(importDecl);
}
}
}), recast.print(ast).code;
};
async function extractEslintInfo(packageManager) {
let unsupportedExtension, allDependencies = packageManager.getAllDependencies(), { packageJson } = packageManager.primaryPackageJson, eslintConfigFile;
try {
eslintConfigFile = findEslintFile(packageManager.instanceDir);
} catch (err) {
if (err instanceof Error && err.message.includes("Unsupported ESLint"))
unsupportedExtension = String(err);
else
throw err;
}
let isStorybookPluginInstalled = !!allDependencies["eslint-plugin-storybook"];
return {
hasEslint: !!(allDependencies.eslint || eslintConfigFile || packageJson.eslintConfig),
isStorybookPluginInstalled,
eslintConfigFile,
unsupportedExtension,
isFlatConfig: !!(eslintConfigFile && eslintConfigFile.match(/eslint\.config\.[^/]+/))
};
}
var normalizeExtends = (existingExtends) => {
if (!existingExtends)
return [];
if (typeof existingExtends == "string")
return [existingExtends];
if (Array.isArray(existingExtends))
return existingExtends;
throw new Error(`Invalid eslint extends ${existingExtends}`);
};
async function configureEslintPlugin({
eslintConfigFile,
packageManager,
isFlatConfig
}) {
if (eslintConfigFile)
if (eslintConfigFile.endsWith("json")) {
logger2.debug(`Detected JSON config at ${eslintConfigFile}`);
let eslintFileContents = await readFile3(eslintConfigFile, { encoding: "utf8" }), eslintConfig = import_comment_json.default.parse(eslintFileContents);
if (normalizeExtends(eslintConfig.extends).filter(Boolean).includes("plugin:storybook/recommended"))
return;
Array.isArray(eslintConfig.extends) || (eslintConfig.extends = eslintConfig.extends ? [eslintConfig.extends] : []), eslintConfig.extends.push("plugin:storybook/recommended");
let spaces = detectIndent(eslintFileContents).amount || 2;
await writeFile2(eslintConfigFile, import_comment_json.default.stringify(eslintConfig, null, spaces));
} else if (isFlatConfig) {
logger2.debug(`Detected flat config at ${eslintConfigFile}`);
let code = await readFile3(eslintConfigFile, { encoding: "utf8" }), output = await configureFlatConfig(code);
await writeFile2(eslintConfigFile, output);
} else {
let eslint = await readConfig(eslintConfigFile), existingExtends = normalizeExtends(eslint.getFieldValue(["extends"])).filter(Boolean);
if (existingExtends.includes("plugin:storybook/recommended"))
return;
eslint.setFieldValue(["extends"], [...existingExtends, "plugin:storybook/recommended"]), await writeConfig(eslint);
}
else {
logger2.debug("No ESLint config file found, configuring in package.json instead");
let { packageJson } = packageManager.primaryPackageJson, existingExtends = normalizeExtends(packageJson.eslintConfig?.extends).filter(Boolean);
packageManager.writePackageJson({
...packageJson,
eslintConfig: {
...packageJson.eslintConfig,
extends: [...existingExtends, "plugin:storybook/recommended"]
}
});
}
}
var suggestESLintPlugin = async () => await prompt2.confirm({
message: import_ts_dedent.dedent`
We have detected that you're using ESLint. Storybook provides a plugin that gives the best experience with Storybook and helps follow best practices: ${import_picocolors2.default.yellow(
"https://storybook.js.org/docs/9/configure/integration/eslint-plugin"
)}
Would you like to install it?
`,
initialValue: !0
});
// src/cli/AddonVitestService.ts
import fs2 from "node:fs/promises";
import * as babel from "storybook/internal/babel";
import { getProjectRoot as getProjectRoot2 } from "storybook/internal/common";
import { CLI_COLORS } from "storybook/internal/node-logger";
import { logger as logger3, prompt as prompt3 } from "storybook/internal/node-logger";
import { ErrorCollector } from "storybook/internal/telemetry";
var import_ts_dedent2 = __toESM(require_dist(), 1);
import { coerce as coerce2, minVersion, satisfies as satisfies2, validRange } from "semver";
// src/cli/AddonVitestService.constants.ts
var SUPPORTED_FRAMEWORKS = [
"html-vite" /* HTML_VITE */,
"nextjs-vite" /* NEXTJS_VITE */,
"preact-vite" /* PREACT_VITE */,
"react-native-web-vite" /* REACT_NATIVE_WEB_VITE */,
"react-vite" /* REACT_VITE */,
"solid" /* SOLID */,
"svelte-vite" /* SVELTE_VITE */,
"sveltekit" /* SVELTEKIT */,
"vue3-vite" /* VUE3_VITE */,
"web-components-vite" /* WEB_COMPONENTS_VITE */
];
// src/cli/AddonVitestService.ts
var AddonVitestService = class {
constructor(packageManager) {
this.packageManager = packageManager;
}
/**
* Collect all dependencies needed for @storybook/addon-vitest
*
* Returns versioned package strings ready for installation:
*
* - Base packages: vitest, @vitest/browser, playwright
* - Next.js specific: @storybook/nextjs-vite
* - Coverage reporter: @vitest/coverage-v8
*/
async collectDependencies() {
let allDeps = this.packageManager.getAllDependencies(), dependencies = [], vitestVersionSpecifier = await this.packageManager.getInstalledVersion("vitest");
!vitestVersionSpecifier && allDeps.vitest && (vitestVersionSpecifier = allDeps.vitest);
let isVitest4OrNewer = !0;
if (vitestVersionSpecifier) {
let range = validRange(vitestVersionSpecifier), versionToCheck = range ? minVersion(range)?.version : coerce2(vitestVersionSpecifier)?.version;
isVitest4OrNewer = versionToCheck ? satisfies2(versionToCheck, ">=4.0.0") : !0;
}
let basePackages = [
"vitest",
"playwright",
isVitest4OrNewer ? "@vitest/browser-playwright" : "@vitest/browser"
];
for (let pkg of basePackages)
allDeps[pkg] || dependencies.push(pkg);
let v8Version = await this.packageManager.getInstalledVersion("@vitest/coverage-v8"), istanbulVersion = await this.packageManager.getInstalledVersion(
"@vitest/coverage-istanbul"
);
return !v8Version && !istanbulVersion && dependencies.push("@vitest/coverage-v8"), dependencies.map((pkg) => pkg.includes("vitest") && vitestVersionSpecifier ? `${pkg}@${vitestVersionSpecifier}` : pkg);
}
/**
* Install Playwright browser binaries for @storybook/addon-vitest
*
* Installs Chromium with dependencies via `npx playwright install chromium --with-deps`
*
* @param packageManager - The package manager to use for installation
* @param prompt - The prompt instance for displaying progress
* @param logger - The logger instance for displaying messages
* @param options - Installation options
* @returns Array of error messages if installation fails
*/
async installPlaywright(options = {}) {
let errors = [], playwrightCommand = ["playwright", "install", "chromium", "--with-deps"], playwrightCommandString = this.packageManager.getPackageCommand(playwrightCommand), result;
try {
(options.yes ? !0 : await (async () => (logger3.log(import_ts_dedent2.dedent`
Playwright browser binaries are necessary for @storybook/addon-vitest. The download can take some time. If you don't want to wait, you can skip the installation and run the following command manually later:
${CLI_COLORS.cta(playwrightCommandString)}
`), prompt3.confirm({
message: "Do you want to install Playwright with Chromium now?",
initialValue: !0
})))()) ? await prompt3.executeTaskWithSpinner(
(signal) => this.packageManager.runPackageCommand({
args: playwrightCommand,
stdio: ["inherit", "pipe", "pipe"],
signal
}),
{
id: "playwright-installation",
intro: 'Installing Playwright browser binaries (press "c" to abort)',
error: `An error occurred while installing Playwright browser binaries. Please run the following command later: ${playwrightCommandString}`,
success: "Playwright browser binaries installed successfully",
abortable: !0
}
) ? result = "aborted" : result = "installed" : (logger3.warn("Playwright installation skipped"), result = "skipped");
} catch (e) {
result = "failed", ErrorCollector.addError(e), e instanceof Error ? errors.push(e.stack ?? e.message) : errors.push(String(e));
}
return { errors, result };
}
/**
* Validate full compatibility for @storybook/addon-vitest
*
* Checks:
*
* - Webpack configuration compatibility
* - Builder compatibility (Vite or Next.js)
* - Renderer/framework support
* - Vitest version (>=3.0.0)
* - MSW version (>=2.0.0 if installed)
* - Next.js installation (if using @storybook/nextjs)
* - Vitest config files (if configDir provided)
*/
async validateCompatibility(options) {
let reasons = [];
options.builder !== "vite" /* VITE */ && reasons.push("Non-Vite builder is not supported"), SUPPORTED_FRAMEWORKS.some(
(framework) => options.framework === framework
) || reasons.push(`Test feature cannot yet be used with ${options.framework}`);
let packageVersionResult = await this.validatePackageVersions();
if (!packageVersionResult.compatible && packageVersionResult.reasons && reasons.push(...packageVersionResult.reasons), options.projectRoot) {
let configResult = await this.validateConfigFiles(options.projectRoot);
!configResult.compatible && configResult.reasons && reasons.push(...configResult.reasons);
}
return reasons.length > 0 ? { compatible: !1, reasons } : { compatible: !0 };
}
/**
* Validate package versions for addon-vitest compatibility Public method to allow early
* validation before framework detection
*/
async validatePackageVersions() {
let reasons = [], vitestVersionSpecifier = await this.packageManager.getInstalledVersion("vitest"), coercedVitestVersion = vitestVersionSpecifier ? coerce2(vitestVersionSpecifier) : null;
coercedVitestVersion && !satisfies2(coercedVitestVersion, ">=3.0.0") && reasons.push(
`The addon requires Vitest 3.0.0 or higher. You are currently using ${vitestVersionSpecifier}.`
);
let mswVersionSpecifier = await this.packageManager.getInstalledVersion("msw"), coercedMswVersion = mswVersionSpecifier ? coerce2(mswVersionSpecifier) : null;
return coercedMswVersion && !satisfies2(coercedMswVersion, ">=2.0.0") && reasons.push(
`The addon uses Vitest behind the scenes, which supports only version 2 and above of MSW. However, we have detected version ${coercedMswVersion.version} in this project.`
), reasons.length > 0 ? { compatible: !1, reasons } : { compatible: !0 };
}
/**
* Validate vitest config files for addon compatibility
*
* Public method that can be used by both postinstall and create-storybook flows
*/
async validateConfigFiles(directory) {
let reasons = [], projectRoot = getProjectRoot2(), vitestWorkspaceFile = any(
["ts", "js", "json"].flatMap((ex) => [`vitest.workspace.${ex}`, `vitest.projects.${ex}`]),
{ cwd: directory, last: projectRoot }
);
if (vitestWorkspaceFile?.endsWith(".json"))
reasons.push(`Cannot auto-update JSON workspace file: ${vitestWorkspaceFile}`);
else if (vitestWorkspaceFile) {
let fileContents = await fs2.readFile(vitestWorkspaceFile, "utf8");
this.isValidWorkspaceConfigFile(fileContents) || reasons.push(`Found an invalid workspace config file: ${vitestWorkspaceFile}`);
}
let vitestConfigFile = any(
["ts", "js", "tsx", "jsx", "cts", "cjs", "mts", "mjs"].map((ex) => `vitest.config.${ex}`),
{ cwd: directory, last: projectRoot }
);
if (vitestConfigFile?.endsWith(".cts") || vitestConfigFile?.endsWith(".cjs"))
reasons.push(`Cannot auto-update CommonJS config file: ${vitestConfigFile}`);
else if (vitestConfigFile) {
let configContent = await fs2.readFile(vitestConfigFile, "utf8");
this.isValidVitestConfig(configContent) || reasons.push(`Found an invalid Vitest config file: ${vitestConfigFile}`);
}
return reasons.length > 0 ? { compatible: !1, reasons } : { compatible: !0 };
}
// Private helper methods for Vitest config validation
/** Validate workspace config file structure */
isValidWorkspaceConfigFile(fileContents) {
let isValid = !1, parsedFile = babel.babelParse(fileContents);
return babel.traverse(parsedFile, {
ExportDefaultDeclaration: (path2) => {
let declaration = path2.node.declaration;
isValid = this.isWorkspaceConfigArray(declaration) || this.isDefineWorkspaceExpression(declaration);
}
}), isValid;
}
/** Validate Vitest config file structure */
isValidVitestConfig(configContent) {
let parsedConfig = babel.babelParse(configContent), isValidVitestConfig = !1;
return babel.traverse(parsedConfig, {
ExportDefaultDeclaration: (path2) => {
this.isDefineConfigExpression(path2.node.declaration) ? isValidVitestConfig = this.isSafeToExtendWorkspace(
path2.node.declaration
) : this.isMergeConfigExpression(path2.node.declaration) && (isValidVitestConfig = path2.node.declaration.arguments.some(
(arg) => this.isSafeToExtendWorkspace(arg)
));
}
}), isValidVitestConfig;
}
isWorkspaceConfigArray(node) {
return babel.types.isArrayExpression(node) && node?.elements.every(
(el) => babel.types.isStringLiteral(el) || babel.types.isObjectExpression(el)
);
}
isDefineWorkspaceExpression(node) {
return babel.types.isCallExpression(node) && node.callee && node.callee?.name === "defineWorkspace" && this.isWorkspaceConfigArray(node.arguments?.[0]);
}
isDefineConfigExpression(node) {
return babel.types.isCallExpression(node) && node.callee?.name === "defineConfig" && babel.types.isObjectExpression(node.arguments?.[0]);
}
isMergeConfigExpression(path2) {
return babel.types.isCallExpression(path2) && path2.callee?.name === "mergeConfig";
}
isSafeToExtendWorkspace(node) {
return babel.types.isCallExpression(node) && node.arguments.length > 0 && babel.types.isObjectExpression(node.arguments?.[0]) && node.arguments[0]?.properties.every(
(p) => p.key?.name !== "test" || babel.types.isObjectExpression(p.value) && p.value.properties.every(
({ key, value }) => key?.name !== "workspace" || babel.types.isArrayExpression(value)
)
);
}
};
export {
getRendererDir,
readFileAsJson,
writeFileAsJson,
getBabelDependencies,
addToDevDependenciesIfNotPresent,
copyTemplate,
getVersionSafe,
cliStoriesTargetPath,
copyTemplateFiles,
adjustTemplate,
coerceSemver,
hasStorybookDependencies,
ANGULAR_JSON_PATH,
AngularJSON,
ProjectType,
SUPPORTED_ESLINT_EXTENSIONS,
findEslintFile,
configureFlatConfig,
extractEslintInfo,
normalizeExtends,
configureEslintPlugin,
suggestESLintPlugin,
AddonVitestService
};