import { File, Expression } from "@babel/types";

// This file is auto-generated! Do not modify it directly.
// Run `make bundle-babel-parser-dts` to re-generate it.
/* eslint-disable @typescript-eslint/consistent-type-imports, @typescript-eslint/no-redundant-type-constituents */

declare class Position {
  line: number;
  column: number;
  index: number;
  constructor(line: number, col: number, index?: number);
}
//# sourceMappingURL=module-errors.d.ts.map

type LValAncestor =
  | {
      type: "UpdateExpression";
      prefix: boolean;
    }
  | {
      type:
        | "ArrayPattern"
        | "AssignmentExpression"
        | "CatchClause"
        | "ForOfStatement"
        | "FormalParameters"
        | "ForInStatement"
        | "ForStatement"
        | "ImportSpecifier"
        | "ImportNamespaceSpecifier"
        | "ImportDefaultSpecifier"
        | "ParenthesizedExpression"
        | "ObjectPattern"
        | "RestElement"
        | "VariableDeclarator";
    };
//# sourceMappingURL=bind-operator-errors.d.ts.map

type Accessibility = "public" | "protected" | "private";
type VarianceAnnotations = "in" | "out";

type Plugin$1 =
  | "asyncDoExpressions"
  | "decorators"
  | "decorators-legacy"
  | "decoratorAutoAccessors"
  | "deferredImportEvaluation"
  | "destructuringPrivate"
  | "doExpressions"
  | "exportDefaultFrom"
  | "flow"
  | "flowComments"
  | "functionBind"
  | "functionSent"
  | "importMeta"
  | "jsx"
  | "moduleBlocks"
  | "placeholders"
  | "sourcePhaseImports"
  | "throwExpressions"
  | "v8intrinsic"
  | ParserPluginWithOptions[0];

type ParserPluginWithOptions =
  | ["discardBinding", { syntaxType: "void" }]
  | ["estree", { classFeatures?: boolean }]
  | ["optionalChainingAssign", { version: "2023-07" }]
  | ["partialApplication", PartialApplicationPluginOptions]
  | ["pipelineOperator", PipelineOperatorPluginOptions]
  | ["flow", FlowPluginOptions]
  | ["typescript", TypeScriptPluginOptions];

type PluginConfig = Plugin$1 | ParserPluginWithOptions;

interface PartialApplicationPluginOptions {
  version: "2018-07";
}

interface PipelineOperatorPluginOptions {
  proposal: "fsharp" | "hack";
  topicToken?: "%" | "#" | "@@" | "^^" | "^";
}

interface FlowPluginOptions {
  all?: boolean;
}

interface TypeScriptPluginOptions {
  dts?: boolean;
  disallowAmbiguousJSXLike?: boolean;
}

type TsModifier =
  | "readonly"
  | "abstract"
  | "declare"
  | "static"
  | "override"
  | "const"
  | Accessibility
  | VarianceAnnotations;
type EnumExplicitType = null | "boolean" | "number" | "string" | "symbol";

