www

Unnamed repository; edit this file 'description' to name the repository.
Log | Files | Refs | README

update-sri.js (1710B)


      1 const fs = require("fs");
      2 const path = require("path");
      3 const sriToolbox = require("sri-toolbox");
      4 
      5 const version = process.argv[2];
      6 
      7 function read(file, encoding) {
      8     return new Promise((resolve, reject) =>
      9         fs.readFile(file, encoding, (err, body) =>
     10             err ? reject(err) : resolve(body)));
     11 }
     12 
     13 function write(file, data) {
     14     return new Promise((resolve, reject) =>
     15         fs.writeFile(file, data, (err) =>
     16             err ? reject(err) : resolve()));
     17 }
     18 
     19 Promise.all(process.argv.slice(3).map(file =>
     20     read(file, "utf8")
     21     .then(body => {
     22         // 1 - url prefix: "http…/KaTeX/
     23         // 2 - opening quote: "
     24         // 3 - preserved suffix: /katex.min.js" integrity="…"
     25         // 4 - file name: katex.min.js
     26         // 5 - integrity opening quote: "
     27         // 6 - old hash: sha384-…
     28         // 7 - integrity hash algorithm: sha384
     29         const re = /((["'])https?:\/\/cdnjs.cloudflare.com\/ajax\/libs\/KaTeX\/)[^\/"']+(\/([^"']+)\2(?:\s+integrity=(["'])(([^-]+)-[^"']+)\5)?)/g;
     30         const hashes = {};
     31         body = body.replace(re, (m, pre, oq1, post, file, oq2, old, algo) => {
     32             if (old) {
     33                 hashes[old] = { file, algo };
     34             }
     35             return pre + version + post;
     36         });
     37         return Promise.all(Object.keys(hashes).map(hash =>
     38             read(path.join("dist", hashes[hash].file), null)
     39             .then(data => {
     40                 body = body.replace(hash, sriToolbox.generate({
     41                     algorithms: [hashes[hash].algo],
     42                 }, data));
     43             })
     44         )).then(() => write(file, body));
     45     })
     46 )).then(() => process.exit(0), err => {
     47     console.error(err.stack);
     48     process.exit(1);
     49 });