/**
 * Minified by jsDelivr using Terser v5.39.0.
 * Original file: /npm/sfc@0.2.13/lib/index.js
 *
 * Do NOT use SRI with dynamically generated files! More information: https://www.jsdelivr.com/using-sri-with-dynamic-files
 */
const path=require("path"),{EventEmitter:EventEmitter}=require("events"),fs=require("fs-extra"),JoyCon=require("joycon"),isBinaryPath=require("is-binary-path"),debug=require("debug")("sfc:cli"),{replaceContants:replaceContants}=require("./utils");class SFC extends EventEmitter{constructor(e){if(super(),!1!==e.config){const i=new JoyCon({files:["string"==typeof e.config?e.config:"sfc.config.js"],stopDir:path.dirname(process.cwd())}),{data:t,path:r}=i.loadSync();r&&debug(`Using config file: ${r}`),e=Object.assign({},e,t)}this.options=this.normalizeOptions(e)}normalizeOptions(e){return Object.assign({},e,{input:path.resolve(e.input),outFile:e.outFile&&path.resolve(e.outFile),outDir:e.outDir&&path.resolve(e.outDir)})}async normalize(){const e=await fs.stat(this.options.input);if(e.isFile()){if(!this.options.outFile)throw new Error("You must specify the path to output file.");await this.normalizeFile(this.options.input,this.options.outFile)}else if(e.isDirectory()){if(!this.options.outDir)throw new Error("You must specify the path to output directory.");await this.normalizeDir(this.options.input,this.options.outDir)}}async normalizeFile(e,i){let t=await fs.readFile(e);if(isBinaryPath(e))return this.writeBinary(t,{filename:e,outFile:i});t=replaceContants(t.toString(),this.options.constants);const r={filename:e,outFile:i,modern:this.options.modern,babelrc:this.options.babelrc};if(!e.endsWith(".vue"))return this.writeText(t,r);const s=require("@vue/component-compiler-utils").parse({compiler:require("vue-template-compiler"),source:t,filename:e,needMap:!1}),o=await require("./compileScript")(s.script,r),a=await require("./compileTemplate")(s.template,r),n=await require("./compileStyles")(s.styles,r);await require("./writeSFC")({script:o,styles:n,template:a},i),this.emit("normalized",e,i)}async normalizeDir(e,i){const t=await require("fast-glob")(["**/*.vue"].concat(this.options.include||[]),{cwd:e});await Promise.all(t.map((t=>this.normalizeFile(path.join(e,t),path.join(i,t)))))}async writeText(e,{filename:i,babelrc:t,modern:r,outFile:s}){let o;i.endsWith(".js")?o=await require("./script-compilers/babel")(e,{filename:i,babelrc:t,modern:r}):i.endsWith(".ts")?(o=await require("./script-compilers/ts")(e,{filename:i,babelrc:t,modern:r}),s=s.replace(/\.ts$/,".js")):o=i.endsWith(".css")?await require("./style-compilers/postcss")(e,{filename:i}):e,await fs.outputFile(s,o,"utf8"),this.emit("normalized",i,s)}async writeBinary(e,{filename:i,outFile:t}){await fs.outputFile(t,e,"utf8"),this.emit("normalized",i,t)}}module.exports=e=>new SFC(e);
//# sourceMappingURL=/sm/ef80d7f61f5a37b5b7d157959165087d7277d2a66488794daa9a69643ecfa97c.map