import type { TSESTree } from '@typescript-eslint/utils';
import type { RequiredParserServices } from './parser-services.js';
export type TypeOrigin = {
    internal: TSESTree.TypeNode[];
    external: TSESTree.TypeNode[];
};
/**
 * Partitions the syntactic members of a type annotation into "internal"
 * (user-writable in this project) and "external" (declared in node_modules
 * or in the TypeScript default lib).
 *
 * Operates on the syntactic AST node, not on a resolved `ts.Type`. Returning
 * the original AST nodes lets callers produce locations, suggestions, or
 * fixes targeting exactly what the user wrote.
 *
 * Classification rules per top-level member:
 * - Keyword / literal types -> internal (the user wrote them directly).
 * - TSTypeReference -> resolves the type name to a symbol and inspects its
 *   declarations. A reference is external only when ALL declarations live in
 *   files that satisfy `isSourceFileFromExternalLibrary` or
 *   `isSourceFileDefaultLibrary`. Any local declaration (declaration-merging
 *   escape hatch) makes the reference internal.
 * - Any other composite constructor (TSIntersectionType, TSArrayType,
 *   TSTypeLiteral, TSConditionalType, ...) -> internal at the top level. We
 *   do not recurse; callers can if they need to.
 *
 * Known limitation: alias chains are not followed. If the user re-aliases an
 * external type locally (e.g. `type Inner = ReactNode`), the local alias is
 * internal because the user has a place to edit.
 */
export declare function classifyTypesByOrigin(typeNode: TSESTree.TypeNode, services: RequiredParserServices): TypeOrigin;
