react 0.3.5 → 0.6.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 (310) hide show
  1. package/.npmignore +2 -1
  2. package/.travis.yml +4 -0
  3. package/Jakefile.js +34 -3
  4. package/README.md +34 -174
  5. package/browser-test/dist.html +90 -0
  6. package/browser-test/index.html +86 -0
  7. package/browser-test/min.html +90 -0
  8. package/dist/react.js +3291 -0
  9. package/dist/react.min.js +1 -0
  10. package/doc/advanced.md +166 -0
  11. package/doc/color-def.graffle +938 -0
  12. package/doc/color-def.png +0 -0
  13. package/doc/simple.dot +25 -0
  14. package/doc/simple.png +0 -0
  15. package/examples/{default1.js → longer-example.js} +0 -0
  16. package/examples/{default-simple.js → simple.js} +0 -0
  17. package/examples/{ast1.js → using-ast-directly.js} +4 -0
  18. package/examples/{default-events1.js → using-events1.js} +1 -1
  19. package/examples/{default-log-events.js → using-log-events.js} +1 -1
  20. package/lib/base-task.js +116 -110
  21. package/lib/cb-task.js +71 -67
  22. package/lib/core.js +120 -109
  23. package/lib/dsl.js +120 -115
  24. package/lib/error.js +44 -36
  25. package/lib/event-collector.js +81 -0
  26. package/lib/event-manager.js +66 -55
  27. package/lib/eventemitter.js +20 -0
  28. package/lib/finalcb-first-task.js +56 -53
  29. package/lib/finalcb-task.js +55 -51
  30. package/lib/id.js +18 -6
  31. package/lib/input-parser.js +49 -41
  32. package/lib/log-events.js +81 -60
  33. package/lib/parse.js +34 -25
  34. package/lib/promise-resolve.js +50 -0
  35. package/lib/promise-task.js +78 -74
  36. package/lib/react.js +59 -0
  37. package/lib/ret-task.js +59 -55
  38. package/lib/sprintf.js +18 -0
  39. package/lib/status.js +11 -2
  40. package/lib/task.js +219 -213
  41. package/lib/track-tasks.js +67 -110
  42. package/lib/validate.js +136 -136
  43. package/lib/vcon.js +78 -69
  44. package/lib/when-task.js +69 -65
  45. package/package.json +11 -9
  46. package/src/dist.build.requirejs +20 -0
  47. package/test/ast.mocha.js +136 -0
  48. package/test/cb-task.mocha.js +220 -0
  49. package/test/core-deferred.mocha.js +143 -0
  50. package/test/core-when.mocha.js +96 -0
  51. package/test/core.mocha.js +589 -0
  52. package/test/dsl.mocha.js +350 -0
  53. package/test/event-manager.mocha.js +119 -0
  54. package/test/exec-options.mocha.js +48 -0
  55. package/test/finalcb-task.mocha.js +58 -0
  56. package/test/input-parser.mocha.js +86 -0
  57. package/test/mocha.opts +2 -0
  58. package/test/module-use.mocha.js +147 -0
  59. package/test/promise-auto-resolve.mocha.js +68 -0
  60. package/test/ret-task.mocha.js +220 -0
  61. package/test/task.mocha.js +42 -0
  62. package/test/validate-cb-task.mocha.js +100 -0
  63. package/test/validate-ret-task.mocha.js +110 -0
  64. package/test/validate.mocha.js +324 -0
  65. package/test/vcon.mocha.js +193 -0
  66. package/vendor/chai/chai.js +2038 -0
  67. package/vendor/jquery/jquery-1.7.1.js +9266 -0
  68. package/vendor/jquery/jquery-1.7.1.min.js +4 -0
  69. package/vendor/mocha/mocha.css +135 -0
  70. package/vendor/mocha/mocha.js +3589 -0
  71. package/vendor/node/util.js +531 -0
  72. package/vendor/requirejs/require.js +2053 -0
  73. package/vendor/requirejs/require.min.js +33 -0
  74. package/doc/alternate-dsls.md +0 -103
  75. package/doc/default-simple.dot +0 -19
  76. package/doc/default-simple.dot.png +0 -0
  77. package/dsl/chain.js +0 -150
  78. package/dsl/fstr.js +0 -121
  79. package/dsl/pcode.js +0 -175
  80. package/examples/chain-events1.js +0 -55
  81. package/examples/chain1.js +0 -19
  82. package/examples/fstr-events1.js +0 -38
  83. package/examples/fstr1.js +0 -37
  84. package/examples/pcode1.js +0 -22
  85. package/externalDocs/Dataflow - Wikipedia, the free encyclopedia.html +0 -675
  86. package/externalDocs/Dataflow - Wikipedia, the free encyclopedia_files/37px-Wiktionary-logo-en.svg.png +0 -0
  87. package/externalDocs/Dataflow - Wikipedia, the free encyclopedia_files/closewindow.png +0 -0
  88. package/externalDocs/Dataflow - Wikipedia, the free encyclopedia_files/index(1).php +0 -407
  89. package/externalDocs/Dataflow - Wikipedia, the free encyclopedia_files/index.php +0 -130
  90. package/externalDocs/Dataflow - Wikipedia, the free encyclopedia_files/load(1).php +0 -3
  91. package/externalDocs/Dataflow - Wikipedia, the free encyclopedia_files/load(10).php +0 -89
  92. package/externalDocs/Dataflow - Wikipedia, the free encyclopedia_files/load(2).php +0 -23
  93. package/externalDocs/Dataflow - Wikipedia, the free encyclopedia_files/load(3).php +0 -153
  94. package/externalDocs/Dataflow - Wikipedia, the free encyclopedia_files/load(4).php +0 -6
  95. package/externalDocs/Dataflow - Wikipedia, the free encyclopedia_files/load(5).php +0 -3
  96. package/externalDocs/Dataflow - Wikipedia, the free encyclopedia_files/load(6).php +0 -96
  97. package/externalDocs/Dataflow - Wikipedia, the free encyclopedia_files/load(7).php +0 -16
  98. package/externalDocs/Dataflow - Wikipedia, the free encyclopedia_files/load(8).php +0 -14
  99. package/externalDocs/Dataflow - Wikipedia, the free encyclopedia_files/load(9).php +0 -123
  100. package/externalDocs/Dataflow - Wikipedia, the free encyclopedia_files/load.php +0 -3
  101. package/externalDocs/Dataflow - Wikipedia, the free encyclopedia_files/poweredby_mediawiki_88x31.png +0 -0
  102. package/externalDocs/Dataflow - Wikipedia, the free encyclopedia_files/saved_resource +0 -1
  103. package/externalDocs/Dataflow - Wikipedia, the free encyclopedia_files/search-ltr.png +0 -0
  104. package/externalDocs/Dataflow - Wikipedia, the free encyclopedia_files/wikimedia-button.png +0 -0
  105. package/externalDocs/Dataflow Programming Handling Huge Data Loads Without Adding Complexity Dr Dobb's.html +0 -1369
  106. package/externalDocs/Dataflow Programming Handling Huge Data Loads Without Adding Complexity Dr Dobb's_files/121911_DobbsDigest_Cover.jpg +0 -0
  107. package/externalDocs/Dataflow Programming Handling Huge Data Loads Without Adding Complexity Dr Dobb's_files/160-x-600-IMU Impact 2012.jpg +0 -0
  108. 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
  109. 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
  110. 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
  111. 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
  112. 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
  113. 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
  114. 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
  115. 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
  116. 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
  117. 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
  118. 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
  119. 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
  120. 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
  121. 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
  122. 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
  123. 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
  124. package/externalDocs/Dataflow Programming Handling Huge Data Loads Without Adding Complexity Dr Dobb's_files/Ad0St1Sz6Sq0V0Id20628317.gif +0 -0
  125. package/externalDocs/Dataflow Programming Handling Huge Data Loads Without Adding Complexity Dr Dobb's_files/Ad2331174St1Sz225Sq20825250V0Id4.gif +0 -0
  126. package/externalDocs/Dataflow Programming Handling Huge Data Loads Without Adding Complexity Dr Dobb's_files/AdTracImage.gif +0 -0
  127. package/externalDocs/Dataflow Programming Handling Huge Data Loads Without Adding Complexity Dr Dobb's_files/Default_Size_16_1x1.gif +0 -0
  128. package/externalDocs/Dataflow Programming Handling Huge Data Loads Without Adding Complexity Dr Dobb's_files/FB.Share +0 -9
  129. package/externalDocs/Dataflow Programming Handling Huge Data Loads Without Adding Complexity Dr Dobb's_files/addthis_widget.js +0 -2
  130. 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
  131. package/externalDocs/Dataflow Programming Handling Huge Data Loads Without Adding Complexity Dr Dobb's_files/beacon.js +0 -7
  132. package/externalDocs/Dataflow Programming Handling Huge Data Loads Without Adding Complexity Dr Dobb's_files/checkauth.js +0 -18
  133. package/externalDocs/Dataflow Programming Handling Huge Data Loads Without Adding Complexity Dr Dobb's_files/colorbox.css +0 -49
  134. package/externalDocs/Dataflow Programming Handling Huge Data Loads Without Adding Complexity Dr Dobb's_files/convert_data.js +0 -1
  135. package/externalDocs/Dataflow Programming Handling Huge Data Loads Without Adding Complexity Dr Dobb's_files/count(1).js +0 -5
  136. package/externalDocs/Dataflow Programming Handling Huge Data Loads Without Adding Complexity Dr Dobb's_files/count.js +0 -5
  137. package/externalDocs/Dataflow Programming Handling Huge Data Loads Without Adding Complexity Dr Dobb's_files/count.json +0 -1
  138. package/externalDocs/Dataflow Programming Handling Huge Data Loads Without Adding Complexity Dr Dobb's_files/dataflow1.gif +0 -0
  139. package/externalDocs/Dataflow Programming Handling Huge Data Loads Without Adding Complexity Dr Dobb's_files/def.html +0 -126
  140. package/externalDocs/Dataflow Programming Handling Huge Data Loads Without Adding Complexity Dr Dobb's_files/defaults.css +0 -1
  141. package/externalDocs/Dataflow Programming Handling Huge Data Loads Without Adding Complexity Dr Dobb's_files/detect.js +0 -91
  142. package/externalDocs/Dataflow Programming Handling Huge Data Loads Without Adding Complexity Dr Dobb's_files/devtest_left-col-slim.css +0 -30
  143. package/externalDocs/Dataflow Programming Handling Huge Data Loads Without Adding Complexity Dr Dobb's_files/disqus.js +0 -327
  144. package/externalDocs/Dataflow Programming Handling Huge Data Loads Without Adding Complexity Dr Dobb's_files/disqusHints.css +0 -34
  145. package/externalDocs/Dataflow Programming Handling Huge Data Loads Without Adding Complexity Dr Dobb's_files/disqusHints.js +0 -8
  146. package/externalDocs/Dataflow Programming Handling Huge Data Loads Without Adding Complexity Dr Dobb's_files/disqusLoggedOff(1).css +0 -24
  147. package/externalDocs/Dataflow Programming Handling Huge Data Loads Without Adding Complexity Dr Dobb's_files/disqusLoggedOff.css +0 -24
  148. package/externalDocs/Dataflow Programming Handling Huge Data Loads Without Adding Complexity Dr Dobb's_files/dobbs_disqus_logo.gif +0 -0
  149. package/externalDocs/Dataflow Programming Handling Huge Data Loads Without Adding Complexity Dr Dobb's_files/dsqcd10c7f376188a4a2ca3e8fea2c03aeb.css +0 -1
  150. package/externalDocs/Dataflow Programming Handling Huge Data Loads Without Adding Complexity Dr Dobb's_files/dsqcd10c7f376188a4a2ca3e8fea2c03aeb.js +0 -1
  151. package/externalDocs/Dataflow Programming Handling Huge Data Loads Without Adding Complexity Dr Dobb's_files/elqCfg.js +0 -55
  152. package/externalDocs/Dataflow Programming Handling Huge Data Loads Without Adding Complexity Dr Dobb's_files/elqImg.js +0 -12
  153. package/externalDocs/Dataflow Programming Handling Huge Data Loads Without Adding Complexity Dr Dobb's_files/embed.js +0 -76
  154. package/externalDocs/Dataflow Programming Handling Huge Data Loads Without Adding Complexity Dr Dobb's_files/experience_util.js +0 -636
  155. package/externalDocs/Dataflow Programming Handling Huge Data Loads Without Adding Complexity Dr Dobb's_files/fastbutton.html +0 -11
  156. package/externalDocs/Dataflow Programming Handling Huge Data Loads Without Adding Complexity Dr Dobb's_files/ga.js +0 -51
  157. package/externalDocs/Dataflow Programming Handling Huge Data Loads Without Adding Complexity Dr Dobb's_files/h-facebook_sm.png +0 -0
  158. package/externalDocs/Dataflow Programming Handling Huge Data Loads Without Adding Complexity Dr Dobb's_files/h-nav.css +0 -798
  159. package/externalDocs/Dataflow Programming Handling Huge Data Loads Without Adding Complexity Dr Dobb's_files/h-twitter_sm.png +0 -0
  160. package/externalDocs/Dataflow Programming Handling Huge Data Loads Without Adding Complexity Dr Dobb's_files/h_s_code_remote.js +0 -377
  161. package/externalDocs/Dataflow Programming Handling Huge Data Loads Without Adding Complexity Dr Dobb's_files/hintbox_info.jpg +0 -0
  162. package/externalDocs/Dataflow Programming Handling Huge Data Loads Without Adding Complexity Dr Dobb's_files/hub.1326407570.html +0 -3
  163. package/externalDocs/Dataflow Programming Handling Huge Data Loads Without Adding Complexity Dr Dobb's_files/in.js +0 -76
  164. package/externalDocs/Dataflow Programming Handling Huge Data Loads Without Adding Complexity Dr Dobb's_files/insight.min.js +0 -55
  165. package/externalDocs/Dataflow Programming Handling Huge Data Loads Without Adding Complexity Dr Dobb's_files/jquery-1.2.6.min.js +0 -32
  166. package/externalDocs/Dataflow Programming Handling Huge Data Loads Without Adding Complexity Dr Dobb's_files/jquery-1.4.2.min.js +0 -154
  167. package/externalDocs/Dataflow Programming Handling Huge Data Loads Without Adding Complexity Dr Dobb's_files/jquery-ui-1.8rc3.custom.min.js +0 -374
  168. package/externalDocs/Dataflow Programming Handling Huge Data Loads Without Adding Complexity Dr Dobb's_files/jquery.colorbox-min.js +0 -4
  169. package/externalDocs/Dataflow Programming Handling Huge Data Loads Without Adding Complexity Dr Dobb's_files/jquery.min.js +0 -154
  170. package/externalDocs/Dataflow Programming Handling Huge Data Loads Without Adding Complexity Dr Dobb's_files/lib.js +0 -212
  171. package/externalDocs/Dataflow Programming Handling Huge Data Loads Without Adding Complexity Dr Dobb's_files/like.html +0 -214
  172. package/externalDocs/Dataflow Programming Handling Huge Data Loads Without Adding Complexity Dr Dobb's_files/noavatar32.png +0 -0
  173. package/externalDocs/Dataflow Programming Handling Huge Data Loads Without Adding Complexity Dr Dobb's_files/nodetag.js +0 -18
  174. package/externalDocs/Dataflow Programming Handling Huge Data Loads Without Adding Complexity Dr Dobb's_files/nonSecureAnonymousFramework +0 -2913
  175. package/externalDocs/Dataflow Programming Handling Huge Data Loads Without Adding Complexity Dr Dobb's_files/p.json +0 -1
  176. package/externalDocs/Dataflow Programming Handling Huge Data Loads Without Adding Complexity Dr Dobb's_files/plusone.js +0 -32
  177. package/externalDocs/Dataflow Programming Handling Huge Data Loads Without Adding Complexity Dr Dobb's_files/popwindow.js +0 -24
  178. package/externalDocs/Dataflow Programming Handling Huge Data Loads Without Adding Complexity Dr Dobb's_files/q4OyybLB0-A.js +0 -91
  179. package/externalDocs/Dataflow Programming Handling Huge Data Loads Without Adding Complexity Dr Dobb's_files/quant.js +0 -28
  180. package/externalDocs/Dataflow Programming Handling Huge Data Loads Without Adding Complexity Dr Dobb's_files/qxvZoiHdpAF.css +0 -192
  181. package/externalDocs/Dataflow Programming Handling Huge Data Loads Without Adding Complexity Dr Dobb's_files/reply.html +0 -160
  182. package/externalDocs/Dataflow Programming Handling Huge Data Loads Without Adding Complexity Dr Dobb's_files/rss.gif +0 -0
  183. package/externalDocs/Dataflow Programming Handling Huge Data Loads Without Adding Complexity Dr Dobb's_files/s.js +0 -1
  184. package/externalDocs/Dataflow Programming Handling Huge Data Loads Without Adding Complexity Dr Dobb's_files/saved_resource +0 -421
  185. package/externalDocs/Dataflow Programming Handling Huge Data Loads Without Adding Complexity Dr Dobb's_files/saved_resource(1) +0 -1
  186. package/externalDocs/Dataflow Programming Handling Huge Data Loads Without Adding Complexity Dr Dobb's_files/saved_resource(2) +0 -341
  187. package/externalDocs/Dataflow Programming Handling Huge Data Loads Without Adding Complexity Dr Dobb's_files/saved_resource(3) +0 -127
  188. package/externalDocs/Dataflow Programming Handling Huge Data Loads Without Adding Complexity Dr Dobb's_files/script84.js +0 -113
  189. package/externalDocs/Dataflow Programming Handling Huge Data Loads Without Adding Complexity Dr Dobb's_files/scripts.js +0 -30
  190. package/externalDocs/Dataflow Programming Handling Huge Data Loads Without Adding Complexity Dr Dobb's_files/sh72.html +0 -5
  191. package/externalDocs/Dataflow Programming Handling Huge Data Loads Without Adding Complexity Dr Dobb's_files/shAutoloader.js +0 -17
  192. package/externalDocs/Dataflow Programming Handling Huge Data Loads Without Adding Complexity Dr Dobb's_files/shBrushAS3.js +0 -59
  193. package/externalDocs/Dataflow Programming Handling Huge Data Loads Without Adding Complexity Dr Dobb's_files/shBrushAppleScript.js +0 -75
  194. package/externalDocs/Dataflow Programming Handling Huge Data Loads Without Adding Complexity Dr Dobb's_files/shBrushBash.js +0 -59
  195. package/externalDocs/Dataflow Programming Handling Huge Data Loads Without Adding Complexity Dr Dobb's_files/shBrushCSharp.js +0 -65
  196. package/externalDocs/Dataflow Programming Handling Huge Data Loads Without Adding Complexity Dr Dobb's_files/shBrushColdFusion.js +0 -100
  197. package/externalDocs/Dataflow Programming Handling Huge Data Loads Without Adding Complexity Dr Dobb's_files/shBrushCpp.js +0 -97
  198. package/externalDocs/Dataflow Programming Handling Huge Data Loads Without Adding Complexity Dr Dobb's_files/shBrushCss.js +0 -91
  199. package/externalDocs/Dataflow Programming Handling Huge Data Loads Without Adding Complexity Dr Dobb's_files/shBrushDelphi.js +0 -55
  200. package/externalDocs/Dataflow Programming Handling Huge Data Loads Without Adding Complexity Dr Dobb's_files/shBrushDiff.js +0 -41
  201. package/externalDocs/Dataflow Programming Handling Huge Data Loads Without Adding Complexity Dr Dobb's_files/shBrushErlang.js +0 -52
  202. package/externalDocs/Dataflow Programming Handling Huge Data Loads Without Adding Complexity Dr Dobb's_files/shBrushGroovy.js +0 -67
  203. package/externalDocs/Dataflow Programming Handling Huge Data Loads Without Adding Complexity Dr Dobb's_files/shBrushJScript.js +0 -52
  204. package/externalDocs/Dataflow Programming Handling Huge Data Loads Without Adding Complexity Dr Dobb's_files/shBrushJava.js +0 -57
  205. package/externalDocs/Dataflow Programming Handling Huge Data Loads Without Adding Complexity Dr Dobb's_files/shBrushJavaFX.js +0 -58
  206. package/externalDocs/Dataflow Programming Handling Huge Data Loads Without Adding Complexity Dr Dobb's_files/shBrushPerl.js +0 -72
  207. package/externalDocs/Dataflow Programming Handling Huge Data Loads Without Adding Complexity Dr Dobb's_files/shBrushPhp.js +0 -88
  208. package/externalDocs/Dataflow Programming Handling Huge Data Loads Without Adding Complexity Dr Dobb's_files/shBrushPlain.js +0 -33
  209. package/externalDocs/Dataflow Programming Handling Huge Data Loads Without Adding Complexity Dr Dobb's_files/shBrushPowerShell.js +0 -74
  210. package/externalDocs/Dataflow Programming Handling Huge Data Loads Without Adding Complexity Dr Dobb's_files/shBrushPython.js +0 -64
  211. package/externalDocs/Dataflow Programming Handling Huge Data Loads Without Adding Complexity Dr Dobb's_files/shBrushRuby.js +0 -55
  212. package/externalDocs/Dataflow Programming Handling Huge Data Loads Without Adding Complexity Dr Dobb's_files/shBrushSass.js +0 -94
  213. package/externalDocs/Dataflow Programming Handling Huge Data Loads Without Adding Complexity Dr Dobb's_files/shBrushScala.js +0 -51
  214. package/externalDocs/Dataflow Programming Handling Huge Data Loads Without Adding Complexity Dr Dobb's_files/shBrushSql.js +0 -66
  215. package/externalDocs/Dataflow Programming Handling Huge Data Loads Without Adding Complexity Dr Dobb's_files/shBrushVb.js +0 -56
  216. package/externalDocs/Dataflow Programming Handling Huge Data Loads Without Adding Complexity Dr Dobb's_files/shBrushXml.js +0 -69
  217. package/externalDocs/Dataflow Programming Handling Huge Data Loads Without Adding Complexity Dr Dobb's_files/shCore.css +0 -226
  218. package/externalDocs/Dataflow Programming Handling Huge Data Loads Without Adding Complexity Dr Dobb's_files/shCoreDefault.css +0 -333
  219. package/externalDocs/Dataflow Programming Handling Huge Data Loads Without Adding Complexity Dr Dobb's_files/shCore_new.js +0 -17
  220. package/externalDocs/Dataflow Programming Handling Huge Data Loads Without Adding Complexity Dr Dobb's_files/shLegacy.js +0 -17
  221. package/externalDocs/Dataflow Programming Handling Huge Data Loads Without Adding Complexity Dr Dobb's_files/shThemeDefault.css +0 -117
  222. package/externalDocs/Dataflow Programming Handling Huge Data Loads Without Adding Complexity Dr Dobb's_files/share-button-css +0 -67
  223. package/externalDocs/Dataflow Programming Handling Huge Data Loads Without Adding Complexity Dr Dobb's_files/share_email_icon.gif +0 -0
  224. package/externalDocs/Dataflow Programming Handling Huge Data Loads Without Adding Complexity Dr Dobb's_files/share_print_icon.gif +0 -0
  225. package/externalDocs/Dataflow Programming Handling Huge Data Loads Without Adding Complexity Dr Dobb's_files/sidebar.js +0 -88
  226. package/externalDocs/Dataflow Programming Handling Huge Data Loads Without Adding Complexity Dr Dobb's_files/superfooter_936.css +0 -186
  227. package/externalDocs/Dataflow Programming Handling Huge Data Loads Without Adding Complexity Dr Dobb's_files/svrGP.aspx +0 -0
  228. package/externalDocs/Dataflow Programming Handling Huge Data Loads Without Adding Complexity Dr Dobb's_files/t.gif +0 -0
  229. package/externalDocs/Dataflow Programming Handling Huge Data Loads Without Adding Complexity Dr Dobb's_files/thickbox.js +0 -343
  230. package/externalDocs/Dataflow Programming Handling Huge Data Loads Without Adding Complexity Dr Dobb's_files/thread.js +0 -128
  231. package/externalDocs/Dataflow Programming Handling Huge Data Loads Without Adding Complexity Dr Dobb's_files/togglediv.js +0 -15
  232. package/externalDocs/Dataflow Programming Handling Huge Data Loads Without Adding Complexity Dr Dobb's_files/tweet_button.html +0 -3
  233. package/externalDocs/Dataflow Programming Handling Huge Data Loads Without Adding Complexity Dr Dobb's_files/ubmtechweb_logo_sm.gif +0 -0
  234. package/externalDocs/Dataflow Programming Handling Huge Data Loads Without Adding Complexity Dr Dobb's_files/upload.html +0 -91
  235. package/externalDocs/Dataflow Programming Handling Huge Data Loads Without Adding Complexity Dr Dobb's_files/welcome.js +0 -7
  236. package/externalDocs/Dataflow Programming Handling Huge Data Loads Without Adding Complexity Dr Dobb's_files/widget74.css +0 -1
  237. package/externalDocs/Dataflow Programming Handling Huge Data Loads Without Adding Complexity Dr Dobb's_files/widgets.js +0 -40
  238. package/externalDocs/Reactive programming - Wikipedia, the free encyclopedia.html +0 -904
  239. package/externalDocs/Reactive programming - Wikipedia, the free encyclopedia_files/50px-Question_book-new.svg.png +0 -0
  240. package/externalDocs/Reactive programming - Wikipedia, the free encyclopedia_files/closewindow.png +0 -0
  241. package/externalDocs/Reactive programming - Wikipedia, the free encyclopedia_files/index(1).php +0 -407
  242. package/externalDocs/Reactive programming - Wikipedia, the free encyclopedia_files/index.php +0 -130
  243. package/externalDocs/Reactive programming - Wikipedia, the free encyclopedia_files/load(1).php +0 -3
  244. package/externalDocs/Reactive programming - Wikipedia, the free encyclopedia_files/load(10).php +0 -89
  245. package/externalDocs/Reactive programming - Wikipedia, the free encyclopedia_files/load(2).php +0 -23
  246. package/externalDocs/Reactive programming - Wikipedia, the free encyclopedia_files/load(3).php +0 -153
  247. package/externalDocs/Reactive programming - Wikipedia, the free encyclopedia_files/load(4).php +0 -6
  248. package/externalDocs/Reactive programming - Wikipedia, the free encyclopedia_files/load(5).php +0 -3
  249. package/externalDocs/Reactive programming - Wikipedia, the free encyclopedia_files/load(6).php +0 -96
  250. package/externalDocs/Reactive programming - Wikipedia, the free encyclopedia_files/load(7).php +0 -16
  251. package/externalDocs/Reactive programming - Wikipedia, the free encyclopedia_files/load(8).php +0 -14
  252. package/externalDocs/Reactive programming - Wikipedia, the free encyclopedia_files/load(9).php +0 -123
  253. package/externalDocs/Reactive programming - Wikipedia, the free encyclopedia_files/load.php +0 -3
  254. package/externalDocs/Reactive programming - Wikipedia, the free encyclopedia_files/poweredby_mediawiki_88x31.png +0 -0
  255. package/externalDocs/Reactive programming - Wikipedia, the free encyclopedia_files/saved_resource +0 -1
  256. package/externalDocs/Reactive programming - Wikipedia, the free encyclopedia_files/search-ltr.png +0 -0
  257. package/externalDocs/Reactive programming - Wikipedia, the free encyclopedia_files/wikimedia-button.png +0 -0
  258. package/externalDocs/The Step of the Conductor - How To Node - NodeJS.html +0 -113
  259. package/externalDocs/The Step of the Conductor - How To Node - NodeJS_files/6654_111305815684_541245684_2583159_5383291_n_normal.jpg +0 -0
  260. package/externalDocs/The Step of the Conductor - How To Node - NodeJS_files/MARC3_normal.jpg +0 -2
  261. package/externalDocs/The Step of the Conductor - How To Node - NodeJS_files/beacon.js +0 -7
  262. package/externalDocs/The Step of the Conductor - How To Node - NodeJS_files/c953ddd239707998340e1a6fbb3eeb46 +0 -0
  263. package/externalDocs/The Step of the Conductor - How To Node - NodeJS_files/c953ddd239707998340e1a6fbb3eeb46_normal.jpeg +0 -0
  264. package/externalDocs/The Step of the Conductor - How To Node - NodeJS_files/clouds2_normal.jpg +0 -0
  265. package/externalDocs/The Step of the Conductor - How To Node - NodeJS_files/count.json +0 -1
  266. package/externalDocs/The Step of the Conductor - How To Node - NodeJS_files/def.html +0 -126
  267. package/externalDocs/The Step of the Conductor - How To Node - NodeJS_files/defaults.css +0 -1
  268. package/externalDocs/The Step of the Conductor - How To Node - NodeJS_files/disqus.js +0 -327
  269. package/externalDocs/The Step of the Conductor - How To Node - NodeJS_files/dsq7884a9652e94555c70f96b6be63be216.css +0 -1
  270. package/externalDocs/The Step of the Conductor - How To Node - NodeJS_files/dsq7884a9652e94555c70f96b6be63be216.js +0 -66
  271. package/externalDocs/The Step of the Conductor - How To Node - NodeJS_files/embed.js +0 -76
  272. package/externalDocs/The Step of the Conductor - How To Node - NodeJS_files/example1.dot +0 -0
  273. package/externalDocs/The Step of the Conductor - How To Node - NodeJS_files/ga.js +0 -51
  274. package/externalDocs/The Step of the Conductor - How To Node - NodeJS_files/get_num_replies.js +0 -79
  275. package/externalDocs/The Step of the Conductor - How To Node - NodeJS_files/hub.1326407570.html +0 -3
  276. package/externalDocs/The Step of the Conductor - How To Node - NodeJS_files/lib.js +0 -212
  277. package/externalDocs/The Step of the Conductor - How To Node - NodeJS_files/noavatar32.png +0 -0
  278. package/externalDocs/The Step of the Conductor - How To Node - NodeJS_files/quant.js +0 -28
  279. package/externalDocs/The Step of the Conductor - How To Node - NodeJS_files/reply.html +0 -160
  280. package/externalDocs/The Step of the Conductor - How To Node - NodeJS_files/t.gif +0 -0
  281. package/externalDocs/The Step of the Conductor - How To Node - NodeJS_files/thread.js +0 -128
  282. package/externalDocs/The Step of the Conductor - How To Node - NodeJS_files/tweet_button.1326407570.html +0 -3
  283. package/externalDocs/The Step of the Conductor - How To Node - NodeJS_files/twitter_normal.jpg +0 -2
  284. package/externalDocs/The Step of the Conductor - How To Node - NodeJS_files/upload.html +0 -91
  285. package/externalDocs/The Step of the Conductor - How To Node - NodeJS_files/widgets.js +0 -40
  286. package/jake-tasks/jake-test.js +0 -64
  287. package/promise-resolve.js +0 -35
  288. package/react.js +0 -8
  289. package/test/ast.test.js +0 -69
  290. package/test/cb-task.test.js +0 -197
  291. package/test/core-deferred.test.js +0 -134
  292. package/test/core-promised.test.js +0 -132
  293. package/test/core-when.test.js +0 -84
  294. package/test/core.test.js +0 -568
  295. package/test/dsl.test.js +0 -330
  296. package/test/dsl/chain.test.js +0 -324
  297. package/test/dsl/fstr.test.js +0 -300
  298. package/test/dsl/pcode.test.js +0 -448
  299. package/test/event-manager.test.js +0 -102
  300. package/test/exec-options.test.js +0 -33
  301. package/test/finalcb-task.test.js +0 -38
  302. package/test/input-parser.test.js +0 -66
  303. package/test/module-use.test.js +0 -131
  304. package/test/promise-auto-resolve.test.js +0 -51
  305. package/test/ret-task.test.js +0 -199
  306. package/test/task.test.js +0 -21
  307. package/test/validate-cb-task.test.js +0 -74
  308. package/test/validate-ret-task.test.js +0 -83
  309. package/test/validate.test.js +0 -295
  310. package/test/vcon.test.js +0 -173
