|
"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: function() { |
|
return indentRecursive; |
|
}, |
|
formatNodes: function() { |
|
return formatNodes; |
|
}, |
|
readFileWithRetries: function() { |
|
return readFileWithRetries; |
|
}, |
|
drainStdin: function() { |
|
return drainStdin; |
|
}, |
|
outputFile: function() { |
|
return outputFile; |
|
} |
|
}); |
|
const _fs = _interop_require_default(require("fs")); |
|
const _path = _interop_require_default(require("path")); |
|
function _interop_require_default(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; |
|
} |
|
} catch {} |
|
|
|
await _fs.default.promises.mkdir(_path.default.dirname(file), { |
|
recursive: true |
|
}); |
|
await _fs.default.promises.writeFile(file, newContents, "utf8"); |
|
} |
|
|