40 lines
1 KiB
JavaScript
40 lines
1 KiB
JavaScript
|
import fs from 'node:fs/promises';
|
||
|
import {tsvFileToObjects} from './tsv.mjs';
|
||
|
const iconsFile = './icons.tsv';
|
||
|
|
||
|
async function getIcons() {
|
||
|
const startCodepoint = parseInt(process.env.START_CODEPOINT);
|
||
|
let icons = tsvFileToObjects(iconsFile, {
|
||
|
'offset': parseInt,
|
||
|
'scale': s => s.toLowerCase() === 'true',
|
||
|
})
|
||
|
.map(r => ({...r, codepoint: startCodepoint + r.offset}))
|
||
|
.map(r => ({...r, variant: r.id.endsWith('-inverse')}))
|
||
|
.map(({id, ...r}) => [id, r])
|
||
|
;
|
||
|
icons = Object.fromEntries(icons);
|
||
|
return icons;
|
||
|
}
|
||
|
|
||
|
async function readPackage() {
|
||
|
return JSON.parse(await fs.readFile('package.json'));
|
||
|
}
|
||
|
|
||
|
const {version} = await readPackage();
|
||
|
const [major, minor, patch] = version.match(/^(\d+)\.(\d+)\.(\d+)/).slice(1);
|
||
|
|
||
|
const data = {
|
||
|
name: process.env.FONT_NAME,
|
||
|
version: {
|
||
|
string: version,
|
||
|
major, minor, patch,
|
||
|
stable: parseInt(major) > 0 ? major : `${major}.${minor}.${patch}`,
|
||
|
},
|
||
|
icons: await getIcons(),
|
||
|
};
|
||
|
|
||
|
await fs.writeFile(
|
||
|
process.env.OUTPUT_DIR + '/' + process.env.FONT_NAME + '.json',
|
||
|
JSON.stringify(data, null, 2)
|
||
|
);
|