react 0.3.5 → 0.5.0

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 (230) hide show
  1. package/.npmignore +2 -1
  2. package/README.md +21 -151
  3. package/doc/advanced.md +161 -0
  4. package/doc/color-def.graffle +938 -0
  5. package/doc/color-def.png +0 -0
  6. package/examples/default-log-events.js +1 -1
  7. package/lib/event-collector.js +65 -0
  8. package/lib/log-events.js +30 -15
  9. package/{promise-resolve.js → lib/promise-resolve.js} +1 -1
  10. package/lib/track-tasks.js +4 -61
  11. package/package.json +1 -1
  12. package/react.js +33 -1
  13. package/test/core.test.js +1 -1
  14. package/test/module-use.test.js +5 -2
  15. package/test/promise-auto-resolve.test.js +2 -1
  16. package/Jakefile.js +0 -8
  17. package/doc/alternate-dsls.md +0 -103
  18. package/dsl/chain.js +0 -150
  19. package/dsl/fstr.js +0 -121
  20. package/dsl/pcode.js +0 -175
  21. package/examples/chain-events1.js +0 -55
  22. package/examples/chain1.js +0 -19
  23. package/examples/fstr-events1.js +0 -38
  24. package/examples/fstr1.js +0 -37
  25. package/examples/pcode1.js +0 -22
  26. package/externalDocs/Dataflow - Wikipedia, the free encyclopedia.html +0 -675
  27. package/externalDocs/Dataflow - Wikipedia, the free encyclopedia_files/37px-Wiktionary-logo-en.svg.png +0 -0
  28. package/externalDocs/Dataflow - Wikipedia, the free encyclopedia_files/closewindow.png +0 -0
  29. package/externalDocs/Dataflow - Wikipedia, the free encyclopedia_files/index(1).php +0 -407
  30. package/externalDocs/Dataflow - Wikipedia, the free encyclopedia_files/index.php +0 -130
  31. package/externalDocs/Dataflow - Wikipedia, the free encyclopedia_files/load(1).php +0 -3
  32. package/externalDocs/Dataflow - Wikipedia, the free encyclopedia_files/load(10).php +0 -89
  33. package/externalDocs/Dataflow - Wikipedia, the free encyclopedia_files/load(2).php +0 -23
  34. package/externalDocs/Dataflow - Wikipedia, the free encyclopedia_files/load(3).php +0 -153
  35. package/externalDocs/Dataflow - Wikipedia, the free encyclopedia_files/load(4).php +0 -6
  36. package/externalDocs/Dataflow - Wikipedia, the free encyclopedia_files/load(5).php +0 -3
  37. package/externalDocs/Dataflow - Wikipedia, the free encyclopedia_files/load(6).php +0 -96
  38. package/externalDocs/Dataflow - Wikipedia, the free encyclopedia_files/load(7).php +0 -16
  39. package/externalDocs/Dataflow - Wikipedia, the free encyclopedia_files/load(8).php +0 -14
  40. package/externalDocs/Dataflow - Wikipedia, the free encyclopedia_files/load(9).php +0 -123
  41. package/externalDocs/Dataflow - Wikipedia, the free encyclopedia_files/load.php +0 -3
  42. package/externalDocs/Dataflow - Wikipedia, the free encyclopedia_files/poweredby_mediawiki_88x31.png +0 -0
  43. package/externalDocs/Dataflow - Wikipedia, the free encyclopedia_files/saved_resource +0 -1
  44. package/externalDocs/Dataflow - Wikipedia, the free encyclopedia_files/search-ltr.png +0 -0
  45. package/externalDocs/Dataflow - Wikipedia, the free encyclopedia_files/wikimedia-button.png +0 -0
  46. package/externalDocs/Dataflow Programming Handling Huge Data Loads Without Adding Complexity Dr Dobb's.html +0 -1369
  47. package/externalDocs/Dataflow Programming Handling Huge Data Loads Without Adding Complexity Dr Dobb's_files/121911_DobbsDigest_Cover.jpg +0 -0
  48. package/externalDocs/Dataflow Programming Handling Huge Data Loads Without Adding Complexity Dr Dobb's_files/160-x-600-IMU Impact 2012.jpg +0 -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= +0 -68
  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=(1) +0 -67
  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=(2) +0 -2
  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=(3) +0 -2
  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=(4) +0 -8
  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=(5) +0 -2
  55. 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 +0 -2
  56. 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) +0 -2
  57. 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 -2
  58. 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) +0 -2
  59. 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) +0 -2
  60. 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) +0 -431
  61. 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) +0 -2
  62. 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) +0 -431
  63. 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) +0 -2
  64. 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) +0 -2
  65. package/externalDocs/Dataflow Programming Handling Huge Data Loads Without Adding Complexity Dr Dobb's_files/Ad0St1Sz6Sq0V0Id20628317.gif +0 -0
  66. package/externalDocs/Dataflow Programming Handling Huge Data Loads Without Adding Complexity Dr Dobb's_files/Ad2331174St1Sz225Sq20825250V0Id4.gif +0 -0
  67. package/externalDocs/Dataflow Programming Handling Huge Data Loads Without Adding Complexity Dr Dobb's_files/AdTracImage.gif +0 -0
  68. package/externalDocs/Dataflow Programming Handling Huge Data Loads Without Adding Complexity Dr Dobb's_files/Default_Size_16_1x1.gif +0 -0
  69. package/externalDocs/Dataflow Programming Handling Huge Data Loads Without Adding Complexity Dr Dobb's_files/FB.Share +0 -9
  70. package/externalDocs/Dataflow Programming Handling Huge Data Loads Without Adding Complexity Dr Dobb's_files/addthis_widget.js +0 -2
  71. 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= +0 -11
  72. package/externalDocs/Dataflow Programming Handling Huge Data Loads Without Adding Complexity Dr Dobb's_files/beacon.js +0 -7
  73. package/externalDocs/Dataflow Programming Handling Huge Data Loads Without Adding Complexity Dr Dobb's_files/checkauth.js +0 -18
  74. package/externalDocs/Dataflow Programming Handling Huge Data Loads Without Adding Complexity Dr Dobb's_files/colorbox.css +0 -49
  75. package/externalDocs/Dataflow Programming Handling Huge Data Loads Without Adding Complexity Dr Dobb's_files/convert_data.js +0 -1
  76. package/externalDocs/Dataflow Programming Handling Huge Data Loads Without Adding Complexity Dr Dobb's_files/count(1).js +0 -5
  77. package/externalDocs/Dataflow Programming Handling Huge Data Loads Without Adding Complexity Dr Dobb's_files/count.js +0 -5
  78. package/externalDocs/Dataflow Programming Handling Huge Data Loads Without Adding Complexity Dr Dobb's_files/count.json +0 -1
  79. package/externalDocs/Dataflow Programming Handling Huge Data Loads Without Adding Complexity Dr Dobb's_files/dataflow1.gif +0 -0
  80. package/externalDocs/Dataflow Programming Handling Huge Data Loads Without Adding Complexity Dr Dobb's_files/def.html +0 -126
  81. package/externalDocs/Dataflow Programming Handling Huge Data Loads Without Adding Complexity Dr Dobb's_files/defaults.css +0 -1
  82. package/externalDocs/Dataflow Programming Handling Huge Data Loads Without Adding Complexity Dr Dobb's_files/detect.js +0 -91
  83. package/externalDocs/Dataflow Programming Handling Huge Data Loads Without Adding Complexity Dr Dobb's_files/devtest_left-col-slim.css +0 -30
  84. package/externalDocs/Dataflow Programming Handling Huge Data Loads Without Adding Complexity Dr Dobb's_files/disqus.js +0 -327
  85. package/externalDocs/Dataflow Programming Handling Huge Data Loads Without Adding Complexity Dr Dobb's_files/disqusHints.css +0 -34
  86. package/externalDocs/Dataflow Programming Handling Huge Data Loads Without Adding Complexity Dr Dobb's_files/disqusHints.js +0 -8
  87. package/externalDocs/Dataflow Programming Handling Huge Data Loads Without Adding Complexity Dr Dobb's_files/disqusLoggedOff(1).css +0 -24
  88. package/externalDocs/Dataflow Programming Handling Huge Data Loads Without Adding Complexity Dr Dobb's_files/disqusLoggedOff.css +0 -24
  89. package/externalDocs/Dataflow Programming Handling Huge Data Loads Without Adding Complexity Dr Dobb's_files/dobbs_disqus_logo.gif +0 -0
  90. package/externalDocs/Dataflow Programming Handling Huge Data Loads Without Adding Complexity Dr Dobb's_files/dsqcd10c7f376188a4a2ca3e8fea2c03aeb.css +0 -1
  91. package/externalDocs/Dataflow Programming Handling Huge Data Loads Without Adding Complexity Dr Dobb's_files/dsqcd10c7f376188a4a2ca3e8fea2c03aeb.js +0 -1
  92. package/externalDocs/Dataflow Programming Handling Huge Data Loads Without Adding Complexity Dr Dobb's_files/elqCfg.js +0 -55
  93. package/externalDocs/Dataflow Programming Handling Huge Data Loads Without Adding Complexity Dr Dobb's_files/elqImg.js +0 -12
  94. package/externalDocs/Dataflow Programming Handling Huge Data Loads Without Adding Complexity Dr Dobb's_files/embed.js +0 -76
  95. package/externalDocs/Dataflow Programming Handling Huge Data Loads Without Adding Complexity Dr Dobb's_files/experience_util.js +0 -636
  96. package/externalDocs/Dataflow Programming Handling Huge Data Loads Without Adding Complexity Dr Dobb's_files/fastbutton.html +0 -11
  97. package/externalDocs/Dataflow Programming Handling Huge Data Loads Without Adding Complexity Dr Dobb's_files/ga.js +0 -51
  98. package/externalDocs/Dataflow Programming Handling Huge Data Loads Without Adding Complexity Dr Dobb's_files/h-facebook_sm.png +0 -0
  99. package/externalDocs/Dataflow Programming Handling Huge Data Loads Without Adding Complexity Dr Dobb's_files/h-nav.css +0 -798
  100. package/externalDocs/Dataflow Programming Handling Huge Data Loads Without Adding Complexity Dr Dobb's_files/h-twitter_sm.png +0 -0
  101. package/externalDocs/Dataflow Programming Handling Huge Data Loads Without Adding Complexity Dr Dobb's_files/h_s_code_remote.js +0 -377
  102. package/externalDocs/Dataflow Programming Handling Huge Data Loads Without Adding Complexity Dr Dobb's_files/hintbox_info.jpg +0 -0
  103. package/externalDocs/Dataflow Programming Handling Huge Data Loads Without Adding Complexity Dr Dobb's_files/hub.1326407570.html +0 -3
  104. package/externalDocs/Dataflow Programming Handling Huge Data Loads Without Adding Complexity Dr Dobb's_files/in.js +0 -76
  105. package/externalDocs/Dataflow Programming Handling Huge Data Loads Without Adding Complexity Dr Dobb's_files/insight.min.js +0 -55
  106. package/externalDocs/Dataflow Programming Handling Huge Data Loads Without Adding Complexity Dr Dobb's_files/jquery-1.2.6.min.js +0 -32
  107. package/externalDocs/Dataflow Programming Handling Huge Data Loads Without Adding Complexity Dr Dobb's_files/jquery-1.4.2.min.js +0 -154
  108. package/externalDocs/Dataflow Programming Handling Huge Data Loads Without Adding Complexity Dr Dobb's_files/jquery-ui-1.8rc3.custom.min.js +0 -374
  109. package/externalDocs/Dataflow Programming Handling Huge Data Loads Without Adding Complexity Dr Dobb's_files/jquery.colorbox-min.js +0 -4
  110. package/externalDocs/Dataflow Programming Handling Huge Data Loads Without Adding Complexity Dr Dobb's_files/jquery.min.js +0 -154
  111. package/externalDocs/Dataflow Programming Handling Huge Data Loads Without Adding Complexity Dr Dobb's_files/lib.js +0 -212
  112. package/externalDocs/Dataflow Programming Handling Huge Data Loads Without Adding Complexity Dr Dobb's_files/like.html +0 -214
  113. package/externalDocs/Dataflow Programming Handling Huge Data Loads Without Adding Complexity Dr Dobb's_files/noavatar32.png +0 -0
  114. package/externalDocs/Dataflow Programming Handling Huge Data Loads Without Adding Complexity Dr Dobb's_files/nodetag.js +0 -18
  115. package/externalDocs/Dataflow Programming Handling Huge Data Loads Without Adding Complexity Dr Dobb's_files/nonSecureAnonymousFramework +0 -2913
  116. package/externalDocs/Dataflow Programming Handling Huge Data Loads Without Adding Complexity Dr Dobb's_files/p.json +0 -1
  117. package/externalDocs/Dataflow Programming Handling Huge Data Loads Without Adding Complexity Dr Dobb's_files/plusone.js +0 -32
  118. package/externalDocs/Dataflow Programming Handling Huge Data Loads Without Adding Complexity Dr Dobb's_files/popwindow.js +0 -24
  119. package/externalDocs/Dataflow Programming Handling Huge Data Loads Without Adding Complexity Dr Dobb's_files/q4OyybLB0-A.js +0 -91
  120. package/externalDocs/Dataflow Programming Handling Huge Data Loads Without Adding Complexity Dr Dobb's_files/quant.js +0 -28
  121. package/externalDocs/Dataflow Programming Handling Huge Data Loads Without Adding Complexity Dr Dobb's_files/qxvZoiHdpAF.css +0 -192
  122. package/externalDocs/Dataflow Programming Handling Huge Data Loads Without Adding Complexity Dr Dobb's_files/reply.html +0 -160
  123. package/externalDocs/Dataflow Programming Handling Huge Data Loads Without Adding Complexity Dr Dobb's_files/rss.gif +0 -0
  124. package/externalDocs/Dataflow Programming Handling Huge Data Loads Without Adding Complexity Dr Dobb's_files/s.js +0 -1
  125. package/externalDocs/Dataflow Programming Handling Huge Data Loads Without Adding Complexity Dr Dobb's_files/saved_resource +0 -421
  126. package/externalDocs/Dataflow Programming Handling Huge Data Loads Without Adding Complexity Dr Dobb's_files/saved_resource(1) +0 -1
  127. package/externalDocs/Dataflow Programming Handling Huge Data Loads Without Adding Complexity Dr Dobb's_files/saved_resource(2) +0 -341
  128. package/externalDocs/Dataflow Programming Handling Huge Data Loads Without Adding Complexity Dr Dobb's_files/saved_resource(3) +0 -127
  129. package/externalDocs/Dataflow Programming Handling Huge Data Loads Without Adding Complexity Dr Dobb's_files/script84.js +0 -113
  130. package/externalDocs/Dataflow Programming Handling Huge Data Loads Without Adding Complexity Dr Dobb's_files/scripts.js +0 -30
  131. package/externalDocs/Dataflow Programming Handling Huge Data Loads Without Adding Complexity Dr Dobb's_files/sh72.html +0 -5
  132. package/externalDocs/Dataflow Programming Handling Huge Data Loads Without Adding Complexity Dr Dobb's_files/shAutoloader.js +0 -17
  133. package/externalDocs/Dataflow Programming Handling Huge Data Loads Without Adding Complexity Dr Dobb's_files/shBrushAS3.js +0 -59
  134. package/externalDocs/Dataflow Programming Handling Huge Data Loads Without Adding Complexity Dr Dobb's_files/shBrushAppleScript.js +0 -75
  135. package/externalDocs/Dataflow Programming Handling Huge Data Loads Without Adding Complexity Dr Dobb's_files/shBrushBash.js +0 -59
  136. package/externalDocs/Dataflow Programming Handling Huge Data Loads Without Adding Complexity Dr Dobb's_files/shBrushCSharp.js +0 -65
  137. package/externalDocs/Dataflow Programming Handling Huge Data Loads Without Adding Complexity Dr Dobb's_files/shBrushColdFusion.js +0 -100
  138. package/externalDocs/Dataflow Programming Handling Huge Data Loads Without Adding Complexity Dr Dobb's_files/shBrushCpp.js +0 -97
  139. package/externalDocs/Dataflow Programming Handling Huge Data Loads Without Adding Complexity Dr Dobb's_files/shBrushCss.js +0 -91
  140. package/externalDocs/Dataflow Programming Handling Huge Data Loads Without Adding Complexity Dr Dobb's_files/shBrushDelphi.js +0 -55
  141. package/externalDocs/Dataflow Programming Handling Huge Data Loads Without Adding Complexity Dr Dobb's_files/shBrushDiff.js +0 -41
  142. package/externalDocs/Dataflow Programming Handling Huge Data Loads Without Adding Complexity Dr Dobb's_files/shBrushErlang.js +0 -52
  143. package/externalDocs/Dataflow Programming Handling Huge Data Loads Without Adding Complexity Dr Dobb's_files/shBrushGroovy.js +0 -67
  144. package/externalDocs/Dataflow Programming Handling Huge Data Loads Without Adding Complexity Dr Dobb's_files/shBrushJScript.js +0 -52
  145. package/externalDocs/Dataflow Programming Handling Huge Data Loads Without Adding Complexity Dr Dobb's_files/shBrushJava.js +0 -57
  146. package/externalDocs/Dataflow Programming Handling Huge Data Loads Without Adding Complexity Dr Dobb's_files/shBrushJavaFX.js +0 -58
  147. package/externalDocs/Dataflow Programming Handling Huge Data Loads Without Adding Complexity Dr Dobb's_files/shBrushPerl.js +0 -72
  148. package/externalDocs/Dataflow Programming Handling Huge Data Loads Without Adding Complexity Dr Dobb's_files/shBrushPhp.js +0 -88
  149. package/externalDocs/Dataflow Programming Handling Huge Data Loads Without Adding Complexity Dr Dobb's_files/shBrushPlain.js +0 -33
  150. package/externalDocs/Dataflow Programming Handling Huge Data Loads Without Adding Complexity Dr Dobb's_files/shBrushPowerShell.js +0 -74
  151. package/externalDocs/Dataflow Programming Handling Huge Data Loads Without Adding Complexity Dr Dobb's_files/shBrushPython.js +0 -64
  152. package/externalDocs/Dataflow Programming Handling Huge Data Loads Without Adding Complexity Dr Dobb's_files/shBrushRuby.js +0 -55
  153. package/externalDocs/Dataflow Programming Handling Huge Data Loads Without Adding Complexity Dr Dobb's_files/shBrushSass.js +0 -94
  154. package/externalDocs/Dataflow Programming Handling Huge Data Loads Without Adding Complexity Dr Dobb's_files/shBrushScala.js +0 -51
  155. package/externalDocs/Dataflow Programming Handling Huge Data Loads Without Adding Complexity Dr Dobb's_files/shBrushSql.js +0 -66
  156. package/externalDocs/Dataflow Programming Handling Huge Data Loads Without Adding Complexity Dr Dobb's_files/shBrushVb.js +0 -56
  157. package/externalDocs/Dataflow Programming Handling Huge Data Loads Without Adding Complexity Dr Dobb's_files/shBrushXml.js +0 -69
  158. package/externalDocs/Dataflow Programming Handling Huge Data Loads Without Adding Complexity Dr Dobb's_files/shCore.css +0 -226
  159. package/externalDocs/Dataflow Programming Handling Huge Data Loads Without Adding Complexity Dr Dobb's_files/shCoreDefault.css +0 -333
  160. package/externalDocs/Dataflow Programming Handling Huge Data Loads Without Adding Complexity Dr Dobb's_files/shCore_new.js +0 -17
  161. package/externalDocs/Dataflow Programming Handling Huge Data Loads Without Adding Complexity Dr Dobb's_files/shLegacy.js +0 -17
  162. package/externalDocs/Dataflow Programming Handling Huge Data Loads Without Adding Complexity Dr Dobb's_files/shThemeDefault.css +0 -117
  163. package/externalDocs/Dataflow Programming Handling Huge Data Loads Without Adding Complexity Dr Dobb's_files/share-button-css +0 -67
  164. package/externalDocs/Dataflow Programming Handling Huge Data Loads Without Adding Complexity Dr Dobb's_files/share_email_icon.gif +0 -0
  165. package/externalDocs/Dataflow Programming Handling Huge Data Loads Without Adding Complexity Dr Dobb's_files/share_print_icon.gif +0 -0
  166. package/externalDocs/Dataflow Programming Handling Huge Data Loads Without Adding Complexity Dr Dobb's_files/sidebar.js +0 -88
  167. package/externalDocs/Dataflow Programming Handling Huge Data Loads Without Adding Complexity Dr Dobb's_files/superfooter_936.css +0 -186
  168. package/externalDocs/Dataflow Programming Handling Huge Data Loads Without Adding Complexity Dr Dobb's_files/svrGP.aspx +0 -0
  169. package/externalDocs/Dataflow Programming Handling Huge Data Loads Without Adding Complexity Dr Dobb's_files/t.gif +0 -0
  170. package/externalDocs/Dataflow Programming Handling Huge Data Loads Without Adding Complexity Dr Dobb's_files/thickbox.js +0 -343
  171. package/externalDocs/Dataflow Programming Handling Huge Data Loads Without Adding Complexity Dr Dobb's_files/thread.js +0 -128
  172. package/externalDocs/Dataflow Programming Handling Huge Data Loads Without Adding Complexity Dr Dobb's_files/togglediv.js +0 -15
  173. package/externalDocs/Dataflow Programming Handling Huge Data Loads Without Adding Complexity Dr Dobb's_files/tweet_button.html +0 -3
  174. package/externalDocs/Dataflow Programming Handling Huge Data Loads Without Adding Complexity Dr Dobb's_files/ubmtechweb_logo_sm.gif +0 -0
  175. package/externalDocs/Dataflow Programming Handling Huge Data Loads Without Adding Complexity Dr Dobb's_files/upload.html +0 -91
  176. package/externalDocs/Dataflow Programming Handling Huge Data Loads Without Adding Complexity Dr Dobb's_files/welcome.js +0 -7
  177. package/externalDocs/Dataflow Programming Handling Huge Data Loads Without Adding Complexity Dr Dobb's_files/widget74.css +0 -1
  178. package/externalDocs/Dataflow Programming Handling Huge Data Loads Without Adding Complexity Dr Dobb's_files/widgets.js +0 -40
  179. package/externalDocs/Reactive programming - Wikipedia, the free encyclopedia.html +0 -904
  180. package/externalDocs/Reactive programming - Wikipedia, the free encyclopedia_files/50px-Question_book-new.svg.png +0 -0
  181. package/externalDocs/Reactive programming - Wikipedia, the free encyclopedia_files/closewindow.png +0 -0
  182. package/externalDocs/Reactive programming - Wikipedia, the free encyclopedia_files/index(1).php +0 -407
  183. package/externalDocs/Reactive programming - Wikipedia, the free encyclopedia_files/index.php +0 -130
  184. package/externalDocs/Reactive programming - Wikipedia, the free encyclopedia_files/load(1).php +0 -3
  185. package/externalDocs/Reactive programming - Wikipedia, the free encyclopedia_files/load(10).php +0 -89
  186. package/externalDocs/Reactive programming - Wikipedia, the free encyclopedia_files/load(2).php +0 -23
  187. package/externalDocs/Reactive programming - Wikipedia, the free encyclopedia_files/load(3).php +0 -153
  188. package/externalDocs/Reactive programming - Wikipedia, the free encyclopedia_files/load(4).php +0 -6
  189. package/externalDocs/Reactive programming - Wikipedia, the free encyclopedia_files/load(5).php +0 -3
  190. package/externalDocs/Reactive programming - Wikipedia, the free encyclopedia_files/load(6).php +0 -96
  191. package/externalDocs/Reactive programming - Wikipedia, the free encyclopedia_files/load(7).php +0 -16
  192. package/externalDocs/Reactive programming - Wikipedia, the free encyclopedia_files/load(8).php +0 -14
  193. package/externalDocs/Reactive programming - Wikipedia, the free encyclopedia_files/load(9).php +0 -123
  194. package/externalDocs/Reactive programming - Wikipedia, the free encyclopedia_files/load.php +0 -3
  195. package/externalDocs/Reactive programming - Wikipedia, the free encyclopedia_files/poweredby_mediawiki_88x31.png +0 -0
  196. package/externalDocs/Reactive programming - Wikipedia, the free encyclopedia_files/saved_resource +0 -1
  197. package/externalDocs/Reactive programming - Wikipedia, the free encyclopedia_files/search-ltr.png +0 -0
  198. package/externalDocs/Reactive programming - Wikipedia, the free encyclopedia_files/wikimedia-button.png +0 -0
  199. package/externalDocs/The Step of the Conductor - How To Node - NodeJS.html +0 -113
  200. package/externalDocs/The Step of the Conductor - How To Node - NodeJS_files/6654_111305815684_541245684_2583159_5383291_n_normal.jpg +0 -0
  201. package/externalDocs/The Step of the Conductor - How To Node - NodeJS_files/MARC3_normal.jpg +0 -2
  202. package/externalDocs/The Step of the Conductor - How To Node - NodeJS_files/beacon.js +0 -7
  203. package/externalDocs/The Step of the Conductor - How To Node - NodeJS_files/c953ddd239707998340e1a6fbb3eeb46 +0 -0
  204. package/externalDocs/The Step of the Conductor - How To Node - NodeJS_files/c953ddd239707998340e1a6fbb3eeb46_normal.jpeg +0 -0
  205. package/externalDocs/The Step of the Conductor - How To Node - NodeJS_files/clouds2_normal.jpg +0 -0
  206. package/externalDocs/The Step of the Conductor - How To Node - NodeJS_files/count.json +0 -1
  207. package/externalDocs/The Step of the Conductor - How To Node - NodeJS_files/def.html +0 -126
  208. package/externalDocs/The Step of the Conductor - How To Node - NodeJS_files/defaults.css +0 -1
  209. package/externalDocs/The Step of the Conductor - How To Node - NodeJS_files/disqus.js +0 -327
  210. package/externalDocs/The Step of the Conductor - How To Node - NodeJS_files/dsq7884a9652e94555c70f96b6be63be216.css +0 -1
  211. package/externalDocs/The Step of the Conductor - How To Node - NodeJS_files/dsq7884a9652e94555c70f96b6be63be216.js +0 -66
  212. package/externalDocs/The Step of the Conductor - How To Node - NodeJS_files/embed.js +0 -76
  213. package/externalDocs/The Step of the Conductor - How To Node - NodeJS_files/example1.dot +0 -0
  214. package/externalDocs/The Step of the Conductor - How To Node - NodeJS_files/ga.js +0 -51
  215. package/externalDocs/The Step of the Conductor - How To Node - NodeJS_files/get_num_replies.js +0 -79
  216. package/externalDocs/The Step of the Conductor - How To Node - NodeJS_files/hub.1326407570.html +0 -3
  217. package/externalDocs/The Step of the Conductor - How To Node - NodeJS_files/lib.js +0 -212
  218. package/externalDocs/The Step of the Conductor - How To Node - NodeJS_files/noavatar32.png +0 -0
  219. package/externalDocs/The Step of the Conductor - How To Node - NodeJS_files/quant.js +0 -28
  220. package/externalDocs/The Step of the Conductor - How To Node - NodeJS_files/reply.html +0 -160
  221. package/externalDocs/The Step of the Conductor - How To Node - NodeJS_files/t.gif +0 -0
  222. package/externalDocs/The Step of the Conductor - How To Node - NodeJS_files/thread.js +0 -128
  223. package/externalDocs/The Step of the Conductor - How To Node - NodeJS_files/tweet_button.1326407570.html +0 -3
  224. package/externalDocs/The Step of the Conductor - How To Node - NodeJS_files/twitter_normal.jpg +0 -2
  225. package/externalDocs/The Step of the Conductor - How To Node - NodeJS_files/upload.html +0 -91
  226. package/externalDocs/The Step of the Conductor - How To Node - NodeJS_files/widgets.js +0 -40
  227. package/jake-tasks/jake-test.js +0 -64
  228. package/test/dsl/chain.test.js +0 -324
  229. package/test/dsl/fstr.test.js +0 -300
  230. package/test/dsl/pcode.test.js +0 -448
