react 0.2.5 → 0.3.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (270) hide show
  1. package/README.md +189 -114
  2. package/doc/alternate-dsls.md +103 -0
  3. package/doc/default-simple.dot +19 -0
  4. package/doc/default-simple.dot.png +0 -0
  5. package/{lib → dsl}/chain.js +5 -3
  6. package/{lib → dsl}/fstr.js +17 -6
  7. package/{lib → dsl}/pcode.js +19 -8
  8. package/examples/chain-events1.js +28 -7
  9. package/examples/chain1.js +2 -2
  10. package/examples/default-events1.js +33 -6
  11. package/examples/default-log-events.js +43 -0
  12. package/examples/default-simple.js +45 -0
  13. package/examples/fstr-events1.js +4 -17
  14. package/examples/fstr1.js +3 -2
  15. package/examples/pcode1.js +2 -2
  16. package/externalDocs/Dataflow - Wikipedia, the free encyclopedia.html +675 -0
  17. package/externalDocs/Dataflow - Wikipedia, the free encyclopedia_files/37px-Wiktionary-logo-en.svg.png +0 -0
  18. package/externalDocs/Dataflow - Wikipedia, the free encyclopedia_files/closewindow.png +0 -0
  19. package/externalDocs/Dataflow - Wikipedia, the free encyclopedia_files/index(1).php +407 -0
  20. package/externalDocs/Dataflow - Wikipedia, the free encyclopedia_files/index.php +130 -0
  21. package/externalDocs/Dataflow - Wikipedia, the free encyclopedia_files/load(1).php +3 -0
  22. package/externalDocs/Dataflow - Wikipedia, the free encyclopedia_files/load(10).php +89 -0
  23. package/externalDocs/Dataflow - Wikipedia, the free encyclopedia_files/load(2).php +23 -0
  24. package/externalDocs/Dataflow - Wikipedia, the free encyclopedia_files/load(3).php +153 -0
  25. package/externalDocs/Dataflow - Wikipedia, the free encyclopedia_files/load(4).php +6 -0
  26. package/externalDocs/Dataflow - Wikipedia, the free encyclopedia_files/load(5).php +3 -0
  27. package/externalDocs/Dataflow - Wikipedia, the free encyclopedia_files/load(6).php +96 -0
  28. package/externalDocs/Dataflow - Wikipedia, the free encyclopedia_files/load(7).php +16 -0
  29. package/externalDocs/Dataflow - Wikipedia, the free encyclopedia_files/load(8).php +14 -0
  30. package/externalDocs/Dataflow - Wikipedia, the free encyclopedia_files/load(9).php +123 -0
  31. package/externalDocs/Dataflow - Wikipedia, the free encyclopedia_files/load.php +3 -0
  32. package/externalDocs/Dataflow - Wikipedia, the free encyclopedia_files/poweredby_mediawiki_88x31.png +0 -0
  33. package/externalDocs/Dataflow - Wikipedia, the free encyclopedia_files/saved_resource +1 -0
  34. package/externalDocs/Dataflow - Wikipedia, the free encyclopedia_files/search-ltr.png +0 -0
  35. package/externalDocs/Dataflow - Wikipedia, the free encyclopedia_files/wikimedia-button.png +0 -0
  36. package/externalDocs/Dataflow Programming Handling Huge Data Loads Without Adding Complexity Dr Dobb's.html +1369 -0
  37. package/externalDocs/Dataflow Programming Handling Huge Data Loads Without Adding Complexity Dr Dobb's_files/121911_DobbsDigest_Cover.jpg +0 -0
  38. package/externalDocs/Dataflow Programming Handling Huge Data Loads Without Adding Complexity Dr Dobb's_files/160-x-600-IMU Impact 2012.jpg +0 -0
  39. package/externalDocs/Dataflow Programming Handling Huge Data Loads Without Adding Complexity Dr Dobb's_files/231400148;kvarticleid=231400148;kauthor=Jim Falgout;loc=100;target=_blank;grp= +68 -0
  40. package/externalDocs/Dataflow Programming Handling Huge Data Loads Without Adding Complexity Dr Dobb's_files/231400148;kvarticleid=231400148;kauthor=Jim Falgout;loc=100;target=_blank;grp=(1) +67 -0
  41. package/externalDocs/Dataflow Programming Handling Huge Data Loads Without Adding Complexity Dr Dobb's_files/231400148;kvarticleid=231400148;kauthor=Jim Falgout;loc=100;target=_blank;grp=(2) +2 -0
  42. package/externalDocs/Dataflow Programming Handling Huge Data Loads Without Adding Complexity Dr Dobb's_files/231400148;kvarticleid=231400148;kauthor=Jim Falgout;loc=100;target=_blank;grp=(3) +2 -0
  43. package/externalDocs/Dataflow Programming Handling Huge Data Loads Without Adding Complexity Dr Dobb's_files/231400148;kvarticleid=231400148;kauthor=Jim Falgout;loc=100;target=_blank;grp=(4) +8 -0
  44. package/externalDocs/Dataflow Programming Handling Huge Data Loads Without Adding Complexity Dr Dobb's_files/231400148;kvarticleid=231400148;kauthor=Jim Falgout;loc=100;target=_blank;grp=(5) +2 -0
  45. package/externalDocs/Dataflow Programming Handling Huge Data Loads Without Adding Complexity Dr Dobb's_files/231400148;kvarticleid=231400148;kauthor=Jim Falgout;loc=100;target=_blank;grp=500202461 +2 -0
  46. package/externalDocs/Dataflow Programming Handling Huge Data Loads Without Adding Complexity Dr Dobb's_files/231400148;kvarticleid=231400148;kauthor=Jim Falgout;loc=100;target=_blank;grp=500202461(1) +2 -0
  47. package/externalDocs/Dataflow Programming Handling Huge Data Loads Without Adding Complexity Dr Dobb's_files/231400148;kvarticleid=231400148;kauthor=Jim Falgout;loc=100;target=_blank;grp=500202461(2) +2 -0
  48. package/externalDocs/Dataflow Programming Handling Huge Data Loads Without Adding Complexity Dr Dobb's_files/231400148;kvarticleid=231400148;kauthor=Jim Falgout;loc=100;target=_blank;grp=500202461(3) +2 -0
  49. package/externalDocs/Dataflow Programming Handling Huge Data Loads Without Adding Complexity Dr Dobb's_files/231400148;kvarticleid=231400148;kauthor=Jim Falgout;loc=100;target=_blank;grp=500202461(4) +2 -0
  50. package/externalDocs/Dataflow Programming Handling Huge Data Loads Without Adding Complexity Dr Dobb's_files/231400148;kvarticleid=231400148;kauthor=Jim Falgout;loc=100;target=_blank;grp=500202461(5) +431 -0
  51. package/externalDocs/Dataflow Programming Handling Huge Data Loads Without Adding Complexity Dr Dobb's_files/231400148;kvarticleid=231400148;kauthor=Jim Falgout;loc=100;target=_blank;grp=500202461(6) +2 -0
  52. package/externalDocs/Dataflow Programming Handling Huge Data Loads Without Adding Complexity Dr Dobb's_files/231400148;kvarticleid=231400148;kauthor=Jim Falgout;loc=100;target=_blank;grp=500202461(7) +431 -0
  53. package/externalDocs/Dataflow Programming Handling Huge Data Loads Without Adding Complexity Dr Dobb's_files/231400148;kvarticleid=231400148;kauthor=Jim Falgout;loc=100;target=_blank;grp=500202461(8) +2 -0
  54. package/externalDocs/Dataflow Programming Handling Huge Data Loads Without Adding Complexity Dr Dobb's_files/231400148;kvarticleid=231400148;kauthor=Jim Falgout;loc=100;target=_blank;grp=500202461(9) +2 -0
  55. package/externalDocs/Dataflow Programming Handling Huge Data Loads Without Adding Complexity Dr Dobb's_files/Ad0St1Sz6Sq0V0Id20628317.gif +0 -0
  56. package/externalDocs/Dataflow Programming Handling Huge Data Loads Without Adding Complexity Dr Dobb's_files/Ad2331174St1Sz225Sq20825250V0Id4.gif +0 -0
  57. package/externalDocs/Dataflow Programming Handling Huge Data Loads Without Adding Complexity Dr Dobb's_files/AdTracImage.gif +0 -0
  58. package/externalDocs/Dataflow Programming Handling Huge Data Loads Without Adding Complexity Dr Dobb's_files/Default_Size_16_1x1.gif +0 -0
  59. package/externalDocs/Dataflow Programming Handling Huge Data Loads Without Adding Complexity Dr Dobb's_files/FB.Share +9 -0
  60. package/externalDocs/Dataflow Programming Handling Huge Data Loads Without Adding Complexity Dr Dobb's_files/addthis_widget.js +2 -0
  61. package/externalDocs/Dataflow Programming Handling Huge Data Loads Without Adding Complexity Dr Dobb's_files/adlink_5242_1183459_0_154_AdId=2355270;BnId=1;itime=820768810;key=231400148+_database_231400148;link= +11 -0
  62. package/externalDocs/Dataflow Programming Handling Huge Data Loads Without Adding Complexity Dr Dobb's_files/beacon.js +7 -0
  63. package/externalDocs/Dataflow Programming Handling Huge Data Loads Without Adding Complexity Dr Dobb's_files/checkauth.js +18 -0
  64. package/externalDocs/Dataflow Programming Handling Huge Data Loads Without Adding Complexity Dr Dobb's_files/colorbox.css +49 -0
  65. package/externalDocs/Dataflow Programming Handling Huge Data Loads Without Adding Complexity Dr Dobb's_files/convert_data.js +1 -0
  66. package/externalDocs/Dataflow Programming Handling Huge Data Loads Without Adding Complexity Dr Dobb's_files/count(1).js +5 -0
  67. package/externalDocs/Dataflow Programming Handling Huge Data Loads Without Adding Complexity Dr Dobb's_files/count.js +5 -0
  68. package/externalDocs/Dataflow Programming Handling Huge Data Loads Without Adding Complexity Dr Dobb's_files/count.json +1 -0
  69. package/externalDocs/Dataflow Programming Handling Huge Data Loads Without Adding Complexity Dr Dobb's_files/dataflow1.gif +0 -0
  70. package/externalDocs/Dataflow Programming Handling Huge Data Loads Without Adding Complexity Dr Dobb's_files/def.html +126 -0
  71. package/externalDocs/Dataflow Programming Handling Huge Data Loads Without Adding Complexity Dr Dobb's_files/defaults.css +1 -0
  72. package/externalDocs/Dataflow Programming Handling Huge Data Loads Without Adding Complexity Dr Dobb's_files/detect.js +91 -0
  73. package/externalDocs/Dataflow Programming Handling Huge Data Loads Without Adding Complexity Dr Dobb's_files/devtest_left-col-slim.css +30 -0
  74. package/externalDocs/Dataflow Programming Handling Huge Data Loads Without Adding Complexity Dr Dobb's_files/disqus.js +327 -0
  75. package/externalDocs/Dataflow Programming Handling Huge Data Loads Without Adding Complexity Dr Dobb's_files/disqusHints.css +34 -0
  76. package/externalDocs/Dataflow Programming Handling Huge Data Loads Without Adding Complexity Dr Dobb's_files/disqusHints.js +8 -0
  77. package/externalDocs/Dataflow Programming Handling Huge Data Loads Without Adding Complexity Dr Dobb's_files/disqusLoggedOff(1).css +24 -0
  78. package/externalDocs/Dataflow Programming Handling Huge Data Loads Without Adding Complexity Dr Dobb's_files/disqusLoggedOff.css +24 -0
  79. package/externalDocs/Dataflow Programming Handling Huge Data Loads Without Adding Complexity Dr Dobb's_files/dobbs_disqus_logo.gif +0 -0
  80. package/externalDocs/Dataflow Programming Handling Huge Data Loads Without Adding Complexity Dr Dobb's_files/dsqcd10c7f376188a4a2ca3e8fea2c03aeb.css +1 -0
  81. package/externalDocs/Dataflow Programming Handling Huge Data Loads Without Adding Complexity Dr Dobb's_files/dsqcd10c7f376188a4a2ca3e8fea2c03aeb.js +1 -0
  82. package/externalDocs/Dataflow Programming Handling Huge Data Loads Without Adding Complexity Dr Dobb's_files/elqCfg.js +55 -0
  83. package/externalDocs/Dataflow Programming Handling Huge Data Loads Without Adding Complexity Dr Dobb's_files/elqImg.js +12 -0
  84. package/externalDocs/Dataflow Programming Handling Huge Data Loads Without Adding Complexity Dr Dobb's_files/embed.js +76 -0
  85. package/externalDocs/Dataflow Programming Handling Huge Data Loads Without Adding Complexity Dr Dobb's_files/experience_util.js +636 -0
  86. package/externalDocs/Dataflow Programming Handling Huge Data Loads Without Adding Complexity Dr Dobb's_files/fastbutton.html +11 -0
  87. package/externalDocs/Dataflow Programming Handling Huge Data Loads Without Adding Complexity Dr Dobb's_files/ga.js +51 -0
  88. package/externalDocs/Dataflow Programming Handling Huge Data Loads Without Adding Complexity Dr Dobb's_files/h-facebook_sm.png +0 -0
  89. package/externalDocs/Dataflow Programming Handling Huge Data Loads Without Adding Complexity Dr Dobb's_files/h-nav.css +798 -0
  90. package/externalDocs/Dataflow Programming Handling Huge Data Loads Without Adding Complexity Dr Dobb's_files/h-twitter_sm.png +0 -0
  91. package/externalDocs/Dataflow Programming Handling Huge Data Loads Without Adding Complexity Dr Dobb's_files/h_s_code_remote.js +377 -0
  92. package/externalDocs/Dataflow Programming Handling Huge Data Loads Without Adding Complexity Dr Dobb's_files/hintbox_info.jpg +0 -0
  93. package/externalDocs/Dataflow Programming Handling Huge Data Loads Without Adding Complexity Dr Dobb's_files/hub.1326407570.html +3 -0
  94. package/externalDocs/Dataflow Programming Handling Huge Data Loads Without Adding Complexity Dr Dobb's_files/in.js +76 -0
  95. package/externalDocs/Dataflow Programming Handling Huge Data Loads Without Adding Complexity Dr Dobb's_files/insight.min.js +55 -0
  96. package/externalDocs/Dataflow Programming Handling Huge Data Loads Without Adding Complexity Dr Dobb's_files/jquery-1.2.6.min.js +32 -0
  97. package/externalDocs/Dataflow Programming Handling Huge Data Loads Without Adding Complexity Dr Dobb's_files/jquery-1.4.2.min.js +154 -0
  98. package/externalDocs/Dataflow Programming Handling Huge Data Loads Without Adding Complexity Dr Dobb's_files/jquery-ui-1.8rc3.custom.min.js +374 -0
  99. package/externalDocs/Dataflow Programming Handling Huge Data Loads Without Adding Complexity Dr Dobb's_files/jquery.colorbox-min.js +4 -0
  100. package/externalDocs/Dataflow Programming Handling Huge Data Loads Without Adding Complexity Dr Dobb's_files/jquery.min.js +154 -0
  101. package/externalDocs/Dataflow Programming Handling Huge Data Loads Without Adding Complexity Dr Dobb's_files/lib.js +212 -0
  102. package/externalDocs/Dataflow Programming Handling Huge Data Loads Without Adding Complexity Dr Dobb's_files/like.html +214 -0
  103. package/externalDocs/Dataflow Programming Handling Huge Data Loads Without Adding Complexity Dr Dobb's_files/noavatar32.png +0 -0
  104. package/externalDocs/Dataflow Programming Handling Huge Data Loads Without Adding Complexity Dr Dobb's_files/nodetag.js +18 -0
  105. package/externalDocs/Dataflow Programming Handling Huge Data Loads Without Adding Complexity Dr Dobb's_files/nonSecureAnonymousFramework +2913 -0
  106. package/externalDocs/Dataflow Programming Handling Huge Data Loads Without Adding Complexity Dr Dobb's_files/p.json +1 -0
  107. package/externalDocs/Dataflow Programming Handling Huge Data Loads Without Adding Complexity Dr Dobb's_files/plusone.js +32 -0
  108. package/externalDocs/Dataflow Programming Handling Huge Data Loads Without Adding Complexity Dr Dobb's_files/popwindow.js +24 -0
  109. package/externalDocs/Dataflow Programming Handling Huge Data Loads Without Adding Complexity Dr Dobb's_files/q4OyybLB0-A.js +91 -0
  110. package/externalDocs/Dataflow Programming Handling Huge Data Loads Without Adding Complexity Dr Dobb's_files/quant.js +28 -0
  111. package/externalDocs/Dataflow Programming Handling Huge Data Loads Without Adding Complexity Dr Dobb's_files/qxvZoiHdpAF.css +192 -0
  112. package/externalDocs/Dataflow Programming Handling Huge Data Loads Without Adding Complexity Dr Dobb's_files/reply.html +160 -0
  113. package/externalDocs/Dataflow Programming Handling Huge Data Loads Without Adding Complexity Dr Dobb's_files/rss.gif +0 -0
  114. package/externalDocs/Dataflow Programming Handling Huge Data Loads Without Adding Complexity Dr Dobb's_files/s.js +1 -0
  115. package/externalDocs/Dataflow Programming Handling Huge Data Loads Without Adding Complexity Dr Dobb's_files/saved_resource +421 -0
  116. package/externalDocs/Dataflow Programming Handling Huge Data Loads Without Adding Complexity Dr Dobb's_files/saved_resource(1) +1 -0
  117. package/externalDocs/Dataflow Programming Handling Huge Data Loads Without Adding Complexity Dr Dobb's_files/saved_resource(2) +341 -0
  118. package/externalDocs/Dataflow Programming Handling Huge Data Loads Without Adding Complexity Dr Dobb's_files/saved_resource(3) +127 -0
  119. package/externalDocs/Dataflow Programming Handling Huge Data Loads Without Adding Complexity Dr Dobb's_files/script84.js +113 -0
  120. package/externalDocs/Dataflow Programming Handling Huge Data Loads Without Adding Complexity Dr Dobb's_files/scripts.js +30 -0
  121. package/externalDocs/Dataflow Programming Handling Huge Data Loads Without Adding Complexity Dr Dobb's_files/sh72.html +5 -0
  122. package/externalDocs/Dataflow Programming Handling Huge Data Loads Without Adding Complexity Dr Dobb's_files/shAutoloader.js +17 -0
  123. package/externalDocs/Dataflow Programming Handling Huge Data Loads Without Adding Complexity Dr Dobb's_files/shBrushAS3.js +59 -0
  124. package/externalDocs/Dataflow Programming Handling Huge Data Loads Without Adding Complexity Dr Dobb's_files/shBrushAppleScript.js +75 -0
  125. package/externalDocs/Dataflow Programming Handling Huge Data Loads Without Adding Complexity Dr Dobb's_files/shBrushBash.js +59 -0
  126. package/externalDocs/Dataflow Programming Handling Huge Data Loads Without Adding Complexity Dr Dobb's_files/shBrushCSharp.js +65 -0
  127. package/externalDocs/Dataflow Programming Handling Huge Data Loads Without Adding Complexity Dr Dobb's_files/shBrushColdFusion.js +100 -0
  128. package/externalDocs/Dataflow Programming Handling Huge Data Loads Without Adding Complexity Dr Dobb's_files/shBrushCpp.js +97 -0
  129. package/externalDocs/Dataflow Programming Handling Huge Data Loads Without Adding Complexity Dr Dobb's_files/shBrushCss.js +91 -0
  130. package/externalDocs/Dataflow Programming Handling Huge Data Loads Without Adding Complexity Dr Dobb's_files/shBrushDelphi.js +55 -0
  131. package/externalDocs/Dataflow Programming Handling Huge Data Loads Without Adding Complexity Dr Dobb's_files/shBrushDiff.js +41 -0
  132. package/externalDocs/Dataflow Programming Handling Huge Data Loads Without Adding Complexity Dr Dobb's_files/shBrushErlang.js +52 -0
  133. package/externalDocs/Dataflow Programming Handling Huge Data Loads Without Adding Complexity Dr Dobb's_files/shBrushGroovy.js +67 -0
  134. package/externalDocs/Dataflow Programming Handling Huge Data Loads Without Adding Complexity Dr Dobb's_files/shBrushJScript.js +52 -0
  135. package/externalDocs/Dataflow Programming Handling Huge Data Loads Without Adding Complexity Dr Dobb's_files/shBrushJava.js +57 -0
  136. package/externalDocs/Dataflow Programming Handling Huge Data Loads Without Adding Complexity Dr Dobb's_files/shBrushJavaFX.js +58 -0
  137. package/externalDocs/Dataflow Programming Handling Huge Data Loads Without Adding Complexity Dr Dobb's_files/shBrushPerl.js +72 -0
  138. package/externalDocs/Dataflow Programming Handling Huge Data Loads Without Adding Complexity Dr Dobb's_files/shBrushPhp.js +88 -0
  139. package/externalDocs/Dataflow Programming Handling Huge Data Loads Without Adding Complexity Dr Dobb's_files/shBrushPlain.js +33 -0
  140. package/externalDocs/Dataflow Programming Handling Huge Data Loads Without Adding Complexity Dr Dobb's_files/shBrushPowerShell.js +74 -0
  141. package/externalDocs/Dataflow Programming Handling Huge Data Loads Without Adding Complexity Dr Dobb's_files/shBrushPython.js +64 -0
  142. package/externalDocs/Dataflow Programming Handling Huge Data Loads Without Adding Complexity Dr Dobb's_files/shBrushRuby.js +55 -0
  143. package/externalDocs/Dataflow Programming Handling Huge Data Loads Without Adding Complexity Dr Dobb's_files/shBrushSass.js +94 -0
  144. package/externalDocs/Dataflow Programming Handling Huge Data Loads Without Adding Complexity Dr Dobb's_files/shBrushScala.js +51 -0
  145. package/externalDocs/Dataflow Programming Handling Huge Data Loads Without Adding Complexity Dr Dobb's_files/shBrushSql.js +66 -0
  146. package/externalDocs/Dataflow Programming Handling Huge Data Loads Without Adding Complexity Dr Dobb's_files/shBrushVb.js +56 -0
  147. package/externalDocs/Dataflow Programming Handling Huge Data Loads Without Adding Complexity Dr Dobb's_files/shBrushXml.js +69 -0
  148. package/externalDocs/Dataflow Programming Handling Huge Data Loads Without Adding Complexity Dr Dobb's_files/shCore.css +226 -0
  149. package/externalDocs/Dataflow Programming Handling Huge Data Loads Without Adding Complexity Dr Dobb's_files/shCoreDefault.css +333 -0
  150. package/externalDocs/Dataflow Programming Handling Huge Data Loads Without Adding Complexity Dr Dobb's_files/shCore_new.js +17 -0
  151. package/externalDocs/Dataflow Programming Handling Huge Data Loads Without Adding Complexity Dr Dobb's_files/shLegacy.js +17 -0
  152. package/externalDocs/Dataflow Programming Handling Huge Data Loads Without Adding Complexity Dr Dobb's_files/shThemeDefault.css +117 -0
  153. package/externalDocs/Dataflow Programming Handling Huge Data Loads Without Adding Complexity Dr Dobb's_files/share-button-css +67 -0
  154. package/externalDocs/Dataflow Programming Handling Huge Data Loads Without Adding Complexity Dr Dobb's_files/share_email_icon.gif +0 -0
  155. package/externalDocs/Dataflow Programming Handling Huge Data Loads Without Adding Complexity Dr Dobb's_files/share_print_icon.gif +0 -0
  156. package/externalDocs/Dataflow Programming Handling Huge Data Loads Without Adding Complexity Dr Dobb's_files/sidebar.js +88 -0
  157. package/externalDocs/Dataflow Programming Handling Huge Data Loads Without Adding Complexity Dr Dobb's_files/superfooter_936.css +186 -0
  158. package/externalDocs/Dataflow Programming Handling Huge Data Loads Without Adding Complexity Dr Dobb's_files/svrGP.aspx +0 -0
  159. package/externalDocs/Dataflow Programming Handling Huge Data Loads Without Adding Complexity Dr Dobb's_files/t.gif +0 -0
  160. package/externalDocs/Dataflow Programming Handling Huge Data Loads Without Adding Complexity Dr Dobb's_files/thickbox.js +343 -0
  161. package/externalDocs/Dataflow Programming Handling Huge Data Loads Without Adding Complexity Dr Dobb's_files/thread.js +128 -0
  162. package/externalDocs/Dataflow Programming Handling Huge Data Loads Without Adding Complexity Dr Dobb's_files/togglediv.js +15 -0
  163. package/externalDocs/Dataflow Programming Handling Huge Data Loads Without Adding Complexity Dr Dobb's_files/tweet_button.html +3 -0
  164. package/externalDocs/Dataflow Programming Handling Huge Data Loads Without Adding Complexity Dr Dobb's_files/ubmtechweb_logo_sm.gif +0 -0
  165. package/externalDocs/Dataflow Programming Handling Huge Data Loads Without Adding Complexity Dr Dobb's_files/upload.html +91 -0
  166. package/externalDocs/Dataflow Programming Handling Huge Data Loads Without Adding Complexity Dr Dobb's_files/welcome.js +7 -0
  167. package/externalDocs/Dataflow Programming Handling Huge Data Loads Without Adding Complexity Dr Dobb's_files/widget74.css +1 -0
  168. package/externalDocs/Dataflow Programming Handling Huge Data Loads Without Adding Complexity Dr Dobb's_files/widgets.js +40 -0
  169. package/externalDocs/Reactive programming - Wikipedia, the free encyclopedia.html +904 -0
  170. package/externalDocs/Reactive programming - Wikipedia, the free encyclopedia_files/50px-Question_book-new.svg.png +0 -0
  171. package/externalDocs/Reactive programming - Wikipedia, the free encyclopedia_files/closewindow.png +0 -0
  172. package/externalDocs/Reactive programming - Wikipedia, the free encyclopedia_files/index(1).php +407 -0
  173. package/externalDocs/Reactive programming - Wikipedia, the free encyclopedia_files/index.php +130 -0
  174. package/externalDocs/Reactive programming - Wikipedia, the free encyclopedia_files/load(1).php +3 -0
  175. package/externalDocs/Reactive programming - Wikipedia, the free encyclopedia_files/load(10).php +89 -0
  176. package/externalDocs/Reactive programming - Wikipedia, the free encyclopedia_files/load(2).php +23 -0
  177. package/externalDocs/Reactive programming - Wikipedia, the free encyclopedia_files/load(3).php +153 -0
  178. package/externalDocs/Reactive programming - Wikipedia, the free encyclopedia_files/load(4).php +6 -0
  179. package/externalDocs/Reactive programming - Wikipedia, the free encyclopedia_files/load(5).php +3 -0
  180. package/externalDocs/Reactive programming - Wikipedia, the free encyclopedia_files/load(6).php +96 -0
  181. package/externalDocs/Reactive programming - Wikipedia, the free encyclopedia_files/load(7).php +16 -0
  182. package/externalDocs/Reactive programming - Wikipedia, the free encyclopedia_files/load(8).php +14 -0
  183. package/externalDocs/Reactive programming - Wikipedia, the free encyclopedia_files/load(9).php +123 -0
  184. package/externalDocs/Reactive programming - Wikipedia, the free encyclopedia_files/load.php +3 -0
  185. package/externalDocs/Reactive programming - Wikipedia, the free encyclopedia_files/poweredby_mediawiki_88x31.png +0 -0
  186. package/externalDocs/Reactive programming - Wikipedia, the free encyclopedia_files/saved_resource +1 -0
  187. package/externalDocs/Reactive programming - Wikipedia, the free encyclopedia_files/search-ltr.png +0 -0
  188. package/externalDocs/Reactive programming - Wikipedia, the free encyclopedia_files/wikimedia-button.png +0 -0
  189. package/externalDocs/The Step of the Conductor - How To Node - NodeJS.html +113 -0
  190. package/externalDocs/The Step of the Conductor - How To Node - NodeJS_files/6654_111305815684_541245684_2583159_5383291_n_normal.jpg +0 -0
  191. package/externalDocs/The Step of the Conductor - How To Node - NodeJS_files/MARC3_normal.jpg +2 -0
  192. package/externalDocs/The Step of the Conductor - How To Node - NodeJS_files/beacon.js +7 -0
  193. package/externalDocs/The Step of the Conductor - How To Node - NodeJS_files/c953ddd239707998340e1a6fbb3eeb46 +0 -0
  194. package/externalDocs/The Step of the Conductor - How To Node - NodeJS_files/c953ddd239707998340e1a6fbb3eeb46_normal.jpeg +0 -0
  195. package/externalDocs/The Step of the Conductor - How To Node - NodeJS_files/clouds2_normal.jpg +0 -0
  196. package/externalDocs/The Step of the Conductor - How To Node - NodeJS_files/count.json +1 -0
  197. package/externalDocs/The Step of the Conductor - How To Node - NodeJS_files/def.html +126 -0
  198. package/externalDocs/The Step of the Conductor - How To Node - NodeJS_files/defaults.css +1 -0
  199. package/externalDocs/The Step of the Conductor - How To Node - NodeJS_files/disqus.js +327 -0
  200. package/externalDocs/The Step of the Conductor - How To Node - NodeJS_files/dsq7884a9652e94555c70f96b6be63be216.css +1 -0
  201. package/externalDocs/The Step of the Conductor - How To Node - NodeJS_files/dsq7884a9652e94555c70f96b6be63be216.js +66 -0
  202. package/externalDocs/The Step of the Conductor - How To Node - NodeJS_files/embed.js +76 -0
  203. package/externalDocs/The Step of the Conductor - How To Node - NodeJS_files/example1.dot +0 -0
  204. package/externalDocs/The Step of the Conductor - How To Node - NodeJS_files/ga.js +51 -0
  205. package/externalDocs/The Step of the Conductor - How To Node - NodeJS_files/get_num_replies.js +79 -0
  206. package/externalDocs/The Step of the Conductor - How To Node - NodeJS_files/hub.1326407570.html +3 -0
  207. package/externalDocs/The Step of the Conductor - How To Node - NodeJS_files/lib.js +212 -0
  208. package/externalDocs/The Step of the Conductor - How To Node - NodeJS_files/noavatar32.png +0 -0
  209. package/externalDocs/The Step of the Conductor - How To Node - NodeJS_files/quant.js +28 -0
  210. package/externalDocs/The Step of the Conductor - How To Node - NodeJS_files/reply.html +160 -0
  211. package/externalDocs/The Step of the Conductor - How To Node - NodeJS_files/t.gif +0 -0
  212. package/externalDocs/The Step of the Conductor - How To Node - NodeJS_files/thread.js +128 -0
  213. package/externalDocs/The Step of the Conductor - How To Node - NodeJS_files/tweet_button.1326407570.html +3 -0
  214. package/externalDocs/The Step of the Conductor - How To Node - NodeJS_files/twitter_normal.jpg +2 -0
  215. package/externalDocs/The Step of the Conductor - How To Node - NodeJS_files/upload.html +91 -0
  216. package/externalDocs/The Step of the Conductor - How To Node - NodeJS_files/widgets.js +40 -0
  217. package/lib/base-task.js +8 -6
  218. package/lib/cb-task.js +14 -1
  219. package/lib/core.js +43 -12
  220. package/lib/dsl.js +14 -6
  221. package/lib/event-manager.js +29 -16
  222. package/lib/finalcb-first-task.js +16 -10
  223. package/lib/finalcb-task.js +17 -10
  224. package/lib/input-parser.js +7 -3
  225. package/lib/log-events.js +71 -0
  226. package/lib/parse.js +6 -3
  227. package/lib/promise-task.js +89 -0
  228. package/lib/ret-task.js +1 -1
  229. package/lib/task.js +32 -23
  230. package/lib/track-tasks.js +117 -0
  231. package/lib/validate.js +3 -3
  232. package/lib/vcon.js +6 -3
  233. package/lib/when-task.js +81 -0
  234. package/package.json +5 -3
  235. package/promise-resolve.js +35 -0
  236. package/react.js +0 -4
  237. package/test/core-deferred.test.js +134 -0
  238. package/test/core-promised.test.js +132 -0
  239. package/test/core-when.test.js +84 -0
  240. package/test/core.test.js +108 -60
  241. package/test/dsl.test.js +58 -6
  242. package/test/{chain.test.js → dsl/chain.test.js} +85 -1
  243. package/test/{fstr.test.js → dsl/fstr.test.js} +13 -1
  244. package/test/{pcode.test.js → dsl/pcode.test.js} +128 -1
  245. package/test/exec-options.test.js +2 -1
  246. package/test/finalcb-task.test.js +6 -5
  247. package/test/input-parser.test.js +10 -6
  248. package/test/module-use.test.js +13 -199
  249. package/test/promise-auto-resolve.test.js +51 -0
  250. package/test/validate.test.js +5 -2
  251. package/test/vcon.test.js +13 -0
  252. package/lib/.#event-manager.js +0 -1
  253. package/oldExamples/analyze.js +0 -29
  254. package/oldExamples/analyze2.js +0 -29
  255. package/oldExamples/example10-dsl.js +0 -63
  256. package/oldExamples/example11.js +0 -62
  257. package/oldExamples/example12.js +0 -63
  258. package/oldExamples/example13.js +0 -63
  259. package/oldExamples/example14.js +0 -63
  260. package/oldExamples/example15.js +0 -75
  261. package/oldExamples/example6-ast.js +0 -47
  262. package/oldExamples/example6-dsl.js +0 -49
  263. package/oldExamples/example8-ast.js +0 -55
  264. package/oldExamples/example8-dsl.js +0 -53
  265. package/oldExamples/example9-ast.js +0 -58
  266. package/oldExamples/example9-dsl.js +0 -57
  267. package/oldExamples/function-str-ex1.js +0 -33
  268. package/oldExamples/function-str-ex2.js +0 -67
  269. package/oldExamples/trait1.js +0 -41
  270. package/oldExamples/trait2.js +0 -44
