react 0.7.1 → 0.8.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (203) hide show
  1. package/README.md +15 -228
  2. package/ReactJSErrors.js +40 -0
  3. package/addons.js +4 -0
  4. package/lib/$.js +46 -0
  5. package/lib/CSSCore.js +114 -0
  6. package/lib/CSSProperty.js +90 -0
  7. package/lib/CSSPropertyOperations.js +97 -0
  8. package/lib/CallbackRegistry.js +91 -0
  9. package/lib/ChangeEventPlugin.js +365 -0
  10. package/lib/CompositionEventPlugin.js +212 -0
  11. package/lib/DOMChildrenOperations.js +135 -0
  12. package/lib/DOMProperty.js +266 -0
  13. package/lib/DOMPropertyOperations.js +168 -0
  14. package/lib/Danger.js +186 -0
  15. package/lib/DefaultDOMPropertyConfig.js +187 -0
  16. package/lib/DefaultEventPluginOrder.js +44 -0
  17. package/lib/EnterLeaveEventPlugin.js +112 -0
  18. package/lib/EventConstants.js +73 -0
  19. package/lib/EventListener.js +61 -0
  20. package/lib/EventPluginHub.js +190 -0
  21. package/lib/EventPluginRegistry.js +237 -0
  22. package/lib/EventPluginUtils.js +185 -0
  23. package/lib/EventPropagators.js +179 -0
  24. package/lib/ExecutionEnvironment.js +41 -0
  25. package/lib/LinkedStateMixin.js +46 -0
  26. package/lib/LinkedValueMixin.js +68 -0
  27. package/lib/MobileSafariClickEventPlugin.js +63 -0
  28. package/lib/PooledClass.js +113 -0
  29. package/lib/React.js +71 -0
  30. package/lib/ReactChildren.js +132 -0
  31. package/lib/ReactComponent.js +515 -0
  32. package/lib/ReactComponentBrowserEnvironment.js +140 -0
  33. package/lib/ReactComponentEnvironment.js +24 -0
  34. package/lib/ReactCompositeComponent.js +1020 -0
  35. package/lib/ReactCurrentOwner.js +39 -0
  36. package/lib/ReactDOM.js +194 -0
  37. package/lib/ReactDOMButton.js +64 -0
  38. package/lib/ReactDOMComponent.js +374 -0
  39. package/lib/ReactDOMForm.js +52 -0
  40. package/lib/ReactDOMIDOperations.js +173 -0
  41. package/lib/ReactDOMInput.js +169 -0
  42. package/lib/ReactDOMOption.js +50 -0
  43. package/lib/ReactDOMSelect.js +160 -0
  44. package/lib/ReactDOMSelection.js +189 -0
  45. package/lib/ReactDOMTextarea.js +136 -0
  46. package/lib/ReactDefaultBatchingStrategy.js +75 -0
  47. package/lib/ReactDefaultInjection.js +91 -0
  48. package/lib/ReactDefaultPerf.js +407 -0
  49. package/lib/ReactErrorUtils.js +46 -0
  50. package/lib/ReactEventEmitter.js +341 -0
  51. package/lib/ReactEventEmitterMixin.js +89 -0
  52. package/lib/ReactEventTopLevelCallback.js +89 -0
  53. package/lib/ReactInputSelection.js +140 -0
  54. package/lib/ReactInstanceHandles.js +322 -0
  55. package/lib/ReactLink.js +54 -0
  56. package/lib/ReactMarkupChecksum.js +53 -0
  57. package/lib/ReactMount.js +617 -0
  58. package/lib/ReactMountReady.js +95 -0
  59. package/lib/ReactMultiChild.js +441 -0
  60. package/lib/ReactMultiChildUpdateTypes.js +36 -0
  61. package/lib/ReactOwner.js +146 -0
  62. package/lib/ReactPerf.js +88 -0
  63. package/lib/ReactPropTransferer.js +128 -0
  64. package/lib/ReactPropTypes.js +158 -0
  65. package/lib/ReactReconcileTransaction.js +161 -0
  66. package/lib/ReactServerRendering.js +62 -0
  67. package/lib/ReactStateSetters.js +111 -0
  68. package/lib/ReactTextComponent.js +94 -0
  69. package/lib/ReactTransitionEvents.js +97 -0
  70. package/lib/ReactTransitionGroup.js +112 -0
  71. package/lib/ReactTransitionKeySet.js +111 -0
  72. package/lib/ReactTransitionableChild.js +152 -0
  73. package/lib/ReactUpdates.js +145 -0
  74. package/lib/ReactWithAddons.js +41 -0
  75. package/lib/SelectEventPlugin.js +217 -0
  76. package/lib/SimpleEventPlugin.js +365 -0
  77. package/lib/SyntheticClipboardEvent.js +45 -0
  78. package/lib/SyntheticCompositionEvent.js +51 -0
  79. package/lib/SyntheticEvent.js +163 -0
  80. package/lib/SyntheticFocusEvent.js +44 -0
  81. package/lib/SyntheticKeyboardEvent.js +56 -0
  82. package/lib/SyntheticMouseEvent.js +85 -0
  83. package/lib/SyntheticTouchEvent.js +50 -0
  84. package/lib/SyntheticUIEvent.js +45 -0
  85. package/lib/SyntheticWheelEvent.js +63 -0
  86. package/lib/Transaction.js +251 -0
  87. package/lib/ViewportMetrics.js +37 -0
  88. package/lib/accumulate.js +54 -0
  89. package/lib/adler32.js +39 -0
  90. package/lib/containsNode.js +49 -0
  91. package/lib/copyProperties.js +54 -0
  92. package/lib/createArrayFrom.js +94 -0
  93. package/lib/createNodesFromMarkup.js +93 -0
  94. package/lib/createObjectFrom.js +61 -0
  95. package/lib/cx.js +44 -0
  96. package/lib/dangerousStyleValue.js +57 -0
  97. package/lib/emptyFunction.js +43 -0
  98. package/lib/escapeTextForBrowser.js +47 -0
  99. package/lib/ex.js +49 -0
  100. package/lib/filterAttributes.js +45 -0
  101. package/lib/flattenChildren.js +54 -0
  102. package/lib/forEachAccumulated.js +36 -0
  103. package/lib/ge.js +76 -0
  104. package/lib/getActiveElement.js +33 -0
  105. package/lib/getEventTarget.js +36 -0
  106. package/lib/getMarkupWrap.js +108 -0
  107. package/lib/getNodeForCharacterOffset.js +80 -0
  108. package/lib/getReactRootElementInContainer.js +40 -0
  109. package/lib/getTextContentAccessor.js +40 -0
  110. package/lib/getUnboundedScrollPosition.js +45 -0
  111. package/lib/hyphenate.js +35 -0
  112. package/lib/invariant.js +54 -0
  113. package/lib/isEventSupported.js +74 -0
  114. package/lib/isNode.js +33 -0
  115. package/lib/isTextInputElement.js +49 -0
  116. package/lib/isTextNode.js +30 -0
  117. package/lib/joinClasses.js +44 -0
  118. package/lib/keyMirror.js +58 -0
  119. package/lib/keyOf.js +41 -0
  120. package/lib/memoizeStringOnly.js +39 -0
  121. package/lib/merge.js +37 -0
  122. package/lib/mergeHelpers.js +137 -0
  123. package/lib/mergeInto.js +45 -0
  124. package/lib/mixInto.js +34 -0
  125. package/lib/mutateHTMLNodeWithMarkup.js +100 -0
  126. package/lib/objMap.js +47 -0
  127. package/lib/objMapKeyVal.js +47 -0
  128. package/lib/performanceNow.js +42 -0
  129. package/lib/shallowEqual.js +49 -0
  130. package/lib/traverseAllChildren.js +127 -0
  131. package/package.json +33 -31
  132. package/react.js +4 -0
  133. package/.npmignore +0 -7
  134. package/.travis.yml +0 -7
  135. package/Jakefile.js +0 -39
  136. package/LICENSE +0 -19
  137. package/browser-test/dist.html +0 -90
  138. package/browser-test/index.html +0 -86
  139. package/browser-test/min.html +0 -90
  140. package/dist/react.js +0 -3141
  141. package/dist/react.min.js +0 -22
  142. package/doc/advanced.md +0 -175
  143. package/doc/color-def.graffle +0 -938
  144. package/doc/color-def.png +0 -0
  145. package/doc/simple.dot +0 -25
  146. package/doc/simple.png +0 -0
  147. package/examples/longer-example.js +0 -41
  148. package/examples/simple.js +0 -45
  149. package/examples/using-ast-directly.js +0 -30
  150. package/examples/using-events1.js +0 -79
  151. package/examples/using-log-events.js +0 -43
  152. package/lib/base-task.js +0 -120
  153. package/lib/cb-task.js +0 -84
  154. package/lib/core.js +0 -138
  155. package/lib/dsl.js +0 -138
  156. package/lib/error.js +0 -55
  157. package/lib/event-collector.js +0 -81
  158. package/lib/event-manager.js +0 -89
  159. package/lib/eventemitter.js +0 -20
  160. package/lib/finalcb-first-task.js +0 -68
  161. package/lib/finalcb-task.js +0 -65
  162. package/lib/id.js +0 -22
  163. package/lib/input-parser.js +0 -56
  164. package/lib/log-events.js +0 -101
  165. package/lib/parse.js +0 -41
  166. package/lib/promise-resolve.js +0 -50
  167. package/lib/promise-task.js +0 -93
  168. package/lib/react.js +0 -59
  169. package/lib/ret-task.js +0 -71
  170. package/lib/sprintf.js +0 -18
  171. package/lib/status.js +0 -14
  172. package/lib/task.js +0 -251
  173. package/lib/track-tasks.js +0 -74
  174. package/lib/validate.js +0 -159
  175. package/lib/vcon.js +0 -113
  176. package/lib/when-task.js +0 -84
  177. package/src/dist.build.requirejs +0 -20
  178. package/test/ast.mocha.js +0 -136
  179. package/test/cb-task.mocha.js +0 -220
  180. package/test/core-deferred.mocha.js +0 -143
  181. package/test/core-when.mocha.js +0 -96
  182. package/test/core.mocha.js +0 -589
  183. package/test/dsl.mocha.js +0 -352
  184. package/test/event-manager.mocha.js +0 -119
  185. package/test/exec-options.mocha.js +0 -48
  186. package/test/finalcb-task.mocha.js +0 -58
  187. package/test/input-parser.mocha.js +0 -86
  188. package/test/log-events.mocha.js +0 -88
  189. package/test/mocha.opts +0 -2
  190. package/test/module-use.mocha.js +0 -164
  191. package/test/promise-auto-resolve.mocha.js +0 -68
  192. package/test/ret-task.mocha.js +0 -220
  193. package/test/task.mocha.js +0 -42
  194. package/test/validate-cb-task.mocha.js +0 -100
  195. package/test/validate-ret-task.mocha.js +0 -110
  196. package/test/validate.mocha.js +0 -324
  197. package/test/vcon.mocha.js +0 -193
  198. package/vendor/chai/chai.js +0 -4251
  199. package/vendor/jquery/jquery-1.7.1.js +0 -9266
  200. package/vendor/jquery/jquery-1.7.1.min.js +0 -4
  201. package/vendor/node/util.js +0 -531
  202. package/vendor/requirejs/require.js +0 -2045
  203. package/vendor/requirejs/require.min.js +0 -36
