Templating less

This commit is contained in:
Maxime Beauchemin
2024-12-20 13:06:19 -08:00
parent 6345a50d44
commit 9249c18e76
19 changed files with 3225 additions and 172 deletions

View File

@@ -0,0 +1,68 @@
/*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*/
import * as fs from 'fs';
import * as path from 'path';
import Handlebars from 'handlebars';
import { supersetTheme } from '../packages/superset-ui-core/src/style/index'; // Adjust the path as needed
Handlebars.escapeExpression = (value: string) => value;
// Function to apply a template and generate the output
function applyTemplate(filePath: string): void {
try {
// Read the .less.hbs template
const templateContent = fs.readFileSync(filePath, 'utf-8');
// Compile the template
const template = Handlebars.compile(templateContent, { noEscape: true });
// Generate the final .less file
const result = template({ theme: supersetTheme });
// Write the output to a .less file
const outputFilePath = filePath.replace('.hbs', ''); // Remove .hbs for output
fs.writeFileSync(outputFilePath, result, 'utf-8');
console.log(`Themed .less file generated: ${outputFilePath}`);
} catch (error) {
console.error(`Failed to process template: ${filePath}`, error);
}
}
function findHbsFiles(dir: string): string[] {
const files = fs.readdirSync(dir);
return files
.map((file: string) => {
const fullPath = path.join(dir, file);
if (fs.statSync(fullPath).isDirectory()) {
return findHbsFiles(fullPath);
} else if (fullPath.endsWith('.less.hbs')) {
return fullPath;
}
return null;
})
.flat()
.filter((filePath: string | null): filePath is string => filePath !== null);
}
// Find all `.less.hbs` files in the directory
const hbsFiles = findHbsFiles('src/assets/stylesheets/');
// Apply templates to all `.less.hbs` files found
hbsFiles.forEach((filePath: string) => applyTemplate(filePath));