UNPKG

copy-file-plugin

Version:

copy file plugin for webpack

1 lines 1.92 kB
const m=require("path"),o=require("fs"),q=require("minimatch"),h=require("compare-versions");class CopyFilePlugin{constructor(t=[],e={}){if(!Array.isArray(t))throw new Error("[copy-file-plugin] patterns must be an array\n");if(h(process.version,"8.5")<0)throw new Error("[copy-file-plugin] Nodejs version must be v8.5 or later \n[copy-file-plugin] Nodejs "+process.version);this.v=t,this.t=e||{},this.y=this.t.debug}apply(t){const e=this.t;var i=t?t.options.context:__dirname;let o=()=>{this.v.forEach(t=>{this.M(t)})};e.context?m.isAbsolute(e.context)?this.e=e.context:this.e=m.join(i,e.context):this.e=i,t?t.hooks.done.tap("CopyFilePlugin",o.bind(this)):o.call(this)}l(t,e){var i;return Array.isArray(this.t.ignore)&&(i=this.t.ignore.find(e=>q(t,e,{matchBase:!0}))),e&&void 0===i&&Array.isArray(e)&&(i=e.find(e=>q(t,e,{matchBase:!0}))),void 0!==i}M(t){const e=this.x(t.from),i=this.x(t.to);if(!this.l(e,t.ignore))try{let n=o.statSync(e);var r=n.isFile(),s=n.isDirectory();r?this.A(e,i,t):s&&this.L(e,i,t)}catch(t){this.y&&console.log(t)}}A(t,e,i){var r=m.parse(t),s=m.parse(e),n=s.base==r.base||s.ext==r.ext?e:m.resolve(e,r.base);if(!this.l(t,i.ignore)||t!=n){if(e.endsWith("/")&&this.u(e),i.before&&"function"==typeof i.before&&i.before(t,e),i.transform&&"function"==typeof i.transform)try{let r=o.readFileSync(t);r=i.transform(r,t,e),o.writeFileSync(n,r)}catch(t){this.y&&console.log(t)}else try{o.copyFileSync(t,n)}catch(t){this.y&&console.log(t)}i.after&&"function"==typeof i.after&&i.after(t,e)}}L(t,e,i){if(!this.l(t,i.ignore)){this.u(e);try{let r=o.readdirSync(t);r.length&&r.map(o=>{let r=m.join(t,o),s=m.basename(r),n=Object.assign({},i,{from:r,to:m.resolve(e,s)});this.M(n)})}catch(t){this.y&&console.log(t)}}}x(t){return m.isAbsolute(t)||(t=m.join(this.e,t)),t}u(t){if(o.existsSync(t))return!0;if(this.u(m.dirname(t)))try{return o.mkdirSync(t),!0}catch(t){this.y&&console.log(t)}}}module.exports=CopyFilePlugin;