@minofrk/msf-pretty-print
Version:
An opinionated pretty-printer for MSF format.
28 lines (22 loc) • 818 B
text/typescript
import { Option, some, none } from 'fp-ts/lib/Option';
import { Position, StringArray, Board } from './codecs';
import boardToString from './board-to-string';
export default function format(key: string, value: unknown): Option<string> {
if (typeof value === 'string' && /^\$\d+$/.test(value)) {
return some(value);
}
if (key === 'ele' && Board.is(value)) {
return some(boardToString(value));
}
if (
(key === 'i' || key === 'a') &&
Position.is(value) &&
Object.keys(value).length === 2
) {
return some(`{ "alsia": ${value.alsia}, "soom": ${value.soom} }`);
}
if ((key === 'txifol' || key === 'korol') && StringArray.is(value)) {
return some('[' + value.map((x): string => `"${x}"`).join(', ') + ']');
}
return none;
}