A library to transform / normalize / map a data source (JS Data Structure) using a template.
- node:
npm install data-interpreter
constructor([options])
-options
: Is an optional object with any of the follow attributessplitChar
(String "."): Accesor char, used to indicated inner object attributes in the templatedefaultValue
(Any undefined): Value to be used when no other valued is found from the template in the sourceliteralChar
(String "="): Indicates that the following text in the template must be used as literal valuereverseMapping
(Boolean false): When true, use the absense of literalChar as indication of literal value
cast(source, dictionary[, options])
Main function, used to transfor / cast / translate a template / dictionary using a input (Js data structure)source
(Object|Array): Source to use as input in the templatedictionary
(String|Object|Array): The structure of the expected output, using the reference to the source.options
(Object): Optional override of the instance options
getValueFromObject(source, path)
source
: (Object|Array): Source to use as input to get the datapath
: (String|Array): the path to seek the value, using the splitChar as accesor separator. For example"path.to.inner.value"
or["path","to","inner","value"]
getType(variableToCheck)
: Helper function that return a string with the tipe of the variable.variableToCheck
(Any)
- Using a source like:
const source = { stringLvl1 : "stringValueLvl1", arrayLvl1 : ["arrayValueLvl1"], objectLvl1 : { numberLvl2 : 2, booleanLvl2 : true, objectLvl2 : { stringLvl3 : "stringValueLvl3", }, }, iterableArray : [ {iterableItemAttribute : "iterableItemValue1"}, {iterableItemAttribute : "iterableItemValue2"}, ], }
- And a basic instance of
data-interpreter
const dataInterpreter = require("data-interpreter"); const interpreter = new dataInterpreter();
- You could:
- Use a plain dictionary
interpreter.cast(source, "stringLvl1") -> "stringValueLvl1"
- Use an object type dictionary
interpreter.cast(source, { attrName : "stringLvl1" }) -> { attrName : "stringValueLvl1" }
- Use nested references to the source
interpreter.cast(source, { attrName : "objectLvl1.numberLvl2" }) -> { attrName : 2 }
- Use dictionary as complex as need it
interpreter.cast(source, { attrName : { innerAttrName : "stringLvl1" } }) -> { attrName : { innerAttrName : "stringValueLvl1"} }
- Use dictionary with literal values
interpreter.cast(source, { attrName : "=LiteralText"}) -> { attrName : "LiteralText"}
- Use dictionary with objects or arrays as part of its data structures
interpreter.cast(source, { attrName : [ "stringLvl1", "objectLvl1.numberLvl2" ] }) -> { attrName : ["stringValueLvl1", 2] }
- Iterate collections (By value)
interpreter.cast(source, { attributeName : [ "$forEach($iterableArray, $iterationItem, $iterationIndex)", "$iterationItem.iterableItemAttribute" ]}) -> {attributeName : ["iterableItemValue1", "iterableItemValue2"]}
- Iterate collections (By index)
interpreter.cast(source, { attributeName : [ "$forEach($iterableArray, $iterationItem, $iterationIndex)", "iterableArray.$iterationIndex.iterableItemAttribute" ]}) -> {attributeName : ["iterableItemValue1", "iterableItemValue2"]}
- Use a plain dictionary