/** * The result of a preprocessor run. If the preprocessor does not return a result, it is assumed that the code is unchanged. */ export interface Processed { /** * The new code */ code: string; /** * A source map mapping back to the original code */ map?: string | object; // we are opaque with the type here to avoid dependency on the remapping module for our public types. /** * A list of additional files to watch for changes */ dependencies?: string[]; /** * Only for script/style preprocessors: The updated attributes to set on the tag. If undefined, attributes stay unchanged. */ attributes?: Record; toString?: () => string; } /** * A markup preprocessor that takes a string of code and returns a processed version. */ export type MarkupPreprocessor = (options: { /** * The whole Svelte file content */ content: string; /** * The filename of the Svelte file */ filename?: string; }) => Processed | void | Promise; /** * A script/style preprocessor that takes a string of code and returns a processed version. */ export type Preprocessor = (options: { /** * The script/style tag content */ content: string; /** * The attributes on the script/style tag */ attributes: Record; /** * The whole Svelte file content */ markup: string; /** * The filename of the Svelte file */ filename?: string; }) => Processed | void | Promise; /** * A preprocessor group is a set of preprocessors that are applied to a Svelte file. */ export interface PreprocessorGroup { /** Name of the preprocessor. Will be a required option in the next major version */ name?: string; markup?: MarkupPreprocessor; style?: Preprocessor; script?: Preprocessor; } /** * Utility type to extract the type of a preprocessor from a preprocessor group */ export interface SveltePreprocessor< PreprocessorType extends keyof PreprocessorGroup, Options = any > { (options?: Options): Required>; }