react 0.6.3 → 0.9.0-rc1
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/README.md +10 -222
- package/addons.js +1 -0
- package/lib/AutoFocusMixin.js +30 -0
- package/lib/CSSCore.js +115 -0
- package/lib/CSSProperty.js +121 -0
- package/lib/CSSPropertyOperations.js +97 -0
- package/lib/ChangeEventPlugin.js +387 -0
- package/lib/ClientReactRootIndex.js +30 -0
- package/lib/CompositionEventPlugin.js +260 -0
- package/lib/DOMChildrenOperations.js +165 -0
- package/lib/DOMProperty.js +268 -0
- package/lib/DOMPropertyOperations.js +181 -0
- package/lib/Danger.js +187 -0
- package/lib/DefaultDOMPropertyConfig.js +197 -0
- package/lib/DefaultEventPluginOrder.js +44 -0
- package/lib/EnterLeaveEventPlugin.js +145 -0
- package/lib/EventConstants.js +76 -0
- package/lib/EventListener.js +69 -0
- package/lib/EventPluginHub.js +291 -0
- package/lib/EventPluginRegistry.js +260 -0
- package/lib/EventPluginUtils.js +214 -0
- package/lib/EventPropagators.js +143 -0
- package/lib/ExecutionEnvironment.js +44 -0
- package/lib/LinkedStateMixin.js +46 -0
- package/lib/LinkedValueUtils.js +161 -0
- package/lib/MobileSafariClickEventPlugin.js +63 -0
- package/lib/PooledClass.js +119 -0
- package/lib/React.js +95 -0
- package/lib/ReactCSSTransitionGroup.js +65 -0
- package/lib/ReactCSSTransitionGroupChild.js +138 -0
- package/lib/ReactChildren.js +132 -0
- package/lib/ReactComponent.js +550 -0
- package/lib/ReactComponentBrowserEnvironment.js +158 -0
- package/lib/ReactComponentEnvironment.js +26 -0
- package/lib/ReactCompositeComponent.js +1455 -0
- package/lib/ReactContext.js +67 -0
- package/lib/ReactCurrentOwner.js +39 -0
- package/lib/ReactDOM.js +207 -0
- package/lib/ReactDOMButton.js +68 -0
- package/lib/ReactDOMComponent.js +399 -0
- package/lib/ReactDOMForm.js +59 -0
- package/lib/ReactDOMIDOperations.js +218 -0
- package/lib/ReactDOMImg.js +58 -0
- package/lib/ReactDOMInput.js +181 -0
- package/lib/ReactDOMOption.js +51 -0
- package/lib/ReactDOMSelect.js +179 -0
- package/lib/ReactDOMSelection.js +189 -0
- package/lib/ReactDOMTextarea.js +140 -0
- package/lib/ReactDefaultBatchingStrategy.js +75 -0
- package/lib/ReactDefaultInjection.js +115 -0
- package/lib/ReactDefaultPerf.js +244 -0
- package/lib/ReactDefaultPerfAnalysis.js +199 -0
- package/lib/ReactErrorUtils.js +37 -0
- package/lib/ReactEventEmitter.js +337 -0
- package/lib/ReactEventEmitterMixin.js +57 -0
- package/lib/ReactEventTopLevelCallback.js +109 -0
- package/lib/ReactInjection.js +39 -0
- package/lib/ReactInputSelection.js +140 -0
- package/lib/ReactInstanceHandles.js +338 -0
- package/lib/ReactLink.js +54 -0
- package/lib/ReactMarkupChecksum.js +53 -0
- package/lib/ReactMount.js +641 -0
- package/lib/ReactMountReady.js +95 -0
- package/lib/ReactMultiChild.js +425 -0
- package/lib/ReactMultiChildUpdateTypes.js +38 -0
- package/lib/ReactOwner.js +154 -0
- package/lib/ReactPerf.js +85 -0
- package/lib/ReactPropTransferer.js +147 -0
- package/lib/ReactPropTypeLocationNames.js +31 -0
- package/lib/ReactPropTypeLocations.js +29 -0
- package/lib/ReactPropTypes.js +359 -0
- package/lib/ReactPutListenerQueue.js +61 -0
- package/lib/ReactReconcileTransaction.js +181 -0
- package/lib/ReactRootIndex.js +36 -0
- package/lib/ReactServerRendering.js +59 -0
- package/lib/ReactStateSetters.js +111 -0
- package/lib/ReactTextComponent.js +99 -0
- package/lib/ReactTransitionChildMapping.js +106 -0
- package/lib/ReactTransitionEvents.js +97 -0
- package/lib/ReactTransitionGroup.js +187 -0
- package/lib/ReactUpdates.js +148 -0
- package/lib/ReactWithAddons.js +46 -0
- package/lib/SelectEventPlugin.js +200 -0
- package/lib/ServerReactRootIndex.js +36 -0
- package/lib/SimpleEventPlugin.js +413 -0
- package/lib/SyntheticClipboardEvent.js +51 -0
- package/lib/SyntheticCompositionEvent.js +51 -0
- package/lib/SyntheticDragEvent.js +44 -0
- package/lib/SyntheticEvent.js +164 -0
- package/lib/SyntheticFocusEvent.js +44 -0
- package/lib/SyntheticKeyboardEvent.js +58 -0
- package/lib/SyntheticMouseEvent.js +85 -0
- package/lib/SyntheticTouchEvent.js +50 -0
- package/lib/SyntheticUIEvent.js +45 -0
- package/lib/SyntheticWheelEvent.js +66 -0
- package/lib/Transaction.js +276 -0
- package/lib/ViewportMetrics.js +37 -0
- package/lib/accumulate.js +54 -0
- package/lib/adler32.js +39 -0
- package/lib/cloneWithProps.js +59 -0
- package/lib/containsNode.js +49 -0
- package/lib/copyProperties.js +54 -0
- package/lib/createArrayFrom.js +91 -0
- package/lib/createFullPageComponent.js +63 -0
- package/lib/createNodesFromMarkup.js +93 -0
- package/lib/createObjectFrom.js +61 -0
- package/lib/cx.js +44 -0
- package/lib/dangerousStyleValue.js +57 -0
- package/lib/emptyFunction.js +43 -0
- package/lib/escapeTextForBrowser.js +47 -0
- package/lib/flattenChildren.js +57 -0
- package/lib/forEachAccumulated.js +36 -0
- package/lib/getActiveElement.js +34 -0
- package/lib/getEventKey.js +85 -0
- package/lib/getEventTarget.js +36 -0
- package/lib/getMarkupWrap.js +118 -0
- package/lib/getNodeForCharacterOffset.js +80 -0
- package/lib/getReactRootElementInContainer.js +40 -0
- package/lib/getTextContentAccessor.js +42 -0
- package/lib/getUnboundedScrollPosition.js +45 -0
- package/lib/hyphenate.js +35 -0
- package/lib/invariant.js +62 -0
- package/lib/isEventSupported.js +70 -0
- package/lib/isNode.js +33 -0
- package/lib/isTextInputElement.js +49 -0
- package/lib/isTextNode.js +30 -0
- package/lib/joinClasses.js +44 -0
- package/lib/keyMirror.js +58 -0
- package/lib/keyOf.js +41 -0
- package/lib/memoizeStringOnly.js +39 -0
- package/lib/merge.js +37 -0
- package/lib/mergeHelpers.js +136 -0
- package/lib/mergeInto.js +45 -0
- package/lib/mixInto.js +34 -0
- package/lib/objMap.js +47 -0
- package/lib/objMapKeyVal.js +47 -0
- package/lib/onlyChild.js +43 -0
- package/lib/performanceNow.js +42 -0
- package/lib/shallowEqual.js +49 -0
- package/lib/shouldUpdateReactComponent.js +58 -0
- package/lib/toArray.js +75 -0
- package/lib/traverseAllChildren.js +189 -0
- package/lib/warning.js +40 -0
- package/package.json +32 -21
- package/react.js +1 -0
- package/.npmignore +0 -7
- package/.travis.yml +0 -5
- package/Jakefile.js +0 -39
- package/LICENSE +0 -19
- package/browser-test/dist.html +0 -90
- package/browser-test/index.html +0 -86
- package/browser-test/min.html +0 -90
- package/dist/react.js +0 -3107
- package/dist/react.min.js +0 -22
- package/doc/advanced.md +0 -174
- package/doc/color-def.graffle +0 -938
- package/doc/color-def.png +0 -0
- package/doc/simple.dot +0 -25
- package/doc/simple.png +0 -0
- package/examples/longer-example.js +0 -41
- package/examples/simple.js +0 -45
- package/examples/using-ast-directly.js +0 -30
- package/examples/using-events1.js +0 -79
- package/examples/using-log-events.js +0 -43
- package/lib/base-task.js +0 -123
- package/lib/cb-task.js +0 -84
- package/lib/core.js +0 -138
- package/lib/dsl.js +0 -138
- package/lib/error.js +0 -55
- package/lib/event-collector.js +0 -81
- package/lib/event-manager.js +0 -89
- package/lib/eventemitter.js +0 -20
- package/lib/finalcb-first-task.js +0 -68
- package/lib/finalcb-task.js +0 -65
- package/lib/id.js +0 -22
- package/lib/input-parser.js +0 -56
- package/lib/log-events.js +0 -101
- package/lib/parse.js +0 -41
- package/lib/promise-resolve.js +0 -50
- package/lib/promise-task.js +0 -93
- package/lib/react.js +0 -59
- package/lib/ret-task.js +0 -71
- package/lib/sprintf.js +0 -18
- package/lib/status.js +0 -14
- package/lib/task.js +0 -251
- package/lib/track-tasks.js +0 -74
- package/lib/validate.js +0 -159
- package/lib/vcon.js +0 -90
- package/lib/when-task.js +0 -85
- package/src/dist.build.requirejs +0 -20
- package/test/ast.mocha.js +0 -136
- package/test/cb-task.mocha.js +0 -220
- package/test/core-deferred.mocha.js +0 -143
- package/test/core-when.mocha.js +0 -96
- package/test/core.mocha.js +0 -589
- package/test/dsl.mocha.js +0 -350
- package/test/event-manager.mocha.js +0 -119
- package/test/exec-options.mocha.js +0 -48
- package/test/finalcb-task.mocha.js +0 -58
- package/test/input-parser.mocha.js +0 -86
- package/test/log-events.mocha.js +0 -88
- package/test/mocha.opts +0 -2
- package/test/module-use.mocha.js +0 -147
- package/test/promise-auto-resolve.mocha.js +0 -68
- package/test/ret-task.mocha.js +0 -220
- package/test/task.mocha.js +0 -42
- package/test/validate-cb-task.mocha.js +0 -100
- package/test/validate-ret-task.mocha.js +0 -110
- package/test/validate.mocha.js +0 -324
- package/test/vcon.mocha.js +0 -193
- package/vendor/chai/chai.js +0 -2038
- package/vendor/jquery/jquery-1.7.1.js +0 -9266
- package/vendor/jquery/jquery-1.7.1.min.js +0 -4
- package/vendor/mocha/mocha.css +0 -135
- package/vendor/mocha/mocha.js +0 -3589
- package/vendor/node/util.js +0 -531
- package/vendor/requirejs/require.js +0 -2053
- package/vendor/requirejs/require.min.js +0 -33
package/lib/react.js
DELETED
|
@@ -1,59 +0,0 @@
|
|
|
1
|
-
'use strict';
|
|
2
|
-
/*global define:true */
|
|
3
|
-
|
|
4
|
-
if (typeof define !== 'function') {
|
|
5
|
-
var define = require('amdefine')(module);
|
|
6
|
-
}
|
|
7
|
-
|
|
8
|
-
define(['./core', './dsl', './track-tasks', './log-events', './promise-resolve', './event-collector'],
|
|
9
|
-
function (core, dsl, trackTasksFn, logEventsMod, resolvePromisesFn, eventCollectorFactory) {
|
|
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
|
-
'use strict';
|
|
2
|
-
/*global define:true */
|
|
3
|
-
|
|
4
|
-
if (typeof define !== 'function') {
|
|
5
|
-
var define = require('amdefine')(module);
|
|
6
|
-
}
|
|
7
|
-
|
|
8
|
-
define(['util', './sprintf', './base-task'], function (util, sprintf, BaseTask) {
|
|
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
|
-
'use strict';
|
|
2
|
-
/*global define:true sprint:true */
|
|
3
|
-
|
|
4
|
-
if (typeof define !== 'function') {
|
|
5
|
-
var define = require('amdefine')(module);
|
|
6
|
-
}
|
|
7
|
-
|
|
8
|
-
define(['util'], function (util) {
|
|
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
|
-
'use strict';
|
|
2
|
-
/*global define:true */
|
|
3
|
-
|
|
4
|
-
if (typeof define !== 'function') {
|
|
5
|
-
var define = require('amdefine')(module);
|
|
6
|
-
}
|
|
7
|
-
|
|
8
|
-
define([], function () {
|
|
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
|
-
'use strict';
|
|
2
|
-
/*global define:true */
|
|
3
|
-
|
|
4
|
-
if (typeof define !== 'function') {
|
|
5
|
-
var define = require('amdefine')(module);
|
|
6
|
-
}
|
|
7
|
-
|
|
8
|
-
define(['util', './sprintf', 'ensure-array', './cb-task', './promise-task',
|
|
9
|
-
'./ret-task', './when-task', './finalcb-task', './finalcb-first-task',
|
|
10
|
-
'./status', './error', './vcon', './event-manager'],
|
|
11
|
-
function (util, sprintf, array, CbTask, PromiseTask,
|
|
12
|
-
RetTask, WhenTask, FinalCbTask, FinalCbFirstSuccTask,
|
|
13
|
-
STATUS, error, VContext, EventManager) {
|
|
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
|
-
});
|
package/lib/track-tasks.js
DELETED
|
@@ -1,74 +0,0 @@
|
|
|
1
|
-
'use strict';
|
|
2
|
-
/*global define:true */
|
|
3
|
-
|
|
4
|
-
if (typeof define !== 'function') {
|
|
5
|
-
var define = require('amdefine')(module);
|
|
6
|
-
}
|
|
7
|
-
|
|
8
|
-
define([], function () {
|
|
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
|
-
});
|