recipe/packages/sass-palette/src/node/prepare.ts
2024-08-18 19:16:25 +08:00

109 lines
2.5 KiB
TypeScript

import type { App } from "vuepress/core";
import { getPath } from "./utils.js";
export const prepareConfigFile = (app: App, id: string): Promise<string> =>
app.writeTemp(
`sass-palette/load-${id}.js`,
`\
import "@sass-palette/${id}-inject";
export default {};
`,
);
export const prepareInjectSass = (app: App, id: string): Promise<string> =>
app.writeTemp(
`sass-palette/${id}-inject.scss`,
`\
@use "sass:meta";
@use "@sass-palette/helper";
@use "@sass-palette/${id}-palette";
$palette-variables: meta.module-variables("${id}-palette");
${
app.env.isDebug
? `
@debug "${id} palette variables: #{meta.inspect($palette-variables)}";
@debug "${id} config variables: #{meta.inspect(meta.module-variables("${id}-config"))}";
`
: ""
}
@if meta.global-variable-exists("dark-selector", $module: "${id}-config") {
@include helper.inject($palette-variables, ${id}-config.$dark-selector);
} @else {
@include helper.inject($palette-variables);
}
`,
);
export interface PrepareConfigOptions {
id: string;
defaultConfig: string;
defaultPalette: string;
generator: string;
userConfig: string;
userPalette: string;
}
export const prepareConfigSass = (
app: App,
{
id,
defaultConfig,
defaultPalette,
generator,
userConfig,
userPalette,
}: PrepareConfigOptions,
): Promise<string> =>
app.writeTemp(
`sass-palette/${id}-config.scss`,
`\
@import "file:///${getPath(defaultPalette)}";
@import "file:///${getPath(defaultConfig)}";
@import "file:///${getPath(userPalette)}";
@import "file:///${getPath(userConfig)}";
@import "file:///${getPath(generator)}";
`,
);
export interface PreparePaletteOptions {
id: string;
defaultPalette: string;
generator: string;
userPalette: string;
}
export const preparePaletteSass = (
app: App,
{ id, defaultPalette, generator, userPalette }: PreparePaletteOptions,
): Promise<string> =>
app.writeTemp(
`sass-palette/${id}-palette.scss`,
`\
@import "file:///${getPath(defaultPalette)}";
@import "file:///${getPath(userPalette)}";
@import "file:///${getPath(generator)}";
`,
);
export interface PrepareStyleOptions {
id: string;
userStyle: string | null;
}
export const prepareStyleSass = (
app: App,
{ id, userStyle }: PrepareStyleOptions,
): Promise<string | null> =>
userStyle
? app.writeTemp(
`sass-palette/${id}-style.scss`,
`\
@forward "file:///${getPath(userStyle)}";
`,
)
: Promise.resolve(null);