{"version":3,"sources":["https://lively-kernel.org/lively4/lively4-tabs/src/client/reactive/active-expression/events/event.js"],"names":["AExprRegistry","toValueString","pluralize","humanizePosition","fileNameString","eventCounter","EventTypes","CREATED","DISPOSED","CHANGED","EVALFAIL","CBADDED","CBREMOVED","DEPCHANGED","REFINE","UNREFINE","LAYERCREATED","CUSTOM","file","substring","lastIndexOf","line","Event","constructor","ae","value","type","overrideTimestamp","undefined","timestamp","Date","overallID","valuePromise","Promise","resolve","then","resolvedValue","setAE","eventIDInAE","addEvent","id","meta","get","eventListeners","forEach","listener","callback","ensureResolved","typeName","isILA","getColor","valueString","extractLayererdFunctions","result","Map","event","events","functionMap","getOrCreate","obj","Object","keys","functions","key","set","function","debugInfo","layeredFunctionsString","layeredFunctions","values","reduce","p","c","size","humanizedData","triggers","map","location","start","lastValue","hook","informationString","error","name","message","added","length","removed","matching","toString"],"mappings":"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","file":"event.js","sourcesContent":["import { AExprRegistry } from 'src/client/reactive/active-expression/ae-registry.js';\nimport { toValueString } from 'src/client/reactive/components/basic/aexpr-debugging-utils.js';\nimport { pluralize } from 'utils'\n\nlet eventCounter = 0;\n\nexport const EventTypes = {\n  //AE\n  CREATED: \"created\",\n  DISPOSED: \"disposed\",\n  CHANGED: \"changed value\",\n  EVALFAIL: \"evaluation failed\",\n  CBADDED: \"callback added\",\n  CBREMOVED: \"callback removed\",\n  DEPCHANGED: \"dependencies changed\",\n  //ILA\n  REFINE: \"refine function\",\n  UNREFINE: \"unrefine function\",\n  LAYERCREATED: \"layer created\",\n  //CUSTON\n  CUSTOM: \"custom mark\",\n}\n\nfunction fileNameString(file) {\n  return file.substring(file.lastIndexOf('/') + 1);\n}\n\nfunction humanizePosition(file, line) {\n  return <div>in <span style=\"color:#0000FF\">{fileNameString(file)}</span> line <span style=\"color:#0000FF\">{line}</span></div>;\n}\n\nexport default class Event {\n  constructor(ae, value, type, overrideTimestamp = undefined) {\n    this.timestamp = overrideTimestamp || new Date();\n    this.overallID = eventCounter;\n    eventCounter++;\n        \n    this.type = type;\n    this.valuePromise = Promise.resolve(value).then(resolvedValue => {\n      this.value = resolvedValue;\n    });\n    this.setAE(ae);\n  }\n  \n  setAE(ae) {\n    if(!ae) return;\n    const eventIDInAE = ae.addEvent(this);\n    \n    this.id = ae.meta().get('id') + \"-\" + eventIDInAE;\n    this.ae = ae;\n    \n    this.valuePromise.then(() => {\n      AExprRegistry.eventListeners().forEach(listener => listener.callback(this.ae, this));\n    });\n  }\n  \n  async ensureResolved() {\n    await this.valuePromise;\n    return this;\n  }\n  \n  typeName() {\n    if(this.ae.isILA() && this.type === EventTypes.CHANGED) {\n      return this.value.value ? \"layer enabled\" : \"layer disabled\"\n    }\n    return this.type;\n  }\n  \n  getColor() {\n    switch(this.type) {\n      case EventTypes.CREATED:\n        return 'green';\n      case EventTypes.LAYERCREATED:\n        return 'lightgreen';\n      case EventTypes.DISPOSED:\n      case EventTypes.EVALFAIL:\n        return 'red';\n      case EventTypes.CHANGED:\n        return 'blue';\n      case EventTypes.CBADDED:\n      case EventTypes.REFINE:\n        return 'yellow';\n      case EventTypes.CBREMOVED:\n      case EventTypes.UNREFINE:\n        return 'purple';\n      case EventTypes.DEPCHANGED:\n        return 'orange';\n      case EventTypes.CUSTOM:\n        return 'gray';\n      default:\n        return 'black';\n    }\n  }\n  \n  valueString(value = this.value.value) {\n    if(this.ae.isILA()) return value ? \"on\" : \"off\";\n    return toValueString(value);\n  }\n  \n  extractLayererdFunctions() {\n    if(this.ae.isILA()) {\n      const result = new Map();\n      for(const event of this.ae.events) {\n        if(event === this) break;\n        if(event.type === EventTypes.REFINE) {\n          const functionMap = result.getOrCreate(event.value.obj, () => new Map());\n          Object.keys(event.value.functions).forEach(key => {\n            functionMap.set(key, {function: event.value.functions[key], debugInfo: event.value.debugInfo[key]});\n            \n          })\n        } else if(event.type === EventTypes.UNREFINE) {\n          result.set(event.value.obj, new Map());\n        }\n      }\n      //const layer = this.ae.getLayer();\n      return result;\n    }\n    return undefined;\n  }\n  \n  layeredFunctionsString() {\n    const layeredFunctions = this.extractLayererdFunctions();\n    if(!layeredFunctions) return \"\";\n    return <div><span style=\"color:#AA00AA\">{pluralize([...layeredFunctions.values()].reduce((p, c) => p += c.size, 0), \"active method\")}</span> in <span style=\"color:#AA00AA\">{pluralize(layeredFunctions.size, \"object\")}</span><br/></div>\n  }\n  \n  async humanizedData() {\n    switch (this.type) {\n      case EventTypes.CHANGED:\n        return <div>\n          {... this.value.triggers.map(({ location }) => humanizePosition(location.file, location.start.line))} \n          <br /> \n          <span style=\"color:#00AAAA\">{this.valueString(this.value.lastValue)}</span> → <span style=\"color:#00AAAA\">{this.valueString(this.value.value)}</span>\n          <br /> \n          {this.layeredFunctionsString()}\n          {this.value.triggers[0].hook.informationString()}\n        </div>;\n      //Todo: Join trigger hook informationString\n      case EventTypes.EVALFAIL:\n        return <div>\n          {this.value.triggers ? this.value.triggers.map(({ location }) => humanizePosition(location.file, location.start.line)) : \"\"} \n          <br /> \n          {this.value.error.name + \": \" + this.value.error.message}\n        </div>;\n      case EventTypes.CREATED:\n        {\n          const ae = this.ae;\n          /*const stack = this.value.stack;\n          const locations = await Promise.all(stack.frames.map(frame => frame.getSourceLoc()));\n          return locations.map(location => this.humanizePosition(location.source, location.line));*/\n          const location = ae.meta().get(\"location\");\n          return <div>\n            <span style=\"color:#00AAAA\">{this.valueString(this.value.lastValue)}</span>\n            {this.layeredFunctionsString()}\n            {humanizePosition(location.file, location.start.line)}\n          </div>\n        }\n      case EventTypes.DISPOSED:\n        {\n          const ae = this.value;\n          const location = ae.meta().get(\"location\");\n          return humanizePosition(location.file, location.start.line);\n        }\n      case EventTypes.DEPCHANGED:\n        {\n          return <div>\n              Added: {this.value.added.length}\n              Removed: {this.value.removed.length}\n              Matching: {this.value.matching.length}\n            </div>;\n        }\n      case EventTypes.CBADDED:\n      case EventTypes.CBREMOVED:\n      case EventTypes.REFINE:\n      case EventTypes.UNREFINE:\n      case EventTypes.LAYERCREATED:\n      case EventTypes.CUSTOM:\n      default:\n        return (this.value || \"\").toString();\n    }\n  }\n  \n  \n\n}"]}