import * as vue from "@vue/language-core";
import * as typescript_lib_tsserverlibrary0 from "typescript/lib/tsserverlibrary";
import ts from "typescript/lib/tsserverlibrary";

//#region src/index.d.ts
declare function createLanguage(tsconfigPath: string, ts?: typeof typescript_lib_tsserverlibrary0): ReturnType<typeof createLanguageWorker>;
declare function createLanguageWorker(loadParsedCommandLine: () => vue.ParsedCommandLine, rootPath: string, ts: typeof typescript_lib_tsserverlibrary0): {
  updateFile(fileName: string, text: string): void;
  deleteFile(fileName: string): void;
  reload(): void;
  clearCache(): void;
  __internal__: {
    tsLs: ts.LanguageService;
    program: ts.Program;
    typeChecker: ts.TypeChecker;
  };
  parseScriptSetupRanges: (ast: ts.SourceFile) => {
    leadingCommentEndOffset: number;
    importSectionEndOffset: number;
    bindings: {
      range: vue.TextRange;
      moduleName?: string;
      isDefaultImport?: boolean;
      isNamespace?: boolean;
    }[];
    defineModel: {
      localName?: vue.TextRange;
      name?: vue.TextRange;
      type?: vue.TextRange;
      modifierType?: vue.TextRange;
      runtimeType?: vue.TextRange;
      defaultValue?: vue.TextRange;
      required?: boolean;
      comments?: vue.TextRange;
      argNode?: ts.Expression;
    }[];
    defineProps: ({
      callExp: vue.TextRange;
      exp: vue.TextRange;
      arg?: vue.TextRange;
      typeArg?: vue.TextRange;
    } & {
      name?: string;
      destructured?: Map<string, ts.Expression | undefined>;
      destructuredRest?: string;
      statement: vue.TextRange;
      argNode?: ts.Expression;
    }) | undefined;
    withDefaults: (Omit<{
      callExp: vue.TextRange;
      exp: vue.TextRange;
      arg?: vue.TextRange;
      typeArg?: vue.TextRange;
    }, "typeArg"> & {
      argNode?: ts.Expression;
    }) | undefined;
    defineEmits: ({
      callExp: vue.TextRange;
      exp: vue.TextRange;
      arg?: vue.TextRange;
      typeArg?: vue.TextRange;
    } & {
      name?: string;
      hasUnionTypeArg?: boolean;
      statement: vue.TextRange;
    }) | undefined;
    defineSlots: ({
      callExp: vue.TextRange;
      exp: vue.TextRange;
      arg?: vue.TextRange;
      typeArg?: vue.TextRange;
    } & {
      name?: string;
      statement: vue.TextRange;
    }) | undefined;
    defineExpose: {
      callExp: vue.TextRange;
      exp: vue.TextRange;
      arg?: vue.TextRange;
      typeArg?: vue.TextRange;
    } | undefined;
    defineOptions: {
      name?: string;
      inheritAttrs?: string;
    } | undefined;
    useAttrs: {
      callExp: vue.TextRange;
      exp: vue.TextRange;
      arg?: vue.TextRange;
      typeArg?: vue.TextRange;
    }[];
    useCssModule: {
      callExp: vue.TextRange;
      exp: vue.TextRange;
      arg?: vue.TextRange;
      typeArg?: vue.TextRange;
    }[];
    useSlots: {
      callExp: vue.TextRange;
      exp: vue.TextRange;
      arg?: vue.TextRange;
      typeArg?: vue.TextRange;
    }[];
    useTemplateRef: ({
      callExp: vue.TextRange;
      exp: vue.TextRange;
      arg?: vue.TextRange;
      typeArg?: vue.TextRange;
    } & {
      name?: string;
    })[];
  };
  getScriptSetupBlock: (normalizedFilepath: string) => (vue.SfcBlock & {
    generic: vue.SfcBlockAttr | undefined;
    ast: ts.SourceFile;
  }) | undefined;
  getScriptSetupAst: (normalizedFilepath: string) => ts.SourceFile | undefined;
  getVirtualFileOrTsAst: (normalizedFilepath: string) => ts.SourceFile | undefined;
  traverseAst: (ast: ts.SourceFile, cb: (node: ts.Node) => void) => void;
  findNodeByRange: (ast: ts.SourceFile, filter: (ranges: vue.ScriptSetupRanges) => vue.TextRange | undefined) => ts.Node | undefined;
  findNodeByName: (ast: ts.SourceFile, name: string) => ts.Node | undefined;
};
type Language = ReturnType<typeof createLanguage>;
declare function ensureLanguage(tsconfigPath: string): void;
declare function getLanguage(): Language;
//#endregion
export { ensureLanguage, getLanguage };