{"version":3,"sources":["https://lively-kernel.org/lively4/lively4-RP19-4/src/components/tools/lively-ast-inspector.js"],"names":["Morph","sortAlphaNum","babelDefault","loc","range","types","t","babel","AstInspector","initialize","windowTitle","registerButtons","lively","html","registerKeys","container","get","inspect","obj","targetObject","oldViewState","getViewState","innerHTML","content","display","root","appendChild","updatePatterns","childNodes","setViewState","connectEditor","editor","connectLivelyCodeMirror","livelyCodeMirror","lcm","on","cm","astCapabilities","then","ac","programPath","node","getOutermostPathContainingSelectionWithMinimalSelectionRange","firstSelection","pathKeys","getPathKeys","selectPath","keyPath","selection","classList","remove","element","expandPath","scrollIntoView","add","inner","getBoundingClientRect","outer","relativeLeft","left","relativeTop","top","hDisplacement","width","vDisplacement","height","scrollBy","key","expandElement","getChild","getChildren","find","child","babelPath","keys","path","unshift","inList","listKey","parentPath","configuration","preferences","hidesLocationData","hidesTypeProperty","hidesDefaultProperties","hidesOptionalProperties","hidesUnknownProperties","hidesFunctions","hidesProto","getElementType","isNode","Array","isArray","getRenderCall","type","expanded","options","elementTemplate","pattern","target","renderCall","render","isExpanded","renderAstNode","append","expansionIndicatorTemplate","keyTemplate","labelTemplate","summary","astNodeSummary","summaryTemplate","attachHandlers","contentTemplate","classifications","astNodeKeyClassifications","classification","isVisibleAstNodeKey","isFoldable","renderObject","objectPreview","allKeys","forEach","renderArray","length","renderValue","value","entries","json","JSON","stringify","astNode","isIdentifier","name","isStringLiteral","isFunction","String","fromCodePoint","computed","params","map","param","join","modifiers","async","static","isClassDeclaration","id","isVariableDeclaration","variables","declarations","decl","kind","isLocationKey","str","isTypeKey","has","fields","NODE_FIELDS","visitorKeys","VISITOR_KEYS","Set","includes","field","optional","default","trimLen","i","remaining","replacement","Object","getOwnPropertyNames","sort","symbol","cssClass","onmouseover","evt","onStartHover","stopPropagation","onmouseleave","onStopHover","querySelectorAll","expandNode","onclick","onSelect","selectedNode","showElement","dispatchEvent","CustomEvent","detail","object","hoverMarker","clear","currentEditor","start","end","markText","asCM","css","onContextMenu","shiftKey","preventDefault","setExpandStateForAllNodes","expandedness","recursion","captureViewState","state","applyViewState","children","filter","ea","contains","c","collapseElement","result","push","querySelector","livelyExample","url","lively4url","src","fetch","r","text","ast","toAST","program","livelyMigrate","other"],"mappings":"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","file":"lively-ast-inspector.js","sourcesContent":["import Morph from 'src/components/widgets/lively-morph.js';\nimport { sortAlphaNum } from 'src/client/sort.js';\nimport babelDefault from 'systemjs-babel-build';\nconst { types: t } = babelDefault.babel;\nimport { loc, range } from 'src/client/utils.js';\n\nexport default class AstInspector extends Morph {\n  \n  async initialize() {\n    this.windowTitle = \"AST Inspector\";\n    this.registerButtons()\n\n    lively.html.registerKeys(this);\n  }\n  \n  get container() { return this.get(\"#container\"); }\n  \n  inspect(obj) {\n    if (!obj) return;\n    \n    if (this.targetObject) {\n      var oldViewState = this.getViewState();\n    }\n    \n    this.targetObject = obj;\n    this.container.innerHTML = \"\";\n    \n    const content = this.display(obj, true, null);\n    this.root = content;\n    this.container.appendChild(content);\n    this.updatePatterns(this.container.childNodes[0])\n    \n    if (oldViewState) {\n      this.setViewState(oldViewState)\n    }\n    return content;\n  }\n  \n  connectEditor(editor) {\n    this.connectLivelyCodeMirror(editor.livelyCodeMirror());\n  }\n  \n  connectLivelyCodeMirror(lcm) {\n    lcm.editor.on(\"cursorActivity\", (cm) => {\n      lcm.astCapabilities(cm).then(ac => {\n        if (!ac.programPath) return;\n        const node = ac.getOutermostPathContainingSelectionWithMinimalSelectionRange(ac.programPath, ac.firstSelection);\n        const pathKeys = this.getPathKeys(node);\n        this.selectPath(pathKeys);\n      });\n    })\n  }\n  \n  selectPath(keyPath) {\n    if (this.selection) {\n      this.selection.classList.remove(\"selected\");\n    }\n    \n    const element = this.expandPath(keyPath);\n    if (!element) return;\n    \n    this.scrollIntoView(element);\n    \n    this.selection = element;\n    this.selection.classList.add(\"selected\");\n  }\n  \n  scrollIntoView(element) {\n    //own implementation (instead of Element>>scrollIntoView)\n    //only scrolls container, not ALL ancestors (including lively desktop)\n    const container = this.container;\n    let inner = element.getBoundingClientRect();\n    let outer = container.getBoundingClientRect();\n    let relativeLeft = inner.left - outer.left;\n    let relativeTop = inner.top - outer.top;\n    let hDisplacement = (outer.width - inner.width) / 2;\n    let vDisplacement = (outer.height - inner.height) / 2;\n    hDisplacement = hDisplacement < 0 ? relativeLeft : relativeLeft - hDisplacement;\n    vDisplacement = vDisplacement < 0 ? relativeTop : relativeTop - vDisplacement;\n    hDisplacement -= 10;\n    vDisplacement -= 10;\n    container.scrollBy(hDisplacement, vDisplacement);\n  }\n\n  expandPath(keyPath) {\n    let node = this.root;\n    if (!node) return null;\n    for (const key of keyPath) {\n      this.expandElement(node);\n      node = this.getChild(node, key);\n      if (!node) return null;\n    }\n    this.expandElement(node);\n    return node;\n  }\n\n  getChild(element, key) {\n    return this.getChildren(element).find(child => child.key === key);\n  }\n  \n  getPathKeys(babelPath) {\n    const keys = [];\n    let path = babelPath;\n    do {\n      let key = path.key;\n      keys.unshift(key);\n      if (path.inList) keys.unshift(path.listKey);\n    } while ((path = path.parentPath));\n    return keys;\n  }\n\n/*MD # Configuration MD*/\n  \n  get configuration() {\n    return this.configuration || lively.preferences.get(\"AstInspectorConfig\");\n  }\n  \n  get hidesLocationData() { return true; }\n  get hidesTypeProperty() { return true; }\n  get hidesDefaultProperties() { return true; }\n  get hidesOptionalProperties() { return false; }\n  get hidesUnknownProperties() { return true; }\n  get hidesFunctions() { return true; }\n  get hidesProto() { return true; }\n\n/*MD # Displaying MD*/\n\n  getElementType(obj) {\n    if (obj == null) return \"Value\";\n    if (t.isNode(obj)) return \"AstNode\";\n    if (Array.isArray(obj)) return \"Array\";\n    if (typeof obj === \"object\" || typeof obj === \"function\") return \"Object\";\n    return \"Value\";\n  }\n\n  getRenderCall(type) {\n    return `render${type}`;\n  }\n  \n  display(obj, expanded, key, options = {}) {\n    const element = this.elementTemplate();\n    element.key = key;\n    element.options = options;\n    element.pattern = `NAME ${key || ''}`;\n    element.target = obj;\n    element.type = this.getElementType(obj);\n    element.renderCall = this.getRenderCall(element.type);\n    this.render(element, expanded);\n    return element;\n  }\n    \n/*MD # Rendering MD*/\n\n  render(element, expanded) {\n    element.innerHTML = '';\n    element.isExpanded = expanded;\n    this[element.renderCall || \"renderValue\"](element);\n  }\n\n  renderAstNode(element) {\n    const target = element.target;\n    element.append(this.expansionIndicatorTemplate(element.isExpanded));\n    element.append(this.keyTemplate(element));\n    element.append(this.labelTemplate(target.type));\n    const summary = this.astNodeSummary(element.target, element.isExpanded);\n    if (summary) element.append(this.summaryTemplate(summary));\n    this.attachHandlers(element);\n    if (element.isExpanded) {\n      const content = this.contentTemplate();\n      const classifications = this.astNodeKeyClassifications(target);\n      for (const key in classifications) {\n        const classification = classifications[key];\n        if (this.isVisibleAstNodeKey(classification)) {\n          content.append(this.display(target[key], this.isFoldable(key), key, { classification }))\n        }\n      }\n      element.append(content);\n    }\n  }\n  \n  renderObject(element) {\n    const target = element.target;\n    element.append(this.expansionIndicatorTemplate(element.isExpanded));\n    element.append(this.keyTemplate(element));\n    if (!element.isExpanded) {\n      element.append(\n        <span class=\"syntax\">&#123;</span>,\n        this.summaryTemplate(this.objectPreview(target)),\n        <span class=\"syntax\">&#125;</span>,\n      );\n    }\n    this.attachHandlers(element);\n    if (element.isExpanded) {\n      const content = this.contentTemplate();\n      this.allKeys(target).forEach(key => {\n        content.append(this.display(target[key], false, key))\n      });\n      element.append(content);\n    }\n  }\n\n  renderArray(element) {\n    if (!element.target.length) return this.renderValue(element);\n    element.append(this.expansionIndicatorTemplate(element.isExpanded));\n    element.append(this.keyTemplate(element));\n    if (!element.isExpanded) {\n      element.append(this.summaryTemplate(`[${element.target.length} elements]`));\n    }\n    this.attachHandlers(element);\n    if (element.isExpanded) {\n      const content = this.contentTemplate();\n      for (const [key, value] of element.target.entries()) {\n        content.append(this.display(value, false, key));\n      }\n      element.append(content);\n    }\n  }\n\n  renderValue(element) {\n    const json = JSON.stringify(element.target);\n    element.appendChild(this.expansionIndicatorTemplate(\"\\u2002\"));\n    element.append(this.keyTemplate(element));\n    element.appendChild(<span class='attrValue'>{json}</span>);\n  }\n  \n  astNodeSummary(astNode, isExpanded) {\n    if (t.isIdentifier(astNode)) {\n      return `\"${astNode.name}\"`;\n    } else if (t.isStringLiteral(astNode)) {\n      return `\"${astNode.value}\"`;\n    } else if (t.isFunction(astNode)) {\n      let name = String.fromCodePoint(119891);\n      if (!astNode.computed && astNode.key) {\n        name = astNode.key.name || astNode.key.value;\n      }\n      let params = \"\";\n      if (astNode.params) params = astNode.params.map(param => param.name || \"?\").join(',');\n      let modifiers = \"\";\n      if (astNode.async) modifiers += \"async \";\n      if (astNode.static) modifiers += \"static \";\n      return `${modifiers} ${name}(${params})`\n    } else if (t.isClassDeclaration(astNode)) {\n      return `${astNode.id.name}`;\n    } else if (t.isVariableDeclaration(astNode)) {\n      let variables = astNode.declarations\n                      .map(decl => (decl.id && decl.id.name) || \"?\")\n                      .join(', ');\n      return `${astNode.kind} [${variables}]`;\n    } else {\n      if (astNode.id) return astNode.id.name;\n      if (astNode.key) {\n        return astNode.key.value || astNode.key.name;\n      }\n    }\n    return null;\n  }\n  \n  isFoldable(key) {\n    return key === 'body'\n            || key === 'declarations'\n            || key === 'expression';\n  }\n  \n  isLocationKey(str) {\n    return str === \"loc\"\n            || str === \"start\"\n            || str === \"end\";\n  }\n\n  isTypeKey(str) {\n    return str == \"type\";\n  }\n\n  isVisibleAstNodeKey(classification) {\n    if (classification.has(\"location\")) return !this.hidesLocationData;\n    if (classification.has(\"type\")) return !this.hidesTypeProperty;\n    if (classification.has(\"unknown\")) return !this.hidesUnknownProperties;\n    if (classification.has(\"function\") && this.hidesFunctions) return false;\n    if (classification.has(\"default\") && this.hidesDefaultProperties) return false;\n    if (classification.has(\"optional\") && this.hidesOptionalProperties) return false;\n    return true;\n  }\n\n  astNodeKeyClassifications(node) {\n    const classifications = {};\n    const allKeys = this.allKeys(node);\n    \n    const fields = t.NODE_FIELDS[node.type];\n    const visitorKeys = t.VISITOR_KEYS[node.type];\n    allKeys.forEach(key => {\n      classifications[key] = new Set();\n      if (this.isLocationKey(key)) return classifications[key].add(\"location\");\n      if (this.isTypeKey(key)) return classifications[key].add(\"type\");\n      const value = node[key];\n      if (typeof value === \"function\") classifications[key].add(\"function\");\n      if (visitorKeys && visitorKeys.includes(key)) classifications[key].add(\"visited\");\n      \n      const field = fields && fields[key];\n      if (field) {\n        if (field.optional) classifications[key].add(\"optional\");\n        if (field.default === value) classifications[key].add(\"default\");\n        return;\n      }\n\n      classifications[key].add(\"unknown\");\n    });\n    return classifications;\n  }\n  \n  objectPreview(obj) {\n    const trimLen = 30;\n    const keys = this.allKeys(obj);\n    let str = '';\n    let i = 0;\n    for (let i = 0; i < keys.length; i++) {\n      const key = keys[i];\n      if (i) str += ', ';\n      if (str.length > trimLen) {\n        const remaining = keys.length - i;\n        const replacement = `... +${remaining}`;\n        if (remaining == 1 && key.length < replacement.length) {\n          str += key;\n        } else {\n          str += replacement;\n        }\n        break;\n      }\n      str += key;\n    }\n    return str;\n  }\n  \n  allKeys(obj) {\n    if (!(typeof obj === 'object')) return [];\n    const keys = Object.getOwnPropertyNames(obj);\n    return keys.sort(sortAlphaNum);\n  }\n  \n  expansionIndicatorTemplate(kind) {\n    let symbol;\n    if (kind === true) {\n      symbol = \"\\u25bc\";\n    } else if (kind === false) {\n      symbol = \"\\u25b6\";\n    } else {\n      symbol = kind;\n    }\n\n    return <span class='syntax'>\n      <a class='expand'>\n        <span style='font-size:9pt'>{symbol}</span>\n      </a>\n    </span>;\n  }\n\n  elementTemplate() {\n    return <div class=\"element\"></div>;\n  }\n  \n  labelTemplate(content) {\n    return <a id='tagname' class='tagname expand'>\n        {content}\n      </a>\n  }\n\n  keyTemplate(element) {\n    const key = element.key;\n    if (key == null) return <span></span>;\n    const classification = element.options.classification;\n    let cssClass = 'attrName expand';\n    if (classification) {\n      if (classification.has(\"visited\")) cssClass += \" visited\";\n    }\n    return <span class={cssClass}>\n      {key}\n      <span class=\"syntax\">:</span> \n    </span>;\n  }\n\n  contentTemplate() {\n    return <span id='content'></span>;\n  }\n\n  summaryTemplate(content) {\n    return <span class='expand more'>\n        {content}\n      </span>\n  }\n  \n/*MD # Handlers MD*/\n  \n  attachHandlers(element) {\n    element.onmouseover = evt => {\n      this.onStartHover(element);\n      evt.stopPropagation();\n    }\n    element.onmouseleave = evt => {\n      this.onStopHover(element);\n    }\n    element.querySelectorAll(\".expand\").forEach(expandNode => {\n      expandNode.onclick = evt => {\n        this.render(element, !element.isExpanded);\n      }\n    });\n  }\n  \n  /*\n   * called, when selecting a subobject \n   */\n  onSelect(element) {\n    const obj = element.target;\n    if (this.selectedNode) {\n      this.selectedNode.classList.remove(\"selected\");\n    }\n    this.selectedNode = element;\n    this.selectedNode.classList.add(\"selected\");\n  \n    this.selection = obj;\n    lively.showElement(obj);\n    this.dispatchEvent(new CustomEvent(\"select-object\", {detail: {node: element, object: obj}}));\n  }\n  \n  onStartHover(element) {\n    if (this.editor && element.target.loc) {\n      if (this.hoverMarker) this.hoverMarker.clear();\n      const cm = this.editor.currentEditor();\n      const start = loc(element.target.loc.start);\n      const end = loc(element.target.loc.end);\n      this.hoverMarker = cm.markText(start.asCM(), end.asCM(), {css: \"background-color: #fe3\"});\n    }\n  }\n  \n  onStopHover(element) {\n    if (this.editor && element.target.loc) {\n      if (this.hoverMarker) this.hoverMarker.clear();\n      this.hoverMarker = null;\n    }\n  }\n  \n  onContextMenu(evt) {\n    if (this.targetObject && !evt.shiftKey) {\n      evt.preventDefault();\n      evt.stopPropagation();\n      return false;\n    }\n  }\n\n/*MD # View State MD*/\n  \n  setExpandStateForAllNodes(expandedness) {\n    const root = this.container.childNodes[0];\n    const recursion = (node, expandedness) => {\n      node.isExpanded = expandedness;\n      this.getChildren().forEach(child => recursion(child, expandedness))\n    };\n    \n    recursion(root, expandedness);\n    // Do we need to render?\n  }\n  \n  getViewState() {\n    return this.captureViewState(this.container.childNodes[0])\n  }\n  \n  setViewState(state) {\n    return this.applyViewState(this.container.childNodes[0], state)\n  }\n  \n  applyViewState(node, state) {\n    this.expandElement(node)\n    \n    const children = this.getChildren(node);\n    children.filter(ea =>\n        ea.classList.contains(\"element\"));\n      \n    state.children.forEach( ea => {\n      const child = children.find( c => c.pattern == ea.pattern)\n      if (child) this.applyViewState(child, ea) \n      })\n    }\n  \n  \n  expandElement(element) {\n    if (!element.isExpanded) this.render(element, true);\n  }\n\n  collapseElement(element) {\n    if (element.isExpanded) this.render(element, false);\n  }\n  \n  captureViewState(node) {\n    const result = {\n      pattern: node.pattern,\n      children: [],\n    }\n    \n    this.getChildren(node)\n      .filter(ea => ea.isExpanded)\n      .forEach(ea => {\n          result.children.push(this.captureViewState(ea))        \n        });\n    return result;\n  }\n  \n  updatePatterns(node) {\n    if (!node.target) {\n      node.pattern = \"NOTARGET\"\n    }\n   this.getChildren(node).forEach( ea => {\n        this.updatePatterns(ea);\n   })\n  }\n  \n  \n /*MD # Utils MD*/\n  \n  getChildren(node){\n    if (node.querySelector) {\n      const content = node.querySelector(\"#content\")\n      if (content) {\n        return content.childNodes\n      }\n    }\n    return []\n  }\n  \n/*MD # Lively Integration MD*/\n  \n  async livelyExample() {\n    const url = lively4url + \"/src/components/tools/lively-ast-inspector.js\";\n    const src = await fetch(url).then(r => r.text());\n    const ast = src.toAST();\n    this.inspect(ast.program);\n  }\n  \n  async livelyMigrate(other) {\n    this.inspect(other.targetObject);\n    this.setViewState(other.getViewState());\n  }\n}"]}