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