co-share
Version:
A Javascript framework for easily building shared applications such as chats and games
85 lines • 3.31 kB
JavaScript
;
var __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {
if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {
if (ar || !(i in from)) {
if (!ar) ar = Array.prototype.slice.call(from, 0, i);
ar[i] = from[i];
}
}
return to.concat(ar || Array.prototype.slice.call(from));
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.Action = void 0;
var _1 = require(".");
function createUnboundAction(identifier, execute) {
var publishTo = function (links) {
var params = [];
for (var _i = 1; _i < arguments.length; _i++) {
params[_i - 1] = arguments[_i];
}
return links.forEach(function (link) { return link.publish.apply(link, __spreadArray([identifier], params, false)); });
};
var forwardFrom = function (store, origin) {
var params = [];
for (var _i = 2; _i < arguments.length; _i++) {
params[_i - 2] = arguments[_i];
}
try {
execute.apply(store, __spreadArray([origin], params, true));
}
catch (error) {
_1.LogAction.publishTo([origin], error);
}
};
return {
publishTo: publishTo,
forwardFrom: forwardFrom,
execute: execute,
identifier: identifier,
bindTo: bindAction.bind(undefined, identifier, execute, publishTo, forwardFrom),
};
}
var createAction = function (store, identifier, fn, overwrite) {
if (overwrite === void 0) { overwrite = false; }
return createUnboundAction(identifier, fn).bindTo(store, overwrite);
};
function bindAction(identifier, execute, publishTo, forwardFrom, store, overwrite) {
var action = Object.assign(execute.bind(store, undefined), {
forwardFrom: forwardFrom.bind(undefined, store),
publishTo: function (targetDescription) {
var params = [];
for (var _i = 1; _i < arguments.length; _i++) {
params[_i - 1] = arguments[_i];
}
var targets = convertActionTargetDescriptionToTargets(targetDescription, Array.from(store.linkSet));
publishTo.apply(void 0, __spreadArray([targets], params, false));
},
identifier: identifier,
});
if (overwrite || !store.actionMap.has(identifier)) {
store.actionMap.set(identifier, action);
}
else {
throw "Action \"".concat(identifier, "\" already exists on store (").concat(store, "). If you want to overwrite the action, set the overwrite parameter to true.");
}
return action;
}
function convertActionTargetDescriptionToTargets(description, links) {
switch (description.to) {
case "all":
return links;
case "all-except-one":
return links.filter(function (link) { return link != description.except; });
case "all-except-multiple":
return links.filter(function (link) { return !description.except.includes(link); });
case "all-fiter":
return links.filter(description.filter);
case "one":
return [description.one];
}
}
exports.Action = {
create: createAction,
createUnbound: createUnboundAction,
};
//# sourceMappingURL=action.js.map