import {LegacyPluginThis} from './plugin_this'; /** * The value of `this` in the context of a [[LegacyImporter]] function. * * @category Legacy * @deprecated This is only used by the legacy [[render]] and [[renderSync]] * APIs. Use [[Importer]] with [[compile]], [[compileString]], [[compileAsync]], * and [[compileStringAsync]] instead. */ interface LegacyImporterThis extends LegacyPluginThis { /** * Whether the importer is being invoked because of a Sass `@import` rule, as * opposed to a `@use` or `@forward` rule. * * This should *only* be used for determining whether or not to load * [import-only files](https://sass-lang.com/documentation/at-rules/import#import-only-files). * * @compatibility dart: "1.33.0", node: false */ fromImport: boolean; } /** * The result of running a [[LegacyImporter]]. It must be one of the following * types: * * * An object with the key `contents` whose value is the contents of a stylesheet * (in SCSS syntax). This causes Sass to load that stylesheet’s contents. * * * An object with the key `file` whose value is a path on disk. This causes Sass * to load that file as though it had been imported directly. * * * `null`, which indicates that it doesn’t recognize the URL and another * importer should be tried instead. * * * An [Error](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Error) * object, indicating that importing failed. * * @category Legacy * @deprecated This only works with the legacy [[render]] and [[renderSync]] * APIs. Use [[ImporterResult]] with [[compile]], [[compileString]], * [[compileAsync]], and [[compileStringAsync]] instead. */ export type LegacyImporterResult = | {file: string} | {contents: string} | Error | null; /** * A synchronous callback that implements custom Sass loading logic for * [`@import` rules](https://sass-lang.com/documentation/at-rules/import) and * [`@use` rules](https://sass-lang.com/documentation/at-rules/use). This can be * passed to [[LegacySharedOptions.importer]] for either [[render]] or * [[renderSync]]. * * See [[LegacySharedOptions.importer]] for more detailed documentation. * * ```js * sass.renderSync({ * file: "style.scss", * importer: [ * function(url, prev) { * if (url != "big-headers") return null; * * return { * contents: 'h1 { font-size: 40px; }' * }; * } * ] * }); * ``` * * @param url - The `@use` or `@import` rule’s URL as a string, exactly as it * appears in the stylesheet. * * @param prev - A string identifying the stylesheet that contained the `@use` * or `@import`. This string’s format depends on how that stylesheet was loaded: * * * If the stylesheet was loaded from the filesystem, it’s the absolute path of * its file. * * If the stylesheet was loaded from an importer that returned its contents, * it’s the URL of the `@use` or `@import` rule that loaded it. * * If the stylesheet came from the data option, it’s the string "stdin". * * @category Legacy * @deprecated This only works with the legacy [[render]] and [[renderSync]] * APIs. Use [[Importer]] with [[compile]], [[compileString]], [[compileAsync]], * and [[compileStringAsync]] instead. */ type LegacySyncImporter = ( this: LegacyImporterThis, url: string, prev: string ) => LegacyImporterResult; /** * An asynchronous callback that implements custom Sass loading logic for * [`@import` rules](https://sass-lang.com/documentation/at-rules/import) and * [`@use` rules](https://sass-lang.com/documentation/at-rules/use). This can be * passed to [[LegacySharedOptions.importer]] for either [[render]] or * [[renderSync]]. * * An asynchronous importer must return `undefined`, and then call `done` with * the result of its [[LegacyImporterResult]] once it's done running. * * See [[LegacySharedOptions.importer]] for more detailed documentation. * * ```js * sass.render({ * file: "style.scss", * importer: [ * function(url, prev, done) { * if (url != "big-headers") done(null); * * done({ * contents: 'h1 { font-size: 40px; }' * }); * } * ] * }); * ``` * * @param url - The `@use` or `@import` rule’s URL as a string, exactly as it * appears in the stylesheet. * * @param prev - A string identifying the stylesheet that contained the `@use` * or `@import`. This string’s format depends on how that stylesheet was loaded: * * * If the stylesheet was loaded from the filesystem, it’s the absolute path of * its file. * * If the stylesheet was loaded from an importer that returned its contents, * it’s the URL of the `@use` or `@import` rule that loaded it. * * If the stylesheet came from the data option, it’s the string "stdin". * * @param done - The callback to call once the importer has finished running. * * @category Legacy * @deprecated This only works with the legacy [[render]] and [[renderSync]] * APIs. Use [[Importer]] with [[compile]], [[compileString]], [[compileAsync]], * and [[compileStringAsync]] instead. */ type LegacyAsyncImporter = ( this: LegacyImporterThis, url: string, prev: string, done: (result: LegacyImporterResult) => void ) => void; /** * A callback that implements custom Sass loading logic for [`@import` * rules](https://sass-lang.com/documentation/at-rules/import) and [`@use` * rules](https://sass-lang.com/documentation/at-rules/use). For [[renderSync]], * this must be a [[LegacySyncImporter]] which returns its result directly; for * [[render]], it may be either a [[LegacySyncImporter]] or a * [[LegacyAsyncImporter]] which calls a callback with its result. * * See [[LegacySharedOptions.importer]] for more details. * * @category Legacy * @deprecated This only works with the legacy [[render]] and [[renderSync]] * APIs. Use [[Importer]] with [[compile]], [[compileString]], [[compileAsync]], * and [[compileStringAsync]] instead. */ export type LegacyImporter = sync extends 'async' ? LegacySyncImporter | LegacyAsyncImporter : LegacySyncImporter;