@zilero/gulp-font-switcher
Version:
A powerful Gulp plugin for font optimization and compression
7 lines (6 loc) • 3.17 kB
JavaScript
;var $=require('@zilero/gulp-plugin-factory'),a=require('fontmin'),zod=require('zod'),consola=require('consola'),p=require('chalk');function _interopDefault(e){return e&&e.__esModule?e:{default:e}}var $__default=/*#__PURE__*/_interopDefault($);var a__default=/*#__PURE__*/_interopDefault(a);var p__default=/*#__PURE__*/_interopDefault(p);var u=t=>{let r=t.path.join(".");switch(t.code){case "invalid_union":{let i=t.unionErrors.flatMap(({issues:n})=>n).filter(n=>n.code==="invalid_type"),e=i.map(({expected:n})=>n).filter((n,s,P)=>P.indexOf(n)===s).join(" or "),o=i[0]?.received??"unknown";return ["Validation failed:",` Path: ${p__default.default.gray(r)}`,` Expected: ${p__default.default.green(e)}`,` Received: ${p__default.default.yellow(o)}`].join(`
`)}case "invalid_type":return ["Validation failed:",` Path: ${p__default.default.gray(r)}`,` Expected: ${p__default.default.green(t.expected)}`,` Received: ${p__default.default.yellow(t.received)}`].join(`
`);case "unrecognized_keys":return ["Found extra keys:",...t.keys.map(i=>` \u2022 ${p__default.default.yellow(i)}`)].join(`
`);default:return [t.message,` Path: ${p__default.default.gray(r)}`].join(`
`)}};function l({name:t,schema:r,defaults:i}){return e=>{try{let o={...i,...e};return r.parse(o)}catch(o){throw o instanceof zod.z.ZodError?(consola.consola.box({title:p__default.default.red(`[${t} Error]`),message:o.errors.map(u).join(`
`),style:{borderColor:"red",borderStyle:"round",padding:1}}),new Error):o}}}var x=zod.z.enum(["ttf","woff","woff2","eot","svg"]),E=zod.z.object({glyph:zod.z.custom().optional()}),T=zod.z.object({format:x}),g=zod.z.object({fontOptions:E.optional(),pluginOptions:T});var h=(t,r)=>new Promise((i,e)=>{r.run((o,n)=>{if(o)return e(new Error(`Error processing ${t.relative}: ${o.message}`));if(!n?.length)return e(new Error(`No output files generated for ${t.relative}`));let s=n[0];if(!s)return e(new Error(`No contents in output file for ${t.relative}`));i(s);});});var d=async(t,r,i)=>{switch(r==="otf"&&i!=="ttf"&&t.use(a__default.default.otf2ttf()),i){case "ttf":r==="otf"&&t.use(a__default.default.otf2ttf()),r==="svg"&&t.use(a__default.default.svg2ttf());break;case "eot":t.use(a__default.default.ttf2eot());break;case "woff":t.use(a__default.default.ttf2woff());break;case "woff2":t.use(a__default.default.ttf2woff2());break;case "svg":t.use(a__default.default.ttf2svg());break}return t};var f="GulpFontSwitcher",m=["ttf","otf","svg"];var y=t=>m.includes(t);var w=t=>t.split(".").pop()?.toLowerCase()||"";var _=l({name:f,schema:g}),b=t=>{let{pluginOptions:r,fontOptions:i={}}=_(t);return $__default.default({pluginName:f,onFile:async e=>{try{if(!e.isBuffer())return e;let o=w(e.path);if(!y(o))throw new Error(`Unsupported input format: ${o}. Only ${m.join(", ")} are supported.`);if(o===r.format)return e;let n=new a__default.default().src(e.contents);i.glyph&&n.use(a__default.default.glyph(i.glyph)),n=await d(n,o,r.format);let s=await h(e,n);return s&&s._contents&&(e.contents=s._contents,e.extname=`.${r.format}`),e}catch(o){throw new Error(`Error processing ${e.relative}: ${o instanceof Error?o.message:String(o)}`)}}})},rt=b;module.exports=rt;