import type { MaterialDefineValue, MaterialDefines, MaterialIncludes } from './material.js';
/**
 * Source location metadata for one generated fragment line.
 */
export interface MaterialSourceLocation {
    /**
     * Origin category for this generated line.
     */
    kind: 'fragment' | 'include' | 'define';
    /**
     * 1-based line in the origin source.
     */
    line: number;
    /**
     * Include chunk identifier when `kind === "include"`.
     */
    include?: string;
    /**
     * Define identifier when `kind === "define"`.
     */
    define?: string;
}
/**
 * 1-based line map from generated fragment WGSL to user source locations.
 */
export type MaterialLineMap = Array<MaterialSourceLocation | null>;
/**
 * Preprocess output used by material resolution and diagnostics mapping.
 */
export interface PreprocessedMaterialFragment {
    /**
     * Final fragment source after defines/include expansion.
     */
    fragment: string;
    /**
     * 1-based generated-line source map.
     */
    lineMap: MaterialLineMap;
    /**
     * Deterministic WGSL define block used to build the final fragment source.
     */
    defineBlockSource: string;
}
/**
 * Validates and normalizes define entries.
 */
export declare function normalizeDefines<TDefineKey extends string>(defines: MaterialDefines<TDefineKey> | undefined): MaterialDefines<TDefineKey>;
/**
 * Validates include map identifiers and source chunks.
 */
export declare function normalizeIncludes<TIncludeKey extends string>(includes: MaterialIncludes<TIncludeKey> | undefined): MaterialIncludes<TIncludeKey>;
/**
 * Converts one define declaration to WGSL `const`.
 */
export declare function toDefineLine(key: string, value: MaterialDefineValue): string;
/**
 * Preprocesses material fragment with deterministic define/include expansion and line mapping.
 */
export declare function preprocessMaterialFragment<TDefineKey extends string, TIncludeKey extends string>(input: {
    fragment: string;
    defines?: MaterialDefines<TDefineKey>;
    includes?: MaterialIncludes<TIncludeKey>;
}): PreprocessedMaterialFragment;
//# sourceMappingURL=material-preprocess.d.ts.map