Comparing version 3.0.0-alpha.4 to 3.0.0-alpha.5
@@ -140,2 +140,27 @@ // Derived from https://github.com/umdjs/umd/blob/master/templates/amdWebGlobal.js | ||
/** | ||
* Converts an error object into a plain object. | ||
* @param {Error} Error object. | ||
* @returns {Object} | ||
*/ | ||
var serializeError = function serializeError(_ref) { | ||
var name = _ref.name, | ||
message = _ref.message, | ||
stack = _ref.stack; | ||
return { name: name, message: message, stack: stack }; | ||
}; | ||
/** | ||
* Converts a plain object into an error object. | ||
* @param {Object} Object with error properties. | ||
* @returns {Error} | ||
*/ | ||
var deserializeError = function deserializeError(obj) { | ||
var deserializedError = new Error(); | ||
Object.keys(obj).forEach(function (key) { | ||
return deserializedError[key] = obj[key]; | ||
}); | ||
return deserializedError; | ||
}; | ||
/** | ||
* Augments an object with methods that match those defined by the remote. When these methods are | ||
@@ -183,7 +208,3 @@ * called, a "call" message will be sent to the remote, the remote's corresponding method will be | ||
if (event.data.returnValueIsError) { | ||
var deserializedError = new Error(); | ||
Object.keys(returnValue).forEach(function (key) { | ||
return deserializedError[key] = returnValue[key]; | ||
}); | ||
returnValue = deserializedError; | ||
returnValue = deserializeError(returnValue); | ||
} | ||
@@ -264,8 +285,3 @@ | ||
if (resolution === REJECTED && returnValue instanceof Error) { | ||
message.returnValue = { | ||
name: returnValue.name, | ||
message: returnValue.message, | ||
stack: returnValue.stack | ||
}; | ||
message.returnValue = serializeError(returnValue); | ||
message.returnValueIsError = true; | ||
@@ -284,3 +300,4 @@ } | ||
resolution: REJECTED, | ||
returnValue: err.toString() | ||
returnValue: serializeError(err), | ||
returnValueIsError: true | ||
}, remoteOrigin); | ||
@@ -329,8 +346,8 @@ } | ||
*/ | ||
Penpal.connectToChild = function (_ref) { | ||
var url = _ref.url, | ||
appendTo = _ref.appendTo, | ||
_ref$methods = _ref.methods, | ||
methods = _ref$methods === undefined ? {} : _ref$methods, | ||
timeout = _ref.timeout; | ||
Penpal.connectToChild = function (_ref2) { | ||
var url = _ref2.url, | ||
appendTo = _ref2.appendTo, | ||
_ref2$methods = _ref2.methods, | ||
methods = _ref2$methods === undefined ? {} : _ref2$methods, | ||
timeout = _ref2.timeout; | ||
@@ -435,8 +452,8 @@ var destroy = void 0; | ||
*/ | ||
Penpal.connectToParent = function (_ref2) { | ||
var _ref2$parentOrigin = _ref2.parentOrigin, | ||
parentOrigin = _ref2$parentOrigin === undefined ? '*' : _ref2$parentOrigin, | ||
_ref2$methods = _ref2.methods, | ||
methods = _ref2$methods === undefined ? {} : _ref2$methods, | ||
timeout = _ref2.timeout; | ||
Penpal.connectToParent = function (_ref3) { | ||
var _ref3$parentOrigin = _ref3.parentOrigin, | ||
parentOrigin = _ref3$parentOrigin === undefined ? '*' : _ref3$parentOrigin, | ||
_ref3$methods = _ref3.methods, | ||
methods = _ref3$methods === undefined ? {} : _ref3$methods, | ||
timeout = _ref3.timeout; | ||
@@ -443,0 +460,0 @@ if (window === window.top) { |
@@ -1,1 +0,1 @@ | ||
!function(e,n){var r={};!function(e){"use strict";function n(e){if(Array.isArray(e)){for(var n=0,r=Array(e.length);n<e.length;n++)r[n]=e[n];return r}return Array.from(e)}Object.defineProperty(e,"__esModule",{value:!0});var r={"http:":"80","https:":"443"},t=/^(https?:)?\/\/([^\/:]+)(:(\d+))?/,o={Promise:function(){try{return window?window.Promise:null}catch(e){return null}}(),debug:!1},a=function(){var e=0;return function(){return++e}}(),i=function(){for(var e=arguments.length,n=Array(e),r=0;r<e;r++)n[r]=arguments[r];if(o.debug){var t;(t=console).log.apply(t,["[Penpal]"].concat(n))}},d=function(e){var n=document.location,o=t.exec(e),a=void 0,i=void 0,d=void 0;return o?(a=o[1]?o[1]:n.protocol,i=o[2],d=o[4]):(a=n.protocol,i=n.hostname,d=n.port),a+"//"+i+(d&&d!==r[a]?":"+d:"")},c=function(e){var n=[];return e(function(){n.forEach(function(e){e()})}),{then:function(e){n.push(e)}}},s=function(e,n,r,t){var d=n.localName,c=n.local,s=n.remote,u=n.remoteOrigin,l=!1;i(d+": Connecting call sender");var f=function(e){return function(){for(var n=arguments.length,r=Array(n),t=0;t<n;t++)r[t]=arguments[t];return i(d+": Sending "+e+"() call"),new o.Promise(function(n,t){if(l)return void t(new Error("Unable to send "+e+"() call due to destroyed connection"));var o=a(),f=function r(a){if(a.source===s&&a.origin===u&&"reply"===a.data.penpal&&a.data.id===o){i(d+": Received "+e+"() reply"),c.removeEventListener("message",r);var l=a.data.returnValue;if(a.data.returnValueIsError){var f=new Error;Object.keys(l).forEach(function(e){return f[e]=l[e]}),l=f}("fulfilled"===a.data.resolution?n:t)(l)}};c.addEventListener("message",f),s.postMessage({penpal:"call",id:o,methodName:e,args:r},u)})}};t.then(function(){l=!0}),r.reduce(function(e,n){return e[n]=f(n),e},e)},u=function(e,r,t){var a=e.localName,d=e.local,c=e.remote,s=e.remoteOrigin,u=!1;i(a+": Connecting call receiver");var l=function(e){if(e.source===c&&e.origin===s&&"call"===e.data.penpal){var t=e.data,d=t.methodName,l=t.args,f=t.id;if(i(a+": Received "+d+"() call"),d in r){var m=function(e){return function(n){if(u)throw new Error("Unable to send "+d+"() reply due to destroyed connection");i(a+": Sending "+d+"() reply");var r={penpal:"reply",id:f,resolution:e,returnValue:n};"rejected"===e&&n instanceof Error&&(r.returnValue={name:n.name,message:n.message,stack:n.stack},r.returnValueIsError=!0);try{c.postMessage(r,s)}catch(e){throw"DataCloneError"===e.name&&c.postMessage({penpal:"reply",id:f,resolution:"rejected",returnValue:e.toString()},s),e}}};new o.Promise(function(e){return e(r[d].apply(r,n(l)))}).then(m("fulfilled"),m("rejected"))}}};d.addEventListener("message",l),t.then(function(){u=!0,d.removeEventListener("message",l)})};o.connectToChild=function(e){var n=e.url,r=e.appendTo,t=e.methods,a=void 0===t?{}:t,l=e.timeout,f=void 0,m=new c(function(e){return f=e}),p=window,v=document.createElement("iframe");(r||document.body).appendChild(v),m.then(function(){v.parentNode&&v.parentNode.removeChild(v)});var h=v.contentWindow||v.contentDocument.parentWindow,g=d(n);return{promise:new o.Promise(function(e,r){void 0!==l&&setTimeout(function(){r(new Error("Connection to child timed out after "+l+"ms")),f()},l);var t={},o=void 0,d=function(n){if(n.source===h&&n.origin===g&&"handshake"===n.data.penpal){i("Parent: Received handshake"),i("Parent: Sending handshake reply"),n.source.postMessage({penpal:"handshake-reply",methodNames:Object.keys(a)},n.origin);var r={localName:"Parent",local:p,remote:h,remoteOrigin:n.origin};u(r,a,m),o&&o.forEach(function(e){delete t[e]}),o=n.data.methodNames,s(t,r,o,m),e(t)}};p.addEventListener("message",d),m.then(function(){p.removeEventListener("message",d),r("Parent: Connection destroyed")}),i("Parent: Loading iframe"),v.src=n}),iframe:v,destroy:f}},o.connectToParent=function(e){var n=e.parentOrigin,r=void 0===n?"*":n,t=e.methods,a=void 0===t?{}:t,d=e.timeout;if(window===window.top)throw new Error("connectToParent() must be called within an iframe");var l=void 0,f=new c(function(e){return l=e}),m=window,p=m.parent;return{promise:new o.Promise(function(e,n){void 0!==d&&setTimeout(function(){n(new Error("Connection to parent timed out after "+d+"ms")),l()},d);var t=function n(t){if(("*"===r||r===t.origin)&&t.source===p&&"handshake-reply"===t.data.penpal){i("Child: Received handshake reply"),m.removeEventListener("message",n);var o={localName:"Child",local:m,remote:p,remoteOrigin:t.origin},d={};u(o,a,f),s(d,o,t.data.methodNames,f),e(d)}};m.addEventListener("message",t),f.then(function(){m.removeEventListener("message",t),n(new Error("Child: Connection destroyed"))}),i("Child: Sending handshake"),p.postMessage({penpal:"handshake",methodNames:Object.keys(a)},r)}),destroy:l}},e.default=o}(r),"function"==typeof define&&define.amd?define("Penpal",r.default):e.Penpal=r.default}(this); | ||
!function(e,n){var r={};!function(e){"use strict";function n(e){if(Array.isArray(e)){for(var n=0,r=Array(e.length);n<e.length;n++)r[n]=e[n];return r}return Array.from(e)}Object.defineProperty(e,"__esModule",{value:!0});var r={"http:":"80","https:":"443"},t=/^(https?:)?\/\/([^\/:]+)(:(\d+))?/,o={Promise:function(){try{return window?window.Promise:null}catch(e){return null}}(),debug:!1},a=function(){var e=0;return function(){return++e}}(),i=function(){for(var e=arguments.length,n=Array(e),r=0;r<e;r++)n[r]=arguments[r];if(o.debug){var t;(t=console).log.apply(t,["[Penpal]"].concat(n))}},d=function(e){var n=document.location,o=t.exec(e),a=void 0,i=void 0,d=void 0;return o?(a=o[1]?o[1]:n.protocol,i=o[2],d=o[4]):(a=n.protocol,i=n.hostname,d=n.port),a+"//"+i+(d&&d!==r[a]?":"+d:"")},c=function(e){var n=[];return e(function(){n.forEach(function(e){e()})}),{then:function(e){n.push(e)}}},u=function(e){return{name:e.name,message:e.message,stack:e.stack}},s=function(e){var n=new Error;return Object.keys(e).forEach(function(r){return n[r]=e[r]}),n},l=function(e,n,r,t){var d=n.localName,c=n.local,u=n.remote,l=n.remoteOrigin,f=!1;i(d+": Connecting call sender");var m=function(e){return function(){for(var n=arguments.length,r=Array(n),t=0;t<n;t++)r[t]=arguments[t];return i(d+": Sending "+e+"() call"),new o.Promise(function(n,t){if(f)return void t(new Error("Unable to send "+e+"() call due to destroyed connection"));var o=a(),m=function r(a){if(a.source===u&&a.origin===l&&"reply"===a.data.penpal&&a.data.id===o){i(d+": Received "+e+"() reply"),c.removeEventListener("message",r);var f=a.data.returnValue;a.data.returnValueIsError&&(f=s(f)),("fulfilled"===a.data.resolution?n:t)(f)}};c.addEventListener("message",m),u.postMessage({penpal:"call",id:o,methodName:e,args:r},l)})}};t.then(function(){f=!0}),r.reduce(function(e,n){return e[n]=m(n),e},e)},f=function(e,r,t){var a=e.localName,d=e.local,c=e.remote,s=e.remoteOrigin,l=!1;i(a+": Connecting call receiver");var f=function(e){if(e.source===c&&e.origin===s&&"call"===e.data.penpal){var t=e.data,d=t.methodName,f=t.args,m=t.id;if(i(a+": Received "+d+"() call"),d in r){var p=function(e){return function(n){if(l)throw new Error("Unable to send "+d+"() reply due to destroyed connection");i(a+": Sending "+d+"() reply");var r={penpal:"reply",id:m,resolution:e,returnValue:n};"rejected"===e&&n instanceof Error&&(r.returnValue=u(n),r.returnValueIsError=!0);try{c.postMessage(r,s)}catch(e){throw"DataCloneError"===e.name&&c.postMessage({penpal:"reply",id:m,resolution:"rejected",returnValue:u(e),returnValueIsError:!0},s),e}}};new o.Promise(function(e){return e(r[d].apply(r,n(f)))}).then(p("fulfilled"),p("rejected"))}}};d.addEventListener("message",f),t.then(function(){l=!0,d.removeEventListener("message",f)})};o.connectToChild=function(e){var n=e.url,r=e.appendTo,t=e.methods,a=void 0===t?{}:t,u=e.timeout,s=void 0,m=new c(function(e){return s=e}),p=window,v=document.createElement("iframe");(r||document.body).appendChild(v),m.then(function(){v.parentNode&&v.parentNode.removeChild(v)});var h=v.contentWindow||v.contentDocument.parentWindow,g=d(n);return{promise:new o.Promise(function(e,r){void 0!==u&&setTimeout(function(){r(new Error("Connection to child timed out after "+u+"ms")),s()},u);var t={},o=void 0,d=function(n){if(n.source===h&&n.origin===g&&"handshake"===n.data.penpal){i("Parent: Received handshake"),i("Parent: Sending handshake reply"),n.source.postMessage({penpal:"handshake-reply",methodNames:Object.keys(a)},n.origin);var r={localName:"Parent",local:p,remote:h,remoteOrigin:n.origin};f(r,a,m),o&&o.forEach(function(e){delete t[e]}),o=n.data.methodNames,l(t,r,o,m),e(t)}};p.addEventListener("message",d),m.then(function(){p.removeEventListener("message",d),r("Parent: Connection destroyed")}),i("Parent: Loading iframe"),v.src=n}),iframe:v,destroy:s}},o.connectToParent=function(e){var n=e.parentOrigin,r=void 0===n?"*":n,t=e.methods,a=void 0===t?{}:t,d=e.timeout;if(window===window.top)throw new Error("connectToParent() must be called within an iframe");var u=void 0,s=new c(function(e){return u=e}),m=window,p=m.parent;return{promise:new o.Promise(function(e,n){void 0!==d&&setTimeout(function(){n(new Error("Connection to parent timed out after "+d+"ms")),u()},d);var t=function n(t){if(("*"===r||r===t.origin)&&t.source===p&&"handshake-reply"===t.data.penpal){i("Child: Received handshake reply"),m.removeEventListener("message",n);var o={localName:"Child",local:m,remote:p,remoteOrigin:t.origin},d={};f(o,a,s),l(d,o,t.data.methodNames,s),e(d)}};m.addEventListener("message",t),s.then(function(){m.removeEventListener("message",t),n(new Error("Child: Connection destroyed"))}),i("Child: Sending handshake"),p.postMessage({penpal:"handshake",methodNames:Object.keys(a)},r)}),destroy:u}},e.default=o}(r),"function"==typeof define&&define.amd?define("Penpal",r.default):e.Penpal=r.default}(this); |
@@ -126,2 +126,27 @@ 'use strict'; | ||
/** | ||
* Converts an error object into a plain object. | ||
* @param {Error} Error object. | ||
* @returns {Object} | ||
*/ | ||
var serializeError = function serializeError(_ref) { | ||
var name = _ref.name, | ||
message = _ref.message, | ||
stack = _ref.stack; | ||
return { name: name, message: message, stack: stack }; | ||
}; | ||
/** | ||
* Converts a plain object into an error object. | ||
* @param {Object} Object with error properties. | ||
* @returns {Error} | ||
*/ | ||
var deserializeError = function deserializeError(obj) { | ||
var deserializedError = new Error(); | ||
Object.keys(obj).forEach(function (key) { | ||
return deserializedError[key] = obj[key]; | ||
}); | ||
return deserializedError; | ||
}; | ||
/** | ||
* Augments an object with methods that match those defined by the remote. When these methods are | ||
@@ -169,7 +194,3 @@ * called, a "call" message will be sent to the remote, the remote's corresponding method will be | ||
if (event.data.returnValueIsError) { | ||
var deserializedError = new Error(); | ||
Object.keys(returnValue).forEach(function (key) { | ||
return deserializedError[key] = returnValue[key]; | ||
}); | ||
returnValue = deserializedError; | ||
returnValue = deserializeError(returnValue); | ||
} | ||
@@ -250,8 +271,3 @@ | ||
if (resolution === REJECTED && returnValue instanceof Error) { | ||
message.returnValue = { | ||
name: returnValue.name, | ||
message: returnValue.message, | ||
stack: returnValue.stack | ||
}; | ||
message.returnValue = serializeError(returnValue); | ||
message.returnValueIsError = true; | ||
@@ -270,3 +286,4 @@ } | ||
resolution: REJECTED, | ||
returnValue: err.toString() | ||
returnValue: serializeError(err), | ||
returnValueIsError: true | ||
}, remoteOrigin); | ||
@@ -315,8 +332,8 @@ } | ||
*/ | ||
Penpal.connectToChild = function (_ref) { | ||
var url = _ref.url, | ||
appendTo = _ref.appendTo, | ||
_ref$methods = _ref.methods, | ||
methods = _ref$methods === undefined ? {} : _ref$methods, | ||
timeout = _ref.timeout; | ||
Penpal.connectToChild = function (_ref2) { | ||
var url = _ref2.url, | ||
appendTo = _ref2.appendTo, | ||
_ref2$methods = _ref2.methods, | ||
methods = _ref2$methods === undefined ? {} : _ref2$methods, | ||
timeout = _ref2.timeout; | ||
@@ -421,8 +438,8 @@ var destroy = void 0; | ||
*/ | ||
Penpal.connectToParent = function (_ref2) { | ||
var _ref2$parentOrigin = _ref2.parentOrigin, | ||
parentOrigin = _ref2$parentOrigin === undefined ? '*' : _ref2$parentOrigin, | ||
_ref2$methods = _ref2.methods, | ||
methods = _ref2$methods === undefined ? {} : _ref2$methods, | ||
timeout = _ref2.timeout; | ||
Penpal.connectToParent = function (_ref3) { | ||
var _ref3$parentOrigin = _ref3.parentOrigin, | ||
parentOrigin = _ref3$parentOrigin === undefined ? '*' : _ref3$parentOrigin, | ||
_ref3$methods = _ref3.methods, | ||
methods = _ref3$methods === undefined ? {} : _ref3$methods, | ||
timeout = _ref3.timeout; | ||
@@ -429,0 +446,0 @@ if (window === window.top) { |
{ | ||
"name": "penpal", | ||
"version": "3.0.0-alpha.4", | ||
"version": "3.0.0-alpha.5", | ||
"description": "A promise-based library for communicating with iframes via postMessage.", | ||
@@ -5,0 +5,0 @@ "author": "Aaron Hardy <aaron@aaronhardy.com>", |
48072
885