type ParseError = SyntaxError & {
  missingPlugin?: string | string[];
  loc: Position;
  pos: number;
} & ErrorInfo;
type __PatchMe = Decompress<ErrorInfoCompressed>;
type ErrorInfo = __PatchMe | never;
type ErrorInfoCompressed = {
  ImportMetaOutsideModule: [object, "BABEL_PARSER_SOURCETYPE_MODULE_REQUIRED"];
  ImportOutsideModule: [object, "BABEL_PARSER_SOURCETYPE_MODULE_REQUIRED"];
  AccessorIsGenerator: [{ kind: "get" | "set" }];
  ArgumentsInClass: [];
  AsyncFunctionInSingleStatementContext: [];
  AwaitBindingIdentifier: [];
  AwaitBindingIdentifierInStaticBlock: [];
  AwaitExpressionFormalParameter: [];
  AwaitUsingNotInAsyncContext: [];
  AwaitNotInAsyncContext: [];
  BadGetterArity: [];
  BadSetterArity: [];
  BadSetterRestParameter: [];
  ConstructorClassField: [];
  ConstructorClassPrivateField: [];
  ConstructorIsAccessor: [];
  ConstructorIsAsync: [];
  ConstructorIsGenerator: [];
  DeclarationMissingInitializer: [
    { kind: "await using" | "const" | "destructuring" | "using" },
  ];
  DecoratorArgumentsOutsideParentheses: [];
  DecoratorsBeforeAfterExport: [];
  DecoratorConstructor: [];
  DecoratorSemicolon: [];
  DecoratorStaticBlock: [];
  DeferImportRequiresNamespace: [];
  DeletePrivateField: [];
  DestructureNamedImport: [];
  DuplicateConstructor: [];
  DuplicateDefaultExport: [];
  DuplicateExport: [{ exportName: string }];
  DuplicateProto: [];
  DuplicateRegExpFlags: [];
  ElementAfterRest: [];
  EscapedCharNotAnIdentifier: [];
  ExportBindingIsString: [{ localName: string; exportName: string }];
  ExportDefaultFromAsIdentifier: [];
  ForInOfLoopInitializer: [{ type: "ForInStatement" | "ForOfStatement" }];
  ForInUsing: [];
  ForOfAsync: [];
  ForOfLet: [];
  GeneratorInSingleStatementContext: [];
  IllegalBreakContinue: [{ type: "BreakStatement" | "ContinueStatement" }];
  IllegalLanguageModeDirective: [];
  IllegalReturn: [];
  ImportBindingIsString: [{ importName: string }];
  ImportCallArity: [{ phase?: string | null | undefined }];
  ImportCallNotNewExpression: [{ phase?: string | null | undefined }];
  ImportCallSpreadArgument: [{ phase?: string | null | undefined }];
  IncompatibleRegExpUVFlags: [];
  InvalidBigIntLiteral: [];
  InvalidCodePoint: [];
  InvalidCoverDiscardElement: [];
  InvalidCoverInitializedName: [];
  InvalidDigit: [{ radix: number }];
  InvalidEscapeSequence: [];
  InvalidEscapeSequenceTemplate: [];
  InvalidEscapedReservedWord: [{ reservedWord: string }];
  InvalidIdentifier: [{ identifierName: string }];
  InvalidLhs: [{ ancestor: LValAncestor }];
  InvalidLhsBinding: [{ ancestor: LValAncestor }];
  InvalidLhsOptionalChaining: [{ ancestor: LValAncestor }];
  InvalidNumber: [];
  InvalidOrMissingExponent: [];
  InvalidOrUnexpectedToken: [{ unexpected: string }];
  InvalidParenthesizedAssignment: [];
  InvalidPrivateFieldResolution: [{ identifierName: string }];
  InvalidPropertyBindingPattern: [];
  InvalidRestAssignmentPattern: [];
  LabelRedeclaration: [{ labelName: string }];
  LetInLexicalBinding: [];
  LineTerminatorBeforeArrow: [];
  MalformedRegExpFlags: [];
  MissingClassName: [];
  MissingEqInAssignment: [];
  MissingSemicolon: [];
  MissingPlugin: [{ missingPlugin: [string] }];
  MissingOneOfPlugins: [{ missingPlugin: string[] }];
  MissingUnicodeEscape: [];
  MixingCoalesceWithLogical: [];
  ModuleAttributeInvalidValue: [];
  ModuleAttributesWithDuplicateKeys: [{ key: string }];
  ModuleExportNameHasLoneSurrogate: [{ surrogateCharCode: number }];
  ModuleExportUndefined: [{ localName: string }];
  MultipleDefaultsInSwitch: [];
  NewlineAfterThrow: [];
  NoCatchOrFinally: [];
  NumberIdentifier: [];
  NumericSeparatorInEscapeSequence: [];
  ObsoleteAwaitStar: [];
  OptionalChainingNoNew: [];
  OptionalChainingNoTemplate: [];
  OverrideOnConstructor: [];
  ParamDupe: [];
  PatternHasAccessor: [];
  PatternHasMethod: [];
  PrivateInExpectedIn: [{ identifierName: string }];
  PrivateNameRedeclaration: [{ identifierName: string }];
  RestTrailingComma: [];
  SloppyFunction: [];
  SloppyFunctionAnnexB: [];
  SourcePhaseImportRequiresDefault: [];
  StaticPrototype: [];
  SuperCallNotNewExpression: [];
  SuperNotAllowed: [];
  SuperPrivateField: [];
  TrailingDecorator: [];
  UnexpectedArgumentPlaceholder: [];
  UnexpectedDigitAfterHash: [];
  UnexpectedImportExport: [];
  UnexpectedKeyword: [{ keyword: string }];
  UnexpectedLeadingDecorator: [];
  UnexpectedLexicalDeclaration: [];
  UnexpectedNewTarget: [];
  UnexpectedNumericSeparator: [];
  UnexpectedPrivateField: [];
  UnexpectedReservedWord: [{ reservedWord: string }];
  UnexpectedSuper: [];
  UnexpectedTokenUnaryExponentiation: [];
  UnexpectedUsingDeclaration: [];
  UnexpectedVoidPattern: [];
  UnsupportedDecoratorExport: [];
  UnsupportedDefaultExport: [];
  UnsupportedImport: [];
  UnsupportedMetaProperty: [{ target: string; onlyValidPropertyName: string }];
  UnsupportedParameterDecorator: [];
  UnsupportedPropertyDecorator: [];
  UnsupportedSuper: [];
  UnterminatedComment: [];
  UnterminatedRegExp: [];
  UnterminatedString: [];
  UnterminatedTemplate: [];
  UsingDeclarationExport: [];
  UsingDeclarationHasBindingPattern: [];
  VarRedeclaration: [{ identifierName: string }];
  VoidPatternCatchClauseParam: [];
  VoidPatternInitializer: [];
  YieldBindingIdentifier: [];
  YieldInParameter: [];
  YieldNotInGeneratorFunction: [];
  ZeroDigitNumericSeparator: [];
  StrictDelete: [];
  StrictEvalArguments: [{ referenceName: string }];
  StrictEvalArgumentsBinding: [{ bindingName: string }];
  StrictFunction: [];
  StrictNumericEscape: [];
  StrictOctalLiteral: [];
  StrictWith: [];
  ParseExpressionEmptyInput: [];
  ParseExpressionExpectsEOF: [{ unexpected: number }];
  UnsupportedBind: [];
  UnsupportedBindRHS: [];
  PipeTopicRequiresHackPipes: [];
  PipeTopicUnbound: [];
  PipeTopicUnconfiguredToken: [{ token: string }];
  PipeTopicUnused: [];
  PipeUnparenthesizedBody: [
    {
      type:
        | "AssignmentExpression"
        | "ArrowFunctionExpression"
        | "ConditionalExpression"
        | "YieldExpression";
    },
  ];
  PipelineUnparenthesized: [];
  AbstractMethodHasImplementation: [{ methodName: string }];
  AbstractPropertyHasInitializer: [{ propertyName: string }];
  AccessorCannotBeOptional: [];
  AccessorCannotDeclareThisParameter: [];
  AccessorCannotHaveTypeParameters: [];
  ClassMethodHasDeclare: [];
  ClassMethodHasReadonly: [];
  ConstInitializerMustBeStringOrNumericLiteralOrLiteralEnumReference: [];
  ConstructorHasTypeParameters: [];
  DeclareAccessor: [{ kind: "get" | "set" }];
  DeclareClassFieldHasInitializer: [];
  DeclareFunctionHasImplementation: [];
  DecoratorAbstractMethod: [
    { kind: "abstract method" | "abstract field" | "declare field" },
  ];
  DuplicateAccessibilityModifier: [{ modifier: Accessibility }];
  DuplicateModifier: [{ modifier: TsModifier }];
  EmptyHeritageClauseType: [{ token: "extends" | "implements" }];
  EmptyTypeArguments: [];
  EmptyTypeParameters: [];
  ExpectedAmbientAfterExportDeclare: [];
  ExportAssignmentInTSNamespace: [];
  ExportInTSNamespace: [];
  ImportAliasHasImportType: [];
  ImportInTSNamespace: [];
  IncompatibleModifiers: [{ modifiers: [TsModifier, TsModifier] }];
  IndexSignatureHasAbstract: [];
  IndexSignatureHasAccessibility: [{ modifier: Accessibility }];
  IndexSignatureHasDeclare: [];
  IndexSignatureHasOverride: [];
  IndexSignatureHasStatic: [];
  InitializerNotAllowedInAmbientContext: [];
  InlineModuleDeclarationMustUseString: [];
  InvalidHeritageClauseType: [{ token: "extends" | "implements" }];
  InvalidModifierOnAwaitUsingDeclaration: [
    | "const"
    | Accessibility
    | "readonly"
    | "abstract"
    | "declare"
    | "static"
    | "override"
    | VarianceAnnotations,
  ];
  InvalidModifierOnTypeMember: [{ modifier: TsModifier }];
  InvalidModifierOnTypeParameter: [{ modifier: TsModifier }];
  InvalidModifierOnTypeParameterPositions: [{ modifier: TsModifier }];
  InvalidModifierOnUsingDeclaration: [
    | "const"
    | Accessibility
    | "readonly"
    | "abstract"
    | "declare"
    | "static"
    | "override"
    | VarianceAnnotations,
  ];
  InvalidModifiersOrder: [{ orderedModifiers: [TsModifier, TsModifier] }];
  InvalidPropertyAccessAfterInstantiationExpression: [];
  InvalidTupleMemberLabel: [];
  MissingInterfaceName: [];
  NamespaceExportInTSNamespace: [];
  NonAbstractClassHasAbstractMethod: [];
  NonClassMethodPropertyHasAbstractModifier: [];
  OptionalTypeBeforeRequired: [];
  OverrideNotInSubClass: [];
  PrivateElementHasAbstract: [];
  PrivateElementHasAccessibility: [{ modifier: Accessibility }];
  ReadonlyForMethodSignature: [];
  ReservedArrowTypeParam: [];
  ReservedTypeAssertion: [];
  SetAccessorCannotHaveOptionalParameter: [];
  SetAccessorCannotHaveRestParameter: [];
  SetAccessorCannotHaveReturnType: [];
  SingleTypeParameterWithoutTrailingComma: [{ typeParameterName: string }];
  StaticBlockCannotHaveModifier: [];
  TupleOptionalAfterType: [];
  TypeAnnotationAfterAssign: [];
  TypeImportCannotSpecifyDefaultAndNamed: [];
  TypeModifierIsUsedInTypeExports: [];
  TypeModifierIsUsedInTypeImports: [];
  UnexpectedParameterInitializer: [];
  UnexpectedParameterModifier: [];
  UnexpectedReadonly: [];
  UnexpectedTypeAnnotation: [];
  UnexpectedTypeCastInParameter: [];
  UnexpectedTypeDeclaration: ["interface" | "type"];
  UnsupportedImportTypeArgument: [];
  UnsupportedParameterPropertyKind: [];
  UnsupportedSignatureParameterKind: [{ type: string }];
  UsingDeclarationInAmbientContext: ["await using" | "using"];
  AmbiguousConditionalArrow: [];
  AmbiguousDeclareModuleKind: [];
  AssignReservedType: [{ reservedType: string }];
  DeclareClassElement: [];
  DeclareClassFieldInitializer: [];
  DuplicateDeclareModuleExports: [];
  EnumBooleanMemberNotInitialized: [{ memberName: string; enumName: string }];
  EnumDuplicateMemberName: [{ memberName: string; enumName: string }];
  EnumInconsistentMemberValues: [{ enumName: string }];
  EnumInvalidExplicitType: [{ invalidEnumType: string; enumName: string }];
  EnumInvalidExplicitTypeUnknownSupplied: [{ enumName: string }];
  EnumInvalidMemberInitializerPrimaryType: [
    { enumName: string; memberName: string; explicitType: EnumExplicitType },
  ];
  EnumInvalidMemberInitializerSymbolType: [
    { enumName: string; memberName: string; explicitType: EnumExplicitType },
  ];
  EnumInvalidMemberInitializerUnknownType: [
    { enumName: string; memberName: string; explicitType: EnumExplicitType },
  ];
  EnumInvalidMemberName: [
    { enumName: string; memberName: string; suggestion: string },
  ];
  EnumNumberMemberNotInitialized: [{ enumName: string; memberName: string }];
  EnumStringMemberInconsistentlyInitialized: [{ enumName: string }];
  GetterMayNotHaveThisParam: [];
  ImportTypeShorthandOnlyInPureImport: [];
  InexactInsideExact: [];
  InexactInsideNonObject: [];
  InexactVariance: [];
  InvalidNonTypeImportInDeclareModule: [];
  MissingTypeParamDefault: [];
  NestedDeclareModule: [];
  NestedFlowComment: [];
  SetterMayNotHaveThisParam: [];
  SpreadVariance: [];
  ThisParamAnnotationRequired: [];
  ThisParamBannedInConstructor: [];
  ThisParamMayNotBeOptional: [];
  ThisParamMustBeFirst: [];
  ThisParamNoDefault: [];
  TypeBeforeInitializer: [];
  TypeCastInPattern: [];
  UnexpectedExplicitInexactInObject: [];
  UnexpectedReservedType: [{ reservedType: string }];
  UnexpectedReservedUnderscore: [];
  UnexpectedSpaceBetweenModuloChecks: [];
  UnexpectedSpreadType: [];
  UnexpectedSubtractionOperand: [];
  UnexpectedTokenAfterTypeParameter: [];
  UnexpectedTypeParameterBeforeAsyncArrowFunction: [];
  UnsupportedDeclareExportKind: [
    { unsupportedExportKind: string; suggestion: string },
  ];
  UnsupportedStatementInDeclareModule: [];
  UnterminatedFlowComment: [];
  AttributeIsEmpty: [];
  MissingClosingTagElement: [{ openingTagName: string }];
  MissingClosingTagFragment: [];
  UnexpectedSequenceExpression: [];
  UnsupportedJsxValue: [];
  UnterminatedJsxContent: [];
  UnwrappedAdjacentJSXElements: [];
  ClassNameIsRequired: [];
  UnexpectedSpace: [];
};
type Decompress<T extends object> = {
  [K in keyof T]: T[K] extends [infer Param, infer Code]
    ? {
        code: Code;
        reasonCode: K;
        details: Param;
      }
    : T[K] extends [infer Param]
      ? {
          code: "BABEL_PARSER_SYNTAX_ERROR";
          reasonCode: K;
          details: Param;
        }
      : T[K] extends []
        ? {
            code: "BABEL_PARSER_SYNTAX_ERROR";
            reasonCode: K;
            details: object;
          }
        : never;
};

