react 0.3.4 → 0.5.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (42) hide show
  1. package/.npmignore +2 -1
  2. package/README.md +68 -172
  3. package/doc/advanced.md +166 -0
  4. package/doc/color-def.graffle +938 -0
  5. package/doc/color-def.png +0 -0
  6. package/doc/simple.dot +25 -0
  7. package/doc/simple.png +0 -0
  8. package/examples/{default1.js → longer-example.js} +0 -0
  9. package/examples/simple.js +45 -0
  10. package/examples/{ast1.js → using-ast-directly.js} +4 -0
  11. package/examples/{default-events1.js → using-events1.js} +0 -0
  12. package/examples/{default-log-events.js → using-log-events.js} +1 -1
  13. package/lib/core.js +13 -1
  14. package/lib/event-collector.js +68 -0
  15. package/lib/event-manager.js +4 -0
  16. package/lib/id.js +1 -0
  17. package/lib/log-events.js +30 -15
  18. package/{promise-resolve.js → lib/promise-resolve.js} +1 -1
  19. package/lib/task.js +8 -3
  20. package/lib/track-tasks.js +5 -62
  21. package/lib/vcon.js +1 -1
  22. package/package.json +2 -2
  23. package/react.js +33 -1
  24. package/test/ast.test.js +50 -1
  25. package/test/core.test.js +27 -2
  26. package/test/dsl.test.js +2 -2
  27. package/test/module-use.test.js +5 -2
  28. package/test/promise-auto-resolve.test.js +2 -1
  29. package/Jakefile.js +0 -8
  30. package/doc/alternate-dsls.md +0 -103
  31. package/dsl/chain.js +0 -150
  32. package/dsl/fstr.js +0 -121
  33. package/dsl/pcode.js +0 -175
  34. package/examples/chain-events1.js +0 -55
  35. package/examples/chain1.js +0 -19
  36. package/examples/fstr-events1.js +0 -38
  37. package/examples/fstr1.js +0 -37
  38. package/examples/pcode1.js +0 -22
  39. package/jake-tasks/jake-test.js +0 -64
  40. package/test/dsl/chain.test.js +0 -324
  41. package/test/dsl/fstr.test.js +0 -300
  42. package/test/dsl/pcode.test.js +0 -448
