@report-toolkit/transformers
Version:
See docs at [https://ibm.github.io/report-toolkit](https://ibm.github.io/report-toolkit)
59 lines (55 loc) • 1.55 kB
JavaScript
/**
* JSON transformer; outputs JSON.
* @module @report-toolkit/transformers.json
*/
/**
* do not remove this comment (for typedoc)
*/
import {createDebugPipe, observable} from '@report-toolkit/common';
import stringify from 'fast-safe-stringify';
const {map, toArray, pipeIf, mergeAll} = observable;
const debug = createDebugPipe('transformers', 'json');
/**
* @type {TransformerMeta}
*/
export const meta = {
defaults: /**
* @type {Partial<JSONTransformOptions>}
*/ ({
pretty: false
}),
description: 'JSON',
id: 'json',
input: ['string', 'object', 'number', 'report'],
output: 'string'
};
/**
* Emits a single JSON blob.
* @param {Partial<JSONTransformOptions>} [opts]
* @type {TransformFunction<object,string>}
*/
export const transform = ({pretty = false} = {}) => observable =>
observable.pipe(
toArray(),
pipeIf(result => result.length === 1, mergeAll()),
debug(values => [`transforming to JSON with pretty = ${pretty}`, values]),
map(
pretty
? values => stringify(values, null, 2)
: values => stringify(values)
)
);
/**
* @typedef {object} JSONTransformOptions
* @property {TransformerField[]} fields
* @property {boolean} pretty
*/
/**
* @typedef {import('@report-toolkit/common').Report} Report
* @typedef {import('./transformer.js').TransformerMeta} TransformerMeta
* @typedef {import('./transformer.js').TransformerField} TransformerField
*/
/**
* @template T,U
* @typedef {import('./transformer.js').TransformFunction<T,U>} TransformFunction
*/