説明なし

utils.js 2.5KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788
  1. "use strict";
  2. Object.defineProperty(exports, "__esModule", {
  3. value: true
  4. });
  5. function _export(target, all) {
  6. for(var name in all)Object.defineProperty(target, name, {
  7. enumerable: true,
  8. get: all[name]
  9. });
  10. }
  11. _export(exports, {
  12. indentRecursive: function() {
  13. return indentRecursive;
  14. },
  15. formatNodes: function() {
  16. return formatNodes;
  17. },
  18. readFileWithRetries: function() {
  19. return readFileWithRetries;
  20. },
  21. drainStdin: function() {
  22. return drainStdin;
  23. },
  24. outputFile: function() {
  25. return outputFile;
  26. }
  27. });
  28. const _fs = /*#__PURE__*/ _interop_require_default(require("fs"));
  29. const _path = /*#__PURE__*/ _interop_require_default(require("path"));
  30. function _interop_require_default(obj) {
  31. return obj && obj.__esModule ? obj : {
  32. default: obj
  33. };
  34. }
  35. function indentRecursive(node, indent = 0) {
  36. node.each && node.each((child, i)=>{
  37. if (!child.raws.before || !child.raws.before.trim() || child.raws.before.includes("\n")) {
  38. child.raws.before = `\n${node.type !== "rule" && i > 0 ? "\n" : ""}${" ".repeat(indent)}`;
  39. }
  40. child.raws.after = `\n${" ".repeat(indent)}`;
  41. indentRecursive(child, indent + 1);
  42. });
  43. }
  44. function formatNodes(root) {
  45. indentRecursive(root);
  46. if (root.first) {
  47. root.first.raws.before = "";
  48. }
  49. }
  50. async function readFileWithRetries(path, tries = 5) {
  51. for(let n = 0; n <= tries; n++){
  52. try {
  53. return await _fs.default.promises.readFile(path, "utf8");
  54. } catch (err) {
  55. if (n !== tries) {
  56. if (err.code === "ENOENT" || err.code === "EBUSY") {
  57. await new Promise((resolve)=>setTimeout(resolve, 10));
  58. continue;
  59. }
  60. }
  61. throw err;
  62. }
  63. }
  64. }
  65. function drainStdin() {
  66. return new Promise((resolve, reject)=>{
  67. let result = "";
  68. process.stdin.on("data", (chunk)=>{
  69. result += chunk;
  70. });
  71. process.stdin.on("end", ()=>resolve(result));
  72. process.stdin.on("error", (err)=>reject(err));
  73. });
  74. }
  75. async function outputFile(file, newContents) {
  76. try {
  77. let currentContents = await _fs.default.promises.readFile(file, "utf8");
  78. if (currentContents === newContents) {
  79. return; // Skip writing the file
  80. }
  81. } catch {}
  82. // Write the file
  83. await _fs.default.promises.mkdir(_path.default.dirname(file), {
  84. recursive: true
  85. });
  86. await _fs.default.promises.writeFile(file, newContents, "utf8");
  87. }