js-marketplace-2014/dist/minimart.min.js

2 lines
62 KiB
JavaScript
Raw Normal View History

2014-07-25 23:20:27 +00:00
!function(e){if("object"==typeof exports)module.exports=e();else if("function"==typeof define&&define.amd)define(e);else{var f;"undefined"!=typeof window?f=window:"undefined"!=typeof global?f=global:"undefined"!=typeof self&&(f=self),f.Minimart=e()}}(function(){var define,module,exports;return function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require=="function"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);throw new Error("Cannot find module '"+o+"'")}var f=n[o]={exports:{}};t[o][0].call(f.exports,function(e){var n=t[o][1][e];return s(n?n:e)},f,f.exports,e,t,n,r)}return n[o].exports}var i=typeof require=="function"&&require;for(var o=0;o<r.length;o++)s(r[o]);return s}({1:[function(_dereq_,module,exports){var Reflect=_dereq_("./reflect.js");var Minimart=_dereq_("./minimart.js");var World=Minimart.World;var Route=Minimart.Route;Actor._chunks=null;function Actor(ctor){var oldChunks=Actor._chunks;try{Actor._chunks=[];var behavior=new ctor;return finalizeActor(behavior,Actor._chunks)}catch(e){Actor._chunks=oldChunks;throw e}}function checkChunks(type){if(!Actor._chunks){throw new Error("Call to Actor."+type+" outside of Actor constructor")}}function extractChunk(type,defaultOptions,args){var rawProjectionFn=args[0];var options=null;var handler=null;if(typeof rawProjectionFn!=="function"){throw new Error("Actor."+type+" expects a function producing a pattern as first argument")}for(var i=1;i<args.length;i++){if(typeof args[i]==="function"){if(handler!==null){throw new Error("Too many handler functions in Actor."+type)}handler=args[i]}else if(typeof args[i]==="object"){if(options!==null){throw new Error("Too many options arguments in Actor."+type)}options=args[i]}else{throw new Error("Unrecognised argument in Actor."+type)}}options=options||{};for(var k in options){if(!(k in defaultOptions)){throw new Error("Unrecognised option '"+k+"' in Actor."+type)}}for(var k in defaultOptions){if(!(k in options)){options[k]=defaultOptions[k]}}return{type:type,rawProjectionFn:rawProjectionFn,options:options,handler:handler}}function recordChunk(chunk){Actor._chunks.push(chunk)}function chunkExtractor(type,defaultOptions){return function(){checkChunks(type);recordChunk(extractChunk(type,defaultOptions,Array.prototype.slice.call(arguments)))}}var participatorDefaults={metaLevel:0,when:function(){return true}};var observerDefaults={metaLevel:0,level:0,when:function(){return true},presence:null,name:null,set:null,added:null,removed:null};Actor.advertise=chunkExtractor("advertise",participatorDefaults);Actor.subscribe=chunkExtractor("subscribe",participatorDefaults);Actor.observeAdvertisers=chunkExtractor("observeAdvertisers",observerDefaults);Actor.observeSubscribers=chunkExtractor("observeSubscribers",observerDefaults);Actor.observeGestalt=function(gestaltFn,eventHandlerFn){checkChunks("observeGestalt");recordChunk({type:"observeGestalt",gestaltFn:gestaltFn,options:{when:function(){return true}},eventHandlerFn:eventHandlerFn})};function finalizeActor(behavior,chunks){var oldBoot=behavior.boot;var oldHandleEvent=behavior.handleEvent;var projections={};var compiledProjections={};var previousObjs={};behavior.boot=function(){if(oldBoot){oldBoot.call(this)}this.updateRoutes()};behavior.updateRoutes=function(){var newRoutes=Route.emptyGestalt;for(var i=0;i<chunks.length;i++){var chunk=chunks[i];if(chunk.options.when.call(this)){switch(chunk.type){case"observeGestalt":newRoutes=newRoutes.union(chunk.gestaltFn.call(this));break;case"advertise":case"subscribe":var proj=chunk.rawProjectionFn.call(this);projections[i]=proj;var g=Route.simpleGestalt(chunk.type==="advertise",Route.projectionToPattern(proj),chunk.options.metaLevel,0);newRoutes=newRoutes.union(g);break;case"observeSubscribers":case"observeAdvertisers":var proj=chunk.rawProjectionFn.call(this);projections[i]=proj;compiledProjections[i]=Route.compileProjection(proj);var g=Route.simpleGestalt(chunk.type==="observeSubscribers",Route.projectionToPattern(proj),chunk.options.metaLevel,chunk.options.level+1);newRoutes=newRoutes.union(g);if(chunk.options.added||chunk.options
}else{rupdateInplace(target,key,walk(k1,k2))}}}}if(is_emptyMatcher(w1)){if(is_emptyMatcher(w2)){for(var key in(r1.length<r2.length?r1:r2).entries)examineKey(key)}else{for(var key in r1.entries)examineKey(key)}}else{if(is_emptyMatcher(w2)){for(var key in r2.entries)examineKey(key)}else{rupdateInplace(target,__,w);for(var key in r1.entries)examineKey(key);for(var key in r2.entries)examineKey(key)}}return target.emptyGuard()}function walkWild(walker,w,key,k){if(is_emptyMatcher(w))return emptyMatcher;if(is_keyOpen(key))return walker(rwildseq(w),k);if(is_keyClose(key)){if(w instanceof $WildcardSequence)return walker(w.matcher,k);return emptyMatcher}return walker(w,k)}}function erasePath(o1,o2){return walk(o1,o2);function walk(r1,r2){if(is_emptyMatcher(r1)){return emptyMatcher}else{if(is_emptyMatcher(r2)){return r1}}if(r1 instanceof $WildcardSequence){if(r2 instanceof $WildcardSequence){return rwildseq(walk(r1.matcher,r2.matcher))}r1=expandWildseq(r1.matcher)}else if(r2 instanceof $WildcardSequence){r2=expandWildseq(r2.matcher)}if(r1 instanceof $Success&&r2 instanceof $Success){return rsuccess(erasePathSuccesses(r1.value,r2.value))}var w1=r1.get(__);var w2=r2.get(__);var w=walk(w1,w2);var target;function examineKey(key){if(key!==__){var k1=r1.get(key);var k2=r2.get(key);var updatedK;if(is_emptyMatcher(k2)){updatedK=walkWild(key,k1,w2)}else{updatedK=walk(k1,k2)}if(is_keyOpen(key)){rupdateInplace(target,key,updatedK instanceof $WildcardSequence&&matcherEquals(updatedK.matcher,w)?emptyMatcher:updatedK)}else if(is_keyClose(key)){rupdateInplace(target,key,updatedK)}else{rupdateInplace(target,key,matcherEquals(updatedK,w)?emptyMatcher:updatedK)}}}if(is_emptyMatcher(w2)){target=r1.copy();for(var key in r2.entries)examineKey(key)}else{target=new $Dict;rupdateInplace(target,__,w);for(var key in r1.entries)examineKey(key);for(var key in r2.entries)examineKey(key)}if(target.length===2){var finalW=target.get(__);if(finalW instanceof $WildcardSequence){for(var key in target.entries){if(key!==__&&is_keyClose(key)){var k=target.get(key);if(matcherEquals(k,finalW.matcher)){return finalW}}}}}return target.emptyGuard()}function walkWild(key,k,w){if(is_emptyMatcher(w))return k;if(is_keyOpen(key))return walk(k,rwildseq(w));if(is_keyClose(key)){if(w instanceof $WildcardSequence)return walk(k,w.matcher);return k}return walk(k,w)}}function matchValue(r,v){var failureResult=null;var vs=[v];var stack=[[]];while(!is_emptyMatcher(r)){if(r instanceof $WildcardSequence){if(stack.length===0)return failureResult;vs=stack.pop();r=r.matcher;continue}if(r instanceof $Success){if(vs.length===0&&stack.length===0)return r.value;return failureResult}if(vs.length===0){if(stack.length===0)return failureResult;vs=stack.pop();r=r.get(EOA);continue}var v=vs.shift();if(typeof v==="string"&&v.substring(0,2)==="__"){die("Cannot match special string starting with __")}if(Array.isArray(v)){if(SOA in r.entries){r=r.get(SOA);stack.push(vs);vs=shallowCopyArray(v)}else{r=r.get(__)}}else{var key;try{key=JSON.stringify(v)}catch(exn){key=null}if(key in r.entries){r=r.get(key)}else{r=r.get(__)}}}return failureResult}function matchMatcher(o1,o2,seed){var acc=typeof seed==="undefined"?{}:seed;walk(o1,o2);return acc;function walkFlipped(r2,r1){return walk(r1,r2)}function walk(r1,r2){if(is_emptyMatcher(r1)||is_emptyMatcher(r2))return;if(r1 instanceof $WildcardSequence){if(r2 instanceof $WildcardSequence){walk(r1.matcher,r2.matcher);return}r1=expandWildseq(r1.matcher)}else if(r2 instanceof $WildcardSequence){r2=expandWildseq(r2.matcher)}if(r1 instanceof $Success&&r2 instanceof $Success){matchMatcherSuccesses(r1.value,r2.value,acc);return}var w1=r1.get(__);var w2=r2.get(__);walk(w1,w2);function examineKey(key){if(key!==__){var k1=r1.get(key);var k2=r2.get(key);if(is_emptyMatcher(k1)){if(is_emptyMatcher(k2)){return}else{walkWild(walk,w1,key,k2)}}else{if(is_emptyMatcher(k2)){walkWild(walkFlipped,w2,key,k1)}else{walk(k1,k2)}}}}if(is_emptyMatcher(w1)){if(is_emptyMatcher(w2)){for(var key in(r1.length<r2.length?r1:r2).entries)examineKey(key)}else{for(var key in r1.entries)examineKey(key)}}els