react 0.5.1 → 0.6.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 (88) hide show
  1. package/.travis.yml +5 -0
  2. package/Jakefile.js +39 -0
  3. package/README.md +17 -24
  4. package/browser-test/dist.html +89 -0
  5. package/browser-test/index.html +85 -0
  6. package/browser-test/min.html +89 -0
  7. package/dist/react.js +3094 -0
  8. package/dist/react.min.js +22 -0
  9. package/doc/advanced.md +2 -2
  10. package/doc/simple.dot +25 -0
  11. package/doc/simple.png +0 -0
  12. package/examples/using-events1.js +1 -1
  13. package/lib/base-task.js +116 -110
  14. package/lib/cb-task.js +71 -67
  15. package/lib/core.js +116 -117
  16. package/lib/dsl.js +120 -115
  17. package/lib/error.js +44 -36
  18. package/lib/event-collector.js +69 -56
  19. package/lib/event-manager.js +69 -56
  20. package/lib/eventemitter.js +20 -0
  21. package/lib/finalcb-first-task.js +56 -53
  22. package/lib/finalcb-task.js +55 -51
  23. package/lib/id.js +18 -7
  24. package/lib/input-parser.js +49 -41
  25. package/lib/log-events.js +79 -73
  26. package/lib/parse.js +34 -25
  27. package/lib/promise-resolve.js +42 -27
  28. package/lib/promise-task.js +78 -74
  29. package/lib/react.js +59 -0
  30. package/lib/ret-task.js +59 -55
  31. package/lib/sprintf.js +18 -0
  32. package/lib/status.js +11 -2
  33. package/lib/task.js +215 -217
  34. package/lib/track-tasks.js +72 -58
  35. package/lib/validate.js +136 -136
  36. package/lib/vcon.js +78 -69
  37. package/lib/when-task.js +69 -65
  38. package/package.json +10 -9
  39. package/src/dist.build.requirejs +20 -0
  40. package/test/ast.mocha.js +136 -0
  41. package/test/cb-task.mocha.js +220 -0
  42. package/test/core-deferred.mocha.js +143 -0
  43. package/test/core-when.mocha.js +96 -0
  44. package/test/core.mocha.js +589 -0
  45. package/test/dsl.mocha.js +350 -0
  46. package/test/event-manager.mocha.js +119 -0
  47. package/test/exec-options.mocha.js +48 -0
  48. package/test/finalcb-task.mocha.js +58 -0
  49. package/test/input-parser.mocha.js +86 -0
  50. package/test/mocha.opts +2 -0
  51. package/test/module-use.mocha.js +147 -0
  52. package/test/promise-auto-resolve.mocha.js +68 -0
  53. package/test/ret-task.mocha.js +220 -0
  54. package/test/task.mocha.js +42 -0
  55. package/test/validate-cb-task.mocha.js +100 -0
  56. package/test/validate-ret-task.mocha.js +110 -0
  57. package/test/validate.mocha.js +324 -0
  58. package/test/vcon.mocha.js +193 -0
  59. package/vendor/chai/chai.js +2038 -0
  60. package/vendor/jquery/jquery-1.7.1.js +9266 -0
  61. package/vendor/jquery/jquery-1.7.1.min.js +4 -0
  62. package/vendor/mocha/mocha.css +135 -0
  63. package/vendor/mocha/mocha.js +3589 -0
  64. package/vendor/node/util.js +531 -0
  65. package/vendor/requirejs/require.js +2053 -0
  66. package/vendor/requirejs/require.min.js +33 -0
  67. package/doc/default-simple.dot +0 -19
  68. package/doc/default-simple.dot.png +0 -0
  69. package/react.js +0 -40
  70. package/test/ast.test.js +0 -95
  71. package/test/cb-task.test.js +0 -197
  72. package/test/core-deferred.test.js +0 -134
  73. package/test/core-promised.test.js +0 -132
  74. package/test/core-when.test.js +0 -84
  75. package/test/core.test.js +0 -593
  76. package/test/dsl.test.js +0 -330
  77. package/test/event-manager.test.js +0 -102
  78. package/test/exec-options.test.js +0 -33
  79. package/test/finalcb-task.test.js +0 -38
  80. package/test/input-parser.test.js +0 -66
  81. package/test/module-use.test.js +0 -134
  82. package/test/promise-auto-resolve.test.js +0 -52
  83. package/test/ret-task.test.js +0 -199
  84. package/test/task.test.js +0 -21
  85. package/test/validate-cb-task.test.js +0 -74
  86. package/test/validate-ret-task.test.js +0 -83
  87. package/test/validate.test.js +0 -295
  88. package/test/vcon.test.js +0 -173
