sass
Version:
A pure JavaScript implementation of Sass.
169 lines (163 loc) • 6.15 kB
TypeScript
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 = 'sync' | 'async'> = sync extends 'async'
? LegacySyncImporter | LegacyAsyncImporter
: LegacySyncImporter;