import { FinalConfiguration, InputConfiguration, FontType } from './types'; module.exports = { acceptableTypes: ['ttf', 'woff', 'eot', 'otf', 'svg'], isAcceptableType(type: string): Boolean { return this.acceptableTypes.includes(type); }, defaults: { compound2simple: false, // transform ttf compound glyph to simple combinePath: false, // for svg path deflate: null, // deflate function inflate: false, // inflate function for woff hinting: false, // save font hinting subset: null // array of ascii values }, filterFormats({ formats, type }: FinalConfiguration): FontType[] { let fontFormats: FontType[] = []; if (formats && formats.length && Array.isArray(formats)) { fontFormats = formats.filter((type: FontType) => this.isAcceptableType(type) ); } if (!fontFormats.length) { fontFormats.push(type); } return fontFormats; }, normalizeConf( options: InputConfiguration, sourceFormat: FontType ): FinalConfiguration { const conf = Object.assign(this.defaults, options, { type: sourceFormat }); // Filter formats from input conf.formats = this.filterFormats(conf); // Convert string with letters to ascii codes array if (typeof conf.subset === 'string') { conf.subset = this.stringToAscii(conf.subset); } return conf; }, stringToAscii(letters: String): Number[] { return letters .split('') // make array .map((letter: String) => letter.charCodeAt(0)) //convert to ascii codes .filter((code: Number, index: Number, self: Number[]) => { return self.indexOf(code) === index; // remove duplicates }); } };