{"version":3,"sources":["https://lively-kernel.org/lively4/lively4-portal/src/client/lang/lang-ext.js"],"names":["extend","AExprRegistry","babelDefault","jsx","doExpressions","functionBind","asyncGenerators","classProperties","objectRestSpread","boundEval","aexpr","babel","SYNTAX_PLUGINS","filename","BABEL_CONFIG_DEFAULT","babelrc","plugins","presets","sourceFileName","moduleIds","sourceMaps","compact","comments","code","ast","resolveModuleSource","undefined","Object","prototype","dependentAExprs","allAsArray","filter","ae","supportsDependencies","dependencies","all","find","dep","desc","getAsDependencyDescription","object","value","scope","transformAsAST","fullPluginOrVisitor","configExtension","iteratorPlugin","Function","visitor","babelConfig","assign","transformFromAst","traverseAsAST","traverse","openInInspector","lively","openInspector","String","toAST","transform","thisReference","targetModule","result","isError","aexprByFunction","WeakMap","asAExpr","getOrCreate","onChange","callback","onBecomeTrue","onBecomeFalse"],"mappings":"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","file":"lang-ext.js","sourcesContent":["import 'lang';\nimport { extend } from './utils.js';\n\n/*MD\n## OBJECT\nMD*/\nimport { AExprRegistry } from 'src/client/reactive/active-expression/ae-registry.js';\n\nimport babelDefault from 'systemjs-babel-build';\nconst babel = babelDefault.babel;\n\nimport jsx from 'babel-plugin-syntax-jsx';\nimport doExpressions from 'babel-plugin-syntax-do-expressions';\nimport functionBind from 'babel-plugin-syntax-function-bind';\nimport asyncGenerators from 'babel-plugin-syntax-async-generators';\nimport classProperties from 'babel-plugin-syntax-class-properties';\nimport objectRestSpread from 'babel-plugin-syntax-object-rest-spread';\nconst SYNTAX_PLUGINS = [\n  jsx,\n  doExpressions,\n  functionBind,\n  asyncGenerators,\n  classProperties,\n  objectRestSpread\n];\n\nconst filename = \"tempfile.js\";\nconst BABEL_CONFIG_DEFAULT = {\n  babelrc: false,\n  plugins: SYNTAX_PLUGINS,\n  presets: [],\n  filename: filename,\n  sourceFileName: filename,\n  moduleIds: false,\n  sourceMaps: true,\n  // inputSourceMap: load.metadata.sourceMap,\n  compact: false,\n  comments: true,\n  code: true,\n  ast: true,\n  resolveModuleSource: undefined\n};\n\nextend(Object.prototype, {\n\n  dependentAExprs() {\n    return AExprRegistry.allAsArray().filter(ae => {\n      if (!ae.supportsDependencies()) {\n        return false;\n      }\n\n      const dependencies = ae.dependencies().all();\n      return dependencies.find(dep => {\n        const desc = dep.getAsDependencyDescription();\n        return desc.object === this || desc.value === this || desc.scope === this;\n      });\n    });\n  },\n\n  transformAsAST(fullPluginOrVisitor, configExtension = {}) {\n    const iteratorPlugin = fullPluginOrVisitor instanceof Function ?\n      fullPluginOrVisitor :\n      // only got the visitor: need to bridge to a plugin function as expected by babel\n      () => ({ visitor: fullPluginOrVisitor });\n\n    let babelConfig = Object.assign({}, BABEL_CONFIG_DEFAULT, {\n      plugins: [...SYNTAX_PLUGINS, iteratorPlugin]\n    });\n      \n    babelConfig = Object.assign(babelConfig, configExtension);\n\n    return babel.transformFromAst(this, undefined, babelConfig);\n  },\n\n  // using `babel.traverse` also allows for wild cards to match AST nodes\n  traverseAsAST(visitor) {\n    return babel.traverse(this, visitor);\n  },\n  openInInspector() {\n    lively.openInspector(this);\n  }\n\n});\n\n/*MD\n## STRING\nMD*/\n\nimport boundEval from \"src/client/bound-eval.js\";\n\nextend(String.prototype, {\n\n  toAST() {\n    return babel.transform(this, BABEL_CONFIG_DEFAULT).ast;\n  },\n\n  /**\n   * @example providing a visitor object\n   * var ids = [];\n   * `let x = 0, y = x +2;`.transformAsAST({\n   *   Identifier(path) {\n   *     ids.push(path.node.name);\n   *   }\n   * });\n   * ids;\n   * \n   * @example providing a full-fledged plugin function\n   * var ids = [];\n   * `let x = 0, y = x +2;`.transformAsAST(({ types: t, template, traverse }) => ({\n   *   visitor: {\n   *     Identifier(path) {\n   *       ids.push(path.node.name);\n   *     }\n   *   }\n   * }));\n   * ids;\n   */\n  transformAsAST(fullPluginOrVisitor) {\n    return this.toAST().transformAsAST(fullPluginOrVisitor);\n  },\n\n  /*\n   * @example printing all node types found in source code\n   * `var a = 42, b = 423; lively::foo`.traverseAsAST({\n   *    enter(path) {\n   *      lively.notify(path.node.type)\n   *    }\n   *  });\n   */\n  traverseAsAST(visitor) {\n    return this.toAST().traverseAsAST(visitor);\n  },\n\n  async boundEval(thisReference, targetModule) {\n    const result = await boundEval(this, thisReference, targetModule);\n    if (result.isError) {\n      throw result.value;\n    } else {\n      return result.value;\n    }\n  }\n\n});\n\n/*MD\n## FUNCTION\nMD*/\nimport aexpr from 'active-expression-rewriting';\n\nconst aexprByFunction = new WeakMap();\n\nextend(Function.prototype, {\n\n  asAExpr() {\n    return aexprByFunction.getOrCreate(this, () => aexpr(this));\n  },\n\n  onChange(callback) {\n    return this.asAExpr().onChange(callback);\n  },\n\n  onBecomeTrue(callback) {\n    return this.asAExpr().onBecomeTrue(callback);\n  },\n\n  onBecomeFalse(callback) {\n    return this.asAExpr().onBecomeFalse(callback);\n  }\n\n});"]}