webpack/examples/template-common.js

74 lines
2.5 KiB
JavaScript
Raw Normal View History

2012-10-09 06:12:10 +08:00
/*
MIT License http://www.opensource.org/licenses/mit-license.php
Author Tobias Koppers @sokra
*/
"use strict";
const fs = require("fs");
const path = require("path");
2012-04-05 20:59:01 +08:00
2013-03-18 21:53:50 +08:00
function lessStrict(regExpStr) {
regExpStr = regExpStr
.replace(/node_modules/g, "(node_modules|~)")
.replace(/(\\\/|\\\\)/g, "[\\/\\\\]");
2013-03-18 21:53:50 +08:00
return regExpStr;
}
const runtimeModulesRegexp = /(\/\*{72}\/\n(?:\/(?:\*{6}|\*{72})\/.*\n)*\/\*{72}\/\n)/g;
const timeRegexp = / in \d+ ms/g;
2019-11-19 21:24:22 +08:00
const dataUrlRegexp = /("data:[^"]+")/g;
2016-09-07 17:46:30 +08:00
exports.replaceBase = (template) => {
2012-04-05 20:59:01 +08:00
2019-01-25 20:14:47 +08:00
const cwd = process.cwd();
let webpack = path.join(__dirname, "..");
let webpackParent = path.join(__dirname, "..", "..");
2019-01-25 20:14:47 +08:00
const cwdRegExpStr = lessStrict(cwd.replace(/[-[\]{}()*+?.,\\^$|#\s]/g, "\\$&"));
const cwdRegExp = new RegExp(cwdRegExpStr, "g");
const cwdSlashRegExp = new RegExp(cwdRegExpStr + "[\\/\\\\]", "g");
2013-03-18 21:53:50 +08:00
webpack = lessStrict(webpack.replace(/[-[\]{}()*+?.,\\^$|#\s]/g, "\\$&"));
webpack = new RegExp(webpack, "g");
webpackParent = lessStrict(webpackParent.replace(/[-[\]{}()*+?.,\\^$|#\s]/g, "\\$&"));
webpackParent = new RegExp(webpackParent, "g");
2016-12-14 19:03:24 +08:00
return template
2016-09-07 17:46:30 +08:00
.replace(/\r\n/g, "\n")
.replace(/\r/g, "\n")
.replace(/\[webpack-cli\].+\n/g, "")
2019-01-25 20:14:47 +08:00
.replace(cwdSlashRegExp, "./")
.replace(cwdRegExp, ".")
2016-09-07 17:46:30 +08:00
.replace(webpack, "(webpack)")
.replace(webpackParent, "(webpack)/~")
2016-12-14 19:03:24 +08:00
.replace(timeRegexp, "")
2019-11-19 21:24:22 +08:00
.replace(dataUrlRegexp, function(match) {
if(match.length < 100) return match;
return match.slice(0, 50) + "..." + match.slice(-10);
})
.replace(/\.chunkhash\./g, ".[chunkhash].")
2018-12-19 21:05:17 +08:00
.replace(runtimeModulesRegexp, function(match, content) {
return "```\n\n<details><summary>"+
"<code>/* webpack runtime code */</code>"+
"</summary>\n\n``` js\n" + content + "```\n\n</details>\n\n``` js\n";
2016-09-07 17:46:30 +08:00
});
};
exports.needResults = (template, prefix) => {
const regExp = prefix ? new RegExp(`_\\{\\{${prefix}:`) : /_\{\{/;
return regExp.test(template);
};
exports.replaceResults = (template, baseDir, stdout, prefix) => {
const regexp = new RegExp("_\\{\\{" + (prefix ? prefix + ":" : "") + "([^:\\}]+)\\}\\}_", "g");
return template.replace(regexp, function(match) {
match = match.substr(3 + (prefix ? prefix.length + 1 : 0), match.length - 6 - (prefix ? prefix.length + 1 : 0));
if(match === "stdout")
return stdout;
try {
return fs.readFileSync(path.join(baseDir, match), "utf-8").replace(/[\r\n]*$/, "");
} catch(e) {
e.message += `\nwhile reading '${match}' in '${baseDir}`;
throw e;
}
});
};