You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					
					
						
							213 lines
						
					
					
						
							11 KiB
						
					
					
				
			
		
		
	
	
							213 lines
						
					
					
						
							11 KiB
						
					
					
				"use strict"; | 
						|
/// <reference types="./types" /> | 
						|
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { | 
						|
    if (k2 === undefined) k2 = k; | 
						|
    var desc = Object.getOwnPropertyDescriptor(m, k); | 
						|
    if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) { | 
						|
      desc = { enumerable: true, get: function() { return m[k]; } }; | 
						|
    } | 
						|
    Object.defineProperty(o, k2, desc); | 
						|
}) : (function(o, m, k, k2) { | 
						|
    if (k2 === undefined) k2 = k; | 
						|
    o[k2] = m[k]; | 
						|
})); | 
						|
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) { | 
						|
    Object.defineProperty(o, "default", { enumerable: true, value: v }); | 
						|
}) : function(o, v) { | 
						|
    o["default"] = v; | 
						|
}); | 
						|
var __importStar = (this && this.__importStar) || function (mod) { | 
						|
    if (mod && mod.__esModule) return mod; | 
						|
    var result = {}; | 
						|
    if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k); | 
						|
    __setModuleDefault(result, mod); | 
						|
    return result; | 
						|
}; | 
						|
var __importDefault = (this && this.__importDefault) || function (mod) { | 
						|
    return (mod && mod.__esModule) ? mod : { "default": mod }; | 
						|
}; | 
						|
Object.defineProperty(exports, "__esModule", { value: true }); | 
						|
const path_1 = __importDefault(require("path")); | 
						|
const fs_extra_1 = __importDefault(require("fs-extra")); | 
						|
const image2uri_1 = __importDefault(require("image2uri")); | 
						|
const colors_cli_1 = __importDefault(require("colors-cli")); | 
						|
const YAML = __importStar(require("yaml")); | 
						|
const log_1 = require("./log"); | 
						|
const generate_1 = require("./generate"); | 
						|
const utils_1 = require("./utils"); | 
						|