package/lib/core.js CHANGED
@@ -1,127 +1,138 @@
1
1
  'use strict';
2
+ /*global define:true */
2
3
 
3
- var EventEmitter = require('events').EventEmitter;
4
+ if (typeof define !== 'function') {
5
+ var define = require('amdefine')(module);
6
+ }
4
7
 
5
- var error = require('./error.js');
6
- var validate = require('./validate.js');
7
- var tskutil = require('./task.js');
8
- var STATUS = require('./status.js');
9
- var VContext = require('./vcon.js');
10
- var EventManager = require('./event-manager.js');
11
- var inputParser = require('./input-parser.js');
12
- var idGenerator = require('./id.js');
8
+ define(['./eventemitter', './error', './validate', './task', './status',
9
+ './vcon', './event-manager', './input-parser', './id', './sprintf'],
10
+ function (EventEmitter, error, validate, taskUtil, STATUS,
11
+ VContext, EventManager, inputParser, idGenerator, sprintf) {
13
12
 
14
- var reactOptions = {
15
- stackTraceLimitMin: 30
16
- };
13
+ var reactOptions = {
14
+ stackTraceLimitMin: 30
15
+ };
17
16
 
18
- var reactEmitter = EventManager.global; // the top emitter
17
+ var reactEmitter = EventManager.global; // the top emitter
19
18
 
20
- /**
21
- merge global react options with parsed options
19
+ /**
20
+ merge global react options with parsed options
22
21
  */
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
- }
22
+ function mergeOptions(parsedOptions) {
23
+ return Object.keys(reactOptions).reduce(function (accum, k) {
24
+ if (!accum[k]) accum[k] = reactOptions[k];
25
+ return accum;
26
+ }, parsedOptions);
27
+ }
29
28
 
30
- /**
31
- Creates react function which the AST can be manipulated and then
32
- is ready to be executed. Can be used directly or a DSL can wrap this
33
- to provide the AST.
29
+ /**
30
+ generate a flow name when one is not provided
31
+ */
32
+ function generateFlowName() {
33
+ return sprintf('flow_%s', idGenerator.createUniqueId());
34
+ }
34
35
 
35
- @example
36
- var react = require('react');
37
- var fn = react();
38
- var valid2 = fn.setAndValidateAST({
36
+ /**
37
+ Creates react function which the AST can be manipulated and then
38
+ is ready to be executed. Can be used directly or a DSL can wrap this
39
+ to provide the AST.
40
+
41
+ @example
42
+ var react = require('react');
43
+ var fn = react();
44
+ var valid2 = fn.setAndValidateAST({
39
45
  name: 'optionalName',
40
46
  inParams: ['a', 'b'],
41
47
  tasks: [
42
- { type: 'cb', f: multiply, a: ['a', 'b'], out: ['c'] }
48
+ { type: 'cb', f: multiply, a: ['a', 'b'], out: ['c'] }
43
49
  ],
44
- outTask: { a: ['c'] }
45
- });
46
- console.log(fn.ast); // view
47
- fn(123, 456, cb);
48
- */
49
- function reactFactory() {
50
- if (arguments.length) throw new Error('react() takes no args, check API');
51
-
52
- error.ensureStackTraceLimitSet(reactOptions.stackTraceLimitMin);
53
- var flowEmitter = EventManager.create();
54
- flowEmitter.parent = reactEmitter;
55
-
56
- var ast = {
57
- name: undefined,
58
- inParams: [],
59
- tasks: [],
60
- outTask: {},
61
- locals: {}
62
- };
63
-
64
- function setAndValidateAST(newAST) { //set AST then validate, ret error[]
65
- Object.keys(newAST).forEach(function (k) { ast[k] = newAST[k]; }); // copy all properties
66
- var errors = validate(ast);
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
- }
74
- return errors;
75
- }
76
-
77
- function exec(arg1, arg2, argN, cb) { // called to execute the flow
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
50
+ outTask: { a: ['c'] }
51
+ });
52
+ console.log(fn.ast); // view
53
+ fn(123, 456, cb);
54
+ */
55
+ function reactFactory() {
56
+ if (arguments.length) throw new Error('react() takes no args, check API');
57
+
58
+ error.ensureStackTraceLimitSet(reactOptions.stackTraceLimitMin);
59
+ var flowEmitter = EventManager.create();
60
+ flowEmitter.parent = reactEmitter;
61
+
62
+ var ast = {
63
+ name: undefined,
64
+ inParams: [],
65
+ tasks: [],
66
+ outTask: {},
67
+ locals: {}
85
68
  };
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);
99
- var tasksByName = tskutil.nameTasks(tasks); // map names to working tasks
100
- var outTask = tskutil.createOutTask(env.outTaskDef, parsedInput.cb, tasks, vCon, env.options, env);
101
- var handleError = tskutil.createErrorHandler(vCon, outTask);
102
-
103
- function contExec() {
104
- if (!outTask.f) { return; } //stop execution, we already hit an error, f was cleared
105
- if (outTask.isReady()) return outTask.exec(); // all tasks done, exec cb, return
106
- tskutil.findReadyAndExec(vCon, tasks, tasksByName, handleError, contExec, env); //exec tasks that ready to run
69
+
70
+ function setAndValidateAST(newAST) { //set AST then validate, ret error[]
71
+ Object.keys(newAST).forEach(function (k) { ast[k] = newAST[k]; }); // copy all properties
72
+ var errors = validate(ast);
73
+ if (!errors.length) {
74
+ if (!ast.name) ast.name = generateFlowName();
75
+ taskUtil.nameTasks(ast.tasks); //run this so names can be checked in ast
76
+ }
77
+ if (Object.freeze) { //lets freeze the AST so plugin writers don't accidentally manip the ast
78
+ Object.keys(newAST).forEach(function (k) {
79
+ if (typeof(newAST[k]) === 'object') Object.freeze(newAST[k]);
80
+ });
81
+ Object.freeze(newAST);
82
+ }
83
+ flowEmitter.emit(EventManager.TYPES.AST_DEFINED, ast);
84
+ return errors;
85
+ }
86
+
87
+ function exec(arg1, arg2, argN, cb) { // called to execute the flow
88
+ /*jshint validthis: true */
89
+ var args = Array.prototype.slice.call(arguments);
90
+ var env = {
91
+ execId: idGenerator.createUniqueId(),
92
+ args: args,
93
+ ast: ast,
94
+ flowEmitter: flowEmitter
95
+ };
96
+ env.name = ast.name || env.execId;
97
+ flowEmitter.emit(EventManager.TYPES.EXEC_FLOW_START, env); // hook
98
+ var parsedInput = inputParser(args, ast);
99
+ var vCon = VContext.create(parsedInput.args, ast.inParams, ast.locals, this); // create var ctx with in args & locals
100
+
101
+ env.parsedInput = parsedInput;
102
+ env.options = mergeOptions(parsedInput.options);
103
+ env.vCon = vCon;
104
+ env.taskDefs = ast.tasks.slice(); // create copy
105
+ env.outTaskDef = Object.create(ast.outTask); // create copy
106
+ reactEmitter.emit(EventManager.TYPES.EXEC_TASKS_PRECREATE, env); // hook
107
+
108
+ var tasks = env.taskDefs.map(taskUtil.create);
109
+ var tasksByName = taskUtil.nameTasks(tasks); // map names to working tasks
110
+ var outTask = taskUtil.createOutTask(env.outTaskDef, parsedInput.cb, tasks, vCon, env.options, env);
111
+ var handleError = taskUtil.createErrorHandler(vCon, outTask);
112
+
113
+ function contExec() {
114
+ if (!outTask.f) { return; } //stop execution, we already hit an error, f was cleared
115
+ if (outTask.isReady()) return outTask.exec(); // all tasks done, exec cb, return
116
+ taskUtil.findReadyAndExec(vCon, tasks, tasksByName, handleError, contExec, env); //exec tasks that ready to run
117
+ }
118
+
119
+ tasks.forEach(function (t) {
120
+ t.id = idGenerator.createUniqueId();
121
+ t.env = env;
122
+ if (t.prepare) t.prepare(handleError, vCon, contExec, flowEmitter);
123
+ }); // create callbacks
124
+ contExec(); // start things off
125
+ return outTask.retValue; // could return promise
107
126
  }
108
127
 
109
- tasks.forEach(function (t) {
110
- t.id = idGenerator.createUniqueId();
111
- t.env = env;
112
- if (t.prepare) t.prepare(handleError, vCon, contExec, flowEmitter);
113
- }); // create callbacks
114
- contExec(); // start things off
115
- return outTask.retValue; // could return promise
128
+ var reactFn = exec; // make the exec() the function returned
129
+ reactFn.ast = ast; // put AST hanging off the fn so it can be inspected
130
+ reactFn.setAndValidateAST = setAndValidateAST; // call to set AST and then validate
131
+ reactFn.events = flowEmitter; // used to listen to execution events for this flow
132
+ return reactFn;
116
133
  }
117
134
 
118
- var reactFn = exec; // make the exec() the function returned
119
- reactFn.ast = ast; // put AST hanging off the fn so it can be inspected
120
- reactFn.setAndValidateAST = setAndValidateAST; // call to set AST and then validate
121
- reactFn.events = flowEmitter; // used to listen to execution events for this flow
122
- return reactFn;
123
- }
124
-
125
- module.exports = reactFactory; // module returns reactFactory to create a react fn
126
- module.exports.options = reactOptions; // global react options
127
- module.exports.events = reactEmitter; // global react emitter
135
+ reactFactory.options = reactOptions; // global react options
136
+ reactFactory.events = reactEmitter; // global react emitter
137
+ return reactFactory; // module returns reactFactory to create a react fn
138
+ });
package/lib/dsl.js CHANGED
@@ -1,133 +1,138 @@
1
1
  'use strict';
