UNPKG

@sctg/fontminify

Version:

Minify font seamlessly, font subsetter, webfont (eot, woff, svg) converter.

152 lines (151 loc) 4.2 kB
#!/usr/bin/env node /** * @file cli * @author junmer eltorio */ /* eslint-env node */ 'use strict'; import fs from 'fs'; import meow from 'meow'; import path from 'path'; import stdin from 'get-stdin'; import Fontmin from './index.js'; import _ from 'lodash'; import { fileURLToPath } from "url"; const __filename = fileURLToPath(import.meta.url); const __dirname = path.dirname(__filename); const isDist = (__dirname.match(/([^\/]*)*$/) || ['', ''])[1] === 'dist'; let { version } = JSON.parse(fs.readFileSync(new URL(path.join(__dirname, (isDist ? '..' : '') + "/package.json"), import.meta.url)).toString()); const cli = meow([ 'Usage', ' $ fontmin <file> [<output>]', ' $ fontmin <directory> [<output>]', ' $ fontmin <file> > <output>', ' $ cat <file> | fontmin > <output>', '', 'Example', ' $ fontmin fonts/* build', ' $ fontmin fonts build', ' $ fontmin foo.ttf > foo-optimized.ttf', ' $ cat foo.ttf | fontmin > foo-optimized.ttf', '', 'Options', ' -t, --text require glyphs by text', ' -b, --basic-text require glyphs with base chars', ' -d, --deflate-woff deflate woff', ' --font-family font-family for @font-face CSS', ' --css-glyph generate class for each glyf. default = false', ' -T, --show-time show time fontmin cost' ].join('\n'), { importMeta: import.meta, flags: { version: { type: 'boolean', alias: 'v' }, deflateWoff: { type: 'boolean', alias: 'd' }, help: { type: 'boolean', alias: 'h' }, text: { type: 'string', alias: 't' }, showTime: { type: 'boolean', alias: 'T' }, cssGlyph: { type: 'boolean', }, basicText: { type: 'boolean', alias: 'b' }, fontFamily: { type: 'string' } } }); // version if (cli.flags.version) { console.log(version); process.exit(0); } function isFile(path) { if (/^[^\s]+\.\w*$/.test(path)) { return true; } try { return fs.statSync(path).isFile(); } catch (err) { return false; } } function run(src, dest) { cli.flags.showTime && console.time('fontmin use'); const pluginOpts = _.extend({}, cli.flags, { deflate: cli.flags.deflateWoff, glyph: cli.flags.cssGlyph }); const fontmin = new Fontmin() .src(src) .use(Fontmin.otf2ttf(pluginOpts)) .use(Fontmin.glyph(pluginOpts)) .use(Fontmin.ttf2eot(pluginOpts)) .use(Fontmin.ttf2svg(pluginOpts)) .use(Fontmin.ttf2woff(pluginOpts)) .use(Fontmin.ttf2woff2(pluginOpts)) .use(Fontmin.css(pluginOpts)); if (process.stdout.isTTY) { fontmin.dest(dest ? dest : 'build'); } fontmin.run((err, files) => { if (err) { console.error(err.stack || err); process.exit(1); } if (!process.stdout.isTTY) { files.forEach(file => { process.stdout.write(file.contents); }); } cli.flags.showTime && console.timeEnd('fontmin use'); }); } if (true) { let src = cli.input; let dest; if (!cli.input.length) { console.error([ 'Provide at least one file to optimize', '', 'Example', ' fontmin font/* build', ' fontmin foo.ttf > foo-optimized.ttf', ' cat foo.ttf | fontmin > foo-optimized.ttf', '', 'See `fontmin --help` for more information.' ].join('\n')); process.exit(1); } if (src.length > 1 && !isFile(src[src.length - 1])) { dest = src[src.length - 1]; src.pop(); } src = src.map(s => { if (!isFile(s) && fs.existsSync(s)) { return path.join(s, '**/*'); } return s; }); run(src, dest); } else { stdin.buffer(); }