{"version":3,"names":["Script","boundEval","uuid","stepFolder","ScriptStep","VivideObject","Annotations","constructor","view","setView","_view","setInitialStep","step","initialStep","getInitialStep","getLastStep","firstStep","getLoopStartStep","lastStep","getNextExecutionStep","numberOfSteps","length","iterateLinear","getPrevStep","find","s","forEachStepAsync","cb","iterateLinearAsync","stepsAsArray","arr","push","insertStepAfter","stepType","prevStep","newStep","newFromTemplate","setScript","insertAfter","removeStep","stepToBeRemoved","removeLoop","remove","removeLoopTargetStep","setLoopStart","setLoopTargetStep","gotUpdated","lively","notify","scriptGotUpdated","getViewConfig","viewConfig","steps","fn","config","getExecutable","add","createDefaultScript","transform","extract","descent","script","toJSO","jsonContainer","forEach","id","toJSON","JSON","stringify","fromJSON","json","jsonScripts","parse","scripts","firstScriptStep","lastScriptStep","scriptId","source","type","stepJSON","loopId","otherStep","warn","document","querySelectorAll","vv","myCurrentScript","migrateTo"],"sources":["vividescript.js"],"sourcesContent":["import boundEval from \"src/client/bound-eval.js\";\nimport { uuid } from 'utils';\nimport { stepFolder } from 'src/client/vivide/utils.js';\nimport ScriptStep from 'src/client/vivide/vividescriptstep.js';\nimport VivideObject from 'src/client/vivide/vivideobject.js';\nimport Annotations from 'src/client/reactive/utils/annotations.js';\n\nexport default class Script {\n  constructor(view) {\n    this.setView(view);\n  }\n\n  setView(view) { this._view = view; }\n\n  /**\n   * Access\n   */\n  setInitialStep(step) { return this.initialStep = step; }\n  getInitialStep() { return this.initialStep; }\n\n  getLastStep() {\n    const firstStep = this.getInitialStep();\n    return firstStep && firstStep.getLastStep();\n  }\n\n  getLoopStartStep() {\n    const lastStep = this.getLastStep();\n    return lastStep && lastStep.getNextExecutionStep();\n  }\n\n  numberOfSteps() {\n    let length = 0;\n    this.getInitialStep().iterateLinear(() => length++);\n    return length;\n  }\n\n  getPrevStep(step) {\n    return this.getInitialStep().find(s => s.getNextExecutionStep() === step);\n  }\n\n  async forEachStepAsync(cb) {\n    await this.getInitialStep().iterateLinearAsync(cb);\n  }\n\n  stepsAsArray() {\n    const arr = [];\n    this.getInitialStep().iterateLinear(step => arr.push(step));\n\n    return arr;\n  }\n\n  /**\n   * Modify\n   */\n  async insertStepAfter(stepType, prevStep) {\n    const newStep = await ScriptStep.newFromTemplate(stepType);\n    newStep.setScript(this);\n\n    prevStep.insertAfter(newStep);\n\n    return newStep;\n  }\n\n  removeStep(stepToBeRemoved) {\n    if(stepToBeRemoved === this.getLoopStartStep()) {\n      this.removeLoop();\n    }\n\n    if(stepToBeRemoved === this.getInitialStep()) {\n      // First script was removed\n      this.setInitialStep(stepToBeRemoved.getNextExecutionStep());\n    }\n\n    stepToBeRemoved.remove();\n  }\n\n  removeLoop() {\n    const lastStep = this.getLastStep();\n    lastStep.removeLoopTargetStep();\n  }\n\n  setLoopStart(step) {\n    const lastStep = step.getLastStep();\n    lastStep.setLoopTargetStep(step);\n  }\n\n  /**\n   * Handling script execution\n   */\n  gotUpdated() {\n    lively.notify('VivideScript::gotIpdated')\n    this._view.scriptGotUpdated();\n  }\n\n  /**\n   * Script execution\n   */\n  async getViewConfig() {\n    const viewConfig = new Annotations();\n    const steps = this.stepsAsArray();\n\n    for (let step of steps) {\n      // #TODO: just say 'await step.getConfig()' (make it lazy and memoize later)\n      const [fn, config] = await step.getExecutable();\n      viewConfig.add(config);\n    }\n\n    return viewConfig;\n  }\n\n  /**\n   * Serialization\n   */\n  static async createDefaultScript(view) {\n    const transform = await ScriptStep.newFromTemplate('transform');\n    const extract = await ScriptStep.newFromTemplate('extract');\n    const descent = await ScriptStep.newFromTemplate('descent');\n\n    transform.insertAfter(extract);\n    extract.insertAfter(descent);\n\n    const script = new Script(view);\n    script.setInitialStep(transform);\n    transform.setScript(script);\n    extract.setScript(script);\n    descent.setScript(script);\n\n    return script;\n  }\n\n  toJSO() {\n    const jsonContainer = {};\n\n    this.stepsAsArray().forEach(step => {\n      jsonContainer[step.id] = step.toJSO();\n    });\n\n    return jsonContainer;\n  }\n  \n  toJSON() {\n    return JSON.stringify(this.toJSO())\n  }\n\n  static async fromJSON(json, view) {\n    // this is deserialization of a script\n    let jsonScripts = JSON.parse(json)\n    let scripts = {};\n\n    var firstScriptStep\n    var lastScriptStep\n    \n    const script = new Script(view);\n    for (let scriptId in jsonScripts) {\n      let step = new ScriptStep(\n        jsonScripts[scriptId].source,\n        jsonScripts[scriptId].type,\n        scriptId,\n      );\n      step.setScript(script);\n      scripts[scriptId] = step\n      if (!firstScriptStep) firstScriptStep = step;\n      if (lastScriptStep) {\n        lastScriptStep.insertAfter(step);\n      }\n      lastScriptStep = step\n    }\n    for (let scriptId in jsonScripts) {\n      let step = scripts[scriptId]\n      let stepJSON =  jsonScripts[scriptId]\n      var loopId = stepJSON[\"loop-target-step-id\"]\n      if(loopId) {\n        var otherStep = scripts[loopId]\n        if (otherStep) {\n          step.setLoopTargetStep(otherStep)\n        } else {\n          debugger\n          lively.warn(\"Could not restore Vivide Step Loop\")\n        }\n      }\n    }\n    \n    \n    script.setInitialStep(firstScriptStep);\n    return script;\n  }\n}\n\n// #UPDATE_INSTANCES\n// #TODO: idea: using a list of all object, we can make them become anew\n// go through all object reachable from window\ndocument.querySelectorAll(\"vivide-view\").forEach(vv => {\n  const script = vv.myCurrentScript;\n  if(script) {\n    script.migrateTo(Script);\n  }\n});\n"],"mappings":"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"}