package/lib/core.js CHANGED
@@ -1,139 +1,138 @@
1
1
  'use strict';
2
+ /*global define:true */
2
3
 
3
- var EventEmitter = require('events').EventEmitter;
4
+ if (typeof define !== 'function') {
5
+ var define = require('amdefine')(module);
6
+ }
4
7
 
5
- var error = require('./error.js');
6
- var validate = require('./validate.js');
7
- var tskutil = require('./task.js');
8
- var STATUS = require('./status.js');
9
- var VContext = require('./vcon.js');
10
- var EventManager = require('./event-manager.js');
11
- var inputParser = require('./input-parser.js');
12
- var idGenerator = require('./id.js');
13
- var sprintf = require('sprintf').sprintf;
8
+ define(['./eventemitter', './error', './validate', './task', './status',
9
+ './vcon', './event-manager', './input-parser', './id', './sprintf'],
10
+ function (EventEmitter, error, validate, taskUtil, STATUS,
11
+ VContext, EventManager, inputParser, idGenerator, sprintf) {
14
12
 
15
- var reactOptions = {
16
- stackTraceLimitMin: 30
17
- };
13
+ var reactOptions = {
14
+ stackTraceLimitMin: 30
15
+ };
18
16
 
19
- var reactEmitter = EventManager.global; // the top emitter
17
+ var reactEmitter = EventManager.global; // the top emitter
20
18
 
21
- /**
22
- merge global react options with parsed options
19
+ /**
20
+ merge global react options with parsed options
23
21
  */
24
- function mergeOptions(parsedOptions) {
25
- return Object.keys(reactOptions).reduce(function (accum, k) {
26
- if (!accum[k]) accum[k] = reactOptions[k];
27
- return accum;
28
- }, parsedOptions);
29
- }
22
+ function mergeOptions(parsedOptions) {
23
+ return Object.keys(reactOptions).reduce(function (accum, k) {
24
+ if (!accum[k]) accum[k] = reactOptions[k];
25
+ return accum;
26
+ }, parsedOptions);
27
+ }
30
28
 
31
- /**
32
- generate a flow name when one is not provided
29
+ /**
30
+ generate a flow name when one is not provided
33
31
  */
34
- function generateFlowName() {
35
- return sprintf('flow_%s', idGenerator.createUniqueId());
36
- }
32
+ function generateFlowName() {
33
+ return sprintf('flow_%s', idGenerator.createUniqueId());
34
+ }
37
35
 
38
- /**
39
- Creates react function which the AST can be manipulated and then
40
- is ready to be executed. Can be used directly or a DSL can wrap this
41
- to provide the AST.
36
+ /**
37
+ Creates react function which the AST can be manipulated and then
38
+ is ready to be executed. Can be used directly or a DSL can wrap this
39
+ to provide the AST.
42
40
 
43
- @example
44
- var react = require('react');
45
- var fn = react();
46
- var valid2 = fn.setAndValidateAST({
41
+ @example
42
+ var react = require('react');
43
+ var fn = react();
44
+ var valid2 = fn.setAndValidateAST({
47
45
  name: 'optionalName',
48
46
  inParams: ['a', 'b'],
49
47
  tasks: [
50
- { type: 'cb', f: multiply, a: ['a', 'b'], out: ['c'] }
48
+ { type: 'cb', f: multiply, a: ['a', 'b'], out: ['c'] }
51
49
  ],
52
- outTask: { a: ['c'] }
53
- });
54
- console.log(fn.ast); // view
55
- fn(123, 456, cb);
56
- */
57
- function reactFactory() {
58
- if (arguments.length) throw new Error('react() takes no args, check API');
59
-
60
- error.ensureStackTraceLimitSet(reactOptions.stackTraceLimitMin);
61
- var flowEmitter = EventManager.create();
62
- flowEmitter.parent = reactEmitter;
63
-
64
- var ast = {
65
- name: undefined,
66
- inParams: [],
67
- tasks: [],
68
- outTask: {},
69
- locals: {}
70
- };
50
+ outTask: { a: ['c'] }
51
+ });
52
+ console.log(fn.ast); // view
53
+ fn(123, 456, cb);
54
+ */
55
+ function reactFactory() {
56
+ if (arguments.length) throw new Error('react() takes no args, check API');
57
+
58
+ error.ensureStackTraceLimitSet(reactOptions.stackTraceLimitMin);
59
+ var flowEmitter = EventManager.create();
60
+ flowEmitter.parent = reactEmitter;
61
+
62
+ var ast = {
63
+ name: undefined,
64
+ inParams: [],
65
+ tasks: [],
66
+ outTask: {},
67
+ locals: {}
68
+ };
71
69
 
72
- function setAndValidateAST(newAST) { //set AST then validate, ret error[]
73
- Object.keys(newAST).forEach(function (k) { ast[k] = newAST[k]; }); // copy all properties
74
- var errors = validate(ast);
75
- if (!errors.length) {
76
- if (!ast.name) ast.name = generateFlowName();
77
- tskutil.nameTasks(ast.tasks); //run this so names can be checked in ast
70
+ function setAndValidateAST(newAST) { //set AST then validate, ret error[]
71
+ Object.keys(newAST).forEach(function (k) { ast[k] = newAST[k]; }); // copy all properties
72
+ var errors = validate(ast);
73
+ if (!errors.length) {
74
+ if (!ast.name) ast.name = generateFlowName();
75
+ taskUtil.nameTasks(ast.tasks); //run this so names can be checked in ast
76
+ }
77
+ if (Object.freeze) { //lets freeze the AST so plugin writers don't accidentally manip the ast
78
+ Object.keys(newAST).forEach(function (k) {
79
+ if (typeof(newAST[k]) === 'object') Object.freeze(newAST[k]);
80
+ });
81
+ Object.freeze(newAST);
82
+ }
83
+ flowEmitter.emit(EventManager.TYPES.AST_DEFINED, ast);
84
+ return errors;
78
85
  }
79
- if (Object.freeze) { //lets freeze the AST so plugin writers don't accidentally manip the ast
80
- Object.keys(newAST).forEach(function (k) {
81
- if (typeof(newAST[k]) === 'object') Object.freeze(newAST[k]);
82
- });
83
- Object.freeze(newAST);
84
- }
85
- flowEmitter.emit(EventManager.TYPES.AST_DEFINED, ast);
86
- return errors;
87
- }
88
86
 
89
- function exec(arg1, arg2, argN, cb) { // called to execute the flow
90
- /*jshint validthis: true */
91
- var args = Array.prototype.slice.call(arguments);
92
- var env = {
93
- execId: idGenerator.createUniqueId(),
94
- args: args,
95
- ast: ast,
96
- flowEmitter: flowEmitter
97
- };
98
- env.name = ast.name || env.execId;
99
- flowEmitter.emit(EventManager.TYPES.EXEC_FLOW_START, env); // hook
100
- var parsedInput = inputParser(args, ast);
101
- var vCon = VContext.create(parsedInput.args, ast.inParams, ast.locals, this); // create var ctx with in args & locals
102
-
103
- env.parsedInput = parsedInput;
104
- env.options = mergeOptions(parsedInput.options);
105
- env.vCon = vCon;
106
- env.taskDefs = ast.tasks.slice(); // create copy
107
- env.outTaskDef = Object.create(ast.outTask); // create copy
108
- reactEmitter.emit(EventManager.TYPES.EXEC_TASKS_PRECREATE, env); // hook
109
-
110
- var tasks = env.taskDefs.map(tskutil.create);
111
- var tasksByName = tskutil.nameTasks(tasks); // map names to working tasks
112
- var outTask = tskutil.createOutTask(env.outTaskDef, parsedInput.cb, tasks, vCon, env.options, env);
113
- var handleError = tskutil.createErrorHandler(vCon, outTask);
114
-
115
- function contExec() {
116
- if (!outTask.f) { return; } //stop execution, we already hit an error, f was cleared
117
- if (outTask.isReady()) return outTask.exec(); // all tasks done, exec cb, return
118
- tskutil.findReadyAndExec(vCon, tasks, tasksByName, handleError, contExec, env); //exec tasks that ready to run
87
+ function exec(arg1, arg2, argN, cb) { // called to execute the flow
88
+ /*jshint validthis: true */
89
+ var args = Array.prototype.slice.call(arguments);
90
+ var env = {
91
+ execId: idGenerator.createUniqueId(),
92
+ args: args,
93
+ ast: ast,
94
+ flowEmitter: flowEmitter
95
+ };
96
+ env.name = ast.name || env.execId;
97
+ flowEmitter.emit(EventManager.TYPES.EXEC_FLOW_START, env); // hook
98
+ var parsedInput = inputParser(args, ast);
99
+ var vCon = VContext.create(parsedInput.args, ast.inParams, ast.locals, this); // create var ctx with in args & locals
100
+
101
+ env.parsedInput = parsedInput;
102
+ env.options = mergeOptions(parsedInput.options);
103
+ env.vCon = vCon;
104
+ env.taskDefs = ast.tasks.slice(); // create copy
105
+ env.outTaskDef = Object.create(ast.outTask); // create copy
106
+ reactEmitter.emit(EventManager.TYPES.EXEC_TASKS_PRECREATE, env); // hook
107
+
108
+ var tasks = env.taskDefs.map(taskUtil.create);
109
+ var tasksByName = taskUtil.nameTasks(tasks); // map names to working tasks
110
+ var outTask = taskUtil.createOutTask(env.outTaskDef, parsedInput.cb, tasks, vCon, env.options, env);
111
+ var handleError = taskUtil.createErrorHandler(vCon, outTask);
112
+
113
+ function contExec() {
114
+ if (!outTask.f) { return; } //stop execution, we already hit an error, f was cleared
115
+ if (outTask.isReady()) return outTask.exec(); // all tasks done, exec cb, return
116
+ taskUtil.findReadyAndExec(vCon, tasks, tasksByName, handleError, contExec, env); //exec tasks that ready to run
117
+ }
118
+
119
+ tasks.forEach(function (t) {
120
+ t.id = idGenerator.createUniqueId();
121
+ t.env = env;
122
+ if (t.prepare) t.prepare(handleError, vCon, contExec, flowEmitter);
123
+ }); // create callbacks
124
+ contExec(); // start things off
125
+ return outTask.retValue; // could return promise
119
126
  }
120
127
 
121
- tasks.forEach(function (t) {
122
- t.id = idGenerator.createUniqueId();
123
- t.env = env;
124
- if (t.prepare) t.prepare(handleError, vCon, contExec, flowEmitter);
125
- }); // create callbacks
126
- contExec(); // start things off
127
- return outTask.retValue; // could return promise
128
+ var reactFn = exec; // make the exec() the function returned
129
+ reactFn.ast = ast; // put AST hanging off the fn so it can be inspected
130
+ reactFn.setAndValidateAST = setAndValidateAST; // call to set AST and then validate
131
+ reactFn.events = flowEmitter; // used to listen to execution events for this flow
132
+ return reactFn;
128
133
  }
129
134
 
130
- var reactFn = exec; // make the exec() the function returned
131
- reactFn.ast = ast; // put AST hanging off the fn so it can be inspected
132
- reactFn.setAndValidateAST = setAndValidateAST; // call to set AST and then validate
133
- reactFn.events = flowEmitter; // used to listen to execution events for this flow
134
- return reactFn;
135
- }
136
-
137
- module.exports = reactFactory; // module returns reactFactory to create a react fn
138
- module.exports.options = reactOptions; // global react options
139
- module.exports.events = reactEmitter; // global react emitter
135
+ reactFactory.options = reactOptions; // global react options
136
+ reactFactory.events = reactEmitter; // global react emitter
137
+ return reactFactory; // module returns reactFactory to create a react fn
138
+ });
package/lib/dsl.js CHANGED
@@ -1,133 +1,138 @@
1
1
  'use strict';
2
- /*jshint regexp: false */
2
+ /*global define:true */
3
3
 
4
- var sprintf = require('sprintf').sprintf;
5
- var core = require('./core.js');
6
- var parse = require('./parse.js');
7
- var tutil = require('./task.js');
4
+ if (typeof define !== 'function') {
5
+ var define = require('amdefine')(module);
6
+ }
8
7
 
9
- var MISSING_NAME = 'first flow parameter should be the flow name, but found in/out def: %s';
10
- var INOUT_PARAMS_NO_MATCH = 'params in wrong format, wanted "foo, bar, cb -> err, baz" - found: %s';
11
- var MISSING_ERR = 'callback specified, but first out param was not "err", use for clarity. Found in/out def: %s';
12
- var MISSING_CB = 'found err param, but cb/callback is not specified, is this cb-style async or sync function? Found in/out def: %s';
13
- var EXTRA_TASKARG = 'extra unmatched task arg: %s';
8
+ define(['./sprintf', './core', './parse', './task'],
9
+ function (sprintf, core, parse, taskUtil) {
10
+ /*jshint regexp: false */
14
11
 
15
- var INOUT_RE = /\->/; // used to detect missing name, in/out as first arg
16
- var CB_NAMES_RE = /^cb|callback$/i; //cb, Cb, CB, callback, Callback
17
- var ERR_NAMES_RE = /^err$/i; // err, ERR, Err, ...
12
+ var MISSING_NAME = 'first flow parameter should be the flow name, but found in/out def: %s';
13
+ var INOUT_PARAMS_NO_MATCH = 'params in wrong format, wanted "foo, bar, cb -> err, baz" - found: %s';
14
+ var MISSING_ERR = 'callback specified, but first out param was not "err", use for clarity. Found in/out def: %s';
15
+ var MISSING_CB = 'found err param, but cb/callback is not specified, is this cb-style async or sync function? Found in/out def: %s';
16
+ var EXTRA_TASKARG = 'extra unmatched task arg: %s';
18
17
 
19
- function filterOutTrailingCbParam(args) { // if has trailing cb | callback param, filter it out
20
- if (args.length && args[args.length - 1].match(CB_NAMES_RE)) args.pop();
21
- return args;
22
- }
18
+ var INOUT_RE = /\->/; // used to detect missing name, in/out as first arg
19
+ var CB_NAMES_RE = /^cb|callback$/i; //cb, Cb, CB, callback, Callback
20
+ var ERR_NAMES_RE = /^err$/i; // err, ERR, Err, ...
23
21
 
24
- function filterOutLeadingErrParam(args) { // if leading err param, filter it out
25
- if (args.length && args[0].match(ERR_NAMES_RE)) args.shift();
26
- return args;
27
- }
22
+ function filterOutTrailingCbParam(args) { // if has trailing cb | callback param, filter it out
23
+ if (args.length && args[args.length - 1].match(CB_NAMES_RE)) args.pop();
24
+ return args;
25
+ }
28
26
 
29
- var inOutDefParse = {
30
- splitStr: '->',
31
- fn: function (m, origStr) {
32
- var inParams = parse.splitTrimFilterArgs(m[0]);
33
- var lastParam = inParams[inParams.length - 1];
34
- var type = (lastParam && CB_NAMES_RE.test(lastParam)) ? 'cb' : 'ret';
35
- var outParams = parse.splitTrimFilterArgs(m[1]);
36
- var firstOutParam = outParams[0];
37
- if (type === 'cb' && (!firstOutParam || !ERR_NAMES_RE.test(firstOutParam))) {
38
- throw new Error(sprintf(MISSING_ERR, origStr)); // found cb, but no err param
39
- } else if (type === 'ret' && firstOutParam && ERR_NAMES_RE.test(firstOutParam)) {
40
- throw new Error(sprintf(MISSING_CB, origStr)); // found err but not cb param
41
- }
42
- return {
43
- type: type,
44
- inDef: filterOutTrailingCbParam(inParams),
45
- outDef: filterOutLeadingErrParam(outParams)
46
- };
27
+ function filterOutLeadingErrParam(args) { // if leading err param, filter it out
28
+ if (args.length && args[0].match(ERR_NAMES_RE)) args.shift();
29
+ return args;
47
30
  }
48
- };
49
31
 
50
- function parseInOutParams(str) {
51
- var objDef = parse.parseStr(str, [inOutDefParse], INOUT_PARAMS_NO_MATCH);
52
- objDef.inDef = filterOutTrailingCbParam(objDef.inDef);
53
- return objDef;
54
- }
32
+ var inOutDefParse = {
33
+ splitStr: '->',
34
+ fn: function (m, origStr) {
35
+ var inParams = parse.splitTrimFilterArgs(m[0]);
36
+ var lastParam = inParams[inParams.length - 1];
37
+ var type = (lastParam && CB_NAMES_RE.test(lastParam)) ? 'cb' : 'ret';
38
+ var outParams = parse.splitTrimFilterArgs(m[1]);
39
+ var firstOutParam = outParams[0];
40
+ if (type === 'cb' && (!firstOutParam || !ERR_NAMES_RE.test(firstOutParam))) {
41
+ throw new Error(sprintf(MISSING_ERR, origStr)); // found cb, but no err param
42
+ } else if (type === 'ret' && firstOutParam && ERR_NAMES_RE.test(firstOutParam)) {
43
+ throw new Error(sprintf(MISSING_CB, origStr)); // found err but not cb param
44
+ }
45
+ return {
46
+ type: type,
47
+ inDef: filterOutTrailingCbParam(inParams),
48
+ outDef: filterOutLeadingErrParam(outParams)
49
+ };
50
+ }
51
+ };
55
52
 
56
- function parseTasks(arr) {
57
- var tasks = [];
58
- var fn, obj, result;
59
- while (arr.length >= 2) {
60
- obj = {};
61
- fn = arr.shift();
62
- result = parseInOutParams(arr.shift());
63
- if (typeof(arr[0]) === 'object') obj = arr.shift(); // has options, use as obj
64
- obj.f = fn;
65
- obj.a = result.inDef;
66
- var type = result.type;
67
- obj.out = result.outDef;
68
- obj.type = type;
69
- tasks.push(obj);
53
+ function parseInOutParams(str) {
54
+ var objDef = parse.parseStr(str, [inOutDefParse], INOUT_PARAMS_NO_MATCH);
55
+ objDef.inDef = filterOutTrailingCbParam(objDef.inDef);
56
+ return objDef;
57
+ }
58
+
59
+ function parseTasks(arr) {
60
+ var tasks = [];
61
+ var fn, obj, result;
62
+ while (arr.length >= 2) {
63
+ obj = {};
64
+ fn = arr.shift();
65
+ result = parseInOutParams(arr.shift());
66
+ if (typeof(arr[0]) === 'object') obj = arr.shift(); // has options, use as obj
67
+ obj.f = fn;
68
+ obj.a = result.inDef;
69
+ var type = result.type;
70
+ obj.out = result.outDef;
71
+ obj.type = type;
72
+ tasks.push(obj);
73
+ }
74
+ if (arr.length) throw new Error(sprintf(EXTRA_TASKARG, arr[0]));
75
+ return tasks;
70
76
  }
71
- if (arr.length) throw new Error(sprintf(EXTRA_TASKARG, arr[0]));
72
- return tasks;
73
- }
74
77
 
75
- /**
76
- Parse the variable arguments into in/out params, options, tasks
78
+ /**
79
+ Parse the variable arguments into in/out params, options, tasks
77
80
  */
78
- function parseVargs(vargs) {
79
- var inOutParamStr = vargs.shift() || '';
80
- // if next arg is object, shift it off as options
81
- var options = (vargs.length && typeof(vargs[0]) === 'object') ? vargs.shift() : { };
82
- var taskDefArr = vargs; // rest are for the tasks
83
- var defObj = {
84
- inOutParamStr: inOutParamStr,
85
- taskDefArr: taskDefArr,
86
- options: options
87
- };
88
- return defObj;
89
- }
81
+ function parseVargs(vargs) {
82
+ var inOutParamStr = vargs.shift() || '';
83
+ // if next arg is object, shift it off as options
84
+ var options = (vargs.length && typeof(vargs[0]) === 'object') ? vargs.shift() : { };
85
+ var taskDefArr = vargs; // rest are for the tasks
86
+ var defObj = {
87
+ inOutParamStr: inOutParamStr,
88
+ taskDefArr: taskDefArr,
89
+ options: options
90
+ };
91
+ return defObj;
92
+ }
90
93
 
91
94
 
92
- function dslDefine(name, arg1, arg2, argN) {
93
- var reactFn = core();
94
- if (name && INOUT_RE.test(name)) throw new Error(sprintf(MISSING_NAME, name));
95
- var defObj = parseVargs(Array.prototype.slice.call(arguments, 1)); // name, already used
96
- var inOutDef = parseInOutParams(defObj.inOutParamStr);
97
- var ast = {
98
- name: name,
99
- inParams: inOutDef.inDef,
100
- tasks: parseTasks(defObj.taskDefArr),
101
- outTask: { a: inOutDef.outDef }
102
- };
103
- if (defObj.options) Object.keys(defObj.options).forEach(function (k) { ast[k] = defObj.options[k]; });
104
- var errors = reactFn.setAndValidateAST(ast);
105
- if (errors.length) {
106
- var errorStr = errors.join('\n');
107
- throw new Error(errorStr);
108
- }
109
- return reactFn;
110
- }
95
+ function dslDefine(name, arg1, arg2, argN) {
96
+ var reactFn = core();
97
+ if (name && INOUT_RE.test(name)) throw new Error(sprintf(MISSING_NAME, name));
98
+ var defObj = parseVargs(Array.prototype.slice.call(arguments, 1)); // name, already used
99
+ var inOutDef = parseInOutParams(defObj.inOutParamStr);
100
+ var ast = {
101
+ name: name,
102
+ inParams: inOutDef.inDef,
103
+ tasks: parseTasks(defObj.taskDefArr),
104
+ outTask: { a: inOutDef.outDef }
105
+ };
106
+ if (defObj.options) Object.keys(defObj.options).forEach(function (k) { ast[k] = defObj.options[k]; });
107
+ var errors = reactFn.setAndValidateAST(ast);
108
+ if (errors.length) {
109
+ var errorStr = errors.join('\n');
110
+ throw new Error(errorStr);
111
+ }
112
+ return reactFn;
113
+ }
111
114
 
112
- function selectFirst(name, arg1, arg2, argN) {
113
- var reactFn = core();
114
- var defObj = parseVargs(Array.prototype.slice.call(arguments, 1)); // name, already used
115
- var inOutDef = parseInOutParams(defObj.inOutParamStr);
116
- var tasks = tutil.serializeTasks(parseTasks(defObj.taskDefArr));
117
- var ast = {
118
- name: name,
119
- inParams: inOutDef.inDef,
120
- tasks: tasks,
121
- outTask: { type: 'finalcbFirst', a: inOutDef.outDef },
122
- };
123
- if (defObj.options) Object.keys(defObj.options).forEach(function (k) { ast[k] = defObj.options[k]; });
124
- var errors = reactFn.setAndValidateAST(ast);
125
- if (errors.length) {
126
- var errorStr = errors.join('\n');
127
- throw new Error(errorStr);
115
+ function selectFirst(name, arg1, arg2, argN) {
116
+ var reactFn = core();
117
+ var defObj = parseVargs(Array.prototype.slice.call(arguments, 1)); // name, already used
118
+ var inOutDef = parseInOutParams(defObj.inOutParamStr);
119
+ var tasks = taskUtil.serializeTasks(parseTasks(defObj.taskDefArr));
120
+ var ast = {
121
+ name: name,
122
+ inParams: inOutDef.inDef,
123
+ tasks: tasks,
124
+ outTask: { type: 'finalcbFirst', a: inOutDef.outDef },
125
+ };
126
+ if (defObj.options) Object.keys(defObj.options).forEach(function (k) { ast[k] = defObj.options[k]; });
127
+ var errors = reactFn.setAndValidateAST(ast);
128
+ if (errors.length) {
129
+ var errorStr = errors.join('\n');
130
+ throw new Error(errorStr);
131
+ }
132
+ return reactFn;
128
133
  }
129
- return reactFn;
130
- }
131
134
 
132
- module.exports = dslDefine;
133
- module.exports.selectFirst = selectFirst;
135
+ dslDefine.selectFirst = selectFirst;
136
+ return dslDefine;
137
+
138
+ });