exports.default = async (options = {}) => { | 
						|
    const confPath = path_1.default.join(process.cwd(), '.svgtofontrc'); | 
						|
    if (fs_extra_1.default.pathExistsSync(confPath)) { | 
						|
        const conf = await fs_extra_1.default.readJson(confPath); | 
						|
        options = Object.assign(Object.assign({}, options), conf); | 
						|
    } | 
						|
    else { | 
						|
        // load yaml config | 
						|
        const confPath = path_1.default.join(process.cwd(), '.svgtofontrc.yaml'); | 
						|
        if (fs_extra_1.default.pathExistsSync(confPath)) { | 
						|
            const conf = await YAML.parse(fs_extra_1.default.readFileSync(confPath, 'utf-8')); | 
						|
            options = Object.assign(Object.assign({}, options), conf); | 
						|
        } | 
						|
    } | 
						|
    const pkgPath = path_1.default.join(process.cwd(), 'package.json'); | 
						|
    if (fs_extra_1.default.pathExistsSync(pkgPath)) { | 
						|
        const pkg = require(pkgPath); | 
						|
        if (pkg.svgtofont) { | 
						|
            options = Object.assign(Object.assign({}, options), pkg.svgtofont); | 
						|
        } | 
						|
        if (options.website && pkg.version) { | 
						|
            options.website.version = pkg.version; | 
						|
        } | 
						|
    } | 
						|
    if (options.log === undefined) | 
						|
        options.log = true; | 
						|
    log_1.log.disabled = !options.log; | 
						|
    if (options.logger && typeof options.logger === 'function') | 
						|
        log_1.log.logger = options.logger; | 
						|
    options.dist = options.dist || path_1.default.resolve(process.cwd(), 'fonts'); | 
						|
    options.src = options.src || path_1.default.resolve(process.cwd(), 'svg'); | 
						|
    options.startUnicode = options.startUnicode || 0xea01; | 
						|
    options.svg2ttf = options.svg2ttf || {}; | 
						|
    options.emptyDist = options.emptyDist; | 
						|
    options.fontName = options.fontName || 'iconfont'; | 
						|
    options.svgicons2svgfont = options.svgicons2svgfont || {}; | 
						|
    options.svgicons2svgfont.fontName = options.fontName; | 
						|
    options.symbolNameDelimiter = options.symbolNameDelimiter || '-'; | 
						|
    options.classNamePrefix = options.classNamePrefix || options.fontName; | 
						|
    const fontSize = options.css && typeof options.css !== 'boolean' && options.css.fontSize ? options.css.fontSize : '16px'; | 
						|
    // If you generate a font you need to generate a style. | 
						|
    if (options.website && !options.css) | 
						|
        options.css = true; | 
						|
    const infoDataPath = path_1.default.resolve(options.dist, 'info.json'); | 
						|
    try { | 
						|
        if (options.emptyDist) { | 
						|
            await fs_extra_1.default.emptyDir(options.dist); | 
						|
        } | 
						|
        // Ensures that the directory exists. | 
						|
        await fs_extra_1.default.ensureDir(options.dist); | 
						|
        const unicodeObject = await (0, utils_1.createSVG)(options); | 
						|
        let cssString = []; | 
						|
        let cssToVars = []; | 
						|
        let cssIconHtml = []; | 
						|
        let unicodeHtml = []; | 
						|
        let symbolHtml = []; | 
						|
        const prefix = options.classNamePrefix || options.fontName; | 
						|
        const infoData = {}; | 
						|
        Object.keys(unicodeObject).forEach(name => { | 
						|
            if (!infoData[name]) | 
						|
                infoData[name] = {}; | 
						|
            const _code = unicodeObject[name]; | 
						|
            let symbolName = options.classNamePrefix + options.symbolNameDelimiter + name; | 
						|
            let iconPart = symbolName + '">'; | 
						|
            let encodedCodes = _code.charCodeAt(0); | 
						|
            if (options.useNameAsUnicode) { | 
						|
                symbolName = name; | 
						|
                iconPart = prefix + '">' + name; | 
						|
                encodedCodes = _code.split('').map(x => x.charCodeAt(0)).join(';&#'); | 
						|
            } | 
						|
            else { | 
						|
                cssString.push(`.${symbolName}:before { content: "\\${encodedCodes.toString(16)}"; }\n`); | 
						|
                cssToVars.push(`$${symbolName}: "\\${encodedCodes.toString(16)}";\n`); | 
						|
            } | 
						|
            infoData[name].encodedCode = `\\${encodedCodes.toString(16)}`; | 
						|
            infoData[name].prefix = prefix; | 
						|
            infoData[name].className = symbolName; | 
						|
            infoData[name].unicode = `&#${encodedCodes};`; | 
						|
            cssIconHtml.push(`<li class="class-icon"><i class="${iconPart}</i><p class="name">${name}</p></li>`); | 
						|
            unicodeHtml.push(`<li class="unicode-icon"><span class="iconfont">${_code}</span><h4>${name}</h4><span class="unicode">&#${encodedCodes};</span></li>`); | 
						|
            symbolHtml.push(` | 
						|
        <li class="symbol"> | 
						|
          <svg class="icon" aria-hidden="true"> | 
						|
            <use xlink:href="${options.fontName}.symbol.svg#${symbolName}"></use> | 
						|
          </svg> | 
						|
          <h4>${symbolName}</h4> | 
						|
        </li> | 
						|
      `); | 
						|
        }); | 
						|
        if (options.generateInfoData) { | 
						|
            await fs_extra_1.default.writeJSON(infoDataPath, infoData, { spaces: 2 }); | 
						|
            log_1.log.log(`${colors_cli_1.default.green('SUCCESS')} Created ${infoDataPath} `); | 
						|
        } | 
						|
        const ttf = await (0, utils_1.createTTF)(options); | 
						|
        await (0, utils_1.createEOT)(options, ttf); | 
						|
        await (0, utils_1.createWOFF)(options, ttf); | 
						|
        await (0, utils_1.createWOFF2)(options, ttf); | 
						|
        await (0, utils_1.createSvgSymbol)(options); | 
						|
        if (options.css) { | 
						|
            const styleTemplatePath = options.styleTemplates || (!options.useNameAsUnicode ? path_1.default.resolve(__dirname, 'styles') : path_1.default.resolve(__dirname, 'ligature-styles')); | 
						|
            await (0, utils_1.copyTemplate)(styleTemplatePath, options.dist, { | 
						|
                fontname: options.fontName, | 
						|
                cssString: cssString.join(''), | 
						|
                cssToVars: cssToVars.join(''), | 
						|
                fontSize: fontSize, | 
						|
                timestamp: new Date().getTime(), | 
						|
                prefix, | 
						|
                _opts: typeof options.css === 'boolean' ? {} : Object.assign({}, options.css) | 
						|
            }); | 
						|
        } | 
						|
        if (options.typescript) { | 
						|
            await (0, utils_1.createTypescript)(Object.assign(Object.assign({}, options), { typescript: options.typescript })); | 
						|
        } | 
						|
        if (options.website) { | 
						|
            const pageName = ['font-class', 'unicode', 'symbol']; | 
						|
            let fontClassPath = path_1.default.join(options.dist, 'index.html'); | 
						|
            let unicodePath = path_1.default.join(options.dist, 'unicode.html'); | 
						|
            let symbolPath = path_1.default.join(options.dist, 'symbol.html'); | 
						|
            // setting default home page. | 
						|
            const indexName = pageName.includes(options.website.index) ? pageName.indexOf(options.website.index) : 0; | 
						|
            pageName.forEach((name, index) => { | 
						|
                const _path = path_1.default.join(options.dist, indexName === index ? 'index.html' : `${name}.html`); | 
						|
                if (name === 'font-class') | 
						|
                    fontClassPath = _path; | 
						|
                if (name === 'unicode') | 
						|
                    unicodePath = _path; | 
						|
                if (name === 'symbol') | 
						|
                    symbolPath = _path; | 
						|
            }); | 
						|
            // default template | 
						|
            options.website.template = options.website.template || path_1.default.join(__dirname, 'website', 'index.ejs'); | 
						|
            // template data | 
						|
            const tempData = Object.assign(Object.assign({ meta: null, links: null, corners: null, description: null, footerInfo: null }, options.website), { fontname: options.fontName, classNamePrefix: options.classNamePrefix, _type: 'font-class', _link: `${(options.css && typeof options.css !== 'boolean' && options.css.fileName) || options.fontName}.css`, _IconHtml: cssIconHtml.join(''), _title: options.website.title || options.fontName }); | 
						|
            // website logo | 
						|
            if (options.website.logo && fs_extra_1.default.pathExistsSync(options.website.logo) && path_1.default.extname(options.website.logo) === '.svg') { | 
						|
                tempData.logo = fs_extra_1.default.readFileSync(options.website.logo).toString(); | 
						|
            } | 
						|
            // website favicon | 
						|
            if (options.website.favicon && fs_extra_1.default.pathExistsSync(options.website.favicon)) { | 
						|
                tempData.favicon = (0, image2uri_1.default)(options.website.favicon); | 
						|
            } | 
						|
            else { | 
						|
                tempData.favicon = ''; | 
						|
            } | 
						|
            const classHtmlStr = await (0, utils_1.createHTML)(options.website.template, tempData); | 
						|
            fs_extra_1.default.outputFileSync(fontClassPath, classHtmlStr); | 
						|
            log_1.log.log(`${colors_cli_1.default.green('SUCCESS')} Created ${fontClassPath} `); | 
						|
            tempData._IconHtml = unicodeHtml.join(''); | 
						|
            tempData._type = 'unicode'; | 
						|
            const unicodeHtmlStr = await (0, utils_1.createHTML)(options.website.template, tempData); | 
						|
            fs_extra_1.default.outputFileSync(unicodePath, unicodeHtmlStr); | 
						|
            log_1.log.log(`${colors_cli_1.default.green('SUCCESS')} Created ${unicodePath} `); | 
						|
            tempData._IconHtml = symbolHtml.join(''); | 
						|
            tempData._type = 'symbol'; | 
						|
            const symbolHtmlStr = await (0, utils_1.createHTML)(options.website.template, tempData); | 
						|
            fs_extra_1.default.outputFileSync(symbolPath, symbolHtmlStr); | 
						|
            log_1.log.log(`${colors_cli_1.default.green('SUCCESS')} Created ${unicodePath} `); | 
						|
        } | 
						|
        if (options.outSVGPath) { | 
						|
            const outPath = await (0, generate_1.generateIconsSource)(options); | 
						|
            log_1.log.log(`${colors_cli_1.default.green('SUCCESS')} Created ${outPath} `); | 
						|
        } | 
						|
        if (options.outSVGReact) { | 
						|
            const outPath = await (0, generate_1.generateReactIcons)(options); | 
						|
            log_1.log.log(`${colors_cli_1.default.green('SUCCESS')} Created React Components. `); | 
						|
        } | 
						|
    } | 
						|
    catch (error) { | 
						|
        log_1.log.log('SvgToFont:CLI:ERR:', error); | 
						|
    } | 
						|
}; | 
						|
/** | 
						|
 * https://github.com/Microsoft/TypeScript/issues/5565#issuecomment-155226290 | 
						|
 */ | 
						|
module.exports = exports["default"]; | 
						|
//# sourceMappingURL=index.js.map
 |