package/lib/react.js DELETED
@@ -1,59 +0,0 @@
1
- /*global define:true */
2
-
3
- if (typeof define !== 'function') {
4
- var define = require('amdefine')(module);
5
- }
6
-
7
- define(['./core', './dsl', './track-tasks', './log-events', './promise-resolve', './event-collector'],
8
- function (core, dsl, trackTasksFn, logEventsMod, resolvePromisesFn, eventCollectorFactory) {
9
- 'use strict';
10
-
11
- var react = dsl; // core + default dsl
12
-
13
- /**
14
- Enable detection of promises and resolution
15
- */
16
- function resolvePromises() {
17
- resolvePromisesFn(react);
18
- }
19
-
20
- /**
21
- Enable tracking of tasks and flow execution, emitting events and
22
- tracking start, end, elapsed time
23
- */
24
- function trackTasks() {
25
- trackTasksFn(react);
26
- }
27
-
28
- /**
29
- If called, load the built-in plugin for log events and invoke
30
-
31
- @param flowFn [function] if not provided uses global react
32
- @param eventWildcard [string] pattern to log events for
33
- */
34
- function logEvents(flowFn, eventWildcard) {
35
- if (typeof(flowFn) !== 'function') { // only wildcard provided
36
- eventWildcard = flowFn;
37
- flowFn = undefined;
38
- }
39
- if (!flowFn) flowFn = react; // use global
40
- trackTasks();
41
- return logEventsMod.logEvents(flowFn, eventWildcard);
42
- }
43
-
44
- /**
45
- Instantiate an event collector
46
- */
47
- function createEventCollector() {
48
- return eventCollectorFactory(react);
49
- }
50
-
51
- react.options = core.options; // global react options
52
- react.events = core.events; // global react event emitter
53
- react.logEvents = logEvents; // enable event logging
54
- react.resolvePromises = resolvePromises; // enable promise resolution
55
- react.trackTasks = trackTasks; // enable tracking of tasks
56
- react.createEventCollector = createEventCollector; // create instance of EventCollector
57
- return react;
58
-
59
- });
package/lib/ret-task.js DELETED
@@ -1,71 +0,0 @@
1
- /*global define:true */
2
-
3
- if (typeof define !== 'function') {
4
- var define = require('amdefine')(module);
5
- }
6
-
7
- define(['util', './sprintf', './base-task'], function (util, sprintf, BaseTask) {
8
- 'use strict';
9
-
10
- function format_error(errmsg, obj) {
11
- return sprintf('%s - %s', errmsg, util.inspect(obj));
12
- }
13
-
14
- var REQ = 'retTask requires f, a, out';
15
- var FN_REQ = 'retTask requires f to be a function or string';
16
- var A_REQ = 'retTask requires a to be an array of string param names';
17
- var RET_REQ = 'retTask requires out to be an array with single string param name or []';
18
-
19
- function RetTask(taskDef) {
20
- var self = this;
21
- Object.keys(taskDef).forEach(function (k) { self[k] = taskDef[k]; });
22
- }
23
-
24
- RetTask.prototype = new BaseTask();
25
- RetTask.prototype.constructor = RetTask;
26
-
27
- RetTask.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
-
41
- if (! (Array.isArray(taskDef.out) &&
42
- (taskDef.out.length === 0 ||
43
- (taskDef.out.length === 1 && typeof(taskDef.out[0] === 'string'))))) {
44
- errors.push(format_error(RET_REQ, taskDef));
45
- }
46
- }
47
- return errors;
48
- };
49
-
50
- RetTask.prototype.exec = function exec(vCon, handleError, contExec) {
51
- try {
52
- var args = this.a.map(function (k) { return vCon.getVar(k); }); //get args from vCon
53
- this.start(args); //note the start time, args
54
- var func = this.f;
55
- var bindObj = vCon.getVar('this'); //global space or the original this
56
- if (this.isMethodCall()) { //if method call then reset func and bindObj
57
- func = vCon.getVar(this.f);
58
- bindObj = this.getMethodObj(vCon);
59
- } else if (typeof(func) === 'string') {
60
- func = vCon.getVar(func); // we want the actual fn from this string
61
- }
62
- var results = [func.apply(bindObj, args)];
63
- vCon.saveResults(this.out, results); // save retval, takes arrays
64
- this.complete(results);
65
- contExec(); // continue since no callback to run this
66
- } catch (err) { handleError(this, err); } // catch and handle the task error, calling final cb
67
- };
68
-
69
- return RetTask;
70
-
71
- });
package/lib/sprintf.js DELETED
@@ -1,18 +0,0 @@
1
- /*global define:true sprint:true */
2
-
3
- if (typeof define !== 'function') {
4
- var define = require('amdefine')(module);
5
- }
6
-
7
- define(['util'], function (util) {
8
- 'use strict';
9
-
10
- /**
11
- Abstract the details of getting a sprintf function.
12
- Currently using the simple format capabilities of node's util.format
13
- */
14
-
15
- var sprintf = util.format;
16
- return sprintf;
17
-
18
- });
package/lib/status.js DELETED
@@ -1,14 +0,0 @@
1
- /*global define:true */
2
-
3
- if (typeof define !== 'function') {
4
- var define = require('amdefine')(module);
5
- }
6
-
7
- define([], function () {
8
- 'use strict';
9
-
10
- var STATUS = { READY: 'ready', RUNNING: 'running', ERRORED: 'errored', COMPLETE: 'complete' };
11
-
12
- return STATUS;
13
-
14
- });
package/lib/task.js DELETED
@@ -1,251 +0,0 @@
1
- /*global define:true */
2
-
3
- if (typeof define !== 'function') {
4
- var define = require('amdefine')(module);
5
- }
6
-
7
- define(['util', './sprintf', 'ensure-array', './cb-task', './promise-task',
8
- './ret-task', './when-task', './finalcb-task', './finalcb-first-task',
9
- './status', './error', './vcon', './event-manager'],
10
- function (util, sprintf, array, CbTask, PromiseTask,
11
- RetTask, WhenTask, FinalCbTask, FinalCbFirstSuccTask,
12
- STATUS, error, VContext, EventManager) {
13
- 'use strict';
14
-
15
- var TASK_TYPES = {
16
- cb: CbTask,
17
- ret: RetTask,
18
- promise: PromiseTask,
19
- when: WhenTask
20
- };
21
-
22
- var DEFAULT_TASK_NAME = 'task_%s'; // for unnamed tasks use task_idx, like task_0
23
-
24
- function taskTypeKeys() { return Object.keys(TASK_TYPES); }
25
-
26
- var OUT_TASK_TYPES = {
27
- finalcb: FinalCbTask, //first task is the default if no type specified in taskDef
28
- finalcbFirst: FinalCbFirstSuccTask
29
- };
30
- function outTaskTypeKeys() { return Object.keys(OUT_TASK_TYPES); }
31
-
32
- var LOCAL_FN_MISSING = 'function: %s not found in locals or input params - task[%s]';
33
- var TASKDEF_IS_OBJECT = 'task must be an object';
34
- var NO_TASKS_RUNNING_WONT_COMPLETE = 'no tasks running, flow will not complete, remaining tasks: %s';
35
- var TASK_TYPE_SHOULD_MATCH = 'task.type should match one of ' +
36
- Object.keys(TASK_TYPES).join(', ');
37
-
38
- function format_error(errmsg, obj) {
39
- return sprintf('%s - %s', errmsg, util.inspect(obj));
40
- }
41
-
42
- /**
43
- guess the missing types from params.
44
- Augments in place but also returns taskDef.
45
- If not specified then is 'cb'
46
- */
47
- function setMissingType(taskDef) {
48
- if (taskDef.type) return taskDef; //already set, return
49
- taskDef.type = 'cb';
50
- return taskDef;
51
- }
52
-
53
- function setMissingOutTaskType(taskDef) {
54
- if (!taskDef.type) taskDef.type = Object.keys(OUT_TASK_TYPES)[0]; //use first outTask type as default
55
- }
56
-
57
- function ensureAfterArrStrings(taskDef) { // convert any fn to str, and make sure is array
58
- if (!taskDef.after) return;
59
- var afterArr = array(taskDef.after); // ensure is array, null becomes []
60
- afterArr = afterArr.map(function (a) { return (typeof(a) === 'function') ? a.name : a; });
61
- taskDef.after = afterArr;
62
- }
63
-
64
- /**
65
- @returns array of errors for taskDef, could be empty
66
- */
67
- function validate(taskDef) {
68
- if (!taskDef || typeof(taskDef) !== 'object') {
69
- return [format_error(TASKDEF_IS_OBJECT, taskDef)];
70
- }
71
- setMissingType(taskDef);
72
- ensureAfterArrStrings(taskDef);
73
- var errors = [];
74
- errors = errors.concat(validateTaskType(taskDef));
75
- errors = errors.concat(validateTask(taskDef));
76
- return errors;
77
- }
78
-
79
- function validateTaskType(taskDef) {
80
- var errors = [];
81
- if (!Object.keys(TASK_TYPES).some(
82
- function (type) { return (taskDef.type === type); })) {
83
- errors.push(format_error(TASK_TYPE_SHOULD_MATCH, taskDef));
84
- }
85
- return errors;
86
- }
87
-
88
- function validateTask(taskDef) {
89
- var errors = [];
90
- var taskCons = TASK_TYPES[taskDef.type];
91
- if (taskCons) {
92
- errors = errors.concat(taskCons.validate(taskDef));
93
- }
94
- return errors;
95
- }
96
-
97
- function validateOutTask(taskDef) {
98
- var errors = [];
99
- setMissingOutTaskType(taskDef);
100
- var taskCons = OUT_TASK_TYPES[taskDef.type];
101
- errors = errors.concat(taskCons.validate(taskDef));
102
- return errors;
103
- }
104
-
105
-
106
- function validateLocalFunctions(inParams, taskDefs, locals) {
107
- var errors = [];
108
- function foo() { } //used to mock args as fns for validation check
109
- var mock_args = inParams.map(function (p) { return foo; }); //mock args with fns
110
- var vCon = VContext.create(mock_args, inParams, locals);
111
- var tasks = taskDefs.map(create);
112
- var tasksWFunctions = tasks.filter(function (t) { return (t.type !== 'when'); }); // non-when tasks need f
113
- tasksWFunctions.forEach(function (t, idx) {
114
- if (!t.functionExists(vCon)) { // error if function doesnt exist AND
115
- if (!t.isMethodCall()) errors.push(sprintf(LOCAL_FN_MISSING, t.f, idx)); // not method OR
116
- else {
117
- var obj = t.getMethodObj(vCon);
118
- if (obj && obj !== foo) { // (has parent but not our mock)
119
- errors.push(sprintf(LOCAL_FN_MISSING, t.f, idx));
120
- }
121
- }
122
- }
123
- });
124
- return errors;
125
- }
126
-
127
- function fName(fn) {
128
- if (typeof(fn) === 'function') {
129
- return fn.name;
130
- }
131
- return (fn) ? fn : '';
132
- }
133
-
134
- /**
135
- Name tasks that are not already named. Prenamed task uniquness validation
136
- will be done in validate.
137
-
138
- This modifies the tasks with the new names.
139
-
140
- @returns map of names to tasks
141
- */
142
- function nameTasks(tasks) { //name tasks that are not already named, validation done elsewhere, ret map
143
- var namesMap = tasks.reduce(function (map, t) {
144
- if (t.name) { map[t.name] = t; }
145
- return map;
146
- }, {});
147
- tasks.forEach(function (t, idx) {
148
- if (!t.name) { //not already named
149
- var name = fName(t.f);
150
- if (!name) name = sprintf(DEFAULT_TASK_NAME, idx);
151
- if (!name || namesMap[name]) {
152
- name = sprintf('%s_%s', name, idx); //if empty or already used, postfix with _idx
153
- }
154
- t.name = name;
155
- namesMap[name] = t;
156
- }
157
- });
158
- return namesMap;
159
- }
160
-
161
- function create(taskDef) {
162
- var TaskConstructor = TASK_TYPES[taskDef.type];
163
- return new TaskConstructor(taskDef);
164
- }
165
-
166
- function createOutTask(taskDef, cbFunc, tasks, vCon, execOptions, env) {
167
- setMissingOutTaskType(taskDef);
168
- var outTaskOptions = {
169
- taskDef: taskDef,
170
- cbFunc: cbFunc,
171
- tasks: tasks,
172
- vCon: vCon,
173
- execOptions: execOptions,
174
- env: env,
175
- TaskConstructor: OUT_TASK_TYPES[taskDef.type]
176
- };
177
- EventManager.global.emit(EventManager.TYPES.EXEC_OUTTASK_CREATE, outTaskOptions); // hook
178
- var TaskConstructor = outTaskOptions.TaskConstructor; // hook could have changed
179
- return new TaskConstructor(outTaskOptions);
180
- }
181
-
182
- function createErrorHandler(vCon, outTask) {
183
- return function handleError(task, err) {
184
- task.status = STATUS.ERRORED;
185
- task.error = err;
186
- outTask.env.currentTask = task;
187
- outTask.env.flowEmitter.emit(EventManager.TYPES.EXEC_TASK_ERRORED, task);
188
- var errWithMeta = error.augmentError(err, {task: task, vcon: vCon});
189
- outTask.exec(errWithMeta); //call the final callback with the first error hit
190
- };
191
- }
192
-
193
- function findTasksReady(vCon, tasks, tasksByName) {
194
- return tasks.filter(function (t) { return t.isReady(vCon, tasksByName); });
195
- }
196
-
197
- function execTasks(tasksReady, vCon, handleError, contExec) {
198
- tasksReady.forEach(function (t) { t.status = STATUS.READY; }); //set ready first, no double exec
199
- tasksReady.forEach(function (t) { t.exec(vCon, handleError, contExec); });
200
- }
201
-
202
- /**
203
- this will be called if there are no tasks found to run,
204
- and it will check if there are still tasks running or ready
205
- (which means they will be running shortly), in which
206
- case everything is fine. If no tasks are running then
207
- call handleError since this will never complete.
208
- */
209
- function checkIfTasksRunning(vCon, tasks, handleError, env) {
210
- var tasksRunning = tasks.filter(function (t) {
211
- return (t.status === STATUS.RUNNING || t.status === STATUS.READY);
212
- });
213
- if (!tasksRunning.length) {
214
- var remainingTasks = tasks.filter(function (t) { return (!t.status); });
215
- var remainingTNames = remainingTasks.map(function (t) { return t.name; });
216
- var errMsg = sprintf(NO_TASKS_RUNNING_WONT_COMPLETE, remainingTNames.join(', '));
217
- var emptyTask = { env: env };
218
- handleError(emptyTask, new Error(errMsg));
219
- }
220
- }
221
-
222
- function findReadyAndExec(vCon, tasks, tasksByName, handleError, contExec, env) {
223
- var tasksReady = findTasksReady(vCon, tasks, tasksByName);
224
- if (!tasksReady.length) checkIfTasksRunning(vCon, tasks, handleError, env); // no tasks to run, check if ok
225
- execTasks(tasksReady, vCon, handleError, contExec);
226
- }
227
-
228
- function serializeTasks(tasks) { // conveniently set after for each task idx > 0
229
- nameTasks(tasks);
230
- tasks.forEach(function (t, idx, arr) { if (idx !== 0) t.after = [arr[idx - 1].name]; });
231
- return tasks;
232
- }
233
-
234
- return {
235
- serializeTasks: serializeTasks,
236
- TASK_TYPES: TASK_TYPES,
237
- taskTypeKeys: taskTypeKeys,
238
- OUT_TASK_TYPES: OUT_TASK_TYPES,
239
- outTaskTypeKeys: outTaskTypeKeys,
240
- setMissingType: setMissingType,
241
- validate: validate,
242
- validateOutTask: validateOutTask,
243
- validateLocalFunctions: validateLocalFunctions,
244
- nameTasks: nameTasks,
245
- create: create,
246
- createOutTask: createOutTask,
247
- createErrorHandler: createErrorHandler,
248
- findReadyAndExec: findReadyAndExec
249
- };
250
-
251
- });
@@ -1,74 +0,0 @@
1
- /*global define:true */
2
-
3
- if (typeof define !== 'function') {
4
- var define = require('amdefine')(module);
5
- }
6
-
7
- define([], function () {
8
- 'use strict';
9
-
10
- /**
11
- Track the tasks, start, complete, args, results, elapsed time
12
- Emits events that can be monitored
13
-
14
- - track start and complete
15
- - record args each task was called with
16
- - record results at completion
17
- - record start, end, and calc elapsed time
18
- - emits flow.begin with flowEnv
19
- - emits task.begin with task
20
- - emits task.complete with task
21
- - emits flow complete with flowEnv
22
- - emits flow errored with flowEnv
23
-
24
- @example
25
- var react = require('react');
26
- react.trackTasks(); // enable task and flow tracking
27
- */
28
-
29
-
30
- var trackingTasks = false;
31
-
32
- function trackTasks(react) {
33
- if (trackingTasks) return; // already tracking
34
- trackingTasks = true;
35
-
36
- react.events.on(react.events.TYPES.EXEC_FLOW_START, function (env) {
37
- env.startTime = Date.now();
38
- env.flowEmitter.emit(react.events.TYPES.FLOW_BEGIN, env); //fire public ev
39
- });
40
-
41
- react.events.on(react.events.TYPES.EXEC_TASK_START, function (task) {
42
- task.startTime = Date.now();
43
- task.env.flowEmitter.emit(react.events.TYPES.TASK_BEGIN, task); //fire public ev
44
- });
45
-
46
- react.events.on(react.events.TYPES.EXEC_TASK_COMPLETE, function (task) {
47
- task.endTime = Date.now();
48
- task.elapsedTime = task.endTime - task.startTime;
49
- task.env.flowEmitter.emit(react.events.TYPES.TASK_COMPLETE, task); // fire public ev
50
- });
51
-
52
- react.events.on(react.events.TYPES.EXEC_TASK_ERRORED, function (task) {
53
- task.endTime = Date.now();
54
- task.elapsedTime = task.endTime - task.startTime;
55
- task.env.flowEmitter.emit(react.events.TYPES.TASK_ERRORED, task); // fire public ev
56
- });
57
-
58
- react.events.on(react.events.TYPES.EXEC_FLOW_COMPLETE, function (env) {
59
- env.endTime = Date.now();
60
- env.elapsedTime = env.endTime - env.startTime;
61
- env.flowEmitter.emit(react.events.TYPES.FLOW_COMPLETE, env); //fire public ev
62
- });
63
-
64
- react.events.on(react.events.TYPES.EXEC_FLOW_ERRORED, function (env) {
65
- env.endTime = Date.now();
66
- env.elapsedTime = env.endTime - env.startTime;
67
- env.flowEmitter.emit(react.events.TYPES.FLOW_ERRORED, env); //fire public ev
68
- });
69
-
70
- }
71
-
72
- return trackTasks;
73
-
74
- });