-
-
Notifications
You must be signed in to change notification settings - Fork 75
/
sass.ts
54 lines (43 loc) 路 1.36 KB
/
sass.ts
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
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
import { merge } from "../core/utils.ts";
import { SassFormats, SassOptions, str } from "../deps/denosass.ts";
import { dirname } from "../deps/path.ts";
import type { Page, Site } from "../core.ts";
export interface Options {
/** Extensions processed by this plugin */
extensions: string[];
/** Output format */
format: SassFormats;
/** Custom includes paths */
includes: string | string[];
}
const defaults: Options = {
extensions: [".scss"],
format: "compressed",
includes: [],
};
/** A plugin to use SASS in Lume */
export default function (userOptions?: Partial<Options>) {
return (site: Site) => {
const options = merge(
{ ...defaults, includes: site.options.includes },
userOptions,
);
const includes = Array.isArray(options.includes)
? options.includes.map((path) => site.src(path))
: [site.src(options.includes)];
site.loadAssets(options.extensions);
site.process(options.extensions, sass);
function sass(page: Page) {
const code = page.content as string;
const filename = site.src(page.src.path + page.src.ext);
const sassOptions: SassOptions = {
load_paths: [...includes, dirname(filename)],
style: options.format,
quiet: site.options.quiet,
};
const result = str(code, sassOptions);
page.content = result;
page.ext = ".css";
}
};
}