kaiju
Version:
Virtual dom, observables and stateful components
69 lines (51 loc) • 1.53 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = Message;
var messageId = 1;
/** User-defined component message factory */
function Message(name) {
var _id = messageId++;
function message() {
for (var _len = arguments.length, payload = Array(_len), _key = 0; _key < _len; _key++) {
payload[_key] = arguments[_key];
}
var result = {
_id: _id,
_name: name,
payload: payload
};
result.is = messageIs;
return result;
}
message._id = _id;
message._name = name;
message._isMessage = true;
message.with = withPayload;
return message;
}
function withPayload(payload) {
return PartiallyAppliedMessage(this, payload);
}
function messageIs(ofType) {
return this._id === ofType._id;
}
/** Creates a new Message type that is partially applied with a payload */
function PartiallyAppliedMessage(underlyingMessage, payload) {
function message() {
for (var _len2 = arguments.length, otherPayloads = Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {
otherPayloads[_key2] = arguments[_key2];
}
return underlyingMessage.apply(null, [payload].concat(otherPayloads));
}
message.type = 'partiallyAppliedMessage';
message._id = underlyingMessage._id;
message._name = underlyingMessage._name;
message._isMessage = true;
message.with = withPayload;
// Used for VDOM Diffing (See util/shallowEqual)
message.payload = payload;
return message;
}
Message.unhandled = Message('unhandled');