-
Notifications
You must be signed in to change notification settings - Fork 111
/
index.js
38 lines (32 loc) · 894 Bytes
/
index.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
import { basename, join } from 'path';
import { writeFile } from 'fs/promises';
import sass from 'sass';
/** @typedef {import('sass').CompileResult} CompileResult */
/** @typedef {import('sass').Options<'sync'>} SyncSassOptions */
/**
* @typedef BuildOptions
*
* @prop {string=} outDir Output directory.
*/
/**
* Compiles a given Sass file.
*
* @param {string} file File to build.
* @param {BuildOptions & SyncSassOptions} options Build options.
*
* @return {Promise<CompileResult>}
*/
export async function buildFile(file, options) {
const { outDir, ...sassOptions } = options;
const compileResult = sass.compile(file, {
...sassOptions,
loadPaths: ['node_modules'],
quietDeps: true,
});
let outFile = basename(file, '.scss');
if (outDir) {
outFile = join(outDir, outFile);
}
await writeFile(outFile, compileResult.css);
return compileResult;
}