type Plugin = PluginConfig;

type SourceType = "script" | "commonjs" | "module" | "unambiguous";
interface Options {
  /**
   * By default, import and export declarations can only appear at a program's top level.
   * Setting this option to true allows them anywhere where a statement is allowed.
   */
  allowImportExportEverywhere?: boolean;
  /**
   * By default, await use is not allowed outside of an async function.
   * Set this to true to accept such code.
   */
  allowAwaitOutsideFunction?: boolean;
  /**
   * By default, a return statement at the top level raises an error.
   * Set this to true to accept such code.
   */
  allowReturnOutsideFunction?: boolean;
  /**
   * By default, new.target use is not allowed outside of a function or class.
   * Set this to true to accept such code.
   */
  allowNewTargetOutsideFunction?: boolean;
  /**
   * By default, super calls are not allowed outside of a method.
   * Set this to true to accept such code.
   */
  allowSuperOutsideMethod?: boolean;
  /**
   * By default, exported identifiers must refer to a declared variable.
   * Set this to true to allow export statements to reference undeclared variables.
   */
  allowUndeclaredExports?: boolean;
  /**
   * By default, yield use is not allowed outside of a generator function.
   * Set this to true to accept such code.
   */
  allowYieldOutsideFunction?: boolean;
  /**
   * By default, Babel parser JavaScript code according to Annex B syntax.
   * Set this to `false` to disable such behavior.
   */
  annexB?: boolean;
  /**
   * By default, Babel attaches comments to adjacent AST nodes.
   * When this option is set to false, comments are not attached.
   * It can provide up to 30% performance improvement when the input code has many comments.
   * @babel/eslint-parser will set it for you.
   * It is not recommended to use attachComment: false with Babel transform,
   * as doing so removes all the comments in output code, and renders annotations such as
   * /* istanbul ignore next *\/ nonfunctional.
   */
  attachComment?: boolean;
  /**
   * By default, Babel always throws an error when it finds some invalid code.
   * When this option is set to true, it will store the parsing error and
   * try to continue parsing the invalid input file.
   */
  errorRecovery?: boolean;
  /**
   * Indicate the mode the code should be parsed in.
   * Can be one of "script", "commonjs", "module", or "unambiguous". Defaults to "script".
   * "unambiguous" will make @babel/parser attempt to guess, based on the presence
   * of ES6 import or export statements.
   * Files with ES6 imports and exports are considered "module" and are otherwise "script".
   *
   * Use "commonjs" to parse code that is intended to be run in a CommonJS environment such as Node.js.
   */
  sourceType?: SourceType;
  /**
   * Correlate output AST nodes with their source filename.
   * Useful when generating code and source maps from the ASTs of multiple input files.
   */
  sourceFilename?: string;
  /**
   * By default, all source indexes start from 0.
   * You can provide a start index to alternatively start with.
   * Useful for integration with other source tools.
   */
  startIndex?: number;
  /**
   * By default, the first line of code parsed is treated as line 1.
   * You can provide a line number to alternatively start with.
   * Useful for integration with other source tools.
   */
  startLine?: number;
  /**
   * By default, the parsed code is treated as if it starts from line 1, column 0.
   * You can provide a column number to alternatively start with.
   * Useful for integration with other source tools.
   */
  startColumn?: number;
  /**
   * Array containing the plugins that you want to enable.
   */
  plugins?: Plugin[];
  /**
   * Should the parser work in strict mode.
   * Defaults to true if sourceType === 'module'. Otherwise, false.
   */
  strictMode?: boolean;
  /**
   * Adds a ranges property to each node: [node.start, node.end]
   */
  ranges?: boolean;
  /**
   * Adds a locations property to each node: [node.loc]
   */
  locations?: boolean;
  /**
   * Adds all parsed tokens to a tokens property on the File node.
   */
  tokens?: boolean;
  /**
   * By default, the parser adds information about parentheses by setting
   * `extra.parenthesized` to `true` as needed.
   * When this option is `true` the parser creates `ParenthesizedExpression`
   * AST nodes instead of using the `extra` property.
   */
  createParenthesizedExpressions?: boolean;
  /**
   * By default, the parser parses import expressions as an `ImportExpression` node.
   * Set this to false to parse it as `CallExpression(Import, [Identifier(foo)])`.
   */
  createImportExpressions?: boolean;
}

type ParserOptions = Partial<Options>;
type ParseResult<Result extends File | Expression = File> = Result & {
  comments: File["comments"];
  errors: ParseError[];
  tokens?: File["tokens"];
};
/**
 * Parse the provided code as an entire ECMAScript program.
 */
declare function parse(
  input: string,
  options?: ParserOptions
): ParseResult<File>;
declare function parseExpression(
  input: string,
  options?: ParserOptions
): ParseResult<Expression>;

declare const tokTypes: {
  // todo(flow->ts) real token type
  [name: string]: any;
};

export {
  type FlowPluginOptions,
  type ParseError,
  type ParseResult,
  type ParserOptions,
  type PluginConfig as ParserPlugin,
  type PipelineOperatorPluginOptions,
  type TypeScriptPluginOptions,
  parse,
  parseExpression,
  tokTypes,
};
