import { PluginItem } from "@babel/core";
import { OptimizeLodashOptions } from "@optimize-lodash/rollup-plugin";
import { PkgExport, PkgExports, PkgExports as PkgExports$1 } from "@sanity/parse-package-json";
import { Options } from "@vanilla-extract/rollup-plugin";
import { PluginOptions } from "babel-plugin-react-compiler";
import { NormalizedOutputOptions, Plugin, Plugin as RollupPlugin, TreeshakingOptions } from "rollup";
type ToggleType = 'error' | 'warn' | 'off';
/**
 * @public
 */
interface StrictOptions {
  /**
   * Disallows a top level `typings` field in `package.json` if it is equal to `exports['.'].source`.
   * @defaultValue 'error'
   */
  noPackageJsonTypings: ToggleType;
  /**
   * Requires specifying `sideEffects` in `package.json`.
   * @defaultValue 'warn'
   */
  noImplicitSideEffects: ToggleType;
  /**
   * Requires specifying `browserslist` in `package.json`, instead of relying on it implicitly being:
   * @example
   * ```
   * "browserslist": "extends @sanity/browserslist-config"
   * ```
   * @defaultValue 'warn'
   */
  noImplicitBrowsersList: ToggleType;
  /**
   * If typescript is used then `types` in `package.json` should be specified for npm listings to show the TS icon.
   * @defaultValue 'error'
   */
  alwaysPackageJsonTypes: ToggleType;
  /**
   * Using `.npmignore` is error prone, it's best practice to always declare `files` instead
   * @defaultValue 'error'
   */
  alwaysPackageJsonFiles: ToggleType;
  /**
   * It's slow to perform type checking while generating dts files, so it's best practice to disable it with a `"noCheck": true` in the tsconfig.json file used by `package.config.ts`
   * @defaultValue 'warn'
   */
  noCheckTypes: ToggleType;
  /**
   * Disallows the `browser` field in `package.json` as the `browser` condition in `exports` is better supported.
   * @defaultValue 'warn'
   */
  noPackageJsonBrowser: ToggleType;
  /**
   * Disallows the `typesVersions` field in `package.json` as TypeScript has long supported conditional exports and the `types` condition.
   * @defaultValue 'warn'
   */
  noPackageJsonTypesVersions: ToggleType;
  /**
   * Warns if `type` field is missing or set to `commonjs`. Future versions will require `"type": "module"`.
   * @defaultValue 'warn'
   */
  preferModuleType: ToggleType;
  /**
   * Warns if `publishConfig.exports` is missing when `source`, `development`, or `monorepo` conditions are used in exports.
   * @defaultValue 'warn'
   */
  noPublishConfigExports: ToggleType;
  /**
   * Disallows `react-is` in `peerDependencies`. It should be in `dependencies` (or `devDependencies`) instead.
   * @defaultValue 'error'
   */
  noReactIsPeerDependency: ToggleType;
  /**
   * Disallows `@sanity/ui` in `peerDependencies`. It should be in `dependencies` (or `devDependencies`) instead.
   * @defaultValue 'error'
   */
  noSanityUiPeerDependency: ToggleType;
  /**
   * Disallows `@sanity/icons` in `peerDependencies`. It should be in `dependencies` (or `devDependencies`) instead.
   * @defaultValue 'error'
   */
  noSanityIconsPeerDependency: ToggleType;
  /**
   * Disallows `sanity` in `dependencies`. It should only be in `devDependencies` and/or `peerDependencies`.
   * @defaultValue 'error'
   */
  noSanityDependency: ToggleType;
  /**
   * Disallows `styled-components` in `dependencies`. It should only be in `devDependencies` and/or `peerDependencies`.
   * @defaultValue 'error'
   */
  noStyledComponentsDependency: ToggleType;
  /**
   * Disallows `react` in `dependencies`. It should only be in `devDependencies` and/or `peerDependencies`.
   * @defaultValue 'error'
   */
  noReactDependency: ToggleType;
  /**
   * Disallows `react-dom` in `dependencies`. It should only be in `devDependencies` and/or `peerDependencies`.
   * @defaultValue 'error'
   */
  noReactDomDependency: ToggleType;
  /**
   * Disallows `@types/react` in `dependencies`. It should only be in `devDependencies` and/or `peerDependencies`, and when declared as a peer dependency the version range should be `*`.
   * @defaultValue 'error'
   */
  noReactTypesDependency: ToggleType;
  /**
   * Disallows `@types/react-dom` in `dependencies`. It should only be in `devDependencies` and/or `peerDependencies`, and when declared as a peer dependency the version range should be `*`.
   * @defaultValue 'error'
   */
  noReactDomTypesDependency: ToggleType;
  /**
   * Disallows `@types/node` in `dependencies`. It should only be in `devDependencies` and/or `peerDependencies`, and when declared as a peer dependency the version range should be `*`.
   * @defaultValue 'error'
   */
  noNodeTypesDependency: ToggleType;
  /**
   * Disallows `rxjs` in `peerDependencies`. It should only be in `dependencies` and/or `devDependencies`.
   * @defaultValue 'error'
   */
  noRxjsPeerDependency: ToggleType;
  /**
   * Disallows `@sanity/client` in `peerDependencies`. It should only be in `dependencies` and/or `devDependencies`.
   * @defaultValue 'error'
   */
  noSanityClientPeerDependency: ToggleType;
}
/** @public */
type PkgFormat = 'commonjs' | 'esm';
/**
 * Options for the `@vanilla-extract/rollup-plugin` integration, including pkg-utils-specific
 * extensions (`minify`, `browserslist`, and `extract.compatMode`).
 * @alpha
 */
