UNPKG

datamodel

Version:

Relational algebra compliant in-memory tabular data store

112 lines (102 loc) 4.01 kB
import { FieldType, DimensionSubtype, MeasureSubtype } from './enums'; import { Categorical, Temporal, Binned, Continuous, CategoricalParser, TemporalParser, BinnedParser, ContinuousParser, PartialField } from './fields'; /** * Creates a field instance according to the provided data and schema. * * @param {Array} data - The field data array. * @param {Object} schema - The field schema object. * @return {Field} Returns the newly created field instance. */ function createUnitField(data, schema) { data = data || []; let partialField; switch (schema.type) { case FieldType.MEASURE: switch (schema.subtype) { case MeasureSubtype.CONTINUOUS: partialField = new PartialField(schema.name, data, schema, new ContinuousParser()); return new Continuous(partialField, `0-${data.length - 1}`); default: partialField = new PartialField(schema.name, data, schema, new ContinuousParser()); return new Continuous(partialField, `0-${data.length - 1}`); } case FieldType.DIMENSION: switch (schema.subtype) { case DimensionSubtype.CATEGORICAL: partialField = new PartialField(schema.name, data, schema, new CategoricalParser()); return new Categorical(partialField, `0-${data.length - 1}`); case DimensionSubtype.TEMPORAL: partialField = new PartialField(schema.name, data, schema, new TemporalParser(schema)); return new Temporal(partialField, `0-${data.length - 1}`); case DimensionSubtype.BINNED: partialField = new PartialField(schema.name, data, schema, new BinnedParser()); return new Binned(partialField, `0-${data.length - 1}`); default: partialField = new PartialField(schema.name, data, schema, new CategoricalParser()); return new Categorical(partialField, `0-${data.length - 1}`); } default: partialField = new PartialField(schema.name, data, schema, new CategoricalParser()); return new Categorical(partialField, `0-${data.length - 1}`); } } /** * Creates a field instance from partialField and rowDiffset. * * @param {PartialField} partialField - The corresponding partial field. * @param {string} rowDiffset - The data subset config. * @return {Field} Returns the newly created field instance. */ export function createUnitFieldFromPartial(partialField, rowDiffset) { const { schema } = partialField; switch (schema.type) { case FieldType.MEASURE: switch (schema.subtype) { case MeasureSubtype.CONTINUOUS: return new Continuous(partialField, rowDiffset); default: return new Continuous(partialField, rowDiffset); } case FieldType.DIMENSION: switch (schema.subtype) { case DimensionSubtype.CATEGORICAL: return new Categorical(partialField, rowDiffset); case DimensionSubtype.TEMPORAL: return new Temporal(partialField, rowDiffset); case DimensionSubtype.BINNED: return new Binned(partialField, rowDiffset); default: return new Categorical(partialField, rowDiffset); } default: return new Categorical(partialField, rowDiffset); } } /** * Creates the field instances with input data and schema. * * @param {Array} dataColumn - The data array for fields. * @param {Array} schema - The schema array for fields. * @param {Array} headers - The array of header names. * @return {Array.<Field>} Returns an array of newly created field instances. */ export function createFields(dataColumn, schema, headers) { const headersObj = {}; if (!(headers && headers.length)) { headers = schema.map(item => item.name); } headers.forEach((header, i) => { headersObj[header] = i; }); return schema.map(item => createUnitField(dataColumn[headersObj[item.name]], item)); }