79 lines
2.3 KiB
JavaScript
Raw Normal View History

2020-02-20 14:38:25 -08:00
const path = require('path');
const { uniqBy } = require('lodash');
2020-02-20 14:38:25 -08:00
const Promise = require('bluebird');
const fs = require('fs-extra');
const actions = require('./actions');
const createAssetLoader = require('../content/files');
2020-02-20 14:38:25 -08:00
const ROOT = path.resolve(__dirname, '../..');
2020-02-20 14:38:25 -08:00
const CACHE = 'if-cache';
const { changed, execute } = require('./pipeline');
2020-02-20 14:38:25 -08:00
function resolve (...args) {
args = args.filter(Boolean);
let fpath = args.shift();
if (!fpath) return ROOT;
if (fpath[0] === '/') fpath = fpath.slice(1);
return path.resolve(ROOT, fpath, ...args);
}
2020-02-20 14:38:25 -08:00
module.exports = exports = async function postImages ({ rev = false }) {
const [ manifest, { tasks } ] = await Promise.all([
fs.readJson(resolve('if-manifest.json')).catch(() => ({})),
createAssetLoader(),
fs.ensureDir(resolve(CACHE)),
]);
2020-02-20 14:38:25 -08:00
const filtered = await changed(manifest, tasks);
2020-02-20 14:38:25 -08:00
await execute(manifest, filtered, rev);
};
exports.prod = function imagesProd () { return exports({ rev: true }); };
exports.twitter = async function twitterImages ({ rev = false }) {
const [ manifest, media ] = await Promise.all([
fs.readJson(resolve('if-manifest.json')).catch(() => ({})),
fs.readJson(resolve('twitter-media.json')).catch(() => ([])),
fs.ensureDir(resolve(CACHE)),
]);
const tasks = uniqBy(media, 'output').map((m) => ({ ...m, action: actions.fetch }));
const filtered = await changed(manifest, tasks);
2020-02-20 14:38:25 -08:00
await execute(manifest, filtered, rev);
};
exports.twitter.prod = function imagesProd () { return exports.twitter({ rev: true }); };
exports.favicon = async function favicon ({ rev = false }) {
const input = resolve('favicon.png');
const [ manifest ] = await Promise.all([
fs.readJson(resolve('if-manifest.json')).catch(() => ({})),
fs.ensureDir(resolve(CACHE)),
]);
2020-02-20 14:38:25 -08:00
const tasks = [ 32, 57, 64, 76, 96, 114, 120, 128, 144, 152, 180, 192, 196, 228 ].map((width) => ({
input,
output: `favicon${width}.png`,
format: 'png',
width,
action: actions.image,
}));
tasks.push({
input,
output: 'favicon.ico',
format: 'ico',
action: actions.image,
});
const filtered = await changed(manifest, tasks);
2020-02-20 14:38:25 -08:00
await execute(manifest, filtered, rev);
};
exports.favicon.prod = function imagesProd () { return exports.favicon({ rev: true }); };