{"version":3,"sources":["https://lively-kernel.org/voices/parsing-data/avf-data.mjs"],"names":["MetaData","constructor","user","source","timestamp","deserialize","d","TracedData","data","metadata","prev","appendData","newData","newMetadata","serializedHistory","tracedData","reverse","forEach","individual","Object","keys","key","value","getItem","includes","innerKey","getItems","result","getHistory","history","push","apply"],"mappings":"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","file":"avf-data.mjs","sourcesContent":["export class MetaData {\n  \n  constructor (user, source, timestamp) {\n    this.user = user;\n    this.source = source;\n    this.timestamp = timestamp;\n  }\n  \n  static deserialize (d) {\n    return new MetaData(d[\"User\"], d[\"Source\"], d[\"Timestamp\"])\n  }\n}\n\nexport default class TracedData {\n  \n  constructor (data, metadata, prev=null) {\n    this.data = data;\n    this.prev = prev;\n    this.metadata = metadata;\n  }\n  \n  appendData (newData, newMetadata) {\n    this.prev = new TracedData(this.data, this.metadata, this.prev);\n    this.data = newData;\n    this.metadata = newMetadata;\n  }\n  \n  static deserialize (serializedHistory) {\n    let tracedData = null;\n    serializedHistory = serializedHistory.reverse();\n    \n    serializedHistory.forEach( (individual) => {\n      let data = individual[\"Data\"];\n      \n      Object.keys(individual[\"NestedTracedData\"]).forEach( (key) => {\n        let value = individual[\"NestedTracedData\"][key];\n        data[key] = TracedData.deserialize(value);\n      });\n      let metadata = MetaData.deserialize(individual[\"Metadata\"]);\n      \n      if (tracedData === null) {\n        tracedData = new TracedData(data, metadata);\n      } else {\n        tracedData.appendData(data, metadata);\n      }\n    })\n\n    return tracedData;\n  }\n  \n  getItem (key) {\n    if (Object.keys(this.data).includes(key)) {\n      return this.data[key];\n    }\n    \n    Object.keys(this.data).forEach((innerKey) => {\n      let value = this.data[innerKey];\n      if (value instanceof TracedData) {\n        if (Object.keys(value).includes(key)) {\n          return value[key];\n        }\n      }\n    });\n    \n    if (this.prev !== null) {\n      return this.prev.getItem(key);\n    }\n  }\n  \n  getItems(keys) {\n    let result = {};\n    \n    keys.forEach((key) => {\n      result[key] = this.getItem(key)\n    });\n    \n    return result;\n  }\n  \n  getHistory(key) {\n    let history = (this.prev === null) ? [] : this.prev.getHistory(key);\n    Object.keys(this.data).forEach((innerKey) => {\n      let value = this.data[innerKey];\n      if (value instanceof TracedData) {\n        history.push.apply(history, value.getHistory(key));\n      }\n    });\n    \n    if (Object.keys(this.data).includes(key)) {\n      history.push({\n        \"value\" : this.data[key],\n        \"timestamp\" : this.metadata.timestamp,\n        \"source\" : this.metadata.source\n      });\n    }\n    \n    return history;\n  }\n  \n}"]}