UNPKG

co-share

Version:

A Javascript framework for easily building shared applications such as chats and games

85 lines 3.31 kB
"use strict"; 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