{"version":3,"sources":["https://lively-kernel.org/lively4/swt1-debugging/src/client/vivide/scripts/loading.js"],"names":["Script","scriptFolder","stepFolder","applicationFolder","autoGenerated","folders","allFiles","Promise","all","map","folderURL","lively","files","statFile","then","j","JSON","parse","contents","filter","type","name","test","createView","content","createEditor","createDependents","componentWindow","openComponentInWindow","input","inputs","script","fromJSON","myCurrentScript","widget","create","setView","scriptGotUpdated","scriptEditor","createScriptEditor","setScript","applicationName","inputSources","i","forEach","connectTo","outputs","o","length","newDataFromUpstream","url","view","config","fetch","f","json","openFile","file","filepath","split","loadFile","replace","obj","key","rep","undefined","getDetails","r","scheme","description","calcScore","toFit","score","Object","keys","getMatches","search","details","d","includes","sort","a","b","_"],"mappings":"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","file":"loading.js","sourcesContent":["import Script from 'src/client/vivide/vividescript.js';\nimport { scriptFolder, stepFolder, applicationFolder } from 'src/client/vivide/utils.js';\n\nlet autoGenerated = /(.*-template\\.js(on)?$)|(.md?$)/;\nconst folders = [scriptFolder, stepFolder, applicationFolder];\n\nexport let allFiles = () => Promise.all(folders.map(folderURL => \n     lively.files.statFile(folderURL).then(j => \n      JSON.parse(j).contents\n       .filter(({ type }) => type === 'file')\n       .filter(({name}) => !autoGenerated.test(name))\n       .map(({name}) => folderURL+name))\n));\n\nexport async function createView(content, createEditor = false, createDependents = false, name){\n  const componentWindow = await lively.openComponentInWindow('vivide-view');\n  if (!createDependents) componentWindow.input = JSON.parse(content.inputs);\n  const script = await Script.fromJSON(content.script,componentWindow);\n  componentWindow.myCurrentScript = script;\n  const widget = await lively.create(content.widget);\n  widget.setView(componentWindow);\n  await componentWindow.scriptGotUpdated();\n  if(createEditor){\n    const scriptEditor = await componentWindow.createScriptEditor();\n    scriptEditor.setView(componentWindow);\n    await scriptEditor.setScript(script);\n  }\n  if(createDependents){\n    componentWindow.applicationName = name;\n    const inputs = await Promise.all(content.inputSources.map(i => createView(i, false, true, name)));\n    inputs.forEach(i => i.connectTo(componentWindow));\n    const outputs = await Promise.all(content.outputs.map(o => createView(o, false, true, name)));\n    outputs.forEach(o => componentWindow.connectTo(o));\n    if(content.inputs && content.inputs && content.inputs.length !== 0){\n      componentWindow.newDataFromUpstream(content.inputs);\n    }\n  }\n  return componentWindow;\n}\n\nexport async function setScript(url, view){\n  const config = await fetch(url).then(f => f.json());\n  const widget = await lively.create(config.widget);\n  widget.setView(view)\n  const script = await Script.fromJSON(config.script, view);\n  view.myCurrentScript = script;\n  const scriptEditor = await view.createScriptEditor();\n  scriptEditor.setView(view);\n  await scriptEditor.setScript(script);\n  await view.scriptGotUpdated();\n}\n\nexport async function openFile(file, createEditor, createDependents){\n  const filepath = file.split('/');\n  const content = JSON.parse(await lively.files.loadFile(file));\n  const name = filepath[filepath.length-1].split('.')[0];\n  await createView(content, createEditor, createDependents, name);\n}\n\nfunction replace(obj, key, rep = true){\n   return typeof obj[key] === \"undefined\" ? rep ? `No ${key} provided` : undefined : obj[key]\n}\n\nexport function getDetails(file, rep = false) {\n  return fetch(file)\n    .then(r => r.json())\n    .then(j => ({\n      scheme: replace(j, \"inScheme\", true),\n      description: replace(j, \"description\", rep)\n    }))\n}\n\nfunction calcScore(scheme, toFit){\n  if(!(scheme && toFit)) return 0;\n  if(scheme === toFit) return 100;\n  let score = 0;\n  Object.keys(toFit).forEach(key => {\n    if(scheme[key]){\n      score++;\n      if(toFit[key]===scheme[key]){\n        score++;\n      }\n    }\n  });\n  return score/Object.keys(toFit).length\n}\n\nexport async function getMatches(scheme, search){\n  const all = await allFiles();\n  const details  = await Promise.all(all[0].map(f => getDetails(f).then(d => ({name: f, details: d}))));\n  return details\n          .filter(f => search ? f.name.includes(search) : true)\n          .sort((a, b) => calcScore(\n              JSON.parse(scheme),\n              b.details.scheme\n            )-calcScore(\n              JSON.parse(scheme),\n              a.details.scheme\n          ))\n          .filter((_, i) => i<3)\n          .map(f => ({\n            name: f.name.split('/')[f.name.split('/').length-1].split('.')[0],\n            url: f.name\n          }))\n    \n}"]}