import { ConsumeOptions } from "@module-federation/sdk";
import { Compilation } from "webpack";
import { InputFileSystem } from "webpack/lib/util/fs";

//#region src/lib/sharing/utils.d.ts
/**
 * @see https://docs.npmjs.com/cli/v7/configuring-npm/package-json#urls-as-dependencies
 * @param {string} versionDesc version to be normalized
 * @returns {string} normalized version
 */
declare function normalizeVersion(versionDesc: string): string;
/** @typedef {{ data: Record<string, any>, path: string }} DescriptionFile */
interface DescriptionFile {
  data: Record<string, any>;
  path: string;
}
/**
 *
 * @param {InputFileSystem} fs file system
 * @param {string} directory directory to start looking into
 * @param {string[]} descriptionFiles possible description filenames
 * @param {function((Error | null)=, {data?: DescriptionFile, path?: string}=, (checkedDescriptionFilePaths: string[])=): void} callback callback
 * @param {function({data: DescriptionFile}=): boolean} satisfiesDescriptionFileData file data compliance check
 * @param {Set<string>} [checkedFilePaths] optional set to track checked file paths
 */
declare function getDescriptionFile(fs: InputFileSystem, directory: string, descriptionFiles: string[], callback: (err: Error | null, data?: DescriptionFile, checkedDescriptionFilePaths?: string[]) => void, satisfiesDescriptionFileData?: (data?: DescriptionFile) => boolean, checkedFilePaths?: Set<string>): void;
/**
 * Get required version from description file
 * @param {Record<string, any>} data - The data object
 * @param {string} packageName - The package name
 * @returns {string | undefined} The normalized version
 */
declare function getRequiredVersionFromDescriptionFile(data: Record<string, any>, packageName: string): string | undefined | void;
declare function normalizeConsumeShareOptions(consumeOptions: ConsumeOptions): {
  shareConfig: {
    fixedDependencies: boolean;
    requiredVersion: ConsumeOptions;
    strictVersion: ConsumeOptions;
    singleton: ConsumeOptions;
    eager: ConsumeOptions;
    layer: ConsumeOptions;
  };
  shareScope: ConsumeOptions;
  shareKey: ConsumeOptions;
  treeShakingMode: ConsumeOptions;
};
declare function addSingletonFilterWarning(compilation: Compilation, shareKey: string, // The shareKey or a relevant identifier for the shared module
filterType: 'include' | 'exclude', filterProperty: 'request' | 'version', filterValue: string | RegExp, moduleRequest: string, // original request that led to this shared module
moduleResource?: string): void;
declare function testRequestFilters(remainder: string, includeRequest?: string | RegExp, excludeRequest?: string | RegExp): boolean;
declare function createLookupKeyForSharing(request: string, layer?: string | null): string;
declare function extractPathAfterNodeModules(filePath: string): string | null;
//#endregion
export { addSingletonFilterWarning, createLookupKeyForSharing, extractPathAfterNodeModules, getDescriptionFile, getRequiredVersionFromDescriptionFile, normalizeConsumeShareOptions, normalizeVersion, testRequestFilters };
//# sourceMappingURL=utils.d.ts.map