{"version":3,"sources":["jsdelivr-header.js","/npm/gulp-replace-src@0.0.1/index.js"],"names":[],"mappings":"AAAA;AACA;AACA;AACA;AACA;AACA;AACA,ACNA,aAEA,MAAM,MAAU,QAAQ,aAClB,QAAU,QAAQ,YAClB,QAAU,QAAQ,WAClB,GAAK,QAAQ,MACb,YAAc,mBAEpB,IAAI,YAAc,MAAM,YAEpB,MAAQ,CACV,aAAa,WACX,IAAI,EAAI,IAAI,KACZ,OAAQ,EAAE,cAAc,MAAM,KAAK,GAAG,EAAE,eAAe,MAAM,KAAK,IAAI,QAAQ,UAAW,GAC3F,EACA,OAAO,SAAS,GACd,OAAO,SAAS,GACZ,OAAO,OAAO,UAAU,SAAS,KAAK,KAAO,WAAa,EAAO,GACrE,CACF,GAGE,SAAW,MAAM,OAAO,UACxB,SAAW,MAAM,OAAO,UACxB,QAAU,MAAM,OAAO,SAEvB,SAAW,CACb,SAAS,GACT,MAAK,EACL,SAAS,GACT,YAAY,GACZ,WAAW,GAEX,QAAO,EACP,SAAS,GACT,YAAY,GACZ,WAAW,IAGT,OAAS,SAAS,GAEpB,IAAG,SAAS,GAUV,MAAM,IAAI,YAAY,YAAa,uBAPnC,GAFA,EAAU,OAAO,OAAO,SAAU,IAE9B,SAAS,EAAQ,UACnB,MAAM,IAAI,YAAY,YAAa,2BAErC,IAAI,EAAQ,WAAc,EAAQ,cAAgB,EAAQ,WACxD,MAAM,IAAI,YAAY,YAAa,wBAMvC,OAAO,QAAQ,KAAI,SAAS,EAAM,EAAK,GAErC,GAAI,EAAK,SAEL,OADA,KAAK,KAAK,GACH,IAGX,GAAI,EAAK,WAEL,OADA,KAAK,KAAK,QAAS,IAAI,YAAY,YAAa,4BACzC,IAIX,IAAI,EAAU,EAAK,SAAS,WAExB,EAAI,QAAQ,KAAK,EAAS,CAAC,gBAAgB,IAG3C,EAAW,EAAE,QAAS,EAAU,EAAE,UAEtC,EAAS,MAAK,WACZ,EAAW,EAAE,MAAO,MAAO,EAAS,GACtC,IAEA,EAAQ,MAAK,WACX,EAAW,EAAE,MAAO,KAAM,EAAS,GACrC,IAEA,EAAK,SAAW,IAAI,OAAO,EAAE,QAE7B,KAAK,KAAK,GAEV,GACF,IAEA,SAAS,EAAW,EAAK,EAAM,EAAS,GACtC,IAAI,EAAe,OAAO,KAAK,EAAQ,UACvC,IAAI,EAAoB,QAAT,EAAiB,OAAS,MAEzC,IAAI,EAAO,EAAI,KAAK,GAEC,EAAa,QAAQ,IACxC,GAAG,EAAE,QAAQ,IAAI,IAAO,EAAG,OAAO,CAAC,IAGtB,SAAS,IACtB,GAAG,IAAI,OAAO,GAAG,KAAK,GAEpB,GAAG,EAAQ,QAA+B,KAArB,EAAI,KAAK,UAAe,CAE3C,IAAI,EAAU,EAAG,aAAa,EAAQ,SAAS,GAAG,SAAS,SAE3D,EAAI,YAAqB,QAAT,EAAiB,YAAY,cAAqB,aAAa,gBACjF,KAAK,CAGH,IAAI,EAAU,GAKd,IAJG,EAAQ,aAAe,EAAQ,YAChC,GAAW,EAAQ,aAAe,EAAQ,UAAU,EAAK,UAAU,EAAK,QAAQ,KAG9E,EAAQ,KAIV,EAAU,EAAQ,QAAQ,EAAG,EAAQ,SAAS,QAJ/B,CACf,IAAI,EAAS,MAAM,eACnB,GAAkC,IAAxB,EAAQ,QAAQ,KAAW,EAAQ,MAAM,EAAS,EAAQ,MAAM,CAC5E,CAGA,EAAI,KAAK,EAAU,EACrB,CACF,GACJ,CACF,EAGA,OAAO,QAAU","file":"/npm/gulp-replace-src@0.0.1/index.js","sourceRoot":"","sourcesContent":["/**\n * Minified by jsDelivr using Terser v5.39.0.\n * Original file: /npm/gulp-replace-src@0.0.1/index.js\n *\n * Do NOT use SRI with dynamically generated files! More information: https://www.jsdelivr.com/using-sri-with-dynamic-files\n */\n","'use strict';\n\nconst gutil   = require('gulp-util');\nconst through = require('through2');\nconst cheerio = require('cheerio');\nconst fs = require('fs');\nconst PLUGIN_NAME = \"gulp-replace-src\";\n\nvar PluginError = gutil.PluginError;\n\nvar tools = {\n  getTimeStamp:function(){/*生成时间戳*/\n    var d = new Date();\n    return (d.toISOString().split('T')[0]+d.toTimeString().split(' ')[0]).replace(/[\\:\\-]/g, '');\n  },\n  isType:function(type){/*类型判断*/\n    return function(o){\n        return Object.prototype.toString.call(o) === '[object ' + type + ']';\n    }\n  }\n}\n\nvar isString = tools.isType(\"String\"),\n    isObject = tools.isType(\"Object\"),\n    isArray = tools.isType(\"Array\");\n\nvar DEFAULTS = {\n  manifest:'',\n  hash:true,//如果为true,文件名将会替换成添加md5后缀的新文件名，如果不设置，将给地址添加query参数 时间戳?v=20170422112122\n  basePath:'',//替换之后文件的根路径，如果设置此项，css与js最终发布的根路径都将使用此配置，如果不设置，将使用原来的路径或下面独立的配置\n  basePathCSS:'', //用于生成的css发布路径\n  basePathJS:'', //用于生成的js发布路径\n\n  inline:false, //是否要嵌入到页面，些配置为true时，标签必须携带 inline 属性，方便针对个别资源inline\n  rootPath:'', //【必填】替换文件的根路径，如果设置此项，那么css与js的替换文件查找将使用此配置\n  rootPathCSS:'', //css替换文件的根路径，用于查找css的替换文件\n  rootPathJS:'', //js替换文件的根路径，用于查找js的替换文件\n};\n\nvar Plugin = function(options){\n\n  if(isObject(options)){\n    options = Object.assign(DEFAULTS, options);\n\n    if(!isObject(options.manifest)){\n      throw new PluginError(PLUGIN_NAME, 'manifest must be object');\n    }\n    if(!options.rootPath && (!options.rootPathCSS && !options.rootPathJS)){\n      throw new PluginError(PLUGIN_NAME, 'rootPath not be null');\n    }\n  }else{\n    throw new PluginError(PLUGIN_NAME, 'options not be null');\n  }\n\n  return through.obj(function(file, enc, done) {\n\n    if (file.isNull()) {\n        this.push(file);\n        return done();\n    }\n\n    if (file.isStream()) {\n        this.emit('error', new PluginError(PLUGIN_NAME, 'Streaming not supported'));\n        return done();\n    }\n\n    // 处理文件\n    var content = file.contents.toString();\n\n    var $ = cheerio.load(content, {decodeEntities: false});\n\n    // 获取css与js的标签\n    var cssLinks = $('link'), jsLinks = $('script');\n\n    cssLinks.each(function(){\n      processURL($(this), 'css', options, fs);\n    });\n\n    jsLinks.each(function(){\n      processURL($(this), 'js', options, fs);\n    });\n\n    file.contents = new Buffer($.html());\n\n    this.push(file);\n\n    done();\n  });\n\n  function processURL($el, type, options, fs){\n    var manifestKeys = Object.keys(options.manifest);\n    let attrType = type === 'css' ? 'href' : 'src';\n\n    var href = $el.attr(attrType);\n\n    var manifestKeyArr = manifestKeys.filter((v)=>{\n      if(v.indexOf('.'+type)>-1) return v;\n    });\n\n    manifestKeyArr.forEach((v)=>{\n      if(new RegExp(v).test(href)){\n        // 判断是否需要inline [用于发布上线]\n        if(options.inline && $el.attr('inline')===''){\n          // 读取源文件 转换成 字符串\n          var content = fs.readFileSync(options.rootPath+v).toString(\"utf-8\");\n          // 替换\n          $el.replaceWith(type === 'css' ? `<style>\\n${content}\\n</style>` :`<script>\\n${content}\\n</script>` );\n        }else{\n          // 是否使用新的发布路径， 是否替换文件名， 是否添加query参数\n          // 获取新的路径\n          var newPath = '';\n          if(options.basePathCSS || options.basePath){\n            newPath = (options.basePathCSS || options.basePath)+href.substring(href.indexOf(v));\n          }\n          // 不使用hash文件名，就添加时间戳参数\n          if(!options.hash){\n            var timesp = tools.getTimeStamp();\n            newPath = newPath.indexOf('?')===-1?(newPath+'?v='+timesp):(newPath+'&v='+timesp);\n          }else{\n            newPath = newPath.replace(v, options.manifest[v]);\n          }\n          $el.attr(attrType, newPath);\n        }\n      }})\n  }\n}\n\n\nmodule.exports = Plugin;\n"]}