79 lines
2.2 KiB
JavaScript
79 lines
2.2 KiB
JavaScript
/**
|
|
* Copyright (c) 2018 The xterm.js authors. All rights reserved.
|
|
* @license MIT
|
|
*/
|
|
|
|
const fs = require('fs');
|
|
const path = require('path');
|
|
const util = require('util');
|
|
|
|
const axios = require('axios').default;
|
|
const mkdirp = require('mkdirp');
|
|
const yauzl = require('yauzl');
|
|
|
|
const urls = {
|
|
fira: 'https://github.com/tonsky/FiraCode/raw/d42e7276fa925e5f82748f3ec9ea429736611b48/distr/otf/FiraCode-Regular.otf',
|
|
iosevka: 'https://github.com/be5invis/Iosevka/releases/download/v1.14.3/01-iosevka-1.14.3.zip'
|
|
};
|
|
|
|
const writeFile = util.promisify(fs.writeFile);
|
|
const fontsFolder = path.join(__dirname, '../fonts');
|
|
|
|
async function download() {
|
|
await mkdirp(fontsFolder);
|
|
|
|
try {
|
|
await downloadFiraCode();
|
|
await downloadIosevka();
|
|
console.log('Loaded all fonts for testing')
|
|
} catch (e) {
|
|
console.warn('Fonts failed to download, ligature tests will not work', e);
|
|
}
|
|
}
|
|
|
|
async function downloadFiraCode() {
|
|
const file = path.join(fontsFolder, 'firaCode.otf');
|
|
if (await util.promisify(fs.exists)(file)) {
|
|
console.log('Fira Code already loaded');
|
|
} else {
|
|
console.log('Downloading Fira Code...');
|
|
await writeFile(
|
|
file,
|
|
(await axios.get(urls.fira, { responseType: 'arraybuffer' })).data
|
|
);
|
|
}
|
|
}
|
|
|
|
async function downloadIosevka() {
|
|
const file = path.join(fontsFolder, 'iosevka.ttf');
|
|
if (await util.promisify(fs.exists)(file)) {
|
|
console.log('Iosevka already loaded');
|
|
} else {
|
|
console.log('Downloading Iosevka...');
|
|
const iosevkaContents = (await axios.get(urls.iosevka, { responseType: 'arraybuffer' })).data;
|
|
const iosevkaZipfile = await util.promisify(yauzl.fromBuffer)(iosevkaContents);
|
|
await new Promise((resolve, reject) => {
|
|
iosevkaZipfile.on('entry', entry => {
|
|
if (entry.fileName === 'ttf/iosevka-regular.ttf') {
|
|
iosevkaZipfile.openReadStream(entry, (err, stream) => {
|
|
if (err) {
|
|
return reject(err);
|
|
}
|
|
|
|
const writeStream = fs.createWriteStream(file);
|
|
stream.pipe(writeStream);
|
|
writeStream.on('close', () => resolve());
|
|
});
|
|
}
|
|
});
|
|
});
|
|
}
|
|
}
|
|
|
|
download();
|
|
|
|
process.on('unhandledRejection', e => {
|
|
console.error(e);
|
|
process.exit(1);
|
|
});
|