util_streamDatumUtils.js

import StreamAggregateDatum from "../domain/streamAggregateDatum.js";
import StreamDatum from "../domain/streamDatum.js";
import { AggregateDatum, Datum } from "../domain/streamDatumMetadataMixin.js";

/**
 * Get a datum instance from a stream data array.
 *
 * @param {Array|String} data the datum stream data array (or JSON array value) to create a datum instance
 * @param {module:domain~DatumStreamMetadata|module:util~DatumStreamMetadataRegistry} meta a metadata instance or metadata registry to decode with
 * @returns {module:domain~AggregateDatum|module:domain~Datum} the datum, or `null` if one cannot be created
 * @alias module:util~datumForStreamData
 */
export function datumForStreamData(data, meta) {
	if (typeof data === "string") {
		data = JSON.parse(data);
	}
	if (!Array.isArray(data) || data.length < 2) {
		return null;
	}
	return Array.isArray(data[1])
		? AggregateDatum.fromJsonObject(data, meta)
		: Datum.fromJsonObject(data, meta);
}

/**
 * Get a stream datum instance from a stream data array.
 *
 * @param {Array|String} data the datum stream data array (or JSON array value) to create a datum instance
 * @param {module:domain~DatumStreamMetadata|module:util~DatumStreamMetadataRegistry} meta a metadata instance or metadata registry to decode with
 * @returns {module:domain~StreamAggregateDatum|module:domain~StreamDatum} the datum, or `null` if one cannot be created
 * @alias module:util~streamDatumForData
 */
export function streamDatumForData(data, meta) {
	if (typeof data === "string") {
		data = JSON.parse(data);
	}
	if (!Array.isArray(data) || data.length < 2) {
		return null;
	}
	return Array.isArray(data[1])
		? StreamAggregateDatum.fromJsonObject(data, meta)
		: StreamDatum.fromJsonObject(data, meta);
}

export default Object.freeze({
	datumForStreamData: datumForStreamData,
	streamDatumForData: streamDatumForData,
});