import type { AbsolutePath } from '@-xun/fs';
import type { XPackageJson } from '@-xun/project-types';
import type { Merge } from 'type-fest';
/**
 * A type representing the name of an available dummy package.
 */
export type PackageName = 'root' | 'simple' | 'complex' | 'sugared' | 'unlimited' | 'defaults';
/**
 * Represents the dummy package metadata returned by the `getDummyPackage`
 * function.
 */
export type DummyPackageMetadata<RequireObjectImports extends boolean = false, RequireObjectExports extends boolean = false> = {
  path: AbsolutePath;
  name: string;
  packageJson: Merge<XPackageJson, {
    imports: RequireObjectImports extends true ? Exclude<XPackageJson['imports'], string | undefined | null | unknown[]> : XPackageJson['imports'] | undefined;
    exports: RequireObjectExports extends true ? Exclude<XPackageJson['exports'], string | undefined | null | unknown[]> : XPackageJson['exports'] | undefined;
  }>;
};
/**
 * Return metadata about an available dummy package.
 */
export declare function getDummyPackage<RequireObjectImports extends boolean = false, RequireObjectExports extends boolean = false>(id: PackageName, options?: {
  /**
   * If `true`, `imports` must be an object and not `undefined`, `null`,
   * `string`, or an array.
   *
   * @default false
   */
  requireObjectImports?: RequireObjectImports;
  /**
   * If `true`, `exports` must be an object and not `undefined`, `null`,
   * `string`, or an array.
   *
   * @default false
   */
  requireObjectExports?: RequireObjectExports;
}): DummyPackageMetadata<RequireObjectImports, RequireObjectExports>;