57 lines
1.5 KiB
TypeScript
57 lines
1.5 KiB
TypeScript
import {promises as fsp} from 'fs';
|
|
import {join} from 'path';
|
|
import nunjucks from 'nunjucks';
|
|
import {generateLove, LoveVariant} from './love';
|
|
|
|
export async function main(): Promise<void> {
|
|
const themesDirectory: string = join(__dirname, '../vscode/themes/');
|
|
// Configure Nunjucks to use the templates for `source/vscode/themes/`.
|
|
nunjucks.configure(themesDirectory, {
|
|
lstripBlocks: true,
|
|
trimBlocks: true,
|
|
throwOnUndefined: true
|
|
});
|
|
|
|
const love: LoveVariant[] = generateLove();
|
|
for (const variant of love) {
|
|
const template: string = await fsp.readFile(
|
|
join(themesDirectory, 'love-template.color-theme.json'),
|
|
'utf8'
|
|
);
|
|
|
|
const outputPath: string = join(
|
|
themesDirectory,
|
|
`love-${variant.name}.color-theme.json`
|
|
);
|
|
|
|
const output: string = nunjucks.renderString(template, {
|
|
love: variant
|
|
});
|
|
let formattedOutput = '';
|
|
for (const line of output.split('\n')) {
|
|
// Don't include the line in the output if it's a comment (starts with '//').
|
|
if (/^\s+\/\/.+$/.exec(line)) {
|
|
continue;
|
|
}
|
|
|
|
formattedOutput += line;
|
|
formattedOutput += '\n';
|
|
}
|
|
|
|
let outputObject: Record<string, unknown>;
|
|
try {
|
|
outputObject = JSON.parse(formattedOutput);
|
|
} catch (error) {
|
|
console.log('Could not parse formatted output as regular JSON:');
|
|
console.log(error.message);
|
|
return;
|
|
}
|
|
|
|
await fsp.writeFile(outputPath, JSON.stringify(outputObject));
|
|
}
|
|
}
|
|
|
|
if (require.main === module) {
|
|
void main();
|
|
}
|