package/lib/base-task.js CHANGED
@@ -19,17 +19,18 @@ BaseTask.prototype.isComplete = function () {
19
19
  };
20
20
 
21
21
  BaseTask.prototype.start = function (args) { // mark task as started with args and note time
22
+ /*jshint validthis: true */
22
23
  this.args = args;
23
- this.startTime = Date.now();
24
- if (this.flowEmitter) this.flowEmitter.emitObject(EventManager.TYPES.TASK_BEGIN, this);
24
+ this.env.currentTask = this;
25
+ this.env.flowEmitter.emit(EventManager.TYPES.EXEC_TASK_START, this);
25
26
  };
26
27
 
27
28
  BaseTask.prototype.complete = function (args) { //args that were used are available
28
- this.results = args; // save the results
29
- this.endTime = Date.now();
30
- this.elapsedTime = this.endTime - this.startTime;
31
- if (this.flowEmitter) this.flowEmitter.emitObject(EventManager.TYPES.TASK_COMPLETE, this);
29
+ /*jshint validthis: true */
32
30
  this.status = STATUS.COMPLETE;
31
+ this.results = args;
32
+ this.env.currentTask = this;
33
+ this.env.flowEmitter.emit(EventManager.TYPES.EXEC_TASK_COMPLETE, this);
33
34
  };
