-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathcalamity.js.map
1 lines (1 loc) · 28.4 KB
/
calamity.js.map
1
{"version":3,"sources":["calamity/Bridge.coffee","calamity/Bus.coffee","calamity/Emitter.coffee","calamity/Message.coffee","calamity/Subscription.coffee","calamity/util.coffee"],"names":[],"mappings":"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","file":"calamity.js","sourceRoot":"/calamity","sourcesContent":["# # Bridge\n# Allows multiple busses to be linked together.\nBridge = class Calamity.Bridge\n\t# The number of miliseconds to remember seen messages for.\n\tSEEN_TIME: 500\n\t# All busses connected by thisbcridge.\n\t_busses: null\n\t# A temporary record of all messages seen.\n\t_seen: null\n\t# The timeout ID of the next cleaning of seen messages.\n\t_cleanId: null\n\n\tconstructor: (busses...) ->\n\t\t@_seen = {}\n\t\t@_busses = busses\n\t\tfor bus in busses\n\t\t\t@subscribeBus bus\n\t\treturn\n\n\t# Subscribes to all messages on the bus\n\tsubscribeBus: (bus) ->\n\t\tbus.subscribe \"*\", do (bus) => (msg) => @handle bus, msg\n\t\treturn\n\n\t# Handles a single message.\n\t# Bus is the event bus instance which the message came from.\n\t# The default implementation sends the message to all other busses.\n\thandle: (bus, msg) ->\n\t\treturn if @seen msg\n\t\tfor b in @_busses\n\t\t\tunless b is bus\n\t\t\t\tb.publish msg\n\t\treturn\n\n\t# Returns true if the supplied message has been seen previously.\n\t# Unless `save` is set to false, the message will be saved as seen.\n\tseen: (msg, save = true) ->\n\t\t# Returns true if message has been seen and its time limit is within the bounds.\n\t\tlimit = new Date().getTime() - @SEEN_TIME\n\t\ttime = @_seen[msg.id]\n\t\tif time? and time > limit\n\t\t\treturn true\n\t\t# Message not seen, save it.\n\t\tif save\n\t\t\t@_seen[msg.id] = new Date().getTime()\n\t\t\t@_scheduleClean()\n\t\treturn false\n\n\t# Schedules a cleanout of the seen messages.\n\t_scheduleClean: ->\n\t\treturn if @_cleanId\n\t\t@_cleanId = _.delay (=>\n\t\t\t@_clean()\n\t\t\t# Schedule another if we still have messages.\n\t\t\tunless _.isEmpty @_seen\n\t\t\t\t@_scheduleClean()\n\t\t\treturn\n\t\t), @SEEN_TIME\n\t\treturn\n\n\t# Clean the seen messages.\n\t_clean: ->\n\t\tseen = @_seen\n\t\tlimit = new Date().getTime() - @SEEN_TIME\n\t\tfor own id, time of seen\n\t\t\tif time < limit\n\t\t\t\tdelete seen[id]\n\t\treturn\n","# # Bus\n# Manages passing events from publishers to subscribers.\nBus = class Calamity.Bus\n\tconstructor: ->\n\t\t# Generate ID.\n\t\t@id = util.genId()\n\t\t# Registered subscriptions container.\n\t\t@_subscriptions = {}\n\t\t# Registered bridges container.\n\t\t@_bridges = []\n\n\t# ## `subscribe()`\n\t# Register a handler to an address.\n\tsubscribe: (address, handler, context) ->\n\t\t# Initialize subscriptions container for this address.\n\t\tunless @_subscriptions[address]\n\t\t\t@_subscriptions[address] = []\n\t\t# Create subscription.\n\t\tsub = new Subscription address, handler, context, @\n\t\t# Add to list.\n\t\t@_subscriptions[address].push sub\n\t\t# Send to bridges.\n\t\t@_bridgeProp \"subscribe\", subscription: sub\n\t\t# Return subscription.\n\t\treturn sub\n\n\t# ## `unsubscribe()`\n\t# Unsubscribes a handler.\n\tunsubscribe: (address, handler) ->\n\t\tsub = address\n\t\t# Search by subscription.\n\t\tif sub instanceof Subscription\n\t\t\t# Check address.\n\t\t\taddress = sub.address\n\t\t\treturn unless @_subscriptions[address]\n\t\t\tfor s, i in @_subscriptions[address]\n\t\t\t\tif s is sub\n\t\t\t\t\t@_subscriptions[address].splice i\n\t\t# Otherwise search by address and handler.\n\t\telse\n\t\t\t# Check for address.\n\t\t\treturn unless @_subscriptions[address]\n\t\t\tfor s, i in @_subscriptions[address]\n\t\t\t\tif s.address is address and s.handler is handler\n\t\t\t\t\tsub = s\n\t\t\t\t\t@_subscriptions[address].splice i\n\t\t# Send to bridges.\n\t\t@_bridgeProp \"unsubscribe\", subscription: sub\n\t\treturn\n\n\t# ## `publish()`\n\t# Publishes an event to a all subscribers on an address.\n\tpublish: (address, data, reply) ->\n\t\tmsg = @_createMessage address, data, reply\n\t\taddress = msg.address\n\t\t# Check if message has already been processed by this bus.\n\t\treturn @ if msg.sawBus @\n\t\t# Register this bus on the event\n\t\tmsg.addBus @\n\t\t# Publish to target address.\n\t\t@_publishAddress address, msg\n\t\t# Publish to wildcard address.\n\t\t@_publishAddress \"*\", msg\n\t\t# Send to bridges.\n\t\t@_bridgeProp \"publish\", message: msg\n\n\t\treturn @\n\n\t# ## `send()`\n\t# Sends an event to a single subscribed address.\n\t# Sends are sent to wildcard addresses, ever.\n\tsend: (address, data, reply) ->\n\t\tmsg = @_createMessage address, data, reply\n\t\taddress = msg.address\n\t\t# Check if message has already been processed by this bus.\n\t\treturn @ if msg.sawBus @\n\t\t# Register this bus on the event\n\t\tmsg.addBus @\n\t\t# Publish to target address.\n\t\t@_sendAddress address, msg\n\t\t# Send to bridges.\n\t\t@_bridgeProp \"send\", message: msg\n\n\t\treturn @\n\n\t# ## `bridge()`\n\t# Attached a bridge object to this bus.\n\t# Briges will receive information about everything that's going on.\n\tbridge: (bridge) ->\n\t\tthrow new Error \"Briges must extend Calamity.EventBridge\" unless bridge instanceof EventBridge\n\t\t@_bridges.push bridge unless _.contains @_bridges, bridge\n\t\treturn @\n\n\t# Utility function for creating messages.\n\t_createMessage: (address, data, reply) ->\n\t\t# Construct new Message is necesarry.\n\t\tmsg = address\n\t\tunless msg instanceof Message\n\t\t\tmsg = new Message address, data, reply\n\t\treturn msg\n\n\t# Publishes a message to an address.\n\t_publishAddress: (address, msg) ->\n\t\t# Check if we have subscriptions at all for this address.\n\t\treturn unless @_subscriptions[address]\n\t\t# Send message to all subscriptions.\n\t\tfor subscription in @_subscriptions[address]\n\t\t\tsubscription.trigger msg\n\t\treturn\n\n\t# Sends a message to an address.\n\t_sendAddress: (address, msg) ->\n\t\t# Check if we have subscriptions at all for this address.\n\t\treturn unless @_subscriptions[address]\n\t\t# Send message to a single random subscription.\n\t\tsubs = @_subscriptions[address]\n\t\tlen = subs.length\n\t\ti = Math.floor(Math.random()*len)\n\t\tsubs[i].trigger msg\n\t\treturn\n\n\t# Propagates to all bridges.\n\t_bridgeProp: (type, data) ->\n\t\treturn unless @_bridges.length > 0\n\t\taddress = \"bus.#{type}\"\n\t\tdata.bus = @\n\t\tfor b in @_bridges\n\t\t\tb.trigger address, data\n\t\treturn\n\n# We automatically construct a default global bus when needed.\nGLOBAL_BUS = null\nCalamity.global = ->\n\tGLOBAL_BUS or= new Bus()\n\treturn GLOBAL_BUS","# # Emitter\n# Mixin class for attaching an instance-local event bus to objects.\n# It adds the `on()`, `off()`, and `trigger()` methods to the object, which allows object-local addresses to be\n# published and subscribed to.\n# To mix this into any object or class, use `Calamity.emitter(*obj*)`.\nEmitter = class Calamity.Emitter\n\t# ## `on()`\n\t# Register a handler to an address.\n\t# this returns a `Subscription` object which can be used to unregister later.\n\ton: (address, handler, context) ->\n\t\tcontext or= @\n\t\treturn getEmitterBus(@).subscribe address, handler, context\n\n\t# ## `off()`\n\t# Unregisters a handler from an address.\n\toff: (address, handler, context) ->\n\t\treturn unless hasEmitterBus(@)\n\t\tcontext or= @\n\t\treturn getEmitterBus(@).unsubscribe address, handler, context\n\n\t# ## `trigger()`\n\t# Publishes an event to an address.\n\ttrigger: (address, data, reply) ->\n\t\treturn unless hasEmitterBus(@)\n\t\treturn getEmitterBus(@).publish address, data, reply\n\n# Private statis function for checking is the object has an emitter bus.\nhasEmitterBus = (obj) ->\n\treturn false unless obj?._calamity?.emitter?.bus?\n\treturn true\n\n# Private static function for preparing an on-demand event bus for an object.\ngetEmitterBus = (obj) ->\n\tcalamity = (obj._calamity or= {})\n\temitter = (calamity.emitter or= {})\n\treturn emitter.bus or= new Bus()\n\n\n# ## `Calamity.emitter()`\n# Adds emitter functionality to the supplied object.\nCalamity.emitter = (obj) ->\n\t_.extend obj, Emitter.prototype\n","# # Message\n# Represents a single message in the system.\nMessage = class Calamity.Message\n\t# Constructor.\n\tconstructor: (@address, @data = {}, replyHandler) ->\n\t\t# Generate ID.\n\t\t@id = util.genId()\n\t\t# Remebered busses container.\n\t\t# This will store the ID of every bus the event has seen, to prevent repeated execution.\n\t\t@_busses = []\n\t\t# Check reply handler.\n\t\tunless _.isUndefined(replyHandler) or _.isFunction(replyHandler)\n\t\t\tthrow new Error \"Reply must be a function\"\n\t\t@_replyHandler = replyHandler\n\t\t# Default values.\n\t\t@status = \"ok\"\n\t\t@error = null\n\n\t# ## `reply()`\n\t# Executes the reply handler, if this message has one.\n\treply: (data, replier) ->\n\t\treplyHandler = @_replyHandler\n\t\t# Don't do anything if we don't have a reply handler.\n\t\treturn unless _.isFunction(replyHandler)\n\t\t# Wrap data and further replies in another message.\n\t\tunless data instanceof Message\n\t\t\tdata = new Message null, data, replier\n\t\t# Execute.\n\t\treplyHandler data\n#\t\t_.defer ->\n#\t\t\treplyHandler data\n#\t\t\treturn\n\t\treturn @\n\n\t# ## `replyError()`\n\t# Executes the reply handler with an error instead of a reply.\n\treplyError: (error, data = {}) ->\n\t\t# Ensure meaningful serialization.\n\t\tif error instanceof Error\n\t\t\t# Transfer values to data.\n\t\t\tfor v in \"message,name,stack,fileName,lineNumber,description,number\".split(\",\")\n\t\t\t\tval = error[v]\n\t\t\t\tval = val.toString() if val and typeof val.toString is \"function\"\n\t\t\t\tdata[v] = val\n\t\t\tif typeof error.toString is \"function\"\n\t\t\t\tdata.string = error.toString()\n\t\t\t\terror = data.string\n\t\t\t\tif data.stack\n\t\t\t\t\terror += \" :: \" + data.stack\n\t\t# Create new error message.\n\t\tmsg = new Message null, data\n\t\tmsg.status = \"error\"\n\t\tmsg.error = error\n\t\t# Send reply.\n\t\t@reply msg\n\t\treturn @\n\n\t# Automatically catches and propagates errors, removing the need to constantly check incoming messages for errors.\n\t# Example usage:\n\t#\n\t# @send \"address\", (reply) => msg.catch reply, =>\n\t# # your code here, reply will never be an error.\n\t#\n\t# In the above example, catch will check reply for errors, and pass them to the reply handler on msg.\n\t# If no errors are detected, it will execute the supplied handler inside a try/catch block, and pass\n\t# any errors back through msg.\n\t# If no reply handler exists on msg, errors will be rethrown, or no try/catch block will be used.\n\t# The first argument is optional and can be an Message, or any throwable value.\n\t# If it's falsy, then it's simply ignored and handler is executed.\n\tcatch: (other, handler) ->\n\t\tunless handler?\n\t\t\tunless _.isFunction other\n\t\t\t\tthrow new Error \"Supplied handler is not a function, #{typeof other} supplied\"\n\t\t\thandler = other\n\t\t\tother = undefined\n\t\t# If we don't have a reply handler, throw error directly.\n\t\tunless _.isFunction @_replyHandler\n\t\t\t# Throw error if we have one.\n\t\t\tif other?\n\t\t\t\tif other instanceof Message\n\t\t\t\t\tif other.isError()\n\t\t\t\t\t\tthrow other.error\n\t\t\t\telse\n\t\t\t\t\tother = new Error other unless other instanceof Error\n\t\t\t\t\tthrow other\n\t\t\t# Execute handler.\n\t\t\thandler other\n\t\t# If we have a reply handler, pass errors to it.\n\t\telse\n\t\t\t# Pass supplied errors.\n\t\t\tif other?\n\t\t\t\tif other instanceof Message\n\t\t\t\t\tif other.isError()\n\t\t\t\t\t\t@reply other\n\t\t\t\t\t\treturn\n\t\t\t\telse\n\t\t\t\t\tother = new Error other unless other instanceof Error\n\t\t\t\t\t@replyError other\n\t\t\t\t\treturn\n\t\t\t# Execute handler inside try/catch block.\n\t\t\ttry\n\t\t\t\thandler other\n\t\t\tcatch err\n\t\t\t\t@replyError err\n\t\treturn\n\n\t# ## `isSuccess()`\n\t# Returns true if this message is marked successful, which is the default state.\n\tisSuccess: ->\n\t\treturn @status is \"ok\"\n\n\t# ## `isError()`\n\t# Returns true if this message is marked as errored, such as when replying with `replyError()`.\n\tisError: ->\n\t\treturn @status is \"error\"\n\n\t# Returns a parameter message data.\n\t# If the parameter is not present, `def` is returned.\n\tgetOptional: (param, def) ->\n\t\tparts = param.split \".\"\n\t\tval = @data[parts[0]]\n\t\t# Iterate from second element onwards.\n\t\tif parts.length > 1 then for part in parts.splice 1\n\t\t\tif _.isObject(val) and val[part]?\n\t\t\t\tval = val[part]\n\t\t\telse\n\t\t\t\tval = undefined\n\t\t\t\tbreak\n\t\t# Default.\n\t\tif typeof val is \"undefined\"\n\t\t\treturn def\n\t\treturn val\n\n\t# Returns a parameter message data.\n\t# If the parameter is not present, an error is thrown.\n\tgetRequired: (param) ->\n\t\tval = @getOptional param\n\t\tif typeof val is \"undefined\"\n\t\t\tthrow new Error \"Variable \\\"#{param}\\\" not found on message with address \\\"#{@address}\\\"\"\n\t\treturn val\n\n\t# ## `addBus()`\n\t# Adds a bus to the internal list.\n\taddBus: (bus) ->\n\t\treturn @ if @sawBus(bus)\n\t\t@_busses.push bus.id\n\t\treturn @\n\n\t# ## `sawBus()`\n\t# Returns true if this message has been processed by the supplied bus.\n\tsawBus: (bus) ->\n\t\treturn _.contains @_busses, bus.id\n\n\t# ## `toJSON()`\n\t# Converts the message to a plain JSON object for possible storage or transmission.\n\ttoJSON: ->\n\t\tjson =\n\t\t\tcalamity: Calamity.version\n\t\t\taddress: @address\n\t\t\tdata: @data\n\t\t\tstatus: @status\n\t\t\terror: @error\n\t\tif @_replyHandler?\n\t\t\tjson.reply = _.bind @reply, @\n\t\treturn json\n\n\t# ## `fromJSON()`\n\t# Converts a JSON object to an Message.\n\t# The message must have been serialized using `Message`'s own `toJSON()` method, otherwise weird things could happen.\n\t@fromJSON = (json) ->\n\t\tthrow new Error \"JSON must be an object\" unless _.isObject json\n\t\tthrow new Error \"Serialized JSON is not for calamity: #{JSON.stringify(json)}\" unless json.calamity?\n\t\tmsg = new Message json.address, json.data, json.reply\n\t\tmsg.status = json.status\n\t\tmsg.error = json.error\n\t\treturn msg\n","# # Subscription\n# Represents a subscription of a handler to an address on an bus.\nSubscription = class Calamity.Subscription\n\t# Constructor.\n\tconstructor: (@address, @handler, @context, @bus) ->\n\t\t@id = util.genId()\n\t\t@active = true\n\t\treturn\n\n\t# ## `unsubscribe()`\n\t# Shorthand for unsubscribing.\n\tunsubscribe: ->\n\t\treturn unless @active\n\t\t@bus.unsubscribe @\n\t\t@active = false\n\t\treturn @\n\n\t# ## `trigger()`\n\t# Fires the handler with the supplied message.\n\ttrigger: (msg) ->\n\t\treturn @ unless @active\n\t\t# Bind handler.\n\t\tbound = _.bind @handler, @context\n\t\t# Execute.\n\t\tbound msg\n#\t\t_.defer ->\n#\t\t\tbound msg\n#\t\t\treturn\n\n\t\treturn @\n","# # util\n# A set of utilities used inside Calamity.\n\n# Import Math functions.\nrandom = Math.random\nfloor = Math.floor\n\n# Hexadecimals.\nHEX = \"0123456789abcdef\".split \"\"\n\n# Generic utility functions.\nutil = Calamity.util =\n\t# Generates a 128 bit ID.\n\tgenId: ->\n\t\tid = \"\"\n\t\tfor i in [1..32]\n\t\t\tid += HEX[floor(random() * HEX.length)]\n\t\treturn id\n"]}