{"version":3,"file":"index.mjs","sources":["../src/index.ts"],"sourcesContent":["import * as path from 'path'\nimport * as fs from 'fs'\n\nimport { wrapper, TypeOnEveryFile, TypeToolProp, TypeToolOptions, TypeOnBody } from '@asset-toolkit/core'\n\nexport interface TypeProps extends TypeToolOptions {\n  chunked?: boolean\n  basePath?: string\n}\n\n/**\n * A tool to generate font face.\n *\n * @param props - { pathIn, pathOut }\n * @param options - { chunked, basePath }\n * @returns { Promise(returns) }\n */\nconst fontFaceGenerator: (_props: TypeToolProp, _options?: TypeProps) => Promise<unknown> = wrapper(\n  ({ file, wrapperProps, next }: TypeOnEveryFile) => {\n    const fontName = file.replace(path.extname(file), '')\n    if (!wrapperProps.files[fontName]) wrapperProps.files[fontName] = []\n    wrapperProps.files[fontName].push(file)\n    next()\n  },\n  ({ wrapperProps, options, pathOut }: TypeOnBody) => {\n    const { basePath, chunked } = options || {}\n\n    const cssOutput = (props: { fontFamily: string; src: string; fontDisplay: string }) =>\n      `@font-face {\n      font-family: \"${props.fontFamily}\";\n      src: ${props.src};\n      font-display: \"${props.fontDisplay}\";\n      }`.trim()\n\n    const outputAll = Object.keys(wrapperProps.files).map(fontName => {\n      const files = wrapperProps.files[fontName]\n\n      const fileCssList = files\n        .map((file: string) => {\n          const type = path.extname(file).replace('.', '')\n          return `url(\"${path.join(basePath || '', file)}\") format(\"${type}\")`\n        })\n        .join(',')\n\n      const output = {\n        fontFamily: fontName,\n        src: fileCssList,\n        fontDisplay: 'swap',\n      }\n\n      if (chunked) {\n        fs.writeFileSync(path.join(pathOut, `${fontName}.css`), cssOutput(output))\n        fs.writeFileSync(path.join(pathOut, `${fontName}.json`), JSON.stringify(output, null, 4))\n      }\n\n      return output\n    })\n\n    if (!chunked) {\n      fs.writeFileSync(path.join(pathOut, `template.css`), outputAll.map((output: any) => cssOutput(output)).join('\\n'))\n      fs.writeFileSync(path.join(pathOut, `template.json`), JSON.stringify(outputAll, null, 4))\n    }\n  },\n  { exts: ['woff', 'woff2', 'eot', 'ttf'], name: 'Font Face Generator', files: {} },\n)\n\nexport default fontFaceGenerator\n"],"names":["fontFaceGenerator","wrapper","file","wrapperProps","next","fontName","replace","path","extname","files","push","pathOut","options","basePath","chunked","cssOutput","props","fontFamily","src","fontDisplay","trim","outputAll","Object","keys","map","output","type","join","fs","writeFileSync","JSON","stringify","exts","name"],"mappings":"0FAiBMA,IAAAA,EAAsFC,EAC1F,gBAAGC,IAAAA,KAAMC,IAAAA,aAAcC,IAAAA,KACfC,EAAWH,EAAKI,QAAQC,EAAKC,QAAQN,GAAO,IAC7CC,EAAaM,MAAMJ,KAAWF,EAAaM,MAAMJ,GAAY,IAClEF,EAAaM,MAAMJ,GAAUK,KAAKR,GAClCE,KAEF,gBAAGD,IAAAA,aAAuBQ,IAAAA,YAATC,SAC0B,GAAjCC,IAAAA,SAAUC,IAAAA,QAEZC,EAAY,SAACC,+CAEDA,EAAMC,6BACfD,EAAME,+BACIF,EAAMG,2BACpBC,QAECC,EAAYC,OAAOC,KAAKpB,EAAaM,OAAOe,IAAI,SAAAnB,GACpD,IASMoB,EAAS,CACbR,WAAYZ,EACZa,IAXYf,EAAaM,MAAMJ,GAG9BmB,IAAI,SAACtB,GACJ,IAAMwB,EAAOnB,EAAKC,QAAQN,GAAMI,QAAQ,IAAK,IAC7C,cAAeC,EAAKoB,KAAKd,GAAY,GAAIX,iBAAmBwB,SAE7DC,KAAK,KAKNR,YAAa,QAQf,OALIL,IACFc,EAAGC,cAActB,EAAKoB,KAAKhB,EAAYN,UAAiBU,EAAUU,IAClEG,EAAGC,cAActB,EAAKoB,KAAKhB,EAAYN,WAAkByB,KAAKC,UAAUN,EAAQ,KAAM,KAGjFA,IAGJX,IACHc,EAAGC,cAActB,EAAKoB,KAAKhB,kBAA0BU,EAAUG,IAAI,SAACC,UAAgBV,EAAUU,KAASE,KAAK,OAC5GC,EAAGC,cAActB,EAAKoB,KAAKhB,mBAA2BmB,KAAKC,UAAUV,EAAW,KAAM,MAG1F,CAAEW,KAAM,CAAC,OAAQ,QAAS,MAAO,OAAQC,KAAM,sBAAuBxB,MAAO"}