interface PkgVanillaExtractOptions extends Omit<Options, 'extract'> {
  /**
   * Minify the extracted CSS with `lightningcss`.
   * @defaultValue true
   */
  minify?: boolean;
  /**
   * Browserslist query passed to `lightningcss` when optimizing the extracted CSS.
   * @defaultValue the project's browserslist config, falling back to pkg-utils' default query
   */
  browserslist?: string | string[];
  /**
   * Different formatting of identifiers (e.g. class names, keyframes, CSS Vars, etc).
   * @defaultValue "short"
   */
  identifiers?: Options['identifiers'];
  /**
   * Extract the CSS into a separate file. pkg-utils always extracts, so this configures _how_.
   */
  extract?: {
    /**
     * Name of the emitted `.css` file (and, with `compatMode`, the `exports` subpath + shim base).
     * @defaultValue "bundle.css"
     */
    name?: string;
    /**
     * Generate a `.css.map` sourcemap file.
     * @defaultValue true
     */
    sourcemap?: boolean;
    /**
     * Compatibility mode automatically wires up the conditional CSS export pattern so userland does
     * not have to. When enabled, pkg-utils:
     *
     * - injects `import "<pkg-name>/<name>"` into each entry chunk (no manual `rollup.output.intro`),
     * - emits a no-op `<name>.js` shim for runtimes that cannot import `.css` files, and
     * - writes the conditional `"./<name>"` export to `package.json`
     *   (`browser`/`style` → the real CSS, `node`/`default` → the shim).
     *
     * The result is that `import "<pkg>/<name>"` resolves to the real CSS in bundlers/browsers and
     * to the no-op shim in Node and similar runtimes. Disable it to wire these up yourself.
     * @defaultValue true
     */
    compatMode?: boolean;
  };
}
/** @public */
type PkgRuntime = '*' | 'browser' | 'node';
/** @public */
type PkgConfigPropertyResolver<T> = (prev: T) => T;
/** @public */
type PkgConfigProperty<T> = PkgConfigPropertyResolver<T> | T;
/** @public */
interface PkgBundle {
  source: string;
  import?: string;
  require?: string;
  runtime?: PkgRuntime;
}
/** @public */
type PkgRuleLevel = 'error' | 'warn' | 'info' | 'off';
/** @public */
interface TSDocCustomTag {
  name: string;
  syntaxKind: 'block' | 'modifier';
  allowMultiple?: boolean;
}
type DtsType = 'api-extractor' | 'rolldown';
/** @public */
interface PkgConfigOptions {
  /** @alpha */
  babel?: {
    plugins?: PluginItem[] | null | undefined;
    /** @alpha */
    reactCompiler?: boolean;
    /** @alpha */
    styledComponents?: boolean | {
      /** @defaultValue true */
      displayName?: boolean;
      /**
       * @defaultValue []
       * @example ["\@xstyled/styled-components", "\@xstyled/styled-components/*"]
       */
      topLevelImportPaths?: string[];
      /** @defaultValue true */
      ssr?: boolean;
      /** @defaultValue false */
      fileName?: boolean;
      /** @defaultValue ["index"] */
      meaninglessFileNames?: string[];
      /** @defaultValue true */
      minify?: boolean;
      /**
       * Transpiles `styled.button`...`` to `styled.button(["..."])` so that the `pure` option can
       * annotate a plain call expression, as pure annotations on tagged template expressions aren't
       * supported by bundlers (https://github.com/rollup/rollup/issues/4035). Without it unused
       * styled components can't be tree-shaken.
       * @defaultValue true
       */
      transpileTemplateLiterals?: boolean;
      namespace?: string;
      /** @defaultValue true */
      pure?: boolean;
    };
  };
  /**
   * Configure the React Compiler.
   * To enable it set `babel.reactCompiler` to `true`
   * @beta */
  reactCompilerOptions?: Partial<PluginOptions>;
  bundles?: PkgBundle[];
  /** @alpha */
  define?: Record<string, string | number | boolean | undefined | null>;
  /**
   * Directory of distributed & bundled files.
   */
  dist?: string;
  exports?: PkgConfigProperty<PkgExports$1>;
  /**
   * Runs `@microsoft/api-extractor` to check that TSDoc tags are valid, and release tags are correct.
   * This is useful for packages that need to be consumed by TSDoc-based tooling.
   * It's enabled by default, it can be disabled by setting `extract: {enabled: false}`
   */
  extract?: {
    /**
     * @defaultValue true
     */
    enabled?: boolean;
    /**
     * When set to false, disables type checking during type definition generation.
     * This is equivalent to setting `"noCheck": true` in tsconfig.json but can be
     * controlled from package.config.ts without needing multiple tsconfig files.
     * @defaultValue undefined (uses tsconfig.json settings)
     */
    checkTypes?: boolean;
    /**
     * Packages in `devDependencies` that are not in `external` are automatically added to the `bundledPackages` config.
     * You can exclude a package from being bundled by using a callback:
     * ```
     * bundledPackages: (prev) => prev.filter(package => package !== 'sanity')
     * ```
     */
    bundledPackages?: PkgConfigProperty<string[]>;
    customTags?: TSDocCustomTag[];
    rules?: {
      'ae-incompatible-release-tags'?: PkgRuleLevel;
      'ae-internal-missing-underscore'?: PkgRuleLevel;
      'ae-missing-release-tag'?: PkgRuleLevel;
      'tsdoc-link-tag-unescaped-text'?: PkgRuleLevel;
      'tsdoc-undefined-tag'?: PkgRuleLevel;
      'tsdoc-unsupported-tag'?: PkgRuleLevel;
    };
  };
  /**
   * Packages to exclude from bundles.
   * Provide an array to merge with default exclusions, use a function to replace them:
   * ```
   * exclude: (prev) => prev.filter(package => package !== 'foo')
   * ```
   */
  external?: PkgConfigProperty<string[]>;
  /**
   * Defaults to `"automatic"`
   */
  jsx?: 'transform' | 'preserve' | 'automatic';
  /**
   * Defaults to `"createElement"`
   */
  jsxFactory?: string;
  /**
   * Defaults to `"Fragment"`
   */
  jsxFragment?: string;
  /**
   * Defaults to `"react"`
   */
  jsxImportSource?: string;
  minify?: boolean;
  /** @alpha */
  rollup?: {
    plugins?: PkgConfigProperty<Plugin[]>;
    output?: Partial<NormalizedOutputOptions>;
    /**
     * Defaults to Rollup's `preset: 'recommended'` tree-shaking options. Anything provided here
     * is merged on top of that preset.
     * @alpha
     */
    treeshake?: TreeshakingOptions;
    /** @alpha */
    experimentalLogSideEffects?: boolean;
    /**
     * Adds [hash] to chunk filenames, generally only useful if `@sanity/pkg-utils` is used to deploy a package directly to a CDN.
     * It's not needed when publishing to npm for consumption by other libraries, bundlers and frameworks.
     * @defaultValue false
     */
    hashChunkFileNames?: boolean;
    /**
     * Optimizes lodash imports using `@optimize-lodash/rollup-plugin` when set to `true`.
     * It's enabled if `lodash` is found in `dependencies` or `peerDependencies`.
     * It will use `lodash-es` for ESM targets if found in `dependencies` or `peerDependencies`.
     * @defaultValue true
     * @alpha
     */
    optimizeLodash?: boolean | OptimizeLodashOptions;
    /**
     * Enables \@vanilla-extract/rollup-plugin to extract CSS into a separate file, with support for
     * minifying the extracted CSS. Pass `true` to use the defaults, or an object to customize.
     *
     * By default (`extract.compatMode: true`) pkg-utils also injects the self-referential
     * `import "<pkg>/bundle.css"`, emits a `bundle.css.js` shim, and writes the conditional
     * `"./bundle.css"` export to `package.json` - see {@link PkgVanillaExtractOptions}.
     * @alpha
     */
    vanillaExtract?: boolean | PkgVanillaExtractOptions;
  };
  /**
   * Default runtime of package exports
   */
  runtime?: PkgRuntime;
  sourcemap?: boolean;
  /**
   * Directory of source files.
   */
  src?: string;
  tsconfig?: string;
  /**
   * Configure what checks are made when running `--strict` builds and checks
   */
  strictOptions?: Partial<StrictOptions>;
  /**
   * .d.ts files can be generated either by using `@microsoft/api-extractor` or `rolldown`.
   * `rolldown` is the faster option, but is not yet stable.
   * @defaultValue 'api-extractor'
   */
  dts?: DtsType;
  /**
   * When using `dts: 'rolldown'`, enables the use of the Go-native TypeScript compiler (`tsgo`) for type generation.
   * By default, `tsgo` is automatically enabled if `@typescript/native-preview` is found in `devDependencies`,
   * or if the installed `typescript` is v7 (which is the Go-native compiler).
   * Set to `true` to explicitly enable or `false` to explicitly disable.
   * Note that `tsgo` cannot be disabled when `typescript` v7 is installed, as v7 no longer ships
   * the JS compiler API that the non-tsgo code path depends on.
   * @alpha
   */
  tsgo?: boolean;
}
/** @public */
declare function defineConfig<const T extends PkgConfigOptions>(configOptions: T): T;
/** @alpha */
declare function loadConfig(options: {
  cwd: string;
  pkgPath: string;
}): Promise<PkgConfigOptions | undefined>;
/** @public */
declare const DEFAULT_BROWSERSLIST_QUERY: string[];
/** @public */
interface PkgTemplateStringOption<T = string> {
  name: string;
  type: 'string';
  description: string;
  initial?: T | ((options: Record<string, any>) => T);
  parse?: (v: string) => T | null;
  validate?: (v: string) => string | true;
}
/** @public */
type PkgTemplateOption<T = string> = PkgTemplateStringOption<T>;
/** @public */
declare function defineTemplateOption<T>(option: PkgTemplateOption<T>): PkgTemplateOption<T>;
export { DEFAULT_BROWSERSLIST_QUERY, type PkgBundle, type PkgConfigOptions, type PkgConfigProperty, type PkgConfigPropertyResolver, type PkgExport, type PkgExports, type PkgFormat, type PkgRuleLevel, type PkgRuntime, type RollupPlugin, type TSDocCustomTag, defineConfig, defineTemplateOption, loadConfig };
//# sourceMappingURL=index.d.ts.map