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.
- package/.npmignore +2 -1
- package/.travis.yml +4 -0
- package/Jakefile.js +34 -3
- package/README.md +34 -174
- package/browser-test/dist.html +90 -0
- package/browser-test/index.html +86 -0
- package/browser-test/min.html +90 -0
- package/dist/react.js +3291 -0
- package/dist/react.min.js +1 -0
- package/doc/advanced.md +166 -0
- package/doc/color-def.graffle +938 -0
- package/doc/color-def.png +0 -0
- package/doc/simple.dot +25 -0
- package/doc/simple.png +0 -0
- package/examples/{default1.js → longer-example.js} +0 -0
- package/examples/{default-simple.js → simple.js} +0 -0
- package/examples/{ast1.js → using-ast-directly.js} +4 -0
- package/examples/{default-events1.js → using-events1.js} +1 -1
- package/examples/{default-log-events.js → using-log-events.js} +1 -1
- package/lib/base-task.js +116 -110
- package/lib/cb-task.js +71 -67
- package/lib/core.js +120 -109
- package/lib/dsl.js +120 -115
- package/lib/error.js +44 -36
- package/lib/event-collector.js +81 -0
- package/lib/event-manager.js +66 -55
- package/lib/eventemitter.js +20 -0
- package/lib/finalcb-first-task.js +56 -53
- package/lib/finalcb-task.js +55 -51
- package/lib/id.js +18 -6
- package/lib/input-parser.js +49 -41
- package/lib/log-events.js +81 -60
- package/lib/parse.js +34 -25
- package/lib/promise-resolve.js +50 -0
- package/lib/promise-task.js +78 -74
- package/lib/react.js +59 -0
- package/lib/ret-task.js +59 -55
- package/lib/sprintf.js +18 -0
- package/lib/status.js +11 -2
- package/lib/task.js +219 -213
- package/lib/track-tasks.js +67 -110
- package/lib/validate.js +136 -136
- package/lib/vcon.js +78 -69
- package/lib/when-task.js +69 -65
- package/package.json +11 -9
- package/src/dist.build.requirejs +20 -0
- package/test/ast.mocha.js +136 -0
- package/test/cb-task.mocha.js +220 -0
- package/test/core-deferred.mocha.js +143 -0
- package/test/core-when.mocha.js +96 -0
- package/test/core.mocha.js +589 -0
- package/test/dsl.mocha.js +350 -0
- package/test/event-manager.mocha.js +119 -0
- package/test/exec-options.mocha.js +48 -0
- package/test/finalcb-task.mocha.js +58 -0
- package/test/input-parser.mocha.js +86 -0
- package/test/mocha.opts +2 -0
- package/test/module-use.mocha.js +147 -0
- package/test/promise-auto-resolve.mocha.js +68 -0
- package/test/ret-task.mocha.js +220 -0
- package/test/task.mocha.js +42 -0
- package/test/validate-cb-task.mocha.js +100 -0
- package/test/validate-ret-task.mocha.js +110 -0
- package/test/validate.mocha.js +324 -0
- package/test/vcon.mocha.js +193 -0
- package/vendor/chai/chai.js +2038 -0
- package/vendor/jquery/jquery-1.7.1.js +9266 -0
- package/vendor/jquery/jquery-1.7.1.min.js +4 -0
- package/vendor/mocha/mocha.css +135 -0
- package/vendor/mocha/mocha.js +3589 -0
- package/vendor/node/util.js +531 -0
- package/vendor/requirejs/require.js +2053 -0
- package/vendor/requirejs/require.min.js +33 -0
- package/doc/alternate-dsls.md +0 -103
- package/doc/default-simple.dot +0 -19
- package/doc/default-simple.dot.png +0 -0
- package/dsl/chain.js +0 -150
- package/dsl/fstr.js +0 -121
- package/dsl/pcode.js +0 -175
- package/examples/chain-events1.js +0 -55
- package/examples/chain1.js +0 -19
- package/examples/fstr-events1.js +0 -38
- package/examples/fstr1.js +0 -37
- package/examples/pcode1.js +0 -22
- package/externalDocs/Dataflow - Wikipedia, the free encyclopedia.html +0 -675
- package/externalDocs/Dataflow - Wikipedia, the free encyclopedia_files/37px-Wiktionary-logo-en.svg.png +0 -0
- package/externalDocs/Dataflow - Wikipedia, the free encyclopedia_files/closewindow.png +0 -0
- package/externalDocs/Dataflow - Wikipedia, the free encyclopedia_files/index(1).php +0 -407
- package/externalDocs/Dataflow - Wikipedia, the free encyclopedia_files/index.php +0 -130
- package/externalDocs/Dataflow - Wikipedia, the free encyclopedia_files/load(1).php +0 -3
- package/externalDocs/Dataflow - Wikipedia, the free encyclopedia_files/load(10).php +0 -89
- package/externalDocs/Dataflow - Wikipedia, the free encyclopedia_files/load(2).php +0 -23
- package/externalDocs/Dataflow - Wikipedia, the free encyclopedia_files/load(3).php +0 -153
- package/externalDocs/Dataflow - Wikipedia, the free encyclopedia_files/load(4).php +0 -6
- package/externalDocs/Dataflow - Wikipedia, the free encyclopedia_files/load(5).php +0 -3
- package/externalDocs/Dataflow - Wikipedia, the free encyclopedia_files/load(6).php +0 -96
- package/externalDocs/Dataflow - Wikipedia, the free encyclopedia_files/load(7).php +0 -16
- package/externalDocs/Dataflow - Wikipedia, the free encyclopedia_files/load(8).php +0 -14
- package/externalDocs/Dataflow - Wikipedia, the free encyclopedia_files/load(9).php +0 -123
- package/externalDocs/Dataflow - Wikipedia, the free encyclopedia_files/load.php +0 -3
- package/externalDocs/Dataflow - Wikipedia, the free encyclopedia_files/poweredby_mediawiki_88x31.png +0 -0
- package/externalDocs/Dataflow - Wikipedia, the free encyclopedia_files/saved_resource +0 -1
- package/externalDocs/Dataflow - Wikipedia, the free encyclopedia_files/search-ltr.png +0 -0
- package/externalDocs/Dataflow - Wikipedia, the free encyclopedia_files/wikimedia-button.png +0 -0
- package/externalDocs/Dataflow Programming Handling Huge Data Loads Without Adding Complexity Dr Dobb's.html +0 -1369
- package/externalDocs/Dataflow Programming Handling Huge Data Loads Without Adding Complexity Dr Dobb's_files/121911_DobbsDigest_Cover.jpg +0 -0
- package/externalDocs/Dataflow Programming Handling Huge Data Loads Without Adding Complexity Dr Dobb's_files/160-x-600-IMU Impact 2012.jpg +0 -0
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- 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
- package/externalDocs/Dataflow Programming Handling Huge Data Loads Without Adding Complexity Dr Dobb's_files/Ad0St1Sz6Sq0V0Id20628317.gif +0 -0
- package/externalDocs/Dataflow Programming Handling Huge Data Loads Without Adding Complexity Dr Dobb's_files/Ad2331174St1Sz225Sq20825250V0Id4.gif +0 -0
- package/externalDocs/Dataflow Programming Handling Huge Data Loads Without Adding Complexity Dr Dobb's_files/AdTracImage.gif +0 -0
- package/externalDocs/Dataflow Programming Handling Huge Data Loads Without Adding Complexity Dr Dobb's_files/Default_Size_16_1x1.gif +0 -0
- package/externalDocs/Dataflow Programming Handling Huge Data Loads Without Adding Complexity Dr Dobb's_files/FB.Share +0 -9
- package/externalDocs/Dataflow Programming Handling Huge Data Loads Without Adding Complexity Dr Dobb's_files/addthis_widget.js +0 -2
- 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
- package/externalDocs/Dataflow Programming Handling Huge Data Loads Without Adding Complexity Dr Dobb's_files/beacon.js +0 -7
- package/externalDocs/Dataflow Programming Handling Huge Data Loads Without Adding Complexity Dr Dobb's_files/checkauth.js +0 -18
- package/externalDocs/Dataflow Programming Handling Huge Data Loads Without Adding Complexity Dr Dobb's_files/colorbox.css +0 -49
- package/externalDocs/Dataflow Programming Handling Huge Data Loads Without Adding Complexity Dr Dobb's_files/convert_data.js +0 -1
- package/externalDocs/Dataflow Programming Handling Huge Data Loads Without Adding Complexity Dr Dobb's_files/count(1).js +0 -5
- package/externalDocs/Dataflow Programming Handling Huge Data Loads Without Adding Complexity Dr Dobb's_files/count.js +0 -5
- package/externalDocs/Dataflow Programming Handling Huge Data Loads Without Adding Complexity Dr Dobb's_files/count.json +0 -1
- package/externalDocs/Dataflow Programming Handling Huge Data Loads Without Adding Complexity Dr Dobb's_files/dataflow1.gif +0 -0
- package/externalDocs/Dataflow Programming Handling Huge Data Loads Without Adding Complexity Dr Dobb's_files/def.html +0 -126
- package/externalDocs/Dataflow Programming Handling Huge Data Loads Without Adding Complexity Dr Dobb's_files/defaults.css +0 -1
- package/externalDocs/Dataflow Programming Handling Huge Data Loads Without Adding Complexity Dr Dobb's_files/detect.js +0 -91
- package/externalDocs/Dataflow Programming Handling Huge Data Loads Without Adding Complexity Dr Dobb's_files/devtest_left-col-slim.css +0 -30
- package/externalDocs/Dataflow Programming Handling Huge Data Loads Without Adding Complexity Dr Dobb's_files/disqus.js +0 -327
- package/externalDocs/Dataflow Programming Handling Huge Data Loads Without Adding Complexity Dr Dobb's_files/disqusHints.css +0 -34
- package/externalDocs/Dataflow Programming Handling Huge Data Loads Without Adding Complexity Dr Dobb's_files/disqusHints.js +0 -8
- package/externalDocs/Dataflow Programming Handling Huge Data Loads Without Adding Complexity Dr Dobb's_files/disqusLoggedOff(1).css +0 -24
- package/externalDocs/Dataflow Programming Handling Huge Data Loads Without Adding Complexity Dr Dobb's_files/disqusLoggedOff.css +0 -24
- package/externalDocs/Dataflow Programming Handling Huge Data Loads Without Adding Complexity Dr Dobb's_files/dobbs_disqus_logo.gif +0 -0
- package/externalDocs/Dataflow Programming Handling Huge Data Loads Without Adding Complexity Dr Dobb's_files/dsqcd10c7f376188a4a2ca3e8fea2c03aeb.css +0 -1
- package/externalDocs/Dataflow Programming Handling Huge Data Loads Without Adding Complexity Dr Dobb's_files/dsqcd10c7f376188a4a2ca3e8fea2c03aeb.js +0 -1
- package/externalDocs/Dataflow Programming Handling Huge Data Loads Without Adding Complexity Dr Dobb's_files/elqCfg.js +0 -55
- package/externalDocs/Dataflow Programming Handling Huge Data Loads Without Adding Complexity Dr Dobb's_files/elqImg.js +0 -12
- package/externalDocs/Dataflow Programming Handling Huge Data Loads Without Adding Complexity Dr Dobb's_files/embed.js +0 -76
- package/externalDocs/Dataflow Programming Handling Huge Data Loads Without Adding Complexity Dr Dobb's_files/experience_util.js +0 -636
- package/externalDocs/Dataflow Programming Handling Huge Data Loads Without Adding Complexity Dr Dobb's_files/fastbutton.html +0 -11
- package/externalDocs/Dataflow Programming Handling Huge Data Loads Without Adding Complexity Dr Dobb's_files/ga.js +0 -51
- package/externalDocs/Dataflow Programming Handling Huge Data Loads Without Adding Complexity Dr Dobb's_files/h-facebook_sm.png +0 -0
- package/externalDocs/Dataflow Programming Handling Huge Data Loads Without Adding Complexity Dr Dobb's_files/h-nav.css +0 -798
- package/externalDocs/Dataflow Programming Handling Huge Data Loads Without Adding Complexity Dr Dobb's_files/h-twitter_sm.png +0 -0
- package/externalDocs/Dataflow Programming Handling Huge Data Loads Without Adding Complexity Dr Dobb's_files/h_s_code_remote.js +0 -377
- package/externalDocs/Dataflow Programming Handling Huge Data Loads Without Adding Complexity Dr Dobb's_files/hintbox_info.jpg +0 -0
- package/externalDocs/Dataflow Programming Handling Huge Data Loads Without Adding Complexity Dr Dobb's_files/hub.1326407570.html +0 -3
- package/externalDocs/Dataflow Programming Handling Huge Data Loads Without Adding Complexity Dr Dobb's_files/in.js +0 -76
- package/externalDocs/Dataflow Programming Handling Huge Data Loads Without Adding Complexity Dr Dobb's_files/insight.min.js +0 -55
- package/externalDocs/Dataflow Programming Handling Huge Data Loads Without Adding Complexity Dr Dobb's_files/jquery-1.2.6.min.js +0 -32
- package/externalDocs/Dataflow Programming Handling Huge Data Loads Without Adding Complexity Dr Dobb's_files/jquery-1.4.2.min.js +0 -154
- package/externalDocs/Dataflow Programming Handling Huge Data Loads Without Adding Complexity Dr Dobb's_files/jquery-ui-1.8rc3.custom.min.js +0 -374
- package/externalDocs/Dataflow Programming Handling Huge Data Loads Without Adding Complexity Dr Dobb's_files/jquery.colorbox-min.js +0 -4
- package/externalDocs/Dataflow Programming Handling Huge Data Loads Without Adding Complexity Dr Dobb's_files/jquery.min.js +0 -154
- package/externalDocs/Dataflow Programming Handling Huge Data Loads Without Adding Complexity Dr Dobb's_files/lib.js +0 -212
- package/externalDocs/Dataflow Programming Handling Huge Data Loads Without Adding Complexity Dr Dobb's_files/like.html +0 -214
- package/externalDocs/Dataflow Programming Handling Huge Data Loads Without Adding Complexity Dr Dobb's_files/noavatar32.png +0 -0
- package/externalDocs/Dataflow Programming Handling Huge Data Loads Without Adding Complexity Dr Dobb's_files/nodetag.js +0 -18
- package/externalDocs/Dataflow Programming Handling Huge Data Loads Without Adding Complexity Dr Dobb's_files/nonSecureAnonymousFramework +0 -2913
- package/externalDocs/Dataflow Programming Handling Huge Data Loads Without Adding Complexity Dr Dobb's_files/p.json +0 -1
- package/externalDocs/Dataflow Programming Handling Huge Data Loads Without Adding Complexity Dr Dobb's_files/plusone.js +0 -32
- package/externalDocs/Dataflow Programming Handling Huge Data Loads Without Adding Complexity Dr Dobb's_files/popwindow.js +0 -24
- package/externalDocs/Dataflow Programming Handling Huge Data Loads Without Adding Complexity Dr Dobb's_files/q4OyybLB0-A.js +0 -91
- package/externalDocs/Dataflow Programming Handling Huge Data Loads Without Adding Complexity Dr Dobb's_files/quant.js +0 -28
- package/externalDocs/Dataflow Programming Handling Huge Data Loads Without Adding Complexity Dr Dobb's_files/qxvZoiHdpAF.css +0 -192
- package/externalDocs/Dataflow Programming Handling Huge Data Loads Without Adding Complexity Dr Dobb's_files/reply.html +0 -160
- package/externalDocs/Dataflow Programming Handling Huge Data Loads Without Adding Complexity Dr Dobb's_files/rss.gif +0 -0
- package/externalDocs/Dataflow Programming Handling Huge Data Loads Without Adding Complexity Dr Dobb's_files/s.js +0 -1
- package/externalDocs/Dataflow Programming Handling Huge Data Loads Without Adding Complexity Dr Dobb's_files/saved_resource +0 -421
- package/externalDocs/Dataflow Programming Handling Huge Data Loads Without Adding Complexity Dr Dobb's_files/saved_resource(1) +0 -1
- package/externalDocs/Dataflow Programming Handling Huge Data Loads Without Adding Complexity Dr Dobb's_files/saved_resource(2) +0 -341
- package/externalDocs/Dataflow Programming Handling Huge Data Loads Without Adding Complexity Dr Dobb's_files/saved_resource(3) +0 -127
- package/externalDocs/Dataflow Programming Handling Huge Data Loads Without Adding Complexity Dr Dobb's_files/script84.js +0 -113
- package/externalDocs/Dataflow Programming Handling Huge Data Loads Without Adding Complexity Dr Dobb's_files/scripts.js +0 -30
- package/externalDocs/Dataflow Programming Handling Huge Data Loads Without Adding Complexity Dr Dobb's_files/sh72.html +0 -5
- package/externalDocs/Dataflow Programming Handling Huge Data Loads Without Adding Complexity Dr Dobb's_files/shAutoloader.js +0 -17
- package/externalDocs/Dataflow Programming Handling Huge Data Loads Without Adding Complexity Dr Dobb's_files/shBrushAS3.js +0 -59
- package/externalDocs/Dataflow Programming Handling Huge Data Loads Without Adding Complexity Dr Dobb's_files/shBrushAppleScript.js +0 -75
- package/externalDocs/Dataflow Programming Handling Huge Data Loads Without Adding Complexity Dr Dobb's_files/shBrushBash.js +0 -59
- package/externalDocs/Dataflow Programming Handling Huge Data Loads Without Adding Complexity Dr Dobb's_files/shBrushCSharp.js +0 -65
- package/externalDocs/Dataflow Programming Handling Huge Data Loads Without Adding Complexity Dr Dobb's_files/shBrushColdFusion.js +0 -100
- package/externalDocs/Dataflow Programming Handling Huge Data Loads Without Adding Complexity Dr Dobb's_files/shBrushCpp.js +0 -97
- package/externalDocs/Dataflow Programming Handling Huge Data Loads Without Adding Complexity Dr Dobb's_files/shBrushCss.js +0 -91
- package/externalDocs/Dataflow Programming Handling Huge Data Loads Without Adding Complexity Dr Dobb's_files/shBrushDelphi.js +0 -55
- package/externalDocs/Dataflow Programming Handling Huge Data Loads Without Adding Complexity Dr Dobb's_files/shBrushDiff.js +0 -41
- package/externalDocs/Dataflow Programming Handling Huge Data Loads Without Adding Complexity Dr Dobb's_files/shBrushErlang.js +0 -52
- package/externalDocs/Dataflow Programming Handling Huge Data Loads Without Adding Complexity Dr Dobb's_files/shBrushGroovy.js +0 -67
- package/externalDocs/Dataflow Programming Handling Huge Data Loads Without Adding Complexity Dr Dobb's_files/shBrushJScript.js +0 -52
- package/externalDocs/Dataflow Programming Handling Huge Data Loads Without Adding Complexity Dr Dobb's_files/shBrushJava.js +0 -57
- package/externalDocs/Dataflow Programming Handling Huge Data Loads Without Adding Complexity Dr Dobb's_files/shBrushJavaFX.js +0 -58
- package/externalDocs/Dataflow Programming Handling Huge Data Loads Without Adding Complexity Dr Dobb's_files/shBrushPerl.js +0 -72
- package/externalDocs/Dataflow Programming Handling Huge Data Loads Without Adding Complexity Dr Dobb's_files/shBrushPhp.js +0 -88
- package/externalDocs/Dataflow Programming Handling Huge Data Loads Without Adding Complexity Dr Dobb's_files/shBrushPlain.js +0 -33
- package/externalDocs/Dataflow Programming Handling Huge Data Loads Without Adding Complexity Dr Dobb's_files/shBrushPowerShell.js +0 -74
- package/externalDocs/Dataflow Programming Handling Huge Data Loads Without Adding Complexity Dr Dobb's_files/shBrushPython.js +0 -64
- package/externalDocs/Dataflow Programming Handling Huge Data Loads Without Adding Complexity Dr Dobb's_files/shBrushRuby.js +0 -55
- package/externalDocs/Dataflow Programming Handling Huge Data Loads Without Adding Complexity Dr Dobb's_files/shBrushSass.js +0 -94
- package/externalDocs/Dataflow Programming Handling Huge Data Loads Without Adding Complexity Dr Dobb's_files/shBrushScala.js +0 -51
- package/externalDocs/Dataflow Programming Handling Huge Data Loads Without Adding Complexity Dr Dobb's_files/shBrushSql.js +0 -66
- package/externalDocs/Dataflow Programming Handling Huge Data Loads Without Adding Complexity Dr Dobb's_files/shBrushVb.js +0 -56
- package/externalDocs/Dataflow Programming Handling Huge Data Loads Without Adding Complexity Dr Dobb's_files/shBrushXml.js +0 -69
- package/externalDocs/Dataflow Programming Handling Huge Data Loads Without Adding Complexity Dr Dobb's_files/shCore.css +0 -226
- package/externalDocs/Dataflow Programming Handling Huge Data Loads Without Adding Complexity Dr Dobb's_files/shCoreDefault.css +0 -333
- package/externalDocs/Dataflow Programming Handling Huge Data Loads Without Adding Complexity Dr Dobb's_files/shCore_new.js +0 -17
- package/externalDocs/Dataflow Programming Handling Huge Data Loads Without Adding Complexity Dr Dobb's_files/shLegacy.js +0 -17
- package/externalDocs/Dataflow Programming Handling Huge Data Loads Without Adding Complexity Dr Dobb's_files/shThemeDefault.css +0 -117
- package/externalDocs/Dataflow Programming Handling Huge Data Loads Without Adding Complexity Dr Dobb's_files/share-button-css +0 -67
- package/externalDocs/Dataflow Programming Handling Huge Data Loads Without Adding Complexity Dr Dobb's_files/share_email_icon.gif +0 -0
- package/externalDocs/Dataflow Programming Handling Huge Data Loads Without Adding Complexity Dr Dobb's_files/share_print_icon.gif +0 -0
- package/externalDocs/Dataflow Programming Handling Huge Data Loads Without Adding Complexity Dr Dobb's_files/sidebar.js +0 -88
- package/externalDocs/Dataflow Programming Handling Huge Data Loads Without Adding Complexity Dr Dobb's_files/superfooter_936.css +0 -186
- package/externalDocs/Dataflow Programming Handling Huge Data Loads Without Adding Complexity Dr Dobb's_files/svrGP.aspx +0 -0
- package/externalDocs/Dataflow Programming Handling Huge Data Loads Without Adding Complexity Dr Dobb's_files/t.gif +0 -0
- package/externalDocs/Dataflow Programming Handling Huge Data Loads Without Adding Complexity Dr Dobb's_files/thickbox.js +0 -343
- package/externalDocs/Dataflow Programming Handling Huge Data Loads Without Adding Complexity Dr Dobb's_files/thread.js +0 -128
- package/externalDocs/Dataflow Programming Handling Huge Data Loads Without Adding Complexity Dr Dobb's_files/togglediv.js +0 -15
- package/externalDocs/Dataflow Programming Handling Huge Data Loads Without Adding Complexity Dr Dobb's_files/tweet_button.html +0 -3
- package/externalDocs/Dataflow Programming Handling Huge Data Loads Without Adding Complexity Dr Dobb's_files/ubmtechweb_logo_sm.gif +0 -0
- package/externalDocs/Dataflow Programming Handling Huge Data Loads Without Adding Complexity Dr Dobb's_files/upload.html +0 -91
- package/externalDocs/Dataflow Programming Handling Huge Data Loads Without Adding Complexity Dr Dobb's_files/welcome.js +0 -7
- package/externalDocs/Dataflow Programming Handling Huge Data Loads Without Adding Complexity Dr Dobb's_files/widget74.css +0 -1
- package/externalDocs/Dataflow Programming Handling Huge Data Loads Without Adding Complexity Dr Dobb's_files/widgets.js +0 -40
- package/externalDocs/Reactive programming - Wikipedia, the free encyclopedia.html +0 -904
- package/externalDocs/Reactive programming - Wikipedia, the free encyclopedia_files/50px-Question_book-new.svg.png +0 -0
- package/externalDocs/Reactive programming - Wikipedia, the free encyclopedia_files/closewindow.png +0 -0
- package/externalDocs/Reactive programming - Wikipedia, the free encyclopedia_files/index(1).php +0 -407
- package/externalDocs/Reactive programming - Wikipedia, the free encyclopedia_files/index.php +0 -130
- package/externalDocs/Reactive programming - Wikipedia, the free encyclopedia_files/load(1).php +0 -3
- package/externalDocs/Reactive programming - Wikipedia, the free encyclopedia_files/load(10).php +0 -89
- package/externalDocs/Reactive programming - Wikipedia, the free encyclopedia_files/load(2).php +0 -23
- package/externalDocs/Reactive programming - Wikipedia, the free encyclopedia_files/load(3).php +0 -153
- package/externalDocs/Reactive programming - Wikipedia, the free encyclopedia_files/load(4).php +0 -6
- package/externalDocs/Reactive programming - Wikipedia, the free encyclopedia_files/load(5).php +0 -3
- package/externalDocs/Reactive programming - Wikipedia, the free encyclopedia_files/load(6).php +0 -96
- package/externalDocs/Reactive programming - Wikipedia, the free encyclopedia_files/load(7).php +0 -16
- package/externalDocs/Reactive programming - Wikipedia, the free encyclopedia_files/load(8).php +0 -14
- package/externalDocs/Reactive programming - Wikipedia, the free encyclopedia_files/load(9).php +0 -123
- package/externalDocs/Reactive programming - Wikipedia, the free encyclopedia_files/load.php +0 -3
- package/externalDocs/Reactive programming - Wikipedia, the free encyclopedia_files/poweredby_mediawiki_88x31.png +0 -0
- package/externalDocs/Reactive programming - Wikipedia, the free encyclopedia_files/saved_resource +0 -1
- package/externalDocs/Reactive programming - Wikipedia, the free encyclopedia_files/search-ltr.png +0 -0
- package/externalDocs/Reactive programming - Wikipedia, the free encyclopedia_files/wikimedia-button.png +0 -0
- package/externalDocs/The Step of the Conductor - How To Node - NodeJS.html +0 -113
- package/externalDocs/The Step of the Conductor - How To Node - NodeJS_files/6654_111305815684_541245684_2583159_5383291_n_normal.jpg +0 -0
- package/externalDocs/The Step of the Conductor - How To Node - NodeJS_files/MARC3_normal.jpg +0 -2
- package/externalDocs/The Step of the Conductor - How To Node - NodeJS_files/beacon.js +0 -7
- package/externalDocs/The Step of the Conductor - How To Node - NodeJS_files/c953ddd239707998340e1a6fbb3eeb46 +0 -0
- package/externalDocs/The Step of the Conductor - How To Node - NodeJS_files/c953ddd239707998340e1a6fbb3eeb46_normal.jpeg +0 -0
- package/externalDocs/The Step of the Conductor - How To Node - NodeJS_files/clouds2_normal.jpg +0 -0
- package/externalDocs/The Step of the Conductor - How To Node - NodeJS_files/count.json +0 -1
- package/externalDocs/The Step of the Conductor - How To Node - NodeJS_files/def.html +0 -126
- package/externalDocs/The Step of the Conductor - How To Node - NodeJS_files/defaults.css +0 -1
- package/externalDocs/The Step of the Conductor - How To Node - NodeJS_files/disqus.js +0 -327
- package/externalDocs/The Step of the Conductor - How To Node - NodeJS_files/dsq7884a9652e94555c70f96b6be63be216.css +0 -1
- package/externalDocs/The Step of the Conductor - How To Node - NodeJS_files/dsq7884a9652e94555c70f96b6be63be216.js +0 -66
- package/externalDocs/The Step of the Conductor - How To Node - NodeJS_files/embed.js +0 -76
- package/externalDocs/The Step of the Conductor - How To Node - NodeJS_files/example1.dot +0 -0
- package/externalDocs/The Step of the Conductor - How To Node - NodeJS_files/ga.js +0 -51
- package/externalDocs/The Step of the Conductor - How To Node - NodeJS_files/get_num_replies.js +0 -79
- package/externalDocs/The Step of the Conductor - How To Node - NodeJS_files/hub.1326407570.html +0 -3
- package/externalDocs/The Step of the Conductor - How To Node - NodeJS_files/lib.js +0 -212
- package/externalDocs/The Step of the Conductor - How To Node - NodeJS_files/noavatar32.png +0 -0
- package/externalDocs/The Step of the Conductor - How To Node - NodeJS_files/quant.js +0 -28
- package/externalDocs/The Step of the Conductor - How To Node - NodeJS_files/reply.html +0 -160
- package/externalDocs/The Step of the Conductor - How To Node - NodeJS_files/t.gif +0 -0
- package/externalDocs/The Step of the Conductor - How To Node - NodeJS_files/thread.js +0 -128
- package/externalDocs/The Step of the Conductor - How To Node - NodeJS_files/tweet_button.1326407570.html +0 -3
- package/externalDocs/The Step of the Conductor - How To Node - NodeJS_files/twitter_normal.jpg +0 -2
- package/externalDocs/The Step of the Conductor - How To Node - NodeJS_files/upload.html +0 -91
- package/externalDocs/The Step of the Conductor - How To Node - NodeJS_files/widgets.js +0 -40
- package/jake-tasks/jake-test.js +0 -64
- package/promise-resolve.js +0 -35
- package/react.js +0 -8
- package/test/ast.test.js +0 -69
- package/test/cb-task.test.js +0 -197
- package/test/core-deferred.test.js +0 -134
- package/test/core-promised.test.js +0 -132
- package/test/core-when.test.js +0 -84
- package/test/core.test.js +0 -568
- package/test/dsl.test.js +0 -330
- package/test/dsl/chain.test.js +0 -324
- package/test/dsl/fstr.test.js +0 -300
- package/test/dsl/pcode.test.js +0 -448
- package/test/event-manager.test.js +0 -102
- package/test/exec-options.test.js +0 -33
- package/test/finalcb-task.test.js +0 -38
- package/test/input-parser.test.js +0 -66
- package/test/module-use.test.js +0 -131
- package/test/promise-auto-resolve.test.js +0 -51
- package/test/ret-task.test.js +0 -199
- package/test/task.test.js +0 -21
- package/test/validate-cb-task.test.js +0 -74
- package/test/validate-ret-task.test.js +0 -83
- package/test/validate.test.js +0 -295
- package/test/vcon.test.js +0 -173
|
Binary file
|
package/doc/simple.dot
ADDED
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
digraph loadRender {
|
|
2
|
+
loadRender_input [ shape = box, style = filled, fillcolor = aquamarine ];
|
|
3
|
+
fooPath [ style = filled, fillcolor = gainsboro ];
|
|
4
|
+
barPath [ style = filled, fillcolor = gainsboro ];
|
|
5
|
+
barP2 [ style = filled, fillcolor = gainsboro ];
|
|
6
|
+
loadFoo [ shape = box, color = blue, fillcolor = beige, style = filled ];
|
|
7
|
+
foo [ style = filled, fillcolor = gainsboro ];
|
|
8
|
+
loadBar [ shape = box, color = blue, fillcolor = beige, style = filled ];
|
|
9
|
+
bar [ style = filled, fillcolor = gainsboro ];
|
|
10
|
+
render [ shape = box, color = blue, fillcolor = beige, style = filled ];
|
|
11
|
+
renderedOut [ style = filled, fillcolor = gainsboro ];
|
|
12
|
+
loadRender_output [ shape = box, style = filled, fillcolor = aquamarine ];
|
|
13
|
+
loadRender_input -> fooPath;
|
|
14
|
+
loadRender_input -> barPath;
|
|
15
|
+
loadRender_input -> barP2;
|
|
16
|
+
fooPath -> loadFoo;
|
|
17
|
+
loadFoo -> foo;
|
|
18
|
+
barPath -> loadBar;
|
|
19
|
+
barP2 -> loadBar;
|
|
20
|
+
loadBar -> bar;
|
|
21
|
+
foo -> render;
|
|
22
|
+
bar -> render;
|
|
23
|
+
render -> renderedOut;
|
|
24
|
+
renderedOut -> loadRender_output;
|
|
25
|
+
}
|
package/doc/simple.png
ADDED
|
Binary file
|
|
File without changes
|
|
File without changes
|
|
@@ -1,5 +1,9 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
|
+
/**
|
|
4
|
+
Advanced example using the AST directly which most users will not do.
|
|
5
|
+
For general use, see other examples like simple.js
|
|
6
|
+
*/
|
|
3
7
|
var react = require('../'); // require('react');
|
|
4
8
|
|
|
5
9
|
function load(res, cb) { setTimeout(cb, 100, null, res + '-loaded'); }
|
|
@@ -6,7 +6,7 @@
|
|
|
6
6
|
*/
|
|
7
7
|
|
|
8
8
|
var react = require('../'); // require('react');
|
|
9
|
-
|
|
9
|
+
react.trackTasks(); // turn on flow and task tracking events
|
|
10
10
|
|
|
11
11
|
//output events as tasks start and complete
|
|
12
12
|
react.events.on('flow.*', function (obj) {
|
|
@@ -6,7 +6,7 @@
|
|
|
6
6
|
*/
|
|
7
7
|
|
|
8
8
|
var react = require('../'); // require('react');
|
|
9
|
-
|
|
9
|
+
react.logEvents(); // turn on logging of all flow and task events for all react functions
|
|
10
10
|
|
|
11
11
|
|
|
12
12
|
function loadUser(uid, cb){ setTimeout(cb, 100, null, "User"+uid); }
|
package/lib/base-task.js
CHANGED
|
@@ -1,117 +1,123 @@
|
|
|
1
1
|
'use strict';
|
|
2
|
+
/*global define:true */
|
|
2
3
|
|
|
3
|
-
|
|
4
|
-
var
|
|
5
|
-
var EventManager = require('./event-manager.js');
|
|
6
|
-
|
|
7
|
-
function BaseTask() {
|
|
4
|
+
if (typeof define !== 'function') {
|
|
5
|
+
var define = require('amdefine')(module);
|
|
8
6
|
}
|
|
9
7
|
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
return array(this.out); // ensure array
|
|
15
|
-
};
|
|
16
|
-
|
|
17
|
-
BaseTask.prototype.isComplete = function () {
|
|
18
|
-
return (this.status === STATUS.COMPLETE);
|
|
19
|
-
};
|
|
20
|
-
|
|
21
|
-
BaseTask.prototype.start = function (args) { // mark task as started with args and note time
|
|
22
|
-
/*jshint validthis: true */
|
|
23
|
-
this.args = args;
|
|
24
|
-
this.env.currentTask = this;
|
|
25
|
-
this.env.flowEmitter.emit(EventManager.TYPES.EXEC_TASK_START, this);
|
|
26
|
-
};
|
|
27
|
-
|
|
28
|
-
BaseTask.prototype.complete = function (args) { //args that were used are available
|
|
29
|
-
/*jshint validthis: true */
|
|
30
|
-
this.status = STATUS.COMPLETE;
|
|
31
|
-
this.results = args;
|
|
32
|
-
this.env.currentTask = this;
|
|
33
|
-
this.env.flowEmitter.emit(EventManager.TYPES.EXEC_TASK_COMPLETE, this);
|
|
34
|
-
};
|
|
35
|
-
|
|
36
|
-
BaseTask.prototype.functionExists = function (vCon) {
|
|
37
|
-
var fn = this.f;
|
|
38
|
-
if (!fn) return false;
|
|
39
|
-
if (fn instanceof Function) return true;
|
|
40
|
-
if (typeof(fn) === 'string') {
|
|
41
|
-
var f = vCon.getVar(fn); // fn/method by string
|
|
42
|
-
if (f && f instanceof Function) return true;
|
|
8
|
+
define(['ensure-array', './status', './event-manager'],
|
|
9
|
+
function (array, STATUS, EventManager) {
|
|
10
|
+
|
|
11
|
+
function BaseTask() {
|
|
43
12
|
}
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
};
|
|
55
|
-
|
|
56
|
-
function
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
13
|
+
|
|
14
|
+
/**
|
|
15
|
+
Getter Fn to retrieveAn array of the output param names for this task.
|
|
16
|
+
*/
|
|
17
|
+
BaseTask.prototype.getOutParams = function () {
|
|
18
|
+
return array(this.out); // ensure array
|
|
19
|
+
};
|
|
20
|
+
|
|
21
|
+
BaseTask.prototype.isComplete = function () {
|
|
22
|
+
return (this.status === STATUS.COMPLETE);
|
|
23
|
+
};
|
|
24
|
+
|
|
25
|
+
BaseTask.prototype.start = function (args) { // mark task as started with args and note time
|
|
26
|
+
/*jshint validthis: true */
|
|
27
|
+
this.args = args;
|
|
28
|
+
this.env.currentTask = this;
|
|
29
|
+
this.env.flowEmitter.emit(EventManager.TYPES.EXEC_TASK_START, this);
|
|
30
|
+
};
|
|
31
|
+
|
|
32
|
+
BaseTask.prototype.complete = function (args) { //args that were used are available
|
|
33
|
+
/*jshint validthis: true */
|
|
34
|
+
this.status = STATUS.COMPLETE;
|
|
35
|
+
this.results = args;
|
|
36
|
+
this.env.currentTask = this;
|
|
37
|
+
this.env.flowEmitter.emit(EventManager.TYPES.EXEC_TASK_COMPLETE, this);
|
|
38
|
+
};
|
|
39
|
+
|
|
40
|
+
BaseTask.prototype.functionExists = function (vCon) {
|
|
41
|
+
var fn = this.f;
|
|
42
|
+
if (!fn) return false;
|
|
43
|
+
if (fn instanceof Function) return true;
|
|
44
|
+
if (typeof(fn) === 'string') {
|
|
45
|
+
var f = vCon.getVar(fn); // fn/method by string
|
|
46
|
+
if (f && f instanceof Function) return true;
|
|
47
|
+
}
|
|
48
|
+
return false;
|
|
49
|
+
};
|
|
50
|
+
|
|
51
|
+
BaseTask.prototype.areAllDepArgsDefined = function (vCon) {
|
|
52
|
+
return this.a.every(function (k) { return (vCon.getVar(k) !== undefined); });
|
|
53
|
+
};
|
|
54
|
+
|
|
55
|
+
BaseTask.prototype.depTasksAreDone = function (tasksByName) {
|
|
56
|
+
return (!this.after || !this.after.length || // no dep tasks OR
|
|
57
|
+
this.after.every(function (n) { return tasksByName[n].isComplete(); })); //all done
|
|
58
|
+
};
|
|
59
|
+
|
|
60
|
+
function isObjProperty(str) { return (str.indexOf('.') !== -1); }
|
|
61
|
+
|
|
62
|
+
/**
|
|
63
|
+
check that obj parent is def and not null so writing to obj.prop
|
|
64
|
+
will not fail. ex: 'b.c' checks that b is def and not null.
|
|
65
|
+
Also returns true if not obj.prop but simple var ex: 'b'.
|
|
66
|
+
Tasks will implement outParentsExist() passing each out str
|
|
67
|
+
to this if they want to do this check.
|
|
64
68
|
*/
|
|
65
|
-
BaseTask.prototype.parentExists = function (objPropStr, vCon) {
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
};
|
|
75
|
-
|
|
76
|
-
/**
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
69
|
+
BaseTask.prototype.parentExists = function (objPropStr, vCon) {
|
|
70
|
+
if (!isObjProperty(objPropStr)) return true; // NOT obj prop, just simple arg, ret true
|
|
71
|
+
var nameAndProps = objPropStr.split('.');
|
|
72
|
+
nameAndProps.pop(); // pop off final prop
|
|
73
|
+
var parent = nameAndProps.reduce(function (accObj, prop) {
|
|
74
|
+
if (accObj === undefined || accObj === null) return undefined; // prevent exception
|
|
75
|
+
return accObj[prop];
|
|
76
|
+
}, vCon.values); // vCon['foo']['bar']
|
|
77
|
+
return (parent !== undefined && parent !== null);
|
|
78
|
+
};
|
|
79
|
+
|
|
80
|
+
/**
|
|
81
|
+
If params are obj property writes make sure the dst objects
|
|
82
|
+
are defined and not null. cb: ['b.c'] -> b is def and not null.
|
|
83
|
+
If null is specified then param is valid and will be ignored.
|
|
84
|
+
@returns true if all obj prop parents are def and non null
|
|
81
85
|
*/
|
|
82
|
-
BaseTask.prototype.outParentsExist = function (vCon) {
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
};
|
|
89
|
-
|
|
90
|
-
BaseTask.prototype.isReady = function (vCon, tasksByName) {
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
};
|
|
98
|
-
|
|
99
|
-
BaseTask.prototype.isMethodCall = function () {
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
};
|
|
103
|
-
|
|
104
|
-
BaseTask.prototype.getMethodObj = function (vCon) { //obj.prop.prop2, returns obj.prop or undefined
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
};
|
|
116
|
-
|
|
117
|
-
|
|
86
|
+
BaseTask.prototype.outParentsExist = function (vCon) {
|
|
87
|
+
var self = this;
|
|
88
|
+
return this.getOutParams().every(function (x) {
|
|
89
|
+
if (x === null) return true;
|
|
90
|
+
return self.parentExists(x, vCon);
|
|
91
|
+
});
|
|
92
|
+
};
|
|
93
|
+
|
|
94
|
+
BaseTask.prototype.isReady = function (vCon, tasksByName) {
|
|
95
|
+
return !this.status && // not started AND
|
|
96
|
+
this.functionExists(vCon) && // function/method exists AND
|
|
97
|
+
this.areAllDepArgsDefined(vCon) && // all dep vars defined AND
|
|
98
|
+
this.depTasksAreDone(tasksByName) && // all dep tasks are done AND
|
|
99
|
+
(!this.outParentsExist || // (task does not implement outParentsExist method OR
|
|
100
|
+
this.outParentsExist(vCon)); // output parents exists (for obj property writes)
|
|
101
|
+
};
|
|
102
|
+
|
|
103
|
+
BaseTask.prototype.isMethodCall = function () {
|
|
104
|
+
/*jshint regexp: false */
|
|
105
|
+
return (typeof(this.f) === 'string' && /^.*\..*$/.test(this.f)); //str contains .
|
|
106
|
+
};
|
|
107
|
+
|
|
108
|
+
BaseTask.prototype.getMethodObj = function (vCon) { //obj.prop.prop2, returns obj.prop or undefined
|
|
109
|
+
var name = this.f;
|
|
110
|
+
if (!name) return undefined;
|
|
111
|
+
var nameAndProps = name.split('.');
|
|
112
|
+
nameAndProps.pop(); // pop off last one
|
|
113
|
+
if (!nameAndProps.length) return undefined;
|
|
114
|
+
var result = nameAndProps.reduce(function (accObj, prop) {
|
|
115
|
+
if (accObj === undefined || accObj === null) return undefined; // prevent exception
|
|
116
|
+
return accObj[prop];
|
|
117
|
+
}, vCon.values); // vCon['foo']['bar']
|
|
118
|
+
return result;
|
|
119
|
+
};
|
|
120
|
+
|
|
121
|
+
return BaseTask;
|
|
122
|
+
|
|
123
|
+
});
|
package/lib/cb-task.js
CHANGED
|
@@ -1,80 +1,84 @@
|
|
|
1
1
|
'use strict';
|
|
2
|
+
/*global define:true */
|
|
2
3
|
|
|
3
|
-
|
|
4
|
-
var
|
|
4
|
+
if (typeof define !== 'function') {
|
|
5
|
+
var define = require('amdefine')(module);
|
|
6
|
+
}
|
|
5
7
|
|
|
6
|
-
|
|
8
|
+
define(['util', './sprintf', './base-task'], function (util, sprintf, BaseTask) {
|
|
7
9
|
|
|
8
|
-
function format_error(errmsg, obj) {
|
|
9
|
-
|
|
10
|
-
}
|
|
10
|
+
function format_error(errmsg, obj) {
|
|
11
|
+
return sprintf('%s - %s', errmsg, util.inspect(obj));
|
|
12
|
+
}
|
|
11
13
|
|
|
12
|
-
var REQ = 'cbTask requires f, a, out';
|
|
13
|
-
var FN_REQ = 'cbTask requires f to be a function or string';
|
|
14
|
-
var A_REQ = 'cbTask requires a to be an array of string param names';
|
|
15
|
-
var CB_REQ = 'cbTask requires out to be an array of string param names';
|
|
14
|
+
var REQ = 'cbTask requires f, a, out';
|
|
15
|
+
var FN_REQ = 'cbTask requires f to be a function or string';
|
|
16
|
+
var A_REQ = 'cbTask requires a to be an array of string param names';
|
|
17
|
+
var CB_REQ = 'cbTask requires out to be an array of string param names';
|
|
16
18
|
|
|
17
|
-
function CbTask(taskDef) {
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
}
|
|
19
|
+
function CbTask(taskDef) {
|
|
20
|
+
var self = this;
|
|
21
|
+
Object.keys(taskDef).forEach(function (k) { self[k] = taskDef[k]; });
|
|
22
|
+
}
|
|
21
23
|
|
|
22
|
-
CbTask.prototype = new BaseTask();
|
|
23
|
-
CbTask.prototype.constructor = CbTask;
|
|
24
|
+
CbTask.prototype = new BaseTask();
|
|
25
|
+
CbTask.prototype.constructor = CbTask;
|
|
24
26
|
|
|
25
|
-
CbTask.validate = function (taskDef) {
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
27
|
+
CbTask.validate = function (taskDef) {
|
|
28
|
+
var errors = [];
|
|
29
|
+
if (!taskDef.f || !taskDef.a || !taskDef.out) {
|
|
30
|
+
errors.push(format_error(REQ, taskDef));
|
|
31
|
+
} else {
|
|
32
|
+
var ftype = typeof(taskDef.f);
|
|
33
|
+
if (! ((taskDef.f instanceof Function) || (ftype === 'string'))) {
|
|
34
|
+
errors.push(format_error(FN_REQ, taskDef));
|
|
35
|
+
}
|
|
36
|
+
if (! (Array.isArray(taskDef.a) &&
|
|
37
|
+
taskDef.a.every(function (x) { return (typeof(x) === 'string'); }))) {
|
|
38
|
+
errors.push(format_error(A_REQ, taskDef));
|
|
39
|
+
}
|
|
40
|
+
if (! (Array.isArray(taskDef.out) &&
|
|
41
|
+
taskDef.out.every(function (x) { return (typeof(x) === 'string'); }))) {
|
|
42
|
+
errors.push(format_error(CB_REQ, taskDef));
|
|
43
|
+
}
|
|
33
44
|
}
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
errors.push(format_error(A_REQ, taskDef));
|
|
37
|
-
}
|
|
38
|
-
if (! (Array.isArray(taskDef.out) &&
|
|
39
|
-
taskDef.out.every(function (x) { return (typeof(x) === 'string'); }))) {
|
|
40
|
-
errors.push(format_error(CB_REQ, taskDef));
|
|
41
|
-
}
|
|
42
|
-
}
|
|
43
|
-
return errors;
|
|
44
|
-
};
|
|
45
|
+
return errors;
|
|
46
|
+
};
|
|
45
47
|
|
|
46
|
-
CbTask.prototype.prepare = function prepare(handleTaskError, vCon, contExec) {
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
48
|
+
CbTask.prototype.prepare = function prepare(handleTaskError, vCon, contExec) {
|
|
49
|
+
var self = this;
|
|
50
|
+
this.cbFun = function (err, arg0, arg1, argn) {
|
|
51
|
+
var args = Array.prototype.slice.call(arguments, 1);
|
|
52
|
+
if (err) { handleTaskError(self, err); return; } //handle error and return, we are done
|
|
51
53
|
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
};
|
|
54
|
+
//no error, save callback args to vCon context, then continue execution
|
|
55
|
+
vCon.saveResults(self.out, args);
|
|
56
|
+
self.complete(args);
|
|
57
|
+
contExec();
|
|
58
|
+
};
|
|
59
|
+
};
|
|
58
60
|
|
|
59
|
-
CbTask.prototype.exec = function exec(vCon, handleError, contExec) {
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
};
|
|
61
|
+
CbTask.prototype.exec = function exec(vCon, handleError, contExec) {
|
|
62
|
+
try {
|
|
63
|
+
var args = this.a.map(function (k) { return vCon.getVar(k); }); //get args from vCon
|
|
64
|
+
//console.error('CbTask.exec.args=', args);
|
|
65
|
+
//console.error('CbTask.exec.vCon=', vCon);
|
|
66
|
+
this.start(args); //note the start time, args
|
|
67
|
+
args.push(this.cbFun); // push callback fn on end
|
|
68
|
+
var func = this.f;
|
|
69
|
+
var bindObj = vCon.getVar('this'); //global space or the original this
|
|
70
|
+
if (this.isMethodCall()) { //if method call then reset func and bindObj
|
|
71
|
+
func = vCon.getVar(this.f);
|
|
72
|
+
bindObj = this.getMethodObj(vCon);
|
|
73
|
+
} else if (typeof(func) === 'string') {
|
|
74
|
+
func = vCon.getVar(func); // we want the actual fn from this string
|
|
75
|
+
}
|
|
76
|
+
func.apply(bindObj, args);
|
|
77
|
+
} catch (err) { //catch and handle the task error, calling final cb
|
|
78
|
+
handleError(this, err);
|
|
79
|
+
}
|
|
80
|
+
};
|
|
81
|
+
|
|
82
|
+
return CbTask;
|
|
79
83
|
|
|
80
|
-
|
|
84
|
+
});
|