post-build-global.mts 1.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152
  1. import { access, constants as fsconstants, readFile, writeFile } from "fs/promises";
  2. import { resolve } from "path";
  3. import packageJson from "../package.json" assert { type: "json" };
  4. const { exit } = process;
  5. const iifeScriptPath = resolve("dist/index.global.js");
  6. async function run() {
  7. if(!await exists(iifeScriptPath)) {
  8. console.error(`No global script found at path '${iifeScriptPath}'`);
  9. setImmediate(() => exit(1));
  10. return;
  11. }
  12. const libHeader = `\
  13. // ==UserScript==
  14. // @name UserUtils
  15. // @description ${packageJson.description}
  16. // @namespace ${packageJson.homepage}
  17. // @version ${packageJson.version}
  18. // @license ${packageJson.license}
  19. // @author ${packageJson.author.name}
  20. // @copyright ${packageJson.author.name} (${packageJson.author.url})
  21. // @supportURL ${packageJson.bugs.url}
  22. // @homepageURL ${packageJson.homepage}#readme
  23. // ==/UserScript==
  24. `;
  25. const initialScript = await readFile(iifeScriptPath, "utf8");
  26. let finalScript = `\
  27. ${libHeader}
  28. var UserUtils = ${initialScript}`;
  29. finalScript = finalScript.replace(/^\s*'use strict';\s*\r?\n{1,2}/gm, "");
  30. await writeFile(iifeScriptPath, finalScript, "utf8");
  31. console.log(`Global script at path '${iifeScriptPath}' has been updated`);
  32. setImmediate(() => exit(0));
  33. }
  34. async function exists(path: string) {
  35. try {
  36. await access(path, fsconstants.R_OK | fsconstants.W_OK);
  37. return true;
  38. }
  39. catch(err) {
  40. return false;
  41. }
  42. }
  43. run();