mirror of https://github.com/espruino/BangleApps
47 lines
1.5 KiB
JavaScript
47 lines
1.5 KiB
JavaScript
|
#!/usr/bin/env node
|
||
|
|
||
|
/**
|
||
|
* @file
|
||
|
* Run this to ensure that the lint exemptions are all valid.
|
||
|
* If any of the exempt app files have been changed, this script will remove the exemption for that file.
|
||
|
*
|
||
|
* Run it like this:
|
||
|
* node bin/sync-lint-exemptions.mjs
|
||
|
*/
|
||
|
|
||
|
import fs from "node:fs/promises";
|
||
|
|
||
|
const exemptionsFilePath = "../apps/lint_exemptions.js";
|
||
|
|
||
|
const exemptions = (await import(exemptionsFilePath)).default;
|
||
|
|
||
|
for(const filePath of Object.keys(exemptions)){
|
||
|
const fileContents = await fs.readFile("apps/" + filePath, "utf8");
|
||
|
const currentHash = await hashContents(fileContents);
|
||
|
if(exemptions[filePath].hash !== currentHash){
|
||
|
delete exemptions[filePath];
|
||
|
console.log(`! Removed lint exemptions for '${filePath}' because it has been edited`);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
|
||
|
const output = `module.exports = ${JSON.stringify(exemptions, undefined, 2)};\n`;
|
||
|
await fs.writeFile("bin/" + exemptionsFilePath, output);
|
||
|
|
||
|
console.log(`✔️ Synchronized all lint exemptions\n`);
|
||
|
|
||
|
|
||
|
|
||
|
/**
|
||
|
* https://developer.mozilla.org/en-US/docs/Web/API/SubtleCrypto/digest#converting_a_digest_to_a_hex_string
|
||
|
*/
|
||
|
async function hashContents(message) {
|
||
|
const msgUint8 = new TextEncoder().encode(message); // encode as (utf-8) Uint8Array
|
||
|
const hashBuffer = await crypto.subtle.digest("SHA-256", msgUint8); // hash the message
|
||
|
const hashArray = Array.from(new Uint8Array(hashBuffer)); // convert buffer to byte array
|
||
|
const hashHex = hashArray
|
||
|
.map((b) => b.toString(16).padStart(2, "0"))
|
||
|
.join(""); // convert bytes to hex string
|
||
|
return hashHex;
|
||
|
}
|