{"version":3,"sources":["https://lively-kernel.org/lively4/lively4-bp2019/src/client/lang/lang-ext.js"],"names":["extend","AExprRegistry","babelDefault","jsx","doExpressions","functionBind","asyncGenerators","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","iteratorPlugin","Function","visitor","babelConfig","assign","transformFromAst","traverseAsAST","traverse","String","toAST","transform","thisReference","targetModule","result","isError","aexprByFunction","WeakMap","asAExpr","getOrCreate","onChange","callback","onBecomeTrue","onBecomeFalse"],"mappings":";;;;;;AACSA,Y,YAAAA,M;;AAKAC,mB,wDAAAA,a;;AAEFC,kB;;AAGAC,S;;AACAC,mB;;AACAC,kB;;AACAC,qB;;AA4DAC,e;;AA2DAC,W;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA5HP,YAAMC,QAAQP,aAAaO,KAA3B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAMA,YAAMC,iBAAiB,CAACP,GAAD,EAAMC,aAAN,EAAqBC,YAArB,EAAmCC,eAAnC,CAAvB;;;;;;;;;;;;;;;AAEA,YAAMK,WAAW,aAAjB;;;;;;;;;;;;;;AACA,YAAMC,uBAAuB;AAC3BC,iBAAS,KADkB;AAE3BC,iBAASJ,cAFkB;AAG3BK,iBAAS,EAHkB;AAI3BJ,kBAAUA,QAJiB;AAK3BK,wBAAgBL,QALW;AAM3BM,mBAAW,KANgB;AAO3BC,oBAAY,IAPe;AAQ3B;AACAC,iBAAS,KATkB;AAU3BC,kBAAU,IAViB;AAW3BC,cAAM,IAXqB;AAY3BC,aAAK,IAZsB;AAa3BC,6BAAqBC;AAbM,OAA7B;;;;;;;;;;;;;;;AAgBAxB,aAAOyB,OAAOC,SAAd,EAAyB;;AAEvBC,0BAAkB;AAChB,iBAAO1B,cAAc2B,UAAd,GAA2BC,MAA3B,CAAkCC,MAAM;AAC7C,gBAAI,CAACA,GAAGC,oBAAH,EAAL,EAAgC;AAC9B,qBAAO,KAAP;AACD;;AAED,kBAAMC,eAAeF,GAAGE,YAAH,GAAkBC,GAAlB,EAArB;AACA,mBAAOD,aAAaE,IAAb,CAAkBC,OAAO;AAC9B,oBAAMC,OAAOD,IAAIE,0BAAJ,EAAb;AACA,qBAAOD,KAAKE,MAAL,KAAgB,IAAhB,IAAwBF,KAAKG,KAAL,KAAe,IAAvC,IAA+CH,KAAKI,KAAL,KAAe,IAArE;AACD,aAHM,CAAP;AAID,WAVM,CAAP;AAWD,SAdsB;;AAgBvBC,uBAAeC,mBAAf,EAAoC;AAClC,gBAAMC,iBAAiBD,+BAA+BE,QAA/B,GACrBF,mBADqB;AAErB;AACA,iBAAO,EAAEG,SAASH,mBAAX,EAAP,CAHF;;AAKA,gBAAMI,cAAcrB,OAAOsB,MAAP,CAAc,EAAd,EAAkBnC,oBAAlB,EAAwC;AAC1DE,qBAAS,CAAC,GAAGJ,cAAJ,EAAoBiC,cAApB;AADiD,WAAxC,CAApB;;AAIA,iBAAOlC,MAAMuC,gBAAN,CAAuB,IAAvB,EAA6BxB,SAA7B,EAAwCsB,WAAxC,CAAP;AACD,SA3BsB;;AA6BvB;AACAG,sBAAcJ,OAAd,EAAuB;AACrB,iBAAOpC,MAAMyC,QAAN,CAAe,IAAf,EAAqBL,OAArB,CAAP;AACD;;AAhCsB,OAAzB;;AAoCA;;;;;;;;;;;;;;;;;;;AAMA7C,aAAOmD,OAAOzB,SAAd,EAAyB;;AAEvB0B,gBAAQ;AACN,iBAAO3C,MAAM4C,SAAN,CAAgB,IAAhB,EAAsBzC,oBAAtB,EAA4CU,GAAnD;AACD,SAJsB;;AAMvB;;;;;;;;;;;;;;;;;;;;;AAqBAmB,uBAAeC,mBAAf,EAAoC;AAClC,iBAAO,KAAKU,KAAL,GAAaX,cAAb,CAA4BC,mBAA5B,CAAP;AACD,SA7BsB;;AA+BvB;;;;;;;;AAQAO,sBAAcJ,OAAd,EAAuB;AACrB,iBAAO,KAAKO,KAAL,GAAaH,aAAb,CAA2BJ,OAA3B,CAAP;AACD,SAzCsB;;AA2CvB,cAAMtC,SAAN,CAAgB+C,aAAhB,EAA+BC,YAA/B,EAA6C;AAC3C,gBAAMC,SAAS,MAAMjD,UAAU,IAAV,EAAgB+C,aAAhB,EAA+BC,YAA/B,CAArB;AACA,cAAIC,OAAOC,OAAX,EAAoB;AAClB,kBAAMD,OAAOjB,KAAb;AACD,WAFD,MAEO;AACL,mBAAOiB,OAAOjB,KAAd;AACD;AACF;;AAlDsB,OAAzB;;AAsDA;;;;;;;;;;;;;;;;;;AAKA,YAAMmB,kBAAkB,IAAIC,OAAJ,EAAxB;;;;;;;;;;;;;;;AAEA3D,aAAO4C,SAASlB,SAAhB,EAA2B;;AAEzBkC,kBAAU;AACR,iBAAOF,gBAAgBG,WAAhB,CAA4B,IAA5B,EAAkC,MAAMrD,MAAM,IAAN,CAAxC,CAAP;AACD,SAJwB;;AAMzBsD,iBAASC,QAAT,EAAmB;AACjB,iBAAO,KAAKH,OAAL,GAAeE,QAAf,CAAwBC,QAAxB,CAAP;AACD,SARwB;;AAUzBC,qBAAaD,QAAb,EAAuB;AACrB,iBAAO,KAAKH,OAAL,GAAeI,YAAf,CAA4BD,QAA5B,CAAP;AACD,SAZwB;;AAczBE,sBAAcF,QAAd,EAAwB;AACtB,iBAAO,KAAKH,OAAL,GAAeK,aAAf,CAA6BF,QAA7B,CAAP;AACD;;AAhBwB,OAA3B","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/active-expression.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';\nconst SYNTAX_PLUGINS = [jsx, doExpressions, functionBind, asyncGenerators];\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) {\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    const babelConfig = Object.assign({}, BABEL_CONFIG_DEFAULT, {\n      plugins: [...SYNTAX_PLUGINS, iteratorPlugin]\n    });\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\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});"]}