@akala/core
Version:
45 lines (39 loc) • 1.63 kB
text/typescript
import identity from './identity.js';
import negate from './negate.js';
import booleanize from './booleanize.js';
export * from './date.js';
export * from './common.js'
export { identity, negate, booleanize };
import { Module } from '../module.js';
import json from './json.js';
import date from './date.js';
import type { FormatterFactory, ReversibleFormatter, ReversibleFormatterFactory } from './common.js';
import { Debounce } from './debounce.js';
import Slice from './slice.js';
export function reverseFormatter<TResult, TOrigin, TSettings extends unknown[]>(formatter: ReversibleFormatterFactory<TResult, TOrigin, TSettings>): ReversibleFormatterFactory<TOrigin, TResult, TSettings>
{
return class Reversed implements ReversibleFormatter<TOrigin, TResult>
{
private readonly inner: ReversibleFormatter<TResult, TOrigin>
constructor(...settings: TSettings)
{
this.inner = new formatter(...settings);
}
format(value: TResult): TOrigin
{
return this.inner.unformat(value);
}
unformat(value: TOrigin): TResult
{
return this.inner.format(value);
}
}
}
export const formatters: Module & { resolve<T>(formatter: string extends `#${infer X}` ? `#${X} ` : never): FormatterFactory<T> } = new Module('$formatters');
formatters.register('not', negate);
formatters.register('bool', booleanize);
formatters.register('json', json);
formatters.register('date', date);
formatters.register('toDate', reverseFormatter(date));
formatters.register('debounce', Debounce);
formatters.register('slice', Slice);