{"version":3,"names":["Tracker","IdentitySymbolProvider","Timer","defaultExample","deepCopy","DefaultMap","constructor","ids","builder","Object","idIterationParents","iterations","errors","Map","executedBlocks","Set","exampleIds","add","exampleId","timer","_identities","_symbolProvider","reset","clear","id","iterationParentId","runId","value","name","keyword","originalValue","prototype","includes","set","has","__tracker_identity","get","next","type","CanvasRenderingContext2D","getImageData","canvas","width","height","__tracker_time","Date","now","block","iteration","iterationMap","iterationCount","error","errorMsg","Zone","current","babylonianExampleId","example","_identitySymbols","_index","length","MaxRuntime","_maxRuntime","_startTime","start","check","time","Error"],"sources":["tracker.js"],"sourcesContent":["import { defaultExample } from \"./defaults.js\";\nimport { deepCopy } from \"./utils.js\";\nimport { DefaultMap } from \"./collections.js\";\n\nexport default class Tracker {\n  \n  constructor() {\n    this.ids = new DefaultMap( // Map(id, Map(exampleId, Map(runId, {before, after: {type, value, name}]})) \n      DefaultMap.builder(\n        DefaultMap.builder(Object)\n      )\n    );\n    this.idIterationParents = new DefaultMap(0); // Map(id, iterationId); \n    this.iterations = new DefaultMap( // Map(id, Map(exampleId, iterationCounter))\n      DefaultMap.builder(0)\n    );\n    this.errors = new Map(); // Map(exampleId, errorMsg);\n    this.executedBlocks = new Set(); // Set(id)\n    // this.exampleId = defaultExample().id;\n    this.exampleIds = new Set();\n    this.exampleIds.add(this.exampleId);\n    this.timer = new Timer();\n    this._identities = new Map(); // Map(identity, symbol)\n    this._symbolProvider = new IdentitySymbolProvider();\n  }\n  \n  reset() {\n    this.ids.clear();\n    this.idIterationParents.clear();\n    this.iterations.clear();\n    this.errors.clear();\n    this.executedBlocks.clear();\n    this.exampleId = defaultExample().id;\n    this.exampleIds.clear();\n    this.exampleIds.add(this.exampleId);\n    this._identities.clear();\n    this._symbolProvider.reset();\n  }\n\n  id(id, exampleId, iterationParentId, runId, value, name, keyword = \"after\") {\n    const originalValue = value;\n    let prototype;\n    \n    \n    // console.log('TRACKER ID ' + id \n    //             + \" exampleId: \" + exampleId \n    //             +  \" iterationParentId: \" + iterationParentId\n    //             +  \" runId: \" + runId\n    //             + \" Value: \" + value\n    //             + \" keyword:\" + keyword)\n    // #TODO #ContinueHere for implementing aysnc Babylonian Programming....\n    // next steps is signalling that this item has changed and might be in need for updating...\n    if(![\"before\", \"after\"].includes(keyword)) {\n      return value;\n    }\n    this.idIterationParents.set(id, iterationParentId);\n   \n    // Check and assign object identity\n    if(value instanceof Object) {\n      if(this._identities.has(value)) {\n        value.__tracker_identity = this._identities.get(value);\n      } else {\n        value.__tracker_identity = this._symbolProvider.next();\n        this._identities.set(value, value.__tracker_identity);\n      }\n    }\n    \n   \n    // Check and store object type\n    let type = typeof(value);\n    if(value && value.constructor && value.constructor.name) {\n      type = value.constructor.name;\n    }\n    \n    if(value && value.constructor && value.constructor.prototype) {\n      prototype = value.constructor.prototype;\n    }\n\n    \n    // Copy the value\n    if(value instanceof CanvasRenderingContext2D) {\n      value = value.getImageData(0, 0, value.canvas.width, value.canvas.height);\n    } else if (value instanceof Object) {\n      value = deepCopy(value);\n    } else {\n      // don't copy values since they are unmutable\n    }\n    \n    if(value instanceof Object) {\n      value.__tracker_time = Date.now() \n    }\n    \n   \n    this.ids.get(id)\n            .get(exampleId)\n            .get(runId)[keyword] = {\n              type: type,\n              value: value,\n              prototype: prototype,\n              name: name\n            };\n    \n    return originalValue;\n  }\n  \n  block(id) {\n    this.executedBlocks.add(id);\n  }\n  \n  iteration(id) {\n    const iterationMap = this.iterations.get(id);\n    const iterationCount = iterationMap.get(this.exampleId);\n    iterationMap.set(this.exampleId, iterationCount + 1);\n    return iterationCount;\n  }\n  \n  error(errorMsg) {\n    this.errors.set(this.exampleId, errorMsg);\n  }\n  \n  get exampleId() {\n    return Zone.current.babylonianExampleId\n  }\n  \n  set exampleId(id) {\n    // throw new Error(\"exampleId should not be set\")\n  }\n  \n  example(exampleId) {\n    // this.exampleId = exampleId; // for async examples this is not enough... Zone.current.babylonianExampleId\n    this.exampleIds.add(this.exampleId);\n  }\n}\n\n\nexport class IdentitySymbolProvider {\n  constructor() {\n    this._identitySymbols =  ['🐶','🐺','🐱','🐭','🐹','🐰','🐸','🐯','🐨','🐻','🐷','🐽','🐮','🐗','🐵','🐒','🐴','🐑','🐘','🐼','🐧','🐦','🐤','🐥','🐣','🐔','🐍','🐢','🐛','🐝','🐜','🐞','🐌','🐙','🐚','🐠','🐟','🐳','🐋','🐄','🐏','🐀','🐃','🐅','🐇','🐉','🐎','🐐','🐓','🐕','🐖','🐁','🐂','🐲','🐡','🐊'];\n    this._index = 0;\n  }\n  \n  next() {\n    return this._identitySymbols[this._index++ % this._identitySymbols.length];\n  }\n  \n  reset() {\n    this._index = 0;\n  }\n}\n\nexport class Timer {\n  \n  static get MaxRuntime() {\n     return 2000\n  }\n  \n  constructor() {\n    this._maxRuntime = Timer.MaxRuntime;\n    this._startTime = null;\n  }\n  \n  start() {\n    this._startTime = (+new Date());\n  }\n  \n  reset() {\n    this._startTime = null;\n  }\n  \n  check() {\n    if(this._startTime === null) {\n      return;\n    }\n    \n    const time = Date.now();\n    if(time - this._startTime > this._maxRuntime) {\n      throw new Error(\"Timeout reached. Maybe there is an inifinite loop?\");\n    }\n  }\n}\n"],"mappings":"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"}