80 lines
2.4 KiB
JavaScript
80 lines
2.4 KiB
JavaScript
|
/**
|
||
|
* Copyright 2014-present, Facebook, Inc.
|
||
|
* All rights reserved.
|
||
|
*
|
||
|
* This source code is licensed under the BSD-style license found in the
|
||
|
* LICENSE file in the root directory of this source tree. An additional grant
|
||
|
* of patent rights can be found in the PATENTS file in the same directory.
|
||
|
*
|
||
|
*
|
||
|
*/
|
||
|
|
||
|
'use strict';
|
||
|
|
||
|
// The Symbol used to tag the special React types. If there is no native Symbol
|
||
|
// nor polyfill, then a plain number is used for performance.
|
||
|
var REACT_COROUTINE_TYPE = typeof Symbol === 'function' && Symbol['for'] && Symbol['for']('react.coroutine') || 0xeac8;
|
||
|
|
||
|
var REACT_YIELD_TYPE = typeof Symbol === 'function' && Symbol['for'] && Symbol['for']('react.yield') || 0xeac9;
|
||
|
|
||
|
exports.createCoroutine = function (children, handler, props) {
|
||
|
var key = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : null;
|
||
|
|
||
|
var coroutine = {
|
||
|
// This tag allow us to uniquely identify this as a React Coroutine
|
||
|
$$typeof: REACT_COROUTINE_TYPE,
|
||
|
key: key == null ? null : '' + key,
|
||
|
children: children,
|
||
|
handler: handler,
|
||
|
props: props
|
||
|
};
|
||
|
|
||
|
if (process.env.NODE_ENV !== 'production') {
|
||
|
// TODO: Add _store property for marking this as validated.
|
||
|
if (Object.freeze) {
|
||
|
Object.freeze(coroutine.props);
|
||
|
Object.freeze(coroutine);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
return coroutine;
|
||
|
};
|
||
|
|
||
|
exports.createYield = function (props, continuation) {
|
||
|
var key = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : null;
|
||
|
|
||
|
var yieldNode = {
|
||
|
// This tag allow us to uniquely identify this as a React Yield
|
||
|
$$typeof: REACT_YIELD_TYPE,
|
||
|
key: key == null ? null : '' + key,
|
||
|
props: props,
|
||
|
continuation: continuation
|
||
|
};
|
||
|
|
||
|
if (process.env.NODE_ENV !== 'production') {
|
||
|
// TODO: Add _store property for marking this as validated.
|
||
|
if (Object.freeze) {
|
||
|
Object.freeze(yieldNode.props);
|
||
|
Object.freeze(yieldNode);
|
||
|
}
|
||
|
}
|
||
|
|
||
|
return yieldNode;
|
||
|
};
|
||
|
|
||
|
/**
|
||
|
* Verifies the object is a coroutine object.
|
||
|
*/
|
||
|
exports.isCoroutine = function (object) {
|
||
|
return typeof object === 'object' && object !== null && object.$$typeof === REACT_COROUTINE_TYPE;
|
||
|
};
|
||
|
|
||
|
/**
|
||
|
* Verifies the object is a yield object.
|
||
|
*/
|
||
|
exports.isYield = function (object) {
|
||
|
return typeof object === 'object' && object !== null && object.$$typeof === REACT_YIELD_TYPE;
|
||
|
};
|
||
|
|
||
|
exports.REACT_YIELD_TYPE = REACT_YIELD_TYPE;
|
||
|
exports.REACT_COROUTINE_TYPE = REACT_COROUTINE_TYPE;
|