1import * as fs from 'fs';
2import { darkThemeVarsTemplate } from '@grafana/ui/src/themes/_variables.dark.scss.tmpl';
3import { lightThemeVarsTemplate } from '@grafana/ui/src/themes/_variables.light.scss.tmpl';
4import { commonThemeVarsTemplate } from '@grafana/ui/src/themes/_variables.scss.tmpl';
5import { createTheme } from '@grafana/data';
6
7const darkThemeVariablesPath = __dirname + '/../../public/sass/_variables.dark.generated.scss';
8const lightThemeVariablesPath = __dirname + '/../../public/sass/_variables.light.generated.scss';
9const defaultThemeVariablesPath = __dirname + '/../../public/sass/_variables.generated.scss';
10
11const writeVariablesFile = async (path: string, data: string) => {
12  return new Promise((resolve, reject) => {
13    fs.writeFile(path, data, (e) => {
14      if (e) {
15        reject(e);
16      } else {
17        resolve(data);
18      }
19    });
20  });
21};
22
23const generateSassVariableFiles = async () => {
24  const darkTheme = createTheme();
25  const lightTheme = createTheme({ colors: { mode: 'light' } });
26
27  try {
28    await Promise.all([
29      writeVariablesFile(darkThemeVariablesPath, darkThemeVarsTemplate(darkTheme)),
30      writeVariablesFile(lightThemeVariablesPath, lightThemeVarsTemplate(lightTheme)),
31      writeVariablesFile(defaultThemeVariablesPath, commonThemeVarsTemplate(darkTheme)),
32    ]);
33    console.log('\nSASS variable files generated');
34  } catch (error) {
35    console.error('\nWriting SASS variable files failed', error);
36    process.exit(1);
37  }
38};
39
40generateSassVariableFiles();
41