2
- /*jshint regexp: false */
2
+ /*global define:true */
3
3
 
4
- var sprintf = require('sprintf').sprintf;
5
- var core = require('./core.js');
6
- var parse = require('./parse.js');
7
- var tutil = require('./task.js');
4
+ if (typeof define !== 'function') {
5
+ var define = require('amdefine')(module);
6
+ }
8
7
 
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';
13
- var EXTRA_TASKARG = 'extra unmatched task arg: %s';
8
+ define(['./sprintf', './core', './parse', './task'],
9
+ function (sprintf, core, parse, taskUtil) {
10
+ /*jshint regexp: false */
14
11
 
15
- var INOUT_RE = /\->/; // used to detect missing name, in/out as first arg
16
- var CB_NAMES_RE = /^cb|callback$/i; //cb, Cb, CB, callback, Callback
17
- var ERR_NAMES_RE = /^err$/i; // err, ERR, Err, ...
12
+ var MISSING_NAME = 'first flow parameter should be the flow name, but found in/out def: %s';
13
+ var INOUT_PARAMS_NO_MATCH = 'params in wrong format, wanted "foo, bar, cb -> err, baz" - found: %s';
14
+ var MISSING_ERR = 'callback specified, but first out param was not "err", use for clarity. Found in/out def: %s';
15
+ 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';
16
+ var EXTRA_TASKARG = 'extra unmatched task arg: %s';
18
17
 
19
- function filterOutTrailingCbParam(args) { // if has trailing cb | callback param, filter it out
20
- if (args.length && args[args.length - 1].match(CB_NAMES_RE)) args.pop();
21
- return args;
22
- }
18
+ var INOUT_RE = /\->/; // used to detect missing name, in/out as first arg
19
+ var CB_NAMES_RE = /^cb|callback$/i; //cb, Cb, CB, callback, Callback
20
+ var ERR_NAMES_RE = /^err$/i; // err, ERR, Err, ...
23
21
 
24
- function filterOutLeadingErrParam(args) { // if leading err param, filter it out
25
- if (args.length && args[0].match(ERR_NAMES_RE)) args.shift();
26
- return args;
27
- }
22
+ function filterOutTrailingCbParam(args) { // if has trailing cb | callback param, filter it out
23
+ if (args.length && args[args.length - 1].match(CB_NAMES_RE)) args.pop();
24
+ return args;
25
+ }
28
26
 
29
- var inOutDefParse = {
30
- splitStr: '->',
31
- fn: function (m, origStr) {
32
- var inParams = parse.splitTrimFilterArgs(m[0]);
33
- var lastParam = inParams[inParams.length - 1];
34
- var type = (lastParam && CB_NAMES_RE.test(lastParam)) ? 'cb' : 'ret';
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
- }
42
- return {
43
- type: type,
44
- inDef: filterOutTrailingCbParam(inParams),
45
- outDef: filterOutLeadingErrParam(outParams)
46
- };
27
+ function filterOutLeadingErrParam(args) { // if leading err param, filter it out
28
+ if (args.length && args[0].match(ERR_NAMES_RE)) args.shift();
29
+ return args;
47
30
  }
48
- };
49
31
 
50
- function parseInOutParams(str) {
51
- var objDef = parse.parseStr(str, [inOutDefParse], INOUT_PARAMS_NO_MATCH);
52
- objDef.inDef = filterOutTrailingCbParam(objDef.inDef);
53
- return objDef;
54
- }
32
+ var inOutDefParse = {
33
+ splitStr: '->',
34
+ fn: function (m, origStr) {
35
+ var inParams = parse.splitTrimFilterArgs(m[0]);
36
+ var lastParam = inParams[inParams.length - 1];
37
+ var type = (lastParam && CB_NAMES_RE.test(lastParam)) ? 'cb' : 'ret';
38
+ var outParams = parse.splitTrimFilterArgs(m[1]);
39
+ var firstOutParam = outParams[0];
40
+ if (type === 'cb' && (!firstOutParam || !ERR_NAMES_RE.test(firstOutParam))) {
41
+ throw new Error(sprintf(MISSING_ERR, origStr)); // found cb, but no err param
42
+ } else if (type === 'ret' && firstOutParam && ERR_NAMES_RE.test(firstOutParam)) {
43
+ throw new Error(sprintf(MISSING_CB, origStr)); // found err but not cb param
44
+ }
45
+ return {
46
+ type: type,
47
+ inDef: filterOutTrailingCbParam(inParams),
48
+ outDef: filterOutLeadingErrParam(outParams)
49
+ };
50
+ }
51
+ };
55
52
 
56
- function parseTasks(arr) {
57
- var tasks = [];
58
- var fn, obj, result;
59
- while (arr.length >= 2) {
60
- obj = {};
61
- fn = arr.shift();
62
- result = parseInOutParams(arr.shift());
63
- if (typeof(arr[0]) === 'object') obj = arr.shift(); // has options, use as obj
64
- obj.f = fn;
65
- obj.a = result.inDef;
66
- var type = result.type;
67
- obj.out = result.outDef;
68
- obj.type = type;
69
- tasks.push(obj);
53
+ function parseInOutParams(str) {
54
+ var objDef = parse.parseStr(str, [inOutDefParse], INOUT_PARAMS_NO_MATCH);
55
+ objDef.inDef = filterOutTrailingCbParam(objDef.inDef);
56
+ return objDef;
57
+ }
58
+
59
+ function parseTasks(arr) {
60
+ var tasks = [];
61
+ var fn, obj, result;
62
+ while (arr.length >= 2) {
63
+ obj = {};
64
+ fn = arr.shift();
65
+ result = parseInOutParams(arr.shift());
66
+ if (typeof(arr[0]) === 'object') obj = arr.shift(); // has options, use as obj
67
+ obj.f = fn;
68
+ obj.a = result.inDef;
69
+ var type = result.type;
70
+ obj.out = result.outDef;
71
+ obj.type = type;
72
+ tasks.push(obj);
73
+ }
74
+ if (arr.length) throw new Error(sprintf(EXTRA_TASKARG, arr[0]));
75
+ return tasks;
70
76
  }
71
- if (arr.length) throw new Error(sprintf(EXTRA_TASKARG, arr[0]));
72
- return tasks;
73
- }
74
77
 
75
- /**
76
- Parse the variable arguments into in/out params, options, tasks
78
+ /**
79
+ Parse the variable arguments into in/out params, options, tasks
77
80
  */
78
- function parseVargs(vargs) {
79
- var inOutParamStr = vargs.shift() || '';
80
- // if next arg is object, shift it off as options
81
- var options = (vargs.length && typeof(vargs[0]) === 'object') ? vargs.shift() : { };
82
- var taskDefArr = vargs; // rest are for the tasks
83
- var defObj = {
84
- inOutParamStr: inOutParamStr,
85
- taskDefArr: taskDefArr,
86
- options: options
87
- };
88
- return defObj;
89
- }
81
+ function parseVargs(vargs) {
82
+ var inOutParamStr = vargs.shift() || '';
83
+ // if next arg is object, shift it off as options
84
+ var options = (vargs.length && typeof(vargs[0]) === 'object') ? vargs.shift() : { };
85
+ var taskDefArr = vargs; // rest are for the tasks
86
+ var defObj = {
87
+ inOutParamStr: inOutParamStr,
88
+ taskDefArr: taskDefArr,
89
+ options: options
90
+ };
91
+ return defObj;
92
+ }
90
93
 
91
94
 
92
- function dslDefine(name, arg1, arg2, argN) {
93
- var reactFn = core();
94
- if (name && INOUT_RE.test(name)) throw new Error(sprintf(MISSING_NAME, name));
95
- var defObj = parseVargs(Array.prototype.slice.call(arguments, 1)); // name, already used
96
- var inOutDef = parseInOutParams(defObj.inOutParamStr);
97
- var ast = {
98
- name: name,
99
- inParams: inOutDef.inDef,
100
- tasks: parseTasks(defObj.taskDefArr),
101
- outTask: { a: inOutDef.outDef }
102
- };
103
- if (defObj.options) Object.keys(defObj.options).forEach(function (k) { ast[k] = defObj.options[k]; });
104
- var errors = reactFn.setAndValidateAST(ast);
105
- if (errors.length) {
106
- var errorStr = errors.join('\n');
107
- throw new Error(errorStr);
108
- }
109
- return reactFn;
110
- }
95
+ function dslDefine(name, arg1, arg2, argN) {
96
+ var reactFn = core();
97
+ if (name && INOUT_RE.test(name)) throw new Error(sprintf(MISSING_NAME, name));
98
+ var defObj = parseVargs(Array.prototype.slice.call(arguments, 1)); // name, already used
99
+ var inOutDef = parseInOutParams(defObj.inOutParamStr);
100
+ var ast = {
101
+ name: name,
102
+ inParams: inOutDef.inDef,
103
+ tasks: parseTasks(defObj.taskDefArr),
104
+ outTask: { a: inOutDef.outDef }
105
+ };
106
+ if (defObj.options) Object.keys(defObj.options).forEach(function (k) { ast[k] = defObj.options[k]; });
107
+ var errors = reactFn.setAndValidateAST(ast);
108
+ if (errors.length) {
109
+ var errorStr = errors.join('\n');
110
+ throw new Error(errorStr);
111
+ }
112
+ return reactFn;
113
+ }
111
114
 
112
- function selectFirst(name, arg1, arg2, argN) {
113
- var reactFn = core();
114
- var defObj = parseVargs(Array.prototype.slice.call(arguments, 1)); // name, already used
115
- var inOutDef = parseInOutParams(defObj.inOutParamStr);
116
- var tasks = tutil.serializeTasks(parseTasks(defObj.taskDefArr));
117
- var ast = {
118
- name: name,
119
- inParams: inOutDef.inDef,
120
- tasks: tasks,
121
- outTask: { type: 'finalcbFirst', a: inOutDef.outDef },
122
- };
123
- if (defObj.options) Object.keys(defObj.options).forEach(function (k) { ast[k] = defObj.options[k]; });
124
- var errors = reactFn.setAndValidateAST(ast);
125
- if (errors.length) {
126
- var errorStr = errors.join('\n');
127
- throw new Error(errorStr);
115
+ function selectFirst(name, arg1, arg2, argN) {
116
+ var reactFn = core();
117
+ var defObj = parseVargs(Array.prototype.slice.call(arguments, 1)); // name, already used
118
+ var inOutDef = parseInOutParams(defObj.inOutParamStr);
119
+ var tasks = taskUtil.serializeTasks(parseTasks(defObj.taskDefArr));
120
+ var ast = {
121
+ name: name,
122
+ inParams: inOutDef.inDef,
123
+ tasks: tasks,
124
+ outTask: { type: 'finalcbFirst', a: inOutDef.outDef },
125
+ };
126
+ if (defObj.options) Object.keys(defObj.options).forEach(function (k) { ast[k] = defObj.options[k]; });
127
+ var errors = reactFn.setAndValidateAST(ast);
128
+ if (errors.length) {
129
+ var errorStr = errors.join('\n');
130
+ throw new Error(errorStr);
131
+ }
132
+ return reactFn;
128
133
  }
129
- return reactFn;
130
- }
131
134
 
132
- module.exports = dslDefine;
133
- module.exports.selectFirst = selectFirst;
135
+ dslDefine.selectFirst = selectFirst;
136
+ return dslDefine;
137
+
138
+ });