34
35
 
35
36
  BaseTask.prototype.functionExists = function (vCon) {
@@ -96,6 +97,7 @@ BaseTask.prototype.isReady = function (vCon, tasksByName) {
96
97
  };
97
98
 
98
99
  BaseTask.prototype.isMethodCall = function () {
100
+ /*jshint regexp: false */
99
101
  return (typeof(this.f) === 'string' && /^.*\..*$/.test(this.f)); //str contains .
100
102
  };
101
103
 
package/lib/cb-task.js CHANGED
@@ -43,6 +43,19 @@ CbTask.validate = function (taskDef) {
43
43
  return errors;
44
44
  };
45
45
 
46
+ CbTask.prototype.prepare = function prepare(handleTaskError, vCon, contExec) {
47
+ var self = this;
48
+ this.cbFun = function (err, arg0, arg1, argn) {
49
+ var args = Array.prototype.slice.call(arguments, 1);
50
+ if (err) { handleTaskError(self, err); return; } //handle error and return, we are done
51
+
52
+ //no error, save callback args to vCon context, then continue execution
53
+ vCon.saveResults(self.out, args);
54
+ self.complete(args);
55
+ contExec();
56
+ };
57
+ };
58
+
46
59
  CbTask.prototype.exec = function exec(vCon, handleError, contExec) {
47
60
  try {
48
61
  var args = this.a.map(function (k) { return vCon.getVar(k); }); //get args from vCon
@@ -51,7 +64,7 @@ CbTask.prototype.exec = function exec(vCon, handleError, contExec) {
51
64
  this.start(args); //note the start time, args
52
65
  args.push(this.cbFun); // push callback fn on end
53
66
  var func = this.f;
54
- var bindObj = null; //global space
67
+ var bindObj = vCon.getVar('this'); //global space or the original this
55
68
  if (this.isMethodCall()) { //if method call then reset func and bindObj
56
69
  func = vCon.getVar(this.f);
57
70
  bindObj = this.getMethodObj(vCon);
package/lib/core.js CHANGED
@@ -7,7 +7,6 @@ var validate = require('./validate.js');
7
7
  var tskutil = require('./task.js');
8
8
  var STATUS = require('./status.js');
9
9
  var VContext = require('./vcon.js');
10
- var FinalCbTask = require('./finalcb-task.js');
11
10
  var EventManager = require('./event-manager.js');
12
11
  var inputParser = require('./input-parser.js');
13
12
  var idGenerator = require('./id.js');
@@ -16,7 +15,17 @@ var reactOptions = {
16
15
  stackTraceLimitMin: 30
17
16
  };
18
17
 
19
- var reactEmitter = EventManager.globalEventManager; // the top emitter
18
+ var reactEmitter = EventManager.global; // the top emitter
19
+
20
+ /**
21
+ merge global react options with parsed options
22
+ */
23
+ function mergeOptions(parsedOptions) {
24
+ return Object.keys(reactOptions).reduce(function (accum, k) {
25
+ if (!accum[k]) accum[k] = reactOptions[k];
26
+ return accum;
27
+ }, parsedOptions);
28
+ }
20
29
 
21
30
  /**
22
31
  Creates react function which the AST can be manipulated and then
@@ -56,32 +65,54 @@ function reactFactory() {
56
65
  Object.keys(newAST).forEach(function (k) { ast[k] = newAST[k]; }); // copy all properties
57
66
  var errors = validate(ast);
58
67
  if (!errors.length) tskutil.nameTasks(ast.tasks); //run this so names can be checked in ast
68
+ if (Object.freeze) { //lets freeze the AST so plugin writers don't accidentally manip the ast
69
+ Object.keys(newAST).forEach(function (k) {
70
+ if (typeof(newAST[k]) === 'object') Object.freeze(newAST[k]);
71
+ });
72
+ Object.freeze(newAST);
73
+ }
59
74
  return errors;
60
75
  }
61
76
 
62
77
  function exec(arg1, arg2, argN, cb) { // called to execute the flow
63
- var parsedInput = inputParser(Array.prototype.slice.call(arguments), ast);
64
- var args = parsedInput.args;
65
- var cbFinal = parsedInput.cb;
66
- var extraArgs = parsedInput.extraArgs; // we'll have these if we need them
67
- var vCon = VContext.create(args, ast.inParams, ast.locals); // create var ctx with in args & locals
68
- var tasks = ast.tasks.map(tskutil.create);
78
+ /*jshint validthis: true */
79
+ var args = Array.prototype.slice.call(arguments);
80
+ var env = {
81
+ execId: idGenerator.createUniqueId(),
82
+ args: args,
83
+ ast: ast,
84
+ flowEmitter: flowEmitter
85
+ };
86
+ env.name = ast.name || env.execId;
87
+ flowEmitter.emit(EventManager.TYPES.EXEC_FLOW_START, env); // hook
88
+ var parsedInput = inputParser(args, ast);
89
+ var vCon = VContext.create(parsedInput.args, ast.inParams, ast.locals, this); // create var ctx with in args & locals
90
+
91
+ env.parsedInput = parsedInput;
92
+ env.options = mergeOptions(parsedInput.options);
93
+ env.vCon = vCon;
94
+ env.taskDefs = ast.tasks.slice(); // create copy
95
+ env.outTaskDef = Object.create(ast.outTask); // create copy
96
+ reactEmitter.emit(EventManager.TYPES.EXEC_TASKS_PRECREATE, env); // hook
97
+
98
+ var tasks = env.taskDefs.map(tskutil.create);
69
99
  var tasksByName = tskutil.nameTasks(tasks); // map names to working tasks
70
- var outTask = tskutil.createOutTask(ast.outTask, cbFinal, tasks, vCon);
100
+ var outTask = tskutil.createOutTask(env.outTaskDef, parsedInput.cb, tasks, vCon, env.options, env);
71
101
  var handleError = tskutil.createErrorHandler(vCon, outTask);
72
102
 
73
103
  function contExec() {
74
104
  if (!outTask.f) { return; } //stop execution, we already hit an error, f was cleared
75
105
  if (outTask.isReady()) return outTask.exec(); // all tasks done, exec cb, return
76
- tskutil.findReadyAndExec(vCon, tasks, tasksByName, handleError, contExec); //exec tasks that ready to run
106
+ tskutil.findReadyAndExec(vCon, tasks, tasksByName, handleError, contExec, env); //exec tasks that ready to run
77
107
  }
78
108
 
79
109
  tasks.forEach(function (t) {
80
110
  t.id = idGenerator.createUniqueId();
81
- t.flowEmitter = flowEmitter;
82
- if (t.type === 'cb') t.cbFun = tskutil.createCallback(t, handleError, vCon, contExec, flowEmitter);
111
+ t.env = env;
112
+ if (t.prepare) t.prepare(handleError, vCon, contExec, flowEmitter);
83
113
  }); // create callbacks
84
114
  contExec(); // start things off
115
+ return outTask.retValue; // could return promise
85
116
  }
86
117
 
87
118
  var reactFn = exec; // make the exec() the function returned
package/lib/dsl.js CHANGED
@@ -6,8 +6,10 @@ var core = require('./core.js');
6
6
  var parse = require('./parse.js');
7
7
  var tutil = require('./task.js');
8
8
 
9
- var MISSING_NAME = 'param[0] should be the flow name, instead found in/out def: %s';
10
- var INOUT_PARAMS_NO_MATCH = 'params in wrong format, wanted "foo, bar cb -> err, baz" - found: %s';
9
+ var MISSING_NAME = 'first flow parameter should be the flow name, but found in/out def: %s';
10
+ var INOUT_PARAMS_NO_MATCH = 'params in wrong format, wanted "foo, bar, cb -> err, baz" - found: %s';
11
+ var MISSING_ERR = 'callback specified, but first out param was not "err", use for clarity. Found in/out def: %s';
12
+ var MISSING_CB = 'found err param, but cb/callback is not specified, is this cb-style async or sync function? Found in/out def: %s';
11
13
  var EXTRA_TASKARG = 'extra unmatched task arg: %s';
12
14
 
13
15
  var INOUT_RE = /\->/; // used to detect missing name, in/out as first arg
@@ -25,12 +27,18 @@ function filterOutLeadingErrParam(args) { // if leading err param, filter it out
25
27
  }
26
28
 
27
29
  var inOutDefParse = {
28
- regex: /^([^\-]*)(->\s*(.*))?$/i,
29
- fn: function (m) {
30
- var inParams = parse.splitTrimFilterArgs(m[1]);
30
+ splitStr: '->',
31
+ fn: function (m, origStr) {
32
+ var inParams = parse.splitTrimFilterArgs(m[0]);
31
33
  var lastParam = inParams[inParams.length - 1];
32
34
  var type = (lastParam && CB_NAMES_RE.test(lastParam)) ? 'cb' : 'ret';
33
- var outParams = parse.splitTrimFilterArgs(m[3]);
35
+ var outParams = parse.splitTrimFilterArgs(m[1]);
36
+ var firstOutParam = outParams[0];
37
+ if (type === 'cb' && (!firstOutParam || !ERR_NAMES_RE.test(firstOutParam))) {
38
+ throw new Error(sprintf(MISSING_ERR, origStr)); // found cb, but no err param
39
+ } else if (type === 'ret' && firstOutParam && ERR_NAMES_RE.test(firstOutParam)) {
40
+ throw new Error(sprintf(MISSING_CB, origStr)); // found err but not cb param
41
+ }
34
42
  return {
35
43
  type: type,
36
44
  inDef: filterOutTrailingCbParam(inParams),
@@ -3,12 +3,30 @@
3
3
  var EventEmitter2 = require('eventemitter2').EventEmitter2;
4
4
 
5
5
  var EVENT_EMITTER2_CONFIG = {
6
- wildcard: true
6
+ wildcard: true, // should the event emitter use wildcards.
7
+ delimiter: '.', // the delimiter used to segment namespaces, defaults to `.`.
8
+ maxListeners: 30 // the max number of listeners that can be assigned to an event, defaults to 10.
7
9
  };
8
10
 
9
11
  var TYPES = {
10
- TASK_BEGIN: 'task.begin',
11
- TASK_COMPLETE: 'task.complete'
12
+ // Flow monitoring events and their params
13
+ FLOW_BEGIN: 'flow.begin', // env
14
+ TASK_BEGIN: 'task.begin', // task
15
+ TASK_COMPLETE: 'task.complete', // task
16
+ TASK_ERRORED: 'task.errored', // task
17
+ FLOW_COMPLETE: 'flow.complete', // env
18
+ FLOW_ERRORED: 'flow.errored', // env
19
+
20
+ // Internal Hooks
21
+ EXEC_FLOW_START: 'exec.flow.start', // env
22
+ EXEC_INPUT_PREPROCESS: 'exec.input.preprocess', // parsedInput
23
+ EXEC_TASKS_PRECREATE: 'exec.tasks.precreate', // env
24
+ EXEC_OUTTASK_CREATE: 'exec.outTask.create', // outTaskOptions
25
+ EXEC_TASK_START: 'exec.task.start', // task
26
+ EXEC_TASK_COMPLETE: 'exec.task.complete', // task
27
+ EXEC_TASK_ERRORED: 'exec.task.errored', // task
28
+ EXEC_FLOW_COMPLETE: 'exec.flow.complete', // env
29
+ EXEC_FLOW_ERRORED: 'exec.flow.errored' // env
12
30
  };
13
31
 
14
32
  /**
@@ -21,6 +39,9 @@ function EventManager() {
21
39
 
22
40
  EventManager.create = function () { return new EventManager(); };
23
41
 
42
+ EventManager.TYPES = TYPES;
43
+ EventManager.prototype.TYPES = TYPES;
44
+
24
45
  EventManager.prototype.isEnabled = function () { // if has listener or an ancestor has listener
25
46
  return (this.emitter || (this.parent && this.parent.isEnabled()));
26
47
  };
@@ -36,23 +57,15 @@ EventManager.prototype.on = function (event, listener) {
36
57
  };
37
58
 
38
59
  EventManager.prototype.emit = function (event, arg1, arg2, argN) {
60
+ if (event === undefined) throw new Error('event is undefined');
39
61
  if (this.emitter) this.emitter.emit.apply(this.emitter, arguments);
40
62
  if (this.parent && this.parent.isEnabled()) this.parent.emit.apply(this.parent, arguments);
41
63
  };
42
64
 
43
- /**
44
- Emit an object augmented with standard fields.
45
- Copies object and adds standard fields:
46
- event: event type
47
- time: current time
48
- */
49
- EventManager.prototype.emitObject = function (event, object) {
50
- var evObj = Object.create(object); // create inherited copy version so origin is untouched
51
- evObj.event = event; // augment with the event type
52
- evObj.time = Date.now(); // augument with the time of the event
53
- this.emit(event, evObj);
65
+ EventManager.prototype.removeListener = function (event, listener) {
66
+ if (this.emitter) this.emitter.removeListener.apply(this.emitter, arguments);
54
67
  };
55
68
 
69
+
56
70
  module.exports = EventManager;
57
- module.exports.TYPES = TYPES;
58
- module.exports.globalEventManager = EventManager.create(); // create one top level emitter
71
+ module.exports.global = EventManager.create(); // create one top level emitter
@@ -5,15 +5,22 @@ var util = require('util');
5
5
 
6
6
  var STATUS = require('./status.js');
7
7
  var VContext = require('./vcon.js');
8
+ var EventManager = require('./event-manager.js');
8
9
 
9
10
  var OUTTASK_A_REQ = 'ast.outTask.a should be an array of string param names';
10
11
 
11
- function FinalCbFirstSuccTask(taskDef, cbFunc, tasks, vCon) {
12
+ function FinalCbFirstSuccTask(outTaskOptions) {
13
+ var taskDef = outTaskOptions.taskDef;
14
+ if (typeof(outTaskOptions.cbFunc) !== 'function') throw new Error('callback is not a function');
12
15
  var self = this;
13
- Object.keys(taskDef).forEach(function (k) { self[k] = taskDef[k]; });
14
- this.f = cbFunc;
15
- this.tasks = tasks;
16
- this.vCon = vCon;
16
+ for (var k in taskDef) {
17
+ if (true) self[k] = taskDef[k]; // if to make jshint happy
18
+ }
19
+ this.f = outTaskOptions.cbFunc;
20
+ this.tasks = outTaskOptions.tasks;
21
+ this.vCon = outTaskOptions.vCon;
22
+ this.retValue = outTaskOptions.retValue;
23
+ this.env = outTaskOptions.env;
17
24
  }
18
25
 
19
26
  function format_error(errmsg, obj) {
@@ -27,11 +34,6 @@ FinalCbFirstSuccTask.validate = function (taskDef) {
27
34
  errors.push(format_error(OUTTASK_A_REQ, taskDef));
28
35
  }
29
36
  return errors;
30
- }
31
-
32
- FinalCbFirstSuccTask.create = function (taskDef, cbFunc, tasks, vCon) {
33
- if (!(cbFunc && cbFunc instanceof Function)) throw new Error('callback is not a function');
34
- return new FinalCbFirstSuccTask(taskDef, cbFunc, tasks, vCon);
35
37
  };
36
38
 
37
39
  /**
@@ -46,11 +48,15 @@ FinalCbFirstSuccTask.prototype.isReady = function () {
46
48
  FinalCbFirstSuccTask.prototype.exec = function (err) {
47
49
  if (!this.f) return; //must have already been called
48
50
  if (err) {
51
+ this.env.error = err;
52
+ this.env.flowEmitter.emit(EventManager.TYPES.EXEC_FLOW_ERRORED, this.env);
49
53
  this.f.call(null, err); //call the final callback with the first error hit
50
54
  } else { // no error, call with args
51
55
  var vCon = this.vCon;
52
56
  var finalArgs = this.a.map(function (k) { return vCon.getVar(k); });
53
57
  finalArgs.unshift(null); //unshift err=null to front
58
+ this.env.results = finalArgs;
59
+ this.env.flowEmitter.emit(EventManager.TYPES.EXEC_FLOW_COMPLETE, this.env);
54
60
  this.f.apply(null, finalArgs);
55
61
  }
56
62
  this.f = null; // prevent multiple calls
@@ -4,15 +4,23 @@ var sprintf = require('sprintf').sprintf;
4
4
  var util = require('util');
5
5
 
6
6
  var STATUS = require('./status.js');
7
+ var EventManager = require('./event-manager.js');
7
8
 
8
9
  var OUTTASK_A_REQ = 'ast.outTask.a should be an array of string param names';
9
10
 
10
- function FinalCbTask(taskDef, cbFunc, tasks, vCon) {
11
+ function FinalCbTask(outTaskOptions) {
12
+ var taskDef = outTaskOptions.taskDef;
13
+ if (typeof(outTaskOptions.cbFunc) !== 'function') throw new Error('callback is not a function');
11
14
  var self = this;
12
- Object.keys(taskDef).forEach(function (k) { self[k] = taskDef[k]; });
13
- this.f = cbFunc;
14
- this.tasks = tasks;
15
- this.vCon = vCon;
15
+ for (var k in taskDef) {
16
+ if (true) self[k] = taskDef[k]; // if to make jshint happy
17
+ }
18
+ this.f = outTaskOptions.cbFunc;
19
+ this.tasks = outTaskOptions.tasks;
20
+ this.vCon = outTaskOptions.vCon;
21
+ this.retValue = outTaskOptions.retValue;
22
+ this.execOptions = outTaskOptions.execOptions;
23
+ this.env = outTaskOptions.env;
16
24
  }
17
25
 
18
26
  function format_error(errmsg, obj) {
@@ -29,11 +37,6 @@ FinalCbTask.validate = function (taskDef) {
29
37
  return errors;
30
38
  };
31
39
 
32
- FinalCbTask.create = function (taskDef, cbFunc, tasks, vCon) {
33
- if (!(cbFunc && cbFunc instanceof Function)) throw new Error('callback is not a function');
34
- return new FinalCbTask(taskDef, cbFunc, tasks, vCon);
35
- };
36
-
37
40
  FinalCbTask.prototype.isReady = function () {
38
41
  return (this.tasks.every(function (t) { return (t.status === STATUS.COMPLETE); }));
39
42
  };
@@ -41,11 +44,15 @@ FinalCbTask.prototype.isReady = function () {
41
44
  FinalCbTask.prototype.exec = function (err) {
42
45
  if (!this.f) return; //must have already been called
43
46
  if (err) {
47
+ this.env.error = err;
48
+ this.env.flowEmitter.emit(EventManager.TYPES.EXEC_FLOW_ERRORED, this.env);
44
49
  this.f.call(null, err); //call the final callback with the first error hit
45
50
  } else { // no error, call with args
46
51
  var vCon = this.vCon;
47
52
  var finalArgs = this.a.map(function (k) { return vCon.getVar(k); });
48
53
  finalArgs.unshift(null); //unshift err=null to front
54
+ this.env.results = finalArgs;
55
+ this.env.flowEmitter.emit(EventManager.TYPES.EXEC_FLOW_COMPLETE, this.env);
49
56
  this.f.apply(null, finalArgs);
50
57
  }
51
58
  this.f = null; // prevent multiple calls
@@ -1,12 +1,14 @@
1
1
  'use strict';
2
2
 
3
+ var EventManager = require('./event-manager.js');
4
+
3
5
  var defaultExecOptions = {
4
6
  reactExecOptions: true,
5
- outputStyle: 'callback',
7
+ outputStyle: 'cb',
6
8
  };
7
9
 
8
10
  var OUTPUT_STYLES = {
9
- CALLBACK: 'callback',
11
+ CALLBACK: 'cb',
10
12
  NONE: 'none'
11
13
  };
12
14
 
@@ -36,7 +38,9 @@ function inputParser(inputArgs, ast) {
36
38
  var splitResult = splitArgs(args, ast.inParams, parsedInput.options.outputStyle);
37
39
  parsedInput.args = splitResult.args;
38
40
  parsedInput.cb = splitResult.cb;
39
- if (splitResult.extra) parsedInput.extraArgs = splitResult.extra;
41
+ if (splitResult.outputStyle) parsedInput.options.outputStyle = splitResult.outputStyle;
42
+ if (splitResult.extra) parsedInput.extraArgs = splitResult.extra;
43
+ EventManager.global.emit(EventManager.TYPES.EXEC_INPUT_PREPROCESS, parsedInput); // hook
40
44
  return parsedInput;
41
45
  }
42
46
 
@@ -0,0 +1,71 @@
1
+ 'use strict';
2
+
3
+ /**
4
+ Log events to console.error
5
+
6
+ @example
7
+ var react = require('react');
8
+ require('react/lib/log-events').logEvent(react);
9
+ */
10
+
11
+ var react = require('../lib/track-tasks'); // require('react/lib/track-tasks'); // turn on tracking
12
+
13
+ var ALL_FLOW_EVENTS = 'flow.*';
14
+ var ALL_TASK_EVENTS = 'task.*';
15
+
16
+ function flowLog(obj) {
17
+ /*jshint validthis: true */
18
+ var time = new Date();
19
+ time.setTime(obj.time);
20
+ var argsNoCb = obj.args.filter(function (a) { return (typeof(a) !== 'function'); });
21
+ var eventTimeStr = time.toISOString();
22
+ if (this.event === 'flow.complete') {
23
+ var env = obj;
24
+ console.error('%s: %s \tmsecs:(%s) \n\targs:(%s) \n\tresults:(%s)\n',
25
+ this.event, env.name, env.elapsedTime, argsNoCb, env.results);
26
+ } else {
27
+ var name = obj.name;
28
+ var args = obj.args;
29
+ console.error('%s: %s \n\targs:(%s)\n', this.event, name, argsNoCb);
30
+ }
31
+ }
32
+
33
+ function taskLog(obj) {
34
+ /*jshint validthis: true */
35
+ var time = new Date();
36
+ time.setTime(obj.time);
37
+ var argsNoCb = obj.args.filter(function (a) { return (typeof(a) !== 'function'); });
38
+ var eventTimeStr = time.toISOString();
39
+ if (this.event === 'task.complete') {
40
+ var task = obj;
41
+ console.error('%s: %s \tmsecs:(%s) \n\targs:(%s) \n\tresults:(%s)\n',
42
+ this.event, task.name, task.elapsedTime, argsNoCb, task.results);
43
+ } else {
44
+ var name = obj.name;
45
+ var args = obj.args;
46
+ console.error('%s: %s \n\targs:(%s)\n', this.event, name, argsNoCb);
47
+ }
48
+
49
+ }
50
+
51
+ /**
52
+ Log flow and task events for a flowFn or all of react.
53
+ If called multiple times, remove previous listener (if any) before
54
+ adding.
55
+
56
+ @example
57
+ var react = require('react');
58
+ require('react/lib/log-events').logEvents(flowFn); // pass flowFn or react
59
+
60
+ @param flowFn Flow function or global react object
61
+ */
62
+ function logEvents(flowFn) {
63
+ //output events as tasks start and complete
64
+ flowFn.events.removeListener(ALL_FLOW_EVENTS, flowLog);
65
+ flowFn.events.on(ALL_FLOW_EVENTS, flowLog);
66
+ flowFn.events.removeListener(ALL_TASK_EVENTS, taskLog);
67
+ flowFn.events.on(ALL_TASK_EVENTS, taskLog);
68
+ }
69
+
70
+ module.exports = react;
71
+ module.exports.logEvents = logEvents;