UNPKG

@toolpad/utils

Version:

Shared utilities used by Toolpad packages.

123 lines (122 loc) 4.58 kB
"use strict"; var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault"); Object.defineProperty(exports, "__esModule", { value: true }); exports.fileExists = fileExists; exports.fileReplace = fileReplace; exports.fileReplaceAll = fileReplaceAll; exports.folderExists = folderExists; exports.readJsonFile = readJsonFile; exports.readMaybeDir = readMaybeDir; exports.readMaybeFile = readMaybeFile; exports.updateYamlFile = updateYamlFile; exports.writeFileRecursive = writeFileRecursive; var fs = _interopRequireWildcard(require("fs/promises")); var path = _interopRequireWildcard(require("path")); var yaml = _interopRequireWildcard(require("yaml")); var _yamlDiffPatch = require("yaml-diff-patch"); var _prettier = _interopRequireDefault(require("prettier")); var _errors = require("./errors"); function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function (e) { return e ? t : r; })(e); } function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != typeof e && "function" != typeof e) return { default: e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && {}.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n.default = e, t && t.set(e, n), n; } /** * Formats a yaml source with `prettier`. */ async function formatYaml(code, filePath) { const readConfig = await _prettier.default.resolveConfig(filePath); return _prettier.default.format(code, { ...readConfig, parser: 'yaml' }); } /** * Like `fs.readFile`, but for JSON files specifically. Will throw on malformed JSON. */ async function readJsonFile(filePath, reviver) { const content = await fs.readFile(filePath, { encoding: 'utf-8' }); return JSON.parse(content, reviver); } async function readMaybeFile(filePath) { try { return await fs.readFile(filePath, { encoding: 'utf-8' }); } catch (rawError) { const error = (0, _errors.errorFrom)(rawError); if (error.code === 'ENOENT' || error.code === 'EISDIR') { return null; } throw error; } } async function readMaybeDir(dirPath) { try { return await fs.readdir(dirPath, { withFileTypes: true }); } catch (rawError) { const error = (0, _errors.errorFrom)(rawError); if (error.code === 'ENOENT' || error.code === 'ENOTDIR') { return []; } throw error; } } async function writeFileRecursive(filePath, content, options) { await fs.mkdir(path.dirname(filePath), { recursive: true }); await fs.writeFile(filePath, content, options); } async function updateYamlFile(filePath, content, options) { const oldContent = await readMaybeFile(filePath); let newContent = oldContent ? (0, _yamlDiffPatch.yamlOverwrite)(oldContent, content) : yaml.stringify(content); if (options?.schemaUrl) { const yamlDoc = yaml.parseDocument(newContent); yamlDoc.commentBefore = ` yaml-language-server: $schema=${options.schemaUrl}`; newContent = yamlDoc.toString(); } newContent = await formatYaml(newContent, filePath); if (newContent !== oldContent) { await writeFileRecursive(filePath, newContent); } } async function fileExists(filepath) { try { const stat = await fs.stat(filepath); return stat.isFile(); } catch (err) { if ((0, _errors.errorFrom)(err).code === 'ENOENT') { return false; } throw err; } } async function folderExists(folderpath) { try { const stat = await fs.stat(folderpath); return stat.isDirectory(); } catch (err) { if ((0, _errors.errorFrom)(err).code === 'ENOENT') { return false; } throw err; } } async function fileReplace(filePath, searchValue, replaceValue) { const queriesFileContent = await fs.readFile(filePath, { encoding: 'utf-8' }); const updatedFileContent = queriesFileContent.replace(searchValue, () => replaceValue); await fs.writeFile(filePath, updatedFileContent); } async function fileReplaceAll(filePath, searchValue, replaceValue) { const queriesFileContent = await fs.readFile(filePath, { encoding: 'utf-8' }); const updatedFileContent = queriesFileContent.replaceAll(searchValue, () => replaceValue); await fs.writeFile(filePath, updatedFileContent); }