package/.npmignore CHANGED
@@ -3,4 +3,5 @@ npm-debug.log
3
3
  ./npmrc
4
4
  todo.md
5
5
  notes.md
6
- oldExamples
6
+ .DS_Store
7
+ externalDocs
package/README.md CHANGED
@@ -36,7 +36,7 @@ It takes inspiration from several projects including:
36
36
  - class method calls
37
37
  - selectFirst flow where the first task that returns defined, non-null value is used
38
38
  - promise style functions - also automatic resolution of promise inputs (optional require('react/promise-resolve');)
39
- - use of resulting flow function as callback style or promise style (if no callback provided) (provided via plugin corresponding to the promise library used)
39
+ - use of resulting flow function as callback style or promise style (if no callback provided) (provided via plugin corresponding to the promise library used) See https://github.com/jeffbski/react-deferred
40
40
  - (planned) iteration on arrays, streams, sockets
41
41
  - (planned) event emitter integration
42
42
 
@@ -72,17 +72,8 @@ Pull from github - http://github.com/jeffbski/react
72
72
 
73
73
  ## Examples
74
74
 
75
- 1. [Direct AST](#directAST)
76
- 2. [Default DSL](#defaultDSL)
77
-
78
- ### Example using the default DSL
79
-
80
- These live in the examples folder so they are ready to run.
81
- Also see test/module-use.test.js for more examples as well
82
- as the specific tests for the DSL you want to use.
83
-
84
75
  <a name="defaultDSL"/>
85
- ### Example using default DSL
76
+ ### Example using default DSL interface
86
77
 
87
78
  - Simple example showing flow definition of two async functions feeding a
88
79
  synchronous function.
@@ -142,174 +133,56 @@ also indicates how the tasks will be executed
142
133
  ![default-simple.dot.png](https://github.com/jeffbski/react/raw/master/doc/default-simple.dot.png)
143
134
 
144
135
 
145
- <a name="directAST"/>
146
- ### Example directly using AST
147
-
148
- ```javascript
149
- var react = require('react');
150
-
151
- function load(res, cb) { setTimeout(cb, 100, null, res + '-loaded'); }
152
- function prefix(prefstr, str, cb) { setTimeout(cb, 100, null, prefstr + str); }
153
- function postfix(str, poststr, cb) { setTimeout(cb, 100, null, str + poststr); }
154
- function upper(str) { return str.toUpperCase(); }
155
-
156
- var fn = react();
157
- var errors = fn.setAndValidateAST({
158
- inParams: ['res', 'prefstr', 'poststr'],
159
- tasks: [
160
- { f: load, a: ['res'], out: ['lres'] },
161
- { f: upper, a: ['lres'], out: ['ulres'], type: 'ret' },
162
- { f: prefix, a: ['prefstr', 'ulres'], out: ['plres'] },
163
- { f: postfix, a: ['plres', 'poststr'], out: ['plresp'] }
164
- ],
165
- outTask: { a: ['plresp'] }
166
- });
167
- console.error('errors:', errors); // []
168
-
169
- fn('foo', 'pre-', '-post', function cb(err, lres) {
170
- console.error('err:', err); // null
171
- console.error('lres:', lres); // pre-FOO-LOADED-post
172
- });
173
- ```
174
-
175
- ### Alternate interfaces (DSL's)
176
-
177
- 1. [Using pseudocode DSL](https://github.com/jeffbski/react/blob/master/doc/alternate-dsls.md#pcode)
178
- 2. [Using jquery-like chaining DSL](https://github.com/jeffbski/react/blob/master/doc/alternate-dsls.md#chain)
179
- 3. [Using function string DSL](https://github.com/jeffbski/react/blob/master/doc/alternate-dsls.md#fstr)
180
-
181
136
 
182
137
  ## User API
183
138
 
184
- ### Default DSL
185
-
186
139
  The main function returned from require('react') can be used to define the AST used for the processing of the rules or flow.
187
140
 
188
141
  It takes the following arguments to define a flow function:
189
142
 
190
143
  ```javascript
191
- var react = require('react');
192
- var fn = react('my-flow-name', 'paramName1, paramName2, cb -> err, outParamName1, outParamName2',
193
- functionRefOrMethodStr, 'paramName1, cb -> err, outParamName2', // async cb task
194
- functionRefOrMethodStr2, 'paramName2, paramName1 -> outParamName1' // sync task
144
+ var fn = react('loadRender', 'fooPath, barPath, barP2, cb -> err, renderedOut',
145
+ loadFoo, 'fooPath, cb -> err, foo',
146
+ loadBar, 'barPath, barP2, cb -> err, bar',
147
+ render, 'foo, bar -> renderedOut'
195
148
  );
196
149
  ```
197
150
 
151
+ ![color-def](https://github.com/jeffbski/react/raw/master/doc/color-def.png)
152
+
198
153
  1. **flow/function name** - string - represents the name of the flow or function that will be created. React will use the name when generating events so you can monitor progress and performance and also when errors occur.
199
154
  2. **in/out flow parameter definition** - string - the inputs and outputs for the flow function. The parameters are specified in one single string for easy typing, separated by commas. The output follows the input after being separated by a `->`. Use the parameter name `cb` or `callback` to specify the Node style callback and `err` to represent the error parameter as the first output parameter of the callback. Literal values can also be specified directly (true, false, numbers, this, null). Literal strings can simply be quoted using single or double quotes.
200
155
  3. **optional flow options** - object - If an object is provided immediately after the in/out flow def, then these options will be provided to react to customize the flow. This is reserved for future use.
201
- 3. **function reference or method string** - Specify the function to be called for this task, or if calling a method off of an object being passed in or returned by a task, use a string to specify like `'obj.method'`. These can be asynchronous Node-style callback `cb(err, ...)` functions or synchronous functions which simply return values directly.
202
- 4. **in/out task parameter definition** - string - similar to the in/out flow parameter definition above, these are the inputs and outputs that are passed to a task function and returned from a task function. The inputs will need to match either those from the flow inputs or outputs from other tasks that will run before this task. React will use the inputs as dependencies, so it will invoke and wait for response from the tasks that provide the dependent inputs. So simply by specifying inputs and outputs for the tasks, React will prioritize and parallelize tasks to run as fast as possible. Use `cb` or `callback` along with `err` to specify asynchronous Node style `cb(err, ...)` task, or omit both to specify a synchronous task.A synchronous task can only have a single return parameter.
203
- 5. **optional task options** - object - if an object is provided this can be used to specify additional options for this task. Currently the valid options for a task are:
156
+ 4. **function reference or method string** - Specify the function to be called for this task, or if calling a method off of an object being passed in or returned by a task, use a string to specify like `'obj.method'`. These can be asynchronous Node-style callback `cb(err, ...)` functions or synchronous functions which simply return values directly.
157
+ 5. **in/out task parameter definition** - string - similar to the in/out flow parameter definition above, these are the inputs and outputs that are passed to a task function and returned from a task function. The inputs will need to match either those from the flow inputs or outputs from other tasks that will run before this task. React will use the inputs as dependencies, so it will invoke and wait for response from the tasks that provide the dependent inputs. So simply by specifying inputs and outputs for the tasks, React will prioritize and parallelize tasks to run as fast as possible. Use `cb` or `callback` along with `err` to specify asynchronous Node style `cb(err, ...)` task, or omit both to specify a synchronous task.A synchronous task can only have a single return parameter.
158
+ 6. **optional task options** - object - if an object is provided this can be used to specify additional options for this task. Currently the valid options for a task are:
204
159
  - **name** - string - specifies a name for a task, otherwise React will try to use the function name or method string if it is unique in the flow. If a name is not unique subsequent tasks will have `_index` (zero based index of the task) added to create unique name. If you specify a name, you will also want to indicate a unique name for within the flow otherwise it will get a suffix as well. Example: `{ name: 'myTaskName' }`
205
160
  - **after** - string, function reference, or array of string or function refs - specify additional preconditions that need to be complete before this task can run. In addition to the input dependencies being met, wait for these named tasks to complete before running. The preconditions are specified using the name of the task or if the task function was only used once and is a named function (not anonymous), you can just provide the function reference and it will determine name from it. Example: `{ after: 'foo' }` or `{ after: ['foo', 'bar'] }`
206
- 6. **repeat 3-5** - repeat steps 3-5 to specify additional tasks in this flow. As dependencies are met for tasks, React will invoke additional tasks that are ready to run in the order they are defined in this flow definition. So while the order does have some influence on the execution, it is primarily defined by the input dependencies and any other additonal preconditions specified with the `after` option. If you want to guarantee that something only runs after something else completes, then it will need to use an output from that task or specify the dependency with an `after`.
161
+ 7. **repeat 4-6** - repeat steps 4-6 to specify additional tasks in this flow. As dependencies are met for tasks, React will invoke additional tasks that are ready to run in the order they are defined in this flow definition. So while the order does have some influence on the execution, it is primarily defined by the input dependencies and any other additonal preconditions specified with the `after` option. If you want to guarantee that something only runs after something else completes, then it will need to use an output from that task or specify the dependency with an `after`.
207
162
 
208
163
 
209
164
  The flow function created by react from the input definition is a normal Node-style function which can be used like any other. These flow functions can be defined in a module and exported, they can be passed into other functions, used as methods on objects (the `this` context is passed in and available).
210
165
 
166
+ ### Debugging React
211
167
 
212
- ### AST
213
-
214
- The abstract syntax tree or AST provided by React represents the data necessary to define the flow. By abstracting this from the DSL, it allows new skins or interfaces to be developed without need to change the core engine.
215
-
216
- The AST is normally created at parse time when the React main function is called (or one of the alternate DSL's is called). This can be done a module load time such that after loading the React defined flow function's AST is generated and ready to process eliminating parsing and validation overhead when it is invoked in the future. This has the added advantage that since validation has also been performed that additional syntax issues or incomplete flow defintion errors can be caught quickly.
217
-
218
- After the flow function has been created, you can review the generated AST for a function by accessing the ast.
168
+ React has a built-in plugin which can be loaded that will enable logging of tasks and flow as it executes very useful for debugging. For full details see [Advanced React - LogEvents](https://github.com/jeffbski/react/blob/master/doc/advanced.md#LogEvents) along with the other plugins and an explanation of the AST React uses.
219
169
 
220
170
  ```javascript
221
171
  var react = require('react');
222
- var fn = react('my-flow-name', 'paramName1, paramName2, cb -> err, outParamName1, outParamName2',
223
- functionRefOrMethodStr, 'paramName1, cb -> err, outParamName2', // async cb task
224
- functionRefOrMethodStr2, 'paramName2, paramName1 -> outParamName1' // sync task
225
- );
226
-
227
- console.error(fn.ast); // output the generated AST
228
- ```
229
-
230
- The AST contains the following pieces:
231
-
232
- ```javascript
233
- var ast = {
234
- name: flowName,
235
- inParams: [],
236
- tasks: [],
237
- outTask: {},
238
- locals: {}
239
- };
172
+ react.logEvents(); // turn on flow and task logging for all react functions
240
173
  ```
241
- - **name** - string - represents the name of the flow or function that will be created. React will use the name when generating events so you can monitor progress and performance and also when errors occur.
242
- - **inParams** - array of strings - the flow input parameter names (excluding the callback param)
243
- - **tasks** - array of task defintion objects - each containing:
244
- - **f** - function reference or method string - async or sync function to be used for this task
245
- - **a** - array of input parameter names (excluding the callback param)
246
- - **out** - array of output parameter names (excluding the err parame)
247
- - **type** - type of function determining how function is invoked and its output style - one of: ('cb', 'ret', 'promise', 'when')
248
- - **name** - string - unique name for each task provided or generated by React
249
- - **outTask** - task definition object specifying the flow's output style and parameters containing:
250
- - **f** - will contain reference to the callback function at runtime
251
- - **a** - parameters being passed as output from the flow
252
- - **locals** - object provided which contains additional values that will become part of the React variable space like input parameters but can be defined in advance at flow definition. This can be used to provide functions and objects to React enabling string based DSL's like the pcode DSL can be utilized.
253
-
254
174
 
255
- ### Plugins (optional requires which turn on additional functionality)
175
+ ### Advanced React
256
176
 
257
- Additional functionality which is not enabled by default but available by requiring additional modules.
258
-
259
-
260
- #### LogEvents - log react progress to stderr
261
-
262
- For convenience in debugging or in monitoring flow and performance, React has a built-in plugin for easily logging progress to stderr which is activiated by requiring it and specifying a particular flow function to log or use the main react for global logging of all react modules.
263
-
264
- ```javascript
265
- require('react/lib/log-events').logEvents(react); // turn on logging for all react functions
266
-
267
- // OR
268
-
269
- require('react/lib/log-events').logEvents(myReactFn); // turn on logging for a specific function, repeat for other functions as needed
270
- ```
271
-
272
- #### Automatic Promise Resolution for inputs
273
-
274
- If you want to automatically resolve promises in React without having to manually call `when` or `then`, React provides a plugin which will detect the existence of a `then` method (indicating a promise) at runtime from any inputs to the flow and will internally create `when` tasks to resolve them before passing the values to other tasks.
275
-
276
- ```javascript
277
- require('react/promise-resolve');
278
- ```
279
-
280
- #### Track tasks
281
-
282
- Instead of only logging events to stderr (like LogEvents), this plugin fires events that can be directly monitored. The LogEvent plugin uses this internally to get access to the metrics.
283
-
284
- It also provides a simple accumulator which can be used to accumulate events. Note that this accumulator is designed for short term debug use, as it will continue to accumulate events and does not have any size restrictions.
285
-
286
- Thus while the tracking can be used in production because it simply fires events, the accumulator should only be used for convenience in debugging and testing.
287
-
288
- ```javascript
289
- require('react/lib/track-tasks'); // enable tracking and events
290
-
291
- // if you want to use the accumulator
292
-
293
- var EventCollector = require('react/lib/track-tasks').EventCollector;
294
- var collector = new EventCollector();
295
-
296
- collector.captureGlobal('*'); // capture all react events for all flows
297
-
298
- // OR
299
-
300
- collector.capture(flowFn, 'task.'); // capture task events on a flow
301
- collector.capture(flowFn, 'flow.'); // add capture flow events on a flow
302
-
303
- var events = collector.list(); // retrieve the list of events
304
- ```
177
+ React has many additional plugins and features which enable logging, monitoring, promise resolution, etc.
305
178
 
306
- #### Alternate DSL's
179
+ See the [Advanced React](https://github.com/jeffbski/react/blob/master/doc/advanced.md) for details on the AST React uses for processing and other plugins that are available.
307
180
 
308
- Additional DSL's can be loaded by requiring them. See the [Alternate DSL](https://github.com/jeffbski/react/blob/master/doc/alternate-dsls.md) page for more info.
309
181
 
310
182
 
311
183
  ## Status
312
184
 
185
+ - 2012-01-18 - Remove old DSL interfaces, improve plugin loading (v0.5.0)
313
186
  - 2012-01-17 - Additional documentation (v0.3.5)
314
187
  - 2012-01-16 - Refine events and create logging plugin (v0.3.3)
315
188
  - 2012-01-13 - Add promise tasks, promise resolution, refactor alternate DSL interfaces as optional requires (v0.3.0)
@@ -327,15 +200,12 @@ ok core-deferred.test.js .......... 11/11
327
200
  ok core-promised.test.js .......... 11/11
328
201
  ok core-when.test.js ................ 6/6
329
202
  ok core.test.js ................. 104/104
330
- ok chain.test.js .................. 74/74
331
- ok fstr.test.js ................... 67/67
332
- ok pcode.test.js .................. 94/94
333
203
  ok dsl.test.js .................... 70/70
334
204
  ok event-manager.test.js .......... 13/13
335
205
  ok exec-options.test.js ............. 3/3
336
206
  ok finalcb-task.test.js ............. 5/5
337
207
  ok input-parser.test.js ........... 15/15
338
- ok module-use.test.js ............. 21/21
208
+ ok module-use.test.js ............. 24/24
339
209
  ok promise-auto-resolve.test.js ..... 4/4
340
210
  ok ret-task.test.js ............... 31/31
341
211
  ok task.test.js ..................... 1/1
@@ -343,7 +213,7 @@ ok validate-cb-task.test.js ......... 6/6
343
213
  ok validate-ret-task.test.js ........ 7/7
344
214
  ok validate.test.js ............... 31/31
345
215
  ok vcon.test.js ................... 55/55
346
- total ........................... 692/692
216
+ total ........................... 457/457
347
217
 
348
218
  ok
349
219
  ```
@@ -0,0 +1,161 @@
1
+ # Advanced React
2
+
3
+ <a name="directAST"/>
4
+ ## Example defining directly using AST
5
+
6
+ Defining flow directly using the AST. Additional DSL interfaces can be built by simply having them build the proper AST.
7
+
8
+
9
+ ```javascript
10
+ var react = require('react');
11
+
12
+ function load(res, cb) { setTimeout(cb, 100, null, res + '-loaded'); }
13
+ function prefix(prefstr, str, cb) { setTimeout(cb, 100, null, prefstr + str); }
14
+ function postfix(str, poststr, cb) { setTimeout(cb, 100, null, str + poststr); }
15
+ function upper(str) { return str.toUpperCase(); }
16
+
17
+ var fn = react();
18
+ var errors = fn.setAndValidateAST({
19
+ inParams: ['res', 'prefstr', 'poststr'],
20
+ tasks: [
21
+ { f: load, a: ['res'], out: ['lres'] },
22
+ { f: upper, a: ['lres'], out: ['ulres'], type: 'ret' },
23
+ { f: prefix, a: ['prefstr', 'ulres'], out: ['plres'] },
24
+ { f: postfix, a: ['plres', 'poststr'], out: ['plresp'] }
25
+ ],
26
+ outTask: { a: ['plresp'] }
27
+ });
28
+ console.error('errors:', errors); // []
29
+
30
+ fn('foo', 'pre-', '-post', function cb(err, lres) {
31
+ console.error('err:', err); // null
32
+ console.error('lres:', lres); // pre-FOO-LOADED-post
33
+ });
34
+ ```
35
+
36
+
37
+ ## AST Definition
38
+
39
+ The abstract syntax tree or AST provided by React represents the data necessary to define the flow. By abstracting this from the DSL, it allows new skins or interfaces to be developed without need to change the core engine.
40
+
41
+ The AST is normally created at parse time when the React main function is called (or one of the alternate DSL's is called). This can be done a module load time such that after loading the React defined flow function's AST is generated and ready to process eliminating parsing and validation overhead when it is invoked in the future. This has the added advantage that since validation has also been performed that additional syntax issues or incomplete flow defintion errors can be caught quickly.
42
+
43
+ After the flow function has been created, you can review the generated AST for a function by accessing the ast.
44
+
45
+ ```javascript
46
+ var react = require('react');
47
+ var fn = react('my-flow-name', 'paramName1, paramName2, cb -> err, outParamName1, outParamName2',
48
+ functionRefOrMethodStr, 'paramName1, cb -> err, outParamName2', // async cb task
49
+ functionRefOrMethodStr2, 'paramName2, paramName1 -> outParamName1' // sync task
50
+ );
51
+
52
+ console.error(fn.ast); // output the generated AST
53
+ ```
54
+
55
+ The AST contains the following pieces:
56
+
57
+ ```javascript
58
+ var ast = {
59
+ name: flowName,
60
+ inParams: [],
61
+ tasks: [],
62
+ outTask: {},
63
+ locals: {}
64
+ };
65
+ ```
66
+ - **name** - string - represents the name of the flow or function that will be created. React will use the name when generating events so you can monitor progress and performance and also when errors occur.
67
+ - **inParams** - array of strings - the flow input parameter names (excluding the callback param)
68
+ - **tasks** - array of task defintion objects - each containing:
69
+ - **f** - function reference or method string - async or sync function to be used for this task
70
+ - **a** - array of input parameter names (excluding the callback param)
71
+ - **out** - array of output parameter names (excluding the err parame)
72
+ - **type** - type of function determining how function is invoked and its output style - one of: ('cb', 'ret', 'promise', 'when')
73
+ - **name** - string - unique name for each task provided or generated by React
74
+ - **outTask** - task definition object specifying the flow's output style and parameters containing:
75
+ - **f** - will contain reference to the callback function at runtime
76
+ - **a** - parameters being passed as output from the flow
77
+ - **locals** - object provided which contains additional values that will become part of the React variable space like input parameters but can be defined in advance at flow definition. This can be used to provide functions and objects to React enabling string based DSL's.
78
+
79
+
80
+ ## Plugins (optional requires which turn on additional functionality)
81
+
82
+ Additional functionality which is not enabled by default but available by requiring additional modules.
83
+
84
+
85
+ <a name="LogEvents"/>
86
+ ### LogEvents - log react progress to stderr
87
+
88
+ For convenience in debugging or in monitoring flow and performance, React has a built-in plugin for easily logging progress to stderr which is loaded and activated calling the react method `logEvents`. It can be specified to log globally for all react functions or only for particular react functions. You also may optionally listen to select events rather than all flow and task events.
89
+
90
+ ```javascript
91
+ var react = require('react');
92
+ react.logEvents(); // turn on flow and task logging for all react functions
93
+
94
+ // OR
95
+
96
+ react.logEvents(myReactFn); // turn on flow and task logging for a specific function, repeat as needed
97
+ react.logEvents(myReactFn).logEvents(myReactFn2); // can also chain
98
+
99
+ // Both methods can also take an optional event wildcard to specify what you want to listen to
100
+
101
+ react.logEvents('flow.*'); // turn on flow logging for all react functions
102
+ react.logEvents(myReactFn, 'task.*'); // turn on task logging for myReactFn
103
+ ```
104
+
105
+ Available Events that can be logged:
106
+
107
+ - flow.begin - flow execution has started (receives a flow env)
108
+ - flow.complete - flow execution has successfully completed (receives a flow env)
109
+ - flow.errored - flow execution has errored (receives a flow env)
110
+ - task.begin - task has started (receives task)
111
+ - task.complete - task has successfully complted (receives task)
112
+ - task.errored - task has errored (receives task)
113
+
114
+ ### Automatic Promise Resolution for inputs
115
+
116
+ If you want to automatically resolve promises in React without having to manually call `when` or `then`, React provides a plugin which will detect the existence of a `then` method (indicating a promise) at runtime from any inputs to the flow and will internally create `when` tasks to resolve them before passing the values to other tasks. This built-in plugin is not loaded normally but is loaded by invoking the react method `resolvePromises`. External plugins like `react-deferred` also enable this but also provide additional promise integration. See https://github.com/jeffbski/react-deferred
117
+
118
+ ```javascript
119
+ var react = require('react');
120
+ react.resolvePromises(); // turn on automatic promise detection and resolution
121
+ ```
122
+
123
+ ### Track tasks - enable task tracking
124
+
125
+ Instead of only logging events to stderr (like LogEvents), this built-in plugin fires events that can be directly monitored. The LogEvent plugin uses this internally to get access to the metrics.
126
+
127
+ Enable this like the other built-in plugins using the method `trackTasks`
128
+
129
+ ```javascript
130
+ var react = require('react');
131
+ react.trackTasks(); // turn on flow and task tracking events
132
+ ```
133
+
134
+ Available Events that can be consumed
135
+
136
+ - flow.begin - flow execution has started (receives a flow env)
137
+ - flow.complete - flow execution has successfully completed (receives a flow env)
138
+ - flow.errored - flow execution has errored (receives a flow env)
139
+ - task.begin - task has started (receives task)
140
+ - task.complete - task has successfully complted (receives task)
141
+ - task.errored - task has errored (receives task)
142
+
143
+
144
+ ### EventCollector - simple event accumulator for debug use
145
+
146
+ When developing or debugging it is often useful to accumulate events and then interrogate them to verify operation, especially in testing.
147
+
148
+ To make this easier to accomplish, this plugin provides a simple event accumulator for development use. Note that this accumulator is designed for short term debug use, as it will continue to accumulate events and does not have any size restrictions, it should not be used in production since it will just continue to grow in size unless manually cleared.
149
+
150
+ ```javascript
151
+ var EventCollector = require('react/lib/event-collector);
152
+ var collector = new EventCollector();
153
+
154
+ collector.capture(); // capture all flow and task events for all react flows
155
+ collector.capture('flow.*'); // capture all flow events for all react flows
156
+ collector.capture(flowFn, 'task.*'); // capture task events on a flow
157
+ collector.capture(flowFn, 'flow.*'); // add capture flow events on a flow
158
+
159
+ var events = collector.list(); // retrieve the list of events
160
+ collector.clear(); // clear the list of events;
161
+ ```
@@ -0,0 +1,938 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
3
+ <plist version="1.0">
4
+ <dict>
5
+ <key>ActiveLayerIndex</key>
6
+ <integer>0</integer>
7
+ <key>ApplicationVersion</key>
8
+ <array>
9
+ <string>com.omnigroup.OmniGrafflePro</string>
10
+ <string>138.33.0.157554</string>
11
+ </array>
12
+ <key>AutoAdjust</key>
13
+ <true/>
14
+ <key>BackgroundGraphic</key>
15
+ <dict>
16
+ <key>Bounds</key>
17
+ <string>{{0, 0}, {576, 733}}</string>
18
+ <key>Class</key>
19
+ <string>SolidGraphic</string>
20
+ <key>ID</key>
21
+ <integer>2</integer>
22
+ <key>Style</key>
23
+ <dict>
24
+ <key>shadow</key>
25
+ <dict>
26
+ <key>Draws</key>
27
+ <string>NO</string>
28
+ </dict>
29
+ <key>stroke</key>
30
+ <dict>
31
+ <key>Draws</key>
32
+ <string>NO</string>
33
+ </dict>
34
+ </dict>
35
+ </dict>
36
+ <key>CanvasOrigin</key>
37
+ <string>{0, 0}</string>
38
+ <key>ColumnAlign</key>
39
+ <integer>1</integer>
40
+ <key>ColumnSpacing</key>
41
+ <real>36</real>
42
+ <key>CreationDate</key>
43
+ <string>2012-01-17 20:24:28 +0000</string>
44
+ <key>Creator</key>
45
+ <string>Barczewski, Jeffrey (ELS-STL)</string>
46
+ <key>DisplayScale</key>
47
+ <string>1 0/72 in = 1 0/72 in</string>
48
+ <key>GraphDocumentVersion</key>
49
+ <integer>8</integer>
50
+ <key>GraphicsList</key>
51
+ <array>
52
+ <dict>
53
+ <key>Class</key>
54
+ <string>LineGraphic</string>
55
+ <key>ID</key>
56
+ <integer>26</integer>
57
+ <key>Points</key>
58
+ <array>
59
+ <string>{365.5, 129.8421}</string>
60
+ <string>{275.5, 139}</string>
61
+ </array>
62
+ <key>Style</key>
63
+ <dict>
64
+ <key>stroke</key>
65
+ <dict>
66
+ <key>HeadArrow</key>
67
+ <string>FilledArrow</string>
68
+ <key>LineType</key>
69
+ <integer>1</integer>
70
+ <key>TailArrow</key>
71
+ <string>0</string>
72
+ </dict>
73
+ </dict>
74
+ <key>Tail</key>
75
+ <dict>
76
+ <key>ID</key>
77
+ <integer>22</integer>
78
+ </dict>
79
+ </dict>
80
+ <dict>
81
+ <key>Class</key>
82
+ <string>LineGraphic</string>
83
+ <key>ID</key>
84
+ <integer>25</integer>
85
+ <key>Points</key>
86
+ <array>
87
+ <string>{365.5, 124.95454}</string>
88
+ <string>{302.5, 125.5}</string>
89
+ </array>
90
+ <key>Style</key>
91
+ <dict>
92
+ <key>stroke</key>
93
+ <dict>
94
+ <key>HeadArrow</key>
95
+ <string>FilledArrow</string>
96
+ <key>LineType</key>
97
+ <integer>1</integer>
98
+ <key>TailArrow</key>
99
+ <string>0</string>
100
+ </dict>
101
+ </dict>
102
+ <key>Tail</key>
103
+ <dict>
104
+ <key>ID</key>
105
+ <integer>22</integer>
106
+ </dict>
107
+ </dict>
108
+ <dict>
109
+ <key>Class</key>
110
+ <string>LineGraphic</string>
111
+ <key>ID</key>
112
+ <integer>24</integer>
113
+ <key>Points</key>
114
+ <array>
115
+ <string>{365.5, 119.32394}</string>
116
+ <string>{276, 110.5}</string>
117
+ </array>
118
+ <key>Style</key>
119
+ <dict>
120
+ <key>stroke</key>
121
+ <dict>
122
+ <key>HeadArrow</key>
123
+ <string>FilledArrow</string>
124
+ <key>LineType</key>
125
+ <integer>1</integer>
126
+ <key>TailArrow</key>
127
+ <string>0</string>
128
+ </dict>
129
+ </dict>
130
+ <key>Tail</key>
131
+ <dict>
132
+ <key>ID</key>
133
+ <integer>22</integer>
134
+ </dict>
135
+ </dict>
136
+ <dict>
137
+ <key>Bounds</key>
138
+ <string>{{365.5, 117.5}, {105, 14}}</string>
139
+ <key>Class</key>
140
+ <string>ShapedGraphic</string>
141
+ <key>FitText</key>
142
+ <string>YES</string>
143
+ <key>Flow</key>
144
+ <string>Resize</string>
145
+ <key>ID</key>
146
+ <integer>22</integer>
147
+ <key>Shape</key>
148
+ <string>Rectangle</string>
149
+ <key>Style</key>
150
+ <dict>
151
+ <key>fill</key>
152
+ <dict>
153
+ <key>Draws</key>
154
+ <string>NO</string>
155
+ </dict>
156
+ <key>shadow</key>
157
+ <dict>
158
+ <key>Draws</key>
159
+ <string>NO</string>
160
+ </dict>
161
+ <key>stroke</key>
162
+ <dict>
163
+ <key>Draws</key>
164
+ <string>NO</string>
165
+ </dict>
166
+ </dict>
167
+ <key>Text</key>
168
+ <dict>
169
+ <key>Pad</key>
170
+ <integer>0</integer>
171
+ <key>Text</key>
172
+ <string>{\rtf1\ansi\ansicpg1252\cocoartf1138\cocoasubrtf230
173
+ {\fonttbl\f0\fswiss\fcharset0 Helvetica;}
174
+ {\colortbl;\red255\green255\blue255;}
175
+ \pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\pardirnatural\qc
176
+
177
+ \f0\fs24 \cf0 task in / out params}</string>
178
+ <key>VerticalPad</key>
179
+ <integer>0</integer>
180
+ </dict>
181
+ <key>Wrap</key>
182
+ <string>NO</string>
183
+ </dict>
184
+ <dict>
185
+ <key>Class</key>
186
+ <string>LineGraphic</string>
187
+ <key>Head</key>
188
+ <dict>
189
+ <key>ID</key>
190
+ <integer>4</integer>
191
+ </dict>
192
+ <key>ID</key>
193
+ <integer>21</integer>
194
+ <key>Points</key>
195
+ <array>
196
+ <string>{57, 142}</string>
197
+ <string>{78.5, 141.00331}</string>
198
+ </array>
199
+ <key>Style</key>
200
+ <dict>
201
+ <key>stroke</key>
202
+ <dict>
203
+ <key>HeadArrow</key>
204
+ <string>FilledArrow</string>
205
+ <key>LineType</key>
206
+ <integer>1</integer>
207
+ <key>TailArrow</key>
208
+ <string>0</string>
209
+ </dict>
210
+ </dict>
211
+ </dict>
212
+ <dict>
213
+ <key>Class</key>
214
+ <string>LineGraphic</string>
215
+ <key>ID</key>
216
+ <integer>20</integer>
217
+ <key>Points</key>
218
+ <array>
219
+ <string>{55.5, 126.26373}</string>
220
+ <string>{78.5, 125}</string>
221
+ </array>
222
+ <key>Style</key>
223
+ <dict>
224
+ <key>stroke</key>
225
+ <dict>
226
+ <key>HeadArrow</key>
227
+ <string>FilledArrow</string>
228
+ <key>LineType</key>
229
+ <integer>1</integer>
230
+ <key>TailArrow</key>
231
+ <string>0</string>
232
+ </dict>
233
+ </dict>
234
+ <key>Tail</key>
235
+ <dict>
236
+ <key>ID</key>
237
+ <integer>17</integer>
238
+ </dict>
239
+ </dict>
240
+ <dict>
241
+ <key>Class</key>
242
+ <string>LineGraphic</string>
243
+ <key>ID</key>
244
+ <integer>19</integer>
245
+ <key>Points</key>
246
+ <array>
247
+ <string>{55.5, 112.25275}</string>
248
+ <string>{78.5, 112}</string>
249
+ </array>
250
+ <key>Style</key>
251
+ <dict>
252
+ <key>stroke</key>
253
+ <dict>
254
+ <key>HeadArrow</key>
255
+ <string>FilledArrow</string>
256
+ <key>LineType</key>
257
+ <integer>1</integer>
258
+ <key>TailArrow</key>
259
+ <string>0</string>
260
+ </dict>
261
+ </dict>
262
+ <key>Tail</key>
263
+ <dict>
264
+ <key>ID</key>
265
+ <integer>16</integer>
266
+ </dict>
267
+ </dict>
268
+ <dict>
269
+ <key>Bounds</key>
270
+ <string>{{16.5, 134.5}, {39, 14}}</string>
271
+ <key>Class</key>
272
+ <string>ShapedGraphic</string>
273
+ <key>FitText</key>
274
+ <string>YES</string>
275
+ <key>Flow</key>
276
+ <string>Resize</string>
277
+ <key>ID</key>
278
+ <integer>18</integer>
279
+ <key>Shape</key>
280
+ <string>Rectangle</string>
281
+ <key>Style</key>
282
+ <dict>
283
+ <key>fill</key>
284
+ <dict>
285
+ <key>Draws</key>
286
+ <string>NO</string>
287
+ </dict>
288
+ <key>shadow</key>
289
+ <dict>
290
+ <key>Draws</key>
291
+ <string>NO</string>
292
+ </dict>
293
+ <key>stroke</key>
294
+ <dict>
295
+ <key>Draws</key>
296
+ <string>NO</string>
297
+ </dict>
298
+ </dict>
299
+ <key>Text</key>
300
+ <dict>
301
+ <key>Pad</key>
302
+ <integer>0</integer>
303
+ <key>Text</key>
304
+ <string>{\rtf1\ansi\ansicpg1252\cocoartf1138\cocoasubrtf230
305
+ {\fonttbl\f0\fswiss\fcharset0 Helvetica;}
306
+ {\colortbl;\red255\green255\blue255;}
307
+ \pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\pardirnatural\qc
308
+
309
+ \f0\fs24 \cf0 sync fn}</string>
310
+ <key>VerticalPad</key>
311
+ <integer>0</integer>
312
+ </dict>
313
+ <key>Wrap</key>
314
+ <string>NO</string>
315
+ </dict>
316
+ <dict>
317
+ <key>Bounds</key>
318
+ <string>{{10.5, 120.5}, {45, 14}}</string>
319
+ <key>Class</key>
320
+ <string>ShapedGraphic</string>
321
+ <key>FitText</key>
322
+ <string>YES</string>
323
+ <key>Flow</key>
324
+ <string>Resize</string>
325
+ <key>ID</key>
326
+ <integer>17</integer>
327
+ <key>Shape</key>
328
+ <string>Rectangle</string>
329
+ <key>Style</key>
330
+ <dict>
331
+ <key>fill</key>
332
+ <dict>
333
+ <key>Draws</key>
334
+ <string>NO</string>
335
+ </dict>
336
+ <key>shadow</key>
337
+ <dict>
338
+ <key>Draws</key>
339
+ <string>NO</string>
340
+ </dict>
341
+ <key>stroke</key>
342
+ <dict>
343
+ <key>Draws</key>
344
+ <string>NO</string>
345
+ </dict>
346
+ </dict>
347
+ <key>Text</key>
348
+ <dict>
349
+ <key>Pad</key>
350
+ <integer>0</integer>
351
+ <key>Text</key>
352
+ <string>{\rtf1\ansi\ansicpg1252\cocoartf1138\cocoasubrtf230
353
+ {\fonttbl\f0\fswiss\fcharset0 Helvetica;}
354
+ {\colortbl;\red255\green255\blue255;}
355
+ \pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\pardirnatural\qc
356
+
357
+ \f0\fs24 \cf0 async fn}</string>
358
+ <key>VerticalPad</key>
359
+ <integer>0</integer>
360
+ </dict>
361
+ <key>Wrap</key>
362
+ <string>NO</string>
363
+ </dict>
364
+ <dict>
365
+ <key>Bounds</key>
366
+ <string>{{10.5, 105.5}, {45, 14}}</string>
367
+ <key>Class</key>
368
+ <string>ShapedGraphic</string>
369
+ <key>FitText</key>
370
+ <string>YES</string>
371
+ <key>Flow</key>
372
+ <string>Resize</string>
373
+ <key>ID</key>
374
+ <integer>16</integer>
375
+ <key>Shape</key>
376
+ <string>Rectangle</string>
377
+ <key>Style</key>
378
+ <dict>
379
+ <key>fill</key>
380
+ <dict>
381
+ <key>Draws</key>
382
+ <string>NO</string>
383
+ </dict>
384
+ <key>shadow</key>
385
+ <dict>
386
+ <key>Draws</key>
387
+ <string>NO</string>
388
+ </dict>
389
+ <key>stroke</key>
390
+ <dict>
391
+ <key>Draws</key>
392
+ <string>NO</string>
393
+ </dict>
394
+ </dict>
395
+ <key>Text</key>
396
+ <dict>
397
+ <key>Pad</key>
398
+ <integer>0</integer>
399
+ <key>Text</key>
400
+ <string>{\rtf1\ansi\ansicpg1252\cocoartf1138\cocoasubrtf230
401
+ {\fonttbl\f0\fswiss\fcharset0 Helvetica;}
402
+ {\colortbl;\red255\green255\blue255;}
403
+ \pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\pardirnatural\qc
404
+
405
+ \f0\fs24 \cf0 async fn}</string>
406
+ <key>VerticalPad</key>
407
+ <integer>0</integer>
408
+ </dict>
409
+ <key>Wrap</key>
410
+ <string>NO</string>
411
+ </dict>
412
+ <dict>
413
+ <key>Class</key>
414
+ <string>LineGraphic</string>
415
+ <key>ID</key>
416
+ <integer>15</integer>
417
+ <key>Points</key>
418
+ <array>
419
+ <string>{430.80768, 57.5}</string>
420
+ <string>{434.5, 89.5}</string>
421
+ </array>
422
+ <key>Style</key>
423
+ <dict>
424
+ <key>stroke</key>
425
+ <dict>
426
+ <key>HeadArrow</key>
427
+ <string>FilledArrow</string>
428
+ <key>LineType</key>
429
+ <integer>1</integer>
430
+ <key>TailArrow</key>
431
+ <string>0</string>
432
+ </dict>
433
+ </dict>
434
+ <key>Tail</key>
435
+ <dict>
436
+ <key>ID</key>
437
+ <integer>7</integer>
438
+ </dict>
439
+ </dict>
440
+ <dict>
441
+ <key>Class</key>
442
+ <string>LineGraphic</string>
443
+ <key>ID</key>
444
+ <integer>14</integer>
445
+ <key>Points</key>
446
+ <array>
447
+ <string>{106.08696, 57.5}</string>
448
+ <string>{104, 89.5}</string>
449
+ </array>
450
+ <key>Style</key>
451
+ <dict>
452
+ <key>stroke</key>
453
+ <dict>
454
+ <key>HeadArrow</key>
455
+ <string>FilledArrow</string>
456
+ <key>LineType</key>
457
+ <integer>1</integer>
458
+ <key>TailArrow</key>
459
+ <string>0</string>
460
+ </dict>
461
+ </dict>
462
+ <key>Tail</key>
463
+ <dict>
464
+ <key>ID</key>
465
+ <integer>8</integer>
466
+ </dict>
467
+ </dict>
468
+ <dict>
469
+ <key>Class</key>
470
+ <string>LineGraphic</string>
471
+ <key>Head</key>
472
+ <dict>
473
+ <key>ID</key>
474
+ <integer>4</integer>
475
+ </dict>
476
+ <key>ID</key>
477
+ <integer>12</integer>
478
+ <key>Points</key>
479
+ <array>
480
+ <string>{292.6358, 57.5}</string>
481
+ <string>{288.68518, 89.5}</string>
482
+ </array>
483
+ <key>Style</key>
484
+ <dict>
485
+ <key>stroke</key>
486
+ <dict>
487
+ <key>HeadArrow</key>
488
+ <string>FilledArrow</string>
489
+ <key>LineType</key>
490
+ <integer>1</integer>
491
+ <key>TailArrow</key>
492
+ <string>0</string>
493
+ </dict>
494
+ </dict>
495
+ <key>Tail</key>
496
+ <dict>
497
+ <key>ID</key>
498
+ <integer>6</integer>
499
+ </dict>
500
+ </dict>
501
+ <dict>
502
+ <key>Class</key>
503
+ <string>LineGraphic</string>
504
+ <key>ID</key>
505
+ <integer>11</integer>
506
+ <key>Points</key>
507
+ <array>
508
+ <string>{188.10257, 57.5}</string>
509
+ <string>{184, 89.5}</string>
510
+ </array>
511
+ <key>Style</key>
512
+ <dict>
513
+ <key>stroke</key>
514
+ <dict>
515
+ <key>HeadArrow</key>
516
+ <string>FilledArrow</string>
517
+ <key>LineType</key>
518
+ <integer>1</integer>
519
+ <key>TailArrow</key>
520
+ <string>0</string>
521
+ </dict>
522
+ </dict>
523
+ <key>Tail</key>
524
+ <dict>
525
+ <key>ID</key>
526
+ <integer>5</integer>
527
+ </dict>
528
+ </dict>
529
+ <dict>
530
+ <key>Bounds</key>
531
+ <string>{{71.5, 29.5}, {71, 28}}</string>
532
+ <key>Class</key>
533
+ <string>ShapedGraphic</string>
534
+ <key>FitText</key>
535
+ <string>YES</string>
536
+ <key>Flow</key>
537
+ <string>Resize</string>
538
+ <key>ID</key>
539
+ <integer>8</integer>
540
+ <key>Shape</key>
541
+ <string>Rectangle</string>
542
+ <key>Style</key>
543
+ <dict>
544
+ <key>fill</key>
545
+ <dict>
546
+ <key>Draws</key>
547
+ <string>NO</string>
548
+ </dict>
549
+ <key>shadow</key>
550
+ <dict>
551
+ <key>Draws</key>
552
+ <string>NO</string>
553
+ </dict>
554
+ <key>stroke</key>
555
+ <dict>
556
+ <key>Draws</key>
557
+ <string>NO</string>
558
+ </dict>
559
+ </dict>
560
+ <key>Text</key>
561
+ <dict>
562
+ <key>Pad</key>
563
+ <integer>0</integer>
564
+ <key>Text</key>
565
+ <string>{\rtf1\ansi\ansicpg1252\cocoartf1138\cocoasubrtf230
566
+ {\fonttbl\f0\fswiss\fcharset0 Helvetica;}
567
+ {\colortbl;\red255\green255\blue255;}
568
+ \pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\pardirnatural\qc
569
+
570
+ \f0\fs24 \cf0 react created\
571
+ function}</string>
572
+ <key>VerticalPad</key>
573
+ <integer>0</integer>
574
+ </dict>
575
+ <key>Wrap</key>
576
+ <string>NO</string>
577
+ </dict>
578
+ <dict>
579
+ <key>Bounds</key>
580
+ <string>{{387.5, 43.5}, {85, 14}}</string>
581
+ <key>Class</key>
582
+ <string>ShapedGraphic</string>
583
+ <key>FitText</key>
584
+ <string>YES</string>
585
+ <key>Flow</key>
586
+ <string>Resize</string>
587
+ <key>ID</key>
588
+ <integer>7</integer>
589
+ <key>Shape</key>
590
+ <string>Rectangle</string>
591
+ <key>Style</key>
592
+ <dict>
593
+ <key>fill</key>
594
+ <dict>
595
+ <key>Draws</key>
596
+ <string>NO</string>
597
+ </dict>
598
+ <key>shadow</key>
599
+ <dict>
600
+ <key>Draws</key>
601
+ <string>NO</string>
602
+ </dict>
603
+ <key>stroke</key>
604
+ <dict>
605
+ <key>Draws</key>
606
+ <string>NO</string>
607
+ </dict>
608
+ </dict>
609
+ <key>Text</key>
610
+ <dict>
611
+ <key>Pad</key>
612
+ <integer>0</integer>
613
+ <key>Text</key>
614
+ <string>{\rtf1\ansi\ansicpg1252\cocoartf1138\cocoasubrtf230
615
+ {\fonttbl\f0\fswiss\fcharset0 Helvetica;}
616
+ {\colortbl;\red255\green255\blue255;}
617
+ \pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\pardirnatural\qc
618
+
619
+ \f0\fs24 \cf0 flow out params}</string>
620
+ <key>VerticalPad</key>
621
+ <integer>0</integer>
622
+ </dict>
623
+ <key>Wrap</key>
624
+ <string>NO</string>
625
+ </dict>
626
+ <dict>
627
+ <key>Bounds</key>
628
+ <string>{{254.5, 43.5}, {78, 14}}</string>
629
+ <key>Class</key>
630
+ <string>ShapedGraphic</string>
631
+ <key>FitText</key>
632
+ <string>YES</string>
633
+ <key>Flow</key>
634
+ <string>Resize</string>
635
+ <key>ID</key>
636
+ <integer>6</integer>
637
+ <key>Shape</key>
638
+ <string>Rectangle</string>
639
+ <key>Style</key>
640
+ <dict>
641
+ <key>fill</key>
642
+ <dict>
643
+ <key>Draws</key>
644
+ <string>NO</string>
645
+ </dict>
646
+ <key>shadow</key>
647
+ <dict>
648
+ <key>Draws</key>
649
+ <string>NO</string>
650
+ </dict>
651
+ <key>stroke</key>
652
+ <dict>
653
+ <key>Draws</key>
654
+ <string>NO</string>
655
+ </dict>
656
+ </dict>
657
+ <key>Text</key>
658
+ <dict>
659
+ <key>Pad</key>
660
+ <integer>0</integer>
661
+ <key>Text</key>
662
+ <string>{\rtf1\ansi\ansicpg1252\cocoartf1138\cocoasubrtf230
663
+ {\fonttbl\f0\fswiss\fcharset0 Helvetica;}
664
+ {\colortbl;\red255\green255\blue255;}
665
+ \pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\pardirnatural\qc
666
+
667
+ \f0\fs24 \cf0 flow in params}</string>
668
+ <key>VerticalPad</key>
669
+ <integer>0</integer>
670
+ </dict>
671
+ <key>Wrap</key>
672
+ <string>NO</string>
673
+ </dict>
674
+ <dict>
675
+ <key>Bounds</key>
676
+ <string>{{161, 43.5}, {56, 14}}</string>
677
+ <key>Class</key>
678
+ <string>ShapedGraphic</string>
679
+ <key>FitText</key>
680
+ <string>YES</string>
681
+ <key>Flow</key>
682
+ <string>Resize</string>
683
+ <key>ID</key>
684
+ <integer>5</integer>
685
+ <key>Shape</key>
686
+ <string>Rectangle</string>
687
+ <key>Style</key>
688
+ <dict>
689
+ <key>fill</key>
690
+ <dict>
691
+ <key>Draws</key>
692
+ <string>NO</string>
693
+ </dict>
694
+ <key>shadow</key>
695
+ <dict>
696
+ <key>Draws</key>
697
+ <string>NO</string>
698
+ </dict>
699
+ <key>stroke</key>
700
+ <dict>
701
+ <key>Draws</key>
702
+ <string>NO</string>
703
+ </dict>
704
+ </dict>
705
+ <key>Text</key>
706
+ <dict>
707
+ <key>Pad</key>
708
+ <integer>0</integer>
709
+ <key>Text</key>
710
+ <string>{\rtf1\ansi\ansicpg1252\cocoartf1138\cocoasubrtf230
711
+ {\fonttbl\f0\fswiss\fcharset0 Helvetica;}
712
+ {\colortbl;\red255\green255\blue255;}
713
+ \pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\pardirnatural\qc
714
+
715
+ \f0\fs24 \cf0 flow-name}</string>
716
+ <key>VerticalPad</key>
717
+ <integer>0</integer>
718
+ </dict>
719
+ <key>Wrap</key>
720
+ <string>NO</string>
721
+ </dict>
722
+ <dict>
723
+ <key>Bounds</key>
724
+ <string>{{78.5, 89.5}, {410, 84}}</string>
725
+ <key>Class</key>
726
+ <string>ShapedGraphic</string>
727
+ <key>FitText</key>
728
+ <string>YES</string>
729
+ <key>Flow</key>
730
+ <string>Resize</string>
731
+ <key>ID</key>
732
+ <integer>4</integer>
733
+ <key>Shape</key>
734
+ <string>Rectangle</string>
735
+ <key>Style</key>
736
+ <dict>
737
+ <key>fill</key>
738
+ <dict>
739
+ <key>Draws</key>
740
+ <string>NO</string>
741
+ </dict>
742
+ <key>shadow</key>
743
+ <dict>
744
+ <key>Draws</key>
745
+ <string>NO</string>
746
+ </dict>
747
+ <key>stroke</key>
748
+ <dict>
749
+ <key>Draws</key>
750
+ <string>NO</string>
751
+ </dict>
752
+ </dict>
753
+ <key>Text</key>
754
+ <dict>
755
+ <key>Align</key>
756
+ <integer>0</integer>
757
+ <key>Pad</key>
758
+ <integer>0</integer>
759
+ <key>Text</key>
760
+ <string>{\rtf1\ansi\ansicpg1252\cocoartf1138\cocoasubrtf230
761
+ {\fonttbl\f0\fswiss\fcharset0 Helvetica;}
762
+ {\colortbl;\red255\green255\blue255;\red11\green130\blue127;\red29\green168\blue7;\red55\green79\blue168;
763
+ \red130\green18\blue115;\red130\green8\blue36;\red57\green89\blue130;\red112\green130\blue22;\red130\green4\blue35;
764
+ \red56\green86\blue130;\red115\green130\blue25;\red130\green7\blue38;\red117\green130\blue26;\red130\green13\blue116;
765
+ }
766
+ \pard\tx560\tx1120\tx1680\tx2240\tx2800\tx3360\tx3920\tx4480\tx5040\tx5600\tx6160\tx6720\pardirnatural
767
+
768
+ \f0\fs24 \cf0 var \cf2 fn\cf0 = react('\cf3 loadRender\cf0 ', '\cf4 fooPath, barPath, barP2, cb\cf0 -&gt; \cf5 err, renderedOut\cf0 ',\
769
+ \cf6 loadFoo\cf0 , '\cf7 fooPath\cf0 , cb -&gt; err, \cf8 foo\cf0 ',\
770
+ \cf9 loadBar\cf0 , '\cf10 barPath, barP2\cf0 , cb -&gt; err, \cf11 bar\cf0 ',\
771
+ \cf12 render\cf0 , '\cf13 foo, bar\cf0 -&gt; \cf14 renderedOut\cf0 '\
772
+ );\
773
+ }</string>
774
+ <key>VerticalPad</key>
775
+ <integer>0</integer>
776
+ </dict>
777
+ <key>Wrap</key>
778
+ <string>NO</string>
779
+ </dict>
780
+ </array>
781
+ <key>GridInfo</key>
782
+ <dict/>
783
+ <key>GuidesLocked</key>
784
+ <string>NO</string>
785
+ <key>GuidesVisible</key>
786
+ <string>YES</string>
787
+ <key>HPages</key>
788
+ <integer>1</integer>
789
+ <key>ImageCounter</key>
790
+ <integer>1</integer>
791
+ <key>KeepToScale</key>
792
+ <false/>
793
+ <key>Layers</key>
794
+ <array>
795
+ <dict>
796
+ <key>Lock</key>
797
+ <string>NO</string>
798
+ <key>Name</key>
799
+ <string>Layer 1</string>
800
+ <key>Print</key>
801
+ <string>YES</string>
802
+ <key>View</key>
803
+ <string>YES</string>
804
+ </dict>
805
+ </array>
806
+ <key>LayoutInfo</key>
807
+ <dict>
808
+ <key>Animate</key>
809
+ <string>NO</string>
810
+ <key>circoMinDist</key>
811
+ <real>18</real>
812
+ <key>circoSeparation</key>
813
+ <real>0.0</real>
814
+ <key>layoutEngine</key>
815
+ <string>dot</string>
816
+ <key>neatoSeparation</key>
817
+ <real>0.0</real>
818
+ <key>twopiSeparation</key>
819
+ <real>0.0</real>
820
+ </dict>
821
+ <key>LinksVisible</key>
822
+ <string>NO</string>
823
+ <key>MagnetsVisible</key>
824
+ <string>NO</string>
825
+ <key>MasterSheets</key>
826
+ <array/>
827
+ <key>ModificationDate</key>
828
+ <string>2012-01-17 20:43:33 +0000</string>
829
+ <key>Modifier</key>
830
+ <string>Barczewski, Jeffrey (ELS-STL)</string>
831
+ <key>NotesVisible</key>
832
+ <string>NO</string>
833
+ <key>Orientation</key>
834
+ <integer>2</integer>
835
+ <key>OriginVisible</key>
836
+ <string>NO</string>
837
+ <key>PageBreaks</key>
838
+ <string>YES</string>
839
+ <key>PrintInfo</key>
840
+ <dict>
841
+ <key>NSBottomMargin</key>
842
+ <array>
843
+ <string>float</string>
844
+ <string>41</string>
845
+ </array>
846
+ <key>NSHorizonalPagination</key>
847
+ <array>
848
+ <string>int</string>
849
+ <string>0</string>
850
+ </array>
851
+ <key>NSLeftMargin</key>
852
+ <array>
853
+ <string>float</string>
854
+ <string>18</string>
855
+ </array>
856
+ <key>NSPaperSize</key>
857
+ <array>
858
+ <string>coded</string>
859
+ <string>BAtzdHJlYW10eXBlZIHoA4QBQISEhAdOU1ZhbHVlAISECE5TT2JqZWN0AIWEASqEhAx7X05TU2l6ZT1mZn2WgWQCgRgDhg==</string>
860
+ </array>
861
+ <key>NSPrintReverseOrientation</key>
862
+ <array>
863
+ <string>int</string>
864
+ <string>0</string>
865
+ </array>
866
+ <key>NSRightMargin</key>
867
+ <array>
868
+ <string>float</string>
869
+ <string>18</string>
870
+ </array>
871
+ <key>NSTopMargin</key>
872
+ <array>
873
+ <string>float</string>
874
+ <string>18</string>
875
+ </array>
876
+ </dict>
877
+ <key>PrintOnePage</key>
878
+ <false/>
879
+ <key>ReadOnly</key>
880
+ <string>NO</string>
881
+ <key>RowAlign</key>
882
+ <integer>1</integer>
883
+ <key>RowSpacing</key>
884
+ <real>36</real>
885
+ <key>SheetTitle</key>
886
+ <string>Canvas 1</string>
887
+ <key>SmartAlignmentGuidesActive</key>
888
+ <string>YES</string>
889
+ <key>SmartDistanceGuidesActive</key>
890
+ <string>YES</string>
891
+ <key>UniqueID</key>
892
+ <integer>1</integer>
893
+ <key>UseEntirePage</key>
894
+ <false/>
895
+ <key>VPages</key>
896
+ <integer>1</integer>
897
+ <key>WindowInfo</key>
898
+ <dict>
899
+ <key>CurrentSheet</key>
900
+ <integer>0</integer>
901
+ <key>ExpandedCanvases</key>
902
+ <array>
903
+ <dict>
904
+ <key>name</key>
905
+ <string>Canvas 1</string>
906
+ </dict>
907
+ </array>
908
+ <key>Frame</key>
909
+ <string>{{218, 119}, {1216, 858}}</string>
910
+ <key>ListView</key>
911
+ <true/>
912
+ <key>OutlineWidth</key>
913
+ <integer>142</integer>
914
+ <key>RightSidebar</key>
915
+ <false/>
916
+ <key>ShowRuler</key>
917
+ <true/>
918
+ <key>Sidebar</key>
919
+ <true/>
920
+ <key>SidebarWidth</key>
921
+ <integer>120</integer>
922
+ <key>VisibleRegion</key>
923
+ <string>{{0, 0}, {533.5, 344}}</string>
924
+ <key>Zoom</key>
925
+ <real>2</real>
926
+ <key>ZoomValues</key>
927
+ <array>
928
+ <array>
929
+ <string>Canvas 1</string>
930
+ <real>2</real>
931
+ <real>1</real>
932
+ </array>
933
+ </array>
934
+ </dict>
935
+ <key>saveQuickLookFiles</key>
936
+ <string>YES</string>
937
+ </dict>
938
+ </plist>