@cloudcannon/suite
Version:
A suite of gulp tools to manage static sites on CloudCannon
85 lines (73 loc) • 2.82 kB
JavaScript
var fs = require('fs-extra'),
path = require("path"),
defaults = require("defaults"),
c = require("ansi-colors"),
_ = require("underscore"),
del = require("del"),
log = require("fancy-log"),
screenshotStream = require("./plugins/screenshotStream"),
browserSync = require('browser-sync').create(),
Screenshotter = require('@cloudcannon/screenshot-util');
require('events').EventEmitter.prototype._maxListeners = 100;
const tagmap = {};
module.exports = function (gulp, config) {
config = config || {};
config = defaults(config, {
dest: "reports/screenshots",
sites: {
dev: {"src": "dist/site", "portInc": 1},
i18n: {"src": "dist/translated_site", "portInc": 2},
docs: {"src": "dist/docs", "portInc": 3},
dist: {"src": "dist/prod", "portInc": 4}
},
requestFilters: ['cdn.walkme.com', 'www.googletagmanager.com', 'www.google-analytics.com', 'www.youtube.com', 'f.vimeocdn.com'],
count: 3
});
function renderScreenshots(src, screenshotter, namespace, done) {
log("Generating Screenshots from: '" + c.blue(src) + "'");
return gulp.src("./" + src + "/**/*.html")
.pipe(screenshotStream(screenshotter,tagmap));
}
function registerTasks(namespace, options) {
var options = config.sites[namespace];
gulp.task("screenshots:" + namespace + ":clean", function () {
return del(config.dest + "/" + namespace);
});
var screenshotter = new Screenshotter({
dest: config.dest + "/" + namespace,
path: options.src,
screenSize: {width: 1920, height: 1080},
fullPage: true,
count: config.count,
docker: process.env.DOCKER_SCREENSHOTS || false,
requestFilters: config.requestFilters,
delay: 1000,
portInc: options.portInc
})
gulp.task("screenshots:" + namespace + "-takescreens", gulp.series("screenshots:" + namespace + ":clean", function () {
return renderScreenshots(options.src, screenshotter, namespace);
}));
gulp.task("screenshots:" + namespace, gulp.series("screenshots:" + namespace + "-takescreens", async function (done) {
log("Writing app index & tag map...");
await fs.createReadStream(path.join(__dirname, 'index.html')).pipe(fs.createWriteStream(path.join(screenshotter.options.dest, "index.html")));
await fs.writeFile(path.join(screenshotter.options.dest, "map.json"), JSON.stringify(tagmap, null, 2));
}));
gulp.task("screenshots:" + namespace + "-tool", gulp.series("screenshots:" + namespace, async function (done) {
browserSync.init({
server: {
baseDir: config.dest + "/" + namespace
},
port: 8000
});
done();
}));
}
gulp.task("screenshots:clean", function () {
return del(config.dest + "/");
});
for (var namespace in config.sites) {
if (config.sites.hasOwnProperty(namespace)) {
registerTasks(namespace, config.sites[namespace]);
}
}
};