KaTeX/update-sri.js
Kevin Barabash ad571b945f Merge pull request #615 from gagern/release
Improve release script and bower support
(cherry picked from commit 8dd161d4b2)
2017-01-21 23:54:35 +01:00

50 lines
1.7 KiB
JavaScript

const fs = require("fs");
const path = require("path");
const sriToolbox = require("sri-toolbox");
const version = process.argv[2];
function read(file, encoding) {
return new Promise((resolve, reject) =>
fs.readFile(file, encoding, (err, body) =>
err ? reject(err) : resolve(body)));
}
function write(file, data) {
return new Promise((resolve, reject) =>
fs.writeFile(file, data, (err) =>
err ? reject(err) : resolve()));
}
Promise.all(process.argv.slice(3).map(file =>
read(file, "utf8")
.then(body => {
// 1 - url prefix: "http…/KaTeX/
// 2 - opening quote: "
// 3 - preserved suffix: /katex.min.js" integrity="…"
// 4 - file name: katex.min.js
// 5 - integrity opening quote: "
// 6 - old hash: sha384-…
// 7 - integrity hash algorithm: sha384
const re = /((["'])https?:\/\/cdnjs.cloudflare.com\/ajax\/libs\/KaTeX\/)[^\/"']+(\/([^"']+)\2(?:\s+integrity=(["'])(([^-]+)-[^"']+)\5)?)/g;
const hashes = {};
body = body.replace(re, (m, pre, oq1, post, file, oq2, old, algo) => {
if (old) {
hashes[old] = { file, algo };
}
return pre + version + post;
});
return Promise.all(Object.keys(hashes).map(hash =>
read(path.join("dist", hashes[hash].file), null)
.then(data => {
body = body.replace(hash, sriToolbox.generate({
algorithms: [hashes[hash].algo],
}, data));
})
)).then(() => write(file, body));
})
)).then(() => process.exit(0), err => {
console.error(err.stack);
process.exit(1);
});