react 0.3.5 → 0.5.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.npmignore +2 -1
- package/README.md +21 -151
- package/doc/advanced.md +161 -0
- package/doc/color-def.graffle +938 -0
- package/doc/color-def.png +0 -0
- package/examples/default-log-events.js +1 -1
- package/lib/event-collector.js +65 -0
- package/lib/log-events.js +30 -15
- package/{promise-resolve.js → lib/promise-resolve.js} +1 -1
- package/lib/track-tasks.js +4 -61
- package/package.json +1 -1
- package/react.js +33 -1
- package/test/core.test.js +1 -1
- package/test/module-use.test.js +5 -2
- package/test/promise-auto-resolve.test.js +2 -1
- package/Jakefile.js +0 -8
- package/doc/alternate-dsls.md +0 -103
- 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/test/dsl/chain.test.js +0 -324
- package/test/dsl/fstr.test.js +0 -300
- package/test/dsl/pcode.test.js +0 -448
|
Binary file
|
|
@@ -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); }
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var react = require('../'); // require('react');
|
|
4
|
+
react.trackTasks(); // enable task tracking
|
|
5
|
+
|
|
6
|
+
var TASK_EVENTS_RE = /^task\./;
|
|
7
|
+
var FLOW_EVENTS_RE = /^flow\./;
|
|
8
|
+
|
|
9
|
+
/**
|
|
10
|
+
Accumulator to make it easy to capture events
|
|
11
|
+
|
|
12
|
+
@example
|
|
13
|
+
var EventCollector = require('react/lib/event-collector');
|
|
14
|
+
var collector = new EventCollector();
|
|
15
|
+
|
|
16
|
+
collector.capture(); // capture all flow and task events for all react flows
|
|
17
|
+
collector.capture('flow.*'); // capture all flow events for all react flows
|
|
18
|
+
collector.capture(flowFn, 'task.*'); // capture task events on a flow
|
|
19
|
+
collector.capture(flowFn, 'flow.*'); // add capture flow events on a flow
|
|
20
|
+
|
|
21
|
+
var events = collector.list(); // retrieve the list of events
|
|
22
|
+
collector.clear(); // clear the list of events;
|
|
23
|
+
*/
|
|
24
|
+
function EventCollector() {
|
|
25
|
+
this.events = [];
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
/**
|
|
29
|
+
register listener to capture events for a specific flow
|
|
30
|
+
@param flowFn the react flow function or can pass global react
|
|
31
|
+
@param eventId event id or wildcarded id
|
|
32
|
+
*/
|
|
33
|
+
EventCollector.prototype.capture = function (flowFn, eventId) {
|
|
34
|
+
/*jshint validthis: true */
|
|
35
|
+
if (!eventId && typeof(flowFn) === 'string') { // only eventId provided
|
|
36
|
+
eventId = flowFn;
|
|
37
|
+
flowFn = react; // global react
|
|
38
|
+
} else if (!flowFn) flowFn = react; // global react
|
|
39
|
+
if (!eventId) eventId = '*'; // default to all
|
|
40
|
+
var emitter = flowFn.events;
|
|
41
|
+
var self = this;
|
|
42
|
+
function accumEvents(obj) {
|
|
43
|
+
var eventObject = {
|
|
44
|
+
event: this.event,
|
|
45
|
+
time: Date.now()
|
|
46
|
+
};
|
|
47
|
+
if (FLOW_EVENTS_RE.test(this.event)) {
|
|
48
|
+
eventObject.env = obj;
|
|
49
|
+
} else if (TASK_EVENTS_RE.test(this.event)) {
|
|
50
|
+
eventObject.task = obj;
|
|
51
|
+
}
|
|
52
|
+
self.events.push(eventObject);
|
|
53
|
+
}
|
|
54
|
+
emitter.on(eventId, accumEvents);
|
|
55
|
+
};
|
|
56
|
+
|
|
57
|
+
EventCollector.prototype.list = function () {
|
|
58
|
+
return this.events;
|
|
59
|
+
};
|
|
60
|
+
|
|
61
|
+
EventCollector.prototype.clear = function () {
|
|
62
|
+
this.events = []; // clear
|
|
63
|
+
};
|
|
64
|
+
|
|
65
|
+
module.exports = EventCollector;
|
package/lib/log-events.js
CHANGED
|
@@ -5,13 +5,20 @@
|
|
|
5
5
|
|
|
6
6
|
@example
|
|
7
7
|
var react = require('react');
|
|
8
|
-
|
|
8
|
+
react.logEvents(); // log all task and flow events on all react functions
|
|
9
|
+
react.logEvents('task.*'); // log all task events on all react functions
|
|
10
|
+
react.logEvents(flowFn); // log all task and flow events on flowFn only
|
|
11
|
+
react.logEvents(flowFn, 'flow.*'); // log all flow events on flowFn only
|
|
9
12
|
*/
|
|
10
13
|
|
|
11
|
-
var
|
|
14
|
+
var util = require('util'); // TODO replace inspect with something portable to browser
|
|
15
|
+
|
|
16
|
+
var react = require('../'); // require('react');
|
|
17
|
+
react.trackTasks(); // enable task and flow tracking
|
|
12
18
|
|
|
13
19
|
var ALL_FLOW_EVENTS = 'flow.*';
|
|
14
20
|
var ALL_TASK_EVENTS = 'task.*';
|
|
21
|
+
var FLOW_RE = /^flow\./;
|
|
15
22
|
|
|
16
23
|
function flowLog(obj) {
|
|
17
24
|
/*jshint validthis: true */
|
|
@@ -21,12 +28,12 @@ function flowLog(obj) {
|
|
|
21
28
|
var eventTimeStr = time.toISOString();
|
|
22
29
|
if (this.event === 'flow.complete') {
|
|
23
30
|
var env = obj;
|
|
24
|
-
console.error('%s: %s \tmsecs:
|
|
25
|
-
this.event, env.name, env.elapsedTime, argsNoCb, env.results);
|
|
31
|
+
console.error('%s: %s \tmsecs: %s \n\targs: %s \n\tresults: %s\n',
|
|
32
|
+
this.event, env.name, env.elapsedTime, util.inspect(argsNoCb), util.inspect(env.results));
|
|
26
33
|
} else {
|
|
27
34
|
var name = obj.name;
|
|
28
35
|
var args = obj.args;
|
|
29
|
-
console.error('%s: %s \n\targs:
|
|
36
|
+
console.error('%s: %s \n\targs: %s\n', this.event, name, util.inspect(argsNoCb));
|
|
30
37
|
}
|
|
31
38
|
}
|
|
32
39
|
|
|
@@ -38,12 +45,12 @@ function taskLog(obj) {
|
|
|
38
45
|
var eventTimeStr = time.toISOString();
|
|
39
46
|
if (this.event === 'task.complete') {
|
|
40
47
|
var task = obj;
|
|
41
|
-
console.error('%s: %s \tmsecs:
|
|
42
|
-
this.event, task.name, task.elapsedTime, argsNoCb, task.results);
|
|
48
|
+
console.error('%s: %s \tmsecs: %s \n\targs: %s \n\tresults: %s\n',
|
|
49
|
+
this.event, task.name, task.elapsedTime, util.inspect(argsNoCb), util.inspect(task.results));
|
|
43
50
|
} else {
|
|
44
51
|
var name = obj.name;
|
|
45
52
|
var args = obj.args;
|
|
46
|
-
console.error('%s: %s \n\targs:
|
|
53
|
+
console.error('%s: %s \n\targs: %s\n', this.event, name, util.inspect(argsNoCb));
|
|
47
54
|
}
|
|
48
55
|
|
|
49
56
|
}
|
|
@@ -55,16 +62,24 @@ function taskLog(obj) {
|
|
|
55
62
|
|
|
56
63
|
@example
|
|
57
64
|
var react = require('react');
|
|
58
|
-
|
|
65
|
+
react.logEvents(flowFn, eventWildcard); //log events on flowfn matching wildcard
|
|
59
66
|
|
|
60
67
|
@param flowFn Flow function or global react object
|
|
68
|
+
@param eventWildcard wildcarded event type, if not provided use flow.* and task.*
|
|
61
69
|
*/
|
|
62
|
-
function logEvents(flowFn) {
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
70
|
+
function logEvents(flowFn, eventWildcard) {
|
|
71
|
+
if (!flowFn) flowFn = react; // use global
|
|
72
|
+
if (eventWildcard && eventWildcard !== '*') {
|
|
73
|
+
var logFn = (FLOW_RE.test(eventWildcard)) ? flowLog : taskLog;
|
|
74
|
+
flowFn.events.removeListener(eventWildcard, logFn);
|
|
75
|
+
flowFn.events.on(eventWildcard, logFn);
|
|
76
|
+
} else { // none provided, use flow.* and task.*
|
|
77
|
+
//output events as tasks start and complete
|
|
78
|
+
flowFn.events.removeListener(ALL_FLOW_EVENTS, flowLog);
|
|
79
|
+
flowFn.events.on(ALL_FLOW_EVENTS, flowLog);
|
|
80
|
+
flowFn.events.removeListener(ALL_TASK_EVENTS, taskLog);
|
|
81
|
+
flowFn.events.on(ALL_TASK_EVENTS, taskLog);
|
|
82
|
+
}
|
|
68
83
|
}
|
|
69
84
|
|
|
70
85
|
module.exports = react;
|
package/lib/track-tasks.js
CHANGED
|
@@ -13,68 +13,14 @@
|
|
|
13
13
|
- emits task.complete with task
|
|
14
14
|
- emits flow complete with flowEnv
|
|
15
15
|
- emits flow errored with flowEnv
|
|
16
|
-
*/
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
var react = require('../'); // require('react');
|
|
20
|
-
|
|
21
|
-
var TASK_EVENTS_RE = /^task\./;
|
|
22
|
-
var FLOW_EVENTS_RE = /^flow\./;
|
|
23
|
-
|
|
24
|
-
/**
|
|
25
|
-
Accumulator to make it easy to capture events
|
|
26
|
-
|
|
27
|
-
@example
|
|
28
|
-
var EventCollector = require('react/lib/track-tasks').EventCollector;
|
|
29
|
-
var collector = new EventCollector();
|
|
30
|
-
|
|
31
|
-
collector.captureGlobal('*'); // capture all react events for all flows
|
|
32
|
-
|
|
33
|
-
// OR
|
|
34
|
-
|
|
35
|
-
collector.capture(flowFn, 'task.'); // capture task events on a flow
|
|
36
|
-
collector.capture(flowFn, 'flow.'); // add capture flow events on a flow
|
|
37
16
|
|
|
38
|
-
|
|
17
|
+
@example
|
|
18
|
+
var react = require('react');
|
|
19
|
+
react.trackTasks(); // enable task and flow tracking
|
|
39
20
|
*/
|
|
40
|
-
function EventCollector() {
|
|
41
|
-
this.events = [];
|
|
42
|
-
}
|
|
43
21
|
|
|
44
|
-
/**
|
|
45
|
-
register listener to capture all events
|
|
46
|
-
@param eventId event id or wildcarded id
|
|
47
|
-
*/
|
|
48
|
-
EventCollector.prototype.captureGlobal = function (eventId) {
|
|
49
|
-
this.capture(react, eventId);
|
|
50
|
-
};
|
|
51
|
-
|
|
52
|
-
/**
|
|
53
|
-
register listener to capture events for a specific flow
|
|
54
|
-
@param flowFn the react flow function or can pass global react
|
|
55
|
-
@param eventId event id or wildcarded id
|
|
56
|
-
*/
|
|
57
|
-
EventCollector.prototype.capture = function (flowFn, eventId) {
|
|
58
|
-
var emitter = flowFn.events;
|
|
59
|
-
var self = this;
|
|
60
|
-
function accumEvents(obj) {
|
|
61
|
-
var eventObject = {
|
|
62
|
-
event: this.event,
|
|
63
|
-
time: Date.now()
|
|
64
|
-
};
|
|
65
|
-
if (FLOW_EVENTS_RE.test(this.event)) {
|
|
66
|
-
eventObject.env = obj;
|
|
67
|
-
} else if (TASK_EVENTS_RE.test(this.event)) {
|
|
68
|
-
eventObject.task = obj;
|
|
69
|
-
}
|
|
70
|
-
self.events.push(eventObject);
|
|
71
|
-
}
|
|
72
|
-
emitter.on(eventId, accumEvents);
|
|
73
|
-
};
|
|
74
22
|
|
|
75
|
-
|
|
76
|
-
return this.events;
|
|
77
|
-
};
|
|
23
|
+
var react = require('../'); // require('react');
|
|
78
24
|
|
|
79
25
|
react.events.on(react.events.TYPES.EXEC_FLOW_START, function (env){
|
|
80
26
|
env.startTime = Date.now();
|
|
@@ -111,7 +57,4 @@ react.events.on(react.events.TYPES.EXEC_FLOW_ERRORED, function (env) {
|
|
|
111
57
|
});
|
|
112
58
|
|
|
113
59
|
|
|
114
|
-
|
|
115
|
-
|
|
116
60
|
module.exports = react; // return react
|
|
117
|
-
module.exports.EventCollector = EventCollector;
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "react",
|
|
3
3
|
"description": "React is a javascript module implementing a lightweight rules engine to make it easier to work with asynchronous code, by reducing boilerplate code and improving error and exception handling while allowing variable and task dependencies when defining flow.",
|
|
4
|
-
"version": "0.
|
|
4
|
+
"version": "0.5.0",
|
|
5
5
|
"author": "Jeff Barczewski <jeff.barczewski@gmail.com>",
|
|
6
6
|
"repository": { "type": "git", "url": "http://github.com/jeffbski/react.git" },
|
|
7
7
|
"bugs" : { "url": "http://github.com/jeffbski/react/issues" },
|
package/react.js
CHANGED
|
@@ -2,7 +2,39 @@
|
|
|
2
2
|
|
|
3
3
|
var core = require('./lib/core.js');
|
|
4
4
|
|
|
5
|
+
/**
|
|
6
|
+
If called, load the built-in plugin for log events and invoke
|
|
7
|
+
|
|
8
|
+
@param flowFn [function] if not provided uses global react
|
|
9
|
+
@param eventWildcard [string] pattern to log events for
|
|
10
|
+
*/
|
|
11
|
+
function logEvents(flowFn, eventWildcard) {
|
|
12
|
+
var logEventsMod = require('./lib/log-events');
|
|
13
|
+
if (!eventWildcard && typeof(flowFn) === 'string') { // only wildcard provided
|
|
14
|
+
eventWildcard = flowFn;
|
|
15
|
+
flowFn = undefined;
|
|
16
|
+
}
|
|
17
|
+
return logEventsMod.logEvents(flowFn, eventWildcard);
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
/**
|
|
21
|
+
Enable detection of promises and resolution
|
|
22
|
+
*/
|
|
23
|
+
function resolvePromises() {
|
|
24
|
+
require('./lib/promise-resolve');
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
/**
|
|
28
|
+
Enable tracking of tasks and flow execution, emitting events and
|
|
29
|
+
tracking start, end, elapsed time
|
|
30
|
+
*/
|
|
31
|
+
function trackTasks() {
|
|
32
|
+
require('./lib/track-tasks');
|
|
33
|
+
}
|
|
34
|
+
|
|
5
35
|
module.exports = require('./lib/dsl.js'); // core + default dsl
|
|
6
36
|
module.exports.options = core.options; // global react options
|
|
7
37
|
module.exports.events = core.events; // global react event emitter
|
|
8
|
-
|
|
38
|
+
module.exports.logEvents = logEvents; // enable event logging
|
|
39
|
+
module.exports.resolvePromises = resolvePromises; // enable promise resolution
|
|
40
|
+
module.exports.trackTasks = trackTasks; // enable tracking of tasks
|
package/test/core.test.js
CHANGED
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
var test = require('tap').test;
|
|
4
4
|
|
|
5
5
|
var react = require('../react');
|
|
6
|
-
var EventCollector = require('../lib/
|
|
6
|
+
var EventCollector = require('../lib/event-collector'); // require('react/lib/event-collector'); // turn on tracking and get EventCollector
|
|
7
7
|
|
|
8
8
|
function multiply(x, y, cb) { cb(null, x * y); }
|
|
9
9
|
function add(x, y, cb) { cb(null, x + y); }
|
package/test/module-use.test.js
CHANGED
|
@@ -4,8 +4,8 @@ var test = require('tap').test;
|
|
|
4
4
|
var BaseTask = require('../lib/base-task.js');
|
|
5
5
|
|
|
6
6
|
var react = require('../'); // require('react');
|
|
7
|
-
// turn on tracking,
|
|
8
|
-
var EventCollector = require('../lib/
|
|
7
|
+
// turn on tracking, obtain EventCollector
|
|
8
|
+
var EventCollector = require('../lib/event-collector'); // require('react/lib/event-collector');
|
|
9
9
|
|
|
10
10
|
|
|
11
11
|
/**
|
|
@@ -39,6 +39,9 @@ test('module exports an function object with properties', function (t) {
|
|
|
39
39
|
t.type(react, 'function', 'is a core constructor and default dsl function');
|
|
40
40
|
t.type(react.options, 'object', 'has property for global react options');
|
|
41
41
|
t.type(react.events, 'object', 'has global react event manager');
|
|
42
|
+
t.type(react.logEvents, 'function', 'has function to enable event logging');
|
|
43
|
+
t.type(react.trackTasks, 'function', 'has function to enable task and flow tracking');
|
|
44
|
+
t.type(react.resolvePromises, 'function', 'has fn to enable promise detection & resolution');
|
|
42
45
|
t.end();
|
|
43
46
|
});
|
|
44
47
|
|
|
@@ -8,7 +8,8 @@
|
|
|
8
8
|
var test = require('tap').test;
|
|
9
9
|
var Deferred = require('promised-io/promise').Deferred;
|
|
10
10
|
|
|
11
|
-
var react = require('../
|
|
11
|
+
var react = require('../'); // require('react');
|
|
12
|
+
react.resolvePromises(); // enable promise resolving
|
|
12
13
|
|
|
13
14
|
function multiply(x, y, cb) { cb(null, x * y); }
|
|
14
15
|
function add(x, y, cb) { cb(null, x + y); }
|
package/Jakefile.js
DELETED
package/doc/alternate-dsls.md
DELETED
|
@@ -1,103 +0,0 @@
|
|
|
1
|
-
# Alternate DSL's
|
|
2
|
-
|
|
3
|
-
These DSL's are not loaded by default and thus require a separate require if you want to use one.
|
|
4
|
-
|
|
5
|
-
Since React is an AST based rules system, it allows custom DSL's to be created easily, they only need to generate the AST and they are fully functional, allowing many different interfaces for the same system.
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
### Examples using the AST directly or alternate DSL's
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
1. [Using pseudocode DSL](#pcode)
|
|
12
|
-
2. [Using jquery-like chaining DSL](#chain)
|
|
13
|
-
3. [Function String DSL](#fstr) (Deprecated)
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
<a name="pcode"/>
|
|
17
|
-
### Example using pseudocode DSL interface
|
|
18
|
-
|
|
19
|
-
```javascript
|
|
20
|
-
var pcodeDefine = require('react/dsl/pcode');
|
|
21
|
-
|
|
22
|
-
function multiply(a, b, cb) { cb(null, a * b); }
|
|
23
|
-
function add(a, b) { return a + b; }
|
|
24
|
-
var locals = { // since pcodeDefine uses strings, need references to functions passed into react
|
|
25
|
-
multiply: multiply,
|
|
26
|
-
add: add
|
|
27
|
-
};
|
|
28
|
-
|
|
29
|
-
var fn = pcodeDefine('a, b, cb', [ // input params
|
|
30
|
-
'm := multiply(a, b)', // using a callback function, use :=
|
|
31
|
-
's = add(m, a)', // using a sync function, use =
|
|
32
|
-
'cb(err, m, s)' // output params for final callback
|
|
33
|
-
], locals); // hash of functions that will be used
|
|
34
|
-
|
|
35
|
-
fn(2, 3, function (err, m, s) {
|
|
36
|
-
console.error('err:', err); // null
|
|
37
|
-
console.error('m:', m); // 2 * 3 = 6
|
|
38
|
-
console.error('s:', s); // 6 + 2 = 8
|
|
39
|
-
});
|
|
40
|
-
```
|
|
41
|
-
|
|
42
|
-
<a name="chain"/>
|
|
43
|
-
### Example using jquery-like chaining DSL interface
|
|
44
|
-
|
|
45
|
-
```javascript
|
|
46
|
-
var chainDefine = require('react/dsl/chain');
|
|
47
|
-
|
|
48
|
-
function multiply(a, b, cb) { cb(null, a * b); }
|
|
49
|
-
function add(a, b) { return a + b; }
|
|
50
|
-
|
|
51
|
-
var fn = chainDefine()
|
|
52
|
-
.in('a', 'b', 'cb') // input params
|
|
53
|
-
.out('err', 'm', 's') // final callback output params
|
|
54
|
-
.async(multiply).in('a', 'b', 'cb').out('err', 'm') // task def - async fn, in params, callback out params
|
|
55
|
-
.sync(add).in('m', 'a').out('s') // task def - sync fn, in params, return value
|
|
56
|
-
.end();
|
|
57
|
-
|
|
58
|
-
fn(2, 3, function (err, m, s) {
|
|
59
|
-
console.error('err:', err); // null
|
|
60
|
-
console.error('m:', m); // 2 * 3 = 6
|
|
61
|
-
console.error('s:', s); // 6 + 2 = 8
|
|
62
|
-
});
|
|
63
|
-
```
|
|
64
|
-
|
|
65
|
-
<a name="fstr"/>
|
|
66
|
-
### Example using Function String DSL interface
|
|
67
|
-
|
|
68
|
-
The Function String DSL interface is deprecated since it morphed into the default DSL which is very similar. It is recommended that you use the default DSL instead.
|
|
69
|
-
|
|
70
|
-
```javascript
|
|
71
|
-
var fstrDefine = require('react/dsl/fstr');
|
|
72
|
-
|
|
73
|
-
function loadUser(uid, cb){ setTimeout(cb, 100, null, "User"+uid); }
|
|
74
|
-
function loadFile(filename, cb){ setTimeout(cb, 100, null, 'Filedata'+filename); }
|
|
75
|
-
function markdown(filedata) { return 'html'+filedata; }
|
|
76
|
-
function prepareDirectory(outDirname, cb){ setTimeout(cb, 200, null, 'dircreated-'+outDirname); }
|
|
77
|
-
function writeOutput(html, user, cb){ setTimeout(cb, 300, null, html+'_bytesWritten'); }
|
|
78
|
-
function loadEmailTemplate(cb) { setTimeout(cb, 50, null, 'emailmd'); }
|
|
79
|
-
function customizeEmail(user, emailHtml, cb) { return 'cust-'+user+emailHtml; }
|
|
80
|
-
function deliverEmail(custEmailHtml, cb) { setTimeout(cb, 100, null, 'delivered-'+custEmailHtml); }
|
|
81
|
-
|
|
82
|
-
function useHtml(err, html, user, bytesWritten) {
|
|
83
|
-
if(err) {
|
|
84
|
-
console.log('***Error: %s', err);
|
|
85
|
-
return;
|
|
86
|
-
}
|
|
87
|
-
console.log('final result: %s, user: %s, written:%s', html, user, bytesWritten);
|
|
88
|
-
}
|
|
89
|
-
|
|
90
|
-
var loadAndSave = fstrDefine('filename, uid, outDirname, cb', [ // input params
|
|
91
|
-
loadUser, 'uid -> err, user', // calling async fn loadUser with uid, callback is called with err and user
|
|
92
|
-
loadFile, 'filename -> err, filedata',
|
|
93
|
-
markdown, 'filedata -> returns html', // using a sync function
|
|
94
|
-
prepareDirectory, 'outDirname -> err, dircreated',
|
|
95
|
-
writeOutput, 'html, user -> err, bytesWritten', { after: prepareDirectory }, // only after prepareDirectory done
|
|
96
|
-
loadEmailTemplate, ' -> err, emailmd',
|
|
97
|
-
markdown, 'emailmd -> returns emailHtml', // using a sync function
|
|
98
|
-
customizeEmail, 'user, emailHtml -> returns custEmailHtml',
|
|
99
|
-
deliverEmail, 'custEmailHtml -> err, deliveredEmail', { after: writeOutput } // only after writeOutput is done
|
|
100
|
-
], 'err, html, user, bytesWritten'); // callback output params
|
|
101
|
-
|
|
102
|
-
loadAndSave('file.md', 100, '/tmp/foo', useHtml); // executing the flow
|
|
103
|
-
```
|