remirror/remirror

View on GitHub
packages/remirror__cli/src/utils/format.ts

Summary

Maintainability
A
0 mins
Test Coverage
import fs from 'node:fs/promises';
import path from 'node:path';
import prettier from 'prettier';

import { logger } from '../logger';
import { fileExists } from './file-exists';
import { getRoot } from './get-root';

export async function formatJson(source: string) {
  const config = await resolvePrettierConfig();
  const c = { parser: 'json', ...config };
  return prettier.format(source, c);
}

let prettierConfig: prettier.Options | null = null;

async function resolvePrettierConfig() {
  if (!prettierConfig) {
    const filePath = await fs.realpath(path.resolve(getRoot(), '.prettierrc.js'));
    const exists = await fileExists(filePath);
    logger.assert(exists, `failed to find prettier config ${filePath}`);
    prettierConfig = await prettier.resolveConfig(filePath);
  }

  return prettierConfig;
}