diff --git a/.gitignore b/.gitignore
index 8395782..307bb5e 100644
--- a/.gitignore
+++ b/.gitignore
@@ -7,8 +7,7 @@
dist
# Node dependencies
-node_modules
-/output/*
+/node_modules
# Logs
logs
diff --git a/.output/server/node_modules/@babel/parser/lib/index.js b/.output/server/node_modules/@babel/parser/lib/index.js
new file mode 100644
index 0000000..68ee00c
--- /dev/null
+++ b/.output/server/node_modules/@babel/parser/lib/index.js
@@ -0,0 +1,14460 @@
+'use strict';
+
+Object.defineProperty(exports, '__esModule', {
+ value: true
+});
+function _objectWithoutPropertiesLoose(source, excluded) {
+ if (source == null) return {};
+ var target = {};
+ var sourceKeys = Object.keys(source);
+ var key, i;
+ for (i = 0; i < sourceKeys.length; i++) {
+ key = sourceKeys[i];
+ if (excluded.indexOf(key) >= 0) continue;
+ target[key] = source[key];
+ }
+ return target;
+}
+class Position {
+ constructor(line, col, index) {
+ this.line = void 0;
+ this.column = void 0;
+ this.index = void 0;
+ this.line = line;
+ this.column = col;
+ this.index = index;
+ }
+}
+class SourceLocation {
+ constructor(start, end) {
+ this.start = void 0;
+ this.end = void 0;
+ this.filename = void 0;
+ this.identifierName = void 0;
+ this.start = start;
+ this.end = end;
+ }
+}
+function createPositionWithColumnOffset(position, columnOffset) {
+ const {
+ line,
+ column,
+ index
+ } = position;
+ return new Position(line, column + columnOffset, index + columnOffset);
+}
+const code = "BABEL_PARSER_SOURCETYPE_MODULE_REQUIRED";
+var ModuleErrors = {
+ ImportMetaOutsideModule: {
+ message: `import.meta may appear only with 'sourceType: "module"'`,
+ code
+ },
+ ImportOutsideModule: {
+ message: `'import' and 'export' may appear only with 'sourceType: "module"'`,
+ code
+ }
+};
+const NodeDescriptions = {
+ ArrayPattern: "array destructuring pattern",
+ AssignmentExpression: "assignment expression",
+ AssignmentPattern: "assignment expression",
+ ArrowFunctionExpression: "arrow function expression",
+ ConditionalExpression: "conditional expression",
+ CatchClause: "catch clause",
+ ForOfStatement: "for-of statement",
+ ForInStatement: "for-in statement",
+ ForStatement: "for-loop",
+ FormalParameters: "function parameter list",
+ Identifier: "identifier",
+ ImportSpecifier: "import specifier",
+ ImportDefaultSpecifier: "import default specifier",
+ ImportNamespaceSpecifier: "import namespace specifier",
+ ObjectPattern: "object destructuring pattern",
+ ParenthesizedExpression: "parenthesized expression",
+ RestElement: "rest element",
+ UpdateExpression: {
+ true: "prefix operation",
+ false: "postfix operation"
+ },
+ VariableDeclarator: "variable declaration",
+ YieldExpression: "yield expression"
+};
+const toNodeDescription = ({
+ type,
+ prefix
+}) => type === "UpdateExpression" ? NodeDescriptions.UpdateExpression[String(prefix)] : NodeDescriptions[type];
+var StandardErrors = {
+ AccessorIsGenerator: ({
+ kind
+ }) => `A ${kind}ter cannot be a generator.`,
+ ArgumentsInClass: "'arguments' is only allowed in functions and class methods.",
+ AsyncFunctionInSingleStatementContext: "Async functions can only be declared at the top level or inside a block.",
+ AwaitBindingIdentifier: "Can not use 'await' as identifier inside an async function.",
+ AwaitBindingIdentifierInStaticBlock: "Can not use 'await' as identifier inside a static block.",
+ AwaitExpressionFormalParameter: "'await' is not allowed in async function parameters.",
+ AwaitUsingNotInAsyncContext: "'await using' is only allowed within async functions and at the top levels of modules.",
+ AwaitNotInAsyncContext: "'await' is only allowed within async functions and at the top levels of modules.",
+ AwaitNotInAsyncFunction: "'await' is only allowed within async functions.",
+ BadGetterArity: "A 'get' accessor must not have any formal parameters.",
+ BadSetterArity: "A 'set' accessor must have exactly one formal parameter.",
+ BadSetterRestParameter: "A 'set' accessor function argument must not be a rest parameter.",
+ ConstructorClassField: "Classes may not have a field named 'constructor'.",
+ ConstructorClassPrivateField: "Classes may not have a private field named '#constructor'.",
+ ConstructorIsAccessor: "Class constructor may not be an accessor.",
+ ConstructorIsAsync: "Constructor can't be an async function.",
+ ConstructorIsGenerator: "Constructor can't be a generator.",
+ DeclarationMissingInitializer: ({
+ kind
+ }) => `Missing initializer in ${kind} declaration.`,
+ DecoratorArgumentsOutsideParentheses: "Decorator arguments must be moved inside parentheses: use '@(decorator(args))' instead of '@(decorator)(args)'.",
+ DecoratorBeforeExport: "Decorators must be placed *before* the 'export' keyword. Remove the 'decoratorsBeforeExport: true' option to use the 'export @decorator class {}' syntax.",
+ DecoratorsBeforeAfterExport: "Decorators can be placed *either* before or after the 'export' keyword, but not in both locations at the same time.",
+ DecoratorConstructor: "Decorators can't be used with a constructor. Did you mean '@dec class { ... }'?",
+ DecoratorExportClass: "Decorators must be placed *after* the 'export' keyword. Remove the 'decoratorsBeforeExport: false' option to use the '@decorator export class {}' syntax.",
+ DecoratorSemicolon: "Decorators must not be followed by a semicolon.",
+ DecoratorStaticBlock: "Decorators can't be used with a static block.",
+ DeferImportRequiresNamespace: 'Only `import defer * as x from "./module"` is valid.',
+ DeletePrivateField: "Deleting a private field is not allowed.",
+ DestructureNamedImport: "ES2015 named imports do not destructure. Use another statement for destructuring after the import.",
+ DuplicateConstructor: "Duplicate constructor in the same class.",
+ DuplicateDefaultExport: "Only one default export allowed per module.",
+ DuplicateExport: ({
+ exportName
+ }) => `\`${exportName}\` has already been exported. Exported identifiers must be unique.`,
+ DuplicateProto: "Redefinition of __proto__ property.",
+ DuplicateRegExpFlags: "Duplicate regular expression flag.",
+ DynamicImportPhaseRequiresImportExpressions: ({
+ phase
+ }) => `'import.${phase}(...)' can only be parsed when using the 'createImportExpressions' option.`,
+ ElementAfterRest: "Rest element must be last element.",
+ EscapedCharNotAnIdentifier: "Invalid Unicode escape.",
+ ExportBindingIsString: ({
+ localName,
+ exportName
+ }) => `A string literal cannot be used as an exported binding without \`from\`.\n- Did you mean \`export { '${localName}' as '${exportName}' } from 'some-module'\`?`,
+ ExportDefaultFromAsIdentifier: "'from' is not allowed as an identifier after 'export default'.",
+ ForInOfLoopInitializer: ({
+ type
+ }) => `'${type === "ForInStatement" ? "for-in" : "for-of"}' loop variable declaration may not have an initializer.`,
+ ForInUsing: "For-in loop may not start with 'using' declaration.",
+ ForOfAsync: "The left-hand side of a for-of loop may not be 'async'.",
+ ForOfLet: "The left-hand side of a for-of loop may not start with 'let'.",
+ GeneratorInSingleStatementContext: "Generators can only be declared at the top level or inside a block.",
+ IllegalBreakContinue: ({
+ type
+ }) => `Unsyntactic ${type === "BreakStatement" ? "break" : "continue"}.`,
+ IllegalLanguageModeDirective: "Illegal 'use strict' directive in function with non-simple parameter list.",
+ IllegalReturn: "'return' outside of function.",
+ ImportAttributesUseAssert: "The `assert` keyword in import attributes is deprecated and it has been replaced by the `with` keyword. You can enable the `deprecatedAssertSyntax: true` option in the import attributes plugin to suppress this error.",
+ ImportBindingIsString: ({
+ importName
+ }) => `A string literal cannot be used as an imported binding.\n- Did you mean \`import { "${importName}" as foo }\`?`,
+ ImportCallArgumentTrailingComma: "Trailing comma is disallowed inside import(...) arguments.",
+ ImportCallArity: ({
+ maxArgumentCount
+ }) => `\`import()\` requires exactly ${maxArgumentCount === 1 ? "one argument" : "one or two arguments"}.`,
+ ImportCallNotNewExpression: "Cannot use new with import(...).",
+ ImportCallSpreadArgument: "`...` is not allowed in `import()`.",
+ ImportJSONBindingNotDefault: "A JSON module can only be imported with `default`.",
+ ImportReflectionHasAssertion: "`import module x` cannot have assertions.",
+ ImportReflectionNotBinding: 'Only `import module x from "./module"` is valid.',
+ IncompatibleRegExpUVFlags: "The 'u' and 'v' regular expression flags cannot be enabled at the same time.",
+ InvalidBigIntLiteral: "Invalid BigIntLiteral.",
+ InvalidCodePoint: "Code point out of bounds.",
+ InvalidCoverInitializedName: "Invalid shorthand property initializer.",
+ InvalidDecimal: "Invalid decimal.",
+ InvalidDigit: ({
+ radix
+ }) => `Expected number in radix ${radix}.`,
+ InvalidEscapeSequence: "Bad character escape sequence.",
+ InvalidEscapeSequenceTemplate: "Invalid escape sequence in template.",
+ InvalidEscapedReservedWord: ({
+ reservedWord
+ }) => `Escape sequence in keyword ${reservedWord}.`,
+ InvalidIdentifier: ({
+ identifierName
+ }) => `Invalid identifier ${identifierName}.`,
+ InvalidLhs: ({
+ ancestor
+ }) => `Invalid left-hand side in ${toNodeDescription(ancestor)}.`,
+ InvalidLhsBinding: ({
+ ancestor
+ }) => `Binding invalid left-hand side in ${toNodeDescription(ancestor)}.`,
+ InvalidLhsOptionalChaining: ({
+ ancestor
+ }) => `Invalid optional chaining in the left-hand side of ${toNodeDescription(ancestor)}.`,
+ InvalidNumber: "Invalid number.",
+ InvalidOrMissingExponent: "Floating-point numbers require a valid exponent after the 'e'.",
+ InvalidOrUnexpectedToken: ({
+ unexpected
+ }) => `Unexpected character '${unexpected}'.`,
+ InvalidParenthesizedAssignment: "Invalid parenthesized assignment pattern.",
+ InvalidPrivateFieldResolution: ({
+ identifierName
+ }) => `Private name #${identifierName} is not defined.`,
+ InvalidPropertyBindingPattern: "Binding member expression.",
+ InvalidRecordProperty: "Only properties and spread elements are allowed in record definitions.",
+ InvalidRestAssignmentPattern: "Invalid rest operator's argument.",
+ LabelRedeclaration: ({
+ labelName
+ }) => `Label '${labelName}' is already declared.`,
+ LetInLexicalBinding: "'let' is disallowed as a lexically bound name.",
+ LineTerminatorBeforeArrow: "No line break is allowed before '=>'.",
+ MalformedRegExpFlags: "Invalid regular expression flag.",
+ MissingClassName: "A class name is required.",
+ MissingEqInAssignment: "Only '=' operator can be used for specifying default value.",
+ MissingSemicolon: "Missing semicolon.",
+ MissingPlugin: ({
+ missingPlugin
+ }) => `This experimental syntax requires enabling the parser plugin: ${missingPlugin.map(name => JSON.stringify(name)).join(", ")}.`,
+ MissingOneOfPlugins: ({
+ missingPlugin
+ }) => `This experimental syntax requires enabling one of the following parser plugin(s): ${missingPlugin.map(name => JSON.stringify(name)).join(", ")}.`,
+ MissingUnicodeEscape: "Expecting Unicode escape sequence \\uXXXX.",
+ MixingCoalesceWithLogical: "Nullish coalescing operator(??) requires parens when mixing with logical operators.",
+ ModuleAttributeDifferentFromType: "The only accepted module attribute is `type`.",
+ ModuleAttributeInvalidValue: "Only string literals are allowed as module attribute values.",
+ ModuleAttributesWithDuplicateKeys: ({
+ key
+ }) => `Duplicate key "${key}" is not allowed in module attributes.`,
+ ModuleExportNameHasLoneSurrogate: ({
+ surrogateCharCode
+ }) => `An export name cannot include a lone surrogate, found '\\u${surrogateCharCode.toString(16)}'.`,
+ ModuleExportUndefined: ({
+ localName
+ }) => `Export '${localName}' is not defined.`,
+ MultipleDefaultsInSwitch: "Multiple default clauses.",
+ NewlineAfterThrow: "Illegal newline after throw.",
+ NoCatchOrFinally: "Missing catch or finally clause.",
+ NumberIdentifier: "Identifier directly after number.",
+ NumericSeparatorInEscapeSequence: "Numeric separators are not allowed inside unicode escape sequences or hex escape sequences.",
+ ObsoleteAwaitStar: "'await*' has been removed from the async functions proposal. Use Promise.all() instead.",
+ OptionalChainingNoNew: "Constructors in/after an Optional Chain are not allowed.",
+ OptionalChainingNoTemplate: "Tagged Template Literals are not allowed in optionalChain.",
+ OverrideOnConstructor: "'override' modifier cannot appear on a constructor declaration.",
+ ParamDupe: "Argument name clash.",
+ PatternHasAccessor: "Object pattern can't contain getter or setter.",
+ PatternHasMethod: "Object pattern can't contain methods.",
+ PrivateInExpectedIn: ({
+ identifierName
+ }) => `Private names are only allowed in property accesses (\`obj.#${identifierName}\`) or in \`in\` expressions (\`#${identifierName} in obj\`).`,
+ PrivateNameRedeclaration: ({
+ identifierName
+ }) => `Duplicate private name #${identifierName}.`,
+ RecordExpressionBarIncorrectEndSyntaxType: "Record expressions ending with '|}' are only allowed when the 'syntaxType' option of the 'recordAndTuple' plugin is set to 'bar'.",
+ RecordExpressionBarIncorrectStartSyntaxType: "Record expressions starting with '{|' are only allowed when the 'syntaxType' option of the 'recordAndTuple' plugin is set to 'bar'.",
+ RecordExpressionHashIncorrectStartSyntaxType: "Record expressions starting with '#{' are only allowed when the 'syntaxType' option of the 'recordAndTuple' plugin is set to 'hash'.",
+ RecordNoProto: "'__proto__' is not allowed in Record expressions.",
+ RestTrailingComma: "Unexpected trailing comma after rest element.",
+ SloppyFunction: "In non-strict mode code, functions can only be declared at top level or inside a block.",
+ SloppyFunctionAnnexB: "In non-strict mode code, functions can only be declared at top level, inside a block, or as the body of an if statement.",
+ SourcePhaseImportRequiresDefault: 'Only `import source x from "./module"` is valid.',
+ StaticPrototype: "Classes may not have static property named prototype.",
+ SuperNotAllowed: "`super()` is only valid inside a class constructor of a subclass. Maybe a typo in the method name ('constructor') or not extending another class?",
+ SuperPrivateField: "Private fields can't be accessed on super.",
+ TrailingDecorator: "Decorators must be attached to a class element.",
+ TupleExpressionBarIncorrectEndSyntaxType: "Tuple expressions ending with '|]' are only allowed when the 'syntaxType' option of the 'recordAndTuple' plugin is set to 'bar'.",
+ TupleExpressionBarIncorrectStartSyntaxType: "Tuple expressions starting with '[|' are only allowed when the 'syntaxType' option of the 'recordAndTuple' plugin is set to 'bar'.",
+ TupleExpressionHashIncorrectStartSyntaxType: "Tuple expressions starting with '#[' are only allowed when the 'syntaxType' option of the 'recordAndTuple' plugin is set to 'hash'.",
+ UnexpectedArgumentPlaceholder: "Unexpected argument placeholder.",
+ UnexpectedAwaitAfterPipelineBody: 'Unexpected "await" after pipeline body; await must have parentheses in minimal proposal.',
+ UnexpectedDigitAfterHash: "Unexpected digit after hash token.",
+ UnexpectedImportExport: "'import' and 'export' may only appear at the top level.",
+ UnexpectedKeyword: ({
+ keyword
+ }) => `Unexpected keyword '${keyword}'.`,
+ UnexpectedLeadingDecorator: "Leading decorators must be attached to a class declaration.",
+ UnexpectedLexicalDeclaration: "Lexical declaration cannot appear in a single-statement context.",
+ UnexpectedNewTarget: "`new.target` can only be used in functions or class properties.",
+ UnexpectedNumericSeparator: "A numeric separator is only allowed between two digits.",
+ UnexpectedPrivateField: "Unexpected private name.",
+ UnexpectedReservedWord: ({
+ reservedWord
+ }) => `Unexpected reserved word '${reservedWord}'.`,
+ UnexpectedSuper: "'super' is only allowed in object methods and classes.",
+ UnexpectedToken: ({
+ expected,
+ unexpected
+ }) => `Unexpected token${unexpected ? ` '${unexpected}'.` : ""}${expected ? `, expected "${expected}"` : ""}`,
+ UnexpectedTokenUnaryExponentiation: "Illegal expression. Wrap left hand side or entire exponentiation in parentheses.",
+ UnexpectedUsingDeclaration: "Using declaration cannot appear in the top level when source type is `script`.",
+ UnsupportedBind: "Binding should be performed on object property.",
+ UnsupportedDecoratorExport: "A decorated export must export a class declaration.",
+ UnsupportedDefaultExport: "Only expressions, functions or classes are allowed as the `default` export.",
+ UnsupportedImport: "`import` can only be used in `import()` or `import.meta`.",
+ UnsupportedMetaProperty: ({
+ target,
+ onlyValidPropertyName
+ }) => `The only valid meta property for ${target} is ${target}.${onlyValidPropertyName}.`,
+ UnsupportedParameterDecorator: "Decorators cannot be used to decorate parameters.",
+ UnsupportedPropertyDecorator: "Decorators cannot be used to decorate object literal properties.",
+ UnsupportedSuper: "'super' can only be used with function calls (i.e. super()) or in property accesses (i.e. super.prop or super[prop]).",
+ UnterminatedComment: "Unterminated comment.",
+ UnterminatedRegExp: "Unterminated regular expression.",
+ UnterminatedString: "Unterminated string constant.",
+ UnterminatedTemplate: "Unterminated template.",
+ UsingDeclarationHasBindingPattern: "Using declaration cannot have destructuring patterns.",
+ VarRedeclaration: ({
+ identifierName
+ }) => `Identifier '${identifierName}' has already been declared.`,
+ YieldBindingIdentifier: "Can not use 'yield' as identifier inside a generator.",
+ YieldInParameter: "Yield expression is not allowed in formal parameters.",
+ ZeroDigitNumericSeparator: "Numeric separator can not be used after leading 0."
+};
+var StrictModeErrors = {
+ StrictDelete: "Deleting local variable in strict mode.",
+ StrictEvalArguments: ({
+ referenceName
+ }) => `Assigning to '${referenceName}' in strict mode.`,
+ StrictEvalArgumentsBinding: ({
+ bindingName
+ }) => `Binding '${bindingName}' in strict mode.`,
+ StrictFunction: "In strict mode code, functions can only be declared at top level or inside a block.",
+ StrictNumericEscape: "The only valid numeric escape in strict mode is '\\0'.",
+ StrictOctalLiteral: "Legacy octal literals are not allowed in strict mode.",
+ StrictWith: "'with' in strict mode."
+};
+const UnparenthesizedPipeBodyDescriptions = new Set(["ArrowFunctionExpression", "AssignmentExpression", "ConditionalExpression", "YieldExpression"]);
+var PipelineOperatorErrors = {
+ PipeBodyIsTighter: "Unexpected yield after pipeline body; any yield expression acting as Hack-style pipe body must be parenthesized due to its loose operator precedence.",
+ PipeTopicRequiresHackPipes: 'Topic reference is used, but the pipelineOperator plugin was not passed a "proposal": "hack" or "smart" option.',
+ PipeTopicUnbound: "Topic reference is unbound; it must be inside a pipe body.",
+ PipeTopicUnconfiguredToken: ({
+ token
+ }) => `Invalid topic token ${token}. In order to use ${token} as a topic reference, the pipelineOperator plugin must be configured with { "proposal": "hack", "topicToken": "${token}" }.`,
+ PipeTopicUnused: "Hack-style pipe body does not contain a topic reference; Hack-style pipes must use topic at least once.",
+ PipeUnparenthesizedBody: ({
+ type
+ }) => `Hack-style pipe body cannot be an unparenthesized ${toNodeDescription({
+ type
+ })}; please wrap it in parentheses.`,
+ PipelineBodyNoArrow: 'Unexpected arrow "=>" after pipeline body; arrow function in pipeline body must be parenthesized.',
+ PipelineBodySequenceExpression: "Pipeline body may not be a comma-separated sequence expression.",
+ PipelineHeadSequenceExpression: "Pipeline head should not be a comma-separated sequence expression.",
+ PipelineTopicUnused: "Pipeline is in topic style but does not use topic reference.",
+ PrimaryTopicNotAllowed: "Topic reference was used in a lexical context without topic binding.",
+ PrimaryTopicRequiresSmartPipeline: 'Topic reference is used, but the pipelineOperator plugin was not passed a "proposal": "hack" or "smart" option.'
+};
+const _excluded$1 = ["toMessage"],
+ _excluded2$1 = ["message"];
+function defineHidden(obj, key, value) {
+ Object.defineProperty(obj, key, {
+ enumerable: false,
+ configurable: true,
+ value
+ });
+}
+function toParseErrorConstructor(_ref) {
+ let {
+ toMessage
+ } = _ref,
+ properties = _objectWithoutPropertiesLoose(_ref, _excluded$1);
+ return function constructor({
+ loc,
+ details
+ }) {
+ const error = new SyntaxError();
+ Object.assign(error, properties, {
+ loc,
+ pos: loc.index
+ });
+ if ("missingPlugin" in details) {
+ Object.assign(error, {
+ missingPlugin: details.missingPlugin
+ });
+ }
+ defineHidden(error, "clone", function clone(overrides = {}) {
+ var _overrides$loc;
+ const {
+ line,
+ column,
+ index
+ } = (_overrides$loc = overrides.loc) != null ? _overrides$loc : loc;
+ return constructor({
+ loc: new Position(line, column, index),
+ details: Object.assign({}, details, overrides.details)
+ });
+ });
+ defineHidden(error, "details", details);
+ Object.defineProperty(error, "message", {
+ configurable: true,
+ get() {
+ const message = `${toMessage(details)} (${loc.line}:${loc.column})`;
+ this.message = message;
+ return message;
+ },
+ set(value) {
+ Object.defineProperty(this, "message", {
+ value,
+ writable: true
+ });
+ }
+ });
+ return error;
+ };
+}
+function ParseErrorEnum(argument, syntaxPlugin) {
+ if (Array.isArray(argument)) {
+ return parseErrorTemplates => ParseErrorEnum(parseErrorTemplates, argument[0]);
+ }
+ const ParseErrorConstructors = {};
+ for (const reasonCode of Object.keys(argument)) {
+ const template = argument[reasonCode];
+ const _ref2 = typeof template === "string" ? {
+ message: () => template
+ } : typeof template === "function" ? {
+ message: template
+ } : template,
+ {
+ message
+ } = _ref2,
+ rest = _objectWithoutPropertiesLoose(_ref2, _excluded2$1);
+ const toMessage = typeof message === "string" ? () => message : message;
+ ParseErrorConstructors[reasonCode] = toParseErrorConstructor(Object.assign({
+ code: "BABEL_PARSER_SYNTAX_ERROR",
+ reasonCode,
+ toMessage
+ }, syntaxPlugin ? {
+ syntaxPlugin
+ } : {}, rest));
+ }
+ return ParseErrorConstructors;
+}
+const Errors = Object.assign({}, ParseErrorEnum(ModuleErrors), ParseErrorEnum(StandardErrors), ParseErrorEnum(StrictModeErrors), ParseErrorEnum`pipelineOperator`(PipelineOperatorErrors));
+const {
+ defineProperty
+} = Object;
+const toUnenumerable = (object, key) => defineProperty(object, key, {
+ enumerable: false,
+ value: object[key]
+});
+function toESTreeLocation(node) {
+ node.loc.start && toUnenumerable(node.loc.start, "index");
+ node.loc.end && toUnenumerable(node.loc.end, "index");
+ return node;
+}
+var estree = superClass => class ESTreeParserMixin extends superClass {
+ parse() {
+ const file = toESTreeLocation(super.parse());
+ if (this.options.tokens) {
+ file.tokens = file.tokens.map(toESTreeLocation);
+ }
+ return file;
+ }
+ parseRegExpLiteral({
+ pattern,
+ flags
+ }) {
+ let regex = null;
+ try {
+ regex = new RegExp(pattern, flags);
+ } catch (e) {}
+ const node = this.estreeParseLiteral(regex);
+ node.regex = {
+ pattern,
+ flags
+ };
+ return node;
+ }
+ parseBigIntLiteral(value) {
+ let bigInt;
+ try {
+ bigInt = BigInt(value);
+ } catch (_unused) {
+ bigInt = null;
+ }
+ const node = this.estreeParseLiteral(bigInt);
+ node.bigint = String(node.value || value);
+ return node;
+ }
+ parseDecimalLiteral(value) {
+ const decimal = null;
+ const node = this.estreeParseLiteral(decimal);
+ node.decimal = String(node.value || value);
+ return node;
+ }
+ estreeParseLiteral(value) {
+ return this.parseLiteral(value, "Literal");
+ }
+ parseStringLiteral(value) {
+ return this.estreeParseLiteral(value);
+ }
+ parseNumericLiteral(value) {
+ return this.estreeParseLiteral(value);
+ }
+ parseNullLiteral() {
+ return this.estreeParseLiteral(null);
+ }
+ parseBooleanLiteral(value) {
+ return this.estreeParseLiteral(value);
+ }
+ directiveToStmt(directive) {
+ const expression = directive.value;
+ delete directive.value;
+ expression.type = "Literal";
+ expression.raw = expression.extra.raw;
+ expression.value = expression.extra.expressionValue;
+ const stmt = directive;
+ stmt.type = "ExpressionStatement";
+ stmt.expression = expression;
+ stmt.directive = expression.extra.rawValue;
+ delete expression.extra;
+ return stmt;
+ }
+ initFunction(node, isAsync) {
+ super.initFunction(node, isAsync);
+ node.expression = false;
+ }
+ checkDeclaration(node) {
+ if (node != null && this.isObjectProperty(node)) {
+ this.checkDeclaration(node.value);
+ } else {
+ super.checkDeclaration(node);
+ }
+ }
+ getObjectOrClassMethodParams(method) {
+ return method.value.params;
+ }
+ isValidDirective(stmt) {
+ var _stmt$expression$extr;
+ return stmt.type === "ExpressionStatement" && stmt.expression.type === "Literal" && typeof stmt.expression.value === "string" && !((_stmt$expression$extr = stmt.expression.extra) != null && _stmt$expression$extr.parenthesized);
+ }
+ parseBlockBody(node, allowDirectives, topLevel, end, afterBlockParse) {
+ super.parseBlockBody(node, allowDirectives, topLevel, end, afterBlockParse);
+ const directiveStatements = node.directives.map(d => this.directiveToStmt(d));
+ node.body = directiveStatements.concat(node.body);
+ delete node.directives;
+ }
+ pushClassMethod(classBody, method, isGenerator, isAsync, isConstructor, allowsDirectSuper) {
+ this.parseMethod(method, isGenerator, isAsync, isConstructor, allowsDirectSuper, "ClassMethod", true);
+ if (method.typeParameters) {
+ method.value.typeParameters = method.typeParameters;
+ delete method.typeParameters;
+ }
+ classBody.body.push(method);
+ }
+ parsePrivateName() {
+ const node = super.parsePrivateName();
+ {
+ if (!this.getPluginOption("estree", "classFeatures")) {
+ return node;
+ }
+ }
+ return this.convertPrivateNameToPrivateIdentifier(node);
+ }
+ convertPrivateNameToPrivateIdentifier(node) {
+ const name = super.getPrivateNameSV(node);
+ node = node;
+ delete node.id;
+ node.name = name;
+ node.type = "PrivateIdentifier";
+ return node;
+ }
+ isPrivateName(node) {
+ {
+ if (!this.getPluginOption("estree", "classFeatures")) {
+ return super.isPrivateName(node);
+ }
+ }
+ return node.type === "PrivateIdentifier";
+ }
+ getPrivateNameSV(node) {
+ {
+ if (!this.getPluginOption("estree", "classFeatures")) {
+ return super.getPrivateNameSV(node);
+ }
+ }
+ return node.name;
+ }
+ parseLiteral(value, type) {
+ const node = super.parseLiteral(value, type);
+ node.raw = node.extra.raw;
+ delete node.extra;
+ return node;
+ }
+ parseFunctionBody(node, allowExpression, isMethod = false) {
+ super.parseFunctionBody(node, allowExpression, isMethod);
+ node.expression = node.body.type !== "BlockStatement";
+ }
+ parseMethod(node, isGenerator, isAsync, isConstructor, allowDirectSuper, type, inClassScope = false) {
+ let funcNode = this.startNode();
+ funcNode.kind = node.kind;
+ funcNode = super.parseMethod(funcNode, isGenerator, isAsync, isConstructor, allowDirectSuper, type, inClassScope);
+ funcNode.type = "FunctionExpression";
+ delete funcNode.kind;
+ node.value = funcNode;
+ if (type === "ClassPrivateMethod") {
+ node.computed = false;
+ }
+ return this.finishNode(node, "MethodDefinition");
+ }
+ parseClassProperty(...args) {
+ const propertyNode = super.parseClassProperty(...args);
+ {
+ if (!this.getPluginOption("estree", "classFeatures")) {
+ return propertyNode;
+ }
+ }
+ propertyNode.type = "PropertyDefinition";
+ return propertyNode;
+ }
+ parseClassPrivateProperty(...args) {
+ const propertyNode = super.parseClassPrivateProperty(...args);
+ {
+ if (!this.getPluginOption("estree", "classFeatures")) {
+ return propertyNode;
+ }
+ }
+ propertyNode.type = "PropertyDefinition";
+ propertyNode.computed = false;
+ return propertyNode;
+ }
+ parseObjectMethod(prop, isGenerator, isAsync, isPattern, isAccessor) {
+ const node = super.parseObjectMethod(prop, isGenerator, isAsync, isPattern, isAccessor);
+ if (node) {
+ node.type = "Property";
+ if (node.kind === "method") {
+ node.kind = "init";
+ }
+ node.shorthand = false;
+ }
+ return node;
+ }
+ parseObjectProperty(prop, startLoc, isPattern, refExpressionErrors) {
+ const node = super.parseObjectProperty(prop, startLoc, isPattern, refExpressionErrors);
+ if (node) {
+ node.kind = "init";
+ node.type = "Property";
+ }
+ return node;
+ }
+ isValidLVal(type, isUnparenthesizedInAssign, binding) {
+ return type === "Property" ? "value" : super.isValidLVal(type, isUnparenthesizedInAssign, binding);
+ }
+ isAssignable(node, isBinding) {
+ if (node != null && this.isObjectProperty(node)) {
+ return this.isAssignable(node.value, isBinding);
+ }
+ return super.isAssignable(node, isBinding);
+ }
+ toAssignable(node, isLHS = false) {
+ if (node != null && this.isObjectProperty(node)) {
+ const {
+ key,
+ value
+ } = node;
+ if (this.isPrivateName(key)) {
+ this.classScope.usePrivateName(this.getPrivateNameSV(key), key.loc.start);
+ }
+ this.toAssignable(value, isLHS);
+ } else {
+ super.toAssignable(node, isLHS);
+ }
+ }
+ toAssignableObjectExpressionProp(prop, isLast, isLHS) {
+ if (prop.kind === "get" || prop.kind === "set") {
+ this.raise(Errors.PatternHasAccessor, {
+ at: prop.key
+ });
+ } else if (prop.method) {
+ this.raise(Errors.PatternHasMethod, {
+ at: prop.key
+ });
+ } else {
+ super.toAssignableObjectExpressionProp(prop, isLast, isLHS);
+ }
+ }
+ finishCallExpression(unfinished, optional) {
+ const node = super.finishCallExpression(unfinished, optional);
+ if (node.callee.type === "Import") {
+ node.type = "ImportExpression";
+ node.source = node.arguments[0];
+ if (this.hasPlugin("importAttributes") || this.hasPlugin("importAssertions")) {
+ var _node$arguments$, _node$arguments$2;
+ node.options = (_node$arguments$ = node.arguments[1]) != null ? _node$arguments$ : null;
+ node.attributes = (_node$arguments$2 = node.arguments[1]) != null ? _node$arguments$2 : null;
+ }
+ delete node.arguments;
+ delete node.callee;
+ }
+ return node;
+ }
+ toReferencedArguments(node) {
+ if (node.type === "ImportExpression") {
+ return;
+ }
+ super.toReferencedArguments(node);
+ }
+ parseExport(unfinished, decorators) {
+ const exportStartLoc = this.state.lastTokStartLoc;
+ const node = super.parseExport(unfinished, decorators);
+ switch (node.type) {
+ case "ExportAllDeclaration":
+ node.exported = null;
+ break;
+ case "ExportNamedDeclaration":
+ if (node.specifiers.length === 1 && node.specifiers[0].type === "ExportNamespaceSpecifier") {
+ node.type = "ExportAllDeclaration";
+ node.exported = node.specifiers[0].exported;
+ delete node.specifiers;
+ }
+ case "ExportDefaultDeclaration":
+ {
+ var _declaration$decorato;
+ const {
+ declaration
+ } = node;
+ if ((declaration == null ? void 0 : declaration.type) === "ClassDeclaration" && ((_declaration$decorato = declaration.decorators) == null ? void 0 : _declaration$decorato.length) > 0 && declaration.start === node.start) {
+ this.resetStartLocation(node, exportStartLoc);
+ }
+ }
+ break;
+ }
+ return node;
+ }
+ parseSubscript(base, startLoc, noCalls, state) {
+ const node = super.parseSubscript(base, startLoc, noCalls, state);
+ if (state.optionalChainMember) {
+ if (node.type === "OptionalMemberExpression" || node.type === "OptionalCallExpression") {
+ node.type = node.type.substring(8);
+ }
+ if (state.stop) {
+ const chain = this.startNodeAtNode(node);
+ chain.expression = node;
+ return this.finishNode(chain, "ChainExpression");
+ }
+ } else if (node.type === "MemberExpression" || node.type === "CallExpression") {
+ node.optional = false;
+ }
+ return node;
+ }
+ isOptionalMemberExpression(node) {
+ if (node.type === "ChainExpression") {
+ return node.expression.type === "MemberExpression";
+ }
+ return super.isOptionalMemberExpression(node);
+ }
+ hasPropertyAsPrivateName(node) {
+ if (node.type === "ChainExpression") {
+ node = node.expression;
+ }
+ return super.hasPropertyAsPrivateName(node);
+ }
+ isObjectProperty(node) {
+ return node.type === "Property" && node.kind === "init" && !node.method;
+ }
+ isObjectMethod(node) {
+ return node.method || node.kind === "get" || node.kind === "set";
+ }
+ finishNodeAt(node, type, endLoc) {
+ return toESTreeLocation(super.finishNodeAt(node, type, endLoc));
+ }
+ resetStartLocation(node, startLoc) {
+ super.resetStartLocation(node, startLoc);
+ toESTreeLocation(node);
+ }
+ resetEndLocation(node, endLoc = this.state.lastTokEndLoc) {
+ super.resetEndLocation(node, endLoc);
+ toESTreeLocation(node);
+ }
+};
+class TokContext {
+ constructor(token, preserveSpace) {
+ this.token = void 0;
+ this.preserveSpace = void 0;
+ this.token = token;
+ this.preserveSpace = !!preserveSpace;
+ }
+}
+const types = {
+ brace: new TokContext("{"),
+ j_oTag: new TokContext("...", true)
+};
+{
+ types.template = new TokContext("`", true);
+}
+const beforeExpr = true;
+const startsExpr = true;
+const isLoop = true;
+const isAssign = true;
+const prefix = true;
+const postfix = true;
+class ExportedTokenType {
+ constructor(label, conf = {}) {
+ this.label = void 0;
+ this.keyword = void 0;
+ this.beforeExpr = void 0;
+ this.startsExpr = void 0;
+ this.rightAssociative = void 0;
+ this.isLoop = void 0;
+ this.isAssign = void 0;
+ this.prefix = void 0;
+ this.postfix = void 0;
+ this.binop = void 0;
+ this.label = label;
+ this.keyword = conf.keyword;
+ this.beforeExpr = !!conf.beforeExpr;
+ this.startsExpr = !!conf.startsExpr;
+ this.rightAssociative = !!conf.rightAssociative;
+ this.isLoop = !!conf.isLoop;
+ this.isAssign = !!conf.isAssign;
+ this.prefix = !!conf.prefix;
+ this.postfix = !!conf.postfix;
+ this.binop = conf.binop != null ? conf.binop : null;
+ {
+ this.updateContext = null;
+ }
+ }
+}
+const keywords$1 = new Map();
+function createKeyword(name, options = {}) {
+ options.keyword = name;
+ const token = createToken(name, options);
+ keywords$1.set(name, token);
+ return token;
+}
+function createBinop(name, binop) {
+ return createToken(name, {
+ beforeExpr,
+ binop
+ });
+}
+let tokenTypeCounter = -1;
+const tokenTypes = [];
+const tokenLabels = [];
+const tokenBinops = [];
+const tokenBeforeExprs = [];
+const tokenStartsExprs = [];
+const tokenPrefixes = [];
+function createToken(name, options = {}) {
+ var _options$binop, _options$beforeExpr, _options$startsExpr, _options$prefix;
+ ++tokenTypeCounter;
+ tokenLabels.push(name);
+ tokenBinops.push((_options$binop = options.binop) != null ? _options$binop : -1);
+ tokenBeforeExprs.push((_options$beforeExpr = options.beforeExpr) != null ? _options$beforeExpr : false);
+ tokenStartsExprs.push((_options$startsExpr = options.startsExpr) != null ? _options$startsExpr : false);
+ tokenPrefixes.push((_options$prefix = options.prefix) != null ? _options$prefix : false);
+ tokenTypes.push(new ExportedTokenType(name, options));
+ return tokenTypeCounter;
+}
+function createKeywordLike(name, options = {}) {
+ var _options$binop2, _options$beforeExpr2, _options$startsExpr2, _options$prefix2;
+ ++tokenTypeCounter;
+ keywords$1.set(name, tokenTypeCounter);
+ tokenLabels.push(name);
+ tokenBinops.push((_options$binop2 = options.binop) != null ? _options$binop2 : -1);
+ tokenBeforeExprs.push((_options$beforeExpr2 = options.beforeExpr) != null ? _options$beforeExpr2 : false);
+ tokenStartsExprs.push((_options$startsExpr2 = options.startsExpr) != null ? _options$startsExpr2 : false);
+ tokenPrefixes.push((_options$prefix2 = options.prefix) != null ? _options$prefix2 : false);
+ tokenTypes.push(new ExportedTokenType("name", options));
+ return tokenTypeCounter;
+}
+const tt = {
+ bracketL: createToken("[", {
+ beforeExpr,
+ startsExpr
+ }),
+ bracketHashL: createToken("#[", {
+ beforeExpr,
+ startsExpr
+ }),
+ bracketBarL: createToken("[|", {
+ beforeExpr,
+ startsExpr
+ }),
+ bracketR: createToken("]"),
+ bracketBarR: createToken("|]"),
+ braceL: createToken("{", {
+ beforeExpr,
+ startsExpr
+ }),
+ braceBarL: createToken("{|", {
+ beforeExpr,
+ startsExpr
+ }),
+ braceHashL: createToken("#{", {
+ beforeExpr,
+ startsExpr
+ }),
+ braceR: createToken("}"),
+ braceBarR: createToken("|}"),
+ parenL: createToken("(", {
+ beforeExpr,
+ startsExpr
+ }),
+ parenR: createToken(")"),
+ comma: createToken(",", {
+ beforeExpr
+ }),
+ semi: createToken(";", {
+ beforeExpr
+ }),
+ colon: createToken(":", {
+ beforeExpr
+ }),
+ doubleColon: createToken("::", {
+ beforeExpr
+ }),
+ dot: createToken("."),
+ question: createToken("?", {
+ beforeExpr
+ }),
+ questionDot: createToken("?."),
+ arrow: createToken("=>", {
+ beforeExpr
+ }),
+ template: createToken("template"),
+ ellipsis: createToken("...", {
+ beforeExpr
+ }),
+ backQuote: createToken("`", {
+ startsExpr
+ }),
+ dollarBraceL: createToken("${", {
+ beforeExpr,
+ startsExpr
+ }),
+ templateTail: createToken("...`", {
+ startsExpr
+ }),
+ templateNonTail: createToken("...${", {
+ beforeExpr,
+ startsExpr
+ }),
+ at: createToken("@"),
+ hash: createToken("#", {
+ startsExpr
+ }),
+ interpreterDirective: createToken("#!..."),
+ eq: createToken("=", {
+ beforeExpr,
+ isAssign
+ }),
+ assign: createToken("_=", {
+ beforeExpr,
+ isAssign
+ }),
+ slashAssign: createToken("_=", {
+ beforeExpr,
+ isAssign
+ }),
+ xorAssign: createToken("_=", {
+ beforeExpr,
+ isAssign
+ }),
+ moduloAssign: createToken("_=", {
+ beforeExpr,
+ isAssign
+ }),
+ incDec: createToken("++/--", {
+ prefix,
+ postfix,
+ startsExpr
+ }),
+ bang: createToken("!", {
+ beforeExpr,
+ prefix,
+ startsExpr
+ }),
+ tilde: createToken("~", {
+ beforeExpr,
+ prefix,
+ startsExpr
+ }),
+ doubleCaret: createToken("^^", {
+ startsExpr
+ }),
+ doubleAt: createToken("@@", {
+ startsExpr
+ }),
+ pipeline: createBinop("|>", 0),
+ nullishCoalescing: createBinop("??", 1),
+ logicalOR: createBinop("||", 1),
+ logicalAND: createBinop("&&", 2),
+ bitwiseOR: createBinop("|", 3),
+ bitwiseXOR: createBinop("^", 4),
+ bitwiseAND: createBinop("&", 5),
+ equality: createBinop("==/!=/===/!==", 6),
+ lt: createBinop(">/<=/>=", 7),
+ gt: createBinop(">/<=/>=", 7),
+ relational: createBinop(">/<=/>=", 7),
+ bitShift: createBinop("<>>/>>>", 8),
+ bitShiftL: createBinop("<>>/>>>", 8),
+ bitShiftR: createBinop("<>>/>>>", 8),
+ plusMin: createToken("+/-", {
+ beforeExpr,
+ binop: 9,
+ prefix,
+ startsExpr
+ }),
+ modulo: createToken("%", {
+ binop: 10,
+ startsExpr
+ }),
+ star: createToken("*", {
+ binop: 10
+ }),
+ slash: createBinop("/", 10),
+ exponent: createToken("**", {
+ beforeExpr,
+ binop: 11,
+ rightAssociative: true
+ }),
+ _in: createKeyword("in", {
+ beforeExpr,
+ binop: 7
+ }),
+ _instanceof: createKeyword("instanceof", {
+ beforeExpr,
+ binop: 7
+ }),
+ _break: createKeyword("break"),
+ _case: createKeyword("case", {
+ beforeExpr
+ }),
+ _catch: createKeyword("catch"),
+ _continue: createKeyword("continue"),
+ _debugger: createKeyword("debugger"),
+ _default: createKeyword("default", {
+ beforeExpr
+ }),
+ _else: createKeyword("else", {
+ beforeExpr
+ }),
+ _finally: createKeyword("finally"),
+ _function: createKeyword("function", {
+ startsExpr
+ }),
+ _if: createKeyword("if"),
+ _return: createKeyword("return", {
+ beforeExpr
+ }),
+ _switch: createKeyword("switch"),
+ _throw: createKeyword("throw", {
+ beforeExpr,
+ prefix,
+ startsExpr
+ }),
+ _try: createKeyword("try"),
+ _var: createKeyword("var"),
+ _const: createKeyword("const"),
+ _with: createKeyword("with"),
+ _new: createKeyword("new", {
+ beforeExpr,
+ startsExpr
+ }),
+ _this: createKeyword("this", {
+ startsExpr
+ }),
+ _super: createKeyword("super", {
+ startsExpr
+ }),
+ _class: createKeyword("class", {
+ startsExpr
+ }),
+ _extends: createKeyword("extends", {
+ beforeExpr
+ }),
+ _export: createKeyword("export"),
+ _import: createKeyword("import", {
+ startsExpr
+ }),
+ _null: createKeyword("null", {
+ startsExpr
+ }),
+ _true: createKeyword("true", {
+ startsExpr
+ }),
+ _false: createKeyword("false", {
+ startsExpr
+ }),
+ _typeof: createKeyword("typeof", {
+ beforeExpr,
+ prefix,
+ startsExpr
+ }),
+ _void: createKeyword("void", {
+ beforeExpr,
+ prefix,
+ startsExpr
+ }),
+ _delete: createKeyword("delete", {
+ beforeExpr,
+ prefix,
+ startsExpr
+ }),
+ _do: createKeyword("do", {
+ isLoop,
+ beforeExpr
+ }),
+ _for: createKeyword("for", {
+ isLoop
+ }),
+ _while: createKeyword("while", {
+ isLoop
+ }),
+ _as: createKeywordLike("as", {
+ startsExpr
+ }),
+ _assert: createKeywordLike("assert", {
+ startsExpr
+ }),
+ _async: createKeywordLike("async", {
+ startsExpr
+ }),
+ _await: createKeywordLike("await", {
+ startsExpr
+ }),
+ _defer: createKeywordLike("defer", {
+ startsExpr
+ }),
+ _from: createKeywordLike("from", {
+ startsExpr
+ }),
+ _get: createKeywordLike("get", {
+ startsExpr
+ }),
+ _let: createKeywordLike("let", {
+ startsExpr
+ }),
+ _meta: createKeywordLike("meta", {
+ startsExpr
+ }),
+ _of: createKeywordLike("of", {
+ startsExpr
+ }),
+ _sent: createKeywordLike("sent", {
+ startsExpr
+ }),
+ _set: createKeywordLike("set", {
+ startsExpr
+ }),
+ _source: createKeywordLike("source", {
+ startsExpr
+ }),
+ _static: createKeywordLike("static", {
+ startsExpr
+ }),
+ _using: createKeywordLike("using", {
+ startsExpr
+ }),
+ _yield: createKeywordLike("yield", {
+ startsExpr
+ }),
+ _asserts: createKeywordLike("asserts", {
+ startsExpr
+ }),
+ _checks: createKeywordLike("checks", {
+ startsExpr
+ }),
+ _exports: createKeywordLike("exports", {
+ startsExpr
+ }),
+ _global: createKeywordLike("global", {
+ startsExpr
+ }),
+ _implements: createKeywordLike("implements", {
+ startsExpr
+ }),
+ _intrinsic: createKeywordLike("intrinsic", {
+ startsExpr
+ }),
+ _infer: createKeywordLike("infer", {
+ startsExpr
+ }),
+ _is: createKeywordLike("is", {
+ startsExpr
+ }),
+ _mixins: createKeywordLike("mixins", {
+ startsExpr
+ }),
+ _proto: createKeywordLike("proto", {
+ startsExpr
+ }),
+ _require: createKeywordLike("require", {
+ startsExpr
+ }),
+ _satisfies: createKeywordLike("satisfies", {
+ startsExpr
+ }),
+ _keyof: createKeywordLike("keyof", {
+ startsExpr
+ }),
+ _readonly: createKeywordLike("readonly", {
+ startsExpr
+ }),
+ _unique: createKeywordLike("unique", {
+ startsExpr
+ }),
+ _abstract: createKeywordLike("abstract", {
+ startsExpr
+ }),
+ _declare: createKeywordLike("declare", {
+ startsExpr
+ }),
+ _enum: createKeywordLike("enum", {
+ startsExpr
+ }),
+ _module: createKeywordLike("module", {
+ startsExpr
+ }),
+ _namespace: createKeywordLike("namespace", {
+ startsExpr
+ }),
+ _interface: createKeywordLike("interface", {
+ startsExpr
+ }),
+ _type: createKeywordLike("type", {
+ startsExpr
+ }),
+ _opaque: createKeywordLike("opaque", {
+ startsExpr
+ }),
+ name: createToken("name", {
+ startsExpr
+ }),
+ string: createToken("string", {
+ startsExpr
+ }),
+ num: createToken("num", {
+ startsExpr
+ }),
+ bigint: createToken("bigint", {
+ startsExpr
+ }),
+ decimal: createToken("decimal", {
+ startsExpr
+ }),
+ regexp: createToken("regexp", {
+ startsExpr
+ }),
+ privateName: createToken("#name", {
+ startsExpr
+ }),
+ eof: createToken("eof"),
+ jsxName: createToken("jsxName"),
+ jsxText: createToken("jsxText", {
+ beforeExpr: true
+ }),
+ jsxTagStart: createToken("jsxTagStart", {
+ startsExpr: true
+ }),
+ jsxTagEnd: createToken("jsxTagEnd"),
+ placeholder: createToken("%%", {
+ startsExpr: true
+ })
+};
+function tokenIsIdentifier(token) {
+ return token >= 93 && token <= 132;
+}
+function tokenKeywordOrIdentifierIsKeyword(token) {
+ return token <= 92;
+}
+function tokenIsKeywordOrIdentifier(token) {
+ return token >= 58 && token <= 132;
+}
+function tokenIsLiteralPropertyName(token) {
+ return token >= 58 && token <= 136;
+}
+function tokenComesBeforeExpression(token) {
+ return tokenBeforeExprs[token];
+}
+function tokenCanStartExpression(token) {
+ return tokenStartsExprs[token];
+}
+function tokenIsAssignment(token) {
+ return token >= 29 && token <= 33;
+}
+function tokenIsFlowInterfaceOrTypeOrOpaque(token) {
+ return token >= 129 && token <= 131;
+}
+function tokenIsLoop(token) {
+ return token >= 90 && token <= 92;
+}
+function tokenIsKeyword(token) {
+ return token >= 58 && token <= 92;
+}
+function tokenIsOperator(token) {
+ return token >= 39 && token <= 59;
+}
+function tokenIsPostfix(token) {
+ return token === 34;
+}
+function tokenIsPrefix(token) {
+ return tokenPrefixes[token];
+}
+function tokenIsTSTypeOperator(token) {
+ return token >= 121 && token <= 123;
+}
+function tokenIsTSDeclarationStart(token) {
+ return token >= 124 && token <= 130;
+}
+function tokenLabelName(token) {
+ return tokenLabels[token];
+}
+function tokenOperatorPrecedence(token) {
+ return tokenBinops[token];
+}
+function tokenIsRightAssociative(token) {
+ return token === 57;
+}
+function tokenIsTemplate(token) {
+ return token >= 24 && token <= 25;
+}
+function getExportedToken(token) {
+ return tokenTypes[token];
+}
+{
+ tokenTypes[8].updateContext = context => {
+ context.pop();
+ };
+ tokenTypes[5].updateContext = tokenTypes[7].updateContext = tokenTypes[23].updateContext = context => {
+ context.push(types.brace);
+ };
+ tokenTypes[22].updateContext = context => {
+ if (context[context.length - 1] === types.template) {
+ context.pop();
+ } else {
+ context.push(types.template);
+ }
+ };
+ tokenTypes[142].updateContext = context => {
+ context.push(types.j_expr, types.j_oTag);
+ };
+}
+let nonASCIIidentifierStartChars = "\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\u0560-\u0588\u05d0-\u05ea\u05ef-\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\u0860-\u086a\u0870-\u0887\u0889-\u088e\u08a0-\u08c9\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\u09fc\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\u0c5d\u0c60\u0c61\u0c80\u0c85-\u0c8c\u0c8e-\u0c90\u0c92-\u0ca8\u0caa-\u0cb3\u0cb5-\u0cb9\u0cbd\u0cdd\u0cde\u0ce0\u0ce1\u0cf1\u0cf2\u0d04-\u0d0c\u0d0e-\u0d10\u0d12-\u0d3a\u0d3d\u0d4e\u0d54-\u0d56\u0d5f-\u0d61\u0d7a-\u0d7f\u0d85-\u0d96\u0d9a-\u0db1\u0db3-\u0dbb\u0dbd\u0dc0-\u0dc6\u0e01-\u0e30\u0e32\u0e33\u0e40-\u0e46\u0e81\u0e82\u0e84\u0e86-\u0e8a\u0e8c-\u0ea3\u0ea5\u0ea7-\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-\u1711\u171f-\u1731\u1740-\u1751\u1760-\u176c\u176e-\u1770\u1780-\u17b3\u17d7\u17dc\u1820-\u1878\u1880-\u18a8\u18aa\u18b0-\u18f5\u1900-\u191e\u1950-\u196d\u1970-\u1974\u1980-\u19ab\u19b0-\u19c9\u1a00-\u1a16\u1a20-\u1a54\u1aa7\u1b05-\u1b33\u1b45-\u1b4c\u1b83-\u1ba0\u1bae\u1baf\u1bba-\u1be5\u1c00-\u1c23\u1c4d-\u1c4f\u1c5a-\u1c7d\u1c80-\u1c88\u1c90-\u1cba\u1cbd-\u1cbf\u1ce9-\u1cec\u1cee-\u1cf3\u1cf5\u1cf6\u1cfa\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-\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-\u312f\u3131-\u318e\u31a0-\u31bf\u31f0-\u31ff\u3400-\u4dbf\u4e00-\ua48c\ua4d0-\ua4fd\ua500-\ua60c\ua610-\ua61f\ua62a\ua62b\ua640-\ua66e\ua67f-\ua69d\ua6a0-\ua6ef\ua717-\ua71f\ua722-\ua788\ua78b-\ua7ca\ua7d0\ua7d1\ua7d3\ua7d5-\ua7d9\ua7f2-\ua801\ua803-\ua805\ua807-\ua80a\ua80c-\ua822\ua840-\ua873\ua882-\ua8b3\ua8f2-\ua8f7\ua8fb\ua8fd\ua8fe\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-\uab69\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";
+let nonASCIIidentifierChars = "\u200c\u200d\xb7\u0300-\u036f\u0387\u0483-\u0487\u0591-\u05bd\u05bf\u05c1\u05c2\u05c4\u05c5\u05c7\u0610-\u061a\u064b-\u0669\u0670\u06d6-\u06dc\u06df-\u06e4\u06e7\u06e8\u06ea-\u06ed\u06f0-\u06f9\u0711\u0730-\u074a\u07a6-\u07b0\u07c0-\u07c9\u07eb-\u07f3\u07fd\u0816-\u0819\u081b-\u0823\u0825-\u0827\u0829-\u082d\u0859-\u085b\u0898-\u089f\u08ca-\u08e1\u08e3-\u0903\u093a-\u093c\u093e-\u094f\u0951-\u0957\u0962\u0963\u0966-\u096f\u0981-\u0983\u09bc\u09be-\u09c4\u09c7\u09c8\u09cb-\u09cd\u09d7\u09e2\u09e3\u09e6-\u09ef\u09fe\u0a01-\u0a03\u0a3c\u0a3e-\u0a42\u0a47\u0a48\u0a4b-\u0a4d\u0a51\u0a66-\u0a71\u0a75\u0a81-\u0a83\u0abc\u0abe-\u0ac5\u0ac7-\u0ac9\u0acb-\u0acd\u0ae2\u0ae3\u0ae6-\u0aef\u0afa-\u0aff\u0b01-\u0b03\u0b3c\u0b3e-\u0b44\u0b47\u0b48\u0b4b-\u0b4d\u0b55-\u0b57\u0b62\u0b63\u0b66-\u0b6f\u0b82\u0bbe-\u0bc2\u0bc6-\u0bc8\u0bca-\u0bcd\u0bd7\u0be6-\u0bef\u0c00-\u0c04\u0c3c\u0c3e-\u0c44\u0c46-\u0c48\u0c4a-\u0c4d\u0c55\u0c56\u0c62\u0c63\u0c66-\u0c6f\u0c81-\u0c83\u0cbc\u0cbe-\u0cc4\u0cc6-\u0cc8\u0cca-\u0ccd\u0cd5\u0cd6\u0ce2\u0ce3\u0ce6-\u0cef\u0cf3\u0d00-\u0d03\u0d3b\u0d3c\u0d3e-\u0d44\u0d46-\u0d48\u0d4a-\u0d4d\u0d57\u0d62\u0d63\u0d66-\u0d6f\u0d81-\u0d83\u0dca\u0dcf-\u0dd4\u0dd6\u0dd8-\u0ddf\u0de6-\u0def\u0df2\u0df3\u0e31\u0e34-\u0e3a\u0e47-\u0e4e\u0e50-\u0e59\u0eb1\u0eb4-\u0ebc\u0ec8-\u0ece\u0ed0-\u0ed9\u0f18\u0f19\u0f20-\u0f29\u0f35\u0f37\u0f39\u0f3e\u0f3f\u0f71-\u0f84\u0f86\u0f87\u0f8d-\u0f97\u0f99-\u0fbc\u0fc6\u102b-\u103e\u1040-\u1049\u1056-\u1059\u105e-\u1060\u1062-\u1064\u1067-\u106d\u1071-\u1074\u1082-\u108d\u108f-\u109d\u135d-\u135f\u1369-\u1371\u1712-\u1715\u1732-\u1734\u1752\u1753\u1772\u1773\u17b4-\u17d3\u17dd\u17e0-\u17e9\u180b-\u180d\u180f-\u1819\u18a9\u1920-\u192b\u1930-\u193b\u1946-\u194f\u19d0-\u19da\u1a17-\u1a1b\u1a55-\u1a5e\u1a60-\u1a7c\u1a7f-\u1a89\u1a90-\u1a99\u1ab0-\u1abd\u1abf-\u1ace\u1b00-\u1b04\u1b34-\u1b44\u1b50-\u1b59\u1b6b-\u1b73\u1b80-\u1b82\u1ba1-\u1bad\u1bb0-\u1bb9\u1be6-\u1bf3\u1c24-\u1c37\u1c40-\u1c49\u1c50-\u1c59\u1cd0-\u1cd2\u1cd4-\u1ce8\u1ced\u1cf4\u1cf7-\u1cf9\u1dc0-\u1dff\u200c\u200d\u203f\u2040\u2054\u20d0-\u20dc\u20e1\u20e5-\u20f0\u2cef-\u2cf1\u2d7f\u2de0-\u2dff\u302a-\u302f\u3099\u309a\u30fb\ua620-\ua629\ua66f\ua674-\ua67d\ua69e\ua69f\ua6f0\ua6f1\ua802\ua806\ua80b\ua823-\ua827\ua82c\ua880\ua881\ua8b4-\ua8c5\ua8d0-\ua8d9\ua8e0-\ua8f1\ua8ff-\ua909\ua926-\ua92d\ua947-\ua953\ua980-\ua983\ua9b3-\ua9c0\ua9d0-\ua9d9\ua9e5\ua9f0-\ua9f9\uaa29-\uaa36\uaa43\uaa4c\uaa4d\uaa50-\uaa59\uaa7b-\uaa7d\uaab0\uaab2-\uaab4\uaab7\uaab8\uaabe\uaabf\uaac1\uaaeb-\uaaef\uaaf5\uaaf6\uabe3-\uabea\uabec\uabed\uabf0-\uabf9\ufb1e\ufe00-\ufe0f\ufe20-\ufe2f\ufe33\ufe34\ufe4d-\ufe4f\uff10-\uff19\uff3f\uff65";
+const nonASCIIidentifierStart = new RegExp("[" + nonASCIIidentifierStartChars + "]");
+const nonASCIIidentifier = new RegExp("[" + nonASCIIidentifierStartChars + nonASCIIidentifierChars + "]");
+nonASCIIidentifierStartChars = nonASCIIidentifierChars = null;
+const astralIdentifierStartCodes = [0, 11, 2, 25, 2, 18, 2, 1, 2, 14, 3, 13, 35, 122, 70, 52, 268, 28, 4, 48, 48, 31, 14, 29, 6, 37, 11, 29, 3, 35, 5, 7, 2, 4, 43, 157, 19, 35, 5, 35, 5, 39, 9, 51, 13, 10, 2, 14, 2, 6, 2, 1, 2, 10, 2, 14, 2, 6, 2, 1, 68, 310, 10, 21, 11, 7, 25, 5, 2, 41, 2, 8, 70, 5, 3, 0, 2, 43, 2, 1, 4, 0, 3, 22, 11, 22, 10, 30, 66, 18, 2, 1, 11, 21, 11, 25, 71, 55, 7, 1, 65, 0, 16, 3, 2, 2, 2, 28, 43, 28, 4, 28, 36, 7, 2, 27, 28, 53, 11, 21, 11, 18, 14, 17, 111, 72, 56, 50, 14, 50, 14, 35, 349, 41, 7, 1, 79, 28, 11, 0, 9, 21, 43, 17, 47, 20, 28, 22, 13, 52, 58, 1, 3, 0, 14, 44, 33, 24, 27, 35, 30, 0, 3, 0, 9, 34, 4, 0, 13, 47, 15, 3, 22, 0, 2, 0, 36, 17, 2, 24, 20, 1, 64, 6, 2, 0, 2, 3, 2, 14, 2, 9, 8, 46, 39, 7, 3, 1, 3, 21, 2, 6, 2, 1, 2, 4, 4, 0, 19, 0, 13, 4, 159, 52, 19, 3, 21, 2, 31, 47, 21, 1, 2, 0, 185, 46, 42, 3, 37, 47, 21, 0, 60, 42, 14, 0, 72, 26, 38, 6, 186, 43, 117, 63, 32, 7, 3, 0, 3, 7, 2, 1, 2, 23, 16, 0, 2, 0, 95, 7, 3, 38, 17, 0, 2, 0, 29, 0, 11, 39, 8, 0, 22, 0, 12, 45, 20, 0, 19, 72, 264, 8, 2, 36, 18, 0, 50, 29, 113, 6, 2, 1, 2, 37, 22, 0, 26, 5, 2, 1, 2, 31, 15, 0, 328, 18, 16, 0, 2, 12, 2, 33, 125, 0, 80, 921, 103, 110, 18, 195, 2637, 96, 16, 1071, 18, 5, 4026, 582, 8634, 568, 8, 30, 18, 78, 18, 29, 19, 47, 17, 3, 32, 20, 6, 18, 689, 63, 129, 74, 6, 0, 67, 12, 65, 1, 2, 0, 29, 6135, 9, 1237, 43, 8, 8936, 3, 2, 6, 2, 1, 2, 290, 16, 0, 30, 2, 3, 0, 15, 3, 9, 395, 2309, 106, 6, 12, 4, 8, 8, 9, 5991, 84, 2, 70, 2, 1, 3, 0, 3, 1, 3, 3, 2, 11, 2, 0, 2, 6, 2, 64, 2, 3, 3, 7, 2, 6, 2, 27, 2, 3, 2, 4, 2, 0, 4, 6, 2, 339, 3, 24, 2, 24, 2, 30, 2, 24, 2, 30, 2, 24, 2, 30, 2, 24, 2, 30, 2, 24, 2, 7, 1845, 30, 7, 5, 262, 61, 147, 44, 11, 6, 17, 0, 322, 29, 19, 43, 485, 27, 757, 6, 2, 3, 2, 1, 2, 14, 2, 196, 60, 67, 8, 0, 1205, 3, 2, 26, 2, 1, 2, 0, 3, 0, 2, 9, 2, 3, 2, 0, 2, 0, 7, 0, 5, 0, 2, 0, 2, 0, 2, 2, 2, 1, 2, 0, 3, 0, 2, 0, 2, 0, 2, 0, 2, 0, 2, 1, 2, 0, 3, 3, 2, 6, 2, 3, 2, 3, 2, 0, 2, 9, 2, 16, 6, 2, 2, 4, 2, 16, 4421, 42719, 33, 4153, 7, 221, 3, 5761, 15, 7472, 16, 621, 2467, 541, 1507, 4938, 6, 4191];
+const astralIdentifierCodes = [509, 0, 227, 0, 150, 4, 294, 9, 1368, 2, 2, 1, 6, 3, 41, 2, 5, 0, 166, 1, 574, 3, 9, 9, 370, 1, 81, 2, 71, 10, 50, 3, 123, 2, 54, 14, 32, 10, 3, 1, 11, 3, 46, 10, 8, 0, 46, 9, 7, 2, 37, 13, 2, 9, 6, 1, 45, 0, 13, 2, 49, 13, 9, 3, 2, 11, 83, 11, 7, 0, 3, 0, 158, 11, 6, 9, 7, 3, 56, 1, 2, 6, 3, 1, 3, 2, 10, 0, 11, 1, 3, 6, 4, 4, 193, 17, 10, 9, 5, 0, 82, 19, 13, 9, 214, 6, 3, 8, 28, 1, 83, 16, 16, 9, 82, 12, 9, 9, 84, 14, 5, 9, 243, 14, 166, 9, 71, 5, 2, 1, 3, 3, 2, 0, 2, 1, 13, 9, 120, 6, 3, 6, 4, 0, 29, 9, 41, 6, 2, 3, 9, 0, 10, 10, 47, 15, 406, 7, 2, 7, 17, 9, 57, 21, 2, 13, 123, 5, 4, 0, 2, 1, 2, 6, 2, 0, 9, 9, 49, 4, 2, 1, 2, 4, 9, 9, 330, 3, 10, 1, 2, 0, 49, 6, 4, 4, 14, 9, 5351, 0, 7, 14, 13835, 9, 87, 9, 39, 4, 60, 6, 26, 9, 1014, 0, 2, 54, 8, 3, 82, 0, 12, 1, 19628, 1, 4706, 45, 3, 22, 543, 4, 4, 5, 9, 7, 3, 6, 31, 3, 149, 2, 1418, 49, 513, 54, 5, 49, 9, 0, 15, 0, 23, 4, 2, 14, 1361, 6, 2, 16, 3, 6, 2, 1, 2, 4, 101, 0, 161, 6, 10, 9, 357, 0, 62, 13, 499, 13, 983, 6, 110, 6, 6, 9, 4759, 9, 787719, 239];
+function isInAstralSet(code, set) {
+ let pos = 0x10000;
+ for (let i = 0, length = set.length; i < length; i += 2) {
+ pos += set[i];
+ if (pos > code) return false;
+ pos += set[i + 1];
+ if (pos >= code) return true;
+ }
+ return false;
+}
+function isIdentifierStart(code) {
+ if (code < 65) return code === 36;
+ if (code <= 90) return true;
+ if (code < 97) return code === 95;
+ if (code <= 122) return true;
+ if (code <= 0xffff) {
+ return code >= 0xaa && nonASCIIidentifierStart.test(String.fromCharCode(code));
+ }
+ return isInAstralSet(code, astralIdentifierStartCodes);
+}
+function isIdentifierChar(code) {
+ if (code < 48) return code === 36;
+ if (code < 58) return true;
+ if (code < 65) return false;
+ if (code <= 90) return true;
+ if (code < 97) return code === 95;
+ if (code <= 122) return true;
+ if (code <= 0xffff) {
+ return code >= 0xaa && nonASCIIidentifier.test(String.fromCharCode(code));
+ }
+ return isInAstralSet(code, astralIdentifierStartCodes) || isInAstralSet(code, astralIdentifierCodes);
+}
+const reservedWords = {
+ keyword: ["break", "case", "catch", "continue", "debugger", "default", "do", "else", "finally", "for", "function", "if", "return", "switch", "throw", "try", "var", "const", "while", "with", "new", "this", "super", "class", "extends", "export", "import", "null", "true", "false", "in", "instanceof", "typeof", "void", "delete"],
+ strict: ["implements", "interface", "let", "package", "private", "protected", "public", "static", "yield"],
+ strictBind: ["eval", "arguments"]
+};
+const keywords = new Set(reservedWords.keyword);
+const reservedWordsStrictSet = new Set(reservedWords.strict);
+const reservedWordsStrictBindSet = new Set(reservedWords.strictBind);
+function isReservedWord(word, inModule) {
+ return inModule && word === "await" || word === "enum";
+}
+function isStrictReservedWord(word, inModule) {
+ return isReservedWord(word, inModule) || reservedWordsStrictSet.has(word);
+}
+function isStrictBindOnlyReservedWord(word) {
+ return reservedWordsStrictBindSet.has(word);
+}
+function isStrictBindReservedWord(word, inModule) {
+ return isStrictReservedWord(word, inModule) || isStrictBindOnlyReservedWord(word);
+}
+function isKeyword(word) {
+ return keywords.has(word);
+}
+function isIteratorStart(current, next, next2) {
+ return current === 64 && next === 64 && isIdentifierStart(next2);
+}
+const reservedWordLikeSet = new Set(["break", "case", "catch", "continue", "debugger", "default", "do", "else", "finally", "for", "function", "if", "return", "switch", "throw", "try", "var", "const", "while", "with", "new", "this", "super", "class", "extends", "export", "import", "null", "true", "false", "in", "instanceof", "typeof", "void", "delete", "implements", "interface", "let", "package", "private", "protected", "public", "static", "yield", "eval", "arguments", "enum", "await"]);
+function canBeReservedWord(word) {
+ return reservedWordLikeSet.has(word);
+}
+class Scope {
+ constructor(flags) {
+ this.var = new Set();
+ this.lexical = new Set();
+ this.functions = new Set();
+ this.flags = flags;
+ }
+}
+class ScopeHandler {
+ constructor(parser, inModule) {
+ this.parser = void 0;
+ this.scopeStack = [];
+ this.inModule = void 0;
+ this.undefinedExports = new Map();
+ this.parser = parser;
+ this.inModule = inModule;
+ }
+ get inTopLevel() {
+ return (this.currentScope().flags & 1) > 0;
+ }
+ get inFunction() {
+ return (this.currentVarScopeFlags() & 2) > 0;
+ }
+ get allowSuper() {
+ return (this.currentThisScopeFlags() & 16) > 0;
+ }
+ get allowDirectSuper() {
+ return (this.currentThisScopeFlags() & 32) > 0;
+ }
+ get inClass() {
+ return (this.currentThisScopeFlags() & 64) > 0;
+ }
+ get inClassAndNotInNonArrowFunction() {
+ const flags = this.currentThisScopeFlags();
+ return (flags & 64) > 0 && (flags & 2) === 0;
+ }
+ get inStaticBlock() {
+ for (let i = this.scopeStack.length - 1;; i--) {
+ const {
+ flags
+ } = this.scopeStack[i];
+ if (flags & 128) {
+ return true;
+ }
+ if (flags & (387 | 64)) {
+ return false;
+ }
+ }
+ }
+ get inNonArrowFunction() {
+ return (this.currentThisScopeFlags() & 2) > 0;
+ }
+ get treatFunctionsAsVar() {
+ return this.treatFunctionsAsVarInScope(this.currentScope());
+ }
+ createScope(flags) {
+ return new Scope(flags);
+ }
+ enter(flags) {
+ this.scopeStack.push(this.createScope(flags));
+ }
+ exit() {
+ const scope = this.scopeStack.pop();
+ return scope.flags;
+ }
+ treatFunctionsAsVarInScope(scope) {
+ return !!(scope.flags & (2 | 128) || !this.parser.inModule && scope.flags & 1);
+ }
+ declareName(name, bindingType, loc) {
+ let scope = this.currentScope();
+ if (bindingType & 8 || bindingType & 16) {
+ this.checkRedeclarationInScope(scope, name, bindingType, loc);
+ if (bindingType & 16) {
+ scope.functions.add(name);
+ } else {
+ scope.lexical.add(name);
+ }
+ if (bindingType & 8) {
+ this.maybeExportDefined(scope, name);
+ }
+ } else if (bindingType & 4) {
+ for (let i = this.scopeStack.length - 1; i >= 0; --i) {
+ scope = this.scopeStack[i];
+ this.checkRedeclarationInScope(scope, name, bindingType, loc);
+ scope.var.add(name);
+ this.maybeExportDefined(scope, name);
+ if (scope.flags & 387) break;
+ }
+ }
+ if (this.parser.inModule && scope.flags & 1) {
+ this.undefinedExports.delete(name);
+ }
+ }
+ maybeExportDefined(scope, name) {
+ if (this.parser.inModule && scope.flags & 1) {
+ this.undefinedExports.delete(name);
+ }
+ }
+ checkRedeclarationInScope(scope, name, bindingType, loc) {
+ if (this.isRedeclaredInScope(scope, name, bindingType)) {
+ this.parser.raise(Errors.VarRedeclaration, {
+ at: loc,
+ identifierName: name
+ });
+ }
+ }
+ isRedeclaredInScope(scope, name, bindingType) {
+ if (!(bindingType & 1)) return false;
+ if (bindingType & 8) {
+ return scope.lexical.has(name) || scope.functions.has(name) || scope.var.has(name);
+ }
+ if (bindingType & 16) {
+ return scope.lexical.has(name) || !this.treatFunctionsAsVarInScope(scope) && scope.var.has(name);
+ }
+ return scope.lexical.has(name) && !(scope.flags & 8 && scope.lexical.values().next().value === name) || !this.treatFunctionsAsVarInScope(scope) && scope.functions.has(name);
+ }
+ checkLocalExport(id) {
+ const {
+ name
+ } = id;
+ const topLevelScope = this.scopeStack[0];
+ if (!topLevelScope.lexical.has(name) && !topLevelScope.var.has(name) && !topLevelScope.functions.has(name)) {
+ this.undefinedExports.set(name, id.loc.start);
+ }
+ }
+ currentScope() {
+ return this.scopeStack[this.scopeStack.length - 1];
+ }
+ currentVarScopeFlags() {
+ for (let i = this.scopeStack.length - 1;; i--) {
+ const {
+ flags
+ } = this.scopeStack[i];
+ if (flags & 387) {
+ return flags;
+ }
+ }
+ }
+ currentThisScopeFlags() {
+ for (let i = this.scopeStack.length - 1;; i--) {
+ const {
+ flags
+ } = this.scopeStack[i];
+ if (flags & (387 | 64) && !(flags & 4)) {
+ return flags;
+ }
+ }
+ }
+}
+class FlowScope extends Scope {
+ constructor(...args) {
+ super(...args);
+ this.declareFunctions = new Set();
+ }
+}
+class FlowScopeHandler extends ScopeHandler {
+ createScope(flags) {
+ return new FlowScope(flags);
+ }
+ declareName(name, bindingType, loc) {
+ const scope = this.currentScope();
+ if (bindingType & 2048) {
+ this.checkRedeclarationInScope(scope, name, bindingType, loc);
+ this.maybeExportDefined(scope, name);
+ scope.declareFunctions.add(name);
+ return;
+ }
+ super.declareName(name, bindingType, loc);
+ }
+ isRedeclaredInScope(scope, name, bindingType) {
+ if (super.isRedeclaredInScope(scope, name, bindingType)) return true;
+ if (bindingType & 2048) {
+ return !scope.declareFunctions.has(name) && (scope.lexical.has(name) || scope.functions.has(name));
+ }
+ return false;
+ }
+ checkLocalExport(id) {
+ if (!this.scopeStack[0].declareFunctions.has(id.name)) {
+ super.checkLocalExport(id);
+ }
+ }
+}
+class BaseParser {
+ constructor() {
+ this.sawUnambiguousESM = false;
+ this.ambiguousScriptDifferentAst = false;
+ }
+ hasPlugin(pluginConfig) {
+ if (typeof pluginConfig === "string") {
+ return this.plugins.has(pluginConfig);
+ } else {
+ const [pluginName, pluginOptions] = pluginConfig;
+ if (!this.hasPlugin(pluginName)) {
+ return false;
+ }
+ const actualOptions = this.plugins.get(pluginName);
+ for (const key of Object.keys(pluginOptions)) {
+ if ((actualOptions == null ? void 0 : actualOptions[key]) !== pluginOptions[key]) {
+ return false;
+ }
+ }
+ return true;
+ }
+ }
+ getPluginOption(plugin, name) {
+ var _this$plugins$get;
+ return (_this$plugins$get = this.plugins.get(plugin)) == null ? void 0 : _this$plugins$get[name];
+ }
+}
+function setTrailingComments(node, comments) {
+ if (node.trailingComments === undefined) {
+ node.trailingComments = comments;
+ } else {
+ node.trailingComments.unshift(...comments);
+ }
+}
+function setLeadingComments(node, comments) {
+ if (node.leadingComments === undefined) {
+ node.leadingComments = comments;
+ } else {
+ node.leadingComments.unshift(...comments);
+ }
+}
+function setInnerComments(node, comments) {
+ if (node.innerComments === undefined) {
+ node.innerComments = comments;
+ } else {
+ node.innerComments.unshift(...comments);
+ }
+}
+function adjustInnerComments(node, elements, commentWS) {
+ let lastElement = null;
+ let i = elements.length;
+ while (lastElement === null && i > 0) {
+ lastElement = elements[--i];
+ }
+ if (lastElement === null || lastElement.start > commentWS.start) {
+ setInnerComments(node, commentWS.comments);
+ } else {
+ setTrailingComments(lastElement, commentWS.comments);
+ }
+}
+class CommentsParser extends BaseParser {
+ addComment(comment) {
+ if (this.filename) comment.loc.filename = this.filename;
+ this.state.comments.push(comment);
+ }
+ processComment(node) {
+ const {
+ commentStack
+ } = this.state;
+ const commentStackLength = commentStack.length;
+ if (commentStackLength === 0) return;
+ let i = commentStackLength - 1;
+ const lastCommentWS = commentStack[i];
+ if (lastCommentWS.start === node.end) {
+ lastCommentWS.leadingNode = node;
+ i--;
+ }
+ const {
+ start: nodeStart
+ } = node;
+ for (; i >= 0; i--) {
+ const commentWS = commentStack[i];
+ const commentEnd = commentWS.end;
+ if (commentEnd > nodeStart) {
+ commentWS.containingNode = node;
+ this.finalizeComment(commentWS);
+ commentStack.splice(i, 1);
+ } else {
+ if (commentEnd === nodeStart) {
+ commentWS.trailingNode = node;
+ }
+ break;
+ }
+ }
+ }
+ finalizeComment(commentWS) {
+ const {
+ comments
+ } = commentWS;
+ if (commentWS.leadingNode !== null || commentWS.trailingNode !== null) {
+ if (commentWS.leadingNode !== null) {
+ setTrailingComments(commentWS.leadingNode, comments);
+ }
+ if (commentWS.trailingNode !== null) {
+ setLeadingComments(commentWS.trailingNode, comments);
+ }
+ } else {
+ const {
+ containingNode: node,
+ start: commentStart
+ } = commentWS;
+ if (this.input.charCodeAt(commentStart - 1) === 44) {
+ switch (node.type) {
+ case "ObjectExpression":
+ case "ObjectPattern":
+ case "RecordExpression":
+ adjustInnerComments(node, node.properties, commentWS);
+ break;
+ case "CallExpression":
+ case "OptionalCallExpression":
+ adjustInnerComments(node, node.arguments, commentWS);
+ break;
+ case "FunctionDeclaration":
+ case "FunctionExpression":
+ case "ArrowFunctionExpression":
+ case "ObjectMethod":
+ case "ClassMethod":
+ case "ClassPrivateMethod":
+ adjustInnerComments(node, node.params, commentWS);
+ break;
+ case "ArrayExpression":
+ case "ArrayPattern":
+ case "TupleExpression":
+ adjustInnerComments(node, node.elements, commentWS);
+ break;
+ case "ExportNamedDeclaration":
+ case "ImportDeclaration":
+ adjustInnerComments(node, node.specifiers, commentWS);
+ break;
+ default:
+ {
+ setInnerComments(node, comments);
+ }
+ }
+ } else {
+ setInnerComments(node, comments);
+ }
+ }
+ }
+ finalizeRemainingComments() {
+ const {
+ commentStack
+ } = this.state;
+ for (let i = commentStack.length - 1; i >= 0; i--) {
+ this.finalizeComment(commentStack[i]);
+ }
+ this.state.commentStack = [];
+ }
+ resetPreviousNodeTrailingComments(node) {
+ const {
+ commentStack
+ } = this.state;
+ const {
+ length
+ } = commentStack;
+ if (length === 0) return;
+ const commentWS = commentStack[length - 1];
+ if (commentWS.leadingNode === node) {
+ commentWS.leadingNode = null;
+ }
+ }
+ resetPreviousIdentifierLeadingComments(node) {
+ const {
+ commentStack
+ } = this.state;
+ const {
+ length
+ } = commentStack;
+ if (length === 0) return;
+ if (commentStack[length - 1].trailingNode === node) {
+ commentStack[length - 1].trailingNode = null;
+ } else if (length >= 2 && commentStack[length - 2].trailingNode === node) {
+ commentStack[length - 2].trailingNode = null;
+ }
+ }
+ takeSurroundingComments(node, start, end) {
+ const {
+ commentStack
+ } = this.state;
+ const commentStackLength = commentStack.length;
+ if (commentStackLength === 0) return;
+ let i = commentStackLength - 1;
+ for (; i >= 0; i--) {
+ const commentWS = commentStack[i];
+ const commentEnd = commentWS.end;
+ const commentStart = commentWS.start;
+ if (commentStart === end) {
+ commentWS.leadingNode = node;
+ } else if (commentEnd === start) {
+ commentWS.trailingNode = node;
+ } else if (commentEnd < start) {
+ break;
+ }
+ }
+ }
+}
+const lineBreak = /\r\n?|[\n\u2028\u2029]/;
+const lineBreakG = new RegExp(lineBreak.source, "g");
+function isNewLine(code) {
+ switch (code) {
+ case 10:
+ case 13:
+ case 8232:
+ case 8233:
+ return true;
+ default:
+ return false;
+ }
+}
+const skipWhiteSpace = /(?:\s|\/\/.*|\/\*[^]*?\*\/)*/g;
+const skipWhiteSpaceInLine = /(?:[^\S\n\r\u2028\u2029]|\/\/.*|\/\*.*?\*\/)*/g;
+const skipWhiteSpaceToLineBreak = new RegExp("(?=(" + skipWhiteSpaceInLine.source + "))\\1" + /(?=[\n\r\u2028\u2029]|\/\*(?!.*?\*\/)|$)/.source, "y");
+function isWhitespace(code) {
+ switch (code) {
+ case 0x0009:
+ case 0x000b:
+ case 0x000c:
+ case 32:
+ case 160:
+ case 5760:
+ case 0x2000:
+ case 0x2001:
+ case 0x2002:
+ case 0x2003:
+ case 0x2004:
+ case 0x2005:
+ case 0x2006:
+ case 0x2007:
+ case 0x2008:
+ case 0x2009:
+ case 0x200a:
+ case 0x202f:
+ case 0x205f:
+ case 0x3000:
+ case 0xfeff:
+ return true;
+ default:
+ return false;
+ }
+}
+class State {
+ constructor() {
+ this.strict = void 0;
+ this.curLine = void 0;
+ this.lineStart = void 0;
+ this.startLoc = void 0;
+ this.endLoc = void 0;
+ this.errors = [];
+ this.potentialArrowAt = -1;
+ this.noArrowAt = [];
+ this.noArrowParamsConversionAt = [];
+ this.maybeInArrowParameters = false;
+ this.inType = false;
+ this.noAnonFunctionType = false;
+ this.hasFlowComment = false;
+ this.isAmbientContext = false;
+ this.inAbstractClass = false;
+ this.inDisallowConditionalTypesContext = false;
+ this.topicContext = {
+ maxNumOfResolvableTopics: 0,
+ maxTopicIndex: null
+ };
+ this.soloAwait = false;
+ this.inFSharpPipelineDirectBody = false;
+ this.labels = [];
+ this.comments = [];
+ this.commentStack = [];
+ this.pos = 0;
+ this.type = 139;
+ this.value = null;
+ this.start = 0;
+ this.end = 0;
+ this.lastTokEndLoc = null;
+ this.lastTokStartLoc = null;
+ this.lastTokStart = 0;
+ this.context = [types.brace];
+ this.canStartJSXElement = true;
+ this.containsEsc = false;
+ this.firstInvalidTemplateEscapePos = null;
+ this.strictErrors = new Map();
+ this.tokensLength = 0;
+ }
+ init({
+ strictMode,
+ sourceType,
+ startLine,
+ startColumn
+ }) {
+ this.strict = strictMode === false ? false : strictMode === true ? true : sourceType === "module";
+ this.curLine = startLine;
+ this.lineStart = -startColumn;
+ this.startLoc = this.endLoc = new Position(startLine, startColumn, 0);
+ }
+ curPosition() {
+ return new Position(this.curLine, this.pos - this.lineStart, this.pos);
+ }
+ clone(skipArrays) {
+ const state = new State();
+ const keys = Object.keys(this);
+ for (let i = 0, length = keys.length; i < length; i++) {
+ const key = keys[i];
+ let val = this[key];
+ if (!skipArrays && Array.isArray(val)) {
+ val = val.slice();
+ }
+ state[key] = val;
+ }
+ return state;
+ }
+}
+var _isDigit = function isDigit(code) {
+ return code >= 48 && code <= 57;
+};
+const forbiddenNumericSeparatorSiblings = {
+ decBinOct: new Set([46, 66, 69, 79, 95, 98, 101, 111]),
+ hex: new Set([46, 88, 95, 120])
+};
+const isAllowedNumericSeparatorSibling = {
+ bin: ch => ch === 48 || ch === 49,
+ oct: ch => ch >= 48 && ch <= 55,
+ dec: ch => ch >= 48 && ch <= 57,
+ hex: ch => ch >= 48 && ch <= 57 || ch >= 65 && ch <= 70 || ch >= 97 && ch <= 102
+};
+function readStringContents(type, input, pos, lineStart, curLine, errors) {
+ const initialPos = pos;
+ const initialLineStart = lineStart;
+ const initialCurLine = curLine;
+ let out = "";
+ let firstInvalidLoc = null;
+ let chunkStart = pos;
+ const {
+ length
+ } = input;
+ for (;;) {
+ if (pos >= length) {
+ errors.unterminated(initialPos, initialLineStart, initialCurLine);
+ out += input.slice(chunkStart, pos);
+ break;
+ }
+ const ch = input.charCodeAt(pos);
+ if (isStringEnd(type, ch, input, pos)) {
+ out += input.slice(chunkStart, pos);
+ break;
+ }
+ if (ch === 92) {
+ out += input.slice(chunkStart, pos);
+ const res = readEscapedChar(input, pos, lineStart, curLine, type === "template", errors);
+ if (res.ch === null && !firstInvalidLoc) {
+ firstInvalidLoc = {
+ pos,
+ lineStart,
+ curLine
+ };
+ } else {
+ out += res.ch;
+ }
+ ({
+ pos,
+ lineStart,
+ curLine
+ } = res);
+ chunkStart = pos;
+ } else if (ch === 8232 || ch === 8233) {
+ ++pos;
+ ++curLine;
+ lineStart = pos;
+ } else if (ch === 10 || ch === 13) {
+ if (type === "template") {
+ out += input.slice(chunkStart, pos) + "\n";
+ ++pos;
+ if (ch === 13 && input.charCodeAt(pos) === 10) {
+ ++pos;
+ }
+ ++curLine;
+ chunkStart = lineStart = pos;
+ } else {
+ errors.unterminated(initialPos, initialLineStart, initialCurLine);
+ }
+ } else {
+ ++pos;
+ }
+ }
+ return {
+ pos,
+ str: out,
+ firstInvalidLoc,
+ lineStart,
+ curLine,
+ containsInvalid: !!firstInvalidLoc
+ };
+}
+function isStringEnd(type, ch, input, pos) {
+ if (type === "template") {
+ return ch === 96 || ch === 36 && input.charCodeAt(pos + 1) === 123;
+ }
+ return ch === (type === "double" ? 34 : 39);
+}
+function readEscapedChar(input, pos, lineStart, curLine, inTemplate, errors) {
+ const throwOnInvalid = !inTemplate;
+ pos++;
+ const res = ch => ({
+ pos,
+ ch,
+ lineStart,
+ curLine
+ });
+ const ch = input.charCodeAt(pos++);
+ switch (ch) {
+ case 110:
+ return res("\n");
+ case 114:
+ return res("\r");
+ case 120:
+ {
+ let code;
+ ({
+ code,
+ pos
+ } = readHexChar(input, pos, lineStart, curLine, 2, false, throwOnInvalid, errors));
+ return res(code === null ? null : String.fromCharCode(code));
+ }
+ case 117:
+ {
+ let code;
+ ({
+ code,
+ pos
+ } = readCodePoint(input, pos, lineStart, curLine, throwOnInvalid, errors));
+ return res(code === null ? null : String.fromCodePoint(code));
+ }
+ case 116:
+ return res("\t");
+ case 98:
+ return res("\b");
+ case 118:
+ return res("\u000b");
+ case 102:
+ return res("\f");
+ case 13:
+ if (input.charCodeAt(pos) === 10) {
+ ++pos;
+ }
+ case 10:
+ lineStart = pos;
+ ++curLine;
+ case 8232:
+ case 8233:
+ return res("");
+ case 56:
+ case 57:
+ if (inTemplate) {
+ return res(null);
+ } else {
+ errors.strictNumericEscape(pos - 1, lineStart, curLine);
+ }
+ default:
+ if (ch >= 48 && ch <= 55) {
+ const startPos = pos - 1;
+ const match = input.slice(startPos, pos + 2).match(/^[0-7]+/);
+ let octalStr = match[0];
+ let octal = parseInt(octalStr, 8);
+ if (octal > 255) {
+ octalStr = octalStr.slice(0, -1);
+ octal = parseInt(octalStr, 8);
+ }
+ pos += octalStr.length - 1;
+ const next = input.charCodeAt(pos);
+ if (octalStr !== "0" || next === 56 || next === 57) {
+ if (inTemplate) {
+ return res(null);
+ } else {
+ errors.strictNumericEscape(startPos, lineStart, curLine);
+ }
+ }
+ return res(String.fromCharCode(octal));
+ }
+ return res(String.fromCharCode(ch));
+ }
+}
+function readHexChar(input, pos, lineStart, curLine, len, forceLen, throwOnInvalid, errors) {
+ const initialPos = pos;
+ let n;
+ ({
+ n,
+ pos
+ } = readInt(input, pos, lineStart, curLine, 16, len, forceLen, false, errors, !throwOnInvalid));
+ if (n === null) {
+ if (throwOnInvalid) {
+ errors.invalidEscapeSequence(initialPos, lineStart, curLine);
+ } else {
+ pos = initialPos - 1;
+ }
+ }
+ return {
+ code: n,
+ pos
+ };
+}
+function readInt(input, pos, lineStart, curLine, radix, len, forceLen, allowNumSeparator, errors, bailOnError) {
+ const start = pos;
+ const forbiddenSiblings = radix === 16 ? forbiddenNumericSeparatorSiblings.hex : forbiddenNumericSeparatorSiblings.decBinOct;
+ const isAllowedSibling = radix === 16 ? isAllowedNumericSeparatorSibling.hex : radix === 10 ? isAllowedNumericSeparatorSibling.dec : radix === 8 ? isAllowedNumericSeparatorSibling.oct : isAllowedNumericSeparatorSibling.bin;
+ let invalid = false;
+ let total = 0;
+ for (let i = 0, e = len == null ? Infinity : len; i < e; ++i) {
+ const code = input.charCodeAt(pos);
+ let val;
+ if (code === 95 && allowNumSeparator !== "bail") {
+ const prev = input.charCodeAt(pos - 1);
+ const next = input.charCodeAt(pos + 1);
+ if (!allowNumSeparator) {
+ if (bailOnError) return {
+ n: null,
+ pos
+ };
+ errors.numericSeparatorInEscapeSequence(pos, lineStart, curLine);
+ } else if (Number.isNaN(next) || !isAllowedSibling(next) || forbiddenSiblings.has(prev) || forbiddenSiblings.has(next)) {
+ if (bailOnError) return {
+ n: null,
+ pos
+ };
+ errors.unexpectedNumericSeparator(pos, lineStart, curLine);
+ }
+ ++pos;
+ continue;
+ }
+ if (code >= 97) {
+ val = code - 97 + 10;
+ } else if (code >= 65) {
+ val = code - 65 + 10;
+ } else if (_isDigit(code)) {
+ val = code - 48;
+ } else {
+ val = Infinity;
+ }
+ if (val >= radix) {
+ if (val <= 9 && bailOnError) {
+ return {
+ n: null,
+ pos
+ };
+ } else if (val <= 9 && errors.invalidDigit(pos, lineStart, curLine, radix)) {
+ val = 0;
+ } else if (forceLen) {
+ val = 0;
+ invalid = true;
+ } else {
+ break;
+ }
+ }
+ ++pos;
+ total = total * radix + val;
+ }
+ if (pos === start || len != null && pos - start !== len || invalid) {
+ return {
+ n: null,
+ pos
+ };
+ }
+ return {
+ n: total,
+ pos
+ };
+}
+function readCodePoint(input, pos, lineStart, curLine, throwOnInvalid, errors) {
+ const ch = input.charCodeAt(pos);
+ let code;
+ if (ch === 123) {
+ ++pos;
+ ({
+ code,
+ pos
+ } = readHexChar(input, pos, lineStart, curLine, input.indexOf("}", pos) - pos, true, throwOnInvalid, errors));
+ ++pos;
+ if (code !== null && code > 0x10ffff) {
+ if (throwOnInvalid) {
+ errors.invalidCodePoint(pos, lineStart, curLine);
+ } else {
+ return {
+ code: null,
+ pos
+ };
+ }
+ }
+ } else {
+ ({
+ code,
+ pos
+ } = readHexChar(input, pos, lineStart, curLine, 4, false, throwOnInvalid, errors));
+ }
+ return {
+ code,
+ pos
+ };
+}
+const _excluded = ["at"],
+ _excluded2 = ["at"];
+function buildPosition(pos, lineStart, curLine) {
+ return new Position(curLine, pos - lineStart, pos);
+}
+const VALID_REGEX_FLAGS = new Set([103, 109, 115, 105, 121, 117, 100, 118]);
+class Token {
+ constructor(state) {
+ this.type = state.type;
+ this.value = state.value;
+ this.start = state.start;
+ this.end = state.end;
+ this.loc = new SourceLocation(state.startLoc, state.endLoc);
+ }
+}
+class Tokenizer extends CommentsParser {
+ constructor(options, input) {
+ super();
+ this.isLookahead = void 0;
+ this.tokens = [];
+ this.errorHandlers_readInt = {
+ invalidDigit: (pos, lineStart, curLine, radix) => {
+ if (!this.options.errorRecovery) return false;
+ this.raise(Errors.InvalidDigit, {
+ at: buildPosition(pos, lineStart, curLine),
+ radix
+ });
+ return true;
+ },
+ numericSeparatorInEscapeSequence: this.errorBuilder(Errors.NumericSeparatorInEscapeSequence),
+ unexpectedNumericSeparator: this.errorBuilder(Errors.UnexpectedNumericSeparator)
+ };
+ this.errorHandlers_readCodePoint = Object.assign({}, this.errorHandlers_readInt, {
+ invalidEscapeSequence: this.errorBuilder(Errors.InvalidEscapeSequence),
+ invalidCodePoint: this.errorBuilder(Errors.InvalidCodePoint)
+ });
+ this.errorHandlers_readStringContents_string = Object.assign({}, this.errorHandlers_readCodePoint, {
+ strictNumericEscape: (pos, lineStart, curLine) => {
+ this.recordStrictModeErrors(Errors.StrictNumericEscape, {
+ at: buildPosition(pos, lineStart, curLine)
+ });
+ },
+ unterminated: (pos, lineStart, curLine) => {
+ throw this.raise(Errors.UnterminatedString, {
+ at: buildPosition(pos - 1, lineStart, curLine)
+ });
+ }
+ });
+ this.errorHandlers_readStringContents_template = Object.assign({}, this.errorHandlers_readCodePoint, {
+ strictNumericEscape: this.errorBuilder(Errors.StrictNumericEscape),
+ unterminated: (pos, lineStart, curLine) => {
+ throw this.raise(Errors.UnterminatedTemplate, {
+ at: buildPosition(pos, lineStart, curLine)
+ });
+ }
+ });
+ this.state = new State();
+ this.state.init(options);
+ this.input = input;
+ this.length = input.length;
+ this.isLookahead = false;
+ }
+ pushToken(token) {
+ this.tokens.length = this.state.tokensLength;
+ this.tokens.push(token);
+ ++this.state.tokensLength;
+ }
+ next() {
+ this.checkKeywordEscapes();
+ if (this.options.tokens) {
+ this.pushToken(new Token(this.state));
+ }
+ this.state.lastTokStart = this.state.start;
+ this.state.lastTokEndLoc = this.state.endLoc;
+ this.state.lastTokStartLoc = this.state.startLoc;
+ this.nextToken();
+ }
+ eat(type) {
+ if (this.match(type)) {
+ this.next();
+ return true;
+ } else {
+ return false;
+ }
+ }
+ match(type) {
+ return this.state.type === type;
+ }
+ createLookaheadState(state) {
+ return {
+ pos: state.pos,
+ value: null,
+ type: state.type,
+ start: state.start,
+ end: state.end,
+ context: [this.curContext()],
+ inType: state.inType,
+ startLoc: state.startLoc,
+ lastTokEndLoc: state.lastTokEndLoc,
+ curLine: state.curLine,
+ lineStart: state.lineStart,
+ curPosition: state.curPosition
+ };
+ }
+ lookahead() {
+ const old = this.state;
+ this.state = this.createLookaheadState(old);
+ this.isLookahead = true;
+ this.nextToken();
+ this.isLookahead = false;
+ const curr = this.state;
+ this.state = old;
+ return curr;
+ }
+ nextTokenStart() {
+ return this.nextTokenStartSince(this.state.pos);
+ }
+ nextTokenStartSince(pos) {
+ skipWhiteSpace.lastIndex = pos;
+ return skipWhiteSpace.test(this.input) ? skipWhiteSpace.lastIndex : pos;
+ }
+ lookaheadCharCode() {
+ return this.input.charCodeAt(this.nextTokenStart());
+ }
+ nextTokenInLineStart() {
+ return this.nextTokenInLineStartSince(this.state.pos);
+ }
+ nextTokenInLineStartSince(pos) {
+ skipWhiteSpaceInLine.lastIndex = pos;
+ return skipWhiteSpaceInLine.test(this.input) ? skipWhiteSpaceInLine.lastIndex : pos;
+ }
+ lookaheadInLineCharCode() {
+ return this.input.charCodeAt(this.nextTokenInLineStart());
+ }
+ codePointAtPos(pos) {
+ let cp = this.input.charCodeAt(pos);
+ if ((cp & 0xfc00) === 0xd800 && ++pos < this.input.length) {
+ const trail = this.input.charCodeAt(pos);
+ if ((trail & 0xfc00) === 0xdc00) {
+ cp = 0x10000 + ((cp & 0x3ff) << 10) + (trail & 0x3ff);
+ }
+ }
+ return cp;
+ }
+ setStrict(strict) {
+ this.state.strict = strict;
+ if (strict) {
+ this.state.strictErrors.forEach(([toParseError, at]) => this.raise(toParseError, {
+ at
+ }));
+ this.state.strictErrors.clear();
+ }
+ }
+ curContext() {
+ return this.state.context[this.state.context.length - 1];
+ }
+ nextToken() {
+ this.skipSpace();
+ this.state.start = this.state.pos;
+ if (!this.isLookahead) this.state.startLoc = this.state.curPosition();
+ if (this.state.pos >= this.length) {
+ this.finishToken(139);
+ return;
+ }
+ this.getTokenFromCode(this.codePointAtPos(this.state.pos));
+ }
+ skipBlockComment(commentEnd) {
+ let startLoc;
+ if (!this.isLookahead) startLoc = this.state.curPosition();
+ const start = this.state.pos;
+ const end = this.input.indexOf(commentEnd, start + 2);
+ if (end === -1) {
+ throw this.raise(Errors.UnterminatedComment, {
+ at: this.state.curPosition()
+ });
+ }
+ this.state.pos = end + commentEnd.length;
+ lineBreakG.lastIndex = start + 2;
+ while (lineBreakG.test(this.input) && lineBreakG.lastIndex <= end) {
+ ++this.state.curLine;
+ this.state.lineStart = lineBreakG.lastIndex;
+ }
+ if (this.isLookahead) return;
+ const comment = {
+ type: "CommentBlock",
+ value: this.input.slice(start + 2, end),
+ start,
+ end: end + commentEnd.length,
+ loc: new SourceLocation(startLoc, this.state.curPosition())
+ };
+ if (this.options.tokens) this.pushToken(comment);
+ return comment;
+ }
+ skipLineComment(startSkip) {
+ const start = this.state.pos;
+ let startLoc;
+ if (!this.isLookahead) startLoc = this.state.curPosition();
+ let ch = this.input.charCodeAt(this.state.pos += startSkip);
+ if (this.state.pos < this.length) {
+ while (!isNewLine(ch) && ++this.state.pos < this.length) {
+ ch = this.input.charCodeAt(this.state.pos);
+ }
+ }
+ if (this.isLookahead) return;
+ const end = this.state.pos;
+ const value = this.input.slice(start + startSkip, end);
+ const comment = {
+ type: "CommentLine",
+ value,
+ start,
+ end,
+ loc: new SourceLocation(startLoc, this.state.curPosition())
+ };
+ if (this.options.tokens) this.pushToken(comment);
+ return comment;
+ }
+ skipSpace() {
+ const spaceStart = this.state.pos;
+ const comments = [];
+ loop: while (this.state.pos < this.length) {
+ const ch = this.input.charCodeAt(this.state.pos);
+ switch (ch) {
+ case 32:
+ case 160:
+ case 9:
+ ++this.state.pos;
+ break;
+ case 13:
+ if (this.input.charCodeAt(this.state.pos + 1) === 10) {
+ ++this.state.pos;
+ }
+ case 10:
+ case 8232:
+ case 8233:
+ ++this.state.pos;
+ ++this.state.curLine;
+ this.state.lineStart = this.state.pos;
+ break;
+ case 47:
+ switch (this.input.charCodeAt(this.state.pos + 1)) {
+ case 42:
+ {
+ const comment = this.skipBlockComment("*/");
+ if (comment !== undefined) {
+ this.addComment(comment);
+ if (this.options.attachComment) comments.push(comment);
+ }
+ break;
+ }
+ case 47:
+ {
+ const comment = this.skipLineComment(2);
+ if (comment !== undefined) {
+ this.addComment(comment);
+ if (this.options.attachComment) comments.push(comment);
+ }
+ break;
+ }
+ default:
+ break loop;
+ }
+ break;
+ default:
+ if (isWhitespace(ch)) {
+ ++this.state.pos;
+ } else if (ch === 45 && !this.inModule && this.options.annexB) {
+ const pos = this.state.pos;
+ if (this.input.charCodeAt(pos + 1) === 45 && this.input.charCodeAt(pos + 2) === 62 && (spaceStart === 0 || this.state.lineStart > spaceStart)) {
+ const comment = this.skipLineComment(3);
+ if (comment !== undefined) {
+ this.addComment(comment);
+ if (this.options.attachComment) comments.push(comment);
+ }
+ } else {
+ break loop;
+ }
+ } else if (ch === 60 && !this.inModule && this.options.annexB) {
+ const pos = this.state.pos;
+ if (this.input.charCodeAt(pos + 1) === 33 && this.input.charCodeAt(pos + 2) === 45 && this.input.charCodeAt(pos + 3) === 45) {
+ const comment = this.skipLineComment(4);
+ if (comment !== undefined) {
+ this.addComment(comment);
+ if (this.options.attachComment) comments.push(comment);
+ }
+ } else {
+ break loop;
+ }
+ } else {
+ break loop;
+ }
+ }
+ }
+ if (comments.length > 0) {
+ const end = this.state.pos;
+ const commentWhitespace = {
+ start: spaceStart,
+ end,
+ comments,
+ leadingNode: null,
+ trailingNode: null,
+ containingNode: null
+ };
+ this.state.commentStack.push(commentWhitespace);
+ }
+ }
+ finishToken(type, val) {
+ this.state.end = this.state.pos;
+ this.state.endLoc = this.state.curPosition();
+ const prevType = this.state.type;
+ this.state.type = type;
+ this.state.value = val;
+ if (!this.isLookahead) {
+ this.updateContext(prevType);
+ }
+ }
+ replaceToken(type) {
+ this.state.type = type;
+ this.updateContext();
+ }
+ readToken_numberSign() {
+ if (this.state.pos === 0 && this.readToken_interpreter()) {
+ return;
+ }
+ const nextPos = this.state.pos + 1;
+ const next = this.codePointAtPos(nextPos);
+ if (next >= 48 && next <= 57) {
+ throw this.raise(Errors.UnexpectedDigitAfterHash, {
+ at: this.state.curPosition()
+ });
+ }
+ if (next === 123 || next === 91 && this.hasPlugin("recordAndTuple")) {
+ this.expectPlugin("recordAndTuple");
+ if (this.getPluginOption("recordAndTuple", "syntaxType") === "bar") {
+ throw this.raise(next === 123 ? Errors.RecordExpressionHashIncorrectStartSyntaxType : Errors.TupleExpressionHashIncorrectStartSyntaxType, {
+ at: this.state.curPosition()
+ });
+ }
+ this.state.pos += 2;
+ if (next === 123) {
+ this.finishToken(7);
+ } else {
+ this.finishToken(1);
+ }
+ } else if (isIdentifierStart(next)) {
+ ++this.state.pos;
+ this.finishToken(138, this.readWord1(next));
+ } else if (next === 92) {
+ ++this.state.pos;
+ this.finishToken(138, this.readWord1());
+ } else {
+ this.finishOp(27, 1);
+ }
+ }
+ readToken_dot() {
+ const next = this.input.charCodeAt(this.state.pos + 1);
+ if (next >= 48 && next <= 57) {
+ this.readNumber(true);
+ return;
+ }
+ if (next === 46 && this.input.charCodeAt(this.state.pos + 2) === 46) {
+ this.state.pos += 3;
+ this.finishToken(21);
+ } else {
+ ++this.state.pos;
+ this.finishToken(16);
+ }
+ }
+ readToken_slash() {
+ const next = this.input.charCodeAt(this.state.pos + 1);
+ if (next === 61) {
+ this.finishOp(31, 2);
+ } else {
+ this.finishOp(56, 1);
+ }
+ }
+ readToken_interpreter() {
+ if (this.state.pos !== 0 || this.length < 2) return false;
+ let ch = this.input.charCodeAt(this.state.pos + 1);
+ if (ch !== 33) return false;
+ const start = this.state.pos;
+ this.state.pos += 1;
+ while (!isNewLine(ch) && ++this.state.pos < this.length) {
+ ch = this.input.charCodeAt(this.state.pos);
+ }
+ const value = this.input.slice(start + 2, this.state.pos);
+ this.finishToken(28, value);
+ return true;
+ }
+ readToken_mult_modulo(code) {
+ let type = code === 42 ? 55 : 54;
+ let width = 1;
+ let next = this.input.charCodeAt(this.state.pos + 1);
+ if (code === 42 && next === 42) {
+ width++;
+ next = this.input.charCodeAt(this.state.pos + 2);
+ type = 57;
+ }
+ if (next === 61 && !this.state.inType) {
+ width++;
+ type = code === 37 ? 33 : 30;
+ }
+ this.finishOp(type, width);
+ }
+ readToken_pipe_amp(code) {
+ const next = this.input.charCodeAt(this.state.pos + 1);
+ if (next === code) {
+ if (this.input.charCodeAt(this.state.pos + 2) === 61) {
+ this.finishOp(30, 3);
+ } else {
+ this.finishOp(code === 124 ? 41 : 42, 2);
+ }
+ return;
+ }
+ if (code === 124) {
+ if (next === 62) {
+ this.finishOp(39, 2);
+ return;
+ }
+ if (this.hasPlugin("recordAndTuple") && next === 125) {
+ if (this.getPluginOption("recordAndTuple", "syntaxType") !== "bar") {
+ throw this.raise(Errors.RecordExpressionBarIncorrectEndSyntaxType, {
+ at: this.state.curPosition()
+ });
+ }
+ this.state.pos += 2;
+ this.finishToken(9);
+ return;
+ }
+ if (this.hasPlugin("recordAndTuple") && next === 93) {
+ if (this.getPluginOption("recordAndTuple", "syntaxType") !== "bar") {
+ throw this.raise(Errors.TupleExpressionBarIncorrectEndSyntaxType, {
+ at: this.state.curPosition()
+ });
+ }
+ this.state.pos += 2;
+ this.finishToken(4);
+ return;
+ }
+ }
+ if (next === 61) {
+ this.finishOp(30, 2);
+ return;
+ }
+ this.finishOp(code === 124 ? 43 : 45, 1);
+ }
+ readToken_caret() {
+ const next = this.input.charCodeAt(this.state.pos + 1);
+ if (next === 61 && !this.state.inType) {
+ this.finishOp(32, 2);
+ } else if (next === 94 && this.hasPlugin(["pipelineOperator", {
+ proposal: "hack",
+ topicToken: "^^"
+ }])) {
+ this.finishOp(37, 2);
+ const lookaheadCh = this.input.codePointAt(this.state.pos);
+ if (lookaheadCh === 94) {
+ this.unexpected();
+ }
+ } else {
+ this.finishOp(44, 1);
+ }
+ }
+ readToken_atSign() {
+ const next = this.input.charCodeAt(this.state.pos + 1);
+ if (next === 64 && this.hasPlugin(["pipelineOperator", {
+ proposal: "hack",
+ topicToken: "@@"
+ }])) {
+ this.finishOp(38, 2);
+ } else {
+ this.finishOp(26, 1);
+ }
+ }
+ readToken_plus_min(code) {
+ const next = this.input.charCodeAt(this.state.pos + 1);
+ if (next === code) {
+ this.finishOp(34, 2);
+ return;
+ }
+ if (next === 61) {
+ this.finishOp(30, 2);
+ } else {
+ this.finishOp(53, 1);
+ }
+ }
+ readToken_lt() {
+ const {
+ pos
+ } = this.state;
+ const next = this.input.charCodeAt(pos + 1);
+ if (next === 60) {
+ if (this.input.charCodeAt(pos + 2) === 61) {
+ this.finishOp(30, 3);
+ return;
+ }
+ this.finishOp(51, 2);
+ return;
+ }
+ if (next === 61) {
+ this.finishOp(49, 2);
+ return;
+ }
+ this.finishOp(47, 1);
+ }
+ readToken_gt() {
+ const {
+ pos
+ } = this.state;
+ const next = this.input.charCodeAt(pos + 1);
+ if (next === 62) {
+ const size = this.input.charCodeAt(pos + 2) === 62 ? 3 : 2;
+ if (this.input.charCodeAt(pos + size) === 61) {
+ this.finishOp(30, size + 1);
+ return;
+ }
+ this.finishOp(52, size);
+ return;
+ }
+ if (next === 61) {
+ this.finishOp(49, 2);
+ return;
+ }
+ this.finishOp(48, 1);
+ }
+ readToken_eq_excl(code) {
+ const next = this.input.charCodeAt(this.state.pos + 1);
+ if (next === 61) {
+ this.finishOp(46, this.input.charCodeAt(this.state.pos + 2) === 61 ? 3 : 2);
+ return;
+ }
+ if (code === 61 && next === 62) {
+ this.state.pos += 2;
+ this.finishToken(19);
+ return;
+ }
+ this.finishOp(code === 61 ? 29 : 35, 1);
+ }
+ readToken_question() {
+ const next = this.input.charCodeAt(this.state.pos + 1);
+ const next2 = this.input.charCodeAt(this.state.pos + 2);
+ if (next === 63) {
+ if (next2 === 61) {
+ this.finishOp(30, 3);
+ } else {
+ this.finishOp(40, 2);
+ }
+ } else if (next === 46 && !(next2 >= 48 && next2 <= 57)) {
+ this.state.pos += 2;
+ this.finishToken(18);
+ } else {
+ ++this.state.pos;
+ this.finishToken(17);
+ }
+ }
+ getTokenFromCode(code) {
+ switch (code) {
+ case 46:
+ this.readToken_dot();
+ return;
+ case 40:
+ ++this.state.pos;
+ this.finishToken(10);
+ return;
+ case 41:
+ ++this.state.pos;
+ this.finishToken(11);
+ return;
+ case 59:
+ ++this.state.pos;
+ this.finishToken(13);
+ return;
+ case 44:
+ ++this.state.pos;
+ this.finishToken(12);
+ return;
+ case 91:
+ if (this.hasPlugin("recordAndTuple") && this.input.charCodeAt(this.state.pos + 1) === 124) {
+ if (this.getPluginOption("recordAndTuple", "syntaxType") !== "bar") {
+ throw this.raise(Errors.TupleExpressionBarIncorrectStartSyntaxType, {
+ at: this.state.curPosition()
+ });
+ }
+ this.state.pos += 2;
+ this.finishToken(2);
+ } else {
+ ++this.state.pos;
+ this.finishToken(0);
+ }
+ return;
+ case 93:
+ ++this.state.pos;
+ this.finishToken(3);
+ return;
+ case 123:
+ if (this.hasPlugin("recordAndTuple") && this.input.charCodeAt(this.state.pos + 1) === 124) {
+ if (this.getPluginOption("recordAndTuple", "syntaxType") !== "bar") {
+ throw this.raise(Errors.RecordExpressionBarIncorrectStartSyntaxType, {
+ at: this.state.curPosition()
+ });
+ }
+ this.state.pos += 2;
+ this.finishToken(6);
+ } else {
+ ++this.state.pos;
+ this.finishToken(5);
+ }
+ return;
+ case 125:
+ ++this.state.pos;
+ this.finishToken(8);
+ return;
+ case 58:
+ if (this.hasPlugin("functionBind") && this.input.charCodeAt(this.state.pos + 1) === 58) {
+ this.finishOp(15, 2);
+ } else {
+ ++this.state.pos;
+ this.finishToken(14);
+ }
+ return;
+ case 63:
+ this.readToken_question();
+ return;
+ case 96:
+ this.readTemplateToken();
+ return;
+ case 48:
+ {
+ const next = this.input.charCodeAt(this.state.pos + 1);
+ if (next === 120 || next === 88) {
+ this.readRadixNumber(16);
+ return;
+ }
+ if (next === 111 || next === 79) {
+ this.readRadixNumber(8);
+ return;
+ }
+ if (next === 98 || next === 66) {
+ this.readRadixNumber(2);
+ return;
+ }
+ }
+ case 49:
+ case 50:
+ case 51:
+ case 52:
+ case 53:
+ case 54:
+ case 55:
+ case 56:
+ case 57:
+ this.readNumber(false);
+ return;
+ case 34:
+ case 39:
+ this.readString(code);
+ return;
+ case 47:
+ this.readToken_slash();
+ return;
+ case 37:
+ case 42:
+ this.readToken_mult_modulo(code);
+ return;
+ case 124:
+ case 38:
+ this.readToken_pipe_amp(code);
+ return;
+ case 94:
+ this.readToken_caret();
+ return;
+ case 43:
+ case 45:
+ this.readToken_plus_min(code);
+ return;
+ case 60:
+ this.readToken_lt();
+ return;
+ case 62:
+ this.readToken_gt();
+ return;
+ case 61:
+ case 33:
+ this.readToken_eq_excl(code);
+ return;
+ case 126:
+ this.finishOp(36, 1);
+ return;
+ case 64:
+ this.readToken_atSign();
+ return;
+ case 35:
+ this.readToken_numberSign();
+ return;
+ case 92:
+ this.readWord();
+ return;
+ default:
+ if (isIdentifierStart(code)) {
+ this.readWord(code);
+ return;
+ }
+ }
+ throw this.raise(Errors.InvalidOrUnexpectedToken, {
+ at: this.state.curPosition(),
+ unexpected: String.fromCodePoint(code)
+ });
+ }
+ finishOp(type, size) {
+ const str = this.input.slice(this.state.pos, this.state.pos + size);
+ this.state.pos += size;
+ this.finishToken(type, str);
+ }
+ readRegexp() {
+ const startLoc = this.state.startLoc;
+ const start = this.state.start + 1;
+ let escaped, inClass;
+ let {
+ pos
+ } = this.state;
+ for (;; ++pos) {
+ if (pos >= this.length) {
+ throw this.raise(Errors.UnterminatedRegExp, {
+ at: createPositionWithColumnOffset(startLoc, 1)
+ });
+ }
+ const ch = this.input.charCodeAt(pos);
+ if (isNewLine(ch)) {
+ throw this.raise(Errors.UnterminatedRegExp, {
+ at: createPositionWithColumnOffset(startLoc, 1)
+ });
+ }
+ if (escaped) {
+ escaped = false;
+ } else {
+ if (ch === 91) {
+ inClass = true;
+ } else if (ch === 93 && inClass) {
+ inClass = false;
+ } else if (ch === 47 && !inClass) {
+ break;
+ }
+ escaped = ch === 92;
+ }
+ }
+ const content = this.input.slice(start, pos);
+ ++pos;
+ let mods = "";
+ const nextPos = () => createPositionWithColumnOffset(startLoc, pos + 2 - start);
+ while (pos < this.length) {
+ const cp = this.codePointAtPos(pos);
+ const char = String.fromCharCode(cp);
+ if (VALID_REGEX_FLAGS.has(cp)) {
+ if (cp === 118) {
+ if (mods.includes("u")) {
+ this.raise(Errors.IncompatibleRegExpUVFlags, {
+ at: nextPos()
+ });
+ }
+ } else if (cp === 117) {
+ if (mods.includes("v")) {
+ this.raise(Errors.IncompatibleRegExpUVFlags, {
+ at: nextPos()
+ });
+ }
+ }
+ if (mods.includes(char)) {
+ this.raise(Errors.DuplicateRegExpFlags, {
+ at: nextPos()
+ });
+ }
+ } else if (isIdentifierChar(cp) || cp === 92) {
+ this.raise(Errors.MalformedRegExpFlags, {
+ at: nextPos()
+ });
+ } else {
+ break;
+ }
+ ++pos;
+ mods += char;
+ }
+ this.state.pos = pos;
+ this.finishToken(137, {
+ pattern: content,
+ flags: mods
+ });
+ }
+ readInt(radix, len, forceLen = false, allowNumSeparator = true) {
+ const {
+ n,
+ pos
+ } = readInt(this.input, this.state.pos, this.state.lineStart, this.state.curLine, radix, len, forceLen, allowNumSeparator, this.errorHandlers_readInt, false);
+ this.state.pos = pos;
+ return n;
+ }
+ readRadixNumber(radix) {
+ const startLoc = this.state.curPosition();
+ let isBigInt = false;
+ this.state.pos += 2;
+ const val = this.readInt(radix);
+ if (val == null) {
+ this.raise(Errors.InvalidDigit, {
+ at: createPositionWithColumnOffset(startLoc, 2),
+ radix
+ });
+ }
+ const next = this.input.charCodeAt(this.state.pos);
+ if (next === 110) {
+ ++this.state.pos;
+ isBigInt = true;
+ } else if (next === 109) {
+ throw this.raise(Errors.InvalidDecimal, {
+ at: startLoc
+ });
+ }
+ if (isIdentifierStart(this.codePointAtPos(this.state.pos))) {
+ throw this.raise(Errors.NumberIdentifier, {
+ at: this.state.curPosition()
+ });
+ }
+ if (isBigInt) {
+ const str = this.input.slice(startLoc.index, this.state.pos).replace(/[_n]/g, "");
+ this.finishToken(135, str);
+ return;
+ }
+ this.finishToken(134, val);
+ }
+ readNumber(startsWithDot) {
+ const start = this.state.pos;
+ const startLoc = this.state.curPosition();
+ let isFloat = false;
+ let isBigInt = false;
+ let isDecimal = false;
+ let hasExponent = false;
+ let isOctal = false;
+ if (!startsWithDot && this.readInt(10) === null) {
+ this.raise(Errors.InvalidNumber, {
+ at: this.state.curPosition()
+ });
+ }
+ const hasLeadingZero = this.state.pos - start >= 2 && this.input.charCodeAt(start) === 48;
+ if (hasLeadingZero) {
+ const integer = this.input.slice(start, this.state.pos);
+ this.recordStrictModeErrors(Errors.StrictOctalLiteral, {
+ at: startLoc
+ });
+ if (!this.state.strict) {
+ const underscorePos = integer.indexOf("_");
+ if (underscorePos > 0) {
+ this.raise(Errors.ZeroDigitNumericSeparator, {
+ at: createPositionWithColumnOffset(startLoc, underscorePos)
+ });
+ }
+ }
+ isOctal = hasLeadingZero && !/[89]/.test(integer);
+ }
+ let next = this.input.charCodeAt(this.state.pos);
+ if (next === 46 && !isOctal) {
+ ++this.state.pos;
+ this.readInt(10);
+ isFloat = true;
+ next = this.input.charCodeAt(this.state.pos);
+ }
+ if ((next === 69 || next === 101) && !isOctal) {
+ next = this.input.charCodeAt(++this.state.pos);
+ if (next === 43 || next === 45) {
+ ++this.state.pos;
+ }
+ if (this.readInt(10) === null) {
+ this.raise(Errors.InvalidOrMissingExponent, {
+ at: startLoc
+ });
+ }
+ isFloat = true;
+ hasExponent = true;
+ next = this.input.charCodeAt(this.state.pos);
+ }
+ if (next === 110) {
+ if (isFloat || hasLeadingZero) {
+ this.raise(Errors.InvalidBigIntLiteral, {
+ at: startLoc
+ });
+ }
+ ++this.state.pos;
+ isBigInt = true;
+ }
+ if (next === 109) {
+ this.expectPlugin("decimal", this.state.curPosition());
+ if (hasExponent || hasLeadingZero) {
+ this.raise(Errors.InvalidDecimal, {
+ at: startLoc
+ });
+ }
+ ++this.state.pos;
+ isDecimal = true;
+ }
+ if (isIdentifierStart(this.codePointAtPos(this.state.pos))) {
+ throw this.raise(Errors.NumberIdentifier, {
+ at: this.state.curPosition()
+ });
+ }
+ const str = this.input.slice(start, this.state.pos).replace(/[_mn]/g, "");
+ if (isBigInt) {
+ this.finishToken(135, str);
+ return;
+ }
+ if (isDecimal) {
+ this.finishToken(136, str);
+ return;
+ }
+ const val = isOctal ? parseInt(str, 8) : parseFloat(str);
+ this.finishToken(134, val);
+ }
+ readCodePoint(throwOnInvalid) {
+ const {
+ code,
+ pos
+ } = readCodePoint(this.input, this.state.pos, this.state.lineStart, this.state.curLine, throwOnInvalid, this.errorHandlers_readCodePoint);
+ this.state.pos = pos;
+ return code;
+ }
+ readString(quote) {
+ const {
+ str,
+ pos,
+ curLine,
+ lineStart
+ } = readStringContents(quote === 34 ? "double" : "single", this.input, this.state.pos + 1, this.state.lineStart, this.state.curLine, this.errorHandlers_readStringContents_string);
+ this.state.pos = pos + 1;
+ this.state.lineStart = lineStart;
+ this.state.curLine = curLine;
+ this.finishToken(133, str);
+ }
+ readTemplateContinuation() {
+ if (!this.match(8)) {
+ this.unexpected(null, 8);
+ }
+ this.state.pos--;
+ this.readTemplateToken();
+ }
+ readTemplateToken() {
+ const opening = this.input[this.state.pos];
+ const {
+ str,
+ firstInvalidLoc,
+ pos,
+ curLine,
+ lineStart
+ } = readStringContents("template", this.input, this.state.pos + 1, this.state.lineStart, this.state.curLine, this.errorHandlers_readStringContents_template);
+ this.state.pos = pos + 1;
+ this.state.lineStart = lineStart;
+ this.state.curLine = curLine;
+ if (firstInvalidLoc) {
+ this.state.firstInvalidTemplateEscapePos = new Position(firstInvalidLoc.curLine, firstInvalidLoc.pos - firstInvalidLoc.lineStart, firstInvalidLoc.pos);
+ }
+ if (this.input.codePointAt(pos) === 96) {
+ this.finishToken(24, firstInvalidLoc ? null : opening + str + "`");
+ } else {
+ this.state.pos++;
+ this.finishToken(25, firstInvalidLoc ? null : opening + str + "${");
+ }
+ }
+ recordStrictModeErrors(toParseError, {
+ at
+ }) {
+ const index = at.index;
+ if (this.state.strict && !this.state.strictErrors.has(index)) {
+ this.raise(toParseError, {
+ at
+ });
+ } else {
+ this.state.strictErrors.set(index, [toParseError, at]);
+ }
+ }
+ readWord1(firstCode) {
+ this.state.containsEsc = false;
+ let word = "";
+ const start = this.state.pos;
+ let chunkStart = this.state.pos;
+ if (firstCode !== undefined) {
+ this.state.pos += firstCode <= 0xffff ? 1 : 2;
+ }
+ while (this.state.pos < this.length) {
+ const ch = this.codePointAtPos(this.state.pos);
+ if (isIdentifierChar(ch)) {
+ this.state.pos += ch <= 0xffff ? 1 : 2;
+ } else if (ch === 92) {
+ this.state.containsEsc = true;
+ word += this.input.slice(chunkStart, this.state.pos);
+ const escStart = this.state.curPosition();
+ const identifierCheck = this.state.pos === start ? isIdentifierStart : isIdentifierChar;
+ if (this.input.charCodeAt(++this.state.pos) !== 117) {
+ this.raise(Errors.MissingUnicodeEscape, {
+ at: this.state.curPosition()
+ });
+ chunkStart = this.state.pos - 1;
+ continue;
+ }
+ ++this.state.pos;
+ const esc = this.readCodePoint(true);
+ if (esc !== null) {
+ if (!identifierCheck(esc)) {
+ this.raise(Errors.EscapedCharNotAnIdentifier, {
+ at: escStart
+ });
+ }
+ word += String.fromCodePoint(esc);
+ }
+ chunkStart = this.state.pos;
+ } else {
+ break;
+ }
+ }
+ return word + this.input.slice(chunkStart, this.state.pos);
+ }
+ readWord(firstCode) {
+ const word = this.readWord1(firstCode);
+ const type = keywords$1.get(word);
+ if (type !== undefined) {
+ this.finishToken(type, tokenLabelName(type));
+ } else {
+ this.finishToken(132, word);
+ }
+ }
+ checkKeywordEscapes() {
+ const {
+ type
+ } = this.state;
+ if (tokenIsKeyword(type) && this.state.containsEsc) {
+ this.raise(Errors.InvalidEscapedReservedWord, {
+ at: this.state.startLoc,
+ reservedWord: tokenLabelName(type)
+ });
+ }
+ }
+ raise(toParseError, raiseProperties) {
+ const {
+ at
+ } = raiseProperties,
+ details = _objectWithoutPropertiesLoose(raiseProperties, _excluded);
+ const loc = at instanceof Position ? at : at.loc.start;
+ const error = toParseError({
+ loc,
+ details
+ });
+ if (!this.options.errorRecovery) throw error;
+ if (!this.isLookahead) this.state.errors.push(error);
+ return error;
+ }
+ raiseOverwrite(toParseError, raiseProperties) {
+ const {
+ at
+ } = raiseProperties,
+ details = _objectWithoutPropertiesLoose(raiseProperties, _excluded2);
+ const loc = at instanceof Position ? at : at.loc.start;
+ const pos = loc.index;
+ const errors = this.state.errors;
+ for (let i = errors.length - 1; i >= 0; i--) {
+ const error = errors[i];
+ if (error.loc.index === pos) {
+ return errors[i] = toParseError({
+ loc,
+ details
+ });
+ }
+ if (error.loc.index < pos) break;
+ }
+ return this.raise(toParseError, raiseProperties);
+ }
+ updateContext(prevType) {}
+ unexpected(loc, type) {
+ throw this.raise(Errors.UnexpectedToken, {
+ expected: type ? tokenLabelName(type) : null,
+ at: loc != null ? loc : this.state.startLoc
+ });
+ }
+ expectPlugin(pluginName, loc) {
+ if (this.hasPlugin(pluginName)) {
+ return true;
+ }
+ throw this.raise(Errors.MissingPlugin, {
+ at: loc != null ? loc : this.state.startLoc,
+ missingPlugin: [pluginName]
+ });
+ }
+ expectOnePlugin(pluginNames) {
+ if (!pluginNames.some(name => this.hasPlugin(name))) {
+ throw this.raise(Errors.MissingOneOfPlugins, {
+ at: this.state.startLoc,
+ missingPlugin: pluginNames
+ });
+ }
+ }
+ errorBuilder(error) {
+ return (pos, lineStart, curLine) => {
+ this.raise(error, {
+ at: buildPosition(pos, lineStart, curLine)
+ });
+ };
+ }
+}
+class ClassScope {
+ constructor() {
+ this.privateNames = new Set();
+ this.loneAccessors = new Map();
+ this.undefinedPrivateNames = new Map();
+ }
+}
+class ClassScopeHandler {
+ constructor(parser) {
+ this.parser = void 0;
+ this.stack = [];
+ this.undefinedPrivateNames = new Map();
+ this.parser = parser;
+ }
+ current() {
+ return this.stack[this.stack.length - 1];
+ }
+ enter() {
+ this.stack.push(new ClassScope());
+ }
+ exit() {
+ const oldClassScope = this.stack.pop();
+ const current = this.current();
+ for (const [name, loc] of Array.from(oldClassScope.undefinedPrivateNames)) {
+ if (current) {
+ if (!current.undefinedPrivateNames.has(name)) {
+ current.undefinedPrivateNames.set(name, loc);
+ }
+ } else {
+ this.parser.raise(Errors.InvalidPrivateFieldResolution, {
+ at: loc,
+ identifierName: name
+ });
+ }
+ }
+ }
+ declarePrivateName(name, elementType, loc) {
+ const {
+ privateNames,
+ loneAccessors,
+ undefinedPrivateNames
+ } = this.current();
+ let redefined = privateNames.has(name);
+ if (elementType & 3) {
+ const accessor = redefined && loneAccessors.get(name);
+ if (accessor) {
+ const oldStatic = accessor & 4;
+ const newStatic = elementType & 4;
+ const oldKind = accessor & 3;
+ const newKind = elementType & 3;
+ redefined = oldKind === newKind || oldStatic !== newStatic;
+ if (!redefined) loneAccessors.delete(name);
+ } else if (!redefined) {
+ loneAccessors.set(name, elementType);
+ }
+ }
+ if (redefined) {
+ this.parser.raise(Errors.PrivateNameRedeclaration, {
+ at: loc,
+ identifierName: name
+ });
+ }
+ privateNames.add(name);
+ undefinedPrivateNames.delete(name);
+ }
+ usePrivateName(name, loc) {
+ let classScope;
+ for (classScope of this.stack) {
+ if (classScope.privateNames.has(name)) return;
+ }
+ if (classScope) {
+ classScope.undefinedPrivateNames.set(name, loc);
+ } else {
+ this.parser.raise(Errors.InvalidPrivateFieldResolution, {
+ at: loc,
+ identifierName: name
+ });
+ }
+ }
+}
+class ExpressionScope {
+ constructor(type = 0) {
+ this.type = type;
+ }
+ canBeArrowParameterDeclaration() {
+ return this.type === 2 || this.type === 1;
+ }
+ isCertainlyParameterDeclaration() {
+ return this.type === 3;
+ }
+}
+class ArrowHeadParsingScope extends ExpressionScope {
+ constructor(type) {
+ super(type);
+ this.declarationErrors = new Map();
+ }
+ recordDeclarationError(ParsingErrorClass, {
+ at
+ }) {
+ const index = at.index;
+ this.declarationErrors.set(index, [ParsingErrorClass, at]);
+ }
+ clearDeclarationError(index) {
+ this.declarationErrors.delete(index);
+ }
+ iterateErrors(iterator) {
+ this.declarationErrors.forEach(iterator);
+ }
+}
+class ExpressionScopeHandler {
+ constructor(parser) {
+ this.parser = void 0;
+ this.stack = [new ExpressionScope()];
+ this.parser = parser;
+ }
+ enter(scope) {
+ this.stack.push(scope);
+ }
+ exit() {
+ this.stack.pop();
+ }
+ recordParameterInitializerError(toParseError, {
+ at: node
+ }) {
+ const origin = {
+ at: node.loc.start
+ };
+ const {
+ stack
+ } = this;
+ let i = stack.length - 1;
+ let scope = stack[i];
+ while (!scope.isCertainlyParameterDeclaration()) {
+ if (scope.canBeArrowParameterDeclaration()) {
+ scope.recordDeclarationError(toParseError, origin);
+ } else {
+ return;
+ }
+ scope = stack[--i];
+ }
+ this.parser.raise(toParseError, origin);
+ }
+ recordArrowParameterBindingError(error, {
+ at: node
+ }) {
+ const {
+ stack
+ } = this;
+ const scope = stack[stack.length - 1];
+ const origin = {
+ at: node.loc.start
+ };
+ if (scope.isCertainlyParameterDeclaration()) {
+ this.parser.raise(error, origin);
+ } else if (scope.canBeArrowParameterDeclaration()) {
+ scope.recordDeclarationError(error, origin);
+ } else {
+ return;
+ }
+ }
+ recordAsyncArrowParametersError({
+ at
+ }) {
+ const {
+ stack
+ } = this;
+ let i = stack.length - 1;
+ let scope = stack[i];
+ while (scope.canBeArrowParameterDeclaration()) {
+ if (scope.type === 2) {
+ scope.recordDeclarationError(Errors.AwaitBindingIdentifier, {
+ at
+ });
+ }
+ scope = stack[--i];
+ }
+ }
+ validateAsPattern() {
+ const {
+ stack
+ } = this;
+ const currentScope = stack[stack.length - 1];
+ if (!currentScope.canBeArrowParameterDeclaration()) return;
+ currentScope.iterateErrors(([toParseError, loc]) => {
+ this.parser.raise(toParseError, {
+ at: loc
+ });
+ let i = stack.length - 2;
+ let scope = stack[i];
+ while (scope.canBeArrowParameterDeclaration()) {
+ scope.clearDeclarationError(loc.index);
+ scope = stack[--i];
+ }
+ });
+ }
+}
+function newParameterDeclarationScope() {
+ return new ExpressionScope(3);
+}
+function newArrowHeadScope() {
+ return new ArrowHeadParsingScope(1);
+}
+function newAsyncArrowScope() {
+ return new ArrowHeadParsingScope(2);
+}
+function newExpressionScope() {
+ return new ExpressionScope();
+}
+class ProductionParameterHandler {
+ constructor() {
+ this.stacks = [];
+ }
+ enter(flags) {
+ this.stacks.push(flags);
+ }
+ exit() {
+ this.stacks.pop();
+ }
+ currentFlags() {
+ return this.stacks[this.stacks.length - 1];
+ }
+ get hasAwait() {
+ return (this.currentFlags() & 2) > 0;
+ }
+ get hasYield() {
+ return (this.currentFlags() & 1) > 0;
+ }
+ get hasReturn() {
+ return (this.currentFlags() & 4) > 0;
+ }
+ get hasIn() {
+ return (this.currentFlags() & 8) > 0;
+ }
+}
+function functionFlags(isAsync, isGenerator) {
+ return (isAsync ? 2 : 0) | (isGenerator ? 1 : 0);
+}
+class UtilParser extends Tokenizer {
+ addExtra(node, key, value, enumerable = true) {
+ if (!node) return;
+ const extra = node.extra = node.extra || {};
+ if (enumerable) {
+ extra[key] = value;
+ } else {
+ Object.defineProperty(extra, key, {
+ enumerable,
+ value
+ });
+ }
+ }
+ isContextual(token) {
+ return this.state.type === token && !this.state.containsEsc;
+ }
+ isUnparsedContextual(nameStart, name) {
+ const nameEnd = nameStart + name.length;
+ if (this.input.slice(nameStart, nameEnd) === name) {
+ const nextCh = this.input.charCodeAt(nameEnd);
+ return !(isIdentifierChar(nextCh) || (nextCh & 0xfc00) === 0xd800);
+ }
+ return false;
+ }
+ isLookaheadContextual(name) {
+ const next = this.nextTokenStart();
+ return this.isUnparsedContextual(next, name);
+ }
+ eatContextual(token) {
+ if (this.isContextual(token)) {
+ this.next();
+ return true;
+ }
+ return false;
+ }
+ expectContextual(token, toParseError) {
+ if (!this.eatContextual(token)) {
+ if (toParseError != null) {
+ throw this.raise(toParseError, {
+ at: this.state.startLoc
+ });
+ }
+ this.unexpected(null, token);
+ }
+ }
+ canInsertSemicolon() {
+ return this.match(139) || this.match(8) || this.hasPrecedingLineBreak();
+ }
+ hasPrecedingLineBreak() {
+ return lineBreak.test(this.input.slice(this.state.lastTokEndLoc.index, this.state.start));
+ }
+ hasFollowingLineBreak() {
+ skipWhiteSpaceToLineBreak.lastIndex = this.state.end;
+ return skipWhiteSpaceToLineBreak.test(this.input);
+ }
+ isLineTerminator() {
+ return this.eat(13) || this.canInsertSemicolon();
+ }
+ semicolon(allowAsi = true) {
+ if (allowAsi ? this.isLineTerminator() : this.eat(13)) return;
+ this.raise(Errors.MissingSemicolon, {
+ at: this.state.lastTokEndLoc
+ });
+ }
+ expect(type, loc) {
+ this.eat(type) || this.unexpected(loc, type);
+ }
+ tryParse(fn, oldState = this.state.clone()) {
+ const abortSignal = {
+ node: null
+ };
+ try {
+ const node = fn((node = null) => {
+ abortSignal.node = node;
+ throw abortSignal;
+ });
+ if (this.state.errors.length > oldState.errors.length) {
+ const failState = this.state;
+ this.state = oldState;
+ this.state.tokensLength = failState.tokensLength;
+ return {
+ node,
+ error: failState.errors[oldState.errors.length],
+ thrown: false,
+ aborted: false,
+ failState
+ };
+ }
+ return {
+ node,
+ error: null,
+ thrown: false,
+ aborted: false,
+ failState: null
+ };
+ } catch (error) {
+ const failState = this.state;
+ this.state = oldState;
+ if (error instanceof SyntaxError) {
+ return {
+ node: null,
+ error,
+ thrown: true,
+ aborted: false,
+ failState
+ };
+ }
+ if (error === abortSignal) {
+ return {
+ node: abortSignal.node,
+ error: null,
+ thrown: false,
+ aborted: true,
+ failState
+ };
+ }
+ throw error;
+ }
+ }
+ checkExpressionErrors(refExpressionErrors, andThrow) {
+ if (!refExpressionErrors) return false;
+ const {
+ shorthandAssignLoc,
+ doubleProtoLoc,
+ privateKeyLoc,
+ optionalParametersLoc
+ } = refExpressionErrors;
+ const hasErrors = !!shorthandAssignLoc || !!doubleProtoLoc || !!optionalParametersLoc || !!privateKeyLoc;
+ if (!andThrow) {
+ return hasErrors;
+ }
+ if (shorthandAssignLoc != null) {
+ this.raise(Errors.InvalidCoverInitializedName, {
+ at: shorthandAssignLoc
+ });
+ }
+ if (doubleProtoLoc != null) {
+ this.raise(Errors.DuplicateProto, {
+ at: doubleProtoLoc
+ });
+ }
+ if (privateKeyLoc != null) {
+ this.raise(Errors.UnexpectedPrivateField, {
+ at: privateKeyLoc
+ });
+ }
+ if (optionalParametersLoc != null) {
+ this.unexpected(optionalParametersLoc);
+ }
+ }
+ isLiteralPropertyName() {
+ return tokenIsLiteralPropertyName(this.state.type);
+ }
+ isPrivateName(node) {
+ return node.type === "PrivateName";
+ }
+ getPrivateNameSV(node) {
+ return node.id.name;
+ }
+ hasPropertyAsPrivateName(node) {
+ return (node.type === "MemberExpression" || node.type === "OptionalMemberExpression") && this.isPrivateName(node.property);
+ }
+ isObjectProperty(node) {
+ return node.type === "ObjectProperty";
+ }
+ isObjectMethod(node) {
+ return node.type === "ObjectMethod";
+ }
+ initializeScopes(inModule = this.options.sourceType === "module") {
+ const oldLabels = this.state.labels;
+ this.state.labels = [];
+ const oldExportedIdentifiers = this.exportedIdentifiers;
+ this.exportedIdentifiers = new Set();
+ const oldInModule = this.inModule;
+ this.inModule = inModule;
+ const oldScope = this.scope;
+ const ScopeHandler = this.getScopeHandler();
+ this.scope = new ScopeHandler(this, inModule);
+ const oldProdParam = this.prodParam;
+ this.prodParam = new ProductionParameterHandler();
+ const oldClassScope = this.classScope;
+ this.classScope = new ClassScopeHandler(this);
+ const oldExpressionScope = this.expressionScope;
+ this.expressionScope = new ExpressionScopeHandler(this);
+ return () => {
+ this.state.labels = oldLabels;
+ this.exportedIdentifiers = oldExportedIdentifiers;
+ this.inModule = oldInModule;
+ this.scope = oldScope;
+ this.prodParam = oldProdParam;
+ this.classScope = oldClassScope;
+ this.expressionScope = oldExpressionScope;
+ };
+ }
+ enterInitialScopes() {
+ let paramFlags = 0;
+ if (this.inModule) {
+ paramFlags |= 2;
+ }
+ this.scope.enter(1);
+ this.prodParam.enter(paramFlags);
+ }
+ checkDestructuringPrivate(refExpressionErrors) {
+ const {
+ privateKeyLoc
+ } = refExpressionErrors;
+ if (privateKeyLoc !== null) {
+ this.expectPlugin("destructuringPrivate", privateKeyLoc);
+ }
+ }
+}
+class ExpressionErrors {
+ constructor() {
+ this.shorthandAssignLoc = null;
+ this.doubleProtoLoc = null;
+ this.privateKeyLoc = null;
+ this.optionalParametersLoc = null;
+ }
+}
+class Node {
+ constructor(parser, pos, loc) {
+ this.type = "";
+ this.start = pos;
+ this.end = 0;
+ this.loc = new SourceLocation(loc);
+ if (parser != null && parser.options.ranges) this.range = [pos, 0];
+ if (parser != null && parser.filename) this.loc.filename = parser.filename;
+ }
+}
+const NodePrototype = Node.prototype;
+{
+ NodePrototype.__clone = function () {
+ const newNode = new Node(undefined, this.start, this.loc.start);
+ const keys = Object.keys(this);
+ for (let i = 0, length = keys.length; i < length; i++) {
+ const key = keys[i];
+ if (key !== "leadingComments" && key !== "trailingComments" && key !== "innerComments") {
+ newNode[key] = this[key];
+ }
+ }
+ return newNode;
+ };
+}
+function clonePlaceholder(node) {
+ return cloneIdentifier(node);
+}
+function cloneIdentifier(node) {
+ const {
+ type,
+ start,
+ end,
+ loc,
+ range,
+ extra,
+ name
+ } = node;
+ const cloned = Object.create(NodePrototype);
+ cloned.type = type;
+ cloned.start = start;
+ cloned.end = end;
+ cloned.loc = loc;
+ cloned.range = range;
+ cloned.extra = extra;
+ cloned.name = name;
+ if (type === "Placeholder") {
+ cloned.expectedNode = node.expectedNode;
+ }
+ return cloned;
+}
+function cloneStringLiteral(node) {
+ const {
+ type,
+ start,
+ end,
+ loc,
+ range,
+ extra
+ } = node;
+ if (type === "Placeholder") {
+ return clonePlaceholder(node);
+ }
+ const cloned = Object.create(NodePrototype);
+ cloned.type = type;
+ cloned.start = start;
+ cloned.end = end;
+ cloned.loc = loc;
+ cloned.range = range;
+ if (node.raw !== undefined) {
+ cloned.raw = node.raw;
+ } else {
+ cloned.extra = extra;
+ }
+ cloned.value = node.value;
+ return cloned;
+}
+class NodeUtils extends UtilParser {
+ startNode() {
+ return new Node(this, this.state.start, this.state.startLoc);
+ }
+ startNodeAt(loc) {
+ return new Node(this, loc.index, loc);
+ }
+ startNodeAtNode(type) {
+ return this.startNodeAt(type.loc.start);
+ }
+ finishNode(node, type) {
+ return this.finishNodeAt(node, type, this.state.lastTokEndLoc);
+ }
+ finishNodeAt(node, type, endLoc) {
+ node.type = type;
+ node.end = endLoc.index;
+ node.loc.end = endLoc;
+ if (this.options.ranges) node.range[1] = endLoc.index;
+ if (this.options.attachComment) this.processComment(node);
+ return node;
+ }
+ resetStartLocation(node, startLoc) {
+ node.start = startLoc.index;
+ node.loc.start = startLoc;
+ if (this.options.ranges) node.range[0] = startLoc.index;
+ }
+ resetEndLocation(node, endLoc = this.state.lastTokEndLoc) {
+ node.end = endLoc.index;
+ node.loc.end = endLoc;
+ if (this.options.ranges) node.range[1] = endLoc.index;
+ }
+ resetStartLocationFromNode(node, locationNode) {
+ this.resetStartLocation(node, locationNode.loc.start);
+ }
+}
+const reservedTypes = new Set(["_", "any", "bool", "boolean", "empty", "extends", "false", "interface", "mixed", "null", "number", "static", "string", "true", "typeof", "void"]);
+const FlowErrors = ParseErrorEnum`flow`({
+ AmbiguousConditionalArrow: "Ambiguous expression: wrap the arrow functions in parentheses to disambiguate.",
+ AmbiguousDeclareModuleKind: "Found both `declare module.exports` and `declare export` in the same module. Modules can only have 1 since they are either an ES module or they are a CommonJS module.",
+ AssignReservedType: ({
+ reservedType
+ }) => `Cannot overwrite reserved type ${reservedType}.`,
+ DeclareClassElement: "The `declare` modifier can only appear on class fields.",
+ DeclareClassFieldInitializer: "Initializers are not allowed in fields with the `declare` modifier.",
+ DuplicateDeclareModuleExports: "Duplicate `declare module.exports` statement.",
+ EnumBooleanMemberNotInitialized: ({
+ memberName,
+ enumName
+ }) => `Boolean enum members need to be initialized. Use either \`${memberName} = true,\` or \`${memberName} = false,\` in enum \`${enumName}\`.`,
+ EnumDuplicateMemberName: ({
+ memberName,
+ enumName
+ }) => `Enum member names need to be unique, but the name \`${memberName}\` has already been used before in enum \`${enumName}\`.`,
+ EnumInconsistentMemberValues: ({
+ enumName
+ }) => `Enum \`${enumName}\` has inconsistent member initializers. Either use no initializers, or consistently use literals (either booleans, numbers, or strings) for all member initializers.`,
+ EnumInvalidExplicitType: ({
+ invalidEnumType,
+ enumName
+ }) => `Enum type \`${invalidEnumType}\` is not valid. Use one of \`boolean\`, \`number\`, \`string\`, or \`symbol\` in enum \`${enumName}\`.`,
+ EnumInvalidExplicitTypeUnknownSupplied: ({
+ enumName
+ }) => `Supplied enum type is not valid. Use one of \`boolean\`, \`number\`, \`string\`, or \`symbol\` in enum \`${enumName}\`.`,
+ EnumInvalidMemberInitializerPrimaryType: ({
+ enumName,
+ memberName,
+ explicitType
+ }) => `Enum \`${enumName}\` has type \`${explicitType}\`, so the initializer of \`${memberName}\` needs to be a ${explicitType} literal.`,
+ EnumInvalidMemberInitializerSymbolType: ({
+ enumName,
+ memberName
+ }) => `Symbol enum members cannot be initialized. Use \`${memberName},\` in enum \`${enumName}\`.`,
+ EnumInvalidMemberInitializerUnknownType: ({
+ enumName,
+ memberName
+ }) => `The enum member initializer for \`${memberName}\` needs to be a literal (either a boolean, number, or string) in enum \`${enumName}\`.`,
+ EnumInvalidMemberName: ({
+ enumName,
+ memberName,
+ suggestion
+ }) => `Enum member names cannot start with lowercase 'a' through 'z'. Instead of using \`${memberName}\`, consider using \`${suggestion}\`, in enum \`${enumName}\`.`,
+ EnumNumberMemberNotInitialized: ({
+ enumName,
+ memberName
+ }) => `Number enum members need to be initialized, e.g. \`${memberName} = 1\` in enum \`${enumName}\`.`,
+ EnumStringMemberInconsistentlyInitialized: ({
+ enumName
+ }) => `String enum members need to consistently either all use initializers, or use no initializers, in enum \`${enumName}\`.`,
+ GetterMayNotHaveThisParam: "A getter cannot have a `this` parameter.",
+ ImportReflectionHasImportType: "An `import module` declaration can not use `type` or `typeof` keyword.",
+ ImportTypeShorthandOnlyInPureImport: "The `type` and `typeof` keywords on named imports can only be used on regular `import` statements. It cannot be used with `import type` or `import typeof` statements.",
+ InexactInsideExact: "Explicit inexact syntax cannot appear inside an explicit exact object type.",
+ InexactInsideNonObject: "Explicit inexact syntax cannot appear in class or interface definitions.",
+ InexactVariance: "Explicit inexact syntax cannot have variance.",
+ InvalidNonTypeImportInDeclareModule: "Imports within a `declare module` body must always be `import type` or `import typeof`.",
+ MissingTypeParamDefault: "Type parameter declaration needs a default, since a preceding type parameter declaration has a default.",
+ NestedDeclareModule: "`declare module` cannot be used inside another `declare module`.",
+ NestedFlowComment: "Cannot have a flow comment inside another flow comment.",
+ PatternIsOptional: Object.assign({
+ message: "A binding pattern parameter cannot be optional in an implementation signature."
+ }, {
+ reasonCode: "OptionalBindingPattern"
+ }),
+ SetterMayNotHaveThisParam: "A setter cannot have a `this` parameter.",
+ SpreadVariance: "Spread properties cannot have variance.",
+ ThisParamAnnotationRequired: "A type annotation is required for the `this` parameter.",
+ ThisParamBannedInConstructor: "Constructors cannot have a `this` parameter; constructors don't bind `this` like other functions.",
+ ThisParamMayNotBeOptional: "The `this` parameter cannot be optional.",
+ ThisParamMustBeFirst: "The `this` parameter must be the first function parameter.",
+ ThisParamNoDefault: "The `this` parameter may not have a default value.",
+ TypeBeforeInitializer: "Type annotations must come before default assignments, e.g. instead of `age = 25: number` use `age: number = 25`.",
+ TypeCastInPattern: "The type cast expression is expected to be wrapped with parenthesis.",
+ UnexpectedExplicitInexactInObject: "Explicit inexact syntax must appear at the end of an inexact object.",
+ UnexpectedReservedType: ({
+ reservedType
+ }) => `Unexpected reserved type ${reservedType}.`,
+ UnexpectedReservedUnderscore: "`_` is only allowed as a type argument to call or new.",
+ UnexpectedSpaceBetweenModuloChecks: "Spaces between `%` and `checks` are not allowed here.",
+ UnexpectedSpreadType: "Spread operator cannot appear in class or interface definitions.",
+ UnexpectedSubtractionOperand: 'Unexpected token, expected "number" or "bigint".',
+ UnexpectedTokenAfterTypeParameter: "Expected an arrow function after this type parameter declaration.",
+ UnexpectedTypeParameterBeforeAsyncArrowFunction: "Type parameters must come after the async keyword, e.g. instead of ` async () => {}`, use `async () => {}`.",
+ UnsupportedDeclareExportKind: ({
+ unsupportedExportKind,
+ suggestion
+ }) => `\`declare export ${unsupportedExportKind}\` is not supported. Use \`${suggestion}\` instead.`,
+ UnsupportedStatementInDeclareModule: "Only declares and type imports are allowed inside declare module.",
+ UnterminatedFlowComment: "Unterminated flow-comment."
+});
+function isEsModuleType(bodyElement) {
+ return bodyElement.type === "DeclareExportAllDeclaration" || bodyElement.type === "DeclareExportDeclaration" && (!bodyElement.declaration || bodyElement.declaration.type !== "TypeAlias" && bodyElement.declaration.type !== "InterfaceDeclaration");
+}
+function hasTypeImportKind(node) {
+ return node.importKind === "type" || node.importKind === "typeof";
+}
+const exportSuggestions = {
+ const: "declare export var",
+ let: "declare export var",
+ type: "export type",
+ interface: "export interface"
+};
+function partition(list, test) {
+ const list1 = [];
+ const list2 = [];
+ for (let i = 0; i < list.length; i++) {
+ (test(list[i], i, list) ? list1 : list2).push(list[i]);
+ }
+ return [list1, list2];
+}
+const FLOW_PRAGMA_REGEX = /\*?\s*@((?:no)?flow)\b/;
+var flow = superClass => class FlowParserMixin extends superClass {
+ constructor(...args) {
+ super(...args);
+ this.flowPragma = undefined;
+ }
+ getScopeHandler() {
+ return FlowScopeHandler;
+ }
+ shouldParseTypes() {
+ return this.getPluginOption("flow", "all") || this.flowPragma === "flow";
+ }
+ shouldParseEnums() {
+ return !!this.getPluginOption("flow", "enums");
+ }
+ finishToken(type, val) {
+ if (type !== 133 && type !== 13 && type !== 28) {
+ if (this.flowPragma === undefined) {
+ this.flowPragma = null;
+ }
+ }
+ super.finishToken(type, val);
+ }
+ addComment(comment) {
+ if (this.flowPragma === undefined) {
+ const matches = FLOW_PRAGMA_REGEX.exec(comment.value);
+ if (!matches) ;else if (matches[1] === "flow") {
+ this.flowPragma = "flow";
+ } else if (matches[1] === "noflow") {
+ this.flowPragma = "noflow";
+ } else {
+ throw new Error("Unexpected flow pragma");
+ }
+ }
+ super.addComment(comment);
+ }
+ flowParseTypeInitialiser(tok) {
+ const oldInType = this.state.inType;
+ this.state.inType = true;
+ this.expect(tok || 14);
+ const type = this.flowParseType();
+ this.state.inType = oldInType;
+ return type;
+ }
+ flowParsePredicate() {
+ const node = this.startNode();
+ const moduloLoc = this.state.startLoc;
+ this.next();
+ this.expectContextual(110);
+ if (this.state.lastTokStart > moduloLoc.index + 1) {
+ this.raise(FlowErrors.UnexpectedSpaceBetweenModuloChecks, {
+ at: moduloLoc
+ });
+ }
+ if (this.eat(10)) {
+ node.value = super.parseExpression();
+ this.expect(11);
+ return this.finishNode(node, "DeclaredPredicate");
+ } else {
+ return this.finishNode(node, "InferredPredicate");
+ }
+ }
+ flowParseTypeAndPredicateInitialiser() {
+ const oldInType = this.state.inType;
+ this.state.inType = true;
+ this.expect(14);
+ let type = null;
+ let predicate = null;
+ if (this.match(54)) {
+ this.state.inType = oldInType;
+ predicate = this.flowParsePredicate();
+ } else {
+ type = this.flowParseType();
+ this.state.inType = oldInType;
+ if (this.match(54)) {
+ predicate = this.flowParsePredicate();
+ }
+ }
+ return [type, predicate];
+ }
+ flowParseDeclareClass(node) {
+ this.next();
+ this.flowParseInterfaceish(node, true);
+ return this.finishNode(node, "DeclareClass");
+ }
+ flowParseDeclareFunction(node) {
+ this.next();
+ const id = node.id = this.parseIdentifier();
+ const typeNode = this.startNode();
+ const typeContainer = this.startNode();
+ if (this.match(47)) {
+ typeNode.typeParameters = this.flowParseTypeParameterDeclaration();
+ } else {
+ typeNode.typeParameters = null;
+ }
+ this.expect(10);
+ const tmp = this.flowParseFunctionTypeParams();
+ typeNode.params = tmp.params;
+ typeNode.rest = tmp.rest;
+ typeNode.this = tmp._this;
+ this.expect(11);
+ [typeNode.returnType, node.predicate] = this.flowParseTypeAndPredicateInitialiser();
+ typeContainer.typeAnnotation = this.finishNode(typeNode, "FunctionTypeAnnotation");
+ id.typeAnnotation = this.finishNode(typeContainer, "TypeAnnotation");
+ this.resetEndLocation(id);
+ this.semicolon();
+ this.scope.declareName(node.id.name, 2048, node.id.loc.start);
+ return this.finishNode(node, "DeclareFunction");
+ }
+ flowParseDeclare(node, insideModule) {
+ if (this.match(80)) {
+ return this.flowParseDeclareClass(node);
+ } else if (this.match(68)) {
+ return this.flowParseDeclareFunction(node);
+ } else if (this.match(74)) {
+ return this.flowParseDeclareVariable(node);
+ } else if (this.eatContextual(127)) {
+ if (this.match(16)) {
+ return this.flowParseDeclareModuleExports(node);
+ } else {
+ if (insideModule) {
+ this.raise(FlowErrors.NestedDeclareModule, {
+ at: this.state.lastTokStartLoc
+ });
+ }
+ return this.flowParseDeclareModule(node);
+ }
+ } else if (this.isContextual(130)) {
+ return this.flowParseDeclareTypeAlias(node);
+ } else if (this.isContextual(131)) {
+ return this.flowParseDeclareOpaqueType(node);
+ } else if (this.isContextual(129)) {
+ return this.flowParseDeclareInterface(node);
+ } else if (this.match(82)) {
+ return this.flowParseDeclareExportDeclaration(node, insideModule);
+ } else {
+ this.unexpected();
+ }
+ }
+ flowParseDeclareVariable(node) {
+ this.next();
+ node.id = this.flowParseTypeAnnotatableIdentifier(true);
+ this.scope.declareName(node.id.name, 5, node.id.loc.start);
+ this.semicolon();
+ return this.finishNode(node, "DeclareVariable");
+ }
+ flowParseDeclareModule(node) {
+ this.scope.enter(0);
+ if (this.match(133)) {
+ node.id = super.parseExprAtom();
+ } else {
+ node.id = this.parseIdentifier();
+ }
+ const bodyNode = node.body = this.startNode();
+ const body = bodyNode.body = [];
+ this.expect(5);
+ while (!this.match(8)) {
+ let bodyNode = this.startNode();
+ if (this.match(83)) {
+ this.next();
+ if (!this.isContextual(130) && !this.match(87)) {
+ this.raise(FlowErrors.InvalidNonTypeImportInDeclareModule, {
+ at: this.state.lastTokStartLoc
+ });
+ }
+ super.parseImport(bodyNode);
+ } else {
+ this.expectContextual(125, FlowErrors.UnsupportedStatementInDeclareModule);
+ bodyNode = this.flowParseDeclare(bodyNode, true);
+ }
+ body.push(bodyNode);
+ }
+ this.scope.exit();
+ this.expect(8);
+ this.finishNode(bodyNode, "BlockStatement");
+ let kind = null;
+ let hasModuleExport = false;
+ body.forEach(bodyElement => {
+ if (isEsModuleType(bodyElement)) {
+ if (kind === "CommonJS") {
+ this.raise(FlowErrors.AmbiguousDeclareModuleKind, {
+ at: bodyElement
+ });
+ }
+ kind = "ES";
+ } else if (bodyElement.type === "DeclareModuleExports") {
+ if (hasModuleExport) {
+ this.raise(FlowErrors.DuplicateDeclareModuleExports, {
+ at: bodyElement
+ });
+ }
+ if (kind === "ES") {
+ this.raise(FlowErrors.AmbiguousDeclareModuleKind, {
+ at: bodyElement
+ });
+ }
+ kind = "CommonJS";
+ hasModuleExport = true;
+ }
+ });
+ node.kind = kind || "CommonJS";
+ return this.finishNode(node, "DeclareModule");
+ }
+ flowParseDeclareExportDeclaration(node, insideModule) {
+ this.expect(82);
+ if (this.eat(65)) {
+ if (this.match(68) || this.match(80)) {
+ node.declaration = this.flowParseDeclare(this.startNode());
+ } else {
+ node.declaration = this.flowParseType();
+ this.semicolon();
+ }
+ node.default = true;
+ return this.finishNode(node, "DeclareExportDeclaration");
+ } else {
+ if (this.match(75) || this.isLet() || (this.isContextual(130) || this.isContextual(129)) && !insideModule) {
+ const label = this.state.value;
+ throw this.raise(FlowErrors.UnsupportedDeclareExportKind, {
+ at: this.state.startLoc,
+ unsupportedExportKind: label,
+ suggestion: exportSuggestions[label]
+ });
+ }
+ if (this.match(74) || this.match(68) || this.match(80) || this.isContextual(131)) {
+ node.declaration = this.flowParseDeclare(this.startNode());
+ node.default = false;
+ return this.finishNode(node, "DeclareExportDeclaration");
+ } else if (this.match(55) || this.match(5) || this.isContextual(129) || this.isContextual(130) || this.isContextual(131)) {
+ node = this.parseExport(node, null);
+ if (node.type === "ExportNamedDeclaration") {
+ node.type = "ExportDeclaration";
+ node.default = false;
+ delete node.exportKind;
+ }
+ node.type = "Declare" + node.type;
+ return node;
+ }
+ }
+ this.unexpected();
+ }
+ flowParseDeclareModuleExports(node) {
+ this.next();
+ this.expectContextual(111);
+ node.typeAnnotation = this.flowParseTypeAnnotation();
+ this.semicolon();
+ return this.finishNode(node, "DeclareModuleExports");
+ }
+ flowParseDeclareTypeAlias(node) {
+ this.next();
+ const finished = this.flowParseTypeAlias(node);
+ finished.type = "DeclareTypeAlias";
+ return finished;
+ }
+ flowParseDeclareOpaqueType(node) {
+ this.next();
+ const finished = this.flowParseOpaqueType(node, true);
+ finished.type = "DeclareOpaqueType";
+ return finished;
+ }
+ flowParseDeclareInterface(node) {
+ this.next();
+ this.flowParseInterfaceish(node, false);
+ return this.finishNode(node, "DeclareInterface");
+ }
+ flowParseInterfaceish(node, isClass) {
+ node.id = this.flowParseRestrictedIdentifier(!isClass, true);
+ this.scope.declareName(node.id.name, isClass ? 17 : 8201, node.id.loc.start);
+ if (this.match(47)) {
+ node.typeParameters = this.flowParseTypeParameterDeclaration();
+ } else {
+ node.typeParameters = null;
+ }
+ node.extends = [];
+ if (this.eat(81)) {
+ do {
+ node.extends.push(this.flowParseInterfaceExtends());
+ } while (!isClass && this.eat(12));
+ }
+ if (isClass) {
+ node.implements = [];
+ node.mixins = [];
+ if (this.eatContextual(117)) {
+ do {
+ node.mixins.push(this.flowParseInterfaceExtends());
+ } while (this.eat(12));
+ }
+ if (this.eatContextual(113)) {
+ do {
+ node.implements.push(this.flowParseInterfaceExtends());
+ } while (this.eat(12));
+ }
+ }
+ node.body = this.flowParseObjectType({
+ allowStatic: isClass,
+ allowExact: false,
+ allowSpread: false,
+ allowProto: isClass,
+ allowInexact: false
+ });
+ }
+ flowParseInterfaceExtends() {
+ const node = this.startNode();
+ node.id = this.flowParseQualifiedTypeIdentifier();
+ if (this.match(47)) {
+ node.typeParameters = this.flowParseTypeParameterInstantiation();
+ } else {
+ node.typeParameters = null;
+ }
+ return this.finishNode(node, "InterfaceExtends");
+ }
+ flowParseInterface(node) {
+ this.flowParseInterfaceish(node, false);
+ return this.finishNode(node, "InterfaceDeclaration");
+ }
+ checkNotUnderscore(word) {
+ if (word === "_") {
+ this.raise(FlowErrors.UnexpectedReservedUnderscore, {
+ at: this.state.startLoc
+ });
+ }
+ }
+ checkReservedType(word, startLoc, declaration) {
+ if (!reservedTypes.has(word)) return;
+ this.raise(declaration ? FlowErrors.AssignReservedType : FlowErrors.UnexpectedReservedType, {
+ at: startLoc,
+ reservedType: word
+ });
+ }
+ flowParseRestrictedIdentifier(liberal, declaration) {
+ this.checkReservedType(this.state.value, this.state.startLoc, declaration);
+ return this.parseIdentifier(liberal);
+ }
+ flowParseTypeAlias(node) {
+ node.id = this.flowParseRestrictedIdentifier(false, true);
+ this.scope.declareName(node.id.name, 8201, node.id.loc.start);
+ if (this.match(47)) {
+ node.typeParameters = this.flowParseTypeParameterDeclaration();
+ } else {
+ node.typeParameters = null;
+ }
+ node.right = this.flowParseTypeInitialiser(29);
+ this.semicolon();
+ return this.finishNode(node, "TypeAlias");
+ }
+ flowParseOpaqueType(node, declare) {
+ this.expectContextual(130);
+ node.id = this.flowParseRestrictedIdentifier(true, true);
+ this.scope.declareName(node.id.name, 8201, node.id.loc.start);
+ if (this.match(47)) {
+ node.typeParameters = this.flowParseTypeParameterDeclaration();
+ } else {
+ node.typeParameters = null;
+ }
+ node.supertype = null;
+ if (this.match(14)) {
+ node.supertype = this.flowParseTypeInitialiser(14);
+ }
+ node.impltype = null;
+ if (!declare) {
+ node.impltype = this.flowParseTypeInitialiser(29);
+ }
+ this.semicolon();
+ return this.finishNode(node, "OpaqueType");
+ }
+ flowParseTypeParameter(requireDefault = false) {
+ const nodeStartLoc = this.state.startLoc;
+ const node = this.startNode();
+ const variance = this.flowParseVariance();
+ const ident = this.flowParseTypeAnnotatableIdentifier();
+ node.name = ident.name;
+ node.variance = variance;
+ node.bound = ident.typeAnnotation;
+ if (this.match(29)) {
+ this.eat(29);
+ node.default = this.flowParseType();
+ } else {
+ if (requireDefault) {
+ this.raise(FlowErrors.MissingTypeParamDefault, {
+ at: nodeStartLoc
+ });
+ }
+ }
+ return this.finishNode(node, "TypeParameter");
+ }
+ flowParseTypeParameterDeclaration() {
+ const oldInType = this.state.inType;
+ const node = this.startNode();
+ node.params = [];
+ this.state.inType = true;
+ if (this.match(47) || this.match(142)) {
+ this.next();
+ } else {
+ this.unexpected();
+ }
+ let defaultRequired = false;
+ do {
+ const typeParameter = this.flowParseTypeParameter(defaultRequired);
+ node.params.push(typeParameter);
+ if (typeParameter.default) {
+ defaultRequired = true;
+ }
+ if (!this.match(48)) {
+ this.expect(12);
+ }
+ } while (!this.match(48));
+ this.expect(48);
+ this.state.inType = oldInType;
+ return this.finishNode(node, "TypeParameterDeclaration");
+ }
+ flowParseTypeParameterInstantiation() {
+ const node = this.startNode();
+ const oldInType = this.state.inType;
+ node.params = [];
+ this.state.inType = true;
+ this.expect(47);
+ const oldNoAnonFunctionType = this.state.noAnonFunctionType;
+ this.state.noAnonFunctionType = false;
+ while (!this.match(48)) {
+ node.params.push(this.flowParseType());
+ if (!this.match(48)) {
+ this.expect(12);
+ }
+ }
+ this.state.noAnonFunctionType = oldNoAnonFunctionType;
+ this.expect(48);
+ this.state.inType = oldInType;
+ return this.finishNode(node, "TypeParameterInstantiation");
+ }
+ flowParseTypeParameterInstantiationCallOrNew() {
+ const node = this.startNode();
+ const oldInType = this.state.inType;
+ node.params = [];
+ this.state.inType = true;
+ this.expect(47);
+ while (!this.match(48)) {
+ node.params.push(this.flowParseTypeOrImplicitInstantiation());
+ if (!this.match(48)) {
+ this.expect(12);
+ }
+ }
+ this.expect(48);
+ this.state.inType = oldInType;
+ return this.finishNode(node, "TypeParameterInstantiation");
+ }
+ flowParseInterfaceType() {
+ const node = this.startNode();
+ this.expectContextual(129);
+ node.extends = [];
+ if (this.eat(81)) {
+ do {
+ node.extends.push(this.flowParseInterfaceExtends());
+ } while (this.eat(12));
+ }
+ node.body = this.flowParseObjectType({
+ allowStatic: false,
+ allowExact: false,
+ allowSpread: false,
+ allowProto: false,
+ allowInexact: false
+ });
+ return this.finishNode(node, "InterfaceTypeAnnotation");
+ }
+ flowParseObjectPropertyKey() {
+ return this.match(134) || this.match(133) ? super.parseExprAtom() : this.parseIdentifier(true);
+ }
+ flowParseObjectTypeIndexer(node, isStatic, variance) {
+ node.static = isStatic;
+ if (this.lookahead().type === 14) {
+ node.id = this.flowParseObjectPropertyKey();
+ node.key = this.flowParseTypeInitialiser();
+ } else {
+ node.id = null;
+ node.key = this.flowParseType();
+ }
+ this.expect(3);
+ node.value = this.flowParseTypeInitialiser();
+ node.variance = variance;
+ return this.finishNode(node, "ObjectTypeIndexer");
+ }
+ flowParseObjectTypeInternalSlot(node, isStatic) {
+ node.static = isStatic;
+ node.id = this.flowParseObjectPropertyKey();
+ this.expect(3);
+ this.expect(3);
+ if (this.match(47) || this.match(10)) {
+ node.method = true;
+ node.optional = false;
+ node.value = this.flowParseObjectTypeMethodish(this.startNodeAt(node.loc.start));
+ } else {
+ node.method = false;
+ if (this.eat(17)) {
+ node.optional = true;
+ }
+ node.value = this.flowParseTypeInitialiser();
+ }
+ return this.finishNode(node, "ObjectTypeInternalSlot");
+ }
+ flowParseObjectTypeMethodish(node) {
+ node.params = [];
+ node.rest = null;
+ node.typeParameters = null;
+ node.this = null;
+ if (this.match(47)) {
+ node.typeParameters = this.flowParseTypeParameterDeclaration();
+ }
+ this.expect(10);
+ if (this.match(78)) {
+ node.this = this.flowParseFunctionTypeParam(true);
+ node.this.name = null;
+ if (!this.match(11)) {
+ this.expect(12);
+ }
+ }
+ while (!this.match(11) && !this.match(21)) {
+ node.params.push(this.flowParseFunctionTypeParam(false));
+ if (!this.match(11)) {
+ this.expect(12);
+ }
+ }
+ if (this.eat(21)) {
+ node.rest = this.flowParseFunctionTypeParam(false);
+ }
+ this.expect(11);
+ node.returnType = this.flowParseTypeInitialiser();
+ return this.finishNode(node, "FunctionTypeAnnotation");
+ }
+ flowParseObjectTypeCallProperty(node, isStatic) {
+ const valueNode = this.startNode();
+ node.static = isStatic;
+ node.value = this.flowParseObjectTypeMethodish(valueNode);
+ return this.finishNode(node, "ObjectTypeCallProperty");
+ }
+ flowParseObjectType({
+ allowStatic,
+ allowExact,
+ allowSpread,
+ allowProto,
+ allowInexact
+ }) {
+ const oldInType = this.state.inType;
+ this.state.inType = true;
+ const nodeStart = this.startNode();
+ nodeStart.callProperties = [];
+ nodeStart.properties = [];
+ nodeStart.indexers = [];
+ nodeStart.internalSlots = [];
+ let endDelim;
+ let exact;
+ let inexact = false;
+ if (allowExact && this.match(6)) {
+ this.expect(6);
+ endDelim = 9;
+ exact = true;
+ } else {
+ this.expect(5);
+ endDelim = 8;
+ exact = false;
+ }
+ nodeStart.exact = exact;
+ while (!this.match(endDelim)) {
+ let isStatic = false;
+ let protoStartLoc = null;
+ let inexactStartLoc = null;
+ const node = this.startNode();
+ if (allowProto && this.isContextual(118)) {
+ const lookahead = this.lookahead();
+ if (lookahead.type !== 14 && lookahead.type !== 17) {
+ this.next();
+ protoStartLoc = this.state.startLoc;
+ allowStatic = false;
+ }
+ }
+ if (allowStatic && this.isContextual(106)) {
+ const lookahead = this.lookahead();
+ if (lookahead.type !== 14 && lookahead.type !== 17) {
+ this.next();
+ isStatic = true;
+ }
+ }
+ const variance = this.flowParseVariance();
+ if (this.eat(0)) {
+ if (protoStartLoc != null) {
+ this.unexpected(protoStartLoc);
+ }
+ if (this.eat(0)) {
+ if (variance) {
+ this.unexpected(variance.loc.start);
+ }
+ nodeStart.internalSlots.push(this.flowParseObjectTypeInternalSlot(node, isStatic));
+ } else {
+ nodeStart.indexers.push(this.flowParseObjectTypeIndexer(node, isStatic, variance));
+ }
+ } else if (this.match(10) || this.match(47)) {
+ if (protoStartLoc != null) {
+ this.unexpected(protoStartLoc);
+ }
+ if (variance) {
+ this.unexpected(variance.loc.start);
+ }
+ nodeStart.callProperties.push(this.flowParseObjectTypeCallProperty(node, isStatic));
+ } else {
+ let kind = "init";
+ if (this.isContextual(99) || this.isContextual(104)) {
+ const lookahead = this.lookahead();
+ if (tokenIsLiteralPropertyName(lookahead.type)) {
+ kind = this.state.value;
+ this.next();
+ }
+ }
+ const propOrInexact = this.flowParseObjectTypeProperty(node, isStatic, protoStartLoc, variance, kind, allowSpread, allowInexact != null ? allowInexact : !exact);
+ if (propOrInexact === null) {
+ inexact = true;
+ inexactStartLoc = this.state.lastTokStartLoc;
+ } else {
+ nodeStart.properties.push(propOrInexact);
+ }
+ }
+ this.flowObjectTypeSemicolon();
+ if (inexactStartLoc && !this.match(8) && !this.match(9)) {
+ this.raise(FlowErrors.UnexpectedExplicitInexactInObject, {
+ at: inexactStartLoc
+ });
+ }
+ }
+ this.expect(endDelim);
+ if (allowSpread) {
+ nodeStart.inexact = inexact;
+ }
+ const out = this.finishNode(nodeStart, "ObjectTypeAnnotation");
+ this.state.inType = oldInType;
+ return out;
+ }
+ flowParseObjectTypeProperty(node, isStatic, protoStartLoc, variance, kind, allowSpread, allowInexact) {
+ if (this.eat(21)) {
+ const isInexactToken = this.match(12) || this.match(13) || this.match(8) || this.match(9);
+ if (isInexactToken) {
+ if (!allowSpread) {
+ this.raise(FlowErrors.InexactInsideNonObject, {
+ at: this.state.lastTokStartLoc
+ });
+ } else if (!allowInexact) {
+ this.raise(FlowErrors.InexactInsideExact, {
+ at: this.state.lastTokStartLoc
+ });
+ }
+ if (variance) {
+ this.raise(FlowErrors.InexactVariance, {
+ at: variance
+ });
+ }
+ return null;
+ }
+ if (!allowSpread) {
+ this.raise(FlowErrors.UnexpectedSpreadType, {
+ at: this.state.lastTokStartLoc
+ });
+ }
+ if (protoStartLoc != null) {
+ this.unexpected(protoStartLoc);
+ }
+ if (variance) {
+ this.raise(FlowErrors.SpreadVariance, {
+ at: variance
+ });
+ }
+ node.argument = this.flowParseType();
+ return this.finishNode(node, "ObjectTypeSpreadProperty");
+ } else {
+ node.key = this.flowParseObjectPropertyKey();
+ node.static = isStatic;
+ node.proto = protoStartLoc != null;
+ node.kind = kind;
+ let optional = false;
+ if (this.match(47) || this.match(10)) {
+ node.method = true;
+ if (protoStartLoc != null) {
+ this.unexpected(protoStartLoc);
+ }
+ if (variance) {
+ this.unexpected(variance.loc.start);
+ }
+ node.value = this.flowParseObjectTypeMethodish(this.startNodeAt(node.loc.start));
+ if (kind === "get" || kind === "set") {
+ this.flowCheckGetterSetterParams(node);
+ }
+ if (!allowSpread && node.key.name === "constructor" && node.value.this) {
+ this.raise(FlowErrors.ThisParamBannedInConstructor, {
+ at: node.value.this
+ });
+ }
+ } else {
+ if (kind !== "init") this.unexpected();
+ node.method = false;
+ if (this.eat(17)) {
+ optional = true;
+ }
+ node.value = this.flowParseTypeInitialiser();
+ node.variance = variance;
+ }
+ node.optional = optional;
+ return this.finishNode(node, "ObjectTypeProperty");
+ }
+ }
+ flowCheckGetterSetterParams(property) {
+ const paramCount = property.kind === "get" ? 0 : 1;
+ const length = property.value.params.length + (property.value.rest ? 1 : 0);
+ if (property.value.this) {
+ this.raise(property.kind === "get" ? FlowErrors.GetterMayNotHaveThisParam : FlowErrors.SetterMayNotHaveThisParam, {
+ at: property.value.this
+ });
+ }
+ if (length !== paramCount) {
+ this.raise(property.kind === "get" ? Errors.BadGetterArity : Errors.BadSetterArity, {
+ at: property
+ });
+ }
+ if (property.kind === "set" && property.value.rest) {
+ this.raise(Errors.BadSetterRestParameter, {
+ at: property
+ });
+ }
+ }
+ flowObjectTypeSemicolon() {
+ if (!this.eat(13) && !this.eat(12) && !this.match(8) && !this.match(9)) {
+ this.unexpected();
+ }
+ }
+ flowParseQualifiedTypeIdentifier(startLoc, id) {
+ var _startLoc;
+ (_startLoc = startLoc) != null ? _startLoc : startLoc = this.state.startLoc;
+ let node = id || this.flowParseRestrictedIdentifier(true);
+ while (this.eat(16)) {
+ const node2 = this.startNodeAt(startLoc);
+ node2.qualification = node;
+ node2.id = this.flowParseRestrictedIdentifier(true);
+ node = this.finishNode(node2, "QualifiedTypeIdentifier");
+ }
+ return node;
+ }
+ flowParseGenericType(startLoc, id) {
+ const node = this.startNodeAt(startLoc);
+ node.typeParameters = null;
+ node.id = this.flowParseQualifiedTypeIdentifier(startLoc, id);
+ if (this.match(47)) {
+ node.typeParameters = this.flowParseTypeParameterInstantiation();
+ }
+ return this.finishNode(node, "GenericTypeAnnotation");
+ }
+ flowParseTypeofType() {
+ const node = this.startNode();
+ this.expect(87);
+ node.argument = this.flowParsePrimaryType();
+ return this.finishNode(node, "TypeofTypeAnnotation");
+ }
+ flowParseTupleType() {
+ const node = this.startNode();
+ node.types = [];
+ this.expect(0);
+ while (this.state.pos < this.length && !this.match(3)) {
+ node.types.push(this.flowParseType());
+ if (this.match(3)) break;
+ this.expect(12);
+ }
+ this.expect(3);
+ return this.finishNode(node, "TupleTypeAnnotation");
+ }
+ flowParseFunctionTypeParam(first) {
+ let name = null;
+ let optional = false;
+ let typeAnnotation = null;
+ const node = this.startNode();
+ const lh = this.lookahead();
+ const isThis = this.state.type === 78;
+ if (lh.type === 14 || lh.type === 17) {
+ if (isThis && !first) {
+ this.raise(FlowErrors.ThisParamMustBeFirst, {
+ at: node
+ });
+ }
+ name = this.parseIdentifier(isThis);
+ if (this.eat(17)) {
+ optional = true;
+ if (isThis) {
+ this.raise(FlowErrors.ThisParamMayNotBeOptional, {
+ at: node
+ });
+ }
+ }
+ typeAnnotation = this.flowParseTypeInitialiser();
+ } else {
+ typeAnnotation = this.flowParseType();
+ }
+ node.name = name;
+ node.optional = optional;
+ node.typeAnnotation = typeAnnotation;
+ return this.finishNode(node, "FunctionTypeParam");
+ }
+ reinterpretTypeAsFunctionTypeParam(type) {
+ const node = this.startNodeAt(type.loc.start);
+ node.name = null;
+ node.optional = false;
+ node.typeAnnotation = type;
+ return this.finishNode(node, "FunctionTypeParam");
+ }
+ flowParseFunctionTypeParams(params = []) {
+ let rest = null;
+ let _this = null;
+ if (this.match(78)) {
+ _this = this.flowParseFunctionTypeParam(true);
+ _this.name = null;
+ if (!this.match(11)) {
+ this.expect(12);
+ }
+ }
+ while (!this.match(11) && !this.match(21)) {
+ params.push(this.flowParseFunctionTypeParam(false));
+ if (!this.match(11)) {
+ this.expect(12);
+ }
+ }
+ if (this.eat(21)) {
+ rest = this.flowParseFunctionTypeParam(false);
+ }
+ return {
+ params,
+ rest,
+ _this
+ };
+ }
+ flowIdentToTypeAnnotation(startLoc, node, id) {
+ switch (id.name) {
+ case "any":
+ return this.finishNode(node, "AnyTypeAnnotation");
+ case "bool":
+ case "boolean":
+ return this.finishNode(node, "BooleanTypeAnnotation");
+ case "mixed":
+ return this.finishNode(node, "MixedTypeAnnotation");
+ case "empty":
+ return this.finishNode(node, "EmptyTypeAnnotation");
+ case "number":
+ return this.finishNode(node, "NumberTypeAnnotation");
+ case "string":
+ return this.finishNode(node, "StringTypeAnnotation");
+ case "symbol":
+ return this.finishNode(node, "SymbolTypeAnnotation");
+ default:
+ this.checkNotUnderscore(id.name);
+ return this.flowParseGenericType(startLoc, id);
+ }
+ }
+ flowParsePrimaryType() {
+ const startLoc = this.state.startLoc;
+ const node = this.startNode();
+ let tmp;
+ let type;
+ let isGroupedType = false;
+ const oldNoAnonFunctionType = this.state.noAnonFunctionType;
+ switch (this.state.type) {
+ case 5:
+ return this.flowParseObjectType({
+ allowStatic: false,
+ allowExact: false,
+ allowSpread: true,
+ allowProto: false,
+ allowInexact: true
+ });
+ case 6:
+ return this.flowParseObjectType({
+ allowStatic: false,
+ allowExact: true,
+ allowSpread: true,
+ allowProto: false,
+ allowInexact: false
+ });
+ case 0:
+ this.state.noAnonFunctionType = false;
+ type = this.flowParseTupleType();
+ this.state.noAnonFunctionType = oldNoAnonFunctionType;
+ return type;
+ case 47:
+ node.typeParameters = this.flowParseTypeParameterDeclaration();
+ this.expect(10);
+ tmp = this.flowParseFunctionTypeParams();
+ node.params = tmp.params;
+ node.rest = tmp.rest;
+ node.this = tmp._this;
+ this.expect(11);
+ this.expect(19);
+ node.returnType = this.flowParseType();
+ return this.finishNode(node, "FunctionTypeAnnotation");
+ case 10:
+ this.next();
+ if (!this.match(11) && !this.match(21)) {
+ if (tokenIsIdentifier(this.state.type) || this.match(78)) {
+ const token = this.lookahead().type;
+ isGroupedType = token !== 17 && token !== 14;
+ } else {
+ isGroupedType = true;
+ }
+ }
+ if (isGroupedType) {
+ this.state.noAnonFunctionType = false;
+ type = this.flowParseType();
+ this.state.noAnonFunctionType = oldNoAnonFunctionType;
+ if (this.state.noAnonFunctionType || !(this.match(12) || this.match(11) && this.lookahead().type === 19)) {
+ this.expect(11);
+ return type;
+ } else {
+ this.eat(12);
+ }
+ }
+ if (type) {
+ tmp = this.flowParseFunctionTypeParams([this.reinterpretTypeAsFunctionTypeParam(type)]);
+ } else {
+ tmp = this.flowParseFunctionTypeParams();
+ }
+ node.params = tmp.params;
+ node.rest = tmp.rest;
+ node.this = tmp._this;
+ this.expect(11);
+ this.expect(19);
+ node.returnType = this.flowParseType();
+ node.typeParameters = null;
+ return this.finishNode(node, "FunctionTypeAnnotation");
+ case 133:
+ return this.parseLiteral(this.state.value, "StringLiteralTypeAnnotation");
+ case 85:
+ case 86:
+ node.value = this.match(85);
+ this.next();
+ return this.finishNode(node, "BooleanLiteralTypeAnnotation");
+ case 53:
+ if (this.state.value === "-") {
+ this.next();
+ if (this.match(134)) {
+ return this.parseLiteralAtNode(-this.state.value, "NumberLiteralTypeAnnotation", node);
+ }
+ if (this.match(135)) {
+ return this.parseLiteralAtNode(-this.state.value, "BigIntLiteralTypeAnnotation", node);
+ }
+ throw this.raise(FlowErrors.UnexpectedSubtractionOperand, {
+ at: this.state.startLoc
+ });
+ }
+ this.unexpected();
+ return;
+ case 134:
+ return this.parseLiteral(this.state.value, "NumberLiteralTypeAnnotation");
+ case 135:
+ return this.parseLiteral(this.state.value, "BigIntLiteralTypeAnnotation");
+ case 88:
+ this.next();
+ return this.finishNode(node, "VoidTypeAnnotation");
+ case 84:
+ this.next();
+ return this.finishNode(node, "NullLiteralTypeAnnotation");
+ case 78:
+ this.next();
+ return this.finishNode(node, "ThisTypeAnnotation");
+ case 55:
+ this.next();
+ return this.finishNode(node, "ExistsTypeAnnotation");
+ case 87:
+ return this.flowParseTypeofType();
+ default:
+ if (tokenIsKeyword(this.state.type)) {
+ const label = tokenLabelName(this.state.type);
+ this.next();
+ return super.createIdentifier(node, label);
+ } else if (tokenIsIdentifier(this.state.type)) {
+ if (this.isContextual(129)) {
+ return this.flowParseInterfaceType();
+ }
+ return this.flowIdentToTypeAnnotation(startLoc, node, this.parseIdentifier());
+ }
+ }
+ this.unexpected();
+ }
+ flowParsePostfixType() {
+ const startLoc = this.state.startLoc;
+ let type = this.flowParsePrimaryType();
+ let seenOptionalIndexedAccess = false;
+ while ((this.match(0) || this.match(18)) && !this.canInsertSemicolon()) {
+ const node = this.startNodeAt(startLoc);
+ const optional = this.eat(18);
+ seenOptionalIndexedAccess = seenOptionalIndexedAccess || optional;
+ this.expect(0);
+ if (!optional && this.match(3)) {
+ node.elementType = type;
+ this.next();
+ type = this.finishNode(node, "ArrayTypeAnnotation");
+ } else {
+ node.objectType = type;
+ node.indexType = this.flowParseType();
+ this.expect(3);
+ if (seenOptionalIndexedAccess) {
+ node.optional = optional;
+ type = this.finishNode(node, "OptionalIndexedAccessType");
+ } else {
+ type = this.finishNode(node, "IndexedAccessType");
+ }
+ }
+ }
+ return type;
+ }
+ flowParsePrefixType() {
+ const node = this.startNode();
+ if (this.eat(17)) {
+ node.typeAnnotation = this.flowParsePrefixType();
+ return this.finishNode(node, "NullableTypeAnnotation");
+ } else {
+ return this.flowParsePostfixType();
+ }
+ }
+ flowParseAnonFunctionWithoutParens() {
+ const param = this.flowParsePrefixType();
+ if (!this.state.noAnonFunctionType && this.eat(19)) {
+ const node = this.startNodeAt(param.loc.start);
+ node.params = [this.reinterpretTypeAsFunctionTypeParam(param)];
+ node.rest = null;
+ node.this = null;
+ node.returnType = this.flowParseType();
+ node.typeParameters = null;
+ return this.finishNode(node, "FunctionTypeAnnotation");
+ }
+ return param;
+ }
+ flowParseIntersectionType() {
+ const node = this.startNode();
+ this.eat(45);
+ const type = this.flowParseAnonFunctionWithoutParens();
+ node.types = [type];
+ while (this.eat(45)) {
+ node.types.push(this.flowParseAnonFunctionWithoutParens());
+ }
+ return node.types.length === 1 ? type : this.finishNode(node, "IntersectionTypeAnnotation");
+ }
+ flowParseUnionType() {
+ const node = this.startNode();
+ this.eat(43);
+ const type = this.flowParseIntersectionType();
+ node.types = [type];
+ while (this.eat(43)) {
+ node.types.push(this.flowParseIntersectionType());
+ }
+ return node.types.length === 1 ? type : this.finishNode(node, "UnionTypeAnnotation");
+ }
+ flowParseType() {
+ const oldInType = this.state.inType;
+ this.state.inType = true;
+ const type = this.flowParseUnionType();
+ this.state.inType = oldInType;
+ return type;
+ }
+ flowParseTypeOrImplicitInstantiation() {
+ if (this.state.type === 132 && this.state.value === "_") {
+ const startLoc = this.state.startLoc;
+ const node = this.parseIdentifier();
+ return this.flowParseGenericType(startLoc, node);
+ } else {
+ return this.flowParseType();
+ }
+ }
+ flowParseTypeAnnotation() {
+ const node = this.startNode();
+ node.typeAnnotation = this.flowParseTypeInitialiser();
+ return this.finishNode(node, "TypeAnnotation");
+ }
+ flowParseTypeAnnotatableIdentifier(allowPrimitiveOverride) {
+ const ident = allowPrimitiveOverride ? this.parseIdentifier() : this.flowParseRestrictedIdentifier();
+ if (this.match(14)) {
+ ident.typeAnnotation = this.flowParseTypeAnnotation();
+ this.resetEndLocation(ident);
+ }
+ return ident;
+ }
+ typeCastToParameter(node) {
+ node.expression.typeAnnotation = node.typeAnnotation;
+ this.resetEndLocation(node.expression, node.typeAnnotation.loc.end);
+ return node.expression;
+ }
+ flowParseVariance() {
+ let variance = null;
+ if (this.match(53)) {
+ variance = this.startNode();
+ if (this.state.value === "+") {
+ variance.kind = "plus";
+ } else {
+ variance.kind = "minus";
+ }
+ this.next();
+ return this.finishNode(variance, "Variance");
+ }
+ return variance;
+ }
+ parseFunctionBody(node, allowExpressionBody, isMethod = false) {
+ if (allowExpressionBody) {
+ this.forwardNoArrowParamsConversionAt(node, () => super.parseFunctionBody(node, true, isMethod));
+ return;
+ }
+ super.parseFunctionBody(node, false, isMethod);
+ }
+ parseFunctionBodyAndFinish(node, type, isMethod = false) {
+ if (this.match(14)) {
+ const typeNode = this.startNode();
+ [typeNode.typeAnnotation, node.predicate] = this.flowParseTypeAndPredicateInitialiser();
+ node.returnType = typeNode.typeAnnotation ? this.finishNode(typeNode, "TypeAnnotation") : null;
+ }
+ return super.parseFunctionBodyAndFinish(node, type, isMethod);
+ }
+ parseStatementLike(flags) {
+ if (this.state.strict && this.isContextual(129)) {
+ const lookahead = this.lookahead();
+ if (tokenIsKeywordOrIdentifier(lookahead.type)) {
+ const node = this.startNode();
+ this.next();
+ return this.flowParseInterface(node);
+ }
+ } else if (this.shouldParseEnums() && this.isContextual(126)) {
+ const node = this.startNode();
+ this.next();
+ return this.flowParseEnumDeclaration(node);
+ }
+ const stmt = super.parseStatementLike(flags);
+ if (this.flowPragma === undefined && !this.isValidDirective(stmt)) {
+ this.flowPragma = null;
+ }
+ return stmt;
+ }
+ parseExpressionStatement(node, expr, decorators) {
+ if (expr.type === "Identifier") {
+ if (expr.name === "declare") {
+ if (this.match(80) || tokenIsIdentifier(this.state.type) || this.match(68) || this.match(74) || this.match(82)) {
+ return this.flowParseDeclare(node);
+ }
+ } else if (tokenIsIdentifier(this.state.type)) {
+ if (expr.name === "interface") {
+ return this.flowParseInterface(node);
+ } else if (expr.name === "type") {
+ return this.flowParseTypeAlias(node);
+ } else if (expr.name === "opaque") {
+ return this.flowParseOpaqueType(node, false);
+ }
+ }
+ }
+ return super.parseExpressionStatement(node, expr, decorators);
+ }
+ shouldParseExportDeclaration() {
+ const {
+ type
+ } = this.state;
+ if (tokenIsFlowInterfaceOrTypeOrOpaque(type) || this.shouldParseEnums() && type === 126) {
+ return !this.state.containsEsc;
+ }
+ return super.shouldParseExportDeclaration();
+ }
+ isExportDefaultSpecifier() {
+ const {
+ type
+ } = this.state;
+ if (tokenIsFlowInterfaceOrTypeOrOpaque(type) || this.shouldParseEnums() && type === 126) {
+ return this.state.containsEsc;
+ }
+ return super.isExportDefaultSpecifier();
+ }
+ parseExportDefaultExpression() {
+ if (this.shouldParseEnums() && this.isContextual(126)) {
+ const node = this.startNode();
+ this.next();
+ return this.flowParseEnumDeclaration(node);
+ }
+ return super.parseExportDefaultExpression();
+ }
+ parseConditional(expr, startLoc, refExpressionErrors) {
+ if (!this.match(17)) return expr;
+ if (this.state.maybeInArrowParameters) {
+ const nextCh = this.lookaheadCharCode();
+ if (nextCh === 44 || nextCh === 61 || nextCh === 58 || nextCh === 41) {
+ this.setOptionalParametersError(refExpressionErrors);
+ return expr;
+ }
+ }
+ this.expect(17);
+ const state = this.state.clone();
+ const originalNoArrowAt = this.state.noArrowAt;
+ const node = this.startNodeAt(startLoc);
+ let {
+ consequent,
+ failed
+ } = this.tryParseConditionalConsequent();
+ let [valid, invalid] = this.getArrowLikeExpressions(consequent);
+ if (failed || invalid.length > 0) {
+ const noArrowAt = [...originalNoArrowAt];
+ if (invalid.length > 0) {
+ this.state = state;
+ this.state.noArrowAt = noArrowAt;
+ for (let i = 0; i < invalid.length; i++) {
+ noArrowAt.push(invalid[i].start);
+ }
+ ({
+ consequent,
+ failed
+ } = this.tryParseConditionalConsequent());
+ [valid, invalid] = this.getArrowLikeExpressions(consequent);
+ }
+ if (failed && valid.length > 1) {
+ this.raise(FlowErrors.AmbiguousConditionalArrow, {
+ at: state.startLoc
+ });
+ }
+ if (failed && valid.length === 1) {
+ this.state = state;
+ noArrowAt.push(valid[0].start);
+ this.state.noArrowAt = noArrowAt;
+ ({
+ consequent,
+ failed
+ } = this.tryParseConditionalConsequent());
+ }
+ }
+ this.getArrowLikeExpressions(consequent, true);
+ this.state.noArrowAt = originalNoArrowAt;
+ this.expect(14);
+ node.test = expr;
+ node.consequent = consequent;
+ node.alternate = this.forwardNoArrowParamsConversionAt(node, () => this.parseMaybeAssign(undefined, undefined));
+ return this.finishNode(node, "ConditionalExpression");
+ }
+ tryParseConditionalConsequent() {
+ this.state.noArrowParamsConversionAt.push(this.state.start);
+ const consequent = this.parseMaybeAssignAllowIn();
+ const failed = !this.match(14);
+ this.state.noArrowParamsConversionAt.pop();
+ return {
+ consequent,
+ failed
+ };
+ }
+ getArrowLikeExpressions(node, disallowInvalid) {
+ const stack = [node];
+ const arrows = [];
+ while (stack.length !== 0) {
+ const node = stack.pop();
+ if (node.type === "ArrowFunctionExpression") {
+ if (node.typeParameters || !node.returnType) {
+ this.finishArrowValidation(node);
+ } else {
+ arrows.push(node);
+ }
+ stack.push(node.body);
+ } else if (node.type === "ConditionalExpression") {
+ stack.push(node.consequent);
+ stack.push(node.alternate);
+ }
+ }
+ if (disallowInvalid) {
+ arrows.forEach(node => this.finishArrowValidation(node));
+ return [arrows, []];
+ }
+ return partition(arrows, node => node.params.every(param => this.isAssignable(param, true)));
+ }
+ finishArrowValidation(node) {
+ var _node$extra;
+ this.toAssignableList(node.params, (_node$extra = node.extra) == null ? void 0 : _node$extra.trailingCommaLoc, false);
+ this.scope.enter(2 | 4);
+ super.checkParams(node, false, true);
+ this.scope.exit();
+ }
+ forwardNoArrowParamsConversionAt(node, parse) {
+ let result;
+ if (this.state.noArrowParamsConversionAt.indexOf(node.start) !== -1) {
+ this.state.noArrowParamsConversionAt.push(this.state.start);
+ result = parse();
+ this.state.noArrowParamsConversionAt.pop();
+ } else {
+ result = parse();
+ }
+ return result;
+ }
+ parseParenItem(node, startLoc) {
+ node = super.parseParenItem(node, startLoc);
+ if (this.eat(17)) {
+ node.optional = true;
+ this.resetEndLocation(node);
+ }
+ if (this.match(14)) {
+ const typeCastNode = this.startNodeAt(startLoc);
+ typeCastNode.expression = node;
+ typeCastNode.typeAnnotation = this.flowParseTypeAnnotation();
+ return this.finishNode(typeCastNode, "TypeCastExpression");
+ }
+ return node;
+ }
+ assertModuleNodeAllowed(node) {
+ if (node.type === "ImportDeclaration" && (node.importKind === "type" || node.importKind === "typeof") || node.type === "ExportNamedDeclaration" && node.exportKind === "type" || node.type === "ExportAllDeclaration" && node.exportKind === "type") {
+ return;
+ }
+ super.assertModuleNodeAllowed(node);
+ }
+ parseExportDeclaration(node) {
+ if (this.isContextual(130)) {
+ node.exportKind = "type";
+ const declarationNode = this.startNode();
+ this.next();
+ if (this.match(5)) {
+ node.specifiers = this.parseExportSpecifiers(true);
+ super.parseExportFrom(node);
+ return null;
+ } else {
+ return this.flowParseTypeAlias(declarationNode);
+ }
+ } else if (this.isContextual(131)) {
+ node.exportKind = "type";
+ const declarationNode = this.startNode();
+ this.next();
+ return this.flowParseOpaqueType(declarationNode, false);
+ } else if (this.isContextual(129)) {
+ node.exportKind = "type";
+ const declarationNode = this.startNode();
+ this.next();
+ return this.flowParseInterface(declarationNode);
+ } else if (this.shouldParseEnums() && this.isContextual(126)) {
+ node.exportKind = "value";
+ const declarationNode = this.startNode();
+ this.next();
+ return this.flowParseEnumDeclaration(declarationNode);
+ } else {
+ return super.parseExportDeclaration(node);
+ }
+ }
+ eatExportStar(node) {
+ if (super.eatExportStar(node)) return true;
+ if (this.isContextual(130) && this.lookahead().type === 55) {
+ node.exportKind = "type";
+ this.next();
+ this.next();
+ return true;
+ }
+ return false;
+ }
+ maybeParseExportNamespaceSpecifier(node) {
+ const {
+ startLoc
+ } = this.state;
+ const hasNamespace = super.maybeParseExportNamespaceSpecifier(node);
+ if (hasNamespace && node.exportKind === "type") {
+ this.unexpected(startLoc);
+ }
+ return hasNamespace;
+ }
+ parseClassId(node, isStatement, optionalId) {
+ super.parseClassId(node, isStatement, optionalId);
+ if (this.match(47)) {
+ node.typeParameters = this.flowParseTypeParameterDeclaration();
+ }
+ }
+ parseClassMember(classBody, member, state) {
+ const {
+ startLoc
+ } = this.state;
+ if (this.isContextual(125)) {
+ if (super.parseClassMemberFromModifier(classBody, member)) {
+ return;
+ }
+ member.declare = true;
+ }
+ super.parseClassMember(classBody, member, state);
+ if (member.declare) {
+ if (member.type !== "ClassProperty" && member.type !== "ClassPrivateProperty" && member.type !== "PropertyDefinition") {
+ this.raise(FlowErrors.DeclareClassElement, {
+ at: startLoc
+ });
+ } else if (member.value) {
+ this.raise(FlowErrors.DeclareClassFieldInitializer, {
+ at: member.value
+ });
+ }
+ }
+ }
+ isIterator(word) {
+ return word === "iterator" || word === "asyncIterator";
+ }
+ readIterator() {
+ const word = super.readWord1();
+ const fullWord = "@@" + word;
+ if (!this.isIterator(word) || !this.state.inType) {
+ this.raise(Errors.InvalidIdentifier, {
+ at: this.state.curPosition(),
+ identifierName: fullWord
+ });
+ }
+ this.finishToken(132, fullWord);
+ }
+ getTokenFromCode(code) {
+ const next = this.input.charCodeAt(this.state.pos + 1);
+ if (code === 123 && next === 124) {
+ this.finishOp(6, 2);
+ } else if (this.state.inType && (code === 62 || code === 60)) {
+ this.finishOp(code === 62 ? 48 : 47, 1);
+ } else if (this.state.inType && code === 63) {
+ if (next === 46) {
+ this.finishOp(18, 2);
+ } else {
+ this.finishOp(17, 1);
+ }
+ } else if (isIteratorStart(code, next, this.input.charCodeAt(this.state.pos + 2))) {
+ this.state.pos += 2;
+ this.readIterator();
+ } else {
+ super.getTokenFromCode(code);
+ }
+ }
+ isAssignable(node, isBinding) {
+ if (node.type === "TypeCastExpression") {
+ return this.isAssignable(node.expression, isBinding);
+ } else {
+ return super.isAssignable(node, isBinding);
+ }
+ }
+ toAssignable(node, isLHS = false) {
+ if (!isLHS && node.type === "AssignmentExpression" && node.left.type === "TypeCastExpression") {
+ node.left = this.typeCastToParameter(node.left);
+ }
+ super.toAssignable(node, isLHS);
+ }
+ toAssignableList(exprList, trailingCommaLoc, isLHS) {
+ for (let i = 0; i < exprList.length; i++) {
+ const expr = exprList[i];
+ if ((expr == null ? void 0 : expr.type) === "TypeCastExpression") {
+ exprList[i] = this.typeCastToParameter(expr);
+ }
+ }
+ super.toAssignableList(exprList, trailingCommaLoc, isLHS);
+ }
+ toReferencedList(exprList, isParenthesizedExpr) {
+ for (let i = 0; i < exprList.length; i++) {
+ var _expr$extra;
+ const expr = exprList[i];
+ if (expr && expr.type === "TypeCastExpression" && !((_expr$extra = expr.extra) != null && _expr$extra.parenthesized) && (exprList.length > 1 || !isParenthesizedExpr)) {
+ this.raise(FlowErrors.TypeCastInPattern, {
+ at: expr.typeAnnotation
+ });
+ }
+ }
+ return exprList;
+ }
+ parseArrayLike(close, canBePattern, isTuple, refExpressionErrors) {
+ const node = super.parseArrayLike(close, canBePattern, isTuple, refExpressionErrors);
+ if (canBePattern && !this.state.maybeInArrowParameters) {
+ this.toReferencedList(node.elements);
+ }
+ return node;
+ }
+ isValidLVal(type, isParenthesized, binding) {
+ return type === "TypeCastExpression" || super.isValidLVal(type, isParenthesized, binding);
+ }
+ parseClassProperty(node) {
+ if (this.match(14)) {
+ node.typeAnnotation = this.flowParseTypeAnnotation();
+ }
+ return super.parseClassProperty(node);
+ }
+ parseClassPrivateProperty(node) {
+ if (this.match(14)) {
+ node.typeAnnotation = this.flowParseTypeAnnotation();
+ }
+ return super.parseClassPrivateProperty(node);
+ }
+ isClassMethod() {
+ return this.match(47) || super.isClassMethod();
+ }
+ isClassProperty() {
+ return this.match(14) || super.isClassProperty();
+ }
+ isNonstaticConstructor(method) {
+ return !this.match(14) && super.isNonstaticConstructor(method);
+ }
+ pushClassMethod(classBody, method, isGenerator, isAsync, isConstructor, allowsDirectSuper) {
+ if (method.variance) {
+ this.unexpected(method.variance.loc.start);
+ }
+ delete method.variance;
+ if (this.match(47)) {
+ method.typeParameters = this.flowParseTypeParameterDeclaration();
+ }
+ super.pushClassMethod(classBody, method, isGenerator, isAsync, isConstructor, allowsDirectSuper);
+ if (method.params && isConstructor) {
+ const params = method.params;
+ if (params.length > 0 && this.isThisParam(params[0])) {
+ this.raise(FlowErrors.ThisParamBannedInConstructor, {
+ at: method
+ });
+ }
+ } else if (method.type === "MethodDefinition" && isConstructor && method.value.params) {
+ const params = method.value.params;
+ if (params.length > 0 && this.isThisParam(params[0])) {
+ this.raise(FlowErrors.ThisParamBannedInConstructor, {
+ at: method
+ });
+ }
+ }
+ }
+ pushClassPrivateMethod(classBody, method, isGenerator, isAsync) {
+ if (method.variance) {
+ this.unexpected(method.variance.loc.start);
+ }
+ delete method.variance;
+ if (this.match(47)) {
+ method.typeParameters = this.flowParseTypeParameterDeclaration();
+ }
+ super.pushClassPrivateMethod(classBody, method, isGenerator, isAsync);
+ }
+ parseClassSuper(node) {
+ super.parseClassSuper(node);
+ if (node.superClass && this.match(47)) {
+ node.superTypeParameters = this.flowParseTypeParameterInstantiation();
+ }
+ if (this.isContextual(113)) {
+ this.next();
+ const implemented = node.implements = [];
+ do {
+ const node = this.startNode();
+ node.id = this.flowParseRestrictedIdentifier(true);
+ if (this.match(47)) {
+ node.typeParameters = this.flowParseTypeParameterInstantiation();
+ } else {
+ node.typeParameters = null;
+ }
+ implemented.push(this.finishNode(node, "ClassImplements"));
+ } while (this.eat(12));
+ }
+ }
+ checkGetterSetterParams(method) {
+ super.checkGetterSetterParams(method);
+ const params = this.getObjectOrClassMethodParams(method);
+ if (params.length > 0) {
+ const param = params[0];
+ if (this.isThisParam(param) && method.kind === "get") {
+ this.raise(FlowErrors.GetterMayNotHaveThisParam, {
+ at: param
+ });
+ } else if (this.isThisParam(param)) {
+ this.raise(FlowErrors.SetterMayNotHaveThisParam, {
+ at: param
+ });
+ }
+ }
+ }
+ parsePropertyNamePrefixOperator(node) {
+ node.variance = this.flowParseVariance();
+ }
+ parseObjPropValue(prop, startLoc, isGenerator, isAsync, isPattern, isAccessor, refExpressionErrors) {
+ if (prop.variance) {
+ this.unexpected(prop.variance.loc.start);
+ }
+ delete prop.variance;
+ let typeParameters;
+ if (this.match(47) && !isAccessor) {
+ typeParameters = this.flowParseTypeParameterDeclaration();
+ if (!this.match(10)) this.unexpected();
+ }
+ const result = super.parseObjPropValue(prop, startLoc, isGenerator, isAsync, isPattern, isAccessor, refExpressionErrors);
+ if (typeParameters) {
+ (result.value || result).typeParameters = typeParameters;
+ }
+ return result;
+ }
+ parseAssignableListItemTypes(param) {
+ if (this.eat(17)) {
+ if (param.type !== "Identifier") {
+ this.raise(FlowErrors.PatternIsOptional, {
+ at: param
+ });
+ }
+ if (this.isThisParam(param)) {
+ this.raise(FlowErrors.ThisParamMayNotBeOptional, {
+ at: param
+ });
+ }
+ param.optional = true;
+ }
+ if (this.match(14)) {
+ param.typeAnnotation = this.flowParseTypeAnnotation();
+ } else if (this.isThisParam(param)) {
+ this.raise(FlowErrors.ThisParamAnnotationRequired, {
+ at: param
+ });
+ }
+ if (this.match(29) && this.isThisParam(param)) {
+ this.raise(FlowErrors.ThisParamNoDefault, {
+ at: param
+ });
+ }
+ this.resetEndLocation(param);
+ return param;
+ }
+ parseMaybeDefault(startLoc, left) {
+ const node = super.parseMaybeDefault(startLoc, left);
+ if (node.type === "AssignmentPattern" && node.typeAnnotation && node.right.start < node.typeAnnotation.start) {
+ this.raise(FlowErrors.TypeBeforeInitializer, {
+ at: node.typeAnnotation
+ });
+ }
+ return node;
+ }
+ checkImportReflection(node) {
+ super.checkImportReflection(node);
+ if (node.module && node.importKind !== "value") {
+ this.raise(FlowErrors.ImportReflectionHasImportType, {
+ at: node.specifiers[0].loc.start
+ });
+ }
+ }
+ parseImportSpecifierLocal(node, specifier, type) {
+ specifier.local = hasTypeImportKind(node) ? this.flowParseRestrictedIdentifier(true, true) : this.parseIdentifier();
+ node.specifiers.push(this.finishImportSpecifier(specifier, type));
+ }
+ isPotentialImportPhase(isExport) {
+ if (super.isPotentialImportPhase(isExport)) return true;
+ if (this.isContextual(130)) {
+ if (!isExport) return true;
+ const ch = this.lookaheadCharCode();
+ return ch === 123 || ch === 42;
+ }
+ return !isExport && this.isContextual(87);
+ }
+ applyImportPhase(node, isExport, phase, loc) {
+ super.applyImportPhase(node, isExport, phase, loc);
+ if (isExport) {
+ if (!phase && this.match(65)) {
+ return;
+ }
+ node.exportKind = phase === "type" ? phase : "value";
+ } else {
+ if (phase === "type" && this.match(55)) this.unexpected();
+ node.importKind = phase === "type" || phase === "typeof" ? phase : "value";
+ }
+ }
+ parseImportSpecifier(specifier, importedIsString, isInTypeOnlyImport, isMaybeTypeOnly, bindingType) {
+ const firstIdent = specifier.imported;
+ let specifierTypeKind = null;
+ if (firstIdent.type === "Identifier") {
+ if (firstIdent.name === "type") {
+ specifierTypeKind = "type";
+ } else if (firstIdent.name === "typeof") {
+ specifierTypeKind = "typeof";
+ }
+ }
+ let isBinding = false;
+ if (this.isContextual(93) && !this.isLookaheadContextual("as")) {
+ const as_ident = this.parseIdentifier(true);
+ if (specifierTypeKind !== null && !tokenIsKeywordOrIdentifier(this.state.type)) {
+ specifier.imported = as_ident;
+ specifier.importKind = specifierTypeKind;
+ specifier.local = cloneIdentifier(as_ident);
+ } else {
+ specifier.imported = firstIdent;
+ specifier.importKind = null;
+ specifier.local = this.parseIdentifier();
+ }
+ } else {
+ if (specifierTypeKind !== null && tokenIsKeywordOrIdentifier(this.state.type)) {
+ specifier.imported = this.parseIdentifier(true);
+ specifier.importKind = specifierTypeKind;
+ } else {
+ if (importedIsString) {
+ throw this.raise(Errors.ImportBindingIsString, {
+ at: specifier,
+ importName: firstIdent.value
+ });
+ }
+ specifier.imported = firstIdent;
+ specifier.importKind = null;
+ }
+ if (this.eatContextual(93)) {
+ specifier.local = this.parseIdentifier();
+ } else {
+ isBinding = true;
+ specifier.local = cloneIdentifier(specifier.imported);
+ }
+ }
+ const specifierIsTypeImport = hasTypeImportKind(specifier);
+ if (isInTypeOnlyImport && specifierIsTypeImport) {
+ this.raise(FlowErrors.ImportTypeShorthandOnlyInPureImport, {
+ at: specifier
+ });
+ }
+ if (isInTypeOnlyImport || specifierIsTypeImport) {
+ this.checkReservedType(specifier.local.name, specifier.local.loc.start, true);
+ }
+ if (isBinding && !isInTypeOnlyImport && !specifierIsTypeImport) {
+ this.checkReservedWord(specifier.local.name, specifier.loc.start, true, true);
+ }
+ return this.finishImportSpecifier(specifier, "ImportSpecifier");
+ }
+ parseBindingAtom() {
+ switch (this.state.type) {
+ case 78:
+ return this.parseIdentifier(true);
+ default:
+ return super.parseBindingAtom();
+ }
+ }
+ parseFunctionParams(node, isConstructor) {
+ const kind = node.kind;
+ if (kind !== "get" && kind !== "set" && this.match(47)) {
+ node.typeParameters = this.flowParseTypeParameterDeclaration();
+ }
+ super.parseFunctionParams(node, isConstructor);
+ }
+ parseVarId(decl, kind) {
+ super.parseVarId(decl, kind);
+ if (this.match(14)) {
+ decl.id.typeAnnotation = this.flowParseTypeAnnotation();
+ this.resetEndLocation(decl.id);
+ }
+ }
+ parseAsyncArrowFromCallExpression(node, call) {
+ if (this.match(14)) {
+ const oldNoAnonFunctionType = this.state.noAnonFunctionType;
+ this.state.noAnonFunctionType = true;
+ node.returnType = this.flowParseTypeAnnotation();
+ this.state.noAnonFunctionType = oldNoAnonFunctionType;
+ }
+ return super.parseAsyncArrowFromCallExpression(node, call);
+ }
+ shouldParseAsyncArrow() {
+ return this.match(14) || super.shouldParseAsyncArrow();
+ }
+ parseMaybeAssign(refExpressionErrors, afterLeftParse) {
+ var _jsx;
+ let state = null;
+ let jsx;
+ if (this.hasPlugin("jsx") && (this.match(142) || this.match(47))) {
+ state = this.state.clone();
+ jsx = this.tryParse(() => super.parseMaybeAssign(refExpressionErrors, afterLeftParse), state);
+ if (!jsx.error) return jsx.node;
+ const {
+ context
+ } = this.state;
+ const currentContext = context[context.length - 1];
+ if (currentContext === types.j_oTag || currentContext === types.j_expr) {
+ context.pop();
+ }
+ }
+ if ((_jsx = jsx) != null && _jsx.error || this.match(47)) {
+ var _jsx2, _jsx3;
+ state = state || this.state.clone();
+ let typeParameters;
+ const arrow = this.tryParse(abort => {
+ var _arrowExpression$extr;
+ typeParameters = this.flowParseTypeParameterDeclaration();
+ const arrowExpression = this.forwardNoArrowParamsConversionAt(typeParameters, () => {
+ const result = super.parseMaybeAssign(refExpressionErrors, afterLeftParse);
+ this.resetStartLocationFromNode(result, typeParameters);
+ return result;
+ });
+ if ((_arrowExpression$extr = arrowExpression.extra) != null && _arrowExpression$extr.parenthesized) abort();
+ const expr = this.maybeUnwrapTypeCastExpression(arrowExpression);
+ if (expr.type !== "ArrowFunctionExpression") abort();
+ expr.typeParameters = typeParameters;
+ this.resetStartLocationFromNode(expr, typeParameters);
+ return arrowExpression;
+ }, state);
+ let arrowExpression = null;
+ if (arrow.node && this.maybeUnwrapTypeCastExpression(arrow.node).type === "ArrowFunctionExpression") {
+ if (!arrow.error && !arrow.aborted) {
+ if (arrow.node.async) {
+ this.raise(FlowErrors.UnexpectedTypeParameterBeforeAsyncArrowFunction, {
+ at: typeParameters
+ });
+ }
+ return arrow.node;
+ }
+ arrowExpression = arrow.node;
+ }
+ if ((_jsx2 = jsx) != null && _jsx2.node) {
+ this.state = jsx.failState;
+ return jsx.node;
+ }
+ if (arrowExpression) {
+ this.state = arrow.failState;
+ return arrowExpression;
+ }
+ if ((_jsx3 = jsx) != null && _jsx3.thrown) throw jsx.error;
+ if (arrow.thrown) throw arrow.error;
+ throw this.raise(FlowErrors.UnexpectedTokenAfterTypeParameter, {
+ at: typeParameters
+ });
+ }
+ return super.parseMaybeAssign(refExpressionErrors, afterLeftParse);
+ }
+ parseArrow(node) {
+ if (this.match(14)) {
+ const result = this.tryParse(() => {
+ const oldNoAnonFunctionType = this.state.noAnonFunctionType;
+ this.state.noAnonFunctionType = true;
+ const typeNode = this.startNode();
+ [typeNode.typeAnnotation, node.predicate] = this.flowParseTypeAndPredicateInitialiser();
+ this.state.noAnonFunctionType = oldNoAnonFunctionType;
+ if (this.canInsertSemicolon()) this.unexpected();
+ if (!this.match(19)) this.unexpected();
+ return typeNode;
+ });
+ if (result.thrown) return null;
+ if (result.error) this.state = result.failState;
+ node.returnType = result.node.typeAnnotation ? this.finishNode(result.node, "TypeAnnotation") : null;
+ }
+ return super.parseArrow(node);
+ }
+ shouldParseArrow(params) {
+ return this.match(14) || super.shouldParseArrow(params);
+ }
+ setArrowFunctionParameters(node, params) {
+ if (this.state.noArrowParamsConversionAt.indexOf(node.start) !== -1) {
+ node.params = params;
+ } else {
+ super.setArrowFunctionParameters(node, params);
+ }
+ }
+ checkParams(node, allowDuplicates, isArrowFunction, strictModeChanged = true) {
+ if (isArrowFunction && this.state.noArrowParamsConversionAt.indexOf(node.start) !== -1) {
+ return;
+ }
+ for (let i = 0; i < node.params.length; i++) {
+ if (this.isThisParam(node.params[i]) && i > 0) {
+ this.raise(FlowErrors.ThisParamMustBeFirst, {
+ at: node.params[i]
+ });
+ }
+ }
+ super.checkParams(node, allowDuplicates, isArrowFunction, strictModeChanged);
+ }
+ parseParenAndDistinguishExpression(canBeArrow) {
+ return super.parseParenAndDistinguishExpression(canBeArrow && this.state.noArrowAt.indexOf(this.state.start) === -1);
+ }
+ parseSubscripts(base, startLoc, noCalls) {
+ if (base.type === "Identifier" && base.name === "async" && this.state.noArrowAt.indexOf(startLoc.index) !== -1) {
+ this.next();
+ const node = this.startNodeAt(startLoc);
+ node.callee = base;
+ node.arguments = super.parseCallExpressionArguments(11, false);
+ base = this.finishNode(node, "CallExpression");
+ } else if (base.type === "Identifier" && base.name === "async" && this.match(47)) {
+ const state = this.state.clone();
+ const arrow = this.tryParse(abort => this.parseAsyncArrowWithTypeParameters(startLoc) || abort(), state);
+ if (!arrow.error && !arrow.aborted) return arrow.node;
+ const result = this.tryParse(() => super.parseSubscripts(base, startLoc, noCalls), state);
+ if (result.node && !result.error) return result.node;
+ if (arrow.node) {
+ this.state = arrow.failState;
+ return arrow.node;
+ }
+ if (result.node) {
+ this.state = result.failState;
+ return result.node;
+ }
+ throw arrow.error || result.error;
+ }
+ return super.parseSubscripts(base, startLoc, noCalls);
+ }
+ parseSubscript(base, startLoc, noCalls, subscriptState) {
+ if (this.match(18) && this.isLookaheadToken_lt()) {
+ subscriptState.optionalChainMember = true;
+ if (noCalls) {
+ subscriptState.stop = true;
+ return base;
+ }
+ this.next();
+ const node = this.startNodeAt(startLoc);
+ node.callee = base;
+ node.typeArguments = this.flowParseTypeParameterInstantiation();
+ this.expect(10);
+ node.arguments = this.parseCallExpressionArguments(11, false);
+ node.optional = true;
+ return this.finishCallExpression(node, true);
+ } else if (!noCalls && this.shouldParseTypes() && this.match(47)) {
+ const node = this.startNodeAt(startLoc);
+ node.callee = base;
+ const result = this.tryParse(() => {
+ node.typeArguments = this.flowParseTypeParameterInstantiationCallOrNew();
+ this.expect(10);
+ node.arguments = super.parseCallExpressionArguments(11, false);
+ if (subscriptState.optionalChainMember) {
+ node.optional = false;
+ }
+ return this.finishCallExpression(node, subscriptState.optionalChainMember);
+ });
+ if (result.node) {
+ if (result.error) this.state = result.failState;
+ return result.node;
+ }
+ }
+ return super.parseSubscript(base, startLoc, noCalls, subscriptState);
+ }
+ parseNewCallee(node) {
+ super.parseNewCallee(node);
+ let targs = null;
+ if (this.shouldParseTypes() && this.match(47)) {
+ targs = this.tryParse(() => this.flowParseTypeParameterInstantiationCallOrNew()).node;
+ }
+ node.typeArguments = targs;
+ }
+ parseAsyncArrowWithTypeParameters(startLoc) {
+ const node = this.startNodeAt(startLoc);
+ this.parseFunctionParams(node, false);
+ if (!this.parseArrow(node)) return;
+ return super.parseArrowExpression(node, undefined, true);
+ }
+ readToken_mult_modulo(code) {
+ const next = this.input.charCodeAt(this.state.pos + 1);
+ if (code === 42 && next === 47 && this.state.hasFlowComment) {
+ this.state.hasFlowComment = false;
+ this.state.pos += 2;
+ this.nextToken();
+ return;
+ }
+ super.readToken_mult_modulo(code);
+ }
+ readToken_pipe_amp(code) {
+ const next = this.input.charCodeAt(this.state.pos + 1);
+ if (code === 124 && next === 125) {
+ this.finishOp(9, 2);
+ return;
+ }
+ super.readToken_pipe_amp(code);
+ }
+ parseTopLevel(file, program) {
+ const fileNode = super.parseTopLevel(file, program);
+ if (this.state.hasFlowComment) {
+ this.raise(FlowErrors.UnterminatedFlowComment, {
+ at: this.state.curPosition()
+ });
+ }
+ return fileNode;
+ }
+ skipBlockComment() {
+ if (this.hasPlugin("flowComments") && this.skipFlowComment()) {
+ if (this.state.hasFlowComment) {
+ throw this.raise(FlowErrors.NestedFlowComment, {
+ at: this.state.startLoc
+ });
+ }
+ this.hasFlowCommentCompletion();
+ const commentSkip = this.skipFlowComment();
+ if (commentSkip) {
+ this.state.pos += commentSkip;
+ this.state.hasFlowComment = true;
+ }
+ return;
+ }
+ return super.skipBlockComment(this.state.hasFlowComment ? "*-/" : "*/");
+ }
+ skipFlowComment() {
+ const {
+ pos
+ } = this.state;
+ let shiftToFirstNonWhiteSpace = 2;
+ while ([32, 9].includes(this.input.charCodeAt(pos + shiftToFirstNonWhiteSpace))) {
+ shiftToFirstNonWhiteSpace++;
+ }
+ const ch2 = this.input.charCodeAt(shiftToFirstNonWhiteSpace + pos);
+ const ch3 = this.input.charCodeAt(shiftToFirstNonWhiteSpace + pos + 1);
+ if (ch2 === 58 && ch3 === 58) {
+ return shiftToFirstNonWhiteSpace + 2;
+ }
+ if (this.input.slice(shiftToFirstNonWhiteSpace + pos, shiftToFirstNonWhiteSpace + pos + 12) === "flow-include") {
+ return shiftToFirstNonWhiteSpace + 12;
+ }
+ if (ch2 === 58 && ch3 !== 58) {
+ return shiftToFirstNonWhiteSpace;
+ }
+ return false;
+ }
+ hasFlowCommentCompletion() {
+ const end = this.input.indexOf("*/", this.state.pos);
+ if (end === -1) {
+ throw this.raise(Errors.UnterminatedComment, {
+ at: this.state.curPosition()
+ });
+ }
+ }
+ flowEnumErrorBooleanMemberNotInitialized(loc, {
+ enumName,
+ memberName
+ }) {
+ this.raise(FlowErrors.EnumBooleanMemberNotInitialized, {
+ at: loc,
+ memberName,
+ enumName
+ });
+ }
+ flowEnumErrorInvalidMemberInitializer(loc, enumContext) {
+ return this.raise(!enumContext.explicitType ? FlowErrors.EnumInvalidMemberInitializerUnknownType : enumContext.explicitType === "symbol" ? FlowErrors.EnumInvalidMemberInitializerSymbolType : FlowErrors.EnumInvalidMemberInitializerPrimaryType, Object.assign({
+ at: loc
+ }, enumContext));
+ }
+ flowEnumErrorNumberMemberNotInitialized(loc, {
+ enumName,
+ memberName
+ }) {
+ this.raise(FlowErrors.EnumNumberMemberNotInitialized, {
+ at: loc,
+ enumName,
+ memberName
+ });
+ }
+ flowEnumErrorStringMemberInconsistentlyInitialized(node, {
+ enumName
+ }) {
+ this.raise(FlowErrors.EnumStringMemberInconsistentlyInitialized, {
+ at: node,
+ enumName
+ });
+ }
+ flowEnumMemberInit() {
+ const startLoc = this.state.startLoc;
+ const endOfInit = () => this.match(12) || this.match(8);
+ switch (this.state.type) {
+ case 134:
+ {
+ const literal = this.parseNumericLiteral(this.state.value);
+ if (endOfInit()) {
+ return {
+ type: "number",
+ loc: literal.loc.start,
+ value: literal
+ };
+ }
+ return {
+ type: "invalid",
+ loc: startLoc
+ };
+ }
+ case 133:
+ {
+ const literal = this.parseStringLiteral(this.state.value);
+ if (endOfInit()) {
+ return {
+ type: "string",
+ loc: literal.loc.start,
+ value: literal
+ };
+ }
+ return {
+ type: "invalid",
+ loc: startLoc
+ };
+ }
+ case 85:
+ case 86:
+ {
+ const literal = this.parseBooleanLiteral(this.match(85));
+ if (endOfInit()) {
+ return {
+ type: "boolean",
+ loc: literal.loc.start,
+ value: literal
+ };
+ }
+ return {
+ type: "invalid",
+ loc: startLoc
+ };
+ }
+ default:
+ return {
+ type: "invalid",
+ loc: startLoc
+ };
+ }
+ }
+ flowEnumMemberRaw() {
+ const loc = this.state.startLoc;
+ const id = this.parseIdentifier(true);
+ const init = this.eat(29) ? this.flowEnumMemberInit() : {
+ type: "none",
+ loc
+ };
+ return {
+ id,
+ init
+ };
+ }
+ flowEnumCheckExplicitTypeMismatch(loc, context, expectedType) {
+ const {
+ explicitType
+ } = context;
+ if (explicitType === null) {
+ return;
+ }
+ if (explicitType !== expectedType) {
+ this.flowEnumErrorInvalidMemberInitializer(loc, context);
+ }
+ }
+ flowEnumMembers({
+ enumName,
+ explicitType
+ }) {
+ const seenNames = new Set();
+ const members = {
+ booleanMembers: [],
+ numberMembers: [],
+ stringMembers: [],
+ defaultedMembers: []
+ };
+ let hasUnknownMembers = false;
+ while (!this.match(8)) {
+ if (this.eat(21)) {
+ hasUnknownMembers = true;
+ break;
+ }
+ const memberNode = this.startNode();
+ const {
+ id,
+ init
+ } = this.flowEnumMemberRaw();
+ const memberName = id.name;
+ if (memberName === "") {
+ continue;
+ }
+ if (/^[a-z]/.test(memberName)) {
+ this.raise(FlowErrors.EnumInvalidMemberName, {
+ at: id,
+ memberName,
+ suggestion: memberName[0].toUpperCase() + memberName.slice(1),
+ enumName
+ });
+ }
+ if (seenNames.has(memberName)) {
+ this.raise(FlowErrors.EnumDuplicateMemberName, {
+ at: id,
+ memberName,
+ enumName
+ });
+ }
+ seenNames.add(memberName);
+ const context = {
+ enumName,
+ explicitType,
+ memberName
+ };
+ memberNode.id = id;
+ switch (init.type) {
+ case "boolean":
+ {
+ this.flowEnumCheckExplicitTypeMismatch(init.loc, context, "boolean");
+ memberNode.init = init.value;
+ members.booleanMembers.push(this.finishNode(memberNode, "EnumBooleanMember"));
+ break;
+ }
+ case "number":
+ {
+ this.flowEnumCheckExplicitTypeMismatch(init.loc, context, "number");
+ memberNode.init = init.value;
+ members.numberMembers.push(this.finishNode(memberNode, "EnumNumberMember"));
+ break;
+ }
+ case "string":
+ {
+ this.flowEnumCheckExplicitTypeMismatch(init.loc, context, "string");
+ memberNode.init = init.value;
+ members.stringMembers.push(this.finishNode(memberNode, "EnumStringMember"));
+ break;
+ }
+ case "invalid":
+ {
+ throw this.flowEnumErrorInvalidMemberInitializer(init.loc, context);
+ }
+ case "none":
+ {
+ switch (explicitType) {
+ case "boolean":
+ this.flowEnumErrorBooleanMemberNotInitialized(init.loc, context);
+ break;
+ case "number":
+ this.flowEnumErrorNumberMemberNotInitialized(init.loc, context);
+ break;
+ default:
+ members.defaultedMembers.push(this.finishNode(memberNode, "EnumDefaultedMember"));
+ }
+ }
+ }
+ if (!this.match(8)) {
+ this.expect(12);
+ }
+ }
+ return {
+ members,
+ hasUnknownMembers
+ };
+ }
+ flowEnumStringMembers(initializedMembers, defaultedMembers, {
+ enumName
+ }) {
+ if (initializedMembers.length === 0) {
+ return defaultedMembers;
+ } else if (defaultedMembers.length === 0) {
+ return initializedMembers;
+ } else if (defaultedMembers.length > initializedMembers.length) {
+ for (const member of initializedMembers) {
+ this.flowEnumErrorStringMemberInconsistentlyInitialized(member, {
+ enumName
+ });
+ }
+ return defaultedMembers;
+ } else {
+ for (const member of defaultedMembers) {
+ this.flowEnumErrorStringMemberInconsistentlyInitialized(member, {
+ enumName
+ });
+ }
+ return initializedMembers;
+ }
+ }
+ flowEnumParseExplicitType({
+ enumName
+ }) {
+ if (!this.eatContextual(102)) return null;
+ if (!tokenIsIdentifier(this.state.type)) {
+ throw this.raise(FlowErrors.EnumInvalidExplicitTypeUnknownSupplied, {
+ at: this.state.startLoc,
+ enumName
+ });
+ }
+ const {
+ value
+ } = this.state;
+ this.next();
+ if (value !== "boolean" && value !== "number" && value !== "string" && value !== "symbol") {
+ this.raise(FlowErrors.EnumInvalidExplicitType, {
+ at: this.state.startLoc,
+ enumName,
+ invalidEnumType: value
+ });
+ }
+ return value;
+ }
+ flowEnumBody(node, id) {
+ const enumName = id.name;
+ const nameLoc = id.loc.start;
+ const explicitType = this.flowEnumParseExplicitType({
+ enumName
+ });
+ this.expect(5);
+ const {
+ members,
+ hasUnknownMembers
+ } = this.flowEnumMembers({
+ enumName,
+ explicitType
+ });
+ node.hasUnknownMembers = hasUnknownMembers;
+ switch (explicitType) {
+ case "boolean":
+ node.explicitType = true;
+ node.members = members.booleanMembers;
+ this.expect(8);
+ return this.finishNode(node, "EnumBooleanBody");
+ case "number":
+ node.explicitType = true;
+ node.members = members.numberMembers;
+ this.expect(8);
+ return this.finishNode(node, "EnumNumberBody");
+ case "string":
+ node.explicitType = true;
+ node.members = this.flowEnumStringMembers(members.stringMembers, members.defaultedMembers, {
+ enumName
+ });
+ this.expect(8);
+ return this.finishNode(node, "EnumStringBody");
+ case "symbol":
+ node.members = members.defaultedMembers;
+ this.expect(8);
+ return this.finishNode(node, "EnumSymbolBody");
+ default:
+ {
+ const empty = () => {
+ node.members = [];
+ this.expect(8);
+ return this.finishNode(node, "EnumStringBody");
+ };
+ node.explicitType = false;
+ const boolsLen = members.booleanMembers.length;
+ const numsLen = members.numberMembers.length;
+ const strsLen = members.stringMembers.length;
+ const defaultedLen = members.defaultedMembers.length;
+ if (!boolsLen && !numsLen && !strsLen && !defaultedLen) {
+ return empty();
+ } else if (!boolsLen && !numsLen) {
+ node.members = this.flowEnumStringMembers(members.stringMembers, members.defaultedMembers, {
+ enumName
+ });
+ this.expect(8);
+ return this.finishNode(node, "EnumStringBody");
+ } else if (!numsLen && !strsLen && boolsLen >= defaultedLen) {
+ for (const member of members.defaultedMembers) {
+ this.flowEnumErrorBooleanMemberNotInitialized(member.loc.start, {
+ enumName,
+ memberName: member.id.name
+ });
+ }
+ node.members = members.booleanMembers;
+ this.expect(8);
+ return this.finishNode(node, "EnumBooleanBody");
+ } else if (!boolsLen && !strsLen && numsLen >= defaultedLen) {
+ for (const member of members.defaultedMembers) {
+ this.flowEnumErrorNumberMemberNotInitialized(member.loc.start, {
+ enumName,
+ memberName: member.id.name
+ });
+ }
+ node.members = members.numberMembers;
+ this.expect(8);
+ return this.finishNode(node, "EnumNumberBody");
+ } else {
+ this.raise(FlowErrors.EnumInconsistentMemberValues, {
+ at: nameLoc,
+ enumName
+ });
+ return empty();
+ }
+ }
+ }
+ }
+ flowParseEnumDeclaration(node) {
+ const id = this.parseIdentifier();
+ node.id = id;
+ node.body = this.flowEnumBody(this.startNode(), id);
+ return this.finishNode(node, "EnumDeclaration");
+ }
+ isLookaheadToken_lt() {
+ const next = this.nextTokenStart();
+ if (this.input.charCodeAt(next) === 60) {
+ const afterNext = this.input.charCodeAt(next + 1);
+ return afterNext !== 60 && afterNext !== 61;
+ }
+ return false;
+ }
+ maybeUnwrapTypeCastExpression(node) {
+ return node.type === "TypeCastExpression" ? node.expression : node;
+ }
+};
+const entities = {
+ __proto__: null,
+ quot: "\u0022",
+ amp: "&",
+ apos: "\u0027",
+ lt: "<",
+ gt: ">",
+ nbsp: "\u00A0",
+ iexcl: "\u00A1",
+ cent: "\u00A2",
+ pound: "\u00A3",
+ curren: "\u00A4",
+ yen: "\u00A5",
+ brvbar: "\u00A6",
+ sect: "\u00A7",
+ uml: "\u00A8",
+ copy: "\u00A9",
+ ordf: "\u00AA",
+ laquo: "\u00AB",
+ not: "\u00AC",
+ shy: "\u00AD",
+ reg: "\u00AE",
+ macr: "\u00AF",
+ deg: "\u00B0",
+ plusmn: "\u00B1",
+ sup2: "\u00B2",
+ sup3: "\u00B3",
+ acute: "\u00B4",
+ micro: "\u00B5",
+ para: "\u00B6",
+ middot: "\u00B7",
+ cedil: "\u00B8",
+ sup1: "\u00B9",
+ ordm: "\u00BA",
+ raquo: "\u00BB",
+ frac14: "\u00BC",
+ frac12: "\u00BD",
+ frac34: "\u00BE",
+ iquest: "\u00BF",
+ Agrave: "\u00C0",
+ Aacute: "\u00C1",
+ Acirc: "\u00C2",
+ Atilde: "\u00C3",
+ Auml: "\u00C4",
+ Aring: "\u00C5",
+ AElig: "\u00C6",
+ Ccedil: "\u00C7",
+ Egrave: "\u00C8",
+ Eacute: "\u00C9",
+ Ecirc: "\u00CA",
+ Euml: "\u00CB",
+ Igrave: "\u00CC",
+ Iacute: "\u00CD",
+ Icirc: "\u00CE",
+ Iuml: "\u00CF",
+ ETH: "\u00D0",
+ Ntilde: "\u00D1",
+ Ograve: "\u00D2",
+ Oacute: "\u00D3",
+ Ocirc: "\u00D4",
+ Otilde: "\u00D5",
+ Ouml: "\u00D6",
+ times: "\u00D7",
+ Oslash: "\u00D8",
+ Ugrave: "\u00D9",
+ Uacute: "\u00DA",
+ Ucirc: "\u00DB",
+ Uuml: "\u00DC",
+ Yacute: "\u00DD",
+ THORN: "\u00DE",
+ szlig: "\u00DF",
+ agrave: "\u00E0",
+ aacute: "\u00E1",
+ acirc: "\u00E2",
+ atilde: "\u00E3",
+ auml: "\u00E4",
+ aring: "\u00E5",
+ aelig: "\u00E6",
+ ccedil: "\u00E7",
+ egrave: "\u00E8",
+ eacute: "\u00E9",
+ ecirc: "\u00EA",
+ euml: "\u00EB",
+ igrave: "\u00EC",
+ iacute: "\u00ED",
+ icirc: "\u00EE",
+ iuml: "\u00EF",
+ eth: "\u00F0",
+ ntilde: "\u00F1",
+ ograve: "\u00F2",
+ oacute: "\u00F3",
+ ocirc: "\u00F4",
+ otilde: "\u00F5",
+ ouml: "\u00F6",
+ divide: "\u00F7",
+ oslash: "\u00F8",
+ ugrave: "\u00F9",
+ uacute: "\u00FA",
+ ucirc: "\u00FB",
+ uuml: "\u00FC",
+ yacute: "\u00FD",
+ thorn: "\u00FE",
+ yuml: "\u00FF",
+ 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",
+ lang: "\u2329",
+ rang: "\u232A",
+ loz: "\u25CA",
+ spades: "\u2660",
+ clubs: "\u2663",
+ hearts: "\u2665",
+ diams: "\u2666"
+};
+const JsxErrors = ParseErrorEnum`jsx`({
+ AttributeIsEmpty: "JSX attributes must only be assigned a non-empty expression.",
+ MissingClosingTagElement: ({
+ openingTagName
+ }) => `Expected corresponding JSX closing tag for <${openingTagName}>.`,
+ MissingClosingTagFragment: "Expected corresponding JSX closing tag for <>.",
+ UnexpectedSequenceExpression: "Sequence expressions cannot be directly nested inside JSX. Did you mean to wrap it in parentheses (...)?",
+ UnexpectedToken: ({
+ unexpected,
+ HTMLEntity
+ }) => `Unexpected token \`${unexpected}\`. Did you mean \`${HTMLEntity}\` or \`{'${unexpected}'}\`?`,
+ UnsupportedJsxValue: "JSX value should be either an expression or a quoted JSX text.",
+ UnterminatedJsxContent: "Unterminated JSX contents.",
+ UnwrappedAdjacentJSXElements: "Adjacent JSX elements must be wrapped in an enclosing tag. Did you want a JSX fragment <>...>?"
+});
+function isFragment(object) {
+ return object ? object.type === "JSXOpeningFragment" || object.type === "JSXClosingFragment" : false;
+}
+function getQualifiedJSXName(object) {
+ if (object.type === "JSXIdentifier") {
+ return object.name;
+ }
+ if (object.type === "JSXNamespacedName") {
+ return object.namespace.name + ":" + object.name.name;
+ }
+ if (object.type === "JSXMemberExpression") {
+ return getQualifiedJSXName(object.object) + "." + getQualifiedJSXName(object.property);
+ }
+ throw new Error("Node had unexpected type: " + object.type);
+}
+var jsx = superClass => class JSXParserMixin extends superClass {
+ jsxReadToken() {
+ let out = "";
+ let chunkStart = this.state.pos;
+ for (;;) {
+ if (this.state.pos >= this.length) {
+ throw this.raise(JsxErrors.UnterminatedJsxContent, {
+ at: this.state.startLoc
+ });
+ }
+ const ch = this.input.charCodeAt(this.state.pos);
+ switch (ch) {
+ case 60:
+ case 123:
+ if (this.state.pos === this.state.start) {
+ if (ch === 60 && this.state.canStartJSXElement) {
+ ++this.state.pos;
+ this.finishToken(142);
+ } else {
+ super.getTokenFromCode(ch);
+ }
+ return;
+ }
+ out += this.input.slice(chunkStart, this.state.pos);
+ this.finishToken(141, out);
+ return;
+ case 38:
+ out += this.input.slice(chunkStart, this.state.pos);
+ out += this.jsxReadEntity();
+ chunkStart = this.state.pos;
+ break;
+ case 62:
+ case 125:
+ default:
+ if (isNewLine(ch)) {
+ out += this.input.slice(chunkStart, this.state.pos);
+ out += this.jsxReadNewLine(true);
+ chunkStart = this.state.pos;
+ } else {
+ ++this.state.pos;
+ }
+ }
+ }
+ }
+ jsxReadNewLine(normalizeCRLF) {
+ const ch = this.input.charCodeAt(this.state.pos);
+ let out;
+ ++this.state.pos;
+ if (ch === 13 && this.input.charCodeAt(this.state.pos) === 10) {
+ ++this.state.pos;
+ out = normalizeCRLF ? "\n" : "\r\n";
+ } else {
+ out = String.fromCharCode(ch);
+ }
+ ++this.state.curLine;
+ this.state.lineStart = this.state.pos;
+ return out;
+ }
+ jsxReadString(quote) {
+ let out = "";
+ let chunkStart = ++this.state.pos;
+ for (;;) {
+ if (this.state.pos >= this.length) {
+ throw this.raise(Errors.UnterminatedString, {
+ at: this.state.startLoc
+ });
+ }
+ const ch = this.input.charCodeAt(this.state.pos);
+ if (ch === quote) break;
+ if (ch === 38) {
+ out += this.input.slice(chunkStart, this.state.pos);
+ out += this.jsxReadEntity();
+ chunkStart = this.state.pos;
+ } else if (isNewLine(ch)) {
+ out += this.input.slice(chunkStart, this.state.pos);
+ out += this.jsxReadNewLine(false);
+ chunkStart = this.state.pos;
+ } else {
+ ++this.state.pos;
+ }
+ }
+ out += this.input.slice(chunkStart, this.state.pos++);
+ this.finishToken(133, out);
+ }
+ jsxReadEntity() {
+ const startPos = ++this.state.pos;
+ if (this.codePointAtPos(this.state.pos) === 35) {
+ ++this.state.pos;
+ let radix = 10;
+ if (this.codePointAtPos(this.state.pos) === 120) {
+ radix = 16;
+ ++this.state.pos;
+ }
+ const codePoint = this.readInt(radix, undefined, false, "bail");
+ if (codePoint !== null && this.codePointAtPos(this.state.pos) === 59) {
+ ++this.state.pos;
+ return String.fromCodePoint(codePoint);
+ }
+ } else {
+ let count = 0;
+ let semi = false;
+ while (count++ < 10 && this.state.pos < this.length && !(semi = this.codePointAtPos(this.state.pos) == 59)) {
+ ++this.state.pos;
+ }
+ if (semi) {
+ const desc = this.input.slice(startPos, this.state.pos);
+ const entity = entities[desc];
+ ++this.state.pos;
+ if (entity) {
+ return entity;
+ }
+ }
+ }
+ this.state.pos = startPos;
+ return "&";
+ }
+ jsxReadWord() {
+ let ch;
+ const start = this.state.pos;
+ do {
+ ch = this.input.charCodeAt(++this.state.pos);
+ } while (isIdentifierChar(ch) || ch === 45);
+ this.finishToken(140, this.input.slice(start, this.state.pos));
+ }
+ jsxParseIdentifier() {
+ const node = this.startNode();
+ if (this.match(140)) {
+ node.name = this.state.value;
+ } else if (tokenIsKeyword(this.state.type)) {
+ node.name = tokenLabelName(this.state.type);
+ } else {
+ this.unexpected();
+ }
+ this.next();
+ return this.finishNode(node, "JSXIdentifier");
+ }
+ jsxParseNamespacedName() {
+ const startLoc = this.state.startLoc;
+ const name = this.jsxParseIdentifier();
+ if (!this.eat(14)) return name;
+ const node = this.startNodeAt(startLoc);
+ node.namespace = name;
+ node.name = this.jsxParseIdentifier();
+ return this.finishNode(node, "JSXNamespacedName");
+ }
+ jsxParseElementName() {
+ const startLoc = this.state.startLoc;
+ let node = this.jsxParseNamespacedName();
+ if (node.type === "JSXNamespacedName") {
+ return node;
+ }
+ while (this.eat(16)) {
+ const newNode = this.startNodeAt(startLoc);
+ newNode.object = node;
+ newNode.property = this.jsxParseIdentifier();
+ node = this.finishNode(newNode, "JSXMemberExpression");
+ }
+ return node;
+ }
+ jsxParseAttributeValue() {
+ let node;
+ switch (this.state.type) {
+ case 5:
+ node = this.startNode();
+ this.setContext(types.brace);
+ this.next();
+ node = this.jsxParseExpressionContainer(node, types.j_oTag);
+ if (node.expression.type === "JSXEmptyExpression") {
+ this.raise(JsxErrors.AttributeIsEmpty, {
+ at: node
+ });
+ }
+ return node;
+ case 142:
+ case 133:
+ return this.parseExprAtom();
+ default:
+ throw this.raise(JsxErrors.UnsupportedJsxValue, {
+ at: this.state.startLoc
+ });
+ }
+ }
+ jsxParseEmptyExpression() {
+ const node = this.startNodeAt(this.state.lastTokEndLoc);
+ return this.finishNodeAt(node, "JSXEmptyExpression", this.state.startLoc);
+ }
+ jsxParseSpreadChild(node) {
+ this.next();
+ node.expression = this.parseExpression();
+ this.setContext(types.j_expr);
+ this.state.canStartJSXElement = true;
+ this.expect(8);
+ return this.finishNode(node, "JSXSpreadChild");
+ }
+ jsxParseExpressionContainer(node, previousContext) {
+ if (this.match(8)) {
+ node.expression = this.jsxParseEmptyExpression();
+ } else {
+ const expression = this.parseExpression();
+ node.expression = expression;
+ }
+ this.setContext(previousContext);
+ this.state.canStartJSXElement = true;
+ this.expect(8);
+ return this.finishNode(node, "JSXExpressionContainer");
+ }
+ jsxParseAttribute() {
+ const node = this.startNode();
+ if (this.match(5)) {
+ this.setContext(types.brace);
+ this.next();
+ this.expect(21);
+ node.argument = this.parseMaybeAssignAllowIn();
+ this.setContext(types.j_oTag);
+ this.state.canStartJSXElement = true;
+ this.expect(8);
+ return this.finishNode(node, "JSXSpreadAttribute");
+ }
+ node.name = this.jsxParseNamespacedName();
+ node.value = this.eat(29) ? this.jsxParseAttributeValue() : null;
+ return this.finishNode(node, "JSXAttribute");
+ }
+ jsxParseOpeningElementAt(startLoc) {
+ const node = this.startNodeAt(startLoc);
+ if (this.eat(143)) {
+ return this.finishNode(node, "JSXOpeningFragment");
+ }
+ node.name = this.jsxParseElementName();
+ return this.jsxParseOpeningElementAfterName(node);
+ }
+ jsxParseOpeningElementAfterName(node) {
+ const attributes = [];
+ while (!this.match(56) && !this.match(143)) {
+ attributes.push(this.jsxParseAttribute());
+ }
+ node.attributes = attributes;
+ node.selfClosing = this.eat(56);
+ this.expect(143);
+ return this.finishNode(node, "JSXOpeningElement");
+ }
+ jsxParseClosingElementAt(startLoc) {
+ const node = this.startNodeAt(startLoc);
+ if (this.eat(143)) {
+ return this.finishNode(node, "JSXClosingFragment");
+ }
+ node.name = this.jsxParseElementName();
+ this.expect(143);
+ return this.finishNode(node, "JSXClosingElement");
+ }
+ jsxParseElementAt(startLoc) {
+ const node = this.startNodeAt(startLoc);
+ const children = [];
+ const openingElement = this.jsxParseOpeningElementAt(startLoc);
+ let closingElement = null;
+ if (!openingElement.selfClosing) {
+ contents: for (;;) {
+ switch (this.state.type) {
+ case 142:
+ startLoc = this.state.startLoc;
+ this.next();
+ if (this.eat(56)) {
+ closingElement = this.jsxParseClosingElementAt(startLoc);
+ break contents;
+ }
+ children.push(this.jsxParseElementAt(startLoc));
+ break;
+ case 141:
+ children.push(this.parseExprAtom());
+ break;
+ case 5:
+ {
+ const node = this.startNode();
+ this.setContext(types.brace);
+ this.next();
+ if (this.match(21)) {
+ children.push(this.jsxParseSpreadChild(node));
+ } else {
+ children.push(this.jsxParseExpressionContainer(node, types.j_expr));
+ }
+ break;
+ }
+ default:
+ this.unexpected();
+ }
+ }
+ if (isFragment(openingElement) && !isFragment(closingElement) && closingElement !== null) {
+ this.raise(JsxErrors.MissingClosingTagFragment, {
+ at: closingElement
+ });
+ } else if (!isFragment(openingElement) && isFragment(closingElement)) {
+ this.raise(JsxErrors.MissingClosingTagElement, {
+ at: closingElement,
+ openingTagName: getQualifiedJSXName(openingElement.name)
+ });
+ } else if (!isFragment(openingElement) && !isFragment(closingElement)) {
+ if (getQualifiedJSXName(closingElement.name) !== getQualifiedJSXName(openingElement.name)) {
+ this.raise(JsxErrors.MissingClosingTagElement, {
+ at: closingElement,
+ openingTagName: getQualifiedJSXName(openingElement.name)
+ });
+ }
+ }
+ }
+ if (isFragment(openingElement)) {
+ node.openingFragment = openingElement;
+ node.closingFragment = closingElement;
+ } else {
+ node.openingElement = openingElement;
+ node.closingElement = closingElement;
+ }
+ node.children = children;
+ if (this.match(47)) {
+ throw this.raise(JsxErrors.UnwrappedAdjacentJSXElements, {
+ at: this.state.startLoc
+ });
+ }
+ return isFragment(openingElement) ? this.finishNode(node, "JSXFragment") : this.finishNode(node, "JSXElement");
+ }
+ jsxParseElement() {
+ const startLoc = this.state.startLoc;
+ this.next();
+ return this.jsxParseElementAt(startLoc);
+ }
+ setContext(newContext) {
+ const {
+ context
+ } = this.state;
+ context[context.length - 1] = newContext;
+ }
+ parseExprAtom(refExpressionErrors) {
+ if (this.match(141)) {
+ return this.parseLiteral(this.state.value, "JSXText");
+ } else if (this.match(142)) {
+ return this.jsxParseElement();
+ } else if (this.match(47) && this.input.charCodeAt(this.state.pos) !== 33) {
+ this.replaceToken(142);
+ return this.jsxParseElement();
+ } else {
+ return super.parseExprAtom(refExpressionErrors);
+ }
+ }
+ skipSpace() {
+ const curContext = this.curContext();
+ if (!curContext.preserveSpace) super.skipSpace();
+ }
+ getTokenFromCode(code) {
+ const context = this.curContext();
+ if (context === types.j_expr) {
+ this.jsxReadToken();
+ return;
+ }
+ if (context === types.j_oTag || context === types.j_cTag) {
+ if (isIdentifierStart(code)) {
+ this.jsxReadWord();
+ return;
+ }
+ if (code === 62) {
+ ++this.state.pos;
+ this.finishToken(143);
+ return;
+ }
+ if ((code === 34 || code === 39) && context === types.j_oTag) {
+ this.jsxReadString(code);
+ return;
+ }
+ }
+ if (code === 60 && this.state.canStartJSXElement && this.input.charCodeAt(this.state.pos + 1) !== 33) {
+ ++this.state.pos;
+ this.finishToken(142);
+ return;
+ }
+ super.getTokenFromCode(code);
+ }
+ updateContext(prevType) {
+ const {
+ context,
+ type
+ } = this.state;
+ if (type === 56 && prevType === 142) {
+ context.splice(-2, 2, types.j_cTag);
+ this.state.canStartJSXElement = false;
+ } else if (type === 142) {
+ context.push(types.j_oTag);
+ } else if (type === 143) {
+ const out = context[context.length - 1];
+ if (out === types.j_oTag && prevType === 56 || out === types.j_cTag) {
+ context.pop();
+ this.state.canStartJSXElement = context[context.length - 1] === types.j_expr;
+ } else {
+ this.setContext(types.j_expr);
+ this.state.canStartJSXElement = true;
+ }
+ } else {
+ this.state.canStartJSXElement = tokenComesBeforeExpression(type);
+ }
+ }
+};
+class TypeScriptScope extends Scope {
+ constructor(...args) {
+ super(...args);
+ this.types = new Set();
+ this.enums = new Set();
+ this.constEnums = new Set();
+ this.classes = new Set();
+ this.exportOnlyBindings = new Set();
+ }
+}
+class TypeScriptScopeHandler extends ScopeHandler {
+ constructor(...args) {
+ super(...args);
+ this.importsStack = [];
+ }
+ createScope(flags) {
+ this.importsStack.push(new Set());
+ return new TypeScriptScope(flags);
+ }
+ enter(flags) {
+ if (flags == 256) {
+ this.importsStack.push(new Set());
+ }
+ super.enter(flags);
+ }
+ exit() {
+ const flags = super.exit();
+ if (flags == 256) {
+ this.importsStack.pop();
+ }
+ return flags;
+ }
+ hasImport(name, allowShadow) {
+ const len = this.importsStack.length;
+ if (this.importsStack[len - 1].has(name)) {
+ return true;
+ }
+ if (!allowShadow && len > 1) {
+ for (let i = 0; i < len - 1; i++) {
+ if (this.importsStack[i].has(name)) return true;
+ }
+ }
+ return false;
+ }
+ declareName(name, bindingType, loc) {
+ if (bindingType & 4096) {
+ if (this.hasImport(name, true)) {
+ this.parser.raise(Errors.VarRedeclaration, {
+ at: loc,
+ identifierName: name
+ });
+ }
+ this.importsStack[this.importsStack.length - 1].add(name);
+ return;
+ }
+ const scope = this.currentScope();
+ if (bindingType & 1024) {
+ this.maybeExportDefined(scope, name);
+ scope.exportOnlyBindings.add(name);
+ return;
+ }
+ super.declareName(name, bindingType, loc);
+ if (bindingType & 2) {
+ if (!(bindingType & 1)) {
+ this.checkRedeclarationInScope(scope, name, bindingType, loc);
+ this.maybeExportDefined(scope, name);
+ }
+ scope.types.add(name);
+ }
+ if (bindingType & 256) scope.enums.add(name);
+ if (bindingType & 512) {
+ scope.constEnums.add(name);
+ }
+ if (bindingType & 128) scope.classes.add(name);
+ }
+ isRedeclaredInScope(scope, name, bindingType) {
+ if (scope.enums.has(name)) {
+ if (bindingType & 256) {
+ const isConst = !!(bindingType & 512);
+ const wasConst = scope.constEnums.has(name);
+ return isConst !== wasConst;
+ }
+ return true;
+ }
+ if (bindingType & 128 && scope.classes.has(name)) {
+ if (scope.lexical.has(name)) {
+ return !!(bindingType & 1);
+ } else {
+ return false;
+ }
+ }
+ if (bindingType & 2 && scope.types.has(name)) {
+ return true;
+ }
+ return super.isRedeclaredInScope(scope, name, bindingType);
+ }
+ checkLocalExport(id) {
+ const {
+ name
+ } = id;
+ if (this.hasImport(name)) return;
+ const len = this.scopeStack.length;
+ for (let i = len - 1; i >= 0; i--) {
+ const scope = this.scopeStack[i];
+ if (scope.types.has(name) || scope.exportOnlyBindings.has(name)) return;
+ }
+ super.checkLocalExport(id);
+ }
+}
+const getOwn$1 = (object, key) => Object.hasOwnProperty.call(object, key) && object[key];
+const unwrapParenthesizedExpression = node => {
+ return node.type === "ParenthesizedExpression" ? unwrapParenthesizedExpression(node.expression) : node;
+};
+class LValParser extends NodeUtils {
+ toAssignable(node, isLHS = false) {
+ var _node$extra, _node$extra3;
+ let parenthesized = undefined;
+ if (node.type === "ParenthesizedExpression" || (_node$extra = node.extra) != null && _node$extra.parenthesized) {
+ parenthesized = unwrapParenthesizedExpression(node);
+ if (isLHS) {
+ if (parenthesized.type === "Identifier") {
+ this.expressionScope.recordArrowParameterBindingError(Errors.InvalidParenthesizedAssignment, {
+ at: node
+ });
+ } else if (parenthesized.type !== "MemberExpression" && !this.isOptionalMemberExpression(parenthesized)) {
+ this.raise(Errors.InvalidParenthesizedAssignment, {
+ at: node
+ });
+ }
+ } else {
+ this.raise(Errors.InvalidParenthesizedAssignment, {
+ at: node
+ });
+ }
+ }
+ switch (node.type) {
+ case "Identifier":
+ case "ObjectPattern":
+ case "ArrayPattern":
+ case "AssignmentPattern":
+ case "RestElement":
+ break;
+ case "ObjectExpression":
+ node.type = "ObjectPattern";
+ for (let i = 0, length = node.properties.length, last = length - 1; i < length; i++) {
+ var _node$extra2;
+ const prop = node.properties[i];
+ const isLast = i === last;
+ this.toAssignableObjectExpressionProp(prop, isLast, isLHS);
+ if (isLast && prop.type === "RestElement" && (_node$extra2 = node.extra) != null && _node$extra2.trailingCommaLoc) {
+ this.raise(Errors.RestTrailingComma, {
+ at: node.extra.trailingCommaLoc
+ });
+ }
+ }
+ break;
+ case "ObjectProperty":
+ {
+ const {
+ key,
+ value
+ } = node;
+ if (this.isPrivateName(key)) {
+ this.classScope.usePrivateName(this.getPrivateNameSV(key), key.loc.start);
+ }
+ this.toAssignable(value, isLHS);
+ break;
+ }
+ case "SpreadElement":
+ {
+ throw new Error("Internal @babel/parser error (this is a bug, please report it)." + " SpreadElement should be converted by .toAssignable's caller.");
+ }
+ case "ArrayExpression":
+ node.type = "ArrayPattern";
+ this.toAssignableList(node.elements, (_node$extra3 = node.extra) == null ? void 0 : _node$extra3.trailingCommaLoc, isLHS);
+ break;
+ case "AssignmentExpression":
+ if (node.operator !== "=") {
+ this.raise(Errors.MissingEqInAssignment, {
+ at: node.left.loc.end
+ });
+ }
+ node.type = "AssignmentPattern";
+ delete node.operator;
+ this.toAssignable(node.left, isLHS);
+ break;
+ case "ParenthesizedExpression":
+ this.toAssignable(parenthesized, isLHS);
+ break;
+ }
+ }
+ toAssignableObjectExpressionProp(prop, isLast, isLHS) {
+ if (prop.type === "ObjectMethod") {
+ this.raise(prop.kind === "get" || prop.kind === "set" ? Errors.PatternHasAccessor : Errors.PatternHasMethod, {
+ at: prop.key
+ });
+ } else if (prop.type === "SpreadElement") {
+ prop.type = "RestElement";
+ const arg = prop.argument;
+ this.checkToRestConversion(arg, false);
+ this.toAssignable(arg, isLHS);
+ if (!isLast) {
+ this.raise(Errors.RestTrailingComma, {
+ at: prop
+ });
+ }
+ } else {
+ this.toAssignable(prop, isLHS);
+ }
+ }
+ toAssignableList(exprList, trailingCommaLoc, isLHS) {
+ const end = exprList.length - 1;
+ for (let i = 0; i <= end; i++) {
+ const elt = exprList[i];
+ if (!elt) continue;
+ if (elt.type === "SpreadElement") {
+ elt.type = "RestElement";
+ const arg = elt.argument;
+ this.checkToRestConversion(arg, true);
+ this.toAssignable(arg, isLHS);
+ } else {
+ this.toAssignable(elt, isLHS);
+ }
+ if (elt.type === "RestElement") {
+ if (i < end) {
+ this.raise(Errors.RestTrailingComma, {
+ at: elt
+ });
+ } else if (trailingCommaLoc) {
+ this.raise(Errors.RestTrailingComma, {
+ at: trailingCommaLoc
+ });
+ }
+ }
+ }
+ }
+ isAssignable(node, isBinding) {
+ switch (node.type) {
+ case "Identifier":
+ case "ObjectPattern":
+ case "ArrayPattern":
+ case "AssignmentPattern":
+ case "RestElement":
+ return true;
+ case "ObjectExpression":
+ {
+ const last = node.properties.length - 1;
+ return node.properties.every((prop, i) => {
+ return prop.type !== "ObjectMethod" && (i === last || prop.type !== "SpreadElement") && this.isAssignable(prop);
+ });
+ }
+ case "ObjectProperty":
+ return this.isAssignable(node.value);
+ case "SpreadElement":
+ return this.isAssignable(node.argument);
+ case "ArrayExpression":
+ return node.elements.every(element => element === null || this.isAssignable(element));
+ case "AssignmentExpression":
+ return node.operator === "=";
+ case "ParenthesizedExpression":
+ return this.isAssignable(node.expression);
+ case "MemberExpression":
+ case "OptionalMemberExpression":
+ return !isBinding;
+ default:
+ return false;
+ }
+ }
+ toReferencedList(exprList, isParenthesizedExpr) {
+ return exprList;
+ }
+ toReferencedListDeep(exprList, isParenthesizedExpr) {
+ this.toReferencedList(exprList, isParenthesizedExpr);
+ for (const expr of exprList) {
+ if ((expr == null ? void 0 : expr.type) === "ArrayExpression") {
+ this.toReferencedListDeep(expr.elements);
+ }
+ }
+ }
+ parseSpread(refExpressionErrors) {
+ const node = this.startNode();
+ this.next();
+ node.argument = this.parseMaybeAssignAllowIn(refExpressionErrors, undefined);
+ return this.finishNode(node, "SpreadElement");
+ }
+ parseRestBinding() {
+ const node = this.startNode();
+ this.next();
+ node.argument = this.parseBindingAtom();
+ return this.finishNode(node, "RestElement");
+ }
+ parseBindingAtom() {
+ switch (this.state.type) {
+ case 0:
+ {
+ const node = this.startNode();
+ this.next();
+ node.elements = this.parseBindingList(3, 93, 1);
+ return this.finishNode(node, "ArrayPattern");
+ }
+ case 5:
+ return this.parseObjectLike(8, true);
+ }
+ return this.parseIdentifier();
+ }
+ parseBindingList(close, closeCharCode, flags) {
+ const allowEmpty = flags & 1;
+ const elts = [];
+ let first = true;
+ while (!this.eat(close)) {
+ if (first) {
+ first = false;
+ } else {
+ this.expect(12);
+ }
+ if (allowEmpty && this.match(12)) {
+ elts.push(null);
+ } else if (this.eat(close)) {
+ break;
+ } else if (this.match(21)) {
+ elts.push(this.parseAssignableListItemTypes(this.parseRestBinding(), flags));
+ if (!this.checkCommaAfterRest(closeCharCode)) {
+ this.expect(close);
+ break;
+ }
+ } else {
+ const decorators = [];
+ if (this.match(26) && this.hasPlugin("decorators")) {
+ this.raise(Errors.UnsupportedParameterDecorator, {
+ at: this.state.startLoc
+ });
+ }
+ while (this.match(26)) {
+ decorators.push(this.parseDecorator());
+ }
+ elts.push(this.parseAssignableListItem(flags, decorators));
+ }
+ }
+ return elts;
+ }
+ parseBindingRestProperty(prop) {
+ this.next();
+ prop.argument = this.parseIdentifier();
+ this.checkCommaAfterRest(125);
+ return this.finishNode(prop, "RestElement");
+ }
+ parseBindingProperty() {
+ const prop = this.startNode();
+ const {
+ type,
+ startLoc
+ } = this.state;
+ if (type === 21) {
+ return this.parseBindingRestProperty(prop);
+ } else if (type === 138) {
+ this.expectPlugin("destructuringPrivate", startLoc);
+ this.classScope.usePrivateName(this.state.value, startLoc);
+ prop.key = this.parsePrivateName();
+ } else {
+ this.parsePropertyName(prop);
+ }
+ prop.method = false;
+ return this.parseObjPropValue(prop, startLoc, false, false, true, false);
+ }
+ parseAssignableListItem(flags, decorators) {
+ const left = this.parseMaybeDefault();
+ this.parseAssignableListItemTypes(left, flags);
+ const elt = this.parseMaybeDefault(left.loc.start, left);
+ if (decorators.length) {
+ left.decorators = decorators;
+ }
+ return elt;
+ }
+ parseAssignableListItemTypes(param, flags) {
+ return param;
+ }
+ parseMaybeDefault(startLoc, left) {
+ var _startLoc, _left;
+ (_startLoc = startLoc) != null ? _startLoc : startLoc = this.state.startLoc;
+ left = (_left = left) != null ? _left : this.parseBindingAtom();
+ if (!this.eat(29)) return left;
+ const node = this.startNodeAt(startLoc);
+ node.left = left;
+ node.right = this.parseMaybeAssignAllowIn();
+ return this.finishNode(node, "AssignmentPattern");
+ }
+ isValidLVal(type, isUnparenthesizedInAssign, binding) {
+ return getOwn$1({
+ AssignmentPattern: "left",
+ RestElement: "argument",
+ ObjectProperty: "value",
+ ParenthesizedExpression: "expression",
+ ArrayPattern: "elements",
+ ObjectPattern: "properties"
+ }, type);
+ }
+ isOptionalMemberExpression(expression) {
+ return expression.type === "OptionalMemberExpression";
+ }
+ checkLVal(expression, {
+ in: ancestor,
+ binding = 64,
+ checkClashes = false,
+ strictModeChanged = false,
+ hasParenthesizedAncestor = false
+ }) {
+ var _expression$extra;
+ const type = expression.type;
+ if (this.isObjectMethod(expression)) return;
+ const isOptionalMemberExpression = this.isOptionalMemberExpression(expression);
+ if (isOptionalMemberExpression || type === "MemberExpression") {
+ if (isOptionalMemberExpression) {
+ this.expectPlugin("optionalChainingAssign", expression.loc.start);
+ if (ancestor.type !== "AssignmentExpression") {
+ this.raise(Errors.InvalidLhsOptionalChaining, {
+ at: expression,
+ ancestor
+ });
+ }
+ }
+ if (binding !== 64) {
+ this.raise(Errors.InvalidPropertyBindingPattern, {
+ at: expression
+ });
+ }
+ return;
+ }
+ if (type === "Identifier") {
+ this.checkIdentifier(expression, binding, strictModeChanged);
+ const {
+ name
+ } = expression;
+ if (checkClashes) {
+ if (checkClashes.has(name)) {
+ this.raise(Errors.ParamDupe, {
+ at: expression
+ });
+ } else {
+ checkClashes.add(name);
+ }
+ }
+ return;
+ }
+ const validity = this.isValidLVal(type, !(hasParenthesizedAncestor || (_expression$extra = expression.extra) != null && _expression$extra.parenthesized) && ancestor.type === "AssignmentExpression", binding);
+ if (validity === true) return;
+ if (validity === false) {
+ const ParseErrorClass = binding === 64 ? Errors.InvalidLhs : Errors.InvalidLhsBinding;
+ this.raise(ParseErrorClass, {
+ at: expression,
+ ancestor
+ });
+ return;
+ }
+ const [key, isParenthesizedExpression] = Array.isArray(validity) ? validity : [validity, type === "ParenthesizedExpression"];
+ const nextAncestor = type === "ArrayPattern" || type === "ObjectPattern" ? {
+ type
+ } : ancestor;
+ for (const child of [].concat(expression[key])) {
+ if (child) {
+ this.checkLVal(child, {
+ in: nextAncestor,
+ binding,
+ checkClashes,
+ strictModeChanged,
+ hasParenthesizedAncestor: isParenthesizedExpression
+ });
+ }
+ }
+ }
+ checkIdentifier(at, bindingType, strictModeChanged = false) {
+ if (this.state.strict && (strictModeChanged ? isStrictBindReservedWord(at.name, this.inModule) : isStrictBindOnlyReservedWord(at.name))) {
+ if (bindingType === 64) {
+ this.raise(Errors.StrictEvalArguments, {
+ at,
+ referenceName: at.name
+ });
+ } else {
+ this.raise(Errors.StrictEvalArgumentsBinding, {
+ at,
+ bindingName: at.name
+ });
+ }
+ }
+ if (bindingType & 8192 && at.name === "let") {
+ this.raise(Errors.LetInLexicalBinding, {
+ at
+ });
+ }
+ if (!(bindingType & 64)) {
+ this.declareNameFromIdentifier(at, bindingType);
+ }
+ }
+ declareNameFromIdentifier(identifier, binding) {
+ this.scope.declareName(identifier.name, binding, identifier.loc.start);
+ }
+ checkToRestConversion(node, allowPattern) {
+ switch (node.type) {
+ case "ParenthesizedExpression":
+ this.checkToRestConversion(node.expression, allowPattern);
+ break;
+ case "Identifier":
+ case "MemberExpression":
+ break;
+ case "ArrayExpression":
+ case "ObjectExpression":
+ if (allowPattern) break;
+ default:
+ this.raise(Errors.InvalidRestAssignmentPattern, {
+ at: node
+ });
+ }
+ }
+ checkCommaAfterRest(close) {
+ if (!this.match(12)) {
+ return false;
+ }
+ this.raise(this.lookaheadCharCode() === close ? Errors.RestTrailingComma : Errors.ElementAfterRest, {
+ at: this.state.startLoc
+ });
+ return true;
+ }
+}
+const getOwn = (object, key) => Object.hasOwnProperty.call(object, key) && object[key];
+function nonNull(x) {
+ if (x == null) {
+ throw new Error(`Unexpected ${x} value.`);
+ }
+ return x;
+}
+function assert(x) {
+ if (!x) {
+ throw new Error("Assert fail");
+ }
+}
+const TSErrors = ParseErrorEnum`typescript`({
+ AbstractMethodHasImplementation: ({
+ methodName
+ }) => `Method '${methodName}' cannot have an implementation because it is marked abstract.`,
+ AbstractPropertyHasInitializer: ({
+ propertyName
+ }) => `Property '${propertyName}' cannot have an initializer because it is marked abstract.`,
+ AccesorCannotDeclareThisParameter: "'get' and 'set' accessors cannot declare 'this' parameters.",
+ AccesorCannotHaveTypeParameters: "An accessor cannot have type parameters.",
+ AccessorCannotBeOptional: "An 'accessor' property cannot be declared optional.",
+ ClassMethodHasDeclare: "Class methods cannot have the 'declare' modifier.",
+ ClassMethodHasReadonly: "Class methods cannot have the 'readonly' modifier.",
+ ConstInitiailizerMustBeStringOrNumericLiteralOrLiteralEnumReference: "A 'const' initializer in an ambient context must be a string or numeric literal or literal enum reference.",
+ ConstructorHasTypeParameters: "Type parameters cannot appear on a constructor declaration.",
+ DeclareAccessor: ({
+ kind
+ }) => `'declare' is not allowed in ${kind}ters.`,
+ DeclareClassFieldHasInitializer: "Initializers are not allowed in ambient contexts.",
+ DeclareFunctionHasImplementation: "An implementation cannot be declared in ambient contexts.",
+ DuplicateAccessibilityModifier: ({
+ modifier
+ }) => `Accessibility modifier already seen.`,
+ DuplicateModifier: ({
+ modifier
+ }) => `Duplicate modifier: '${modifier}'.`,
+ EmptyHeritageClauseType: ({
+ token
+ }) => `'${token}' list cannot be empty.`,
+ EmptyTypeArguments: "Type argument list cannot be empty.",
+ EmptyTypeParameters: "Type parameter list cannot be empty.",
+ ExpectedAmbientAfterExportDeclare: "'export declare' must be followed by an ambient declaration.",
+ ImportAliasHasImportType: "An import alias can not use 'import type'.",
+ ImportReflectionHasImportType: "An `import module` declaration can not use `type` modifier",
+ IncompatibleModifiers: ({
+ modifiers
+ }) => `'${modifiers[0]}' modifier cannot be used with '${modifiers[1]}' modifier.`,
+ IndexSignatureHasAbstract: "Index signatures cannot have the 'abstract' modifier.",
+ IndexSignatureHasAccessibility: ({
+ modifier
+ }) => `Index signatures cannot have an accessibility modifier ('${modifier}').`,
+ IndexSignatureHasDeclare: "Index signatures cannot have the 'declare' modifier.",
+ IndexSignatureHasOverride: "'override' modifier cannot appear on an index signature.",
+ IndexSignatureHasStatic: "Index signatures cannot have the 'static' modifier.",
+ InitializerNotAllowedInAmbientContext: "Initializers are not allowed in ambient contexts.",
+ InvalidModifierOnTypeMember: ({
+ modifier
+ }) => `'${modifier}' modifier cannot appear on a type member.`,
+ InvalidModifierOnTypeParameter: ({
+ modifier
+ }) => `'${modifier}' modifier cannot appear on a type parameter.`,
+ InvalidModifierOnTypeParameterPositions: ({
+ modifier
+ }) => `'${modifier}' modifier can only appear on a type parameter of a class, interface or type alias.`,
+ InvalidModifiersOrder: ({
+ orderedModifiers
+ }) => `'${orderedModifiers[0]}' modifier must precede '${orderedModifiers[1]}' modifier.`,
+ InvalidPropertyAccessAfterInstantiationExpression: "Invalid property access after an instantiation expression. " + "You can either wrap the instantiation expression in parentheses, or delete the type arguments.",
+ InvalidTupleMemberLabel: "Tuple members must be labeled with a simple identifier.",
+ MissingInterfaceName: "'interface' declarations must be followed by an identifier.",
+ NonAbstractClassHasAbstractMethod: "Abstract methods can only appear within an abstract class.",
+ NonClassMethodPropertyHasAbstractModifer: "'abstract' modifier can only appear on a class, method, or property declaration.",
+ OptionalTypeBeforeRequired: "A required element cannot follow an optional element.",
+ OverrideNotInSubClass: "This member cannot have an 'override' modifier because its containing class does not extend another class.",
+ PatternIsOptional: "A binding pattern parameter cannot be optional in an implementation signature.",
+ PrivateElementHasAbstract: "Private elements cannot have the 'abstract' modifier.",
+ PrivateElementHasAccessibility: ({
+ modifier
+ }) => `Private elements cannot have an accessibility modifier ('${modifier}').`,
+ ReadonlyForMethodSignature: "'readonly' modifier can only appear on a property declaration or index signature.",
+ ReservedArrowTypeParam: "This syntax is reserved in files with the .mts or .cts extension. Add a trailing comma, as in `() => ...`.",
+ ReservedTypeAssertion: "This syntax is reserved in files with the .mts or .cts extension. Use an `as` expression instead.",
+ SetAccesorCannotHaveOptionalParameter: "A 'set' accessor cannot have an optional parameter.",
+ SetAccesorCannotHaveRestParameter: "A 'set' accessor cannot have rest parameter.",
+ SetAccesorCannotHaveReturnType: "A 'set' accessor cannot have a return type annotation.",
+ SingleTypeParameterWithoutTrailingComma: ({
+ typeParameterName
+ }) => `Single type parameter ${typeParameterName} should have a trailing comma. Example usage: <${typeParameterName},>.`,
+ StaticBlockCannotHaveModifier: "Static class blocks cannot have any modifier.",
+ TupleOptionalAfterType: "A labeled tuple optional element must be declared using a question mark after the name and before the colon (`name?: type`), rather than after the type (`name: type?`).",
+ TypeAnnotationAfterAssign: "Type annotations must come before default assignments, e.g. instead of `age = 25: number` use `age: number = 25`.",
+ TypeImportCannotSpecifyDefaultAndNamed: "A type-only import can specify a default import or named bindings, but not both.",
+ TypeModifierIsUsedInTypeExports: "The 'type' modifier cannot be used on a named export when 'export type' is used on its export statement.",
+ TypeModifierIsUsedInTypeImports: "The 'type' modifier cannot be used on a named import when 'import type' is used on its import statement.",
+ UnexpectedParameterModifier: "A parameter property is only allowed in a constructor implementation.",
+ UnexpectedReadonly: "'readonly' type modifier is only permitted on array and tuple literal types.",
+ UnexpectedTypeAnnotation: "Did not expect a type annotation here.",
+ UnexpectedTypeCastInParameter: "Unexpected type cast in parameter position.",
+ UnsupportedImportTypeArgument: "Argument in a type import must be a string literal.",
+ UnsupportedParameterPropertyKind: "A parameter property may not be declared using a binding pattern.",
+ UnsupportedSignatureParameterKind: ({
+ type
+ }) => `Name in a signature must be an Identifier, ObjectPattern or ArrayPattern, instead got ${type}.`
+});
+function keywordTypeFromName(value) {
+ switch (value) {
+ case "any":
+ return "TSAnyKeyword";
+ case "boolean":
+ return "TSBooleanKeyword";
+ case "bigint":
+ return "TSBigIntKeyword";
+ case "never":
+ return "TSNeverKeyword";
+ case "number":
+ return "TSNumberKeyword";
+ case "object":
+ return "TSObjectKeyword";
+ case "string":
+ return "TSStringKeyword";
+ case "symbol":
+ return "TSSymbolKeyword";
+ case "undefined":
+ return "TSUndefinedKeyword";
+ case "unknown":
+ return "TSUnknownKeyword";
+ default:
+ return undefined;
+ }
+}
+function tsIsAccessModifier(modifier) {
+ return modifier === "private" || modifier === "public" || modifier === "protected";
+}
+function tsIsVarianceAnnotations(modifier) {
+ return modifier === "in" || modifier === "out";
+}
+var typescript = superClass => class TypeScriptParserMixin extends superClass {
+ constructor(...args) {
+ super(...args);
+ this.tsParseInOutModifiers = this.tsParseModifiers.bind(this, {
+ allowedModifiers: ["in", "out"],
+ disallowedModifiers: ["const", "public", "private", "protected", "readonly", "declare", "abstract", "override"],
+ errorTemplate: TSErrors.InvalidModifierOnTypeParameter
+ });
+ this.tsParseConstModifier = this.tsParseModifiers.bind(this, {
+ allowedModifiers: ["const"],
+ disallowedModifiers: ["in", "out"],
+ errorTemplate: TSErrors.InvalidModifierOnTypeParameterPositions
+ });
+ this.tsParseInOutConstModifiers = this.tsParseModifiers.bind(this, {
+ allowedModifiers: ["in", "out", "const"],
+ disallowedModifiers: ["public", "private", "protected", "readonly", "declare", "abstract", "override"],
+ errorTemplate: TSErrors.InvalidModifierOnTypeParameter
+ });
+ }
+ getScopeHandler() {
+ return TypeScriptScopeHandler;
+ }
+ tsIsIdentifier() {
+ return tokenIsIdentifier(this.state.type);
+ }
+ tsTokenCanFollowModifier() {
+ return (this.match(0) || this.match(5) || this.match(55) || this.match(21) || this.match(138) || this.isLiteralPropertyName()) && !this.hasPrecedingLineBreak();
+ }
+ tsNextTokenCanFollowModifier() {
+ this.next();
+ return this.tsTokenCanFollowModifier();
+ }
+ tsParseModifier(allowedModifiers, stopOnStartOfClassStaticBlock) {
+ if (!tokenIsIdentifier(this.state.type) && this.state.type !== 58 && this.state.type !== 75) {
+ return undefined;
+ }
+ const modifier = this.state.value;
+ if (allowedModifiers.indexOf(modifier) !== -1) {
+ if (stopOnStartOfClassStaticBlock && this.tsIsStartOfStaticBlocks()) {
+ return undefined;
+ }
+ if (this.tsTryParse(this.tsNextTokenCanFollowModifier.bind(this))) {
+ return modifier;
+ }
+ }
+ return undefined;
+ }
+ tsParseModifiers({
+ allowedModifiers,
+ disallowedModifiers,
+ stopOnStartOfClassStaticBlock,
+ errorTemplate = TSErrors.InvalidModifierOnTypeMember
+ }, modified) {
+ const enforceOrder = (loc, modifier, before, after) => {
+ if (modifier === before && modified[after]) {
+ this.raise(TSErrors.InvalidModifiersOrder, {
+ at: loc,
+ orderedModifiers: [before, after]
+ });
+ }
+ };
+ const incompatible = (loc, modifier, mod1, mod2) => {
+ if (modified[mod1] && modifier === mod2 || modified[mod2] && modifier === mod1) {
+ this.raise(TSErrors.IncompatibleModifiers, {
+ at: loc,
+ modifiers: [mod1, mod2]
+ });
+ }
+ };
+ for (;;) {
+ const {
+ startLoc
+ } = this.state;
+ const modifier = this.tsParseModifier(allowedModifiers.concat(disallowedModifiers != null ? disallowedModifiers : []), stopOnStartOfClassStaticBlock);
+ if (!modifier) break;
+ if (tsIsAccessModifier(modifier)) {
+ if (modified.accessibility) {
+ this.raise(TSErrors.DuplicateAccessibilityModifier, {
+ at: startLoc,
+ modifier
+ });
+ } else {
+ enforceOrder(startLoc, modifier, modifier, "override");
+ enforceOrder(startLoc, modifier, modifier, "static");
+ enforceOrder(startLoc, modifier, modifier, "readonly");
+ modified.accessibility = modifier;
+ }
+ } else if (tsIsVarianceAnnotations(modifier)) {
+ if (modified[modifier]) {
+ this.raise(TSErrors.DuplicateModifier, {
+ at: startLoc,
+ modifier
+ });
+ }
+ modified[modifier] = true;
+ enforceOrder(startLoc, modifier, "in", "out");
+ } else {
+ if (Object.hasOwnProperty.call(modified, modifier)) {
+ this.raise(TSErrors.DuplicateModifier, {
+ at: startLoc,
+ modifier
+ });
+ } else {
+ enforceOrder(startLoc, modifier, "static", "readonly");
+ enforceOrder(startLoc, modifier, "static", "override");
+ enforceOrder(startLoc, modifier, "override", "readonly");
+ enforceOrder(startLoc, modifier, "abstract", "override");
+ incompatible(startLoc, modifier, "declare", "override");
+ incompatible(startLoc, modifier, "static", "abstract");
+ }
+ modified[modifier] = true;
+ }
+ if (disallowedModifiers != null && disallowedModifiers.includes(modifier)) {
+ this.raise(errorTemplate, {
+ at: startLoc,
+ modifier
+ });
+ }
+ }
+ }
+ tsIsListTerminator(kind) {
+ switch (kind) {
+ case "EnumMembers":
+ case "TypeMembers":
+ return this.match(8);
+ case "HeritageClauseElement":
+ return this.match(5);
+ case "TupleElementTypes":
+ return this.match(3);
+ case "TypeParametersOrArguments":
+ return this.match(48);
+ }
+ }
+ tsParseList(kind, parseElement) {
+ const result = [];
+ while (!this.tsIsListTerminator(kind)) {
+ result.push(parseElement());
+ }
+ return result;
+ }
+ tsParseDelimitedList(kind, parseElement, refTrailingCommaPos) {
+ return nonNull(this.tsParseDelimitedListWorker(kind, parseElement, true, refTrailingCommaPos));
+ }
+ tsParseDelimitedListWorker(kind, parseElement, expectSuccess, refTrailingCommaPos) {
+ const result = [];
+ let trailingCommaPos = -1;
+ for (;;) {
+ if (this.tsIsListTerminator(kind)) {
+ break;
+ }
+ trailingCommaPos = -1;
+ const element = parseElement();
+ if (element == null) {
+ return undefined;
+ }
+ result.push(element);
+ if (this.eat(12)) {
+ trailingCommaPos = this.state.lastTokStart;
+ continue;
+ }
+ if (this.tsIsListTerminator(kind)) {
+ break;
+ }
+ if (expectSuccess) {
+ this.expect(12);
+ }
+ return undefined;
+ }
+ if (refTrailingCommaPos) {
+ refTrailingCommaPos.value = trailingCommaPos;
+ }
+ return result;
+ }
+ tsParseBracketedList(kind, parseElement, bracket, skipFirstToken, refTrailingCommaPos) {
+ if (!skipFirstToken) {
+ if (bracket) {
+ this.expect(0);
+ } else {
+ this.expect(47);
+ }
+ }
+ const result = this.tsParseDelimitedList(kind, parseElement, refTrailingCommaPos);
+ if (bracket) {
+ this.expect(3);
+ } else {
+ this.expect(48);
+ }
+ return result;
+ }
+ tsParseImportType() {
+ const node = this.startNode();
+ this.expect(83);
+ this.expect(10);
+ if (!this.match(133)) {
+ this.raise(TSErrors.UnsupportedImportTypeArgument, {
+ at: this.state.startLoc
+ });
+ }
+ node.argument = super.parseExprAtom();
+ this.expect(11);
+ if (this.eat(16)) {
+ node.qualifier = this.tsParseEntityName();
+ }
+ if (this.match(47)) {
+ node.typeParameters = this.tsParseTypeArguments();
+ }
+ return this.finishNode(node, "TSImportType");
+ }
+ tsParseEntityName(allowReservedWords = true) {
+ let entity = this.parseIdentifier(allowReservedWords);
+ while (this.eat(16)) {
+ const node = this.startNodeAtNode(entity);
+ node.left = entity;
+ node.right = this.parseIdentifier(allowReservedWords);
+ entity = this.finishNode(node, "TSQualifiedName");
+ }
+ return entity;
+ }
+ tsParseTypeReference() {
+ const node = this.startNode();
+ node.typeName = this.tsParseEntityName();
+ if (!this.hasPrecedingLineBreak() && this.match(47)) {
+ node.typeParameters = this.tsParseTypeArguments();
+ }
+ return this.finishNode(node, "TSTypeReference");
+ }
+ tsParseThisTypePredicate(lhs) {
+ this.next();
+ const node = this.startNodeAtNode(lhs);
+ node.parameterName = lhs;
+ node.typeAnnotation = this.tsParseTypeAnnotation(false);
+ node.asserts = false;
+ return this.finishNode(node, "TSTypePredicate");
+ }
+ tsParseThisTypeNode() {
+ const node = this.startNode();
+ this.next();
+ return this.finishNode(node, "TSThisType");
+ }
+ tsParseTypeQuery() {
+ const node = this.startNode();
+ this.expect(87);
+ if (this.match(83)) {
+ node.exprName = this.tsParseImportType();
+ } else {
+ node.exprName = this.tsParseEntityName();
+ }
+ if (!this.hasPrecedingLineBreak() && this.match(47)) {
+ node.typeParameters = this.tsParseTypeArguments();
+ }
+ return this.finishNode(node, "TSTypeQuery");
+ }
+ tsParseTypeParameter(parseModifiers) {
+ const node = this.startNode();
+ parseModifiers(node);
+ node.name = this.tsParseTypeParameterName();
+ node.constraint = this.tsEatThenParseType(81);
+ node.default = this.tsEatThenParseType(29);
+ return this.finishNode(node, "TSTypeParameter");
+ }
+ tsTryParseTypeParameters(parseModifiers) {
+ if (this.match(47)) {
+ return this.tsParseTypeParameters(parseModifiers);
+ }
+ }
+ tsParseTypeParameters(parseModifiers) {
+ const node = this.startNode();
+ if (this.match(47) || this.match(142)) {
+ this.next();
+ } else {
+ this.unexpected();
+ }
+ const refTrailingCommaPos = {
+ value: -1
+ };
+ node.params = this.tsParseBracketedList("TypeParametersOrArguments", this.tsParseTypeParameter.bind(this, parseModifiers), false, true, refTrailingCommaPos);
+ if (node.params.length === 0) {
+ this.raise(TSErrors.EmptyTypeParameters, {
+ at: node
+ });
+ }
+ if (refTrailingCommaPos.value !== -1) {
+ this.addExtra(node, "trailingComma", refTrailingCommaPos.value);
+ }
+ return this.finishNode(node, "TSTypeParameterDeclaration");
+ }
+ tsFillSignature(returnToken, signature) {
+ const returnTokenRequired = returnToken === 19;
+ const paramsKey = "parameters";
+ const returnTypeKey = "typeAnnotation";
+ signature.typeParameters = this.tsTryParseTypeParameters(this.tsParseConstModifier);
+ this.expect(10);
+ signature[paramsKey] = this.tsParseBindingListForSignature();
+ if (returnTokenRequired) {
+ signature[returnTypeKey] = this.tsParseTypeOrTypePredicateAnnotation(returnToken);
+ } else if (this.match(returnToken)) {
+ signature[returnTypeKey] = this.tsParseTypeOrTypePredicateAnnotation(returnToken);
+ }
+ }
+ tsParseBindingListForSignature() {
+ const list = super.parseBindingList(11, 41, 2);
+ for (const pattern of list) {
+ const {
+ type
+ } = pattern;
+ if (type === "AssignmentPattern" || type === "TSParameterProperty") {
+ this.raise(TSErrors.UnsupportedSignatureParameterKind, {
+ at: pattern,
+ type
+ });
+ }
+ }
+ return list;
+ }
+ tsParseTypeMemberSemicolon() {
+ if (!this.eat(12) && !this.isLineTerminator()) {
+ this.expect(13);
+ }
+ }
+ tsParseSignatureMember(kind, node) {
+ this.tsFillSignature(14, node);
+ this.tsParseTypeMemberSemicolon();
+ return this.finishNode(node, kind);
+ }
+ tsIsUnambiguouslyIndexSignature() {
+ this.next();
+ if (tokenIsIdentifier(this.state.type)) {
+ this.next();
+ return this.match(14);
+ }
+ return false;
+ }
+ tsTryParseIndexSignature(node) {
+ if (!(this.match(0) && this.tsLookAhead(this.tsIsUnambiguouslyIndexSignature.bind(this)))) {
+ return;
+ }
+ this.expect(0);
+ const id = this.parseIdentifier();
+ id.typeAnnotation = this.tsParseTypeAnnotation();
+ this.resetEndLocation(id);
+ this.expect(3);
+ node.parameters = [id];
+ const type = this.tsTryParseTypeAnnotation();
+ if (type) node.typeAnnotation = type;
+ this.tsParseTypeMemberSemicolon();
+ return this.finishNode(node, "TSIndexSignature");
+ }
+ tsParsePropertyOrMethodSignature(node, readonly) {
+ if (this.eat(17)) node.optional = true;
+ const nodeAny = node;
+ if (this.match(10) || this.match(47)) {
+ if (readonly) {
+ this.raise(TSErrors.ReadonlyForMethodSignature, {
+ at: node
+ });
+ }
+ const method = nodeAny;
+ if (method.kind && this.match(47)) {
+ this.raise(TSErrors.AccesorCannotHaveTypeParameters, {
+ at: this.state.curPosition()
+ });
+ }
+ this.tsFillSignature(14, method);
+ this.tsParseTypeMemberSemicolon();
+ const paramsKey = "parameters";
+ const returnTypeKey = "typeAnnotation";
+ if (method.kind === "get") {
+ if (method[paramsKey].length > 0) {
+ this.raise(Errors.BadGetterArity, {
+ at: this.state.curPosition()
+ });
+ if (this.isThisParam(method[paramsKey][0])) {
+ this.raise(TSErrors.AccesorCannotDeclareThisParameter, {
+ at: this.state.curPosition()
+ });
+ }
+ }
+ } else if (method.kind === "set") {
+ if (method[paramsKey].length !== 1) {
+ this.raise(Errors.BadSetterArity, {
+ at: this.state.curPosition()
+ });
+ } else {
+ const firstParameter = method[paramsKey][0];
+ if (this.isThisParam(firstParameter)) {
+ this.raise(TSErrors.AccesorCannotDeclareThisParameter, {
+ at: this.state.curPosition()
+ });
+ }
+ if (firstParameter.type === "Identifier" && firstParameter.optional) {
+ this.raise(TSErrors.SetAccesorCannotHaveOptionalParameter, {
+ at: this.state.curPosition()
+ });
+ }
+ if (firstParameter.type === "RestElement") {
+ this.raise(TSErrors.SetAccesorCannotHaveRestParameter, {
+ at: this.state.curPosition()
+ });
+ }
+ }
+ if (method[returnTypeKey]) {
+ this.raise(TSErrors.SetAccesorCannotHaveReturnType, {
+ at: method[returnTypeKey]
+ });
+ }
+ } else {
+ method.kind = "method";
+ }
+ return this.finishNode(method, "TSMethodSignature");
+ } else {
+ const property = nodeAny;
+ if (readonly) property.readonly = true;
+ const type = this.tsTryParseTypeAnnotation();
+ if (type) property.typeAnnotation = type;
+ this.tsParseTypeMemberSemicolon();
+ return this.finishNode(property, "TSPropertySignature");
+ }
+ }
+ tsParseTypeMember() {
+ const node = this.startNode();
+ if (this.match(10) || this.match(47)) {
+ return this.tsParseSignatureMember("TSCallSignatureDeclaration", node);
+ }
+ if (this.match(77)) {
+ const id = this.startNode();
+ this.next();
+ if (this.match(10) || this.match(47)) {
+ return this.tsParseSignatureMember("TSConstructSignatureDeclaration", node);
+ } else {
+ node.key = this.createIdentifier(id, "new");
+ return this.tsParsePropertyOrMethodSignature(node, false);
+ }
+ }
+ this.tsParseModifiers({
+ allowedModifiers: ["readonly"],
+ disallowedModifiers: ["declare", "abstract", "private", "protected", "public", "static", "override"]
+ }, node);
+ const idx = this.tsTryParseIndexSignature(node);
+ if (idx) {
+ return idx;
+ }
+ super.parsePropertyName(node);
+ if (!node.computed && node.key.type === "Identifier" && (node.key.name === "get" || node.key.name === "set") && this.tsTokenCanFollowModifier()) {
+ node.kind = node.key.name;
+ super.parsePropertyName(node);
+ }
+ return this.tsParsePropertyOrMethodSignature(node, !!node.readonly);
+ }
+ tsParseTypeLiteral() {
+ const node = this.startNode();
+ node.members = this.tsParseObjectTypeMembers();
+ return this.finishNode(node, "TSTypeLiteral");
+ }
+ tsParseObjectTypeMembers() {
+ this.expect(5);
+ const members = this.tsParseList("TypeMembers", this.tsParseTypeMember.bind(this));
+ this.expect(8);
+ return members;
+ }
+ tsIsStartOfMappedType() {
+ this.next();
+ if (this.eat(53)) {
+ return this.isContextual(122);
+ }
+ if (this.isContextual(122)) {
+ this.next();
+ }
+ if (!this.match(0)) {
+ return false;
+ }
+ this.next();
+ if (!this.tsIsIdentifier()) {
+ return false;
+ }
+ this.next();
+ return this.match(58);
+ }
+ tsParseMappedTypeParameter() {
+ const node = this.startNode();
+ node.name = this.tsParseTypeParameterName();
+ node.constraint = this.tsExpectThenParseType(58);
+ return this.finishNode(node, "TSTypeParameter");
+ }
+ tsParseMappedType() {
+ const node = this.startNode();
+ this.expect(5);
+ if (this.match(53)) {
+ node.readonly = this.state.value;
+ this.next();
+ this.expectContextual(122);
+ } else if (this.eatContextual(122)) {
+ node.readonly = true;
+ }
+ this.expect(0);
+ node.typeParameter = this.tsParseMappedTypeParameter();
+ node.nameType = this.eatContextual(93) ? this.tsParseType() : null;
+ this.expect(3);
+ if (this.match(53)) {
+ node.optional = this.state.value;
+ this.next();
+ this.expect(17);
+ } else if (this.eat(17)) {
+ node.optional = true;
+ }
+ node.typeAnnotation = this.tsTryParseType();
+ this.semicolon();
+ this.expect(8);
+ return this.finishNode(node, "TSMappedType");
+ }
+ tsParseTupleType() {
+ const node = this.startNode();
+ node.elementTypes = this.tsParseBracketedList("TupleElementTypes", this.tsParseTupleElementType.bind(this), true, false);
+ let seenOptionalElement = false;
+ node.elementTypes.forEach(elementNode => {
+ const {
+ type
+ } = elementNode;
+ if (seenOptionalElement && type !== "TSRestType" && type !== "TSOptionalType" && !(type === "TSNamedTupleMember" && elementNode.optional)) {
+ this.raise(TSErrors.OptionalTypeBeforeRequired, {
+ at: elementNode
+ });
+ }
+ seenOptionalElement || (seenOptionalElement = type === "TSNamedTupleMember" && elementNode.optional || type === "TSOptionalType");
+ });
+ return this.finishNode(node, "TSTupleType");
+ }
+ tsParseTupleElementType() {
+ const {
+ startLoc
+ } = this.state;
+ const rest = this.eat(21);
+ let labeled;
+ let label;
+ let optional;
+ let type;
+ const isWord = tokenIsKeywordOrIdentifier(this.state.type);
+ const chAfterWord = isWord ? this.lookaheadCharCode() : null;
+ if (chAfterWord === 58) {
+ labeled = true;
+ optional = false;
+ label = this.parseIdentifier(true);
+ this.expect(14);
+ type = this.tsParseType();
+ } else if (chAfterWord === 63) {
+ optional = true;
+ const startLoc = this.state.startLoc;
+ const wordName = this.state.value;
+ const typeOrLabel = this.tsParseNonArrayType();
+ if (this.lookaheadCharCode() === 58) {
+ labeled = true;
+ label = this.createIdentifier(this.startNodeAt(startLoc), wordName);
+ this.expect(17);
+ this.expect(14);
+ type = this.tsParseType();
+ } else {
+ labeled = false;
+ type = typeOrLabel;
+ this.expect(17);
+ }
+ } else {
+ type = this.tsParseType();
+ optional = this.eat(17);
+ labeled = this.eat(14);
+ }
+ if (labeled) {
+ let labeledNode;
+ if (label) {
+ labeledNode = this.startNodeAtNode(label);
+ labeledNode.optional = optional;
+ labeledNode.label = label;
+ labeledNode.elementType = type;
+ if (this.eat(17)) {
+ labeledNode.optional = true;
+ this.raise(TSErrors.TupleOptionalAfterType, {
+ at: this.state.lastTokStartLoc
+ });
+ }
+ } else {
+ labeledNode = this.startNodeAtNode(type);
+ labeledNode.optional = optional;
+ this.raise(TSErrors.InvalidTupleMemberLabel, {
+ at: type
+ });
+ labeledNode.label = type;
+ labeledNode.elementType = this.tsParseType();
+ }
+ type = this.finishNode(labeledNode, "TSNamedTupleMember");
+ } else if (optional) {
+ const optionalTypeNode = this.startNodeAtNode(type);
+ optionalTypeNode.typeAnnotation = type;
+ type = this.finishNode(optionalTypeNode, "TSOptionalType");
+ }
+ if (rest) {
+ const restNode = this.startNodeAt(startLoc);
+ restNode.typeAnnotation = type;
+ type = this.finishNode(restNode, "TSRestType");
+ }
+ return type;
+ }
+ tsParseParenthesizedType() {
+ const node = this.startNode();
+ this.expect(10);
+ node.typeAnnotation = this.tsParseType();
+ this.expect(11);
+ return this.finishNode(node, "TSParenthesizedType");
+ }
+ tsParseFunctionOrConstructorType(type, abstract) {
+ const node = this.startNode();
+ if (type === "TSConstructorType") {
+ node.abstract = !!abstract;
+ if (abstract) this.next();
+ this.next();
+ }
+ this.tsInAllowConditionalTypesContext(() => this.tsFillSignature(19, node));
+ return this.finishNode(node, type);
+ }
+ tsParseLiteralTypeNode() {
+ const node = this.startNode();
+ switch (this.state.type) {
+ case 134:
+ case 135:
+ case 133:
+ case 85:
+ case 86:
+ node.literal = super.parseExprAtom();
+ break;
+ default:
+ this.unexpected();
+ }
+ return this.finishNode(node, "TSLiteralType");
+ }
+ tsParseTemplateLiteralType() {
+ const node = this.startNode();
+ node.literal = super.parseTemplate(false);
+ return this.finishNode(node, "TSLiteralType");
+ }
+ parseTemplateSubstitution() {
+ if (this.state.inType) return this.tsParseType();
+ return super.parseTemplateSubstitution();
+ }
+ tsParseThisTypeOrThisTypePredicate() {
+ const thisKeyword = this.tsParseThisTypeNode();
+ if (this.isContextual(116) && !this.hasPrecedingLineBreak()) {
+ return this.tsParseThisTypePredicate(thisKeyword);
+ } else {
+ return thisKeyword;
+ }
+ }
+ tsParseNonArrayType() {
+ switch (this.state.type) {
+ case 133:
+ case 134:
+ case 135:
+ case 85:
+ case 86:
+ return this.tsParseLiteralTypeNode();
+ case 53:
+ if (this.state.value === "-") {
+ const node = this.startNode();
+ const nextToken = this.lookahead();
+ if (nextToken.type !== 134 && nextToken.type !== 135) {
+ this.unexpected();
+ }
+ node.literal = this.parseMaybeUnary();
+ return this.finishNode(node, "TSLiteralType");
+ }
+ break;
+ case 78:
+ return this.tsParseThisTypeOrThisTypePredicate();
+ case 87:
+ return this.tsParseTypeQuery();
+ case 83:
+ return this.tsParseImportType();
+ case 5:
+ return this.tsLookAhead(this.tsIsStartOfMappedType.bind(this)) ? this.tsParseMappedType() : this.tsParseTypeLiteral();
+ case 0:
+ return this.tsParseTupleType();
+ case 10:
+ return this.tsParseParenthesizedType();
+ case 25:
+ case 24:
+ return this.tsParseTemplateLiteralType();
+ default:
+ {
+ const {
+ type
+ } = this.state;
+ if (tokenIsIdentifier(type) || type === 88 || type === 84) {
+ const nodeType = type === 88 ? "TSVoidKeyword" : type === 84 ? "TSNullKeyword" : keywordTypeFromName(this.state.value);
+ if (nodeType !== undefined && this.lookaheadCharCode() !== 46) {
+ const node = this.startNode();
+ this.next();
+ return this.finishNode(node, nodeType);
+ }
+ return this.tsParseTypeReference();
+ }
+ }
+ }
+ this.unexpected();
+ }
+ tsParseArrayTypeOrHigher() {
+ let type = this.tsParseNonArrayType();
+ while (!this.hasPrecedingLineBreak() && this.eat(0)) {
+ if (this.match(3)) {
+ const node = this.startNodeAtNode(type);
+ node.elementType = type;
+ this.expect(3);
+ type = this.finishNode(node, "TSArrayType");
+ } else {
+ const node = this.startNodeAtNode(type);
+ node.objectType = type;
+ node.indexType = this.tsParseType();
+ this.expect(3);
+ type = this.finishNode(node, "TSIndexedAccessType");
+ }
+ }
+ return type;
+ }
+ tsParseTypeOperator() {
+ const node = this.startNode();
+ const operator = this.state.value;
+ this.next();
+ node.operator = operator;
+ node.typeAnnotation = this.tsParseTypeOperatorOrHigher();
+ if (operator === "readonly") {
+ this.tsCheckTypeAnnotationForReadOnly(node);
+ }
+ return this.finishNode(node, "TSTypeOperator");
+ }
+ tsCheckTypeAnnotationForReadOnly(node) {
+ switch (node.typeAnnotation.type) {
+ case "TSTupleType":
+ case "TSArrayType":
+ return;
+ default:
+ this.raise(TSErrors.UnexpectedReadonly, {
+ at: node
+ });
+ }
+ }
+ tsParseInferType() {
+ const node = this.startNode();
+ this.expectContextual(115);
+ const typeParameter = this.startNode();
+ typeParameter.name = this.tsParseTypeParameterName();
+ typeParameter.constraint = this.tsTryParse(() => this.tsParseConstraintForInferType());
+ node.typeParameter = this.finishNode(typeParameter, "TSTypeParameter");
+ return this.finishNode(node, "TSInferType");
+ }
+ tsParseConstraintForInferType() {
+ if (this.eat(81)) {
+ const constraint = this.tsInDisallowConditionalTypesContext(() => this.tsParseType());
+ if (this.state.inDisallowConditionalTypesContext || !this.match(17)) {
+ return constraint;
+ }
+ }
+ }
+ tsParseTypeOperatorOrHigher() {
+ const isTypeOperator = tokenIsTSTypeOperator(this.state.type) && !this.state.containsEsc;
+ return isTypeOperator ? this.tsParseTypeOperator() : this.isContextual(115) ? this.tsParseInferType() : this.tsInAllowConditionalTypesContext(() => this.tsParseArrayTypeOrHigher());
+ }
+ tsParseUnionOrIntersectionType(kind, parseConstituentType, operator) {
+ const node = this.startNode();
+ const hasLeadingOperator = this.eat(operator);
+ const types = [];
+ do {
+ types.push(parseConstituentType());
+ } while (this.eat(operator));
+ if (types.length === 1 && !hasLeadingOperator) {
+ return types[0];
+ }
+ node.types = types;
+ return this.finishNode(node, kind);
+ }
+ tsParseIntersectionTypeOrHigher() {
+ return this.tsParseUnionOrIntersectionType("TSIntersectionType", this.tsParseTypeOperatorOrHigher.bind(this), 45);
+ }
+ tsParseUnionTypeOrHigher() {
+ return this.tsParseUnionOrIntersectionType("TSUnionType", this.tsParseIntersectionTypeOrHigher.bind(this), 43);
+ }
+ tsIsStartOfFunctionType() {
+ if (this.match(47)) {
+ return true;
+ }
+ return this.match(10) && this.tsLookAhead(this.tsIsUnambiguouslyStartOfFunctionType.bind(this));
+ }
+ tsSkipParameterStart() {
+ if (tokenIsIdentifier(this.state.type) || this.match(78)) {
+ this.next();
+ return true;
+ }
+ if (this.match(5)) {
+ const {
+ errors
+ } = this.state;
+ const previousErrorCount = errors.length;
+ try {
+ this.parseObjectLike(8, true);
+ return errors.length === previousErrorCount;
+ } catch (_unused) {
+ return false;
+ }
+ }
+ if (this.match(0)) {
+ this.next();
+ const {
+ errors
+ } = this.state;
+ const previousErrorCount = errors.length;
+ try {
+ super.parseBindingList(3, 93, 1);
+ return errors.length === previousErrorCount;
+ } catch (_unused2) {
+ return false;
+ }
+ }
+ return false;
+ }
+ tsIsUnambiguouslyStartOfFunctionType() {
+ this.next();
+ if (this.match(11) || this.match(21)) {
+ return true;
+ }
+ if (this.tsSkipParameterStart()) {
+ if (this.match(14) || this.match(12) || this.match(17) || this.match(29)) {
+ return true;
+ }
+ if (this.match(11)) {
+ this.next();
+ if (this.match(19)) {
+ return true;
+ }
+ }
+ }
+ return false;
+ }
+ tsParseTypeOrTypePredicateAnnotation(returnToken) {
+ return this.tsInType(() => {
+ const t = this.startNode();
+ this.expect(returnToken);
+ const node = this.startNode();
+ const asserts = !!this.tsTryParse(this.tsParseTypePredicateAsserts.bind(this));
+ if (asserts && this.match(78)) {
+ let thisTypePredicate = this.tsParseThisTypeOrThisTypePredicate();
+ if (thisTypePredicate.type === "TSThisType") {
+ node.parameterName = thisTypePredicate;
+ node.asserts = true;
+ node.typeAnnotation = null;
+ thisTypePredicate = this.finishNode(node, "TSTypePredicate");
+ } else {
+ this.resetStartLocationFromNode(thisTypePredicate, node);
+ thisTypePredicate.asserts = true;
+ }
+ t.typeAnnotation = thisTypePredicate;
+ return this.finishNode(t, "TSTypeAnnotation");
+ }
+ const typePredicateVariable = this.tsIsIdentifier() && this.tsTryParse(this.tsParseTypePredicatePrefix.bind(this));
+ if (!typePredicateVariable) {
+ if (!asserts) {
+ return this.tsParseTypeAnnotation(false, t);
+ }
+ node.parameterName = this.parseIdentifier();
+ node.asserts = asserts;
+ node.typeAnnotation = null;
+ t.typeAnnotation = this.finishNode(node, "TSTypePredicate");
+ return this.finishNode(t, "TSTypeAnnotation");
+ }
+ const type = this.tsParseTypeAnnotation(false);
+ node.parameterName = typePredicateVariable;
+ node.typeAnnotation = type;
+ node.asserts = asserts;
+ t.typeAnnotation = this.finishNode(node, "TSTypePredicate");
+ return this.finishNode(t, "TSTypeAnnotation");
+ });
+ }
+ tsTryParseTypeOrTypePredicateAnnotation() {
+ if (this.match(14)) {
+ return this.tsParseTypeOrTypePredicateAnnotation(14);
+ }
+ }
+ tsTryParseTypeAnnotation() {
+ if (this.match(14)) {
+ return this.tsParseTypeAnnotation();
+ }
+ }
+ tsTryParseType() {
+ return this.tsEatThenParseType(14);
+ }
+ tsParseTypePredicatePrefix() {
+ const id = this.parseIdentifier();
+ if (this.isContextual(116) && !this.hasPrecedingLineBreak()) {
+ this.next();
+ return id;
+ }
+ }
+ tsParseTypePredicateAsserts() {
+ if (this.state.type !== 109) {
+ return false;
+ }
+ const containsEsc = this.state.containsEsc;
+ this.next();
+ if (!tokenIsIdentifier(this.state.type) && !this.match(78)) {
+ return false;
+ }
+ if (containsEsc) {
+ this.raise(Errors.InvalidEscapedReservedWord, {
+ at: this.state.lastTokStartLoc,
+ reservedWord: "asserts"
+ });
+ }
+ return true;
+ }
+ tsParseTypeAnnotation(eatColon = true, t = this.startNode()) {
+ this.tsInType(() => {
+ if (eatColon) this.expect(14);
+ t.typeAnnotation = this.tsParseType();
+ });
+ return this.finishNode(t, "TSTypeAnnotation");
+ }
+ tsParseType() {
+ assert(this.state.inType);
+ const type = this.tsParseNonConditionalType();
+ if (this.state.inDisallowConditionalTypesContext || this.hasPrecedingLineBreak() || !this.eat(81)) {
+ return type;
+ }
+ const node = this.startNodeAtNode(type);
+ node.checkType = type;
+ node.extendsType = this.tsInDisallowConditionalTypesContext(() => this.tsParseNonConditionalType());
+ this.expect(17);
+ node.trueType = this.tsInAllowConditionalTypesContext(() => this.tsParseType());
+ this.expect(14);
+ node.falseType = this.tsInAllowConditionalTypesContext(() => this.tsParseType());
+ return this.finishNode(node, "TSConditionalType");
+ }
+ isAbstractConstructorSignature() {
+ return this.isContextual(124) && this.lookahead().type === 77;
+ }
+ tsParseNonConditionalType() {
+ if (this.tsIsStartOfFunctionType()) {
+ return this.tsParseFunctionOrConstructorType("TSFunctionType");
+ }
+ if (this.match(77)) {
+ return this.tsParseFunctionOrConstructorType("TSConstructorType");
+ } else if (this.isAbstractConstructorSignature()) {
+ return this.tsParseFunctionOrConstructorType("TSConstructorType", true);
+ }
+ return this.tsParseUnionTypeOrHigher();
+ }
+ tsParseTypeAssertion() {
+ if (this.getPluginOption("typescript", "disallowAmbiguousJSXLike")) {
+ this.raise(TSErrors.ReservedTypeAssertion, {
+ at: this.state.startLoc
+ });
+ }
+ const node = this.startNode();
+ node.typeAnnotation = this.tsInType(() => {
+ this.next();
+ return this.match(75) ? this.tsParseTypeReference() : this.tsParseType();
+ });
+ this.expect(48);
+ node.expression = this.parseMaybeUnary();
+ return this.finishNode(node, "TSTypeAssertion");
+ }
+ tsParseHeritageClause(token) {
+ const originalStartLoc = this.state.startLoc;
+ const delimitedList = this.tsParseDelimitedList("HeritageClauseElement", () => {
+ const node = this.startNode();
+ node.expression = this.tsParseEntityName();
+ if (this.match(47)) {
+ node.typeParameters = this.tsParseTypeArguments();
+ }
+ return this.finishNode(node, "TSExpressionWithTypeArguments");
+ });
+ if (!delimitedList.length) {
+ this.raise(TSErrors.EmptyHeritageClauseType, {
+ at: originalStartLoc,
+ token
+ });
+ }
+ return delimitedList;
+ }
+ tsParseInterfaceDeclaration(node, properties = {}) {
+ if (this.hasFollowingLineBreak()) return null;
+ this.expectContextual(129);
+ if (properties.declare) node.declare = true;
+ if (tokenIsIdentifier(this.state.type)) {
+ node.id = this.parseIdentifier();
+ this.checkIdentifier(node.id, 130);
+ } else {
+ node.id = null;
+ this.raise(TSErrors.MissingInterfaceName, {
+ at: this.state.startLoc
+ });
+ }
+ node.typeParameters = this.tsTryParseTypeParameters(this.tsParseInOutConstModifiers);
+ if (this.eat(81)) {
+ node.extends = this.tsParseHeritageClause("extends");
+ }
+ const body = this.startNode();
+ body.body = this.tsInType(this.tsParseObjectTypeMembers.bind(this));
+ node.body = this.finishNode(body, "TSInterfaceBody");
+ return this.finishNode(node, "TSInterfaceDeclaration");
+ }
+ tsParseTypeAliasDeclaration(node) {
+ node.id = this.parseIdentifier();
+ this.checkIdentifier(node.id, 2);
+ node.typeAnnotation = this.tsInType(() => {
+ node.typeParameters = this.tsTryParseTypeParameters(this.tsParseInOutModifiers);
+ this.expect(29);
+ if (this.isContextual(114) && this.lookahead().type !== 16) {
+ const node = this.startNode();
+ this.next();
+ return this.finishNode(node, "TSIntrinsicKeyword");
+ }
+ return this.tsParseType();
+ });
+ this.semicolon();
+ return this.finishNode(node, "TSTypeAliasDeclaration");
+ }
+ tsInNoContext(cb) {
+ const oldContext = this.state.context;
+ this.state.context = [oldContext[0]];
+ try {
+ return cb();
+ } finally {
+ this.state.context = oldContext;
+ }
+ }
+ tsInType(cb) {
+ const oldInType = this.state.inType;
+ this.state.inType = true;
+ try {
+ return cb();
+ } finally {
+ this.state.inType = oldInType;
+ }
+ }
+ tsInDisallowConditionalTypesContext(cb) {
+ const oldInDisallowConditionalTypesContext = this.state.inDisallowConditionalTypesContext;
+ this.state.inDisallowConditionalTypesContext = true;
+ try {
+ return cb();
+ } finally {
+ this.state.inDisallowConditionalTypesContext = oldInDisallowConditionalTypesContext;
+ }
+ }
+ tsInAllowConditionalTypesContext(cb) {
+ const oldInDisallowConditionalTypesContext = this.state.inDisallowConditionalTypesContext;
+ this.state.inDisallowConditionalTypesContext = false;
+ try {
+ return cb();
+ } finally {
+ this.state.inDisallowConditionalTypesContext = oldInDisallowConditionalTypesContext;
+ }
+ }
+ tsEatThenParseType(token) {
+ if (this.match(token)) {
+ return this.tsNextThenParseType();
+ }
+ }
+ tsExpectThenParseType(token) {
+ return this.tsInType(() => {
+ this.expect(token);
+ return this.tsParseType();
+ });
+ }
+ tsNextThenParseType() {
+ return this.tsInType(() => {
+ this.next();
+ return this.tsParseType();
+ });
+ }
+ tsParseEnumMember() {
+ const node = this.startNode();
+ node.id = this.match(133) ? super.parseStringLiteral(this.state.value) : this.parseIdentifier(true);
+ if (this.eat(29)) {
+ node.initializer = super.parseMaybeAssignAllowIn();
+ }
+ return this.finishNode(node, "TSEnumMember");
+ }
+ tsParseEnumDeclaration(node, properties = {}) {
+ if (properties.const) node.const = true;
+ if (properties.declare) node.declare = true;
+ this.expectContextual(126);
+ node.id = this.parseIdentifier();
+ this.checkIdentifier(node.id, node.const ? 8971 : 8459);
+ this.expect(5);
+ node.members = this.tsParseDelimitedList("EnumMembers", this.tsParseEnumMember.bind(this));
+ this.expect(8);
+ return this.finishNode(node, "TSEnumDeclaration");
+ }
+ tsParseModuleBlock() {
+ const node = this.startNode();
+ this.scope.enter(0);
+ this.expect(5);
+ super.parseBlockOrModuleBlockBody(node.body = [], undefined, true, 8);
+ this.scope.exit();
+ return this.finishNode(node, "TSModuleBlock");
+ }
+ tsParseModuleOrNamespaceDeclaration(node, nested = false) {
+ node.id = this.parseIdentifier();
+ if (!nested) {
+ this.checkIdentifier(node.id, 1024);
+ }
+ if (this.eat(16)) {
+ const inner = this.startNode();
+ this.tsParseModuleOrNamespaceDeclaration(inner, true);
+ node.body = inner;
+ } else {
+ this.scope.enter(256);
+ this.prodParam.enter(0);
+ node.body = this.tsParseModuleBlock();
+ this.prodParam.exit();
+ this.scope.exit();
+ }
+ return this.finishNode(node, "TSModuleDeclaration");
+ }
+ tsParseAmbientExternalModuleDeclaration(node) {
+ if (this.isContextual(112)) {
+ node.global = true;
+ node.id = this.parseIdentifier();
+ } else if (this.match(133)) {
+ node.id = super.parseStringLiteral(this.state.value);
+ } else {
+ this.unexpected();
+ }
+ if (this.match(5)) {
+ this.scope.enter(256);
+ this.prodParam.enter(0);
+ node.body = this.tsParseModuleBlock();
+ this.prodParam.exit();
+ this.scope.exit();
+ } else {
+ this.semicolon();
+ }
+ return this.finishNode(node, "TSModuleDeclaration");
+ }
+ tsParseImportEqualsDeclaration(node, maybeDefaultIdentifier, isExport) {
+ node.isExport = isExport || false;
+ node.id = maybeDefaultIdentifier || this.parseIdentifier();
+ this.checkIdentifier(node.id, 4096);
+ this.expect(29);
+ const moduleReference = this.tsParseModuleReference();
+ if (node.importKind === "type" && moduleReference.type !== "TSExternalModuleReference") {
+ this.raise(TSErrors.ImportAliasHasImportType, {
+ at: moduleReference
+ });
+ }
+ node.moduleReference = moduleReference;
+ this.semicolon();
+ return this.finishNode(node, "TSImportEqualsDeclaration");
+ }
+ tsIsExternalModuleReference() {
+ return this.isContextual(119) && this.lookaheadCharCode() === 40;
+ }
+ tsParseModuleReference() {
+ return this.tsIsExternalModuleReference() ? this.tsParseExternalModuleReference() : this.tsParseEntityName(false);
+ }
+ tsParseExternalModuleReference() {
+ const node = this.startNode();
+ this.expectContextual(119);
+ this.expect(10);
+ if (!this.match(133)) {
+ this.unexpected();
+ }
+ node.expression = super.parseExprAtom();
+ this.expect(11);
+ this.sawUnambiguousESM = true;
+ return this.finishNode(node, "TSExternalModuleReference");
+ }
+ tsLookAhead(f) {
+ const state = this.state.clone();
+ const res = f();
+ this.state = state;
+ return res;
+ }
+ tsTryParseAndCatch(f) {
+ const result = this.tryParse(abort => f() || abort());
+ if (result.aborted || !result.node) return;
+ if (result.error) this.state = result.failState;
+ return result.node;
+ }
+ tsTryParse(f) {
+ const state = this.state.clone();
+ const result = f();
+ if (result !== undefined && result !== false) {
+ return result;
+ }
+ this.state = state;
+ }
+ tsTryParseDeclare(nany) {
+ if (this.isLineTerminator()) {
+ return;
+ }
+ let startType = this.state.type;
+ let kind;
+ if (this.isContextual(100)) {
+ startType = 74;
+ kind = "let";
+ }
+ return this.tsInAmbientContext(() => {
+ switch (startType) {
+ case 68:
+ nany.declare = true;
+ return super.parseFunctionStatement(nany, false, false);
+ case 80:
+ nany.declare = true;
+ return this.parseClass(nany, true, false);
+ case 126:
+ return this.tsParseEnumDeclaration(nany, {
+ declare: true
+ });
+ case 112:
+ return this.tsParseAmbientExternalModuleDeclaration(nany);
+ case 75:
+ case 74:
+ if (!this.match(75) || !this.isLookaheadContextual("enum")) {
+ nany.declare = true;
+ return this.parseVarStatement(nany, kind || this.state.value, true);
+ }
+ this.expect(75);
+ return this.tsParseEnumDeclaration(nany, {
+ const: true,
+ declare: true
+ });
+ case 129:
+ {
+ const result = this.tsParseInterfaceDeclaration(nany, {
+ declare: true
+ });
+ if (result) return result;
+ }
+ default:
+ if (tokenIsIdentifier(startType)) {
+ return this.tsParseDeclaration(nany, this.state.value, true, null);
+ }
+ }
+ });
+ }
+ tsTryParseExportDeclaration() {
+ return this.tsParseDeclaration(this.startNode(), this.state.value, true, null);
+ }
+ tsParseExpressionStatement(node, expr, decorators) {
+ switch (expr.name) {
+ case "declare":
+ {
+ const declaration = this.tsTryParseDeclare(node);
+ if (declaration) {
+ declaration.declare = true;
+ }
+ return declaration;
+ }
+ case "global":
+ if (this.match(5)) {
+ this.scope.enter(256);
+ this.prodParam.enter(0);
+ const mod = node;
+ mod.global = true;
+ mod.id = expr;
+ mod.body = this.tsParseModuleBlock();
+ this.scope.exit();
+ this.prodParam.exit();
+ return this.finishNode(mod, "TSModuleDeclaration");
+ }
+ break;
+ default:
+ return this.tsParseDeclaration(node, expr.name, false, decorators);
+ }
+ }
+ tsParseDeclaration(node, value, next, decorators) {
+ switch (value) {
+ case "abstract":
+ if (this.tsCheckLineTerminator(next) && (this.match(80) || tokenIsIdentifier(this.state.type))) {
+ return this.tsParseAbstractDeclaration(node, decorators);
+ }
+ break;
+ case "module":
+ if (this.tsCheckLineTerminator(next)) {
+ if (this.match(133)) {
+ return this.tsParseAmbientExternalModuleDeclaration(node);
+ } else if (tokenIsIdentifier(this.state.type)) {
+ return this.tsParseModuleOrNamespaceDeclaration(node);
+ }
+ }
+ break;
+ case "namespace":
+ if (this.tsCheckLineTerminator(next) && tokenIsIdentifier(this.state.type)) {
+ return this.tsParseModuleOrNamespaceDeclaration(node);
+ }
+ break;
+ case "type":
+ if (this.tsCheckLineTerminator(next) && tokenIsIdentifier(this.state.type)) {
+ return this.tsParseTypeAliasDeclaration(node);
+ }
+ break;
+ }
+ }
+ tsCheckLineTerminator(next) {
+ if (next) {
+ if (this.hasFollowingLineBreak()) return false;
+ this.next();
+ return true;
+ }
+ return !this.isLineTerminator();
+ }
+ tsTryParseGenericAsyncArrowFunction(startLoc) {
+ if (!this.match(47)) return;
+ const oldMaybeInArrowParameters = this.state.maybeInArrowParameters;
+ this.state.maybeInArrowParameters = true;
+ const res = this.tsTryParseAndCatch(() => {
+ const node = this.startNodeAt(startLoc);
+ node.typeParameters = this.tsParseTypeParameters(this.tsParseConstModifier);
+ super.parseFunctionParams(node);
+ node.returnType = this.tsTryParseTypeOrTypePredicateAnnotation();
+ this.expect(19);
+ return node;
+ });
+ this.state.maybeInArrowParameters = oldMaybeInArrowParameters;
+ if (!res) return;
+ return super.parseArrowExpression(res, null, true);
+ }
+ tsParseTypeArgumentsInExpression() {
+ if (this.reScan_lt() !== 47) return;
+ return this.tsParseTypeArguments();
+ }
+ tsParseTypeArguments() {
+ const node = this.startNode();
+ node.params = this.tsInType(() => this.tsInNoContext(() => {
+ this.expect(47);
+ return this.tsParseDelimitedList("TypeParametersOrArguments", this.tsParseType.bind(this));
+ }));
+ if (node.params.length === 0) {
+ this.raise(TSErrors.EmptyTypeArguments, {
+ at: node
+ });
+ } else if (!this.state.inType && this.curContext() === types.brace) {
+ this.reScan_lt_gt();
+ }
+ this.expect(48);
+ return this.finishNode(node, "TSTypeParameterInstantiation");
+ }
+ tsIsDeclarationStart() {
+ return tokenIsTSDeclarationStart(this.state.type);
+ }
+ isExportDefaultSpecifier() {
+ if (this.tsIsDeclarationStart()) return false;
+ return super.isExportDefaultSpecifier();
+ }
+ parseAssignableListItem(flags, decorators) {
+ const startLoc = this.state.startLoc;
+ const modified = {};
+ this.tsParseModifiers({
+ allowedModifiers: ["public", "private", "protected", "override", "readonly"]
+ }, modified);
+ const accessibility = modified.accessibility;
+ const override = modified.override;
+ const readonly = modified.readonly;
+ if (!(flags & 4) && (accessibility || readonly || override)) {
+ this.raise(TSErrors.UnexpectedParameterModifier, {
+ at: startLoc
+ });
+ }
+ const left = this.parseMaybeDefault();
+ this.parseAssignableListItemTypes(left, flags);
+ const elt = this.parseMaybeDefault(left.loc.start, left);
+ if (accessibility || readonly || override) {
+ const pp = this.startNodeAt(startLoc);
+ if (decorators.length) {
+ pp.decorators = decorators;
+ }
+ if (accessibility) pp.accessibility = accessibility;
+ if (readonly) pp.readonly = readonly;
+ if (override) pp.override = override;
+ if (elt.type !== "Identifier" && elt.type !== "AssignmentPattern") {
+ this.raise(TSErrors.UnsupportedParameterPropertyKind, {
+ at: pp
+ });
+ }
+ pp.parameter = elt;
+ return this.finishNode(pp, "TSParameterProperty");
+ }
+ if (decorators.length) {
+ left.decorators = decorators;
+ }
+ return elt;
+ }
+ isSimpleParameter(node) {
+ return node.type === "TSParameterProperty" && super.isSimpleParameter(node.parameter) || super.isSimpleParameter(node);
+ }
+ tsDisallowOptionalPattern(node) {
+ for (const param of node.params) {
+ if (param.type !== "Identifier" && param.optional && !this.state.isAmbientContext) {
+ this.raise(TSErrors.PatternIsOptional, {
+ at: param
+ });
+ }
+ }
+ }
+ setArrowFunctionParameters(node, params, trailingCommaLoc) {
+ super.setArrowFunctionParameters(node, params, trailingCommaLoc);
+ this.tsDisallowOptionalPattern(node);
+ }
+ parseFunctionBodyAndFinish(node, type, isMethod = false) {
+ if (this.match(14)) {
+ node.returnType = this.tsParseTypeOrTypePredicateAnnotation(14);
+ }
+ const bodilessType = type === "FunctionDeclaration" ? "TSDeclareFunction" : type === "ClassMethod" || type === "ClassPrivateMethod" ? "TSDeclareMethod" : undefined;
+ if (bodilessType && !this.match(5) && this.isLineTerminator()) {
+ return this.finishNode(node, bodilessType);
+ }
+ if (bodilessType === "TSDeclareFunction" && this.state.isAmbientContext) {
+ this.raise(TSErrors.DeclareFunctionHasImplementation, {
+ at: node
+ });
+ if (node.declare) {
+ return super.parseFunctionBodyAndFinish(node, bodilessType, isMethod);
+ }
+ }
+ this.tsDisallowOptionalPattern(node);
+ return super.parseFunctionBodyAndFinish(node, type, isMethod);
+ }
+ registerFunctionStatementId(node) {
+ if (!node.body && node.id) {
+ this.checkIdentifier(node.id, 1024);
+ } else {
+ super.registerFunctionStatementId(node);
+ }
+ }
+ tsCheckForInvalidTypeCasts(items) {
+ items.forEach(node => {
+ if ((node == null ? void 0 : node.type) === "TSTypeCastExpression") {
+ this.raise(TSErrors.UnexpectedTypeAnnotation, {
+ at: node.typeAnnotation
+ });
+ }
+ });
+ }
+ toReferencedList(exprList, isInParens) {
+ this.tsCheckForInvalidTypeCasts(exprList);
+ return exprList;
+ }
+ parseArrayLike(close, canBePattern, isTuple, refExpressionErrors) {
+ const node = super.parseArrayLike(close, canBePattern, isTuple, refExpressionErrors);
+ if (node.type === "ArrayExpression") {
+ this.tsCheckForInvalidTypeCasts(node.elements);
+ }
+ return node;
+ }
+ parseSubscript(base, startLoc, noCalls, state) {
+ if (!this.hasPrecedingLineBreak() && this.match(35)) {
+ this.state.canStartJSXElement = false;
+ this.next();
+ const nonNullExpression = this.startNodeAt(startLoc);
+ nonNullExpression.expression = base;
+ return this.finishNode(nonNullExpression, "TSNonNullExpression");
+ }
+ let isOptionalCall = false;
+ if (this.match(18) && this.lookaheadCharCode() === 60) {
+ if (noCalls) {
+ state.stop = true;
+ return base;
+ }
+ state.optionalChainMember = isOptionalCall = true;
+ this.next();
+ }
+ if (this.match(47) || this.match(51)) {
+ let missingParenErrorLoc;
+ const result = this.tsTryParseAndCatch(() => {
+ if (!noCalls && this.atPossibleAsyncArrow(base)) {
+ const asyncArrowFn = this.tsTryParseGenericAsyncArrowFunction(startLoc);
+ if (asyncArrowFn) {
+ return asyncArrowFn;
+ }
+ }
+ const typeArguments = this.tsParseTypeArgumentsInExpression();
+ if (!typeArguments) return;
+ if (isOptionalCall && !this.match(10)) {
+ missingParenErrorLoc = this.state.curPosition();
+ return;
+ }
+ if (tokenIsTemplate(this.state.type)) {
+ const result = super.parseTaggedTemplateExpression(base, startLoc, state);
+ result.typeParameters = typeArguments;
+ return result;
+ }
+ if (!noCalls && this.eat(10)) {
+ const node = this.startNodeAt(startLoc);
+ node.callee = base;
+ node.arguments = this.parseCallExpressionArguments(11, false);
+ this.tsCheckForInvalidTypeCasts(node.arguments);
+ node.typeParameters = typeArguments;
+ if (state.optionalChainMember) {
+ node.optional = isOptionalCall;
+ }
+ return this.finishCallExpression(node, state.optionalChainMember);
+ }
+ const tokenType = this.state.type;
+ if (tokenType === 48 || tokenType === 52 || tokenType !== 10 && tokenCanStartExpression(tokenType) && !this.hasPrecedingLineBreak()) {
+ return;
+ }
+ const node = this.startNodeAt(startLoc);
+ node.expression = base;
+ node.typeParameters = typeArguments;
+ return this.finishNode(node, "TSInstantiationExpression");
+ });
+ if (missingParenErrorLoc) {
+ this.unexpected(missingParenErrorLoc, 10);
+ }
+ if (result) {
+ if (result.type === "TSInstantiationExpression" && (this.match(16) || this.match(18) && this.lookaheadCharCode() !== 40)) {
+ this.raise(TSErrors.InvalidPropertyAccessAfterInstantiationExpression, {
+ at: this.state.startLoc
+ });
+ }
+ return result;
+ }
+ }
+ return super.parseSubscript(base, startLoc, noCalls, state);
+ }
+ parseNewCallee(node) {
+ var _callee$extra;
+ super.parseNewCallee(node);
+ const {
+ callee
+ } = node;
+ if (callee.type === "TSInstantiationExpression" && !((_callee$extra = callee.extra) != null && _callee$extra.parenthesized)) {
+ node.typeParameters = callee.typeParameters;
+ node.callee = callee.expression;
+ }
+ }
+ parseExprOp(left, leftStartLoc, minPrec) {
+ let isSatisfies;
+ if (tokenOperatorPrecedence(58) > minPrec && !this.hasPrecedingLineBreak() && (this.isContextual(93) || (isSatisfies = this.isContextual(120)))) {
+ const node = this.startNodeAt(leftStartLoc);
+ node.expression = left;
+ node.typeAnnotation = this.tsInType(() => {
+ this.next();
+ if (this.match(75)) {
+ if (isSatisfies) {
+ this.raise(Errors.UnexpectedKeyword, {
+ at: this.state.startLoc,
+ keyword: "const"
+ });
+ }
+ return this.tsParseTypeReference();
+ }
+ return this.tsParseType();
+ });
+ this.finishNode(node, isSatisfies ? "TSSatisfiesExpression" : "TSAsExpression");
+ this.reScan_lt_gt();
+ return this.parseExprOp(node, leftStartLoc, minPrec);
+ }
+ return super.parseExprOp(left, leftStartLoc, minPrec);
+ }
+ checkReservedWord(word, startLoc, checkKeywords, isBinding) {
+ if (!this.state.isAmbientContext) {
+ super.checkReservedWord(word, startLoc, checkKeywords, isBinding);
+ }
+ }
+ checkImportReflection(node) {
+ super.checkImportReflection(node);
+ if (node.module && node.importKind !== "value") {
+ this.raise(TSErrors.ImportReflectionHasImportType, {
+ at: node.specifiers[0].loc.start
+ });
+ }
+ }
+ checkDuplicateExports() {}
+ isPotentialImportPhase(isExport) {
+ if (super.isPotentialImportPhase(isExport)) return true;
+ if (this.isContextual(130)) {
+ const ch = this.lookaheadCharCode();
+ return isExport ? ch === 123 || ch === 42 : ch !== 61;
+ }
+ return !isExport && this.isContextual(87);
+ }
+ applyImportPhase(node, isExport, phase, loc) {
+ super.applyImportPhase(node, isExport, phase, loc);
+ if (isExport) {
+ node.exportKind = phase === "type" ? "type" : "value";
+ } else {
+ node.importKind = phase === "type" || phase === "typeof" ? phase : "value";
+ }
+ }
+ parseImport(node) {
+ if (this.match(133)) {
+ node.importKind = "value";
+ return super.parseImport(node);
+ }
+ let importNode;
+ if (tokenIsIdentifier(this.state.type) && this.lookaheadCharCode() === 61) {
+ node.importKind = "value";
+ return this.tsParseImportEqualsDeclaration(node);
+ } else if (this.isContextual(130)) {
+ const maybeDefaultIdentifier = this.parseMaybeImportPhase(node, false);
+ if (this.lookaheadCharCode() === 61) {
+ return this.tsParseImportEqualsDeclaration(node, maybeDefaultIdentifier);
+ } else {
+ importNode = super.parseImportSpecifiersAndAfter(node, maybeDefaultIdentifier);
+ }
+ } else {
+ importNode = super.parseImport(node);
+ }
+ if (importNode.importKind === "type" && importNode.specifiers.length > 1 && importNode.specifiers[0].type === "ImportDefaultSpecifier") {
+ this.raise(TSErrors.TypeImportCannotSpecifyDefaultAndNamed, {
+ at: importNode
+ });
+ }
+ return importNode;
+ }
+ parseExport(node, decorators) {
+ if (this.match(83)) {
+ this.next();
+ let maybeDefaultIdentifier = null;
+ if (this.isContextual(130) && this.isPotentialImportPhase(false)) {
+ maybeDefaultIdentifier = this.parseMaybeImportPhase(node, false);
+ } else {
+ node.importKind = "value";
+ }
+ return this.tsParseImportEqualsDeclaration(node, maybeDefaultIdentifier, true);
+ } else if (this.eat(29)) {
+ const assign = node;
+ assign.expression = super.parseExpression();
+ this.semicolon();
+ this.sawUnambiguousESM = true;
+ return this.finishNode(assign, "TSExportAssignment");
+ } else if (this.eatContextual(93)) {
+ const decl = node;
+ this.expectContextual(128);
+ decl.id = this.parseIdentifier();
+ this.semicolon();
+ return this.finishNode(decl, "TSNamespaceExportDeclaration");
+ } else {
+ return super.parseExport(node, decorators);
+ }
+ }
+ isAbstractClass() {
+ return this.isContextual(124) && this.lookahead().type === 80;
+ }
+ parseExportDefaultExpression() {
+ if (this.isAbstractClass()) {
+ const cls = this.startNode();
+ this.next();
+ cls.abstract = true;
+ return this.parseClass(cls, true, true);
+ }
+ if (this.match(129)) {
+ const result = this.tsParseInterfaceDeclaration(this.startNode());
+ if (result) return result;
+ }
+ return super.parseExportDefaultExpression();
+ }
+ parseVarStatement(node, kind, allowMissingInitializer = false) {
+ const {
+ isAmbientContext
+ } = this.state;
+ const declaration = super.parseVarStatement(node, kind, allowMissingInitializer || isAmbientContext);
+ if (!isAmbientContext) return declaration;
+ for (const {
+ id,
+ init
+ } of declaration.declarations) {
+ if (!init) continue;
+ if (kind !== "const" || !!id.typeAnnotation) {
+ this.raise(TSErrors.InitializerNotAllowedInAmbientContext, {
+ at: init
+ });
+ } else if (!isValidAmbientConstInitializer(init, this.hasPlugin("estree"))) {
+ this.raise(TSErrors.ConstInitiailizerMustBeStringOrNumericLiteralOrLiteralEnumReference, {
+ at: init
+ });
+ }
+ }
+ return declaration;
+ }
+ parseStatementContent(flags, decorators) {
+ if (this.match(75) && this.isLookaheadContextual("enum")) {
+ const node = this.startNode();
+ this.expect(75);
+ return this.tsParseEnumDeclaration(node, {
+ const: true
+ });
+ }
+ if (this.isContextual(126)) {
+ return this.tsParseEnumDeclaration(this.startNode());
+ }
+ if (this.isContextual(129)) {
+ const result = this.tsParseInterfaceDeclaration(this.startNode());
+ if (result) return result;
+ }
+ return super.parseStatementContent(flags, decorators);
+ }
+ parseAccessModifier() {
+ return this.tsParseModifier(["public", "protected", "private"]);
+ }
+ tsHasSomeModifiers(member, modifiers) {
+ return modifiers.some(modifier => {
+ if (tsIsAccessModifier(modifier)) {
+ return member.accessibility === modifier;
+ }
+ return !!member[modifier];
+ });
+ }
+ tsIsStartOfStaticBlocks() {
+ return this.isContextual(106) && this.lookaheadCharCode() === 123;
+ }
+ parseClassMember(classBody, member, state) {
+ const modifiers = ["declare", "private", "public", "protected", "override", "abstract", "readonly", "static"];
+ this.tsParseModifiers({
+ allowedModifiers: modifiers,
+ disallowedModifiers: ["in", "out"],
+ stopOnStartOfClassStaticBlock: true,
+ errorTemplate: TSErrors.InvalidModifierOnTypeParameterPositions
+ }, member);
+ const callParseClassMemberWithIsStatic = () => {
+ if (this.tsIsStartOfStaticBlocks()) {
+ this.next();
+ this.next();
+ if (this.tsHasSomeModifiers(member, modifiers)) {
+ this.raise(TSErrors.StaticBlockCannotHaveModifier, {
+ at: this.state.curPosition()
+ });
+ }
+ super.parseClassStaticBlock(classBody, member);
+ } else {
+ this.parseClassMemberWithIsStatic(classBody, member, state, !!member.static);
+ }
+ };
+ if (member.declare) {
+ this.tsInAmbientContext(callParseClassMemberWithIsStatic);
+ } else {
+ callParseClassMemberWithIsStatic();
+ }
+ }
+ parseClassMemberWithIsStatic(classBody, member, state, isStatic) {
+ const idx = this.tsTryParseIndexSignature(member);
+ if (idx) {
+ classBody.body.push(idx);
+ if (member.abstract) {
+ this.raise(TSErrors.IndexSignatureHasAbstract, {
+ at: member
+ });
+ }
+ if (member.accessibility) {
+ this.raise(TSErrors.IndexSignatureHasAccessibility, {
+ at: member,
+ modifier: member.accessibility
+ });
+ }
+ if (member.declare) {
+ this.raise(TSErrors.IndexSignatureHasDeclare, {
+ at: member
+ });
+ }
+ if (member.override) {
+ this.raise(TSErrors.IndexSignatureHasOverride, {
+ at: member
+ });
+ }
+ return;
+ }
+ if (!this.state.inAbstractClass && member.abstract) {
+ this.raise(TSErrors.NonAbstractClassHasAbstractMethod, {
+ at: member
+ });
+ }
+ if (member.override) {
+ if (!state.hadSuperClass) {
+ this.raise(TSErrors.OverrideNotInSubClass, {
+ at: member
+ });
+ }
+ }
+ super.parseClassMemberWithIsStatic(classBody, member, state, isStatic);
+ }
+ parsePostMemberNameModifiers(methodOrProp) {
+ const optional = this.eat(17);
+ if (optional) methodOrProp.optional = true;
+ if (methodOrProp.readonly && this.match(10)) {
+ this.raise(TSErrors.ClassMethodHasReadonly, {
+ at: methodOrProp
+ });
+ }
+ if (methodOrProp.declare && this.match(10)) {
+ this.raise(TSErrors.ClassMethodHasDeclare, {
+ at: methodOrProp
+ });
+ }
+ }
+ parseExpressionStatement(node, expr, decorators) {
+ const decl = expr.type === "Identifier" ? this.tsParseExpressionStatement(node, expr, decorators) : undefined;
+ return decl || super.parseExpressionStatement(node, expr, decorators);
+ }
+ shouldParseExportDeclaration() {
+ if (this.tsIsDeclarationStart()) return true;
+ return super.shouldParseExportDeclaration();
+ }
+ parseConditional(expr, startLoc, refExpressionErrors) {
+ if (!this.state.maybeInArrowParameters || !this.match(17)) {
+ return super.parseConditional(expr, startLoc, refExpressionErrors);
+ }
+ const result = this.tryParse(() => super.parseConditional(expr, startLoc));
+ if (!result.node) {
+ if (result.error) {
+ super.setOptionalParametersError(refExpressionErrors, result.error);
+ }
+ return expr;
+ }
+ if (result.error) this.state = result.failState;
+ return result.node;
+ }
+ parseParenItem(node, startLoc) {
+ node = super.parseParenItem(node, startLoc);
+ if (this.eat(17)) {
+ node.optional = true;
+ this.resetEndLocation(node);
+ }
+ if (this.match(14)) {
+ const typeCastNode = this.startNodeAt(startLoc);
+ typeCastNode.expression = node;
+ typeCastNode.typeAnnotation = this.tsParseTypeAnnotation();
+ return this.finishNode(typeCastNode, "TSTypeCastExpression");
+ }
+ return node;
+ }
+ parseExportDeclaration(node) {
+ if (!this.state.isAmbientContext && this.isContextual(125)) {
+ return this.tsInAmbientContext(() => this.parseExportDeclaration(node));
+ }
+ const startLoc = this.state.startLoc;
+ const isDeclare = this.eatContextual(125);
+ if (isDeclare && (this.isContextual(125) || !this.shouldParseExportDeclaration())) {
+ throw this.raise(TSErrors.ExpectedAmbientAfterExportDeclare, {
+ at: this.state.startLoc
+ });
+ }
+ const isIdentifier = tokenIsIdentifier(this.state.type);
+ const declaration = isIdentifier && this.tsTryParseExportDeclaration() || super.parseExportDeclaration(node);
+ if (!declaration) return null;
+ if (declaration.type === "TSInterfaceDeclaration" || declaration.type === "TSTypeAliasDeclaration" || isDeclare) {
+ node.exportKind = "type";
+ }
+ if (isDeclare) {
+ this.resetStartLocation(declaration, startLoc);
+ declaration.declare = true;
+ }
+ return declaration;
+ }
+ parseClassId(node, isStatement, optionalId, bindingType) {
+ if ((!isStatement || optionalId) && this.isContextual(113)) {
+ return;
+ }
+ super.parseClassId(node, isStatement, optionalId, node.declare ? 1024 : 8331);
+ const typeParameters = this.tsTryParseTypeParameters(this.tsParseInOutConstModifiers);
+ if (typeParameters) node.typeParameters = typeParameters;
+ }
+ parseClassPropertyAnnotation(node) {
+ if (!node.optional) {
+ if (this.eat(35)) {
+ node.definite = true;
+ } else if (this.eat(17)) {
+ node.optional = true;
+ }
+ }
+ const type = this.tsTryParseTypeAnnotation();
+ if (type) node.typeAnnotation = type;
+ }
+ parseClassProperty(node) {
+ this.parseClassPropertyAnnotation(node);
+ if (this.state.isAmbientContext && !(node.readonly && !node.typeAnnotation) && this.match(29)) {
+ this.raise(TSErrors.DeclareClassFieldHasInitializer, {
+ at: this.state.startLoc
+ });
+ }
+ if (node.abstract && this.match(29)) {
+ const {
+ key
+ } = node;
+ this.raise(TSErrors.AbstractPropertyHasInitializer, {
+ at: this.state.startLoc,
+ propertyName: key.type === "Identifier" && !node.computed ? key.name : `[${this.input.slice(key.start, key.end)}]`
+ });
+ }
+ return super.parseClassProperty(node);
+ }
+ parseClassPrivateProperty(node) {
+ if (node.abstract) {
+ this.raise(TSErrors.PrivateElementHasAbstract, {
+ at: node
+ });
+ }
+ if (node.accessibility) {
+ this.raise(TSErrors.PrivateElementHasAccessibility, {
+ at: node,
+ modifier: node.accessibility
+ });
+ }
+ this.parseClassPropertyAnnotation(node);
+ return super.parseClassPrivateProperty(node);
+ }
+ parseClassAccessorProperty(node) {
+ this.parseClassPropertyAnnotation(node);
+ if (node.optional) {
+ this.raise(TSErrors.AccessorCannotBeOptional, {
+ at: node
+ });
+ }
+ return super.parseClassAccessorProperty(node);
+ }
+ pushClassMethod(classBody, method, isGenerator, isAsync, isConstructor, allowsDirectSuper) {
+ const typeParameters = this.tsTryParseTypeParameters(this.tsParseConstModifier);
+ if (typeParameters && isConstructor) {
+ this.raise(TSErrors.ConstructorHasTypeParameters, {
+ at: typeParameters
+ });
+ }
+ const {
+ declare = false,
+ kind
+ } = method;
+ if (declare && (kind === "get" || kind === "set")) {
+ this.raise(TSErrors.DeclareAccessor, {
+ at: method,
+ kind
+ });
+ }
+ if (typeParameters) method.typeParameters = typeParameters;
+ super.pushClassMethod(classBody, method, isGenerator, isAsync, isConstructor, allowsDirectSuper);
+ }
+ pushClassPrivateMethod(classBody, method, isGenerator, isAsync) {
+ const typeParameters = this.tsTryParseTypeParameters(this.tsParseConstModifier);
+ if (typeParameters) method.typeParameters = typeParameters;
+ super.pushClassPrivateMethod(classBody, method, isGenerator, isAsync);
+ }
+ declareClassPrivateMethodInScope(node, kind) {
+ if (node.type === "TSDeclareMethod") return;
+ if (node.type === "MethodDefinition" && !node.value.body) return;
+ super.declareClassPrivateMethodInScope(node, kind);
+ }
+ parseClassSuper(node) {
+ super.parseClassSuper(node);
+ if (node.superClass && (this.match(47) || this.match(51))) {
+ node.superTypeParameters = this.tsParseTypeArgumentsInExpression();
+ }
+ if (this.eatContextual(113)) {
+ node.implements = this.tsParseHeritageClause("implements");
+ }
+ }
+ parseObjPropValue(prop, startLoc, isGenerator, isAsync, isPattern, isAccessor, refExpressionErrors) {
+ const typeParameters = this.tsTryParseTypeParameters(this.tsParseConstModifier);
+ if (typeParameters) prop.typeParameters = typeParameters;
+ return super.parseObjPropValue(prop, startLoc, isGenerator, isAsync, isPattern, isAccessor, refExpressionErrors);
+ }
+ parseFunctionParams(node, isConstructor) {
+ const typeParameters = this.tsTryParseTypeParameters(this.tsParseConstModifier);
+ if (typeParameters) node.typeParameters = typeParameters;
+ super.parseFunctionParams(node, isConstructor);
+ }
+ parseVarId(decl, kind) {
+ super.parseVarId(decl, kind);
+ if (decl.id.type === "Identifier" && !this.hasPrecedingLineBreak() && this.eat(35)) {
+ decl.definite = true;
+ }
+ const type = this.tsTryParseTypeAnnotation();
+ if (type) {
+ decl.id.typeAnnotation = type;
+ this.resetEndLocation(decl.id);
+ }
+ }
+ parseAsyncArrowFromCallExpression(node, call) {
+ if (this.match(14)) {
+ node.returnType = this.tsParseTypeAnnotation();
+ }
+ return super.parseAsyncArrowFromCallExpression(node, call);
+ }
+ parseMaybeAssign(refExpressionErrors, afterLeftParse) {
+ var _jsx, _jsx2, _typeCast, _jsx3, _typeCast2;
+ let state;
+ let jsx;
+ let typeCast;
+ if (this.hasPlugin("jsx") && (this.match(142) || this.match(47))) {
+ state = this.state.clone();
+ jsx = this.tryParse(() => super.parseMaybeAssign(refExpressionErrors, afterLeftParse), state);
+ if (!jsx.error) return jsx.node;
+ const {
+ context
+ } = this.state;
+ const currentContext = context[context.length - 1];
+ if (currentContext === types.j_oTag || currentContext === types.j_expr) {
+ context.pop();
+ }
+ }
+ if (!((_jsx = jsx) != null && _jsx.error) && !this.match(47)) {
+ return super.parseMaybeAssign(refExpressionErrors, afterLeftParse);
+ }
+ if (!state || state === this.state) state = this.state.clone();
+ let typeParameters;
+ const arrow = this.tryParse(abort => {
+ var _expr$extra, _typeParameters;
+ typeParameters = this.tsParseTypeParameters(this.tsParseConstModifier);
+ const expr = super.parseMaybeAssign(refExpressionErrors, afterLeftParse);
+ if (expr.type !== "ArrowFunctionExpression" || (_expr$extra = expr.extra) != null && _expr$extra.parenthesized) {
+ abort();
+ }
+ if (((_typeParameters = typeParameters) == null ? void 0 : _typeParameters.params.length) !== 0) {
+ this.resetStartLocationFromNode(expr, typeParameters);
+ }
+ expr.typeParameters = typeParameters;
+ return expr;
+ }, state);
+ if (!arrow.error && !arrow.aborted) {
+ if (typeParameters) this.reportReservedArrowTypeParam(typeParameters);
+ return arrow.node;
+ }
+ if (!jsx) {
+ assert(!this.hasPlugin("jsx"));
+ typeCast = this.tryParse(() => super.parseMaybeAssign(refExpressionErrors, afterLeftParse), state);
+ if (!typeCast.error) return typeCast.node;
+ }
+ if ((_jsx2 = jsx) != null && _jsx2.node) {
+ this.state = jsx.failState;
+ return jsx.node;
+ }
+ if (arrow.node) {
+ this.state = arrow.failState;
+ if (typeParameters) this.reportReservedArrowTypeParam(typeParameters);
+ return arrow.node;
+ }
+ if ((_typeCast = typeCast) != null && _typeCast.node) {
+ this.state = typeCast.failState;
+ return typeCast.node;
+ }
+ throw ((_jsx3 = jsx) == null ? void 0 : _jsx3.error) || arrow.error || ((_typeCast2 = typeCast) == null ? void 0 : _typeCast2.error);
+ }
+ reportReservedArrowTypeParam(node) {
+ var _node$extra;
+ if (node.params.length === 1 && !node.params[0].constraint && !((_node$extra = node.extra) != null && _node$extra.trailingComma) && this.getPluginOption("typescript", "disallowAmbiguousJSXLike")) {
+ this.raise(TSErrors.ReservedArrowTypeParam, {
+ at: node
+ });
+ }
+ }
+ parseMaybeUnary(refExpressionErrors, sawUnary) {
+ if (!this.hasPlugin("jsx") && this.match(47)) {
+ return this.tsParseTypeAssertion();
+ }
+ return super.parseMaybeUnary(refExpressionErrors, sawUnary);
+ }
+ parseArrow(node) {
+ if (this.match(14)) {
+ const result = this.tryParse(abort => {
+ const returnType = this.tsParseTypeOrTypePredicateAnnotation(14);
+ if (this.canInsertSemicolon() || !this.match(19)) abort();
+ return returnType;
+ });
+ if (result.aborted) return;
+ if (!result.thrown) {
+ if (result.error) this.state = result.failState;
+ node.returnType = result.node;
+ }
+ }
+ return super.parseArrow(node);
+ }
+ parseAssignableListItemTypes(param, flags) {
+ if (!(flags & 2)) return param;
+ if (this.eat(17)) {
+ param.optional = true;
+ }
+ const type = this.tsTryParseTypeAnnotation();
+ if (type) param.typeAnnotation = type;
+ this.resetEndLocation(param);
+ return param;
+ }
+ isAssignable(node, isBinding) {
+ switch (node.type) {
+ case "TSTypeCastExpression":
+ return this.isAssignable(node.expression, isBinding);
+ case "TSParameterProperty":
+ return true;
+ default:
+ return super.isAssignable(node, isBinding);
+ }
+ }
+ toAssignable(node, isLHS = false) {
+ switch (node.type) {
+ case "ParenthesizedExpression":
+ this.toAssignableParenthesizedExpression(node, isLHS);
+ break;
+ case "TSAsExpression":
+ case "TSSatisfiesExpression":
+ case "TSNonNullExpression":
+ case "TSTypeAssertion":
+ if (isLHS) {
+ this.expressionScope.recordArrowParameterBindingError(TSErrors.UnexpectedTypeCastInParameter, {
+ at: node
+ });
+ } else {
+ this.raise(TSErrors.UnexpectedTypeCastInParameter, {
+ at: node
+ });
+ }
+ this.toAssignable(node.expression, isLHS);
+ break;
+ case "AssignmentExpression":
+ if (!isLHS && node.left.type === "TSTypeCastExpression") {
+ node.left = this.typeCastToParameter(node.left);
+ }
+ default:
+ super.toAssignable(node, isLHS);
+ }
+ }
+ toAssignableParenthesizedExpression(node, isLHS) {
+ switch (node.expression.type) {
+ case "TSAsExpression":
+ case "TSSatisfiesExpression":
+ case "TSNonNullExpression":
+ case "TSTypeAssertion":
+ case "ParenthesizedExpression":
+ this.toAssignable(node.expression, isLHS);
+ break;
+ default:
+ super.toAssignable(node, isLHS);
+ }
+ }
+ checkToRestConversion(node, allowPattern) {
+ switch (node.type) {
+ case "TSAsExpression":
+ case "TSSatisfiesExpression":
+ case "TSTypeAssertion":
+ case "TSNonNullExpression":
+ this.checkToRestConversion(node.expression, false);
+ break;
+ default:
+ super.checkToRestConversion(node, allowPattern);
+ }
+ }
+ isValidLVal(type, isUnparenthesizedInAssign, binding) {
+ return getOwn({
+ TSTypeCastExpression: true,
+ TSParameterProperty: "parameter",
+ TSNonNullExpression: "expression",
+ TSAsExpression: (binding !== 64 || !isUnparenthesizedInAssign) && ["expression", true],
+ TSSatisfiesExpression: (binding !== 64 || !isUnparenthesizedInAssign) && ["expression", true],
+ TSTypeAssertion: (binding !== 64 || !isUnparenthesizedInAssign) && ["expression", true]
+ }, type) || super.isValidLVal(type, isUnparenthesizedInAssign, binding);
+ }
+ parseBindingAtom() {
+ if (this.state.type === 78) {
+ return this.parseIdentifier(true);
+ }
+ return super.parseBindingAtom();
+ }
+ parseMaybeDecoratorArguments(expr) {
+ if (this.match(47) || this.match(51)) {
+ const typeArguments = this.tsParseTypeArgumentsInExpression();
+ if (this.match(10)) {
+ const call = super.parseMaybeDecoratorArguments(expr);
+ call.typeParameters = typeArguments;
+ return call;
+ }
+ this.unexpected(null, 10);
+ }
+ return super.parseMaybeDecoratorArguments(expr);
+ }
+ checkCommaAfterRest(close) {
+ if (this.state.isAmbientContext && this.match(12) && this.lookaheadCharCode() === close) {
+ this.next();
+ return false;
+ }
+ return super.checkCommaAfterRest(close);
+ }
+ isClassMethod() {
+ return this.match(47) || super.isClassMethod();
+ }
+ isClassProperty() {
+ return this.match(35) || this.match(14) || super.isClassProperty();
+ }
+ parseMaybeDefault(startLoc, left) {
+ const node = super.parseMaybeDefault(startLoc, left);
+ if (node.type === "AssignmentPattern" && node.typeAnnotation && node.right.start < node.typeAnnotation.start) {
+ this.raise(TSErrors.TypeAnnotationAfterAssign, {
+ at: node.typeAnnotation
+ });
+ }
+ return node;
+ }
+ getTokenFromCode(code) {
+ if (this.state.inType) {
+ if (code === 62) {
+ this.finishOp(48, 1);
+ return;
+ }
+ if (code === 60) {
+ this.finishOp(47, 1);
+ return;
+ }
+ }
+ super.getTokenFromCode(code);
+ }
+ reScan_lt_gt() {
+ const {
+ type
+ } = this.state;
+ if (type === 47) {
+ this.state.pos -= 1;
+ this.readToken_lt();
+ } else if (type === 48) {
+ this.state.pos -= 1;
+ this.readToken_gt();
+ }
+ }
+ reScan_lt() {
+ const {
+ type
+ } = this.state;
+ if (type === 51) {
+ this.state.pos -= 2;
+ this.finishOp(47, 1);
+ return 47;
+ }
+ return type;
+ }
+ toAssignableList(exprList, trailingCommaLoc, isLHS) {
+ for (let i = 0; i < exprList.length; i++) {
+ const expr = exprList[i];
+ if ((expr == null ? void 0 : expr.type) === "TSTypeCastExpression") {
+ exprList[i] = this.typeCastToParameter(expr);
+ }
+ }
+ super.toAssignableList(exprList, trailingCommaLoc, isLHS);
+ }
+ typeCastToParameter(node) {
+ node.expression.typeAnnotation = node.typeAnnotation;
+ this.resetEndLocation(node.expression, node.typeAnnotation.loc.end);
+ return node.expression;
+ }
+ shouldParseArrow(params) {
+ if (this.match(14)) {
+ return params.every(expr => this.isAssignable(expr, true));
+ }
+ return super.shouldParseArrow(params);
+ }
+ shouldParseAsyncArrow() {
+ return this.match(14) || super.shouldParseAsyncArrow();
+ }
+ canHaveLeadingDecorator() {
+ return super.canHaveLeadingDecorator() || this.isAbstractClass();
+ }
+ jsxParseOpeningElementAfterName(node) {
+ if (this.match(47) || this.match(51)) {
+ const typeArguments = this.tsTryParseAndCatch(() => this.tsParseTypeArgumentsInExpression());
+ if (typeArguments) node.typeParameters = typeArguments;
+ }
+ return super.jsxParseOpeningElementAfterName(node);
+ }
+ getGetterSetterExpectedParamCount(method) {
+ const baseCount = super.getGetterSetterExpectedParamCount(method);
+ const params = this.getObjectOrClassMethodParams(method);
+ const firstParam = params[0];
+ const hasContextParam = firstParam && this.isThisParam(firstParam);
+ return hasContextParam ? baseCount + 1 : baseCount;
+ }
+ parseCatchClauseParam() {
+ const param = super.parseCatchClauseParam();
+ const type = this.tsTryParseTypeAnnotation();
+ if (type) {
+ param.typeAnnotation = type;
+ this.resetEndLocation(param);
+ }
+ return param;
+ }
+ tsInAmbientContext(cb) {
+ const oldIsAmbientContext = this.state.isAmbientContext;
+ this.state.isAmbientContext = true;
+ try {
+ return cb();
+ } finally {
+ this.state.isAmbientContext = oldIsAmbientContext;
+ }
+ }
+ parseClass(node, isStatement, optionalId) {
+ const oldInAbstractClass = this.state.inAbstractClass;
+ this.state.inAbstractClass = !!node.abstract;
+ try {
+ return super.parseClass(node, isStatement, optionalId);
+ } finally {
+ this.state.inAbstractClass = oldInAbstractClass;
+ }
+ }
+ tsParseAbstractDeclaration(node, decorators) {
+ if (this.match(80)) {
+ node.abstract = true;
+ return this.maybeTakeDecorators(decorators, this.parseClass(node, true, false));
+ } else if (this.isContextual(129)) {
+ if (!this.hasFollowingLineBreak()) {
+ node.abstract = true;
+ this.raise(TSErrors.NonClassMethodPropertyHasAbstractModifer, {
+ at: node
+ });
+ return this.tsParseInterfaceDeclaration(node);
+ }
+ } else {
+ this.unexpected(null, 80);
+ }
+ }
+ parseMethod(node, isGenerator, isAsync, isConstructor, allowDirectSuper, type, inClassScope) {
+ const method = super.parseMethod(node, isGenerator, isAsync, isConstructor, allowDirectSuper, type, inClassScope);
+ if (method.abstract) {
+ const hasBody = this.hasPlugin("estree") ? !!method.value.body : !!method.body;
+ if (hasBody) {
+ const {
+ key
+ } = method;
+ this.raise(TSErrors.AbstractMethodHasImplementation, {
+ at: method,
+ methodName: key.type === "Identifier" && !method.computed ? key.name : `[${this.input.slice(key.start, key.end)}]`
+ });
+ }
+ }
+ return method;
+ }
+ tsParseTypeParameterName() {
+ const typeName = this.parseIdentifier();
+ return typeName.name;
+ }
+ shouldParseAsAmbientContext() {
+ return !!this.getPluginOption("typescript", "dts");
+ }
+ parse() {
+ if (this.shouldParseAsAmbientContext()) {
+ this.state.isAmbientContext = true;
+ }
+ return super.parse();
+ }
+ getExpression() {
+ if (this.shouldParseAsAmbientContext()) {
+ this.state.isAmbientContext = true;
+ }
+ return super.getExpression();
+ }
+ parseExportSpecifier(node, isString, isInTypeExport, isMaybeTypeOnly) {
+ if (!isString && isMaybeTypeOnly) {
+ this.parseTypeOnlyImportExportSpecifier(node, false, isInTypeExport);
+ return this.finishNode(node, "ExportSpecifier");
+ }
+ node.exportKind = "value";
+ return super.parseExportSpecifier(node, isString, isInTypeExport, isMaybeTypeOnly);
+ }
+ parseImportSpecifier(specifier, importedIsString, isInTypeOnlyImport, isMaybeTypeOnly, bindingType) {
+ if (!importedIsString && isMaybeTypeOnly) {
+ this.parseTypeOnlyImportExportSpecifier(specifier, true, isInTypeOnlyImport);
+ return this.finishNode(specifier, "ImportSpecifier");
+ }
+ specifier.importKind = "value";
+ return super.parseImportSpecifier(specifier, importedIsString, isInTypeOnlyImport, isMaybeTypeOnly, isInTypeOnlyImport ? 4098 : 4096);
+ }
+ parseTypeOnlyImportExportSpecifier(node, isImport, isInTypeOnlyImportExport) {
+ const leftOfAsKey = isImport ? "imported" : "local";
+ const rightOfAsKey = isImport ? "local" : "exported";
+ let leftOfAs = node[leftOfAsKey];
+ let rightOfAs;
+ let hasTypeSpecifier = false;
+ let canParseAsKeyword = true;
+ const loc = leftOfAs.loc.start;
+ if (this.isContextual(93)) {
+ const firstAs = this.parseIdentifier();
+ if (this.isContextual(93)) {
+ const secondAs = this.parseIdentifier();
+ if (tokenIsKeywordOrIdentifier(this.state.type)) {
+ hasTypeSpecifier = true;
+ leftOfAs = firstAs;
+ rightOfAs = isImport ? this.parseIdentifier() : this.parseModuleExportName();
+ canParseAsKeyword = false;
+ } else {
+ rightOfAs = secondAs;
+ canParseAsKeyword = false;
+ }
+ } else if (tokenIsKeywordOrIdentifier(this.state.type)) {
+ canParseAsKeyword = false;
+ rightOfAs = isImport ? this.parseIdentifier() : this.parseModuleExportName();
+ } else {
+ hasTypeSpecifier = true;
+ leftOfAs = firstAs;
+ }
+ } else if (tokenIsKeywordOrIdentifier(this.state.type)) {
+ hasTypeSpecifier = true;
+ if (isImport) {
+ leftOfAs = this.parseIdentifier(true);
+ if (!this.isContextual(93)) {
+ this.checkReservedWord(leftOfAs.name, leftOfAs.loc.start, true, true);
+ }
+ } else {
+ leftOfAs = this.parseModuleExportName();
+ }
+ }
+ if (hasTypeSpecifier && isInTypeOnlyImportExport) {
+ this.raise(isImport ? TSErrors.TypeModifierIsUsedInTypeImports : TSErrors.TypeModifierIsUsedInTypeExports, {
+ at: loc
+ });
+ }
+ node[leftOfAsKey] = leftOfAs;
+ node[rightOfAsKey] = rightOfAs;
+ const kindKey = isImport ? "importKind" : "exportKind";
+ node[kindKey] = hasTypeSpecifier ? "type" : "value";
+ if (canParseAsKeyword && this.eatContextual(93)) {
+ node[rightOfAsKey] = isImport ? this.parseIdentifier() : this.parseModuleExportName();
+ }
+ if (!node[rightOfAsKey]) {
+ node[rightOfAsKey] = cloneIdentifier(node[leftOfAsKey]);
+ }
+ if (isImport) {
+ this.checkIdentifier(node[rightOfAsKey], hasTypeSpecifier ? 4098 : 4096);
+ }
+ }
+};
+function isPossiblyLiteralEnum(expression) {
+ if (expression.type !== "MemberExpression") return false;
+ const {
+ computed,
+ property
+ } = expression;
+ if (computed && property.type !== "StringLiteral" && (property.type !== "TemplateLiteral" || property.expressions.length > 0)) {
+ return false;
+ }
+ return isUncomputedMemberExpressionChain(expression.object);
+}
+function isValidAmbientConstInitializer(expression, estree) {
+ var _expression$extra;
+ const {
+ type
+ } = expression;
+ if ((_expression$extra = expression.extra) != null && _expression$extra.parenthesized) {
+ return false;
+ }
+ if (estree) {
+ if (type === "Literal") {
+ const {
+ value
+ } = expression;
+ if (typeof value === "string" || typeof value === "boolean") {
+ return true;
+ }
+ }
+ } else {
+ if (type === "StringLiteral" || type === "BooleanLiteral") {
+ return true;
+ }
+ }
+ if (isNumber(expression, estree) || isNegativeNumber(expression, estree)) {
+ return true;
+ }
+ if (type === "TemplateLiteral" && expression.expressions.length === 0) {
+ return true;
+ }
+ if (isPossiblyLiteralEnum(expression)) {
+ return true;
+ }
+ return false;
+}
+function isNumber(expression, estree) {
+ if (estree) {
+ return expression.type === "Literal" && (typeof expression.value === "number" || "bigint" in expression);
+ }
+ return expression.type === "NumericLiteral" || expression.type === "BigIntLiteral";
+}
+function isNegativeNumber(expression, estree) {
+ if (expression.type === "UnaryExpression") {
+ const {
+ operator,
+ argument
+ } = expression;
+ if (operator === "-" && isNumber(argument, estree)) {
+ return true;
+ }
+ }
+ return false;
+}
+function isUncomputedMemberExpressionChain(expression) {
+ if (expression.type === "Identifier") return true;
+ if (expression.type !== "MemberExpression" || expression.computed) {
+ return false;
+ }
+ return isUncomputedMemberExpressionChain(expression.object);
+}
+const PlaceholderErrors = ParseErrorEnum`placeholders`({
+ ClassNameIsRequired: "A class name is required.",
+ UnexpectedSpace: "Unexpected space in placeholder."
+});
+var placeholders = superClass => class PlaceholdersParserMixin extends superClass {
+ parsePlaceholder(expectedNode) {
+ if (this.match(144)) {
+ const node = this.startNode();
+ this.next();
+ this.assertNoSpace();
+ node.name = super.parseIdentifier(true);
+ this.assertNoSpace();
+ this.expect(144);
+ return this.finishPlaceholder(node, expectedNode);
+ }
+ }
+ finishPlaceholder(node, expectedNode) {
+ const isFinished = !!(node.expectedNode && node.type === "Placeholder");
+ node.expectedNode = expectedNode;
+ return isFinished ? node : this.finishNode(node, "Placeholder");
+ }
+ getTokenFromCode(code) {
+ if (code === 37 && this.input.charCodeAt(this.state.pos + 1) === 37) {
+ this.finishOp(144, 2);
+ } else {
+ super.getTokenFromCode(code);
+ }
+ }
+ parseExprAtom(refExpressionErrors) {
+ return this.parsePlaceholder("Expression") || super.parseExprAtom(refExpressionErrors);
+ }
+ parseIdentifier(liberal) {
+ return this.parsePlaceholder("Identifier") || super.parseIdentifier(liberal);
+ }
+ checkReservedWord(word, startLoc, checkKeywords, isBinding) {
+ if (word !== undefined) {
+ super.checkReservedWord(word, startLoc, checkKeywords, isBinding);
+ }
+ }
+ parseBindingAtom() {
+ return this.parsePlaceholder("Pattern") || super.parseBindingAtom();
+ }
+ isValidLVal(type, isParenthesized, binding) {
+ return type === "Placeholder" || super.isValidLVal(type, isParenthesized, binding);
+ }
+ toAssignable(node, isLHS) {
+ if (node && node.type === "Placeholder" && node.expectedNode === "Expression") {
+ node.expectedNode = "Pattern";
+ } else {
+ super.toAssignable(node, isLHS);
+ }
+ }
+ chStartsBindingIdentifier(ch, pos) {
+ if (super.chStartsBindingIdentifier(ch, pos)) {
+ return true;
+ }
+ const nextToken = this.lookahead();
+ if (nextToken.type === 144) {
+ return true;
+ }
+ return false;
+ }
+ verifyBreakContinue(node, isBreak) {
+ if (node.label && node.label.type === "Placeholder") return;
+ super.verifyBreakContinue(node, isBreak);
+ }
+ parseExpressionStatement(node, expr) {
+ var _expr$extra;
+ if (expr.type !== "Placeholder" || (_expr$extra = expr.extra) != null && _expr$extra.parenthesized) {
+ return super.parseExpressionStatement(node, expr);
+ }
+ if (this.match(14)) {
+ const stmt = node;
+ stmt.label = this.finishPlaceholder(expr, "Identifier");
+ this.next();
+ stmt.body = super.parseStatementOrSloppyAnnexBFunctionDeclaration();
+ return this.finishNode(stmt, "LabeledStatement");
+ }
+ this.semicolon();
+ node.name = expr.name;
+ return this.finishPlaceholder(node, "Statement");
+ }
+ parseBlock(allowDirectives, createNewLexicalScope, afterBlockParse) {
+ return this.parsePlaceholder("BlockStatement") || super.parseBlock(allowDirectives, createNewLexicalScope, afterBlockParse);
+ }
+ parseFunctionId(requireId) {
+ return this.parsePlaceholder("Identifier") || super.parseFunctionId(requireId);
+ }
+ parseClass(node, isStatement, optionalId) {
+ const type = isStatement ? "ClassDeclaration" : "ClassExpression";
+ this.next();
+ const oldStrict = this.state.strict;
+ const placeholder = this.parsePlaceholder("Identifier");
+ if (placeholder) {
+ if (this.match(81) || this.match(144) || this.match(5)) {
+ node.id = placeholder;
+ } else if (optionalId || !isStatement) {
+ node.id = null;
+ node.body = this.finishPlaceholder(placeholder, "ClassBody");
+ return this.finishNode(node, type);
+ } else {
+ throw this.raise(PlaceholderErrors.ClassNameIsRequired, {
+ at: this.state.startLoc
+ });
+ }
+ } else {
+ this.parseClassId(node, isStatement, optionalId);
+ }
+ super.parseClassSuper(node);
+ node.body = this.parsePlaceholder("ClassBody") || super.parseClassBody(!!node.superClass, oldStrict);
+ return this.finishNode(node, type);
+ }
+ parseExport(node, decorators) {
+ const placeholder = this.parsePlaceholder("Identifier");
+ if (!placeholder) return super.parseExport(node, decorators);
+ if (!this.isContextual(98) && !this.match(12)) {
+ node.specifiers = [];
+ node.source = null;
+ node.declaration = this.finishPlaceholder(placeholder, "Declaration");
+ return this.finishNode(node, "ExportNamedDeclaration");
+ }
+ this.expectPlugin("exportDefaultFrom");
+ const specifier = this.startNode();
+ specifier.exported = placeholder;
+ node.specifiers = [this.finishNode(specifier, "ExportDefaultSpecifier")];
+ return super.parseExport(node, decorators);
+ }
+ isExportDefaultSpecifier() {
+ if (this.match(65)) {
+ const next = this.nextTokenStart();
+ if (this.isUnparsedContextual(next, "from")) {
+ if (this.input.startsWith(tokenLabelName(144), this.nextTokenStartSince(next + 4))) {
+ return true;
+ }
+ }
+ }
+ return super.isExportDefaultSpecifier();
+ }
+ maybeParseExportDefaultSpecifier(node, maybeDefaultIdentifier) {
+ var _specifiers;
+ if ((_specifiers = node.specifiers) != null && _specifiers.length) {
+ return true;
+ }
+ return super.maybeParseExportDefaultSpecifier(node, maybeDefaultIdentifier);
+ }
+ checkExport(node) {
+ const {
+ specifiers
+ } = node;
+ if (specifiers != null && specifiers.length) {
+ node.specifiers = specifiers.filter(node => node.exported.type === "Placeholder");
+ }
+ super.checkExport(node);
+ node.specifiers = specifiers;
+ }
+ parseImport(node) {
+ const placeholder = this.parsePlaceholder("Identifier");
+ if (!placeholder) return super.parseImport(node);
+ node.specifiers = [];
+ if (!this.isContextual(98) && !this.match(12)) {
+ node.source = this.finishPlaceholder(placeholder, "StringLiteral");
+ this.semicolon();
+ return this.finishNode(node, "ImportDeclaration");
+ }
+ const specifier = this.startNodeAtNode(placeholder);
+ specifier.local = placeholder;
+ node.specifiers.push(this.finishNode(specifier, "ImportDefaultSpecifier"));
+ if (this.eat(12)) {
+ const hasStarImport = this.maybeParseStarImportSpecifier(node);
+ if (!hasStarImport) this.parseNamedImportSpecifiers(node);
+ }
+ this.expectContextual(98);
+ node.source = this.parseImportSource();
+ this.semicolon();
+ return this.finishNode(node, "ImportDeclaration");
+ }
+ parseImportSource() {
+ return this.parsePlaceholder("StringLiteral") || super.parseImportSource();
+ }
+ assertNoSpace() {
+ if (this.state.start > this.state.lastTokEndLoc.index) {
+ this.raise(PlaceholderErrors.UnexpectedSpace, {
+ at: this.state.lastTokEndLoc
+ });
+ }
+ }
+};
+var v8intrinsic = superClass => class V8IntrinsicMixin extends superClass {
+ parseV8Intrinsic() {
+ if (this.match(54)) {
+ const v8IntrinsicStartLoc = this.state.startLoc;
+ const node = this.startNode();
+ this.next();
+ if (tokenIsIdentifier(this.state.type)) {
+ const name = this.parseIdentifierName();
+ const identifier = this.createIdentifier(node, name);
+ identifier.type = "V8IntrinsicIdentifier";
+ if (this.match(10)) {
+ return identifier;
+ }
+ }
+ this.unexpected(v8IntrinsicStartLoc);
+ }
+ }
+ parseExprAtom(refExpressionErrors) {
+ return this.parseV8Intrinsic() || super.parseExprAtom(refExpressionErrors);
+ }
+};
+function hasPlugin(plugins, expectedConfig) {
+ const [expectedName, expectedOptions] = typeof expectedConfig === "string" ? [expectedConfig, {}] : expectedConfig;
+ const expectedKeys = Object.keys(expectedOptions);
+ const expectedOptionsIsEmpty = expectedKeys.length === 0;
+ return plugins.some(p => {
+ if (typeof p === "string") {
+ return expectedOptionsIsEmpty && p === expectedName;
+ } else {
+ const [pluginName, pluginOptions] = p;
+ if (pluginName !== expectedName) {
+ return false;
+ }
+ for (const key of expectedKeys) {
+ if (pluginOptions[key] !== expectedOptions[key]) {
+ return false;
+ }
+ }
+ return true;
+ }
+ });
+}
+function getPluginOption(plugins, name, option) {
+ const plugin = plugins.find(plugin => {
+ if (Array.isArray(plugin)) {
+ return plugin[0] === name;
+ } else {
+ return plugin === name;
+ }
+ });
+ if (plugin && Array.isArray(plugin) && plugin.length > 1) {
+ return plugin[1][option];
+ }
+ return null;
+}
+const PIPELINE_PROPOSALS = ["minimal", "fsharp", "hack", "smart"];
+const TOPIC_TOKENS = ["^^", "@@", "^", "%", "#"];
+const RECORD_AND_TUPLE_SYNTAX_TYPES = ["hash", "bar"];
+function validatePlugins(plugins) {
+ if (hasPlugin(plugins, "decorators")) {
+ if (hasPlugin(plugins, "decorators-legacy")) {
+ throw new Error("Cannot use the decorators and decorators-legacy plugin together");
+ }
+ const decoratorsBeforeExport = getPluginOption(plugins, "decorators", "decoratorsBeforeExport");
+ if (decoratorsBeforeExport != null && typeof decoratorsBeforeExport !== "boolean") {
+ throw new Error("'decoratorsBeforeExport' must be a boolean, if specified.");
+ }
+ const allowCallParenthesized = getPluginOption(plugins, "decorators", "allowCallParenthesized");
+ if (allowCallParenthesized != null && typeof allowCallParenthesized !== "boolean") {
+ throw new Error("'allowCallParenthesized' must be a boolean.");
+ }
+ }
+ if (hasPlugin(plugins, "flow") && hasPlugin(plugins, "typescript")) {
+ throw new Error("Cannot combine flow and typescript plugins.");
+ }
+ if (hasPlugin(plugins, "placeholders") && hasPlugin(plugins, "v8intrinsic")) {
+ throw new Error("Cannot combine placeholders and v8intrinsic plugins.");
+ }
+ if (hasPlugin(plugins, "pipelineOperator")) {
+ const proposal = getPluginOption(plugins, "pipelineOperator", "proposal");
+ if (!PIPELINE_PROPOSALS.includes(proposal)) {
+ const proposalList = PIPELINE_PROPOSALS.map(p => `"${p}"`).join(", ");
+ throw new Error(`"pipelineOperator" requires "proposal" option whose value must be one of: ${proposalList}.`);
+ }
+ const tupleSyntaxIsHash = hasPlugin(plugins, ["recordAndTuple", {
+ syntaxType: "hash"
+ }]);
+ if (proposal === "hack") {
+ if (hasPlugin(plugins, "placeholders")) {
+ throw new Error("Cannot combine placeholders plugin and Hack-style pipes.");
+ }
+ if (hasPlugin(plugins, "v8intrinsic")) {
+ throw new Error("Cannot combine v8intrinsic plugin and Hack-style pipes.");
+ }
+ const topicToken = getPluginOption(plugins, "pipelineOperator", "topicToken");
+ if (!TOPIC_TOKENS.includes(topicToken)) {
+ const tokenList = TOPIC_TOKENS.map(t => `"${t}"`).join(", ");
+ throw new Error(`"pipelineOperator" in "proposal": "hack" mode also requires a "topicToken" option whose value must be one of: ${tokenList}.`);
+ }
+ if (topicToken === "#" && tupleSyntaxIsHash) {
+ throw new Error('Plugin conflict between `["pipelineOperator", { proposal: "hack", topicToken: "#" }]` and `["recordAndtuple", { syntaxType: "hash"}]`.');
+ }
+ } else if (proposal === "smart" && tupleSyntaxIsHash) {
+ throw new Error('Plugin conflict between `["pipelineOperator", { proposal: "smart" }]` and `["recordAndtuple", { syntaxType: "hash"}]`.');
+ }
+ }
+ if (hasPlugin(plugins, "moduleAttributes")) {
+ {
+ if (hasPlugin(plugins, "importAssertions") || hasPlugin(plugins, "importAttributes")) {
+ throw new Error("Cannot combine importAssertions, importAttributes and moduleAttributes plugins.");
+ }
+ const moduleAttributesVersionPluginOption = getPluginOption(plugins, "moduleAttributes", "version");
+ if (moduleAttributesVersionPluginOption !== "may-2020") {
+ throw new Error("The 'moduleAttributes' plugin requires a 'version' option," + " representing the last proposal update. Currently, the" + " only supported value is 'may-2020'.");
+ }
+ }
+ }
+ if (hasPlugin(plugins, "importAssertions") && hasPlugin(plugins, "importAttributes")) {
+ throw new Error("Cannot combine importAssertions and importAttributes plugins.");
+ }
+ if (hasPlugin(plugins, "recordAndTuple") && getPluginOption(plugins, "recordAndTuple", "syntaxType") != null && !RECORD_AND_TUPLE_SYNTAX_TYPES.includes(getPluginOption(plugins, "recordAndTuple", "syntaxType"))) {
+ throw new Error("The 'syntaxType' option of the 'recordAndTuple' plugin must be one of: " + RECORD_AND_TUPLE_SYNTAX_TYPES.map(p => `'${p}'`).join(", "));
+ }
+ if (hasPlugin(plugins, "asyncDoExpressions") && !hasPlugin(plugins, "doExpressions")) {
+ const error = new Error("'asyncDoExpressions' requires 'doExpressions', please add 'doExpressions' to parser plugins.");
+ error.missingPlugins = "doExpressions";
+ throw error;
+ }
+ if (hasPlugin(plugins, "optionalChainingAssign") && getPluginOption(plugins, "optionalChainingAssign", "version") !== "2023-07") {
+ throw new Error("The 'optionalChainingAssign' plugin requires a 'version' option," + " representing the last proposal update. Currently, the" + " only supported value is '2023-07'.");
+ }
+}
+const mixinPlugins = {
+ estree,
+ jsx,
+ flow,
+ typescript,
+ v8intrinsic,
+ placeholders
+};
+const mixinPluginNames = Object.keys(mixinPlugins);
+const defaultOptions = {
+ sourceType: "script",
+ sourceFilename: undefined,
+ startColumn: 0,
+ startLine: 1,
+ allowAwaitOutsideFunction: false,
+ allowReturnOutsideFunction: false,
+ allowNewTargetOutsideFunction: false,
+ allowImportExportEverywhere: false,
+ allowSuperOutsideMethod: false,
+ allowUndeclaredExports: false,
+ plugins: [],
+ strictMode: null,
+ ranges: false,
+ tokens: false,
+ createImportExpressions: false,
+ createParenthesizedExpressions: false,
+ errorRecovery: false,
+ attachComment: true,
+ annexB: true
+};
+function getOptions(opts) {
+ if (opts == null) {
+ return Object.assign({}, defaultOptions);
+ }
+ if (opts.annexB != null && opts.annexB !== false) {
+ throw new Error("The `annexB` option can only be set to `false`.");
+ }
+ const options = {};
+ for (const key of Object.keys(defaultOptions)) {
+ var _opts$key;
+ options[key] = (_opts$key = opts[key]) != null ? _opts$key : defaultOptions[key];
+ }
+ return options;
+}
+class ExpressionParser extends LValParser {
+ checkProto(prop, isRecord, protoRef, refExpressionErrors) {
+ if (prop.type === "SpreadElement" || this.isObjectMethod(prop) || prop.computed || prop.shorthand) {
+ return;
+ }
+ const key = prop.key;
+ const name = key.type === "Identifier" ? key.name : key.value;
+ if (name === "__proto__") {
+ if (isRecord) {
+ this.raise(Errors.RecordNoProto, {
+ at: key
+ });
+ return;
+ }
+ if (protoRef.used) {
+ if (refExpressionErrors) {
+ if (refExpressionErrors.doubleProtoLoc === null) {
+ refExpressionErrors.doubleProtoLoc = key.loc.start;
+ }
+ } else {
+ this.raise(Errors.DuplicateProto, {
+ at: key
+ });
+ }
+ }
+ protoRef.used = true;
+ }
+ }
+ shouldExitDescending(expr, potentialArrowAt) {
+ return expr.type === "ArrowFunctionExpression" && expr.start === potentialArrowAt;
+ }
+ getExpression() {
+ this.enterInitialScopes();
+ this.nextToken();
+ const expr = this.parseExpression();
+ if (!this.match(139)) {
+ this.unexpected();
+ }
+ this.finalizeRemainingComments();
+ expr.comments = this.state.comments;
+ expr.errors = this.state.errors;
+ if (this.options.tokens) {
+ expr.tokens = this.tokens;
+ }
+ return expr;
+ }
+ parseExpression(disallowIn, refExpressionErrors) {
+ if (disallowIn) {
+ return this.disallowInAnd(() => this.parseExpressionBase(refExpressionErrors));
+ }
+ return this.allowInAnd(() => this.parseExpressionBase(refExpressionErrors));
+ }
+ parseExpressionBase(refExpressionErrors) {
+ const startLoc = this.state.startLoc;
+ const expr = this.parseMaybeAssign(refExpressionErrors);
+ if (this.match(12)) {
+ const node = this.startNodeAt(startLoc);
+ node.expressions = [expr];
+ while (this.eat(12)) {
+ node.expressions.push(this.parseMaybeAssign(refExpressionErrors));
+ }
+ this.toReferencedList(node.expressions);
+ return this.finishNode(node, "SequenceExpression");
+ }
+ return expr;
+ }
+ parseMaybeAssignDisallowIn(refExpressionErrors, afterLeftParse) {
+ return this.disallowInAnd(() => this.parseMaybeAssign(refExpressionErrors, afterLeftParse));
+ }
+ parseMaybeAssignAllowIn(refExpressionErrors, afterLeftParse) {
+ return this.allowInAnd(() => this.parseMaybeAssign(refExpressionErrors, afterLeftParse));
+ }
+ setOptionalParametersError(refExpressionErrors, resultError) {
+ var _resultError$loc;
+ refExpressionErrors.optionalParametersLoc = (_resultError$loc = resultError == null ? void 0 : resultError.loc) != null ? _resultError$loc : this.state.startLoc;
+ }
+ parseMaybeAssign(refExpressionErrors, afterLeftParse) {
+ const startLoc = this.state.startLoc;
+ if (this.isContextual(108)) {
+ if (this.prodParam.hasYield) {
+ let left = this.parseYield();
+ if (afterLeftParse) {
+ left = afterLeftParse.call(this, left, startLoc);
+ }
+ return left;
+ }
+ }
+ let ownExpressionErrors;
+ if (refExpressionErrors) {
+ ownExpressionErrors = false;
+ } else {
+ refExpressionErrors = new ExpressionErrors();
+ ownExpressionErrors = true;
+ }
+ const {
+ type
+ } = this.state;
+ if (type === 10 || tokenIsIdentifier(type)) {
+ this.state.potentialArrowAt = this.state.start;
+ }
+ let left = this.parseMaybeConditional(refExpressionErrors);
+ if (afterLeftParse) {
+ left = afterLeftParse.call(this, left, startLoc);
+ }
+ if (tokenIsAssignment(this.state.type)) {
+ const node = this.startNodeAt(startLoc);
+ const operator = this.state.value;
+ node.operator = operator;
+ if (this.match(29)) {
+ this.toAssignable(left, true);
+ node.left = left;
+ const startIndex = startLoc.index;
+ if (refExpressionErrors.doubleProtoLoc != null && refExpressionErrors.doubleProtoLoc.index >= startIndex) {
+ refExpressionErrors.doubleProtoLoc = null;
+ }
+ if (refExpressionErrors.shorthandAssignLoc != null && refExpressionErrors.shorthandAssignLoc.index >= startIndex) {
+ refExpressionErrors.shorthandAssignLoc = null;
+ }
+ if (refExpressionErrors.privateKeyLoc != null && refExpressionErrors.privateKeyLoc.index >= startIndex) {
+ this.checkDestructuringPrivate(refExpressionErrors);
+ refExpressionErrors.privateKeyLoc = null;
+ }
+ } else {
+ node.left = left;
+ }
+ this.next();
+ node.right = this.parseMaybeAssign();
+ this.checkLVal(left, {
+ in: this.finishNode(node, "AssignmentExpression")
+ });
+ return node;
+ } else if (ownExpressionErrors) {
+ this.checkExpressionErrors(refExpressionErrors, true);
+ }
+ return left;
+ }
+ parseMaybeConditional(refExpressionErrors) {
+ const startLoc = this.state.startLoc;
+ const potentialArrowAt = this.state.potentialArrowAt;
+ const expr = this.parseExprOps(refExpressionErrors);
+ if (this.shouldExitDescending(expr, potentialArrowAt)) {
+ return expr;
+ }
+ return this.parseConditional(expr, startLoc, refExpressionErrors);
+ }
+ parseConditional(expr, startLoc, refExpressionErrors) {
+ if (this.eat(17)) {
+ const node = this.startNodeAt(startLoc);
+ node.test = expr;
+ node.consequent = this.parseMaybeAssignAllowIn();
+ this.expect(14);
+ node.alternate = this.parseMaybeAssign();
+ return this.finishNode(node, "ConditionalExpression");
+ }
+ return expr;
+ }
+ parseMaybeUnaryOrPrivate(refExpressionErrors) {
+ return this.match(138) ? this.parsePrivateName() : this.parseMaybeUnary(refExpressionErrors);
+ }
+ parseExprOps(refExpressionErrors) {
+ const startLoc = this.state.startLoc;
+ const potentialArrowAt = this.state.potentialArrowAt;
+ const expr = this.parseMaybeUnaryOrPrivate(refExpressionErrors);
+ if (this.shouldExitDescending(expr, potentialArrowAt)) {
+ return expr;
+ }
+ return this.parseExprOp(expr, startLoc, -1);
+ }
+ parseExprOp(left, leftStartLoc, minPrec) {
+ if (this.isPrivateName(left)) {
+ const value = this.getPrivateNameSV(left);
+ if (minPrec >= tokenOperatorPrecedence(58) || !this.prodParam.hasIn || !this.match(58)) {
+ this.raise(Errors.PrivateInExpectedIn, {
+ at: left,
+ identifierName: value
+ });
+ }
+ this.classScope.usePrivateName(value, left.loc.start);
+ }
+ const op = this.state.type;
+ if (tokenIsOperator(op) && (this.prodParam.hasIn || !this.match(58))) {
+ let prec = tokenOperatorPrecedence(op);
+ if (prec > minPrec) {
+ if (op === 39) {
+ this.expectPlugin("pipelineOperator");
+ if (this.state.inFSharpPipelineDirectBody) {
+ return left;
+ }
+ this.checkPipelineAtInfixOperator(left, leftStartLoc);
+ }
+ const node = this.startNodeAt(leftStartLoc);
+ node.left = left;
+ node.operator = this.state.value;
+ const logical = op === 41 || op === 42;
+ const coalesce = op === 40;
+ if (coalesce) {
+ prec = tokenOperatorPrecedence(42);
+ }
+ this.next();
+ if (op === 39 && this.hasPlugin(["pipelineOperator", {
+ proposal: "minimal"
+ }])) {
+ if (this.state.type === 96 && this.prodParam.hasAwait) {
+ throw this.raise(Errors.UnexpectedAwaitAfterPipelineBody, {
+ at: this.state.startLoc
+ });
+ }
+ }
+ node.right = this.parseExprOpRightExpr(op, prec);
+ const finishedNode = this.finishNode(node, logical || coalesce ? "LogicalExpression" : "BinaryExpression");
+ const nextOp = this.state.type;
+ if (coalesce && (nextOp === 41 || nextOp === 42) || logical && nextOp === 40) {
+ throw this.raise(Errors.MixingCoalesceWithLogical, {
+ at: this.state.startLoc
+ });
+ }
+ return this.parseExprOp(finishedNode, leftStartLoc, minPrec);
+ }
+ }
+ return left;
+ }
+ parseExprOpRightExpr(op, prec) {
+ const startLoc = this.state.startLoc;
+ switch (op) {
+ case 39:
+ switch (this.getPluginOption("pipelineOperator", "proposal")) {
+ case "hack":
+ return this.withTopicBindingContext(() => {
+ return this.parseHackPipeBody();
+ });
+ case "smart":
+ return this.withTopicBindingContext(() => {
+ if (this.prodParam.hasYield && this.isContextual(108)) {
+ throw this.raise(Errors.PipeBodyIsTighter, {
+ at: this.state.startLoc
+ });
+ }
+ return this.parseSmartPipelineBodyInStyle(this.parseExprOpBaseRightExpr(op, prec), startLoc);
+ });
+ case "fsharp":
+ return this.withSoloAwaitPermittingContext(() => {
+ return this.parseFSharpPipelineBody(prec);
+ });
+ }
+ default:
+ return this.parseExprOpBaseRightExpr(op, prec);
+ }
+ }
+ parseExprOpBaseRightExpr(op, prec) {
+ const startLoc = this.state.startLoc;
+ return this.parseExprOp(this.parseMaybeUnaryOrPrivate(), startLoc, tokenIsRightAssociative(op) ? prec - 1 : prec);
+ }
+ parseHackPipeBody() {
+ var _body$extra;
+ const {
+ startLoc
+ } = this.state;
+ const body = this.parseMaybeAssign();
+ const requiredParentheses = UnparenthesizedPipeBodyDescriptions.has(body.type);
+ if (requiredParentheses && !((_body$extra = body.extra) != null && _body$extra.parenthesized)) {
+ this.raise(Errors.PipeUnparenthesizedBody, {
+ at: startLoc,
+ type: body.type
+ });
+ }
+ if (!this.topicReferenceWasUsedInCurrentContext()) {
+ this.raise(Errors.PipeTopicUnused, {
+ at: startLoc
+ });
+ }
+ return body;
+ }
+ checkExponentialAfterUnary(node) {
+ if (this.match(57)) {
+ this.raise(Errors.UnexpectedTokenUnaryExponentiation, {
+ at: node.argument
+ });
+ }
+ }
+ parseMaybeUnary(refExpressionErrors, sawUnary) {
+ const startLoc = this.state.startLoc;
+ const isAwait = this.isContextual(96);
+ if (isAwait && this.isAwaitAllowed()) {
+ this.next();
+ const expr = this.parseAwait(startLoc);
+ if (!sawUnary) this.checkExponentialAfterUnary(expr);
+ return expr;
+ }
+ const update = this.match(34);
+ const node = this.startNode();
+ if (tokenIsPrefix(this.state.type)) {
+ node.operator = this.state.value;
+ node.prefix = true;
+ if (this.match(72)) {
+ this.expectPlugin("throwExpressions");
+ }
+ const isDelete = this.match(89);
+ this.next();
+ node.argument = this.parseMaybeUnary(null, true);
+ this.checkExpressionErrors(refExpressionErrors, true);
+ if (this.state.strict && isDelete) {
+ const arg = node.argument;
+ if (arg.type === "Identifier") {
+ this.raise(Errors.StrictDelete, {
+ at: node
+ });
+ } else if (this.hasPropertyAsPrivateName(arg)) {
+ this.raise(Errors.DeletePrivateField, {
+ at: node
+ });
+ }
+ }
+ if (!update) {
+ if (!sawUnary) {
+ this.checkExponentialAfterUnary(node);
+ }
+ return this.finishNode(node, "UnaryExpression");
+ }
+ }
+ const expr = this.parseUpdate(node, update, refExpressionErrors);
+ if (isAwait) {
+ const {
+ type
+ } = this.state;
+ const startsExpr = this.hasPlugin("v8intrinsic") ? tokenCanStartExpression(type) : tokenCanStartExpression(type) && !this.match(54);
+ if (startsExpr && !this.isAmbiguousAwait()) {
+ this.raiseOverwrite(Errors.AwaitNotInAsyncContext, {
+ at: startLoc
+ });
+ return this.parseAwait(startLoc);
+ }
+ }
+ return expr;
+ }
+ parseUpdate(node, update, refExpressionErrors) {
+ if (update) {
+ const updateExpressionNode = node;
+ this.checkLVal(updateExpressionNode.argument, {
+ in: this.finishNode(updateExpressionNode, "UpdateExpression")
+ });
+ return node;
+ }
+ const startLoc = this.state.startLoc;
+ let expr = this.parseExprSubscripts(refExpressionErrors);
+ if (this.checkExpressionErrors(refExpressionErrors, false)) return expr;
+ while (tokenIsPostfix(this.state.type) && !this.canInsertSemicolon()) {
+ const node = this.startNodeAt(startLoc);
+ node.operator = this.state.value;
+ node.prefix = false;
+ node.argument = expr;
+ this.next();
+ this.checkLVal(expr, {
+ in: expr = this.finishNode(node, "UpdateExpression")
+ });
+ }
+ return expr;
+ }
+ parseExprSubscripts(refExpressionErrors) {
+ const startLoc = this.state.startLoc;
+ const potentialArrowAt = this.state.potentialArrowAt;
+ const expr = this.parseExprAtom(refExpressionErrors);
+ if (this.shouldExitDescending(expr, potentialArrowAt)) {
+ return expr;
+ }
+ return this.parseSubscripts(expr, startLoc);
+ }
+ parseSubscripts(base, startLoc, noCalls) {
+ const state = {
+ optionalChainMember: false,
+ maybeAsyncArrow: this.atPossibleAsyncArrow(base),
+ stop: false
+ };
+ do {
+ base = this.parseSubscript(base, startLoc, noCalls, state);
+ state.maybeAsyncArrow = false;
+ } while (!state.stop);
+ return base;
+ }
+ parseSubscript(base, startLoc, noCalls, state) {
+ const {
+ type
+ } = this.state;
+ if (!noCalls && type === 15) {
+ return this.parseBind(base, startLoc, noCalls, state);
+ } else if (tokenIsTemplate(type)) {
+ return this.parseTaggedTemplateExpression(base, startLoc, state);
+ }
+ let optional = false;
+ if (type === 18) {
+ if (noCalls) {
+ this.raise(Errors.OptionalChainingNoNew, {
+ at: this.state.startLoc
+ });
+ if (this.lookaheadCharCode() === 40) {
+ state.stop = true;
+ return base;
+ }
+ }
+ state.optionalChainMember = optional = true;
+ this.next();
+ }
+ if (!noCalls && this.match(10)) {
+ return this.parseCoverCallAndAsyncArrowHead(base, startLoc, state, optional);
+ } else {
+ const computed = this.eat(0);
+ if (computed || optional || this.eat(16)) {
+ return this.parseMember(base, startLoc, state, computed, optional);
+ } else {
+ state.stop = true;
+ return base;
+ }
+ }
+ }
+ parseMember(base, startLoc, state, computed, optional) {
+ const node = this.startNodeAt(startLoc);
+ node.object = base;
+ node.computed = computed;
+ if (computed) {
+ node.property = this.parseExpression();
+ this.expect(3);
+ } else if (this.match(138)) {
+ if (base.type === "Super") {
+ this.raise(Errors.SuperPrivateField, {
+ at: startLoc
+ });
+ }
+ this.classScope.usePrivateName(this.state.value, this.state.startLoc);
+ node.property = this.parsePrivateName();
+ } else {
+ node.property = this.parseIdentifier(true);
+ }
+ if (state.optionalChainMember) {
+ node.optional = optional;
+ return this.finishNode(node, "OptionalMemberExpression");
+ } else {
+ return this.finishNode(node, "MemberExpression");
+ }
+ }
+ parseBind(base, startLoc, noCalls, state) {
+ const node = this.startNodeAt(startLoc);
+ node.object = base;
+ this.next();
+ node.callee = this.parseNoCallExpr();
+ state.stop = true;
+ return this.parseSubscripts(this.finishNode(node, "BindExpression"), startLoc, noCalls);
+ }
+ parseCoverCallAndAsyncArrowHead(base, startLoc, state, optional) {
+ const oldMaybeInArrowParameters = this.state.maybeInArrowParameters;
+ let refExpressionErrors = null;
+ this.state.maybeInArrowParameters = true;
+ this.next();
+ const node = this.startNodeAt(startLoc);
+ node.callee = base;
+ const {
+ maybeAsyncArrow,
+ optionalChainMember
+ } = state;
+ if (maybeAsyncArrow) {
+ this.expressionScope.enter(newAsyncArrowScope());
+ refExpressionErrors = new ExpressionErrors();
+ }
+ if (optionalChainMember) {
+ node.optional = optional;
+ }
+ if (optional) {
+ node.arguments = this.parseCallExpressionArguments(11);
+ } else {
+ node.arguments = this.parseCallExpressionArguments(11, base.type === "Import", base.type !== "Super", node, refExpressionErrors);
+ }
+ let finishedNode = this.finishCallExpression(node, optionalChainMember);
+ if (maybeAsyncArrow && this.shouldParseAsyncArrow() && !optional) {
+ state.stop = true;
+ this.checkDestructuringPrivate(refExpressionErrors);
+ this.expressionScope.validateAsPattern();
+ this.expressionScope.exit();
+ finishedNode = this.parseAsyncArrowFromCallExpression(this.startNodeAt(startLoc), finishedNode);
+ } else {
+ if (maybeAsyncArrow) {
+ this.checkExpressionErrors(refExpressionErrors, true);
+ this.expressionScope.exit();
+ }
+ this.toReferencedArguments(finishedNode);
+ }
+ this.state.maybeInArrowParameters = oldMaybeInArrowParameters;
+ return finishedNode;
+ }
+ toReferencedArguments(node, isParenthesizedExpr) {
+ this.toReferencedListDeep(node.arguments, isParenthesizedExpr);
+ }
+ parseTaggedTemplateExpression(base, startLoc, state) {
+ const node = this.startNodeAt(startLoc);
+ node.tag = base;
+ node.quasi = this.parseTemplate(true);
+ if (state.optionalChainMember) {
+ this.raise(Errors.OptionalChainingNoTemplate, {
+ at: startLoc
+ });
+ }
+ return this.finishNode(node, "TaggedTemplateExpression");
+ }
+ atPossibleAsyncArrow(base) {
+ return base.type === "Identifier" && base.name === "async" && this.state.lastTokEndLoc.index === base.end && !this.canInsertSemicolon() && base.end - base.start === 5 && base.start === this.state.potentialArrowAt;
+ }
+ expectImportAttributesPlugin() {
+ if (!this.hasPlugin("importAssertions")) {
+ this.expectPlugin("importAttributes");
+ }
+ }
+ finishCallExpression(node, optional) {
+ if (node.callee.type === "Import") {
+ if (node.arguments.length === 2) {
+ {
+ if (!this.hasPlugin("moduleAttributes")) {
+ this.expectImportAttributesPlugin();
+ }
+ }
+ }
+ if (node.arguments.length === 0 || node.arguments.length > 2) {
+ this.raise(Errors.ImportCallArity, {
+ at: node,
+ maxArgumentCount: this.hasPlugin("importAttributes") || this.hasPlugin("importAssertions") || this.hasPlugin("moduleAttributes") ? 2 : 1
+ });
+ } else {
+ for (const arg of node.arguments) {
+ if (arg.type === "SpreadElement") {
+ this.raise(Errors.ImportCallSpreadArgument, {
+ at: arg
+ });
+ }
+ }
+ }
+ }
+ return this.finishNode(node, optional ? "OptionalCallExpression" : "CallExpression");
+ }
+ parseCallExpressionArguments(close, dynamicImport, allowPlaceholder, nodeForExtra, refExpressionErrors) {
+ const elts = [];
+ let first = true;
+ const oldInFSharpPipelineDirectBody = this.state.inFSharpPipelineDirectBody;
+ this.state.inFSharpPipelineDirectBody = false;
+ while (!this.eat(close)) {
+ if (first) {
+ first = false;
+ } else {
+ this.expect(12);
+ if (this.match(close)) {
+ if (dynamicImport && !this.hasPlugin("importAttributes") && !this.hasPlugin("importAssertions") && !this.hasPlugin("moduleAttributes")) {
+ this.raise(Errors.ImportCallArgumentTrailingComma, {
+ at: this.state.lastTokStartLoc
+ });
+ }
+ if (nodeForExtra) {
+ this.addTrailingCommaExtraToNode(nodeForExtra);
+ }
+ this.next();
+ break;
+ }
+ }
+ elts.push(this.parseExprListItem(false, refExpressionErrors, allowPlaceholder));
+ }
+ this.state.inFSharpPipelineDirectBody = oldInFSharpPipelineDirectBody;
+ return elts;
+ }
+ shouldParseAsyncArrow() {
+ return this.match(19) && !this.canInsertSemicolon();
+ }
+ parseAsyncArrowFromCallExpression(node, call) {
+ var _call$extra;
+ this.resetPreviousNodeTrailingComments(call);
+ this.expect(19);
+ this.parseArrowExpression(node, call.arguments, true, (_call$extra = call.extra) == null ? void 0 : _call$extra.trailingCommaLoc);
+ if (call.innerComments) {
+ setInnerComments(node, call.innerComments);
+ }
+ if (call.callee.trailingComments) {
+ setInnerComments(node, call.callee.trailingComments);
+ }
+ return node;
+ }
+ parseNoCallExpr() {
+ const startLoc = this.state.startLoc;
+ return this.parseSubscripts(this.parseExprAtom(), startLoc, true);
+ }
+ parseExprAtom(refExpressionErrors) {
+ let node;
+ let decorators = null;
+ const {
+ type
+ } = this.state;
+ switch (type) {
+ case 79:
+ return this.parseSuper();
+ case 83:
+ node = this.startNode();
+ this.next();
+ if (this.match(16)) {
+ return this.parseImportMetaProperty(node);
+ }
+ if (this.match(10)) {
+ if (this.options.createImportExpressions) {
+ return this.parseImportCall(node);
+ } else {
+ return this.finishNode(node, "Import");
+ }
+ } else {
+ this.raise(Errors.UnsupportedImport, {
+ at: this.state.lastTokStartLoc
+ });
+ return this.finishNode(node, "Import");
+ }
+ case 78:
+ node = this.startNode();
+ this.next();
+ return this.finishNode(node, "ThisExpression");
+ case 90:
+ {
+ return this.parseDo(this.startNode(), false);
+ }
+ case 56:
+ case 31:
+ {
+ this.readRegexp();
+ return this.parseRegExpLiteral(this.state.value);
+ }
+ case 134:
+ return this.parseNumericLiteral(this.state.value);
+ case 135:
+ return this.parseBigIntLiteral(this.state.value);
+ case 136:
+ return this.parseDecimalLiteral(this.state.value);
+ case 133:
+ return this.parseStringLiteral(this.state.value);
+ case 84:
+ return this.parseNullLiteral();
+ case 85:
+ return this.parseBooleanLiteral(true);
+ case 86:
+ return this.parseBooleanLiteral(false);
+ case 10:
+ {
+ const canBeArrow = this.state.potentialArrowAt === this.state.start;
+ return this.parseParenAndDistinguishExpression(canBeArrow);
+ }
+ case 2:
+ case 1:
+ {
+ return this.parseArrayLike(this.state.type === 2 ? 4 : 3, false, true);
+ }
+ case 0:
+ {
+ return this.parseArrayLike(3, true, false, refExpressionErrors);
+ }
+ case 6:
+ case 7:
+ {
+ return this.parseObjectLike(this.state.type === 6 ? 9 : 8, false, true);
+ }
+ case 5:
+ {
+ return this.parseObjectLike(8, false, false, refExpressionErrors);
+ }
+ case 68:
+ return this.parseFunctionOrFunctionSent();
+ case 26:
+ decorators = this.parseDecorators();
+ case 80:
+ return this.parseClass(this.maybeTakeDecorators(decorators, this.startNode()), false);
+ case 77:
+ return this.parseNewOrNewTarget();
+ case 25:
+ case 24:
+ return this.parseTemplate(false);
+ case 15:
+ {
+ node = this.startNode();
+ this.next();
+ node.object = null;
+ const callee = node.callee = this.parseNoCallExpr();
+ if (callee.type === "MemberExpression") {
+ return this.finishNode(node, "BindExpression");
+ } else {
+ throw this.raise(Errors.UnsupportedBind, {
+ at: callee
+ });
+ }
+ }
+ case 138:
+ {
+ this.raise(Errors.PrivateInExpectedIn, {
+ at: this.state.startLoc,
+ identifierName: this.state.value
+ });
+ return this.parsePrivateName();
+ }
+ case 33:
+ {
+ return this.parseTopicReferenceThenEqualsSign(54, "%");
+ }
+ case 32:
+ {
+ return this.parseTopicReferenceThenEqualsSign(44, "^");
+ }
+ case 37:
+ case 38:
+ {
+ return this.parseTopicReference("hack");
+ }
+ case 44:
+ case 54:
+ case 27:
+ {
+ const pipeProposal = this.getPluginOption("pipelineOperator", "proposal");
+ if (pipeProposal) {
+ return this.parseTopicReference(pipeProposal);
+ }
+ this.unexpected();
+ break;
+ }
+ case 47:
+ {
+ const lookaheadCh = this.input.codePointAt(this.nextTokenStart());
+ if (isIdentifierStart(lookaheadCh) || lookaheadCh === 62) {
+ this.expectOnePlugin(["jsx", "flow", "typescript"]);
+ } else {
+ this.unexpected();
+ }
+ break;
+ }
+ default:
+ if (tokenIsIdentifier(type)) {
+ if (this.isContextual(127) && this.lookaheadInLineCharCode() === 123) {
+ return this.parseModuleExpression();
+ }
+ const canBeArrow = this.state.potentialArrowAt === this.state.start;
+ const containsEsc = this.state.containsEsc;
+ const id = this.parseIdentifier();
+ if (!containsEsc && id.name === "async" && !this.canInsertSemicolon()) {
+ const {
+ type
+ } = this.state;
+ if (type === 68) {
+ this.resetPreviousNodeTrailingComments(id);
+ this.next();
+ return this.parseAsyncFunctionExpression(this.startNodeAtNode(id));
+ } else if (tokenIsIdentifier(type)) {
+ if (this.lookaheadCharCode() === 61) {
+ return this.parseAsyncArrowUnaryFunction(this.startNodeAtNode(id));
+ } else {
+ return id;
+ }
+ } else if (type === 90) {
+ this.resetPreviousNodeTrailingComments(id);
+ return this.parseDo(this.startNodeAtNode(id), true);
+ }
+ }
+ if (canBeArrow && this.match(19) && !this.canInsertSemicolon()) {
+ this.next();
+ return this.parseArrowExpression(this.startNodeAtNode(id), [id], false);
+ }
+ return id;
+ } else {
+ this.unexpected();
+ }
+ }
+ }
+ parseTopicReferenceThenEqualsSign(topicTokenType, topicTokenValue) {
+ const pipeProposal = this.getPluginOption("pipelineOperator", "proposal");
+ if (pipeProposal) {
+ this.state.type = topicTokenType;
+ this.state.value = topicTokenValue;
+ this.state.pos--;
+ this.state.end--;
+ this.state.endLoc = createPositionWithColumnOffset(this.state.endLoc, -1);
+ return this.parseTopicReference(pipeProposal);
+ } else {
+ this.unexpected();
+ }
+ }
+ parseTopicReference(pipeProposal) {
+ const node = this.startNode();
+ const startLoc = this.state.startLoc;
+ const tokenType = this.state.type;
+ this.next();
+ return this.finishTopicReference(node, startLoc, pipeProposal, tokenType);
+ }
+ finishTopicReference(node, startLoc, pipeProposal, tokenType) {
+ if (this.testTopicReferenceConfiguration(pipeProposal, startLoc, tokenType)) {
+ const nodeType = pipeProposal === "smart" ? "PipelinePrimaryTopicReference" : "TopicReference";
+ if (!this.topicReferenceIsAllowedInCurrentContext()) {
+ this.raise(pipeProposal === "smart" ? Errors.PrimaryTopicNotAllowed : Errors.PipeTopicUnbound, {
+ at: startLoc
+ });
+ }
+ this.registerTopicReference();
+ return this.finishNode(node, nodeType);
+ } else {
+ throw this.raise(Errors.PipeTopicUnconfiguredToken, {
+ at: startLoc,
+ token: tokenLabelName(tokenType)
+ });
+ }
+ }
+ testTopicReferenceConfiguration(pipeProposal, startLoc, tokenType) {
+ switch (pipeProposal) {
+ case "hack":
+ {
+ return this.hasPlugin(["pipelineOperator", {
+ topicToken: tokenLabelName(tokenType)
+ }]);
+ }
+ case "smart":
+ return tokenType === 27;
+ default:
+ throw this.raise(Errors.PipeTopicRequiresHackPipes, {
+ at: startLoc
+ });
+ }
+ }
+ parseAsyncArrowUnaryFunction(node) {
+ this.prodParam.enter(functionFlags(true, this.prodParam.hasYield));
+ const params = [this.parseIdentifier()];
+ this.prodParam.exit();
+ if (this.hasPrecedingLineBreak()) {
+ this.raise(Errors.LineTerminatorBeforeArrow, {
+ at: this.state.curPosition()
+ });
+ }
+ this.expect(19);
+ return this.parseArrowExpression(node, params, true);
+ }
+ parseDo(node, isAsync) {
+ this.expectPlugin("doExpressions");
+ if (isAsync) {
+ this.expectPlugin("asyncDoExpressions");
+ }
+ node.async = isAsync;
+ this.next();
+ const oldLabels = this.state.labels;
+ this.state.labels = [];
+ if (isAsync) {
+ this.prodParam.enter(2);
+ node.body = this.parseBlock();
+ this.prodParam.exit();
+ } else {
+ node.body = this.parseBlock();
+ }
+ this.state.labels = oldLabels;
+ return this.finishNode(node, "DoExpression");
+ }
+ parseSuper() {
+ const node = this.startNode();
+ this.next();
+ if (this.match(10) && !this.scope.allowDirectSuper && !this.options.allowSuperOutsideMethod) {
+ this.raise(Errors.SuperNotAllowed, {
+ at: node
+ });
+ } else if (!this.scope.allowSuper && !this.options.allowSuperOutsideMethod) {
+ this.raise(Errors.UnexpectedSuper, {
+ at: node
+ });
+ }
+ if (!this.match(10) && !this.match(0) && !this.match(16)) {
+ this.raise(Errors.UnsupportedSuper, {
+ at: node
+ });
+ }
+ return this.finishNode(node, "Super");
+ }
+ parsePrivateName() {
+ const node = this.startNode();
+ const id = this.startNodeAt(createPositionWithColumnOffset(this.state.startLoc, 1));
+ const name = this.state.value;
+ this.next();
+ node.id = this.createIdentifier(id, name);
+ return this.finishNode(node, "PrivateName");
+ }
+ parseFunctionOrFunctionSent() {
+ const node = this.startNode();
+ this.next();
+ if (this.prodParam.hasYield && this.match(16)) {
+ const meta = this.createIdentifier(this.startNodeAtNode(node), "function");
+ this.next();
+ if (this.match(103)) {
+ this.expectPlugin("functionSent");
+ } else if (!this.hasPlugin("functionSent")) {
+ this.unexpected();
+ }
+ return this.parseMetaProperty(node, meta, "sent");
+ }
+ return this.parseFunction(node);
+ }
+ parseMetaProperty(node, meta, propertyName) {
+ node.meta = meta;
+ const containsEsc = this.state.containsEsc;
+ node.property = this.parseIdentifier(true);
+ if (node.property.name !== propertyName || containsEsc) {
+ this.raise(Errors.UnsupportedMetaProperty, {
+ at: node.property,
+ target: meta.name,
+ onlyValidPropertyName: propertyName
+ });
+ }
+ return this.finishNode(node, "MetaProperty");
+ }
+ parseImportMetaProperty(node) {
+ const id = this.createIdentifier(this.startNodeAtNode(node), "import");
+ this.next();
+ if (this.isContextual(101)) {
+ if (!this.inModule) {
+ this.raise(Errors.ImportMetaOutsideModule, {
+ at: id
+ });
+ }
+ this.sawUnambiguousESM = true;
+ } else if (this.isContextual(105) || this.isContextual(97)) {
+ const isSource = this.isContextual(105);
+ if (!isSource) this.unexpected();
+ this.expectPlugin(isSource ? "sourcePhaseImports" : "deferredImportEvaluation");
+ if (!this.options.createImportExpressions) {
+ throw this.raise(Errors.DynamicImportPhaseRequiresImportExpressions, {
+ at: this.state.startLoc,
+ phase: this.state.value
+ });
+ }
+ this.next();
+ node.phase = isSource ? "source" : "defer";
+ return this.parseImportCall(node);
+ }
+ return this.parseMetaProperty(node, id, "meta");
+ }
+ parseLiteralAtNode(value, type, node) {
+ this.addExtra(node, "rawValue", value);
+ this.addExtra(node, "raw", this.input.slice(node.start, this.state.end));
+ node.value = value;
+ this.next();
+ return this.finishNode(node, type);
+ }
+ parseLiteral(value, type) {
+ const node = this.startNode();
+ return this.parseLiteralAtNode(value, type, node);
+ }
+ parseStringLiteral(value) {
+ return this.parseLiteral(value, "StringLiteral");
+ }
+ parseNumericLiteral(value) {
+ return this.parseLiteral(value, "NumericLiteral");
+ }
+ parseBigIntLiteral(value) {
+ return this.parseLiteral(value, "BigIntLiteral");
+ }
+ parseDecimalLiteral(value) {
+ return this.parseLiteral(value, "DecimalLiteral");
+ }
+ parseRegExpLiteral(value) {
+ const node = this.parseLiteral(value.value, "RegExpLiteral");
+ node.pattern = value.pattern;
+ node.flags = value.flags;
+ return node;
+ }
+ parseBooleanLiteral(value) {
+ const node = this.startNode();
+ node.value = value;
+ this.next();
+ return this.finishNode(node, "BooleanLiteral");
+ }
+ parseNullLiteral() {
+ const node = this.startNode();
+ this.next();
+ return this.finishNode(node, "NullLiteral");
+ }
+ parseParenAndDistinguishExpression(canBeArrow) {
+ const startLoc = this.state.startLoc;
+ let val;
+ this.next();
+ this.expressionScope.enter(newArrowHeadScope());
+ const oldMaybeInArrowParameters = this.state.maybeInArrowParameters;
+ const oldInFSharpPipelineDirectBody = this.state.inFSharpPipelineDirectBody;
+ this.state.maybeInArrowParameters = true;
+ this.state.inFSharpPipelineDirectBody = false;
+ const innerStartLoc = this.state.startLoc;
+ const exprList = [];
+ const refExpressionErrors = new ExpressionErrors();
+ let first = true;
+ let spreadStartLoc;
+ let optionalCommaStartLoc;
+ while (!this.match(11)) {
+ if (first) {
+ first = false;
+ } else {
+ this.expect(12, refExpressionErrors.optionalParametersLoc === null ? null : refExpressionErrors.optionalParametersLoc);
+ if (this.match(11)) {
+ optionalCommaStartLoc = this.state.startLoc;
+ break;
+ }
+ }
+ if (this.match(21)) {
+ const spreadNodeStartLoc = this.state.startLoc;
+ spreadStartLoc = this.state.startLoc;
+ exprList.push(this.parseParenItem(this.parseRestBinding(), spreadNodeStartLoc));
+ if (!this.checkCommaAfterRest(41)) {
+ break;
+ }
+ } else {
+ exprList.push(this.parseMaybeAssignAllowIn(refExpressionErrors, this.parseParenItem));
+ }
+ }
+ const innerEndLoc = this.state.lastTokEndLoc;
+ this.expect(11);
+ this.state.maybeInArrowParameters = oldMaybeInArrowParameters;
+ this.state.inFSharpPipelineDirectBody = oldInFSharpPipelineDirectBody;
+ let arrowNode = this.startNodeAt(startLoc);
+ if (canBeArrow && this.shouldParseArrow(exprList) && (arrowNode = this.parseArrow(arrowNode))) {
+ this.checkDestructuringPrivate(refExpressionErrors);
+ this.expressionScope.validateAsPattern();
+ this.expressionScope.exit();
+ this.parseArrowExpression(arrowNode, exprList, false);
+ return arrowNode;
+ }
+ this.expressionScope.exit();
+ if (!exprList.length) {
+ this.unexpected(this.state.lastTokStartLoc);
+ }
+ if (optionalCommaStartLoc) this.unexpected(optionalCommaStartLoc);
+ if (spreadStartLoc) this.unexpected(spreadStartLoc);
+ this.checkExpressionErrors(refExpressionErrors, true);
+ this.toReferencedListDeep(exprList, true);
+ if (exprList.length > 1) {
+ val = this.startNodeAt(innerStartLoc);
+ val.expressions = exprList;
+ this.finishNode(val, "SequenceExpression");
+ this.resetEndLocation(val, innerEndLoc);
+ } else {
+ val = exprList[0];
+ }
+ return this.wrapParenthesis(startLoc, val);
+ }
+ wrapParenthesis(startLoc, expression) {
+ if (!this.options.createParenthesizedExpressions) {
+ this.addExtra(expression, "parenthesized", true);
+ this.addExtra(expression, "parenStart", startLoc.index);
+ this.takeSurroundingComments(expression, startLoc.index, this.state.lastTokEndLoc.index);
+ return expression;
+ }
+ const parenExpression = this.startNodeAt(startLoc);
+ parenExpression.expression = expression;
+ return this.finishNode(parenExpression, "ParenthesizedExpression");
+ }
+ shouldParseArrow(params) {
+ return !this.canInsertSemicolon();
+ }
+ parseArrow(node) {
+ if (this.eat(19)) {
+ return node;
+ }
+ }
+ parseParenItem(node, startLoc) {
+ return node;
+ }
+ parseNewOrNewTarget() {
+ const node = this.startNode();
+ this.next();
+ if (this.match(16)) {
+ const meta = this.createIdentifier(this.startNodeAtNode(node), "new");
+ this.next();
+ const metaProp = this.parseMetaProperty(node, meta, "target");
+ if (!this.scope.inNonArrowFunction && !this.scope.inClass && !this.options.allowNewTargetOutsideFunction) {
+ this.raise(Errors.UnexpectedNewTarget, {
+ at: metaProp
+ });
+ }
+ return metaProp;
+ }
+ return this.parseNew(node);
+ }
+ parseNew(node) {
+ this.parseNewCallee(node);
+ if (this.eat(10)) {
+ const args = this.parseExprList(11);
+ this.toReferencedList(args);
+ node.arguments = args;
+ } else {
+ node.arguments = [];
+ }
+ return this.finishNode(node, "NewExpression");
+ }
+ parseNewCallee(node) {
+ const isImport = this.match(83);
+ const callee = this.parseNoCallExpr();
+ node.callee = callee;
+ if (isImport && (callee.type === "Import" || callee.type === "ImportExpression")) {
+ this.raise(Errors.ImportCallNotNewExpression, {
+ at: callee
+ });
+ }
+ }
+ parseTemplateElement(isTagged) {
+ const {
+ start,
+ startLoc,
+ end,
+ value
+ } = this.state;
+ const elemStart = start + 1;
+ const elem = this.startNodeAt(createPositionWithColumnOffset(startLoc, 1));
+ if (value === null) {
+ if (!isTagged) {
+ this.raise(Errors.InvalidEscapeSequenceTemplate, {
+ at: createPositionWithColumnOffset(this.state.firstInvalidTemplateEscapePos, 1)
+ });
+ }
+ }
+ const isTail = this.match(24);
+ const endOffset = isTail ? -1 : -2;
+ const elemEnd = end + endOffset;
+ elem.value = {
+ raw: this.input.slice(elemStart, elemEnd).replace(/\r\n?/g, "\n"),
+ cooked: value === null ? null : value.slice(1, endOffset)
+ };
+ elem.tail = isTail;
+ this.next();
+ const finishedNode = this.finishNode(elem, "TemplateElement");
+ this.resetEndLocation(finishedNode, createPositionWithColumnOffset(this.state.lastTokEndLoc, endOffset));
+ return finishedNode;
+ }
+ parseTemplate(isTagged) {
+ const node = this.startNode();
+ node.expressions = [];
+ let curElt = this.parseTemplateElement(isTagged);
+ node.quasis = [curElt];
+ while (!curElt.tail) {
+ node.expressions.push(this.parseTemplateSubstitution());
+ this.readTemplateContinuation();
+ node.quasis.push(curElt = this.parseTemplateElement(isTagged));
+ }
+ return this.finishNode(node, "TemplateLiteral");
+ }
+ parseTemplateSubstitution() {
+ return this.parseExpression();
+ }
+ parseObjectLike(close, isPattern, isRecord, refExpressionErrors) {
+ if (isRecord) {
+ this.expectPlugin("recordAndTuple");
+ }
+ const oldInFSharpPipelineDirectBody = this.state.inFSharpPipelineDirectBody;
+ this.state.inFSharpPipelineDirectBody = false;
+ const propHash = Object.create(null);
+ let first = true;
+ const node = this.startNode();
+ node.properties = [];
+ this.next();
+ while (!this.match(close)) {
+ if (first) {
+ first = false;
+ } else {
+ this.expect(12);
+ if (this.match(close)) {
+ this.addTrailingCommaExtraToNode(node);
+ break;
+ }
+ }
+ let prop;
+ if (isPattern) {
+ prop = this.parseBindingProperty();
+ } else {
+ prop = this.parsePropertyDefinition(refExpressionErrors);
+ this.checkProto(prop, isRecord, propHash, refExpressionErrors);
+ }
+ if (isRecord && !this.isObjectProperty(prop) && prop.type !== "SpreadElement") {
+ this.raise(Errors.InvalidRecordProperty, {
+ at: prop
+ });
+ }
+ if (prop.shorthand) {
+ this.addExtra(prop, "shorthand", true);
+ }
+ node.properties.push(prop);
+ }
+ this.next();
+ this.state.inFSharpPipelineDirectBody = oldInFSharpPipelineDirectBody;
+ let type = "ObjectExpression";
+ if (isPattern) {
+ type = "ObjectPattern";
+ } else if (isRecord) {
+ type = "RecordExpression";
+ }
+ return this.finishNode(node, type);
+ }
+ addTrailingCommaExtraToNode(node) {
+ this.addExtra(node, "trailingComma", this.state.lastTokStart);
+ this.addExtra(node, "trailingCommaLoc", this.state.lastTokStartLoc, false);
+ }
+ maybeAsyncOrAccessorProp(prop) {
+ return !prop.computed && prop.key.type === "Identifier" && (this.isLiteralPropertyName() || this.match(0) || this.match(55));
+ }
+ parsePropertyDefinition(refExpressionErrors) {
+ let decorators = [];
+ if (this.match(26)) {
+ if (this.hasPlugin("decorators")) {
+ this.raise(Errors.UnsupportedPropertyDecorator, {
+ at: this.state.startLoc
+ });
+ }
+ while (this.match(26)) {
+ decorators.push(this.parseDecorator());
+ }
+ }
+ const prop = this.startNode();
+ let isAsync = false;
+ let isAccessor = false;
+ let startLoc;
+ if (this.match(21)) {
+ if (decorators.length) this.unexpected();
+ return this.parseSpread();
+ }
+ if (decorators.length) {
+ prop.decorators = decorators;
+ decorators = [];
+ }
+ prop.method = false;
+ if (refExpressionErrors) {
+ startLoc = this.state.startLoc;
+ }
+ let isGenerator = this.eat(55);
+ this.parsePropertyNamePrefixOperator(prop);
+ const containsEsc = this.state.containsEsc;
+ const key = this.parsePropertyName(prop, refExpressionErrors);
+ if (!isGenerator && !containsEsc && this.maybeAsyncOrAccessorProp(prop)) {
+ const keyName = key.name;
+ if (keyName === "async" && !this.hasPrecedingLineBreak()) {
+ isAsync = true;
+ this.resetPreviousNodeTrailingComments(key);
+ isGenerator = this.eat(55);
+ this.parsePropertyName(prop);
+ }
+ if (keyName === "get" || keyName === "set") {
+ isAccessor = true;
+ this.resetPreviousNodeTrailingComments(key);
+ prop.kind = keyName;
+ if (this.match(55)) {
+ isGenerator = true;
+ this.raise(Errors.AccessorIsGenerator, {
+ at: this.state.curPosition(),
+ kind: keyName
+ });
+ this.next();
+ }
+ this.parsePropertyName(prop);
+ }
+ }
+ return this.parseObjPropValue(prop, startLoc, isGenerator, isAsync, false, isAccessor, refExpressionErrors);
+ }
+ getGetterSetterExpectedParamCount(method) {
+ return method.kind === "get" ? 0 : 1;
+ }
+ getObjectOrClassMethodParams(method) {
+ return method.params;
+ }
+ checkGetterSetterParams(method) {
+ var _params;
+ const paramCount = this.getGetterSetterExpectedParamCount(method);
+ const params = this.getObjectOrClassMethodParams(method);
+ if (params.length !== paramCount) {
+ this.raise(method.kind === "get" ? Errors.BadGetterArity : Errors.BadSetterArity, {
+ at: method
+ });
+ }
+ if (method.kind === "set" && ((_params = params[params.length - 1]) == null ? void 0 : _params.type) === "RestElement") {
+ this.raise(Errors.BadSetterRestParameter, {
+ at: method
+ });
+ }
+ }
+ parseObjectMethod(prop, isGenerator, isAsync, isPattern, isAccessor) {
+ if (isAccessor) {
+ const finishedProp = this.parseMethod(prop, isGenerator, false, false, false, "ObjectMethod");
+ this.checkGetterSetterParams(finishedProp);
+ return finishedProp;
+ }
+ if (isAsync || isGenerator || this.match(10)) {
+ if (isPattern) this.unexpected();
+ prop.kind = "method";
+ prop.method = true;
+ return this.parseMethod(prop, isGenerator, isAsync, false, false, "ObjectMethod");
+ }
+ }
+ parseObjectProperty(prop, startLoc, isPattern, refExpressionErrors) {
+ prop.shorthand = false;
+ if (this.eat(14)) {
+ prop.value = isPattern ? this.parseMaybeDefault(this.state.startLoc) : this.parseMaybeAssignAllowIn(refExpressionErrors);
+ return this.finishNode(prop, "ObjectProperty");
+ }
+ if (!prop.computed && prop.key.type === "Identifier") {
+ this.checkReservedWord(prop.key.name, prop.key.loc.start, true, false);
+ if (isPattern) {
+ prop.value = this.parseMaybeDefault(startLoc, cloneIdentifier(prop.key));
+ } else if (this.match(29)) {
+ const shorthandAssignLoc = this.state.startLoc;
+ if (refExpressionErrors != null) {
+ if (refExpressionErrors.shorthandAssignLoc === null) {
+ refExpressionErrors.shorthandAssignLoc = shorthandAssignLoc;
+ }
+ } else {
+ this.raise(Errors.InvalidCoverInitializedName, {
+ at: shorthandAssignLoc
+ });
+ }
+ prop.value = this.parseMaybeDefault(startLoc, cloneIdentifier(prop.key));
+ } else {
+ prop.value = cloneIdentifier(prop.key);
+ }
+ prop.shorthand = true;
+ return this.finishNode(prop, "ObjectProperty");
+ }
+ }
+ parseObjPropValue(prop, startLoc, isGenerator, isAsync, isPattern, isAccessor, refExpressionErrors) {
+ const node = this.parseObjectMethod(prop, isGenerator, isAsync, isPattern, isAccessor) || this.parseObjectProperty(prop, startLoc, isPattern, refExpressionErrors);
+ if (!node) this.unexpected();
+ return node;
+ }
+ parsePropertyName(prop, refExpressionErrors) {
+ if (this.eat(0)) {
+ prop.computed = true;
+ prop.key = this.parseMaybeAssignAllowIn();
+ this.expect(3);
+ } else {
+ const {
+ type,
+ value
+ } = this.state;
+ let key;
+ if (tokenIsKeywordOrIdentifier(type)) {
+ key = this.parseIdentifier(true);
+ } else {
+ switch (type) {
+ case 134:
+ key = this.parseNumericLiteral(value);
+ break;
+ case 133:
+ key = this.parseStringLiteral(value);
+ break;
+ case 135:
+ key = this.parseBigIntLiteral(value);
+ break;
+ case 136:
+ key = this.parseDecimalLiteral(value);
+ break;
+ case 138:
+ {
+ const privateKeyLoc = this.state.startLoc;
+ if (refExpressionErrors != null) {
+ if (refExpressionErrors.privateKeyLoc === null) {
+ refExpressionErrors.privateKeyLoc = privateKeyLoc;
+ }
+ } else {
+ this.raise(Errors.UnexpectedPrivateField, {
+ at: privateKeyLoc
+ });
+ }
+ key = this.parsePrivateName();
+ break;
+ }
+ default:
+ this.unexpected();
+ }
+ }
+ prop.key = key;
+ if (type !== 138) {
+ prop.computed = false;
+ }
+ }
+ return prop.key;
+ }
+ initFunction(node, isAsync) {
+ node.id = null;
+ node.generator = false;
+ node.async = isAsync;
+ }
+ parseMethod(node, isGenerator, isAsync, isConstructor, allowDirectSuper, type, inClassScope = false) {
+ this.initFunction(node, isAsync);
+ node.generator = isGenerator;
+ this.scope.enter(2 | 16 | (inClassScope ? 64 : 0) | (allowDirectSuper ? 32 : 0));
+ this.prodParam.enter(functionFlags(isAsync, node.generator));
+ this.parseFunctionParams(node, isConstructor);
+ const finishedNode = this.parseFunctionBodyAndFinish(node, type, true);
+ this.prodParam.exit();
+ this.scope.exit();
+ return finishedNode;
+ }
+ parseArrayLike(close, canBePattern, isTuple, refExpressionErrors) {
+ if (isTuple) {
+ this.expectPlugin("recordAndTuple");
+ }
+ const oldInFSharpPipelineDirectBody = this.state.inFSharpPipelineDirectBody;
+ this.state.inFSharpPipelineDirectBody = false;
+ const node = this.startNode();
+ this.next();
+ node.elements = this.parseExprList(close, !isTuple, refExpressionErrors, node);
+ this.state.inFSharpPipelineDirectBody = oldInFSharpPipelineDirectBody;
+ return this.finishNode(node, isTuple ? "TupleExpression" : "ArrayExpression");
+ }
+ parseArrowExpression(node, params, isAsync, trailingCommaLoc) {
+ this.scope.enter(2 | 4);
+ let flags = functionFlags(isAsync, false);
+ if (!this.match(5) && this.prodParam.hasIn) {
+ flags |= 8;
+ }
+ this.prodParam.enter(flags);
+ this.initFunction(node, isAsync);
+ const oldMaybeInArrowParameters = this.state.maybeInArrowParameters;
+ if (params) {
+ this.state.maybeInArrowParameters = true;
+ this.setArrowFunctionParameters(node, params, trailingCommaLoc);
+ }
+ this.state.maybeInArrowParameters = false;
+ this.parseFunctionBody(node, true);
+ this.prodParam.exit();
+ this.scope.exit();
+ this.state.maybeInArrowParameters = oldMaybeInArrowParameters;
+ return this.finishNode(node, "ArrowFunctionExpression");
+ }
+ setArrowFunctionParameters(node, params, trailingCommaLoc) {
+ this.toAssignableList(params, trailingCommaLoc, false);
+ node.params = params;
+ }
+ parseFunctionBodyAndFinish(node, type, isMethod = false) {
+ this.parseFunctionBody(node, false, isMethod);
+ return this.finishNode(node, type);
+ }
+ parseFunctionBody(node, allowExpression, isMethod = false) {
+ const isExpression = allowExpression && !this.match(5);
+ this.expressionScope.enter(newExpressionScope());
+ if (isExpression) {
+ node.body = this.parseMaybeAssign();
+ this.checkParams(node, false, allowExpression, false);
+ } else {
+ const oldStrict = this.state.strict;
+ const oldLabels = this.state.labels;
+ this.state.labels = [];
+ this.prodParam.enter(this.prodParam.currentFlags() | 4);
+ node.body = this.parseBlock(true, false, hasStrictModeDirective => {
+ const nonSimple = !this.isSimpleParamList(node.params);
+ if (hasStrictModeDirective && nonSimple) {
+ this.raise(Errors.IllegalLanguageModeDirective, {
+ at: (node.kind === "method" || node.kind === "constructor") && !!node.key ? node.key.loc.end : node
+ });
+ }
+ const strictModeChanged = !oldStrict && this.state.strict;
+ this.checkParams(node, !this.state.strict && !allowExpression && !isMethod && !nonSimple, allowExpression, strictModeChanged);
+ if (this.state.strict && node.id) {
+ this.checkIdentifier(node.id, 65, strictModeChanged);
+ }
+ });
+ this.prodParam.exit();
+ this.state.labels = oldLabels;
+ }
+ this.expressionScope.exit();
+ }
+ isSimpleParameter(node) {
+ return node.type === "Identifier";
+ }
+ isSimpleParamList(params) {
+ for (let i = 0, len = params.length; i < len; i++) {
+ if (!this.isSimpleParameter(params[i])) return false;
+ }
+ return true;
+ }
+ checkParams(node, allowDuplicates, isArrowFunction, strictModeChanged = true) {
+ const checkClashes = !allowDuplicates && new Set();
+ const formalParameters = {
+ type: "FormalParameters"
+ };
+ for (const param of node.params) {
+ this.checkLVal(param, {
+ in: formalParameters,
+ binding: 5,
+ checkClashes,
+ strictModeChanged
+ });
+ }
+ }
+ parseExprList(close, allowEmpty, refExpressionErrors, nodeForExtra) {
+ const elts = [];
+ let first = true;
+ while (!this.eat(close)) {
+ if (first) {
+ first = false;
+ } else {
+ this.expect(12);
+ if (this.match(close)) {
+ if (nodeForExtra) {
+ this.addTrailingCommaExtraToNode(nodeForExtra);
+ }
+ this.next();
+ break;
+ }
+ }
+ elts.push(this.parseExprListItem(allowEmpty, refExpressionErrors));
+ }
+ return elts;
+ }
+ parseExprListItem(allowEmpty, refExpressionErrors, allowPlaceholder) {
+ let elt;
+ if (this.match(12)) {
+ if (!allowEmpty) {
+ this.raise(Errors.UnexpectedToken, {
+ at: this.state.curPosition(),
+ unexpected: ","
+ });
+ }
+ elt = null;
+ } else if (this.match(21)) {
+ const spreadNodeStartLoc = this.state.startLoc;
+ elt = this.parseParenItem(this.parseSpread(refExpressionErrors), spreadNodeStartLoc);
+ } else if (this.match(17)) {
+ this.expectPlugin("partialApplication");
+ if (!allowPlaceholder) {
+ this.raise(Errors.UnexpectedArgumentPlaceholder, {
+ at: this.state.startLoc
+ });
+ }
+ const node = this.startNode();
+ this.next();
+ elt = this.finishNode(node, "ArgumentPlaceholder");
+ } else {
+ elt = this.parseMaybeAssignAllowIn(refExpressionErrors, this.parseParenItem);
+ }
+ return elt;
+ }
+ parseIdentifier(liberal) {
+ const node = this.startNode();
+ const name = this.parseIdentifierName(liberal);
+ return this.createIdentifier(node, name);
+ }
+ createIdentifier(node, name) {
+ node.name = name;
+ node.loc.identifierName = name;
+ return this.finishNode(node, "Identifier");
+ }
+ parseIdentifierName(liberal) {
+ let name;
+ const {
+ startLoc,
+ type
+ } = this.state;
+ if (tokenIsKeywordOrIdentifier(type)) {
+ name = this.state.value;
+ } else {
+ this.unexpected();
+ }
+ const tokenIsKeyword = tokenKeywordOrIdentifierIsKeyword(type);
+ if (liberal) {
+ if (tokenIsKeyword) {
+ this.replaceToken(132);
+ }
+ } else {
+ this.checkReservedWord(name, startLoc, tokenIsKeyword, false);
+ }
+ this.next();
+ return name;
+ }
+ checkReservedWord(word, startLoc, checkKeywords, isBinding) {
+ if (word.length > 10) {
+ return;
+ }
+ if (!canBeReservedWord(word)) {
+ return;
+ }
+ if (checkKeywords && isKeyword(word)) {
+ this.raise(Errors.UnexpectedKeyword, {
+ at: startLoc,
+ keyword: word
+ });
+ return;
+ }
+ const reservedTest = !this.state.strict ? isReservedWord : isBinding ? isStrictBindReservedWord : isStrictReservedWord;
+ if (reservedTest(word, this.inModule)) {
+ this.raise(Errors.UnexpectedReservedWord, {
+ at: startLoc,
+ reservedWord: word
+ });
+ return;
+ } else if (word === "yield") {
+ if (this.prodParam.hasYield) {
+ this.raise(Errors.YieldBindingIdentifier, {
+ at: startLoc
+ });
+ return;
+ }
+ } else if (word === "await") {
+ if (this.prodParam.hasAwait) {
+ this.raise(Errors.AwaitBindingIdentifier, {
+ at: startLoc
+ });
+ return;
+ }
+ if (this.scope.inStaticBlock) {
+ this.raise(Errors.AwaitBindingIdentifierInStaticBlock, {
+ at: startLoc
+ });
+ return;
+ }
+ this.expressionScope.recordAsyncArrowParametersError({
+ at: startLoc
+ });
+ } else if (word === "arguments") {
+ if (this.scope.inClassAndNotInNonArrowFunction) {
+ this.raise(Errors.ArgumentsInClass, {
+ at: startLoc
+ });
+ return;
+ }
+ }
+ }
+ isAwaitAllowed() {
+ if (this.prodParam.hasAwait) return true;
+ if (this.options.allowAwaitOutsideFunction && !this.scope.inFunction) {
+ return true;
+ }
+ return false;
+ }
+ parseAwait(startLoc) {
+ const node = this.startNodeAt(startLoc);
+ this.expressionScope.recordParameterInitializerError(Errors.AwaitExpressionFormalParameter, {
+ at: node
+ });
+ if (this.eat(55)) {
+ this.raise(Errors.ObsoleteAwaitStar, {
+ at: node
+ });
+ }
+ if (!this.scope.inFunction && !this.options.allowAwaitOutsideFunction) {
+ if (this.isAmbiguousAwait()) {
+ this.ambiguousScriptDifferentAst = true;
+ } else {
+ this.sawUnambiguousESM = true;
+ }
+ }
+ if (!this.state.soloAwait) {
+ node.argument = this.parseMaybeUnary(null, true);
+ }
+ return this.finishNode(node, "AwaitExpression");
+ }
+ isAmbiguousAwait() {
+ if (this.hasPrecedingLineBreak()) return true;
+ const {
+ type
+ } = this.state;
+ return type === 53 || type === 10 || type === 0 || tokenIsTemplate(type) || type === 102 && !this.state.containsEsc || type === 137 || type === 56 || this.hasPlugin("v8intrinsic") && type === 54;
+ }
+ parseYield() {
+ const node = this.startNode();
+ this.expressionScope.recordParameterInitializerError(Errors.YieldInParameter, {
+ at: node
+ });
+ this.next();
+ let delegating = false;
+ let argument = null;
+ if (!this.hasPrecedingLineBreak()) {
+ delegating = this.eat(55);
+ switch (this.state.type) {
+ case 13:
+ case 139:
+ case 8:
+ case 11:
+ case 3:
+ case 9:
+ case 14:
+ case 12:
+ if (!delegating) break;
+ default:
+ argument = this.parseMaybeAssign();
+ }
+ }
+ node.delegate = delegating;
+ node.argument = argument;
+ return this.finishNode(node, "YieldExpression");
+ }
+ parseImportCall(node) {
+ this.next();
+ node.source = this.parseMaybeAssignAllowIn();
+ if (this.hasPlugin("importAttributes") || this.hasPlugin("importAssertions")) {
+ node.options = null;
+ }
+ if (this.eat(12)) {
+ this.expectImportAttributesPlugin();
+ if (!this.match(11)) {
+ node.options = this.parseMaybeAssignAllowIn();
+ this.eat(12);
+ }
+ }
+ this.expect(11);
+ return this.finishNode(node, "ImportExpression");
+ }
+ checkPipelineAtInfixOperator(left, leftStartLoc) {
+ if (this.hasPlugin(["pipelineOperator", {
+ proposal: "smart"
+ }])) {
+ if (left.type === "SequenceExpression") {
+ this.raise(Errors.PipelineHeadSequenceExpression, {
+ at: leftStartLoc
+ });
+ }
+ }
+ }
+ parseSmartPipelineBodyInStyle(childExpr, startLoc) {
+ if (this.isSimpleReference(childExpr)) {
+ const bodyNode = this.startNodeAt(startLoc);
+ bodyNode.callee = childExpr;
+ return this.finishNode(bodyNode, "PipelineBareFunction");
+ } else {
+ const bodyNode = this.startNodeAt(startLoc);
+ this.checkSmartPipeTopicBodyEarlyErrors(startLoc);
+ bodyNode.expression = childExpr;
+ return this.finishNode(bodyNode, "PipelineTopicExpression");
+ }
+ }
+ isSimpleReference(expression) {
+ switch (expression.type) {
+ case "MemberExpression":
+ return !expression.computed && this.isSimpleReference(expression.object);
+ case "Identifier":
+ return true;
+ default:
+ return false;
+ }
+ }
+ checkSmartPipeTopicBodyEarlyErrors(startLoc) {
+ if (this.match(19)) {
+ throw this.raise(Errors.PipelineBodyNoArrow, {
+ at: this.state.startLoc
+ });
+ }
+ if (!this.topicReferenceWasUsedInCurrentContext()) {
+ this.raise(Errors.PipelineTopicUnused, {
+ at: startLoc
+ });
+ }
+ }
+ withTopicBindingContext(callback) {
+ const outerContextTopicState = this.state.topicContext;
+ this.state.topicContext = {
+ maxNumOfResolvableTopics: 1,
+ maxTopicIndex: null
+ };
+ try {
+ return callback();
+ } finally {
+ this.state.topicContext = outerContextTopicState;
+ }
+ }
+ withSmartMixTopicForbiddingContext(callback) {
+ if (this.hasPlugin(["pipelineOperator", {
+ proposal: "smart"
+ }])) {
+ const outerContextTopicState = this.state.topicContext;
+ this.state.topicContext = {
+ maxNumOfResolvableTopics: 0,
+ maxTopicIndex: null
+ };
+ try {
+ return callback();
+ } finally {
+ this.state.topicContext = outerContextTopicState;
+ }
+ } else {
+ return callback();
+ }
+ }
+ withSoloAwaitPermittingContext(callback) {
+ const outerContextSoloAwaitState = this.state.soloAwait;
+ this.state.soloAwait = true;
+ try {
+ return callback();
+ } finally {
+ this.state.soloAwait = outerContextSoloAwaitState;
+ }
+ }
+ allowInAnd(callback) {
+ const flags = this.prodParam.currentFlags();
+ const prodParamToSet = 8 & ~flags;
+ if (prodParamToSet) {
+ this.prodParam.enter(flags | 8);
+ try {
+ return callback();
+ } finally {
+ this.prodParam.exit();
+ }
+ }
+ return callback();
+ }
+ disallowInAnd(callback) {
+ const flags = this.prodParam.currentFlags();
+ const prodParamToClear = 8 & flags;
+ if (prodParamToClear) {
+ this.prodParam.enter(flags & ~8);
+ try {
+ return callback();
+ } finally {
+ this.prodParam.exit();
+ }
+ }
+ return callback();
+ }
+ registerTopicReference() {
+ this.state.topicContext.maxTopicIndex = 0;
+ }
+ topicReferenceIsAllowedInCurrentContext() {
+ return this.state.topicContext.maxNumOfResolvableTopics >= 1;
+ }
+ topicReferenceWasUsedInCurrentContext() {
+ return this.state.topicContext.maxTopicIndex != null && this.state.topicContext.maxTopicIndex >= 0;
+ }
+ parseFSharpPipelineBody(prec) {
+ const startLoc = this.state.startLoc;
+ this.state.potentialArrowAt = this.state.start;
+ const oldInFSharpPipelineDirectBody = this.state.inFSharpPipelineDirectBody;
+ this.state.inFSharpPipelineDirectBody = true;
+ const ret = this.parseExprOp(this.parseMaybeUnaryOrPrivate(), startLoc, prec);
+ this.state.inFSharpPipelineDirectBody = oldInFSharpPipelineDirectBody;
+ return ret;
+ }
+ parseModuleExpression() {
+ this.expectPlugin("moduleBlocks");
+ const node = this.startNode();
+ this.next();
+ if (!this.match(5)) {
+ this.unexpected(null, 5);
+ }
+ const program = this.startNodeAt(this.state.endLoc);
+ this.next();
+ const revertScopes = this.initializeScopes(true);
+ this.enterInitialScopes();
+ try {
+ node.body = this.parseProgram(program, 8, "module");
+ } finally {
+ revertScopes();
+ }
+ return this.finishNode(node, "ModuleExpression");
+ }
+ parsePropertyNamePrefixOperator(prop) {}
+}
+const loopLabel = {
+ kind: "loop"
+ },
+ switchLabel = {
+ kind: "switch"
+ };
+const loneSurrogate = /[\uD800-\uDFFF]/u;
+const keywordRelationalOperator = /in(?:stanceof)?/y;
+function babel7CompatTokens(tokens, input) {
+ for (let i = 0; i < tokens.length; i++) {
+ const token = tokens[i];
+ const {
+ type
+ } = token;
+ if (typeof type === "number") {
+ {
+ if (type === 138) {
+ const {
+ loc,
+ start,
+ value,
+ end
+ } = token;
+ const hashEndPos = start + 1;
+ const hashEndLoc = createPositionWithColumnOffset(loc.start, 1);
+ tokens.splice(i, 1, new Token({
+ type: getExportedToken(27),
+ value: "#",
+ start: start,
+ end: hashEndPos,
+ startLoc: loc.start,
+ endLoc: hashEndLoc
+ }), new Token({
+ type: getExportedToken(132),
+ value: value,
+ start: hashEndPos,
+ end: end,
+ startLoc: hashEndLoc,
+ endLoc: loc.end
+ }));
+ i++;
+ continue;
+ }
+ if (tokenIsTemplate(type)) {
+ const {
+ loc,
+ start,
+ value,
+ end
+ } = token;
+ const backquoteEnd = start + 1;
+ const backquoteEndLoc = createPositionWithColumnOffset(loc.start, 1);
+ let startToken;
+ if (input.charCodeAt(start) === 96) {
+ startToken = new Token({
+ type: getExportedToken(22),
+ value: "`",
+ start: start,
+ end: backquoteEnd,
+ startLoc: loc.start,
+ endLoc: backquoteEndLoc
+ });
+ } else {
+ startToken = new Token({
+ type: getExportedToken(8),
+ value: "}",
+ start: start,
+ end: backquoteEnd,
+ startLoc: loc.start,
+ endLoc: backquoteEndLoc
+ });
+ }
+ let templateValue, templateElementEnd, templateElementEndLoc, endToken;
+ if (type === 24) {
+ templateElementEnd = end - 1;
+ templateElementEndLoc = createPositionWithColumnOffset(loc.end, -1);
+ templateValue = value === null ? null : value.slice(1, -1);
+ endToken = new Token({
+ type: getExportedToken(22),
+ value: "`",
+ start: templateElementEnd,
+ end: end,
+ startLoc: templateElementEndLoc,
+ endLoc: loc.end
+ });
+ } else {
+ templateElementEnd = end - 2;
+ templateElementEndLoc = createPositionWithColumnOffset(loc.end, -2);
+ templateValue = value === null ? null : value.slice(1, -2);
+ endToken = new Token({
+ type: getExportedToken(23),
+ value: "${",
+ start: templateElementEnd,
+ end: end,
+ startLoc: templateElementEndLoc,
+ endLoc: loc.end
+ });
+ }
+ tokens.splice(i, 1, startToken, new Token({
+ type: getExportedToken(20),
+ value: templateValue,
+ start: backquoteEnd,
+ end: templateElementEnd,
+ startLoc: backquoteEndLoc,
+ endLoc: templateElementEndLoc
+ }), endToken);
+ i += 2;
+ continue;
+ }
+ }
+ token.type = getExportedToken(type);
+ }
+ }
+ return tokens;
+}
+class StatementParser extends ExpressionParser {
+ parseTopLevel(file, program) {
+ file.program = this.parseProgram(program);
+ file.comments = this.state.comments;
+ if (this.options.tokens) {
+ file.tokens = babel7CompatTokens(this.tokens, this.input);
+ }
+ return this.finishNode(file, "File");
+ }
+ parseProgram(program, end = 139, sourceType = this.options.sourceType) {
+ program.sourceType = sourceType;
+ program.interpreter = this.parseInterpreterDirective();
+ this.parseBlockBody(program, true, true, end);
+ if (this.inModule && !this.options.allowUndeclaredExports && this.scope.undefinedExports.size > 0) {
+ for (const [localName, at] of Array.from(this.scope.undefinedExports)) {
+ this.raise(Errors.ModuleExportUndefined, {
+ at,
+ localName
+ });
+ }
+ }
+ let finishedProgram;
+ if (end === 139) {
+ finishedProgram = this.finishNode(program, "Program");
+ } else {
+ finishedProgram = this.finishNodeAt(program, "Program", createPositionWithColumnOffset(this.state.startLoc, -1));
+ }
+ return finishedProgram;
+ }
+ stmtToDirective(stmt) {
+ const directive = stmt;
+ directive.type = "Directive";
+ directive.value = directive.expression;
+ delete directive.expression;
+ const directiveLiteral = directive.value;
+ const expressionValue = directiveLiteral.value;
+ const raw = this.input.slice(directiveLiteral.start, directiveLiteral.end);
+ const val = directiveLiteral.value = raw.slice(1, -1);
+ this.addExtra(directiveLiteral, "raw", raw);
+ this.addExtra(directiveLiteral, "rawValue", val);
+ this.addExtra(directiveLiteral, "expressionValue", expressionValue);
+ directiveLiteral.type = "DirectiveLiteral";
+ return directive;
+ }
+ parseInterpreterDirective() {
+ if (!this.match(28)) {
+ return null;
+ }
+ const node = this.startNode();
+ node.value = this.state.value;
+ this.next();
+ return this.finishNode(node, "InterpreterDirective");
+ }
+ isLet() {
+ if (!this.isContextual(100)) {
+ return false;
+ }
+ return this.hasFollowingBindingAtom();
+ }
+ chStartsBindingIdentifier(ch, pos) {
+ if (isIdentifierStart(ch)) {
+ keywordRelationalOperator.lastIndex = pos;
+ if (keywordRelationalOperator.test(this.input)) {
+ const endCh = this.codePointAtPos(keywordRelationalOperator.lastIndex);
+ if (!isIdentifierChar(endCh) && endCh !== 92) {
+ return false;
+ }
+ }
+ return true;
+ } else if (ch === 92) {
+ return true;
+ } else {
+ return false;
+ }
+ }
+ chStartsBindingPattern(ch) {
+ return ch === 91 || ch === 123;
+ }
+ hasFollowingBindingAtom() {
+ const next = this.nextTokenStart();
+ const nextCh = this.codePointAtPos(next);
+ return this.chStartsBindingPattern(nextCh) || this.chStartsBindingIdentifier(nextCh, next);
+ }
+ hasInLineFollowingBindingIdentifier() {
+ const next = this.nextTokenInLineStart();
+ const nextCh = this.codePointAtPos(next);
+ return this.chStartsBindingIdentifier(nextCh, next);
+ }
+ startsUsingForOf() {
+ const {
+ type,
+ containsEsc
+ } = this.lookahead();
+ if (type === 102 && !containsEsc) {
+ return false;
+ } else if (tokenIsIdentifier(type) && !this.hasFollowingLineBreak()) {
+ this.expectPlugin("explicitResourceManagement");
+ return true;
+ }
+ }
+ startsAwaitUsing() {
+ let next = this.nextTokenInLineStart();
+ if (this.isUnparsedContextual(next, "using")) {
+ next = this.nextTokenInLineStartSince(next + 5);
+ const nextCh = this.codePointAtPos(next);
+ if (this.chStartsBindingIdentifier(nextCh, next)) {
+ this.expectPlugin("explicitResourceManagement");
+ return true;
+ }
+ }
+ return false;
+ }
+ parseModuleItem() {
+ return this.parseStatementLike(1 | 2 | 4 | 8);
+ }
+ parseStatementListItem() {
+ return this.parseStatementLike(2 | 4 | (!this.options.annexB || this.state.strict ? 0 : 8));
+ }
+ parseStatementOrSloppyAnnexBFunctionDeclaration(allowLabeledFunction = false) {
+ let flags = 0;
+ if (this.options.annexB && !this.state.strict) {
+ flags |= 4;
+ if (allowLabeledFunction) {
+ flags |= 8;
+ }
+ }
+ return this.parseStatementLike(flags);
+ }
+ parseStatement() {
+ return this.parseStatementLike(0);
+ }
+ parseStatementLike(flags) {
+ let decorators = null;
+ if (this.match(26)) {
+ decorators = this.parseDecorators(true);
+ }
+ return this.parseStatementContent(flags, decorators);
+ }
+ parseStatementContent(flags, decorators) {
+ const starttype = this.state.type;
+ const node = this.startNode();
+ const allowDeclaration = !!(flags & 2);
+ const allowFunctionDeclaration = !!(flags & 4);
+ const topLevel = flags & 1;
+ switch (starttype) {
+ case 60:
+ return this.parseBreakContinueStatement(node, true);
+ case 63:
+ return this.parseBreakContinueStatement(node, false);
+ case 64:
+ return this.parseDebuggerStatement(node);
+ case 90:
+ return this.parseDoWhileStatement(node);
+ case 91:
+ return this.parseForStatement(node);
+ case 68:
+ if (this.lookaheadCharCode() === 46) break;
+ if (!allowFunctionDeclaration) {
+ this.raise(this.state.strict ? Errors.StrictFunction : this.options.annexB ? Errors.SloppyFunctionAnnexB : Errors.SloppyFunction, {
+ at: this.state.startLoc
+ });
+ }
+ return this.parseFunctionStatement(node, false, !allowDeclaration && allowFunctionDeclaration);
+ case 80:
+ if (!allowDeclaration) this.unexpected();
+ return this.parseClass(this.maybeTakeDecorators(decorators, node), true);
+ case 69:
+ return this.parseIfStatement(node);
+ case 70:
+ return this.parseReturnStatement(node);
+ case 71:
+ return this.parseSwitchStatement(node);
+ case 72:
+ return this.parseThrowStatement(node);
+ case 73:
+ return this.parseTryStatement(node);
+ case 96:
+ if (!this.state.containsEsc && this.startsAwaitUsing()) {
+ if (!this.isAwaitAllowed()) {
+ this.raise(Errors.AwaitUsingNotInAsyncContext, {
+ at: node
+ });
+ } else if (!allowDeclaration) {
+ this.raise(Errors.UnexpectedLexicalDeclaration, {
+ at: node
+ });
+ }
+ this.next();
+ return this.parseVarStatement(node, "await using");
+ }
+ break;
+ case 107:
+ if (this.state.containsEsc || !this.hasInLineFollowingBindingIdentifier()) {
+ break;
+ }
+ this.expectPlugin("explicitResourceManagement");
+ if (!this.scope.inModule && this.scope.inTopLevel) {
+ this.raise(Errors.UnexpectedUsingDeclaration, {
+ at: this.state.startLoc
+ });
+ } else if (!allowDeclaration) {
+ this.raise(Errors.UnexpectedLexicalDeclaration, {
+ at: this.state.startLoc
+ });
+ }
+ return this.parseVarStatement(node, "using");
+ case 100:
+ {
+ if (this.state.containsEsc) {
+ break;
+ }
+ const next = this.nextTokenStart();
+ const nextCh = this.codePointAtPos(next);
+ if (nextCh !== 91) {
+ if (!allowDeclaration && this.hasFollowingLineBreak()) break;
+ if (!this.chStartsBindingIdentifier(nextCh, next) && nextCh !== 123) {
+ break;
+ }
+ }
+ }
+ case 75:
+ {
+ if (!allowDeclaration) {
+ this.raise(Errors.UnexpectedLexicalDeclaration, {
+ at: this.state.startLoc
+ });
+ }
+ }
+ case 74:
+ {
+ const kind = this.state.value;
+ return this.parseVarStatement(node, kind);
+ }
+ case 92:
+ return this.parseWhileStatement(node);
+ case 76:
+ return this.parseWithStatement(node);
+ case 5:
+ return this.parseBlock();
+ case 13:
+ return this.parseEmptyStatement(node);
+ case 83:
+ {
+ const nextTokenCharCode = this.lookaheadCharCode();
+ if (nextTokenCharCode === 40 || nextTokenCharCode === 46) {
+ break;
+ }
+ }
+ case 82:
+ {
+ if (!this.options.allowImportExportEverywhere && !topLevel) {
+ this.raise(Errors.UnexpectedImportExport, {
+ at: this.state.startLoc
+ });
+ }
+ this.next();
+ let result;
+ if (starttype === 83) {
+ result = this.parseImport(node);
+ if (result.type === "ImportDeclaration" && (!result.importKind || result.importKind === "value")) {
+ this.sawUnambiguousESM = true;
+ }
+ } else {
+ result = this.parseExport(node, decorators);
+ if (result.type === "ExportNamedDeclaration" && (!result.exportKind || result.exportKind === "value") || result.type === "ExportAllDeclaration" && (!result.exportKind || result.exportKind === "value") || result.type === "ExportDefaultDeclaration") {
+ this.sawUnambiguousESM = true;
+ }
+ }
+ this.assertModuleNodeAllowed(result);
+ return result;
+ }
+ default:
+ {
+ if (this.isAsyncFunction()) {
+ if (!allowDeclaration) {
+ this.raise(Errors.AsyncFunctionInSingleStatementContext, {
+ at: this.state.startLoc
+ });
+ }
+ this.next();
+ return this.parseFunctionStatement(node, true, !allowDeclaration && allowFunctionDeclaration);
+ }
+ }
+ }
+ const maybeName = this.state.value;
+ const expr = this.parseExpression();
+ if (tokenIsIdentifier(starttype) && expr.type === "Identifier" && this.eat(14)) {
+ return this.parseLabeledStatement(node, maybeName, expr, flags);
+ } else {
+ return this.parseExpressionStatement(node, expr, decorators);
+ }
+ }
+ assertModuleNodeAllowed(node) {
+ if (!this.options.allowImportExportEverywhere && !this.inModule) {
+ this.raise(Errors.ImportOutsideModule, {
+ at: node
+ });
+ }
+ }
+ decoratorsEnabledBeforeExport() {
+ if (this.hasPlugin("decorators-legacy")) return true;
+ return this.hasPlugin("decorators") && this.getPluginOption("decorators", "decoratorsBeforeExport") !== false;
+ }
+ maybeTakeDecorators(maybeDecorators, classNode, exportNode) {
+ if (maybeDecorators) {
+ if (classNode.decorators && classNode.decorators.length > 0) {
+ if (typeof this.getPluginOption("decorators", "decoratorsBeforeExport") !== "boolean") {
+ this.raise(Errors.DecoratorsBeforeAfterExport, {
+ at: classNode.decorators[0]
+ });
+ }
+ classNode.decorators.unshift(...maybeDecorators);
+ } else {
+ classNode.decorators = maybeDecorators;
+ }
+ this.resetStartLocationFromNode(classNode, maybeDecorators[0]);
+ if (exportNode) this.resetStartLocationFromNode(exportNode, classNode);
+ }
+ return classNode;
+ }
+ canHaveLeadingDecorator() {
+ return this.match(80);
+ }
+ parseDecorators(allowExport) {
+ const decorators = [];
+ do {
+ decorators.push(this.parseDecorator());
+ } while (this.match(26));
+ if (this.match(82)) {
+ if (!allowExport) {
+ this.unexpected();
+ }
+ if (!this.decoratorsEnabledBeforeExport()) {
+ this.raise(Errors.DecoratorExportClass, {
+ at: this.state.startLoc
+ });
+ }
+ } else if (!this.canHaveLeadingDecorator()) {
+ throw this.raise(Errors.UnexpectedLeadingDecorator, {
+ at: this.state.startLoc
+ });
+ }
+ return decorators;
+ }
+ parseDecorator() {
+ this.expectOnePlugin(["decorators", "decorators-legacy"]);
+ const node = this.startNode();
+ this.next();
+ if (this.hasPlugin("decorators")) {
+ const startLoc = this.state.startLoc;
+ let expr;
+ if (this.match(10)) {
+ const startLoc = this.state.startLoc;
+ this.next();
+ expr = this.parseExpression();
+ this.expect(11);
+ expr = this.wrapParenthesis(startLoc, expr);
+ const paramsStartLoc = this.state.startLoc;
+ node.expression = this.parseMaybeDecoratorArguments(expr);
+ if (this.getPluginOption("decorators", "allowCallParenthesized") === false && node.expression !== expr) {
+ this.raise(Errors.DecoratorArgumentsOutsideParentheses, {
+ at: paramsStartLoc
+ });
+ }
+ } else {
+ expr = this.parseIdentifier(false);
+ while (this.eat(16)) {
+ const node = this.startNodeAt(startLoc);
+ node.object = expr;
+ if (this.match(138)) {
+ this.classScope.usePrivateName(this.state.value, this.state.startLoc);
+ node.property = this.parsePrivateName();
+ } else {
+ node.property = this.parseIdentifier(true);
+ }
+ node.computed = false;
+ expr = this.finishNode(node, "MemberExpression");
+ }
+ node.expression = this.parseMaybeDecoratorArguments(expr);
+ }
+ } else {
+ node.expression = this.parseExprSubscripts();
+ }
+ return this.finishNode(node, "Decorator");
+ }
+ parseMaybeDecoratorArguments(expr) {
+ if (this.eat(10)) {
+ const node = this.startNodeAtNode(expr);
+ node.callee = expr;
+ node.arguments = this.parseCallExpressionArguments(11, false);
+ this.toReferencedList(node.arguments);
+ return this.finishNode(node, "CallExpression");
+ }
+ return expr;
+ }
+ parseBreakContinueStatement(node, isBreak) {
+ this.next();
+ if (this.isLineTerminator()) {
+ node.label = null;
+ } else {
+ node.label = this.parseIdentifier();
+ this.semicolon();
+ }
+ this.verifyBreakContinue(node, isBreak);
+ return this.finishNode(node, isBreak ? "BreakStatement" : "ContinueStatement");
+ }
+ verifyBreakContinue(node, isBreak) {
+ let i;
+ for (i = 0; i < this.state.labels.length; ++i) {
+ const lab = this.state.labels[i];
+ if (node.label == null || lab.name === node.label.name) {
+ if (lab.kind != null && (isBreak || lab.kind === "loop")) break;
+ if (node.label && isBreak) break;
+ }
+ }
+ if (i === this.state.labels.length) {
+ const type = isBreak ? "BreakStatement" : "ContinueStatement";
+ this.raise(Errors.IllegalBreakContinue, {
+ at: node,
+ type
+ });
+ }
+ }
+ parseDebuggerStatement(node) {
+ this.next();
+ this.semicolon();
+ return this.finishNode(node, "DebuggerStatement");
+ }
+ parseHeaderExpression() {
+ this.expect(10);
+ const val = this.parseExpression();
+ this.expect(11);
+ return val;
+ }
+ parseDoWhileStatement(node) {
+ this.next();
+ this.state.labels.push(loopLabel);
+ node.body = this.withSmartMixTopicForbiddingContext(() => this.parseStatement());
+ this.state.labels.pop();
+ this.expect(92);
+ node.test = this.parseHeaderExpression();
+ this.eat(13);
+ return this.finishNode(node, "DoWhileStatement");
+ }
+ parseForStatement(node) {
+ this.next();
+ this.state.labels.push(loopLabel);
+ let awaitAt = null;
+ if (this.isAwaitAllowed() && this.eatContextual(96)) {
+ awaitAt = this.state.lastTokStartLoc;
+ }
+ this.scope.enter(0);
+ this.expect(10);
+ if (this.match(13)) {
+ if (awaitAt !== null) {
+ this.unexpected(awaitAt);
+ }
+ return this.parseFor(node, null);
+ }
+ const startsWithLet = this.isContextual(100);
+ {
+ const startsWithAwaitUsing = this.isContextual(96) && this.startsAwaitUsing();
+ const starsWithUsingDeclaration = startsWithAwaitUsing || this.isContextual(107) && this.startsUsingForOf();
+ const isLetOrUsing = startsWithLet && this.hasFollowingBindingAtom() || starsWithUsingDeclaration;
+ if (this.match(74) || this.match(75) || isLetOrUsing) {
+ const initNode = this.startNode();
+ let kind;
+ if (startsWithAwaitUsing) {
+ kind = "await using";
+ if (!this.isAwaitAllowed()) {
+ this.raise(Errors.AwaitUsingNotInAsyncContext, {
+ at: this.state.startLoc
+ });
+ }
+ this.next();
+ } else {
+ kind = this.state.value;
+ }
+ this.next();
+ this.parseVar(initNode, true, kind);
+ const init = this.finishNode(initNode, "VariableDeclaration");
+ const isForIn = this.match(58);
+ if (isForIn && starsWithUsingDeclaration) {
+ this.raise(Errors.ForInUsing, {
+ at: init
+ });
+ }
+ if ((isForIn || this.isContextual(102)) && init.declarations.length === 1) {
+ return this.parseForIn(node, init, awaitAt);
+ }
+ if (awaitAt !== null) {
+ this.unexpected(awaitAt);
+ }
+ return this.parseFor(node, init);
+ }
+ }
+ const startsWithAsync = this.isContextual(95);
+ const refExpressionErrors = new ExpressionErrors();
+ const init = this.parseExpression(true, refExpressionErrors);
+ const isForOf = this.isContextual(102);
+ if (isForOf) {
+ if (startsWithLet) {
+ this.raise(Errors.ForOfLet, {
+ at: init
+ });
+ }
+ if (awaitAt === null && startsWithAsync && init.type === "Identifier") {
+ this.raise(Errors.ForOfAsync, {
+ at: init
+ });
+ }
+ }
+ if (isForOf || this.match(58)) {
+ this.checkDestructuringPrivate(refExpressionErrors);
+ this.toAssignable(init, true);
+ const type = isForOf ? "ForOfStatement" : "ForInStatement";
+ this.checkLVal(init, {
+ in: {
+ type
+ }
+ });
+ return this.parseForIn(node, init, awaitAt);
+ } else {
+ this.checkExpressionErrors(refExpressionErrors, true);
+ }
+ if (awaitAt !== null) {
+ this.unexpected(awaitAt);
+ }
+ return this.parseFor(node, init);
+ }
+ parseFunctionStatement(node, isAsync, isHangingDeclaration) {
+ this.next();
+ return this.parseFunction(node, 1 | (isHangingDeclaration ? 2 : 0) | (isAsync ? 8 : 0));
+ }
+ parseIfStatement(node) {
+ this.next();
+ node.test = this.parseHeaderExpression();
+ node.consequent = this.parseStatementOrSloppyAnnexBFunctionDeclaration();
+ node.alternate = this.eat(66) ? this.parseStatementOrSloppyAnnexBFunctionDeclaration() : null;
+ return this.finishNode(node, "IfStatement");
+ }
+ parseReturnStatement(node) {
+ if (!this.prodParam.hasReturn && !this.options.allowReturnOutsideFunction) {
+ this.raise(Errors.IllegalReturn, {
+ at: this.state.startLoc
+ });
+ }
+ this.next();
+ if (this.isLineTerminator()) {
+ node.argument = null;
+ } else {
+ node.argument = this.parseExpression();
+ this.semicolon();
+ }
+ return this.finishNode(node, "ReturnStatement");
+ }
+ parseSwitchStatement(node) {
+ this.next();
+ node.discriminant = this.parseHeaderExpression();
+ const cases = node.cases = [];
+ this.expect(5);
+ this.state.labels.push(switchLabel);
+ this.scope.enter(0);
+ let cur;
+ for (let sawDefault; !this.match(8);) {
+ if (this.match(61) || this.match(65)) {
+ const isCase = this.match(61);
+ if (cur) this.finishNode(cur, "SwitchCase");
+ cases.push(cur = this.startNode());
+ cur.consequent = [];
+ this.next();
+ if (isCase) {
+ cur.test = this.parseExpression();
+ } else {
+ if (sawDefault) {
+ this.raise(Errors.MultipleDefaultsInSwitch, {
+ at: this.state.lastTokStartLoc
+ });
+ }
+ sawDefault = true;
+ cur.test = null;
+ }
+ this.expect(14);
+ } else {
+ if (cur) {
+ cur.consequent.push(this.parseStatementListItem());
+ } else {
+ this.unexpected();
+ }
+ }
+ }
+ this.scope.exit();
+ if (cur) this.finishNode(cur, "SwitchCase");
+ this.next();
+ this.state.labels.pop();
+ return this.finishNode(node, "SwitchStatement");
+ }
+ parseThrowStatement(node) {
+ this.next();
+ if (this.hasPrecedingLineBreak()) {
+ this.raise(Errors.NewlineAfterThrow, {
+ at: this.state.lastTokEndLoc
+ });
+ }
+ node.argument = this.parseExpression();
+ this.semicolon();
+ return this.finishNode(node, "ThrowStatement");
+ }
+ parseCatchClauseParam() {
+ const param = this.parseBindingAtom();
+ this.scope.enter(this.options.annexB && param.type === "Identifier" ? 8 : 0);
+ this.checkLVal(param, {
+ in: {
+ type: "CatchClause"
+ },
+ binding: 9
+ });
+ return param;
+ }
+ parseTryStatement(node) {
+ this.next();
+ node.block = this.parseBlock();
+ node.handler = null;
+ if (this.match(62)) {
+ const clause = this.startNode();
+ this.next();
+ if (this.match(10)) {
+ this.expect(10);
+ clause.param = this.parseCatchClauseParam();
+ this.expect(11);
+ } else {
+ clause.param = null;
+ this.scope.enter(0);
+ }
+ clause.body = this.withSmartMixTopicForbiddingContext(() => this.parseBlock(false, false));
+ this.scope.exit();
+ node.handler = this.finishNode(clause, "CatchClause");
+ }
+ node.finalizer = this.eat(67) ? this.parseBlock() : null;
+ if (!node.handler && !node.finalizer) {
+ this.raise(Errors.NoCatchOrFinally, {
+ at: node
+ });
+ }
+ return this.finishNode(node, "TryStatement");
+ }
+ parseVarStatement(node, kind, allowMissingInitializer = false) {
+ this.next();
+ this.parseVar(node, false, kind, allowMissingInitializer);
+ this.semicolon();
+ return this.finishNode(node, "VariableDeclaration");
+ }
+ parseWhileStatement(node) {
+ this.next();
+ node.test = this.parseHeaderExpression();
+ this.state.labels.push(loopLabel);
+ node.body = this.withSmartMixTopicForbiddingContext(() => this.parseStatement());
+ this.state.labels.pop();
+ return this.finishNode(node, "WhileStatement");
+ }
+ parseWithStatement(node) {
+ if (this.state.strict) {
+ this.raise(Errors.StrictWith, {
+ at: this.state.startLoc
+ });
+ }
+ this.next();
+ node.object = this.parseHeaderExpression();
+ node.body = this.withSmartMixTopicForbiddingContext(() => this.parseStatement());
+ return this.finishNode(node, "WithStatement");
+ }
+ parseEmptyStatement(node) {
+ this.next();
+ return this.finishNode(node, "EmptyStatement");
+ }
+ parseLabeledStatement(node, maybeName, expr, flags) {
+ for (const label of this.state.labels) {
+ if (label.name === maybeName) {
+ this.raise(Errors.LabelRedeclaration, {
+ at: expr,
+ labelName: maybeName
+ });
+ }
+ }
+ const kind = tokenIsLoop(this.state.type) ? "loop" : this.match(71) ? "switch" : null;
+ for (let i = this.state.labels.length - 1; i >= 0; i--) {
+ const label = this.state.labels[i];
+ if (label.statementStart === node.start) {
+ label.statementStart = this.state.start;
+ label.kind = kind;
+ } else {
+ break;
+ }
+ }
+ this.state.labels.push({
+ name: maybeName,
+ kind: kind,
+ statementStart: this.state.start
+ });
+ node.body = flags & 8 ? this.parseStatementOrSloppyAnnexBFunctionDeclaration(true) : this.parseStatement();
+ this.state.labels.pop();
+ node.label = expr;
+ return this.finishNode(node, "LabeledStatement");
+ }
+ parseExpressionStatement(node, expr, decorators) {
+ node.expression = expr;
+ this.semicolon();
+ return this.finishNode(node, "ExpressionStatement");
+ }
+ parseBlock(allowDirectives = false, createNewLexicalScope = true, afterBlockParse) {
+ const node = this.startNode();
+ if (allowDirectives) {
+ this.state.strictErrors.clear();
+ }
+ this.expect(5);
+ if (createNewLexicalScope) {
+ this.scope.enter(0);
+ }
+ this.parseBlockBody(node, allowDirectives, false, 8, afterBlockParse);
+ if (createNewLexicalScope) {
+ this.scope.exit();
+ }
+ return this.finishNode(node, "BlockStatement");
+ }
+ isValidDirective(stmt) {
+ return stmt.type === "ExpressionStatement" && stmt.expression.type === "StringLiteral" && !stmt.expression.extra.parenthesized;
+ }
+ parseBlockBody(node, allowDirectives, topLevel, end, afterBlockParse) {
+ const body = node.body = [];
+ const directives = node.directives = [];
+ this.parseBlockOrModuleBlockBody(body, allowDirectives ? directives : undefined, topLevel, end, afterBlockParse);
+ }
+ parseBlockOrModuleBlockBody(body, directives, topLevel, end, afterBlockParse) {
+ const oldStrict = this.state.strict;
+ let hasStrictModeDirective = false;
+ let parsedNonDirective = false;
+ while (!this.match(end)) {
+ const stmt = topLevel ? this.parseModuleItem() : this.parseStatementListItem();
+ if (directives && !parsedNonDirective) {
+ if (this.isValidDirective(stmt)) {
+ const directive = this.stmtToDirective(stmt);
+ directives.push(directive);
+ if (!hasStrictModeDirective && directive.value.value === "use strict") {
+ hasStrictModeDirective = true;
+ this.setStrict(true);
+ }
+ continue;
+ }
+ parsedNonDirective = true;
+ this.state.strictErrors.clear();
+ }
+ body.push(stmt);
+ }
+ afterBlockParse == null || afterBlockParse.call(this, hasStrictModeDirective);
+ if (!oldStrict) {
+ this.setStrict(false);
+ }
+ this.next();
+ }
+ parseFor(node, init) {
+ node.init = init;
+ this.semicolon(false);
+ node.test = this.match(13) ? null : this.parseExpression();
+ this.semicolon(false);
+ node.update = this.match(11) ? null : this.parseExpression();
+ this.expect(11);
+ node.body = this.withSmartMixTopicForbiddingContext(() => this.parseStatement());
+ this.scope.exit();
+ this.state.labels.pop();
+ return this.finishNode(node, "ForStatement");
+ }
+ parseForIn(node, init, awaitAt) {
+ const isForIn = this.match(58);
+ this.next();
+ if (isForIn) {
+ if (awaitAt !== null) this.unexpected(awaitAt);
+ } else {
+ node.await = awaitAt !== null;
+ }
+ if (init.type === "VariableDeclaration" && init.declarations[0].init != null && (!isForIn || !this.options.annexB || this.state.strict || init.kind !== "var" || init.declarations[0].id.type !== "Identifier")) {
+ this.raise(Errors.ForInOfLoopInitializer, {
+ at: init,
+ type: isForIn ? "ForInStatement" : "ForOfStatement"
+ });
+ }
+ if (init.type === "AssignmentPattern") {
+ this.raise(Errors.InvalidLhs, {
+ at: init,
+ ancestor: {
+ type: "ForStatement"
+ }
+ });
+ }
+ node.left = init;
+ node.right = isForIn ? this.parseExpression() : this.parseMaybeAssignAllowIn();
+ this.expect(11);
+ node.body = this.withSmartMixTopicForbiddingContext(() => this.parseStatement());
+ this.scope.exit();
+ this.state.labels.pop();
+ return this.finishNode(node, isForIn ? "ForInStatement" : "ForOfStatement");
+ }
+ parseVar(node, isFor, kind, allowMissingInitializer = false) {
+ const declarations = node.declarations = [];
+ node.kind = kind;
+ for (;;) {
+ const decl = this.startNode();
+ this.parseVarId(decl, kind);
+ decl.init = !this.eat(29) ? null : isFor ? this.parseMaybeAssignDisallowIn() : this.parseMaybeAssignAllowIn();
+ if (decl.init === null && !allowMissingInitializer) {
+ if (decl.id.type !== "Identifier" && !(isFor && (this.match(58) || this.isContextual(102)))) {
+ this.raise(Errors.DeclarationMissingInitializer, {
+ at: this.state.lastTokEndLoc,
+ kind: "destructuring"
+ });
+ } else if (kind === "const" && !(this.match(58) || this.isContextual(102))) {
+ this.raise(Errors.DeclarationMissingInitializer, {
+ at: this.state.lastTokEndLoc,
+ kind: "const"
+ });
+ }
+ }
+ declarations.push(this.finishNode(decl, "VariableDeclarator"));
+ if (!this.eat(12)) break;
+ }
+ return node;
+ }
+ parseVarId(decl, kind) {
+ const id = this.parseBindingAtom();
+ this.checkLVal(id, {
+ in: {
+ type: "VariableDeclarator"
+ },
+ binding: kind === "var" ? 5 : 8201
+ });
+ decl.id = id;
+ }
+ parseAsyncFunctionExpression(node) {
+ return this.parseFunction(node, 8);
+ }
+ parseFunction(node, flags = 0) {
+ const hangingDeclaration = flags & 2;
+ const isDeclaration = !!(flags & 1);
+ const requireId = isDeclaration && !(flags & 4);
+ const isAsync = !!(flags & 8);
+ this.initFunction(node, isAsync);
+ if (this.match(55)) {
+ if (hangingDeclaration) {
+ this.raise(Errors.GeneratorInSingleStatementContext, {
+ at: this.state.startLoc
+ });
+ }
+ this.next();
+ node.generator = true;
+ }
+ if (isDeclaration) {
+ node.id = this.parseFunctionId(requireId);
+ }
+ const oldMaybeInArrowParameters = this.state.maybeInArrowParameters;
+ this.state.maybeInArrowParameters = false;
+ this.scope.enter(2);
+ this.prodParam.enter(functionFlags(isAsync, node.generator));
+ if (!isDeclaration) {
+ node.id = this.parseFunctionId();
+ }
+ this.parseFunctionParams(node, false);
+ this.withSmartMixTopicForbiddingContext(() => {
+ this.parseFunctionBodyAndFinish(node, isDeclaration ? "FunctionDeclaration" : "FunctionExpression");
+ });
+ this.prodParam.exit();
+ this.scope.exit();
+ if (isDeclaration && !hangingDeclaration) {
+ this.registerFunctionStatementId(node);
+ }
+ this.state.maybeInArrowParameters = oldMaybeInArrowParameters;
+ return node;
+ }
+ parseFunctionId(requireId) {
+ return requireId || tokenIsIdentifier(this.state.type) ? this.parseIdentifier() : null;
+ }
+ parseFunctionParams(node, isConstructor) {
+ this.expect(10);
+ this.expressionScope.enter(newParameterDeclarationScope());
+ node.params = this.parseBindingList(11, 41, 2 | (isConstructor ? 4 : 0));
+ this.expressionScope.exit();
+ }
+ registerFunctionStatementId(node) {
+ if (!node.id) return;
+ this.scope.declareName(node.id.name, !this.options.annexB || this.state.strict || node.generator || node.async ? this.scope.treatFunctionsAsVar ? 5 : 8201 : 17, node.id.loc.start);
+ }
+ parseClass(node, isStatement, optionalId) {
+ this.next();
+ const oldStrict = this.state.strict;
+ this.state.strict = true;
+ this.parseClassId(node, isStatement, optionalId);
+ this.parseClassSuper(node);
+ node.body = this.parseClassBody(!!node.superClass, oldStrict);
+ return this.finishNode(node, isStatement ? "ClassDeclaration" : "ClassExpression");
+ }
+ isClassProperty() {
+ return this.match(29) || this.match(13) || this.match(8);
+ }
+ isClassMethod() {
+ return this.match(10);
+ }
+ isNonstaticConstructor(method) {
+ return !method.computed && !method.static && (method.key.name === "constructor" || method.key.value === "constructor");
+ }
+ parseClassBody(hadSuperClass, oldStrict) {
+ this.classScope.enter();
+ const state = {
+ hadConstructor: false,
+ hadSuperClass
+ };
+ let decorators = [];
+ const classBody = this.startNode();
+ classBody.body = [];
+ this.expect(5);
+ this.withSmartMixTopicForbiddingContext(() => {
+ while (!this.match(8)) {
+ if (this.eat(13)) {
+ if (decorators.length > 0) {
+ throw this.raise(Errors.DecoratorSemicolon, {
+ at: this.state.lastTokEndLoc
+ });
+ }
+ continue;
+ }
+ if (this.match(26)) {
+ decorators.push(this.parseDecorator());
+ continue;
+ }
+ const member = this.startNode();
+ if (decorators.length) {
+ member.decorators = decorators;
+ this.resetStartLocationFromNode(member, decorators[0]);
+ decorators = [];
+ }
+ this.parseClassMember(classBody, member, state);
+ if (member.kind === "constructor" && member.decorators && member.decorators.length > 0) {
+ this.raise(Errors.DecoratorConstructor, {
+ at: member
+ });
+ }
+ }
+ });
+ this.state.strict = oldStrict;
+ this.next();
+ if (decorators.length) {
+ throw this.raise(Errors.TrailingDecorator, {
+ at: this.state.startLoc
+ });
+ }
+ this.classScope.exit();
+ return this.finishNode(classBody, "ClassBody");
+ }
+ parseClassMemberFromModifier(classBody, member) {
+ const key = this.parseIdentifier(true);
+ if (this.isClassMethod()) {
+ const method = member;
+ method.kind = "method";
+ method.computed = false;
+ method.key = key;
+ method.static = false;
+ this.pushClassMethod(classBody, method, false, false, false, false);
+ return true;
+ } else if (this.isClassProperty()) {
+ const prop = member;
+ prop.computed = false;
+ prop.key = key;
+ prop.static = false;
+ classBody.body.push(this.parseClassProperty(prop));
+ return true;
+ }
+ this.resetPreviousNodeTrailingComments(key);
+ return false;
+ }
+ parseClassMember(classBody, member, state) {
+ const isStatic = this.isContextual(106);
+ if (isStatic) {
+ if (this.parseClassMemberFromModifier(classBody, member)) {
+ return;
+ }
+ if (this.eat(5)) {
+ this.parseClassStaticBlock(classBody, member);
+ return;
+ }
+ }
+ this.parseClassMemberWithIsStatic(classBody, member, state, isStatic);
+ }
+ parseClassMemberWithIsStatic(classBody, member, state, isStatic) {
+ const publicMethod = member;
+ const privateMethod = member;
+ const publicProp = member;
+ const privateProp = member;
+ const accessorProp = member;
+ const method = publicMethod;
+ const publicMember = publicMethod;
+ member.static = isStatic;
+ this.parsePropertyNamePrefixOperator(member);
+ if (this.eat(55)) {
+ method.kind = "method";
+ const isPrivateName = this.match(138);
+ this.parseClassElementName(method);
+ if (isPrivateName) {
+ this.pushClassPrivateMethod(classBody, privateMethod, true, false);
+ return;
+ }
+ if (this.isNonstaticConstructor(publicMethod)) {
+ this.raise(Errors.ConstructorIsGenerator, {
+ at: publicMethod.key
+ });
+ }
+ this.pushClassMethod(classBody, publicMethod, true, false, false, false);
+ return;
+ }
+ const isContextual = tokenIsIdentifier(this.state.type) && !this.state.containsEsc;
+ const isPrivate = this.match(138);
+ const key = this.parseClassElementName(member);
+ const maybeQuestionTokenStartLoc = this.state.startLoc;
+ this.parsePostMemberNameModifiers(publicMember);
+ if (this.isClassMethod()) {
+ method.kind = "method";
+ if (isPrivate) {
+ this.pushClassPrivateMethod(classBody, privateMethod, false, false);
+ return;
+ }
+ const isConstructor = this.isNonstaticConstructor(publicMethod);
+ let allowsDirectSuper = false;
+ if (isConstructor) {
+ publicMethod.kind = "constructor";
+ if (state.hadConstructor && !this.hasPlugin("typescript")) {
+ this.raise(Errors.DuplicateConstructor, {
+ at: key
+ });
+ }
+ if (isConstructor && this.hasPlugin("typescript") && member.override) {
+ this.raise(Errors.OverrideOnConstructor, {
+ at: key
+ });
+ }
+ state.hadConstructor = true;
+ allowsDirectSuper = state.hadSuperClass;
+ }
+ this.pushClassMethod(classBody, publicMethod, false, false, isConstructor, allowsDirectSuper);
+ } else if (this.isClassProperty()) {
+ if (isPrivate) {
+ this.pushClassPrivateProperty(classBody, privateProp);
+ } else {
+ this.pushClassProperty(classBody, publicProp);
+ }
+ } else if (isContextual && key.name === "async" && !this.isLineTerminator()) {
+ this.resetPreviousNodeTrailingComments(key);
+ const isGenerator = this.eat(55);
+ if (publicMember.optional) {
+ this.unexpected(maybeQuestionTokenStartLoc);
+ }
+ method.kind = "method";
+ const isPrivate = this.match(138);
+ this.parseClassElementName(method);
+ this.parsePostMemberNameModifiers(publicMember);
+ if (isPrivate) {
+ this.pushClassPrivateMethod(classBody, privateMethod, isGenerator, true);
+ } else {
+ if (this.isNonstaticConstructor(publicMethod)) {
+ this.raise(Errors.ConstructorIsAsync, {
+ at: publicMethod.key
+ });
+ }
+ this.pushClassMethod(classBody, publicMethod, isGenerator, true, false, false);
+ }
+ } else if (isContextual && (key.name === "get" || key.name === "set") && !(this.match(55) && this.isLineTerminator())) {
+ this.resetPreviousNodeTrailingComments(key);
+ method.kind = key.name;
+ const isPrivate = this.match(138);
+ this.parseClassElementName(publicMethod);
+ if (isPrivate) {
+ this.pushClassPrivateMethod(classBody, privateMethod, false, false);
+ } else {
+ if (this.isNonstaticConstructor(publicMethod)) {
+ this.raise(Errors.ConstructorIsAccessor, {
+ at: publicMethod.key
+ });
+ }
+ this.pushClassMethod(classBody, publicMethod, false, false, false, false);
+ }
+ this.checkGetterSetterParams(publicMethod);
+ } else if (isContextual && key.name === "accessor" && !this.isLineTerminator()) {
+ this.expectPlugin("decoratorAutoAccessors");
+ this.resetPreviousNodeTrailingComments(key);
+ const isPrivate = this.match(138);
+ this.parseClassElementName(publicProp);
+ this.pushClassAccessorProperty(classBody, accessorProp, isPrivate);
+ } else if (this.isLineTerminator()) {
+ if (isPrivate) {
+ this.pushClassPrivateProperty(classBody, privateProp);
+ } else {
+ this.pushClassProperty(classBody, publicProp);
+ }
+ } else {
+ this.unexpected();
+ }
+ }
+ parseClassElementName(member) {
+ const {
+ type,
+ value
+ } = this.state;
+ if ((type === 132 || type === 133) && member.static && value === "prototype") {
+ this.raise(Errors.StaticPrototype, {
+ at: this.state.startLoc
+ });
+ }
+ if (type === 138) {
+ if (value === "constructor") {
+ this.raise(Errors.ConstructorClassPrivateField, {
+ at: this.state.startLoc
+ });
+ }
+ const key = this.parsePrivateName();
+ member.key = key;
+ return key;
+ }
+ return this.parsePropertyName(member);
+ }
+ parseClassStaticBlock(classBody, member) {
+ var _member$decorators;
+ this.scope.enter(64 | 128 | 16);
+ const oldLabels = this.state.labels;
+ this.state.labels = [];
+ this.prodParam.enter(0);
+ const body = member.body = [];
+ this.parseBlockOrModuleBlockBody(body, undefined, false, 8);
+ this.prodParam.exit();
+ this.scope.exit();
+ this.state.labels = oldLabels;
+ classBody.body.push(this.finishNode(member, "StaticBlock"));
+ if ((_member$decorators = member.decorators) != null && _member$decorators.length) {
+ this.raise(Errors.DecoratorStaticBlock, {
+ at: member
+ });
+ }
+ }
+ pushClassProperty(classBody, prop) {
+ if (!prop.computed && (prop.key.name === "constructor" || prop.key.value === "constructor")) {
+ this.raise(Errors.ConstructorClassField, {
+ at: prop.key
+ });
+ }
+ classBody.body.push(this.parseClassProperty(prop));
+ }
+ pushClassPrivateProperty(classBody, prop) {
+ const node = this.parseClassPrivateProperty(prop);
+ classBody.body.push(node);
+ this.classScope.declarePrivateName(this.getPrivateNameSV(node.key), 0, node.key.loc.start);
+ }
+ pushClassAccessorProperty(classBody, prop, isPrivate) {
+ if (!isPrivate && !prop.computed) {
+ const key = prop.key;
+ if (key.name === "constructor" || key.value === "constructor") {
+ this.raise(Errors.ConstructorClassField, {
+ at: key
+ });
+ }
+ }
+ const node = this.parseClassAccessorProperty(prop);
+ classBody.body.push(node);
+ if (isPrivate) {
+ this.classScope.declarePrivateName(this.getPrivateNameSV(node.key), 0, node.key.loc.start);
+ }
+ }
+ pushClassMethod(classBody, method, isGenerator, isAsync, isConstructor, allowsDirectSuper) {
+ classBody.body.push(this.parseMethod(method, isGenerator, isAsync, isConstructor, allowsDirectSuper, "ClassMethod", true));
+ }
+ pushClassPrivateMethod(classBody, method, isGenerator, isAsync) {
+ const node = this.parseMethod(method, isGenerator, isAsync, false, false, "ClassPrivateMethod", true);
+ classBody.body.push(node);
+ const kind = node.kind === "get" ? node.static ? 6 : 2 : node.kind === "set" ? node.static ? 5 : 1 : 0;
+ this.declareClassPrivateMethodInScope(node, kind);
+ }
+ declareClassPrivateMethodInScope(node, kind) {
+ this.classScope.declarePrivateName(this.getPrivateNameSV(node.key), kind, node.key.loc.start);
+ }
+ parsePostMemberNameModifiers(methodOrProp) {}
+ parseClassPrivateProperty(node) {
+ this.parseInitializer(node);
+ this.semicolon();
+ return this.finishNode(node, "ClassPrivateProperty");
+ }
+ parseClassProperty(node) {
+ this.parseInitializer(node);
+ this.semicolon();
+ return this.finishNode(node, "ClassProperty");
+ }
+ parseClassAccessorProperty(node) {
+ this.parseInitializer(node);
+ this.semicolon();
+ return this.finishNode(node, "ClassAccessorProperty");
+ }
+ parseInitializer(node) {
+ this.scope.enter(64 | 16);
+ this.expressionScope.enter(newExpressionScope());
+ this.prodParam.enter(0);
+ node.value = this.eat(29) ? this.parseMaybeAssignAllowIn() : null;
+ this.expressionScope.exit();
+ this.prodParam.exit();
+ this.scope.exit();
+ }
+ parseClassId(node, isStatement, optionalId, bindingType = 8331) {
+ if (tokenIsIdentifier(this.state.type)) {
+ node.id = this.parseIdentifier();
+ if (isStatement) {
+ this.declareNameFromIdentifier(node.id, bindingType);
+ }
+ } else {
+ if (optionalId || !isStatement) {
+ node.id = null;
+ } else {
+ throw this.raise(Errors.MissingClassName, {
+ at: this.state.startLoc
+ });
+ }
+ }
+ }
+ parseClassSuper(node) {
+ node.superClass = this.eat(81) ? this.parseExprSubscripts() : null;
+ }
+ parseExport(node, decorators) {
+ const maybeDefaultIdentifier = this.parseMaybeImportPhase(node, true);
+ const hasDefault = this.maybeParseExportDefaultSpecifier(node, maybeDefaultIdentifier);
+ const parseAfterDefault = !hasDefault || this.eat(12);
+ const hasStar = parseAfterDefault && this.eatExportStar(node);
+ const hasNamespace = hasStar && this.maybeParseExportNamespaceSpecifier(node);
+ const parseAfterNamespace = parseAfterDefault && (!hasNamespace || this.eat(12));
+ const isFromRequired = hasDefault || hasStar;
+ if (hasStar && !hasNamespace) {
+ if (hasDefault) this.unexpected();
+ if (decorators) {
+ throw this.raise(Errors.UnsupportedDecoratorExport, {
+ at: node
+ });
+ }
+ this.parseExportFrom(node, true);
+ return this.finishNode(node, "ExportAllDeclaration");
+ }
+ const hasSpecifiers = this.maybeParseExportNamedSpecifiers(node);
+ if (hasDefault && parseAfterDefault && !hasStar && !hasSpecifiers) {
+ this.unexpected(null, 5);
+ }
+ if (hasNamespace && parseAfterNamespace) {
+ this.unexpected(null, 98);
+ }
+ let hasDeclaration;
+ if (isFromRequired || hasSpecifiers) {
+ hasDeclaration = false;
+ if (decorators) {
+ throw this.raise(Errors.UnsupportedDecoratorExport, {
+ at: node
+ });
+ }
+ this.parseExportFrom(node, isFromRequired);
+ } else {
+ hasDeclaration = this.maybeParseExportDeclaration(node);
+ }
+ if (isFromRequired || hasSpecifiers || hasDeclaration) {
+ var _node2$declaration;
+ const node2 = node;
+ this.checkExport(node2, true, false, !!node2.source);
+ if (((_node2$declaration = node2.declaration) == null ? void 0 : _node2$declaration.type) === "ClassDeclaration") {
+ this.maybeTakeDecorators(decorators, node2.declaration, node2);
+ } else if (decorators) {
+ throw this.raise(Errors.UnsupportedDecoratorExport, {
+ at: node
+ });
+ }
+ return this.finishNode(node2, "ExportNamedDeclaration");
+ }
+ if (this.eat(65)) {
+ const node2 = node;
+ const decl = this.parseExportDefaultExpression();
+ node2.declaration = decl;
+ if (decl.type === "ClassDeclaration") {
+ this.maybeTakeDecorators(decorators, decl, node2);
+ } else if (decorators) {
+ throw this.raise(Errors.UnsupportedDecoratorExport, {
+ at: node
+ });
+ }
+ this.checkExport(node2, true, true);
+ return this.finishNode(node2, "ExportDefaultDeclaration");
+ }
+ this.unexpected(null, 5);
+ }
+ eatExportStar(node) {
+ return this.eat(55);
+ }
+ maybeParseExportDefaultSpecifier(node, maybeDefaultIdentifier) {
+ if (maybeDefaultIdentifier || this.isExportDefaultSpecifier()) {
+ this.expectPlugin("exportDefaultFrom", maybeDefaultIdentifier == null ? void 0 : maybeDefaultIdentifier.loc.start);
+ const id = maybeDefaultIdentifier || this.parseIdentifier(true);
+ const specifier = this.startNodeAtNode(id);
+ specifier.exported = id;
+ node.specifiers = [this.finishNode(specifier, "ExportDefaultSpecifier")];
+ return true;
+ }
+ return false;
+ }
+ maybeParseExportNamespaceSpecifier(node) {
+ if (this.isContextual(93)) {
+ if (!node.specifiers) node.specifiers = [];
+ const specifier = this.startNodeAt(this.state.lastTokStartLoc);
+ this.next();
+ specifier.exported = this.parseModuleExportName();
+ node.specifiers.push(this.finishNode(specifier, "ExportNamespaceSpecifier"));
+ return true;
+ }
+ return false;
+ }
+ maybeParseExportNamedSpecifiers(node) {
+ if (this.match(5)) {
+ if (!node.specifiers) node.specifiers = [];
+ const isTypeExport = node.exportKind === "type";
+ node.specifiers.push(...this.parseExportSpecifiers(isTypeExport));
+ node.source = null;
+ node.declaration = null;
+ if (this.hasPlugin("importAssertions")) {
+ node.assertions = [];
+ }
+ return true;
+ }
+ return false;
+ }
+ maybeParseExportDeclaration(node) {
+ if (this.shouldParseExportDeclaration()) {
+ node.specifiers = [];
+ node.source = null;
+ if (this.hasPlugin("importAssertions")) {
+ node.assertions = [];
+ }
+ node.declaration = this.parseExportDeclaration(node);
+ return true;
+ }
+ return false;
+ }
+ isAsyncFunction() {
+ if (!this.isContextual(95)) return false;
+ const next = this.nextTokenInLineStart();
+ return this.isUnparsedContextual(next, "function");
+ }
+ parseExportDefaultExpression() {
+ const expr = this.startNode();
+ if (this.match(68)) {
+ this.next();
+ return this.parseFunction(expr, 1 | 4);
+ } else if (this.isAsyncFunction()) {
+ this.next();
+ this.next();
+ return this.parseFunction(expr, 1 | 4 | 8);
+ }
+ if (this.match(80)) {
+ return this.parseClass(expr, true, true);
+ }
+ if (this.match(26)) {
+ if (this.hasPlugin("decorators") && this.getPluginOption("decorators", "decoratorsBeforeExport") === true) {
+ this.raise(Errors.DecoratorBeforeExport, {
+ at: this.state.startLoc
+ });
+ }
+ return this.parseClass(this.maybeTakeDecorators(this.parseDecorators(false), this.startNode()), true, true);
+ }
+ if (this.match(75) || this.match(74) || this.isLet()) {
+ throw this.raise(Errors.UnsupportedDefaultExport, {
+ at: this.state.startLoc
+ });
+ }
+ const res = this.parseMaybeAssignAllowIn();
+ this.semicolon();
+ return res;
+ }
+ parseExportDeclaration(node) {
+ if (this.match(80)) {
+ const node = this.parseClass(this.startNode(), true, false);
+ return node;
+ }
+ return this.parseStatementListItem();
+ }
+ isExportDefaultSpecifier() {
+ const {
+ type
+ } = this.state;
+ if (tokenIsIdentifier(type)) {
+ if (type === 95 && !this.state.containsEsc || type === 100) {
+ return false;
+ }
+ if ((type === 130 || type === 129) && !this.state.containsEsc) {
+ const {
+ type: nextType
+ } = this.lookahead();
+ if (tokenIsIdentifier(nextType) && nextType !== 98 || nextType === 5) {
+ this.expectOnePlugin(["flow", "typescript"]);
+ return false;
+ }
+ }
+ } else if (!this.match(65)) {
+ return false;
+ }
+ const next = this.nextTokenStart();
+ const hasFrom = this.isUnparsedContextual(next, "from");
+ if (this.input.charCodeAt(next) === 44 || tokenIsIdentifier(this.state.type) && hasFrom) {
+ return true;
+ }
+ if (this.match(65) && hasFrom) {
+ const nextAfterFrom = this.input.charCodeAt(this.nextTokenStartSince(next + 4));
+ return nextAfterFrom === 34 || nextAfterFrom === 39;
+ }
+ return false;
+ }
+ parseExportFrom(node, expect) {
+ if (this.eatContextual(98)) {
+ node.source = this.parseImportSource();
+ this.checkExport(node);
+ this.maybeParseImportAttributes(node);
+ this.checkJSONModuleImport(node);
+ } else if (expect) {
+ this.unexpected();
+ }
+ this.semicolon();
+ }
+ shouldParseExportDeclaration() {
+ const {
+ type
+ } = this.state;
+ if (type === 26) {
+ this.expectOnePlugin(["decorators", "decorators-legacy"]);
+ if (this.hasPlugin("decorators")) {
+ if (this.getPluginOption("decorators", "decoratorsBeforeExport") === true) {
+ this.raise(Errors.DecoratorBeforeExport, {
+ at: this.state.startLoc
+ });
+ }
+ return true;
+ }
+ }
+ return type === 74 || type === 75 || type === 68 || type === 80 || this.isLet() || this.isAsyncFunction();
+ }
+ checkExport(node, checkNames, isDefault, isFrom) {
+ if (checkNames) {
+ var _node$specifiers;
+ if (isDefault) {
+ this.checkDuplicateExports(node, "default");
+ if (this.hasPlugin("exportDefaultFrom")) {
+ var _declaration$extra;
+ const declaration = node.declaration;
+ if (declaration.type === "Identifier" && declaration.name === "from" && declaration.end - declaration.start === 4 && !((_declaration$extra = declaration.extra) != null && _declaration$extra.parenthesized)) {
+ this.raise(Errors.ExportDefaultFromAsIdentifier, {
+ at: declaration
+ });
+ }
+ }
+ } else if ((_node$specifiers = node.specifiers) != null && _node$specifiers.length) {
+ for (const specifier of node.specifiers) {
+ const {
+ exported
+ } = specifier;
+ const exportName = exported.type === "Identifier" ? exported.name : exported.value;
+ this.checkDuplicateExports(specifier, exportName);
+ if (!isFrom && specifier.local) {
+ const {
+ local
+ } = specifier;
+ if (local.type !== "Identifier") {
+ this.raise(Errors.ExportBindingIsString, {
+ at: specifier,
+ localName: local.value,
+ exportName
+ });
+ } else {
+ this.checkReservedWord(local.name, local.loc.start, true, false);
+ this.scope.checkLocalExport(local);
+ }
+ }
+ }
+ } else if (node.declaration) {
+ if (node.declaration.type === "FunctionDeclaration" || node.declaration.type === "ClassDeclaration") {
+ const id = node.declaration.id;
+ if (!id) throw new Error("Assertion failure");
+ this.checkDuplicateExports(node, id.name);
+ } else if (node.declaration.type === "VariableDeclaration") {
+ for (const declaration of node.declaration.declarations) {
+ this.checkDeclaration(declaration.id);
+ }
+ }
+ }
+ }
+ }
+ checkDeclaration(node) {
+ if (node.type === "Identifier") {
+ this.checkDuplicateExports(node, node.name);
+ } else if (node.type === "ObjectPattern") {
+ for (const prop of node.properties) {
+ this.checkDeclaration(prop);
+ }
+ } else if (node.type === "ArrayPattern") {
+ for (const elem of node.elements) {
+ if (elem) {
+ this.checkDeclaration(elem);
+ }
+ }
+ } else if (node.type === "ObjectProperty") {
+ this.checkDeclaration(node.value);
+ } else if (node.type === "RestElement") {
+ this.checkDeclaration(node.argument);
+ } else if (node.type === "AssignmentPattern") {
+ this.checkDeclaration(node.left);
+ }
+ }
+ checkDuplicateExports(node, exportName) {
+ if (this.exportedIdentifiers.has(exportName)) {
+ if (exportName === "default") {
+ this.raise(Errors.DuplicateDefaultExport, {
+ at: node
+ });
+ } else {
+ this.raise(Errors.DuplicateExport, {
+ at: node,
+ exportName
+ });
+ }
+ }
+ this.exportedIdentifiers.add(exportName);
+ }
+ parseExportSpecifiers(isInTypeExport) {
+ const nodes = [];
+ let first = true;
+ this.expect(5);
+ while (!this.eat(8)) {
+ if (first) {
+ first = false;
+ } else {
+ this.expect(12);
+ if (this.eat(8)) break;
+ }
+ const isMaybeTypeOnly = this.isContextual(130);
+ const isString = this.match(133);
+ const node = this.startNode();
+ node.local = this.parseModuleExportName();
+ nodes.push(this.parseExportSpecifier(node, isString, isInTypeExport, isMaybeTypeOnly));
+ }
+ return nodes;
+ }
+ parseExportSpecifier(node, isString, isInTypeExport, isMaybeTypeOnly) {
+ if (this.eatContextual(93)) {
+ node.exported = this.parseModuleExportName();
+ } else if (isString) {
+ node.exported = cloneStringLiteral(node.local);
+ } else if (!node.exported) {
+ node.exported = cloneIdentifier(node.local);
+ }
+ return this.finishNode(node, "ExportSpecifier");
+ }
+ parseModuleExportName() {
+ if (this.match(133)) {
+ const result = this.parseStringLiteral(this.state.value);
+ const surrogate = result.value.match(loneSurrogate);
+ if (surrogate) {
+ this.raise(Errors.ModuleExportNameHasLoneSurrogate, {
+ at: result,
+ surrogateCharCode: surrogate[0].charCodeAt(0)
+ });
+ }
+ return result;
+ }
+ return this.parseIdentifier(true);
+ }
+ isJSONModuleImport(node) {
+ if (node.assertions != null) {
+ return node.assertions.some(({
+ key,
+ value
+ }) => {
+ return value.value === "json" && (key.type === "Identifier" ? key.name === "type" : key.value === "type");
+ });
+ }
+ return false;
+ }
+ checkImportReflection(node) {
+ const {
+ specifiers
+ } = node;
+ const singleBindingType = specifiers.length === 1 ? specifiers[0].type : null;
+ if (node.phase === "source") {
+ if (singleBindingType !== "ImportDefaultSpecifier") {
+ this.raise(Errors.SourcePhaseImportRequiresDefault, {
+ at: specifiers[0].loc.start
+ });
+ }
+ } else if (node.phase === "defer") {
+ if (singleBindingType !== "ImportNamespaceSpecifier") {
+ this.raise(Errors.DeferImportRequiresNamespace, {
+ at: specifiers[0].loc.start
+ });
+ }
+ } else if (node.module) {
+ var _node$assertions;
+ if (singleBindingType !== "ImportDefaultSpecifier") {
+ this.raise(Errors.ImportReflectionNotBinding, {
+ at: specifiers[0].loc.start
+ });
+ }
+ if (((_node$assertions = node.assertions) == null ? void 0 : _node$assertions.length) > 0) {
+ this.raise(Errors.ImportReflectionHasAssertion, {
+ at: node.specifiers[0].loc.start
+ });
+ }
+ }
+ }
+ checkJSONModuleImport(node) {
+ if (this.isJSONModuleImport(node) && node.type !== "ExportAllDeclaration") {
+ const {
+ specifiers
+ } = node;
+ if (specifiers != null) {
+ const nonDefaultNamedSpecifier = specifiers.find(specifier => {
+ let imported;
+ if (specifier.type === "ExportSpecifier") {
+ imported = specifier.local;
+ } else if (specifier.type === "ImportSpecifier") {
+ imported = specifier.imported;
+ }
+ if (imported !== undefined) {
+ return imported.type === "Identifier" ? imported.name !== "default" : imported.value !== "default";
+ }
+ });
+ if (nonDefaultNamedSpecifier !== undefined) {
+ this.raise(Errors.ImportJSONBindingNotDefault, {
+ at: nonDefaultNamedSpecifier.loc.start
+ });
+ }
+ }
+ }
+ }
+ isPotentialImportPhase(isExport) {
+ if (isExport) return false;
+ return this.isContextual(105) || this.isContextual(97) || this.isContextual(127);
+ }
+ applyImportPhase(node, isExport, phase, loc) {
+ if (isExport) {
+ return;
+ }
+ if (phase === "module") {
+ this.expectPlugin("importReflection", loc);
+ node.module = true;
+ } else if (this.hasPlugin("importReflection")) {
+ node.module = false;
+ }
+ if (phase === "source") {
+ this.expectPlugin("sourcePhaseImports", loc);
+ node.phase = "source";
+ } else if (phase === "defer") {
+ this.expectPlugin("deferredImportEvaluation", loc);
+ node.phase = "defer";
+ } else if (this.hasPlugin("sourcePhaseImports")) {
+ node.phase = null;
+ }
+ }
+ parseMaybeImportPhase(node, isExport) {
+ if (!this.isPotentialImportPhase(isExport)) {
+ this.applyImportPhase(node, isExport, null);
+ return null;
+ }
+ const phaseIdentifier = this.parseIdentifier(true);
+ const {
+ type
+ } = this.state;
+ const isImportPhase = tokenIsKeywordOrIdentifier(type) ? type !== 98 || this.lookaheadCharCode() === 102 : type !== 12;
+ if (isImportPhase) {
+ this.resetPreviousIdentifierLeadingComments(phaseIdentifier);
+ this.applyImportPhase(node, isExport, phaseIdentifier.name, phaseIdentifier.loc.start);
+ return null;
+ } else {
+ this.applyImportPhase(node, isExport, null);
+ return phaseIdentifier;
+ }
+ }
+ isPrecedingIdImportPhase(phase) {
+ const {
+ type
+ } = this.state;
+ return tokenIsIdentifier(type) ? type !== 98 || this.lookaheadCharCode() === 102 : type !== 12;
+ }
+ parseImport(node) {
+ if (this.match(133)) {
+ return this.parseImportSourceAndAttributes(node);
+ }
+ return this.parseImportSpecifiersAndAfter(node, this.parseMaybeImportPhase(node, false));
+ }
+ parseImportSpecifiersAndAfter(node, maybeDefaultIdentifier) {
+ node.specifiers = [];
+ const hasDefault = this.maybeParseDefaultImportSpecifier(node, maybeDefaultIdentifier);
+ const parseNext = !hasDefault || this.eat(12);
+ const hasStar = parseNext && this.maybeParseStarImportSpecifier(node);
+ if (parseNext && !hasStar) this.parseNamedImportSpecifiers(node);
+ this.expectContextual(98);
+ return this.parseImportSourceAndAttributes(node);
+ }
+ parseImportSourceAndAttributes(node) {
+ var _node$specifiers2;
+ (_node$specifiers2 = node.specifiers) != null ? _node$specifiers2 : node.specifiers = [];
+ node.source = this.parseImportSource();
+ this.maybeParseImportAttributes(node);
+ this.checkImportReflection(node);
+ this.checkJSONModuleImport(node);
+ this.semicolon();
+ return this.finishNode(node, "ImportDeclaration");
+ }
+ parseImportSource() {
+ if (!this.match(133)) this.unexpected();
+ return this.parseExprAtom();
+ }
+ parseImportSpecifierLocal(node, specifier, type) {
+ specifier.local = this.parseIdentifier();
+ node.specifiers.push(this.finishImportSpecifier(specifier, type));
+ }
+ finishImportSpecifier(specifier, type, bindingType = 8201) {
+ this.checkLVal(specifier.local, {
+ in: {
+ type
+ },
+ binding: bindingType
+ });
+ return this.finishNode(specifier, type);
+ }
+ parseImportAttributes() {
+ this.expect(5);
+ const attrs = [];
+ const attrNames = new Set();
+ do {
+ if (this.match(8)) {
+ break;
+ }
+ const node = this.startNode();
+ const keyName = this.state.value;
+ if (attrNames.has(keyName)) {
+ this.raise(Errors.ModuleAttributesWithDuplicateKeys, {
+ at: this.state.startLoc,
+ key: keyName
+ });
+ }
+ attrNames.add(keyName);
+ if (this.match(133)) {
+ node.key = this.parseStringLiteral(keyName);
+ } else {
+ node.key = this.parseIdentifier(true);
+ }
+ this.expect(14);
+ if (!this.match(133)) {
+ throw this.raise(Errors.ModuleAttributeInvalidValue, {
+ at: this.state.startLoc
+ });
+ }
+ node.value = this.parseStringLiteral(this.state.value);
+ attrs.push(this.finishNode(node, "ImportAttribute"));
+ } while (this.eat(12));
+ this.expect(8);
+ return attrs;
+ }
+ parseModuleAttributes() {
+ const attrs = [];
+ const attributes = new Set();
+ do {
+ const node = this.startNode();
+ node.key = this.parseIdentifier(true);
+ if (node.key.name !== "type") {
+ this.raise(Errors.ModuleAttributeDifferentFromType, {
+ at: node.key
+ });
+ }
+ if (attributes.has(node.key.name)) {
+ this.raise(Errors.ModuleAttributesWithDuplicateKeys, {
+ at: node.key,
+ key: node.key.name
+ });
+ }
+ attributes.add(node.key.name);
+ this.expect(14);
+ if (!this.match(133)) {
+ throw this.raise(Errors.ModuleAttributeInvalidValue, {
+ at: this.state.startLoc
+ });
+ }
+ node.value = this.parseStringLiteral(this.state.value);
+ attrs.push(this.finishNode(node, "ImportAttribute"));
+ } while (this.eat(12));
+ return attrs;
+ }
+ maybeParseImportAttributes(node) {
+ let attributes;
+ let useWith = false;
+ if (this.match(76)) {
+ if (this.hasPrecedingLineBreak() && this.lookaheadCharCode() === 40) {
+ return;
+ }
+ this.next();
+ {
+ if (this.hasPlugin("moduleAttributes")) {
+ attributes = this.parseModuleAttributes();
+ } else {
+ this.expectImportAttributesPlugin();
+ attributes = this.parseImportAttributes();
+ }
+ }
+ useWith = true;
+ } else if (this.isContextual(94) && !this.hasPrecedingLineBreak()) {
+ if (this.hasPlugin("importAttributes")) {
+ if (this.getPluginOption("importAttributes", "deprecatedAssertSyntax") !== true) {
+ this.raise(Errors.ImportAttributesUseAssert, {
+ at: this.state.startLoc
+ });
+ }
+ this.addExtra(node, "deprecatedAssertSyntax", true);
+ } else {
+ this.expectOnePlugin(["importAttributes", "importAssertions"]);
+ }
+ this.next();
+ attributes = this.parseImportAttributes();
+ } else if (this.hasPlugin("importAttributes") || this.hasPlugin("importAssertions")) {
+ attributes = [];
+ } else {
+ if (this.hasPlugin("moduleAttributes")) {
+ attributes = [];
+ } else return;
+ }
+ if (!useWith && this.hasPlugin("importAssertions")) {
+ node.assertions = attributes;
+ } else {
+ node.attributes = attributes;
+ }
+ }
+ maybeParseDefaultImportSpecifier(node, maybeDefaultIdentifier) {
+ if (maybeDefaultIdentifier) {
+ const specifier = this.startNodeAtNode(maybeDefaultIdentifier);
+ specifier.local = maybeDefaultIdentifier;
+ node.specifiers.push(this.finishImportSpecifier(specifier, "ImportDefaultSpecifier"));
+ return true;
+ } else if (tokenIsKeywordOrIdentifier(this.state.type)) {
+ this.parseImportSpecifierLocal(node, this.startNode(), "ImportDefaultSpecifier");
+ return true;
+ }
+ return false;
+ }
+ maybeParseStarImportSpecifier(node) {
+ if (this.match(55)) {
+ const specifier = this.startNode();
+ this.next();
+ this.expectContextual(93);
+ this.parseImportSpecifierLocal(node, specifier, "ImportNamespaceSpecifier");
+ return true;
+ }
+ return false;
+ }
+ parseNamedImportSpecifiers(node) {
+ let first = true;
+ this.expect(5);
+ while (!this.eat(8)) {
+ if (first) {
+ first = false;
+ } else {
+ if (this.eat(14)) {
+ throw this.raise(Errors.DestructureNamedImport, {
+ at: this.state.startLoc
+ });
+ }
+ this.expect(12);
+ if (this.eat(8)) break;
+ }
+ const specifier = this.startNode();
+ const importedIsString = this.match(133);
+ const isMaybeTypeOnly = this.isContextual(130);
+ specifier.imported = this.parseModuleExportName();
+ const importSpecifier = this.parseImportSpecifier(specifier, importedIsString, node.importKind === "type" || node.importKind === "typeof", isMaybeTypeOnly, undefined);
+ node.specifiers.push(importSpecifier);
+ }
+ }
+ parseImportSpecifier(specifier, importedIsString, isInTypeOnlyImport, isMaybeTypeOnly, bindingType) {
+ if (this.eatContextual(93)) {
+ specifier.local = this.parseIdentifier();
+ } else {
+ const {
+ imported
+ } = specifier;
+ if (importedIsString) {
+ throw this.raise(Errors.ImportBindingIsString, {
+ at: specifier,
+ importName: imported.value
+ });
+ }
+ this.checkReservedWord(imported.name, specifier.loc.start, true, true);
+ if (!specifier.local) {
+ specifier.local = cloneIdentifier(imported);
+ }
+ }
+ return this.finishImportSpecifier(specifier, "ImportSpecifier", bindingType);
+ }
+ isThisParam(param) {
+ return param.type === "Identifier" && param.name === "this";
+ }
+}
+class Parser extends StatementParser {
+ constructor(options, input) {
+ options = getOptions(options);
+ super(options, input);
+ this.options = options;
+ this.initializeScopes();
+ this.plugins = pluginsMap(this.options.plugins);
+ this.filename = options.sourceFilename;
+ }
+ getScopeHandler() {
+ return ScopeHandler;
+ }
+ parse() {
+ this.enterInitialScopes();
+ const file = this.startNode();
+ const program = this.startNode();
+ this.nextToken();
+ file.errors = null;
+ this.parseTopLevel(file, program);
+ file.errors = this.state.errors;
+ return file;
+ }
+}
+function pluginsMap(plugins) {
+ const pluginMap = new Map();
+ for (const plugin of plugins) {
+ const [name, options] = Array.isArray(plugin) ? plugin : [plugin, {}];
+ if (!pluginMap.has(name)) pluginMap.set(name, options || {});
+ }
+ return pluginMap;
+}
+function parse(input, options) {
+ var _options;
+ if (((_options = options) == null ? void 0 : _options.sourceType) === "unambiguous") {
+ options = Object.assign({}, options);
+ try {
+ options.sourceType = "module";
+ const parser = getParser(options, input);
+ const ast = parser.parse();
+ if (parser.sawUnambiguousESM) {
+ return ast;
+ }
+ if (parser.ambiguousScriptDifferentAst) {
+ try {
+ options.sourceType = "script";
+ return getParser(options, input).parse();
+ } catch (_unused) {}
+ } else {
+ ast.program.sourceType = "script";
+ }
+ return ast;
+ } catch (moduleError) {
+ try {
+ options.sourceType = "script";
+ return getParser(options, input).parse();
+ } catch (_unused2) {}
+ throw moduleError;
+ }
+ } else {
+ return getParser(options, input).parse();
+ }
+}
+function parseExpression(input, options) {
+ const parser = getParser(options, input);
+ if (parser.options.strictMode) {
+ parser.state.strict = true;
+ }
+ return parser.getExpression();
+}
+function generateExportedTokenTypes(internalTokenTypes) {
+ const tokenTypes = {};
+ for (const typeName of Object.keys(internalTokenTypes)) {
+ tokenTypes[typeName] = getExportedToken(internalTokenTypes[typeName]);
+ }
+ return tokenTypes;
+}
+const tokTypes = generateExportedTokenTypes(tt);
+function getParser(options, input) {
+ let cls = Parser;
+ if (options != null && options.plugins) {
+ validatePlugins(options.plugins);
+ cls = getParserClass(options.plugins);
+ }
+ return new cls(options, input);
+}
+const parserClassCache = {};
+function getParserClass(pluginsFromOptions) {
+ const pluginList = mixinPluginNames.filter(name => hasPlugin(pluginsFromOptions, name));
+ const key = pluginList.join("/");
+ let cls = parserClassCache[key];
+ if (!cls) {
+ cls = Parser;
+ for (const plugin of pluginList) {
+ cls = mixinPlugins[plugin](cls);
+ }
+ parserClassCache[key] = cls;
+ }
+ return cls;
+}
+exports.parse = parse;
+exports.parseExpression = parseExpression;
+exports.tokTypes = tokTypes;
+//# sourceMappingURL=index.js.map
diff --git a/.output/server/node_modules/@babel/parser/package.json b/.output/server/node_modules/@babel/parser/package.json
new file mode 100644
index 0000000..cbe3a52
--- /dev/null
+++ b/.output/server/node_modules/@babel/parser/package.json
@@ -0,0 +1,46 @@
+{
+ "name": "@babel/parser",
+ "version": "7.23.5",
+ "description": "A JavaScript parser",
+ "author": "The Babel Team (https://babel.dev/team)",
+ "homepage": "https://babel.dev/docs/en/next/babel-parser",
+ "bugs": "https://github.com/babel/babel/issues?utf8=%E2%9C%93&q=is%3Aissue+label%3A%22pkg%3A+parser+%28babylon%29%22+is%3Aopen",
+ "license": "MIT",
+ "publishConfig": {
+ "access": "public"
+ },
+ "keywords": [
+ "babel",
+ "javascript",
+ "parser",
+ "tc39",
+ "ecmascript",
+ "@babel/parser"
+ ],
+ "repository": {
+ "type": "git",
+ "url": "https://github.com/babel/babel.git",
+ "directory": "packages/babel-parser"
+ },
+ "main": "./lib/index.js",
+ "types": "./typings/babel-parser.d.ts",
+ "files": [
+ "bin",
+ "lib",
+ "typings/babel-parser.d.ts",
+ "index.cjs"
+ ],
+ "engines": {
+ "node": ">=6.0.0"
+ },
+ "devDependencies": {
+ "@babel/code-frame": "^7.23.5",
+ "@babel/helper-check-duplicate-nodes": "^7.22.5",
+ "@babel/helper-fixtures": "^7.23.4",
+ "@babel/helper-string-parser": "^7.23.4",
+ "@babel/helper-validator-identifier": "^7.22.20",
+ "charcodes": "^0.2.0"
+ },
+ "bin": "./bin/babel-parser.js",
+ "type": "commonjs"
+}
\ No newline at end of file
diff --git a/.output/server/node_modules/@unhead/dom/package.json b/.output/server/node_modules/@unhead/dom/package.json
new file mode 100644
index 0000000..988cd09
--- /dev/null
+++ b/.output/server/node_modules/@unhead/dom/package.json
@@ -0,0 +1,40 @@
+{
+ "name": "@unhead/dom",
+ "type": "module",
+ "version": "1.8.8",
+ "author": "Harlan Wilton ",
+ "license": "MIT",
+ "funding": "https://github.com/sponsors/harlan-zw",
+ "homepage": "https://unhead.unjs.io",
+ "repository": {
+ "type": "git",
+ "url": "git+https://github.com/unjs/unhead.git",
+ "directory": "packages/dom"
+ },
+ "bugs": {
+ "url": "https://github.com/unjs/unhead/issues"
+ },
+ "sideEffects": false,
+ "exports": {
+ ".": {
+ "types": "./dist/index.d.ts",
+ "import": "./dist/index.mjs",
+ "require": "./dist/index.cjs"
+ }
+ },
+ "main": "dist/index.cjs",
+ "module": "dist/index.mjs",
+ "types": "dist/index.d.ts",
+ "files": [
+ "dist"
+ ],
+ "dependencies": {
+ "@unhead/shared": "1.8.8",
+ "@unhead/schema": "1.8.8"
+ },
+ "scripts": {
+ "build": "unbuild .",
+ "stub": "unbuild . --stub",
+ "export:sizes": "npx export-size . -r"
+ }
+}
\ No newline at end of file
diff --git a/.output/server/node_modules/@unhead/shared/package.json b/.output/server/node_modules/@unhead/shared/package.json
new file mode 100644
index 0000000..6943aa6
--- /dev/null
+++ b/.output/server/node_modules/@unhead/shared/package.json
@@ -0,0 +1,47 @@
+{
+ "name": "@unhead/shared",
+ "type": "module",
+ "version": "1.8.8",
+ "author": "Harlan Wilton ",
+ "license": "MIT",
+ "funding": "https://github.com/sponsors/harlan-zw",
+ "homepage": "https://unhead.unjs.io",
+ "repository": {
+ "type": "git",
+ "url": "git+https://github.com/unjs/unhead.git",
+ "directory": "packages/schema"
+ },
+ "bugs": {
+ "url": "https://github.com/unjs/unhead/issues"
+ },
+ "keywords": [
+ "head",
+ "meta tags",
+ "types"
+ ],
+ "sideEffects": false,
+ "exports": {
+ ".": {
+ "types": "./dist/index.d.ts",
+ "import": "./dist/index.mjs",
+ "require": "./dist/index.cjs"
+ }
+ },
+ "main": "dist/index.cjs",
+ "module": "dist/index.mjs",
+ "types": "dist/index.d.ts",
+ "files": [
+ "dist"
+ ],
+ "dependencies": {
+ "@unhead/schema": "1.8.8"
+ },
+ "devDependencies": {
+ "packrup": "^0.1.0"
+ },
+ "scripts": {
+ "build": "unbuild .",
+ "stub": "unbuild . --stub",
+ "export:sizes": "npx export-size . -r"
+ }
+}
\ No newline at end of file
diff --git a/.output/server/node_modules/@unhead/ssr/package.json b/.output/server/node_modules/@unhead/ssr/package.json
new file mode 100644
index 0000000..c5940a1
--- /dev/null
+++ b/.output/server/node_modules/@unhead/ssr/package.json
@@ -0,0 +1,40 @@
+{
+ "name": "@unhead/ssr",
+ "type": "module",
+ "version": "1.8.8",
+ "author": "Harlan Wilton ",
+ "license": "MIT",
+ "funding": "https://github.com/sponsors/harlan-zw",
+ "homepage": "https://unhead.unjs.io",
+ "repository": {
+ "type": "git",
+ "url": "git+https://github.com/unjs/unhead.git",
+ "directory": "packages/ssr"
+ },
+ "bugs": {
+ "url": "https://github.com/unjs/unhead/issues"
+ },
+ "sideEffects": false,
+ "exports": {
+ ".": {
+ "types": "./dist/index.d.ts",
+ "import": "./dist/index.mjs",
+ "require": "./dist/index.cjs"
+ }
+ },
+ "main": "dist/index.cjs",
+ "module": "dist/index.mjs",
+ "types": "dist/index.d.ts",
+ "files": [
+ "dist"
+ ],
+ "dependencies": {
+ "@unhead/schema": "1.8.8",
+ "@unhead/shared": "1.8.8"
+ },
+ "scripts": {
+ "build": "unbuild .",
+ "stub": "unbuild . --stub",
+ "export:sizes": "npx export-size . -r"
+ }
+}
\ No newline at end of file
diff --git a/.output/server/node_modules/@vue/compiler-core/index.js b/.output/server/node_modules/@vue/compiler-core/index.js
new file mode 100644
index 0000000..d3fc54f
--- /dev/null
+++ b/.output/server/node_modules/@vue/compiler-core/index.js
@@ -0,0 +1,7 @@
+'use strict'
+
+if (process.env.NODE_ENV === 'production') {
+ module.exports = require('./dist/compiler-core.cjs.prod.js')
+} else {
+ module.exports = require('./dist/compiler-core.cjs.js')
+}
diff --git a/.output/server/node_modules/@vue/compiler-core/package.json b/.output/server/node_modules/@vue/compiler-core/package.json
new file mode 100644
index 0000000..0d8a325
--- /dev/null
+++ b/.output/server/node_modules/@vue/compiler-core/package.json
@@ -0,0 +1,43 @@
+{
+ "name": "@vue/compiler-core",
+ "version": "3.3.9",
+ "description": "@vue/compiler-core",
+ "main": "index.js",
+ "module": "dist/compiler-core.esm-bundler.js",
+ "types": "dist/compiler-core.d.ts",
+ "files": [
+ "index.js",
+ "dist"
+ ],
+ "buildOptions": {
+ "name": "VueCompilerCore",
+ "compat": true,
+ "formats": [
+ "esm-bundler",
+ "cjs"
+ ]
+ },
+ "repository": {
+ "type": "git",
+ "url": "git+https://github.com/vuejs/core.git",
+ "directory": "packages/compiler-core"
+ },
+ "keywords": [
+ "vue"
+ ],
+ "author": "Evan You",
+ "license": "MIT",
+ "bugs": {
+ "url": "https://github.com/vuejs/core/issues"
+ },
+ "homepage": "https://github.com/vuejs/core/tree/main/packages/compiler-core#readme",
+ "dependencies": {
+ "@babel/parser": "^7.23.3",
+ "estree-walker": "^2.0.2",
+ "source-map-js": "^1.0.2",
+ "@vue/shared": "3.3.9"
+ },
+ "devDependencies": {
+ "@babel/types": "^7.23.3"
+ }
+}
\ No newline at end of file
diff --git a/.output/server/node_modules/@vue/compiler-dom/index.js b/.output/server/node_modules/@vue/compiler-dom/index.js
new file mode 100644
index 0000000..b5f7a05
--- /dev/null
+++ b/.output/server/node_modules/@vue/compiler-dom/index.js
@@ -0,0 +1,7 @@
+'use strict'
+
+if (process.env.NODE_ENV === 'production') {
+ module.exports = require('./dist/compiler-dom.cjs.prod.js')
+} else {
+ module.exports = require('./dist/compiler-dom.cjs.js')
+}
diff --git a/.output/server/node_modules/@vue/compiler-dom/package.json b/.output/server/node_modules/@vue/compiler-dom/package.json
new file mode 100644
index 0000000..583a68e
--- /dev/null
+++ b/.output/server/node_modules/@vue/compiler-dom/package.json
@@ -0,0 +1,43 @@
+{
+ "name": "@vue/compiler-dom",
+ "version": "3.3.9",
+ "description": "@vue/compiler-dom",
+ "main": "index.js",
+ "module": "dist/compiler-dom.esm-bundler.js",
+ "types": "dist/compiler-dom.d.ts",
+ "unpkg": "dist/compiler-dom.global.js",
+ "jsdelivr": "dist/compiler-dom.global.js",
+ "files": [
+ "index.js",
+ "dist"
+ ],
+ "sideEffects": false,
+ "buildOptions": {
+ "name": "VueCompilerDOM",
+ "compat": true,
+ "formats": [
+ "esm-bundler",
+ "esm-browser",
+ "cjs",
+ "global"
+ ]
+ },
+ "repository": {
+ "type": "git",
+ "url": "git+https://github.com/vuejs/core.git",
+ "directory": "packages/compiler-dom"
+ },
+ "keywords": [
+ "vue"
+ ],
+ "author": "Evan You",
+ "license": "MIT",
+ "bugs": {
+ "url": "https://github.com/vuejs/core/issues"
+ },
+ "homepage": "https://github.com/vuejs/core/tree/main/packages/compiler-dom#readme",
+ "dependencies": {
+ "@vue/shared": "3.3.9",
+ "@vue/compiler-core": "3.3.9"
+ }
+}
\ No newline at end of file
diff --git a/.output/server/node_modules/@vue/compiler-ssr/package.json b/.output/server/node_modules/@vue/compiler-ssr/package.json
new file mode 100644
index 0000000..d0292ac
--- /dev/null
+++ b/.output/server/node_modules/@vue/compiler-ssr/package.json
@@ -0,0 +1,34 @@
+{
+ "name": "@vue/compiler-ssr",
+ "version": "3.3.9",
+ "description": "@vue/compiler-ssr",
+ "main": "dist/compiler-ssr.cjs.js",
+ "types": "dist/compiler-ssr.d.ts",
+ "files": [
+ "dist"
+ ],
+ "buildOptions": {
+ "prod": false,
+ "formats": [
+ "cjs"
+ ]
+ },
+ "repository": {
+ "type": "git",
+ "url": "git+https://github.com/vuejs/core.git",
+ "directory": "packages/compiler-ssr"
+ },
+ "keywords": [
+ "vue"
+ ],
+ "author": "Evan You",
+ "license": "MIT",
+ "bugs": {
+ "url": "https://github.com/vuejs/core/issues"
+ },
+ "homepage": "https://github.com/vuejs/core/tree/main/packages/compiler-ssr#readme",
+ "dependencies": {
+ "@vue/shared": "3.3.9",
+ "@vue/compiler-dom": "3.3.9"
+ }
+}
\ No newline at end of file
diff --git a/.output/server/node_modules/@vue/reactivity/index.js b/.output/server/node_modules/@vue/reactivity/index.js
new file mode 100644
index 0000000..04a8ba5
--- /dev/null
+++ b/.output/server/node_modules/@vue/reactivity/index.js
@@ -0,0 +1,7 @@
+'use strict'
+
+if (process.env.NODE_ENV === 'production') {
+ module.exports = require('./dist/reactivity.cjs.prod.js')
+} else {
+ module.exports = require('./dist/reactivity.cjs.js')
+}
diff --git a/.output/server/node_modules/@vue/reactivity/package.json b/.output/server/node_modules/@vue/reactivity/package.json
new file mode 100644
index 0000000..2564baf
--- /dev/null
+++ b/.output/server/node_modules/@vue/reactivity/package.json
@@ -0,0 +1,41 @@
+{
+ "name": "@vue/reactivity",
+ "version": "3.3.9",
+ "description": "@vue/reactivity",
+ "main": "index.js",
+ "module": "dist/reactivity.esm-bundler.js",
+ "types": "dist/reactivity.d.ts",
+ "unpkg": "dist/reactivity.global.js",
+ "jsdelivr": "dist/reactivity.global.js",
+ "files": [
+ "index.js",
+ "dist"
+ ],
+ "sideEffects": false,
+ "repository": {
+ "type": "git",
+ "url": "git+https://github.com/vuejs/core.git",
+ "directory": "packages/reactivity"
+ },
+ "buildOptions": {
+ "name": "VueReactivity",
+ "formats": [
+ "esm-bundler",
+ "esm-browser",
+ "cjs",
+ "global"
+ ]
+ },
+ "keywords": [
+ "vue"
+ ],
+ "author": "Evan You",
+ "license": "MIT",
+ "bugs": {
+ "url": "https://github.com/vuejs/core/issues"
+ },
+ "homepage": "https://github.com/vuejs/core/tree/main/packages/reactivity#readme",
+ "dependencies": {
+ "@vue/shared": "3.3.9"
+ }
+}
\ No newline at end of file
diff --git a/.output/server/node_modules/@vue/runtime-core/index.js b/.output/server/node_modules/@vue/runtime-core/index.js
new file mode 100644
index 0000000..50c4882
--- /dev/null
+++ b/.output/server/node_modules/@vue/runtime-core/index.js
@@ -0,0 +1,7 @@
+'use strict'
+
+if (process.env.NODE_ENV === 'production') {
+ module.exports = require('./dist/runtime-core.cjs.prod.js')
+} else {
+ module.exports = require('./dist/runtime-core.cjs.js')
+}
diff --git a/.output/server/node_modules/@vue/runtime-core/package.json b/.output/server/node_modules/@vue/runtime-core/package.json
new file mode 100644
index 0000000..280f78e
--- /dev/null
+++ b/.output/server/node_modules/@vue/runtime-core/package.json
@@ -0,0 +1,38 @@
+{
+ "name": "@vue/runtime-core",
+ "version": "3.3.9",
+ "description": "@vue/runtime-core",
+ "main": "index.js",
+ "module": "dist/runtime-core.esm-bundler.js",
+ "types": "dist/runtime-core.d.ts",
+ "files": [
+ "index.js",
+ "dist"
+ ],
+ "buildOptions": {
+ "name": "VueRuntimeCore",
+ "formats": [
+ "esm-bundler",
+ "cjs"
+ ]
+ },
+ "sideEffects": false,
+ "repository": {
+ "type": "git",
+ "url": "git+https://github.com/vuejs/core.git",
+ "directory": "packages/runtime-core"
+ },
+ "keywords": [
+ "vue"
+ ],
+ "author": "Evan You",
+ "license": "MIT",
+ "bugs": {
+ "url": "https://github.com/vuejs/core/issues"
+ },
+ "homepage": "https://github.com/vuejs/core/tree/main/packages/runtime-core#readme",
+ "dependencies": {
+ "@vue/shared": "3.3.9",
+ "@vue/reactivity": "3.3.9"
+ }
+}
\ No newline at end of file
diff --git a/.output/server/node_modules/@vue/runtime-dom/index.js b/.output/server/node_modules/@vue/runtime-dom/index.js
new file mode 100644
index 0000000..cdc29b2
--- /dev/null
+++ b/.output/server/node_modules/@vue/runtime-dom/index.js
@@ -0,0 +1,7 @@
+'use strict'
+
+if (process.env.NODE_ENV === 'production') {
+ module.exports = require('./dist/runtime-dom.cjs.prod.js')
+} else {
+ module.exports = require('./dist/runtime-dom.cjs.js')
+}
diff --git a/.output/server/node_modules/@vue/runtime-dom/package.json b/.output/server/node_modules/@vue/runtime-dom/package.json
new file mode 100644
index 0000000..9985391
--- /dev/null
+++ b/.output/server/node_modules/@vue/runtime-dom/package.json
@@ -0,0 +1,42 @@
+{
+ "name": "@vue/runtime-dom",
+ "version": "3.3.9",
+ "description": "@vue/runtime-dom",
+ "main": "index.js",
+ "module": "dist/runtime-dom.esm-bundler.js",
+ "types": "dist/runtime-dom.d.ts",
+ "unpkg": "dist/runtime-dom.global.js",
+ "files": [
+ "index.js",
+ "dist"
+ ],
+ "sideEffects": false,
+ "buildOptions": {
+ "name": "VueRuntimeDOM",
+ "formats": [
+ "esm-bundler",
+ "esm-browser",
+ "cjs",
+ "global"
+ ]
+ },
+ "repository": {
+ "type": "git",
+ "url": "git+https://github.com/vuejs/core.git",
+ "directory": "packages/runtime-dom"
+ },
+ "keywords": [
+ "vue"
+ ],
+ "author": "Evan You",
+ "license": "MIT",
+ "bugs": {
+ "url": "https://github.com/vuejs/core/issues"
+ },
+ "homepage": "https://github.com/vuejs/core/tree/main/packages/runtime-dom#readme",
+ "dependencies": {
+ "csstype": "^3.1.2",
+ "@vue/shared": "3.3.9",
+ "@vue/runtime-core": "3.3.9"
+ }
+}
\ No newline at end of file
diff --git a/.output/server/node_modules/@vue/server-renderer/index.js b/.output/server/node_modules/@vue/server-renderer/index.js
new file mode 100644
index 0000000..f5a3d90
--- /dev/null
+++ b/.output/server/node_modules/@vue/server-renderer/index.js
@@ -0,0 +1,7 @@
+'use strict'
+
+if (process.env.NODE_ENV === 'production') {
+ module.exports = require('./dist/server-renderer.cjs.prod.js')
+} else {
+ module.exports = require('./dist/server-renderer.cjs.js')
+}
diff --git a/.output/server/node_modules/@vue/server-renderer/package.json b/.output/server/node_modules/@vue/server-renderer/package.json
new file mode 100644
index 0000000..ac3b53d
--- /dev/null
+++ b/.output/server/node_modules/@vue/server-renderer/package.json
@@ -0,0 +1,41 @@
+{
+ "name": "@vue/server-renderer",
+ "version": "3.3.9",
+ "description": "@vue/server-renderer",
+ "main": "index.js",
+ "module": "dist/server-renderer.esm-bundler.js",
+ "types": "dist/server-renderer.d.ts",
+ "files": [
+ "index.js",
+ "dist"
+ ],
+ "buildOptions": {
+ "name": "VueServerRenderer",
+ "formats": [
+ "esm-bundler",
+ "esm-browser",
+ "cjs"
+ ]
+ },
+ "repository": {
+ "type": "git",
+ "url": "git+https://github.com/vuejs/core.git",
+ "directory": "packages/server-renderer"
+ },
+ "keywords": [
+ "vue"
+ ],
+ "author": "Evan You",
+ "license": "MIT",
+ "bugs": {
+ "url": "https://github.com/vuejs/core/issues"
+ },
+ "homepage": "https://github.com/vuejs/core/tree/main/packages/server-renderer#readme",
+ "peerDependencies": {
+ "vue": "3.3.9"
+ },
+ "dependencies": {
+ "@vue/compiler-ssr": "3.3.9",
+ "@vue/shared": "3.3.9"
+ }
+}
\ No newline at end of file
diff --git a/.output/server/node_modules/@vue/shared/index.js b/.output/server/node_modules/@vue/shared/index.js
new file mode 100644
index 0000000..a2ee43e
--- /dev/null
+++ b/.output/server/node_modules/@vue/shared/index.js
@@ -0,0 +1,7 @@
+'use strict'
+
+if (process.env.NODE_ENV === 'production') {
+ module.exports = require('./dist/shared.cjs.prod.js')
+} else {
+ module.exports = require('./dist/shared.cjs.js')
+}
diff --git a/.output/server/node_modules/@vue/shared/package.json b/.output/server/node_modules/@vue/shared/package.json
new file mode 100644
index 0000000..c09c39e
--- /dev/null
+++ b/.output/server/node_modules/@vue/shared/package.json
@@ -0,0 +1,33 @@
+{
+ "name": "@vue/shared",
+ "version": "3.3.9",
+ "description": "internal utils shared across @vue packages",
+ "main": "index.js",
+ "module": "dist/shared.esm-bundler.js",
+ "types": "dist/shared.d.ts",
+ "files": [
+ "index.js",
+ "dist"
+ ],
+ "sideEffects": false,
+ "buildOptions": {
+ "formats": [
+ "esm-bundler",
+ "cjs"
+ ]
+ },
+ "repository": {
+ "type": "git",
+ "url": "git+https://github.com/vuejs/core.git",
+ "directory": "packages/shared"
+ },
+ "keywords": [
+ "vue"
+ ],
+ "author": "Evan You",
+ "license": "MIT",
+ "bugs": {
+ "url": "https://github.com/vuejs/core/issues"
+ },
+ "homepage": "https://github.com/vuejs/core/tree/main/packages/shared#readme"
+}
\ No newline at end of file
diff --git a/.output/server/node_modules/asynckit/index.js b/.output/server/node_modules/asynckit/index.js
new file mode 100644
index 0000000..455f945
--- /dev/null
+++ b/.output/server/node_modules/asynckit/index.js
@@ -0,0 +1,6 @@
+module.exports =
+{
+ parallel : require('./parallel.js'),
+ serial : require('./serial.js'),
+ serialOrdered : require('./serialOrdered.js')
+};
diff --git a/.output/server/node_modules/asynckit/lib/abort.js b/.output/server/node_modules/asynckit/lib/abort.js
new file mode 100644
index 0000000..114367e
--- /dev/null
+++ b/.output/server/node_modules/asynckit/lib/abort.js
@@ -0,0 +1,29 @@
+// API
+module.exports = abort;
+
+/**
+ * Aborts leftover active jobs
+ *
+ * @param {object} state - current state object
+ */
+function abort(state)
+{
+ Object.keys(state.jobs).forEach(clean.bind(state));
+
+ // reset leftover jobs
+ state.jobs = {};
+}
+
+/**
+ * Cleans up leftover job by invoking abort function for the provided job id
+ *
+ * @this state
+ * @param {string|number} key - job id to abort
+ */
+function clean(key)
+{
+ if (typeof this.jobs[key] == 'function')
+ {
+ this.jobs[key]();
+ }
+}
diff --git a/.output/server/node_modules/asynckit/lib/async.js b/.output/server/node_modules/asynckit/lib/async.js
new file mode 100644
index 0000000..7f1288a
--- /dev/null
+++ b/.output/server/node_modules/asynckit/lib/async.js
@@ -0,0 +1,34 @@
+var defer = require('./defer.js');
+
+// API
+module.exports = async;
+
+/**
+ * Runs provided callback asynchronously
+ * even if callback itself is not
+ *
+ * @param {function} callback - callback to invoke
+ * @returns {function} - augmented callback
+ */
+function async(callback)
+{
+ var isAsync = false;
+
+ // check if async happened
+ defer(function() { isAsync = true; });
+
+ return function async_callback(err, result)
+ {
+ if (isAsync)
+ {
+ callback(err, result);
+ }
+ else
+ {
+ defer(function nextTick_callback()
+ {
+ callback(err, result);
+ });
+ }
+ };
+}
diff --git a/.output/server/node_modules/asynckit/lib/defer.js b/.output/server/node_modules/asynckit/lib/defer.js
new file mode 100644
index 0000000..b67110c
--- /dev/null
+++ b/.output/server/node_modules/asynckit/lib/defer.js
@@ -0,0 +1,26 @@
+module.exports = defer;
+
+/**
+ * Runs provided function on next iteration of the event loop
+ *
+ * @param {function} fn - function to run
+ */
+function defer(fn)
+{
+ var nextTick = typeof setImmediate == 'function'
+ ? setImmediate
+ : (
+ typeof process == 'object' && typeof process.nextTick == 'function'
+ ? process.nextTick
+ : null
+ );
+
+ if (nextTick)
+ {
+ nextTick(fn);
+ }
+ else
+ {
+ setTimeout(fn, 0);
+ }
+}
diff --git a/.output/server/node_modules/asynckit/lib/iterate.js b/.output/server/node_modules/asynckit/lib/iterate.js
new file mode 100644
index 0000000..5d2839a
--- /dev/null
+++ b/.output/server/node_modules/asynckit/lib/iterate.js
@@ -0,0 +1,75 @@
+var async = require('./async.js')
+ , abort = require('./abort.js')
+ ;
+
+// API
+module.exports = iterate;
+
+/**
+ * Iterates over each job object
+ *
+ * @param {array|object} list - array or object (named list) to iterate over
+ * @param {function} iterator - iterator to run
+ * @param {object} state - current job status
+ * @param {function} callback - invoked when all elements processed
+ */
+function iterate(list, iterator, state, callback)
+{
+ // store current index
+ var key = state['keyedList'] ? state['keyedList'][state.index] : state.index;
+
+ state.jobs[key] = runJob(iterator, key, list[key], function(error, output)
+ {
+ // don't repeat yourself
+ // skip secondary callbacks
+ if (!(key in state.jobs))
+ {
+ return;
+ }
+
+ // clean up jobs
+ delete state.jobs[key];
+
+ if (error)
+ {
+ // don't process rest of the results
+ // stop still active jobs
+ // and reset the list
+ abort(state);
+ }
+ else
+ {
+ state.results[key] = output;
+ }
+
+ // return salvaged results
+ callback(error, state.results);
+ });
+}
+
+/**
+ * Runs iterator over provided job element
+ *
+ * @param {function} iterator - iterator to invoke
+ * @param {string|number} key - key/index of the element in the list of jobs
+ * @param {mixed} item - job description
+ * @param {function} callback - invoked after iterator is done with the job
+ * @returns {function|mixed} - job abort function or something else
+ */
+function runJob(iterator, key, item, callback)
+{
+ var aborter;
+
+ // allow shortcut if iterator expects only two arguments
+ if (iterator.length == 2)
+ {
+ aborter = iterator(item, async(callback));
+ }
+ // otherwise go with full three arguments
+ else
+ {
+ aborter = iterator(item, key, async(callback));
+ }
+
+ return aborter;
+}
diff --git a/.output/server/node_modules/asynckit/lib/state.js b/.output/server/node_modules/asynckit/lib/state.js
new file mode 100644
index 0000000..cbea7ad
--- /dev/null
+++ b/.output/server/node_modules/asynckit/lib/state.js
@@ -0,0 +1,37 @@
+// API
+module.exports = state;
+
+/**
+ * Creates initial state object
+ * for iteration over list
+ *
+ * @param {array|object} list - list to iterate over
+ * @param {function|null} sortMethod - function to use for keys sort,
+ * or `null` to keep them as is
+ * @returns {object} - initial state object
+ */
+function state(list, sortMethod)
+{
+ var isNamedList = !Array.isArray(list)
+ , initState =
+ {
+ index : 0,
+ keyedList: isNamedList || sortMethod ? Object.keys(list) : null,
+ jobs : {},
+ results : isNamedList ? {} : [],
+ size : isNamedList ? Object.keys(list).length : list.length
+ }
+ ;
+
+ if (sortMethod)
+ {
+ // sort array keys based on it's values
+ // sort object's keys just on own merit
+ initState.keyedList.sort(isNamedList ? sortMethod : function(a, b)
+ {
+ return sortMethod(list[a], list[b]);
+ });
+ }
+
+ return initState;
+}
diff --git a/.output/server/node_modules/asynckit/lib/terminator.js b/.output/server/node_modules/asynckit/lib/terminator.js
new file mode 100644
index 0000000..d6eb992
--- /dev/null
+++ b/.output/server/node_modules/asynckit/lib/terminator.js
@@ -0,0 +1,29 @@
+var abort = require('./abort.js')
+ , async = require('./async.js')
+ ;
+
+// API
+module.exports = terminator;
+
+/**
+ * Terminates jobs in the attached state context
+ *
+ * @this AsyncKitState#
+ * @param {function} callback - final callback to invoke after termination
+ */
+function terminator(callback)
+{
+ if (!Object.keys(this.jobs).length)
+ {
+ return;
+ }
+
+ // fast forward iteration index
+ this.index = this.size;
+
+ // abort jobs
+ abort(this);
+
+ // send back results we have so far
+ async(callback)(null, this.results);
+}
diff --git a/.output/server/node_modules/asynckit/package.json b/.output/server/node_modules/asynckit/package.json
new file mode 100644
index 0000000..7853738
--- /dev/null
+++ b/.output/server/node_modules/asynckit/package.json
@@ -0,0 +1,63 @@
+{
+ "name": "asynckit",
+ "version": "0.4.0",
+ "description": "Minimal async jobs utility library, with streams support",
+ "main": "index.js",
+ "scripts": {
+ "clean": "rimraf coverage",
+ "lint": "eslint *.js lib/*.js test/*.js",
+ "test": "istanbul cover --reporter=json tape -- 'test/test-*.js' | tap-spec",
+ "win-test": "tape test/test-*.js",
+ "browser": "browserify -t browserify-istanbul test/lib/browserify_adjustment.js test/test-*.js | obake --coverage | tap-spec",
+ "report": "istanbul report",
+ "size": "browserify index.js | size-table asynckit",
+ "debug": "tape test/test-*.js"
+ },
+ "pre-commit": [
+ "clean",
+ "lint",
+ "test",
+ "browser",
+ "report",
+ "size"
+ ],
+ "repository": {
+ "type": "git",
+ "url": "git+https://github.com/alexindigo/asynckit.git"
+ },
+ "keywords": [
+ "async",
+ "jobs",
+ "parallel",
+ "serial",
+ "iterator",
+ "array",
+ "object",
+ "stream",
+ "destroy",
+ "terminate",
+ "abort"
+ ],
+ "author": "Alex Indigo ",
+ "license": "MIT",
+ "bugs": {
+ "url": "https://github.com/alexindigo/asynckit/issues"
+ },
+ "homepage": "https://github.com/alexindigo/asynckit#readme",
+ "devDependencies": {
+ "browserify": "^13.0.0",
+ "browserify-istanbul": "^2.0.0",
+ "coveralls": "^2.11.9",
+ "eslint": "^2.9.0",
+ "istanbul": "^0.4.3",
+ "obake": "^0.1.2",
+ "phantomjs-prebuilt": "^2.1.7",
+ "pre-commit": "^1.1.3",
+ "reamde": "^1.1.0",
+ "rimraf": "^2.5.2",
+ "size-table": "^0.2.0",
+ "tap-spec": "^4.1.1",
+ "tape": "^4.5.1"
+ },
+ "dependencies": {}
+}
\ No newline at end of file
diff --git a/.output/server/node_modules/asynckit/parallel.js b/.output/server/node_modules/asynckit/parallel.js
new file mode 100644
index 0000000..3c50344
--- /dev/null
+++ b/.output/server/node_modules/asynckit/parallel.js
@@ -0,0 +1,43 @@
+var iterate = require('./lib/iterate.js')
+ , initState = require('./lib/state.js')
+ , terminator = require('./lib/terminator.js')
+ ;
+
+// Public API
+module.exports = parallel;
+
+/**
+ * Runs iterator over provided array elements in parallel
+ *
+ * @param {array|object} list - array or object (named list) to iterate over
+ * @param {function} iterator - iterator to run
+ * @param {function} callback - invoked when all elements processed
+ * @returns {function} - jobs terminator
+ */
+function parallel(list, iterator, callback)
+{
+ var state = initState(list);
+
+ while (state.index < (state['keyedList'] || list).length)
+ {
+ iterate(list, iterator, state, function(error, result)
+ {
+ if (error)
+ {
+ callback(error, result);
+ return;
+ }
+
+ // looks like it's the last one
+ if (Object.keys(state.jobs).length === 0)
+ {
+ callback(null, state.results);
+ return;
+ }
+ });
+
+ state.index++;
+ }
+
+ return terminator.bind(state, callback);
+}
diff --git a/.output/server/node_modules/asynckit/serial.js b/.output/server/node_modules/asynckit/serial.js
new file mode 100644
index 0000000..6cd949a
--- /dev/null
+++ b/.output/server/node_modules/asynckit/serial.js
@@ -0,0 +1,17 @@
+var serialOrdered = require('./serialOrdered.js');
+
+// Public API
+module.exports = serial;
+
+/**
+ * Runs iterator over provided array elements in series
+ *
+ * @param {array|object} list - array or object (named list) to iterate over
+ * @param {function} iterator - iterator to run
+ * @param {function} callback - invoked when all elements processed
+ * @returns {function} - jobs terminator
+ */
+function serial(list, iterator, callback)
+{
+ return serialOrdered(list, iterator, null, callback);
+}
diff --git a/.output/server/node_modules/asynckit/serialOrdered.js b/.output/server/node_modules/asynckit/serialOrdered.js
new file mode 100644
index 0000000..607eafe
--- /dev/null
+++ b/.output/server/node_modules/asynckit/serialOrdered.js
@@ -0,0 +1,75 @@
+var iterate = require('./lib/iterate.js')
+ , initState = require('./lib/state.js')
+ , terminator = require('./lib/terminator.js')
+ ;
+
+// Public API
+module.exports = serialOrdered;
+// sorting helpers
+module.exports.ascending = ascending;
+module.exports.descending = descending;
+
+/**
+ * Runs iterator over provided sorted array elements in series
+ *
+ * @param {array|object} list - array or object (named list) to iterate over
+ * @param {function} iterator - iterator to run
+ * @param {function} sortMethod - custom sort function
+ * @param {function} callback - invoked when all elements processed
+ * @returns {function} - jobs terminator
+ */
+function serialOrdered(list, iterator, sortMethod, callback)
+{
+ var state = initState(list, sortMethod);
+
+ iterate(list, iterator, state, function iteratorHandler(error, result)
+ {
+ if (error)
+ {
+ callback(error, result);
+ return;
+ }
+
+ state.index++;
+
+ // are we there yet?
+ if (state.index < (state['keyedList'] || list).length)
+ {
+ iterate(list, iterator, state, iteratorHandler);
+ return;
+ }
+
+ // done here
+ callback(null, state.results);
+ });
+
+ return terminator.bind(state, callback);
+}
+
+/*
+ * -- Sort methods
+ */
+
+/**
+ * sort helper to sort array elements in ascending order
+ *
+ * @param {mixed} a - an item to compare
+ * @param {mixed} b - an item to compare
+ * @returns {number} - comparison result
+ */
+function ascending(a, b)
+{
+ return a < b ? -1 : a > b ? 1 : 0;
+}
+
+/**
+ * sort helper to sort array elements in descending order
+ *
+ * @param {mixed} a - an item to compare
+ * @param {mixed} b - an item to compare
+ * @returns {number} - comparison result
+ */
+function descending(a, b)
+{
+ return -1 * ascending(a, b);
+}
diff --git a/.output/server/node_modules/axios/index.js b/.output/server/node_modules/axios/index.js
new file mode 100644
index 0000000..fba3990
--- /dev/null
+++ b/.output/server/node_modules/axios/index.js
@@ -0,0 +1,43 @@
+import axios from './lib/axios.js';
+
+// This module is intended to unwrap Axios default export as named.
+// Keep top-level export same with static properties
+// so that it can keep same with es module or cjs
+const {
+ Axios,
+ AxiosError,
+ CanceledError,
+ isCancel,
+ CancelToken,
+ VERSION,
+ all,
+ Cancel,
+ isAxiosError,
+ spread,
+ toFormData,
+ AxiosHeaders,
+ HttpStatusCode,
+ formToJSON,
+ getAdapter,
+ mergeConfig
+} = axios;
+
+export {
+ axios as default,
+ Axios,
+ AxiosError,
+ CanceledError,
+ isCancel,
+ CancelToken,
+ VERSION,
+ all,
+ Cancel,
+ isAxiosError,
+ spread,
+ toFormData,
+ AxiosHeaders,
+ HttpStatusCode,
+ formToJSON,
+ getAdapter,
+ mergeConfig
+}
diff --git a/.output/server/node_modules/axios/lib/adapters/adapters.js b/.output/server/node_modules/axios/lib/adapters/adapters.js
new file mode 100644
index 0000000..550997d
--- /dev/null
+++ b/.output/server/node_modules/axios/lib/adapters/adapters.js
@@ -0,0 +1,77 @@
+import utils from '../utils.js';
+import httpAdapter from './http.js';
+import xhrAdapter from './xhr.js';
+import AxiosError from "../core/AxiosError.js";
+
+const knownAdapters = {
+ http: httpAdapter,
+ xhr: xhrAdapter
+}
+
+utils.forEach(knownAdapters, (fn, value) => {
+ if (fn) {
+ try {
+ Object.defineProperty(fn, 'name', {value});
+ } catch (e) {
+ // eslint-disable-next-line no-empty
+ }
+ Object.defineProperty(fn, 'adapterName', {value});
+ }
+});
+
+const renderReason = (reason) => `- ${reason}`;
+
+const isResolvedHandle = (adapter) => utils.isFunction(adapter) || adapter === null || adapter === false;
+
+export default {
+ getAdapter: (adapters) => {
+ adapters = utils.isArray(adapters) ? adapters : [adapters];
+
+ const {length} = adapters;
+ let nameOrAdapter;
+ let adapter;
+
+ const rejectedReasons = {};
+
+ for (let i = 0; i < length; i++) {
+ nameOrAdapter = adapters[i];
+ let id;
+
+ adapter = nameOrAdapter;
+
+ if (!isResolvedHandle(nameOrAdapter)) {
+ adapter = knownAdapters[(id = String(nameOrAdapter)).toLowerCase()];
+
+ if (adapter === undefined) {
+ throw new AxiosError(`Unknown adapter '${id}'`);
+ }
+ }
+
+ if (adapter) {
+ break;
+ }
+
+ rejectedReasons[id || '#' + i] = adapter;
+ }
+
+ if (!adapter) {
+
+ const reasons = Object.entries(rejectedReasons)
+ .map(([id, state]) => `adapter ${id} ` +
+ (state === false ? 'is not supported by the environment' : 'is not available in the build')
+ );
+
+ let s = length ?
+ (reasons.length > 1 ? 'since :\n' + reasons.map(renderReason).join('\n') : ' ' + renderReason(reasons[0])) :
+ 'as no adapter specified';
+
+ throw new AxiosError(
+ `There is no suitable adapter to dispatch the request ` + s,
+ 'ERR_NOT_SUPPORT'
+ );
+ }
+
+ return adapter;
+ },
+ adapters: knownAdapters
+}
diff --git a/.output/server/node_modules/axios/lib/adapters/http.js b/.output/server/node_modules/axios/lib/adapters/http.js
new file mode 100644
index 0000000..03f0f96
--- /dev/null
+++ b/.output/server/node_modules/axios/lib/adapters/http.js
@@ -0,0 +1,681 @@
+'use strict';
+
+import utils from './../utils.js';
+import settle from './../core/settle.js';
+import buildFullPath from '../core/buildFullPath.js';
+import buildURL from './../helpers/buildURL.js';
+import {getProxyForUrl} from 'proxy-from-env';
+import http from 'http';
+import https from 'https';
+import util from 'util';
+import followRedirects from 'follow-redirects';
+import zlib from 'zlib';
+import {VERSION} from '../env/data.js';
+import transitionalDefaults from '../defaults/transitional.js';
+import AxiosError from '../core/AxiosError.js';
+import CanceledError from '../cancel/CanceledError.js';
+import platform from '../platform/index.js';
+import fromDataURI from '../helpers/fromDataURI.js';
+import stream from 'stream';
+import AxiosHeaders from '../core/AxiosHeaders.js';
+import AxiosTransformStream from '../helpers/AxiosTransformStream.js';
+import EventEmitter from 'events';
+import formDataToStream from "../helpers/formDataToStream.js";
+import readBlob from "../helpers/readBlob.js";
+import ZlibHeaderTransformStream from '../helpers/ZlibHeaderTransformStream.js';
+import callbackify from "../helpers/callbackify.js";
+
+const zlibOptions = {
+ flush: zlib.constants.Z_SYNC_FLUSH,
+ finishFlush: zlib.constants.Z_SYNC_FLUSH
+};
+
+const brotliOptions = {
+ flush: zlib.constants.BROTLI_OPERATION_FLUSH,
+ finishFlush: zlib.constants.BROTLI_OPERATION_FLUSH
+}
+
+const isBrotliSupported = utils.isFunction(zlib.createBrotliDecompress);
+
+const {http: httpFollow, https: httpsFollow} = followRedirects;
+
+const isHttps = /https:?/;
+
+const supportedProtocols = platform.protocols.map(protocol => {
+ return protocol + ':';
+});
+
+/**
+ * If the proxy or config beforeRedirects functions are defined, call them with the options
+ * object.
+ *
+ * @param {Object} options - The options object that was passed to the request.
+ *
+ * @returns {Object}
+ */
+function dispatchBeforeRedirect(options) {
+ if (options.beforeRedirects.proxy) {
+ options.beforeRedirects.proxy(options);
+ }
+ if (options.beforeRedirects.config) {
+ options.beforeRedirects.config(options);
+ }
+}
+
+/**
+ * If the proxy or config afterRedirects functions are defined, call them with the options
+ *
+ * @param {http.ClientRequestArgs} options
+ * @param {AxiosProxyConfig} configProxy configuration from Axios options object
+ * @param {string} location
+ *
+ * @returns {http.ClientRequestArgs}
+ */
+function setProxy(options, configProxy, location) {
+ let proxy = configProxy;
+ if (!proxy && proxy !== false) {
+ const proxyUrl = getProxyForUrl(location);
+ if (proxyUrl) {
+ proxy = new URL(proxyUrl);
+ }
+ }
+ if (proxy) {
+ // Basic proxy authorization
+ if (proxy.username) {
+ proxy.auth = (proxy.username || '') + ':' + (proxy.password || '');
+ }
+
+ if (proxy.auth) {
+ // Support proxy auth object form
+ if (proxy.auth.username || proxy.auth.password) {
+ proxy.auth = (proxy.auth.username || '') + ':' + (proxy.auth.password || '');
+ }
+ const base64 = Buffer
+ .from(proxy.auth, 'utf8')
+ .toString('base64');
+ options.headers['Proxy-Authorization'] = 'Basic ' + base64;
+ }
+
+ options.headers.host = options.hostname + (options.port ? ':' + options.port : '');
+ const proxyHost = proxy.hostname || proxy.host;
+ options.hostname = proxyHost;
+ // Replace 'host' since options is not a URL object
+ options.host = proxyHost;
+ options.port = proxy.port;
+ options.path = location;
+ if (proxy.protocol) {
+ options.protocol = proxy.protocol.includes(':') ? proxy.protocol : `${proxy.protocol}:`;
+ }
+ }
+
+ options.beforeRedirects.proxy = function beforeRedirect(redirectOptions) {
+ // Configure proxy for redirected request, passing the original config proxy to apply
+ // the exact same logic as if the redirected request was performed by axios directly.
+ setProxy(redirectOptions, configProxy, redirectOptions.href);
+ };
+}
+
+const isHttpAdapterSupported = typeof process !== 'undefined' && utils.kindOf(process) === 'process';
+
+// temporary hotfix
+
+const wrapAsync = (asyncExecutor) => {
+ return new Promise((resolve, reject) => {
+ let onDone;
+ let isDone;
+
+ const done = (value, isRejected) => {
+ if (isDone) return;
+ isDone = true;
+ onDone && onDone(value, isRejected);
+ }
+
+ const _resolve = (value) => {
+ done(value);
+ resolve(value);
+ };
+
+ const _reject = (reason) => {
+ done(reason, true);
+ reject(reason);
+ }
+
+ asyncExecutor(_resolve, _reject, (onDoneHandler) => (onDone = onDoneHandler)).catch(_reject);
+ })
+};
+
+const resolveFamily = ({address, family}) => {
+ if (!utils.isString(address)) {
+ throw TypeError('address must be a string');
+ }
+ return ({
+ address,
+ family: family || (address.indexOf('.') < 0 ? 6 : 4)
+ });
+}
+
+const buildAddressEntry = (address, family) => resolveFamily(utils.isObject(address) ? address : {address, family});
+
+/*eslint consistent-return:0*/
+export default isHttpAdapterSupported && function httpAdapter(config) {
+ return wrapAsync(async function dispatchHttpRequest(resolve, reject, onDone) {
+ let {data, lookup, family} = config;
+ const {responseType, responseEncoding} = config;
+ const method = config.method.toUpperCase();
+ let isDone;
+ let rejected = false;
+ let req;
+
+ if (lookup) {
+ const _lookup = callbackify(lookup, (value) => utils.isArray(value) ? value : [value]);
+ // hotfix to support opt.all option which is required for node 20.x
+ lookup = (hostname, opt, cb) => {
+ _lookup(hostname, opt, (err, arg0, arg1) => {
+ const addresses = utils.isArray(arg0) ? arg0.map(addr => buildAddressEntry(addr)) : [buildAddressEntry(arg0, arg1)];
+
+ opt.all ? cb(err, addresses) : cb(err, addresses[0].address, addresses[0].family);
+ });
+ }
+ }
+
+ // temporary internal emitter until the AxiosRequest class will be implemented
+ const emitter = new EventEmitter();
+
+ const onFinished = () => {
+ if (config.cancelToken) {
+ config.cancelToken.unsubscribe(abort);
+ }
+
+ if (config.signal) {
+ config.signal.removeEventListener('abort', abort);
+ }
+
+ emitter.removeAllListeners();
+ }
+
+ onDone((value, isRejected) => {
+ isDone = true;
+ if (isRejected) {
+ rejected = true;
+ onFinished();
+ }
+ });
+
+ function abort(reason) {
+ emitter.emit('abort', !reason || reason.type ? new CanceledError(null, config, req) : reason);
+ }
+
+ emitter.once('abort', reject);
+
+ if (config.cancelToken || config.signal) {
+ config.cancelToken && config.cancelToken.subscribe(abort);
+ if (config.signal) {
+ config.signal.aborted ? abort() : config.signal.addEventListener('abort', abort);
+ }
+ }
+
+ // Parse url
+ const fullPath = buildFullPath(config.baseURL, config.url);
+ const parsed = new URL(fullPath, 'http://localhost');
+ const protocol = parsed.protocol || supportedProtocols[0];
+
+ if (protocol === 'data:') {
+ let convertedData;
+
+ if (method !== 'GET') {
+ return settle(resolve, reject, {
+ status: 405,
+ statusText: 'method not allowed',
+ headers: {},
+ config
+ });
+ }
+
+ try {
+ convertedData = fromDataURI(config.url, responseType === 'blob', {
+ Blob: config.env && config.env.Blob
+ });
+ } catch (err) {
+ throw AxiosError.from(err, AxiosError.ERR_BAD_REQUEST, config);
+ }
+
+ if (responseType === 'text') {
+ convertedData = convertedData.toString(responseEncoding);
+
+ if (!responseEncoding || responseEncoding === 'utf8') {
+ convertedData = utils.stripBOM(convertedData);
+ }
+ } else if (responseType === 'stream') {
+ convertedData = stream.Readable.from(convertedData);
+ }
+
+ return settle(resolve, reject, {
+ data: convertedData,
+ status: 200,
+ statusText: 'OK',
+ headers: new AxiosHeaders(),
+ config
+ });
+ }
+
+ if (supportedProtocols.indexOf(protocol) === -1) {
+ return reject(new AxiosError(
+ 'Unsupported protocol ' + protocol,
+ AxiosError.ERR_BAD_REQUEST,
+ config
+ ));
+ }
+
+ const headers = AxiosHeaders.from(config.headers).normalize();
+
+ // Set User-Agent (required by some servers)
+ // See https://github.com/axios/axios/issues/69
+ // User-Agent is specified; handle case where no UA header is desired
+ // Only set header if it hasn't been set in config
+ headers.set('User-Agent', 'axios/' + VERSION, false);
+
+ const onDownloadProgress = config.onDownloadProgress;
+ const onUploadProgress = config.onUploadProgress;
+ const maxRate = config.maxRate;
+ let maxUploadRate = undefined;
+ let maxDownloadRate = undefined;
+
+ // support for spec compliant FormData objects
+ if (utils.isSpecCompliantForm(data)) {
+ const userBoundary = headers.getContentType(/boundary=([-_\w\d]{10,70})/i);
+
+ data = formDataToStream(data, (formHeaders) => {
+ headers.set(formHeaders);
+ }, {
+ tag: `axios-${VERSION}-boundary`,
+ boundary: userBoundary && userBoundary[1] || undefined
+ });
+ // support for https://www.npmjs.com/package/form-data api
+ } else if (utils.isFormData(data) && utils.isFunction(data.getHeaders)) {
+ headers.set(data.getHeaders());
+
+ if (!headers.hasContentLength()) {
+ try {
+ const knownLength = await util.promisify(data.getLength).call(data);
+ Number.isFinite(knownLength) && knownLength >= 0 && headers.setContentLength(knownLength);
+ /*eslint no-empty:0*/
+ } catch (e) {
+ }
+ }
+ } else if (utils.isBlob(data)) {
+ data.size && headers.setContentType(data.type || 'application/octet-stream');
+ headers.setContentLength(data.size || 0);
+ data = stream.Readable.from(readBlob(data));
+ } else if (data && !utils.isStream(data)) {
+ if (Buffer.isBuffer(data)) {
+ // Nothing to do...
+ } else if (utils.isArrayBuffer(data)) {
+ data = Buffer.from(new Uint8Array(data));
+ } else if (utils.isString(data)) {
+ data = Buffer.from(data, 'utf-8');
+ } else {
+ return reject(new AxiosError(
+ 'Data after transformation must be a string, an ArrayBuffer, a Buffer, or a Stream',
+ AxiosError.ERR_BAD_REQUEST,
+ config
+ ));
+ }
+
+ // Add Content-Length header if data exists
+ headers.setContentLength(data.length, false);
+
+ if (config.maxBodyLength > -1 && data.length > config.maxBodyLength) {
+ return reject(new AxiosError(
+ 'Request body larger than maxBodyLength limit',
+ AxiosError.ERR_BAD_REQUEST,
+ config
+ ));
+ }
+ }
+
+ const contentLength = utils.toFiniteNumber(headers.getContentLength());
+
+ if (utils.isArray(maxRate)) {
+ maxUploadRate = maxRate[0];
+ maxDownloadRate = maxRate[1];
+ } else {
+ maxUploadRate = maxDownloadRate = maxRate;
+ }
+
+ if (data && (onUploadProgress || maxUploadRate)) {
+ if (!utils.isStream(data)) {
+ data = stream.Readable.from(data, {objectMode: false});
+ }
+
+ data = stream.pipeline([data, new AxiosTransformStream({
+ length: contentLength,
+ maxRate: utils.toFiniteNumber(maxUploadRate)
+ })], utils.noop);
+
+ onUploadProgress && data.on('progress', progress => {
+ onUploadProgress(Object.assign(progress, {
+ upload: true
+ }));
+ });
+ }
+
+ // HTTP basic authentication
+ let auth = undefined;
+ if (config.auth) {
+ const username = config.auth.username || '';
+ const password = config.auth.password || '';
+ auth = username + ':' + password;
+ }
+
+ if (!auth && parsed.username) {
+ const urlUsername = parsed.username;
+ const urlPassword = parsed.password;
+ auth = urlUsername + ':' + urlPassword;
+ }
+
+ auth && headers.delete('authorization');
+
+ let path;
+
+ try {
+ path = buildURL(
+ parsed.pathname + parsed.search,
+ config.params,
+ config.paramsSerializer
+ ).replace(/^\?/, '');
+ } catch (err) {
+ const customErr = new Error(err.message);
+ customErr.config = config;
+ customErr.url = config.url;
+ customErr.exists = true;
+ return reject(customErr);
+ }
+
+ headers.set(
+ 'Accept-Encoding',
+ 'gzip, compress, deflate' + (isBrotliSupported ? ', br' : ''), false
+ );
+
+ const options = {
+ path,
+ method: method,
+ headers: headers.toJSON(),
+ agents: { http: config.httpAgent, https: config.httpsAgent },
+ auth,
+ protocol,
+ family,
+ beforeRedirect: dispatchBeforeRedirect,
+ beforeRedirects: {}
+ };
+
+ // cacheable-lookup integration hotfix
+ !utils.isUndefined(lookup) && (options.lookup = lookup);
+
+ if (config.socketPath) {
+ options.socketPath = config.socketPath;
+ } else {
+ options.hostname = parsed.hostname;
+ options.port = parsed.port;
+ setProxy(options, config.proxy, protocol + '//' + parsed.hostname + (parsed.port ? ':' + parsed.port : '') + options.path);
+ }
+
+ let transport;
+ const isHttpsRequest = isHttps.test(options.protocol);
+ options.agent = isHttpsRequest ? config.httpsAgent : config.httpAgent;
+ if (config.transport) {
+ transport = config.transport;
+ } else if (config.maxRedirects === 0) {
+ transport = isHttpsRequest ? https : http;
+ } else {
+ if (config.maxRedirects) {
+ options.maxRedirects = config.maxRedirects;
+ }
+ if (config.beforeRedirect) {
+ options.beforeRedirects.config = config.beforeRedirect;
+ }
+ transport = isHttpsRequest ? httpsFollow : httpFollow;
+ }
+
+ if (config.maxBodyLength > -1) {
+ options.maxBodyLength = config.maxBodyLength;
+ } else {
+ // follow-redirects does not skip comparison, so it should always succeed for axios -1 unlimited
+ options.maxBodyLength = Infinity;
+ }
+
+ if (config.insecureHTTPParser) {
+ options.insecureHTTPParser = config.insecureHTTPParser;
+ }
+
+ // Create the request
+ req = transport.request(options, function handleResponse(res) {
+ if (req.destroyed) return;
+
+ const streams = [res];
+
+ const responseLength = +res.headers['content-length'];
+
+ if (onDownloadProgress) {
+ const transformStream = new AxiosTransformStream({
+ length: utils.toFiniteNumber(responseLength),
+ maxRate: utils.toFiniteNumber(maxDownloadRate)
+ });
+
+ onDownloadProgress && transformStream.on('progress', progress => {
+ onDownloadProgress(Object.assign(progress, {
+ download: true
+ }));
+ });
+
+ streams.push(transformStream);
+ }
+
+ // decompress the response body transparently if required
+ let responseStream = res;
+
+ // return the last request in case of redirects
+ const lastRequest = res.req || req;
+
+ // if decompress disabled we should not decompress
+ if (config.decompress !== false && res.headers['content-encoding']) {
+ // if no content, but headers still say that it is encoded,
+ // remove the header not confuse downstream operations
+ if (method === 'HEAD' || res.statusCode === 204) {
+ delete res.headers['content-encoding'];
+ }
+
+ switch ((res.headers['content-encoding'] || '').toLowerCase()) {
+ /*eslint default-case:0*/
+ case 'gzip':
+ case 'x-gzip':
+ case 'compress':
+ case 'x-compress':
+ // add the unzipper to the body stream processing pipeline
+ streams.push(zlib.createUnzip(zlibOptions));
+
+ // remove the content-encoding in order to not confuse downstream operations
+ delete res.headers['content-encoding'];
+ break;
+ case 'deflate':
+ streams.push(new ZlibHeaderTransformStream());
+
+ // add the unzipper to the body stream processing pipeline
+ streams.push(zlib.createUnzip(zlibOptions));
+
+ // remove the content-encoding in order to not confuse downstream operations
+ delete res.headers['content-encoding'];
+ break;
+ case 'br':
+ if (isBrotliSupported) {
+ streams.push(zlib.createBrotliDecompress(brotliOptions));
+ delete res.headers['content-encoding'];
+ }
+ }
+ }
+
+ responseStream = streams.length > 1 ? stream.pipeline(streams, utils.noop) : streams[0];
+
+ const offListeners = stream.finished(responseStream, () => {
+ offListeners();
+ onFinished();
+ });
+
+ const response = {
+ status: res.statusCode,
+ statusText: res.statusMessage,
+ headers: new AxiosHeaders(res.headers),
+ config,
+ request: lastRequest
+ };
+
+ if (responseType === 'stream') {
+ response.data = responseStream;
+ settle(resolve, reject, response);
+ } else {
+ const responseBuffer = [];
+ let totalResponseBytes = 0;
+
+ responseStream.on('data', function handleStreamData(chunk) {
+ responseBuffer.push(chunk);
+ totalResponseBytes += chunk.length;
+
+ // make sure the content length is not over the maxContentLength if specified
+ if (config.maxContentLength > -1 && totalResponseBytes > config.maxContentLength) {
+ // stream.destroy() emit aborted event before calling reject() on Node.js v16
+ rejected = true;
+ responseStream.destroy();
+ reject(new AxiosError('maxContentLength size of ' + config.maxContentLength + ' exceeded',
+ AxiosError.ERR_BAD_RESPONSE, config, lastRequest));
+ }
+ });
+
+ responseStream.on('aborted', function handlerStreamAborted() {
+ if (rejected) {
+ return;
+ }
+
+ const err = new AxiosError(
+ 'maxContentLength size of ' + config.maxContentLength + ' exceeded',
+ AxiosError.ERR_BAD_RESPONSE,
+ config,
+ lastRequest
+ );
+ responseStream.destroy(err);
+ reject(err);
+ });
+
+ responseStream.on('error', function handleStreamError(err) {
+ if (req.destroyed) return;
+ reject(AxiosError.from(err, null, config, lastRequest));
+ });
+
+ responseStream.on('end', function handleStreamEnd() {
+ try {
+ let responseData = responseBuffer.length === 1 ? responseBuffer[0] : Buffer.concat(responseBuffer);
+ if (responseType !== 'arraybuffer') {
+ responseData = responseData.toString(responseEncoding);
+ if (!responseEncoding || responseEncoding === 'utf8') {
+ responseData = utils.stripBOM(responseData);
+ }
+ }
+ response.data = responseData;
+ } catch (err) {
+ return reject(AxiosError.from(err, null, config, response.request, response));
+ }
+ settle(resolve, reject, response);
+ });
+ }
+
+ emitter.once('abort', err => {
+ if (!responseStream.destroyed) {
+ responseStream.emit('error', err);
+ responseStream.destroy();
+ }
+ });
+ });
+
+ emitter.once('abort', err => {
+ reject(err);
+ req.destroy(err);
+ });
+
+ // Handle errors
+ req.on('error', function handleRequestError(err) {
+ // @todo remove
+ // if (req.aborted && err.code !== AxiosError.ERR_FR_TOO_MANY_REDIRECTS) return;
+ reject(AxiosError.from(err, null, config, req));
+ });
+
+ // set tcp keep alive to prevent drop connection by peer
+ req.on('socket', function handleRequestSocket(socket) {
+ // default interval of sending ack packet is 1 minute
+ socket.setKeepAlive(true, 1000 * 60);
+ });
+
+ // Handle request timeout
+ if (config.timeout) {
+ // This is forcing a int timeout to avoid problems if the `req` interface doesn't handle other types.
+ const timeout = parseInt(config.timeout, 10);
+
+ if (Number.isNaN(timeout)) {
+ reject(new AxiosError(
+ 'error trying to parse `config.timeout` to int',
+ AxiosError.ERR_BAD_OPTION_VALUE,
+ config,
+ req
+ ));
+
+ return;
+ }
+
+ // Sometime, the response will be very slow, and does not respond, the connect event will be block by event loop system.
+ // And timer callback will be fired, and abort() will be invoked before connection, then get "socket hang up" and code ECONNRESET.
+ // At this time, if we have a large number of request, nodejs will hang up some socket on background. and the number will up and up.
+ // And then these socket which be hang up will devouring CPU little by little.
+ // ClientRequest.setTimeout will be fired on the specify milliseconds, and can make sure that abort() will be fired after connect.
+ req.setTimeout(timeout, function handleRequestTimeout() {
+ if (isDone) return;
+ let timeoutErrorMessage = config.timeout ? 'timeout of ' + config.timeout + 'ms exceeded' : 'timeout exceeded';
+ const transitional = config.transitional || transitionalDefaults;
+ if (config.timeoutErrorMessage) {
+ timeoutErrorMessage = config.timeoutErrorMessage;
+ }
+ reject(new AxiosError(
+ timeoutErrorMessage,
+ transitional.clarifyTimeoutError ? AxiosError.ETIMEDOUT : AxiosError.ECONNABORTED,
+ config,
+ req
+ ));
+ abort();
+ });
+ }
+
+
+ // Send the request
+ if (utils.isStream(data)) {
+ let ended = false;
+ let errored = false;
+
+ data.on('end', () => {
+ ended = true;
+ });
+
+ data.once('error', err => {
+ errored = true;
+ req.destroy(err);
+ });
+
+ data.on('close', () => {
+ if (!ended && !errored) {
+ abort(new CanceledError('Request stream has been aborted', config, req));
+ }
+ });
+
+ data.pipe(req);
+ } else {
+ req.end(data);
+ }
+ });
+}
+
+export const __setProxy = setProxy;
diff --git a/.output/server/node_modules/axios/lib/adapters/xhr.js b/.output/server/node_modules/axios/lib/adapters/xhr.js
new file mode 100644
index 0000000..26126b2
--- /dev/null
+++ b/.output/server/node_modules/axios/lib/adapters/xhr.js
@@ -0,0 +1,260 @@
+'use strict';
+
+import utils from './../utils.js';
+import settle from './../core/settle.js';
+import cookies from './../helpers/cookies.js';
+import buildURL from './../helpers/buildURL.js';
+import buildFullPath from '../core/buildFullPath.js';
+import isURLSameOrigin from './../helpers/isURLSameOrigin.js';
+import transitionalDefaults from '../defaults/transitional.js';
+import AxiosError from '../core/AxiosError.js';
+import CanceledError from '../cancel/CanceledError.js';
+import parseProtocol from '../helpers/parseProtocol.js';
+import platform from '../platform/index.js';
+import AxiosHeaders from '../core/AxiosHeaders.js';
+import speedometer from '../helpers/speedometer.js';
+
+function progressEventReducer(listener, isDownloadStream) {
+ let bytesNotified = 0;
+ const _speedometer = speedometer(50, 250);
+
+ return e => {
+ const loaded = e.loaded;
+ const total = e.lengthComputable ? e.total : undefined;
+ const progressBytes = loaded - bytesNotified;
+ const rate = _speedometer(progressBytes);
+ const inRange = loaded <= total;
+
+ bytesNotified = loaded;
+
+ const data = {
+ loaded,
+ total,
+ progress: total ? (loaded / total) : undefined,
+ bytes: progressBytes,
+ rate: rate ? rate : undefined,
+ estimated: rate && total && inRange ? (total - loaded) / rate : undefined,
+ event: e
+ };
+
+ data[isDownloadStream ? 'download' : 'upload'] = true;
+
+ listener(data);
+ };
+}
+
+const isXHRAdapterSupported = typeof XMLHttpRequest !== 'undefined';
+
+export default isXHRAdapterSupported && function (config) {
+ return new Promise(function dispatchXhrRequest(resolve, reject) {
+ let requestData = config.data;
+ const requestHeaders = AxiosHeaders.from(config.headers).normalize();
+ let {responseType, withXSRFToken} = config;
+ let onCanceled;
+ function done() {
+ if (config.cancelToken) {
+ config.cancelToken.unsubscribe(onCanceled);
+ }
+
+ if (config.signal) {
+ config.signal.removeEventListener('abort', onCanceled);
+ }
+ }
+
+ let contentType;
+
+ if (utils.isFormData(requestData)) {
+ if (platform.hasStandardBrowserEnv || platform.hasStandardBrowserWebWorkerEnv) {
+ requestHeaders.setContentType(false); // Let the browser set it
+ } else if ((contentType = requestHeaders.getContentType()) !== false) {
+ // fix semicolon duplication issue for ReactNative FormData implementation
+ const [type, ...tokens] = contentType ? contentType.split(';').map(token => token.trim()).filter(Boolean) : [];
+ requestHeaders.setContentType([type || 'multipart/form-data', ...tokens].join('; '));
+ }
+ }
+
+ let request = new XMLHttpRequest();
+
+ // HTTP basic authentication
+ if (config.auth) {
+ const username = config.auth.username || '';
+ const password = config.auth.password ? unescape(encodeURIComponent(config.auth.password)) : '';
+ requestHeaders.set('Authorization', 'Basic ' + btoa(username + ':' + password));
+ }
+
+ const fullPath = buildFullPath(config.baseURL, config.url);
+
+ request.open(config.method.toUpperCase(), buildURL(fullPath, config.params, config.paramsSerializer), true);
+
+ // Set the request timeout in MS
+ request.timeout = config.timeout;
+
+ function onloadend() {
+ if (!request) {
+ return;
+ }
+ // Prepare the response
+ const responseHeaders = AxiosHeaders.from(
+ 'getAllResponseHeaders' in request && request.getAllResponseHeaders()
+ );
+ const responseData = !responseType || responseType === 'text' || responseType === 'json' ?
+ request.responseText : request.response;
+ const response = {
+ data: responseData,
+ status: request.status,
+ statusText: request.statusText,
+ headers: responseHeaders,
+ config,
+ request
+ };
+
+ settle(function _resolve(value) {
+ resolve(value);
+ done();
+ }, function _reject(err) {
+ reject(err);
+ done();
+ }, response);
+
+ // Clean up request
+ request = null;
+ }
+
+ if ('onloadend' in request) {
+ // Use onloadend if available
+ request.onloadend = onloadend;
+ } else {
+ // Listen for ready state to emulate onloadend
+ request.onreadystatechange = function handleLoad() {
+ if (!request || request.readyState !== 4) {
+ return;
+ }
+
+ // The request errored out and we didn't get a response, this will be
+ // handled by onerror instead
+ // With one exception: request that using file: protocol, most browsers
+ // will return status as 0 even though it's a successful request
+ if (request.status === 0 && !(request.responseURL && request.responseURL.indexOf('file:') === 0)) {
+ return;
+ }
+ // readystate handler is calling before onerror or ontimeout handlers,
+ // so we should call onloadend on the next 'tick'
+ setTimeout(onloadend);
+ };
+ }
+
+ // Handle browser request cancellation (as opposed to a manual cancellation)
+ request.onabort = function handleAbort() {
+ if (!request) {
+ return;
+ }
+
+ reject(new AxiosError('Request aborted', AxiosError.ECONNABORTED, config, request));
+
+ // Clean up request
+ request = null;
+ };
+
+ // Handle low level network errors
+ request.onerror = function handleError() {
+ // Real errors are hidden from us by the browser
+ // onerror should only fire if it's a network error
+ reject(new AxiosError('Network Error', AxiosError.ERR_NETWORK, config, request));
+
+ // Clean up request
+ request = null;
+ };
+
+ // Handle timeout
+ request.ontimeout = function handleTimeout() {
+ let timeoutErrorMessage = config.timeout ? 'timeout of ' + config.timeout + 'ms exceeded' : 'timeout exceeded';
+ const transitional = config.transitional || transitionalDefaults;
+ if (config.timeoutErrorMessage) {
+ timeoutErrorMessage = config.timeoutErrorMessage;
+ }
+ reject(new AxiosError(
+ timeoutErrorMessage,
+ transitional.clarifyTimeoutError ? AxiosError.ETIMEDOUT : AxiosError.ECONNABORTED,
+ config,
+ request));
+
+ // Clean up request
+ request = null;
+ };
+
+ // Add xsrf header
+ // This is only done if running in a standard browser environment.
+ // Specifically not if we're in a web worker, or react-native.
+ if(platform.hasStandardBrowserEnv) {
+ withXSRFToken && utils.isFunction(withXSRFToken) && (withXSRFToken = withXSRFToken(config));
+
+ if (withXSRFToken || (withXSRFToken !== false && isURLSameOrigin(fullPath))) {
+ // Add xsrf header
+ const xsrfValue = config.xsrfHeaderName && config.xsrfCookieName && cookies.read(config.xsrfCookieName);
+
+ if (xsrfValue) {
+ requestHeaders.set(config.xsrfHeaderName, xsrfValue);
+ }
+ }
+ }
+
+ // Remove Content-Type if data is undefined
+ requestData === undefined && requestHeaders.setContentType(null);
+
+ // Add headers to the request
+ if ('setRequestHeader' in request) {
+ utils.forEach(requestHeaders.toJSON(), function setRequestHeader(val, key) {
+ request.setRequestHeader(key, val);
+ });
+ }
+
+ // Add withCredentials to request if needed
+ if (!utils.isUndefined(config.withCredentials)) {
+ request.withCredentials = !!config.withCredentials;
+ }
+
+ // Add responseType to request if needed
+ if (responseType && responseType !== 'json') {
+ request.responseType = config.responseType;
+ }
+
+ // Handle progress if needed
+ if (typeof config.onDownloadProgress === 'function') {
+ request.addEventListener('progress', progressEventReducer(config.onDownloadProgress, true));
+ }
+
+ // Not all browsers support upload events
+ if (typeof config.onUploadProgress === 'function' && request.upload) {
+ request.upload.addEventListener('progress', progressEventReducer(config.onUploadProgress));
+ }
+
+ if (config.cancelToken || config.signal) {
+ // Handle cancellation
+ // eslint-disable-next-line func-names
+ onCanceled = cancel => {
+ if (!request) {
+ return;
+ }
+ reject(!cancel || cancel.type ? new CanceledError(null, config, request) : cancel);
+ request.abort();
+ request = null;
+ };
+
+ config.cancelToken && config.cancelToken.subscribe(onCanceled);
+ if (config.signal) {
+ config.signal.aborted ? onCanceled() : config.signal.addEventListener('abort', onCanceled);
+ }
+ }
+
+ const protocol = parseProtocol(fullPath);
+
+ if (protocol && platform.protocols.indexOf(protocol) === -1) {
+ reject(new AxiosError('Unsupported protocol ' + protocol + ':', AxiosError.ERR_BAD_REQUEST, config));
+ return;
+ }
+
+
+ // Send the request
+ request.send(requestData || null);
+ });
+}
diff --git a/.output/server/node_modules/axios/lib/axios.js b/.output/server/node_modules/axios/lib/axios.js
new file mode 100644
index 0000000..873f246
--- /dev/null
+++ b/.output/server/node_modules/axios/lib/axios.js
@@ -0,0 +1,89 @@
+'use strict';
+
+import utils from './utils.js';
+import bind from './helpers/bind.js';
+import Axios from './core/Axios.js';
+import mergeConfig from './core/mergeConfig.js';
+import defaults from './defaults/index.js';
+import formDataToJSON from './helpers/formDataToJSON.js';
+import CanceledError from './cancel/CanceledError.js';
+import CancelToken from './cancel/CancelToken.js';
+import isCancel from './cancel/isCancel.js';
+import {VERSION} from './env/data.js';
+import toFormData from './helpers/toFormData.js';
+import AxiosError from './core/AxiosError.js';
+import spread from './helpers/spread.js';
+import isAxiosError from './helpers/isAxiosError.js';
+import AxiosHeaders from "./core/AxiosHeaders.js";
+import adapters from './adapters/adapters.js';
+import HttpStatusCode from './helpers/HttpStatusCode.js';
+
+/**
+ * Create an instance of Axios
+ *
+ * @param {Object} defaultConfig The default config for the instance
+ *
+ * @returns {Axios} A new instance of Axios
+ */
+function createInstance(defaultConfig) {
+ const context = new Axios(defaultConfig);
+ const instance = bind(Axios.prototype.request, context);
+
+ // Copy axios.prototype to instance
+ utils.extend(instance, Axios.prototype, context, {allOwnKeys: true});
+
+ // Copy context to instance
+ utils.extend(instance, context, null, {allOwnKeys: true});
+
+ // Factory for creating new instances
+ instance.create = function create(instanceConfig) {
+ return createInstance(mergeConfig(defaultConfig, instanceConfig));
+ };
+
+ return instance;
+}
+
+// Create the default instance to be exported
+const axios = createInstance(defaults);
+
+// Expose Axios class to allow class inheritance
+axios.Axios = Axios;
+
+// Expose Cancel & CancelToken
+axios.CanceledError = CanceledError;
+axios.CancelToken = CancelToken;
+axios.isCancel = isCancel;
+axios.VERSION = VERSION;
+axios.toFormData = toFormData;
+
+// Expose AxiosError class
+axios.AxiosError = AxiosError;
+
+// alias for CanceledError for backward compatibility
+axios.Cancel = axios.CanceledError;
+
+// Expose all/spread
+axios.all = function all(promises) {
+ return Promise.all(promises);
+};
+
+axios.spread = spread;
+
+// Expose isAxiosError
+axios.isAxiosError = isAxiosError;
+
+// Expose mergeConfig
+axios.mergeConfig = mergeConfig;
+
+axios.AxiosHeaders = AxiosHeaders;
+
+axios.formToJSON = thing => formDataToJSON(utils.isHTMLForm(thing) ? new FormData(thing) : thing);
+
+axios.getAdapter = adapters.getAdapter;
+
+axios.HttpStatusCode = HttpStatusCode;
+
+axios.default = axios;
+
+// this module should only have a default export
+export default axios
diff --git a/.output/server/node_modules/axios/lib/cancel/CancelToken.js b/.output/server/node_modules/axios/lib/cancel/CancelToken.js
new file mode 100644
index 0000000..20d8f68
--- /dev/null
+++ b/.output/server/node_modules/axios/lib/cancel/CancelToken.js
@@ -0,0 +1,121 @@
+'use strict';
+
+import CanceledError from './CanceledError.js';
+
+/**
+ * A `CancelToken` is an object that can be used to request cancellation of an operation.
+ *
+ * @param {Function} executor The executor function.
+ *
+ * @returns {CancelToken}
+ */
+class CancelToken {
+ constructor(executor) {
+ if (typeof executor !== 'function') {
+ throw new TypeError('executor must be a function.');
+ }
+
+ let resolvePromise;
+
+ this.promise = new Promise(function promiseExecutor(resolve) {
+ resolvePromise = resolve;
+ });
+
+ const token = this;
+
+ // eslint-disable-next-line func-names
+ this.promise.then(cancel => {
+ if (!token._listeners) return;
+
+ let i = token._listeners.length;
+
+ while (i-- > 0) {
+ token._listeners[i](cancel);
+ }
+ token._listeners = null;
+ });
+
+ // eslint-disable-next-line func-names
+ this.promise.then = onfulfilled => {
+ let _resolve;
+ // eslint-disable-next-line func-names
+ const promise = new Promise(resolve => {
+ token.subscribe(resolve);
+ _resolve = resolve;
+ }).then(onfulfilled);
+
+ promise.cancel = function reject() {
+ token.unsubscribe(_resolve);
+ };
+
+ return promise;
+ };
+
+ executor(function cancel(message, config, request) {
+ if (token.reason) {
+ // Cancellation has already been requested
+ return;
+ }
+
+ token.reason = new CanceledError(message, config, request);
+ resolvePromise(token.reason);
+ });
+ }
+
+ /**
+ * Throws a `CanceledError` if cancellation has been requested.
+ */
+ throwIfRequested() {
+ if (this.reason) {
+ throw this.reason;
+ }
+ }
+
+ /**
+ * Subscribe to the cancel signal
+ */
+
+ subscribe(listener) {
+ if (this.reason) {
+ listener(this.reason);
+ return;
+ }
+
+ if (this._listeners) {
+ this._listeners.push(listener);
+ } else {
+ this._listeners = [listener];
+ }
+ }
+
+ /**
+ * Unsubscribe from the cancel signal
+ */
+
+ unsubscribe(listener) {
+ if (!this._listeners) {
+ return;
+ }
+ const index = this._listeners.indexOf(listener);
+ if (index !== -1) {
+ this._listeners.splice(index, 1);
+ }
+ }
+
+ /**
+ * Returns an object that contains a new `CancelToken` and a function that, when called,
+ * cancels the `CancelToken`.
+ */
+ static source() {
+ let cancel;
+ const token = new CancelToken(function executor(c) {
+ cancel = c;
+ });
+ return {
+ token,
+ cancel
+ };
+ }
+}
+
+export default CancelToken;
diff --git a/.output/server/node_modules/axios/lib/cancel/CanceledError.js b/.output/server/node_modules/axios/lib/cancel/CanceledError.js
new file mode 100644
index 0000000..880066e
--- /dev/null
+++ b/.output/server/node_modules/axios/lib/cancel/CanceledError.js
@@ -0,0 +1,25 @@
+'use strict';
+
+import AxiosError from '../core/AxiosError.js';
+import utils from '../utils.js';
+
+/**
+ * A `CanceledError` is an object that is thrown when an operation is canceled.
+ *
+ * @param {string=} message The message.
+ * @param {Object=} config The config.
+ * @param {Object=} request The request.
+ *
+ * @returns {CanceledError} The created error.
+ */
+function CanceledError(message, config, request) {
+ // eslint-disable-next-line no-eq-null,eqeqeq
+ AxiosError.call(this, message == null ? 'canceled' : message, AxiosError.ERR_CANCELED, config, request);
+ this.name = 'CanceledError';
+}
+
+utils.inherits(CanceledError, AxiosError, {
+ __CANCEL__: true
+});
+
+export default CanceledError;
diff --git a/.output/server/node_modules/axios/lib/cancel/isCancel.js b/.output/server/node_modules/axios/lib/cancel/isCancel.js
new file mode 100644
index 0000000..a444a12
--- /dev/null
+++ b/.output/server/node_modules/axios/lib/cancel/isCancel.js
@@ -0,0 +1,5 @@
+'use strict';
+
+export default function isCancel(value) {
+ return !!(value && value.__CANCEL__);
+}
diff --git a/.output/server/node_modules/axios/lib/core/Axios.js b/.output/server/node_modules/axios/lib/core/Axios.js
new file mode 100644
index 0000000..465d765
--- /dev/null
+++ b/.output/server/node_modules/axios/lib/core/Axios.js
@@ -0,0 +1,201 @@
+'use strict';
+
+import utils from './../utils.js';
+import buildURL from '../helpers/buildURL.js';
+import InterceptorManager from './InterceptorManager.js';
+import dispatchRequest from './dispatchRequest.js';
+import mergeConfig from './mergeConfig.js';
+import buildFullPath from './buildFullPath.js';
+import validator from '../helpers/validator.js';
+import AxiosHeaders from './AxiosHeaders.js';
+
+const validators = validator.validators;
+
+/**
+ * Create a new instance of Axios
+ *
+ * @param {Object} instanceConfig The default config for the instance
+ *
+ * @return {Axios} A new instance of Axios
+ */
+class Axios {
+ constructor(instanceConfig) {
+ this.defaults = instanceConfig;
+ this.interceptors = {
+ request: new InterceptorManager(),
+ response: new InterceptorManager()
+ };
+ }
+
+ /**
+ * Dispatch a request
+ *
+ * @param {String|Object} configOrUrl The config specific for this request (merged with this.defaults)
+ * @param {?Object} config
+ *
+ * @returns {Promise} The Promise to be fulfilled
+ */
+ request(configOrUrl, config) {
+ /*eslint no-param-reassign:0*/
+ // Allow for axios('example/url'[, config]) a la fetch API
+ if (typeof configOrUrl === 'string') {
+ config = config || {};
+ config.url = configOrUrl;
+ } else {
+ config = configOrUrl || {};
+ }
+
+ config = mergeConfig(this.defaults, config);
+
+ const {transitional, paramsSerializer, headers} = config;
+
+ if (transitional !== undefined) {
+ validator.assertOptions(transitional, {
+ silentJSONParsing: validators.transitional(validators.boolean),
+ forcedJSONParsing: validators.transitional(validators.boolean),
+ clarifyTimeoutError: validators.transitional(validators.boolean)
+ }, false);
+ }
+
+ if (paramsSerializer != null) {
+ if (utils.isFunction(paramsSerializer)) {
+ config.paramsSerializer = {
+ serialize: paramsSerializer
+ }
+ } else {
+ validator.assertOptions(paramsSerializer, {
+ encode: validators.function,
+ serialize: validators.function
+ }, true);
+ }
+ }
+
+ // Set config.method
+ config.method = (config.method || this.defaults.method || 'get').toLowerCase();
+
+ // Flatten headers
+ let contextHeaders = headers && utils.merge(
+ headers.common,
+ headers[config.method]
+ );
+
+ headers && utils.forEach(
+ ['delete', 'get', 'head', 'post', 'put', 'patch', 'common'],
+ (method) => {
+ delete headers[method];
+ }
+ );
+
+ config.headers = AxiosHeaders.concat(contextHeaders, headers);
+
+ // filter out skipped interceptors
+ const requestInterceptorChain = [];
+ let synchronousRequestInterceptors = true;
+ this.interceptors.request.forEach(function unshiftRequestInterceptors(interceptor) {
+ if (typeof interceptor.runWhen === 'function' && interceptor.runWhen(config) === false) {
+ return;
+ }
+
+ synchronousRequestInterceptors = synchronousRequestInterceptors && interceptor.synchronous;
+
+ requestInterceptorChain.unshift(interceptor.fulfilled, interceptor.rejected);
+ });
+
+ const responseInterceptorChain = [];
+ this.interceptors.response.forEach(function pushResponseInterceptors(interceptor) {
+ responseInterceptorChain.push(interceptor.fulfilled, interceptor.rejected);
+ });
+
+ let promise;
+ let i = 0;
+ let len;
+
+ if (!synchronousRequestInterceptors) {
+ const chain = [dispatchRequest.bind(this), undefined];
+ chain.unshift.apply(chain, requestInterceptorChain);
+ chain.push.apply(chain, responseInterceptorChain);
+ len = chain.length;
+
+ promise = Promise.resolve(config);
+
+ while (i < len) {
+ promise = promise.then(chain[i++], chain[i++]);
+ }
+
+ return promise;
+ }
+
+ len = requestInterceptorChain.length;
+
+ let newConfig = config;
+
+ i = 0;
+
+ while (i < len) {
+ const onFulfilled = requestInterceptorChain[i++];
+ const onRejected = requestInterceptorChain[i++];
+ try {
+ newConfig = onFulfilled(newConfig);
+ } catch (error) {
+ onRejected.call(this, error);
+ break;
+ }
+ }
+
+ try {
+ promise = dispatchRequest.call(this, newConfig);
+ } catch (error) {
+ return Promise.reject(error);
+ }
+
+ i = 0;
+ len = responseInterceptorChain.length;
+
+ while (i < len) {
+ promise = promise.then(responseInterceptorChain[i++], responseInterceptorChain[i++]);
+ }
+
+ return promise;
+ }
+
+ getUri(config) {
+ config = mergeConfig(this.defaults, config);
+ const fullPath = buildFullPath(config.baseURL, config.url);
+ return buildURL(fullPath, config.params, config.paramsSerializer);
+ }
+}
+
+// Provide aliases for supported request methods
+utils.forEach(['delete', 'get', 'head', 'options'], function forEachMethodNoData(method) {
+ /*eslint func-names:0*/
+ Axios.prototype[method] = function(url, config) {
+ return this.request(mergeConfig(config || {}, {
+ method,
+ url,
+ data: (config || {}).data
+ }));
+ };
+});
+
+utils.forEach(['post', 'put', 'patch'], function forEachMethodWithData(method) {
+ /*eslint func-names:0*/
+
+ function generateHTTPMethod(isForm) {
+ return function httpMethod(url, data, config) {
+ return this.request(mergeConfig(config || {}, {
+ method,
+ headers: isForm ? {
+ 'Content-Type': 'multipart/form-data'
+ } : {},
+ url,
+ data
+ }));
+ };
+ }
+
+ Axios.prototype[method] = generateHTTPMethod();
+
+ Axios.prototype[method + 'Form'] = generateHTTPMethod(true);
+});
+
+export default Axios;
diff --git a/.output/server/node_modules/axios/lib/core/AxiosError.js b/.output/server/node_modules/axios/lib/core/AxiosError.js
new file mode 100644
index 0000000..7141a8c
--- /dev/null
+++ b/.output/server/node_modules/axios/lib/core/AxiosError.js
@@ -0,0 +1,100 @@
+'use strict';
+
+import utils from '../utils.js';
+
+/**
+ * Create an Error with the specified message, config, error code, request and response.
+ *
+ * @param {string} message The error message.
+ * @param {string} [code] The error code (for example, 'ECONNABORTED').
+ * @param {Object} [config] The config.
+ * @param {Object} [request] The request.
+ * @param {Object} [response] The response.
+ *
+ * @returns {Error} The created error.
+ */
+function AxiosError(message, code, config, request, response) {
+ Error.call(this);
+
+ if (Error.captureStackTrace) {
+ Error.captureStackTrace(this, this.constructor);
+ } else {
+ this.stack = (new Error()).stack;
+ }
+
+ this.message = message;
+ this.name = 'AxiosError';
+ code && (this.code = code);
+ config && (this.config = config);
+ request && (this.request = request);
+ response && (this.response = response);
+}
+
+utils.inherits(AxiosError, Error, {
+ toJSON: function toJSON() {
+ return {
+ // Standard
+ message: this.message,
+ name: this.name,
+ // Microsoft
+ description: this.description,
+ number: this.number,
+ // Mozilla
+ fileName: this.fileName,
+ lineNumber: this.lineNumber,
+ columnNumber: this.columnNumber,
+ stack: this.stack,
+ // Axios
+ config: utils.toJSONObject(this.config),
+ code: this.code,
+ status: this.response && this.response.status ? this.response.status : null
+ };
+ }
+});
+
+const prototype = AxiosError.prototype;
+const descriptors = {};
+
+[
+ 'ERR_BAD_OPTION_VALUE',
+ 'ERR_BAD_OPTION',
+ 'ECONNABORTED',
+ 'ETIMEDOUT',
+ 'ERR_NETWORK',
+ 'ERR_FR_TOO_MANY_REDIRECTS',
+ 'ERR_DEPRECATED',
+ 'ERR_BAD_RESPONSE',
+ 'ERR_BAD_REQUEST',
+ 'ERR_CANCELED',
+ 'ERR_NOT_SUPPORT',
+ 'ERR_INVALID_URL'
+// eslint-disable-next-line func-names
+].forEach(code => {
+ descriptors[code] = {value: code};
+});
+
+Object.defineProperties(AxiosError, descriptors);
+Object.defineProperty(prototype, 'isAxiosError', {value: true});
+
+// eslint-disable-next-line func-names
+AxiosError.from = (error, code, config, request, response, customProps) => {
+ const axiosError = Object.create(prototype);
+
+ utils.toFlatObject(error, axiosError, function filter(obj) {
+ return obj !== Error.prototype;
+ }, prop => {
+ return prop !== 'isAxiosError';
+ });
+
+ AxiosError.call(axiosError, error.message, code, config, request, response);
+
+ axiosError.cause = error;
+
+ axiosError.name = error.name;
+
+ customProps && Object.assign(axiosError, customProps);
+
+ return axiosError;
+};
+
+export default AxiosError;
diff --git a/.output/server/node_modules/axios/lib/core/AxiosHeaders.js b/.output/server/node_modules/axios/lib/core/AxiosHeaders.js
new file mode 100644
index 0000000..558ad8f
--- /dev/null
+++ b/.output/server/node_modules/axios/lib/core/AxiosHeaders.js
@@ -0,0 +1,298 @@
+'use strict';
+
+import utils from '../utils.js';
+import parseHeaders from '../helpers/parseHeaders.js';
+
+const $internals = Symbol('internals');
+
+function normalizeHeader(header) {
+ return header && String(header).trim().toLowerCase();
+}
+
+function normalizeValue(value) {
+ if (value === false || value == null) {
+ return value;
+ }
+
+ return utils.isArray(value) ? value.map(normalizeValue) : String(value);
+}
+
+function parseTokens(str) {
+ const tokens = Object.create(null);
+ const tokensRE = /([^\s,;=]+)\s*(?:=\s*([^,;]+))?/g;
+ let match;
+
+ while ((match = tokensRE.exec(str))) {
+ tokens[match[1]] = match[2];
+ }
+
+ return tokens;
+}
+
+const isValidHeaderName = (str) => /^[-_a-zA-Z0-9^`|~,!#$%&'*+.]+$/.test(str.trim());
+
+function matchHeaderValue(context, value, header, filter, isHeaderNameFilter) {
+ if (utils.isFunction(filter)) {
+ return filter.call(this, value, header);
+ }
+
+ if (isHeaderNameFilter) {
+ value = header;
+ }
+
+ if (!utils.isString(value)) return;
+
+ if (utils.isString(filter)) {
+ return value.indexOf(filter) !== -1;
+ }
+
+ if (utils.isRegExp(filter)) {
+ return filter.test(value);
+ }
+}
+
+function formatHeader(header) {
+ return header.trim()
+ .toLowerCase().replace(/([a-z\d])(\w*)/g, (w, char, str) => {
+ return char.toUpperCase() + str;
+ });
+}
+
+function buildAccessors(obj, header) {
+ const accessorName = utils.toCamelCase(' ' + header);
+
+ ['get', 'set', 'has'].forEach(methodName => {
+ Object.defineProperty(obj, methodName + accessorName, {
+ value: function(arg1, arg2, arg3) {
+ return this[methodName].call(this, header, arg1, arg2, arg3);
+ },
+ configurable: true
+ });
+ });
+}
+
+class AxiosHeaders {
+ constructor(headers) {
+ headers && this.set(headers);
+ }
+
+ set(header, valueOrRewrite, rewrite) {
+ const self = this;
+
+ function setHeader(_value, _header, _rewrite) {
+ const lHeader = normalizeHeader(_header);
+
+ if (!lHeader) {
+ throw new Error('header name must be a non-empty string');
+ }
+
+ const key = utils.findKey(self, lHeader);
+
+ if(!key || self[key] === undefined || _rewrite === true || (_rewrite === undefined && self[key] !== false)) {
+ self[key || _header] = normalizeValue(_value);
+ }
+ }
+
+ const setHeaders = (headers, _rewrite) =>
+ utils.forEach(headers, (_value, _header) => setHeader(_value, _header, _rewrite));
+
+ if (utils.isPlainObject(header) || header instanceof this.constructor) {
+ setHeaders(header, valueOrRewrite)
+ } else if(utils.isString(header) && (header = header.trim()) && !isValidHeaderName(header)) {
+ setHeaders(parseHeaders(header), valueOrRewrite);
+ } else {
+ header != null && setHeader(valueOrRewrite, header, rewrite);
+ }
+
+ return this;
+ }
+
+ get(header, parser) {
+ header = normalizeHeader(header);
+
+ if (header) {
+ const key = utils.findKey(this, header);
+
+ if (key) {
+ const value = this[key];
+
+ if (!parser) {
+ return value;
+ }
+
+ if (parser === true) {
+ return parseTokens(value);
+ }
+
+ if (utils.isFunction(parser)) {
+ return parser.call(this, value, key);
+ }
+
+ if (utils.isRegExp(parser)) {
+ return parser.exec(value);
+ }
+
+ throw new TypeError('parser must be boolean|regexp|function');
+ }
+ }
+ }
+
+ has(header, matcher) {
+ header = normalizeHeader(header);
+
+ if (header) {
+ const key = utils.findKey(this, header);
+
+ return !!(key && this[key] !== undefined && (!matcher || matchHeaderValue(this, this[key], key, matcher)));
+ }
+
+ return false;
+ }
+
+ delete(header, matcher) {
+ const self = this;
+ let deleted = false;
+
+ function deleteHeader(_header) {
+ _header = normalizeHeader(_header);
+
+ if (_header) {
+ const key = utils.findKey(self, _header);
+
+ if (key && (!matcher || matchHeaderValue(self, self[key], key, matcher))) {
+ delete self[key];
+
+ deleted = true;
+ }
+ }
+ }
+
+ if (utils.isArray(header)) {
+ header.forEach(deleteHeader);
+ } else {
+ deleteHeader(header);
+ }
+
+ return deleted;
+ }
+
+ clear(matcher) {
+ const keys = Object.keys(this);
+ let i = keys.length;
+ let deleted = false;
+
+ while (i--) {
+ const key = keys[i];
+ if(!matcher || matchHeaderValue(this, this[key], key, matcher, true)) {
+ delete this[key];
+ deleted = true;
+ }
+ }
+
+ return deleted;
+ }
+
+ normalize(format) {
+ const self = this;
+ const headers = {};
+
+ utils.forEach(this, (value, header) => {
+ const key = utils.findKey(headers, header);
+
+ if (key) {
+ self[key] = normalizeValue(value);
+ delete self[header];
+ return;
+ }
+
+ const normalized = format ? formatHeader(header) : String(header).trim();
+
+ if (normalized !== header) {
+ delete self[header];
+ }
+
+ self[normalized] = normalizeValue(value);
+
+ headers[normalized] = true;
+ });
+
+ return this;
+ }
+
+ concat(...targets) {
+ return this.constructor.concat(this, ...targets);
+ }
+
+ toJSON(asStrings) {
+ const obj = Object.create(null);
+
+ utils.forEach(this, (value, header) => {
+ value != null && value !== false && (obj[header] = asStrings && utils.isArray(value) ? value.join(', ') : value);
+ });
+
+ return obj;
+ }
+
+ [Symbol.iterator]() {
+ return Object.entries(this.toJSON())[Symbol.iterator]();
+ }
+
+ toString() {
+ return Object.entries(this.toJSON()).map(([header, value]) => header + ': ' + value).join('\n');
+ }
+
+ get [Symbol.toStringTag]() {
+ return 'AxiosHeaders';
+ }
+
+ static from(thing) {
+ return thing instanceof this ? thing : new this(thing);
+ }
+
+ static concat(first, ...targets) {
+ const computed = new this(first);
+
+ targets.forEach((target) => computed.set(target));
+
+ return computed;
+ }
+
+ static accessor(header) {
+ const internals = this[$internals] = (this[$internals] = {
+ accessors: {}
+ });
+
+ const accessors = internals.accessors;
+ const prototype = this.prototype;
+
+ function defineAccessor(_header) {
+ const lHeader = normalizeHeader(_header);
+
+ if (!accessors[lHeader]) {
+ buildAccessors(prototype, _header);
+ accessors[lHeader] = true;
+ }
+ }
+
+ utils.isArray(header) ? header.forEach(defineAccessor) : defineAccessor(header);
+
+ return this;
+ }
+}
+
+AxiosHeaders.accessor(['Content-Type', 'Content-Length', 'Accept', 'Accept-Encoding', 'User-Agent', 'Authorization']);
+
+// reserved names hotfix
+utils.reduceDescriptors(AxiosHeaders.prototype, ({value}, key) => {
+ let mapped = key[0].toUpperCase() + key.slice(1); // map `set` => `Set`
+ return {
+ get: () => value,
+ set(headerValue) {
+ this[mapped] = headerValue;
+ }
+ }
+});
+
+utils.freezeMethods(AxiosHeaders);
+
+export default AxiosHeaders;
diff --git a/.output/server/node_modules/axios/lib/core/InterceptorManager.js b/.output/server/node_modules/axios/lib/core/InterceptorManager.js
new file mode 100644
index 0000000..6657a9d
--- /dev/null
+++ b/.output/server/node_modules/axios/lib/core/InterceptorManager.js
@@ -0,0 +1,71 @@
+'use strict';
+
+import utils from './../utils.js';
+
+class InterceptorManager {
+ constructor() {
+ this.handlers = [];
+ }
+
+ /**
+ * Add a new interceptor to the stack
+ *
+ * @param {Function} fulfilled The function to handle `then` for a `Promise`
+ * @param {Function} rejected The function to handle `reject` for a `Promise`
+ *
+ * @return {Number} An ID used to remove interceptor later
+ */
+ use(fulfilled, rejected, options) {
+ this.handlers.push({
+ fulfilled,
+ rejected,
+ synchronous: options ? options.synchronous : false,
+ runWhen: options ? options.runWhen : null
+ });
+ return this.handlers.length - 1;
+ }
+
+ /**
+ * Remove an interceptor from the stack
+ *
+ * @param {Number} id The ID that was returned by `use`
+ *
+ * @returns {Boolean} `true` if the interceptor was removed, `false` otherwise
+ */
+ eject(id) {
+ if (this.handlers[id]) {
+ this.handlers[id] = null;
+ }
+ }
+
+ /**
+ * Clear all interceptors from the stack
+ *
+ * @returns {void}
+ */
+ clear() {
+ if (this.handlers) {
+ this.handlers = [];
+ }
+ }
+
+ /**
+ * Iterate over all the registered interceptors
+ *
+ * This method is particularly useful for skipping over any
+ * interceptors that may have become `null` calling `eject`.
+ *
+ * @param {Function} fn The function to call for each interceptor
+ *
+ * @returns {void}
+ */
+ forEach(fn) {
+ utils.forEach(this.handlers, function forEachHandler(h) {
+ if (h !== null) {
+ fn(h);
+ }
+ });
+ }
+}
+
+export default InterceptorManager;
diff --git a/.output/server/node_modules/axios/lib/core/buildFullPath.js b/.output/server/node_modules/axios/lib/core/buildFullPath.js
new file mode 100644
index 0000000..b60927c
--- /dev/null
+++ b/.output/server/node_modules/axios/lib/core/buildFullPath.js
@@ -0,0 +1,21 @@
+'use strict';
+
+import isAbsoluteURL from '../helpers/isAbsoluteURL.js';
+import combineURLs from '../helpers/combineURLs.js';
+
+/**
+ * Creates a new URL by combining the baseURL with the requestedURL,
+ * only when the requestedURL is not already an absolute URL.
+ * If the requestURL is absolute, this function returns the requestedURL untouched.
+ *
+ * @param {string} baseURL The base URL
+ * @param {string} requestedURL Absolute or relative URL to combine
+ *
+ * @returns {string} The combined full path
+ */
+export default function buildFullPath(baseURL, requestedURL) {
+ if (baseURL && !isAbsoluteURL(requestedURL)) {
+ return combineURLs(baseURL, requestedURL);
+ }
+ return requestedURL;
+}
diff --git a/.output/server/node_modules/axios/lib/core/dispatchRequest.js b/.output/server/node_modules/axios/lib/core/dispatchRequest.js
new file mode 100644
index 0000000..9e306aa
--- /dev/null
+++ b/.output/server/node_modules/axios/lib/core/dispatchRequest.js
@@ -0,0 +1,81 @@
+'use strict';
+
+import transformData from './transformData.js';
+import isCancel from '../cancel/isCancel.js';
+import defaults from '../defaults/index.js';
+import CanceledError from '../cancel/CanceledError.js';
+import AxiosHeaders from '../core/AxiosHeaders.js';
+import adapters from "../adapters/adapters.js";
+
+/**
+ * Throws a `CanceledError` if cancellation has been requested.
+ *
+ * @param {Object} config The config that is to be used for the request
+ *
+ * @returns {void}
+ */
+function throwIfCancellationRequested(config) {
+ if (config.cancelToken) {
+ config.cancelToken.throwIfRequested();
+ }
+
+ if (config.signal && config.signal.aborted) {
+ throw new CanceledError(null, config);
+ }
+}
+
+/**
+ * Dispatch a request to the server using the configured adapter.
+ *
+ * @param {object} config The config that is to be used for the request
+ *
+ * @returns {Promise} The Promise to be fulfilled
+ */
+export default function dispatchRequest(config) {
+ throwIfCancellationRequested(config);
+
+ config.headers = AxiosHeaders.from(config.headers);
+
+ // Transform request data
+ config.data = transformData.call(
+ config,
+ config.transformRequest
+ );
+
+ if (['post', 'put', 'patch'].indexOf(config.method) !== -1) {
+ config.headers.setContentType('application/x-www-form-urlencoded', false);
+ }
+
+ const adapter = adapters.getAdapter(config.adapter || defaults.adapter);
+
+ return adapter(config).then(function onAdapterResolution(response) {
+ throwIfCancellationRequested(config);
+
+ // Transform response data
+ response.data = transformData.call(
+ config,
+ config.transformResponse,
+ response
+ );
+
+ response.headers = AxiosHeaders.from(response.headers);
+
+ return response;
+ }, function onAdapterRejection(reason) {
+ if (!isCancel(reason)) {
+ throwIfCancellationRequested(config);
+
+ // Transform response data
+ if (reason && reason.response) {
+ reason.response.data = transformData.call(
+ config,
+ config.transformResponse,
+ reason.response
+ );
+ reason.response.headers = AxiosHeaders.from(reason.response.headers);
+ }
+ }
+
+ return Promise.reject(reason);
+ });
+}
diff --git a/.output/server/node_modules/axios/lib/core/mergeConfig.js b/.output/server/node_modules/axios/lib/core/mergeConfig.js
new file mode 100644
index 0000000..bbbf96d
--- /dev/null
+++ b/.output/server/node_modules/axios/lib/core/mergeConfig.js
@@ -0,0 +1,106 @@
+'use strict';
+
+import utils from '../utils.js';
+import AxiosHeaders from "./AxiosHeaders.js";
+
+const headersToObject = (thing) => thing instanceof AxiosHeaders ? thing.toJSON() : thing;
+
+/**
+ * Config-specific merge-function which creates a new config-object
+ * by merging two configuration objects together.
+ *
+ * @param {Object} config1
+ * @param {Object} config2
+ *
+ * @returns {Object} New object resulting from merging config2 to config1
+ */
+export default function mergeConfig(config1, config2) {
+ // eslint-disable-next-line no-param-reassign
+ config2 = config2 || {};
+ const config = {};
+
+ function getMergedValue(target, source, caseless) {
+ if (utils.isPlainObject(target) && utils.isPlainObject(source)) {
+ return utils.merge.call({caseless}, target, source);
+ } else if (utils.isPlainObject(source)) {
+ return utils.merge({}, source);
+ } else if (utils.isArray(source)) {
+ return source.slice();
+ }
+ return source;
+ }
+
+ // eslint-disable-next-line consistent-return
+ function mergeDeepProperties(a, b, caseless) {
+ if (!utils.isUndefined(b)) {
+ return getMergedValue(a, b, caseless);
+ } else if (!utils.isUndefined(a)) {
+ return getMergedValue(undefined, a, caseless);
+ }
+ }
+
+ // eslint-disable-next-line consistent-return
+ function valueFromConfig2(a, b) {
+ if (!utils.isUndefined(b)) {
+ return getMergedValue(undefined, b);
+ }
+ }
+
+ // eslint-disable-next-line consistent-return
+ function defaultToConfig2(a, b) {
+ if (!utils.isUndefined(b)) {
+ return getMergedValue(undefined, b);
+ } else if (!utils.isUndefined(a)) {
+ return getMergedValue(undefined, a);
+ }
+ }
+
+ // eslint-disable-next-line consistent-return
+ function mergeDirectKeys(a, b, prop) {
+ if (prop in config2) {
+ return getMergedValue(a, b);
+ } else if (prop in config1) {
+ return getMergedValue(undefined, a);
+ }
+ }
+
+ const mergeMap = {
+ url: valueFromConfig2,
+ method: valueFromConfig2,
+ data: valueFromConfig2,
+ baseURL: defaultToConfig2,
+ transformRequest: defaultToConfig2,
+ transformResponse: defaultToConfig2,
+ paramsSerializer: defaultToConfig2,
+ timeout: defaultToConfig2,
+ timeoutMessage: defaultToConfig2,
+ withCredentials: defaultToConfig2,
+ withXSRFToken: defaultToConfig2,
+ adapter: defaultToConfig2,
+ responseType: defaultToConfig2,
+ xsrfCookieName: defaultToConfig2,
+ xsrfHeaderName: defaultToConfig2,
+ onUploadProgress: defaultToConfig2,
+ onDownloadProgress: defaultToConfig2,
+ decompress: defaultToConfig2,
+ maxContentLength: defaultToConfig2,
+ maxBodyLength: defaultToConfig2,
+ beforeRedirect: defaultToConfig2,
+ transport: defaultToConfig2,
+ httpAgent: defaultToConfig2,
+ httpsAgent: defaultToConfig2,
+ cancelToken: defaultToConfig2,
+ socketPath: defaultToConfig2,
+ responseEncoding: defaultToConfig2,
+ validateStatus: mergeDirectKeys,
+ headers: (a, b) => mergeDeepProperties(headersToObject(a), headersToObject(b), true)
+ };
+
+ utils.forEach(Object.keys(Object.assign({}, config1, config2)), function computeConfigValue(prop) {
+ const merge = mergeMap[prop] || mergeDeepProperties;
+ const configValue = merge(config1[prop], config2[prop], prop);
+ (utils.isUndefined(configValue) && merge !== mergeDirectKeys) || (config[prop] = configValue);
+ });
+
+ return config;
+}
diff --git a/.output/server/node_modules/axios/lib/core/settle.js b/.output/server/node_modules/axios/lib/core/settle.js
new file mode 100644
index 0000000..ac905c4
--- /dev/null
+++ b/.output/server/node_modules/axios/lib/core/settle.js
@@ -0,0 +1,27 @@
+'use strict';
+
+import AxiosError from './AxiosError.js';
+
+/**
+ * Resolve or reject a Promise based on response status.
+ *
+ * @param {Function} resolve A function that resolves the promise.
+ * @param {Function} reject A function that rejects the promise.
+ * @param {object} response The response.
+ *
+ * @returns {object} The response.
+ */
+export default function settle(resolve, reject, response) {
+ const validateStatus = response.config.validateStatus;
+ if (!response.status || !validateStatus || validateStatus(response.status)) {
+ resolve(response);
+ } else {
+ reject(new AxiosError(
+ 'Request failed with status code ' + response.status,
+ [AxiosError.ERR_BAD_REQUEST, AxiosError.ERR_BAD_RESPONSE][Math.floor(response.status / 100) - 4],
+ response.config,
+ response.request,
+ response
+ ));
+ }
+}
diff --git a/.output/server/node_modules/axios/lib/core/transformData.js b/.output/server/node_modules/axios/lib/core/transformData.js
new file mode 100644
index 0000000..eeb5a8a
--- /dev/null
+++ b/.output/server/node_modules/axios/lib/core/transformData.js
@@ -0,0 +1,28 @@
+'use strict';
+
+import utils from './../utils.js';
+import defaults from '../defaults/index.js';
+import AxiosHeaders from '../core/AxiosHeaders.js';
+
+/**
+ * Transform the data for a request or a response
+ *
+ * @param {Array|Function} fns A single function or Array of functions
+ * @param {?Object} response The response object
+ *
+ * @returns {*} The resulting transformed data
+ */
+export default function transformData(fns, response) {
+ const config = this || defaults;
+ const context = response || config;
+ const headers = AxiosHeaders.from(context.headers);
+ let data = context.data;
+
+ utils.forEach(fns, function transform(fn) {
+ data = fn.call(config, data, headers.normalize(), response ? response.status : undefined);
+ });
+
+ headers.normalize();
+
+ return data;
+}
diff --git a/.output/server/node_modules/axios/lib/defaults/index.js b/.output/server/node_modules/axios/lib/defaults/index.js
new file mode 100644
index 0000000..a883bfe
--- /dev/null
+++ b/.output/server/node_modules/axios/lib/defaults/index.js
@@ -0,0 +1,159 @@
+'use strict';
+
+import utils from '../utils.js';
+import AxiosError from '../core/AxiosError.js';
+import transitionalDefaults from './transitional.js';
+import toFormData from '../helpers/toFormData.js';
+import toURLEncodedForm from '../helpers/toURLEncodedForm.js';
+import platform from '../platform/index.js';
+import formDataToJSON from '../helpers/formDataToJSON.js';
+
+/**
+ * It takes a string, tries to parse it, and if it fails, it returns the stringified version
+ * of the input
+ *
+ * @param {any} rawValue - The value to be stringified.
+ * @param {Function} parser - A function that parses a string into a JavaScript object.
+ * @param {Function} encoder - A function that takes a value and returns a string.
+ *
+ * @returns {string} A stringified version of the rawValue.
+ */
+function stringifySafely(rawValue, parser, encoder) {
+ if (utils.isString(rawValue)) {
+ try {
+ (parser || JSON.parse)(rawValue);
+ return utils.trim(rawValue);
+ } catch (e) {
+ if (e.name !== 'SyntaxError') {
+ throw e;
+ }
+ }
+ }
+
+ return (encoder || JSON.stringify)(rawValue);
+}
+
+const defaults = {
+
+ transitional: transitionalDefaults,
+
+ adapter: ['xhr', 'http'],
+
+ transformRequest: [function transformRequest(data, headers) {
+ const contentType = headers.getContentType() || '';
+ const hasJSONContentType = contentType.indexOf('application/json') > -1;
+ const isObjectPayload = utils.isObject(data);
+
+ if (isObjectPayload && utils.isHTMLForm(data)) {
+ data = new FormData(data);
+ }
+
+ const isFormData = utils.isFormData(data);
+
+ if (isFormData) {
+ if (!hasJSONContentType) {
+ return data;
+ }
+ return hasJSONContentType ? JSON.stringify(formDataToJSON(data)) : data;
+ }
+
+ if (utils.isArrayBuffer(data) ||
+ utils.isBuffer(data) ||
+ utils.isStream(data) ||
+ utils.isFile(data) ||
+ utils.isBlob(data)
+ ) {
+ return data;
+ }
+ if (utils.isArrayBufferView(data)) {
+ return data.buffer;
+ }
+ if (utils.isURLSearchParams(data)) {
+ headers.setContentType('application/x-www-form-urlencoded;charset=utf-8', false);
+ return data.toString();
+ }
+
+ let isFileList;
+
+ if (isObjectPayload) {
+ if (contentType.indexOf('application/x-www-form-urlencoded') > -1) {
+ return toURLEncodedForm(data, this.formSerializer).toString();
+ }
+
+ if ((isFileList = utils.isFileList(data)) || contentType.indexOf('multipart/form-data') > -1) {
+ const _FormData = this.env && this.env.FormData;
+
+ return toFormData(
+ isFileList ? {'files[]': data} : data,
+ _FormData && new _FormData(),
+ this.formSerializer
+ );
+ }
+ }
+
+ if (isObjectPayload || hasJSONContentType ) {
+ headers.setContentType('application/json', false);
+ return stringifySafely(data);
+ }
+
+ return data;
+ }],
+
+ transformResponse: [function transformResponse(data) {
+ const transitional = this.transitional || defaults.transitional;
+ const forcedJSONParsing = transitional && transitional.forcedJSONParsing;
+ const JSONRequested = this.responseType === 'json';
+
+ if (data && utils.isString(data) && ((forcedJSONParsing && !this.responseType) || JSONRequested)) {
+ const silentJSONParsing = transitional && transitional.silentJSONParsing;
+ const strictJSONParsing = !silentJSONParsing && JSONRequested;
+
+ try {
+ return JSON.parse(data);
+ } catch (e) {
+ if (strictJSONParsing) {
+ if (e.name === 'SyntaxError') {
+ throw AxiosError.from(e, AxiosError.ERR_BAD_RESPONSE, this, null, this.response);
+ }
+ throw e;
+ }
+ }
+ }
+
+ return data;
+ }],
+
+ /**
+ * A timeout in milliseconds to abort a request. If set to 0 (default) a
+ * timeout is not created.
+ */
+ timeout: 0,
+
+ xsrfCookieName: 'XSRF-TOKEN',
+ xsrfHeaderName: 'X-XSRF-TOKEN',
+
+ maxContentLength: -1,
+ maxBodyLength: -1,
+
+ env: {
+ FormData: platform.classes.FormData,
+ Blob: platform.classes.Blob
+ },
+
+ validateStatus: function validateStatus(status) {
+ return status >= 200 && status < 300;
+ },
+
+ headers: {
+ common: {
+ 'Accept': 'application/json, text/plain, */*',
+ 'Content-Type': undefined
+ }
+ }
+};
+
+utils.forEach(['delete', 'get', 'head', 'post', 'put', 'patch'], (method) => {
+ defaults.headers[method] = {};
+});
+
+export default defaults;
diff --git a/.output/server/node_modules/axios/lib/defaults/transitional.js b/.output/server/node_modules/axios/lib/defaults/transitional.js
new file mode 100644
index 0000000..f891331
--- /dev/null
+++ b/.output/server/node_modules/axios/lib/defaults/transitional.js
@@ -0,0 +1,7 @@
+'use strict';
+
+export default {
+ silentJSONParsing: true,
+ forcedJSONParsing: true,
+ clarifyTimeoutError: false
+};
diff --git a/.output/server/node_modules/axios/lib/env/data.js b/.output/server/node_modules/axios/lib/env/data.js
new file mode 100644
index 0000000..143f506
--- /dev/null
+++ b/.output/server/node_modules/axios/lib/env/data.js
@@ -0,0 +1 @@
+export const VERSION = "1.6.2";
\ No newline at end of file
diff --git a/.output/server/node_modules/axios/lib/helpers/AxiosTransformStream.js b/.output/server/node_modules/axios/lib/helpers/AxiosTransformStream.js
new file mode 100644
index 0000000..8e8c6d4
--- /dev/null
+++ b/.output/server/node_modules/axios/lib/helpers/AxiosTransformStream.js
@@ -0,0 +1,191 @@
+'use strict';
+
+import stream from 'stream';
+import utils from '../utils.js';
+import throttle from './throttle.js';
+import speedometer from './speedometer.js';
+
+const kInternals = Symbol('internals');
+
+class AxiosTransformStream extends stream.Transform{
+ constructor(options) {
+ options = utils.toFlatObject(options, {
+ maxRate: 0,
+ chunkSize: 64 * 1024,
+ minChunkSize: 100,
+ timeWindow: 500,
+ ticksRate: 2,
+ samplesCount: 15
+ }, null, (prop, source) => {
+ return !utils.isUndefined(source[prop]);
+ });
+
+ super({
+ readableHighWaterMark: options.chunkSize
+ });
+
+ const self = this;
+
+ const internals = this[kInternals] = {
+ length: options.length,
+ timeWindow: options.timeWindow,
+ ticksRate: options.ticksRate,
+ chunkSize: options.chunkSize,
+ maxRate: options.maxRate,
+ minChunkSize: options.minChunkSize,
+ bytesSeen: 0,
+ isCaptured: false,
+ notifiedBytesLoaded: 0,
+ ts: Date.now(),
+ bytes: 0,
+ onReadCallback: null
+ };
+
+ const _speedometer = speedometer(internals.ticksRate * options.samplesCount, internals.timeWindow);
+
+ this.on('newListener', event => {
+ if (event === 'progress') {
+ if (!internals.isCaptured) {
+ internals.isCaptured = true;
+ }
+ }
+ });
+
+ let bytesNotified = 0;
+
+ internals.updateProgress = throttle(function throttledHandler() {
+ const totalBytes = internals.length;
+ const bytesTransferred = internals.bytesSeen;
+ const progressBytes = bytesTransferred - bytesNotified;
+ if (!progressBytes || self.destroyed) return;
+
+ const rate = _speedometer(progressBytes);
+
+ bytesNotified = bytesTransferred;
+
+ process.nextTick(() => {
+ self.emit('progress', {
+ 'loaded': bytesTransferred,
+ 'total': totalBytes,
+ 'progress': totalBytes ? (bytesTransferred / totalBytes) : undefined,
+ 'bytes': progressBytes,
+ 'rate': rate ? rate : undefined,
+ 'estimated': rate && totalBytes && bytesTransferred <= totalBytes ?
+ (totalBytes - bytesTransferred) / rate : undefined
+ });
+ });
+ }, internals.ticksRate);
+
+ const onFinish = () => {
+ internals.updateProgress(true);
+ };
+
+ this.once('end', onFinish);
+ this.once('error', onFinish);
+ }
+
+ _read(size) {
+ const internals = this[kInternals];
+
+ if (internals.onReadCallback) {
+ internals.onReadCallback();
+ }
+
+ return super._read(size);
+ }
+
+ _transform(chunk, encoding, callback) {
+ const self = this;
+ const internals = this[kInternals];
+ const maxRate = internals.maxRate;
+
+ const readableHighWaterMark = this.readableHighWaterMark;
+
+ const timeWindow = internals.timeWindow;
+
+ const divider = 1000 / timeWindow;
+ const bytesThreshold = (maxRate / divider);
+ const minChunkSize = internals.minChunkSize !== false ? Math.max(internals.minChunkSize, bytesThreshold * 0.01) : 0;
+
+ function pushChunk(_chunk, _callback) {
+ const bytes = Buffer.byteLength(_chunk);
+ internals.bytesSeen += bytes;
+ internals.bytes += bytes;
+
+ if (internals.isCaptured) {
+ internals.updateProgress();
+ }
+
+ if (self.push(_chunk)) {
+ process.nextTick(_callback);
+ } else {
+ internals.onReadCallback = () => {
+ internals.onReadCallback = null;
+ process.nextTick(_callback);
+ };
+ }
+ }
+
+ const transformChunk = (_chunk, _callback) => {
+ const chunkSize = Buffer.byteLength(_chunk);
+ let chunkRemainder = null;
+ let maxChunkSize = readableHighWaterMark;
+ let bytesLeft;
+ let passed = 0;
+
+ if (maxRate) {
+ const now = Date.now();
+
+ if (!internals.ts || (passed = (now - internals.ts)) >= timeWindow) {
+ internals.ts = now;
+ bytesLeft = bytesThreshold - internals.bytes;
+ internals.bytes = bytesLeft < 0 ? -bytesLeft : 0;
+ passed = 0;
+ }
+
+ bytesLeft = bytesThreshold - internals.bytes;
+ }
+
+ if (maxRate) {
+ if (bytesLeft <= 0) {
+ // next time window
+ return setTimeout(() => {
+ _callback(null, _chunk);
+ }, timeWindow - passed);
+ }
+
+ if (bytesLeft < maxChunkSize) {
+ maxChunkSize = bytesLeft;
+ }
+ }
+
+ if (maxChunkSize && chunkSize > maxChunkSize && (chunkSize - maxChunkSize) > minChunkSize) {
+ chunkRemainder = _chunk.subarray(maxChunkSize);
+ _chunk = _chunk.subarray(0, maxChunkSize);
+ }
+
+ pushChunk(_chunk, chunkRemainder ? () => {
+ process.nextTick(_callback, null, chunkRemainder);
+ } : _callback);
+ };
+
+ transformChunk(chunk, function transformNextChunk(err, _chunk) {
+ if (err) {
+ return callback(err);
+ }
+
+ if (_chunk) {
+ transformChunk(_chunk, transformNextChunk);
+ } else {
+ callback(null);
+ }
+ });
+ }
+
+ setLength(length) {
+ this[kInternals].length = +length;
+ return this;
+ }
+}
+
+export default AxiosTransformStream;
diff --git a/.output/server/node_modules/axios/lib/helpers/AxiosURLSearchParams.js b/.output/server/node_modules/axios/lib/helpers/AxiosURLSearchParams.js
new file mode 100644
index 0000000..b9aa9f0
--- /dev/null
+++ b/.output/server/node_modules/axios/lib/helpers/AxiosURLSearchParams.js
@@ -0,0 +1,58 @@
+'use strict';
+
+import toFormData from './toFormData.js';
+
+/**
+ * It encodes a string by replacing all characters that are not in the unreserved set with
+ * their percent-encoded equivalents
+ *
+ * @param {string} str - The string to encode.
+ *
+ * @returns {string} The encoded string.
+ */
+function encode(str) {
+ const charMap = {
+ '!': '%21',
+ "'": '%27',
+ '(': '%28',
+ ')': '%29',
+ '~': '%7E',
+ '%20': '+',
+ '%00': '\x00'
+ };
+ return encodeURIComponent(str).replace(/[!'()~]|%20|%00/g, function replacer(match) {
+ return charMap[match];
+ });
+}
+
+/**
+ * It takes a params object and converts it to a FormData object
+ *
+ * @param {Object} params - The parameters to be converted to a FormData object.
+ * @param {Object} options - The options object passed to the Axios constructor.
+ *
+ * @returns {void}
+ */
+function AxiosURLSearchParams(params, options) {
+ this._pairs = [];
+
+ params && toFormData(params, this, options);
+}
+
+const prototype = AxiosURLSearchParams.prototype;
+
+prototype.append = function append(name, value) {
+ this._pairs.push([name, value]);
+};
+
+prototype.toString = function toString(encoder) {
+ const _encode = encoder ? function(value) {
+ return encoder.call(this, value, encode);
+ } : encode;
+
+ return this._pairs.map(function each(pair) {
+ return _encode(pair[0]) + '=' + _encode(pair[1]);
+ }, '').join('&');
+};
+
+export default AxiosURLSearchParams;
diff --git a/.output/server/node_modules/axios/lib/helpers/HttpStatusCode.js b/.output/server/node_modules/axios/lib/helpers/HttpStatusCode.js
new file mode 100644
index 0000000..b3e7adc
--- /dev/null
+++ b/.output/server/node_modules/axios/lib/helpers/HttpStatusCode.js
@@ -0,0 +1,71 @@
+const HttpStatusCode = {
+ Continue: 100,
+ SwitchingProtocols: 101,
+ Processing: 102,
+ EarlyHints: 103,
+ Ok: 200,
+ Created: 201,
+ Accepted: 202,
+ NonAuthoritativeInformation: 203,
+ NoContent: 204,
+ ResetContent: 205,
+ PartialContent: 206,
+ MultiStatus: 207,
+ AlreadyReported: 208,
+ ImUsed: 226,
+ MultipleChoices: 300,
+ MovedPermanently: 301,
+ Found: 302,
+ SeeOther: 303,
+ NotModified: 304,
+ UseProxy: 305,
+ Unused: 306,
+ TemporaryRedirect: 307,
+ PermanentRedirect: 308,
+ BadRequest: 400,
+ Unauthorized: 401,
+ PaymentRequired: 402,
+ Forbidden: 403,
+ NotFound: 404,
+ MethodNotAllowed: 405,
+ NotAcceptable: 406,
+ ProxyAuthenticationRequired: 407,
+ RequestTimeout: 408,
+ Conflict: 409,
+ Gone: 410,
+ LengthRequired: 411,
+ PreconditionFailed: 412,
+ PayloadTooLarge: 413,
+ UriTooLong: 414,
+ UnsupportedMediaType: 415,
+ RangeNotSatisfiable: 416,
+ ExpectationFailed: 417,
+ ImATeapot: 418,
+ MisdirectedRequest: 421,
+ UnprocessableEntity: 422,
+ Locked: 423,
+ FailedDependency: 424,
+ TooEarly: 425,
+ UpgradeRequired: 426,
+ PreconditionRequired: 428,
+ TooManyRequests: 429,
+ RequestHeaderFieldsTooLarge: 431,
+ UnavailableForLegalReasons: 451,
+ InternalServerError: 500,
+ NotImplemented: 501,
+ BadGateway: 502,
+ ServiceUnavailable: 503,
+ GatewayTimeout: 504,
+ HttpVersionNotSupported: 505,
+ VariantAlsoNegotiates: 506,
+ InsufficientStorage: 507,
+ LoopDetected: 508,
+ NotExtended: 510,
+ NetworkAuthenticationRequired: 511,
+};
+
+Object.entries(HttpStatusCode).forEach(([key, value]) => {
+ HttpStatusCode[value] = key;
+});
+
+export default HttpStatusCode;
diff --git a/.output/server/node_modules/axios/lib/helpers/ZlibHeaderTransformStream.js b/.output/server/node_modules/axios/lib/helpers/ZlibHeaderTransformStream.js
new file mode 100644
index 0000000..d1791f0
--- /dev/null
+++ b/.output/server/node_modules/axios/lib/helpers/ZlibHeaderTransformStream.js
@@ -0,0 +1,28 @@
+"use strict";
+
+import stream from "stream";
+
+class ZlibHeaderTransformStream extends stream.Transform {
+ __transform(chunk, encoding, callback) {
+ this.push(chunk);
+ callback();
+ }
+
+ _transform(chunk, encoding, callback) {
+ if (chunk.length !== 0) {
+ this._transform = this.__transform;
+
+ // Add Default Compression headers if no zlib headers are present
+ if (chunk[0] !== 120) { // Hex: 78
+ const header = Buffer.alloc(2);
+ header[0] = 120; // Hex: 78
+ header[1] = 156; // Hex: 9C
+ this.push(header, encoding);
+ }
+ }
+
+ this.__transform(chunk, encoding, callback);
+ }
+}
+
+export default ZlibHeaderTransformStream;
diff --git a/.output/server/node_modules/axios/lib/helpers/bind.js b/.output/server/node_modules/axios/lib/helpers/bind.js
new file mode 100644
index 0000000..b3aa83b
--- /dev/null
+++ b/.output/server/node_modules/axios/lib/helpers/bind.js
@@ -0,0 +1,7 @@
+'use strict';
+
+export default function bind(fn, thisArg) {
+ return function wrap() {
+ return fn.apply(thisArg, arguments);
+ };
+}
diff --git a/.output/server/node_modules/axios/lib/helpers/buildURL.js b/.output/server/node_modules/axios/lib/helpers/buildURL.js
new file mode 100644
index 0000000..d769fdf
--- /dev/null
+++ b/.output/server/node_modules/axios/lib/helpers/buildURL.js
@@ -0,0 +1,63 @@
+'use strict';
+
+import utils from '../utils.js';
+import AxiosURLSearchParams from '../helpers/AxiosURLSearchParams.js';
+
+/**
+ * It replaces all instances of the characters `:`, `$`, `,`, `+`, `[`, and `]` with their
+ * URI encoded counterparts
+ *
+ * @param {string} val The value to be encoded.
+ *
+ * @returns {string} The encoded value.
+ */
+function encode(val) {
+ return encodeURIComponent(val).
+ replace(/%3A/gi, ':').
+ replace(/%24/g, '$').
+ replace(/%2C/gi, ',').
+ replace(/%20/g, '+').
+ replace(/%5B/gi, '[').
+ replace(/%5D/gi, ']');
+}
+
+/**
+ * Build a URL by appending params to the end
+ *
+ * @param {string} url The base of the url (e.g., http://www.google.com)
+ * @param {object} [params] The params to be appended
+ * @param {?object} options
+ *
+ * @returns {string} The formatted url
+ */
+export default function buildURL(url, params, options) {
+ /*eslint no-param-reassign:0*/
+ if (!params) {
+ return url;
+ }
+
+ const _encode = options && options.encode || encode;
+
+ const serializeFn = options && options.serialize;
+
+ let serializedParams;
+
+ if (serializeFn) {
+ serializedParams = serializeFn(params, options);
+ } else {
+ serializedParams = utils.isURLSearchParams(params) ?
+ params.toString() :
+ new AxiosURLSearchParams(params, options).toString(_encode);
+ }
+
+ if (serializedParams) {
+ const hashmarkIndex = url.indexOf("#");
+
+ if (hashmarkIndex !== -1) {
+ url = url.slice(0, hashmarkIndex);
+ }
+ url += (url.indexOf('?') === -1 ? '?' : '&') + serializedParams;
+ }
+
+ return url;
+}
diff --git a/.output/server/node_modules/axios/lib/helpers/callbackify.js b/.output/server/node_modules/axios/lib/helpers/callbackify.js
new file mode 100644
index 0000000..4603bad
--- /dev/null
+++ b/.output/server/node_modules/axios/lib/helpers/callbackify.js
@@ -0,0 +1,16 @@
+import utils from "../utils.js";
+
+const callbackify = (fn, reducer) => {
+ return utils.isAsyncFn(fn) ? function (...args) {
+ const cb = args.pop();
+ fn.apply(this, args).then((value) => {
+ try {
+ reducer ? cb(null, ...reducer(value)) : cb(null, value);
+ } catch (err) {
+ cb(err);
+ }
+ }, cb);
+ } : fn;
+}
+
+export default callbackify;
diff --git a/.output/server/node_modules/axios/lib/helpers/combineURLs.js b/.output/server/node_modules/axios/lib/helpers/combineURLs.js
new file mode 100644
index 0000000..cba9a23
--- /dev/null
+++ b/.output/server/node_modules/axios/lib/helpers/combineURLs.js
@@ -0,0 +1,15 @@
+'use strict';
+
+/**
+ * Creates a new URL by combining the specified URLs
+ *
+ * @param {string} baseURL The base URL
+ * @param {string} relativeURL The relative URL
+ *
+ * @returns {string} The combined URL
+ */
+export default function combineURLs(baseURL, relativeURL) {
+ return relativeURL
+ ? baseURL.replace(/\/+$/, '') + '/' + relativeURL.replace(/^\/+/, '')
+ : baseURL;
+}
diff --git a/.output/server/node_modules/axios/lib/helpers/cookies.js b/.output/server/node_modules/axios/lib/helpers/cookies.js
new file mode 100644
index 0000000..d039ac4
--- /dev/null
+++ b/.output/server/node_modules/axios/lib/helpers/cookies.js
@@ -0,0 +1,42 @@
+import utils from './../utils.js';
+import platform from '../platform/index.js';
+
+export default platform.hasStandardBrowserEnv ?
+
+ // Standard browser envs support document.cookie
+ {
+ write(name, value, expires, path, domain, secure) {
+ const cookie = [name + '=' + encodeURIComponent(value)];
+
+ utils.isNumber(expires) && cookie.push('expires=' + new Date(expires).toGMTString());
+
+ utils.isString(path) && cookie.push('path=' + path);
+
+ utils.isString(domain) && cookie.push('domain=' + domain);
+
+ secure === true && cookie.push('secure');
+
+ document.cookie = cookie.join('; ');
+ },
+
+ read(name) {
+ const match = document.cookie.match(new RegExp('(^|;\\s*)(' + name + ')=([^;]*)'));
+ return (match ? decodeURIComponent(match[3]) : null);
+ },
+
+ remove(name) {
+ this.write(name, '', Date.now() - 86400000);
+ }
+ }
+
+ :
+
+ // Non-standard browser env (web workers, react-native) lack needed support.
+ {
+ write() {},
+ read() {
+ return null;
+ },
+ remove() {}
+ };
+
diff --git a/.output/server/node_modules/axios/lib/helpers/formDataToJSON.js b/.output/server/node_modules/axios/lib/helpers/formDataToJSON.js
new file mode 100644
index 0000000..f4581df
--- /dev/null
+++ b/.output/server/node_modules/axios/lib/helpers/formDataToJSON.js
@@ -0,0 +1,92 @@
+'use strict';
+
+import utils from '../utils.js';
+
+/**
+ * It takes a string like `foo[x][y][z]` and returns an array like `['foo', 'x', 'y', 'z']
+ *
+ * @param {string} name - The name of the property to get.
+ *
+ * @returns An array of strings.
+ */
+function parsePropPath(name) {
+ // foo[x][y][z]
+ // foo.x.y.z
+ // foo-x-y-z
+ // foo x y z
+ return utils.matchAll(/\w+|\[(\w*)]/g, name).map(match => {
+ return match[0] === '[]' ? '' : match[1] || match[0];
+ });
+}
+
+/**
+ * Convert an array to an object.
+ *
+ * @param {Array} arr - The array to convert to an object.
+ *
+ * @returns An object with the same keys and values as the array.
+ */
+function arrayToObject(arr) {
+ const obj = {};
+ const keys = Object.keys(arr);
+ let i;
+ const len = keys.length;
+ let key;
+ for (i = 0; i < len; i++) {
+ key = keys[i];
+ obj[key] = arr[key];
+ }
+ return obj;
+}
+
+/**
+ * It takes a FormData object and returns a JavaScript object
+ *
+ * @param {string} formData The FormData object to convert to JSON.
+ *
+ * @returns {Object | null} The converted object.
+ */
+function formDataToJSON(formData) {
+ function buildPath(path, value, target, index) {
+ let name = path[index++];
+ const isNumericKey = Number.isFinite(+name);
+ const isLast = index >= path.length;
+ name = !name && utils.isArray(target) ? target.length : name;
+
+ if (isLast) {
+ if (utils.hasOwnProp(target, name)) {
+ target[name] = [target[name], value];
+ } else {
+ target[name] = value;
+ }
+
+ return !isNumericKey;
+ }
+
+ if (!target[name] || !utils.isObject(target[name])) {
+ target[name] = [];
+ }
+
+ const result = buildPath(path, value, target[name], index);
+
+ if (result && utils.isArray(target[name])) {
+ target[name] = arrayToObject(target[name]);
+ }
+
+ return !isNumericKey;
+ }
+
+ if (utils.isFormData(formData) && utils.isFunction(formData.entries)) {
+ const obj = {};
+
+ utils.forEachEntry(formData, (name, value) => {
+ buildPath(parsePropPath(name), value, obj, 0);
+ });
+
+ return obj;
+ }
+
+ return null;
+}
+
+export default formDataToJSON;
diff --git a/.output/server/node_modules/axios/lib/helpers/formDataToStream.js b/.output/server/node_modules/axios/lib/helpers/formDataToStream.js
new file mode 100644
index 0000000..9187e73
--- /dev/null
+++ b/.output/server/node_modules/axios/lib/helpers/formDataToStream.js
@@ -0,0 +1,111 @@
+import {TextEncoder} from 'util';
+import {Readable} from 'stream';
+import utils from "../utils.js";
+import readBlob from "./readBlob.js";
+
+const BOUNDARY_ALPHABET = utils.ALPHABET.ALPHA_DIGIT + '-_';
+
+const textEncoder = new TextEncoder();
+
+const CRLF = '\r\n';
+const CRLF_BYTES = textEncoder.encode(CRLF);
+const CRLF_BYTES_COUNT = 2;
+
+class FormDataPart {
+ constructor(name, value) {
+ const {escapeName} = this.constructor;
+ const isStringValue = utils.isString(value);
+
+ let headers = `Content-Disposition: form-data; name="${escapeName(name)}"${
+ !isStringValue && value.name ? `; filename="${escapeName(value.name)}"` : ''
+ }${CRLF}`;
+
+ if (isStringValue) {
+ value = textEncoder.encode(String(value).replace(/\r?\n|\r\n?/g, CRLF));
+ } else {
+ headers += `Content-Type: ${value.type || "application/octet-stream"}${CRLF}`
+ }
+
+ this.headers = textEncoder.encode(headers + CRLF);
+
+ this.contentLength = isStringValue ? value.byteLength : value.size;
+
+ this.size = this.headers.byteLength + this.contentLength + CRLF_BYTES_COUNT;
+
+ this.name = name;
+ this.value = value;
+ }
+
+ async *encode(){
+ yield this.headers;
+
+ const {value} = this;
+
+ if(utils.isTypedArray(value)) {
+ yield value;
+ } else {
+ yield* readBlob(value);
+ }
+
+ yield CRLF_BYTES;
+ }
+
+ static escapeName(name) {
+ return String(name).replace(/[\r\n"]/g, (match) => ({
+ '\r' : '%0D',
+ '\n' : '%0A',
+ '"' : '%22',
+ }[match]));
+ }
+}
+
+const formDataToStream = (form, headersHandler, options) => {
+ const {
+ tag = 'form-data-boundary',
+ size = 25,
+ boundary = tag + '-' + utils.generateString(size, BOUNDARY_ALPHABET)
+ } = options || {};
+
+ if(!utils.isFormData(form)) {
+ throw TypeError('FormData instance required');
+ }
+
+ if (boundary.length < 1 || boundary.length > 70) {
+ throw Error('boundary must be 10-70 characters long')
+ }
+
+ const boundaryBytes = textEncoder.encode('--' + boundary + CRLF);
+ const footerBytes = textEncoder.encode('--' + boundary + '--' + CRLF + CRLF);
+ let contentLength = footerBytes.byteLength;
+
+ const parts = Array.from(form.entries()).map(([name, value]) => {
+ const part = new FormDataPart(name, value);
+ contentLength += part.size;
+ return part;
+ });
+
+ contentLength += boundaryBytes.byteLength * parts.length;
+
+ contentLength = utils.toFiniteNumber(contentLength);
+
+ const computedHeaders = {
+ 'Content-Type': `multipart/form-data; boundary=${boundary}`
+ }
+
+ if (Number.isFinite(contentLength)) {
+ computedHeaders['Content-Length'] = contentLength;
+ }
+
+ headersHandler && headersHandler(computedHeaders);
+
+ return Readable.from((async function *() {
+ for(const part of parts) {
+ yield boundaryBytes;
+ yield* part.encode();
+ }
+
+ yield footerBytes;
+ })());
+};
+
+export default formDataToStream;
diff --git a/.output/server/node_modules/axios/lib/helpers/fromDataURI.js b/.output/server/node_modules/axios/lib/helpers/fromDataURI.js
new file mode 100644
index 0000000..eb71d3f
--- /dev/null
+++ b/.output/server/node_modules/axios/lib/helpers/fromDataURI.js
@@ -0,0 +1,53 @@
+'use strict';
+
+import AxiosError from '../core/AxiosError.js';
+import parseProtocol from './parseProtocol.js';
+import platform from '../platform/index.js';
+
+const DATA_URL_PATTERN = /^(?:([^;]+);)?(?:[^;]+;)?(base64|),([\s\S]*)$/;
+
+/**
+ * Parse data uri to a Buffer or Blob
+ *
+ * @param {String} uri
+ * @param {?Boolean} asBlob
+ * @param {?Object} options
+ * @param {?Function} options.Blob
+ *
+ * @returns {Buffer|Blob}
+ */
+export default function fromDataURI(uri, asBlob, options) {
+ const _Blob = options && options.Blob || platform.classes.Blob;
+ const protocol = parseProtocol(uri);
+
+ if (asBlob === undefined && _Blob) {
+ asBlob = true;
+ }
+
+ if (protocol === 'data') {
+ uri = protocol.length ? uri.slice(protocol.length + 1) : uri;
+
+ const match = DATA_URL_PATTERN.exec(uri);
+
+ if (!match) {
+ throw new AxiosError('Invalid URL', AxiosError.ERR_INVALID_URL);
+ }
+
+ const mime = match[1];
+ const isBase64 = match[2];
+ const body = match[3];
+ const buffer = Buffer.from(decodeURIComponent(body), isBase64 ? 'base64' : 'utf8');
+
+ if (asBlob) {
+ if (!_Blob) {
+ throw new AxiosError('Blob is not supported', AxiosError.ERR_NOT_SUPPORT);
+ }
+
+ return new _Blob([buffer], {type: mime});
+ }
+
+ return buffer;
+ }
+
+ throw new AxiosError('Unsupported protocol ' + protocol, AxiosError.ERR_NOT_SUPPORT);
+}
diff --git a/.output/server/node_modules/axios/lib/helpers/isAbsoluteURL.js b/.output/server/node_modules/axios/lib/helpers/isAbsoluteURL.js
new file mode 100644
index 0000000..4747a45
--- /dev/null
+++ b/.output/server/node_modules/axios/lib/helpers/isAbsoluteURL.js
@@ -0,0 +1,15 @@
+'use strict';
+
+/**
+ * Determines whether the specified URL is absolute
+ *
+ * @param {string} url The URL to test
+ *
+ * @returns {boolean} True if the specified URL is absolute, otherwise false
+ */
+export default function isAbsoluteURL(url) {
+ // A URL is considered absolute if it begins with "://" or "//" (protocol-relative URL).
+ // RFC 3986 defines scheme name as a sequence of characters beginning with a letter and followed
+ // by any combination of letters, digits, plus, period, or hyphen.
+ return /^([a-z][a-z\d+\-.]*:)?\/\//i.test(url);
+}
diff --git a/.output/server/node_modules/axios/lib/helpers/isAxiosError.js b/.output/server/node_modules/axios/lib/helpers/isAxiosError.js
new file mode 100644
index 0000000..da6cd63
--- /dev/null
+++ b/.output/server/node_modules/axios/lib/helpers/isAxiosError.js
@@ -0,0 +1,14 @@
+'use strict';
+
+import utils from './../utils.js';
+
+/**
+ * Determines whether the payload is an error thrown by Axios
+ *
+ * @param {*} payload The value to test
+ *
+ * @returns {boolean} True if the payload is an error thrown by Axios, otherwise false
+ */
+export default function isAxiosError(payload) {
+ return utils.isObject(payload) && (payload.isAxiosError === true);
+}
diff --git a/.output/server/node_modules/axios/lib/helpers/isURLSameOrigin.js b/.output/server/node_modules/axios/lib/helpers/isURLSameOrigin.js
new file mode 100644
index 0000000..a8678a4
--- /dev/null
+++ b/.output/server/node_modules/axios/lib/helpers/isURLSameOrigin.js
@@ -0,0 +1,67 @@
+'use strict';
+
+import utils from './../utils.js';
+import platform from '../platform/index.js';
+
+export default platform.hasStandardBrowserEnv ?
+
+// Standard browser envs have full support of the APIs needed to test
+// whether the request URL is of the same origin as current location.
+ (function standardBrowserEnv() {
+ const msie = /(msie|trident)/i.test(navigator.userAgent);
+ const urlParsingNode = document.createElement('a');
+ let originURL;
+
+ /**
+ * Parse a URL to discover its components
+ *
+ * @param {String} url The URL to be parsed
+ * @returns {Object}
+ */
+ function resolveURL(url) {
+ let href = url;
+
+ if (msie) {
+ // IE needs attribute set twice to normalize properties
+ urlParsingNode.setAttribute('href', href);
+ href = urlParsingNode.href;
+ }
+
+ urlParsingNode.setAttribute('href', href);
+
+ // urlParsingNode provides the UrlUtils interface - http://url.spec.whatwg.org/#urlutils
+ return {
+ href: urlParsingNode.href,
+ protocol: urlParsingNode.protocol ? urlParsingNode.protocol.replace(/:$/, '') : '',
+ host: urlParsingNode.host,
+ search: urlParsingNode.search ? urlParsingNode.search.replace(/^\?/, '') : '',
+ hash: urlParsingNode.hash ? urlParsingNode.hash.replace(/^#/, '') : '',
+ hostname: urlParsingNode.hostname,
+ port: urlParsingNode.port,
+ pathname: (urlParsingNode.pathname.charAt(0) === '/') ?
+ urlParsingNode.pathname :
+ '/' + urlParsingNode.pathname
+ };
+ }
+
+ originURL = resolveURL(window.location.href);
+
+ /**
+ * Determine if a URL shares the same origin as the current location
+ *
+ * @param {String} requestURL The URL to test
+ * @returns {boolean} True if URL shares the same origin, otherwise false
+ */
+ return function isURLSameOrigin(requestURL) {
+ const parsed = (utils.isString(requestURL)) ? resolveURL(requestURL) : requestURL;
+ return (parsed.protocol === originURL.protocol &&
+ parsed.host === originURL.host);
+ };
+ })() :
+
+ // Non standard browser envs (web workers, react-native) lack needed support.
+ (function nonStandardBrowserEnv() {
+ return function isURLSameOrigin() {
+ return true;
+ };
+ })();
diff --git a/.output/server/node_modules/axios/lib/helpers/parseHeaders.js b/.output/server/node_modules/axios/lib/helpers/parseHeaders.js
new file mode 100644
index 0000000..50af948
--- /dev/null
+++ b/.output/server/node_modules/axios/lib/helpers/parseHeaders.js
@@ -0,0 +1,55 @@
+'use strict';
+
+import utils from './../utils.js';
+
+// RawAxiosHeaders whose duplicates are ignored by node
+// c.f. https://nodejs.org/api/http.html#http_message_headers
+const ignoreDuplicateOf = utils.toObjectSet([
+ 'age', 'authorization', 'content-length', 'content-type', 'etag',
+ 'expires', 'from', 'host', 'if-modified-since', 'if-unmodified-since',
+ 'last-modified', 'location', 'max-forwards', 'proxy-authorization',
+ 'referer', 'retry-after', 'user-agent'
+]);
+
+/**
+ * Parse headers into an object
+ *
+ * ```
+ * Date: Wed, 27 Aug 2014 08:58:49 GMT
+ * Content-Type: application/json
+ * Connection: keep-alive
+ * Transfer-Encoding: chunked
+ * ```
+ *
+ * @param {String} rawHeaders Headers needing to be parsed
+ *
+ * @returns {Object} Headers parsed into an object
+ */
+export default rawHeaders => {
+ const parsed = {};
+ let key;
+ let val;
+ let i;
+
+ rawHeaders && rawHeaders.split('\n').forEach(function parser(line) {
+ i = line.indexOf(':');
+ key = line.substring(0, i).trim().toLowerCase();
+ val = line.substring(i + 1).trim();
+
+ if (!key || (parsed[key] && ignoreDuplicateOf[key])) {
+ return;
+ }
+
+ if (key === 'set-cookie') {
+ if (parsed[key]) {
+ parsed[key].push(val);
+ } else {
+ parsed[key] = [val];
+ }
+ } else {
+ parsed[key] = parsed[key] ? parsed[key] + ', ' + val : val;
+ }
+ });
+
+ return parsed;
+};
diff --git a/.output/server/node_modules/axios/lib/helpers/parseProtocol.js b/.output/server/node_modules/axios/lib/helpers/parseProtocol.js
new file mode 100644
index 0000000..586ec96
--- /dev/null
+++ b/.output/server/node_modules/axios/lib/helpers/parseProtocol.js
@@ -0,0 +1,6 @@
+'use strict';
+
+export default function parseProtocol(url) {
+ const match = /^([-+\w]{1,25})(:?\/\/|:)/.exec(url);
+ return match && match[1] || '';
+}
diff --git a/.output/server/node_modules/axios/lib/helpers/readBlob.js b/.output/server/node_modules/axios/lib/helpers/readBlob.js
new file mode 100644
index 0000000..6de748e
--- /dev/null
+++ b/.output/server/node_modules/axios/lib/helpers/readBlob.js
@@ -0,0 +1,15 @@
+const {asyncIterator} = Symbol;
+
+const readBlob = async function* (blob) {
+ if (blob.stream) {
+ yield* blob.stream()
+ } else if (blob.arrayBuffer) {
+ yield await blob.arrayBuffer()
+ } else if (blob[asyncIterator]) {
+ yield* blob[asyncIterator]();
+ } else {
+ yield blob;
+ }
+}
+
+export default readBlob;
diff --git a/.output/server/node_modules/axios/lib/helpers/speedometer.js b/.output/server/node_modules/axios/lib/helpers/speedometer.js
new file mode 100644
index 0000000..3b3c666
--- /dev/null
+++ b/.output/server/node_modules/axios/lib/helpers/speedometer.js
@@ -0,0 +1,55 @@
+'use strict';
+
+/**
+ * Calculate data maxRate
+ * @param {Number} [samplesCount= 10]
+ * @param {Number} [min= 1000]
+ * @returns {Function}
+ */
+function speedometer(samplesCount, min) {
+ samplesCount = samplesCount || 10;
+ const bytes = new Array(samplesCount);
+ const timestamps = new Array(samplesCount);
+ let head = 0;
+ let tail = 0;
+ let firstSampleTS;
+
+ min = min !== undefined ? min : 1000;
+
+ return function push(chunkLength) {
+ const now = Date.now();
+
+ const startedAt = timestamps[tail];
+
+ if (!firstSampleTS) {
+ firstSampleTS = now;
+ }
+
+ bytes[head] = chunkLength;
+ timestamps[head] = now;
+
+ let i = tail;
+ let bytesCount = 0;
+
+ while (i !== head) {
+ bytesCount += bytes[i++];
+ i = i % samplesCount;
+ }
+
+ head = (head + 1) % samplesCount;
+
+ if (head === tail) {
+ tail = (tail + 1) % samplesCount;
+ }
+
+ if (now - firstSampleTS < min) {
+ return;
+ }
+
+ const passed = startedAt && now - startedAt;
+
+ return passed ? Math.round(bytesCount * 1000 / passed) : undefined;
+ };
+}
+
+export default speedometer;
diff --git a/.output/server/node_modules/axios/lib/helpers/spread.js b/.output/server/node_modules/axios/lib/helpers/spread.js
new file mode 100644
index 0000000..13479cb
--- /dev/null
+++ b/.output/server/node_modules/axios/lib/helpers/spread.js
@@ -0,0 +1,28 @@
+'use strict';
+
+/**
+ * Syntactic sugar for invoking a function and expanding an array for arguments.
+ *
+ * Common use case would be to use `Function.prototype.apply`.
+ *
+ * ```js
+ * function f(x, y, z) {}
+ * var args = [1, 2, 3];
+ * f.apply(null, args);
+ * ```
+ *
+ * With `spread` this example can be re-written.
+ *
+ * ```js
+ * spread(function(x, y, z) {})([1, 2, 3]);
+ * ```
+ *
+ * @param {Function} callback
+ *
+ * @returns {Function}
+ */
+export default function spread(callback) {
+ return function wrap(arr) {
+ return callback.apply(null, arr);
+ };
+}
diff --git a/.output/server/node_modules/axios/lib/helpers/throttle.js b/.output/server/node_modules/axios/lib/helpers/throttle.js
new file mode 100644
index 0000000..6969df1
--- /dev/null
+++ b/.output/server/node_modules/axios/lib/helpers/throttle.js
@@ -0,0 +1,33 @@
+'use strict';
+
+/**
+ * Throttle decorator
+ * @param {Function} fn
+ * @param {Number} freq
+ * @return {Function}
+ */
+function throttle(fn, freq) {
+ let timestamp = 0;
+ const threshold = 1000 / freq;
+ let timer = null;
+ return function throttled(force, args) {
+ const now = Date.now();
+ if (force || now - timestamp > threshold) {
+ if (timer) {
+ clearTimeout(timer);
+ timer = null;
+ }
+ timestamp = now;
+ return fn.apply(null, args);
+ }
+ if (!timer) {
+ timer = setTimeout(() => {
+ timer = null;
+ timestamp = Date.now();
+ return fn.apply(null, args);
+ }, threshold - (now - timestamp));
+ }
+ };
+}
+
+export default throttle;
diff --git a/.output/server/node_modules/axios/lib/helpers/toFormData.js b/.output/server/node_modules/axios/lib/helpers/toFormData.js
new file mode 100644
index 0000000..a41e966
--- /dev/null
+++ b/.output/server/node_modules/axios/lib/helpers/toFormData.js
@@ -0,0 +1,219 @@
+'use strict';
+
+import utils from '../utils.js';
+import AxiosError from '../core/AxiosError.js';
+// temporary hotfix to avoid circular references until AxiosURLSearchParams is refactored
+import PlatformFormData from '../platform/node/classes/FormData.js';
+
+/**
+ * Determines if the given thing is a array or js object.
+ *
+ * @param {string} thing - The object or array to be visited.
+ *
+ * @returns {boolean}
+ */
+function isVisitable(thing) {
+ return utils.isPlainObject(thing) || utils.isArray(thing);
+}
+
+/**
+ * It removes the brackets from the end of a string
+ *
+ * @param {string} key - The key of the parameter.
+ *
+ * @returns {string} the key without the brackets.
+ */
+function removeBrackets(key) {
+ return utils.endsWith(key, '[]') ? key.slice(0, -2) : key;
+}
+
+/**
+ * It takes a path, a key, and a boolean, and returns a string
+ *
+ * @param {string} path - The path to the current key.
+ * @param {string} key - The key of the current object being iterated over.
+ * @param {string} dots - If true, the key will be rendered with dots instead of brackets.
+ *
+ * @returns {string} The path to the current key.
+ */
+function renderKey(path, key, dots) {
+ if (!path) return key;
+ return path.concat(key).map(function each(token, i) {
+ // eslint-disable-next-line no-param-reassign
+ token = removeBrackets(token);
+ return !dots && i ? '[' + token + ']' : token;
+ }).join(dots ? '.' : '');
+}
+
+/**
+ * If the array is an array and none of its elements are visitable, then it's a flat array.
+ *
+ * @param {Array} arr - The array to check
+ *
+ * @returns {boolean}
+ */
+function isFlatArray(arr) {
+ return utils.isArray(arr) && !arr.some(isVisitable);
+}
+
+const predicates = utils.toFlatObject(utils, {}, null, function filter(prop) {
+ return /^is[A-Z]/.test(prop);
+});
+
+/**
+ * Convert a data object to FormData
+ *
+ * @param {Object} obj
+ * @param {?Object} [formData]
+ * @param {?Object} [options]
+ * @param {Function} [options.visitor]
+ * @param {Boolean} [options.metaTokens = true]
+ * @param {Boolean} [options.dots = false]
+ * @param {?Boolean} [options.indexes = false]
+ *
+ * @returns {Object}
+ **/
+
+/**
+ * It converts an object into a FormData object
+ *
+ * @param {Object} obj - The object to convert to form data.
+ * @param {string} formData - The FormData object to append to.
+ * @param {Object} options
+ *
+ * @returns
+ */
+function toFormData(obj, formData, options) {
+ if (!utils.isObject(obj)) {
+ throw new TypeError('target must be an object');
+ }
+
+ // eslint-disable-next-line no-param-reassign
+ formData = formData || new (PlatformFormData || FormData)();
+
+ // eslint-disable-next-line no-param-reassign
+ options = utils.toFlatObject(options, {
+ metaTokens: true,
+ dots: false,
+ indexes: false
+ }, false, function defined(option, source) {
+ // eslint-disable-next-line no-eq-null,eqeqeq
+ return !utils.isUndefined(source[option]);
+ });
+
+ const metaTokens = options.metaTokens;
+ // eslint-disable-next-line no-use-before-define
+ const visitor = options.visitor || defaultVisitor;
+ const dots = options.dots;
+ const indexes = options.indexes;
+ const _Blob = options.Blob || typeof Blob !== 'undefined' && Blob;
+ const useBlob = _Blob && utils.isSpecCompliantForm(formData);
+
+ if (!utils.isFunction(visitor)) {
+ throw new TypeError('visitor must be a function');
+ }
+
+ function convertValue(value) {
+ if (value === null) return '';
+
+ if (utils.isDate(value)) {
+ return value.toISOString();
+ }
+
+ if (!useBlob && utils.isBlob(value)) {
+ throw new AxiosError('Blob is not supported. Use a Buffer instead.');
+ }
+
+ if (utils.isArrayBuffer(value) || utils.isTypedArray(value)) {
+ return useBlob && typeof Blob === 'function' ? new Blob([value]) : Buffer.from(value);
+ }
+
+ return value;
+ }
+
+ /**
+ * Default visitor.
+ *
+ * @param {*} value
+ * @param {String|Number} key
+ * @param {Array} path
+ * @this {FormData}
+ *
+ * @returns {boolean} return true to visit the each prop of the value recursively
+ */
+ function defaultVisitor(value, key, path) {
+ let arr = value;
+
+ if (value && !path && typeof value === 'object') {
+ if (utils.endsWith(key, '{}')) {
+ // eslint-disable-next-line no-param-reassign
+ key = metaTokens ? key : key.slice(0, -2);
+ // eslint-disable-next-line no-param-reassign
+ value = JSON.stringify(value);
+ } else if (
+ (utils.isArray(value) && isFlatArray(value)) ||
+ ((utils.isFileList(value) || utils.endsWith(key, '[]')) && (arr = utils.toArray(value))
+ )) {
+ // eslint-disable-next-line no-param-reassign
+ key = removeBrackets(key);
+
+ arr.forEach(function each(el, index) {
+ !(utils.isUndefined(el) || el === null) && formData.append(
+ // eslint-disable-next-line no-nested-ternary
+ indexes === true ? renderKey([key], index, dots) : (indexes === null ? key : key + '[]'),
+ convertValue(el)
+ );
+ });
+ return false;
+ }
+ }
+
+ if (isVisitable(value)) {
+ return true;
+ }
+
+ formData.append(renderKey(path, key, dots), convertValue(value));
+
+ return false;
+ }
+
+ const stack = [];
+
+ const exposedHelpers = Object.assign(predicates, {
+ defaultVisitor,
+ convertValue,
+ isVisitable
+ });
+
+ function build(value, path) {
+ if (utils.isUndefined(value)) return;
+
+ if (stack.indexOf(value) !== -1) {
+ throw Error('Circular reference detected in ' + path.join('.'));
+ }
+
+ stack.push(value);
+
+ utils.forEach(value, function each(el, key) {
+ const result = !(utils.isUndefined(el) || el === null) && visitor.call(
+ formData, el, utils.isString(key) ? key.trim() : key, path, exposedHelpers
+ );
+
+ if (result === true) {
+ build(el, path ? path.concat(key) : [key]);
+ }
+ });
+
+ stack.pop();
+ }
+
+ if (!utils.isObject(obj)) {
+ throw new TypeError('data must be an object');
+ }
+
+ build(obj);
+
+ return formData;
+}
+
+export default toFormData;
diff --git a/.output/server/node_modules/axios/lib/helpers/toURLEncodedForm.js b/.output/server/node_modules/axios/lib/helpers/toURLEncodedForm.js
new file mode 100644
index 0000000..988a38a
--- /dev/null
+++ b/.output/server/node_modules/axios/lib/helpers/toURLEncodedForm.js
@@ -0,0 +1,18 @@
+'use strict';
+
+import utils from '../utils.js';
+import toFormData from './toFormData.js';
+import platform from '../platform/index.js';
+
+export default function toURLEncodedForm(data, options) {
+ return toFormData(data, new platform.classes.URLSearchParams(), Object.assign({
+ visitor: function(value, key, path, helpers) {
+ if (platform.isNode && utils.isBuffer(value)) {
+ this.append(key, value.toString('base64'));
+ return false;
+ }
+
+ return helpers.defaultVisitor.apply(this, arguments);
+ }
+ }, options));
+}
diff --git a/.output/server/node_modules/axios/lib/helpers/validator.js b/.output/server/node_modules/axios/lib/helpers/validator.js
new file mode 100644
index 0000000..14b4696
--- /dev/null
+++ b/.output/server/node_modules/axios/lib/helpers/validator.js
@@ -0,0 +1,91 @@
+'use strict';
+
+import {VERSION} from '../env/data.js';
+import AxiosError from '../core/AxiosError.js';
+
+const validators = {};
+
+// eslint-disable-next-line func-names
+['object', 'boolean', 'number', 'function', 'string', 'symbol'].forEach((type, i) => {
+ validators[type] = function validator(thing) {
+ return typeof thing === type || 'a' + (i < 1 ? 'n ' : ' ') + type;
+ };
+});
+
+const deprecatedWarnings = {};
+
+/**
+ * Transitional option validator
+ *
+ * @param {function|boolean?} validator - set to false if the transitional option has been removed
+ * @param {string?} version - deprecated version / removed since version
+ * @param {string?} message - some message with additional info
+ *
+ * @returns {function}
+ */
+validators.transitional = function transitional(validator, version, message) {
+ function formatMessage(opt, desc) {
+ return '[Axios v' + VERSION + '] Transitional option \'' + opt + '\'' + desc + (message ? '. ' + message : '');
+ }
+
+ // eslint-disable-next-line func-names
+ return (value, opt, opts) => {
+ if (validator === false) {
+ throw new AxiosError(
+ formatMessage(opt, ' has been removed' + (version ? ' in ' + version : '')),
+ AxiosError.ERR_DEPRECATED
+ );
+ }
+
+ if (version && !deprecatedWarnings[opt]) {
+ deprecatedWarnings[opt] = true;
+ // eslint-disable-next-line no-console
+ console.warn(
+ formatMessage(
+ opt,
+ ' has been deprecated since v' + version + ' and will be removed in the near future'
+ )
+ );
+ }
+
+ return validator ? validator(value, opt, opts) : true;
+ };
+};
+
+/**
+ * Assert object's properties type
+ *
+ * @param {object} options
+ * @param {object} schema
+ * @param {boolean?} allowUnknown
+ *
+ * @returns {object}
+ */
+
+function assertOptions(options, schema, allowUnknown) {
+ if (typeof options !== 'object') {
+ throw new AxiosError('options must be an object', AxiosError.ERR_BAD_OPTION_VALUE);
+ }
+ const keys = Object.keys(options);
+ let i = keys.length;
+ while (i-- > 0) {
+ const opt = keys[i];
+ const validator = schema[opt];
+ if (validator) {
+ const value = options[opt];
+ const result = value === undefined || validator(value, opt, options);
+ if (result !== true) {
+ throw new AxiosError('option ' + opt + ' must be ' + result, AxiosError.ERR_BAD_OPTION_VALUE);
+ }
+ continue;
+ }
+ if (allowUnknown !== true) {
+ throw new AxiosError('Unknown option ' + opt, AxiosError.ERR_BAD_OPTION);
+ }
+ }
+}
+
+export default {
+ assertOptions,
+ validators
+};
diff --git a/.output/server/node_modules/axios/lib/platform/common/utils.js b/.output/server/node_modules/axios/lib/platform/common/utils.js
new file mode 100644
index 0000000..56fe79a
--- /dev/null
+++ b/.output/server/node_modules/axios/lib/platform/common/utils.js
@@ -0,0 +1,47 @@
+const hasBrowserEnv = typeof window !== 'undefined' && typeof document !== 'undefined';
+
+/**
+ * Determine if we're running in a standard browser environment
+ *
+ * This allows axios to run in a web worker, and react-native.
+ * Both environments support XMLHttpRequest, but not fully standard globals.
+ *
+ * web workers:
+ * typeof window -> undefined
+ * typeof document -> undefined
+ *
+ * react-native:
+ * navigator.product -> 'ReactNative'
+ * nativescript
+ * navigator.product -> 'NativeScript' or 'NS'
+ *
+ * @returns {boolean}
+ */
+const hasStandardBrowserEnv = (
+ (product) => {
+ return hasBrowserEnv && ['ReactNative', 'NativeScript', 'NS'].indexOf(product) < 0
+ })(typeof navigator !== 'undefined' && navigator.product);
+
+/**
+ * Determine if we're running in a standard browser webWorker environment
+ *
+ * Although the `isStandardBrowserEnv` method indicates that
+ * `allows axios to run in a web worker`, the WebWorker will still be
+ * filtered out due to its judgment standard
+ * `typeof window !== 'undefined' && typeof document !== 'undefined'`.
+ * This leads to a problem when axios post `FormData` in webWorker
+ */
+const hasStandardBrowserWebWorkerEnv = (() => {
+ return (
+ typeof WorkerGlobalScope !== 'undefined' &&
+ // eslint-disable-next-line no-undef
+ self instanceof WorkerGlobalScope &&
+ typeof self.importScripts === 'function'
+ );
+})();
+
+export {
+ hasBrowserEnv,
+ hasStandardBrowserWebWorkerEnv,
+ hasStandardBrowserEnv
+}
diff --git a/.output/server/node_modules/axios/lib/platform/index.js b/.output/server/node_modules/axios/lib/platform/index.js
new file mode 100644
index 0000000..860ba21
--- /dev/null
+++ b/.output/server/node_modules/axios/lib/platform/index.js
@@ -0,0 +1,7 @@
+import platform from './node/index.js';
+import * as utils from './common/utils.js';
+
+export default {
+ ...utils,
+ ...platform
+}
diff --git a/.output/server/node_modules/axios/lib/platform/node/classes/FormData.js b/.output/server/node_modules/axios/lib/platform/node/classes/FormData.js
new file mode 100644
index 0000000..b07f947
--- /dev/null
+++ b/.output/server/node_modules/axios/lib/platform/node/classes/FormData.js
@@ -0,0 +1,3 @@
+import FormData from 'form-data';
+
+export default FormData;
diff --git a/.output/server/node_modules/axios/lib/platform/node/classes/URLSearchParams.js b/.output/server/node_modules/axios/lib/platform/node/classes/URLSearchParams.js
new file mode 100644
index 0000000..fba5842
--- /dev/null
+++ b/.output/server/node_modules/axios/lib/platform/node/classes/URLSearchParams.js
@@ -0,0 +1,4 @@
+'use strict';
+
+import url from 'url';
+export default url.URLSearchParams;
diff --git a/.output/server/node_modules/axios/lib/platform/node/index.js b/.output/server/node_modules/axios/lib/platform/node/index.js
new file mode 100644
index 0000000..aef514a
--- /dev/null
+++ b/.output/server/node_modules/axios/lib/platform/node/index.js
@@ -0,0 +1,12 @@
+import URLSearchParams from './classes/URLSearchParams.js'
+import FormData from './classes/FormData.js'
+
+export default {
+ isNode: true,
+ classes: {
+ URLSearchParams,
+ FormData,
+ Blob: typeof Blob !== 'undefined' && Blob || null
+ },
+ protocols: [ 'http', 'https', 'file', 'data' ]
+};
diff --git a/.output/server/node_modules/axios/lib/utils.js b/.output/server/node_modules/axios/lib/utils.js
new file mode 100644
index 0000000..a386b77
--- /dev/null
+++ b/.output/server/node_modules/axios/lib/utils.js
@@ -0,0 +1,723 @@
+'use strict';
+
+import bind from './helpers/bind.js';
+
+// utils is a library of generic helper functions non-specific to axios
+
+const {toString} = Object.prototype;
+const {getPrototypeOf} = Object;
+
+const kindOf = (cache => thing => {
+ const str = toString.call(thing);
+ return cache[str] || (cache[str] = str.slice(8, -1).toLowerCase());
+})(Object.create(null));
+
+const kindOfTest = (type) => {
+ type = type.toLowerCase();
+ return (thing) => kindOf(thing) === type
+}
+
+const typeOfTest = type => thing => typeof thing === type;
+
+/**
+ * Determine if a value is an Array
+ *
+ * @param {Object} val The value to test
+ *
+ * @returns {boolean} True if value is an Array, otherwise false
+ */
+const {isArray} = Array;
+
+/**
+ * Determine if a value is undefined
+ *
+ * @param {*} val The value to test
+ *
+ * @returns {boolean} True if the value is undefined, otherwise false
+ */
+const isUndefined = typeOfTest('undefined');
+
+/**
+ * Determine if a value is a Buffer
+ *
+ * @param {*} val The value to test
+ *
+ * @returns {boolean} True if value is a Buffer, otherwise false
+ */
+function isBuffer(val) {
+ return val !== null && !isUndefined(val) && val.constructor !== null && !isUndefined(val.constructor)
+ && isFunction(val.constructor.isBuffer) && val.constructor.isBuffer(val);
+}
+
+/**
+ * Determine if a value is an ArrayBuffer
+ *
+ * @param {*} val The value to test
+ *
+ * @returns {boolean} True if value is an ArrayBuffer, otherwise false
+ */
+const isArrayBuffer = kindOfTest('ArrayBuffer');
+
+
+/**
+ * Determine if a value is a view on an ArrayBuffer
+ *
+ * @param {*} val The value to test
+ *
+ * @returns {boolean} True if value is a view on an ArrayBuffer, otherwise false
+ */
+function isArrayBufferView(val) {
+ let result;
+ if ((typeof ArrayBuffer !== 'undefined') && (ArrayBuffer.isView)) {
+ result = ArrayBuffer.isView(val);
+ } else {
+ result = (val) && (val.buffer) && (isArrayBuffer(val.buffer));
+ }
+ return result;
+}
+
+/**
+ * Determine if a value is a String
+ *
+ * @param {*} val The value to test
+ *
+ * @returns {boolean} True if value is a String, otherwise false
+ */
+const isString = typeOfTest('string');
+
+/**
+ * Determine if a value is a Function
+ *
+ * @param {*} val The value to test
+ * @returns {boolean} True if value is a Function, otherwise false
+ */
+const isFunction = typeOfTest('function');
+
+/**
+ * Determine if a value is a Number
+ *
+ * @param {*} val The value to test
+ *
+ * @returns {boolean} True if value is a Number, otherwise false
+ */
+const isNumber = typeOfTest('number');
+
+/**
+ * Determine if a value is an Object
+ *
+ * @param {*} thing The value to test
+ *
+ * @returns {boolean} True if value is an Object, otherwise false
+ */
+const isObject = (thing) => thing !== null && typeof thing === 'object';
+
+/**
+ * Determine if a value is a Boolean
+ *
+ * @param {*} thing The value to test
+ * @returns {boolean} True if value is a Boolean, otherwise false
+ */
+const isBoolean = thing => thing === true || thing === false;
+
+/**
+ * Determine if a value is a plain Object
+ *
+ * @param {*} val The value to test
+ *
+ * @returns {boolean} True if value is a plain Object, otherwise false
+ */
+const isPlainObject = (val) => {
+ if (kindOf(val) !== 'object') {
+ return false;
+ }
+
+ const prototype = getPrototypeOf(val);
+ return (prototype === null || prototype === Object.prototype || Object.getPrototypeOf(prototype) === null) && !(Symbol.toStringTag in val) && !(Symbol.iterator in val);
+}
+
+/**
+ * Determine if a value is a Date
+ *
+ * @param {*} val The value to test
+ *
+ * @returns {boolean} True if value is a Date, otherwise false
+ */
+const isDate = kindOfTest('Date');
+
+/**
+ * Determine if a value is a File
+ *
+ * @param {*} val The value to test
+ *
+ * @returns {boolean} True if value is a File, otherwise false
+ */
+const isFile = kindOfTest('File');
+
+/**
+ * Determine if a value is a Blob
+ *
+ * @param {*} val The value to test
+ *
+ * @returns {boolean} True if value is a Blob, otherwise false
+ */
+const isBlob = kindOfTest('Blob');
+
+/**
+ * Determine if a value is a FileList
+ *
+ * @param {*} val The value to test
+ *
+ * @returns {boolean} True if value is a File, otherwise false
+ */
+const isFileList = kindOfTest('FileList');
+
+/**
+ * Determine if a value is a Stream
+ *
+ * @param {*} val The value to test
+ *
+ * @returns {boolean} True if value is a Stream, otherwise false
+ */
+const isStream = (val) => isObject(val) && isFunction(val.pipe);
+
+/**
+ * Determine if a value is a FormData
+ *
+ * @param {*} thing The value to test
+ *
+ * @returns {boolean} True if value is an FormData, otherwise false
+ */
+const isFormData = (thing) => {
+ let kind;
+ return thing && (
+ (typeof FormData === 'function' && thing instanceof FormData) || (
+ isFunction(thing.append) && (
+ (kind = kindOf(thing)) === 'formdata' ||
+ // detect form-data instance
+ (kind === 'object' && isFunction(thing.toString) && thing.toString() === '[object FormData]')
+ )
+ )
+ )
+}
+
+/**
+ * Determine if a value is a URLSearchParams object
+ *
+ * @param {*} val The value to test
+ *
+ * @returns {boolean} True if value is a URLSearchParams object, otherwise false
+ */
+const isURLSearchParams = kindOfTest('URLSearchParams');
+
+/**
+ * Trim excess whitespace off the beginning and end of a string
+ *
+ * @param {String} str The String to trim
+ *
+ * @returns {String} The String freed of excess whitespace
+ */
+const trim = (str) => str.trim ?
+ str.trim() : str.replace(/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g, '');
+
+/**
+ * Iterate over an Array or an Object invoking a function for each item.
+ *
+ * If `obj` is an Array callback will be called passing
+ * the value, index, and complete array for each item.
+ *
+ * If 'obj' is an Object callback will be called passing
+ * the value, key, and complete object for each property.
+ *
+ * @param {Object|Array} obj The object to iterate
+ * @param {Function} fn The callback to invoke for each item
+ *
+ * @param {Boolean} [allOwnKeys = false]
+ * @returns {any}
+ */
+function forEach(obj, fn, {allOwnKeys = false} = {}) {
+ // Don't bother if no value provided
+ if (obj === null || typeof obj === 'undefined') {
+ return;
+ }
+
+ let i;
+ let l;
+
+ // Force an array if not already something iterable
+ if (typeof obj !== 'object') {
+ /*eslint no-param-reassign:0*/
+ obj = [obj];
+ }
+
+ if (isArray(obj)) {
+ // Iterate over array values
+ for (i = 0, l = obj.length; i < l; i++) {
+ fn.call(null, obj[i], i, obj);
+ }
+ } else {
+ // Iterate over object keys
+ const keys = allOwnKeys ? Object.getOwnPropertyNames(obj) : Object.keys(obj);
+ const len = keys.length;
+ let key;
+
+ for (i = 0; i < len; i++) {
+ key = keys[i];
+ fn.call(null, obj[key], key, obj);
+ }
+ }
+}
+
+function findKey(obj, key) {
+ key = key.toLowerCase();
+ const keys = Object.keys(obj);
+ let i = keys.length;
+ let _key;
+ while (i-- > 0) {
+ _key = keys[i];
+ if (key === _key.toLowerCase()) {
+ return _key;
+ }
+ }
+ return null;
+}
+
+const _global = (() => {
+ /*eslint no-undef:0*/
+ if (typeof globalThis !== "undefined") return globalThis;
+ return typeof self !== "undefined" ? self : (typeof window !== 'undefined' ? window : global)
+})();
+
+const isContextDefined = (context) => !isUndefined(context) && context !== _global;
+
+/**
+ * Accepts varargs expecting each argument to be an object, then
+ * immutably merges the properties of each object and returns result.
+ *
+ * When multiple objects contain the same key the later object in
+ * the arguments list will take precedence.
+ *
+ * Example:
+ *
+ * ```js
+ * var result = merge({foo: 123}, {foo: 456});
+ * console.log(result.foo); // outputs 456
+ * ```
+ *
+ * @param {Object} obj1 Object to merge
+ *
+ * @returns {Object} Result of all merge properties
+ */
+function merge(/* obj1, obj2, obj3, ... */) {
+ const {caseless} = isContextDefined(this) && this || {};
+ const result = {};
+ const assignValue = (val, key) => {
+ const targetKey = caseless && findKey(result, key) || key;
+ if (isPlainObject(result[targetKey]) && isPlainObject(val)) {
+ result[targetKey] = merge(result[targetKey], val);
+ } else if (isPlainObject(val)) {
+ result[targetKey] = merge({}, val);
+ } else if (isArray(val)) {
+ result[targetKey] = val.slice();
+ } else {
+ result[targetKey] = val;
+ }
+ }
+
+ for (let i = 0, l = arguments.length; i < l; i++) {
+ arguments[i] && forEach(arguments[i], assignValue);
+ }
+ return result;
+}
+
+/**
+ * Extends object a by mutably adding to it the properties of object b.
+ *
+ * @param {Object} a The object to be extended
+ * @param {Object} b The object to copy properties from
+ * @param {Object} thisArg The object to bind function to
+ *
+ * @param {Boolean} [allOwnKeys]
+ * @returns {Object} The resulting value of object a
+ */
+const extend = (a, b, thisArg, {allOwnKeys}= {}) => {
+ forEach(b, (val, key) => {
+ if (thisArg && isFunction(val)) {
+ a[key] = bind(val, thisArg);
+ } else {
+ a[key] = val;
+ }
+ }, {allOwnKeys});
+ return a;
+}
+
+/**
+ * Remove byte order marker. This catches EF BB BF (the UTF-8 BOM)
+ *
+ * @param {string} content with BOM
+ *
+ * @returns {string} content value without BOM
+ */
+const stripBOM = (content) => {
+ if (content.charCodeAt(0) === 0xFEFF) {
+ content = content.slice(1);
+ }
+ return content;
+}
+
+/**
+ * Inherit the prototype methods from one constructor into another
+ * @param {function} constructor
+ * @param {function} superConstructor
+ * @param {object} [props]
+ * @param {object} [descriptors]
+ *
+ * @returns {void}
+ */
+const inherits = (constructor, superConstructor, props, descriptors) => {
+ constructor.prototype = Object.create(superConstructor.prototype, descriptors);
+ constructor.prototype.constructor = constructor;
+ Object.defineProperty(constructor, 'super', {
+ value: superConstructor.prototype
+ });
+ props && Object.assign(constructor.prototype, props);
+}
+
+/**
+ * Resolve object with deep prototype chain to a flat object
+ * @param {Object} sourceObj source object
+ * @param {Object} [destObj]
+ * @param {Function|Boolean} [filter]
+ * @param {Function} [propFilter]
+ *
+ * @returns {Object}
+ */
+const toFlatObject = (sourceObj, destObj, filter, propFilter) => {
+ let props;
+ let i;
+ let prop;
+ const merged = {};
+
+ destObj = destObj || {};
+ // eslint-disable-next-line no-eq-null,eqeqeq
+ if (sourceObj == null) return destObj;
+
+ do {
+ props = Object.getOwnPropertyNames(sourceObj);
+ i = props.length;
+ while (i-- > 0) {
+ prop = props[i];
+ if ((!propFilter || propFilter(prop, sourceObj, destObj)) && !merged[prop]) {
+ destObj[prop] = sourceObj[prop];
+ merged[prop] = true;
+ }
+ }
+ sourceObj = filter !== false && getPrototypeOf(sourceObj);
+ } while (sourceObj && (!filter || filter(sourceObj, destObj)) && sourceObj !== Object.prototype);
+
+ return destObj;
+}
+
+/**
+ * Determines whether a string ends with the characters of a specified string
+ *
+ * @param {String} str
+ * @param {String} searchString
+ * @param {Number} [position= 0]
+ *
+ * @returns {boolean}
+ */
+const endsWith = (str, searchString, position) => {
+ str = String(str);
+ if (position === undefined || position > str.length) {
+ position = str.length;
+ }
+ position -= searchString.length;
+ const lastIndex = str.indexOf(searchString, position);
+ return lastIndex !== -1 && lastIndex === position;
+}
+
+
+/**
+ * Returns new array from array like object or null if failed
+ *
+ * @param {*} [thing]
+ *
+ * @returns {?Array}
+ */
+const toArray = (thing) => {
+ if (!thing) return null;
+ if (isArray(thing)) return thing;
+ let i = thing.length;
+ if (!isNumber(i)) return null;
+ const arr = new Array(i);
+ while (i-- > 0) {
+ arr[i] = thing[i];
+ }
+ return arr;
+}
+
+/**
+ * Checking if the Uint8Array exists and if it does, it returns a function that checks if the
+ * thing passed in is an instance of Uint8Array
+ *
+ * @param {TypedArray}
+ *
+ * @returns {Array}
+ */
+// eslint-disable-next-line func-names
+const isTypedArray = (TypedArray => {
+ // eslint-disable-next-line func-names
+ return thing => {
+ return TypedArray && thing instanceof TypedArray;
+ };
+})(typeof Uint8Array !== 'undefined' && getPrototypeOf(Uint8Array));
+
+/**
+ * For each entry in the object, call the function with the key and value.
+ *
+ * @param {Object} obj - The object to iterate over.
+ * @param {Function} fn - The function to call for each entry.
+ *
+ * @returns {void}
+ */
+const forEachEntry = (obj, fn) => {
+ const generator = obj && obj[Symbol.iterator];
+
+ const iterator = generator.call(obj);
+
+ let result;
+
+ while ((result = iterator.next()) && !result.done) {
+ const pair = result.value;
+ fn.call(obj, pair[0], pair[1]);
+ }
+}
+
+/**
+ * It takes a regular expression and a string, and returns an array of all the matches
+ *
+ * @param {string} regExp - The regular expression to match against.
+ * @param {string} str - The string to search.
+ *
+ * @returns {Array}
+ */
+const matchAll = (regExp, str) => {
+ let matches;
+ const arr = [];
+
+ while ((matches = regExp.exec(str)) !== null) {
+ arr.push(matches);
+ }
+
+ return arr;
+}
+
+/* Checking if the kindOfTest function returns true when passed an HTMLFormElement. */
+const isHTMLForm = kindOfTest('HTMLFormElement');
+
+const toCamelCase = str => {
+ return str.toLowerCase().replace(/[-_\s]([a-z\d])(\w*)/g,
+ function replacer(m, p1, p2) {
+ return p1.toUpperCase() + p2;
+ }
+ );
+};
+
+/* Creating a function that will check if an object has a property. */
+const hasOwnProperty = (({hasOwnProperty}) => (obj, prop) => hasOwnProperty.call(obj, prop))(Object.prototype);
+
+/**
+ * Determine if a value is a RegExp object
+ *
+ * @param {*} val The value to test
+ *
+ * @returns {boolean} True if value is a RegExp object, otherwise false
+ */
+const isRegExp = kindOfTest('RegExp');
+
+const reduceDescriptors = (obj, reducer) => {
+ const descriptors = Object.getOwnPropertyDescriptors(obj);
+ const reducedDescriptors = {};
+
+ forEach(descriptors, (descriptor, name) => {
+ let ret;
+ if ((ret = reducer(descriptor, name, obj)) !== false) {
+ reducedDescriptors[name] = ret || descriptor;
+ }
+ });
+
+ Object.defineProperties(obj, reducedDescriptors);
+}
+
+/**
+ * Makes all methods read-only
+ * @param {Object} obj
+ */
+
+const freezeMethods = (obj) => {
+ reduceDescriptors(obj, (descriptor, name) => {
+ // skip restricted props in strict mode
+ if (isFunction(obj) && ['arguments', 'caller', 'callee'].indexOf(name) !== -1) {
+ return false;
+ }
+
+ const value = obj[name];
+
+ if (!isFunction(value)) return;
+
+ descriptor.enumerable = false;
+
+ if ('writable' in descriptor) {
+ descriptor.writable = false;
+ return;
+ }
+
+ if (!descriptor.set) {
+ descriptor.set = () => {
+ throw Error('Can not rewrite read-only method \'' + name + '\'');
+ };
+ }
+ });
+}
+
+const toObjectSet = (arrayOrString, delimiter) => {
+ const obj = {};
+
+ const define = (arr) => {
+ arr.forEach(value => {
+ obj[value] = true;
+ });
+ }
+
+ isArray(arrayOrString) ? define(arrayOrString) : define(String(arrayOrString).split(delimiter));
+
+ return obj;
+}
+
+const noop = () => {}
+
+const toFiniteNumber = (value, defaultValue) => {
+ value = +value;
+ return Number.isFinite(value) ? value : defaultValue;
+}
+
+const ALPHA = 'abcdefghijklmnopqrstuvwxyz'
+
+const DIGIT = '0123456789';
+
+const ALPHABET = {
+ DIGIT,
+ ALPHA,
+ ALPHA_DIGIT: ALPHA + ALPHA.toUpperCase() + DIGIT
+}
+
+const generateString = (size = 16, alphabet = ALPHABET.ALPHA_DIGIT) => {
+ let str = '';
+ const {length} = alphabet;
+ while (size--) {
+ str += alphabet[Math.random() * length|0]
+ }
+
+ return str;
+}
+
+/**
+ * If the thing is a FormData object, return true, otherwise return false.
+ *
+ * @param {unknown} thing - The thing to check.
+ *
+ * @returns {boolean}
+ */
+function isSpecCompliantForm(thing) {
+ return !!(thing && isFunction(thing.append) && thing[Symbol.toStringTag] === 'FormData' && thing[Symbol.iterator]);
+}
+
+const toJSONObject = (obj) => {
+ const stack = new Array(10);
+
+ const visit = (source, i) => {
+
+ if (isObject(source)) {
+ if (stack.indexOf(source) >= 0) {
+ return;
+ }
+
+ if(!('toJSON' in source)) {
+ stack[i] = source;
+ const target = isArray(source) ? [] : {};
+
+ forEach(source, (value, key) => {
+ const reducedValue = visit(value, i + 1);
+ !isUndefined(reducedValue) && (target[key] = reducedValue);
+ });
+
+ stack[i] = undefined;
+
+ return target;
+ }
+ }
+
+ return source;
+ }
+
+ return visit(obj, 0);
+}
+
+const isAsyncFn = kindOfTest('AsyncFunction');
+
+const isThenable = (thing) =>
+ thing && (isObject(thing) || isFunction(thing)) && isFunction(thing.then) && isFunction(thing.catch);
+
+export default {
+ isArray,
+ isArrayBuffer,
+ isBuffer,
+ isFormData,
+ isArrayBufferView,
+ isString,
+ isNumber,
+ isBoolean,
+ isObject,
+ isPlainObject,
+ isUndefined,
+ isDate,
+ isFile,
+ isBlob,
+ isRegExp,
+ isFunction,
+ isStream,
+ isURLSearchParams,
+ isTypedArray,
+ isFileList,
+ forEach,
+ merge,
+ extend,
+ trim,
+ stripBOM,
+ inherits,
+ toFlatObject,
+ kindOf,
+ kindOfTest,
+ endsWith,
+ toArray,
+ forEachEntry,
+ matchAll,
+ isHTMLForm,
+ hasOwnProperty,
+ hasOwnProp: hasOwnProperty, // an alias to avoid ESLint no-prototype-builtins detection
+ reduceDescriptors,
+ freezeMethods,
+ toObjectSet,
+ toCamelCase,
+ noop,
+ toFiniteNumber,
+ findKey,
+ global: _global,
+ isContextDefined,
+ ALPHABET,
+ generateString,
+ isSpecCompliantForm,
+ toJSONObject,
+ isAsyncFn,
+ isThenable
+};
diff --git a/.output/server/node_modules/axios/package.json b/.output/server/node_modules/axios/package.json
new file mode 100644
index 0000000..28c14c8
--- /dev/null
+++ b/.output/server/node_modules/axios/package.json
@@ -0,0 +1,218 @@
+{
+ "name": "axios",
+ "version": "1.6.2",
+ "description": "Promise based HTTP client for the browser and node.js",
+ "main": "index.js",
+ "exports": {
+ ".": {
+ "types": {
+ "require": "./index.d.cts",
+ "default": "./index.d.ts"
+ },
+ "browser": {
+ "require": "./dist/browser/axios.cjs",
+ "default": "./index.js"
+ },
+ "default": {
+ "require": "./dist/node/axios.cjs",
+ "default": "./index.js"
+ }
+ },
+ "./lib/adapters/http.js": "./lib/adapters/http.js",
+ "./lib/adapters/xhr.js": "./lib/adapters/xhr.js",
+ "./unsafe/*": "./lib/*",
+ "./unsafe/core/settle.js": "./lib/core/settle.js",
+ "./unsafe/core/buildFullPath.js": "./lib/core/buildFullPath.js",
+ "./unsafe/helpers/isAbsoluteURL.js": "./lib/helpers/isAbsoluteURL.js",
+ "./unsafe/helpers/buildURL.js": "./lib/helpers/buildURL.js",
+ "./unsafe/helpers/combineURLs.js": "./lib/helpers/combineURLs.js",
+ "./unsafe/adapters/http.js": "./lib/adapters/http.js",
+ "./unsafe/adapters/xhr.js": "./lib/adapters/xhr.js",
+ "./unsafe/utils.js": "./lib/utils.js",
+ "./package.json": "./package.json"
+ },
+ "type": "module",
+ "types": "index.d.ts",
+ "scripts": {
+ "test": "npm run test:eslint && npm run test:mocha && npm run test:karma && npm run test:dtslint && npm run test:exports",
+ "test:eslint": "node bin/ssl_hotfix.js eslint lib/**/*.js",
+ "test:dtslint": "dtslint --localTs node_modules/typescript/lib",
+ "test:mocha": "node bin/ssl_hotfix.js mocha test/unit/**/*.js --timeout 30000 --exit",
+ "test:exports": "node bin/ssl_hotfix.js mocha test/module/test.js --timeout 30000 --exit",
+ "test:karma": "node bin/ssl_hotfix.js cross-env LISTEN_ADDR=:: karma start karma.conf.cjs --single-run",
+ "test:karma:firefox": "node bin/ssl_hotfix.js cross-env LISTEN_ADDR=:: Browsers=Firefox karma start karma.conf.cjs --single-run",
+ "test:karma:server": "node bin/ssl_hotfix.js cross-env karma start karma.conf.cjs",
+ "test:build:version": "node ./bin/check-build-version.js",
+ "start": "node ./sandbox/server.js",
+ "preversion": "gulp version",
+ "version": "npm run build && git add dist && git add package.json",
+ "prepublishOnly": "npm run test:build:version",
+ "postpublish": "git push && git push --tags",
+ "build": "gulp clear && cross-env NODE_ENV=production rollup -c -m",
+ "examples": "node ./examples/server.js",
+ "coveralls": "cat coverage/lcov.info | ./node_modules/coveralls/bin/coveralls.js",
+ "fix": "eslint --fix lib/**/*.js",
+ "prepare": "husky install && npm run prepare:hooks",
+ "prepare:hooks": "npx husky set .husky/commit-msg \"npx commitlint --edit $1\"",
+ "release:dry": "release-it --dry-run --no-npm",
+ "release:info": "release-it --release-version",
+ "release:beta:no-npm": "release-it --preRelease=beta --no-npm",
+ "release:beta": "release-it --preRelease=beta",
+ "release:no-npm": "release-it --no-npm",
+ "release:changelog:fix": "node ./bin/injectContributorsList.js && git add CHANGELOG.md",
+ "release": "release-it"
+ },
+ "repository": {
+ "type": "git",
+ "url": "https://github.com/axios/axios.git"
+ },
+ "keywords": [
+ "xhr",
+ "http",
+ "ajax",
+ "promise",
+ "node"
+ ],
+ "author": "Matt Zabriskie",
+ "license": "MIT",
+ "bugs": {
+ "url": "https://github.com/axios/axios/issues"
+ },
+ "homepage": "https://axios-http.com",
+ "devDependencies": {
+ "@babel/core": "^7.18.2",
+ "@babel/preset-env": "^7.18.2",
+ "@commitlint/cli": "^17.3.0",
+ "@commitlint/config-conventional": "^17.3.0",
+ "@release-it/conventional-changelog": "^5.1.1",
+ "@rollup/plugin-babel": "^5.3.1",
+ "@rollup/plugin-commonjs": "^15.1.0",
+ "@rollup/plugin-json": "^4.1.0",
+ "@rollup/plugin-multi-entry": "^4.0.0",
+ "@rollup/plugin-node-resolve": "^9.0.0",
+ "abortcontroller-polyfill": "^1.7.3",
+ "auto-changelog": "^2.4.0",
+ "body-parser": "^1.20.0",
+ "chalk": "^5.2.0",
+ "coveralls": "^3.1.1",
+ "cross-env": "^7.0.3",
+ "dev-null": "^0.1.1",
+ "dtslint": "^4.2.1",
+ "es6-promise": "^4.2.8",
+ "eslint": "^8.17.0",
+ "express": "^4.18.1",
+ "formdata-node": "^5.0.0",
+ "formidable": "^2.0.1",
+ "fs-extra": "^10.1.0",
+ "get-stream": "^3.0.0",
+ "gulp": "^4.0.2",
+ "gzip-size": "^7.0.0",
+ "handlebars": "^4.7.7",
+ "husky": "^8.0.2",
+ "istanbul-instrumenter-loader": "^3.0.1",
+ "jasmine-core": "^2.4.1",
+ "karma": "^6.3.17",
+ "karma-chrome-launcher": "^3.1.1",
+ "karma-firefox-launcher": "^2.1.2",
+ "karma-jasmine": "^1.1.1",
+ "karma-jasmine-ajax": "^0.1.13",
+ "karma-rollup-preprocessor": "^7.0.8",
+ "karma-safari-launcher": "^1.0.0",
+ "karma-sauce-launcher": "^4.3.6",
+ "karma-sinon": "^1.0.5",
+ "karma-sourcemap-loader": "^0.3.8",
+ "memoizee": "^0.4.15",
+ "minimist": "^1.2.7",
+ "mocha": "^10.0.0",
+ "multer": "^1.4.4",
+ "pretty-bytes": "^6.0.0",
+ "release-it": "^15.5.1",
+ "rollup": "^2.67.0",
+ "rollup-plugin-auto-external": "^2.0.0",
+ "rollup-plugin-bundle-size": "^1.0.3",
+ "rollup-plugin-terser": "^7.0.2",
+ "sinon": "^4.5.0",
+ "stream-throttle": "^0.1.3",
+ "string-replace-async": "^3.0.2",
+ "terser-webpack-plugin": "^4.2.3",
+ "typescript": "^4.8.4"
+ },
+ "browser": {
+ "./lib/adapters/http.js": "./lib/helpers/null.js",
+ "./lib/platform/node/index.js": "./lib/platform/browser/index.js",
+ "./lib/platform/node/classes/FormData.js": "./lib/helpers/null.js"
+ },
+ "jsdelivr": "dist/axios.min.js",
+ "unpkg": "dist/axios.min.js",
+ "typings": "./index.d.ts",
+ "dependencies": {
+ "follow-redirects": "^1.15.0",
+ "form-data": "^4.0.0",
+ "proxy-from-env": "^1.1.0"
+ },
+ "bundlesize": [
+ {
+ "path": "./dist/axios.min.js",
+ "threshold": "5kB"
+ }
+ ],
+ "contributors": [
+ "Matt Zabriskie (https://github.com/mzabriskie)",
+ "Nick Uraltsev (https://github.com/nickuraltsev)",
+ "Jay (https://github.com/jasonsaayman)",
+ "Dmitriy Mozgovoy (https://github.com/DigitalBrainJS)",
+ "Emily Morehouse (https://github.com/emilyemorehouse)",
+ "Rubén Norte (https://github.com/rubennorte)",
+ "Justin Beckwith (https://github.com/JustinBeckwith)",
+ "Martti Laine (https://github.com/codeclown)",
+ "Xianming Zhong (https://github.com/chinesedfan)",
+ "Rikki Gibson (https://github.com/RikkiGibson)",
+ "Remco Haszing (https://github.com/remcohaszing)",
+ "Yasu Flores (https://github.com/yasuf)",
+ "Ben Carp (https://github.com/carpben)"
+ ],
+ "sideEffects": false,
+ "release-it": {
+ "git": {
+ "commitMessage": "chore(release): v${version}",
+ "push": true,
+ "commit": true,
+ "tag": true,
+ "requireCommits": false,
+ "requireCleanWorkingDir": false
+ },
+ "github": {
+ "release": true,
+ "draft": true
+ },
+ "npm": {
+ "publish": false,
+ "ignoreVersion": false
+ },
+ "plugins": {
+ "@release-it/conventional-changelog": {
+ "preset": "angular",
+ "infile": "CHANGELOG.md",
+ "header": "# Changelog"
+ }
+ },
+ "hooks": {
+ "before:init": "npm test",
+ "after:bump": "gulp version --bump ${version} && npm run build && npm run test:build:version && git add ./dist && git add ./package-lock.json",
+ "before:release": "npm run release:changelog:fix",
+ "after:release": "echo Successfully released ${name} v${version} to ${repo.repository}."
+ }
+ },
+ "commitlint": {
+ "rules": {
+ "header-max-length": [
+ 2,
+ "always",
+ 130
+ ]
+ },
+ "extends": [
+ "@commitlint/config-conventional"
+ ]
+ }
+}
\ No newline at end of file
diff --git a/.output/server/node_modules/combined-stream/lib/combined_stream.js b/.output/server/node_modules/combined-stream/lib/combined_stream.js
new file mode 100644
index 0000000..125f097
--- /dev/null
+++ b/.output/server/node_modules/combined-stream/lib/combined_stream.js
@@ -0,0 +1,208 @@
+var util = require('util');
+var Stream = require('stream').Stream;
+var DelayedStream = require('delayed-stream');
+
+module.exports = CombinedStream;
+function CombinedStream() {
+ this.writable = false;
+ this.readable = true;
+ this.dataSize = 0;
+ this.maxDataSize = 2 * 1024 * 1024;
+ this.pauseStreams = true;
+
+ this._released = false;
+ this._streams = [];
+ this._currentStream = null;
+ this._insideLoop = false;
+ this._pendingNext = false;
+}
+util.inherits(CombinedStream, Stream);
+
+CombinedStream.create = function(options) {
+ var combinedStream = new this();
+
+ options = options || {};
+ for (var option in options) {
+ combinedStream[option] = options[option];
+ }
+
+ return combinedStream;
+};
+
+CombinedStream.isStreamLike = function(stream) {
+ return (typeof stream !== 'function')
+ && (typeof stream !== 'string')
+ && (typeof stream !== 'boolean')
+ && (typeof stream !== 'number')
+ && (!Buffer.isBuffer(stream));
+};
+
+CombinedStream.prototype.append = function(stream) {
+ var isStreamLike = CombinedStream.isStreamLike(stream);
+
+ if (isStreamLike) {
+ if (!(stream instanceof DelayedStream)) {
+ var newStream = DelayedStream.create(stream, {
+ maxDataSize: Infinity,
+ pauseStream: this.pauseStreams,
+ });
+ stream.on('data', this._checkDataSize.bind(this));
+ stream = newStream;
+ }
+
+ this._handleErrors(stream);
+
+ if (this.pauseStreams) {
+ stream.pause();
+ }
+ }
+
+ this._streams.push(stream);
+ return this;
+};
+
+CombinedStream.prototype.pipe = function(dest, options) {
+ Stream.prototype.pipe.call(this, dest, options);
+ this.resume();
+ return dest;
+};
+
+CombinedStream.prototype._getNext = function() {
+ this._currentStream = null;
+
+ if (this._insideLoop) {
+ this._pendingNext = true;
+ return; // defer call
+ }
+
+ this._insideLoop = true;
+ try {
+ do {
+ this._pendingNext = false;
+ this._realGetNext();
+ } while (this._pendingNext);
+ } finally {
+ this._insideLoop = false;
+ }
+};
+
+CombinedStream.prototype._realGetNext = function() {
+ var stream = this._streams.shift();
+
+
+ if (typeof stream == 'undefined') {
+ this.end();
+ return;
+ }
+
+ if (typeof stream !== 'function') {
+ this._pipeNext(stream);
+ return;
+ }
+
+ var getStream = stream;
+ getStream(function(stream) {
+ var isStreamLike = CombinedStream.isStreamLike(stream);
+ if (isStreamLike) {
+ stream.on('data', this._checkDataSize.bind(this));
+ this._handleErrors(stream);
+ }
+
+ this._pipeNext(stream);
+ }.bind(this));
+};
+
+CombinedStream.prototype._pipeNext = function(stream) {
+ this._currentStream = stream;
+
+ var isStreamLike = CombinedStream.isStreamLike(stream);
+ if (isStreamLike) {
+ stream.on('end', this._getNext.bind(this));
+ stream.pipe(this, {end: false});
+ return;
+ }
+
+ var value = stream;
+ this.write(value);
+ this._getNext();
+};
+
+CombinedStream.prototype._handleErrors = function(stream) {
+ var self = this;
+ stream.on('error', function(err) {
+ self._emitError(err);
+ });
+};
+
+CombinedStream.prototype.write = function(data) {
+ this.emit('data', data);
+};
+
+CombinedStream.prototype.pause = function() {
+ if (!this.pauseStreams) {
+ return;
+ }
+
+ if(this.pauseStreams && this._currentStream && typeof(this._currentStream.pause) == 'function') this._currentStream.pause();
+ this.emit('pause');
+};
+
+CombinedStream.prototype.resume = function() {
+ if (!this._released) {
+ this._released = true;
+ this.writable = true;
+ this._getNext();
+ }
+
+ if(this.pauseStreams && this._currentStream && typeof(this._currentStream.resume) == 'function') this._currentStream.resume();
+ this.emit('resume');
+};
+
+CombinedStream.prototype.end = function() {
+ this._reset();
+ this.emit('end');
+};
+
+CombinedStream.prototype.destroy = function() {
+ this._reset();
+ this.emit('close');
+};
+
+CombinedStream.prototype._reset = function() {
+ this.writable = false;
+ this._streams = [];
+ this._currentStream = null;
+};
+
+CombinedStream.prototype._checkDataSize = function() {
+ this._updateDataSize();
+ if (this.dataSize <= this.maxDataSize) {
+ return;
+ }
+
+ var message =
+ 'DelayedStream#maxDataSize of ' + this.maxDataSize + ' bytes exceeded.';
+ this._emitError(new Error(message));
+};
+
+CombinedStream.prototype._updateDataSize = function() {
+ this.dataSize = 0;
+
+ var self = this;
+ this._streams.forEach(function(stream) {
+ if (!stream.dataSize) {
+ return;
+ }
+
+ self.dataSize += stream.dataSize;
+ });
+
+ if (this._currentStream && this._currentStream.dataSize) {
+ this.dataSize += this._currentStream.dataSize;
+ }
+};
+
+CombinedStream.prototype._emitError = function(err) {
+ this._reset();
+ this.emit('error', err);
+};
diff --git a/.output/server/node_modules/combined-stream/package.json b/.output/server/node_modules/combined-stream/package.json
new file mode 100644
index 0000000..2830f91
--- /dev/null
+++ b/.output/server/node_modules/combined-stream/package.json
@@ -0,0 +1,25 @@
+{
+ "author": "Felix Geisendörfer (http://debuggable.com/)",
+ "name": "combined-stream",
+ "description": "A stream that emits multiple other streams one after another.",
+ "version": "1.0.8",
+ "homepage": "https://github.com/felixge/node-combined-stream",
+ "repository": {
+ "type": "git",
+ "url": "git://github.com/felixge/node-combined-stream.git"
+ },
+ "main": "./lib/combined_stream",
+ "scripts": {
+ "test": "node test/run.js"
+ },
+ "engines": {
+ "node": ">= 0.8"
+ },
+ "dependencies": {
+ "delayed-stream": "~1.0.0"
+ },
+ "devDependencies": {
+ "far": "~0.0.7"
+ },
+ "license": "MIT"
+}
\ No newline at end of file
diff --git a/.output/server/node_modules/debug/package.json b/.output/server/node_modules/debug/package.json
new file mode 100644
index 0000000..f2c58a7
--- /dev/null
+++ b/.output/server/node_modules/debug/package.json
@@ -0,0 +1,59 @@
+{
+ "name": "debug",
+ "version": "4.3.4",
+ "repository": {
+ "type": "git",
+ "url": "git://github.com/debug-js/debug.git"
+ },
+ "description": "Lightweight debugging utility for Node.js and the browser",
+ "keywords": [
+ "debug",
+ "log",
+ "debugger"
+ ],
+ "files": [
+ "src",
+ "LICENSE",
+ "README.md"
+ ],
+ "author": "Josh Junon ",
+ "contributors": [
+ "TJ Holowaychuk ",
+ "Nathan Rajlich (http://n8.io)",
+ "Andrew Rhyne "
+ ],
+ "license": "MIT",
+ "scripts": {
+ "lint": "xo",
+ "test": "npm run test:node && npm run test:browser && npm run lint",
+ "test:node": "istanbul cover _mocha -- test.js",
+ "test:browser": "karma start --single-run",
+ "test:coverage": "cat ./coverage/lcov.info | coveralls"
+ },
+ "dependencies": {
+ "ms": "2.1.2"
+ },
+ "devDependencies": {
+ "brfs": "^2.0.1",
+ "browserify": "^16.2.3",
+ "coveralls": "^3.0.2",
+ "istanbul": "^0.4.5",
+ "karma": "^3.1.4",
+ "karma-browserify": "^6.0.0",
+ "karma-chrome-launcher": "^2.2.0",
+ "karma-mocha": "^1.3.0",
+ "mocha": "^5.2.0",
+ "mocha-lcov-reporter": "^1.2.0",
+ "xo": "^0.23.0"
+ },
+ "peerDependenciesMeta": {
+ "supports-color": {
+ "optional": true
+ }
+ },
+ "main": "./src/index.js",
+ "browser": "./src/browser.js",
+ "engines": {
+ "node": ">=6.0"
+ }
+}
\ No newline at end of file
diff --git a/.output/server/node_modules/debug/src/browser.js b/.output/server/node_modules/debug/src/browser.js
new file mode 100644
index 0000000..cd0fc35
--- /dev/null
+++ b/.output/server/node_modules/debug/src/browser.js
@@ -0,0 +1,269 @@
+/* eslint-env browser */
+
+/**
+ * This is the web browser implementation of `debug()`.
+ */
+
+exports.formatArgs = formatArgs;
+exports.save = save;
+exports.load = load;
+exports.useColors = useColors;
+exports.storage = localstorage();
+exports.destroy = (() => {
+ let warned = false;
+
+ return () => {
+ if (!warned) {
+ warned = true;
+ console.warn('Instance method `debug.destroy()` is deprecated and no longer does anything. It will be removed in the next major version of `debug`.');
+ }
+ };
+})();
+
+/**
+ * Colors.
+ */
+
+exports.colors = [
+ '#0000CC',
+ '#0000FF',
+ '#0033CC',
+ '#0033FF',
+ '#0066CC',
+ '#0066FF',
+ '#0099CC',
+ '#0099FF',
+ '#00CC00',
+ '#00CC33',
+ '#00CC66',
+ '#00CC99',
+ '#00CCCC',
+ '#00CCFF',
+ '#3300CC',
+ '#3300FF',
+ '#3333CC',
+ '#3333FF',
+ '#3366CC',
+ '#3366FF',
+ '#3399CC',
+ '#3399FF',
+ '#33CC00',
+ '#33CC33',
+ '#33CC66',
+ '#33CC99',
+ '#33CCCC',
+ '#33CCFF',
+ '#6600CC',
+ '#6600FF',
+ '#6633CC',
+ '#6633FF',
+ '#66CC00',
+ '#66CC33',
+ '#9900CC',
+ '#9900FF',
+ '#9933CC',
+ '#9933FF',
+ '#99CC00',
+ '#99CC33',
+ '#CC0000',
+ '#CC0033',
+ '#CC0066',
+ '#CC0099',
+ '#CC00CC',
+ '#CC00FF',
+ '#CC3300',
+ '#CC3333',
+ '#CC3366',
+ '#CC3399',
+ '#CC33CC',
+ '#CC33FF',
+ '#CC6600',
+ '#CC6633',
+ '#CC9900',
+ '#CC9933',
+ '#CCCC00',
+ '#CCCC33',
+ '#FF0000',
+ '#FF0033',
+ '#FF0066',
+ '#FF0099',
+ '#FF00CC',
+ '#FF00FF',
+ '#FF3300',
+ '#FF3333',
+ '#FF3366',
+ '#FF3399',
+ '#FF33CC',
+ '#FF33FF',
+ '#FF6600',
+ '#FF6633',
+ '#FF9900',
+ '#FF9933',
+ '#FFCC00',
+ '#FFCC33'
+];
+
+/**
+ * Currently only WebKit-based Web Inspectors, Firefox >= v31,
+ * and the Firebug extension (any Firefox version) are known
+ * to support "%c" CSS customizations.
+ *
+ * TODO: add a `localStorage` variable to explicitly enable/disable colors
+ */
+
+// eslint-disable-next-line complexity
+function useColors() {
+ // NB: In an Electron preload script, document will be defined but not fully
+ // initialized. Since we know we're in Chrome, we'll just detect this case
+ // explicitly
+ if (typeof window !== 'undefined' && window.process && (window.process.type === 'renderer' || window.process.__nwjs)) {
+ return true;
+ }
+
+ // Internet Explorer and Edge do not support colors.
+ if (typeof navigator !== 'undefined' && navigator.userAgent && navigator.userAgent.toLowerCase().match(/(edge|trident)\/(\d+)/)) {
+ return false;
+ }
+
+ // Is webkit? http://stackoverflow.com/a/16459606/376773
+ // document is undefined in react-native: https://github.com/facebook/react-native/pull/1632
+ return (typeof document !== 'undefined' && document.documentElement && document.documentElement.style && document.documentElement.style.WebkitAppearance) ||
+ // Is firebug? http://stackoverflow.com/a/398120/376773
+ (typeof window !== 'undefined' && window.console && (window.console.firebug || (window.console.exception && window.console.table))) ||
+ // Is firefox >= v31?
+ // https://developer.mozilla.org/en-US/docs/Tools/Web_Console#Styling_messages
+ (typeof navigator !== 'undefined' && navigator.userAgent && navigator.userAgent.toLowerCase().match(/firefox\/(\d+)/) && parseInt(RegExp.$1, 10) >= 31) ||
+ // Double check webkit in userAgent just in case we are in a worker
+ (typeof navigator !== 'undefined' && navigator.userAgent && navigator.userAgent.toLowerCase().match(/applewebkit\/(\d+)/));
+}
+
+/**
+ * Colorize log arguments if enabled.
+ *
+ * @api public
+ */
+
+function formatArgs(args) {
+ args[0] = (this.useColors ? '%c' : '') +
+ this.namespace +
+ (this.useColors ? ' %c' : ' ') +
+ args[0] +
+ (this.useColors ? '%c ' : ' ') +
+ '+' + module.exports.humanize(this.diff);
+
+ if (!this.useColors) {
+ return;
+ }
+
+ const c = 'color: ' + this.color;
+ args.splice(1, 0, c, 'color: inherit');
+
+ // The final "%c" is somewhat tricky, because there could be other
+ // arguments passed either before or after the %c, so we need to
+ // figure out the correct index to insert the CSS into
+ let index = 0;
+ let lastC = 0;
+ args[0].replace(/%[a-zA-Z%]/g, match => {
+ if (match === '%%') {
+ return;
+ }
+ index++;
+ if (match === '%c') {
+ // We only are interested in the *last* %c
+ // (the user may have provided their own)
+ lastC = index;
+ }
+ });
+
+ args.splice(lastC, 0, c);
+}
+
+/**
+ * Invokes `console.debug()` when available.
+ * No-op when `console.debug` is not a "function".
+ * If `console.debug` is not available, falls back
+ * to `console.log`.
+ *
+ * @api public
+ */
+exports.log = console.debug || console.log || (() => {});
+
+/**
+ * Save `namespaces`.
+ *
+ * @param {String} namespaces
+ * @api private
+ */
+function save(namespaces) {
+ try {
+ if (namespaces) {
+ exports.storage.setItem('debug', namespaces);
+ } else {
+ exports.storage.removeItem('debug');
+ }
+ } catch (error) {
+ // Swallow
+ // XXX (@Qix-) should we be logging these?
+ }
+}
+
+/**
+ * Load `namespaces`.
+ *
+ * @return {String} returns the previously persisted debug modes
+ * @api private
+ */
+function load() {
+ let r;
+ try {
+ r = exports.storage.getItem('debug');
+ } catch (error) {
+ // Swallow
+ // XXX (@Qix-) should we be logging these?
+ }
+
+ // If debug isn't set in LS, and we're in Electron, try to load $DEBUG
+ if (!r && typeof process !== 'undefined' && 'env' in process) {
+ r = process.env.DEBUG;
+ }
+
+ return r;
+}
+
+/**
+ * Localstorage attempts to return the localstorage.
+ *
+ * This is necessary because safari throws
+ * when a user disables cookies/localstorage
+ * and you attempt to access it.
+ *
+ * @return {LocalStorage}
+ * @api private
+ */
+
+function localstorage() {
+ try {
+ // TVMLKit (Apple TV JS Runtime) does not have a window object, just localStorage in the global context
+ // The Browser also has localStorage in the global context.
+ return localStorage;
+ } catch (error) {
+ // Swallow
+ // XXX (@Qix-) should we be logging these?
+ }
+}
+
+module.exports = require('./common')(exports);
+
+const {formatters} = module.exports;
+
+/**
+ * Map %j to `JSON.stringify()`, since no Web Inspectors do that by default.
+ */
+
+formatters.j = function (v) {
+ try {
+ return JSON.stringify(v);
+ } catch (error) {
+ return '[UnexpectedJSONParseError]: ' + error.message;
+ }
+};
diff --git a/.output/server/node_modules/debug/src/common.js b/.output/server/node_modules/debug/src/common.js
new file mode 100644
index 0000000..e3291b2
--- /dev/null
+++ b/.output/server/node_modules/debug/src/common.js
@@ -0,0 +1,274 @@
+
+/**
+ * This is the common logic for both the Node.js and web browser
+ * implementations of `debug()`.
+ */
+
+function setup(env) {
+ createDebug.debug = createDebug;
+ createDebug.default = createDebug;
+ createDebug.coerce = coerce;
+ createDebug.disable = disable;
+ createDebug.enable = enable;
+ createDebug.enabled = enabled;
+ createDebug.humanize = require('ms');
+ createDebug.destroy = destroy;
+
+ Object.keys(env).forEach(key => {
+ createDebug[key] = env[key];
+ });
+
+ /**
+ * The currently active debug mode names, and names to skip.
+ */
+
+ createDebug.names = [];
+ createDebug.skips = [];
+
+ /**
+ * Map of special "%n" handling functions, for the debug "format" argument.
+ *
+ * Valid key names are a single, lower or upper-case letter, i.e. "n" and "N".
+ */
+ createDebug.formatters = {};
+
+ /**
+ * Selects a color for a debug namespace
+ * @param {String} namespace The namespace string for the debug instance to be colored
+ * @return {Number|String} An ANSI color code for the given namespace
+ * @api private
+ */
+ function selectColor(namespace) {
+ let hash = 0;
+
+ for (let i = 0; i < namespace.length; i++) {
+ hash = ((hash << 5) - hash) + namespace.charCodeAt(i);
+ hash |= 0; // Convert to 32bit integer
+ }
+
+ return createDebug.colors[Math.abs(hash) % createDebug.colors.length];
+ }
+ createDebug.selectColor = selectColor;
+
+ /**
+ * Create a debugger with the given `namespace`.
+ *
+ * @param {String} namespace
+ * @return {Function}
+ * @api public
+ */
+ function createDebug(namespace) {
+ let prevTime;
+ let enableOverride = null;
+ let namespacesCache;
+ let enabledCache;
+
+ function debug(...args) {
+ // Disabled?
+ if (!debug.enabled) {
+ return;
+ }
+
+ const self = debug;
+
+ // Set `diff` timestamp
+ const curr = Number(new Date());
+ const ms = curr - (prevTime || curr);
+ self.diff = ms;
+ self.prev = prevTime;
+ self.curr = curr;
+ prevTime = curr;
+
+ args[0] = createDebug.coerce(args[0]);
+
+ if (typeof args[0] !== 'string') {
+ // Anything else let's inspect with %O
+ args.unshift('%O');
+ }
+
+ // Apply any `formatters` transformations
+ let index = 0;
+ args[0] = args[0].replace(/%([a-zA-Z%])/g, (match, format) => {
+ // If we encounter an escaped % then don't increase the array index
+ if (match === '%%') {
+ return '%';
+ }
+ index++;
+ const formatter = createDebug.formatters[format];
+ if (typeof formatter === 'function') {
+ const val = args[index];
+ match = formatter.call(self, val);
+
+ // Now we need to remove `args[index]` since it's inlined in the `format`
+ args.splice(index, 1);
+ index--;
+ }
+ return match;
+ });
+
+ // Apply env-specific formatting (colors, etc.)
+ createDebug.formatArgs.call(self, args);
+
+ const logFn = self.log || createDebug.log;
+ logFn.apply(self, args);
+ }
+
+ debug.namespace = namespace;
+ debug.useColors = createDebug.useColors();
+ debug.color = createDebug.selectColor(namespace);
+ debug.extend = extend;
+ debug.destroy = createDebug.destroy; // XXX Temporary. Will be removed in the next major release.
+
+ Object.defineProperty(debug, 'enabled', {
+ enumerable: true,
+ configurable: false,
+ get: () => {
+ if (enableOverride !== null) {
+ return enableOverride;
+ }
+ if (namespacesCache !== createDebug.namespaces) {
+ namespacesCache = createDebug.namespaces;
+ enabledCache = createDebug.enabled(namespace);
+ }
+
+ return enabledCache;
+ },
+ set: v => {
+ enableOverride = v;
+ }
+ });
+
+ // Env-specific initialization logic for debug instances
+ if (typeof createDebug.init === 'function') {
+ createDebug.init(debug);
+ }
+
+ return debug;
+ }
+
+ function extend(namespace, delimiter) {
+ const newDebug = createDebug(this.namespace + (typeof delimiter === 'undefined' ? ':' : delimiter) + namespace);
+ newDebug.log = this.log;
+ return newDebug;
+ }
+
+ /**
+ * Enables a debug mode by namespaces. This can include modes
+ * separated by a colon and wildcards.
+ *
+ * @param {String} namespaces
+ * @api public
+ */
+ function enable(namespaces) {
+ createDebug.save(namespaces);
+ createDebug.namespaces = namespaces;
+
+ createDebug.names = [];
+ createDebug.skips = [];
+
+ let i;
+ const split = (typeof namespaces === 'string' ? namespaces : '').split(/[\s,]+/);
+ const len = split.length;
+
+ for (i = 0; i < len; i++) {
+ if (!split[i]) {
+ // ignore empty strings
+ continue;
+ }
+
+ namespaces = split[i].replace(/\*/g, '.*?');
+
+ if (namespaces[0] === '-') {
+ createDebug.skips.push(new RegExp('^' + namespaces.slice(1) + '$'));
+ } else {
+ createDebug.names.push(new RegExp('^' + namespaces + '$'));
+ }
+ }
+ }
+
+ /**
+ * Disable debug output.
+ *
+ * @return {String} namespaces
+ * @api public
+ */
+ function disable() {
+ const namespaces = [
+ ...createDebug.names.map(toNamespace),
+ ...createDebug.skips.map(toNamespace).map(namespace => '-' + namespace)
+ ].join(',');
+ createDebug.enable('');
+ return namespaces;
+ }
+
+ /**
+ * Returns true if the given mode name is enabled, false otherwise.
+ *
+ * @param {String} name
+ * @return {Boolean}
+ * @api public
+ */
+ function enabled(name) {
+ if (name[name.length - 1] === '*') {
+ return true;
+ }
+
+ let i;
+ let len;
+
+ for (i = 0, len = createDebug.skips.length; i < len; i++) {
+ if (createDebug.skips[i].test(name)) {
+ return false;
+ }
+ }
+
+ for (i = 0, len = createDebug.names.length; i < len; i++) {
+ if (createDebug.names[i].test(name)) {
+ return true;
+ }
+ }
+
+ return false;
+ }
+
+ /**
+ * Convert regexp to namespace
+ *
+ * @param {RegExp} regxep
+ * @return {String} namespace
+ * @api private
+ */
+ function toNamespace(regexp) {
+ return regexp.toString()
+ .substring(2, regexp.toString().length - 2)
+ .replace(/\.\*\?$/, '*');
+ }
+
+ /**
+ * Coerce `val`.
+ *
+ * @param {Mixed} val
+ * @return {Mixed}
+ * @api private
+ */
+ function coerce(val) {
+ if (val instanceof Error) {
+ return val.stack || val.message;
+ }
+ return val;
+ }
+
+ /**
+ * XXX DO NOT USE. This is a temporary stub function.
+ * XXX It WILL be removed in the next major release.
+ */
+ function destroy() {
+ console.warn('Instance method `debug.destroy()` is deprecated and no longer does anything. It will be removed in the next major version of `debug`.');
+ }
+
+ createDebug.enable(createDebug.load());
+
+ return createDebug;
+}
+
+module.exports = setup;
diff --git a/.output/server/node_modules/debug/src/index.js b/.output/server/node_modules/debug/src/index.js
new file mode 100644
index 0000000..bf4c57f
--- /dev/null
+++ b/.output/server/node_modules/debug/src/index.js
@@ -0,0 +1,10 @@
+/**
+ * Detect Electron renderer / nwjs process, which is node, but we should
+ * treat as a browser.
+ */
+
+if (typeof process === 'undefined' || process.type === 'renderer' || process.browser === true || process.__nwjs) {
+ module.exports = require('./browser.js');
+} else {
+ module.exports = require('./node.js');
+}
diff --git a/.output/server/node_modules/debug/src/node.js b/.output/server/node_modules/debug/src/node.js
new file mode 100644
index 0000000..79bc085
--- /dev/null
+++ b/.output/server/node_modules/debug/src/node.js
@@ -0,0 +1,263 @@
+/**
+ * Module dependencies.
+ */
+
+const tty = require('tty');
+const util = require('util');
+
+/**
+ * This is the Node.js implementation of `debug()`.
+ */
+
+exports.init = init;
+exports.log = log;
+exports.formatArgs = formatArgs;
+exports.save = save;
+exports.load = load;
+exports.useColors = useColors;
+exports.destroy = util.deprecate(
+ () => {},
+ 'Instance method `debug.destroy()` is deprecated and no longer does anything. It will be removed in the next major version of `debug`.'
+);
+
+/**
+ * Colors.
+ */
+
+exports.colors = [6, 2, 3, 4, 5, 1];
+
+try {
+ // Optional dependency (as in, doesn't need to be installed, NOT like optionalDependencies in package.json)
+ // eslint-disable-next-line import/no-extraneous-dependencies
+ const supportsColor = require('supports-color');
+
+ if (supportsColor && (supportsColor.stderr || supportsColor).level >= 2) {
+ exports.colors = [
+ 20,
+ 21,
+ 26,
+ 27,
+ 32,
+ 33,
+ 38,
+ 39,
+ 40,
+ 41,
+ 42,
+ 43,
+ 44,
+ 45,
+ 56,
+ 57,
+ 62,
+ 63,
+ 68,
+ 69,
+ 74,
+ 75,
+ 76,
+ 77,
+ 78,
+ 79,
+ 80,
+ 81,
+ 92,
+ 93,
+ 98,
+ 99,
+ 112,
+ 113,
+ 128,
+ 129,
+ 134,
+ 135,
+ 148,
+ 149,
+ 160,
+ 161,
+ 162,
+ 163,
+ 164,
+ 165,
+ 166,
+ 167,
+ 168,
+ 169,
+ 170,
+ 171,
+ 172,
+ 173,
+ 178,
+ 179,
+ 184,
+ 185,
+ 196,
+ 197,
+ 198,
+ 199,
+ 200,
+ 201,
+ 202,
+ 203,
+ 204,
+ 205,
+ 206,
+ 207,
+ 208,
+ 209,
+ 214,
+ 215,
+ 220,
+ 221
+ ];
+ }
+} catch (error) {
+ // Swallow - we only care if `supports-color` is available; it doesn't have to be.
+}
+
+/**
+ * Build up the default `inspectOpts` object from the environment variables.
+ *
+ * $ DEBUG_COLORS=no DEBUG_DEPTH=10 DEBUG_SHOW_HIDDEN=enabled node script.js
+ */
+
+exports.inspectOpts = Object.keys(process.env).filter(key => {
+ return /^debug_/i.test(key);
+}).reduce((obj, key) => {
+ // Camel-case
+ const prop = key
+ .substring(6)
+ .toLowerCase()
+ .replace(/_([a-z])/g, (_, k) => {
+ return k.toUpperCase();
+ });
+
+ // Coerce string value into JS value
+ let val = process.env[key];
+ if (/^(yes|on|true|enabled)$/i.test(val)) {
+ val = true;
+ } else if (/^(no|off|false|disabled)$/i.test(val)) {
+ val = false;
+ } else if (val === 'null') {
+ val = null;
+ } else {
+ val = Number(val);
+ }
+
+ obj[prop] = val;
+ return obj;
+}, {});
+
+/**
+ * Is stdout a TTY? Colored output is enabled when `true`.
+ */
+
+function useColors() {
+ return 'colors' in exports.inspectOpts ?
+ Boolean(exports.inspectOpts.colors) :
+ tty.isatty(process.stderr.fd);
+}
+
+/**
+ * Adds ANSI color escape codes if enabled.
+ *
+ * @api public
+ */
+
+function formatArgs(args) {
+ const {namespace: name, useColors} = this;
+
+ if (useColors) {
+ const c = this.color;
+ const colorCode = '\u001B[3' + (c < 8 ? c : '8;5;' + c);
+ const prefix = ` ${colorCode};1m${name} \u001B[0m`;
+
+ args[0] = prefix + args[0].split('\n').join('\n' + prefix);
+ args.push(colorCode + 'm+' + module.exports.humanize(this.diff) + '\u001B[0m');
+ } else {
+ args[0] = getDate() + name + ' ' + args[0];
+ }
+}
+
+function getDate() {
+ if (exports.inspectOpts.hideDate) {
+ return '';
+ }
+ return new Date().toISOString() + ' ';
+}
+
+/**
+ * Invokes `util.format()` with the specified arguments and writes to stderr.
+ */
+
+function log(...args) {
+ return process.stderr.write(util.format(...args) + '\n');
+}
+
+/**
+ * Save `namespaces`.
+ *
+ * @param {String} namespaces
+ * @api private
+ */
+function save(namespaces) {
+ if (namespaces) {
+ process.env.DEBUG = namespaces;
+ } else {
+ // If you set a process.env field to null or undefined, it gets cast to the
+ // string 'null' or 'undefined'. Just delete instead.
+ delete process.env.DEBUG;
+ }
+}
+
+/**
+ * Load `namespaces`.
+ *
+ * @return {String} returns the previously persisted debug modes
+ * @api private
+ */
+
+function load() {
+ return process.env.DEBUG;
+}
+
+/**
+ * Init logic for `debug` instances.
+ *
+ * Create a new `inspectOpts` object in case `useColors` is set
+ * differently for a particular `debug` instance.
+ */
+
+function init(debug) {
+ debug.inspectOpts = {};
+
+ const keys = Object.keys(exports.inspectOpts);
+ for (let i = 0; i < keys.length; i++) {
+ debug.inspectOpts[keys[i]] = exports.inspectOpts[keys[i]];
+ }
+}
+
+module.exports = require('./common')(exports);
+
+const {formatters} = module.exports;
+
+/**
+ * Map %o to `util.inspect()`, all on a single line.
+ */
+
+formatters.o = function (v) {
+ this.inspectOpts.colors = this.useColors;
+ return util.inspect(v, this.inspectOpts)
+ .split('\n')
+ .map(str => str.trim())
+ .join(' ');
+};
+
+/**
+ * Map %O to `util.inspect()`, allowing multiple lines if needed.
+ */
+
+formatters.O = function (v) {
+ this.inspectOpts.colors = this.useColors;
+ return util.inspect(v, this.inspectOpts);
+};
diff --git a/.output/server/node_modules/delayed-stream/lib/delayed_stream.js b/.output/server/node_modules/delayed-stream/lib/delayed_stream.js
new file mode 100644
index 0000000..b38fc85
--- /dev/null
+++ b/.output/server/node_modules/delayed-stream/lib/delayed_stream.js
@@ -0,0 +1,107 @@
+var Stream = require('stream').Stream;
+var util = require('util');
+
+module.exports = DelayedStream;
+function DelayedStream() {
+ this.source = null;
+ this.dataSize = 0;
+ this.maxDataSize = 1024 * 1024;
+ this.pauseStream = true;
+
+ this._maxDataSizeExceeded = false;
+ this._released = false;
+ this._bufferedEvents = [];
+}
+util.inherits(DelayedStream, Stream);
+
+DelayedStream.create = function(source, options) {
+ var delayedStream = new this();
+
+ options = options || {};
+ for (var option in options) {
+ delayedStream[option] = options[option];
+ }
+
+ delayedStream.source = source;
+
+ var realEmit = source.emit;
+ source.emit = function() {
+ delayedStream._handleEmit(arguments);
+ return realEmit.apply(source, arguments);
+ };
+
+ source.on('error', function() {});
+ if (delayedStream.pauseStream) {
+ source.pause();
+ }
+
+ return delayedStream;
+};
+
+Object.defineProperty(DelayedStream.prototype, 'readable', {
+ configurable: true,
+ enumerable: true,
+ get: function() {
+ return this.source.readable;
+ }
+});
+
+DelayedStream.prototype.setEncoding = function() {
+ return this.source.setEncoding.apply(this.source, arguments);
+};
+
+DelayedStream.prototype.resume = function() {
+ if (!this._released) {
+ this.release();
+ }
+
+ this.source.resume();
+};
+
+DelayedStream.prototype.pause = function() {
+ this.source.pause();
+};
+
+DelayedStream.prototype.release = function() {
+ this._released = true;
+
+ this._bufferedEvents.forEach(function(args) {
+ this.emit.apply(this, args);
+ }.bind(this));
+ this._bufferedEvents = [];
+};
+
+DelayedStream.prototype.pipe = function() {
+ var r = Stream.prototype.pipe.apply(this, arguments);
+ this.resume();
+ return r;
+};
+
+DelayedStream.prototype._handleEmit = function(args) {
+ if (this._released) {
+ this.emit.apply(this, args);
+ return;
+ }
+
+ if (args[0] === 'data') {
+ this.dataSize += args[1].length;
+ this._checkIfMaxDataSizeExceeded();
+ }
+
+ this._bufferedEvents.push(args);
+};
+
+DelayedStream.prototype._checkIfMaxDataSizeExceeded = function() {
+ if (this._maxDataSizeExceeded) {
+ return;
+ }
+
+ if (this.dataSize <= this.maxDataSize) {
+ return;
+ }
+
+ this._maxDataSizeExceeded = true;
+ var message =
+ 'DelayedStream#maxDataSize of ' + this.maxDataSize + ' bytes exceeded.'
+ this.emit('error', new Error(message));
+};
diff --git a/.output/server/node_modules/delayed-stream/package.json b/.output/server/node_modules/delayed-stream/package.json
new file mode 100644
index 0000000..0f278e8
--- /dev/null
+++ b/.output/server/node_modules/delayed-stream/package.json
@@ -0,0 +1,27 @@
+{
+ "author": "Felix Geisendörfer (http://debuggable.com/)",
+ "contributors": [
+ "Mike Atkins "
+ ],
+ "name": "delayed-stream",
+ "description": "Buffers events from a stream until you are ready to handle them.",
+ "license": "MIT",
+ "version": "1.0.0",
+ "homepage": "https://github.com/felixge/node-delayed-stream",
+ "repository": {
+ "type": "git",
+ "url": "git://github.com/felixge/node-delayed-stream.git"
+ },
+ "main": "./lib/delayed_stream",
+ "engines": {
+ "node": ">=0.4.0"
+ },
+ "scripts": {
+ "test": "make test"
+ },
+ "dependencies": {},
+ "devDependencies": {
+ "fake": "0.2.0",
+ "far": "0.0.1"
+ }
+}
\ No newline at end of file
diff --git a/.output/server/node_modules/devalue/index.js b/.output/server/node_modules/devalue/index.js
new file mode 100644
index 0000000..2bdd761
--- /dev/null
+++ b/.output/server/node_modules/devalue/index.js
@@ -0,0 +1,3 @@
+export { uneval } from './src/uneval.js';
+export { parse, unflatten } from './src/parse.js';
+export { stringify } from './src/stringify.js';
diff --git a/.output/server/node_modules/devalue/package.json b/.output/server/node_modules/devalue/package.json
new file mode 100644
index 0000000..4bf13e2
--- /dev/null
+++ b/.output/server/node_modules/devalue/package.json
@@ -0,0 +1,33 @@
+{
+ "name": "devalue",
+ "description": "Gets the job done when JSON.stringify can't",
+ "version": "4.3.2",
+ "repository": "Rich-Harris/devalue",
+ "exports": {
+ ".": {
+ "types": "./types/index.d.ts",
+ "import": "./index.js",
+ "default": "./index.js"
+ }
+ },
+ "files": [
+ "index.js",
+ "src",
+ "types"
+ ],
+ "types": "./types/index.d.ts",
+ "devDependencies": {
+ "dts-buddy": "^0.0.4",
+ "publint": "^0.1.7",
+ "typescript": "^3.1.3",
+ "uvu": "^0.5.6"
+ },
+ "scripts": {
+ "build": "dts-buddy",
+ "test": "uvu test",
+ "prepublishOnly": "npm test && publint && npm run build"
+ },
+ "license": "MIT",
+ "type": "module",
+ "packageManager": "pnpm@8.5.1"
+}
\ No newline at end of file
diff --git a/.output/server/node_modules/devalue/src/constants.js b/.output/server/node_modules/devalue/src/constants.js
new file mode 100644
index 0000000..ea9fda2
--- /dev/null
+++ b/.output/server/node_modules/devalue/src/constants.js
@@ -0,0 +1,6 @@
+export const UNDEFINED = -1;
+export const HOLE = -2;
+export const NAN = -3;
+export const POSITIVE_INFINITY = -4;
+export const NEGATIVE_INFINITY = -5;
+export const NEGATIVE_ZERO = -6;
diff --git a/.output/server/node_modules/devalue/src/parse.js b/.output/server/node_modules/devalue/src/parse.js
new file mode 100644
index 0000000..54cdeba
--- /dev/null
+++ b/.output/server/node_modules/devalue/src/parse.js
@@ -0,0 +1,133 @@
+import {
+ HOLE,
+ NAN,
+ NEGATIVE_INFINITY,
+ NEGATIVE_ZERO,
+ POSITIVE_INFINITY,
+ UNDEFINED
+} from './constants.js';
+
+/**
+ * Revive a value serialized with `devalue.stringify`
+ * @param {string} serialized
+ * @param {Record any>} [revivers]
+ */
+export function parse(serialized, revivers) {
+ return unflatten(JSON.parse(serialized), revivers);
+}
+
+/**
+ * Revive a value flattened with `devalue.stringify`
+ * @param {number | any[]} parsed
+ * @param {Record any>} [revivers]
+ */
+export function unflatten(parsed, revivers) {
+ if (typeof parsed === 'number') return hydrate(parsed, true);
+
+ if (!Array.isArray(parsed) || parsed.length === 0) {
+ throw new Error('Invalid input');
+ }
+
+ const values = /** @type {any[]} */ (parsed);
+
+ const hydrated = Array(values.length);
+
+ /**
+ * @param {number} index
+ * @returns {any}
+ */
+ function hydrate(index, standalone = false) {
+ if (index === UNDEFINED) return undefined;
+ if (index === NAN) return NaN;
+ if (index === POSITIVE_INFINITY) return Infinity;
+ if (index === NEGATIVE_INFINITY) return -Infinity;
+ if (index === NEGATIVE_ZERO) return -0;
+
+ if (standalone) throw new Error(`Invalid input`);
+
+ if (index in hydrated) return hydrated[index];
+
+ const value = values[index];
+
+ if (!value || typeof value !== 'object') {
+ hydrated[index] = value;
+ } else if (Array.isArray(value)) {
+ if (typeof value[0] === 'string') {
+ const type = value[0];
+
+ const reviver = revivers?.[type];
+ if (reviver) {
+ return (hydrated[index] = reviver(hydrate(value[1])));
+ }
+
+ switch (type) {
+ case 'Date':
+ hydrated[index] = new Date(value[1]);
+ break;
+
+ case 'Set':
+ const set = new Set();
+ hydrated[index] = set;
+ for (let i = 1; i < value.length; i += 1) {
+ set.add(hydrate(value[i]));
+ }
+ break;
+
+ case 'Map':
+ const map = new Map();
+ hydrated[index] = map;
+ for (let i = 1; i < value.length; i += 2) {
+ map.set(hydrate(value[i]), hydrate(value[i + 1]));
+ }
+ break;
+
+ case 'RegExp':
+ hydrated[index] = new RegExp(value[1], value[2]);
+ break;
+
+ case 'Object':
+ hydrated[index] = Object(value[1]);
+ break;
+
+ case 'BigInt':
+ hydrated[index] = BigInt(value[1]);
+ break;
+
+ case 'null':
+ const obj = Object.create(null);
+ hydrated[index] = obj;
+ for (let i = 1; i < value.length; i += 2) {
+ obj[value[i]] = hydrate(value[i + 1]);
+ }
+ break;
+
+ default:
+ throw new Error(`Unknown type ${type}`);
+ }
+ } else {
+ const array = new Array(value.length);
+ hydrated[index] = array;
+
+ for (let i = 0; i < value.length; i += 1) {
+ const n = value[i];
+ if (n === HOLE) continue;
+
+ array[i] = hydrate(n);
+ }
+ }
+ } else {
+ /** @type {Record} */
+ const object = {};
+ hydrated[index] = object;
+
+ for (const key in value) {
+ const n = value[key];
+ object[key] = hydrate(n);
+ }
+ }
+
+ return hydrated[index];
+ }
+
+ return hydrate(0);
+}
diff --git a/.output/server/node_modules/devalue/src/stringify.js b/.output/server/node_modules/devalue/src/stringify.js
new file mode 100644
index 0000000..8ce427e
--- /dev/null
+++ b/.output/server/node_modules/devalue/src/stringify.js
@@ -0,0 +1,198 @@
+import {
+ DevalueError,
+ get_type,
+ is_plain_object,
+ is_primitive,
+ stringify_string
+} from './utils.js';
+import {
+ HOLE,
+ NAN,
+ NEGATIVE_INFINITY,
+ NEGATIVE_ZERO,
+ POSITIVE_INFINITY,
+ UNDEFINED
+} from './constants.js';
+
+/**
+ * Turn a value into a JSON string that can be parsed with `devalue.parse`
+ * @param {any} value
+ * @param {Record any>} [reducers]
+ */
+export function stringify(value, reducers) {
+ /** @type {any[]} */
+ const stringified = [];
+
+ /** @type {Map} */
+ const indexes = new Map();
+
+ /** @type {Array<{ key: string, fn: (value: any) => any }>} */
+ const custom = [];
+ for (const key in reducers) {
+ custom.push({ key, fn: reducers[key] });
+ }
+
+ /** @type {string[]} */
+ const keys = [];
+
+ let p = 0;
+
+ /** @param {any} thing */
+ function flatten(thing) {
+ if (typeof thing === 'function') {
+ throw new DevalueError(`Cannot stringify a function`, keys);
+ }
+
+ if (indexes.has(thing)) return indexes.get(thing);
+
+ if (thing === undefined) return UNDEFINED;
+ if (Number.isNaN(thing)) return NAN;
+ if (thing === Infinity) return POSITIVE_INFINITY;
+ if (thing === -Infinity) return NEGATIVE_INFINITY;
+ if (thing === 0 && 1 / thing < 0) return NEGATIVE_ZERO;
+
+ const index = p++;
+ indexes.set(thing, index);
+
+ for (const { key, fn } of custom) {
+ const value = fn(thing);
+ if (value) {
+ stringified[index] = `["${key}",${flatten(value)}]`;
+ return index;
+ }
+ }
+
+ let str = '';
+
+ if (is_primitive(thing)) {
+ str = stringify_primitive(thing);
+ } else {
+ const type = get_type(thing);
+
+ switch (type) {
+ case 'Number':
+ case 'String':
+ case 'Boolean':
+ str = `["Object",${stringify_primitive(thing)}]`;
+ break;
+
+ case 'BigInt':
+ str = `["BigInt",${thing}]`;
+ break;
+
+ case 'Date':
+ str = `["Date","${thing.toISOString()}"]`;
+ break;
+
+ case 'RegExp':
+ const { source, flags } = thing;
+ str = flags
+ ? `["RegExp",${stringify_string(source)},"${flags}"]`
+ : `["RegExp",${stringify_string(source)}]`;
+ break;
+
+ case 'Array':
+ str = '[';
+
+ for (let i = 0; i < thing.length; i += 1) {
+ if (i > 0) str += ',';
+
+ if (i in thing) {
+ keys.push(`[${i}]`);
+ str += flatten(thing[i]);
+ keys.pop();
+ } else {
+ str += HOLE;
+ }
+ }
+
+ str += ']';
+
+ break;
+
+ case 'Set':
+ str = '["Set"';
+
+ for (const value of thing) {
+ str += `,${flatten(value)}`;
+ }
+
+ str += ']';
+ break;
+
+ case 'Map':
+ str = '["Map"';
+
+ for (const [key, value] of thing) {
+ keys.push(
+ `.get(${is_primitive(key) ? stringify_primitive(key) : '...'})`
+ );
+ str += `,${flatten(key)},${flatten(value)}`;
+ }
+
+ str += ']';
+ break;
+
+ default:
+ if (!is_plain_object(thing)) {
+ throw new DevalueError(
+ `Cannot stringify arbitrary non-POJOs`,
+ keys
+ );
+ }
+
+ if (Object.getOwnPropertySymbols(thing).length > 0) {
+ throw new DevalueError(
+ `Cannot stringify POJOs with symbolic keys`,
+ keys
+ );
+ }
+
+ if (Object.getPrototypeOf(thing) === null) {
+ str = '["null"';
+ for (const key in thing) {
+ keys.push(`.${key}`);
+ str += `,${stringify_string(key)},${flatten(thing[key])}`;
+ keys.pop();
+ }
+ str += ']';
+ } else {
+ str = '{';
+ let started = false;
+ for (const key in thing) {
+ if (started) str += ',';
+ started = true;
+ keys.push(`.${key}`);
+ str += `${stringify_string(key)}:${flatten(thing[key])}`;
+ keys.pop();
+ }
+ str += '}';
+ }
+ }
+ }
+
+ stringified[index] = str;
+ return index;
+ }
+
+ const index = flatten(value);
+
+ // special case — value is represented as a negative index
+ if (index < 0) return `${index}`;
+
+ return `[${stringified.join(',')}]`;
+}
+
+/**
+ * @param {any} thing
+ * @returns {string}
+ */
+function stringify_primitive(thing) {
+ const type = typeof thing;
+ if (type === 'string') return stringify_string(thing);
+ if (thing instanceof String) return stringify_string(thing.toString());
+ if (thing === void 0) return UNDEFINED.toString();
+ if (thing === 0 && 1 / thing < 0) return NEGATIVE_ZERO.toString();
+ if (type === 'bigint') return `["BigInt","${thing}"]`;
+ return String(thing);
+}
diff --git a/.output/server/node_modules/devalue/src/uneval.js b/.output/server/node_modules/devalue/src/uneval.js
new file mode 100644
index 0000000..21a98a4
--- /dev/null
+++ b/.output/server/node_modules/devalue/src/uneval.js
@@ -0,0 +1,312 @@
+import {
+ DevalueError,
+ escaped,
+ get_type,
+ is_plain_object,
+ is_primitive,
+ stringify_string
+} from './utils.js';
+
+const chars = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ_$';
+const unsafe_chars = /[<\b\f\n\r\t\0\u2028\u2029]/g;
+const reserved =
+ /^(?:do|if|in|for|int|let|new|try|var|byte|case|char|else|enum|goto|long|this|void|with|await|break|catch|class|const|final|float|short|super|throw|while|yield|delete|double|export|import|native|return|switch|throws|typeof|boolean|default|extends|finally|package|private|abstract|continue|debugger|function|volatile|interface|protected|transient|implements|instanceof|synchronized)$/;
+
+/**
+ * Turn a value into the JavaScript that creates an equivalent value
+ * @param {any} value
+ * @param {(value: any) => string | void} [replacer]
+ */
+export function uneval(value, replacer) {
+ const counts = new Map();
+
+ /** @type {string[]} */
+ const keys = [];
+
+ const custom = new Map();
+
+ /** @param {any} thing */
+ function walk(thing) {
+ if (typeof thing === 'function') {
+ throw new DevalueError(`Cannot stringify a function`, keys);
+ }
+
+ if (!is_primitive(thing)) {
+ if (counts.has(thing)) {
+ counts.set(thing, counts.get(thing) + 1);
+ return;
+ }
+
+ counts.set(thing, 1);
+
+ if (replacer) {
+ const str = replacer(thing);
+
+ if (typeof str === 'string') {
+ custom.set(thing, str);
+ return;
+ }
+ }
+
+ const type = get_type(thing);
+
+ switch (type) {
+ case 'Number':
+ case 'BigInt':
+ case 'String':
+ case 'Boolean':
+ case 'Date':
+ case 'RegExp':
+ return;
+
+ case 'Array':
+ /** @type {any[]} */ (thing).forEach((value, i) => {
+ keys.push(`[${i}]`);
+ walk(value);
+ keys.pop();
+ });
+ break;
+
+ case 'Set':
+ Array.from(thing).forEach(walk);
+ break;
+
+ case 'Map':
+ for (const [key, value] of thing) {
+ keys.push(
+ `.get(${is_primitive(key) ? stringify_primitive(key) : '...'})`
+ );
+ walk(value);
+ keys.pop();
+ }
+ break;
+
+ default:
+ if (!is_plain_object(thing)) {
+ throw new DevalueError(
+ `Cannot stringify arbitrary non-POJOs`,
+ keys
+ );
+ }
+
+ if (Object.getOwnPropertySymbols(thing).length > 0) {
+ throw new DevalueError(
+ `Cannot stringify POJOs with symbolic keys`,
+ keys
+ );
+ }
+
+ for (const key in thing) {
+ keys.push(`.${key}`);
+ walk(thing[key]);
+ keys.pop();
+ }
+ }
+ }
+ }
+
+ walk(value);
+
+ const names = new Map();
+
+ Array.from(counts)
+ .filter((entry) => entry[1] > 1)
+ .sort((a, b) => b[1] - a[1])
+ .forEach((entry, i) => {
+ names.set(entry[0], get_name(i));
+ });
+
+ /**
+ * @param {any} thing
+ * @returns {string}
+ */
+ function stringify(thing) {
+ if (names.has(thing)) {
+ return names.get(thing);
+ }
+
+ if (is_primitive(thing)) {
+ return stringify_primitive(thing);
+ }
+
+ if (custom.has(thing)) {
+ return custom.get(thing);
+ }
+
+ const type = get_type(thing);
+
+ switch (type) {
+ case 'Number':
+ case 'String':
+ case 'Boolean':
+ return `Object(${stringify(thing.valueOf())})`;
+
+ case 'RegExp':
+ return `new RegExp(${stringify_string(thing.source)}, "${
+ thing.flags
+ }")`;
+
+ case 'Date':
+ return `new Date(${thing.getTime()})`;
+
+ case 'Array':
+ const members = /** @type {any[]} */ (thing).map((v, i) =>
+ i in thing ? stringify(v) : ''
+ );
+ const tail = thing.length === 0 || thing.length - 1 in thing ? '' : ',';
+ return `[${members.join(',')}${tail}]`;
+
+ case 'Set':
+ case 'Map':
+ return `new ${type}([${Array.from(thing).map(stringify).join(',')}])`;
+
+ default:
+ const obj = `{${Object.keys(thing)
+ .map((key) => `${safe_key(key)}:${stringify(thing[key])}`)
+ .join(',')}}`;
+ const proto = Object.getPrototypeOf(thing);
+ if (proto === null) {
+ return Object.keys(thing).length > 0
+ ? `Object.assign(Object.create(null),${obj})`
+ : `Object.create(null)`;
+ }
+
+ return obj;
+ }
+ }
+
+ const str = stringify(value);
+
+ if (names.size) {
+ /** @type {string[]} */
+ const params = [];
+
+ /** @type {string[]} */
+ const statements = [];
+
+ /** @type {string[]} */
+ const values = [];
+
+ names.forEach((name, thing) => {
+ params.push(name);
+
+ if (custom.has(thing)) {
+ values.push(/** @type {string} */ (custom.get(thing)));
+ return;
+ }
+
+ if (is_primitive(thing)) {
+ values.push(stringify_primitive(thing));
+ return;
+ }
+
+ const type = get_type(thing);
+
+ switch (type) {
+ case 'Number':
+ case 'String':
+ case 'Boolean':
+ values.push(`Object(${stringify(thing.valueOf())})`);
+ break;
+
+ case 'RegExp':
+ values.push(thing.toString());
+ break;
+
+ case 'Date':
+ values.push(`new Date(${thing.getTime()})`);
+ break;
+
+ case 'Array':
+ values.push(`Array(${thing.length})`);
+ /** @type {any[]} */ (thing).forEach((v, i) => {
+ statements.push(`${name}[${i}]=${stringify(v)}`);
+ });
+ break;
+
+ case 'Set':
+ values.push(`new Set`);
+ statements.push(
+ `${name}.${Array.from(thing)
+ .map((v) => `add(${stringify(v)})`)
+ .join('.')}`
+ );
+ break;
+
+ case 'Map':
+ values.push(`new Map`);
+ statements.push(
+ `${name}.${Array.from(thing)
+ .map(([k, v]) => `set(${stringify(k)}, ${stringify(v)})`)
+ .join('.')}`
+ );
+ break;
+
+ default:
+ values.push(
+ Object.getPrototypeOf(thing) === null ? 'Object.create(null)' : '{}'
+ );
+ Object.keys(thing).forEach((key) => {
+ statements.push(
+ `${name}${safe_prop(key)}=${stringify(thing[key])}`
+ );
+ });
+ }
+ });
+
+ statements.push(`return ${str}`);
+
+ return `(function(${params.join(',')}){${statements.join(
+ ';'
+ )}}(${values.join(',')}))`;
+ } else {
+ return str;
+ }
+}
+
+/** @param {number} num */
+function get_name(num) {
+ let name = '';
+
+ do {
+ name = chars[num % chars.length] + name;
+ num = ~~(num / chars.length) - 1;
+ } while (num >= 0);
+
+ return reserved.test(name) ? `${name}0` : name;
+}
+
+/** @param {string} c */
+function escape_unsafe_char(c) {
+ return escaped[c] || c;
+}
+
+/** @param {string} str */
+function escape_unsafe_chars(str) {
+ return str.replace(unsafe_chars, escape_unsafe_char);
+}
+
+/** @param {string} key */
+function safe_key(key) {
+ return /^[_$a-zA-Z][_$a-zA-Z0-9]*$/.test(key)
+ ? key
+ : escape_unsafe_chars(JSON.stringify(key));
+}
+
+/** @param {string} key */
+function safe_prop(key) {
+ return /^[_$a-zA-Z][_$a-zA-Z0-9]*$/.test(key)
+ ? `.${key}`
+ : `[${escape_unsafe_chars(JSON.stringify(key))}]`;
+}
+
+/** @param {any} thing */
+function stringify_primitive(thing) {
+ if (typeof thing === 'string') return stringify_string(thing);
+ if (thing === void 0) return 'void 0';
+ if (thing === 0 && 1 / thing < 0) return '-0';
+ const str = String(thing);
+ if (typeof thing === 'number') return str.replace(/^(-)?0\./, '$1.');
+ if (typeof thing === 'bigint') return thing + 'n';
+ return str;
+}
diff --git a/.output/server/node_modules/devalue/src/utils.js b/.output/server/node_modules/devalue/src/utils.js
new file mode 100644
index 0000000..5dea3ef
--- /dev/null
+++ b/.output/server/node_modules/devalue/src/utils.js
@@ -0,0 +1,99 @@
+/** @type {Record} */
+export const escaped = {
+ '<': '\\u003C',
+ '\\': '\\\\',
+ '\b': '\\b',
+ '\f': '\\f',
+ '\n': '\\n',
+ '\r': '\\r',
+ '\t': '\\t',
+ '\u2028': '\\u2028',
+ '\u2029': '\\u2029'
+};
+
+export class DevalueError extends Error {
+ /**
+ * @param {string} message
+ * @param {string[]} keys
+ */
+ constructor(message, keys) {
+ super(message);
+ this.name = 'DevalueError';
+ this.path = keys.join('');
+ }
+}
+
+/** @param {any} thing */
+export function is_primitive(thing) {
+ return Object(thing) !== thing;
+}
+
+const object_proto_names = /* @__PURE__ */ Object.getOwnPropertyNames(
+ Object.prototype
+)
+ .sort()
+ .join('\0');
+
+/** @param {any} thing */
+export function is_plain_object(thing) {
+ const proto = Object.getPrototypeOf(thing);
+
+ return (
+ proto === Object.prototype ||
+ proto === null ||
+ Object.getOwnPropertyNames(proto).sort().join('\0') === object_proto_names
+ );
+}
+
+/** @param {any} thing */
+export function get_type(thing) {
+ return Object.prototype.toString.call(thing).slice(8, -1);
+}
+
+/** @param {string} char */
+function get_escaped_char(char) {
+ switch (char) {
+ case '"':
+ return '\\"';
+ case '<':
+ return '\\u003C';
+ case '\\':
+ return '\\\\';
+ case '\n':
+ return '\\n';
+ case '\r':
+ return '\\r';
+ case '\t':
+ return '\\t';
+ case '\b':
+ return '\\b';
+ case '\f':
+ return '\\f';
+ case '\u2028':
+ return '\\u2028';
+ case '\u2029':
+ return '\\u2029';
+ default:
+ return char < ' '
+ ? `\\u${char.charCodeAt(0).toString(16).padStart(4, '0')}`
+ : '';
+ }
+}
+
+/** @param {string} str */
+export function stringify_string(str) {
+ let result = '';
+ let last_pos = 0;
+ const len = str.length;
+
+ for (let i = 0; i < len; i += 1) {
+ const char = str[i];
+ const replacement = get_escaped_char(char);
+ if (replacement) {
+ result += str.slice(last_pos, i) + replacement;
+ last_pos = i + 1;
+ }
+ }
+
+ return `"${last_pos === 0 ? str : result + str.slice(last_pos)}"`;
+}
diff --git a/.output/server/node_modules/estree-walker/package.json b/.output/server/node_modules/estree-walker/package.json
new file mode 100644
index 0000000..08014bb
--- /dev/null
+++ b/.output/server/node_modules/estree-walker/package.json
@@ -0,0 +1,37 @@
+{
+ "name": "estree-walker",
+ "description": "Traverse an ESTree-compliant AST",
+ "version": "2.0.2",
+ "private": false,
+ "author": "Rich Harris",
+ "license": "MIT",
+ "repository": {
+ "type": "git",
+ "url": "https://github.com/Rich-Harris/estree-walker"
+ },
+ "type": "commonjs",
+ "main": "./dist/umd/estree-walker.js",
+ "module": "./dist/esm/estree-walker.js",
+ "exports": {
+ "require": "./dist/umd/estree-walker.js",
+ "import": "./dist/esm/estree-walker.js"
+ },
+ "types": "types/index.d.ts",
+ "scripts": {
+ "prepublishOnly": "npm run build && npm test",
+ "build": "tsc && rollup -c",
+ "test": "uvu test"
+ },
+ "devDependencies": {
+ "@types/estree": "0.0.42",
+ "rollup": "^2.10.9",
+ "typescript": "^3.7.5",
+ "uvu": "^0.5.1"
+ },
+ "files": [
+ "src",
+ "dist",
+ "types",
+ "README.md"
+ ]
+}
\ No newline at end of file
diff --git a/.output/server/node_modules/follow-redirects/debug.js b/.output/server/node_modules/follow-redirects/debug.js
new file mode 100644
index 0000000..decb77d
--- /dev/null
+++ b/.output/server/node_modules/follow-redirects/debug.js
@@ -0,0 +1,15 @@
+var debug;
+
+module.exports = function () {
+ if (!debug) {
+ try {
+ /* eslint global-require: off */
+ debug = require("debug")("follow-redirects");
+ }
+ catch (error) { /* */ }
+ if (typeof debug !== "function") {
+ debug = function () { /* */ };
+ }
+ }
+ debug.apply(null, arguments);
+};
diff --git a/.output/server/node_modules/follow-redirects/index.js b/.output/server/node_modules/follow-redirects/index.js
new file mode 100644
index 0000000..057c6b1
--- /dev/null
+++ b/.output/server/node_modules/follow-redirects/index.js
@@ -0,0 +1,633 @@
+var url = require("url");
+var URL = url.URL;
+var http = require("http");
+var https = require("https");
+var Writable = require("stream").Writable;
+var assert = require("assert");
+var debug = require("./debug");
+
+// Create handlers that pass events from native requests
+var events = ["abort", "aborted", "connect", "error", "socket", "timeout"];
+var eventHandlers = Object.create(null);
+events.forEach(function (event) {
+ eventHandlers[event] = function (arg1, arg2, arg3) {
+ this._redirectable.emit(event, arg1, arg2, arg3);
+ };
+});
+
+var InvalidUrlError = createErrorType(
+ "ERR_INVALID_URL",
+ "Invalid URL",
+ TypeError
+);
+// Error types with codes
+var RedirectionError = createErrorType(
+ "ERR_FR_REDIRECTION_FAILURE",
+ "Redirected request failed"
+);
+var TooManyRedirectsError = createErrorType(
+ "ERR_FR_TOO_MANY_REDIRECTS",
+ "Maximum number of redirects exceeded"
+);
+var MaxBodyLengthExceededError = createErrorType(
+ "ERR_FR_MAX_BODY_LENGTH_EXCEEDED",
+ "Request body larger than maxBodyLength limit"
+);
+var WriteAfterEndError = createErrorType(
+ "ERR_STREAM_WRITE_AFTER_END",
+ "write after end"
+);
+
+// istanbul ignore next
+var destroy = Writable.prototype.destroy || noop;
+
+// An HTTP(S) request that can be redirected
+function RedirectableRequest(options, responseCallback) {
+ // Initialize the request
+ Writable.call(this);
+ this._sanitizeOptions(options);
+ this._options = options;
+ this._ended = false;
+ this._ending = false;
+ this._redirectCount = 0;
+ this._redirects = [];
+ this._requestBodyLength = 0;
+ this._requestBodyBuffers = [];
+
+ // Attach a callback if passed
+ if (responseCallback) {
+ this.on("response", responseCallback);
+ }
+
+ // React to responses of native requests
+ var self = this;
+ this._onNativeResponse = function (response) {
+ self._processResponse(response);
+ };
+
+ // Perform the first request
+ this._performRequest();
+}
+RedirectableRequest.prototype = Object.create(Writable.prototype);
+
+RedirectableRequest.prototype.abort = function () {
+ destroyRequest(this._currentRequest);
+ this._currentRequest.abort();
+ this.emit("abort");
+};
+
+RedirectableRequest.prototype.destroy = function (error) {
+ destroyRequest(this._currentRequest, error);
+ destroy.call(this, error);
+ return this;
+};
+
+// Writes buffered data to the current native request
+RedirectableRequest.prototype.write = function (data, encoding, callback) {
+ // Writing is not allowed if end has been called
+ if (this._ending) {
+ throw new WriteAfterEndError();
+ }
+
+ // Validate input and shift parameters if necessary
+ if (!isString(data) && !isBuffer(data)) {
+ throw new TypeError("data should be a string, Buffer or Uint8Array");
+ }
+ if (isFunction(encoding)) {
+ callback = encoding;
+ encoding = null;
+ }
+
+ // Ignore empty buffers, since writing them doesn't invoke the callback
+ // https://github.com/nodejs/node/issues/22066
+ if (data.length === 0) {
+ if (callback) {
+ callback();
+ }
+ return;
+ }
+ // Only write when we don't exceed the maximum body length
+ if (this._requestBodyLength + data.length <= this._options.maxBodyLength) {
+ this._requestBodyLength += data.length;
+ this._requestBodyBuffers.push({ data: data, encoding: encoding });
+ this._currentRequest.write(data, encoding, callback);
+ }
+ // Error when we exceed the maximum body length
+ else {
+ this.emit("error", new MaxBodyLengthExceededError());
+ this.abort();
+ }
+};
+
+// Ends the current native request
+RedirectableRequest.prototype.end = function (data, encoding, callback) {
+ // Shift parameters if necessary
+ if (isFunction(data)) {
+ callback = data;
+ data = encoding = null;
+ }
+ else if (isFunction(encoding)) {
+ callback = encoding;
+ encoding = null;
+ }
+
+ // Write data if needed and end
+ if (!data) {
+ this._ended = this._ending = true;
+ this._currentRequest.end(null, null, callback);
+ }
+ else {
+ var self = this;
+ var currentRequest = this._currentRequest;
+ this.write(data, encoding, function () {
+ self._ended = true;
+ currentRequest.end(null, null, callback);
+ });
+ this._ending = true;
+ }
+};
+
+// Sets a header value on the current native request
+RedirectableRequest.prototype.setHeader = function (name, value) {
+ this._options.headers[name] = value;
+ this._currentRequest.setHeader(name, value);
+};
+
+// Clears a header value on the current native request
+RedirectableRequest.prototype.removeHeader = function (name) {
+ delete this._options.headers[name];
+ this._currentRequest.removeHeader(name);
+};
+
+// Global timeout for all underlying requests
+RedirectableRequest.prototype.setTimeout = function (msecs, callback) {
+ var self = this;
+
+ // Destroys the socket on timeout
+ function destroyOnTimeout(socket) {
+ socket.setTimeout(msecs);
+ socket.removeListener("timeout", socket.destroy);
+ socket.addListener("timeout", socket.destroy);
+ }
+
+ // Sets up a timer to trigger a timeout event
+ function startTimer(socket) {
+ if (self._timeout) {
+ clearTimeout(self._timeout);
+ }
+ self._timeout = setTimeout(function () {
+ self.emit("timeout");
+ clearTimer();
+ }, msecs);
+ destroyOnTimeout(socket);
+ }
+
+ // Stops a timeout from triggering
+ function clearTimer() {
+ // Clear the timeout
+ if (self._timeout) {
+ clearTimeout(self._timeout);
+ self._timeout = null;
+ }
+
+ // Clean up all attached listeners
+ self.removeListener("abort", clearTimer);
+ self.removeListener("error", clearTimer);
+ self.removeListener("response", clearTimer);
+ self.removeListener("close", clearTimer);
+ if (callback) {
+ self.removeListener("timeout", callback);
+ }
+ if (!self.socket) {
+ self._currentRequest.removeListener("socket", startTimer);
+ }
+ }
+
+ // Attach callback if passed
+ if (callback) {
+ this.on("timeout", callback);
+ }
+
+ // Start the timer if or when the socket is opened
+ if (this.socket) {
+ startTimer(this.socket);
+ }
+ else {
+ this._currentRequest.once("socket", startTimer);
+ }
+
+ // Clean up on events
+ this.on("socket", destroyOnTimeout);
+ this.on("abort", clearTimer);
+ this.on("error", clearTimer);
+ this.on("response", clearTimer);
+ this.on("close", clearTimer);
+
+ return this;
+};
+
+// Proxy all other public ClientRequest methods
+[
+ "flushHeaders", "getHeader",
+ "setNoDelay", "setSocketKeepAlive",
+].forEach(function (method) {
+ RedirectableRequest.prototype[method] = function (a, b) {
+ return this._currentRequest[method](a, b);
+ };
+});
+
+// Proxy all public ClientRequest properties
+["aborted", "connection", "socket"].forEach(function (property) {
+ Object.defineProperty(RedirectableRequest.prototype, property, {
+ get: function () { return this._currentRequest[property]; },
+ });
+});
+
+RedirectableRequest.prototype._sanitizeOptions = function (options) {
+ // Ensure headers are always present
+ if (!options.headers) {
+ options.headers = {};
+ }
+
+ // Since http.request treats host as an alias of hostname,
+ // but the url module interprets host as hostname plus port,
+ // eliminate the host property to avoid confusion.
+ if (options.host) {
+ // Use hostname if set, because it has precedence
+ if (!options.hostname) {
+ options.hostname = options.host;
+ }
+ delete options.host;
+ }
+
+ // Complete the URL object when necessary
+ if (!options.pathname && options.path) {
+ var searchPos = options.path.indexOf("?");
+ if (searchPos < 0) {
+ options.pathname = options.path;
+ }
+ else {
+ options.pathname = options.path.substring(0, searchPos);
+ options.search = options.path.substring(searchPos);
+ }
+ }
+};
+
+
+// Executes the next native request (initial or redirect)
+RedirectableRequest.prototype._performRequest = function () {
+ // Load the native protocol
+ var protocol = this._options.protocol;
+ var nativeProtocol = this._options.nativeProtocols[protocol];
+ if (!nativeProtocol) {
+ this.emit("error", new TypeError("Unsupported protocol " + protocol));
+ return;
+ }
+
+ // If specified, use the agent corresponding to the protocol
+ // (HTTP and HTTPS use different types of agents)
+ if (this._options.agents) {
+ var scheme = protocol.slice(0, -1);
+ this._options.agent = this._options.agents[scheme];
+ }
+
+ // Create the native request and set up its event handlers
+ var request = this._currentRequest =
+ nativeProtocol.request(this._options, this._onNativeResponse);
+ request._redirectable = this;
+ for (var event of events) {
+ request.on(event, eventHandlers[event]);
+ }
+
+ // RFC7230§5.3.1: When making a request directly to an origin server, […]
+ // a client MUST send only the absolute path […] as the request-target.
+ this._currentUrl = /^\//.test(this._options.path) ?
+ url.format(this._options) :
+ // When making a request to a proxy, […]
+ // a client MUST send the target URI in absolute-form […].
+ this._options.path;
+
+ // End a redirected request
+ // (The first request must be ended explicitly with RedirectableRequest#end)
+ if (this._isRedirect) {
+ // Write the request entity and end
+ var i = 0;
+ var self = this;
+ var buffers = this._requestBodyBuffers;
+ (function writeNext(error) {
+ // Only write if this request has not been redirected yet
+ /* istanbul ignore else */
+ if (request === self._currentRequest) {
+ // Report any write errors
+ /* istanbul ignore if */
+ if (error) {
+ self.emit("error", error);
+ }
+ // Write the next buffer if there are still left
+ else if (i < buffers.length) {
+ var buffer = buffers[i++];
+ /* istanbul ignore else */
+ if (!request.finished) {
+ request.write(buffer.data, buffer.encoding, writeNext);
+ }
+ }
+ // End the request if `end` has been called on us
+ else if (self._ended) {
+ request.end();
+ }
+ }
+ }());
+ }
+};
+
+// Processes a response from the current native request
+RedirectableRequest.prototype._processResponse = function (response) {
+ // Store the redirected response
+ var statusCode = response.statusCode;
+ if (this._options.trackRedirects) {
+ this._redirects.push({
+ url: this._currentUrl,
+ headers: response.headers,
+ statusCode: statusCode,
+ });
+ }
+
+ // RFC7231§6.4: The 3xx (Redirection) class of status code indicates
+ // that further action needs to be taken by the user agent in order to
+ // fulfill the request. If a Location header field is provided,
+ // the user agent MAY automatically redirect its request to the URI
+ // referenced by the Location field value,
+ // even if the specific status code is not understood.
+
+ // If the response is not a redirect; return it as-is
+ var location = response.headers.location;
+ if (!location || this._options.followRedirects === false ||
+ statusCode < 300 || statusCode >= 400) {
+ response.responseUrl = this._currentUrl;
+ response.redirects = this._redirects;
+ this.emit("response", response);
+
+ // Clean up
+ this._requestBodyBuffers = [];
+ return;
+ }
+
+ // The response is a redirect, so abort the current request
+ destroyRequest(this._currentRequest);
+ // Discard the remainder of the response to avoid waiting for data
+ response.destroy();
+
+ // RFC7231§6.4: A client SHOULD detect and intervene
+ // in cyclical redirections (i.e., "infinite" redirection loops).
+ if (++this._redirectCount > this._options.maxRedirects) {
+ this.emit("error", new TooManyRedirectsError());
+ return;
+ }
+
+ // Store the request headers if applicable
+ var requestHeaders;
+ var beforeRedirect = this._options.beforeRedirect;
+ if (beforeRedirect) {
+ requestHeaders = Object.assign({
+ // The Host header was set by nativeProtocol.request
+ Host: response.req.getHeader("host"),
+ }, this._options.headers);
+ }
+
+ // RFC7231§6.4: Automatic redirection needs to done with
+ // care for methods not known to be safe, […]
+ // RFC7231§6.4.2–3: For historical reasons, a user agent MAY change
+ // the request method from POST to GET for the subsequent request.
+ var method = this._options.method;
+ if ((statusCode === 301 || statusCode === 302) && this._options.method === "POST" ||
+ // RFC7231§6.4.4: The 303 (See Other) status code indicates that
+ // the server is redirecting the user agent to a different resource […]
+ // A user agent can perform a retrieval request targeting that URI
+ // (a GET or HEAD request if using HTTP) […]
+ (statusCode === 303) && !/^(?:GET|HEAD)$/.test(this._options.method)) {
+ this._options.method = "GET";
+ // Drop a possible entity and headers related to it
+ this._requestBodyBuffers = [];
+ removeMatchingHeaders(/^content-/i, this._options.headers);
+ }
+
+ // Drop the Host header, as the redirect might lead to a different host
+ var currentHostHeader = removeMatchingHeaders(/^host$/i, this._options.headers);
+
+ // If the redirect is relative, carry over the host of the last request
+ var currentUrlParts = url.parse(this._currentUrl);
+ var currentHost = currentHostHeader || currentUrlParts.host;
+ var currentUrl = /^\w+:/.test(location) ? this._currentUrl :
+ url.format(Object.assign(currentUrlParts, { host: currentHost }));
+
+ // Determine the URL of the redirection
+ var redirectUrl;
+ try {
+ redirectUrl = url.resolve(currentUrl, location);
+ }
+ catch (cause) {
+ this.emit("error", new RedirectionError({ cause: cause }));
+ return;
+ }
+
+ // Create the redirected request
+ debug("redirecting to", redirectUrl);
+ this._isRedirect = true;
+ var redirectUrlParts = url.parse(redirectUrl);
+ Object.assign(this._options, redirectUrlParts);
+
+ // Drop confidential headers when redirecting to a less secure protocol
+ // or to a different domain that is not a superdomain
+ if (redirectUrlParts.protocol !== currentUrlParts.protocol &&
+ redirectUrlParts.protocol !== "https:" ||
+ redirectUrlParts.host !== currentHost &&
+ !isSubdomain(redirectUrlParts.host, currentHost)) {
+ removeMatchingHeaders(/^(?:authorization|cookie)$/i, this._options.headers);
+ }
+
+ // Evaluate the beforeRedirect callback
+ if (isFunction(beforeRedirect)) {
+ var responseDetails = {
+ headers: response.headers,
+ statusCode: statusCode,
+ };
+ var requestDetails = {
+ url: currentUrl,
+ method: method,
+ headers: requestHeaders,
+ };
+ try {
+ beforeRedirect(this._options, responseDetails, requestDetails);
+ }
+ catch (err) {
+ this.emit("error", err);
+ return;
+ }
+ this._sanitizeOptions(this._options);
+ }
+
+ // Perform the redirected request
+ try {
+ this._performRequest();
+ }
+ catch (cause) {
+ this.emit("error", new RedirectionError({ cause: cause }));
+ }
+};
+
+// Wraps the key/value object of protocols with redirect functionality
+function wrap(protocols) {
+ // Default settings
+ var exports = {
+ maxRedirects: 21,
+ maxBodyLength: 10 * 1024 * 1024,
+ };
+
+ // Wrap each protocol
+ var nativeProtocols = {};
+ Object.keys(protocols).forEach(function (scheme) {
+ var protocol = scheme + ":";
+ var nativeProtocol = nativeProtocols[protocol] = protocols[scheme];
+ var wrappedProtocol = exports[scheme] = Object.create(nativeProtocol);
+
+ // Executes a request, following redirects
+ function request(input, options, callback) {
+ // Parse parameters
+ if (isString(input)) {
+ var parsed;
+ try {
+ parsed = urlToOptions(new URL(input));
+ }
+ catch (err) {
+ /* istanbul ignore next */
+ parsed = url.parse(input);
+ }
+ if (!isString(parsed.protocol)) {
+ throw new InvalidUrlError({ input });
+ }
+ input = parsed;
+ }
+ else if (URL && (input instanceof URL)) {
+ input = urlToOptions(input);
+ }
+ else {
+ callback = options;
+ options = input;
+ input = { protocol: protocol };
+ }
+ if (isFunction(options)) {
+ callback = options;
+ options = null;
+ }
+
+ // Set defaults
+ options = Object.assign({
+ maxRedirects: exports.maxRedirects,
+ maxBodyLength: exports.maxBodyLength,
+ }, input, options);
+ options.nativeProtocols = nativeProtocols;
+ if (!isString(options.host) && !isString(options.hostname)) {
+ options.hostname = "::1";
+ }
+
+ assert.equal(options.protocol, protocol, "protocol mismatch");
+ debug("options", options);
+ return new RedirectableRequest(options, callback);
+ }
+
+ // Executes a GET request, following redirects
+ function get(input, options, callback) {
+ var wrappedRequest = wrappedProtocol.request(input, options, callback);
+ wrappedRequest.end();
+ return wrappedRequest;
+ }
+
+ // Expose the properties on the wrapped protocol
+ Object.defineProperties(wrappedProtocol, {
+ request: { value: request, configurable: true, enumerable: true, writable: true },
+ get: { value: get, configurable: true, enumerable: true, writable: true },
+ });
+ });
+ return exports;
+}
+
+/* istanbul ignore next */
+function noop() { /* empty */ }
+
+// from https://github.com/nodejs/node/blob/master/lib/internal/url.js
+function urlToOptions(urlObject) {
+ var options = {
+ protocol: urlObject.protocol,
+ hostname: urlObject.hostname.startsWith("[") ?
+ /* istanbul ignore next */
+ urlObject.hostname.slice(1, -1) :
+ urlObject.hostname,
+ hash: urlObject.hash,
+ search: urlObject.search,
+ pathname: urlObject.pathname,
+ path: urlObject.pathname + urlObject.search,
+ href: urlObject.href,
+ };
+ if (urlObject.port !== "") {
+ options.port = Number(urlObject.port);
+ }
+ return options;
+}
+
+function removeMatchingHeaders(regex, headers) {
+ var lastValue;
+ for (var header in headers) {
+ if (regex.test(header)) {
+ lastValue = headers[header];
+ delete headers[header];
+ }
+ }
+ return (lastValue === null || typeof lastValue === "undefined") ?
+ undefined : String(lastValue).trim();
+}
+
+function createErrorType(code, message, baseClass) {
+ // Create constructor
+ function CustomError(properties) {
+ Error.captureStackTrace(this, this.constructor);
+ Object.assign(this, properties || {});
+ this.code = code;
+ this.message = this.cause ? message + ": " + this.cause.message : message;
+ }
+
+ // Attach constructor and set default properties
+ CustomError.prototype = new (baseClass || Error)();
+ CustomError.prototype.constructor = CustomError;
+ CustomError.prototype.name = "Error [" + code + "]";
+ return CustomError;
+}
+
+function destroyRequest(request, error) {
+ for (var event of events) {
+ request.removeListener(event, eventHandlers[event]);
+ }
+ request.on("error", noop);
+ request.destroy(error);
+}
+
+function isSubdomain(subdomain, domain) {
+ assert(isString(subdomain) && isString(domain));
+ var dot = subdomain.length - domain.length - 1;
+ return dot > 0 && subdomain[dot] === "." && subdomain.endsWith(domain);
+}
+
+function isString(value) {
+ return typeof value === "string" || value instanceof String;
+}
+
+function isFunction(value) {
+ return typeof value === "function";
+}
+
+function isBuffer(value) {
+ return typeof value === "object" && ("length" in value);
+}
+
+// Exports
+module.exports = wrap({ http: http, https: https });
+module.exports.wrap = wrap;
diff --git a/.output/server/node_modules/follow-redirects/package.json b/.output/server/node_modules/follow-redirects/package.json
new file mode 100644
index 0000000..2248eff
--- /dev/null
+++ b/.output/server/node_modules/follow-redirects/package.json
@@ -0,0 +1,58 @@
+{
+ "name": "follow-redirects",
+ "version": "1.15.3",
+ "description": "HTTP and HTTPS modules that follow redirects.",
+ "license": "MIT",
+ "main": "index.js",
+ "files": [
+ "*.js"
+ ],
+ "engines": {
+ "node": ">=4.0"
+ },
+ "scripts": {
+ "lint": "eslint *.js test",
+ "test": "nyc mocha"
+ },
+ "repository": {
+ "type": "git",
+ "url": "git@github.com:follow-redirects/follow-redirects.git"
+ },
+ "homepage": "https://github.com/follow-redirects/follow-redirects",
+ "bugs": {
+ "url": "https://github.com/follow-redirects/follow-redirects/issues"
+ },
+ "keywords": [
+ "http",
+ "https",
+ "url",
+ "redirect",
+ "client",
+ "location",
+ "utility"
+ ],
+ "author": "Ruben Verborgh (https://ruben.verborgh.org/)",
+ "contributors": [
+ "Olivier Lalonde (http://www.syskall.com)",
+ "James Talmage "
+ ],
+ "funding": [
+ {
+ "type": "individual",
+ "url": "https://github.com/sponsors/RubenVerborgh"
+ }
+ ],
+ "peerDependenciesMeta": {
+ "debug": {
+ "optional": true
+ }
+ },
+ "devDependencies": {
+ "concat-stream": "^2.0.0",
+ "eslint": "^5.16.0",
+ "express": "^4.16.4",
+ "lolex": "^3.1.0",
+ "mocha": "^6.0.2",
+ "nyc": "^14.1.1"
+ }
+}
\ No newline at end of file
diff --git a/.output/server/node_modules/form-data/lib/form_data.js b/.output/server/node_modules/form-data/lib/form_data.js
new file mode 100644
index 0000000..18dc819
--- /dev/null
+++ b/.output/server/node_modules/form-data/lib/form_data.js
@@ -0,0 +1,501 @@
+var CombinedStream = require('combined-stream');
+var util = require('util');
+var path = require('path');
+var http = require('http');
+var https = require('https');
+var parseUrl = require('url').parse;
+var fs = require('fs');
+var Stream = require('stream').Stream;
+var mime = require('mime-types');
+var asynckit = require('asynckit');
+var populate = require('./populate.js');
+
+// Public API
+module.exports = FormData;
+
+// make it a Stream
+util.inherits(FormData, CombinedStream);
+
+/**
+ * Create readable "multipart/form-data" streams.
+ * Can be used to submit forms
+ * and file uploads to other web applications.
+ *
+ * @constructor
+ * @param {Object} options - Properties to be added/overriden for FormData and CombinedStream
+ */
+function FormData(options) {
+ if (!(this instanceof FormData)) {
+ return new FormData(options);
+ }
+
+ this._overheadLength = 0;
+ this._valueLength = 0;
+ this._valuesToMeasure = [];
+
+ CombinedStream.call(this);
+
+ options = options || {};
+ for (var option in options) {
+ this[option] = options[option];
+ }
+}
+
+FormData.LINE_BREAK = '\r\n';
+FormData.DEFAULT_CONTENT_TYPE = 'application/octet-stream';
+
+FormData.prototype.append = function(field, value, options) {
+
+ options = options || {};
+
+ // allow filename as single option
+ if (typeof options == 'string') {
+ options = {filename: options};
+ }
+
+ var append = CombinedStream.prototype.append.bind(this);
+
+ // all that streamy business can't handle numbers
+ if (typeof value == 'number') {
+ value = '' + value;
+ }
+
+ // https://github.com/felixge/node-form-data/issues/38
+ if (util.isArray(value)) {
+ // Please convert your array into string
+ // the way web server expects it
+ this._error(new Error('Arrays are not supported.'));
+ return;
+ }
+
+ var header = this._multiPartHeader(field, value, options);
+ var footer = this._multiPartFooter();
+
+ append(header);
+ append(value);
+ append(footer);
+
+ // pass along options.knownLength
+ this._trackLength(header, value, options);
+};
+
+FormData.prototype._trackLength = function(header, value, options) {
+ var valueLength = 0;
+
+ // used w/ getLengthSync(), when length is known.
+ // e.g. for streaming directly from a remote server,
+ // w/ a known file a size, and not wanting to wait for
+ // incoming file to finish to get its size.
+ if (options.knownLength != null) {
+ valueLength += +options.knownLength;
+ } else if (Buffer.isBuffer(value)) {
+ valueLength = value.length;
+ } else if (typeof value === 'string') {
+ valueLength = Buffer.byteLength(value);
+ }
+
+ this._valueLength += valueLength;
+
+ // @check why add CRLF? does this account for custom/multiple CRLFs?
+ this._overheadLength +=
+ Buffer.byteLength(header) +
+ FormData.LINE_BREAK.length;
+
+ // empty or either doesn't have path or not an http response or not a stream
+ if (!value || ( !value.path && !(value.readable && value.hasOwnProperty('httpVersion')) && !(value instanceof Stream))) {
+ return;
+ }
+
+ // no need to bother with the length
+ if (!options.knownLength) {
+ this._valuesToMeasure.push(value);
+ }
+};
+
+FormData.prototype._lengthRetriever = function(value, callback) {
+
+ if (value.hasOwnProperty('fd')) {
+
+ // take read range into a account
+ // `end` = Infinity –> read file till the end
+ //
+ // TODO: Looks like there is bug in Node fs.createReadStream
+ // it doesn't respect `end` options without `start` options
+ // Fix it when node fixes it.
+ // https://github.com/joyent/node/issues/7819
+ if (value.end != undefined && value.end != Infinity && value.start != undefined) {
+
+ // when end specified
+ // no need to calculate range
+ // inclusive, starts with 0
+ callback(null, value.end + 1 - (value.start ? value.start : 0));
+
+ // not that fast snoopy
+ } else {
+ // still need to fetch file size from fs
+ fs.stat(value.path, function(err, stat) {
+
+ var fileSize;
+
+ if (err) {
+ callback(err);
+ return;
+ }
+
+ // update final size based on the range options
+ fileSize = stat.size - (value.start ? value.start : 0);
+ callback(null, fileSize);
+ });
+ }
+
+ // or http response
+ } else if (value.hasOwnProperty('httpVersion')) {
+ callback(null, +value.headers['content-length']);
+
+ // or request stream http://github.com/mikeal/request
+ } else if (value.hasOwnProperty('httpModule')) {
+ // wait till response come back
+ value.on('response', function(response) {
+ value.pause();
+ callback(null, +response.headers['content-length']);
+ });
+ value.resume();
+
+ // something else
+ } else {
+ callback('Unknown stream');
+ }
+};
+
+FormData.prototype._multiPartHeader = function(field, value, options) {
+ // custom header specified (as string)?
+ // it becomes responsible for boundary
+ // (e.g. to handle extra CRLFs on .NET servers)
+ if (typeof options.header == 'string') {
+ return options.header;
+ }
+
+ var contentDisposition = this._getContentDisposition(value, options);
+ var contentType = this._getContentType(value, options);
+
+ var contents = '';
+ var headers = {
+ // add custom disposition as third element or keep it two elements if not
+ 'Content-Disposition': ['form-data', 'name="' + field + '"'].concat(contentDisposition || []),
+ // if no content type. allow it to be empty array
+ 'Content-Type': [].concat(contentType || [])
+ };
+
+ // allow custom headers.
+ if (typeof options.header == 'object') {
+ populate(headers, options.header);
+ }
+
+ var header;
+ for (var prop in headers) {
+ if (!headers.hasOwnProperty(prop)) continue;
+ header = headers[prop];
+
+ // skip nullish headers.
+ if (header == null) {
+ continue;
+ }
+
+ // convert all headers to arrays.
+ if (!Array.isArray(header)) {
+ header = [header];
+ }
+
+ // add non-empty headers.
+ if (header.length) {
+ contents += prop + ': ' + header.join('; ') + FormData.LINE_BREAK;
+ }
+ }
+
+ return '--' + this.getBoundary() + FormData.LINE_BREAK + contents + FormData.LINE_BREAK;
+};
+
+FormData.prototype._getContentDisposition = function(value, options) {
+
+ var filename
+ , contentDisposition
+ ;
+
+ if (typeof options.filepath === 'string') {
+ // custom filepath for relative paths
+ filename = path.normalize(options.filepath).replace(/\\/g, '/');
+ } else if (options.filename || value.name || value.path) {
+ // custom filename take precedence
+ // formidable and the browser add a name property
+ // fs- and request- streams have path property
+ filename = path.basename(options.filename || value.name || value.path);
+ } else if (value.readable && value.hasOwnProperty('httpVersion')) {
+ // or try http response
+ filename = path.basename(value.client._httpMessage.path || '');
+ }
+
+ if (filename) {
+ contentDisposition = 'filename="' + filename + '"';
+ }
+
+ return contentDisposition;
+};
+
+FormData.prototype._getContentType = function(value, options) {
+
+ // use custom content-type above all
+ var contentType = options.contentType;
+
+ // or try `name` from formidable, browser
+ if (!contentType && value.name) {
+ contentType = mime.lookup(value.name);
+ }
+
+ // or try `path` from fs-, request- streams
+ if (!contentType && value.path) {
+ contentType = mime.lookup(value.path);
+ }
+
+ // or if it's http-reponse
+ if (!contentType && value.readable && value.hasOwnProperty('httpVersion')) {
+ contentType = value.headers['content-type'];
+ }
+
+ // or guess it from the filepath or filename
+ if (!contentType && (options.filepath || options.filename)) {
+ contentType = mime.lookup(options.filepath || options.filename);
+ }
+
+ // fallback to the default content type if `value` is not simple value
+ if (!contentType && typeof value == 'object') {
+ contentType = FormData.DEFAULT_CONTENT_TYPE;
+ }
+
+ return contentType;
+};
+
+FormData.prototype._multiPartFooter = function() {
+ return function(next) {
+ var footer = FormData.LINE_BREAK;
+
+ var lastPart = (this._streams.length === 0);
+ if (lastPart) {
+ footer += this._lastBoundary();
+ }
+
+ next(footer);
+ }.bind(this);
+};
+
+FormData.prototype._lastBoundary = function() {
+ return '--' + this.getBoundary() + '--' + FormData.LINE_BREAK;
+};
+
+FormData.prototype.getHeaders = function(userHeaders) {
+ var header;
+ var formHeaders = {
+ 'content-type': 'multipart/form-data; boundary=' + this.getBoundary()
+ };
+
+ for (header in userHeaders) {
+ if (userHeaders.hasOwnProperty(header)) {
+ formHeaders[header.toLowerCase()] = userHeaders[header];
+ }
+ }
+
+ return formHeaders;
+};
+
+FormData.prototype.setBoundary = function(boundary) {
+ this._boundary = boundary;
+};
+
+FormData.prototype.getBoundary = function() {
+ if (!this._boundary) {
+ this._generateBoundary();
+ }
+
+ return this._boundary;
+};
+
+FormData.prototype.getBuffer = function() {
+ var dataBuffer = new Buffer.alloc( 0 );
+ var boundary = this.getBoundary();
+
+ // Create the form content. Add Line breaks to the end of data.
+ for (var i = 0, len = this._streams.length; i < len; i++) {
+ if (typeof this._streams[i] !== 'function') {
+
+ // Add content to the buffer.
+ if(Buffer.isBuffer(this._streams[i])) {
+ dataBuffer = Buffer.concat( [dataBuffer, this._streams[i]]);
+ }else {
+ dataBuffer = Buffer.concat( [dataBuffer, Buffer.from(this._streams[i])]);
+ }
+
+ // Add break after content.
+ if (typeof this._streams[i] !== 'string' || this._streams[i].substring( 2, boundary.length + 2 ) !== boundary) {
+ dataBuffer = Buffer.concat( [dataBuffer, Buffer.from(FormData.LINE_BREAK)] );
+ }
+ }
+ }
+
+ // Add the footer and return the Buffer object.
+ return Buffer.concat( [dataBuffer, Buffer.from(this._lastBoundary())] );
+};
+
+FormData.prototype._generateBoundary = function() {
+ // This generates a 50 character boundary similar to those used by Firefox.
+ // They are optimized for boyer-moore parsing.
+ var boundary = '--------------------------';
+ for (var i = 0; i < 24; i++) {
+ boundary += Math.floor(Math.random() * 10).toString(16);
+ }
+
+ this._boundary = boundary;
+};
+
+// Note: getLengthSync DOESN'T calculate streams length
+// As workaround one can calculate file size manually
+// and add it as knownLength option
+FormData.prototype.getLengthSync = function() {
+ var knownLength = this._overheadLength + this._valueLength;
+
+ // Don't get confused, there are 3 "internal" streams for each keyval pair
+ // so it basically checks if there is any value added to the form
+ if (this._streams.length) {
+ knownLength += this._lastBoundary().length;
+ }
+
+ // https://github.com/form-data/form-data/issues/40
+ if (!this.hasKnownLength()) {
+ // Some async length retrievers are present
+ // therefore synchronous length calculation is false.
+ // Please use getLength(callback) to get proper length
+ this._error(new Error('Cannot calculate proper length in synchronous way.'));
+ }
+
+ return knownLength;
+};
+
+// Public API to check if length of added values is known
+// https://github.com/form-data/form-data/issues/196
+// https://github.com/form-data/form-data/issues/262
+FormData.prototype.hasKnownLength = function() {
+ var hasKnownLength = true;
+
+ if (this._valuesToMeasure.length) {
+ hasKnownLength = false;
+ }
+
+ return hasKnownLength;
+};
+
+FormData.prototype.getLength = function(cb) {
+ var knownLength = this._overheadLength + this._valueLength;
+
+ if (this._streams.length) {
+ knownLength += this._lastBoundary().length;
+ }
+
+ if (!this._valuesToMeasure.length) {
+ process.nextTick(cb.bind(this, null, knownLength));
+ return;
+ }
+
+ asynckit.parallel(this._valuesToMeasure, this._lengthRetriever, function(err, values) {
+ if (err) {
+ cb(err);
+ return;
+ }
+
+ values.forEach(function(length) {
+ knownLength += length;
+ });
+
+ cb(null, knownLength);
+ });
+};
+
+FormData.prototype.submit = function(params, cb) {
+ var request
+ , options
+ , defaults = {method: 'post'}
+ ;
+
+ // parse provided url if it's string
+ // or treat it as options object
+ if (typeof params == 'string') {
+
+ params = parseUrl(params);
+ options = populate({
+ port: params.port,
+ path: params.pathname,
+ host: params.hostname,
+ protocol: params.protocol
+ }, defaults);
+
+ // use custom params
+ } else {
+
+ options = populate(params, defaults);
+ // if no port provided use default one
+ if (!options.port) {
+ options.port = options.protocol == 'https:' ? 443 : 80;
+ }
+ }
+
+ // put that good code in getHeaders to some use
+ options.headers = this.getHeaders(params.headers);
+
+ // https if specified, fallback to http in any other case
+ if (options.protocol == 'https:') {
+ request = https.request(options);
+ } else {
+ request = http.request(options);
+ }
+
+ // get content length and fire away
+ this.getLength(function(err, length) {
+ if (err && err !== 'Unknown stream') {
+ this._error(err);
+ return;
+ }
+
+ // add content length
+ if (length) {
+ request.setHeader('Content-Length', length);
+ }
+
+ this.pipe(request);
+ if (cb) {
+ var onResponse;
+
+ var callback = function (error, responce) {
+ request.removeListener('error', callback);
+ request.removeListener('response', onResponse);
+
+ return cb.call(this, error, responce);
+ };
+
+ onResponse = callback.bind(this, null);
+
+ request.on('error', callback);
+ request.on('response', onResponse);
+ }
+ }.bind(this));
+
+ return request;
+};
+
+FormData.prototype._error = function(err) {
+ if (!this.error) {
+ this.error = err;
+ this.pause();
+ this.emit('error', err);
+ }
+};
+
+FormData.prototype.toString = function () {
+ return '[object FormData]';
+};
diff --git a/.output/server/node_modules/form-data/lib/populate.js b/.output/server/node_modules/form-data/lib/populate.js
new file mode 100644
index 0000000..4d35738
--- /dev/null
+++ b/.output/server/node_modules/form-data/lib/populate.js
@@ -0,0 +1,10 @@
+// populates missing values
+module.exports = function(dst, src) {
+
+ Object.keys(src).forEach(function(prop)
+ {
+ dst[prop] = dst[prop] || src[prop];
+ });
+
+ return dst;
+};
diff --git a/.output/server/node_modules/form-data/package.json b/.output/server/node_modules/form-data/package.json
new file mode 100644
index 0000000..43e7193
--- /dev/null
+++ b/.output/server/node_modules/form-data/package.json
@@ -0,0 +1,68 @@
+{
+ "author": "Felix Geisendörfer (http://debuggable.com/)",
+ "name": "form-data",
+ "description": "A library to create readable \"multipart/form-data\" streams. Can be used to submit forms and file uploads to other web applications.",
+ "version": "4.0.0",
+ "repository": {
+ "type": "git",
+ "url": "git://github.com/form-data/form-data.git"
+ },
+ "main": "./lib/form_data",
+ "browser": "./lib/browser",
+ "typings": "./index.d.ts",
+ "scripts": {
+ "pretest": "rimraf coverage test/tmp",
+ "test": "istanbul cover test/run.js",
+ "posttest": "istanbul report lcov text",
+ "lint": "eslint lib/*.js test/*.js test/integration/*.js",
+ "report": "istanbul report lcov text",
+ "ci-lint": "is-node-modern 8 && npm run lint || is-node-not-modern 8",
+ "ci-test": "npm run test && npm run browser && npm run report",
+ "predebug": "rimraf coverage test/tmp",
+ "debug": "verbose=1 ./test/run.js",
+ "browser": "browserify -t browserify-istanbul test/run-browser.js | obake --coverage",
+ "check": "istanbul check-coverage coverage/coverage*.json",
+ "files": "pkgfiles --sort=name",
+ "get-version": "node -e \"console.log(require('./package.json').version)\"",
+ "update-readme": "sed -i.bak 's/\\/master\\.svg/\\/v'$(npm --silent run get-version)'.svg/g' README.md",
+ "restore-readme": "mv README.md.bak README.md",
+ "prepublish": "in-publish && npm run update-readme || not-in-publish",
+ "postpublish": "npm run restore-readme"
+ },
+ "pre-commit": [
+ "lint",
+ "ci-test",
+ "check"
+ ],
+ "engines": {
+ "node": ">= 6"
+ },
+ "dependencies": {
+ "asynckit": "^0.4.0",
+ "combined-stream": "^1.0.8",
+ "mime-types": "^2.1.12"
+ },
+ "devDependencies": {
+ "@types/node": "^12.0.10",
+ "browserify": "^13.1.1",
+ "browserify-istanbul": "^2.0.0",
+ "coveralls": "^3.0.4",
+ "cross-spawn": "^6.0.5",
+ "eslint": "^6.0.1",
+ "fake": "^0.2.2",
+ "far": "^0.0.7",
+ "formidable": "^1.0.17",
+ "in-publish": "^2.0.0",
+ "is-node-modern": "^1.0.0",
+ "istanbul": "^0.4.5",
+ "obake": "^0.1.2",
+ "puppeteer": "^1.19.0",
+ "pkgfiles": "^2.3.0",
+ "pre-commit": "^1.1.3",
+ "request": "^2.88.0",
+ "rimraf": "^2.7.1",
+ "tape": "^4.6.2",
+ "typescript": "^3.5.2"
+ },
+ "license": "MIT"
+}
\ No newline at end of file
diff --git a/.output/server/node_modules/hookable/package.json b/.output/server/node_modules/hookable/package.json
new file mode 100644
index 0000000..6dd3883
--- /dev/null
+++ b/.output/server/node_modules/hookable/package.json
@@ -0,0 +1,49 @@
+{
+ "name": "hookable",
+ "version": "5.5.3",
+ "description": "Awaitable hook system",
+ "keywords": [
+ "hook",
+ "hookable",
+ "plugin",
+ "tapable",
+ "tappable"
+ ],
+ "repository": "unjs/hookable",
+ "license": "MIT",
+ "exports": {
+ "import": "./dist/index.mjs",
+ "types": "./dist/index.d.ts",
+ "require": "./dist/index.cjs"
+ },
+ "main": "./dist/index.cjs",
+ "module": "./dist/index.mjs",
+ "types": "./dist/index.d.ts",
+ "files": [
+ "dist"
+ ],
+ "devDependencies": {
+ "@types/node": "^18.15.11",
+ "@vitest/coverage-c8": "^0.29.8",
+ "changelogen": "^0.5.2",
+ "eslint": "^8.37.0",
+ "eslint-config-unjs": "^0.1.0",
+ "expect-type": "^0.15.0",
+ "prettier": "^2.8.7",
+ "typescript": "^5.0.2",
+ "unbuild": "^1.1.2",
+ "vite": "^4.2.1",
+ "vitest": "^0.29.8"
+ },
+ "packageManager": "pnpm@8.0.0",
+ "scripts": {
+ "build": "unbuild",
+ "dev": "vitest",
+ "lint": "eslint --cache --ext .ts,.js,.mjs,.cjs . && prettier -c src test",
+ "lint:fix": "eslint --cache --ext .ts,.js,.mjs,.cjs . --fix && prettier -c src test -w",
+ "prepublish": "pnpm build",
+ "release": "pnpm test && pnpm build && changelogen --release --push && pnpm publish",
+ "test": "pnpm lint && vitest run --coverage",
+ "test:types": "tsc --noEmit"
+ }
+}
\ No newline at end of file
diff --git a/.output/server/node_modules/mime-db/db.json b/.output/server/node_modules/mime-db/db.json
new file mode 100644
index 0000000..eb9c42c
--- /dev/null
+++ b/.output/server/node_modules/mime-db/db.json
@@ -0,0 +1,8519 @@
+{
+ "application/1d-interleaved-parityfec": {
+ "source": "iana"
+ },
+ "application/3gpdash-qoe-report+xml": {
+ "source": "iana",
+ "charset": "UTF-8",
+ "compressible": true
+ },
+ "application/3gpp-ims+xml": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/3gpphal+json": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/3gpphalforms+json": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/a2l": {
+ "source": "iana"
+ },
+ "application/ace+cbor": {
+ "source": "iana"
+ },
+ "application/activemessage": {
+ "source": "iana"
+ },
+ "application/activity+json": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/alto-costmap+json": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/alto-costmapfilter+json": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/alto-directory+json": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/alto-endpointcost+json": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/alto-endpointcostparams+json": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/alto-endpointprop+json": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/alto-endpointpropparams+json": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/alto-error+json": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/alto-networkmap+json": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/alto-networkmapfilter+json": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/alto-updatestreamcontrol+json": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/alto-updatestreamparams+json": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/aml": {
+ "source": "iana"
+ },
+ "application/andrew-inset": {
+ "source": "iana",
+ "extensions": ["ez"]
+ },
+ "application/applefile": {
+ "source": "iana"
+ },
+ "application/applixware": {
+ "source": "apache",
+ "extensions": ["aw"]
+ },
+ "application/at+jwt": {
+ "source": "iana"
+ },
+ "application/atf": {
+ "source": "iana"
+ },
+ "application/atfx": {
+ "source": "iana"
+ },
+ "application/atom+xml": {
+ "source": "iana",
+ "compressible": true,
+ "extensions": ["atom"]
+ },
+ "application/atomcat+xml": {
+ "source": "iana",
+ "compressible": true,
+ "extensions": ["atomcat"]
+ },
+ "application/atomdeleted+xml": {
+ "source": "iana",
+ "compressible": true,
+ "extensions": ["atomdeleted"]
+ },
+ "application/atomicmail": {
+ "source": "iana"
+ },
+ "application/atomsvc+xml": {
+ "source": "iana",
+ "compressible": true,
+ "extensions": ["atomsvc"]
+ },
+ "application/atsc-dwd+xml": {
+ "source": "iana",
+ "compressible": true,
+ "extensions": ["dwd"]
+ },
+ "application/atsc-dynamic-event-message": {
+ "source": "iana"
+ },
+ "application/atsc-held+xml": {
+ "source": "iana",
+ "compressible": true,
+ "extensions": ["held"]
+ },
+ "application/atsc-rdt+json": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/atsc-rsat+xml": {
+ "source": "iana",
+ "compressible": true,
+ "extensions": ["rsat"]
+ },
+ "application/atxml": {
+ "source": "iana"
+ },
+ "application/auth-policy+xml": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/bacnet-xdd+zip": {
+ "source": "iana",
+ "compressible": false
+ },
+ "application/batch-smtp": {
+ "source": "iana"
+ },
+ "application/bdoc": {
+ "compressible": false,
+ "extensions": ["bdoc"]
+ },
+ "application/beep+xml": {
+ "source": "iana",
+ "charset": "UTF-8",
+ "compressible": true
+ },
+ "application/calendar+json": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/calendar+xml": {
+ "source": "iana",
+ "compressible": true,
+ "extensions": ["xcs"]
+ },
+ "application/call-completion": {
+ "source": "iana"
+ },
+ "application/cals-1840": {
+ "source": "iana"
+ },
+ "application/captive+json": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/cbor": {
+ "source": "iana"
+ },
+ "application/cbor-seq": {
+ "source": "iana"
+ },
+ "application/cccex": {
+ "source": "iana"
+ },
+ "application/ccmp+xml": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/ccxml+xml": {
+ "source": "iana",
+ "compressible": true,
+ "extensions": ["ccxml"]
+ },
+ "application/cdfx+xml": {
+ "source": "iana",
+ "compressible": true,
+ "extensions": ["cdfx"]
+ },
+ "application/cdmi-capability": {
+ "source": "iana",
+ "extensions": ["cdmia"]
+ },
+ "application/cdmi-container": {
+ "source": "iana",
+ "extensions": ["cdmic"]
+ },
+ "application/cdmi-domain": {
+ "source": "iana",
+ "extensions": ["cdmid"]
+ },
+ "application/cdmi-object": {
+ "source": "iana",
+ "extensions": ["cdmio"]
+ },
+ "application/cdmi-queue": {
+ "source": "iana",
+ "extensions": ["cdmiq"]
+ },
+ "application/cdni": {
+ "source": "iana"
+ },
+ "application/cea": {
+ "source": "iana"
+ },
+ "application/cea-2018+xml": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/cellml+xml": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/cfw": {
+ "source": "iana"
+ },
+ "application/city+json": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/clr": {
+ "source": "iana"
+ },
+ "application/clue+xml": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/clue_info+xml": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/cms": {
+ "source": "iana"
+ },
+ "application/cnrp+xml": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/coap-group+json": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/coap-payload": {
+ "source": "iana"
+ },
+ "application/commonground": {
+ "source": "iana"
+ },
+ "application/conference-info+xml": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/cose": {
+ "source": "iana"
+ },
+ "application/cose-key": {
+ "source": "iana"
+ },
+ "application/cose-key-set": {
+ "source": "iana"
+ },
+ "application/cpl+xml": {
+ "source": "iana",
+ "compressible": true,
+ "extensions": ["cpl"]
+ },
+ "application/csrattrs": {
+ "source": "iana"
+ },
+ "application/csta+xml": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/cstadata+xml": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/csvm+json": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/cu-seeme": {
+ "source": "apache",
+ "extensions": ["cu"]
+ },
+ "application/cwt": {
+ "source": "iana"
+ },
+ "application/cybercash": {
+ "source": "iana"
+ },
+ "application/dart": {
+ "compressible": true
+ },
+ "application/dash+xml": {
+ "source": "iana",
+ "compressible": true,
+ "extensions": ["mpd"]
+ },
+ "application/dash-patch+xml": {
+ "source": "iana",
+ "compressible": true,
+ "extensions": ["mpp"]
+ },
+ "application/dashdelta": {
+ "source": "iana"
+ },
+ "application/davmount+xml": {
+ "source": "iana",
+ "compressible": true,
+ "extensions": ["davmount"]
+ },
+ "application/dca-rft": {
+ "source": "iana"
+ },
+ "application/dcd": {
+ "source": "iana"
+ },
+ "application/dec-dx": {
+ "source": "iana"
+ },
+ "application/dialog-info+xml": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/dicom": {
+ "source": "iana"
+ },
+ "application/dicom+json": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/dicom+xml": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/dii": {
+ "source": "iana"
+ },
+ "application/dit": {
+ "source": "iana"
+ },
+ "application/dns": {
+ "source": "iana"
+ },
+ "application/dns+json": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/dns-message": {
+ "source": "iana"
+ },
+ "application/docbook+xml": {
+ "source": "apache",
+ "compressible": true,
+ "extensions": ["dbk"]
+ },
+ "application/dots+cbor": {
+ "source": "iana"
+ },
+ "application/dskpp+xml": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/dssc+der": {
+ "source": "iana",
+ "extensions": ["dssc"]
+ },
+ "application/dssc+xml": {
+ "source": "iana",
+ "compressible": true,
+ "extensions": ["xdssc"]
+ },
+ "application/dvcs": {
+ "source": "iana"
+ },
+ "application/ecmascript": {
+ "source": "iana",
+ "compressible": true,
+ "extensions": ["es","ecma"]
+ },
+ "application/edi-consent": {
+ "source": "iana"
+ },
+ "application/edi-x12": {
+ "source": "iana",
+ "compressible": false
+ },
+ "application/edifact": {
+ "source": "iana",
+ "compressible": false
+ },
+ "application/efi": {
+ "source": "iana"
+ },
+ "application/elm+json": {
+ "source": "iana",
+ "charset": "UTF-8",
+ "compressible": true
+ },
+ "application/elm+xml": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/emergencycalldata.cap+xml": {
+ "source": "iana",
+ "charset": "UTF-8",
+ "compressible": true
+ },
+ "application/emergencycalldata.comment+xml": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/emergencycalldata.control+xml": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/emergencycalldata.deviceinfo+xml": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/emergencycalldata.ecall.msd": {
+ "source": "iana"
+ },
+ "application/emergencycalldata.providerinfo+xml": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/emergencycalldata.serviceinfo+xml": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/emergencycalldata.subscriberinfo+xml": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/emergencycalldata.veds+xml": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/emma+xml": {
+ "source": "iana",
+ "compressible": true,
+ "extensions": ["emma"]
+ },
+ "application/emotionml+xml": {
+ "source": "iana",
+ "compressible": true,
+ "extensions": ["emotionml"]
+ },
+ "application/encaprtp": {
+ "source": "iana"
+ },
+ "application/epp+xml": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/epub+zip": {
+ "source": "iana",
+ "compressible": false,
+ "extensions": ["epub"]
+ },
+ "application/eshop": {
+ "source": "iana"
+ },
+ "application/exi": {
+ "source": "iana",
+ "extensions": ["exi"]
+ },
+ "application/expect-ct-report+json": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/express": {
+ "source": "iana",
+ "extensions": ["exp"]
+ },
+ "application/fastinfoset": {
+ "source": "iana"
+ },
+ "application/fastsoap": {
+ "source": "iana"
+ },
+ "application/fdt+xml": {
+ "source": "iana",
+ "compressible": true,
+ "extensions": ["fdt"]
+ },
+ "application/fhir+json": {
+ "source": "iana",
+ "charset": "UTF-8",
+ "compressible": true
+ },
+ "application/fhir+xml": {
+ "source": "iana",
+ "charset": "UTF-8",
+ "compressible": true
+ },
+ "application/fido.trusted-apps+json": {
+ "compressible": true
+ },
+ "application/fits": {
+ "source": "iana"
+ },
+ "application/flexfec": {
+ "source": "iana"
+ },
+ "application/font-sfnt": {
+ "source": "iana"
+ },
+ "application/font-tdpfr": {
+ "source": "iana",
+ "extensions": ["pfr"]
+ },
+ "application/font-woff": {
+ "source": "iana",
+ "compressible": false
+ },
+ "application/framework-attributes+xml": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/geo+json": {
+ "source": "iana",
+ "compressible": true,
+ "extensions": ["geojson"]
+ },
+ "application/geo+json-seq": {
+ "source": "iana"
+ },
+ "application/geopackage+sqlite3": {
+ "source": "iana"
+ },
+ "application/geoxacml+xml": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/gltf-buffer": {
+ "source": "iana"
+ },
+ "application/gml+xml": {
+ "source": "iana",
+ "compressible": true,
+ "extensions": ["gml"]
+ },
+ "application/gpx+xml": {
+ "source": "apache",
+ "compressible": true,
+ "extensions": ["gpx"]
+ },
+ "application/gxf": {
+ "source": "apache",
+ "extensions": ["gxf"]
+ },
+ "application/gzip": {
+ "source": "iana",
+ "compressible": false,
+ "extensions": ["gz"]
+ },
+ "application/h224": {
+ "source": "iana"
+ },
+ "application/held+xml": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/hjson": {
+ "extensions": ["hjson"]
+ },
+ "application/http": {
+ "source": "iana"
+ },
+ "application/hyperstudio": {
+ "source": "iana",
+ "extensions": ["stk"]
+ },
+ "application/ibe-key-request+xml": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/ibe-pkg-reply+xml": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/ibe-pp-data": {
+ "source": "iana"
+ },
+ "application/iges": {
+ "source": "iana"
+ },
+ "application/im-iscomposing+xml": {
+ "source": "iana",
+ "charset": "UTF-8",
+ "compressible": true
+ },
+ "application/index": {
+ "source": "iana"
+ },
+ "application/index.cmd": {
+ "source": "iana"
+ },
+ "application/index.obj": {
+ "source": "iana"
+ },
+ "application/index.response": {
+ "source": "iana"
+ },
+ "application/index.vnd": {
+ "source": "iana"
+ },
+ "application/inkml+xml": {
+ "source": "iana",
+ "compressible": true,
+ "extensions": ["ink","inkml"]
+ },
+ "application/iotp": {
+ "source": "iana"
+ },
+ "application/ipfix": {
+ "source": "iana",
+ "extensions": ["ipfix"]
+ },
+ "application/ipp": {
+ "source": "iana"
+ },
+ "application/isup": {
+ "source": "iana"
+ },
+ "application/its+xml": {
+ "source": "iana",
+ "compressible": true,
+ "extensions": ["its"]
+ },
+ "application/java-archive": {
+ "source": "apache",
+ "compressible": false,
+ "extensions": ["jar","war","ear"]
+ },
+ "application/java-serialized-object": {
+ "source": "apache",
+ "compressible": false,
+ "extensions": ["ser"]
+ },
+ "application/java-vm": {
+ "source": "apache",
+ "compressible": false,
+ "extensions": ["class"]
+ },
+ "application/javascript": {
+ "source": "iana",
+ "charset": "UTF-8",
+ "compressible": true,
+ "extensions": ["js","mjs"]
+ },
+ "application/jf2feed+json": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/jose": {
+ "source": "iana"
+ },
+ "application/jose+json": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/jrd+json": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/jscalendar+json": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/json": {
+ "source": "iana",
+ "charset": "UTF-8",
+ "compressible": true,
+ "extensions": ["json","map"]
+ },
+ "application/json-patch+json": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/json-seq": {
+ "source": "iana"
+ },
+ "application/json5": {
+ "extensions": ["json5"]
+ },
+ "application/jsonml+json": {
+ "source": "apache",
+ "compressible": true,
+ "extensions": ["jsonml"]
+ },
+ "application/jwk+json": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/jwk-set+json": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/jwt": {
+ "source": "iana"
+ },
+ "application/kpml-request+xml": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/kpml-response+xml": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/ld+json": {
+ "source": "iana",
+ "compressible": true,
+ "extensions": ["jsonld"]
+ },
+ "application/lgr+xml": {
+ "source": "iana",
+ "compressible": true,
+ "extensions": ["lgr"]
+ },
+ "application/link-format": {
+ "source": "iana"
+ },
+ "application/load-control+xml": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/lost+xml": {
+ "source": "iana",
+ "compressible": true,
+ "extensions": ["lostxml"]
+ },
+ "application/lostsync+xml": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/lpf+zip": {
+ "source": "iana",
+ "compressible": false
+ },
+ "application/lxf": {
+ "source": "iana"
+ },
+ "application/mac-binhex40": {
+ "source": "iana",
+ "extensions": ["hqx"]
+ },
+ "application/mac-compactpro": {
+ "source": "apache",
+ "extensions": ["cpt"]
+ },
+ "application/macwriteii": {
+ "source": "iana"
+ },
+ "application/mads+xml": {
+ "source": "iana",
+ "compressible": true,
+ "extensions": ["mads"]
+ },
+ "application/manifest+json": {
+ "source": "iana",
+ "charset": "UTF-8",
+ "compressible": true,
+ "extensions": ["webmanifest"]
+ },
+ "application/marc": {
+ "source": "iana",
+ "extensions": ["mrc"]
+ },
+ "application/marcxml+xml": {
+ "source": "iana",
+ "compressible": true,
+ "extensions": ["mrcx"]
+ },
+ "application/mathematica": {
+ "source": "iana",
+ "extensions": ["ma","nb","mb"]
+ },
+ "application/mathml+xml": {
+ "source": "iana",
+ "compressible": true,
+ "extensions": ["mathml"]
+ },
+ "application/mathml-content+xml": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/mathml-presentation+xml": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/mbms-associated-procedure-description+xml": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/mbms-deregister+xml": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/mbms-envelope+xml": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/mbms-msk+xml": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/mbms-msk-response+xml": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/mbms-protection-description+xml": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/mbms-reception-report+xml": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/mbms-register+xml": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/mbms-register-response+xml": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/mbms-schedule+xml": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/mbms-user-service-description+xml": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/mbox": {
+ "source": "iana",
+ "extensions": ["mbox"]
+ },
+ "application/media-policy-dataset+xml": {
+ "source": "iana",
+ "compressible": true,
+ "extensions": ["mpf"]
+ },
+ "application/media_control+xml": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/mediaservercontrol+xml": {
+ "source": "iana",
+ "compressible": true,
+ "extensions": ["mscml"]
+ },
+ "application/merge-patch+json": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/metalink+xml": {
+ "source": "apache",
+ "compressible": true,
+ "extensions": ["metalink"]
+ },
+ "application/metalink4+xml": {
+ "source": "iana",
+ "compressible": true,
+ "extensions": ["meta4"]
+ },
+ "application/mets+xml": {
+ "source": "iana",
+ "compressible": true,
+ "extensions": ["mets"]
+ },
+ "application/mf4": {
+ "source": "iana"
+ },
+ "application/mikey": {
+ "source": "iana"
+ },
+ "application/mipc": {
+ "source": "iana"
+ },
+ "application/missing-blocks+cbor-seq": {
+ "source": "iana"
+ },
+ "application/mmt-aei+xml": {
+ "source": "iana",
+ "compressible": true,
+ "extensions": ["maei"]
+ },
+ "application/mmt-usd+xml": {
+ "source": "iana",
+ "compressible": true,
+ "extensions": ["musd"]
+ },
+ "application/mods+xml": {
+ "source": "iana",
+ "compressible": true,
+ "extensions": ["mods"]
+ },
+ "application/moss-keys": {
+ "source": "iana"
+ },
+ "application/moss-signature": {
+ "source": "iana"
+ },
+ "application/mosskey-data": {
+ "source": "iana"
+ },
+ "application/mosskey-request": {
+ "source": "iana"
+ },
+ "application/mp21": {
+ "source": "iana",
+ "extensions": ["m21","mp21"]
+ },
+ "application/mp4": {
+ "source": "iana",
+ "extensions": ["mp4s","m4p"]
+ },
+ "application/mpeg4-generic": {
+ "source": "iana"
+ },
+ "application/mpeg4-iod": {
+ "source": "iana"
+ },
+ "application/mpeg4-iod-xmt": {
+ "source": "iana"
+ },
+ "application/mrb-consumer+xml": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/mrb-publish+xml": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/msc-ivr+xml": {
+ "source": "iana",
+ "charset": "UTF-8",
+ "compressible": true
+ },
+ "application/msc-mixer+xml": {
+ "source": "iana",
+ "charset": "UTF-8",
+ "compressible": true
+ },
+ "application/msword": {
+ "source": "iana",
+ "compressible": false,
+ "extensions": ["doc","dot"]
+ },
+ "application/mud+json": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/multipart-core": {
+ "source": "iana"
+ },
+ "application/mxf": {
+ "source": "iana",
+ "extensions": ["mxf"]
+ },
+ "application/n-quads": {
+ "source": "iana",
+ "extensions": ["nq"]
+ },
+ "application/n-triples": {
+ "source": "iana",
+ "extensions": ["nt"]
+ },
+ "application/nasdata": {
+ "source": "iana"
+ },
+ "application/news-checkgroups": {
+ "source": "iana",
+ "charset": "US-ASCII"
+ },
+ "application/news-groupinfo": {
+ "source": "iana",
+ "charset": "US-ASCII"
+ },
+ "application/news-transmission": {
+ "source": "iana"
+ },
+ "application/nlsml+xml": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/node": {
+ "source": "iana",
+ "extensions": ["cjs"]
+ },
+ "application/nss": {
+ "source": "iana"
+ },
+ "application/oauth-authz-req+jwt": {
+ "source": "iana"
+ },
+ "application/oblivious-dns-message": {
+ "source": "iana"
+ },
+ "application/ocsp-request": {
+ "source": "iana"
+ },
+ "application/ocsp-response": {
+ "source": "iana"
+ },
+ "application/octet-stream": {
+ "source": "iana",
+ "compressible": false,
+ "extensions": ["bin","dms","lrf","mar","so","dist","distz","pkg","bpk","dump","elc","deploy","exe","dll","deb","dmg","iso","img","msi","msp","msm","buffer"]
+ },
+ "application/oda": {
+ "source": "iana",
+ "extensions": ["oda"]
+ },
+ "application/odm+xml": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/odx": {
+ "source": "iana"
+ },
+ "application/oebps-package+xml": {
+ "source": "iana",
+ "compressible": true,
+ "extensions": ["opf"]
+ },
+ "application/ogg": {
+ "source": "iana",
+ "compressible": false,
+ "extensions": ["ogx"]
+ },
+ "application/omdoc+xml": {
+ "source": "apache",
+ "compressible": true,
+ "extensions": ["omdoc"]
+ },
+ "application/onenote": {
+ "source": "apache",
+ "extensions": ["onetoc","onetoc2","onetmp","onepkg"]
+ },
+ "application/opc-nodeset+xml": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/oscore": {
+ "source": "iana"
+ },
+ "application/oxps": {
+ "source": "iana",
+ "extensions": ["oxps"]
+ },
+ "application/p21": {
+ "source": "iana"
+ },
+ "application/p21+zip": {
+ "source": "iana",
+ "compressible": false
+ },
+ "application/p2p-overlay+xml": {
+ "source": "iana",
+ "compressible": true,
+ "extensions": ["relo"]
+ },
+ "application/parityfec": {
+ "source": "iana"
+ },
+ "application/passport": {
+ "source": "iana"
+ },
+ "application/patch-ops-error+xml": {
+ "source": "iana",
+ "compressible": true,
+ "extensions": ["xer"]
+ },
+ "application/pdf": {
+ "source": "iana",
+ "compressible": false,
+ "extensions": ["pdf"]
+ },
+ "application/pdx": {
+ "source": "iana"
+ },
+ "application/pem-certificate-chain": {
+ "source": "iana"
+ },
+ "application/pgp-encrypted": {
+ "source": "iana",
+ "compressible": false,
+ "extensions": ["pgp"]
+ },
+ "application/pgp-keys": {
+ "source": "iana",
+ "extensions": ["asc"]
+ },
+ "application/pgp-signature": {
+ "source": "iana",
+ "extensions": ["asc","sig"]
+ },
+ "application/pics-rules": {
+ "source": "apache",
+ "extensions": ["prf"]
+ },
+ "application/pidf+xml": {
+ "source": "iana",
+ "charset": "UTF-8",
+ "compressible": true
+ },
+ "application/pidf-diff+xml": {
+ "source": "iana",
+ "charset": "UTF-8",
+ "compressible": true
+ },
+ "application/pkcs10": {
+ "source": "iana",
+ "extensions": ["p10"]
+ },
+ "application/pkcs12": {
+ "source": "iana"
+ },
+ "application/pkcs7-mime": {
+ "source": "iana",
+ "extensions": ["p7m","p7c"]
+ },
+ "application/pkcs7-signature": {
+ "source": "iana",
+ "extensions": ["p7s"]
+ },
+ "application/pkcs8": {
+ "source": "iana",
+ "extensions": ["p8"]
+ },
+ "application/pkcs8-encrypted": {
+ "source": "iana"
+ },
+ "application/pkix-attr-cert": {
+ "source": "iana",
+ "extensions": ["ac"]
+ },
+ "application/pkix-cert": {
+ "source": "iana",
+ "extensions": ["cer"]
+ },
+ "application/pkix-crl": {
+ "source": "iana",
+ "extensions": ["crl"]
+ },
+ "application/pkix-pkipath": {
+ "source": "iana",
+ "extensions": ["pkipath"]
+ },
+ "application/pkixcmp": {
+ "source": "iana",
+ "extensions": ["pki"]
+ },
+ "application/pls+xml": {
+ "source": "iana",
+ "compressible": true,
+ "extensions": ["pls"]
+ },
+ "application/poc-settings+xml": {
+ "source": "iana",
+ "charset": "UTF-8",
+ "compressible": true
+ },
+ "application/postscript": {
+ "source": "iana",
+ "compressible": true,
+ "extensions": ["ai","eps","ps"]
+ },
+ "application/ppsp-tracker+json": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/problem+json": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/problem+xml": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/provenance+xml": {
+ "source": "iana",
+ "compressible": true,
+ "extensions": ["provx"]
+ },
+ "application/prs.alvestrand.titrax-sheet": {
+ "source": "iana"
+ },
+ "application/prs.cww": {
+ "source": "iana",
+ "extensions": ["cww"]
+ },
+ "application/prs.cyn": {
+ "source": "iana",
+ "charset": "7-BIT"
+ },
+ "application/prs.hpub+zip": {
+ "source": "iana",
+ "compressible": false
+ },
+ "application/prs.nprend": {
+ "source": "iana"
+ },
+ "application/prs.plucker": {
+ "source": "iana"
+ },
+ "application/prs.rdf-xml-crypt": {
+ "source": "iana"
+ },
+ "application/prs.xsf+xml": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/pskc+xml": {
+ "source": "iana",
+ "compressible": true,
+ "extensions": ["pskcxml"]
+ },
+ "application/pvd+json": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/qsig": {
+ "source": "iana"
+ },
+ "application/raml+yaml": {
+ "compressible": true,
+ "extensions": ["raml"]
+ },
+ "application/raptorfec": {
+ "source": "iana"
+ },
+ "application/rdap+json": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/rdf+xml": {
+ "source": "iana",
+ "compressible": true,
+ "extensions": ["rdf","owl"]
+ },
+ "application/reginfo+xml": {
+ "source": "iana",
+ "compressible": true,
+ "extensions": ["rif"]
+ },
+ "application/relax-ng-compact-syntax": {
+ "source": "iana",
+ "extensions": ["rnc"]
+ },
+ "application/remote-printing": {
+ "source": "iana"
+ },
+ "application/reputon+json": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/resource-lists+xml": {
+ "source": "iana",
+ "compressible": true,
+ "extensions": ["rl"]
+ },
+ "application/resource-lists-diff+xml": {
+ "source": "iana",
+ "compressible": true,
+ "extensions": ["rld"]
+ },
+ "application/rfc+xml": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/riscos": {
+ "source": "iana"
+ },
+ "application/rlmi+xml": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/rls-services+xml": {
+ "source": "iana",
+ "compressible": true,
+ "extensions": ["rs"]
+ },
+ "application/route-apd+xml": {
+ "source": "iana",
+ "compressible": true,
+ "extensions": ["rapd"]
+ },
+ "application/route-s-tsid+xml": {
+ "source": "iana",
+ "compressible": true,
+ "extensions": ["sls"]
+ },
+ "application/route-usd+xml": {
+ "source": "iana",
+ "compressible": true,
+ "extensions": ["rusd"]
+ },
+ "application/rpki-ghostbusters": {
+ "source": "iana",
+ "extensions": ["gbr"]
+ },
+ "application/rpki-manifest": {
+ "source": "iana",
+ "extensions": ["mft"]
+ },
+ "application/rpki-publication": {
+ "source": "iana"
+ },
+ "application/rpki-roa": {
+ "source": "iana",
+ "extensions": ["roa"]
+ },
+ "application/rpki-updown": {
+ "source": "iana"
+ },
+ "application/rsd+xml": {
+ "source": "apache",
+ "compressible": true,
+ "extensions": ["rsd"]
+ },
+ "application/rss+xml": {
+ "source": "apache",
+ "compressible": true,
+ "extensions": ["rss"]
+ },
+ "application/rtf": {
+ "source": "iana",
+ "compressible": true,
+ "extensions": ["rtf"]
+ },
+ "application/rtploopback": {
+ "source": "iana"
+ },
+ "application/rtx": {
+ "source": "iana"
+ },
+ "application/samlassertion+xml": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/samlmetadata+xml": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/sarif+json": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/sarif-external-properties+json": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/sbe": {
+ "source": "iana"
+ },
+ "application/sbml+xml": {
+ "source": "iana",
+ "compressible": true,
+ "extensions": ["sbml"]
+ },
+ "application/scaip+xml": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/scim+json": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/scvp-cv-request": {
+ "source": "iana",
+ "extensions": ["scq"]
+ },
+ "application/scvp-cv-response": {
+ "source": "iana",
+ "extensions": ["scs"]
+ },
+ "application/scvp-vp-request": {
+ "source": "iana",
+ "extensions": ["spq"]
+ },
+ "application/scvp-vp-response": {
+ "source": "iana",
+ "extensions": ["spp"]
+ },
+ "application/sdp": {
+ "source": "iana",
+ "extensions": ["sdp"]
+ },
+ "application/secevent+jwt": {
+ "source": "iana"
+ },
+ "application/senml+cbor": {
+ "source": "iana"
+ },
+ "application/senml+json": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/senml+xml": {
+ "source": "iana",
+ "compressible": true,
+ "extensions": ["senmlx"]
+ },
+ "application/senml-etch+cbor": {
+ "source": "iana"
+ },
+ "application/senml-etch+json": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/senml-exi": {
+ "source": "iana"
+ },
+ "application/sensml+cbor": {
+ "source": "iana"
+ },
+ "application/sensml+json": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/sensml+xml": {
+ "source": "iana",
+ "compressible": true,
+ "extensions": ["sensmlx"]
+ },
+ "application/sensml-exi": {
+ "source": "iana"
+ },
+ "application/sep+xml": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/sep-exi": {
+ "source": "iana"
+ },
+ "application/session-info": {
+ "source": "iana"
+ },
+ "application/set-payment": {
+ "source": "iana"
+ },
+ "application/set-payment-initiation": {
+ "source": "iana",
+ "extensions": ["setpay"]
+ },
+ "application/set-registration": {
+ "source": "iana"
+ },
+ "application/set-registration-initiation": {
+ "source": "iana",
+ "extensions": ["setreg"]
+ },
+ "application/sgml": {
+ "source": "iana"
+ },
+ "application/sgml-open-catalog": {
+ "source": "iana"
+ },
+ "application/shf+xml": {
+ "source": "iana",
+ "compressible": true,
+ "extensions": ["shf"]
+ },
+ "application/sieve": {
+ "source": "iana",
+ "extensions": ["siv","sieve"]
+ },
+ "application/simple-filter+xml": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/simple-message-summary": {
+ "source": "iana"
+ },
+ "application/simplesymbolcontainer": {
+ "source": "iana"
+ },
+ "application/sipc": {
+ "source": "iana"
+ },
+ "application/slate": {
+ "source": "iana"
+ },
+ "application/smil": {
+ "source": "iana"
+ },
+ "application/smil+xml": {
+ "source": "iana",
+ "compressible": true,
+ "extensions": ["smi","smil"]
+ },
+ "application/smpte336m": {
+ "source": "iana"
+ },
+ "application/soap+fastinfoset": {
+ "source": "iana"
+ },
+ "application/soap+xml": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/sparql-query": {
+ "source": "iana",
+ "extensions": ["rq"]
+ },
+ "application/sparql-results+xml": {
+ "source": "iana",
+ "compressible": true,
+ "extensions": ["srx"]
+ },
+ "application/spdx+json": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/spirits-event+xml": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/sql": {
+ "source": "iana"
+ },
+ "application/srgs": {
+ "source": "iana",
+ "extensions": ["gram"]
+ },
+ "application/srgs+xml": {
+ "source": "iana",
+ "compressible": true,
+ "extensions": ["grxml"]
+ },
+ "application/sru+xml": {
+ "source": "iana",
+ "compressible": true,
+ "extensions": ["sru"]
+ },
+ "application/ssdl+xml": {
+ "source": "apache",
+ "compressible": true,
+ "extensions": ["ssdl"]
+ },
+ "application/ssml+xml": {
+ "source": "iana",
+ "compressible": true,
+ "extensions": ["ssml"]
+ },
+ "application/stix+json": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/swid+xml": {
+ "source": "iana",
+ "compressible": true,
+ "extensions": ["swidtag"]
+ },
+ "application/tamp-apex-update": {
+ "source": "iana"
+ },
+ "application/tamp-apex-update-confirm": {
+ "source": "iana"
+ },
+ "application/tamp-community-update": {
+ "source": "iana"
+ },
+ "application/tamp-community-update-confirm": {
+ "source": "iana"
+ },
+ "application/tamp-error": {
+ "source": "iana"
+ },
+ "application/tamp-sequence-adjust": {
+ "source": "iana"
+ },
+ "application/tamp-sequence-adjust-confirm": {
+ "source": "iana"
+ },
+ "application/tamp-status-query": {
+ "source": "iana"
+ },
+ "application/tamp-status-response": {
+ "source": "iana"
+ },
+ "application/tamp-update": {
+ "source": "iana"
+ },
+ "application/tamp-update-confirm": {
+ "source": "iana"
+ },
+ "application/tar": {
+ "compressible": true
+ },
+ "application/taxii+json": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/td+json": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/tei+xml": {
+ "source": "iana",
+ "compressible": true,
+ "extensions": ["tei","teicorpus"]
+ },
+ "application/tetra_isi": {
+ "source": "iana"
+ },
+ "application/thraud+xml": {
+ "source": "iana",
+ "compressible": true,
+ "extensions": ["tfi"]
+ },
+ "application/timestamp-query": {
+ "source": "iana"
+ },
+ "application/timestamp-reply": {
+ "source": "iana"
+ },
+ "application/timestamped-data": {
+ "source": "iana",
+ "extensions": ["tsd"]
+ },
+ "application/tlsrpt+gzip": {
+ "source": "iana"
+ },
+ "application/tlsrpt+json": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/tnauthlist": {
+ "source": "iana"
+ },
+ "application/token-introspection+jwt": {
+ "source": "iana"
+ },
+ "application/toml": {
+ "compressible": true,
+ "extensions": ["toml"]
+ },
+ "application/trickle-ice-sdpfrag": {
+ "source": "iana"
+ },
+ "application/trig": {
+ "source": "iana",
+ "extensions": ["trig"]
+ },
+ "application/ttml+xml": {
+ "source": "iana",
+ "compressible": true,
+ "extensions": ["ttml"]
+ },
+ "application/tve-trigger": {
+ "source": "iana"
+ },
+ "application/tzif": {
+ "source": "iana"
+ },
+ "application/tzif-leap": {
+ "source": "iana"
+ },
+ "application/ubjson": {
+ "compressible": false,
+ "extensions": ["ubj"]
+ },
+ "application/ulpfec": {
+ "source": "iana"
+ },
+ "application/urc-grpsheet+xml": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/urc-ressheet+xml": {
+ "source": "iana",
+ "compressible": true,
+ "extensions": ["rsheet"]
+ },
+ "application/urc-targetdesc+xml": {
+ "source": "iana",
+ "compressible": true,
+ "extensions": ["td"]
+ },
+ "application/urc-uisocketdesc+xml": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/vcard+json": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/vcard+xml": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/vemmi": {
+ "source": "iana"
+ },
+ "application/vividence.scriptfile": {
+ "source": "apache"
+ },
+ "application/vnd.1000minds.decision-model+xml": {
+ "source": "iana",
+ "compressible": true,
+ "extensions": ["1km"]
+ },
+ "application/vnd.3gpp-prose+xml": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/vnd.3gpp-prose-pc3ch+xml": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/vnd.3gpp-v2x-local-service-information": {
+ "source": "iana"
+ },
+ "application/vnd.3gpp.5gnas": {
+ "source": "iana"
+ },
+ "application/vnd.3gpp.access-transfer-events+xml": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/vnd.3gpp.bsf+xml": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/vnd.3gpp.gmop+xml": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/vnd.3gpp.gtpc": {
+ "source": "iana"
+ },
+ "application/vnd.3gpp.interworking-data": {
+ "source": "iana"
+ },
+ "application/vnd.3gpp.lpp": {
+ "source": "iana"
+ },
+ "application/vnd.3gpp.mc-signalling-ear": {
+ "source": "iana"
+ },
+ "application/vnd.3gpp.mcdata-affiliation-command+xml": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/vnd.3gpp.mcdata-info+xml": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/vnd.3gpp.mcdata-payload": {
+ "source": "iana"
+ },
+ "application/vnd.3gpp.mcdata-service-config+xml": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/vnd.3gpp.mcdata-signalling": {
+ "source": "iana"
+ },
+ "application/vnd.3gpp.mcdata-ue-config+xml": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/vnd.3gpp.mcdata-user-profile+xml": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/vnd.3gpp.mcptt-affiliation-command+xml": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/vnd.3gpp.mcptt-floor-request+xml": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/vnd.3gpp.mcptt-info+xml": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/vnd.3gpp.mcptt-location-info+xml": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/vnd.3gpp.mcptt-mbms-usage-info+xml": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/vnd.3gpp.mcptt-service-config+xml": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/vnd.3gpp.mcptt-signed+xml": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/vnd.3gpp.mcptt-ue-config+xml": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/vnd.3gpp.mcptt-ue-init-config+xml": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/vnd.3gpp.mcptt-user-profile+xml": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/vnd.3gpp.mcvideo-affiliation-command+xml": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/vnd.3gpp.mcvideo-affiliation-info+xml": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/vnd.3gpp.mcvideo-info+xml": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/vnd.3gpp.mcvideo-location-info+xml": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/vnd.3gpp.mcvideo-mbms-usage-info+xml": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/vnd.3gpp.mcvideo-service-config+xml": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/vnd.3gpp.mcvideo-transmission-request+xml": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/vnd.3gpp.mcvideo-ue-config+xml": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/vnd.3gpp.mcvideo-user-profile+xml": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/vnd.3gpp.mid-call+xml": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/vnd.3gpp.ngap": {
+ "source": "iana"
+ },
+ "application/vnd.3gpp.pfcp": {
+ "source": "iana"
+ },
+ "application/vnd.3gpp.pic-bw-large": {
+ "source": "iana",
+ "extensions": ["plb"]
+ },
+ "application/vnd.3gpp.pic-bw-small": {
+ "source": "iana",
+ "extensions": ["psb"]
+ },
+ "application/vnd.3gpp.pic-bw-var": {
+ "source": "iana",
+ "extensions": ["pvb"]
+ },
+ "application/vnd.3gpp.s1ap": {
+ "source": "iana"
+ },
+ "application/vnd.3gpp.sms": {
+ "source": "iana"
+ },
+ "application/vnd.3gpp.sms+xml": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/vnd.3gpp.srvcc-ext+xml": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/vnd.3gpp.srvcc-info+xml": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/vnd.3gpp.state-and-event-info+xml": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/vnd.3gpp.ussd+xml": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/vnd.3gpp2.bcmcsinfo+xml": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/vnd.3gpp2.sms": {
+ "source": "iana"
+ },
+ "application/vnd.3gpp2.tcap": {
+ "source": "iana",
+ "extensions": ["tcap"]
+ },
+ "application/vnd.3lightssoftware.imagescal": {
+ "source": "iana"
+ },
+ "application/vnd.3m.post-it-notes": {
+ "source": "iana",
+ "extensions": ["pwn"]
+ },
+ "application/vnd.accpac.simply.aso": {
+ "source": "iana",
+ "extensions": ["aso"]
+ },
+ "application/vnd.accpac.simply.imp": {
+ "source": "iana",
+ "extensions": ["imp"]
+ },
+ "application/vnd.acucobol": {
+ "source": "iana",
+ "extensions": ["acu"]
+ },
+ "application/vnd.acucorp": {
+ "source": "iana",
+ "extensions": ["atc","acutc"]
+ },
+ "application/vnd.adobe.air-application-installer-package+zip": {
+ "source": "apache",
+ "compressible": false,
+ "extensions": ["air"]
+ },
+ "application/vnd.adobe.flash.movie": {
+ "source": "iana"
+ },
+ "application/vnd.adobe.formscentral.fcdt": {
+ "source": "iana",
+ "extensions": ["fcdt"]
+ },
+ "application/vnd.adobe.fxp": {
+ "source": "iana",
+ "extensions": ["fxp","fxpl"]
+ },
+ "application/vnd.adobe.partial-upload": {
+ "source": "iana"
+ },
+ "application/vnd.adobe.xdp+xml": {
+ "source": "iana",
+ "compressible": true,
+ "extensions": ["xdp"]
+ },
+ "application/vnd.adobe.xfdf": {
+ "source": "iana",
+ "extensions": ["xfdf"]
+ },
+ "application/vnd.aether.imp": {
+ "source": "iana"
+ },
+ "application/vnd.afpc.afplinedata": {
+ "source": "iana"
+ },
+ "application/vnd.afpc.afplinedata-pagedef": {
+ "source": "iana"
+ },
+ "application/vnd.afpc.cmoca-cmresource": {
+ "source": "iana"
+ },
+ "application/vnd.afpc.foca-charset": {
+ "source": "iana"
+ },
+ "application/vnd.afpc.foca-codedfont": {
+ "source": "iana"
+ },
+ "application/vnd.afpc.foca-codepage": {
+ "source": "iana"
+ },
+ "application/vnd.afpc.modca": {
+ "source": "iana"
+ },
+ "application/vnd.afpc.modca-cmtable": {
+ "source": "iana"
+ },
+ "application/vnd.afpc.modca-formdef": {
+ "source": "iana"
+ },
+ "application/vnd.afpc.modca-mediummap": {
+ "source": "iana"
+ },
+ "application/vnd.afpc.modca-objectcontainer": {
+ "source": "iana"
+ },
+ "application/vnd.afpc.modca-overlay": {
+ "source": "iana"
+ },
+ "application/vnd.afpc.modca-pagesegment": {
+ "source": "iana"
+ },
+ "application/vnd.age": {
+ "source": "iana",
+ "extensions": ["age"]
+ },
+ "application/vnd.ah-barcode": {
+ "source": "iana"
+ },
+ "application/vnd.ahead.space": {
+ "source": "iana",
+ "extensions": ["ahead"]
+ },
+ "application/vnd.airzip.filesecure.azf": {
+ "source": "iana",
+ "extensions": ["azf"]
+ },
+ "application/vnd.airzip.filesecure.azs": {
+ "source": "iana",
+ "extensions": ["azs"]
+ },
+ "application/vnd.amadeus+json": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/vnd.amazon.ebook": {
+ "source": "apache",
+ "extensions": ["azw"]
+ },
+ "application/vnd.amazon.mobi8-ebook": {
+ "source": "iana"
+ },
+ "application/vnd.americandynamics.acc": {
+ "source": "iana",
+ "extensions": ["acc"]
+ },
+ "application/vnd.amiga.ami": {
+ "source": "iana",
+ "extensions": ["ami"]
+ },
+ "application/vnd.amundsen.maze+xml": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/vnd.android.ota": {
+ "source": "iana"
+ },
+ "application/vnd.android.package-archive": {
+ "source": "apache",
+ "compressible": false,
+ "extensions": ["apk"]
+ },
+ "application/vnd.anki": {
+ "source": "iana"
+ },
+ "application/vnd.anser-web-certificate-issue-initiation": {
+ "source": "iana",
+ "extensions": ["cii"]
+ },
+ "application/vnd.anser-web-funds-transfer-initiation": {
+ "source": "apache",
+ "extensions": ["fti"]
+ },
+ "application/vnd.antix.game-component": {
+ "source": "iana",
+ "extensions": ["atx"]
+ },
+ "application/vnd.apache.arrow.file": {
+ "source": "iana"
+ },
+ "application/vnd.apache.arrow.stream": {
+ "source": "iana"
+ },
+ "application/vnd.apache.thrift.binary": {
+ "source": "iana"
+ },
+ "application/vnd.apache.thrift.compact": {
+ "source": "iana"
+ },
+ "application/vnd.apache.thrift.json": {
+ "source": "iana"
+ },
+ "application/vnd.api+json": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/vnd.aplextor.warrp+json": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/vnd.apothekende.reservation+json": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/vnd.apple.installer+xml": {
+ "source": "iana",
+ "compressible": true,
+ "extensions": ["mpkg"]
+ },
+ "application/vnd.apple.keynote": {
+ "source": "iana",
+ "extensions": ["key"]
+ },
+ "application/vnd.apple.mpegurl": {
+ "source": "iana",
+ "extensions": ["m3u8"]
+ },
+ "application/vnd.apple.numbers": {
+ "source": "iana",
+ "extensions": ["numbers"]
+ },
+ "application/vnd.apple.pages": {
+ "source": "iana",
+ "extensions": ["pages"]
+ },
+ "application/vnd.apple.pkpass": {
+ "compressible": false,
+ "extensions": ["pkpass"]
+ },
+ "application/vnd.arastra.swi": {
+ "source": "iana"
+ },
+ "application/vnd.aristanetworks.swi": {
+ "source": "iana",
+ "extensions": ["swi"]
+ },
+ "application/vnd.artisan+json": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/vnd.artsquare": {
+ "source": "iana"
+ },
+ "application/vnd.astraea-software.iota": {
+ "source": "iana",
+ "extensions": ["iota"]
+ },
+ "application/vnd.audiograph": {
+ "source": "iana",
+ "extensions": ["aep"]
+ },
+ "application/vnd.autopackage": {
+ "source": "iana"
+ },
+ "application/vnd.avalon+json": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/vnd.avistar+xml": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/vnd.balsamiq.bmml+xml": {
+ "source": "iana",
+ "compressible": true,
+ "extensions": ["bmml"]
+ },
+ "application/vnd.balsamiq.bmpr": {
+ "source": "iana"
+ },
+ "application/vnd.banana-accounting": {
+ "source": "iana"
+ },
+ "application/vnd.bbf.usp.error": {
+ "source": "iana"
+ },
+ "application/vnd.bbf.usp.msg": {
+ "source": "iana"
+ },
+ "application/vnd.bbf.usp.msg+json": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/vnd.bekitzur-stech+json": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/vnd.bint.med-content": {
+ "source": "iana"
+ },
+ "application/vnd.biopax.rdf+xml": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/vnd.blink-idb-value-wrapper": {
+ "source": "iana"
+ },
+ "application/vnd.blueice.multipass": {
+ "source": "iana",
+ "extensions": ["mpm"]
+ },
+ "application/vnd.bluetooth.ep.oob": {
+ "source": "iana"
+ },
+ "application/vnd.bluetooth.le.oob": {
+ "source": "iana"
+ },
+ "application/vnd.bmi": {
+ "source": "iana",
+ "extensions": ["bmi"]
+ },
+ "application/vnd.bpf": {
+ "source": "iana"
+ },
+ "application/vnd.bpf3": {
+ "source": "iana"
+ },
+ "application/vnd.businessobjects": {
+ "source": "iana",
+ "extensions": ["rep"]
+ },
+ "application/vnd.byu.uapi+json": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/vnd.cab-jscript": {
+ "source": "iana"
+ },
+ "application/vnd.canon-cpdl": {
+ "source": "iana"
+ },
+ "application/vnd.canon-lips": {
+ "source": "iana"
+ },
+ "application/vnd.capasystems-pg+json": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/vnd.cendio.thinlinc.clientconf": {
+ "source": "iana"
+ },
+ "application/vnd.century-systems.tcp_stream": {
+ "source": "iana"
+ },
+ "application/vnd.chemdraw+xml": {
+ "source": "iana",
+ "compressible": true,
+ "extensions": ["cdxml"]
+ },
+ "application/vnd.chess-pgn": {
+ "source": "iana"
+ },
+ "application/vnd.chipnuts.karaoke-mmd": {
+ "source": "iana",
+ "extensions": ["mmd"]
+ },
+ "application/vnd.ciedi": {
+ "source": "iana"
+ },
+ "application/vnd.cinderella": {
+ "source": "iana",
+ "extensions": ["cdy"]
+ },
+ "application/vnd.cirpack.isdn-ext": {
+ "source": "iana"
+ },
+ "application/vnd.citationstyles.style+xml": {
+ "source": "iana",
+ "compressible": true,
+ "extensions": ["csl"]
+ },
+ "application/vnd.claymore": {
+ "source": "iana",
+ "extensions": ["cla"]
+ },
+ "application/vnd.cloanto.rp9": {
+ "source": "iana",
+ "extensions": ["rp9"]
+ },
+ "application/vnd.clonk.c4group": {
+ "source": "iana",
+ "extensions": ["c4g","c4d","c4f","c4p","c4u"]
+ },
+ "application/vnd.cluetrust.cartomobile-config": {
+ "source": "iana",
+ "extensions": ["c11amc"]
+ },
+ "application/vnd.cluetrust.cartomobile-config-pkg": {
+ "source": "iana",
+ "extensions": ["c11amz"]
+ },
+ "application/vnd.coffeescript": {
+ "source": "iana"
+ },
+ "application/vnd.collabio.xodocuments.document": {
+ "source": "iana"
+ },
+ "application/vnd.collabio.xodocuments.document-template": {
+ "source": "iana"
+ },
+ "application/vnd.collabio.xodocuments.presentation": {
+ "source": "iana"
+ },
+ "application/vnd.collabio.xodocuments.presentation-template": {
+ "source": "iana"
+ },
+ "application/vnd.collabio.xodocuments.spreadsheet": {
+ "source": "iana"
+ },
+ "application/vnd.collabio.xodocuments.spreadsheet-template": {
+ "source": "iana"
+ },
+ "application/vnd.collection+json": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/vnd.collection.doc+json": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/vnd.collection.next+json": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/vnd.comicbook+zip": {
+ "source": "iana",
+ "compressible": false
+ },
+ "application/vnd.comicbook-rar": {
+ "source": "iana"
+ },
+ "application/vnd.commerce-battelle": {
+ "source": "iana"
+ },
+ "application/vnd.commonspace": {
+ "source": "iana",
+ "extensions": ["csp"]
+ },
+ "application/vnd.contact.cmsg": {
+ "source": "iana",
+ "extensions": ["cdbcmsg"]
+ },
+ "application/vnd.coreos.ignition+json": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/vnd.cosmocaller": {
+ "source": "iana",
+ "extensions": ["cmc"]
+ },
+ "application/vnd.crick.clicker": {
+ "source": "iana",
+ "extensions": ["clkx"]
+ },
+ "application/vnd.crick.clicker.keyboard": {
+ "source": "iana",
+ "extensions": ["clkk"]
+ },
+ "application/vnd.crick.clicker.palette": {
+ "source": "iana",
+ "extensions": ["clkp"]
+ },
+ "application/vnd.crick.clicker.template": {
+ "source": "iana",
+ "extensions": ["clkt"]
+ },
+ "application/vnd.crick.clicker.wordbank": {
+ "source": "iana",
+ "extensions": ["clkw"]
+ },
+ "application/vnd.criticaltools.wbs+xml": {
+ "source": "iana",
+ "compressible": true,
+ "extensions": ["wbs"]
+ },
+ "application/vnd.cryptii.pipe+json": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/vnd.crypto-shade-file": {
+ "source": "iana"
+ },
+ "application/vnd.cryptomator.encrypted": {
+ "source": "iana"
+ },
+ "application/vnd.cryptomator.vault": {
+ "source": "iana"
+ },
+ "application/vnd.ctc-posml": {
+ "source": "iana",
+ "extensions": ["pml"]
+ },
+ "application/vnd.ctct.ws+xml": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/vnd.cups-pdf": {
+ "source": "iana"
+ },
+ "application/vnd.cups-postscript": {
+ "source": "iana"
+ },
+ "application/vnd.cups-ppd": {
+ "source": "iana",
+ "extensions": ["ppd"]
+ },
+ "application/vnd.cups-raster": {
+ "source": "iana"
+ },
+ "application/vnd.cups-raw": {
+ "source": "iana"
+ },
+ "application/vnd.curl": {
+ "source": "iana"
+ },
+ "application/vnd.curl.car": {
+ "source": "apache",
+ "extensions": ["car"]
+ },
+ "application/vnd.curl.pcurl": {
+ "source": "apache",
+ "extensions": ["pcurl"]
+ },
+ "application/vnd.cyan.dean.root+xml": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/vnd.cybank": {
+ "source": "iana"
+ },
+ "application/vnd.cyclonedx+json": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/vnd.cyclonedx+xml": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/vnd.d2l.coursepackage1p0+zip": {
+ "source": "iana",
+ "compressible": false
+ },
+ "application/vnd.d3m-dataset": {
+ "source": "iana"
+ },
+ "application/vnd.d3m-problem": {
+ "source": "iana"
+ },
+ "application/vnd.dart": {
+ "source": "iana",
+ "compressible": true,
+ "extensions": ["dart"]
+ },
+ "application/vnd.data-vision.rdz": {
+ "source": "iana",
+ "extensions": ["rdz"]
+ },
+ "application/vnd.datapackage+json": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/vnd.dataresource+json": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/vnd.dbf": {
+ "source": "iana",
+ "extensions": ["dbf"]
+ },
+ "application/vnd.debian.binary-package": {
+ "source": "iana"
+ },
+ "application/vnd.dece.data": {
+ "source": "iana",
+ "extensions": ["uvf","uvvf","uvd","uvvd"]
+ },
+ "application/vnd.dece.ttml+xml": {
+ "source": "iana",
+ "compressible": true,
+ "extensions": ["uvt","uvvt"]
+ },
+ "application/vnd.dece.unspecified": {
+ "source": "iana",
+ "extensions": ["uvx","uvvx"]
+ },
+ "application/vnd.dece.zip": {
+ "source": "iana",
+ "extensions": ["uvz","uvvz"]
+ },
+ "application/vnd.denovo.fcselayout-link": {
+ "source": "iana",
+ "extensions": ["fe_launch"]
+ },
+ "application/vnd.desmume.movie": {
+ "source": "iana"
+ },
+ "application/vnd.dir-bi.plate-dl-nosuffix": {
+ "source": "iana"
+ },
+ "application/vnd.dm.delegation+xml": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/vnd.dna": {
+ "source": "iana",
+ "extensions": ["dna"]
+ },
+ "application/vnd.document+json": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/vnd.dolby.mlp": {
+ "source": "apache",
+ "extensions": ["mlp"]
+ },
+ "application/vnd.dolby.mobile.1": {
+ "source": "iana"
+ },
+ "application/vnd.dolby.mobile.2": {
+ "source": "iana"
+ },
+ "application/vnd.doremir.scorecloud-binary-document": {
+ "source": "iana"
+ },
+ "application/vnd.dpgraph": {
+ "source": "iana",
+ "extensions": ["dpg"]
+ },
+ "application/vnd.dreamfactory": {
+ "source": "iana",
+ "extensions": ["dfac"]
+ },
+ "application/vnd.drive+json": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/vnd.ds-keypoint": {
+ "source": "apache",
+ "extensions": ["kpxx"]
+ },
+ "application/vnd.dtg.local": {
+ "source": "iana"
+ },
+ "application/vnd.dtg.local.flash": {
+ "source": "iana"
+ },
+ "application/vnd.dtg.local.html": {
+ "source": "iana"
+ },
+ "application/vnd.dvb.ait": {
+ "source": "iana",
+ "extensions": ["ait"]
+ },
+ "application/vnd.dvb.dvbisl+xml": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/vnd.dvb.dvbj": {
+ "source": "iana"
+ },
+ "application/vnd.dvb.esgcontainer": {
+ "source": "iana"
+ },
+ "application/vnd.dvb.ipdcdftnotifaccess": {
+ "source": "iana"
+ },
+ "application/vnd.dvb.ipdcesgaccess": {
+ "source": "iana"
+ },
+ "application/vnd.dvb.ipdcesgaccess2": {
+ "source": "iana"
+ },
+ "application/vnd.dvb.ipdcesgpdd": {
+ "source": "iana"
+ },
+ "application/vnd.dvb.ipdcroaming": {
+ "source": "iana"
+ },
+ "application/vnd.dvb.iptv.alfec-base": {
+ "source": "iana"
+ },
+ "application/vnd.dvb.iptv.alfec-enhancement": {
+ "source": "iana"
+ },
+ "application/vnd.dvb.notif-aggregate-root+xml": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/vnd.dvb.notif-container+xml": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/vnd.dvb.notif-generic+xml": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/vnd.dvb.notif-ia-msglist+xml": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/vnd.dvb.notif-ia-registration-request+xml": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/vnd.dvb.notif-ia-registration-response+xml": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/vnd.dvb.notif-init+xml": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/vnd.dvb.pfr": {
+ "source": "iana"
+ },
+ "application/vnd.dvb.service": {
+ "source": "iana",
+ "extensions": ["svc"]
+ },
+ "application/vnd.dxr": {
+ "source": "iana"
+ },
+ "application/vnd.dynageo": {
+ "source": "iana",
+ "extensions": ["geo"]
+ },
+ "application/vnd.dzr": {
+ "source": "iana"
+ },
+ "application/vnd.easykaraoke.cdgdownload": {
+ "source": "iana"
+ },
+ "application/vnd.ecdis-update": {
+ "source": "iana"
+ },
+ "application/vnd.ecip.rlp": {
+ "source": "iana"
+ },
+ "application/vnd.eclipse.ditto+json": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/vnd.ecowin.chart": {
+ "source": "iana",
+ "extensions": ["mag"]
+ },
+ "application/vnd.ecowin.filerequest": {
+ "source": "iana"
+ },
+ "application/vnd.ecowin.fileupdate": {
+ "source": "iana"
+ },
+ "application/vnd.ecowin.series": {
+ "source": "iana"
+ },
+ "application/vnd.ecowin.seriesrequest": {
+ "source": "iana"
+ },
+ "application/vnd.ecowin.seriesupdate": {
+ "source": "iana"
+ },
+ "application/vnd.efi.img": {
+ "source": "iana"
+ },
+ "application/vnd.efi.iso": {
+ "source": "iana"
+ },
+ "application/vnd.emclient.accessrequest+xml": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/vnd.enliven": {
+ "source": "iana",
+ "extensions": ["nml"]
+ },
+ "application/vnd.enphase.envoy": {
+ "source": "iana"
+ },
+ "application/vnd.eprints.data+xml": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/vnd.epson.esf": {
+ "source": "iana",
+ "extensions": ["esf"]
+ },
+ "application/vnd.epson.msf": {
+ "source": "iana",
+ "extensions": ["msf"]
+ },
+ "application/vnd.epson.quickanime": {
+ "source": "iana",
+ "extensions": ["qam"]
+ },
+ "application/vnd.epson.salt": {
+ "source": "iana",
+ "extensions": ["slt"]
+ },
+ "application/vnd.epson.ssf": {
+ "source": "iana",
+ "extensions": ["ssf"]
+ },
+ "application/vnd.ericsson.quickcall": {
+ "source": "iana"
+ },
+ "application/vnd.espass-espass+zip": {
+ "source": "iana",
+ "compressible": false
+ },
+ "application/vnd.eszigno3+xml": {
+ "source": "iana",
+ "compressible": true,
+ "extensions": ["es3","et3"]
+ },
+ "application/vnd.etsi.aoc+xml": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/vnd.etsi.asic-e+zip": {
+ "source": "iana",
+ "compressible": false
+ },
+ "application/vnd.etsi.asic-s+zip": {
+ "source": "iana",
+ "compressible": false
+ },
+ "application/vnd.etsi.cug+xml": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/vnd.etsi.iptvcommand+xml": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/vnd.etsi.iptvdiscovery+xml": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/vnd.etsi.iptvprofile+xml": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/vnd.etsi.iptvsad-bc+xml": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/vnd.etsi.iptvsad-cod+xml": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/vnd.etsi.iptvsad-npvr+xml": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/vnd.etsi.iptvservice+xml": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/vnd.etsi.iptvsync+xml": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/vnd.etsi.iptvueprofile+xml": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/vnd.etsi.mcid+xml": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/vnd.etsi.mheg5": {
+ "source": "iana"
+ },
+ "application/vnd.etsi.overload-control-policy-dataset+xml": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/vnd.etsi.pstn+xml": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/vnd.etsi.sci+xml": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/vnd.etsi.simservs+xml": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/vnd.etsi.timestamp-token": {
+ "source": "iana"
+ },
+ "application/vnd.etsi.tsl+xml": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/vnd.etsi.tsl.der": {
+ "source": "iana"
+ },
+ "application/vnd.eu.kasparian.car+json": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/vnd.eudora.data": {
+ "source": "iana"
+ },
+ "application/vnd.evolv.ecig.profile": {
+ "source": "iana"
+ },
+ "application/vnd.evolv.ecig.settings": {
+ "source": "iana"
+ },
+ "application/vnd.evolv.ecig.theme": {
+ "source": "iana"
+ },
+ "application/vnd.exstream-empower+zip": {
+ "source": "iana",
+ "compressible": false
+ },
+ "application/vnd.exstream-package": {
+ "source": "iana"
+ },
+ "application/vnd.ezpix-album": {
+ "source": "iana",
+ "extensions": ["ez2"]
+ },
+ "application/vnd.ezpix-package": {
+ "source": "iana",
+ "extensions": ["ez3"]
+ },
+ "application/vnd.f-secure.mobile": {
+ "source": "iana"
+ },
+ "application/vnd.familysearch.gedcom+zip": {
+ "source": "iana",
+ "compressible": false
+ },
+ "application/vnd.fastcopy-disk-image": {
+ "source": "iana"
+ },
+ "application/vnd.fdf": {
+ "source": "iana",
+ "extensions": ["fdf"]
+ },
+ "application/vnd.fdsn.mseed": {
+ "source": "iana",
+ "extensions": ["mseed"]
+ },
+ "application/vnd.fdsn.seed": {
+ "source": "iana",
+ "extensions": ["seed","dataless"]
+ },
+ "application/vnd.ffsns": {
+ "source": "iana"
+ },
+ "application/vnd.ficlab.flb+zip": {
+ "source": "iana",
+ "compressible": false
+ },
+ "application/vnd.filmit.zfc": {
+ "source": "iana"
+ },
+ "application/vnd.fints": {
+ "source": "iana"
+ },
+ "application/vnd.firemonkeys.cloudcell": {
+ "source": "iana"
+ },
+ "application/vnd.flographit": {
+ "source": "iana",
+ "extensions": ["gph"]
+ },
+ "application/vnd.fluxtime.clip": {
+ "source": "iana",
+ "extensions": ["ftc"]
+ },
+ "application/vnd.font-fontforge-sfd": {
+ "source": "iana"
+ },
+ "application/vnd.framemaker": {
+ "source": "iana",
+ "extensions": ["fm","frame","maker","book"]
+ },
+ "application/vnd.frogans.fnc": {
+ "source": "iana",
+ "extensions": ["fnc"]
+ },
+ "application/vnd.frogans.ltf": {
+ "source": "iana",
+ "extensions": ["ltf"]
+ },
+ "application/vnd.fsc.weblaunch": {
+ "source": "iana",
+ "extensions": ["fsc"]
+ },
+ "application/vnd.fujifilm.fb.docuworks": {
+ "source": "iana"
+ },
+ "application/vnd.fujifilm.fb.docuworks.binder": {
+ "source": "iana"
+ },
+ "application/vnd.fujifilm.fb.docuworks.container": {
+ "source": "iana"
+ },
+ "application/vnd.fujifilm.fb.jfi+xml": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/vnd.fujitsu.oasys": {
+ "source": "iana",
+ "extensions": ["oas"]
+ },
+ "application/vnd.fujitsu.oasys2": {
+ "source": "iana",
+ "extensions": ["oa2"]
+ },
+ "application/vnd.fujitsu.oasys3": {
+ "source": "iana",
+ "extensions": ["oa3"]
+ },
+ "application/vnd.fujitsu.oasysgp": {
+ "source": "iana",
+ "extensions": ["fg5"]
+ },
+ "application/vnd.fujitsu.oasysprs": {
+ "source": "iana",
+ "extensions": ["bh2"]
+ },
+ "application/vnd.fujixerox.art-ex": {
+ "source": "iana"
+ },
+ "application/vnd.fujixerox.art4": {
+ "source": "iana"
+ },
+ "application/vnd.fujixerox.ddd": {
+ "source": "iana",
+ "extensions": ["ddd"]
+ },
+ "application/vnd.fujixerox.docuworks": {
+ "source": "iana",
+ "extensions": ["xdw"]
+ },
+ "application/vnd.fujixerox.docuworks.binder": {
+ "source": "iana",
+ "extensions": ["xbd"]
+ },
+ "application/vnd.fujixerox.docuworks.container": {
+ "source": "iana"
+ },
+ "application/vnd.fujixerox.hbpl": {
+ "source": "iana"
+ },
+ "application/vnd.fut-misnet": {
+ "source": "iana"
+ },
+ "application/vnd.futoin+cbor": {
+ "source": "iana"
+ },
+ "application/vnd.futoin+json": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/vnd.fuzzysheet": {
+ "source": "iana",
+ "extensions": ["fzs"]
+ },
+ "application/vnd.genomatix.tuxedo": {
+ "source": "iana",
+ "extensions": ["txd"]
+ },
+ "application/vnd.gentics.grd+json": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/vnd.geo+json": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/vnd.geocube+xml": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/vnd.geogebra.file": {
+ "source": "iana",
+ "extensions": ["ggb"]
+ },
+ "application/vnd.geogebra.slides": {
+ "source": "iana"
+ },
+ "application/vnd.geogebra.tool": {
+ "source": "iana",
+ "extensions": ["ggt"]
+ },
+ "application/vnd.geometry-explorer": {
+ "source": "iana",
+ "extensions": ["gex","gre"]
+ },
+ "application/vnd.geonext": {
+ "source": "iana",
+ "extensions": ["gxt"]
+ },
+ "application/vnd.geoplan": {
+ "source": "iana",
+ "extensions": ["g2w"]
+ },
+ "application/vnd.geospace": {
+ "source": "iana",
+ "extensions": ["g3w"]
+ },
+ "application/vnd.gerber": {
+ "source": "iana"
+ },
+ "application/vnd.globalplatform.card-content-mgt": {
+ "source": "iana"
+ },
+ "application/vnd.globalplatform.card-content-mgt-response": {
+ "source": "iana"
+ },
+ "application/vnd.gmx": {
+ "source": "iana",
+ "extensions": ["gmx"]
+ },
+ "application/vnd.google-apps.document": {
+ "compressible": false,
+ "extensions": ["gdoc"]
+ },
+ "application/vnd.google-apps.presentation": {
+ "compressible": false,
+ "extensions": ["gslides"]
+ },
+ "application/vnd.google-apps.spreadsheet": {
+ "compressible": false,
+ "extensions": ["gsheet"]
+ },
+ "application/vnd.google-earth.kml+xml": {
+ "source": "iana",
+ "compressible": true,
+ "extensions": ["kml"]
+ },
+ "application/vnd.google-earth.kmz": {
+ "source": "iana",
+ "compressible": false,
+ "extensions": ["kmz"]
+ },
+ "application/vnd.gov.sk.e-form+xml": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/vnd.gov.sk.e-form+zip": {
+ "source": "iana",
+ "compressible": false
+ },
+ "application/vnd.gov.sk.xmldatacontainer+xml": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/vnd.grafeq": {
+ "source": "iana",
+ "extensions": ["gqf","gqs"]
+ },
+ "application/vnd.gridmp": {
+ "source": "iana"
+ },
+ "application/vnd.groove-account": {
+ "source": "iana",
+ "extensions": ["gac"]
+ },
+ "application/vnd.groove-help": {
+ "source": "iana",
+ "extensions": ["ghf"]
+ },
+ "application/vnd.groove-identity-message": {
+ "source": "iana",
+ "extensions": ["gim"]
+ },
+ "application/vnd.groove-injector": {
+ "source": "iana",
+ "extensions": ["grv"]
+ },
+ "application/vnd.groove-tool-message": {
+ "source": "iana",
+ "extensions": ["gtm"]
+ },
+ "application/vnd.groove-tool-template": {
+ "source": "iana",
+ "extensions": ["tpl"]
+ },
+ "application/vnd.groove-vcard": {
+ "source": "iana",
+ "extensions": ["vcg"]
+ },
+ "application/vnd.hal+json": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/vnd.hal+xml": {
+ "source": "iana",
+ "compressible": true,
+ "extensions": ["hal"]
+ },
+ "application/vnd.handheld-entertainment+xml": {
+ "source": "iana",
+ "compressible": true,
+ "extensions": ["zmm"]
+ },
+ "application/vnd.hbci": {
+ "source": "iana",
+ "extensions": ["hbci"]
+ },
+ "application/vnd.hc+json": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/vnd.hcl-bireports": {
+ "source": "iana"
+ },
+ "application/vnd.hdt": {
+ "source": "iana"
+ },
+ "application/vnd.heroku+json": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/vnd.hhe.lesson-player": {
+ "source": "iana",
+ "extensions": ["les"]
+ },
+ "application/vnd.hl7cda+xml": {
+ "source": "iana",
+ "charset": "UTF-8",
+ "compressible": true
+ },
+ "application/vnd.hl7v2+xml": {
+ "source": "iana",
+ "charset": "UTF-8",
+ "compressible": true
+ },
+ "application/vnd.hp-hpgl": {
+ "source": "iana",
+ "extensions": ["hpgl"]
+ },
+ "application/vnd.hp-hpid": {
+ "source": "iana",
+ "extensions": ["hpid"]
+ },
+ "application/vnd.hp-hps": {
+ "source": "iana",
+ "extensions": ["hps"]
+ },
+ "application/vnd.hp-jlyt": {
+ "source": "iana",
+ "extensions": ["jlt"]
+ },
+ "application/vnd.hp-pcl": {
+ "source": "iana",
+ "extensions": ["pcl"]
+ },
+ "application/vnd.hp-pclxl": {
+ "source": "iana",
+ "extensions": ["pclxl"]
+ },
+ "application/vnd.httphone": {
+ "source": "iana"
+ },
+ "application/vnd.hydrostatix.sof-data": {
+ "source": "iana",
+ "extensions": ["sfd-hdstx"]
+ },
+ "application/vnd.hyper+json": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/vnd.hyper-item+json": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/vnd.hyperdrive+json": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/vnd.hzn-3d-crossword": {
+ "source": "iana"
+ },
+ "application/vnd.ibm.afplinedata": {
+ "source": "iana"
+ },
+ "application/vnd.ibm.electronic-media": {
+ "source": "iana"
+ },
+ "application/vnd.ibm.minipay": {
+ "source": "iana",
+ "extensions": ["mpy"]
+ },
+ "application/vnd.ibm.modcap": {
+ "source": "iana",
+ "extensions": ["afp","listafp","list3820"]
+ },
+ "application/vnd.ibm.rights-management": {
+ "source": "iana",
+ "extensions": ["irm"]
+ },
+ "application/vnd.ibm.secure-container": {
+ "source": "iana",
+ "extensions": ["sc"]
+ },
+ "application/vnd.iccprofile": {
+ "source": "iana",
+ "extensions": ["icc","icm"]
+ },
+ "application/vnd.ieee.1905": {
+ "source": "iana"
+ },
+ "application/vnd.igloader": {
+ "source": "iana",
+ "extensions": ["igl"]
+ },
+ "application/vnd.imagemeter.folder+zip": {
+ "source": "iana",
+ "compressible": false
+ },
+ "application/vnd.imagemeter.image+zip": {
+ "source": "iana",
+ "compressible": false
+ },
+ "application/vnd.immervision-ivp": {
+ "source": "iana",
+ "extensions": ["ivp"]
+ },
+ "application/vnd.immervision-ivu": {
+ "source": "iana",
+ "extensions": ["ivu"]
+ },
+ "application/vnd.ims.imsccv1p1": {
+ "source": "iana"
+ },
+ "application/vnd.ims.imsccv1p2": {
+ "source": "iana"
+ },
+ "application/vnd.ims.imsccv1p3": {
+ "source": "iana"
+ },
+ "application/vnd.ims.lis.v2.result+json": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/vnd.ims.lti.v2.toolconsumerprofile+json": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/vnd.ims.lti.v2.toolproxy+json": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/vnd.ims.lti.v2.toolproxy.id+json": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/vnd.ims.lti.v2.toolsettings+json": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/vnd.ims.lti.v2.toolsettings.simple+json": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/vnd.informedcontrol.rms+xml": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/vnd.informix-visionary": {
+ "source": "iana"
+ },
+ "application/vnd.infotech.project": {
+ "source": "iana"
+ },
+ "application/vnd.infotech.project+xml": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/vnd.innopath.wamp.notification": {
+ "source": "iana"
+ },
+ "application/vnd.insors.igm": {
+ "source": "iana",
+ "extensions": ["igm"]
+ },
+ "application/vnd.intercon.formnet": {
+ "source": "iana",
+ "extensions": ["xpw","xpx"]
+ },
+ "application/vnd.intergeo": {
+ "source": "iana",
+ "extensions": ["i2g"]
+ },
+ "application/vnd.intertrust.digibox": {
+ "source": "iana"
+ },
+ "application/vnd.intertrust.nncp": {
+ "source": "iana"
+ },
+ "application/vnd.intu.qbo": {
+ "source": "iana",
+ "extensions": ["qbo"]
+ },
+ "application/vnd.intu.qfx": {
+ "source": "iana",
+ "extensions": ["qfx"]
+ },
+ "application/vnd.iptc.g2.catalogitem+xml": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/vnd.iptc.g2.conceptitem+xml": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/vnd.iptc.g2.knowledgeitem+xml": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/vnd.iptc.g2.newsitem+xml": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/vnd.iptc.g2.newsmessage+xml": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/vnd.iptc.g2.packageitem+xml": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/vnd.iptc.g2.planningitem+xml": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/vnd.ipunplugged.rcprofile": {
+ "source": "iana",
+ "extensions": ["rcprofile"]
+ },
+ "application/vnd.irepository.package+xml": {
+ "source": "iana",
+ "compressible": true,
+ "extensions": ["irp"]
+ },
+ "application/vnd.is-xpr": {
+ "source": "iana",
+ "extensions": ["xpr"]
+ },
+ "application/vnd.isac.fcs": {
+ "source": "iana",
+ "extensions": ["fcs"]
+ },
+ "application/vnd.iso11783-10+zip": {
+ "source": "iana",
+ "compressible": false
+ },
+ "application/vnd.jam": {
+ "source": "iana",
+ "extensions": ["jam"]
+ },
+ "application/vnd.japannet-directory-service": {
+ "source": "iana"
+ },
+ "application/vnd.japannet-jpnstore-wakeup": {
+ "source": "iana"
+ },
+ "application/vnd.japannet-payment-wakeup": {
+ "source": "iana"
+ },
+ "application/vnd.japannet-registration": {
+ "source": "iana"
+ },
+ "application/vnd.japannet-registration-wakeup": {
+ "source": "iana"
+ },
+ "application/vnd.japannet-setstore-wakeup": {
+ "source": "iana"
+ },
+ "application/vnd.japannet-verification": {
+ "source": "iana"
+ },
+ "application/vnd.japannet-verification-wakeup": {
+ "source": "iana"
+ },
+ "application/vnd.jcp.javame.midlet-rms": {
+ "source": "iana",
+ "extensions": ["rms"]
+ },
+ "application/vnd.jisp": {
+ "source": "iana",
+ "extensions": ["jisp"]
+ },
+ "application/vnd.joost.joda-archive": {
+ "source": "iana",
+ "extensions": ["joda"]
+ },
+ "application/vnd.jsk.isdn-ngn": {
+ "source": "iana"
+ },
+ "application/vnd.kahootz": {
+ "source": "iana",
+ "extensions": ["ktz","ktr"]
+ },
+ "application/vnd.kde.karbon": {
+ "source": "iana",
+ "extensions": ["karbon"]
+ },
+ "application/vnd.kde.kchart": {
+ "source": "iana",
+ "extensions": ["chrt"]
+ },
+ "application/vnd.kde.kformula": {
+ "source": "iana",
+ "extensions": ["kfo"]
+ },
+ "application/vnd.kde.kivio": {
+ "source": "iana",
+ "extensions": ["flw"]
+ },
+ "application/vnd.kde.kontour": {
+ "source": "iana",
+ "extensions": ["kon"]
+ },
+ "application/vnd.kde.kpresenter": {
+ "source": "iana",
+ "extensions": ["kpr","kpt"]
+ },
+ "application/vnd.kde.kspread": {
+ "source": "iana",
+ "extensions": ["ksp"]
+ },
+ "application/vnd.kde.kword": {
+ "source": "iana",
+ "extensions": ["kwd","kwt"]
+ },
+ "application/vnd.kenameaapp": {
+ "source": "iana",
+ "extensions": ["htke"]
+ },
+ "application/vnd.kidspiration": {
+ "source": "iana",
+ "extensions": ["kia"]
+ },
+ "application/vnd.kinar": {
+ "source": "iana",
+ "extensions": ["kne","knp"]
+ },
+ "application/vnd.koan": {
+ "source": "iana",
+ "extensions": ["skp","skd","skt","skm"]
+ },
+ "application/vnd.kodak-descriptor": {
+ "source": "iana",
+ "extensions": ["sse"]
+ },
+ "application/vnd.las": {
+ "source": "iana"
+ },
+ "application/vnd.las.las+json": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/vnd.las.las+xml": {
+ "source": "iana",
+ "compressible": true,
+ "extensions": ["lasxml"]
+ },
+ "application/vnd.laszip": {
+ "source": "iana"
+ },
+ "application/vnd.leap+json": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/vnd.liberty-request+xml": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/vnd.llamagraphics.life-balance.desktop": {
+ "source": "iana",
+ "extensions": ["lbd"]
+ },
+ "application/vnd.llamagraphics.life-balance.exchange+xml": {
+ "source": "iana",
+ "compressible": true,
+ "extensions": ["lbe"]
+ },
+ "application/vnd.logipipe.circuit+zip": {
+ "source": "iana",
+ "compressible": false
+ },
+ "application/vnd.loom": {
+ "source": "iana"
+ },
+ "application/vnd.lotus-1-2-3": {
+ "source": "iana",
+ "extensions": ["123"]
+ },
+ "application/vnd.lotus-approach": {
+ "source": "iana",
+ "extensions": ["apr"]
+ },
+ "application/vnd.lotus-freelance": {
+ "source": "iana",
+ "extensions": ["pre"]
+ },
+ "application/vnd.lotus-notes": {
+ "source": "iana",
+ "extensions": ["nsf"]
+ },
+ "application/vnd.lotus-organizer": {
+ "source": "iana",
+ "extensions": ["org"]
+ },
+ "application/vnd.lotus-screencam": {
+ "source": "iana",
+ "extensions": ["scm"]
+ },
+ "application/vnd.lotus-wordpro": {
+ "source": "iana",
+ "extensions": ["lwp"]
+ },
+ "application/vnd.macports.portpkg": {
+ "source": "iana",
+ "extensions": ["portpkg"]
+ },
+ "application/vnd.mapbox-vector-tile": {
+ "source": "iana",
+ "extensions": ["mvt"]
+ },
+ "application/vnd.marlin.drm.actiontoken+xml": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/vnd.marlin.drm.conftoken+xml": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/vnd.marlin.drm.license+xml": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/vnd.marlin.drm.mdcf": {
+ "source": "iana"
+ },
+ "application/vnd.mason+json": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/vnd.maxar.archive.3tz+zip": {
+ "source": "iana",
+ "compressible": false
+ },
+ "application/vnd.maxmind.maxmind-db": {
+ "source": "iana"
+ },
+ "application/vnd.mcd": {
+ "source": "iana",
+ "extensions": ["mcd"]
+ },
+ "application/vnd.medcalcdata": {
+ "source": "iana",
+ "extensions": ["mc1"]
+ },
+ "application/vnd.mediastation.cdkey": {
+ "source": "iana",
+ "extensions": ["cdkey"]
+ },
+ "application/vnd.meridian-slingshot": {
+ "source": "iana"
+ },
+ "application/vnd.mfer": {
+ "source": "iana",
+ "extensions": ["mwf"]
+ },
+ "application/vnd.mfmp": {
+ "source": "iana",
+ "extensions": ["mfm"]
+ },
+ "application/vnd.micro+json": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/vnd.micrografx.flo": {
+ "source": "iana",
+ "extensions": ["flo"]
+ },
+ "application/vnd.micrografx.igx": {
+ "source": "iana",
+ "extensions": ["igx"]
+ },
+ "application/vnd.microsoft.portable-executable": {
+ "source": "iana"
+ },
+ "application/vnd.microsoft.windows.thumbnail-cache": {
+ "source": "iana"
+ },
+ "application/vnd.miele+json": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/vnd.mif": {
+ "source": "iana",
+ "extensions": ["mif"]
+ },
+ "application/vnd.minisoft-hp3000-save": {
+ "source": "iana"
+ },
+ "application/vnd.mitsubishi.misty-guard.trustweb": {
+ "source": "iana"
+ },
+ "application/vnd.mobius.daf": {
+ "source": "iana",
+ "extensions": ["daf"]
+ },
+ "application/vnd.mobius.dis": {
+ "source": "iana",
+ "extensions": ["dis"]
+ },
+ "application/vnd.mobius.mbk": {
+ "source": "iana",
+ "extensions": ["mbk"]
+ },
+ "application/vnd.mobius.mqy": {
+ "source": "iana",
+ "extensions": ["mqy"]
+ },
+ "application/vnd.mobius.msl": {
+ "source": "iana",
+ "extensions": ["msl"]
+ },
+ "application/vnd.mobius.plc": {
+ "source": "iana",
+ "extensions": ["plc"]
+ },
+ "application/vnd.mobius.txf": {
+ "source": "iana",
+ "extensions": ["txf"]
+ },
+ "application/vnd.mophun.application": {
+ "source": "iana",
+ "extensions": ["mpn"]
+ },
+ "application/vnd.mophun.certificate": {
+ "source": "iana",
+ "extensions": ["mpc"]
+ },
+ "application/vnd.motorola.flexsuite": {
+ "source": "iana"
+ },
+ "application/vnd.motorola.flexsuite.adsi": {
+ "source": "iana"
+ },
+ "application/vnd.motorola.flexsuite.fis": {
+ "source": "iana"
+ },
+ "application/vnd.motorola.flexsuite.gotap": {
+ "source": "iana"
+ },
+ "application/vnd.motorola.flexsuite.kmr": {
+ "source": "iana"
+ },
+ "application/vnd.motorola.flexsuite.ttc": {
+ "source": "iana"
+ },
+ "application/vnd.motorola.flexsuite.wem": {
+ "source": "iana"
+ },
+ "application/vnd.motorola.iprm": {
+ "source": "iana"
+ },
+ "application/vnd.mozilla.xul+xml": {
+ "source": "iana",
+ "compressible": true,
+ "extensions": ["xul"]
+ },
+ "application/vnd.ms-3mfdocument": {
+ "source": "iana"
+ },
+ "application/vnd.ms-artgalry": {
+ "source": "iana",
+ "extensions": ["cil"]
+ },
+ "application/vnd.ms-asf": {
+ "source": "iana"
+ },
+ "application/vnd.ms-cab-compressed": {
+ "source": "iana",
+ "extensions": ["cab"]
+ },
+ "application/vnd.ms-color.iccprofile": {
+ "source": "apache"
+ },
+ "application/vnd.ms-excel": {
+ "source": "iana",
+ "compressible": false,
+ "extensions": ["xls","xlm","xla","xlc","xlt","xlw"]
+ },
+ "application/vnd.ms-excel.addin.macroenabled.12": {
+ "source": "iana",
+ "extensions": ["xlam"]
+ },
+ "application/vnd.ms-excel.sheet.binary.macroenabled.12": {
+ "source": "iana",
+ "extensions": ["xlsb"]
+ },
+ "application/vnd.ms-excel.sheet.macroenabled.12": {
+ "source": "iana",
+ "extensions": ["xlsm"]
+ },
+ "application/vnd.ms-excel.template.macroenabled.12": {
+ "source": "iana",
+ "extensions": ["xltm"]
+ },
+ "application/vnd.ms-fontobject": {
+ "source": "iana",
+ "compressible": true,
+ "extensions": ["eot"]
+ },
+ "application/vnd.ms-htmlhelp": {
+ "source": "iana",
+ "extensions": ["chm"]
+ },
+ "application/vnd.ms-ims": {
+ "source": "iana",
+ "extensions": ["ims"]
+ },
+ "application/vnd.ms-lrm": {
+ "source": "iana",
+ "extensions": ["lrm"]
+ },
+ "application/vnd.ms-office.activex+xml": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/vnd.ms-officetheme": {
+ "source": "iana",
+ "extensions": ["thmx"]
+ },
+ "application/vnd.ms-opentype": {
+ "source": "apache",
+ "compressible": true
+ },
+ "application/vnd.ms-outlook": {
+ "compressible": false,
+ "extensions": ["msg"]
+ },
+ "application/vnd.ms-package.obfuscated-opentype": {
+ "source": "apache"
+ },
+ "application/vnd.ms-pki.seccat": {
+ "source": "apache",
+ "extensions": ["cat"]
+ },
+ "application/vnd.ms-pki.stl": {
+ "source": "apache",
+ "extensions": ["stl"]
+ },
+ "application/vnd.ms-playready.initiator+xml": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/vnd.ms-powerpoint": {
+ "source": "iana",
+ "compressible": false,
+ "extensions": ["ppt","pps","pot"]
+ },
+ "application/vnd.ms-powerpoint.addin.macroenabled.12": {
+ "source": "iana",
+ "extensions": ["ppam"]
+ },
+ "application/vnd.ms-powerpoint.presentation.macroenabled.12": {
+ "source": "iana",
+ "extensions": ["pptm"]
+ },
+ "application/vnd.ms-powerpoint.slide.macroenabled.12": {
+ "source": "iana",
+ "extensions": ["sldm"]
+ },
+ "application/vnd.ms-powerpoint.slideshow.macroenabled.12": {
+ "source": "iana",
+ "extensions": ["ppsm"]
+ },
+ "application/vnd.ms-powerpoint.template.macroenabled.12": {
+ "source": "iana",
+ "extensions": ["potm"]
+ },
+ "application/vnd.ms-printdevicecapabilities+xml": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/vnd.ms-printing.printticket+xml": {
+ "source": "apache",
+ "compressible": true
+ },
+ "application/vnd.ms-printschematicket+xml": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/vnd.ms-project": {
+ "source": "iana",
+ "extensions": ["mpp","mpt"]
+ },
+ "application/vnd.ms-tnef": {
+ "source": "iana"
+ },
+ "application/vnd.ms-windows.devicepairing": {
+ "source": "iana"
+ },
+ "application/vnd.ms-windows.nwprinting.oob": {
+ "source": "iana"
+ },
+ "application/vnd.ms-windows.printerpairing": {
+ "source": "iana"
+ },
+ "application/vnd.ms-windows.wsd.oob": {
+ "source": "iana"
+ },
+ "application/vnd.ms-wmdrm.lic-chlg-req": {
+ "source": "iana"
+ },
+ "application/vnd.ms-wmdrm.lic-resp": {
+ "source": "iana"
+ },
+ "application/vnd.ms-wmdrm.meter-chlg-req": {
+ "source": "iana"
+ },
+ "application/vnd.ms-wmdrm.meter-resp": {
+ "source": "iana"
+ },
+ "application/vnd.ms-word.document.macroenabled.12": {
+ "source": "iana",
+ "extensions": ["docm"]
+ },
+ "application/vnd.ms-word.template.macroenabled.12": {
+ "source": "iana",
+ "extensions": ["dotm"]
+ },
+ "application/vnd.ms-works": {
+ "source": "iana",
+ "extensions": ["wps","wks","wcm","wdb"]
+ },
+ "application/vnd.ms-wpl": {
+ "source": "iana",
+ "extensions": ["wpl"]
+ },
+ "application/vnd.ms-xpsdocument": {
+ "source": "iana",
+ "compressible": false,
+ "extensions": ["xps"]
+ },
+ "application/vnd.msa-disk-image": {
+ "source": "iana"
+ },
+ "application/vnd.mseq": {
+ "source": "iana",
+ "extensions": ["mseq"]
+ },
+ "application/vnd.msign": {
+ "source": "iana"
+ },
+ "application/vnd.multiad.creator": {
+ "source": "iana"
+ },
+ "application/vnd.multiad.creator.cif": {
+ "source": "iana"
+ },
+ "application/vnd.music-niff": {
+ "source": "iana"
+ },
+ "application/vnd.musician": {
+ "source": "iana",
+ "extensions": ["mus"]
+ },
+ "application/vnd.muvee.style": {
+ "source": "iana",
+ "extensions": ["msty"]
+ },
+ "application/vnd.mynfc": {
+ "source": "iana",
+ "extensions": ["taglet"]
+ },
+ "application/vnd.nacamar.ybrid+json": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/vnd.ncd.control": {
+ "source": "iana"
+ },
+ "application/vnd.ncd.reference": {
+ "source": "iana"
+ },
+ "application/vnd.nearst.inv+json": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/vnd.nebumind.line": {
+ "source": "iana"
+ },
+ "application/vnd.nervana": {
+ "source": "iana"
+ },
+ "application/vnd.netfpx": {
+ "source": "iana"
+ },
+ "application/vnd.neurolanguage.nlu": {
+ "source": "iana",
+ "extensions": ["nlu"]
+ },
+ "application/vnd.nimn": {
+ "source": "iana"
+ },
+ "application/vnd.nintendo.nitro.rom": {
+ "source": "iana"
+ },
+ "application/vnd.nintendo.snes.rom": {
+ "source": "iana"
+ },
+ "application/vnd.nitf": {
+ "source": "iana",
+ "extensions": ["ntf","nitf"]
+ },
+ "application/vnd.noblenet-directory": {
+ "source": "iana",
+ "extensions": ["nnd"]
+ },
+ "application/vnd.noblenet-sealer": {
+ "source": "iana",
+ "extensions": ["nns"]
+ },
+ "application/vnd.noblenet-web": {
+ "source": "iana",
+ "extensions": ["nnw"]
+ },
+ "application/vnd.nokia.catalogs": {
+ "source": "iana"
+ },
+ "application/vnd.nokia.conml+wbxml": {
+ "source": "iana"
+ },
+ "application/vnd.nokia.conml+xml": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/vnd.nokia.iptv.config+xml": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/vnd.nokia.isds-radio-presets": {
+ "source": "iana"
+ },
+ "application/vnd.nokia.landmark+wbxml": {
+ "source": "iana"
+ },
+ "application/vnd.nokia.landmark+xml": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/vnd.nokia.landmarkcollection+xml": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/vnd.nokia.n-gage.ac+xml": {
+ "source": "iana",
+ "compressible": true,
+ "extensions": ["ac"]
+ },
+ "application/vnd.nokia.n-gage.data": {
+ "source": "iana",
+ "extensions": ["ngdat"]
+ },
+ "application/vnd.nokia.n-gage.symbian.install": {
+ "source": "iana",
+ "extensions": ["n-gage"]
+ },
+ "application/vnd.nokia.ncd": {
+ "source": "iana"
+ },
+ "application/vnd.nokia.pcd+wbxml": {
+ "source": "iana"
+ },
+ "application/vnd.nokia.pcd+xml": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/vnd.nokia.radio-preset": {
+ "source": "iana",
+ "extensions": ["rpst"]
+ },
+ "application/vnd.nokia.radio-presets": {
+ "source": "iana",
+ "extensions": ["rpss"]
+ },
+ "application/vnd.novadigm.edm": {
+ "source": "iana",
+ "extensions": ["edm"]
+ },
+ "application/vnd.novadigm.edx": {
+ "source": "iana",
+ "extensions": ["edx"]
+ },
+ "application/vnd.novadigm.ext": {
+ "source": "iana",
+ "extensions": ["ext"]
+ },
+ "application/vnd.ntt-local.content-share": {
+ "source": "iana"
+ },
+ "application/vnd.ntt-local.file-transfer": {
+ "source": "iana"
+ },
+ "application/vnd.ntt-local.ogw_remote-access": {
+ "source": "iana"
+ },
+ "application/vnd.ntt-local.sip-ta_remote": {
+ "source": "iana"
+ },
+ "application/vnd.ntt-local.sip-ta_tcp_stream": {
+ "source": "iana"
+ },
+ "application/vnd.oasis.opendocument.chart": {
+ "source": "iana",
+ "extensions": ["odc"]
+ },
+ "application/vnd.oasis.opendocument.chart-template": {
+ "source": "iana",
+ "extensions": ["otc"]
+ },
+ "application/vnd.oasis.opendocument.database": {
+ "source": "iana",
+ "extensions": ["odb"]
+ },
+ "application/vnd.oasis.opendocument.formula": {
+ "source": "iana",
+ "extensions": ["odf"]
+ },
+ "application/vnd.oasis.opendocument.formula-template": {
+ "source": "iana",
+ "extensions": ["odft"]
+ },
+ "application/vnd.oasis.opendocument.graphics": {
+ "source": "iana",
+ "compressible": false,
+ "extensions": ["odg"]
+ },
+ "application/vnd.oasis.opendocument.graphics-template": {
+ "source": "iana",
+ "extensions": ["otg"]
+ },
+ "application/vnd.oasis.opendocument.image": {
+ "source": "iana",
+ "extensions": ["odi"]
+ },
+ "application/vnd.oasis.opendocument.image-template": {
+ "source": "iana",
+ "extensions": ["oti"]
+ },
+ "application/vnd.oasis.opendocument.presentation": {
+ "source": "iana",
+ "compressible": false,
+ "extensions": ["odp"]
+ },
+ "application/vnd.oasis.opendocument.presentation-template": {
+ "source": "iana",
+ "extensions": ["otp"]
+ },
+ "application/vnd.oasis.opendocument.spreadsheet": {
+ "source": "iana",
+ "compressible": false,
+ "extensions": ["ods"]
+ },
+ "application/vnd.oasis.opendocument.spreadsheet-template": {
+ "source": "iana",
+ "extensions": ["ots"]
+ },
+ "application/vnd.oasis.opendocument.text": {
+ "source": "iana",
+ "compressible": false,
+ "extensions": ["odt"]
+ },
+ "application/vnd.oasis.opendocument.text-master": {
+ "source": "iana",
+ "extensions": ["odm"]
+ },
+ "application/vnd.oasis.opendocument.text-template": {
+ "source": "iana",
+ "extensions": ["ott"]
+ },
+ "application/vnd.oasis.opendocument.text-web": {
+ "source": "iana",
+ "extensions": ["oth"]
+ },
+ "application/vnd.obn": {
+ "source": "iana"
+ },
+ "application/vnd.ocf+cbor": {
+ "source": "iana"
+ },
+ "application/vnd.oci.image.manifest.v1+json": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/vnd.oftn.l10n+json": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/vnd.oipf.contentaccessdownload+xml": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/vnd.oipf.contentaccessstreaming+xml": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/vnd.oipf.cspg-hexbinary": {
+ "source": "iana"
+ },
+ "application/vnd.oipf.dae.svg+xml": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/vnd.oipf.dae.xhtml+xml": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/vnd.oipf.mippvcontrolmessage+xml": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/vnd.oipf.pae.gem": {
+ "source": "iana"
+ },
+ "application/vnd.oipf.spdiscovery+xml": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/vnd.oipf.spdlist+xml": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/vnd.oipf.ueprofile+xml": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/vnd.oipf.userprofile+xml": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/vnd.olpc-sugar": {
+ "source": "iana",
+ "extensions": ["xo"]
+ },
+ "application/vnd.oma-scws-config": {
+ "source": "iana"
+ },
+ "application/vnd.oma-scws-http-request": {
+ "source": "iana"
+ },
+ "application/vnd.oma-scws-http-response": {
+ "source": "iana"
+ },
+ "application/vnd.oma.bcast.associated-procedure-parameter+xml": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/vnd.oma.bcast.drm-trigger+xml": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/vnd.oma.bcast.imd+xml": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/vnd.oma.bcast.ltkm": {
+ "source": "iana"
+ },
+ "application/vnd.oma.bcast.notification+xml": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/vnd.oma.bcast.provisioningtrigger": {
+ "source": "iana"
+ },
+ "application/vnd.oma.bcast.sgboot": {
+ "source": "iana"
+ },
+ "application/vnd.oma.bcast.sgdd+xml": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/vnd.oma.bcast.sgdu": {
+ "source": "iana"
+ },
+ "application/vnd.oma.bcast.simple-symbol-container": {
+ "source": "iana"
+ },
+ "application/vnd.oma.bcast.smartcard-trigger+xml": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/vnd.oma.bcast.sprov+xml": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/vnd.oma.bcast.stkm": {
+ "source": "iana"
+ },
+ "application/vnd.oma.cab-address-book+xml": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/vnd.oma.cab-feature-handler+xml": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/vnd.oma.cab-pcc+xml": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/vnd.oma.cab-subs-invite+xml": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/vnd.oma.cab-user-prefs+xml": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/vnd.oma.dcd": {
+ "source": "iana"
+ },
+ "application/vnd.oma.dcdc": {
+ "source": "iana"
+ },
+ "application/vnd.oma.dd2+xml": {
+ "source": "iana",
+ "compressible": true,
+ "extensions": ["dd2"]
+ },
+ "application/vnd.oma.drm.risd+xml": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/vnd.oma.group-usage-list+xml": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/vnd.oma.lwm2m+cbor": {
+ "source": "iana"
+ },
+ "application/vnd.oma.lwm2m+json": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/vnd.oma.lwm2m+tlv": {
+ "source": "iana"
+ },
+ "application/vnd.oma.pal+xml": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/vnd.oma.poc.detailed-progress-report+xml": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/vnd.oma.poc.final-report+xml": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/vnd.oma.poc.groups+xml": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/vnd.oma.poc.invocation-descriptor+xml": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/vnd.oma.poc.optimized-progress-report+xml": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/vnd.oma.push": {
+ "source": "iana"
+ },
+ "application/vnd.oma.scidm.messages+xml": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/vnd.oma.xcap-directory+xml": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/vnd.omads-email+xml": {
+ "source": "iana",
+ "charset": "UTF-8",
+ "compressible": true
+ },
+ "application/vnd.omads-file+xml": {
+ "source": "iana",
+ "charset": "UTF-8",
+ "compressible": true
+ },
+ "application/vnd.omads-folder+xml": {
+ "source": "iana",
+ "charset": "UTF-8",
+ "compressible": true
+ },
+ "application/vnd.omaloc-supl-init": {
+ "source": "iana"
+ },
+ "application/vnd.onepager": {
+ "source": "iana"
+ },
+ "application/vnd.onepagertamp": {
+ "source": "iana"
+ },
+ "application/vnd.onepagertamx": {
+ "source": "iana"
+ },
+ "application/vnd.onepagertat": {
+ "source": "iana"
+ },
+ "application/vnd.onepagertatp": {
+ "source": "iana"
+ },
+ "application/vnd.onepagertatx": {
+ "source": "iana"
+ },
+ "application/vnd.openblox.game+xml": {
+ "source": "iana",
+ "compressible": true,
+ "extensions": ["obgx"]
+ },
+ "application/vnd.openblox.game-binary": {
+ "source": "iana"
+ },
+ "application/vnd.openeye.oeb": {
+ "source": "iana"
+ },
+ "application/vnd.openofficeorg.extension": {
+ "source": "apache",
+ "extensions": ["oxt"]
+ },
+ "application/vnd.openstreetmap.data+xml": {
+ "source": "iana",
+ "compressible": true,
+ "extensions": ["osm"]
+ },
+ "application/vnd.opentimestamps.ots": {
+ "source": "iana"
+ },
+ "application/vnd.openxmlformats-officedocument.custom-properties+xml": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/vnd.openxmlformats-officedocument.customxmlproperties+xml": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/vnd.openxmlformats-officedocument.drawing+xml": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/vnd.openxmlformats-officedocument.drawingml.chart+xml": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/vnd.openxmlformats-officedocument.drawingml.chartshapes+xml": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/vnd.openxmlformats-officedocument.drawingml.diagramcolors+xml": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/vnd.openxmlformats-officedocument.drawingml.diagramdata+xml": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/vnd.openxmlformats-officedocument.drawingml.diagramlayout+xml": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/vnd.openxmlformats-officedocument.drawingml.diagramstyle+xml": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/vnd.openxmlformats-officedocument.extended-properties+xml": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/vnd.openxmlformats-officedocument.presentationml.commentauthors+xml": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/vnd.openxmlformats-officedocument.presentationml.comments+xml": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/vnd.openxmlformats-officedocument.presentationml.handoutmaster+xml": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/vnd.openxmlformats-officedocument.presentationml.notesmaster+xml": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/vnd.openxmlformats-officedocument.presentationml.notesslide+xml": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/vnd.openxmlformats-officedocument.presentationml.presentation": {
+ "source": "iana",
+ "compressible": false,
+ "extensions": ["pptx"]
+ },
+ "application/vnd.openxmlformats-officedocument.presentationml.presentation.main+xml": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/vnd.openxmlformats-officedocument.presentationml.presprops+xml": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/vnd.openxmlformats-officedocument.presentationml.slide": {
+ "source": "iana",
+ "extensions": ["sldx"]
+ },
+ "application/vnd.openxmlformats-officedocument.presentationml.slide+xml": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/vnd.openxmlformats-officedocument.presentationml.slidelayout+xml": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/vnd.openxmlformats-officedocument.presentationml.slidemaster+xml": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/vnd.openxmlformats-officedocument.presentationml.slideshow": {
+ "source": "iana",
+ "extensions": ["ppsx"]
+ },
+ "application/vnd.openxmlformats-officedocument.presentationml.slideshow.main+xml": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/vnd.openxmlformats-officedocument.presentationml.slideupdateinfo+xml": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/vnd.openxmlformats-officedocument.presentationml.tablestyles+xml": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/vnd.openxmlformats-officedocument.presentationml.tags+xml": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/vnd.openxmlformats-officedocument.presentationml.template": {
+ "source": "iana",
+ "extensions": ["potx"]
+ },
+ "application/vnd.openxmlformats-officedocument.presentationml.template.main+xml": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/vnd.openxmlformats-officedocument.presentationml.viewprops+xml": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/vnd.openxmlformats-officedocument.spreadsheetml.calcchain+xml": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/vnd.openxmlformats-officedocument.spreadsheetml.chartsheet+xml": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/vnd.openxmlformats-officedocument.spreadsheetml.comments+xml": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/vnd.openxmlformats-officedocument.spreadsheetml.connections+xml": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/vnd.openxmlformats-officedocument.spreadsheetml.dialogsheet+xml": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/vnd.openxmlformats-officedocument.spreadsheetml.externallink+xml": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/vnd.openxmlformats-officedocument.spreadsheetml.pivotcachedefinition+xml": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/vnd.openxmlformats-officedocument.spreadsheetml.pivotcacherecords+xml": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/vnd.openxmlformats-officedocument.spreadsheetml.pivottable+xml": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/vnd.openxmlformats-officedocument.spreadsheetml.querytable+xml": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/vnd.openxmlformats-officedocument.spreadsheetml.revisionheaders+xml": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/vnd.openxmlformats-officedocument.spreadsheetml.revisionlog+xml": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/vnd.openxmlformats-officedocument.spreadsheetml.sharedstrings+xml": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet": {
+ "source": "iana",
+ "compressible": false,
+ "extensions": ["xlsx"]
+ },
+ "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet.main+xml": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/vnd.openxmlformats-officedocument.spreadsheetml.sheetmetadata+xml": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/vnd.openxmlformats-officedocument.spreadsheetml.styles+xml": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/vnd.openxmlformats-officedocument.spreadsheetml.table+xml": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/vnd.openxmlformats-officedocument.spreadsheetml.tablesinglecells+xml": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/vnd.openxmlformats-officedocument.spreadsheetml.template": {
+ "source": "iana",
+ "extensions": ["xltx"]
+ },
+ "application/vnd.openxmlformats-officedocument.spreadsheetml.template.main+xml": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/vnd.openxmlformats-officedocument.spreadsheetml.usernames+xml": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/vnd.openxmlformats-officedocument.spreadsheetml.volatiledependencies+xml": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/vnd.openxmlformats-officedocument.spreadsheetml.worksheet+xml": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/vnd.openxmlformats-officedocument.theme+xml": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/vnd.openxmlformats-officedocument.themeoverride+xml": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/vnd.openxmlformats-officedocument.vmldrawing": {
+ "source": "iana"
+ },
+ "application/vnd.openxmlformats-officedocument.wordprocessingml.comments+xml": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/vnd.openxmlformats-officedocument.wordprocessingml.document": {
+ "source": "iana",
+ "compressible": false,
+ "extensions": ["docx"]
+ },
+ "application/vnd.openxmlformats-officedocument.wordprocessingml.document.glossary+xml": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/vnd.openxmlformats-officedocument.wordprocessingml.document.main+xml": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/vnd.openxmlformats-officedocument.wordprocessingml.endnotes+xml": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/vnd.openxmlformats-officedocument.wordprocessingml.fonttable+xml": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/vnd.openxmlformats-officedocument.wordprocessingml.footer+xml": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/vnd.openxmlformats-officedocument.wordprocessingml.footnotes+xml": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/vnd.openxmlformats-officedocument.wordprocessingml.numbering+xml": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/vnd.openxmlformats-officedocument.wordprocessingml.settings+xml": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/vnd.openxmlformats-officedocument.wordprocessingml.styles+xml": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/vnd.openxmlformats-officedocument.wordprocessingml.template": {
+ "source": "iana",
+ "extensions": ["dotx"]
+ },
+ "application/vnd.openxmlformats-officedocument.wordprocessingml.template.main+xml": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/vnd.openxmlformats-officedocument.wordprocessingml.websettings+xml": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/vnd.openxmlformats-package.core-properties+xml": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/vnd.openxmlformats-package.digital-signature-xmlsignature+xml": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/vnd.openxmlformats-package.relationships+xml": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/vnd.oracle.resource+json": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/vnd.orange.indata": {
+ "source": "iana"
+ },
+ "application/vnd.osa.netdeploy": {
+ "source": "iana"
+ },
+ "application/vnd.osgeo.mapguide.package": {
+ "source": "iana",
+ "extensions": ["mgp"]
+ },
+ "application/vnd.osgi.bundle": {
+ "source": "iana"
+ },
+ "application/vnd.osgi.dp": {
+ "source": "iana",
+ "extensions": ["dp"]
+ },
+ "application/vnd.osgi.subsystem": {
+ "source": "iana",
+ "extensions": ["esa"]
+ },
+ "application/vnd.otps.ct-kip+xml": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/vnd.oxli.countgraph": {
+ "source": "iana"
+ },
+ "application/vnd.pagerduty+json": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/vnd.palm": {
+ "source": "iana",
+ "extensions": ["pdb","pqa","oprc"]
+ },
+ "application/vnd.panoply": {
+ "source": "iana"
+ },
+ "application/vnd.paos.xml": {
+ "source": "iana"
+ },
+ "application/vnd.patentdive": {
+ "source": "iana"
+ },
+ "application/vnd.patientecommsdoc": {
+ "source": "iana"
+ },
+ "application/vnd.pawaafile": {
+ "source": "iana",
+ "extensions": ["paw"]
+ },
+ "application/vnd.pcos": {
+ "source": "iana"
+ },
+ "application/vnd.pg.format": {
+ "source": "iana",
+ "extensions": ["str"]
+ },
+ "application/vnd.pg.osasli": {
+ "source": "iana",
+ "extensions": ["ei6"]
+ },
+ "application/vnd.piaccess.application-licence": {
+ "source": "iana"
+ },
+ "application/vnd.picsel": {
+ "source": "iana",
+ "extensions": ["efif"]
+ },
+ "application/vnd.pmi.widget": {
+ "source": "iana",
+ "extensions": ["wg"]
+ },
+ "application/vnd.poc.group-advertisement+xml": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/vnd.pocketlearn": {
+ "source": "iana",
+ "extensions": ["plf"]
+ },
+ "application/vnd.powerbuilder6": {
+ "source": "iana",
+ "extensions": ["pbd"]
+ },
+ "application/vnd.powerbuilder6-s": {
+ "source": "iana"
+ },
+ "application/vnd.powerbuilder7": {
+ "source": "iana"
+ },
+ "application/vnd.powerbuilder7-s": {
+ "source": "iana"
+ },
+ "application/vnd.powerbuilder75": {
+ "source": "iana"
+ },
+ "application/vnd.powerbuilder75-s": {
+ "source": "iana"
+ },
+ "application/vnd.preminet": {
+ "source": "iana"
+ },
+ "application/vnd.previewsystems.box": {
+ "source": "iana",
+ "extensions": ["box"]
+ },
+ "application/vnd.proteus.magazine": {
+ "source": "iana",
+ "extensions": ["mgz"]
+ },
+ "application/vnd.psfs": {
+ "source": "iana"
+ },
+ "application/vnd.publishare-delta-tree": {
+ "source": "iana",
+ "extensions": ["qps"]
+ },
+ "application/vnd.pvi.ptid1": {
+ "source": "iana",
+ "extensions": ["ptid"]
+ },
+ "application/vnd.pwg-multiplexed": {
+ "source": "iana"
+ },
+ "application/vnd.pwg-xhtml-print+xml": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/vnd.qualcomm.brew-app-res": {
+ "source": "iana"
+ },
+ "application/vnd.quarantainenet": {
+ "source": "iana"
+ },
+ "application/vnd.quark.quarkxpress": {
+ "source": "iana",
+ "extensions": ["qxd","qxt","qwd","qwt","qxl","qxb"]
+ },
+ "application/vnd.quobject-quoxdocument": {
+ "source": "iana"
+ },
+ "application/vnd.radisys.moml+xml": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/vnd.radisys.msml+xml": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/vnd.radisys.msml-audit+xml": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/vnd.radisys.msml-audit-conf+xml": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/vnd.radisys.msml-audit-conn+xml": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/vnd.radisys.msml-audit-dialog+xml": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/vnd.radisys.msml-audit-stream+xml": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/vnd.radisys.msml-conf+xml": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/vnd.radisys.msml-dialog+xml": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/vnd.radisys.msml-dialog-base+xml": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/vnd.radisys.msml-dialog-fax-detect+xml": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/vnd.radisys.msml-dialog-fax-sendrecv+xml": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/vnd.radisys.msml-dialog-group+xml": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/vnd.radisys.msml-dialog-speech+xml": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/vnd.radisys.msml-dialog-transform+xml": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/vnd.rainstor.data": {
+ "source": "iana"
+ },
+ "application/vnd.rapid": {
+ "source": "iana"
+ },
+ "application/vnd.rar": {
+ "source": "iana",
+ "extensions": ["rar"]
+ },
+ "application/vnd.realvnc.bed": {
+ "source": "iana",
+ "extensions": ["bed"]
+ },
+ "application/vnd.recordare.musicxml": {
+ "source": "iana",
+ "extensions": ["mxl"]
+ },
+ "application/vnd.recordare.musicxml+xml": {
+ "source": "iana",
+ "compressible": true,
+ "extensions": ["musicxml"]
+ },
+ "application/vnd.renlearn.rlprint": {
+ "source": "iana"
+ },
+ "application/vnd.resilient.logic": {
+ "source": "iana"
+ },
+ "application/vnd.restful+json": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/vnd.rig.cryptonote": {
+ "source": "iana",
+ "extensions": ["cryptonote"]
+ },
+ "application/vnd.rim.cod": {
+ "source": "apache",
+ "extensions": ["cod"]
+ },
+ "application/vnd.rn-realmedia": {
+ "source": "apache",
+ "extensions": ["rm"]
+ },
+ "application/vnd.rn-realmedia-vbr": {
+ "source": "apache",
+ "extensions": ["rmvb"]
+ },
+ "application/vnd.route66.link66+xml": {
+ "source": "iana",
+ "compressible": true,
+ "extensions": ["link66"]
+ },
+ "application/vnd.rs-274x": {
+ "source": "iana"
+ },
+ "application/vnd.ruckus.download": {
+ "source": "iana"
+ },
+ "application/vnd.s3sms": {
+ "source": "iana"
+ },
+ "application/vnd.sailingtracker.track": {
+ "source": "iana",
+ "extensions": ["st"]
+ },
+ "application/vnd.sar": {
+ "source": "iana"
+ },
+ "application/vnd.sbm.cid": {
+ "source": "iana"
+ },
+ "application/vnd.sbm.mid2": {
+ "source": "iana"
+ },
+ "application/vnd.scribus": {
+ "source": "iana"
+ },
+ "application/vnd.sealed.3df": {
+ "source": "iana"
+ },
+ "application/vnd.sealed.csf": {
+ "source": "iana"
+ },
+ "application/vnd.sealed.doc": {
+ "source": "iana"
+ },
+ "application/vnd.sealed.eml": {
+ "source": "iana"
+ },
+ "application/vnd.sealed.mht": {
+ "source": "iana"
+ },
+ "application/vnd.sealed.net": {
+ "source": "iana"
+ },
+ "application/vnd.sealed.ppt": {
+ "source": "iana"
+ },
+ "application/vnd.sealed.tiff": {
+ "source": "iana"
+ },
+ "application/vnd.sealed.xls": {
+ "source": "iana"
+ },
+ "application/vnd.sealedmedia.softseal.html": {
+ "source": "iana"
+ },
+ "application/vnd.sealedmedia.softseal.pdf": {
+ "source": "iana"
+ },
+ "application/vnd.seemail": {
+ "source": "iana",
+ "extensions": ["see"]
+ },
+ "application/vnd.seis+json": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/vnd.sema": {
+ "source": "iana",
+ "extensions": ["sema"]
+ },
+ "application/vnd.semd": {
+ "source": "iana",
+ "extensions": ["semd"]
+ },
+ "application/vnd.semf": {
+ "source": "iana",
+ "extensions": ["semf"]
+ },
+ "application/vnd.shade-save-file": {
+ "source": "iana"
+ },
+ "application/vnd.shana.informed.formdata": {
+ "source": "iana",
+ "extensions": ["ifm"]
+ },
+ "application/vnd.shana.informed.formtemplate": {
+ "source": "iana",
+ "extensions": ["itp"]
+ },
+ "application/vnd.shana.informed.interchange": {
+ "source": "iana",
+ "extensions": ["iif"]
+ },
+ "application/vnd.shana.informed.package": {
+ "source": "iana",
+ "extensions": ["ipk"]
+ },
+ "application/vnd.shootproof+json": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/vnd.shopkick+json": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/vnd.shp": {
+ "source": "iana"
+ },
+ "application/vnd.shx": {
+ "source": "iana"
+ },
+ "application/vnd.sigrok.session": {
+ "source": "iana"
+ },
+ "application/vnd.simtech-mindmapper": {
+ "source": "iana",
+ "extensions": ["twd","twds"]
+ },
+ "application/vnd.siren+json": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/vnd.smaf": {
+ "source": "iana",
+ "extensions": ["mmf"]
+ },
+ "application/vnd.smart.notebook": {
+ "source": "iana"
+ },
+ "application/vnd.smart.teacher": {
+ "source": "iana",
+ "extensions": ["teacher"]
+ },
+ "application/vnd.snesdev-page-table": {
+ "source": "iana"
+ },
+ "application/vnd.software602.filler.form+xml": {
+ "source": "iana",
+ "compressible": true,
+ "extensions": ["fo"]
+ },
+ "application/vnd.software602.filler.form-xml-zip": {
+ "source": "iana"
+ },
+ "application/vnd.solent.sdkm+xml": {
+ "source": "iana",
+ "compressible": true,
+ "extensions": ["sdkm","sdkd"]
+ },
+ "application/vnd.spotfire.dxp": {
+ "source": "iana",
+ "extensions": ["dxp"]
+ },
+ "application/vnd.spotfire.sfs": {
+ "source": "iana",
+ "extensions": ["sfs"]
+ },
+ "application/vnd.sqlite3": {
+ "source": "iana"
+ },
+ "application/vnd.sss-cod": {
+ "source": "iana"
+ },
+ "application/vnd.sss-dtf": {
+ "source": "iana"
+ },
+ "application/vnd.sss-ntf": {
+ "source": "iana"
+ },
+ "application/vnd.stardivision.calc": {
+ "source": "apache",
+ "extensions": ["sdc"]
+ },
+ "application/vnd.stardivision.draw": {
+ "source": "apache",
+ "extensions": ["sda"]
+ },
+ "application/vnd.stardivision.impress": {
+ "source": "apache",
+ "extensions": ["sdd"]
+ },
+ "application/vnd.stardivision.math": {
+ "source": "apache",
+ "extensions": ["smf"]
+ },
+ "application/vnd.stardivision.writer": {
+ "source": "apache",
+ "extensions": ["sdw","vor"]
+ },
+ "application/vnd.stardivision.writer-global": {
+ "source": "apache",
+ "extensions": ["sgl"]
+ },
+ "application/vnd.stepmania.package": {
+ "source": "iana",
+ "extensions": ["smzip"]
+ },
+ "application/vnd.stepmania.stepchart": {
+ "source": "iana",
+ "extensions": ["sm"]
+ },
+ "application/vnd.street-stream": {
+ "source": "iana"
+ },
+ "application/vnd.sun.wadl+xml": {
+ "source": "iana",
+ "compressible": true,
+ "extensions": ["wadl"]
+ },
+ "application/vnd.sun.xml.calc": {
+ "source": "apache",
+ "extensions": ["sxc"]
+ },
+ "application/vnd.sun.xml.calc.template": {
+ "source": "apache",
+ "extensions": ["stc"]
+ },
+ "application/vnd.sun.xml.draw": {
+ "source": "apache",
+ "extensions": ["sxd"]
+ },
+ "application/vnd.sun.xml.draw.template": {
+ "source": "apache",
+ "extensions": ["std"]
+ },
+ "application/vnd.sun.xml.impress": {
+ "source": "apache",
+ "extensions": ["sxi"]
+ },
+ "application/vnd.sun.xml.impress.template": {
+ "source": "apache",
+ "extensions": ["sti"]
+ },
+ "application/vnd.sun.xml.math": {
+ "source": "apache",
+ "extensions": ["sxm"]
+ },
+ "application/vnd.sun.xml.writer": {
+ "source": "apache",
+ "extensions": ["sxw"]
+ },
+ "application/vnd.sun.xml.writer.global": {
+ "source": "apache",
+ "extensions": ["sxg"]
+ },
+ "application/vnd.sun.xml.writer.template": {
+ "source": "apache",
+ "extensions": ["stw"]
+ },
+ "application/vnd.sus-calendar": {
+ "source": "iana",
+ "extensions": ["sus","susp"]
+ },
+ "application/vnd.svd": {
+ "source": "iana",
+ "extensions": ["svd"]
+ },
+ "application/vnd.swiftview-ics": {
+ "source": "iana"
+ },
+ "application/vnd.sycle+xml": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/vnd.syft+json": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/vnd.symbian.install": {
+ "source": "apache",
+ "extensions": ["sis","sisx"]
+ },
+ "application/vnd.syncml+xml": {
+ "source": "iana",
+ "charset": "UTF-8",
+ "compressible": true,
+ "extensions": ["xsm"]
+ },
+ "application/vnd.syncml.dm+wbxml": {
+ "source": "iana",
+ "charset": "UTF-8",
+ "extensions": ["bdm"]
+ },
+ "application/vnd.syncml.dm+xml": {
+ "source": "iana",
+ "charset": "UTF-8",
+ "compressible": true,
+ "extensions": ["xdm"]
+ },
+ "application/vnd.syncml.dm.notification": {
+ "source": "iana"
+ },
+ "application/vnd.syncml.dmddf+wbxml": {
+ "source": "iana"
+ },
+ "application/vnd.syncml.dmddf+xml": {
+ "source": "iana",
+ "charset": "UTF-8",
+ "compressible": true,
+ "extensions": ["ddf"]
+ },
+ "application/vnd.syncml.dmtnds+wbxml": {
+ "source": "iana"
+ },
+ "application/vnd.syncml.dmtnds+xml": {
+ "source": "iana",
+ "charset": "UTF-8",
+ "compressible": true
+ },
+ "application/vnd.syncml.ds.notification": {
+ "source": "iana"
+ },
+ "application/vnd.tableschema+json": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/vnd.tao.intent-module-archive": {
+ "source": "iana",
+ "extensions": ["tao"]
+ },
+ "application/vnd.tcpdump.pcap": {
+ "source": "iana",
+ "extensions": ["pcap","cap","dmp"]
+ },
+ "application/vnd.think-cell.ppttc+json": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/vnd.tmd.mediaflex.api+xml": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/vnd.tml": {
+ "source": "iana"
+ },
+ "application/vnd.tmobile-livetv": {
+ "source": "iana",
+ "extensions": ["tmo"]
+ },
+ "application/vnd.tri.onesource": {
+ "source": "iana"
+ },
+ "application/vnd.trid.tpt": {
+ "source": "iana",
+ "extensions": ["tpt"]
+ },
+ "application/vnd.triscape.mxs": {
+ "source": "iana",
+ "extensions": ["mxs"]
+ },
+ "application/vnd.trueapp": {
+ "source": "iana",
+ "extensions": ["tra"]
+ },
+ "application/vnd.truedoc": {
+ "source": "iana"
+ },
+ "application/vnd.ubisoft.webplayer": {
+ "source": "iana"
+ },
+ "application/vnd.ufdl": {
+ "source": "iana",
+ "extensions": ["ufd","ufdl"]
+ },
+ "application/vnd.uiq.theme": {
+ "source": "iana",
+ "extensions": ["utz"]
+ },
+ "application/vnd.umajin": {
+ "source": "iana",
+ "extensions": ["umj"]
+ },
+ "application/vnd.unity": {
+ "source": "iana",
+ "extensions": ["unityweb"]
+ },
+ "application/vnd.uoml+xml": {
+ "source": "iana",
+ "compressible": true,
+ "extensions": ["uoml"]
+ },
+ "application/vnd.uplanet.alert": {
+ "source": "iana"
+ },
+ "application/vnd.uplanet.alert-wbxml": {
+ "source": "iana"
+ },
+ "application/vnd.uplanet.bearer-choice": {
+ "source": "iana"
+ },
+ "application/vnd.uplanet.bearer-choice-wbxml": {
+ "source": "iana"
+ },
+ "application/vnd.uplanet.cacheop": {
+ "source": "iana"
+ },
+ "application/vnd.uplanet.cacheop-wbxml": {
+ "source": "iana"
+ },
+ "application/vnd.uplanet.channel": {
+ "source": "iana"
+ },
+ "application/vnd.uplanet.channel-wbxml": {
+ "source": "iana"
+ },
+ "application/vnd.uplanet.list": {
+ "source": "iana"
+ },
+ "application/vnd.uplanet.list-wbxml": {
+ "source": "iana"
+ },
+ "application/vnd.uplanet.listcmd": {
+ "source": "iana"
+ },
+ "application/vnd.uplanet.listcmd-wbxml": {
+ "source": "iana"
+ },
+ "application/vnd.uplanet.signal": {
+ "source": "iana"
+ },
+ "application/vnd.uri-map": {
+ "source": "iana"
+ },
+ "application/vnd.valve.source.material": {
+ "source": "iana"
+ },
+ "application/vnd.vcx": {
+ "source": "iana",
+ "extensions": ["vcx"]
+ },
+ "application/vnd.vd-study": {
+ "source": "iana"
+ },
+ "application/vnd.vectorworks": {
+ "source": "iana"
+ },
+ "application/vnd.vel+json": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/vnd.verimatrix.vcas": {
+ "source": "iana"
+ },
+ "application/vnd.veritone.aion+json": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/vnd.veryant.thin": {
+ "source": "iana"
+ },
+ "application/vnd.ves.encrypted": {
+ "source": "iana"
+ },
+ "application/vnd.vidsoft.vidconference": {
+ "source": "iana"
+ },
+ "application/vnd.visio": {
+ "source": "iana",
+ "extensions": ["vsd","vst","vss","vsw"]
+ },
+ "application/vnd.visionary": {
+ "source": "iana",
+ "extensions": ["vis"]
+ },
+ "application/vnd.vividence.scriptfile": {
+ "source": "iana"
+ },
+ "application/vnd.vsf": {
+ "source": "iana",
+ "extensions": ["vsf"]
+ },
+ "application/vnd.wap.sic": {
+ "source": "iana"
+ },
+ "application/vnd.wap.slc": {
+ "source": "iana"
+ },
+ "application/vnd.wap.wbxml": {
+ "source": "iana",
+ "charset": "UTF-8",
+ "extensions": ["wbxml"]
+ },
+ "application/vnd.wap.wmlc": {
+ "source": "iana",
+ "extensions": ["wmlc"]
+ },
+ "application/vnd.wap.wmlscriptc": {
+ "source": "iana",
+ "extensions": ["wmlsc"]
+ },
+ "application/vnd.webturbo": {
+ "source": "iana",
+ "extensions": ["wtb"]
+ },
+ "application/vnd.wfa.dpp": {
+ "source": "iana"
+ },
+ "application/vnd.wfa.p2p": {
+ "source": "iana"
+ },
+ "application/vnd.wfa.wsc": {
+ "source": "iana"
+ },
+ "application/vnd.windows.devicepairing": {
+ "source": "iana"
+ },
+ "application/vnd.wmc": {
+ "source": "iana"
+ },
+ "application/vnd.wmf.bootstrap": {
+ "source": "iana"
+ },
+ "application/vnd.wolfram.mathematica": {
+ "source": "iana"
+ },
+ "application/vnd.wolfram.mathematica.package": {
+ "source": "iana"
+ },
+ "application/vnd.wolfram.player": {
+ "source": "iana",
+ "extensions": ["nbp"]
+ },
+ "application/vnd.wordperfect": {
+ "source": "iana",
+ "extensions": ["wpd"]
+ },
+ "application/vnd.wqd": {
+ "source": "iana",
+ "extensions": ["wqd"]
+ },
+ "application/vnd.wrq-hp3000-labelled": {
+ "source": "iana"
+ },
+ "application/vnd.wt.stf": {
+ "source": "iana",
+ "extensions": ["stf"]
+ },
+ "application/vnd.wv.csp+wbxml": {
+ "source": "iana"
+ },
+ "application/vnd.wv.csp+xml": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/vnd.wv.ssp+xml": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/vnd.xacml+json": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/vnd.xara": {
+ "source": "iana",
+ "extensions": ["xar"]
+ },
+ "application/vnd.xfdl": {
+ "source": "iana",
+ "extensions": ["xfdl"]
+ },
+ "application/vnd.xfdl.webform": {
+ "source": "iana"
+ },
+ "application/vnd.xmi+xml": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/vnd.xmpie.cpkg": {
+ "source": "iana"
+ },
+ "application/vnd.xmpie.dpkg": {
+ "source": "iana"
+ },
+ "application/vnd.xmpie.plan": {
+ "source": "iana"
+ },
+ "application/vnd.xmpie.ppkg": {
+ "source": "iana"
+ },
+ "application/vnd.xmpie.xlim": {
+ "source": "iana"
+ },
+ "application/vnd.yamaha.hv-dic": {
+ "source": "iana",
+ "extensions": ["hvd"]
+ },
+ "application/vnd.yamaha.hv-script": {
+ "source": "iana",
+ "extensions": ["hvs"]
+ },
+ "application/vnd.yamaha.hv-voice": {
+ "source": "iana",
+ "extensions": ["hvp"]
+ },
+ "application/vnd.yamaha.openscoreformat": {
+ "source": "iana",
+ "extensions": ["osf"]
+ },
+ "application/vnd.yamaha.openscoreformat.osfpvg+xml": {
+ "source": "iana",
+ "compressible": true,
+ "extensions": ["osfpvg"]
+ },
+ "application/vnd.yamaha.remote-setup": {
+ "source": "iana"
+ },
+ "application/vnd.yamaha.smaf-audio": {
+ "source": "iana",
+ "extensions": ["saf"]
+ },
+ "application/vnd.yamaha.smaf-phrase": {
+ "source": "iana",
+ "extensions": ["spf"]
+ },
+ "application/vnd.yamaha.through-ngn": {
+ "source": "iana"
+ },
+ "application/vnd.yamaha.tunnel-udpencap": {
+ "source": "iana"
+ },
+ "application/vnd.yaoweme": {
+ "source": "iana"
+ },
+ "application/vnd.yellowriver-custom-menu": {
+ "source": "iana",
+ "extensions": ["cmp"]
+ },
+ "application/vnd.youtube.yt": {
+ "source": "iana"
+ },
+ "application/vnd.zul": {
+ "source": "iana",
+ "extensions": ["zir","zirz"]
+ },
+ "application/vnd.zzazz.deck+xml": {
+ "source": "iana",
+ "compressible": true,
+ "extensions": ["zaz"]
+ },
+ "application/voicexml+xml": {
+ "source": "iana",
+ "compressible": true,
+ "extensions": ["vxml"]
+ },
+ "application/voucher-cms+json": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/vq-rtcpxr": {
+ "source": "iana"
+ },
+ "application/wasm": {
+ "source": "iana",
+ "compressible": true,
+ "extensions": ["wasm"]
+ },
+ "application/watcherinfo+xml": {
+ "source": "iana",
+ "compressible": true,
+ "extensions": ["wif"]
+ },
+ "application/webpush-options+json": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/whoispp-query": {
+ "source": "iana"
+ },
+ "application/whoispp-response": {
+ "source": "iana"
+ },
+ "application/widget": {
+ "source": "iana",
+ "extensions": ["wgt"]
+ },
+ "application/winhlp": {
+ "source": "apache",
+ "extensions": ["hlp"]
+ },
+ "application/wita": {
+ "source": "iana"
+ },
+ "application/wordperfect5.1": {
+ "source": "iana"
+ },
+ "application/wsdl+xml": {
+ "source": "iana",
+ "compressible": true,
+ "extensions": ["wsdl"]
+ },
+ "application/wspolicy+xml": {
+ "source": "iana",
+ "compressible": true,
+ "extensions": ["wspolicy"]
+ },
+ "application/x-7z-compressed": {
+ "source": "apache",
+ "compressible": false,
+ "extensions": ["7z"]
+ },
+ "application/x-abiword": {
+ "source": "apache",
+ "extensions": ["abw"]
+ },
+ "application/x-ace-compressed": {
+ "source": "apache",
+ "extensions": ["ace"]
+ },
+ "application/x-amf": {
+ "source": "apache"
+ },
+ "application/x-apple-diskimage": {
+ "source": "apache",
+ "extensions": ["dmg"]
+ },
+ "application/x-arj": {
+ "compressible": false,
+ "extensions": ["arj"]
+ },
+ "application/x-authorware-bin": {
+ "source": "apache",
+ "extensions": ["aab","x32","u32","vox"]
+ },
+ "application/x-authorware-map": {
+ "source": "apache",
+ "extensions": ["aam"]
+ },
+ "application/x-authorware-seg": {
+ "source": "apache",
+ "extensions": ["aas"]
+ },
+ "application/x-bcpio": {
+ "source": "apache",
+ "extensions": ["bcpio"]
+ },
+ "application/x-bdoc": {
+ "compressible": false,
+ "extensions": ["bdoc"]
+ },
+ "application/x-bittorrent": {
+ "source": "apache",
+ "extensions": ["torrent"]
+ },
+ "application/x-blorb": {
+ "source": "apache",
+ "extensions": ["blb","blorb"]
+ },
+ "application/x-bzip": {
+ "source": "apache",
+ "compressible": false,
+ "extensions": ["bz"]
+ },
+ "application/x-bzip2": {
+ "source": "apache",
+ "compressible": false,
+ "extensions": ["bz2","boz"]
+ },
+ "application/x-cbr": {
+ "source": "apache",
+ "extensions": ["cbr","cba","cbt","cbz","cb7"]
+ },
+ "application/x-cdlink": {
+ "source": "apache",
+ "extensions": ["vcd"]
+ },
+ "application/x-cfs-compressed": {
+ "source": "apache",
+ "extensions": ["cfs"]
+ },
+ "application/x-chat": {
+ "source": "apache",
+ "extensions": ["chat"]
+ },
+ "application/x-chess-pgn": {
+ "source": "apache",
+ "extensions": ["pgn"]
+ },
+ "application/x-chrome-extension": {
+ "extensions": ["crx"]
+ },
+ "application/x-cocoa": {
+ "source": "nginx",
+ "extensions": ["cco"]
+ },
+ "application/x-compress": {
+ "source": "apache"
+ },
+ "application/x-conference": {
+ "source": "apache",
+ "extensions": ["nsc"]
+ },
+ "application/x-cpio": {
+ "source": "apache",
+ "extensions": ["cpio"]
+ },
+ "application/x-csh": {
+ "source": "apache",
+ "extensions": ["csh"]
+ },
+ "application/x-deb": {
+ "compressible": false
+ },
+ "application/x-debian-package": {
+ "source": "apache",
+ "extensions": ["deb","udeb"]
+ },
+ "application/x-dgc-compressed": {
+ "source": "apache",
+ "extensions": ["dgc"]
+ },
+ "application/x-director": {
+ "source": "apache",
+ "extensions": ["dir","dcr","dxr","cst","cct","cxt","w3d","fgd","swa"]
+ },
+ "application/x-doom": {
+ "source": "apache",
+ "extensions": ["wad"]
+ },
+ "application/x-dtbncx+xml": {
+ "source": "apache",
+ "compressible": true,
+ "extensions": ["ncx"]
+ },
+ "application/x-dtbook+xml": {
+ "source": "apache",
+ "compressible": true,
+ "extensions": ["dtb"]
+ },
+ "application/x-dtbresource+xml": {
+ "source": "apache",
+ "compressible": true,
+ "extensions": ["res"]
+ },
+ "application/x-dvi": {
+ "source": "apache",
+ "compressible": false,
+ "extensions": ["dvi"]
+ },
+ "application/x-envoy": {
+ "source": "apache",
+ "extensions": ["evy"]
+ },
+ "application/x-eva": {
+ "source": "apache",
+ "extensions": ["eva"]
+ },
+ "application/x-font-bdf": {
+ "source": "apache",
+ "extensions": ["bdf"]
+ },
+ "application/x-font-dos": {
+ "source": "apache"
+ },
+ "application/x-font-framemaker": {
+ "source": "apache"
+ },
+ "application/x-font-ghostscript": {
+ "source": "apache",
+ "extensions": ["gsf"]
+ },
+ "application/x-font-libgrx": {
+ "source": "apache"
+ },
+ "application/x-font-linux-psf": {
+ "source": "apache",
+ "extensions": ["psf"]
+ },
+ "application/x-font-pcf": {
+ "source": "apache",
+ "extensions": ["pcf"]
+ },
+ "application/x-font-snf": {
+ "source": "apache",
+ "extensions": ["snf"]
+ },
+ "application/x-font-speedo": {
+ "source": "apache"
+ },
+ "application/x-font-sunos-news": {
+ "source": "apache"
+ },
+ "application/x-font-type1": {
+ "source": "apache",
+ "extensions": ["pfa","pfb","pfm","afm"]
+ },
+ "application/x-font-vfont": {
+ "source": "apache"
+ },
+ "application/x-freearc": {
+ "source": "apache",
+ "extensions": ["arc"]
+ },
+ "application/x-futuresplash": {
+ "source": "apache",
+ "extensions": ["spl"]
+ },
+ "application/x-gca-compressed": {
+ "source": "apache",
+ "extensions": ["gca"]
+ },
+ "application/x-glulx": {
+ "source": "apache",
+ "extensions": ["ulx"]
+ },
+ "application/x-gnumeric": {
+ "source": "apache",
+ "extensions": ["gnumeric"]
+ },
+ "application/x-gramps-xml": {
+ "source": "apache",
+ "extensions": ["gramps"]
+ },
+ "application/x-gtar": {
+ "source": "apache",
+ "extensions": ["gtar"]
+ },
+ "application/x-gzip": {
+ "source": "apache"
+ },
+ "application/x-hdf": {
+ "source": "apache",
+ "extensions": ["hdf"]
+ },
+ "application/x-httpd-php": {
+ "compressible": true,
+ "extensions": ["php"]
+ },
+ "application/x-install-instructions": {
+ "source": "apache",
+ "extensions": ["install"]
+ },
+ "application/x-iso9660-image": {
+ "source": "apache",
+ "extensions": ["iso"]
+ },
+ "application/x-iwork-keynote-sffkey": {
+ "extensions": ["key"]
+ },
+ "application/x-iwork-numbers-sffnumbers": {
+ "extensions": ["numbers"]
+ },
+ "application/x-iwork-pages-sffpages": {
+ "extensions": ["pages"]
+ },
+ "application/x-java-archive-diff": {
+ "source": "nginx",
+ "extensions": ["jardiff"]
+ },
+ "application/x-java-jnlp-file": {
+ "source": "apache",
+ "compressible": false,
+ "extensions": ["jnlp"]
+ },
+ "application/x-javascript": {
+ "compressible": true
+ },
+ "application/x-keepass2": {
+ "extensions": ["kdbx"]
+ },
+ "application/x-latex": {
+ "source": "apache",
+ "compressible": false,
+ "extensions": ["latex"]
+ },
+ "application/x-lua-bytecode": {
+ "extensions": ["luac"]
+ },
+ "application/x-lzh-compressed": {
+ "source": "apache",
+ "extensions": ["lzh","lha"]
+ },
+ "application/x-makeself": {
+ "source": "nginx",
+ "extensions": ["run"]
+ },
+ "application/x-mie": {
+ "source": "apache",
+ "extensions": ["mie"]
+ },
+ "application/x-mobipocket-ebook": {
+ "source": "apache",
+ "extensions": ["prc","mobi"]
+ },
+ "application/x-mpegurl": {
+ "compressible": false
+ },
+ "application/x-ms-application": {
+ "source": "apache",
+ "extensions": ["application"]
+ },
+ "application/x-ms-shortcut": {
+ "source": "apache",
+ "extensions": ["lnk"]
+ },
+ "application/x-ms-wmd": {
+ "source": "apache",
+ "extensions": ["wmd"]
+ },
+ "application/x-ms-wmz": {
+ "source": "apache",
+ "extensions": ["wmz"]
+ },
+ "application/x-ms-xbap": {
+ "source": "apache",
+ "extensions": ["xbap"]
+ },
+ "application/x-msaccess": {
+ "source": "apache",
+ "extensions": ["mdb"]
+ },
+ "application/x-msbinder": {
+ "source": "apache",
+ "extensions": ["obd"]
+ },
+ "application/x-mscardfile": {
+ "source": "apache",
+ "extensions": ["crd"]
+ },
+ "application/x-msclip": {
+ "source": "apache",
+ "extensions": ["clp"]
+ },
+ "application/x-msdos-program": {
+ "extensions": ["exe"]
+ },
+ "application/x-msdownload": {
+ "source": "apache",
+ "extensions": ["exe","dll","com","bat","msi"]
+ },
+ "application/x-msmediaview": {
+ "source": "apache",
+ "extensions": ["mvb","m13","m14"]
+ },
+ "application/x-msmetafile": {
+ "source": "apache",
+ "extensions": ["wmf","wmz","emf","emz"]
+ },
+ "application/x-msmoney": {
+ "source": "apache",
+ "extensions": ["mny"]
+ },
+ "application/x-mspublisher": {
+ "source": "apache",
+ "extensions": ["pub"]
+ },
+ "application/x-msschedule": {
+ "source": "apache",
+ "extensions": ["scd"]
+ },
+ "application/x-msterminal": {
+ "source": "apache",
+ "extensions": ["trm"]
+ },
+ "application/x-mswrite": {
+ "source": "apache",
+ "extensions": ["wri"]
+ },
+ "application/x-netcdf": {
+ "source": "apache",
+ "extensions": ["nc","cdf"]
+ },
+ "application/x-ns-proxy-autoconfig": {
+ "compressible": true,
+ "extensions": ["pac"]
+ },
+ "application/x-nzb": {
+ "source": "apache",
+ "extensions": ["nzb"]
+ },
+ "application/x-perl": {
+ "source": "nginx",
+ "extensions": ["pl","pm"]
+ },
+ "application/x-pilot": {
+ "source": "nginx",
+ "extensions": ["prc","pdb"]
+ },
+ "application/x-pkcs12": {
+ "source": "apache",
+ "compressible": false,
+ "extensions": ["p12","pfx"]
+ },
+ "application/x-pkcs7-certificates": {
+ "source": "apache",
+ "extensions": ["p7b","spc"]
+ },
+ "application/x-pkcs7-certreqresp": {
+ "source": "apache",
+ "extensions": ["p7r"]
+ },
+ "application/x-pki-message": {
+ "source": "iana"
+ },
+ "application/x-rar-compressed": {
+ "source": "apache",
+ "compressible": false,
+ "extensions": ["rar"]
+ },
+ "application/x-redhat-package-manager": {
+ "source": "nginx",
+ "extensions": ["rpm"]
+ },
+ "application/x-research-info-systems": {
+ "source": "apache",
+ "extensions": ["ris"]
+ },
+ "application/x-sea": {
+ "source": "nginx",
+ "extensions": ["sea"]
+ },
+ "application/x-sh": {
+ "source": "apache",
+ "compressible": true,
+ "extensions": ["sh"]
+ },
+ "application/x-shar": {
+ "source": "apache",
+ "extensions": ["shar"]
+ },
+ "application/x-shockwave-flash": {
+ "source": "apache",
+ "compressible": false,
+ "extensions": ["swf"]
+ },
+ "application/x-silverlight-app": {
+ "source": "apache",
+ "extensions": ["xap"]
+ },
+ "application/x-sql": {
+ "source": "apache",
+ "extensions": ["sql"]
+ },
+ "application/x-stuffit": {
+ "source": "apache",
+ "compressible": false,
+ "extensions": ["sit"]
+ },
+ "application/x-stuffitx": {
+ "source": "apache",
+ "extensions": ["sitx"]
+ },
+ "application/x-subrip": {
+ "source": "apache",
+ "extensions": ["srt"]
+ },
+ "application/x-sv4cpio": {
+ "source": "apache",
+ "extensions": ["sv4cpio"]
+ },
+ "application/x-sv4crc": {
+ "source": "apache",
+ "extensions": ["sv4crc"]
+ },
+ "application/x-t3vm-image": {
+ "source": "apache",
+ "extensions": ["t3"]
+ },
+ "application/x-tads": {
+ "source": "apache",
+ "extensions": ["gam"]
+ },
+ "application/x-tar": {
+ "source": "apache",
+ "compressible": true,
+ "extensions": ["tar"]
+ },
+ "application/x-tcl": {
+ "source": "apache",
+ "extensions": ["tcl","tk"]
+ },
+ "application/x-tex": {
+ "source": "apache",
+ "extensions": ["tex"]
+ },
+ "application/x-tex-tfm": {
+ "source": "apache",
+ "extensions": ["tfm"]
+ },
+ "application/x-texinfo": {
+ "source": "apache",
+ "extensions": ["texinfo","texi"]
+ },
+ "application/x-tgif": {
+ "source": "apache",
+ "extensions": ["obj"]
+ },
+ "application/x-ustar": {
+ "source": "apache",
+ "extensions": ["ustar"]
+ },
+ "application/x-virtualbox-hdd": {
+ "compressible": true,
+ "extensions": ["hdd"]
+ },
+ "application/x-virtualbox-ova": {
+ "compressible": true,
+ "extensions": ["ova"]
+ },
+ "application/x-virtualbox-ovf": {
+ "compressible": true,
+ "extensions": ["ovf"]
+ },
+ "application/x-virtualbox-vbox": {
+ "compressible": true,
+ "extensions": ["vbox"]
+ },
+ "application/x-virtualbox-vbox-extpack": {
+ "compressible": false,
+ "extensions": ["vbox-extpack"]
+ },
+ "application/x-virtualbox-vdi": {
+ "compressible": true,
+ "extensions": ["vdi"]
+ },
+ "application/x-virtualbox-vhd": {
+ "compressible": true,
+ "extensions": ["vhd"]
+ },
+ "application/x-virtualbox-vmdk": {
+ "compressible": true,
+ "extensions": ["vmdk"]
+ },
+ "application/x-wais-source": {
+ "source": "apache",
+ "extensions": ["src"]
+ },
+ "application/x-web-app-manifest+json": {
+ "compressible": true,
+ "extensions": ["webapp"]
+ },
+ "application/x-www-form-urlencoded": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/x-x509-ca-cert": {
+ "source": "iana",
+ "extensions": ["der","crt","pem"]
+ },
+ "application/x-x509-ca-ra-cert": {
+ "source": "iana"
+ },
+ "application/x-x509-next-ca-cert": {
+ "source": "iana"
+ },
+ "application/x-xfig": {
+ "source": "apache",
+ "extensions": ["fig"]
+ },
+ "application/x-xliff+xml": {
+ "source": "apache",
+ "compressible": true,
+ "extensions": ["xlf"]
+ },
+ "application/x-xpinstall": {
+ "source": "apache",
+ "compressible": false,
+ "extensions": ["xpi"]
+ },
+ "application/x-xz": {
+ "source": "apache",
+ "extensions": ["xz"]
+ },
+ "application/x-zmachine": {
+ "source": "apache",
+ "extensions": ["z1","z2","z3","z4","z5","z6","z7","z8"]
+ },
+ "application/x400-bp": {
+ "source": "iana"
+ },
+ "application/xacml+xml": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/xaml+xml": {
+ "source": "apache",
+ "compressible": true,
+ "extensions": ["xaml"]
+ },
+ "application/xcap-att+xml": {
+ "source": "iana",
+ "compressible": true,
+ "extensions": ["xav"]
+ },
+ "application/xcap-caps+xml": {
+ "source": "iana",
+ "compressible": true,
+ "extensions": ["xca"]
+ },
+ "application/xcap-diff+xml": {
+ "source": "iana",
+ "compressible": true,
+ "extensions": ["xdf"]
+ },
+ "application/xcap-el+xml": {
+ "source": "iana",
+ "compressible": true,
+ "extensions": ["xel"]
+ },
+ "application/xcap-error+xml": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/xcap-ns+xml": {
+ "source": "iana",
+ "compressible": true,
+ "extensions": ["xns"]
+ },
+ "application/xcon-conference-info+xml": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/xcon-conference-info-diff+xml": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/xenc+xml": {
+ "source": "iana",
+ "compressible": true,
+ "extensions": ["xenc"]
+ },
+ "application/xhtml+xml": {
+ "source": "iana",
+ "compressible": true,
+ "extensions": ["xhtml","xht"]
+ },
+ "application/xhtml-voice+xml": {
+ "source": "apache",
+ "compressible": true
+ },
+ "application/xliff+xml": {
+ "source": "iana",
+ "compressible": true,
+ "extensions": ["xlf"]
+ },
+ "application/xml": {
+ "source": "iana",
+ "compressible": true,
+ "extensions": ["xml","xsl","xsd","rng"]
+ },
+ "application/xml-dtd": {
+ "source": "iana",
+ "compressible": true,
+ "extensions": ["dtd"]
+ },
+ "application/xml-external-parsed-entity": {
+ "source": "iana"
+ },
+ "application/xml-patch+xml": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/xmpp+xml": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/xop+xml": {
+ "source": "iana",
+ "compressible": true,
+ "extensions": ["xop"]
+ },
+ "application/xproc+xml": {
+ "source": "apache",
+ "compressible": true,
+ "extensions": ["xpl"]
+ },
+ "application/xslt+xml": {
+ "source": "iana",
+ "compressible": true,
+ "extensions": ["xsl","xslt"]
+ },
+ "application/xspf+xml": {
+ "source": "apache",
+ "compressible": true,
+ "extensions": ["xspf"]
+ },
+ "application/xv+xml": {
+ "source": "iana",
+ "compressible": true,
+ "extensions": ["mxml","xhvml","xvml","xvm"]
+ },
+ "application/yang": {
+ "source": "iana",
+ "extensions": ["yang"]
+ },
+ "application/yang-data+json": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/yang-data+xml": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/yang-patch+json": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/yang-patch+xml": {
+ "source": "iana",
+ "compressible": true
+ },
+ "application/yin+xml": {
+ "source": "iana",
+ "compressible": true,
+ "extensions": ["yin"]
+ },
+ "application/zip": {
+ "source": "iana",
+ "compressible": false,
+ "extensions": ["zip"]
+ },
+ "application/zlib": {
+ "source": "iana"
+ },
+ "application/zstd": {
+ "source": "iana"
+ },
+ "audio/1d-interleaved-parityfec": {
+ "source": "iana"
+ },
+ "audio/32kadpcm": {
+ "source": "iana"
+ },
+ "audio/3gpp": {
+ "source": "iana",
+ "compressible": false,
+ "extensions": ["3gpp"]
+ },
+ "audio/3gpp2": {
+ "source": "iana"
+ },
+ "audio/aac": {
+ "source": "iana"
+ },
+ "audio/ac3": {
+ "source": "iana"
+ },
+ "audio/adpcm": {
+ "source": "apache",
+ "extensions": ["adp"]
+ },
+ "audio/amr": {
+ "source": "iana",
+ "extensions": ["amr"]
+ },
+ "audio/amr-wb": {
+ "source": "iana"
+ },
+ "audio/amr-wb+": {
+ "source": "iana"
+ },
+ "audio/aptx": {
+ "source": "iana"
+ },
+ "audio/asc": {
+ "source": "iana"
+ },
+ "audio/atrac-advanced-lossless": {
+ "source": "iana"
+ },
+ "audio/atrac-x": {
+ "source": "iana"
+ },
+ "audio/atrac3": {
+ "source": "iana"
+ },
+ "audio/basic": {
+ "source": "iana",
+ "compressible": false,
+ "extensions": ["au","snd"]
+ },
+ "audio/bv16": {
+ "source": "iana"
+ },
+ "audio/bv32": {
+ "source": "iana"
+ },
+ "audio/clearmode": {
+ "source": "iana"
+ },
+ "audio/cn": {
+ "source": "iana"
+ },
+ "audio/dat12": {
+ "source": "iana"
+ },
+ "audio/dls": {
+ "source": "iana"
+ },
+ "audio/dsr-es201108": {
+ "source": "iana"
+ },
+ "audio/dsr-es202050": {
+ "source": "iana"
+ },
+ "audio/dsr-es202211": {
+ "source": "iana"
+ },
+ "audio/dsr-es202212": {
+ "source": "iana"
+ },
+ "audio/dv": {
+ "source": "iana"
+ },
+ "audio/dvi4": {
+ "source": "iana"
+ },
+ "audio/eac3": {
+ "source": "iana"
+ },
+ "audio/encaprtp": {
+ "source": "iana"
+ },
+ "audio/evrc": {
+ "source": "iana"
+ },
+ "audio/evrc-qcp": {
+ "source": "iana"
+ },
+ "audio/evrc0": {
+ "source": "iana"
+ },
+ "audio/evrc1": {
+ "source": "iana"
+ },
+ "audio/evrcb": {
+ "source": "iana"
+ },
+ "audio/evrcb0": {
+ "source": "iana"
+ },
+ "audio/evrcb1": {
+ "source": "iana"
+ },
+ "audio/evrcnw": {
+ "source": "iana"
+ },
+ "audio/evrcnw0": {
+ "source": "iana"
+ },
+ "audio/evrcnw1": {
+ "source": "iana"
+ },
+ "audio/evrcwb": {
+ "source": "iana"
+ },
+ "audio/evrcwb0": {
+ "source": "iana"
+ },
+ "audio/evrcwb1": {
+ "source": "iana"
+ },
+ "audio/evs": {
+ "source": "iana"
+ },
+ "audio/flexfec": {
+ "source": "iana"
+ },
+ "audio/fwdred": {
+ "source": "iana"
+ },
+ "audio/g711-0": {
+ "source": "iana"
+ },
+ "audio/g719": {
+ "source": "iana"
+ },
+ "audio/g722": {
+ "source": "iana"
+ },
+ "audio/g7221": {
+ "source": "iana"
+ },
+ "audio/g723": {
+ "source": "iana"
+ },
+ "audio/g726-16": {
+ "source": "iana"
+ },
+ "audio/g726-24": {
+ "source": "iana"
+ },
+ "audio/g726-32": {
+ "source": "iana"
+ },
+ "audio/g726-40": {
+ "source": "iana"
+ },
+ "audio/g728": {
+ "source": "iana"
+ },
+ "audio/g729": {
+ "source": "iana"
+ },
+ "audio/g7291": {
+ "source": "iana"
+ },
+ "audio/g729d": {
+ "source": "iana"
+ },
+ "audio/g729e": {
+ "source": "iana"
+ },
+ "audio/gsm": {
+ "source": "iana"
+ },
+ "audio/gsm-efr": {
+ "source": "iana"
+ },
+ "audio/gsm-hr-08": {
+ "source": "iana"
+ },
+ "audio/ilbc": {
+ "source": "iana"
+ },
+ "audio/ip-mr_v2.5": {
+ "source": "iana"
+ },
+ "audio/isac": {
+ "source": "apache"
+ },
+ "audio/l16": {
+ "source": "iana"
+ },
+ "audio/l20": {
+ "source": "iana"
+ },
+ "audio/l24": {
+ "source": "iana",
+ "compressible": false
+ },
+ "audio/l8": {
+ "source": "iana"
+ },
+ "audio/lpc": {
+ "source": "iana"
+ },
+ "audio/melp": {
+ "source": "iana"
+ },
+ "audio/melp1200": {
+ "source": "iana"
+ },
+ "audio/melp2400": {
+ "source": "iana"
+ },
+ "audio/melp600": {
+ "source": "iana"
+ },
+ "audio/mhas": {
+ "source": "iana"
+ },
+ "audio/midi": {
+ "source": "apache",
+ "extensions": ["mid","midi","kar","rmi"]
+ },
+ "audio/mobile-xmf": {
+ "source": "iana",
+ "extensions": ["mxmf"]
+ },
+ "audio/mp3": {
+ "compressible": false,
+ "extensions": ["mp3"]
+ },
+ "audio/mp4": {
+ "source": "iana",
+ "compressible": false,
+ "extensions": ["m4a","mp4a"]
+ },
+ "audio/mp4a-latm": {
+ "source": "iana"
+ },
+ "audio/mpa": {
+ "source": "iana"
+ },
+ "audio/mpa-robust": {
+ "source": "iana"
+ },
+ "audio/mpeg": {
+ "source": "iana",
+ "compressible": false,
+ "extensions": ["mpga","mp2","mp2a","mp3","m2a","m3a"]
+ },
+ "audio/mpeg4-generic": {
+ "source": "iana"
+ },
+ "audio/musepack": {
+ "source": "apache"
+ },
+ "audio/ogg": {
+ "source": "iana",
+ "compressible": false,
+ "extensions": ["oga","ogg","spx","opus"]
+ },
+ "audio/opus": {
+ "source": "iana"
+ },
+ "audio/parityfec": {
+ "source": "iana"
+ },
+ "audio/pcma": {
+ "source": "iana"
+ },
+ "audio/pcma-wb": {
+ "source": "iana"
+ },
+ "audio/pcmu": {
+ "source": "iana"
+ },
+ "audio/pcmu-wb": {
+ "source": "iana"
+ },
+ "audio/prs.sid": {
+ "source": "iana"
+ },
+ "audio/qcelp": {
+ "source": "iana"
+ },
+ "audio/raptorfec": {
+ "source": "iana"
+ },
+ "audio/red": {
+ "source": "iana"
+ },
+ "audio/rtp-enc-aescm128": {
+ "source": "iana"
+ },
+ "audio/rtp-midi": {
+ "source": "iana"
+ },
+ "audio/rtploopback": {
+ "source": "iana"
+ },
+ "audio/rtx": {
+ "source": "iana"
+ },
+ "audio/s3m": {
+ "source": "apache",
+ "extensions": ["s3m"]
+ },
+ "audio/scip": {
+ "source": "iana"
+ },
+ "audio/silk": {
+ "source": "apache",
+ "extensions": ["sil"]
+ },
+ "audio/smv": {
+ "source": "iana"
+ },
+ "audio/smv-qcp": {
+ "source": "iana"
+ },
+ "audio/smv0": {
+ "source": "iana"
+ },
+ "audio/sofa": {
+ "source": "iana"
+ },
+ "audio/sp-midi": {
+ "source": "iana"
+ },
+ "audio/speex": {
+ "source": "iana"
+ },
+ "audio/t140c": {
+ "source": "iana"
+ },
+ "audio/t38": {
+ "source": "iana"
+ },
+ "audio/telephone-event": {
+ "source": "iana"
+ },
+ "audio/tetra_acelp": {
+ "source": "iana"
+ },
+ "audio/tetra_acelp_bb": {
+ "source": "iana"
+ },
+ "audio/tone": {
+ "source": "iana"
+ },
+ "audio/tsvcis": {
+ "source": "iana"
+ },
+ "audio/uemclip": {
+ "source": "iana"
+ },
+ "audio/ulpfec": {
+ "source": "iana"
+ },
+ "audio/usac": {
+ "source": "iana"
+ },
+ "audio/vdvi": {
+ "source": "iana"
+ },
+ "audio/vmr-wb": {
+ "source": "iana"
+ },
+ "audio/vnd.3gpp.iufp": {
+ "source": "iana"
+ },
+ "audio/vnd.4sb": {
+ "source": "iana"
+ },
+ "audio/vnd.audiokoz": {
+ "source": "iana"
+ },
+ "audio/vnd.celp": {
+ "source": "iana"
+ },
+ "audio/vnd.cisco.nse": {
+ "source": "iana"
+ },
+ "audio/vnd.cmles.radio-events": {
+ "source": "iana"
+ },
+ "audio/vnd.cns.anp1": {
+ "source": "iana"
+ },
+ "audio/vnd.cns.inf1": {
+ "source": "iana"
+ },
+ "audio/vnd.dece.audio": {
+ "source": "iana",
+ "extensions": ["uva","uvva"]
+ },
+ "audio/vnd.digital-winds": {
+ "source": "iana",
+ "extensions": ["eol"]
+ },
+ "audio/vnd.dlna.adts": {
+ "source": "iana"
+ },
+ "audio/vnd.dolby.heaac.1": {
+ "source": "iana"
+ },
+ "audio/vnd.dolby.heaac.2": {
+ "source": "iana"
+ },
+ "audio/vnd.dolby.mlp": {
+ "source": "iana"
+ },
+ "audio/vnd.dolby.mps": {
+ "source": "iana"
+ },
+ "audio/vnd.dolby.pl2": {
+ "source": "iana"
+ },
+ "audio/vnd.dolby.pl2x": {
+ "source": "iana"
+ },
+ "audio/vnd.dolby.pl2z": {
+ "source": "iana"
+ },
+ "audio/vnd.dolby.pulse.1": {
+ "source": "iana"
+ },
+ "audio/vnd.dra": {
+ "source": "iana",
+ "extensions": ["dra"]
+ },
+ "audio/vnd.dts": {
+ "source": "iana",
+ "extensions": ["dts"]
+ },
+ "audio/vnd.dts.hd": {
+ "source": "iana",
+ "extensions": ["dtshd"]
+ },
+ "audio/vnd.dts.uhd": {
+ "source": "iana"
+ },
+ "audio/vnd.dvb.file": {
+ "source": "iana"
+ },
+ "audio/vnd.everad.plj": {
+ "source": "iana"
+ },
+ "audio/vnd.hns.audio": {
+ "source": "iana"
+ },
+ "audio/vnd.lucent.voice": {
+ "source": "iana",
+ "extensions": ["lvp"]
+ },
+ "audio/vnd.ms-playready.media.pya": {
+ "source": "iana",
+ "extensions": ["pya"]
+ },
+ "audio/vnd.nokia.mobile-xmf": {
+ "source": "iana"
+ },
+ "audio/vnd.nortel.vbk": {
+ "source": "iana"
+ },
+ "audio/vnd.nuera.ecelp4800": {
+ "source": "iana",
+ "extensions": ["ecelp4800"]
+ },
+ "audio/vnd.nuera.ecelp7470": {
+ "source": "iana",
+ "extensions": ["ecelp7470"]
+ },
+ "audio/vnd.nuera.ecelp9600": {
+ "source": "iana",
+ "extensions": ["ecelp9600"]
+ },
+ "audio/vnd.octel.sbc": {
+ "source": "iana"
+ },
+ "audio/vnd.presonus.multitrack": {
+ "source": "iana"
+ },
+ "audio/vnd.qcelp": {
+ "source": "iana"
+ },
+ "audio/vnd.rhetorex.32kadpcm": {
+ "source": "iana"
+ },
+ "audio/vnd.rip": {
+ "source": "iana",
+ "extensions": ["rip"]
+ },
+ "audio/vnd.rn-realaudio": {
+ "compressible": false
+ },
+ "audio/vnd.sealedmedia.softseal.mpeg": {
+ "source": "iana"
+ },
+ "audio/vnd.vmx.cvsd": {
+ "source": "iana"
+ },
+ "audio/vnd.wave": {
+ "compressible": false
+ },
+ "audio/vorbis": {
+ "source": "iana",
+ "compressible": false
+ },
+ "audio/vorbis-config": {
+ "source": "iana"
+ },
+ "audio/wav": {
+ "compressible": false,
+ "extensions": ["wav"]
+ },
+ "audio/wave": {
+ "compressible": false,
+ "extensions": ["wav"]
+ },
+ "audio/webm": {
+ "source": "apache",
+ "compressible": false,
+ "extensions": ["weba"]
+ },
+ "audio/x-aac": {
+ "source": "apache",
+ "compressible": false,
+ "extensions": ["aac"]
+ },
+ "audio/x-aiff": {
+ "source": "apache",
+ "extensions": ["aif","aiff","aifc"]
+ },
+ "audio/x-caf": {
+ "source": "apache",
+ "compressible": false,
+ "extensions": ["caf"]
+ },
+ "audio/x-flac": {
+ "source": "apache",
+ "extensions": ["flac"]
+ },
+ "audio/x-m4a": {
+ "source": "nginx",
+ "extensions": ["m4a"]
+ },
+ "audio/x-matroska": {
+ "source": "apache",
+ "extensions": ["mka"]
+ },
+ "audio/x-mpegurl": {
+ "source": "apache",
+ "extensions": ["m3u"]
+ },
+ "audio/x-ms-wax": {
+ "source": "apache",
+ "extensions": ["wax"]
+ },
+ "audio/x-ms-wma": {
+ "source": "apache",
+ "extensions": ["wma"]
+ },
+ "audio/x-pn-realaudio": {
+ "source": "apache",
+ "extensions": ["ram","ra"]
+ },
+ "audio/x-pn-realaudio-plugin": {
+ "source": "apache",
+ "extensions": ["rmp"]
+ },
+ "audio/x-realaudio": {
+ "source": "nginx",
+ "extensions": ["ra"]
+ },
+ "audio/x-tta": {
+ "source": "apache"
+ },
+ "audio/x-wav": {
+ "source": "apache",
+ "extensions": ["wav"]
+ },
+ "audio/xm": {
+ "source": "apache",
+ "extensions": ["xm"]
+ },
+ "chemical/x-cdx": {
+ "source": "apache",
+ "extensions": ["cdx"]
+ },
+ "chemical/x-cif": {
+ "source": "apache",
+ "extensions": ["cif"]
+ },
+ "chemical/x-cmdf": {
+ "source": "apache",
+ "extensions": ["cmdf"]
+ },
+ "chemical/x-cml": {
+ "source": "apache",
+ "extensions": ["cml"]
+ },
+ "chemical/x-csml": {
+ "source": "apache",
+ "extensions": ["csml"]
+ },
+ "chemical/x-pdb": {
+ "source": "apache"
+ },
+ "chemical/x-xyz": {
+ "source": "apache",
+ "extensions": ["xyz"]
+ },
+ "font/collection": {
+ "source": "iana",
+ "extensions": ["ttc"]
+ },
+ "font/otf": {
+ "source": "iana",
+ "compressible": true,
+ "extensions": ["otf"]
+ },
+ "font/sfnt": {
+ "source": "iana"
+ },
+ "font/ttf": {
+ "source": "iana",
+ "compressible": true,
+ "extensions": ["ttf"]
+ },
+ "font/woff": {
+ "source": "iana",
+ "extensions": ["woff"]
+ },
+ "font/woff2": {
+ "source": "iana",
+ "extensions": ["woff2"]
+ },
+ "image/aces": {
+ "source": "iana",
+ "extensions": ["exr"]
+ },
+ "image/apng": {
+ "compressible": false,
+ "extensions": ["apng"]
+ },
+ "image/avci": {
+ "source": "iana",
+ "extensions": ["avci"]
+ },
+ "image/avcs": {
+ "source": "iana",
+ "extensions": ["avcs"]
+ },
+ "image/avif": {
+ "source": "iana",
+ "compressible": false,
+ "extensions": ["avif"]
+ },
+ "image/bmp": {
+ "source": "iana",
+ "compressible": true,
+ "extensions": ["bmp"]
+ },
+ "image/cgm": {
+ "source": "iana",
+ "extensions": ["cgm"]
+ },
+ "image/dicom-rle": {
+ "source": "iana",
+ "extensions": ["drle"]
+ },
+ "image/emf": {
+ "source": "iana",
+ "extensions": ["emf"]
+ },
+ "image/fits": {
+ "source": "iana",
+ "extensions": ["fits"]
+ },
+ "image/g3fax": {
+ "source": "iana",
+ "extensions": ["g3"]
+ },
+ "image/gif": {
+ "source": "iana",
+ "compressible": false,
+ "extensions": ["gif"]
+ },
+ "image/heic": {
+ "source": "iana",
+ "extensions": ["heic"]
+ },
+ "image/heic-sequence": {
+ "source": "iana",
+ "extensions": ["heics"]
+ },
+ "image/heif": {
+ "source": "iana",
+ "extensions": ["heif"]
+ },
+ "image/heif-sequence": {
+ "source": "iana",
+ "extensions": ["heifs"]
+ },
+ "image/hej2k": {
+ "source": "iana",
+ "extensions": ["hej2"]
+ },
+ "image/hsj2": {
+ "source": "iana",
+ "extensions": ["hsj2"]
+ },
+ "image/ief": {
+ "source": "iana",
+ "extensions": ["ief"]
+ },
+ "image/jls": {
+ "source": "iana",
+ "extensions": ["jls"]
+ },
+ "image/jp2": {
+ "source": "iana",
+ "compressible": false,
+ "extensions": ["jp2","jpg2"]
+ },
+ "image/jpeg": {
+ "source": "iana",
+ "compressible": false,
+ "extensions": ["jpeg","jpg","jpe"]
+ },
+ "image/jph": {
+ "source": "iana",
+ "extensions": ["jph"]
+ },
+ "image/jphc": {
+ "source": "iana",
+ "extensions": ["jhc"]
+ },
+ "image/jpm": {
+ "source": "iana",
+ "compressible": false,
+ "extensions": ["jpm"]
+ },
+ "image/jpx": {
+ "source": "iana",
+ "compressible": false,
+ "extensions": ["jpx","jpf"]
+ },
+ "image/jxr": {
+ "source": "iana",
+ "extensions": ["jxr"]
+ },
+ "image/jxra": {
+ "source": "iana",
+ "extensions": ["jxra"]
+ },
+ "image/jxrs": {
+ "source": "iana",
+ "extensions": ["jxrs"]
+ },
+ "image/jxs": {
+ "source": "iana",
+ "extensions": ["jxs"]
+ },
+ "image/jxsc": {
+ "source": "iana",
+ "extensions": ["jxsc"]
+ },
+ "image/jxsi": {
+ "source": "iana",
+ "extensions": ["jxsi"]
+ },
+ "image/jxss": {
+ "source": "iana",
+ "extensions": ["jxss"]
+ },
+ "image/ktx": {
+ "source": "iana",
+ "extensions": ["ktx"]
+ },
+ "image/ktx2": {
+ "source": "iana",
+ "extensions": ["ktx2"]
+ },
+ "image/naplps": {
+ "source": "iana"
+ },
+ "image/pjpeg": {
+ "compressible": false
+ },
+ "image/png": {
+ "source": "iana",
+ "compressible": false,
+ "extensions": ["png"]
+ },
+ "image/prs.btif": {
+ "source": "iana",
+ "extensions": ["btif"]
+ },
+ "image/prs.pti": {
+ "source": "iana",
+ "extensions": ["pti"]
+ },
+ "image/pwg-raster": {
+ "source": "iana"
+ },
+ "image/sgi": {
+ "source": "apache",
+ "extensions": ["sgi"]
+ },
+ "image/svg+xml": {
+ "source": "iana",
+ "compressible": true,
+ "extensions": ["svg","svgz"]
+ },
+ "image/t38": {
+ "source": "iana",
+ "extensions": ["t38"]
+ },
+ "image/tiff": {
+ "source": "iana",
+ "compressible": false,
+ "extensions": ["tif","tiff"]
+ },
+ "image/tiff-fx": {
+ "source": "iana",
+ "extensions": ["tfx"]
+ },
+ "image/vnd.adobe.photoshop": {
+ "source": "iana",
+ "compressible": true,
+ "extensions": ["psd"]
+ },
+ "image/vnd.airzip.accelerator.azv": {
+ "source": "iana",
+ "extensions": ["azv"]
+ },
+ "image/vnd.cns.inf2": {
+ "source": "iana"
+ },
+ "image/vnd.dece.graphic": {
+ "source": "iana",
+ "extensions": ["uvi","uvvi","uvg","uvvg"]
+ },
+ "image/vnd.djvu": {
+ "source": "iana",
+ "extensions": ["djvu","djv"]
+ },
+ "image/vnd.dvb.subtitle": {
+ "source": "iana",
+ "extensions": ["sub"]
+ },
+ "image/vnd.dwg": {
+ "source": "iana",
+ "extensions": ["dwg"]
+ },
+ "image/vnd.dxf": {
+ "source": "iana",
+ "extensions": ["dxf"]
+ },
+ "image/vnd.fastbidsheet": {
+ "source": "iana",
+ "extensions": ["fbs"]
+ },
+ "image/vnd.fpx": {
+ "source": "iana",
+ "extensions": ["fpx"]
+ },
+ "image/vnd.fst": {
+ "source": "iana",
+ "extensions": ["fst"]
+ },
+ "image/vnd.fujixerox.edmics-mmr": {
+ "source": "iana",
+ "extensions": ["mmr"]
+ },
+ "image/vnd.fujixerox.edmics-rlc": {
+ "source": "iana",
+ "extensions": ["rlc"]
+ },
+ "image/vnd.globalgraphics.pgb": {
+ "source": "iana"
+ },
+ "image/vnd.microsoft.icon": {
+ "source": "iana",
+ "compressible": true,
+ "extensions": ["ico"]
+ },
+ "image/vnd.mix": {
+ "source": "iana"
+ },
+ "image/vnd.mozilla.apng": {
+ "source": "iana"
+ },
+ "image/vnd.ms-dds": {
+ "compressible": true,
+ "extensions": ["dds"]
+ },
+ "image/vnd.ms-modi": {
+ "source": "iana",
+ "extensions": ["mdi"]
+ },
+ "image/vnd.ms-photo": {
+ "source": "apache",
+ "extensions": ["wdp"]
+ },
+ "image/vnd.net-fpx": {
+ "source": "iana",
+ "extensions": ["npx"]
+ },
+ "image/vnd.pco.b16": {
+ "source": "iana",
+ "extensions": ["b16"]
+ },
+ "image/vnd.radiance": {
+ "source": "iana"
+ },
+ "image/vnd.sealed.png": {
+ "source": "iana"
+ },
+ "image/vnd.sealedmedia.softseal.gif": {
+ "source": "iana"
+ },
+ "image/vnd.sealedmedia.softseal.jpg": {
+ "source": "iana"
+ },
+ "image/vnd.svf": {
+ "source": "iana"
+ },
+ "image/vnd.tencent.tap": {
+ "source": "iana",
+ "extensions": ["tap"]
+ },
+ "image/vnd.valve.source.texture": {
+ "source": "iana",
+ "extensions": ["vtf"]
+ },
+ "image/vnd.wap.wbmp": {
+ "source": "iana",
+ "extensions": ["wbmp"]
+ },
+ "image/vnd.xiff": {
+ "source": "iana",
+ "extensions": ["xif"]
+ },
+ "image/vnd.zbrush.pcx": {
+ "source": "iana",
+ "extensions": ["pcx"]
+ },
+ "image/webp": {
+ "source": "apache",
+ "extensions": ["webp"]
+ },
+ "image/wmf": {
+ "source": "iana",
+ "extensions": ["wmf"]
+ },
+ "image/x-3ds": {
+ "source": "apache",
+ "extensions": ["3ds"]
+ },
+ "image/x-cmu-raster": {
+ "source": "apache",
+ "extensions": ["ras"]
+ },
+ "image/x-cmx": {
+ "source": "apache",
+ "extensions": ["cmx"]
+ },
+ "image/x-freehand": {
+ "source": "apache",
+ "extensions": ["fh","fhc","fh4","fh5","fh7"]
+ },
+ "image/x-icon": {
+ "source": "apache",
+ "compressible": true,
+ "extensions": ["ico"]
+ },
+ "image/x-jng": {
+ "source": "nginx",
+ "extensions": ["jng"]
+ },
+ "image/x-mrsid-image": {
+ "source": "apache",
+ "extensions": ["sid"]
+ },
+ "image/x-ms-bmp": {
+ "source": "nginx",
+ "compressible": true,
+ "extensions": ["bmp"]
+ },
+ "image/x-pcx": {
+ "source": "apache",
+ "extensions": ["pcx"]
+ },
+ "image/x-pict": {
+ "source": "apache",
+ "extensions": ["pic","pct"]
+ },
+ "image/x-portable-anymap": {
+ "source": "apache",
+ "extensions": ["pnm"]
+ },
+ "image/x-portable-bitmap": {
+ "source": "apache",
+ "extensions": ["pbm"]
+ },
+ "image/x-portable-graymap": {
+ "source": "apache",
+ "extensions": ["pgm"]
+ },
+ "image/x-portable-pixmap": {
+ "source": "apache",
+ "extensions": ["ppm"]
+ },
+ "image/x-rgb": {
+ "source": "apache",
+ "extensions": ["rgb"]
+ },
+ "image/x-tga": {
+ "source": "apache",
+ "extensions": ["tga"]
+ },
+ "image/x-xbitmap": {
+ "source": "apache",
+ "extensions": ["xbm"]
+ },
+ "image/x-xcf": {
+ "compressible": false
+ },
+ "image/x-xpixmap": {
+ "source": "apache",
+ "extensions": ["xpm"]
+ },
+ "image/x-xwindowdump": {
+ "source": "apache",
+ "extensions": ["xwd"]
+ },
+ "message/cpim": {
+ "source": "iana"
+ },
+ "message/delivery-status": {
+ "source": "iana"
+ },
+ "message/disposition-notification": {
+ "source": "iana",
+ "extensions": [
+ "disposition-notification"
+ ]
+ },
+ "message/external-body": {
+ "source": "iana"
+ },
+ "message/feedback-report": {
+ "source": "iana"
+ },
+ "message/global": {
+ "source": "iana",
+ "extensions": ["u8msg"]
+ },
+ "message/global-delivery-status": {
+ "source": "iana",
+ "extensions": ["u8dsn"]
+ },
+ "message/global-disposition-notification": {
+ "source": "iana",
+ "extensions": ["u8mdn"]
+ },
+ "message/global-headers": {
+ "source": "iana",
+ "extensions": ["u8hdr"]
+ },
+ "message/http": {
+ "source": "iana",
+ "compressible": false
+ },
+ "message/imdn+xml": {
+ "source": "iana",
+ "compressible": true
+ },
+ "message/news": {
+ "source": "iana"
+ },
+ "message/partial": {
+ "source": "iana",
+ "compressible": false
+ },
+ "message/rfc822": {
+ "source": "iana",
+ "compressible": true,
+ "extensions": ["eml","mime"]
+ },
+ "message/s-http": {
+ "source": "iana"
+ },
+ "message/sip": {
+ "source": "iana"
+ },
+ "message/sipfrag": {
+ "source": "iana"
+ },
+ "message/tracking-status": {
+ "source": "iana"
+ },
+ "message/vnd.si.simp": {
+ "source": "iana"
+ },
+ "message/vnd.wfa.wsc": {
+ "source": "iana",
+ "extensions": ["wsc"]
+ },
+ "model/3mf": {
+ "source": "iana",
+ "extensions": ["3mf"]
+ },
+ "model/e57": {
+ "source": "iana"
+ },
+ "model/gltf+json": {
+ "source": "iana",
+ "compressible": true,
+ "extensions": ["gltf"]
+ },
+ "model/gltf-binary": {
+ "source": "iana",
+ "compressible": true,
+ "extensions": ["glb"]
+ },
+ "model/iges": {
+ "source": "iana",
+ "compressible": false,
+ "extensions": ["igs","iges"]
+ },
+ "model/mesh": {
+ "source": "iana",
+ "compressible": false,
+ "extensions": ["msh","mesh","silo"]
+ },
+ "model/mtl": {
+ "source": "iana",
+ "extensions": ["mtl"]
+ },
+ "model/obj": {
+ "source": "iana",
+ "extensions": ["obj"]
+ },
+ "model/step": {
+ "source": "iana"
+ },
+ "model/step+xml": {
+ "source": "iana",
+ "compressible": true,
+ "extensions": ["stpx"]
+ },
+ "model/step+zip": {
+ "source": "iana",
+ "compressible": false,
+ "extensions": ["stpz"]
+ },
+ "model/step-xml+zip": {
+ "source": "iana",
+ "compressible": false,
+ "extensions": ["stpxz"]
+ },
+ "model/stl": {
+ "source": "iana",
+ "extensions": ["stl"]
+ },
+ "model/vnd.collada+xml": {
+ "source": "iana",
+ "compressible": true,
+ "extensions": ["dae"]
+ },
+ "model/vnd.dwf": {
+ "source": "iana",
+ "extensions": ["dwf"]
+ },
+ "model/vnd.flatland.3dml": {
+ "source": "iana"
+ },
+ "model/vnd.gdl": {
+ "source": "iana",
+ "extensions": ["gdl"]
+ },
+ "model/vnd.gs-gdl": {
+ "source": "apache"
+ },
+ "model/vnd.gs.gdl": {
+ "source": "iana"
+ },
+ "model/vnd.gtw": {
+ "source": "iana",
+ "extensions": ["gtw"]
+ },
+ "model/vnd.moml+xml": {
+ "source": "iana",
+ "compressible": true
+ },
+ "model/vnd.mts": {
+ "source": "iana",
+ "extensions": ["mts"]
+ },
+ "model/vnd.opengex": {
+ "source": "iana",
+ "extensions": ["ogex"]
+ },
+ "model/vnd.parasolid.transmit.binary": {
+ "source": "iana",
+ "extensions": ["x_b"]
+ },
+ "model/vnd.parasolid.transmit.text": {
+ "source": "iana",
+ "extensions": ["x_t"]
+ },
+ "model/vnd.pytha.pyox": {
+ "source": "iana"
+ },
+ "model/vnd.rosette.annotated-data-model": {
+ "source": "iana"
+ },
+ "model/vnd.sap.vds": {
+ "source": "iana",
+ "extensions": ["vds"]
+ },
+ "model/vnd.usdz+zip": {
+ "source": "iana",
+ "compressible": false,
+ "extensions": ["usdz"]
+ },
+ "model/vnd.valve.source.compiled-map": {
+ "source": "iana",
+ "extensions": ["bsp"]
+ },
+ "model/vnd.vtu": {
+ "source": "iana",
+ "extensions": ["vtu"]
+ },
+ "model/vrml": {
+ "source": "iana",
+ "compressible": false,
+ "extensions": ["wrl","vrml"]
+ },
+ "model/x3d+binary": {
+ "source": "apache",
+ "compressible": false,
+ "extensions": ["x3db","x3dbz"]
+ },
+ "model/x3d+fastinfoset": {
+ "source": "iana",
+ "extensions": ["x3db"]
+ },
+ "model/x3d+vrml": {
+ "source": "apache",
+ "compressible": false,
+ "extensions": ["x3dv","x3dvz"]
+ },
+ "model/x3d+xml": {
+ "source": "iana",
+ "compressible": true,
+ "extensions": ["x3d","x3dz"]
+ },
+ "model/x3d-vrml": {
+ "source": "iana",
+ "extensions": ["x3dv"]
+ },
+ "multipart/alternative": {
+ "source": "iana",
+ "compressible": false
+ },
+ "multipart/appledouble": {
+ "source": "iana"
+ },
+ "multipart/byteranges": {
+ "source": "iana"
+ },
+ "multipart/digest": {
+ "source": "iana"
+ },
+ "multipart/encrypted": {
+ "source": "iana",
+ "compressible": false
+ },
+ "multipart/form-data": {
+ "source": "iana",
+ "compressible": false
+ },
+ "multipart/header-set": {
+ "source": "iana"
+ },
+ "multipart/mixed": {
+ "source": "iana"
+ },
+ "multipart/multilingual": {
+ "source": "iana"
+ },
+ "multipart/parallel": {
+ "source": "iana"
+ },
+ "multipart/related": {
+ "source": "iana",
+ "compressible": false
+ },
+ "multipart/report": {
+ "source": "iana"
+ },
+ "multipart/signed": {
+ "source": "iana",
+ "compressible": false
+ },
+ "multipart/vnd.bint.med-plus": {
+ "source": "iana"
+ },
+ "multipart/voice-message": {
+ "source": "iana"
+ },
+ "multipart/x-mixed-replace": {
+ "source": "iana"
+ },
+ "text/1d-interleaved-parityfec": {
+ "source": "iana"
+ },
+ "text/cache-manifest": {
+ "source": "iana",
+ "compressible": true,
+ "extensions": ["appcache","manifest"]
+ },
+ "text/calendar": {
+ "source": "iana",
+ "extensions": ["ics","ifb"]
+ },
+ "text/calender": {
+ "compressible": true
+ },
+ "text/cmd": {
+ "compressible": true
+ },
+ "text/coffeescript": {
+ "extensions": ["coffee","litcoffee"]
+ },
+ "text/cql": {
+ "source": "iana"
+ },
+ "text/cql-expression": {
+ "source": "iana"
+ },
+ "text/cql-identifier": {
+ "source": "iana"
+ },
+ "text/css": {
+ "source": "iana",
+ "charset": "UTF-8",
+ "compressible": true,
+ "extensions": ["css"]
+ },
+ "text/csv": {
+ "source": "iana",
+ "compressible": true,
+ "extensions": ["csv"]
+ },
+ "text/csv-schema": {
+ "source": "iana"
+ },
+ "text/directory": {
+ "source": "iana"
+ },
+ "text/dns": {
+ "source": "iana"
+ },
+ "text/ecmascript": {
+ "source": "iana"
+ },
+ "text/encaprtp": {
+ "source": "iana"
+ },
+ "text/enriched": {
+ "source": "iana"
+ },
+ "text/fhirpath": {
+ "source": "iana"
+ },
+ "text/flexfec": {
+ "source": "iana"
+ },
+ "text/fwdred": {
+ "source": "iana"
+ },
+ "text/gff3": {
+ "source": "iana"
+ },
+ "text/grammar-ref-list": {
+ "source": "iana"
+ },
+ "text/html": {
+ "source": "iana",
+ "compressible": true,
+ "extensions": ["html","htm","shtml"]
+ },
+ "text/jade": {
+ "extensions": ["jade"]
+ },
+ "text/javascript": {
+ "source": "iana",
+ "compressible": true
+ },
+ "text/jcr-cnd": {
+ "source": "iana"
+ },
+ "text/jsx": {
+ "compressible": true,
+ "extensions": ["jsx"]
+ },
+ "text/less": {
+ "compressible": true,
+ "extensions": ["less"]
+ },
+ "text/markdown": {
+ "source": "iana",
+ "compressible": true,
+ "extensions": ["markdown","md"]
+ },
+ "text/mathml": {
+ "source": "nginx",
+ "extensions": ["mml"]
+ },
+ "text/mdx": {
+ "compressible": true,
+ "extensions": ["mdx"]
+ },
+ "text/mizar": {
+ "source": "iana"
+ },
+ "text/n3": {
+ "source": "iana",
+ "charset": "UTF-8",
+ "compressible": true,
+ "extensions": ["n3"]
+ },
+ "text/parameters": {
+ "source": "iana",
+ "charset": "UTF-8"
+ },
+ "text/parityfec": {
+ "source": "iana"
+ },
+ "text/plain": {
+ "source": "iana",
+ "compressible": true,
+ "extensions": ["txt","text","conf","def","list","log","in","ini"]
+ },
+ "text/provenance-notation": {
+ "source": "iana",
+ "charset": "UTF-8"
+ },
+ "text/prs.fallenstein.rst": {
+ "source": "iana"
+ },
+ "text/prs.lines.tag": {
+ "source": "iana",
+ "extensions": ["dsc"]
+ },
+ "text/prs.prop.logic": {
+ "source": "iana"
+ },
+ "text/raptorfec": {
+ "source": "iana"
+ },
+ "text/red": {
+ "source": "iana"
+ },
+ "text/rfc822-headers": {
+ "source": "iana"
+ },
+ "text/richtext": {
+ "source": "iana",
+ "compressible": true,
+ "extensions": ["rtx"]
+ },
+ "text/rtf": {
+ "source": "iana",
+ "compressible": true,
+ "extensions": ["rtf"]
+ },
+ "text/rtp-enc-aescm128": {
+ "source": "iana"
+ },
+ "text/rtploopback": {
+ "source": "iana"
+ },
+ "text/rtx": {
+ "source": "iana"
+ },
+ "text/sgml": {
+ "source": "iana",
+ "extensions": ["sgml","sgm"]
+ },
+ "text/shaclc": {
+ "source": "iana"
+ },
+ "text/shex": {
+ "source": "iana",
+ "extensions": ["shex"]
+ },
+ "text/slim": {
+ "extensions": ["slim","slm"]
+ },
+ "text/spdx": {
+ "source": "iana",
+ "extensions": ["spdx"]
+ },
+ "text/strings": {
+ "source": "iana"
+ },
+ "text/stylus": {
+ "extensions": ["stylus","styl"]
+ },
+ "text/t140": {
+ "source": "iana"
+ },
+ "text/tab-separated-values": {
+ "source": "iana",
+ "compressible": true,
+ "extensions": ["tsv"]
+ },
+ "text/troff": {
+ "source": "iana",
+ "extensions": ["t","tr","roff","man","me","ms"]
+ },
+ "text/turtle": {
+ "source": "iana",
+ "charset": "UTF-8",
+ "extensions": ["ttl"]
+ },
+ "text/ulpfec": {
+ "source": "iana"
+ },
+ "text/uri-list": {
+ "source": "iana",
+ "compressible": true,
+ "extensions": ["uri","uris","urls"]
+ },
+ "text/vcard": {
+ "source": "iana",
+ "compressible": true,
+ "extensions": ["vcard"]
+ },
+ "text/vnd.a": {
+ "source": "iana"
+ },
+ "text/vnd.abc": {
+ "source": "iana"
+ },
+ "text/vnd.ascii-art": {
+ "source": "iana"
+ },
+ "text/vnd.curl": {
+ "source": "iana",
+ "extensions": ["curl"]
+ },
+ "text/vnd.curl.dcurl": {
+ "source": "apache",
+ "extensions": ["dcurl"]
+ },
+ "text/vnd.curl.mcurl": {
+ "source": "apache",
+ "extensions": ["mcurl"]
+ },
+ "text/vnd.curl.scurl": {
+ "source": "apache",
+ "extensions": ["scurl"]
+ },
+ "text/vnd.debian.copyright": {
+ "source": "iana",
+ "charset": "UTF-8"
+ },
+ "text/vnd.dmclientscript": {
+ "source": "iana"
+ },
+ "text/vnd.dvb.subtitle": {
+ "source": "iana",
+ "extensions": ["sub"]
+ },
+ "text/vnd.esmertec.theme-descriptor": {
+ "source": "iana",
+ "charset": "UTF-8"
+ },
+ "text/vnd.familysearch.gedcom": {
+ "source": "iana",
+ "extensions": ["ged"]
+ },
+ "text/vnd.ficlab.flt": {
+ "source": "iana"
+ },
+ "text/vnd.fly": {
+ "source": "iana",
+ "extensions": ["fly"]
+ },
+ "text/vnd.fmi.flexstor": {
+ "source": "iana",
+ "extensions": ["flx"]
+ },
+ "text/vnd.gml": {
+ "source": "iana"
+ },
+ "text/vnd.graphviz": {
+ "source": "iana",
+ "extensions": ["gv"]
+ },
+ "text/vnd.hans": {
+ "source": "iana"
+ },
+ "text/vnd.hgl": {
+ "source": "iana"
+ },
+ "text/vnd.in3d.3dml": {
+ "source": "iana",
+ "extensions": ["3dml"]
+ },
+ "text/vnd.in3d.spot": {
+ "source": "iana",
+ "extensions": ["spot"]
+ },
+ "text/vnd.iptc.newsml": {
+ "source": "iana"
+ },
+ "text/vnd.iptc.nitf": {
+ "source": "iana"
+ },
+ "text/vnd.latex-z": {
+ "source": "iana"
+ },
+ "text/vnd.motorola.reflex": {
+ "source": "iana"
+ },
+ "text/vnd.ms-mediapackage": {
+ "source": "iana"
+ },
+ "text/vnd.net2phone.commcenter.command": {
+ "source": "iana"
+ },
+ "text/vnd.radisys.msml-basic-layout": {
+ "source": "iana"
+ },
+ "text/vnd.senx.warpscript": {
+ "source": "iana"
+ },
+ "text/vnd.si.uricatalogue": {
+ "source": "iana"
+ },
+ "text/vnd.sosi": {
+ "source": "iana"
+ },
+ "text/vnd.sun.j2me.app-descriptor": {
+ "source": "iana",
+ "charset": "UTF-8",
+ "extensions": ["jad"]
+ },
+ "text/vnd.trolltech.linguist": {
+ "source": "iana",
+ "charset": "UTF-8"
+ },
+ "text/vnd.wap.si": {
+ "source": "iana"
+ },
+ "text/vnd.wap.sl": {
+ "source": "iana"
+ },
+ "text/vnd.wap.wml": {
+ "source": "iana",
+ "extensions": ["wml"]
+ },
+ "text/vnd.wap.wmlscript": {
+ "source": "iana",
+ "extensions": ["wmls"]
+ },
+ "text/vtt": {
+ "source": "iana",
+ "charset": "UTF-8",
+ "compressible": true,
+ "extensions": ["vtt"]
+ },
+ "text/x-asm": {
+ "source": "apache",
+ "extensions": ["s","asm"]
+ },
+ "text/x-c": {
+ "source": "apache",
+ "extensions": ["c","cc","cxx","cpp","h","hh","dic"]
+ },
+ "text/x-component": {
+ "source": "nginx",
+ "extensions": ["htc"]
+ },
+ "text/x-fortran": {
+ "source": "apache",
+ "extensions": ["f","for","f77","f90"]
+ },
+ "text/x-gwt-rpc": {
+ "compressible": true
+ },
+ "text/x-handlebars-template": {
+ "extensions": ["hbs"]
+ },
+ "text/x-java-source": {
+ "source": "apache",
+ "extensions": ["java"]
+ },
+ "text/x-jquery-tmpl": {
+ "compressible": true
+ },
+ "text/x-lua": {
+ "extensions": ["lua"]
+ },
+ "text/x-markdown": {
+ "compressible": true,
+ "extensions": ["mkd"]
+ },
+ "text/x-nfo": {
+ "source": "apache",
+ "extensions": ["nfo"]
+ },
+ "text/x-opml": {
+ "source": "apache",
+ "extensions": ["opml"]
+ },
+ "text/x-org": {
+ "compressible": true,
+ "extensions": ["org"]
+ },
+ "text/x-pascal": {
+ "source": "apache",
+ "extensions": ["p","pas"]
+ },
+ "text/x-processing": {
+ "compressible": true,
+ "extensions": ["pde"]
+ },
+ "text/x-sass": {
+ "extensions": ["sass"]
+ },
+ "text/x-scss": {
+ "extensions": ["scss"]
+ },
+ "text/x-setext": {
+ "source": "apache",
+ "extensions": ["etx"]
+ },
+ "text/x-sfv": {
+ "source": "apache",
+ "extensions": ["sfv"]
+ },
+ "text/x-suse-ymp": {
+ "compressible": true,
+ "extensions": ["ymp"]
+ },
+ "text/x-uuencode": {
+ "source": "apache",
+ "extensions": ["uu"]
+ },
+ "text/x-vcalendar": {
+ "source": "apache",
+ "extensions": ["vcs"]
+ },
+ "text/x-vcard": {
+ "source": "apache",
+ "extensions": ["vcf"]
+ },
+ "text/xml": {
+ "source": "iana",
+ "compressible": true,
+ "extensions": ["xml"]
+ },
+ "text/xml-external-parsed-entity": {
+ "source": "iana"
+ },
+ "text/yaml": {
+ "compressible": true,
+ "extensions": ["yaml","yml"]
+ },
+ "video/1d-interleaved-parityfec": {
+ "source": "iana"
+ },
+ "video/3gpp": {
+ "source": "iana",
+ "extensions": ["3gp","3gpp"]
+ },
+ "video/3gpp-tt": {
+ "source": "iana"
+ },
+ "video/3gpp2": {
+ "source": "iana",
+ "extensions": ["3g2"]
+ },
+ "video/av1": {
+ "source": "iana"
+ },
+ "video/bmpeg": {
+ "source": "iana"
+ },
+ "video/bt656": {
+ "source": "iana"
+ },
+ "video/celb": {
+ "source": "iana"
+ },
+ "video/dv": {
+ "source": "iana"
+ },
+ "video/encaprtp": {
+ "source": "iana"
+ },
+ "video/ffv1": {
+ "source": "iana"
+ },
+ "video/flexfec": {
+ "source": "iana"
+ },
+ "video/h261": {
+ "source": "iana",
+ "extensions": ["h261"]
+ },
+ "video/h263": {
+ "source": "iana",
+ "extensions": ["h263"]
+ },
+ "video/h263-1998": {
+ "source": "iana"
+ },
+ "video/h263-2000": {
+ "source": "iana"
+ },
+ "video/h264": {
+ "source": "iana",
+ "extensions": ["h264"]
+ },
+ "video/h264-rcdo": {
+ "source": "iana"
+ },
+ "video/h264-svc": {
+ "source": "iana"
+ },
+ "video/h265": {
+ "source": "iana"
+ },
+ "video/iso.segment": {
+ "source": "iana",
+ "extensions": ["m4s"]
+ },
+ "video/jpeg": {
+ "source": "iana",
+ "extensions": ["jpgv"]
+ },
+ "video/jpeg2000": {
+ "source": "iana"
+ },
+ "video/jpm": {
+ "source": "apache",
+ "extensions": ["jpm","jpgm"]
+ },
+ "video/jxsv": {
+ "source": "iana"
+ },
+ "video/mj2": {
+ "source": "iana",
+ "extensions": ["mj2","mjp2"]
+ },
+ "video/mp1s": {
+ "source": "iana"
+ },
+ "video/mp2p": {
+ "source": "iana"
+ },
+ "video/mp2t": {
+ "source": "iana",
+ "extensions": ["ts"]
+ },
+ "video/mp4": {
+ "source": "iana",
+ "compressible": false,
+ "extensions": ["mp4","mp4v","mpg4"]
+ },
+ "video/mp4v-es": {
+ "source": "iana"
+ },
+ "video/mpeg": {
+ "source": "iana",
+ "compressible": false,
+ "extensions": ["mpeg","mpg","mpe","m1v","m2v"]
+ },
+ "video/mpeg4-generic": {
+ "source": "iana"
+ },
+ "video/mpv": {
+ "source": "iana"
+ },
+ "video/nv": {
+ "source": "iana"
+ },
+ "video/ogg": {
+ "source": "iana",
+ "compressible": false,
+ "extensions": ["ogv"]
+ },
+ "video/parityfec": {
+ "source": "iana"
+ },
+ "video/pointer": {
+ "source": "iana"
+ },
+ "video/quicktime": {
+ "source": "iana",
+ "compressible": false,
+ "extensions": ["qt","mov"]
+ },
+ "video/raptorfec": {
+ "source": "iana"
+ },
+ "video/raw": {
+ "source": "iana"
+ },
+ "video/rtp-enc-aescm128": {
+ "source": "iana"
+ },
+ "video/rtploopback": {
+ "source": "iana"
+ },
+ "video/rtx": {
+ "source": "iana"
+ },
+ "video/scip": {
+ "source": "iana"
+ },
+ "video/smpte291": {
+ "source": "iana"
+ },
+ "video/smpte292m": {
+ "source": "iana"
+ },
+ "video/ulpfec": {
+ "source": "iana"
+ },
+ "video/vc1": {
+ "source": "iana"
+ },
+ "video/vc2": {
+ "source": "iana"
+ },
+ "video/vnd.cctv": {
+ "source": "iana"
+ },
+ "video/vnd.dece.hd": {
+ "source": "iana",
+ "extensions": ["uvh","uvvh"]
+ },
+ "video/vnd.dece.mobile": {
+ "source": "iana",
+ "extensions": ["uvm","uvvm"]
+ },
+ "video/vnd.dece.mp4": {
+ "source": "iana"
+ },
+ "video/vnd.dece.pd": {
+ "source": "iana",
+ "extensions": ["uvp","uvvp"]
+ },
+ "video/vnd.dece.sd": {
+ "source": "iana",
+ "extensions": ["uvs","uvvs"]
+ },
+ "video/vnd.dece.video": {
+ "source": "iana",
+ "extensions": ["uvv","uvvv"]
+ },
+ "video/vnd.directv.mpeg": {
+ "source": "iana"
+ },
+ "video/vnd.directv.mpeg-tts": {
+ "source": "iana"
+ },
+ "video/vnd.dlna.mpeg-tts": {
+ "source": "iana"
+ },
+ "video/vnd.dvb.file": {
+ "source": "iana",
+ "extensions": ["dvb"]
+ },
+ "video/vnd.fvt": {
+ "source": "iana",
+ "extensions": ["fvt"]
+ },
+ "video/vnd.hns.video": {
+ "source": "iana"
+ },
+ "video/vnd.iptvforum.1dparityfec-1010": {
+ "source": "iana"
+ },
+ "video/vnd.iptvforum.1dparityfec-2005": {
+ "source": "iana"
+ },
+ "video/vnd.iptvforum.2dparityfec-1010": {
+ "source": "iana"
+ },
+ "video/vnd.iptvforum.2dparityfec-2005": {
+ "source": "iana"
+ },
+ "video/vnd.iptvforum.ttsavc": {
+ "source": "iana"
+ },
+ "video/vnd.iptvforum.ttsmpeg2": {
+ "source": "iana"
+ },
+ "video/vnd.motorola.video": {
+ "source": "iana"
+ },
+ "video/vnd.motorola.videop": {
+ "source": "iana"
+ },
+ "video/vnd.mpegurl": {
+ "source": "iana",
+ "extensions": ["mxu","m4u"]
+ },
+ "video/vnd.ms-playready.media.pyv": {
+ "source": "iana",
+ "extensions": ["pyv"]
+ },
+ "video/vnd.nokia.interleaved-multimedia": {
+ "source": "iana"
+ },
+ "video/vnd.nokia.mp4vr": {
+ "source": "iana"
+ },
+ "video/vnd.nokia.videovoip": {
+ "source": "iana"
+ },
+ "video/vnd.objectvideo": {
+ "source": "iana"
+ },
+ "video/vnd.radgamettools.bink": {
+ "source": "iana"
+ },
+ "video/vnd.radgamettools.smacker": {
+ "source": "iana"
+ },
+ "video/vnd.sealed.mpeg1": {
+ "source": "iana"
+ },
+ "video/vnd.sealed.mpeg4": {
+ "source": "iana"
+ },
+ "video/vnd.sealed.swf": {
+ "source": "iana"
+ },
+ "video/vnd.sealedmedia.softseal.mov": {
+ "source": "iana"
+ },
+ "video/vnd.uvvu.mp4": {
+ "source": "iana",
+ "extensions": ["uvu","uvvu"]
+ },
+ "video/vnd.vivo": {
+ "source": "iana",
+ "extensions": ["viv"]
+ },
+ "video/vnd.youtube.yt": {
+ "source": "iana"
+ },
+ "video/vp8": {
+ "source": "iana"
+ },
+ "video/vp9": {
+ "source": "iana"
+ },
+ "video/webm": {
+ "source": "apache",
+ "compressible": false,
+ "extensions": ["webm"]
+ },
+ "video/x-f4v": {
+ "source": "apache",
+ "extensions": ["f4v"]
+ },
+ "video/x-fli": {
+ "source": "apache",
+ "extensions": ["fli"]
+ },
+ "video/x-flv": {
+ "source": "apache",
+ "compressible": false,
+ "extensions": ["flv"]
+ },
+ "video/x-m4v": {
+ "source": "apache",
+ "extensions": ["m4v"]
+ },
+ "video/x-matroska": {
+ "source": "apache",
+ "compressible": false,
+ "extensions": ["mkv","mk3d","mks"]
+ },
+ "video/x-mng": {
+ "source": "apache",
+ "extensions": ["mng"]
+ },
+ "video/x-ms-asf": {
+ "source": "apache",
+ "extensions": ["asf","asx"]
+ },
+ "video/x-ms-vob": {
+ "source": "apache",
+ "extensions": ["vob"]
+ },
+ "video/x-ms-wm": {
+ "source": "apache",
+ "extensions": ["wm"]
+ },
+ "video/x-ms-wmv": {
+ "source": "apache",
+ "compressible": false,
+ "extensions": ["wmv"]
+ },
+ "video/x-ms-wmx": {
+ "source": "apache",
+ "extensions": ["wmx"]
+ },
+ "video/x-ms-wvx": {
+ "source": "apache",
+ "extensions": ["wvx"]
+ },
+ "video/x-msvideo": {
+ "source": "apache",
+ "extensions": ["avi"]
+ },
+ "video/x-sgi-movie": {
+ "source": "apache",
+ "extensions": ["movie"]
+ },
+ "video/x-smv": {
+ "source": "apache",
+ "extensions": ["smv"]
+ },
+ "x-conference/x-cooltalk": {
+ "source": "apache",
+ "extensions": ["ice"]
+ },
+ "x-shader/x-fragment": {
+ "compressible": true
+ },
+ "x-shader/x-vertex": {
+ "compressible": true
+ }
+}
diff --git a/.output/server/node_modules/mime-db/index.js b/.output/server/node_modules/mime-db/index.js
new file mode 100644
index 0000000..ec2be30
--- /dev/null
+++ b/.output/server/node_modules/mime-db/index.js
@@ -0,0 +1,12 @@
+/*!
+ * mime-db
+ * Copyright(c) 2014 Jonathan Ong
+ * Copyright(c) 2015-2022 Douglas Christopher Wilson
+ * MIT Licensed
+ */
+
+/**
+ * Module exports.
+ */
+
+module.exports = require('./db.json')
diff --git a/.output/server/node_modules/mime-db/package.json b/.output/server/node_modules/mime-db/package.json
new file mode 100644
index 0000000..b9d5786
--- /dev/null
+++ b/.output/server/node_modules/mime-db/package.json
@@ -0,0 +1,60 @@
+{
+ "name": "mime-db",
+ "description": "Media Type Database",
+ "version": "1.52.0",
+ "contributors": [
+ "Douglas Christopher Wilson ",
+ "Jonathan Ong (http://jongleberry.com)",
+ "Robert Kieffer (http://github.com/broofa)"
+ ],
+ "license": "MIT",
+ "keywords": [
+ "mime",
+ "db",
+ "type",
+ "types",
+ "database",
+ "charset",
+ "charsets"
+ ],
+ "repository": "jshttp/mime-db",
+ "devDependencies": {
+ "bluebird": "3.7.2",
+ "co": "4.6.0",
+ "cogent": "1.0.1",
+ "csv-parse": "4.16.3",
+ "eslint": "7.32.0",
+ "eslint-config-standard": "15.0.1",
+ "eslint-plugin-import": "2.25.4",
+ "eslint-plugin-markdown": "2.2.1",
+ "eslint-plugin-node": "11.1.0",
+ "eslint-plugin-promise": "5.1.1",
+ "eslint-plugin-standard": "4.1.0",
+ "gnode": "0.1.2",
+ "media-typer": "1.1.0",
+ "mocha": "9.2.1",
+ "nyc": "15.1.0",
+ "raw-body": "2.5.0",
+ "stream-to-array": "2.3.0"
+ },
+ "files": [
+ "HISTORY.md",
+ "LICENSE",
+ "README.md",
+ "db.json",
+ "index.js"
+ ],
+ "engines": {
+ "node": ">= 0.6"
+ },
+ "scripts": {
+ "build": "node scripts/build",
+ "fetch": "node scripts/fetch-apache && gnode scripts/fetch-iana && node scripts/fetch-nginx",
+ "lint": "eslint .",
+ "test": "mocha --reporter spec --bail --check-leaks test/",
+ "test-ci": "nyc --reporter=lcov --reporter=text npm test",
+ "test-cov": "nyc --reporter=html --reporter=text npm test",
+ "update": "npm run fetch && npm run build",
+ "version": "node scripts/version-history.js && git add HISTORY.md"
+ }
+}
\ No newline at end of file
diff --git a/.output/server/node_modules/mime-types/index.js b/.output/server/node_modules/mime-types/index.js
new file mode 100644
index 0000000..b9f34d5
--- /dev/null
+++ b/.output/server/node_modules/mime-types/index.js
@@ -0,0 +1,188 @@
+/*!
+ * mime-types
+ * Copyright(c) 2014 Jonathan Ong
+ * Copyright(c) 2015 Douglas Christopher Wilson
+ * MIT Licensed
+ */
+
+'use strict'
+
+/**
+ * Module dependencies.
+ * @private
+ */
+
+var db = require('mime-db')
+var extname = require('path').extname
+
+/**
+ * Module variables.
+ * @private
+ */
+
+var EXTRACT_TYPE_REGEXP = /^\s*([^;\s]*)(?:;|\s|$)/
+var TEXT_TYPE_REGEXP = /^text\//i
+
+/**
+ * Module exports.
+ * @public
+ */
+
+exports.charset = charset
+exports.charsets = { lookup: charset }
+exports.contentType = contentType
+exports.extension = extension
+exports.extensions = Object.create(null)
+exports.lookup = lookup
+exports.types = Object.create(null)
+
+// Populate the extensions/types maps
+populateMaps(exports.extensions, exports.types)
+
+/**
+ * Get the default charset for a MIME type.
+ *
+ * @param {string} type
+ * @return {boolean|string}
+ */
+
+function charset (type) {
+ if (!type || typeof type !== 'string') {
+ return false
+ }
+
+ // TODO: use media-typer
+ var match = EXTRACT_TYPE_REGEXP.exec(type)
+ var mime = match && db[match[1].toLowerCase()]
+
+ if (mime && mime.charset) {
+ return mime.charset
+ }
+
+ // default text/* to utf-8
+ if (match && TEXT_TYPE_REGEXP.test(match[1])) {
+ return 'UTF-8'
+ }
+
+ return false
+}
+
+/**
+ * Create a full Content-Type header given a MIME type or extension.
+ *
+ * @param {string} str
+ * @return {boolean|string}
+ */
+
+function contentType (str) {
+ // TODO: should this even be in this module?
+ if (!str || typeof str !== 'string') {
+ return false
+ }
+
+ var mime = str.indexOf('/') === -1
+ ? exports.lookup(str)
+ : str
+
+ if (!mime) {
+ return false
+ }
+
+ // TODO: use content-type or other module
+ if (mime.indexOf('charset') === -1) {
+ var charset = exports.charset(mime)
+ if (charset) mime += '; charset=' + charset.toLowerCase()
+ }
+
+ return mime
+}
+
+/**
+ * Get the default extension for a MIME type.
+ *
+ * @param {string} type
+ * @return {boolean|string}
+ */
+
+function extension (type) {
+ if (!type || typeof type !== 'string') {
+ return false
+ }
+
+ // TODO: use media-typer
+ var match = EXTRACT_TYPE_REGEXP.exec(type)
+
+ // get extensions
+ var exts = match && exports.extensions[match[1].toLowerCase()]
+
+ if (!exts || !exts.length) {
+ return false
+ }
+
+ return exts[0]
+}
+
+/**
+ * Lookup the MIME type for a file path/extension.
+ *
+ * @param {string} path
+ * @return {boolean|string}
+ */
+
+function lookup (path) {
+ if (!path || typeof path !== 'string') {
+ return false
+ }
+
+ // get the extension ("ext" or ".ext" or full path)
+ var extension = extname('x.' + path)
+ .toLowerCase()
+ .substr(1)
+
+ if (!extension) {
+ return false
+ }
+
+ return exports.types[extension] || false
+}
+
+/**
+ * Populate the extensions and types maps.
+ * @private
+ */
+
+function populateMaps (extensions, types) {
+ // source preference (least -> most)
+ var preference = ['nginx', 'apache', undefined, 'iana']
+
+ Object.keys(db).forEach(function forEachMimeType (type) {
+ var mime = db[type]
+ var exts = mime.extensions
+
+ if (!exts || !exts.length) {
+ return
+ }
+
+ // mime -> extensions
+ extensions[type] = exts
+
+ // extension -> mime
+ for (var i = 0; i < exts.length; i++) {
+ var extension = exts[i]
+
+ if (types[extension]) {
+ var from = preference.indexOf(db[types[extension]].source)
+ var to = preference.indexOf(mime.source)
+
+ if (types[extension] !== 'application/octet-stream' &&
+ (from > to || (from === to && types[extension].substr(0, 12) === 'application/'))) {
+ // skip the remapping
+ continue
+ }
+ }
+
+ // set the extension -> mime
+ types[extension] = type
+ }
+ })
+}
diff --git a/.output/server/node_modules/mime-types/package.json b/.output/server/node_modules/mime-types/package.json
new file mode 100644
index 0000000..70409da
--- /dev/null
+++ b/.output/server/node_modules/mime-types/package.json
@@ -0,0 +1,44 @@
+{
+ "name": "mime-types",
+ "description": "The ultimate javascript content-type utility.",
+ "version": "2.1.35",
+ "contributors": [
+ "Douglas Christopher Wilson ",
+ "Jeremiah Senkpiel (https://searchbeam.jit.su)",
+ "Jonathan Ong (http://jongleberry.com)"
+ ],
+ "license": "MIT",
+ "keywords": [
+ "mime",
+ "types"
+ ],
+ "repository": "jshttp/mime-types",
+ "dependencies": {
+ "mime-db": "1.52.0"
+ },
+ "devDependencies": {
+ "eslint": "7.32.0",
+ "eslint-config-standard": "14.1.1",
+ "eslint-plugin-import": "2.25.4",
+ "eslint-plugin-markdown": "2.2.1",
+ "eslint-plugin-node": "11.1.0",
+ "eslint-plugin-promise": "5.2.0",
+ "eslint-plugin-standard": "4.1.0",
+ "mocha": "9.2.2",
+ "nyc": "15.1.0"
+ },
+ "files": [
+ "HISTORY.md",
+ "LICENSE",
+ "index.js"
+ ],
+ "engines": {
+ "node": ">= 0.6"
+ },
+ "scripts": {
+ "lint": "eslint .",
+ "test": "mocha --reporter spec test/test.js",
+ "test-ci": "nyc --reporter=lcov --reporter=text npm test",
+ "test-cov": "nyc --reporter=html --reporter=text npm test"
+ }
+}
\ No newline at end of file
diff --git a/.output/server/node_modules/ms/index.js b/.output/server/node_modules/ms/index.js
new file mode 100644
index 0000000..c4498bc
--- /dev/null
+++ b/.output/server/node_modules/ms/index.js
@@ -0,0 +1,162 @@
+/**
+ * Helpers.
+ */
+
+var s = 1000;
+var m = s * 60;
+var h = m * 60;
+var d = h * 24;
+var w = d * 7;
+var y = d * 365.25;
+
+/**
+ * Parse or format the given `val`.
+ *
+ * Options:
+ *
+ * - `long` verbose formatting [false]
+ *
+ * @param {String|Number} val
+ * @param {Object} [options]
+ * @throws {Error} throw an error if val is not a non-empty string or a number
+ * @return {String|Number}
+ * @api public
+ */
+
+module.exports = function(val, options) {
+ options = options || {};
+ var type = typeof val;
+ if (type === 'string' && val.length > 0) {
+ return parse(val);
+ } else if (type === 'number' && isFinite(val)) {
+ return options.long ? fmtLong(val) : fmtShort(val);
+ }
+ throw new Error(
+ 'val is not a non-empty string or a valid number. val=' +
+ JSON.stringify(val)
+ );
+};
+
+/**
+ * Parse the given `str` and return milliseconds.
+ *
+ * @param {String} str
+ * @return {Number}
+ * @api private
+ */
+
+function parse(str) {
+ str = String(str);
+ if (str.length > 100) {
+ return;
+ }
+ var match = /^(-?(?:\d+)?\.?\d+) *(milliseconds?|msecs?|ms|seconds?|secs?|s|minutes?|mins?|m|hours?|hrs?|h|days?|d|weeks?|w|years?|yrs?|y)?$/i.exec(
+ str
+ );
+ if (!match) {
+ return;
+ }
+ var n = parseFloat(match[1]);
+ var type = (match[2] || 'ms').toLowerCase();
+ switch (type) {
+ case 'years':
+ case 'year':
+ case 'yrs':
+ case 'yr':
+ case 'y':
+ return n * y;
+ case 'weeks':
+ case 'week':
+ case 'w':
+ return n * w;
+ case 'days':
+ case 'day':
+ case 'd':
+ return n * d;
+ case 'hours':
+ case 'hour':
+ case 'hrs':
+ case 'hr':
+ case 'h':
+ return n * h;
+ case 'minutes':
+ case 'minute':
+ case 'mins':
+ case 'min':
+ case 'm':
+ return n * m;
+ case 'seconds':
+ case 'second':
+ case 'secs':
+ case 'sec':
+ case 's':
+ return n * s;
+ case 'milliseconds':
+ case 'millisecond':
+ case 'msecs':
+ case 'msec':
+ case 'ms':
+ return n;
+ default:
+ return undefined;
+ }
+}
+
+/**
+ * Short format for `ms`.
+ *
+ * @param {Number} ms
+ * @return {String}
+ * @api private
+ */
+
+function fmtShort(ms) {
+ var msAbs = Math.abs(ms);
+ if (msAbs >= d) {
+ return Math.round(ms / d) + 'd';
+ }
+ if (msAbs >= h) {
+ return Math.round(ms / h) + 'h';
+ }
+ if (msAbs >= m) {
+ return Math.round(ms / m) + 'm';
+ }
+ if (msAbs >= s) {
+ return Math.round(ms / s) + 's';
+ }
+ return ms + 'ms';
+}
+
+/**
+ * Long format for `ms`.
+ *
+ * @param {Number} ms
+ * @return {String}
+ * @api private
+ */
+
+function fmtLong(ms) {
+ var msAbs = Math.abs(ms);
+ if (msAbs >= d) {
+ return plural(ms, msAbs, d, 'day');
+ }
+ if (msAbs >= h) {
+ return plural(ms, msAbs, h, 'hour');
+ }
+ if (msAbs >= m) {
+ return plural(ms, msAbs, m, 'minute');
+ }
+ if (msAbs >= s) {
+ return plural(ms, msAbs, s, 'second');
+ }
+ return ms + ' ms';
+}
+
+/**
+ * Pluralization helper.
+ */
+
+function plural(ms, msAbs, n, name) {
+ var isPlural = msAbs >= n * 1.5;
+ return Math.round(ms / n) + ' ' + name + (isPlural ? 's' : '');
+}
diff --git a/.output/server/node_modules/ms/package.json b/.output/server/node_modules/ms/package.json
new file mode 100644
index 0000000..3408eef
--- /dev/null
+++ b/.output/server/node_modules/ms/package.json
@@ -0,0 +1,37 @@
+{
+ "name": "ms",
+ "version": "2.1.2",
+ "description": "Tiny millisecond conversion utility",
+ "repository": "zeit/ms",
+ "main": "./index",
+ "files": [
+ "index.js"
+ ],
+ "scripts": {
+ "precommit": "lint-staged",
+ "lint": "eslint lib/* bin/*",
+ "test": "mocha tests.js"
+ },
+ "eslintConfig": {
+ "extends": "eslint:recommended",
+ "env": {
+ "node": true,
+ "es6": true
+ }
+ },
+ "lint-staged": {
+ "*.js": [
+ "npm run lint",
+ "prettier --single-quote --write",
+ "git add"
+ ]
+ },
+ "license": "MIT",
+ "devDependencies": {
+ "eslint": "4.12.1",
+ "expect.js": "0.3.1",
+ "husky": "0.14.3",
+ "lint-staged": "5.0.0",
+ "mocha": "4.0.1"
+ }
+}
\ No newline at end of file
diff --git a/.output/server/node_modules/proxy-from-env/index.js b/.output/server/node_modules/proxy-from-env/index.js
new file mode 100644
index 0000000..df75004
--- /dev/null
+++ b/.output/server/node_modules/proxy-from-env/index.js
@@ -0,0 +1,108 @@
+'use strict';
+
+var parseUrl = require('url').parse;
+
+var DEFAULT_PORTS = {
+ ftp: 21,
+ gopher: 70,
+ http: 80,
+ https: 443,
+ ws: 80,
+ wss: 443,
+};
+
+var stringEndsWith = String.prototype.endsWith || function(s) {
+ return s.length <= this.length &&
+ this.indexOf(s, this.length - s.length) !== -1;
+};
+
+/**
+ * @param {string|object} url - The URL, or the result from url.parse.
+ * @return {string} The URL of the proxy that should handle the request to the
+ * given URL. If no proxy is set, this will be an empty string.
+ */
+function getProxyForUrl(url) {
+ var parsedUrl = typeof url === 'string' ? parseUrl(url) : url || {};
+ var proto = parsedUrl.protocol;
+ var hostname = parsedUrl.host;
+ var port = parsedUrl.port;
+ if (typeof hostname !== 'string' || !hostname || typeof proto !== 'string') {
+ return ''; // Don't proxy URLs without a valid scheme or host.
+ }
+
+ proto = proto.split(':', 1)[0];
+ // Stripping ports in this way instead of using parsedUrl.hostname to make
+ // sure that the brackets around IPv6 addresses are kept.
+ hostname = hostname.replace(/:\d*$/, '');
+ port = parseInt(port) || DEFAULT_PORTS[proto] || 0;
+ if (!shouldProxy(hostname, port)) {
+ return ''; // Don't proxy URLs that match NO_PROXY.
+ }
+
+ var proxy =
+ getEnv('npm_config_' + proto + '_proxy') ||
+ getEnv(proto + '_proxy') ||
+ getEnv('npm_config_proxy') ||
+ getEnv('all_proxy');
+ if (proxy && proxy.indexOf('://') === -1) {
+ // Missing scheme in proxy, default to the requested URL's scheme.
+ proxy = proto + '://' + proxy;
+ }
+ return proxy;
+}
+
+/**
+ * Determines whether a given URL should be proxied.
+ *
+ * @param {string} hostname - The host name of the URL.
+ * @param {number} port - The effective port of the URL.
+ * @returns {boolean} Whether the given URL should be proxied.
+ * @private
+ */
+function shouldProxy(hostname, port) {
+ var NO_PROXY =
+ (getEnv('npm_config_no_proxy') || getEnv('no_proxy')).toLowerCase();
+ if (!NO_PROXY) {
+ return true; // Always proxy if NO_PROXY is not set.
+ }
+ if (NO_PROXY === '*') {
+ return false; // Never proxy if wildcard is set.
+ }
+
+ return NO_PROXY.split(/[,\s]/).every(function(proxy) {
+ if (!proxy) {
+ return true; // Skip zero-length hosts.
+ }
+ var parsedProxy = proxy.match(/^(.+):(\d+)$/);
+ var parsedProxyHostname = parsedProxy ? parsedProxy[1] : proxy;
+ var parsedProxyPort = parsedProxy ? parseInt(parsedProxy[2]) : 0;
+ if (parsedProxyPort && parsedProxyPort !== port) {
+ return true; // Skip if ports don't match.
+ }
+
+ if (!/^[.*]/.test(parsedProxyHostname)) {
+ // No wildcards, so stop proxying if there is an exact match.
+ return hostname !== parsedProxyHostname;
+ }
+
+ if (parsedProxyHostname.charAt(0) === '*') {
+ // Remove leading wildcard.
+ parsedProxyHostname = parsedProxyHostname.slice(1);
+ }
+ // Stop proxying if the hostname ends with the no_proxy host.
+ return !stringEndsWith.call(hostname, parsedProxyHostname);
+ });
+}
+
+/**
+ * Get the value for an environment variable.
+ *
+ * @param {string} key - The name of the environment variable.
+ * @return {string} The value of the environment variable.
+ * @private
+ */
+function getEnv(key) {
+ return process.env[key.toLowerCase()] || process.env[key.toUpperCase()] || '';
+}
+
+exports.getProxyForUrl = getProxyForUrl;
diff --git a/.output/server/node_modules/proxy-from-env/package.json b/.output/server/node_modules/proxy-from-env/package.json
new file mode 100644
index 0000000..cf47990
--- /dev/null
+++ b/.output/server/node_modules/proxy-from-env/package.json
@@ -0,0 +1,34 @@
+{
+ "name": "proxy-from-env",
+ "version": "1.1.0",
+ "description": "Offers getProxyForUrl to get the proxy URL for a URL, respecting the *_PROXY (e.g. HTTP_PROXY) and NO_PROXY environment variables.",
+ "main": "index.js",
+ "scripts": {
+ "lint": "eslint *.js",
+ "test": "mocha ./test.js --reporter spec",
+ "test-coverage": "istanbul cover ./node_modules/.bin/_mocha -- --reporter spec"
+ },
+ "repository": {
+ "type": "git",
+ "url": "https://github.com/Rob--W/proxy-from-env.git"
+ },
+ "keywords": [
+ "proxy",
+ "http_proxy",
+ "https_proxy",
+ "no_proxy",
+ "environment"
+ ],
+ "author": "Rob Wu (https://robwu.nl/)",
+ "license": "MIT",
+ "bugs": {
+ "url": "https://github.com/Rob--W/proxy-from-env/issues"
+ },
+ "homepage": "https://github.com/Rob--W/proxy-from-env#readme",
+ "devDependencies": {
+ "coveralls": "^3.0.9",
+ "eslint": "^6.8.0",
+ "istanbul": "^0.4.5",
+ "mocha": "^7.1.0"
+ }
+}
\ No newline at end of file
diff --git a/.output/server/node_modules/source-map-js/lib/array-set.js b/.output/server/node_modules/source-map-js/lib/array-set.js
new file mode 100644
index 0000000..fbd5c81
--- /dev/null
+++ b/.output/server/node_modules/source-map-js/lib/array-set.js
@@ -0,0 +1,121 @@
+/* -*- Mode: js; js-indent-level: 2; -*- */
+/*
+ * Copyright 2011 Mozilla Foundation and contributors
+ * Licensed under the New BSD license. See LICENSE or:
+ * http://opensource.org/licenses/BSD-3-Clause
+ */
+
+var util = require('./util');
+var has = Object.prototype.hasOwnProperty;
+var hasNativeMap = typeof Map !== "undefined";
+
+/**
+ * A data structure which is a combination of an array and a set. Adding a new
+ * member is O(1), testing for membership is O(1), and finding the index of an
+ * element is O(1). Removing elements from the set is not supported. Only
+ * strings are supported for membership.
+ */
+function ArraySet() {
+ this._array = [];
+ this._set = hasNativeMap ? new Map() : Object.create(null);
+}
+
+/**
+ * Static method for creating ArraySet instances from an existing array.
+ */
+ArraySet.fromArray = function ArraySet_fromArray(aArray, aAllowDuplicates) {
+ var set = new ArraySet();
+ for (var i = 0, len = aArray.length; i < len; i++) {
+ set.add(aArray[i], aAllowDuplicates);
+ }
+ return set;
+};
+
+/**
+ * Return how many unique items are in this ArraySet. If duplicates have been
+ * added, than those do not count towards the size.
+ *
+ * @returns Number
+ */
+ArraySet.prototype.size = function ArraySet_size() {
+ return hasNativeMap ? this._set.size : Object.getOwnPropertyNames(this._set).length;
+};
+
+/**
+ * Add the given string to this set.
+ *
+ * @param String aStr
+ */
+ArraySet.prototype.add = function ArraySet_add(aStr, aAllowDuplicates) {
+ var sStr = hasNativeMap ? aStr : util.toSetString(aStr);
+ var isDuplicate = hasNativeMap ? this.has(aStr) : has.call(this._set, sStr);
+ var idx = this._array.length;
+ if (!isDuplicate || aAllowDuplicates) {
+ this._array.push(aStr);
+ }
+ if (!isDuplicate) {
+ if (hasNativeMap) {
+ this._set.set(aStr, idx);
+ } else {
+ this._set[sStr] = idx;
+ }
+ }
+};
+
+/**
+ * Is the given string a member of this set?
+ *
+ * @param String aStr
+ */
+ArraySet.prototype.has = function ArraySet_has(aStr) {
+ if (hasNativeMap) {
+ return this._set.has(aStr);
+ } else {
+ var sStr = util.toSetString(aStr);
+ return has.call(this._set, sStr);
+ }
+};
+
+/**
+ * What is the index of the given string in the array?
+ *
+ * @param String aStr
+ */
+ArraySet.prototype.indexOf = function ArraySet_indexOf(aStr) {
+ if (hasNativeMap) {
+ var idx = this._set.get(aStr);
+ if (idx >= 0) {
+ return idx;
+ }
+ } else {
+ var sStr = util.toSetString(aStr);
+ if (has.call(this._set, sStr)) {
+ return this._set[sStr];
+ }
+ }
+
+ throw new Error('"' + aStr + '" is not in the set.');
+};
+
+/**
+ * What is the element at the given index?
+ *
+ * @param Number aIdx
+ */
+ArraySet.prototype.at = function ArraySet_at(aIdx) {
+ if (aIdx >= 0 && aIdx < this._array.length) {
+ return this._array[aIdx];
+ }
+ throw new Error('No element indexed by ' + aIdx);
+};
+
+/**
+ * Returns the array representation of this set (which has the proper indices
+ * indicated by indexOf). Note that this is a copy of the internal array used
+ * for storing the members so that no one can mess with internal state.
+ */
+ArraySet.prototype.toArray = function ArraySet_toArray() {
+ return this._array.slice();
+};
+
+exports.ArraySet = ArraySet;
diff --git a/.output/server/node_modules/source-map-js/lib/base64-vlq.js b/.output/server/node_modules/source-map-js/lib/base64-vlq.js
new file mode 100644
index 0000000..612b404
--- /dev/null
+++ b/.output/server/node_modules/source-map-js/lib/base64-vlq.js
@@ -0,0 +1,140 @@
+/* -*- Mode: js; js-indent-level: 2; -*- */
+/*
+ * Copyright 2011 Mozilla Foundation and contributors
+ * Licensed under the New BSD license. See LICENSE or:
+ * http://opensource.org/licenses/BSD-3-Clause
+ *
+ * Based on the Base 64 VLQ implementation in Closure Compiler:
+ * https://code.google.com/p/closure-compiler/source/browse/trunk/src/com/google/debugging/sourcemap/Base64VLQ.java
+ *
+ * Copyright 2011 The Closure Compiler Authors. All rights reserved.
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are
+ * met:
+ *
+ * * Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * * Redistributions in binary form must reproduce the above
+ * copyright notice, this list of conditions and the following
+ * disclaimer in the documentation and/or other materials provided
+ * with the distribution.
+ * * Neither the name of Google Inc. nor the names of its
+ * contributors may be used to endorse or promote products derived
+ * from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+ * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+ * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+ * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+ * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+var base64 = require('./base64');
+
+// A single base 64 digit can contain 6 bits of data. For the base 64 variable
+// length quantities we use in the source map spec, the first bit is the sign,
+// the next four bits are the actual value, and the 6th bit is the
+// continuation bit. The continuation bit tells us whether there are more
+// digits in this value following this digit.
+//
+// Continuation
+// | Sign
+// | |
+// V V
+// 101011
+
+var VLQ_BASE_SHIFT = 5;
+
+// binary: 100000
+var VLQ_BASE = 1 << VLQ_BASE_SHIFT;
+
+// binary: 011111
+var VLQ_BASE_MASK = VLQ_BASE - 1;
+
+// binary: 100000
+var VLQ_CONTINUATION_BIT = VLQ_BASE;
+
+/**
+ * Converts from a two-complement value to a value where the sign bit is
+ * placed in the least significant bit. For example, as decimals:
+ * 1 becomes 2 (10 binary), -1 becomes 3 (11 binary)
+ * 2 becomes 4 (100 binary), -2 becomes 5 (101 binary)
+ */
+function toVLQSigned(aValue) {
+ return aValue < 0
+ ? ((-aValue) << 1) + 1
+ : (aValue << 1) + 0;
+}
+
+/**
+ * Converts to a two-complement value from a value where the sign bit is
+ * placed in the least significant bit. For example, as decimals:
+ * 2 (10 binary) becomes 1, 3 (11 binary) becomes -1
+ * 4 (100 binary) becomes 2, 5 (101 binary) becomes -2
+ */
+function fromVLQSigned(aValue) {
+ var isNegative = (aValue & 1) === 1;
+ var shifted = aValue >> 1;
+ return isNegative
+ ? -shifted
+ : shifted;
+}
+
+/**
+ * Returns the base 64 VLQ encoded value.
+ */
+exports.encode = function base64VLQ_encode(aValue) {
+ var encoded = "";
+ var digit;
+
+ var vlq = toVLQSigned(aValue);
+
+ do {
+ digit = vlq & VLQ_BASE_MASK;
+ vlq >>>= VLQ_BASE_SHIFT;
+ if (vlq > 0) {
+ // There are still more digits in this value, so we must make sure the
+ // continuation bit is marked.
+ digit |= VLQ_CONTINUATION_BIT;
+ }
+ encoded += base64.encode(digit);
+ } while (vlq > 0);
+
+ return encoded;
+};
+
+/**
+ * Decodes the next base 64 VLQ value from the given string and returns the
+ * value and the rest of the string via the out parameter.
+ */
+exports.decode = function base64VLQ_decode(aStr, aIndex, aOutParam) {
+ var strLen = aStr.length;
+ var result = 0;
+ var shift = 0;
+ var continuation, digit;
+
+ do {
+ if (aIndex >= strLen) {
+ throw new Error("Expected more digits in base 64 VLQ value.");
+ }
+
+ digit = base64.decode(aStr.charCodeAt(aIndex++));
+ if (digit === -1) {
+ throw new Error("Invalid base64 digit: " + aStr.charAt(aIndex - 1));
+ }
+
+ continuation = !!(digit & VLQ_CONTINUATION_BIT);
+ digit &= VLQ_BASE_MASK;
+ result = result + (digit << shift);
+ shift += VLQ_BASE_SHIFT;
+ } while (continuation);
+
+ aOutParam.value = fromVLQSigned(result);
+ aOutParam.rest = aIndex;
+};
diff --git a/.output/server/node_modules/source-map-js/lib/base64.js b/.output/server/node_modules/source-map-js/lib/base64.js
new file mode 100644
index 0000000..8aa86b3
--- /dev/null
+++ b/.output/server/node_modules/source-map-js/lib/base64.js
@@ -0,0 +1,67 @@
+/* -*- Mode: js; js-indent-level: 2; -*- */
+/*
+ * Copyright 2011 Mozilla Foundation and contributors
+ * Licensed under the New BSD license. See LICENSE or:
+ * http://opensource.org/licenses/BSD-3-Clause
+ */
+
+var intToCharMap = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'.split('');
+
+/**
+ * Encode an integer in the range of 0 to 63 to a single base 64 digit.
+ */
+exports.encode = function (number) {
+ if (0 <= number && number < intToCharMap.length) {
+ return intToCharMap[number];
+ }
+ throw new TypeError("Must be between 0 and 63: " + number);
+};
+
+/**
+ * Decode a single base 64 character code digit to an integer. Returns -1 on
+ * failure.
+ */
+exports.decode = function (charCode) {
+ var bigA = 65; // 'A'
+ var bigZ = 90; // 'Z'
+
+ var littleA = 97; // 'a'
+ var littleZ = 122; // 'z'
+
+ var zero = 48; // '0'
+ var nine = 57; // '9'
+
+ var plus = 43; // '+'
+ var slash = 47; // '/'
+
+ var littleOffset = 26;
+ var numberOffset = 52;
+
+ // 0 - 25: ABCDEFGHIJKLMNOPQRSTUVWXYZ
+ if (bigA <= charCode && charCode <= bigZ) {
+ return (charCode - bigA);
+ }
+
+ // 26 - 51: abcdefghijklmnopqrstuvwxyz
+ if (littleA <= charCode && charCode <= littleZ) {
+ return (charCode - littleA + littleOffset);
+ }
+
+ // 52 - 61: 0123456789
+ if (zero <= charCode && charCode <= nine) {
+ return (charCode - zero + numberOffset);
+ }
+
+ // 62: +
+ if (charCode == plus) {
+ return 62;
+ }
+
+ // 63: /
+ if (charCode == slash) {
+ return 63;
+ }
+
+ // Invalid base64 digit.
+ return -1;
+};
diff --git a/.output/server/node_modules/source-map-js/lib/binary-search.js b/.output/server/node_modules/source-map-js/lib/binary-search.js
new file mode 100644
index 0000000..010ac94
--- /dev/null
+++ b/.output/server/node_modules/source-map-js/lib/binary-search.js
@@ -0,0 +1,111 @@
+/* -*- Mode: js; js-indent-level: 2; -*- */
+/*
+ * Copyright 2011 Mozilla Foundation and contributors
+ * Licensed under the New BSD license. See LICENSE or:
+ * http://opensource.org/licenses/BSD-3-Clause
+ */
+
+exports.GREATEST_LOWER_BOUND = 1;
+exports.LEAST_UPPER_BOUND = 2;
+
+/**
+ * Recursive implementation of binary search.
+ *
+ * @param aLow Indices here and lower do not contain the needle.
+ * @param aHigh Indices here and higher do not contain the needle.
+ * @param aNeedle The element being searched for.
+ * @param aHaystack The non-empty array being searched.
+ * @param aCompare Function which takes two elements and returns -1, 0, or 1.
+ * @param aBias Either 'binarySearch.GREATEST_LOWER_BOUND' or
+ * 'binarySearch.LEAST_UPPER_BOUND'. Specifies whether to return the
+ * closest element that is smaller than or greater than the one we are
+ * searching for, respectively, if the exact element cannot be found.
+ */
+function recursiveSearch(aLow, aHigh, aNeedle, aHaystack, aCompare, aBias) {
+ // This function terminates when one of the following is true:
+ //
+ // 1. We find the exact element we are looking for.
+ //
+ // 2. We did not find the exact element, but we can return the index of
+ // the next-closest element.
+ //
+ // 3. We did not find the exact element, and there is no next-closest
+ // element than the one we are searching for, so we return -1.
+ var mid = Math.floor((aHigh - aLow) / 2) + aLow;
+ var cmp = aCompare(aNeedle, aHaystack[mid], true);
+ if (cmp === 0) {
+ // Found the element we are looking for.
+ return mid;
+ }
+ else if (cmp > 0) {
+ // Our needle is greater than aHaystack[mid].
+ if (aHigh - mid > 1) {
+ // The element is in the upper half.
+ return recursiveSearch(mid, aHigh, aNeedle, aHaystack, aCompare, aBias);
+ }
+
+ // The exact needle element was not found in this haystack. Determine if
+ // we are in termination case (3) or (2) and return the appropriate thing.
+ if (aBias == exports.LEAST_UPPER_BOUND) {
+ return aHigh < aHaystack.length ? aHigh : -1;
+ } else {
+ return mid;
+ }
+ }
+ else {
+ // Our needle is less than aHaystack[mid].
+ if (mid - aLow > 1) {
+ // The element is in the lower half.
+ return recursiveSearch(aLow, mid, aNeedle, aHaystack, aCompare, aBias);
+ }
+
+ // we are in termination case (3) or (2) and return the appropriate thing.
+ if (aBias == exports.LEAST_UPPER_BOUND) {
+ return mid;
+ } else {
+ return aLow < 0 ? -1 : aLow;
+ }
+ }
+}
+
+/**
+ * This is an implementation of binary search which will always try and return
+ * the index of the closest element if there is no exact hit. This is because
+ * mappings between original and generated line/col pairs are single points,
+ * and there is an implicit region between each of them, so a miss just means
+ * that you aren't on the very start of a region.
+ *
+ * @param aNeedle The element you are looking for.
+ * @param aHaystack The array that is being searched.
+ * @param aCompare A function which takes the needle and an element in the
+ * array and returns -1, 0, or 1 depending on whether the needle is less
+ * than, equal to, or greater than the element, respectively.
+ * @param aBias Either 'binarySearch.GREATEST_LOWER_BOUND' or
+ * 'binarySearch.LEAST_UPPER_BOUND'. Specifies whether to return the
+ * closest element that is smaller than or greater than the one we are
+ * searching for, respectively, if the exact element cannot be found.
+ * Defaults to 'binarySearch.GREATEST_LOWER_BOUND'.
+ */
+exports.search = function search(aNeedle, aHaystack, aCompare, aBias) {
+ if (aHaystack.length === 0) {
+ return -1;
+ }
+
+ var index = recursiveSearch(-1, aHaystack.length, aNeedle, aHaystack,
+ aCompare, aBias || exports.GREATEST_LOWER_BOUND);
+ if (index < 0) {
+ return -1;
+ }
+
+ // We have found either the exact element, or the next-closest element than
+ // the one we are searching for. However, there may be more than one such
+ // element. Make sure we always return the smallest of these.
+ while (index - 1 >= 0) {
+ if (aCompare(aHaystack[index], aHaystack[index - 1], true) !== 0) {
+ break;
+ }
+ --index;
+ }
+
+ return index;
+};
diff --git a/.output/server/node_modules/source-map-js/lib/mapping-list.js b/.output/server/node_modules/source-map-js/lib/mapping-list.js
new file mode 100644
index 0000000..06d1274
--- /dev/null
+++ b/.output/server/node_modules/source-map-js/lib/mapping-list.js
@@ -0,0 +1,79 @@
+/* -*- Mode: js; js-indent-level: 2; -*- */
+/*
+ * Copyright 2014 Mozilla Foundation and contributors
+ * Licensed under the New BSD license. See LICENSE or:
+ * http://opensource.org/licenses/BSD-3-Clause
+ */
+
+var util = require('./util');
+
+/**
+ * Determine whether mappingB is after mappingA with respect to generated
+ * position.
+ */
+function generatedPositionAfter(mappingA, mappingB) {
+ // Optimized for most common case
+ var lineA = mappingA.generatedLine;
+ var lineB = mappingB.generatedLine;
+ var columnA = mappingA.generatedColumn;
+ var columnB = mappingB.generatedColumn;
+ return lineB > lineA || lineB == lineA && columnB >= columnA ||
+ util.compareByGeneratedPositionsInflated(mappingA, mappingB) <= 0;
+}
+
+/**
+ * A data structure to provide a sorted view of accumulated mappings in a
+ * performance conscious manner. It trades a neglibable overhead in general
+ * case for a large speedup in case of mappings being added in order.
+ */
+function MappingList() {
+ this._array = [];
+ this._sorted = true;
+ // Serves as infimum
+ this._last = {generatedLine: -1, generatedColumn: 0};
+}
+
+/**
+ * Iterate through internal items. This method takes the same arguments that
+ * `Array.prototype.forEach` takes.
+ *
+ * NOTE: The order of the mappings is NOT guaranteed.
+ */
+MappingList.prototype.unsortedForEach =
+ function MappingList_forEach(aCallback, aThisArg) {
+ this._array.forEach(aCallback, aThisArg);
+ };
+
+/**
+ * Add the given source mapping.
+ *
+ * @param Object aMapping
+ */
+MappingList.prototype.add = function MappingList_add(aMapping) {
+ if (generatedPositionAfter(this._last, aMapping)) {
+ this._last = aMapping;
+ this._array.push(aMapping);
+ } else {
+ this._sorted = false;
+ this._array.push(aMapping);
+ }
+};
+
+/**
+ * Returns the flat, sorted array of mappings. The mappings are sorted by
+ * generated position.
+ *
+ * WARNING: This method returns internal data without copying, for
+ * performance. The return value must NOT be mutated, and should be treated as
+ * an immutable borrow. If you want to take ownership, you must make your own
+ * copy.
+ */
+MappingList.prototype.toArray = function MappingList_toArray() {
+ if (!this._sorted) {
+ this._array.sort(util.compareByGeneratedPositionsInflated);
+ this._sorted = true;
+ }
+ return this._array;
+};
+
+exports.MappingList = MappingList;
diff --git a/.output/server/node_modules/source-map-js/lib/quick-sort.js b/.output/server/node_modules/source-map-js/lib/quick-sort.js
new file mode 100644
index 0000000..23f9eda
--- /dev/null
+++ b/.output/server/node_modules/source-map-js/lib/quick-sort.js
@@ -0,0 +1,132 @@
+/* -*- Mode: js; js-indent-level: 2; -*- */
+/*
+ * Copyright 2011 Mozilla Foundation and contributors
+ * Licensed under the New BSD license. See LICENSE or:
+ * http://opensource.org/licenses/BSD-3-Clause
+ */
+
+// It turns out that some (most?) JavaScript engines don't self-host
+// `Array.prototype.sort`. This makes sense because C++ will likely remain
+// faster than JS when doing raw CPU-intensive sorting. However, when using a
+// custom comparator function, calling back and forth between the VM's C++ and
+// JIT'd JS is rather slow *and* loses JIT type information, resulting in
+// worse generated code for the comparator function than would be optimal. In
+// fact, when sorting with a comparator, these costs outweigh the benefits of
+// sorting in C++. By using our own JS-implemented Quick Sort (below), we get
+// a ~3500ms mean speed-up in `bench/bench.html`.
+
+function SortTemplate(comparator) {
+
+/**
+ * Swap the elements indexed by `x` and `y` in the array `ary`.
+ *
+ * @param {Array} ary
+ * The array.
+ * @param {Number} x
+ * The index of the first item.
+ * @param {Number} y
+ * The index of the second item.
+ */
+function swap(ary, x, y) {
+ var temp = ary[x];
+ ary[x] = ary[y];
+ ary[y] = temp;
+}
+
+/**
+ * Returns a random integer within the range `low .. high` inclusive.
+ *
+ * @param {Number} low
+ * The lower bound on the range.
+ * @param {Number} high
+ * The upper bound on the range.
+ */
+function randomIntInRange(low, high) {
+ return Math.round(low + (Math.random() * (high - low)));
+}
+
+/**
+ * The Quick Sort algorithm.
+ *
+ * @param {Array} ary
+ * An array to sort.
+ * @param {function} comparator
+ * Function to use to compare two items.
+ * @param {Number} p
+ * Start index of the array
+ * @param {Number} r
+ * End index of the array
+ */
+function doQuickSort(ary, comparator, p, r) {
+ // If our lower bound is less than our upper bound, we (1) partition the
+ // array into two pieces and (2) recurse on each half. If it is not, this is
+ // the empty array and our base case.
+
+ if (p < r) {
+ // (1) Partitioning.
+ //
+ // The partitioning chooses a pivot between `p` and `r` and moves all
+ // elements that are less than or equal to the pivot to the before it, and
+ // all the elements that are greater than it after it. The effect is that
+ // once partition is done, the pivot is in the exact place it will be when
+ // the array is put in sorted order, and it will not need to be moved
+ // again. This runs in O(n) time.
+
+ // Always choose a random pivot so that an input array which is reverse
+ // sorted does not cause O(n^2) running time.
+ var pivotIndex = randomIntInRange(p, r);
+ var i = p - 1;
+
+ swap(ary, pivotIndex, r);
+ var pivot = ary[r];
+
+ // Immediately after `j` is incremented in this loop, the following hold
+ // true:
+ //
+ // * Every element in `ary[p .. i]` is less than or equal to the pivot.
+ //
+ // * Every element in `ary[i+1 .. j-1]` is greater than the pivot.
+ for (var j = p; j < r; j++) {
+ if (comparator(ary[j], pivot, false) <= 0) {
+ i += 1;
+ swap(ary, i, j);
+ }
+ }
+
+ swap(ary, i + 1, j);
+ var q = i + 1;
+
+ // (2) Recurse on each half.
+
+ doQuickSort(ary, comparator, p, q - 1);
+ doQuickSort(ary, comparator, q + 1, r);
+ }
+}
+
+ return doQuickSort;
+}
+
+function cloneSort(comparator) {
+ let template = SortTemplate.toString();
+ let templateFn = new Function(`return ${template}`)();
+ return templateFn(comparator);
+}
+
+/**
+ * Sort the given array in-place with the given comparator function.
+ *
+ * @param {Array} ary
+ * An array to sort.
+ * @param {function} comparator
+ * Function to use to compare two items.
+ */
+
+let sortCache = new WeakMap();
+exports.quickSort = function (ary, comparator, start = 0) {
+ let doQuickSort = sortCache.get(comparator);
+ if (doQuickSort === void 0) {
+ doQuickSort = cloneSort(comparator);
+ sortCache.set(comparator, doQuickSort);
+ }
+ doQuickSort(ary, comparator, start, ary.length - 1);
+};
diff --git a/.output/server/node_modules/source-map-js/lib/source-map-consumer.js b/.output/server/node_modules/source-map-js/lib/source-map-consumer.js
new file mode 100644
index 0000000..4bd7a4a
--- /dev/null
+++ b/.output/server/node_modules/source-map-js/lib/source-map-consumer.js
@@ -0,0 +1,1184 @@
+/* -*- Mode: js; js-indent-level: 2; -*- */
+/*
+ * Copyright 2011 Mozilla Foundation and contributors
+ * Licensed under the New BSD license. See LICENSE or:
+ * http://opensource.org/licenses/BSD-3-Clause
+ */
+
+var util = require('./util');
+var binarySearch = require('./binary-search');
+var ArraySet = require('./array-set').ArraySet;
+var base64VLQ = require('./base64-vlq');
+var quickSort = require('./quick-sort').quickSort;
+
+function SourceMapConsumer(aSourceMap, aSourceMapURL) {
+ var sourceMap = aSourceMap;
+ if (typeof aSourceMap === 'string') {
+ sourceMap = util.parseSourceMapInput(aSourceMap);
+ }
+
+ return sourceMap.sections != null
+ ? new IndexedSourceMapConsumer(sourceMap, aSourceMapURL)
+ : new BasicSourceMapConsumer(sourceMap, aSourceMapURL);
+}
+
+SourceMapConsumer.fromSourceMap = function(aSourceMap, aSourceMapURL) {
+ return BasicSourceMapConsumer.fromSourceMap(aSourceMap, aSourceMapURL);
+}
+
+/**
+ * The version of the source mapping spec that we are consuming.
+ */
+SourceMapConsumer.prototype._version = 3;
+
+// `__generatedMappings` and `__originalMappings` are arrays that hold the
+// parsed mapping coordinates from the source map's "mappings" attribute. They
+// are lazily instantiated, accessed via the `_generatedMappings` and
+// `_originalMappings` getters respectively, and we only parse the mappings
+// and create these arrays once queried for a source location. We jump through
+// these hoops because there can be many thousands of mappings, and parsing
+// them is expensive, so we only want to do it if we must.
+//
+// Each object in the arrays is of the form:
+//
+// {
+// generatedLine: The line number in the generated code,
+// generatedColumn: The column number in the generated code,
+// source: The path to the original source file that generated this
+// chunk of code,
+// originalLine: The line number in the original source that
+// corresponds to this chunk of generated code,
+// originalColumn: The column number in the original source that
+// corresponds to this chunk of generated code,
+// name: The name of the original symbol which generated this chunk of
+// code.
+// }
+//
+// All properties except for `generatedLine` and `generatedColumn` can be
+// `null`.
+//
+// `_generatedMappings` is ordered by the generated positions.
+//
+// `_originalMappings` is ordered by the original positions.
+
+SourceMapConsumer.prototype.__generatedMappings = null;
+Object.defineProperty(SourceMapConsumer.prototype, '_generatedMappings', {
+ configurable: true,
+ enumerable: true,
+ get: function () {
+ if (!this.__generatedMappings) {
+ this._parseMappings(this._mappings, this.sourceRoot);
+ }
+
+ return this.__generatedMappings;
+ }
+});
+
+SourceMapConsumer.prototype.__originalMappings = null;
+Object.defineProperty(SourceMapConsumer.prototype, '_originalMappings', {
+ configurable: true,
+ enumerable: true,
+ get: function () {
+ if (!this.__originalMappings) {
+ this._parseMappings(this._mappings, this.sourceRoot);
+ }
+
+ return this.__originalMappings;
+ }
+});
+
+SourceMapConsumer.prototype._charIsMappingSeparator =
+ function SourceMapConsumer_charIsMappingSeparator(aStr, index) {
+ var c = aStr.charAt(index);
+ return c === ";" || c === ",";
+ };
+
+/**
+ * Parse the mappings in a string in to a data structure which we can easily
+ * query (the ordered arrays in the `this.__generatedMappings` and
+ * `this.__originalMappings` properties).
+ */
+SourceMapConsumer.prototype._parseMappings =
+ function SourceMapConsumer_parseMappings(aStr, aSourceRoot) {
+ throw new Error("Subclasses must implement _parseMappings");
+ };
+
+SourceMapConsumer.GENERATED_ORDER = 1;
+SourceMapConsumer.ORIGINAL_ORDER = 2;
+
+SourceMapConsumer.GREATEST_LOWER_BOUND = 1;
+SourceMapConsumer.LEAST_UPPER_BOUND = 2;
+
+/**
+ * Iterate over each mapping between an original source/line/column and a
+ * generated line/column in this source map.
+ *
+ * @param Function aCallback
+ * The function that is called with each mapping.
+ * @param Object aContext
+ * Optional. If specified, this object will be the value of `this` every
+ * time that `aCallback` is called.
+ * @param aOrder
+ * Either `SourceMapConsumer.GENERATED_ORDER` or
+ * `SourceMapConsumer.ORIGINAL_ORDER`. Specifies whether you want to
+ * iterate over the mappings sorted by the generated file's line/column
+ * order or the original's source/line/column order, respectively. Defaults to
+ * `SourceMapConsumer.GENERATED_ORDER`.
+ */
+SourceMapConsumer.prototype.eachMapping =
+ function SourceMapConsumer_eachMapping(aCallback, aContext, aOrder) {
+ var context = aContext || null;
+ var order = aOrder || SourceMapConsumer.GENERATED_ORDER;
+
+ var mappings;
+ switch (order) {
+ case SourceMapConsumer.GENERATED_ORDER:
+ mappings = this._generatedMappings;
+ break;
+ case SourceMapConsumer.ORIGINAL_ORDER:
+ mappings = this._originalMappings;
+ break;
+ default:
+ throw new Error("Unknown order of iteration.");
+ }
+
+ var sourceRoot = this.sourceRoot;
+ var boundCallback = aCallback.bind(context);
+ var names = this._names;
+ var sources = this._sources;
+ var sourceMapURL = this._sourceMapURL;
+
+ for (var i = 0, n = mappings.length; i < n; i++) {
+ var mapping = mappings[i];
+ var source = mapping.source === null ? null : sources.at(mapping.source);
+ source = util.computeSourceURL(sourceRoot, source, sourceMapURL);
+ boundCallback({
+ source: source,
+ generatedLine: mapping.generatedLine,
+ generatedColumn: mapping.generatedColumn,
+ originalLine: mapping.originalLine,
+ originalColumn: mapping.originalColumn,
+ name: mapping.name === null ? null : names.at(mapping.name)
+ });
+ }
+ };
+
+/**
+ * Returns all generated line and column information for the original source,
+ * line, and column provided. If no column is provided, returns all mappings
+ * corresponding to a either the line we are searching for or the next
+ * closest line that has any mappings. Otherwise, returns all mappings
+ * corresponding to the given line and either the column we are searching for
+ * or the next closest column that has any offsets.
+ *
+ * The only argument is an object with the following properties:
+ *
+ * - source: The filename of the original source.
+ * - line: The line number in the original source. The line number is 1-based.
+ * - column: Optional. the column number in the original source.
+ * The column number is 0-based.
+ *
+ * and an array of objects is returned, each with the following properties:
+ *
+ * - line: The line number in the generated source, or null. The
+ * line number is 1-based.
+ * - column: The column number in the generated source, or null.
+ * The column number is 0-based.
+ */
+SourceMapConsumer.prototype.allGeneratedPositionsFor =
+ function SourceMapConsumer_allGeneratedPositionsFor(aArgs) {
+ var line = util.getArg(aArgs, 'line');
+
+ // When there is no exact match, BasicSourceMapConsumer.prototype._findMapping
+ // returns the index of the closest mapping less than the needle. By
+ // setting needle.originalColumn to 0, we thus find the last mapping for
+ // the given line, provided such a mapping exists.
+ var needle = {
+ source: util.getArg(aArgs, 'source'),
+ originalLine: line,
+ originalColumn: util.getArg(aArgs, 'column', 0)
+ };
+
+ needle.source = this._findSourceIndex(needle.source);
+ if (needle.source < 0) {
+ return [];
+ }
+
+ var mappings = [];
+
+ var index = this._findMapping(needle,
+ this._originalMappings,
+ "originalLine",
+ "originalColumn",
+ util.compareByOriginalPositions,
+ binarySearch.LEAST_UPPER_BOUND);
+ if (index >= 0) {
+ var mapping = this._originalMappings[index];
+
+ if (aArgs.column === undefined) {
+ var originalLine = mapping.originalLine;
+
+ // Iterate until either we run out of mappings, or we run into
+ // a mapping for a different line than the one we found. Since
+ // mappings are sorted, this is guaranteed to find all mappings for
+ // the line we found.
+ while (mapping && mapping.originalLine === originalLine) {
+ mappings.push({
+ line: util.getArg(mapping, 'generatedLine', null),
+ column: util.getArg(mapping, 'generatedColumn', null),
+ lastColumn: util.getArg(mapping, 'lastGeneratedColumn', null)
+ });
+
+ mapping = this._originalMappings[++index];
+ }
+ } else {
+ var originalColumn = mapping.originalColumn;
+
+ // Iterate until either we run out of mappings, or we run into
+ // a mapping for a different line than the one we were searching for.
+ // Since mappings are sorted, this is guaranteed to find all mappings for
+ // the line we are searching for.
+ while (mapping &&
+ mapping.originalLine === line &&
+ mapping.originalColumn == originalColumn) {
+ mappings.push({
+ line: util.getArg(mapping, 'generatedLine', null),
+ column: util.getArg(mapping, 'generatedColumn', null),
+ lastColumn: util.getArg(mapping, 'lastGeneratedColumn', null)
+ });
+
+ mapping = this._originalMappings[++index];
+ }
+ }
+ }
+
+ return mappings;
+ };
+
+exports.SourceMapConsumer = SourceMapConsumer;
+
+/**
+ * A BasicSourceMapConsumer instance represents a parsed source map which we can
+ * query for information about the original file positions by giving it a file
+ * position in the generated source.
+ *
+ * The first parameter is the raw source map (either as a JSON string, or
+ * already parsed to an object). According to the spec, source maps have the
+ * following attributes:
+ *
+ * - version: Which version of the source map spec this map is following.
+ * - sources: An array of URLs to the original source files.
+ * - names: An array of identifiers which can be referrenced by individual mappings.
+ * - sourceRoot: Optional. The URL root from which all sources are relative.
+ * - sourcesContent: Optional. An array of contents of the original source files.
+ * - mappings: A string of base64 VLQs which contain the actual mappings.
+ * - file: Optional. The generated file this source map is associated with.
+ *
+ * Here is an example source map, taken from the source map spec[0]:
+ *
+ * {
+ * version : 3,
+ * file: "out.js",
+ * sourceRoot : "",
+ * sources: ["foo.js", "bar.js"],
+ * names: ["src", "maps", "are", "fun"],
+ * mappings: "AA,AB;;ABCDE;"
+ * }
+ *
+ * The second parameter, if given, is a string whose value is the URL
+ * at which the source map was found. This URL is used to compute the
+ * sources array.
+ *
+ * [0]: https://docs.google.com/document/d/1U1RGAehQwRypUTovF1KRlpiOFze0b-_2gc6fAH0KY0k/edit?pli=1#
+ */
+function BasicSourceMapConsumer(aSourceMap, aSourceMapURL) {
+ var sourceMap = aSourceMap;
+ if (typeof aSourceMap === 'string') {
+ sourceMap = util.parseSourceMapInput(aSourceMap);
+ }
+
+ var version = util.getArg(sourceMap, 'version');
+ var sources = util.getArg(sourceMap, 'sources');
+ // Sass 3.3 leaves out the 'names' array, so we deviate from the spec (which
+ // requires the array) to play nice here.
+ var names = util.getArg(sourceMap, 'names', []);
+ var sourceRoot = util.getArg(sourceMap, 'sourceRoot', null);
+ var sourcesContent = util.getArg(sourceMap, 'sourcesContent', null);
+ var mappings = util.getArg(sourceMap, 'mappings');
+ var file = util.getArg(sourceMap, 'file', null);
+
+ // Once again, Sass deviates from the spec and supplies the version as a
+ // string rather than a number, so we use loose equality checking here.
+ if (version != this._version) {
+ throw new Error('Unsupported version: ' + version);
+ }
+
+ if (sourceRoot) {
+ sourceRoot = util.normalize(sourceRoot);
+ }
+
+ sources = sources
+ .map(String)
+ // Some source maps produce relative source paths like "./foo.js" instead of
+ // "foo.js". Normalize these first so that future comparisons will succeed.
+ // See bugzil.la/1090768.
+ .map(util.normalize)
+ // Always ensure that absolute sources are internally stored relative to
+ // the source root, if the source root is absolute. Not doing this would
+ // be particularly problematic when the source root is a prefix of the
+ // source (valid, but why??). See github issue #199 and bugzil.la/1188982.
+ .map(function (source) {
+ return sourceRoot && util.isAbsolute(sourceRoot) && util.isAbsolute(source)
+ ? util.relative(sourceRoot, source)
+ : source;
+ });
+
+ // Pass `true` below to allow duplicate names and sources. While source maps
+ // are intended to be compressed and deduplicated, the TypeScript compiler
+ // sometimes generates source maps with duplicates in them. See Github issue
+ // #72 and bugzil.la/889492.
+ this._names = ArraySet.fromArray(names.map(String), true);
+ this._sources = ArraySet.fromArray(sources, true);
+
+ this._absoluteSources = this._sources.toArray().map(function (s) {
+ return util.computeSourceURL(sourceRoot, s, aSourceMapURL);
+ });
+
+ this.sourceRoot = sourceRoot;
+ this.sourcesContent = sourcesContent;
+ this._mappings = mappings;
+ this._sourceMapURL = aSourceMapURL;
+ this.file = file;
+}
+
+BasicSourceMapConsumer.prototype = Object.create(SourceMapConsumer.prototype);
+BasicSourceMapConsumer.prototype.consumer = SourceMapConsumer;
+
+/**
+ * Utility function to find the index of a source. Returns -1 if not
+ * found.
+ */
+BasicSourceMapConsumer.prototype._findSourceIndex = function(aSource) {
+ var relativeSource = aSource;
+ if (this.sourceRoot != null) {
+ relativeSource = util.relative(this.sourceRoot, relativeSource);
+ }
+
+ if (this._sources.has(relativeSource)) {
+ return this._sources.indexOf(relativeSource);
+ }
+
+ // Maybe aSource is an absolute URL as returned by |sources|. In
+ // this case we can't simply undo the transform.
+ var i;
+ for (i = 0; i < this._absoluteSources.length; ++i) {
+ if (this._absoluteSources[i] == aSource) {
+ return i;
+ }
+ }
+
+ return -1;
+};
+
+/**
+ * Create a BasicSourceMapConsumer from a SourceMapGenerator.
+ *
+ * @param SourceMapGenerator aSourceMap
+ * The source map that will be consumed.
+ * @param String aSourceMapURL
+ * The URL at which the source map can be found (optional)
+ * @returns BasicSourceMapConsumer
+ */
+BasicSourceMapConsumer.fromSourceMap =
+ function SourceMapConsumer_fromSourceMap(aSourceMap, aSourceMapURL) {
+ var smc = Object.create(BasicSourceMapConsumer.prototype);
+
+ var names = smc._names = ArraySet.fromArray(aSourceMap._names.toArray(), true);
+ var sources = smc._sources = ArraySet.fromArray(aSourceMap._sources.toArray(), true);
+ smc.sourceRoot = aSourceMap._sourceRoot;
+ smc.sourcesContent = aSourceMap._generateSourcesContent(smc._sources.toArray(),
+ smc.sourceRoot);
+ smc.file = aSourceMap._file;
+ smc._sourceMapURL = aSourceMapURL;
+ smc._absoluteSources = smc._sources.toArray().map(function (s) {
+ return util.computeSourceURL(smc.sourceRoot, s, aSourceMapURL);
+ });
+
+ // Because we are modifying the entries (by converting string sources and
+ // names to indices into the sources and names ArraySets), we have to make
+ // a copy of the entry or else bad things happen. Shared mutable state
+ // strikes again! See github issue #191.
+
+ var generatedMappings = aSourceMap._mappings.toArray().slice();
+ var destGeneratedMappings = smc.__generatedMappings = [];
+ var destOriginalMappings = smc.__originalMappings = [];
+
+ for (var i = 0, length = generatedMappings.length; i < length; i++) {
+ var srcMapping = generatedMappings[i];
+ var destMapping = new Mapping;
+ destMapping.generatedLine = srcMapping.generatedLine;
+ destMapping.generatedColumn = srcMapping.generatedColumn;
+
+ if (srcMapping.source) {
+ destMapping.source = sources.indexOf(srcMapping.source);
+ destMapping.originalLine = srcMapping.originalLine;
+ destMapping.originalColumn = srcMapping.originalColumn;
+
+ if (srcMapping.name) {
+ destMapping.name = names.indexOf(srcMapping.name);
+ }
+
+ destOriginalMappings.push(destMapping);
+ }
+
+ destGeneratedMappings.push(destMapping);
+ }
+
+ quickSort(smc.__originalMappings, util.compareByOriginalPositions);
+
+ return smc;
+ };
+
+/**
+ * The version of the source mapping spec that we are consuming.
+ */
+BasicSourceMapConsumer.prototype._version = 3;
+
+/**
+ * The list of original sources.
+ */
+Object.defineProperty(BasicSourceMapConsumer.prototype, 'sources', {
+ get: function () {
+ return this._absoluteSources.slice();
+ }
+});
+
+/**
+ * Provide the JIT with a nice shape / hidden class.
+ */
+function Mapping() {
+ this.generatedLine = 0;
+ this.generatedColumn = 0;
+ this.source = null;
+ this.originalLine = null;
+ this.originalColumn = null;
+ this.name = null;
+}
+
+/**
+ * Parse the mappings in a string in to a data structure which we can easily
+ * query (the ordered arrays in the `this.__generatedMappings` and
+ * `this.__originalMappings` properties).
+ */
+
+const compareGenerated = util.compareByGeneratedPositionsDeflatedNoLine;
+function sortGenerated(array, start) {
+ let l = array.length;
+ let n = array.length - start;
+ if (n <= 1) {
+ return;
+ } else if (n == 2) {
+ let a = array[start];
+ let b = array[start + 1];
+ if (compareGenerated(a, b) > 0) {
+ array[start] = b;
+ array[start + 1] = a;
+ }
+ } else if (n < 20) {
+ for (let i = start; i < l; i++) {
+ for (let j = i; j > start; j--) {
+ let a = array[j - 1];
+ let b = array[j];
+ if (compareGenerated(a, b) <= 0) {
+ break;
+ }
+ array[j - 1] = b;
+ array[j] = a;
+ }
+ }
+ } else {
+ quickSort(array, compareGenerated, start);
+ }
+}
+BasicSourceMapConsumer.prototype._parseMappings =
+ function SourceMapConsumer_parseMappings(aStr, aSourceRoot) {
+ var generatedLine = 1;
+ var previousGeneratedColumn = 0;
+ var previousOriginalLine = 0;
+ var previousOriginalColumn = 0;
+ var previousSource = 0;
+ var previousName = 0;
+ var length = aStr.length;
+ var index = 0;
+ var cachedSegments = {};
+ var temp = {};
+ var originalMappings = [];
+ var generatedMappings = [];
+ var mapping, str, segment, end, value;
+
+ let subarrayStart = 0;
+ while (index < length) {
+ if (aStr.charAt(index) === ';') {
+ generatedLine++;
+ index++;
+ previousGeneratedColumn = 0;
+
+ sortGenerated(generatedMappings, subarrayStart);
+ subarrayStart = generatedMappings.length;
+ }
+ else if (aStr.charAt(index) === ',') {
+ index++;
+ }
+ else {
+ mapping = new Mapping();
+ mapping.generatedLine = generatedLine;
+
+ for (end = index; end < length; end++) {
+ if (this._charIsMappingSeparator(aStr, end)) {
+ break;
+ }
+ }
+ str = aStr.slice(index, end);
+
+ segment = [];
+ while (index < end) {
+ base64VLQ.decode(aStr, index, temp);
+ value = temp.value;
+ index = temp.rest;
+ segment.push(value);
+ }
+
+ if (segment.length === 2) {
+ throw new Error('Found a source, but no line and column');
+ }
+
+ if (segment.length === 3) {
+ throw new Error('Found a source and line, but no column');
+ }
+
+ // Generated column.
+ mapping.generatedColumn = previousGeneratedColumn + segment[0];
+ previousGeneratedColumn = mapping.generatedColumn;
+
+ if (segment.length > 1) {
+ // Original source.
+ mapping.source = previousSource + segment[1];
+ previousSource += segment[1];
+
+ // Original line.
+ mapping.originalLine = previousOriginalLine + segment[2];
+ previousOriginalLine = mapping.originalLine;
+ // Lines are stored 0-based
+ mapping.originalLine += 1;
+
+ // Original column.
+ mapping.originalColumn = previousOriginalColumn + segment[3];
+ previousOriginalColumn = mapping.originalColumn;
+
+ if (segment.length > 4) {
+ // Original name.
+ mapping.name = previousName + segment[4];
+ previousName += segment[4];
+ }
+ }
+
+ generatedMappings.push(mapping);
+ if (typeof mapping.originalLine === 'number') {
+ let currentSource = mapping.source;
+ while (originalMappings.length <= currentSource) {
+ originalMappings.push(null);
+ }
+ if (originalMappings[currentSource] === null) {
+ originalMappings[currentSource] = [];
+ }
+ originalMappings[currentSource].push(mapping);
+ }
+ }
+ }
+
+ sortGenerated(generatedMappings, subarrayStart);
+ this.__generatedMappings = generatedMappings;
+
+ for (var i = 0; i < originalMappings.length; i++) {
+ if (originalMappings[i] != null) {
+ quickSort(originalMappings[i], util.compareByOriginalPositionsNoSource);
+ }
+ }
+ this.__originalMappings = [].concat(...originalMappings);
+ };
+
+/**
+ * Find the mapping that best matches the hypothetical "needle" mapping that
+ * we are searching for in the given "haystack" of mappings.
+ */
+BasicSourceMapConsumer.prototype._findMapping =
+ function SourceMapConsumer_findMapping(aNeedle, aMappings, aLineName,
+ aColumnName, aComparator, aBias) {
+ // To return the position we are searching for, we must first find the
+ // mapping for the given position and then return the opposite position it
+ // points to. Because the mappings are sorted, we can use binary search to
+ // find the best mapping.
+
+ if (aNeedle[aLineName] <= 0) {
+ throw new TypeError('Line must be greater than or equal to 1, got '
+ + aNeedle[aLineName]);
+ }
+ if (aNeedle[aColumnName] < 0) {
+ throw new TypeError('Column must be greater than or equal to 0, got '
+ + aNeedle[aColumnName]);
+ }
+
+ return binarySearch.search(aNeedle, aMappings, aComparator, aBias);
+ };
+
+/**
+ * Compute the last column for each generated mapping. The last column is
+ * inclusive.
+ */
+BasicSourceMapConsumer.prototype.computeColumnSpans =
+ function SourceMapConsumer_computeColumnSpans() {
+ for (var index = 0; index < this._generatedMappings.length; ++index) {
+ var mapping = this._generatedMappings[index];
+
+ // Mappings do not contain a field for the last generated columnt. We
+ // can come up with an optimistic estimate, however, by assuming that
+ // mappings are contiguous (i.e. given two consecutive mappings, the
+ // first mapping ends where the second one starts).
+ if (index + 1 < this._generatedMappings.length) {
+ var nextMapping = this._generatedMappings[index + 1];
+
+ if (mapping.generatedLine === nextMapping.generatedLine) {
+ mapping.lastGeneratedColumn = nextMapping.generatedColumn - 1;
+ continue;
+ }
+ }
+
+ // The last mapping for each line spans the entire line.
+ mapping.lastGeneratedColumn = Infinity;
+ }
+ };
+
+/**
+ * Returns the original source, line, and column information for the generated
+ * source's line and column positions provided. The only argument is an object
+ * with the following properties:
+ *
+ * - line: The line number in the generated source. The line number
+ * is 1-based.
+ * - column: The column number in the generated source. The column
+ * number is 0-based.
+ * - bias: Either 'SourceMapConsumer.GREATEST_LOWER_BOUND' or
+ * 'SourceMapConsumer.LEAST_UPPER_BOUND'. Specifies whether to return the
+ * closest element that is smaller than or greater than the one we are
+ * searching for, respectively, if the exact element cannot be found.
+ * Defaults to 'SourceMapConsumer.GREATEST_LOWER_BOUND'.
+ *
+ * and an object is returned with the following properties:
+ *
+ * - source: The original source file, or null.
+ * - line: The line number in the original source, or null. The
+ * line number is 1-based.
+ * - column: The column number in the original source, or null. The
+ * column number is 0-based.
+ * - name: The original identifier, or null.
+ */
+BasicSourceMapConsumer.prototype.originalPositionFor =
+ function SourceMapConsumer_originalPositionFor(aArgs) {
+ var needle = {
+ generatedLine: util.getArg(aArgs, 'line'),
+ generatedColumn: util.getArg(aArgs, 'column')
+ };
+
+ var index = this._findMapping(
+ needle,
+ this._generatedMappings,
+ "generatedLine",
+ "generatedColumn",
+ util.compareByGeneratedPositionsDeflated,
+ util.getArg(aArgs, 'bias', SourceMapConsumer.GREATEST_LOWER_BOUND)
+ );
+
+ if (index >= 0) {
+ var mapping = this._generatedMappings[index];
+
+ if (mapping.generatedLine === needle.generatedLine) {
+ var source = util.getArg(mapping, 'source', null);
+ if (source !== null) {
+ source = this._sources.at(source);
+ source = util.computeSourceURL(this.sourceRoot, source, this._sourceMapURL);
+ }
+ var name = util.getArg(mapping, 'name', null);
+ if (name !== null) {
+ name = this._names.at(name);
+ }
+ return {
+ source: source,
+ line: util.getArg(mapping, 'originalLine', null),
+ column: util.getArg(mapping, 'originalColumn', null),
+ name: name
+ };
+ }
+ }
+
+ return {
+ source: null,
+ line: null,
+ column: null,
+ name: null
+ };
+ };
+
+/**
+ * Return true if we have the source content for every source in the source
+ * map, false otherwise.
+ */
+BasicSourceMapConsumer.prototype.hasContentsOfAllSources =
+ function BasicSourceMapConsumer_hasContentsOfAllSources() {
+ if (!this.sourcesContent) {
+ return false;
+ }
+ return this.sourcesContent.length >= this._sources.size() &&
+ !this.sourcesContent.some(function (sc) { return sc == null; });
+ };
+
+/**
+ * Returns the original source content. The only argument is the url of the
+ * original source file. Returns null if no original source content is
+ * available.
+ */
+BasicSourceMapConsumer.prototype.sourceContentFor =
+ function SourceMapConsumer_sourceContentFor(aSource, nullOnMissing) {
+ if (!this.sourcesContent) {
+ return null;
+ }
+
+ var index = this._findSourceIndex(aSource);
+ if (index >= 0) {
+ return this.sourcesContent[index];
+ }
+
+ var relativeSource = aSource;
+ if (this.sourceRoot != null) {
+ relativeSource = util.relative(this.sourceRoot, relativeSource);
+ }
+
+ var url;
+ if (this.sourceRoot != null
+ && (url = util.urlParse(this.sourceRoot))) {
+ // XXX: file:// URIs and absolute paths lead to unexpected behavior for
+ // many users. We can help them out when they expect file:// URIs to
+ // behave like it would if they were running a local HTTP server. See
+ // https://bugzilla.mozilla.org/show_bug.cgi?id=885597.
+ var fileUriAbsPath = relativeSource.replace(/^file:\/\//, "");
+ if (url.scheme == "file"
+ && this._sources.has(fileUriAbsPath)) {
+ return this.sourcesContent[this._sources.indexOf(fileUriAbsPath)]
+ }
+
+ if ((!url.path || url.path == "/")
+ && this._sources.has("/" + relativeSource)) {
+ return this.sourcesContent[this._sources.indexOf("/" + relativeSource)];
+ }
+ }
+
+ // This function is used recursively from
+ // IndexedSourceMapConsumer.prototype.sourceContentFor. In that case, we
+ // don't want to throw if we can't find the source - we just want to
+ // return null, so we provide a flag to exit gracefully.
+ if (nullOnMissing) {
+ return null;
+ }
+ else {
+ throw new Error('"' + relativeSource + '" is not in the SourceMap.');
+ }
+ };
+
+/**
+ * Returns the generated line and column information for the original source,
+ * line, and column positions provided. The only argument is an object with
+ * the following properties:
+ *
+ * - source: The filename of the original source.
+ * - line: The line number in the original source. The line number
+ * is 1-based.
+ * - column: The column number in the original source. The column
+ * number is 0-based.
+ * - bias: Either 'SourceMapConsumer.GREATEST_LOWER_BOUND' or
+ * 'SourceMapConsumer.LEAST_UPPER_BOUND'. Specifies whether to return the
+ * closest element that is smaller than or greater than the one we are
+ * searching for, respectively, if the exact element cannot be found.
+ * Defaults to 'SourceMapConsumer.GREATEST_LOWER_BOUND'.
+ *
+ * and an object is returned with the following properties:
+ *
+ * - line: The line number in the generated source, or null. The
+ * line number is 1-based.
+ * - column: The column number in the generated source, or null.
+ * The column number is 0-based.
+ */
+BasicSourceMapConsumer.prototype.generatedPositionFor =
+ function SourceMapConsumer_generatedPositionFor(aArgs) {
+ var source = util.getArg(aArgs, 'source');
+ source = this._findSourceIndex(source);
+ if (source < 0) {
+ return {
+ line: null,
+ column: null,
+ lastColumn: null
+ };
+ }
+
+ var needle = {
+ source: source,
+ originalLine: util.getArg(aArgs, 'line'),
+ originalColumn: util.getArg(aArgs, 'column')
+ };
+
+ var index = this._findMapping(
+ needle,
+ this._originalMappings,
+ "originalLine",
+ "originalColumn",
+ util.compareByOriginalPositions,
+ util.getArg(aArgs, 'bias', SourceMapConsumer.GREATEST_LOWER_BOUND)
+ );
+
+ if (index >= 0) {
+ var mapping = this._originalMappings[index];
+
+ if (mapping.source === needle.source) {
+ return {
+ line: util.getArg(mapping, 'generatedLine', null),
+ column: util.getArg(mapping, 'generatedColumn', null),
+ lastColumn: util.getArg(mapping, 'lastGeneratedColumn', null)
+ };
+ }
+ }
+
+ return {
+ line: null,
+ column: null,
+ lastColumn: null
+ };
+ };
+
+exports.BasicSourceMapConsumer = BasicSourceMapConsumer;
+
+/**
+ * An IndexedSourceMapConsumer instance represents a parsed source map which
+ * we can query for information. It differs from BasicSourceMapConsumer in
+ * that it takes "indexed" source maps (i.e. ones with a "sections" field) as
+ * input.
+ *
+ * The first parameter is a raw source map (either as a JSON string, or already
+ * parsed to an object). According to the spec for indexed source maps, they
+ * have the following attributes:
+ *
+ * - version: Which version of the source map spec this map is following.
+ * - file: Optional. The generated file this source map is associated with.
+ * - sections: A list of section definitions.
+ *
+ * Each value under the "sections" field has two fields:
+ * - offset: The offset into the original specified at which this section
+ * begins to apply, defined as an object with a "line" and "column"
+ * field.
+ * - map: A source map definition. This source map could also be indexed,
+ * but doesn't have to be.
+ *
+ * Instead of the "map" field, it's also possible to have a "url" field
+ * specifying a URL to retrieve a source map from, but that's currently
+ * unsupported.
+ *
+ * Here's an example source map, taken from the source map spec[0], but
+ * modified to omit a section which uses the "url" field.
+ *
+ * {
+ * version : 3,
+ * file: "app.js",
+ * sections: [{
+ * offset: {line:100, column:10},
+ * map: {
+ * version : 3,
+ * file: "section.js",
+ * sources: ["foo.js", "bar.js"],
+ * names: ["src", "maps", "are", "fun"],
+ * mappings: "AAAA,E;;ABCDE;"
+ * }
+ * }],
+ * }
+ *
+ * The second parameter, if given, is a string whose value is the URL
+ * at which the source map was found. This URL is used to compute the
+ * sources array.
+ *
+ * [0]: https://docs.google.com/document/d/1U1RGAehQwRypUTovF1KRlpiOFze0b-_2gc6fAH0KY0k/edit#heading=h.535es3xeprgt
+ */
+function IndexedSourceMapConsumer(aSourceMap, aSourceMapURL) {
+ var sourceMap = aSourceMap;
+ if (typeof aSourceMap === 'string') {
+ sourceMap = util.parseSourceMapInput(aSourceMap);
+ }
+
+ var version = util.getArg(sourceMap, 'version');
+ var sections = util.getArg(sourceMap, 'sections');
+
+ if (version != this._version) {
+ throw new Error('Unsupported version: ' + version);
+ }
+
+ this._sources = new ArraySet();
+ this._names = new ArraySet();
+
+ var lastOffset = {
+ line: -1,
+ column: 0
+ };
+ this._sections = sections.map(function (s) {
+ if (s.url) {
+ // The url field will require support for asynchronicity.
+ // See https://github.com/mozilla/source-map/issues/16
+ throw new Error('Support for url field in sections not implemented.');
+ }
+ var offset = util.getArg(s, 'offset');
+ var offsetLine = util.getArg(offset, 'line');
+ var offsetColumn = util.getArg(offset, 'column');
+
+ if (offsetLine < lastOffset.line ||
+ (offsetLine === lastOffset.line && offsetColumn < lastOffset.column)) {
+ throw new Error('Section offsets must be ordered and non-overlapping.');
+ }
+ lastOffset = offset;
+
+ return {
+ generatedOffset: {
+ // The offset fields are 0-based, but we use 1-based indices when
+ // encoding/decoding from VLQ.
+ generatedLine: offsetLine + 1,
+ generatedColumn: offsetColumn + 1
+ },
+ consumer: new SourceMapConsumer(util.getArg(s, 'map'), aSourceMapURL)
+ }
+ });
+}
+
+IndexedSourceMapConsumer.prototype = Object.create(SourceMapConsumer.prototype);
+IndexedSourceMapConsumer.prototype.constructor = SourceMapConsumer;
+
+/**
+ * The version of the source mapping spec that we are consuming.
+ */
+IndexedSourceMapConsumer.prototype._version = 3;
+
+/**
+ * The list of original sources.
+ */
+Object.defineProperty(IndexedSourceMapConsumer.prototype, 'sources', {
+ get: function () {
+ var sources = [];
+ for (var i = 0; i < this._sections.length; i++) {
+ for (var j = 0; j < this._sections[i].consumer.sources.length; j++) {
+ sources.push(this._sections[i].consumer.sources[j]);
+ }
+ }
+ return sources;
+ }
+});
+
+/**
+ * Returns the original source, line, and column information for the generated
+ * source's line and column positions provided. The only argument is an object
+ * with the following properties:
+ *
+ * - line: The line number in the generated source. The line number
+ * is 1-based.
+ * - column: The column number in the generated source. The column
+ * number is 0-based.
+ *
+ * and an object is returned with the following properties:
+ *
+ * - source: The original source file, or null.
+ * - line: The line number in the original source, or null. The
+ * line number is 1-based.
+ * - column: The column number in the original source, or null. The
+ * column number is 0-based.
+ * - name: The original identifier, or null.
+ */
+IndexedSourceMapConsumer.prototype.originalPositionFor =
+ function IndexedSourceMapConsumer_originalPositionFor(aArgs) {
+ var needle = {
+ generatedLine: util.getArg(aArgs, 'line'),
+ generatedColumn: util.getArg(aArgs, 'column')
+ };
+
+ // Find the section containing the generated position we're trying to map
+ // to an original position.
+ var sectionIndex = binarySearch.search(needle, this._sections,
+ function(needle, section) {
+ var cmp = needle.generatedLine - section.generatedOffset.generatedLine;
+ if (cmp) {
+ return cmp;
+ }
+
+ return (needle.generatedColumn -
+ section.generatedOffset.generatedColumn);
+ });
+ var section = this._sections[sectionIndex];
+
+ if (!section) {
+ return {
+ source: null,
+ line: null,
+ column: null,
+ name: null
+ };
+ }
+
+ return section.consumer.originalPositionFor({
+ line: needle.generatedLine -
+ (section.generatedOffset.generatedLine - 1),
+ column: needle.generatedColumn -
+ (section.generatedOffset.generatedLine === needle.generatedLine
+ ? section.generatedOffset.generatedColumn - 1
+ : 0),
+ bias: aArgs.bias
+ });
+ };
+
+/**
+ * Return true if we have the source content for every source in the source
+ * map, false otherwise.
+ */
+IndexedSourceMapConsumer.prototype.hasContentsOfAllSources =
+ function IndexedSourceMapConsumer_hasContentsOfAllSources() {
+ return this._sections.every(function (s) {
+ return s.consumer.hasContentsOfAllSources();
+ });
+ };
+
+/**
+ * Returns the original source content. The only argument is the url of the
+ * original source file. Returns null if no original source content is
+ * available.
+ */
+IndexedSourceMapConsumer.prototype.sourceContentFor =
+ function IndexedSourceMapConsumer_sourceContentFor(aSource, nullOnMissing) {
+ for (var i = 0; i < this._sections.length; i++) {
+ var section = this._sections[i];
+
+ var content = section.consumer.sourceContentFor(aSource, true);
+ if (content) {
+ return content;
+ }
+ }
+ if (nullOnMissing) {
+ return null;
+ }
+ else {
+ throw new Error('"' + aSource + '" is not in the SourceMap.');
+ }
+ };
+
+/**
+ * Returns the generated line and column information for the original source,
+ * line, and column positions provided. The only argument is an object with
+ * the following properties:
+ *
+ * - source: The filename of the original source.
+ * - line: The line number in the original source. The line number
+ * is 1-based.
+ * - column: The column number in the original source. The column
+ * number is 0-based.
+ *
+ * and an object is returned with the following properties:
+ *
+ * - line: The line number in the generated source, or null. The
+ * line number is 1-based.
+ * - column: The column number in the generated source, or null.
+ * The column number is 0-based.
+ */
+IndexedSourceMapConsumer.prototype.generatedPositionFor =
+ function IndexedSourceMapConsumer_generatedPositionFor(aArgs) {
+ for (var i = 0; i < this._sections.length; i++) {
+ var section = this._sections[i];
+
+ // Only consider this section if the requested source is in the list of
+ // sources of the consumer.
+ if (section.consumer._findSourceIndex(util.getArg(aArgs, 'source')) === -1) {
+ continue;
+ }
+ var generatedPosition = section.consumer.generatedPositionFor(aArgs);
+ if (generatedPosition) {
+ var ret = {
+ line: generatedPosition.line +
+ (section.generatedOffset.generatedLine - 1),
+ column: generatedPosition.column +
+ (section.generatedOffset.generatedLine === generatedPosition.line
+ ? section.generatedOffset.generatedColumn - 1
+ : 0)
+ };
+ return ret;
+ }
+ }
+
+ return {
+ line: null,
+ column: null
+ };
+ };
+
+/**
+ * Parse the mappings in a string in to a data structure which we can easily
+ * query (the ordered arrays in the `this.__generatedMappings` and
+ * `this.__originalMappings` properties).
+ */
+IndexedSourceMapConsumer.prototype._parseMappings =
+ function IndexedSourceMapConsumer_parseMappings(aStr, aSourceRoot) {
+ this.__generatedMappings = [];
+ this.__originalMappings = [];
+ for (var i = 0; i < this._sections.length; i++) {
+ var section = this._sections[i];
+ var sectionMappings = section.consumer._generatedMappings;
+ for (var j = 0; j < sectionMappings.length; j++) {
+ var mapping = sectionMappings[j];
+
+ var source = section.consumer._sources.at(mapping.source);
+ source = util.computeSourceURL(section.consumer.sourceRoot, source, this._sourceMapURL);
+ this._sources.add(source);
+ source = this._sources.indexOf(source);
+
+ var name = null;
+ if (mapping.name) {
+ name = section.consumer._names.at(mapping.name);
+ this._names.add(name);
+ name = this._names.indexOf(name);
+ }
+
+ // The mappings coming from the consumer for the section have
+ // generated positions relative to the start of the section, so we
+ // need to offset them to be relative to the start of the concatenated
+ // generated file.
+ var adjustedMapping = {
+ source: source,
+ generatedLine: mapping.generatedLine +
+ (section.generatedOffset.generatedLine - 1),
+ generatedColumn: mapping.generatedColumn +
+ (section.generatedOffset.generatedLine === mapping.generatedLine
+ ? section.generatedOffset.generatedColumn - 1
+ : 0),
+ originalLine: mapping.originalLine,
+ originalColumn: mapping.originalColumn,
+ name: name
+ };
+
+ this.__generatedMappings.push(adjustedMapping);
+ if (typeof adjustedMapping.originalLine === 'number') {
+ this.__originalMappings.push(adjustedMapping);
+ }
+ }
+ }
+
+ quickSort(this.__generatedMappings, util.compareByGeneratedPositionsDeflated);
+ quickSort(this.__originalMappings, util.compareByOriginalPositions);
+ };
+
+exports.IndexedSourceMapConsumer = IndexedSourceMapConsumer;
diff --git a/.output/server/node_modules/source-map-js/lib/source-map-generator.js b/.output/server/node_modules/source-map-js/lib/source-map-generator.js
new file mode 100644
index 0000000..508bcfb
--- /dev/null
+++ b/.output/server/node_modules/source-map-js/lib/source-map-generator.js
@@ -0,0 +1,425 @@
+/* -*- Mode: js; js-indent-level: 2; -*- */
+/*
+ * Copyright 2011 Mozilla Foundation and contributors
+ * Licensed under the New BSD license. See LICENSE or:
+ * http://opensource.org/licenses/BSD-3-Clause
+ */
+
+var base64VLQ = require('./base64-vlq');
+var util = require('./util');
+var ArraySet = require('./array-set').ArraySet;
+var MappingList = require('./mapping-list').MappingList;
+
+/**
+ * An instance of the SourceMapGenerator represents a source map which is
+ * being built incrementally. You may pass an object with the following
+ * properties:
+ *
+ * - file: The filename of the generated source.
+ * - sourceRoot: A root for all relative URLs in this source map.
+ */
+function SourceMapGenerator(aArgs) {
+ if (!aArgs) {
+ aArgs = {};
+ }
+ this._file = util.getArg(aArgs, 'file', null);
+ this._sourceRoot = util.getArg(aArgs, 'sourceRoot', null);
+ this._skipValidation = util.getArg(aArgs, 'skipValidation', false);
+ this._sources = new ArraySet();
+ this._names = new ArraySet();
+ this._mappings = new MappingList();
+ this._sourcesContents = null;
+}
+
+SourceMapGenerator.prototype._version = 3;
+
+/**
+ * Creates a new SourceMapGenerator based on a SourceMapConsumer
+ *
+ * @param aSourceMapConsumer The SourceMap.
+ */
+SourceMapGenerator.fromSourceMap =
+ function SourceMapGenerator_fromSourceMap(aSourceMapConsumer) {
+ var sourceRoot = aSourceMapConsumer.sourceRoot;
+ var generator = new SourceMapGenerator({
+ file: aSourceMapConsumer.file,
+ sourceRoot: sourceRoot
+ });
+ aSourceMapConsumer.eachMapping(function (mapping) {
+ var newMapping = {
+ generated: {
+ line: mapping.generatedLine,
+ column: mapping.generatedColumn
+ }
+ };
+
+ if (mapping.source != null) {
+ newMapping.source = mapping.source;
+ if (sourceRoot != null) {
+ newMapping.source = util.relative(sourceRoot, newMapping.source);
+ }
+
+ newMapping.original = {
+ line: mapping.originalLine,
+ column: mapping.originalColumn
+ };
+
+ if (mapping.name != null) {
+ newMapping.name = mapping.name;
+ }
+ }
+
+ generator.addMapping(newMapping);
+ });
+ aSourceMapConsumer.sources.forEach(function (sourceFile) {
+ var sourceRelative = sourceFile;
+ if (sourceRoot !== null) {
+ sourceRelative = util.relative(sourceRoot, sourceFile);
+ }
+
+ if (!generator._sources.has(sourceRelative)) {
+ generator._sources.add(sourceRelative);
+ }
+
+ var content = aSourceMapConsumer.sourceContentFor(sourceFile);
+ if (content != null) {
+ generator.setSourceContent(sourceFile, content);
+ }
+ });
+ return generator;
+ };
+
+/**
+ * Add a single mapping from original source line and column to the generated
+ * source's line and column for this source map being created. The mapping
+ * object should have the following properties:
+ *
+ * - generated: An object with the generated line and column positions.
+ * - original: An object with the original line and column positions.
+ * - source: The original source file (relative to the sourceRoot).
+ * - name: An optional original token name for this mapping.
+ */
+SourceMapGenerator.prototype.addMapping =
+ function SourceMapGenerator_addMapping(aArgs) {
+ var generated = util.getArg(aArgs, 'generated');
+ var original = util.getArg(aArgs, 'original', null);
+ var source = util.getArg(aArgs, 'source', null);
+ var name = util.getArg(aArgs, 'name', null);
+
+ if (!this._skipValidation) {
+ this._validateMapping(generated, original, source, name);
+ }
+
+ if (source != null) {
+ source = String(source);
+ if (!this._sources.has(source)) {
+ this._sources.add(source);
+ }
+ }
+
+ if (name != null) {
+ name = String(name);
+ if (!this._names.has(name)) {
+ this._names.add(name);
+ }
+ }
+
+ this._mappings.add({
+ generatedLine: generated.line,
+ generatedColumn: generated.column,
+ originalLine: original != null && original.line,
+ originalColumn: original != null && original.column,
+ source: source,
+ name: name
+ });
+ };
+
+/**
+ * Set the source content for a source file.
+ */
+SourceMapGenerator.prototype.setSourceContent =
+ function SourceMapGenerator_setSourceContent(aSourceFile, aSourceContent) {
+ var source = aSourceFile;
+ if (this._sourceRoot != null) {
+ source = util.relative(this._sourceRoot, source);
+ }
+
+ if (aSourceContent != null) {
+ // Add the source content to the _sourcesContents map.
+ // Create a new _sourcesContents map if the property is null.
+ if (!this._sourcesContents) {
+ this._sourcesContents = Object.create(null);
+ }
+ this._sourcesContents[util.toSetString(source)] = aSourceContent;
+ } else if (this._sourcesContents) {
+ // Remove the source file from the _sourcesContents map.
+ // If the _sourcesContents map is empty, set the property to null.
+ delete this._sourcesContents[util.toSetString(source)];
+ if (Object.keys(this._sourcesContents).length === 0) {
+ this._sourcesContents = null;
+ }
+ }
+ };
+
+/**
+ * Applies the mappings of a sub-source-map for a specific source file to the
+ * source map being generated. Each mapping to the supplied source file is
+ * rewritten using the supplied source map. Note: The resolution for the
+ * resulting mappings is the minimium of this map and the supplied map.
+ *
+ * @param aSourceMapConsumer The source map to be applied.
+ * @param aSourceFile Optional. The filename of the source file.
+ * If omitted, SourceMapConsumer's file property will be used.
+ * @param aSourceMapPath Optional. The dirname of the path to the source map
+ * to be applied. If relative, it is relative to the SourceMapConsumer.
+ * This parameter is needed when the two source maps aren't in the same
+ * directory, and the source map to be applied contains relative source
+ * paths. If so, those relative source paths need to be rewritten
+ * relative to the SourceMapGenerator.
+ */
+SourceMapGenerator.prototype.applySourceMap =
+ function SourceMapGenerator_applySourceMap(aSourceMapConsumer, aSourceFile, aSourceMapPath) {
+ var sourceFile = aSourceFile;
+ // If aSourceFile is omitted, we will use the file property of the SourceMap
+ if (aSourceFile == null) {
+ if (aSourceMapConsumer.file == null) {
+ throw new Error(
+ 'SourceMapGenerator.prototype.applySourceMap requires either an explicit source file, ' +
+ 'or the source map\'s "file" property. Both were omitted.'
+ );
+ }
+ sourceFile = aSourceMapConsumer.file;
+ }
+ var sourceRoot = this._sourceRoot;
+ // Make "sourceFile" relative if an absolute Url is passed.
+ if (sourceRoot != null) {
+ sourceFile = util.relative(sourceRoot, sourceFile);
+ }
+ // Applying the SourceMap can add and remove items from the sources and
+ // the names array.
+ var newSources = new ArraySet();
+ var newNames = new ArraySet();
+
+ // Find mappings for the "sourceFile"
+ this._mappings.unsortedForEach(function (mapping) {
+ if (mapping.source === sourceFile && mapping.originalLine != null) {
+ // Check if it can be mapped by the source map, then update the mapping.
+ var original = aSourceMapConsumer.originalPositionFor({
+ line: mapping.originalLine,
+ column: mapping.originalColumn
+ });
+ if (original.source != null) {
+ // Copy mapping
+ mapping.source = original.source;
+ if (aSourceMapPath != null) {
+ mapping.source = util.join(aSourceMapPath, mapping.source)
+ }
+ if (sourceRoot != null) {
+ mapping.source = util.relative(sourceRoot, mapping.source);
+ }
+ mapping.originalLine = original.line;
+ mapping.originalColumn = original.column;
+ if (original.name != null) {
+ mapping.name = original.name;
+ }
+ }
+ }
+
+ var source = mapping.source;
+ if (source != null && !newSources.has(source)) {
+ newSources.add(source);
+ }
+
+ var name = mapping.name;
+ if (name != null && !newNames.has(name)) {
+ newNames.add(name);
+ }
+
+ }, this);
+ this._sources = newSources;
+ this._names = newNames;
+
+ // Copy sourcesContents of applied map.
+ aSourceMapConsumer.sources.forEach(function (sourceFile) {
+ var content = aSourceMapConsumer.sourceContentFor(sourceFile);
+ if (content != null) {
+ if (aSourceMapPath != null) {
+ sourceFile = util.join(aSourceMapPath, sourceFile);
+ }
+ if (sourceRoot != null) {
+ sourceFile = util.relative(sourceRoot, sourceFile);
+ }
+ this.setSourceContent(sourceFile, content);
+ }
+ }, this);
+ };
+
+/**
+ * A mapping can have one of the three levels of data:
+ *
+ * 1. Just the generated position.
+ * 2. The Generated position, original position, and original source.
+ * 3. Generated and original position, original source, as well as a name
+ * token.
+ *
+ * To maintain consistency, we validate that any new mapping being added falls
+ * in to one of these categories.
+ */
+SourceMapGenerator.prototype._validateMapping =
+ function SourceMapGenerator_validateMapping(aGenerated, aOriginal, aSource,
+ aName) {
+ // When aOriginal is truthy but has empty values for .line and .column,
+ // it is most likely a programmer error. In this case we throw a very
+ // specific error message to try to guide them the right way.
+ // For example: https://github.com/Polymer/polymer-bundler/pull/519
+ if (aOriginal && typeof aOriginal.line !== 'number' && typeof aOriginal.column !== 'number') {
+ throw new Error(
+ 'original.line and original.column are not numbers -- you probably meant to omit ' +
+ 'the original mapping entirely and only map the generated position. If so, pass ' +
+ 'null for the original mapping instead of an object with empty or null values.'
+ );
+ }
+
+ if (aGenerated && 'line' in aGenerated && 'column' in aGenerated
+ && aGenerated.line > 0 && aGenerated.column >= 0
+ && !aOriginal && !aSource && !aName) {
+ // Case 1.
+ return;
+ }
+ else if (aGenerated && 'line' in aGenerated && 'column' in aGenerated
+ && aOriginal && 'line' in aOriginal && 'column' in aOriginal
+ && aGenerated.line > 0 && aGenerated.column >= 0
+ && aOriginal.line > 0 && aOriginal.column >= 0
+ && aSource) {
+ // Cases 2 and 3.
+ return;
+ }
+ else {
+ throw new Error('Invalid mapping: ' + JSON.stringify({
+ generated: aGenerated,
+ source: aSource,
+ original: aOriginal,
+ name: aName
+ }));
+ }
+ };
+
+/**
+ * Serialize the accumulated mappings in to the stream of base 64 VLQs
+ * specified by the source map format.
+ */
+SourceMapGenerator.prototype._serializeMappings =
+ function SourceMapGenerator_serializeMappings() {
+ var previousGeneratedColumn = 0;
+ var previousGeneratedLine = 1;
+ var previousOriginalColumn = 0;
+ var previousOriginalLine = 0;
+ var previousName = 0;
+ var previousSource = 0;
+ var result = '';
+ var next;
+ var mapping;
+ var nameIdx;
+ var sourceIdx;
+
+ var mappings = this._mappings.toArray();
+ for (var i = 0, len = mappings.length; i < len; i++) {
+ mapping = mappings[i];
+ next = ''
+
+ if (mapping.generatedLine !== previousGeneratedLine) {
+ previousGeneratedColumn = 0;
+ while (mapping.generatedLine !== previousGeneratedLine) {
+ next += ';';
+ previousGeneratedLine++;
+ }
+ }
+ else {
+ if (i > 0) {
+ if (!util.compareByGeneratedPositionsInflated(mapping, mappings[i - 1])) {
+ continue;
+ }
+ next += ',';
+ }
+ }
+
+ next += base64VLQ.encode(mapping.generatedColumn
+ - previousGeneratedColumn);
+ previousGeneratedColumn = mapping.generatedColumn;
+
+ if (mapping.source != null) {
+ sourceIdx = this._sources.indexOf(mapping.source);
+ next += base64VLQ.encode(sourceIdx - previousSource);
+ previousSource = sourceIdx;
+
+ // lines are stored 0-based in SourceMap spec version 3
+ next += base64VLQ.encode(mapping.originalLine - 1
+ - previousOriginalLine);
+ previousOriginalLine = mapping.originalLine - 1;
+
+ next += base64VLQ.encode(mapping.originalColumn
+ - previousOriginalColumn);
+ previousOriginalColumn = mapping.originalColumn;
+
+ if (mapping.name != null) {
+ nameIdx = this._names.indexOf(mapping.name);
+ next += base64VLQ.encode(nameIdx - previousName);
+ previousName = nameIdx;
+ }
+ }
+
+ result += next;
+ }
+
+ return result;
+ };
+
+SourceMapGenerator.prototype._generateSourcesContent =
+ function SourceMapGenerator_generateSourcesContent(aSources, aSourceRoot) {
+ return aSources.map(function (source) {
+ if (!this._sourcesContents) {
+ return null;
+ }
+ if (aSourceRoot != null) {
+ source = util.relative(aSourceRoot, source);
+ }
+ var key = util.toSetString(source);
+ return Object.prototype.hasOwnProperty.call(this._sourcesContents, key)
+ ? this._sourcesContents[key]
+ : null;
+ }, this);
+ };
+
+/**
+ * Externalize the source map.
+ */
+SourceMapGenerator.prototype.toJSON =
+ function SourceMapGenerator_toJSON() {
+ var map = {
+ version: this._version,
+ sources: this._sources.toArray(),
+ names: this._names.toArray(),
+ mappings: this._serializeMappings()
+ };
+ if (this._file != null) {
+ map.file = this._file;
+ }
+ if (this._sourceRoot != null) {
+ map.sourceRoot = this._sourceRoot;
+ }
+ if (this._sourcesContents) {
+ map.sourcesContent = this._generateSourcesContent(map.sources, map.sourceRoot);
+ }
+
+ return map;
+ };
+
+/**
+ * Render the source map being generated to a string.
+ */
+SourceMapGenerator.prototype.toString =
+ function SourceMapGenerator_toString() {
+ return JSON.stringify(this.toJSON());
+ };
+
+exports.SourceMapGenerator = SourceMapGenerator;
diff --git a/.output/server/node_modules/source-map-js/lib/source-node.js b/.output/server/node_modules/source-map-js/lib/source-node.js
new file mode 100644
index 0000000..8bcdbe3
--- /dev/null
+++ b/.output/server/node_modules/source-map-js/lib/source-node.js
@@ -0,0 +1,413 @@
+/* -*- Mode: js; js-indent-level: 2; -*- */
+/*
+ * Copyright 2011 Mozilla Foundation and contributors
+ * Licensed under the New BSD license. See LICENSE or:
+ * http://opensource.org/licenses/BSD-3-Clause
+ */
+
+var SourceMapGenerator = require('./source-map-generator').SourceMapGenerator;
+var util = require('./util');
+
+// Matches a Windows-style `\r\n` newline or a `\n` newline used by all other
+// operating systems these days (capturing the result).
+var REGEX_NEWLINE = /(\r?\n)/;
+
+// Newline character code for charCodeAt() comparisons
+var NEWLINE_CODE = 10;
+
+// Private symbol for identifying `SourceNode`s when multiple versions of
+// the source-map library are loaded. This MUST NOT CHANGE across
+// versions!
+var isSourceNode = "$$$isSourceNode$$$";
+
+/**
+ * SourceNodes provide a way to abstract over interpolating/concatenating
+ * snippets of generated JavaScript source code while maintaining the line and
+ * column information associated with the original source code.
+ *
+ * @param aLine The original line number.
+ * @param aColumn The original column number.
+ * @param aSource The original source's filename.
+ * @param aChunks Optional. An array of strings which are snippets of
+ * generated JS, or other SourceNodes.
+ * @param aName The original identifier.
+ */
+function SourceNode(aLine, aColumn, aSource, aChunks, aName) {
+ this.children = [];
+ this.sourceContents = {};
+ this.line = aLine == null ? null : aLine;
+ this.column = aColumn == null ? null : aColumn;
+ this.source = aSource == null ? null : aSource;
+ this.name = aName == null ? null : aName;
+ this[isSourceNode] = true;
+ if (aChunks != null) this.add(aChunks);
+}
+
+/**
+ * Creates a SourceNode from generated code and a SourceMapConsumer.
+ *
+ * @param aGeneratedCode The generated code
+ * @param aSourceMapConsumer The SourceMap for the generated code
+ * @param aRelativePath Optional. The path that relative sources in the
+ * SourceMapConsumer should be relative to.
+ */
+SourceNode.fromStringWithSourceMap =
+ function SourceNode_fromStringWithSourceMap(aGeneratedCode, aSourceMapConsumer, aRelativePath) {
+ // The SourceNode we want to fill with the generated code
+ // and the SourceMap
+ var node = new SourceNode();
+
+ // All even indices of this array are one line of the generated code,
+ // while all odd indices are the newlines between two adjacent lines
+ // (since `REGEX_NEWLINE` captures its match).
+ // Processed fragments are accessed by calling `shiftNextLine`.
+ var remainingLines = aGeneratedCode.split(REGEX_NEWLINE);
+ var remainingLinesIndex = 0;
+ var shiftNextLine = function() {
+ var lineContents = getNextLine();
+ // The last line of a file might not have a newline.
+ var newLine = getNextLine() || "";
+ return lineContents + newLine;
+
+ function getNextLine() {
+ return remainingLinesIndex < remainingLines.length ?
+ remainingLines[remainingLinesIndex++] : undefined;
+ }
+ };
+
+ // We need to remember the position of "remainingLines"
+ var lastGeneratedLine = 1, lastGeneratedColumn = 0;
+
+ // The generate SourceNodes we need a code range.
+ // To extract it current and last mapping is used.
+ // Here we store the last mapping.
+ var lastMapping = null;
+
+ aSourceMapConsumer.eachMapping(function (mapping) {
+ if (lastMapping !== null) {
+ // We add the code from "lastMapping" to "mapping":
+ // First check if there is a new line in between.
+ if (lastGeneratedLine < mapping.generatedLine) {
+ // Associate first line with "lastMapping"
+ addMappingWithCode(lastMapping, shiftNextLine());
+ lastGeneratedLine++;
+ lastGeneratedColumn = 0;
+ // The remaining code is added without mapping
+ } else {
+ // There is no new line in between.
+ // Associate the code between "lastGeneratedColumn" and
+ // "mapping.generatedColumn" with "lastMapping"
+ var nextLine = remainingLines[remainingLinesIndex] || '';
+ var code = nextLine.substr(0, mapping.generatedColumn -
+ lastGeneratedColumn);
+ remainingLines[remainingLinesIndex] = nextLine.substr(mapping.generatedColumn -
+ lastGeneratedColumn);
+ lastGeneratedColumn = mapping.generatedColumn;
+ addMappingWithCode(lastMapping, code);
+ // No more remaining code, continue
+ lastMapping = mapping;
+ return;
+ }
+ }
+ // We add the generated code until the first mapping
+ // to the SourceNode without any mapping.
+ // Each line is added as separate string.
+ while (lastGeneratedLine < mapping.generatedLine) {
+ node.add(shiftNextLine());
+ lastGeneratedLine++;
+ }
+ if (lastGeneratedColumn < mapping.generatedColumn) {
+ var nextLine = remainingLines[remainingLinesIndex] || '';
+ node.add(nextLine.substr(0, mapping.generatedColumn));
+ remainingLines[remainingLinesIndex] = nextLine.substr(mapping.generatedColumn);
+ lastGeneratedColumn = mapping.generatedColumn;
+ }
+ lastMapping = mapping;
+ }, this);
+ // We have processed all mappings.
+ if (remainingLinesIndex < remainingLines.length) {
+ if (lastMapping) {
+ // Associate the remaining code in the current line with "lastMapping"
+ addMappingWithCode(lastMapping, shiftNextLine());
+ }
+ // and add the remaining lines without any mapping
+ node.add(remainingLines.splice(remainingLinesIndex).join(""));
+ }
+
+ // Copy sourcesContent into SourceNode
+ aSourceMapConsumer.sources.forEach(function (sourceFile) {
+ var content = aSourceMapConsumer.sourceContentFor(sourceFile);
+ if (content != null) {
+ if (aRelativePath != null) {
+ sourceFile = util.join(aRelativePath, sourceFile);
+ }
+ node.setSourceContent(sourceFile, content);
+ }
+ });
+
+ return node;
+
+ function addMappingWithCode(mapping, code) {
+ if (mapping === null || mapping.source === undefined) {
+ node.add(code);
+ } else {
+ var source = aRelativePath
+ ? util.join(aRelativePath, mapping.source)
+ : mapping.source;
+ node.add(new SourceNode(mapping.originalLine,
+ mapping.originalColumn,
+ source,
+ code,
+ mapping.name));
+ }
+ }
+ };
+
+/**
+ * Add a chunk of generated JS to this source node.
+ *
+ * @param aChunk A string snippet of generated JS code, another instance of
+ * SourceNode, or an array where each member is one of those things.
+ */
+SourceNode.prototype.add = function SourceNode_add(aChunk) {
+ if (Array.isArray(aChunk)) {
+ aChunk.forEach(function (chunk) {
+ this.add(chunk);
+ }, this);
+ }
+ else if (aChunk[isSourceNode] || typeof aChunk === "string") {
+ if (aChunk) {
+ this.children.push(aChunk);
+ }
+ }
+ else {
+ throw new TypeError(
+ "Expected a SourceNode, string, or an array of SourceNodes and strings. Got " + aChunk
+ );
+ }
+ return this;
+};
+
+/**
+ * Add a chunk of generated JS to the beginning of this source node.
+ *
+ * @param aChunk A string snippet of generated JS code, another instance of
+ * SourceNode, or an array where each member is one of those things.
+ */
+SourceNode.prototype.prepend = function SourceNode_prepend(aChunk) {
+ if (Array.isArray(aChunk)) {
+ for (var i = aChunk.length-1; i >= 0; i--) {
+ this.prepend(aChunk[i]);
+ }
+ }
+ else if (aChunk[isSourceNode] || typeof aChunk === "string") {
+ this.children.unshift(aChunk);
+ }
+ else {
+ throw new TypeError(
+ "Expected a SourceNode, string, or an array of SourceNodes and strings. Got " + aChunk
+ );
+ }
+ return this;
+};
+
+/**
+ * Walk over the tree of JS snippets in this node and its children. The
+ * walking function is called once for each snippet of JS and is passed that
+ * snippet and the its original associated source's line/column location.
+ *
+ * @param aFn The traversal function.
+ */
+SourceNode.prototype.walk = function SourceNode_walk(aFn) {
+ var chunk;
+ for (var i = 0, len = this.children.length; i < len; i++) {
+ chunk = this.children[i];
+ if (chunk[isSourceNode]) {
+ chunk.walk(aFn);
+ }
+ else {
+ if (chunk !== '') {
+ aFn(chunk, { source: this.source,
+ line: this.line,
+ column: this.column,
+ name: this.name });
+ }
+ }
+ }
+};
+
+/**
+ * Like `String.prototype.join` except for SourceNodes. Inserts `aStr` between
+ * each of `this.children`.
+ *
+ * @param aSep The separator.
+ */
+SourceNode.prototype.join = function SourceNode_join(aSep) {
+ var newChildren;
+ var i;
+ var len = this.children.length;
+ if (len > 0) {
+ newChildren = [];
+ for (i = 0; i < len-1; i++) {
+ newChildren.push(this.children[i]);
+ newChildren.push(aSep);
+ }
+ newChildren.push(this.children[i]);
+ this.children = newChildren;
+ }
+ return this;
+};
+
+/**
+ * Call String.prototype.replace on the very right-most source snippet. Useful
+ * for trimming whitespace from the end of a source node, etc.
+ *
+ * @param aPattern The pattern to replace.
+ * @param aReplacement The thing to replace the pattern with.
+ */
+SourceNode.prototype.replaceRight = function SourceNode_replaceRight(aPattern, aReplacement) {
+ var lastChild = this.children[this.children.length - 1];
+ if (lastChild[isSourceNode]) {
+ lastChild.replaceRight(aPattern, aReplacement);
+ }
+ else if (typeof lastChild === 'string') {
+ this.children[this.children.length - 1] = lastChild.replace(aPattern, aReplacement);
+ }
+ else {
+ this.children.push(''.replace(aPattern, aReplacement));
+ }
+ return this;
+};
+
+/**
+ * Set the source content for a source file. This will be added to the SourceMapGenerator
+ * in the sourcesContent field.
+ *
+ * @param aSourceFile The filename of the source file
+ * @param aSourceContent The content of the source file
+ */
+SourceNode.prototype.setSourceContent =
+ function SourceNode_setSourceContent(aSourceFile, aSourceContent) {
+ this.sourceContents[util.toSetString(aSourceFile)] = aSourceContent;
+ };
+
+/**
+ * Walk over the tree of SourceNodes. The walking function is called for each
+ * source file content and is passed the filename and source content.
+ *
+ * @param aFn The traversal function.
+ */
+SourceNode.prototype.walkSourceContents =
+ function SourceNode_walkSourceContents(aFn) {
+ for (var i = 0, len = this.children.length; i < len; i++) {
+ if (this.children[i][isSourceNode]) {
+ this.children[i].walkSourceContents(aFn);
+ }
+ }
+
+ var sources = Object.keys(this.sourceContents);
+ for (var i = 0, len = sources.length; i < len; i++) {
+ aFn(util.fromSetString(sources[i]), this.sourceContents[sources[i]]);
+ }
+ };
+
+/**
+ * Return the string representation of this source node. Walks over the tree
+ * and concatenates all the various snippets together to one string.
+ */
+SourceNode.prototype.toString = function SourceNode_toString() {
+ var str = "";
+ this.walk(function (chunk) {
+ str += chunk;
+ });
+ return str;
+};
+
+/**
+ * Returns the string representation of this source node along with a source
+ * map.
+ */
+SourceNode.prototype.toStringWithSourceMap = function SourceNode_toStringWithSourceMap(aArgs) {
+ var generated = {
+ code: "",
+ line: 1,
+ column: 0
+ };
+ var map = new SourceMapGenerator(aArgs);
+ var sourceMappingActive = false;
+ var lastOriginalSource = null;
+ var lastOriginalLine = null;
+ var lastOriginalColumn = null;
+ var lastOriginalName = null;
+ this.walk(function (chunk, original) {
+ generated.code += chunk;
+ if (original.source !== null
+ && original.line !== null
+ && original.column !== null) {
+ if(lastOriginalSource !== original.source
+ || lastOriginalLine !== original.line
+ || lastOriginalColumn !== original.column
+ || lastOriginalName !== original.name) {
+ map.addMapping({
+ source: original.source,
+ original: {
+ line: original.line,
+ column: original.column
+ },
+ generated: {
+ line: generated.line,
+ column: generated.column
+ },
+ name: original.name
+ });
+ }
+ lastOriginalSource = original.source;
+ lastOriginalLine = original.line;
+ lastOriginalColumn = original.column;
+ lastOriginalName = original.name;
+ sourceMappingActive = true;
+ } else if (sourceMappingActive) {
+ map.addMapping({
+ generated: {
+ line: generated.line,
+ column: generated.column
+ }
+ });
+ lastOriginalSource = null;
+ sourceMappingActive = false;
+ }
+ for (var idx = 0, length = chunk.length; idx < length; idx++) {
+ if (chunk.charCodeAt(idx) === NEWLINE_CODE) {
+ generated.line++;
+ generated.column = 0;
+ // Mappings end at eol
+ if (idx + 1 === length) {
+ lastOriginalSource = null;
+ sourceMappingActive = false;
+ } else if (sourceMappingActive) {
+ map.addMapping({
+ source: original.source,
+ original: {
+ line: original.line,
+ column: original.column
+ },
+ generated: {
+ line: generated.line,
+ column: generated.column
+ },
+ name: original.name
+ });
+ }
+ } else {
+ generated.column++;
+ }
+ }
+ });
+ this.walkSourceContents(function (sourceFile, sourceContent) {
+ map.setSourceContent(sourceFile, sourceContent);
+ });
+
+ return { code: generated.code, map: map };
+};
+
+exports.SourceNode = SourceNode;
diff --git a/.output/server/node_modules/source-map-js/lib/util.js b/.output/server/node_modules/source-map-js/lib/util.js
new file mode 100644
index 0000000..430e2d0
--- /dev/null
+++ b/.output/server/node_modules/source-map-js/lib/util.js
@@ -0,0 +1,594 @@
+/* -*- Mode: js; js-indent-level: 2; -*- */
+/*
+ * Copyright 2011 Mozilla Foundation and contributors
+ * Licensed under the New BSD license. See LICENSE or:
+ * http://opensource.org/licenses/BSD-3-Clause
+ */
+
+/**
+ * This is a helper function for getting values from parameter/options
+ * objects.
+ *
+ * @param args The object we are extracting values from
+ * @param name The name of the property we are getting.
+ * @param defaultValue An optional value to return if the property is missing
+ * from the object. If this is not specified and the property is missing, an
+ * error will be thrown.
+ */
+function getArg(aArgs, aName, aDefaultValue) {
+ if (aName in aArgs) {
+ return aArgs[aName];
+ } else if (arguments.length === 3) {
+ return aDefaultValue;
+ } else {
+ throw new Error('"' + aName + '" is a required argument.');
+ }
+}
+exports.getArg = getArg;
+
+var urlRegexp = /^(?:([\w+\-.]+):)?\/\/(?:(\w+:\w+)@)?([\w.-]*)(?::(\d+))?(.*)$/;
+var dataUrlRegexp = /^data:.+\,.+$/;
+
+function urlParse(aUrl) {
+ var match = aUrl.match(urlRegexp);
+ if (!match) {
+ return null;
+ }
+ return {
+ scheme: match[1],
+ auth: match[2],
+ host: match[3],
+ port: match[4],
+ path: match[5]
+ };
+}
+exports.urlParse = urlParse;
+
+function urlGenerate(aParsedUrl) {
+ var url = '';
+ if (aParsedUrl.scheme) {
+ url += aParsedUrl.scheme + ':';
+ }
+ url += '//';
+ if (aParsedUrl.auth) {
+ url += aParsedUrl.auth + '@';
+ }
+ if (aParsedUrl.host) {
+ url += aParsedUrl.host;
+ }
+ if (aParsedUrl.port) {
+ url += ":" + aParsedUrl.port
+ }
+ if (aParsedUrl.path) {
+ url += aParsedUrl.path;
+ }
+ return url;
+}
+exports.urlGenerate = urlGenerate;
+
+var MAX_CACHED_INPUTS = 32;
+
+/**
+ * Takes some function `f(input) -> result` and returns a memoized version of
+ * `f`.
+ *
+ * We keep at most `MAX_CACHED_INPUTS` memoized results of `f` alive. The
+ * memoization is a dumb-simple, linear least-recently-used cache.
+ */
+function lruMemoize(f) {
+ var cache = [];
+
+ return function(input) {
+ for (var i = 0; i < cache.length; i++) {
+ if (cache[i].input === input) {
+ var temp = cache[0];
+ cache[0] = cache[i];
+ cache[i] = temp;
+ return cache[0].result;
+ }
+ }
+
+ var result = f(input);
+
+ cache.unshift({
+ input,
+ result,
+ });
+
+ if (cache.length > MAX_CACHED_INPUTS) {
+ cache.pop();
+ }
+
+ return result;
+ };
+}
+
+/**
+ * Normalizes a path, or the path portion of a URL:
+ *
+ * - Replaces consecutive slashes with one slash.
+ * - Removes unnecessary '.' parts.
+ * - Removes unnecessary '/..' parts.
+ *
+ * Based on code in the Node.js 'path' core module.
+ *
+ * @param aPath The path or url to normalize.
+ */
+var normalize = lruMemoize(function normalize(aPath) {
+ var path = aPath;
+ var url = urlParse(aPath);
+ if (url) {
+ if (!url.path) {
+ return aPath;
+ }
+ path = url.path;
+ }
+ var isAbsolute = exports.isAbsolute(path);
+ // Split the path into parts between `/` characters. This is much faster than
+ // using `.split(/\/+/g)`.
+ var parts = [];
+ var start = 0;
+ var i = 0;
+ while (true) {
+ start = i;
+ i = path.indexOf("/", start);
+ if (i === -1) {
+ parts.push(path.slice(start));
+ break;
+ } else {
+ parts.push(path.slice(start, i));
+ while (i < path.length && path[i] === "/") {
+ i++;
+ }
+ }
+ }
+
+ for (var part, up = 0, i = parts.length - 1; i >= 0; i--) {
+ part = parts[i];
+ if (part === '.') {
+ parts.splice(i, 1);
+ } else if (part === '..') {
+ up++;
+ } else if (up > 0) {
+ if (part === '') {
+ // The first part is blank if the path is absolute. Trying to go
+ // above the root is a no-op. Therefore we can remove all '..' parts
+ // directly after the root.
+ parts.splice(i + 1, up);
+ up = 0;
+ } else {
+ parts.splice(i, 2);
+ up--;
+ }
+ }
+ }
+ path = parts.join('/');
+
+ if (path === '') {
+ path = isAbsolute ? '/' : '.';
+ }
+
+ if (url) {
+ url.path = path;
+ return urlGenerate(url);
+ }
+ return path;
+});
+exports.normalize = normalize;
+
+/**
+ * Joins two paths/URLs.
+ *
+ * @param aRoot The root path or URL.
+ * @param aPath The path or URL to be joined with the root.
+ *
+ * - If aPath is a URL or a data URI, aPath is returned, unless aPath is a
+ * scheme-relative URL: Then the scheme of aRoot, if any, is prepended
+ * first.
+ * - Otherwise aPath is a path. If aRoot is a URL, then its path portion
+ * is updated with the result and aRoot is returned. Otherwise the result
+ * is returned.
+ * - If aPath is absolute, the result is aPath.
+ * - Otherwise the two paths are joined with a slash.
+ * - Joining for example 'http://' and 'www.example.com' is also supported.
+ */
+function join(aRoot, aPath) {
+ if (aRoot === "") {
+ aRoot = ".";
+ }
+ if (aPath === "") {
+ aPath = ".";
+ }
+ var aPathUrl = urlParse(aPath);
+ var aRootUrl = urlParse(aRoot);
+ if (aRootUrl) {
+ aRoot = aRootUrl.path || '/';
+ }
+
+ // `join(foo, '//www.example.org')`
+ if (aPathUrl && !aPathUrl.scheme) {
+ if (aRootUrl) {
+ aPathUrl.scheme = aRootUrl.scheme;
+ }
+ return urlGenerate(aPathUrl);
+ }
+
+ if (aPathUrl || aPath.match(dataUrlRegexp)) {
+ return aPath;
+ }
+
+ // `join('http://', 'www.example.com')`
+ if (aRootUrl && !aRootUrl.host && !aRootUrl.path) {
+ aRootUrl.host = aPath;
+ return urlGenerate(aRootUrl);
+ }
+
+ var joined = aPath.charAt(0) === '/'
+ ? aPath
+ : normalize(aRoot.replace(/\/+$/, '') + '/' + aPath);
+
+ if (aRootUrl) {
+ aRootUrl.path = joined;
+ return urlGenerate(aRootUrl);
+ }
+ return joined;
+}
+exports.join = join;
+
+exports.isAbsolute = function (aPath) {
+ return aPath.charAt(0) === '/' || urlRegexp.test(aPath);
+};
+
+/**
+ * Make a path relative to a URL or another path.
+ *
+ * @param aRoot The root path or URL.
+ * @param aPath The path or URL to be made relative to aRoot.
+ */
+function relative(aRoot, aPath) {
+ if (aRoot === "") {
+ aRoot = ".";
+ }
+
+ aRoot = aRoot.replace(/\/$/, '');
+
+ // It is possible for the path to be above the root. In this case, simply
+ // checking whether the root is a prefix of the path won't work. Instead, we
+ // need to remove components from the root one by one, until either we find
+ // a prefix that fits, or we run out of components to remove.
+ var level = 0;
+ while (aPath.indexOf(aRoot + '/') !== 0) {
+ var index = aRoot.lastIndexOf("/");
+ if (index < 0) {
+ return aPath;
+ }
+
+ // If the only part of the root that is left is the scheme (i.e. http://,
+ // file:///, etc.), one or more slashes (/), or simply nothing at all, we
+ // have exhausted all components, so the path is not relative to the root.
+ aRoot = aRoot.slice(0, index);
+ if (aRoot.match(/^([^\/]+:\/)?\/*$/)) {
+ return aPath;
+ }
+
+ ++level;
+ }
+
+ // Make sure we add a "../" for each component we removed from the root.
+ return Array(level + 1).join("../") + aPath.substr(aRoot.length + 1);
+}
+exports.relative = relative;
+
+var supportsNullProto = (function () {
+ var obj = Object.create(null);
+ return !('__proto__' in obj);
+}());
+
+function identity (s) {
+ return s;
+}
+
+/**
+ * Because behavior goes wacky when you set `__proto__` on objects, we
+ * have to prefix all the strings in our set with an arbitrary character.
+ *
+ * See https://github.com/mozilla/source-map/pull/31 and
+ * https://github.com/mozilla/source-map/issues/30
+ *
+ * @param String aStr
+ */
+function toSetString(aStr) {
+ if (isProtoString(aStr)) {
+ return '$' + aStr;
+ }
+
+ return aStr;
+}
+exports.toSetString = supportsNullProto ? identity : toSetString;
+
+function fromSetString(aStr) {
+ if (isProtoString(aStr)) {
+ return aStr.slice(1);
+ }
+
+ return aStr;
+}
+exports.fromSetString = supportsNullProto ? identity : fromSetString;
+
+function isProtoString(s) {
+ if (!s) {
+ return false;
+ }
+
+ var length = s.length;
+
+ if (length < 9 /* "__proto__".length */) {
+ return false;
+ }
+
+ if (s.charCodeAt(length - 1) !== 95 /* '_' */ ||
+ s.charCodeAt(length - 2) !== 95 /* '_' */ ||
+ s.charCodeAt(length - 3) !== 111 /* 'o' */ ||
+ s.charCodeAt(length - 4) !== 116 /* 't' */ ||
+ s.charCodeAt(length - 5) !== 111 /* 'o' */ ||
+ s.charCodeAt(length - 6) !== 114 /* 'r' */ ||
+ s.charCodeAt(length - 7) !== 112 /* 'p' */ ||
+ s.charCodeAt(length - 8) !== 95 /* '_' */ ||
+ s.charCodeAt(length - 9) !== 95 /* '_' */) {
+ return false;
+ }
+
+ for (var i = length - 10; i >= 0; i--) {
+ if (s.charCodeAt(i) !== 36 /* '$' */) {
+ return false;
+ }
+ }
+
+ return true;
+}
+
+/**
+ * Comparator between two mappings where the original positions are compared.
+ *
+ * Optionally pass in `true` as `onlyCompareGenerated` to consider two
+ * mappings with the same original source/line/column, but different generated
+ * line and column the same. Useful when searching for a mapping with a
+ * stubbed out mapping.
+ */
+function compareByOriginalPositions(mappingA, mappingB, onlyCompareOriginal) {
+ var cmp = strcmp(mappingA.source, mappingB.source);
+ if (cmp !== 0) {
+ return cmp;
+ }
+
+ cmp = mappingA.originalLine - mappingB.originalLine;
+ if (cmp !== 0) {
+ return cmp;
+ }
+
+ cmp = mappingA.originalColumn - mappingB.originalColumn;
+ if (cmp !== 0 || onlyCompareOriginal) {
+ return cmp;
+ }
+
+ cmp = mappingA.generatedColumn - mappingB.generatedColumn;
+ if (cmp !== 0) {
+ return cmp;
+ }
+
+ cmp = mappingA.generatedLine - mappingB.generatedLine;
+ if (cmp !== 0) {
+ return cmp;
+ }
+
+ return strcmp(mappingA.name, mappingB.name);
+}
+exports.compareByOriginalPositions = compareByOriginalPositions;
+
+function compareByOriginalPositionsNoSource(mappingA, mappingB, onlyCompareOriginal) {
+ var cmp
+
+ cmp = mappingA.originalLine - mappingB.originalLine;
+ if (cmp !== 0) {
+ return cmp;
+ }
+
+ cmp = mappingA.originalColumn - mappingB.originalColumn;
+ if (cmp !== 0 || onlyCompareOriginal) {
+ return cmp;
+ }
+
+ cmp = mappingA.generatedColumn - mappingB.generatedColumn;
+ if (cmp !== 0) {
+ return cmp;
+ }
+
+ cmp = mappingA.generatedLine - mappingB.generatedLine;
+ if (cmp !== 0) {
+ return cmp;
+ }
+
+ return strcmp(mappingA.name, mappingB.name);
+}
+exports.compareByOriginalPositionsNoSource = compareByOriginalPositionsNoSource;
+
+/**
+ * Comparator between two mappings with deflated source and name indices where
+ * the generated positions are compared.
+ *
+ * Optionally pass in `true` as `onlyCompareGenerated` to consider two
+ * mappings with the same generated line and column, but different
+ * source/name/original line and column the same. Useful when searching for a
+ * mapping with a stubbed out mapping.
+ */
+function compareByGeneratedPositionsDeflated(mappingA, mappingB, onlyCompareGenerated) {
+ var cmp = mappingA.generatedLine - mappingB.generatedLine;
+ if (cmp !== 0) {
+ return cmp;
+ }
+
+ cmp = mappingA.generatedColumn - mappingB.generatedColumn;
+ if (cmp !== 0 || onlyCompareGenerated) {
+ return cmp;
+ }
+
+ cmp = strcmp(mappingA.source, mappingB.source);
+ if (cmp !== 0) {
+ return cmp;
+ }
+
+ cmp = mappingA.originalLine - mappingB.originalLine;
+ if (cmp !== 0) {
+ return cmp;
+ }
+
+ cmp = mappingA.originalColumn - mappingB.originalColumn;
+ if (cmp !== 0) {
+ return cmp;
+ }
+
+ return strcmp(mappingA.name, mappingB.name);
+}
+exports.compareByGeneratedPositionsDeflated = compareByGeneratedPositionsDeflated;
+
+function compareByGeneratedPositionsDeflatedNoLine(mappingA, mappingB, onlyCompareGenerated) {
+ var cmp = mappingA.generatedColumn - mappingB.generatedColumn;
+ if (cmp !== 0 || onlyCompareGenerated) {
+ return cmp;
+ }
+
+ cmp = strcmp(mappingA.source, mappingB.source);
+ if (cmp !== 0) {
+ return cmp;
+ }
+
+ cmp = mappingA.originalLine - mappingB.originalLine;
+ if (cmp !== 0) {
+ return cmp;
+ }
+
+ cmp = mappingA.originalColumn - mappingB.originalColumn;
+ if (cmp !== 0) {
+ return cmp;
+ }
+
+ return strcmp(mappingA.name, mappingB.name);
+}
+exports.compareByGeneratedPositionsDeflatedNoLine = compareByGeneratedPositionsDeflatedNoLine;
+
+function strcmp(aStr1, aStr2) {
+ if (aStr1 === aStr2) {
+ return 0;
+ }
+
+ if (aStr1 === null) {
+ return 1; // aStr2 !== null
+ }
+
+ if (aStr2 === null) {
+ return -1; // aStr1 !== null
+ }
+
+ if (aStr1 > aStr2) {
+ return 1;
+ }
+
+ return -1;
+}
+
+/**
+ * Comparator between two mappings with inflated source and name strings where
+ * the generated positions are compared.
+ */
+function compareByGeneratedPositionsInflated(mappingA, mappingB) {
+ var cmp = mappingA.generatedLine - mappingB.generatedLine;
+ if (cmp !== 0) {
+ return cmp;
+ }
+
+ cmp = mappingA.generatedColumn - mappingB.generatedColumn;
+ if (cmp !== 0) {
+ return cmp;
+ }
+
+ cmp = strcmp(mappingA.source, mappingB.source);
+ if (cmp !== 0) {
+ return cmp;
+ }
+
+ cmp = mappingA.originalLine - mappingB.originalLine;
+ if (cmp !== 0) {
+ return cmp;
+ }
+
+ cmp = mappingA.originalColumn - mappingB.originalColumn;
+ if (cmp !== 0) {
+ return cmp;
+ }
+
+ return strcmp(mappingA.name, mappingB.name);
+}
+exports.compareByGeneratedPositionsInflated = compareByGeneratedPositionsInflated;
+
+/**
+ * Strip any JSON XSSI avoidance prefix from the string (as documented
+ * in the source maps specification), and then parse the string as
+ * JSON.
+ */
+function parseSourceMapInput(str) {
+ return JSON.parse(str.replace(/^\)]}'[^\n]*\n/, ''));
+}
+exports.parseSourceMapInput = parseSourceMapInput;
+
+/**
+ * Compute the URL of a source given the the source root, the source's
+ * URL, and the source map's URL.
+ */
+function computeSourceURL(sourceRoot, sourceURL, sourceMapURL) {
+ sourceURL = sourceURL || '';
+
+ if (sourceRoot) {
+ // This follows what Chrome does.
+ if (sourceRoot[sourceRoot.length - 1] !== '/' && sourceURL[0] !== '/') {
+ sourceRoot += '/';
+ }
+ // The spec says:
+ // Line 4: An optional source root, useful for relocating source
+ // files on a server or removing repeated values in the
+ // “sources” entry. This value is prepended to the individual
+ // entries in the “source” field.
+ sourceURL = sourceRoot + sourceURL;
+ }
+
+ // Historically, SourceMapConsumer did not take the sourceMapURL as
+ // a parameter. This mode is still somewhat supported, which is why
+ // this code block is conditional. However, it's preferable to pass
+ // the source map URL to SourceMapConsumer, so that this function
+ // can implement the source URL resolution algorithm as outlined in
+ // the spec. This block is basically the equivalent of:
+ // new URL(sourceURL, sourceMapURL).toString()
+ // ... except it avoids using URL, which wasn't available in the
+ // older releases of node still supported by this library.
+ //
+ // The spec says:
+ // If the sources are not absolute URLs after prepending of the
+ // “sourceRoot”, the sources are resolved relative to the
+ // SourceMap (like resolving script src in a html document).
+ if (sourceMapURL) {
+ var parsed = urlParse(sourceMapURL);
+ if (!parsed) {
+ throw new Error("sourceMapURL could not be parsed");
+ }
+ if (parsed.path) {
+ // Strip the last path component, but keep the "/".
+ var index = parsed.path.lastIndexOf('/');
+ if (index >= 0) {
+ parsed.path = parsed.path.substring(0, index + 1);
+ }
+ }
+ sourceURL = join(urlGenerate(parsed), sourceURL);
+ }
+
+ return normalize(sourceURL);
+}
+exports.computeSourceURL = computeSourceURL;
diff --git a/.output/server/node_modules/source-map-js/package.json b/.output/server/node_modules/source-map-js/package.json
new file mode 100644
index 0000000..3576598
--- /dev/null
+++ b/.output/server/node_modules/source-map-js/package.json
@@ -0,0 +1,71 @@
+{
+ "name": "source-map-js",
+ "description": "Generates and consumes source maps",
+ "version": "1.0.2",
+ "homepage": "https://github.com/7rulnik/source-map-js",
+ "author": "Valentin 7rulnik Semirulnik ",
+ "contributors": [
+ "Nick Fitzgerald ",
+ "Tobias Koppers ",
+ "Duncan Beevers ",
+ "Stephen Crane ",
+ "Ryan Seddon ",
+ "Miles Elam ",
+ "Mihai Bazon ",
+ "Michael Ficarra ",
+ "Todd Wolfson ",
+ "Alexander Solovyov ",
+ "Felix Gnass ",
+ "Conrad Irwin ",
+ "usrbincc ",
+ "David Glasser ",
+ "Chase Douglas ",
+ "Evan Wallace ",
+ "Heather Arthur ",
+ "Hugh Kennedy ",
+ "David Glasser ",
+ "Simon Lydell ",
+ "Jmeas Smith ",
+ "Michael Z Goddard ",
+ "azu ",
+ "John Gozde ",
+ "Adam Kirkton ",
+ "Chris Montgomery ",
+ "J. Ryan Stinnett ",
+ "Jack Herrington ",
+ "Chris Truter ",
+ "Daniel Espeset ",
+ "Jamie Wong ",
+ "Eddy Bruël ",
+ "Hawken Rives ",
+ "Gilad Peleg ",
+ "djchie ",
+ "Gary Ye ",
+ "Nicolas Lalevée "
+ ],
+ "repository": "7rulnik/source-map-js",
+ "main": "./source-map.js",
+ "files": [
+ "source-map.js",
+ "source-map.d.ts",
+ "lib/"
+ ],
+ "engines": {
+ "node": ">=0.10.0"
+ },
+ "license": "BSD-3-Clause",
+ "scripts": {
+ "test": "npm run build && node test/run-tests.js",
+ "build": "webpack --color",
+ "toc": "doctoc --title '## Table of Contents' README.md && doctoc --title '## Table of Contents' CONTRIBUTING.md"
+ },
+ "devDependencies": {
+ "clean-publish": "^3.1.0",
+ "doctoc": "^0.15.0",
+ "webpack": "^1.12.0"
+ },
+ "clean-publish": {
+ "cleanDocs": true
+ },
+ "typings": "source-map.d.ts"
+}
\ No newline at end of file
diff --git a/.output/server/node_modules/source-map-js/source-map.js b/.output/server/node_modules/source-map-js/source-map.js
new file mode 100644
index 0000000..bc88fe8
--- /dev/null
+++ b/.output/server/node_modules/source-map-js/source-map.js
@@ -0,0 +1,8 @@
+/*
+ * Copyright 2009-2011 Mozilla Foundation and contributors
+ * Licensed under the New BSD license. See LICENSE.txt or:
+ * http://opensource.org/licenses/BSD-3-Clause
+ */
+exports.SourceMapGenerator = require('./lib/source-map-generator').SourceMapGenerator;
+exports.SourceMapConsumer = require('./lib/source-map-consumer').SourceMapConsumer;
+exports.SourceNode = require('./lib/source-node').SourceNode;
diff --git a/.output/server/node_modules/supports-color/index.js b/.output/server/node_modules/supports-color/index.js
new file mode 100644
index 0000000..4ce0a2d
--- /dev/null
+++ b/.output/server/node_modules/supports-color/index.js
@@ -0,0 +1,182 @@
+import process from 'node:process';
+import os from 'node:os';
+import tty from 'node:tty';
+
+// From: https://github.com/sindresorhus/has-flag/blob/main/index.js
+/// function hasFlag(flag, argv = globalThis.Deno?.args ?? process.argv) {
+function hasFlag(flag, argv = globalThis.Deno ? globalThis.Deno.args : process.argv) {
+ const prefix = flag.startsWith('-') ? '' : (flag.length === 1 ? '-' : '--');
+ const position = argv.indexOf(prefix + flag);
+ const terminatorPosition = argv.indexOf('--');
+ return position !== -1 && (terminatorPosition === -1 || position < terminatorPosition);
+}
+
+const {env} = process;
+
+let flagForceColor;
+if (
+ hasFlag('no-color')
+ || hasFlag('no-colors')
+ || hasFlag('color=false')
+ || hasFlag('color=never')
+) {
+ flagForceColor = 0;
+} else if (
+ hasFlag('color')
+ || hasFlag('colors')
+ || hasFlag('color=true')
+ || hasFlag('color=always')
+) {
+ flagForceColor = 1;
+}
+
+function envForceColor() {
+ if ('FORCE_COLOR' in env) {
+ if (env.FORCE_COLOR === 'true') {
+ return 1;
+ }
+
+ if (env.FORCE_COLOR === 'false') {
+ return 0;
+ }
+
+ return env.FORCE_COLOR.length === 0 ? 1 : Math.min(Number.parseInt(env.FORCE_COLOR, 10), 3);
+ }
+}
+
+function translateLevel(level) {
+ if (level === 0) {
+ return false;
+ }
+
+ return {
+ level,
+ hasBasic: true,
+ has256: level >= 2,
+ has16m: level >= 3,
+ };
+}
+
+function _supportsColor(haveStream, {streamIsTTY, sniffFlags = true} = {}) {
+ const noFlagForceColor = envForceColor();
+ if (noFlagForceColor !== undefined) {
+ flagForceColor = noFlagForceColor;
+ }
+
+ const forceColor = sniffFlags ? flagForceColor : noFlagForceColor;
+
+ if (forceColor === 0) {
+ return 0;
+ }
+
+ if (sniffFlags) {
+ if (hasFlag('color=16m')
+ || hasFlag('color=full')
+ || hasFlag('color=truecolor')) {
+ return 3;
+ }
+
+ if (hasFlag('color=256')) {
+ return 2;
+ }
+ }
+
+ // Check for Azure DevOps pipelines.
+ // Has to be above the `!streamIsTTY` check.
+ if ('TF_BUILD' in env && 'AGENT_NAME' in env) {
+ return 1;
+ }
+
+ if (haveStream && !streamIsTTY && forceColor === undefined) {
+ return 0;
+ }
+
+ const min = forceColor || 0;
+
+ if (env.TERM === 'dumb') {
+ return min;
+ }
+
+ if (process.platform === 'win32') {
+ // Windows 10 build 10586 is the first Windows release that supports 256 colors.
+ // Windows 10 build 14931 is the first release that supports 16m/TrueColor.
+ const osRelease = os.release().split('.');
+ if (
+ Number(osRelease[0]) >= 10
+ && Number(osRelease[2]) >= 10_586
+ ) {
+ return Number(osRelease[2]) >= 14_931 ? 3 : 2;
+ }
+
+ return 1;
+ }
+
+ if ('CI' in env) {
+ if ('GITHUB_ACTIONS' in env || 'GITEA_ACTIONS' in env) {
+ return 3;
+ }
+
+ if (['TRAVIS', 'CIRCLECI', 'APPVEYOR', 'GITLAB_CI', 'BUILDKITE', 'DRONE'].some(sign => sign in env) || env.CI_NAME === 'codeship') {
+ return 1;
+ }
+
+ return min;
+ }
+
+ if ('TEAMCITY_VERSION' in env) {
+ return /^(9\.(0*[1-9]\d*)\.|\d{2,}\.)/.test(env.TEAMCITY_VERSION) ? 1 : 0;
+ }
+
+ if (env.COLORTERM === 'truecolor') {
+ return 3;
+ }
+
+ if (env.TERM === 'xterm-kitty') {
+ return 3;
+ }
+
+ if ('TERM_PROGRAM' in env) {
+ const version = Number.parseInt((env.TERM_PROGRAM_VERSION || '').split('.')[0], 10);
+
+ switch (env.TERM_PROGRAM) {
+ case 'iTerm.app': {
+ return version >= 3 ? 3 : 2;
+ }
+
+ case 'Apple_Terminal': {
+ return 2;
+ }
+ // No default
+ }
+ }
+
+ if (/-256(color)?$/i.test(env.TERM)) {
+ return 2;
+ }
+
+ if (/^screen|^xterm|^vt100|^vt220|^rxvt|color|ansi|cygwin|linux/i.test(env.TERM)) {
+ return 1;
+ }
+
+ if ('COLORTERM' in env) {
+ return 1;
+ }
+
+ return min;
+}
+
+export function createSupportsColor(stream, options = {}) {
+ const level = _supportsColor(stream, {
+ streamIsTTY: stream && stream.isTTY,
+ ...options,
+ });
+
+ return translateLevel(level);
+}
+
+const supportsColor = {
+ stdout: createSupportsColor({isTTY: tty.isatty(1)}),
+ stderr: createSupportsColor({isTTY: tty.isatty(2)}),
+};
+
+export default supportsColor;
diff --git a/.output/server/node_modules/supports-color/package.json b/.output/server/node_modules/supports-color/package.json
new file mode 100644
index 0000000..dce0080
--- /dev/null
+++ b/.output/server/node_modules/supports-color/package.json
@@ -0,0 +1,60 @@
+{
+ "name": "supports-color",
+ "version": "9.4.0",
+ "description": "Detect whether a terminal supports color",
+ "license": "MIT",
+ "repository": "chalk/supports-color",
+ "funding": "https://github.com/chalk/supports-color?sponsor=1",
+ "author": {
+ "name": "Sindre Sorhus",
+ "email": "sindresorhus@gmail.com",
+ "url": "https://sindresorhus.com"
+ },
+ "type": "module",
+ "exports": {
+ "node": "./index.js",
+ "default": "./browser.js"
+ },
+ "engines": {
+ "node": ">=12"
+ },
+ "scripts": {
+ "//test": "xo && ava && tsd",
+ "test": "tsd"
+ },
+ "files": [
+ "index.js",
+ "index.d.ts",
+ "browser.js",
+ "browser.d.ts"
+ ],
+ "keywords": [
+ "color",
+ "colour",
+ "colors",
+ "terminal",
+ "console",
+ "cli",
+ "ansi",
+ "styles",
+ "tty",
+ "rgb",
+ "256",
+ "shell",
+ "xterm",
+ "command-line",
+ "support",
+ "supports",
+ "capability",
+ "detect",
+ "truecolor",
+ "16m"
+ ],
+ "devDependencies": {
+ "@types/node": "^20.3.2",
+ "ava": "^5.3.1",
+ "import-fresh": "^3.3.0",
+ "tsd": "^0.18.0",
+ "xo": "^0.54.2"
+ }
+}
\ No newline at end of file
diff --git a/.output/server/node_modules/ufo/package.json b/.output/server/node_modules/ufo/package.json
new file mode 100644
index 0000000..e0d4022
--- /dev/null
+++ b/.output/server/node_modules/ufo/package.json
@@ -0,0 +1,43 @@
+{
+ "name": "ufo",
+ "version": "1.3.2",
+ "description": "URL utils for humans",
+ "repository": "unjs/ufo",
+ "license": "MIT",
+ "sideEffects": false,
+ "exports": {
+ ".": {
+ "types": "./dist/index.d.ts",
+ "require": "./dist/index.cjs",
+ "import": "./dist/index.mjs"
+ },
+ "./*": "./*"
+ },
+ "main": "./dist/index.cjs",
+ "module": "./dist/index.mjs",
+ "types": "./dist/index.d.ts",
+ "files": [
+ "dist"
+ ],
+ "scripts": {
+ "build": "unbuild",
+ "dev": "vitest",
+ "lint": "eslint --ext .ts . && prettier -c src test",
+ "lint:fix": "eslint --fix --ext .ts . && prettier -w src test",
+ "prepack": "pnpm build",
+ "release": "pnpm test && changelogen --release && npm publish && git push --follow-tags",
+ "test": "pnpm lint && vitest --run typecheck && vitest run"
+ },
+ "devDependencies": {
+ "@types/node": "^20.9.0",
+ "@vitest/coverage-v8": "^0.34.6",
+ "changelogen": "^0.5.5",
+ "eslint": "^8.53.0",
+ "eslint-config-unjs": "^0.2.1",
+ "prettier": "^3.1.0",
+ "typescript": "^5.2.2",
+ "unbuild": "^2.0.0",
+ "vitest": "^0.34.6"
+ },
+ "packageManager": "pnpm@8.10.5"
+}
\ No newline at end of file
diff --git a/.output/server/node_modules/unhead/package.json b/.output/server/node_modules/unhead/package.json
new file mode 100644
index 0000000..0244b5f
--- /dev/null
+++ b/.output/server/node_modules/unhead/package.json
@@ -0,0 +1,42 @@
+{
+ "name": "unhead",
+ "type": "module",
+ "version": "1.8.8",
+ "author": "Harlan Wilton ",
+ "license": "MIT",
+ "funding": "https://github.com/sponsors/harlan-zw",
+ "homepage": "https://unhead.unjs.io",
+ "repository": {
+ "type": "git",
+ "url": "git+https://github.com/unjs/unhead.git",
+ "directory": "packages/unhead"
+ },
+ "bugs": {
+ "url": "https://github.com/unjs/unhead/issues"
+ },
+ "sideEffects": false,
+ "exports": {
+ ".": {
+ "types": "./dist/index.d.ts",
+ "import": "./dist/index.mjs",
+ "require": "./dist/index.cjs"
+ }
+ },
+ "main": "dist/index.cjs",
+ "module": "dist/index.mjs",
+ "types": "dist/index.d.ts",
+ "files": [
+ "dist"
+ ],
+ "dependencies": {
+ "hookable": "^5.5.3",
+ "@unhead/shared": "1.8.8",
+ "@unhead/schema": "1.8.8",
+ "@unhead/dom": "1.8.8"
+ },
+ "scripts": {
+ "build": "unbuild .",
+ "stub": "unbuild . --stub",
+ "export:sizes": "npx export-size . -r"
+ }
+}
\ No newline at end of file
diff --git a/.output/server/node_modules/vue-bundle-renderer/package.json b/.output/server/node_modules/vue-bundle-renderer/package.json
new file mode 100644
index 0000000..b326df1
--- /dev/null
+++ b/.output/server/node_modules/vue-bundle-renderer/package.json
@@ -0,0 +1,50 @@
+{
+ "name": "vue-bundle-renderer",
+ "version": "2.0.0",
+ "description": "Bundle Renderer for Vue 3.0",
+ "repository": "nuxt-contrib/vue-bundle-renderer",
+ "license": "MIT",
+ "exports": {
+ ".": {
+ "types": "./dist/index.d.ts",
+ "import": "./dist/index.mjs",
+ "require": "./dist/index.cjs"
+ },
+ "./runtime": {
+ "types": "./dist/runtime.d.ts",
+ "import": "./dist/runtime.mjs",
+ "require": "./dist/runtime.cjs"
+ }
+ },
+ "main": "./dist/index.cjs",
+ "module": "./dist/index.mjs",
+ "types": "./dist/index.d.ts",
+ "files": [
+ "dist",
+ "runtime.d.ts"
+ ],
+ "dependencies": {
+ "ufo": "^1.2.0"
+ },
+ "devDependencies": {
+ "@nuxtjs/eslint-config-typescript": "^12.0.0",
+ "@types/node": "^18.17.1",
+ "@vitest/coverage-v8": "^0.33.0",
+ "changelogen": "^0.5.4",
+ "eslint": "^8.46.0",
+ "expect-type": "^0.16.0",
+ "typescript": "^5.1.6",
+ "unbuild": "^1.2.1",
+ "vite": "^4.4.7",
+ "vitest": "0.33.0",
+ "vue": "3.3.4"
+ },
+ "packageManager": "pnpm@8.6.11",
+ "scripts": {
+ "build": "unbuild",
+ "dev": "vitest",
+ "lint": "eslint --ext .ts src",
+ "release": "pnpm test && pnpm build && changelogen --release --push && pnpm publish",
+ "test": "pnpm lint && pnpm vitest run --coverage && tsc --noEmit"
+ }
+}
\ No newline at end of file
diff --git a/.output/server/node_modules/vue/index.js b/.output/server/node_modules/vue/index.js
new file mode 100644
index 0000000..7a3dc2d
--- /dev/null
+++ b/.output/server/node_modules/vue/index.js
@@ -0,0 +1,7 @@
+'use strict'
+
+if (process.env.NODE_ENV === 'production') {
+ module.exports = require('./dist/vue.cjs.prod.js')
+} else {
+ module.exports = require('./dist/vue.cjs.js')
+}
diff --git a/.output/server/node_modules/vue/index.mjs b/.output/server/node_modules/vue/index.mjs
new file mode 100644
index 0000000..8b43612
--- /dev/null
+++ b/.output/server/node_modules/vue/index.mjs
@@ -0,0 +1 @@
+export * from './index.js'
\ No newline at end of file
diff --git a/.output/server/node_modules/vue/package.json b/.output/server/node_modules/vue/package.json
new file mode 100644
index 0000000..96a91dc
--- /dev/null
+++ b/.output/server/node_modules/vue/package.json
@@ -0,0 +1,113 @@
+{
+ "name": "vue",
+ "version": "3.3.9",
+ "description": "The progressive JavaScript framework for building modern web UI.",
+ "main": "index.js",
+ "module": "dist/vue.runtime.esm-bundler.js",
+ "types": "dist/vue.d.ts",
+ "unpkg": "dist/vue.global.js",
+ "jsdelivr": "dist/vue.global.js",
+ "files": [
+ "index.js",
+ "index.mjs",
+ "dist",
+ "compiler-sfc",
+ "server-renderer",
+ "jsx-runtime",
+ "jsx.d.ts",
+ "macros.d.ts",
+ "macros-global.d.ts",
+ "ref-macros.d.ts"
+ ],
+ "exports": {
+ ".": {
+ "import": {
+ "types": "./dist/vue.d.mts",
+ "node": "./index.mjs",
+ "default": "./dist/vue.runtime.esm-bundler.js"
+ },
+ "require": {
+ "types": "./dist/vue.d.ts",
+ "default": "./index.js"
+ }
+ },
+ "./server-renderer": {
+ "import": {
+ "types": "./server-renderer/index.d.mts",
+ "default": "./server-renderer/index.mjs"
+ },
+ "require": {
+ "types": "./server-renderer/index.d.ts",
+ "default": "./server-renderer/index.js"
+ }
+ },
+ "./compiler-sfc": {
+ "import": {
+ "types": "./compiler-sfc/index.d.mts",
+ "browser": "./compiler-sfc/index.browser.mjs",
+ "default": "./compiler-sfc/index.mjs"
+ },
+ "require": {
+ "types": "./compiler-sfc/index.d.ts",
+ "browser": "./compiler-sfc/index.browser.js",
+ "default": "./compiler-sfc/index.js"
+ }
+ },
+ "./jsx-runtime": {
+ "types": "./jsx-runtime/index.d.ts",
+ "import": "./jsx-runtime/index.mjs",
+ "require": "./jsx-runtime/index.js"
+ },
+ "./jsx-dev-runtime": {
+ "types": "./jsx-runtime/index.d.ts",
+ "import": "./jsx-runtime/index.mjs",
+ "require": "./jsx-runtime/index.js"
+ },
+ "./jsx": "./jsx.d.ts",
+ "./dist/*": "./dist/*",
+ "./package.json": "./package.json",
+ "./macros": "./macros.d.ts",
+ "./macros-global": "./macros-global.d.ts",
+ "./ref-macros": "./ref-macros.d.ts"
+ },
+ "buildOptions": {
+ "name": "Vue",
+ "formats": [
+ "esm-bundler",
+ "esm-bundler-runtime",
+ "cjs",
+ "global",
+ "global-runtime",
+ "esm-browser",
+ "esm-browser-runtime"
+ ]
+ },
+ "repository": {
+ "type": "git",
+ "url": "git+https://github.com/vuejs/core.git"
+ },
+ "keywords": [
+ "vue"
+ ],
+ "author": "Evan You",
+ "license": "MIT",
+ "bugs": {
+ "url": "https://github.com/vuejs/core/issues"
+ },
+ "homepage": "https://github.com/vuejs/core/tree/main/packages/vue#readme",
+ "dependencies": {
+ "@vue/shared": "3.3.9",
+ "@vue/runtime-dom": "3.3.9",
+ "@vue/compiler-dom": "3.3.9",
+ "@vue/compiler-sfc": "3.3.9",
+ "@vue/server-renderer": "3.3.9"
+ },
+ "peerDependencies": {
+ "typescript": "*"
+ },
+ "peerDependenciesMeta": {
+ "typescript": {
+ "optional": true
+ }
+ }
+}
\ No newline at end of file
diff --git a/.output/server/node_modules/vue/server-renderer/index.mjs b/.output/server/node_modules/vue/server-renderer/index.mjs
new file mode 100644
index 0000000..3e081c1
--- /dev/null
+++ b/.output/server/node_modules/vue/server-renderer/index.mjs
@@ -0,0 +1 @@
+export * from '@vue/server-renderer'
\ No newline at end of file