///
export type ImporterReturnType =
| { file: string }
| { file?: string | undefined; contents: string }
| Error
| null
| types.Null
| types.Error;
/**
* The context value is a value that is shared for the duration of a single render.
* The context object is the implicit `this` for importers and sass functions
* that are implemented in javascript.
*
* A render can be detected as asynchronous if the `callback` property is set on the context object.
*/
export interface Context {
options: Options;
callback: SassRenderCallback | undefined;
[data: string]: any;
}
export interface AsyncContext extends Context {
callback: SassRenderCallback;
}
export interface SyncContext extends Context {
callback: undefined;
}
export type AsyncImporter = (
this: AsyncContext,
url: string,
prev: string,
done: (data: ImporterReturnType) => void,
) => void;
export type SyncImporter = (this: SyncContext, url: string, prev: string) => ImporterReturnType;
export type Importer = AsyncImporter | SyncImporter;
// These function types enumerate up to 6 js arguments. More than that will be incorrectly marked by the compiler as an error.
// ** Sync Sass functions receiving fixed # of arguments ***
export type SyncSassFn = (this: SyncContext, ...$args: types.Value[]) => types.ReturnValue;
// ** Sync Sass functions receiving variable # of arguments ***
export type SyncSassVarArgFn1 = (this: SyncContext, $arg1: types.Value[]) => types.ReturnValue;
export type SyncSassVarArgFn2 = (this: SyncContext, $arg1: types.Value, $arg2: types.Value[]) => types.ReturnValue;
export type SyncSassVarArgFn3 = (
this: SyncContext,
$arg1: types.Value,
$arg2: types.Value,
$arg3: types.Value[],
) => types.ReturnValue;
export type SyncSassVarArgFn4 = (
this: SyncContext,
$arg1: types.Value,
$arg2: types.Value,
$arg3: types.Value,
$arg4: types.Value[],
) => types.ReturnValue;
export type SyncSassVarArgFn5 = (
this: SyncContext,
$arg1: types.Value,
$arg2: types.Value,
$arg3: types.Value,
$arg4: types.Value,
$arg5: types.Value[],
) => types.ReturnValue;
export type SyncSassVarArgFn6 = (
this: SyncContext,
$arg1: types.Value,
$arg2: types.Value,
$arg3: types.Value,
$arg4: types.Value,
$arg5: types.Value,
$arg6: types.Value[],
) => types.ReturnValue;
export type SassFunctionCallback = ($result: types.ReturnValue) => void;
// ** Async Sass functions receiving fixed # of arguments ***
export type AsyncSassFn0 = (this: AsyncContext, cb: SassFunctionCallback) => void;
export type AsyncSassFn1 = (this: AsyncContext, $arg1: types.Value, cb: SassFunctionCallback) => void;
export type AsyncSassFn2 = (
this: AsyncContext,
$arg1: types.Value,
$arg2: types.Value,
cb: SassFunctionCallback,
) => void;
export type AsyncSassFn3 = (
this: AsyncContext,
$arg1: types.Value,
$arg2: types.Value,
$arg3: types.Value,
cb: SassFunctionCallback,
) => void;
export type AsyncSassFn4 = (
this: AsyncContext,
$arg1: types.Value,
$arg2: types.Value,
$arg3: types.Value,
$arg4: types.Value,
cb: SassFunctionCallback,
) => void;
export type AsyncSassFn5 = (
this: AsyncContext,
$arg1: types.Value,
$arg2: types.Value,
$arg3: types.Value,
$arg4: types.Value,
$arg5: types.Value,
cb: SassFunctionCallback,
) => void;
export type AsyncSassFn6 = (
this: AsyncContext,
$arg1: types.Value,
$arg2: types.Value,
$arg3: types.Value,
$arg4: types.Value,
$arg5: types.Value,
$arg6: types.Value,
cb: SassFunctionCallback,
) => void;
// *** Async Sass Functions receiving variable # of arguments ***
export type AsyncSassVarArgFn1 = (this: AsyncContext, $arg1: types.Value[], cb: SassFunctionCallback) => void;
export type AsyncSassVarArgFn2 = (
this: AsyncContext,
$arg1: types.Value,
$arg2: types.Value[],
cb: SassFunctionCallback,
) => void;
export type AsyncSassVarArgFn3 = (
this: AsyncContext,
$arg1: types.Value,
$arg2: types.Value,
$arg3: types.Value[],
cb: SassFunctionCallback,
) => void;
export type AsyncSassVarArgFn4 = (
this: AsyncContext,
$arg1: types.Value,
$arg2: types.Value,
$arg3: types.Value,
$arg4: types.Value[],
cb: SassFunctionCallback,
) => void;
export type AsyncSassVarArgFn5 = (
this: AsyncContext,
$arg1: types.Value,
$arg2: types.Value,
$arg3: types.Value,
$arg4: types.Value,
$arg5: types.Value[],
cb: SassFunctionCallback,
) => void;
export type AsyncSassVarArgFn6 = (
this: AsyncContext,
$arg1: types.Value,
$arg2: types.Value,
$arg3: types.Value,
$arg4: types.Value,
$arg5: types.Value,
$arg6: types.Value[],
cb: SassFunctionCallback,
) => void;
export type SyncSassFunction =
| SyncSassFn
| SyncSassVarArgFn1
| SyncSassVarArgFn2
| SyncSassVarArgFn3
| SyncSassVarArgFn4
| SyncSassVarArgFn5
| SyncSassVarArgFn6;
export type AsyncSassFunction =
| AsyncSassFn0
| AsyncSassFn1
| AsyncSassFn2
| AsyncSassFn3
| AsyncSassFn4
| AsyncSassFn5
| AsyncSassFn6
| AsyncSassVarArgFn1
| AsyncSassVarArgFn2
| AsyncSassVarArgFn3
| AsyncSassVarArgFn4
| AsyncSassVarArgFn5
| AsyncSassVarArgFn6;
export type SassFunction = SyncSassFunction | AsyncSassFunction;
export type FunctionDeclarations = Record;
export interface Options {
file?: string | undefined;
data?: string | undefined;
importer?: Importer | Importer[] | undefined;
functions?: FunctionDeclarations | undefined;
includePaths?: string[] | undefined;
indentedSyntax?: boolean | undefined;
indentType?: string | undefined;
indentWidth?: number | undefined;
linefeed?: string | undefined;
omitSourceMapUrl?: boolean | undefined;
outFile?: string | undefined;
outputStyle?: "compact" | "compressed" | "expanded" | "nested" | undefined;
precision?: number | undefined;
sourceComments?: boolean | undefined;
sourceMap?: boolean | string | undefined;
sourceMapContents?: boolean | undefined;
sourceMapEmbed?: boolean | undefined;
sourceMapRoot?: string | undefined;
[key: string]: any;
}
export interface SyncOptions extends Options {
functions?: FunctionDeclarations | undefined;
importer?: SyncImporter | SyncImporter[] | undefined;
}
/**
* The error object returned to javascript by sass's render methods.
*
* This is not the same thing as types.Error.
*/
export interface SassError extends Error {
message: string;
line: number;
column: number;
status: number;
file: string;
}
/**
* The result of successfully compiling a Sass file.
*/
export interface Result {
css: Buffer;
map: Buffer;
stats: {
entry: string;
start: number;
end: number;
duration: number;
includedFiles: string[];
};
}
export type SassRenderCallback = (err: SassError, result: Result) => any;
// Note, most node-sass constructors can be invoked as a function or with a new
// operator. The exception: the types Null and Boolean for which new is
// forbidden.
//
// Because of this, the new-able object notation is used here, a class does not
// work for these types.
export namespace types {
/**
* Values that are received from Sass as an argument to a javascript function.
*/
export type Value = Null | Number | String | Color | Boolean | List | Map;
/**
* Values that are legal to return to Sass from a javascript function.
*/
export type ReturnValue = Value | Error;
// *** Sass Null ***
export interface Null {
/**
* This property doesn't exist, but its presence forces the typescript
* compiler to properly type check this type. Without it, it seems to
* allow things that aren't types.Null to match it in case statements and
* assignments.
*/
readonly ___NULL___: unique symbol;
}
interface NullConstructor {
(): Null;
NULL: Null;
}
export const Null: NullConstructor;
// *** Sass Number ***
export interface Number {
getValue(): number;
setValue(n: number): void;
getUnit(): string;
setUnit(u: string): void;
}
interface NumberConstructor {
/**
* Constructs a new Sass number. Does not require use of the `new` keyword.
*/
new(value: number, unit?: string): Number;
/**
* Constructs a new Sass number. Can also be used with the `new` keyword.
*/
(value: number, unit?: string): Number;
}
export const Number: NumberConstructor;
// *** Sass String ***
export interface String {
getValue(): string;
setValue(s: string): void;
}
interface StringConstructor {
/**
* Constructs a new Sass string. Does not require use of the `new` keyword.
*/
new(value: string): String;
/**
* Constructs a new Sass string. Can also be used with the `new` keyword.
*/
(value: string): String;
}
export const String: StringConstructor;
// *** Sass Color ***
export interface Color {
/**
* Get the red component of the color.
* @returns integer between 0 and 255 inclusive;
*/
getR(): number;
/**
* Set the red component of the color.
* @returns integer between 0 and 255 inclusive;
*/
setR(r: number): void;
/**
* Get the green component of the color.
* @returns integer between 0 and 255 inclusive;
*/
getG(): number;
/**
* Set the green component of the color.
* @param g integer between 0 and 255 inclusive;
*/
setG(g: number): void;
/**
* Get the blue component of the color.
* @returns integer between 0 and 255 inclusive;
*/
getB(): number;
/**
* Set the blue component of the color.
* @param b integer between 0 and 255 inclusive;
*/
setB(b: number): void;
/**
* Get the alpha transparency component of the color.
* @returns number between 0 and 1 inclusive;
*/
getA(): number;
/**
* Set the alpha component of the color.
* @param a number between 0 and 1 inclusive;
*/
setA(a: number): void;
}
interface ColorConstructor {
/**
* Constructs a new Sass color given the RGBA component values. Do not invoke with the `new` keyword.
*
* @param r integer 0-255 inclusive
* @param g integer 0-255 inclusive
* @param b integer 0-255 inclusive
* @param [a] float 0 - 1 inclusive
* @returns a SassColor instance.
*/
new(r: number, g: number, b: number, a?: number): Color;
/**
* Constructs a new Sass color given a 4 byte number. Do not invoke with the `new` keyword.
*
* If a single number is passed it is assumed to be a number that contains
* all the components which are extracted using bitmasks and bitshifting.
*
* @param hexN A number that is usually written in hexadecimal form. E.g. 0xff0088cc.
* @returns a Sass Color instance.
* @example
* // Comparison with byte array manipulation
* let a = new ArrayBuffer(4);
* let hexN = 0xCCFF0088; // 0xAARRGGBB
* let a32 = new Uint32Array(a); // Uint32Array [ 0 ]
* a32[0] = hexN;
* let a8 = new Uint8Array(a); // Uint8Array [ 136, 0, 255, 204 ]
* let componentBytes = [a8[2], a8[1], a8[0], a8[3] / 255] // [ 136, 0, 255, 0.8 ]
* let c = sass.types.Color(hexN);
* let components = [c.getR(), c.getG(), c.getR(), c.getA()] // [ 136, 0, 255, 0.8 ]
* assert.deepEqual(componentBytes, components); // does not raise.
*/
new(hexN: number): Color;
/**
* Constructs a new Sass color given the RGBA component values. Do not invoke with the `new` keyword.
*
* @param r integer 0-255 inclusive
* @param g integer 0-255 inclusive
* @param b integer 0-255 inclusive
* @param [a] float 0 - 1 inclusive
* @returns a SassColor instance.
*/
(r: number, g: number, b: number, a?: number): Color;
/**
* Constructs a new Sass color given a 4 byte number. Do not invoke with the `new` keyword.
*
* If a single number is passed it is assumed to be a number that contains
* all the components which are extracted using bitmasks and bitshifting.
*
* @param hexN A number that is usually written in hexadecimal form. E.g. 0xff0088cc.
* @returns a Sass Color instance.
* @example
* // Comparison with byte array manipulation
* let a = new ArrayBuffer(4);
* let hexN = 0xCCFF0088; // 0xAARRGGBB
* let a32 = new Uint32Array(a); // Uint32Array [ 0 ]
* a32[0] = hexN;
* let a8 = new Uint8Array(a); // Uint8Array [ 136, 0, 255, 204 ]
* let componentBytes = [a8[2], a8[1], a8[0], a8[3] / 255] // [ 136, 0, 255, 0.8 ]
* let c = sass.types.Color(hexN);
* let components = [c.getR(), c.getG(), c.getR(), c.getA()] // [ 136, 0, 255, 0.8 ]
* assert.deepEqual(componentBytes, components); // does not raise.
*/
(hexN: number): Color;
}
export const Color: ColorConstructor;
// *** Sass Boolean ***
export interface Boolean {
getValue(): boolean;
}
interface BooleanConstructor {
(bool: boolean): Boolean;
TRUE: Boolean;
FALSE: Boolean;
}
export const Boolean: BooleanConstructor;
// *** Sass List ***
export interface Enumerable {
getValue(index: number): Value;
setValue(index: number, value: Value): void;
getLength(): number;
}
export interface List extends Enumerable {
getSeparator(): boolean;
setSeparator(isComma: boolean): void;
}
interface ListConstructor {
new(length: number, commaSeparator?: boolean): List;
(length: number, commaSeparator?: boolean): List;
}
export const List: ListConstructor;
// *** Sass Map ***
export interface Map extends Enumerable {
getKey(index: number): Value;
setKey(index: number, key: Value): void;
}
interface MapConstructor {
new(length: number): Map;
(length: number): Map;
}
export const Map: MapConstructor;
// *** Sass Error ***
export interface Error {
/**
* This property doesn't exist, but its presence forces the typescript
* compiler to properly type check this type. Without it, it seems to
* allow things that aren't types.Error to match it in case statements and
* assignments.
*/
readonly ___SASS_ERROR___: unique symbol;
// why isn't there a getMessage() method?
}
interface ErrorConstructor {
/**
* An error return value for async functions.
* For synchronous functions, this can be returned or a standard error object can be thrown.
*/
new(message: string): Error;
/**
* An error return value for async functions.
* For synchronous functions, this can be returned or a standard error object can be thrown.
*/
(message: string): Error;
}
export const Error: ErrorConstructor;
}
// *** Top level Constants ***
export const NULL: types.Null;
export const TRUE: types.Boolean;
export const FALSE: types.Boolean;
export const info: string;
export function render(options: Options, callback: SassRenderCallback): void;
export function renderSync(options: SyncOptions): Result;