32 lines
1 KiB
JavaScript
32 lines
1 KiB
JavaScript
import fs from 'node:fs';
|
|
import nunjucks from 'nunjucks';
|
|
import font from './data.mjs';
|
|
import merge from 'lodash.merge';
|
|
|
|
const [templateFile, outFile] = process.argv.slice(2);
|
|
|
|
const outInfo = JSON.parse(
|
|
fs.readFileSync(`${process.env.OUTPUT_DIR}/${process.env.FONT_NAME}.out.json`));
|
|
|
|
const context = {
|
|
font: merge(font, outInfo),
|
|
classPrefix: 'fl-',
|
|
formats: [
|
|
{name: 'woff', ext: 'woff'},
|
|
{name: 'woff2', ext: 'woff2'},
|
|
{name: 'truetype', ext: 'ttf'},
|
|
],
|
|
icons: font.icons,
|
|
uniqueIcons: Object.fromEntries(Object.entries(font.icons).filter(([,icon]) => !icon.variant)),
|
|
};
|
|
|
|
const env = new nunjucks.Environment(new nunjucks.FileSystemLoader(), {
|
|
throwOnUndefined: true,
|
|
});
|
|
env.addFilter('keys', obj => Object.keys(obj));
|
|
env.addFilter('values', obj => Object.values(obj));
|
|
env.addFilter('column', (objs, col) => objs.map(o => o[col]));
|
|
env.addFilter('map', (array, fn) => array.map(fn));
|
|
env.addFilter('maxLength', array => Math.max(...array.map(x => x.length)));
|
|
|
|
fs.writeFileSync(outFile, env.render(templateFile, context));
|