@@ -1,448 +0,0 @@
1
- 'use strict';
2
-
3
- var test = require('tap').test;
4
- var sprintf = require('sprintf').sprintf;
5
-
6
- var pcode = require('../../dsl/pcode'); // require('react/dsl/pcode');
7
- var EventCollector = require('../../lib/track-tasks').EventCollector; // require('react/lib/track-tasks'); // turn on tracking
8
-
9
- function falpha() { }
10
- function fbeta() { }
11
- function fcharlie() { }
12
-
13
- test('module exports an object', function (t) {
14
- t.type(pcode, 'function', 'has define by DSL method');
15
- t.end();
16
- });
17
-
18
- test('no arguments -> empty inParams, tasks, outTask', function (t) {
19
- var r = pcode();
20
- t.deepEqual(r.ast.inParams, []);
21
- t.deepEqual(r.ast.tasks, []);
22
- t.deepEqual(r.ast.outTask, { a: [], type: 'finalcb' });
23
- t.end();
24
- });
25
-
26
- test('empty first string -> empty inParams, tasks, outTask', function (t) {
27
- var r = pcode('');
28
- t.deepEqual(r.ast.inParams, []);
29
- t.deepEqual(r.ast.tasks, []);
30
- t.deepEqual(r.ast.outTask, { a: [], type: 'finalcb' });
31
- t.end();
32
- });
33
-
34
-
35
- test('single first string -> inParams["foo"], empty tasks, outTask', function (t) {
36
- var r = pcode('foo');
37
- t.deepEqual(r.ast.inParams, ['foo']);
38
- t.deepEqual(r.ast.tasks, []);
39
- t.deepEqual(r.ast.outTask, { a: [], type: 'finalcb' });
40
- t.end();
41
- });
42
-
43
- test('triple first string -> inParams["foo", "bar", "baz"], empty tasks, outTask',
44
- function (t) {
45
- var r = pcode(' foo, bar,baz ');
46
- t.deepEqual(r.ast.inParams, ['foo', 'bar', 'baz']);
47
- t.deepEqual(r.ast.tasks, []);
48
- t.deepEqual(r.ast.outTask, { a: [], type: 'finalcb' });
49
- t.end();
50
- });
51
-
52
- test('single task, single out params', function (t) {
53
- var locals = { falpha: falpha };
54
- var r = pcode('a, b', [
55
- 'c := falpha(a, b)',
56
- 'cb(err, c)'
57
- ], locals);
58
- t.deepEqual(r.ast.inParams, ['a', 'b']);
59
- t.deepEqual(r.ast.tasks, [
60
- { f: 'falpha', a: ['a', 'b'], out: ['c'], type: 'cb', name: 'falpha'}
61
- ]);
62
- t.deepEqual(r.ast.outTask, { a: ['c'], type: 'finalcb' });
63
- t.end();
64
- });
65
-
66
- test('single task, single out params, cb(err)', function (t) {
67
- var locals = { falpha: falpha };
68
- var r = pcode('a, b', [
69
- 'c := falpha(a, b)',
70
- 'cb(err)'
71
- ], locals);
72
- t.deepEqual(r.ast.inParams, ['a', 'b']);
73
- t.deepEqual(r.ast.tasks, [
74
- { f: 'falpha', a: ['a', 'b'], out: ['c'], type: 'cb', name: 'falpha'}
75
- ]);
76
- t.deepEqual(r.ast.outTask, { a: [], type: 'finalcb' });
77
- t.end();
78
- });
79
-
80
- test('single task, err and out params', function (t) {
81
- var locals = { falpha: falpha };
82
- var r = pcode('a, b', [
83
- 'c := falpha(a, b)',
84
- 'cb(err, c)'
85
- ], locals);
86
- t.deepEqual(r.ast.inParams, ['a', 'b']);
87
- t.deepEqual(r.ast.tasks, [
88
- { f: 'falpha', a: ['a', 'b'], out: ['c'], type: 'cb', name: 'falpha'}
89
- ]);
90
- t.deepEqual(r.ast.outTask, { a: ['c'], type: 'finalcb' });
91
- t.end();
92
- });
93
-
94
- test('two inputs, two tasks, two out params', function (t) {
95
- var locals = { falpha: falpha, fbeta: fbeta };
96
- var r = pcode('a, b', [
97
- 'c := falpha(a, b)',
98
- 'd, e := fbeta(a, b)',
99
- 'cb(err, c, d)'
100
- ], locals);
101
- t.deepEqual(r.ast.inParams, ['a', 'b']);
102
- t.deepEqual(r.ast.tasks, [
103
- { f: 'falpha', a: ['a', 'b'], out: ['c'], type: 'cb', name: 'falpha'},
104
- { f: 'fbeta', a: ['a', 'b'], out: ['d', 'e'], type: 'cb', name: 'fbeta'}
105
- ]);
106
- t.deepEqual(r.ast.outTask, { a: ['c', 'd'], type: 'finalcb' });
107
- t.end();
108
- });
109
-
110
- test('two inputs, two tasks, two out params, options', function (t) {
111
- var locals = { falpha: falpha, fbeta: fbeta };
112
- var r = pcode('a, b', [
113
- 'c := falpha(a, b)',
114
- 'd, e := fbeta(a, b)',
115
- 'cb(err, c, d)'
116
- ], locals, { name: 'myflow', otherOptFoo: 'foo'});
117
- t.deepEqual(r.ast.inParams, ['a', 'b']);
118
- t.deepEqual(r.ast.tasks, [
119
- { f: 'falpha', a: ['a', 'b'], out: ['c'], type: 'cb', name: 'falpha'},
120
- { f: 'fbeta', a: ['a', 'b'], out: ['d', 'e'], type: 'cb', name: 'fbeta'}
121
- ]);
122
- t.deepEqual(r.ast.outTask, { a: ['c', 'd'], type: 'finalcb' });
123
- t.equal(r.ast.name, 'myflow', 'name should match if supplied');
124
- t.equal(r.ast.otherOptFoo, 'foo', 'other options should pass through');
125
- t.end();
126
- });
127
-
128
-
129
-
130
- test('two inputs, two mixed tasks, two out params', function (t) {
131
- var locals = { falpha: falpha, fbeta: fbeta };
132
- var r = pcode('a, b', [
133
- 'c := falpha(a, b)',
134
- 'd = fbeta(a, b)',
135
- 'cb(err, c, d)'
136
- ], locals);
137
- t.deepEqual(r.ast.inParams, ['a', 'b']);
138
- t.deepEqual(r.ast.tasks, [
139
- { f: 'falpha', a: ['a', 'b'], out: ['c'], type: 'cb', name: 'falpha'},
140
- { f: 'fbeta', a: ['a', 'b'], out: ['d'], type: 'ret', name: 'fbeta'}
141
- ]);
142
- t.deepEqual(r.ast.outTask, { a: ['c', 'd'], type: 'finalcb' });
143
- t.end();
144
- });
145
-
146
- test('allow cb in the definitions', function (t) {
147
- var locals = { falpha: falpha, fbeta: fbeta };
148
- var r = pcode('a, b, cb', [
149
- 'c := falpha(a, b, cb)',
150
- 'd = fbeta(a, b)',
151
- 'cb(err, c, d)'
152
- ], locals);
153
- t.deepEqual(r.ast.inParams, ['a', 'b']);
154
- t.deepEqual(r.ast.tasks, [
155
- { f: 'falpha', a: ['a', 'b'], out: ['c'], type: 'cb', name: 'falpha'},
156
- { f: 'fbeta', a: ['a', 'b'], out: ['d'], type: 'ret', name: 'fbeta'}
157
- ]);
158
- t.deepEqual(r.ast.outTask, { a: ['c', 'd'], type: 'finalcb' });
159
- t.end();
160
- });
161
-
162
- test('allow Cb in the definitions', function (t) {
163
- var locals = { falpha: falpha, fbeta: fbeta };
164
- var r = pcode('a, b, Cb', [
165
- 'c := falpha(a, b, Cb)',
166
- 'd = fbeta(a, b)',
167
- 'cb(err, c, d)'
168
- ], locals);
169
- t.deepEqual(r.ast.inParams, ['a', 'b']);
170
- t.deepEqual(r.ast.tasks, [
171
- { f: 'falpha', a: ['a', 'b'], out: ['c'], type: 'cb', name: 'falpha'},
172
- { f: 'fbeta', a: ['a', 'b'], out: ['d'], type: 'ret', name: 'fbeta'}
173
- ]);
174
- t.deepEqual(r.ast.outTask, { a: ['c', 'd'], type: 'finalcb' });
175
- t.end();
176
- });
177
-
178
- test('allow callback in the definitions', function (t) {
179
- var locals = { falpha: falpha, fbeta: fbeta };
180
- var r = pcode('a, b, callback', [
181
- 'c := falpha(a, b, callback)',
182
- 'd = fbeta(a, b)',
183
- 'callback(err, c, d)'
184
- ], locals);
185
- t.deepEqual(r.ast.inParams, ['a', 'b']);
186
- t.deepEqual(r.ast.tasks, [
187
- { f: 'falpha', a: ['a', 'b'], out: ['c'], type: 'cb', name: 'falpha'},
188
- { f: 'fbeta', a: ['a', 'b'], out: ['d'], type: 'ret', name: 'fbeta'}
189
- ]);
190
- t.deepEqual(r.ast.outTask, { a: ['c', 'd'], type: 'finalcb' });
191
- t.end();
192
- });
193
-
194
- test('allow Callback in the definitions', function (t) {
195
- var locals = { falpha: falpha, fbeta: fbeta };
196
- var r = pcode('a, b, Callback', [
197
- 'c := falpha(a, b, Callback)',
198
- 'd = fbeta(a, b)',
199
- 'Callback(err, c, d)'
200
- ], locals);
201
- t.deepEqual(r.ast.inParams, ['a', 'b']);
202
- t.deepEqual(r.ast.tasks, [
203
- { f: 'falpha', a: ['a', 'b'], out: ['c'], type: 'cb', name: 'falpha'},
204
- { f: 'fbeta', a: ['a', 'b'], out: ['d'], type: 'ret', name: 'fbeta'}
205
- ]);
206
- t.deepEqual(r.ast.outTask, { a: ['c', 'd'], type: 'finalcb' });
207
- t.end();
208
- });
209
-
210
-
211
-
212
-
213
-
214
- test('var prefix two inputs, two mixed tasks, two out params', function (t) {
215
- var locals = { falpha: falpha, fbeta: fbeta };
216
- var r = pcode('a, b', [
217
- 'var c := falpha(a, b);',
218
- 'var d = fbeta(a, b);',
219
- 'cb(err, c, d);'
220
- ], locals);
221
- t.deepEqual(r.ast.inParams, ['a', 'b']);
222
- t.deepEqual(r.ast.tasks, [
223
- { f: 'falpha', a: ['a', 'b'], out: ['c'], type: 'cb', name: 'falpha'},
224
- { f: 'fbeta', a: ['a', 'b'], out: ['d'], type: 'ret', name: 'fbeta'}
225
- ]);
226
- t.deepEqual(r.ast.outTask, { a: ['c', 'd'], type: 'finalcb' });
227
- t.end();
228
- });
229
-
230
- test('when single ret fn:done', function (t) {
231
- var locals = { falpha: falpha, fbeta: fbeta };
232
- var r = pcode('a, b', [
233
- 'c := falpha(a, b)',
234
- 'd = fbeta(a, b) when falpha:done',
235
- 'cb(err, c, d);'
236
- ], locals);
237
- t.deepEqual(r.ast.inParams, ['a', 'b']);
238
- t.deepEqual(r.ast.tasks, [
239
- { f: 'falpha', a: ['a', 'b'], out: ['c'], type: 'cb', name: 'falpha'},
240
- { f: 'fbeta', a: ['a', 'b'], out: ['d'], type: 'ret', after: ['falpha'], name: 'fbeta'}
241
- ]);
242
- t.deepEqual(r.ast.outTask, { a: ['c', 'd'], type: 'finalcb' });
243
- t.end();
244
- });
245
-
246
- test('when single cb fn:done', function (t) {
247
- var locals = { falpha: falpha, fbeta: fbeta };
248
- var r = pcode('a, b', [
249
- 'c := falpha(a, b) when fbeta:done',
250
- 'd = fbeta(a, b)',
251
- 'cb(err, c, d);'
252
- ], locals);
253
- t.deepEqual(r.ast.inParams, ['a', 'b']);
254
- t.deepEqual(r.ast.tasks, [
255
- { f: 'falpha', a: ['a', 'b'], out: ['c'], type: 'cb', after: ['fbeta'], name: 'falpha'},
256
- { f: 'fbeta', a: ['a', 'b'], out: ['d'], type: 'ret', name: 'fbeta'}
257
- ]);
258
- t.deepEqual(r.ast.outTask, { a: ['c', 'd'], type: 'finalcb' });
259
- t.end();
260
- });
261
-
262
- test('when multiple fn:done cb', function (t) {
263
- var locals = { falpha: falpha, fbeta: fbeta, fcharlie: fcharlie };
264
- var r = pcode('a, b', [
265
- 'd = fbeta(a, b)',
266
- 'e = fcharlie(a, b)',
267
- 'c := falpha(a, b) when fbeta:done and fcharlie:done',
268
- 'cb(err, c, d);'
269
- ], locals);
270
- t.deepEqual(r.ast.inParams, ['a', 'b']);
271
- t.deepEqual(r.ast.tasks, [
272
- { f: 'fbeta', a: ['a', 'b'], out: ['d'], type: 'ret', name: 'fbeta'},
273
- { f: 'fcharlie', a: ['a', 'b'], out: ['e'], type: 'ret', name: 'fcharlie'},
274
- { f: 'falpha', a: ['a', 'b'], out: ['c'], type: 'cb', after: ['fbeta', 'fcharlie'], name: 'falpha'}
275
- ]);
276
- t.deepEqual(r.ast.outTask, { a: ['c', 'd'], type: 'finalcb' });
277
- t.end();
278
- });
279
-
280
- test('when multiple fn:done ret', function (t) {
281
- var locals = { falpha: falpha, fbeta: fbeta, fcharlie: fcharlie };
282
- var r = pcode('a, b', [
283
- 'd = fbeta(a, b)',
284
- 'e = fcharlie(a, b)',
285
- 'c = falpha(a, b) when fbeta:done and fcharlie:done',
286
- 'cb(err, c, d);'
287
- ], locals);
288
- t.deepEqual(r.ast.inParams, ['a', 'b']);
289
- t.deepEqual(r.ast.tasks, [
290
- { f: 'fbeta', a: ['a', 'b'], out: ['d'], type: 'ret', name: 'fbeta'},
291
- { f: 'fcharlie', a: ['a', 'b'], out: ['e'], type: 'ret', name: 'fcharlie'},
292
- { f: 'falpha', a: ['a', 'b'], out: ['c'], type: 'ret', after: ['fbeta', 'fcharlie'], name: 'falpha'}
293
- ]);
294
- t.deepEqual(r.ast.outTask, { a: ['c', 'd'], type: 'finalcb' });
295
- t.end();
296
- });
297
-
298
- test('when mixed multiple fn:done', function (t) {
299
- var locals = { falpha: falpha, fbeta: fbeta, fcharlie: fcharlie };
300
- var r = pcode('a, b', [
301
- 'd = fbeta(a, b)',
302
- 'e = fcharlie(a, b) when fbeta;',
303
- 'c = falpha(a, b) when fbeta and fcharlie;',
304
- 'cb(err, c, d);'
305
- ], locals);
306
- t.deepEqual(r.ast.inParams, ['a', 'b']);
307
- t.deepEqual(r.ast.tasks, [
308
- { f: 'fbeta', a: ['a', 'b'], out: ['d'], type: 'ret', name: 'fbeta'},
309
- { f: 'fcharlie', a: ['a', 'b'], out: ['e'], type: 'ret', after: ['fbeta'], name: 'fcharlie'},
310
- { f: 'falpha', a: ['a', 'b'], out: ['c'], type: 'ret', after: ['fbeta', 'fcharlie'], name: 'falpha'}
311
- ]);
312
- t.deepEqual(r.ast.outTask, { a: ['c', 'd'], type: 'finalcb' });
313
- t.end();
314
- });
315
-
316
-
317
- /* selectFirst */
318
-
319
- test('selectFirst', function (t) {
320
- var locals = { falpha: falpha, fbeta: fbeta, fcharlie: fcharlie };
321
- var r = pcode.selectFirst('a, b', [
322
- 'c := falpha(a, b)',
323
- 'c = fbeta(a, b)',
324
- 'cb(err, c)'
325
- ], locals, { name: 'myflow', otherOptFoo: 'foo'});
326
- t.deepEqual(r.ast.inParams, ['a', 'b']);
327
- t.deepEqual(r.ast.tasks, [
328
- { f: 'falpha', a: ['a', 'b'], out: ['c'], type: 'cb', name: 'falpha'},
329
- { f: 'fbeta', a: ['a', 'b'], out: ['c'], type: 'ret', name: 'fbeta', after: ['falpha']}
330
- ]);
331
- t.deepEqual(r.ast.outTask, { type: 'finalcbFirst', a: ['c'] });
332
- t.equal(r.ast.name, 'myflow', 'name should match if supplied');
333
- t.equal(r.ast.otherOptFoo, 'foo', 'other options should pass through');
334
- t.end();
335
- });
336
-
337
- // full integration tests
338
-
339
- test('use pcodeDefine from module', function (t) {
340
- t.plan(3);
341
- function multiply(a, b, cb) { cb(null, a * b); }
342
- function add(a, b, cb) { cb(null, a + b); }
343
- var locals = { multiply: multiply, add: add };
344
- var fn = pcode('a, b, cb', [
345
- 'm := multiply(a, b)',
346
- 's := add(m, a)',
347
- 'cb(err, m, s)'
348
- ], locals);
349
-
350
- fn(2, 3, function (err, m, s) {
351
- t.deepEqual(err, null, 'should not be any error');
352
- t.equal(m, 6);
353
- t.equal(s, 8);
354
- t.end();
355
- });
356
- });
357
-
358
- test('use pcodeDefine with events', function (t) {
359
- t.plan(8);
360
- function multiply(a, b, cb) { cb(null, a * b); }
361
- function add(a, b, cb) { cb(null, a + b); }
362
-
363
- var locals = { multiply: multiply, add: add };
364
- var fn = pcode('a, b, cb', [
365
- 'm := multiply(a, b)',
366
- 's := add(m, a)',
367
- 'cb(err, m, s)'
368
- ], locals);
369
-
370
- var collector = new EventCollector();
371
- collector.capture(fn, 'task.complete');
372
-
373
- fn(2, 3, function (err, m, s) {
374
- t.deepEqual(err, null, 'should not be any error');
375
- t.equal(m, 6);
376
- t.equal(s, 8);
377
- var events = collector.list();
378
- t.equal(events.length, 2, 'should have seen two task compl events');
379
- t.equal(events[0].task.name, 'multiply', 'name matches');
380
- t.deepEqual(events[0].task.results, [6], 'results match');
381
- t.equal(events[1].task.name, 'add', 'name matches');
382
- t.deepEqual(events[1].task.results, [8], 'results match');
383
- t.end();
384
- });
385
- });
386
-
387
- test('use pcodeDefine.selectFirst with events', function (t) {
388
- t.plan(7);
389
- function noSuccess(a, b, cb) {
390
- setTimeout(function () { cb(null); }, 100); // returns undefined result
391
- }
392
- function noSuccessNull(a, b, cb) { cb(null, null); } // returns null result
393
- function add(a, b, cb) { cb(null, a + b); }
394
-
395
- var locals = { noSuccess: noSuccess, noSuccessNull: noSuccessNull, add: add };
396
- var fn = pcode.selectFirst('a, b, cb', [
397
- 'c := noSuccess(a, b)',
398
- 'c := noSuccessNull(a, b)',
399
- 'c := add(a, b)',
400
- 'c := noSuccess(a, b)',
401
- 'cb(err, c)'
402
- ], locals);
403
-
404
- var collector = new EventCollector();
405
- collector.capture(fn, 'task.complete');
406
-
407
- fn(2, 3, function (err, c) {
408
- t.deepEqual(err, null, 'should not be any error');
409
- t.equal(c, 5);
410
- var events = collector.list();
411
- t.equal(events.length, 3, 'should have seen two task compl events');
412
- t.equal(events[0].task.name, 'noSuccess', 'name matches');
413
- t.equal(events[1].task.name, 'noSuccessNull', 'name matches');
414
- t.equal(events[2].task.name, 'add', 'name matches');
415
- t.deepEqual(events[2].task.results, [5], 'results match');
416
- t.end();
417
- });
418
- });
419
-
420
- test('use pcodeDefine events emit to global emitter', function (t) {
421
- t.plan(8);
422
- function multiply(a, b, cb) { cb(null, a * b); }
423
- function add(a, b, cb) { cb(null, a + b); }
424
-
425
- var locals = { multiply: multiply, add: add };
426
- var fn = pcode('a, b, cb', [
427
- 'm := multiply(a, b)',
428
- 's := add(m, a)',
429
- 'cb(err, m, s)'
430
- ], locals);
431
-
432
- var collector = new EventCollector();
433
- collector.capture(pcode, 'task.complete'); // the global react emitter
434
-
435
- fn(2, 3, function (err, m, s) {
436
- t.deepEqual(err, null, 'should not be any error');
437
- t.equal(m, 6);
438
- t.equal(s, 8);
439
- var events = collector.list();
440
- t.equal(events.length, 2, 'should have seen two task compl events');
441
- t.equal(events[0].task.name, 'multiply', 'name matches');
442
- t.deepEqual(events[0].task.results, [6], 'results match');
443
- t.equal(events[1].task.name, 'add', 'name matches');
444
- t.deepEqual(events[1].task.results, [8], 'results match');
445
- t.end();
446
- });
447
- });
448
-