UNPKG

@ont-community/window-post-message-proxy

Version:

A library used in place of the native window.postMessage which when used on both the sending and receiving windows allow for a nicer asynchronouse promise messaging between the windows

2 lines 5.46 kB
/*! @ont-community/window-post-message-proxy v0.2.14 | (c) 2016 Microsoft Corporation MIT */ !function(e,r){"object"==typeof exports&&"object"==typeof module?module.exports=r():"function"==typeof define&&define.amd?define([],r):"object"==typeof exports?exports["@ont-community/window-post-message-proxy"]=r():e["@ont-community/window-post-message-proxy"]=r()}(this,function(){return function(e){function r(t){if(s[t])return s[t].exports;var n=s[t]={exports:{},id:t,loaded:!1};return e[t].call(n.exports,n,n.exports,r),n.loaded=!0,n.exports}var s={};return r.m=e,r.c=s,r.p="",r(0)}([function(e,r){"use strict";Object.defineProperty(r,"__esModule",{value:!0});var s=function(){function e(r){void 0===r&&(r={processTrackingProperties:{addTrackingProperties:e.defaultAddTrackingProperties,getTrackingProperties:e.defaultGetTrackingProperties},isErrorMessage:e.defaultIsErrorMessage,extractErrorMessage:e.defaultExtractErrorMessage,receiveWindow:window,name:e.createRandomString()});var s=this;this.pendingRequestPromises={},this.addTrackingProperties=r.processTrackingProperties&&r.processTrackingProperties.addTrackingProperties||e.defaultAddTrackingProperties,this.getTrackingProperties=r.processTrackingProperties&&r.processTrackingProperties.getTrackingProperties||e.defaultGetTrackingProperties,this.isErrorMessage=r.isErrorMessage||e.defaultIsErrorMessage,this.extractErrorMessage=r.extractErrorMessage||e.defaultExtractErrorMessage,this.receiveWindow=r.receiveWindow||window,this.name=r.name||e.createRandomString(),this.target=r.target,this.logMessages=r.logMessages||!1,this.eventSourceOverrideWindow=r.eventSourceOverrideWindow,this.suppressWarnings=r.suppressWarnings||!1,this.logMessages&&console.log("new WindowPostMessageProxy created with name: "+this.name+" receiving on window: "+this.receiveWindow.document.title),this.handlers=[],this.windowMessageHandler=function(e){return s.onMessageReceived(e)},this.start()}return e.defaultAddTrackingProperties=function(r,s){return r[e.messagePropertyName]=s,r},e.defaultGetTrackingProperties=function(r){return r[e.messagePropertyName]},e.defaultIsErrorMessage=function(e){return!!e.error},e.defaultExtractErrorMessage=function(e){return e.error},e.createDeferred=function(){var e={resolve:null,reject:null,promise:null},r=new Promise(function(r,s){e.resolve=r,e.reject=s});return e.promise=r,e},e.createRandomString=function(){return(Math.random()+1).toString(36).substring(7)},e.prototype.addHandler=function(e){this.handlers.push(e)},e.prototype.removeHandler=function(e){var r=this.handlers.indexOf(e);if(r===-1)throw new Error("You attempted to remove a handler but no matching handler was found.");this.handlers.splice(r,1)},e.prototype.start=function(){this.receiveWindow.addEventListener("message",this.windowMessageHandler)},e.prototype.stop=function(){this.receiveWindow.removeEventListener("message",this.windowMessageHandler)},e.prototype.postMessage=function(r,s){var t={id:e.createRandomString(),source:this.name,target:this.target};this.addTrackingProperties(s,t),this.logMessages&&console.warn("Proxy("+this.name+"): Sending:",JSON.stringify(s,null," ")),r.postMessage(s,"*");var n=e.createDeferred();return this.pendingRequestPromises[t.id]=n,n.promise},e.prototype.sendResponse=function(e,r,s){this.addTrackingProperties(r,s),this.logMessages&&console.warn("Proxy("+this.name+"): Responding:",JSON.stringify(r,null," ")),e.postMessage(r,"*")},e.prototype.onMessageReceived=function(e){var r=this,s=this.eventSourceOverrideWindow||e.source,t=e.data;if("object"!=typeof t)return void(this.suppressWarnings||console.warn("Proxy("+this.name+"): Received message that was not an object. Discarding message"));var n;try{if(n=this.getTrackingProperties(t),n&&null!=n.target&&n.target!==this.name)return;this.logMessages&&console.warn("Proxy("+this.name+"): Receiving:",JSON.stringify(e.data,null," "))}catch(o){this.suppressWarnings||console.warn("Proxy("+this.name+"): Error occurred when attempting to get tracking properties from incoming message:",JSON.stringify(t,null," "),"Error: ",o)}var i;if(n&&(i=this.pendingRequestPromises[n.id]),i){var a=!0;try{a=this.isErrorMessage(t)}catch(o){console.warn("Proxy("+this.name+") Error occurred when trying to determine if message is consider an error response. Message: ",JSON.stringify(t,null,""),"Error: ",o)}a?i.reject(this.extractErrorMessage(t)):i.resolve(t),delete this.pendingRequestPromises[n.id]}else{var d=this.handlers.some(function(e){var o=!1;try{o=e.test(t)}catch(i){r.suppressWarnings||console.warn("Proxy("+r.name+"): Error occurred when handler was testing incoming message:",JSON.stringify(t,null," "),"Error: ",i)}if(o){var a=void 0;try{a=Promise.resolve(e.handle(t))}catch(i){r.suppressWarnings||console.warn("Proxy("+r.name+"): Error occurred when handler was processing incoming message:",JSON.stringify(t,null," "),"Error: ",i),a=Promise.resolve()}return a.then(function(e){if(!e){var o="Handler for message: "+JSON.stringify(t,null," ")+" did not return a response message. The default response message will be returned instead.";r.suppressWarnings||console.warn("Proxy("+r.name+"): "+o),e={warning:o}}n.target=n.source,n.source=r.name,r.sendResponse(s,e,n)}),!0}});d||this.suppressWarnings||console.warn("Proxy("+this.name+") did not handle message. Handlers: "+this.handlers.length+" Message: "+JSON.stringify(t,null,"")+".")}},e.messagePropertyName="windowPostMessageProxy",e}();r.WindowPostMessageProxy=s}])});