UNPKG

@minofrk/msf-pretty-print

Version:

An opinionated pretty-printer for MSF format.

33 lines (26 loc) 979 B
import stringify from 'json-stable-stringify'; import { indentString } from './constants'; import format from './format'; import comparator from './comparator'; import { isNone } from 'fp-ts/lib/Option'; export default function msfPrettyPrint(source: unknown): string { const replacements: string[] = []; const replacer: stringify.Replacer = (key, value: unknown): unknown => { const product = format(key, value); if (isNone(product)) return value; replacements.push(product.value); return '$' + (replacements.length - 1); }; const options: stringify.Options = { replacer, space: indentString, cmp: (x, y): number => comparator(x.key, y.key), }; return stringify(source, options).replace( /^(\s*)(".*?": )"\$(\d+)"(,?)$/gm, (...$): string => { const item = $[2] + replacements[Number($[3])] + $[4]; return item.replace(/^/gm, $[1]); }, ); }