Comparing version 5.0.0-rc1 to 5.0.0-rc2
@@ -1,1 +0,1 @@ | ||
var Penpal=function(){"use strict";var e=()=>{const e=[];let n=false;return{destroy(t){n=true;e.forEach(e=>{e(t)})},onDestroy(t){n?t():e.push(t)}}};const n={"http:":"80","https:":"443"};const t=/^(https?:)?\/\/([^/:]+)?(:(\d+))?/;const o=["file:","data:"];var r=e=>{if(e&&o.find(n=>e.startsWith(n))){return"null"}const r=document.location;const c=t.exec(e);let a;let i;let s;if(c){a=c[1]?c[1]:r.protocol;i=c[2];s=c[4]}else{a=r.protocol;i=r.hostname;s=r.port}const d=s&&s!==n[a]?":".concat(s):"";return"".concat(a,"//").concat(i).concat(d)};var c=e=>{return(...n)=>{if(e){console.log("[Penpal]",...n)}}};var a;(function(e){e["Call"]="call";e["Reply"]="reply";e["Syn"]="syn";e["SynAck"]="synAck";e["Ack"]="ack"})(a||(a={}));var i;(function(e){e["Fulfilled"]="fulfilled";e["Rejected"]="rejected"})(i||(i={}));var s;(function(e){e["ConnectionDestroyed"]="ConnectionDestroyed";e["ConnectionTimeout"]="ConnectionTimeout";e["NotInIframe"]="NotInIframe";e["NoIframeSrc"]="NoIframeSrc"})(s||(s={}));var d;(function(e){e["DataCloneError"]="DataCloneError"})(d||(d={}));var l;(function(e){e["Message"]="message"})(l||(l={}));var u=(e,n,t,o)=>{return r=>{if(r.origin!==t){e("Parent: Handshake - Received SYN message from origin ".concat(r.origin," which did not match expected origin ").concat(t));return}e("Parent: Handshake - Received SYN, responding with SYN-ACK");const c={penpal:a.SynAck,methodNames:Object.keys(n)};r.source.postMessage(c,o)}};const g=({name:e,message:n,stack:t})=>({name:e,message:n,stack:t});const m=e=>{const n=new Error;Object.keys(e).forEach(t=>n[t]=e[t]);return n};var f=(e,n,t)=>{const{localName:o,local:r,remote:c,originForSending:s,originForReceiving:u}=e;let m=false;const f=e=>{if(e.source!==c||e.data.penpal!==a.Call){return}if(e.origin!==u){t("".concat(o," received message from origin ").concat(e.origin," which did not match expected origin ").concat(u));return}const r=e.data;const{methodName:l,args:f,id:p}=r;t("".concat(o,": Received ").concat(l,"() call"));const h=e=>{return n=>{t("".concat(o,": Sending ").concat(l,"() reply"));if(m){t("".concat(o,": Unable to send ").concat(l,"() reply due to destroyed connection"));return}const r={penpal:a.Reply,id:p,resolution:e,returnValue:n};if(e===i.Rejected&&n instanceof Error){r.returnValue=g(n);r.returnValueIsError=true}try{c.postMessage(r,s)}catch(e){if(e.name===d.DataCloneError){const n={penpal:a.Reply,id:p,resolution:i.Rejected,returnValue:g(e),returnValueIsError:true};c.postMessage(n,s)}throw e}}};new Promise(e=>e(n[l].apply(n,f))).then(h(i.Fulfilled),h(i.Rejected))};r.addEventListener(l.Message,f);return()=>{m=true;r.removeEventListener(l.Message,f)}};let p=0;var h=()=>++p;var v=(e,n,t,o,r)=>{const{localName:c,local:d,remote:u,originForSending:g,originForReceiving:f}=n;let p=false;r("".concat(c,": Connecting call sender"));const v=e=>{return(...n)=>{r("".concat(c,": Sending ").concat(e,"() call"));let t;try{if(u.closed){t=true}}catch(e){t=true}if(t){o()}if(p){const n=new Error("Unable to send ".concat(e,"() call due ")+"to destroyed connection");n.code=s.ConnectionDestroyed;throw n}return new Promise((t,o)=>{const s=h();const p=n=>{if(n.source!==u||n.data.penpal!==a.Reply||n.data.id!==s){return}if(n.origin!==f){r("".concat(c," received message from origin ").concat(n.origin," which did not match expected origin ").concat(f));return}const g=n.data;r("".concat(c,": Received ").concat(e,"() reply"));d.removeEventListener(l.Message,p);let h=g.returnValue;if(g.returnValueIsError){h=m(h)}(g.resolution===i.Fulfilled?t:o)(h)};d.addEventListener(l.Message,p);const v={penpal:a.Call,id:s,methodName:e,args:n};u.postMessage(v,g)})}};t.reduce((e,n)=>{e[n]=v(n);return e},e);return()=>{p=true}};var w=(e,n,t,o,r)=>{const{destroy:c,onDestroy:a}=o;let i;let s;const d={};return o=>{if(o.origin!==n){r("Parent: Handshake - Received ACK message from origin ".concat(o.origin," which did not match expected origin ").concat(n));return}r("Parent: Handshake - Received ACK");const l={localName:"Parent",local:window,remote:o.source,originForSending:t,originForReceiving:n};if(i){i()}i=f(l,e,r);a(i);if(s){s.forEach(e=>{delete d[e]})}s=o.data.methodNames;const u=v(d,l,s,c,r);a(u);return d}};var y=e=>{if(!e.src&&!e.srcdoc){const e=new Error("Iframe must have src or srcdoc property defined.");e.code=s.NoIframeSrc;throw e}};const C=6e4;var E=(e,n)=>{const{destroy:t,onDestroy:o}=n;const r=setInterval(()=>{if(!document.contains(e)){clearInterval(r);t()}},C);o(()=>{clearInterval(r)})};var N=(e,n)=>{let t;if(e!==undefined){t=window.setTimeout(()=>{const t=new Error("Connection timed out after ".concat(e,"ms"));t.code=s.ConnectionTimeout;n(t)},e)}return()=>{clearTimeout(t)}};var R=n=>{let{iframe:t,methods:o={},childOrigin:i,timeout:d,debug:g=false}=n;const m=c(g);const f=e();const{onDestroy:p,destroy:h}=f;if(!i){y(t);i=r(t.src)}const v=i==="null"?"*":i;const C=u(m,o,i,v);const R=w(o,i,v,f,m);const S=new Promise((e,n)=>{const o=N(d,h);const r=n=>{if(n.source!==t.contentWindow||!n.data){return}if(n.data.penpal===a.Syn){C(n);return}if(n.data.penpal===a.Ack){const t=R(n);if(t){o();e(t)}return}};window.addEventListener(l.Message,r);m("Parent: Awaiting handshake");E(t,f);p(e=>{window.removeEventListener(l.Message,r);if(!e){e=new Error("Connection destroyed");e.code=s.ConnectionDestroyed}n(e)})});return{promise:S,destroy(){h()}}};var S=()=>{if(window===window.top){const e=new Error("connectToParent() must be called within an iframe");e.code=s.NotInIframe;throw e}};var k=(e,n,t,o)=>{const{destroy:r,onDestroy:c}=t;return t=>{let i=e instanceof RegExp?e.test(t.origin):e==="*"||e===t.origin;if(!i){o("Child: Handshake - Received SYN-ACK from origin ".concat(t.origin," which did not match expected origin ").concat(e));return}o("Child: Handshake - Received SYN-ACK, responding with ACK");const s=t.origin==="null"?"*":t.origin;const d={penpal:a.Ack,methodNames:Object.keys(n)};window.parent.postMessage(d,s);const l={localName:"Child",local:window,remote:window.parent,originForSending:s,originForReceiving:t.origin};const u=f(l,n,o);c(u);const g={};const m=v(g,l,t.data.methodNames,r,o);c(m);return g}};const I=()=>{try{clearTimeout()}catch(e){return false}return true};var M=(n={})=>{const{parentOrigin:t="*",methods:o={},timeout:r,debug:i=false}=n;const d=c(i);const u=e();const{destroy:g,onDestroy:m}=u;S();const f=k(t,o,u,d);const p=()=>{d("Child: Handshake - Sending SYN");const e={penpal:a.Syn};const n=t instanceof RegExp?"*":t;window.parent.postMessage(e,n)};const h=new Promise((e,n)=>{const t=N(r,g);const o=n=>{if(!I()){return}if(n.source!==parent||!n.data){return}if(n.data.penpal===a.SynAck){const r=f(n);if(r){window.removeEventListener(l.Message,o);t();e(r)}}};window.addEventListener(l.Message,o);p();m(e=>{window.removeEventListener(l.Message,o);if(!e){e=new Error("Connection destroyed");e.code=s.ConnectionDestroyed}n(e)})});return{promise:h,destroy(){g()}}};var A={connectToChild:R,connectToParent:M,ErrorCode:s};return A}(); | ||
var Penpal=function(){"use strict";var e=()=>{const e=[];let n=false;return{destroy(t){n=true;e.forEach(e=>{e(t)})},onDestroy(t){n?t():e.push(t)}}};const n={"http:":"80","https:":"443"};const t=/^(https?:)?\/\/([^/:]+)?(:(\d+))?/;const o=["file:","data:"];var r=e=>{if(e&&o.find(n=>e.startsWith(n))){return"null"}const r=document.location;const c=t.exec(e);let a;let i;let s;if(c){a=c[1]?c[1]:r.protocol;i=c[2];s=c[4]}else{a=r.protocol;i=r.hostname;s=r.port}const d=s&&s!==n[a]?":".concat(s):"";return"".concat(a,"//").concat(i).concat(d)};var c=e=>(...n)=>{if(e){console.log("[Penpal]",...n)}};var a;(function(e){e["Call"]="call";e["Reply"]="reply";e["Syn"]="syn";e["SynAck"]="synAck";e["Ack"]="ack"})(a||(a={}));var i;(function(e){e["Fulfilled"]="fulfilled";e["Rejected"]="rejected"})(i||(i={}));var s;(function(e){e["ConnectionDestroyed"]="ConnectionDestroyed";e["ConnectionTimeout"]="ConnectionTimeout";e["NotInIframe"]="NotInIframe";e["NoIframeSrc"]="NoIframeSrc"})(s||(s={}));var d;(function(e){e["DataCloneError"]="DataCloneError"})(d||(d={}));var l;(function(e){e["Message"]="message"})(l||(l={}));var u=(e,n,t,o)=>r=>{if(r.origin!==t){e("Parent: Handshake - Received SYN message from origin ".concat(r.origin," which did not match expected origin ").concat(t));return}e("Parent: Handshake - Received SYN, responding with SYN-ACK");const c={penpal:a.SynAck,methodNames:Object.keys(n)};r.source.postMessage(c,o)};const g=({name:e,message:n,stack:t})=>({name:e,message:n,stack:t});const m=e=>{const n=new Error;Object.keys(e).forEach(t=>n[t]=e[t]);return n};var f=(e,n,t)=>{const{localName:o,local:r,remote:c,originForSending:s,originForReceiving:u}=e;let m=false;const f=e=>{if(e.source!==c||e.data.penpal!==a.Call){return}if(e.origin!==u){t("".concat(o," received message from origin ").concat(e.origin," which did not match expected origin ").concat(u));return}const r=e.data;const{methodName:l,args:f,id:p}=r;t("".concat(o,": Received ").concat(l,"() call"));const h=e=>n=>{t("".concat(o,": Sending ").concat(l,"() reply"));if(m){t("".concat(o,": Unable to send ").concat(l,"() reply due to destroyed connection"));return}const r={penpal:a.Reply,id:p,resolution:e,returnValue:n};if(e===i.Rejected&&n instanceof Error){r.returnValue=g(n);r.returnValueIsError=true}try{c.postMessage(r,s)}catch(e){if(e.name===d.DataCloneError){const n={penpal:a.Reply,id:p,resolution:i.Rejected,returnValue:g(e),returnValueIsError:true};c.postMessage(n,s)}throw e}};new Promise(e=>e(n[l].apply(n,f))).then(h(i.Fulfilled),h(i.Rejected))};r.addEventListener(l.Message,f);return()=>{m=true;r.removeEventListener(l.Message,f)}};let p=0;var h=()=>++p;var v=(e,n,t,o,r)=>{const{localName:c,local:d,remote:u,originForSending:g,originForReceiving:f}=n;let p=false;r("".concat(c,": Connecting call sender"));const v=e=>(...n)=>{r("".concat(c,": Sending ").concat(e,"() call"));let t;try{if(u.closed){t=true}}catch(e){t=true}if(t){o()}if(p){const n=new Error("Unable to send ".concat(e,"() call due ")+"to destroyed connection");n.code=s.ConnectionDestroyed;throw n}return new Promise((t,o)=>{const s=h();const p=n=>{if(n.source!==u||n.data.penpal!==a.Reply||n.data.id!==s){return}if(n.origin!==f){r("".concat(c," received message from origin ").concat(n.origin," which did not match expected origin ").concat(f));return}const g=n.data;r("".concat(c,": Received ").concat(e,"() reply"));d.removeEventListener(l.Message,p);let h=g.returnValue;if(g.returnValueIsError){h=m(h)}(g.resolution===i.Fulfilled?t:o)(h)};d.addEventListener(l.Message,p);const v={penpal:a.Call,id:s,methodName:e,args:n};u.postMessage(v,g)})};t.reduce((e,n)=>{e[n]=v(n);return e},e);return()=>{p=true}};var w=(e,n,t,o,r)=>{const{destroy:c,onDestroy:a}=o;let i;let s;const d={};return o=>{if(o.origin!==n){r("Parent: Handshake - Received ACK message from origin ".concat(o.origin," which did not match expected origin ").concat(n));return}r("Parent: Handshake - Received ACK");const l={localName:"Parent",local:window,remote:o.source,originForSending:t,originForReceiving:n};if(i){i()}i=f(l,e,r);a(i);if(s){s.forEach(e=>{delete d[e]})}s=o.data.methodNames;const u=v(d,l,s,c,r);a(u);return d}};var y=e=>{if(!e.src&&!e.srcdoc){const e=new Error("Iframe must have src or srcdoc property defined.");e.code=s.NoIframeSrc;throw e}};const C=6e4;var E=(e,n)=>{const{destroy:t,onDestroy:o}=n;const r=setInterval(()=>{if(!document.contains(e)){clearInterval(r);t()}},C);o(()=>{clearInterval(r)})};var N=(e,n)=>{let t;if(e!==undefined){t=window.setTimeout(()=>{const t=new Error("Connection timed out after ".concat(e,"ms"));t.code=s.ConnectionTimeout;n(t)},e)}return()=>{clearTimeout(t)}};var R=n=>{let{iframe:t,methods:o={},childOrigin:i,timeout:d,debug:g=false}=n;const m=c(g);const f=e();const{onDestroy:p,destroy:h}=f;if(!i){y(t);i=r(t.src)}const v=i==="null"?"*":i;const C=u(m,o,i,v);const R=w(o,i,v,f,m);const S=new Promise((e,n)=>{const o=N(d,h);const r=n=>{if(n.source!==t.contentWindow||!n.data){return}if(n.data.penpal===a.Syn){C(n);return}if(n.data.penpal===a.Ack){const t=R(n);if(t){o();e(t)}return}};window.addEventListener(l.Message,r);m("Parent: Awaiting handshake");E(t,f);p(e=>{window.removeEventListener(l.Message,r);if(!e){e=new Error("Connection destroyed");e.code=s.ConnectionDestroyed}n(e)})});return{promise:S,destroy(){h()}}};var S=()=>{if(window===window.top){const e=new Error("connectToParent() must be called within an iframe");e.code=s.NotInIframe;throw e}};var k=(e,n,t,o)=>{const{destroy:r,onDestroy:c}=t;return t=>{let i=e instanceof RegExp?e.test(t.origin):e==="*"||e===t.origin;if(!i){o("Child: Handshake - Received SYN-ACK from origin ".concat(t.origin," which did not match expected origin ").concat(e));return}o("Child: Handshake - Received SYN-ACK, responding with ACK");const s=t.origin==="null"?"*":t.origin;const d={penpal:a.Ack,methodNames:Object.keys(n)};window.parent.postMessage(d,s);const l={localName:"Child",local:window,remote:window.parent,originForSending:s,originForReceiving:t.origin};const u=f(l,n,o);c(u);const g={};const m=v(g,l,t.data.methodNames,r,o);c(m);return g}};const I=()=>{try{clearTimeout()}catch(e){return false}return true};var M=(n={})=>{const{parentOrigin:t="*",methods:o={},timeout:r,debug:i=false}=n;const d=c(i);const u=e();const{destroy:g,onDestroy:m}=u;S();const f=k(t,o,u,d);const p=()=>{d("Child: Handshake - Sending SYN");const e={penpal:a.Syn};const n=t instanceof RegExp?"*":t;window.parent.postMessage(e,n)};const h=new Promise((e,n)=>{const t=N(r,g);const o=n=>{if(!I()){return}if(n.source!==parent||!n.data){return}if(n.data.penpal===a.SynAck){const r=f(n);if(r){window.removeEventListener(l.Message,o);t();e(r)}}};window.addEventListener(l.Message,o);p();m(e=>{window.removeEventListener(l.Message,o);if(!e){e=new Error("Connection destroyed");e.code=s.ConnectionDestroyed}n(e)})});return{promise:h,destroy(){g()}}};var A={connectToChild:R,connectToParent:M,ErrorCode:s};return A}(); |
{ | ||
"name": "penpal", | ||
"version": "5.0.0-rc1", | ||
"version": "5.0.0-rc2", | ||
"description": "A promise-based library for communicating with iframes via postMessage.", | ||
@@ -55,26 +55,26 @@ "author": "Aaron Hardy <aaron@aaronhardy.com>", | ||
"@babel/preset-typescript": "^7.8.3", | ||
"@metahub/karma-rollup-preprocessor": "^4.1.0", | ||
"@metahub/karma-rollup-preprocessor": "^6.0.0", | ||
"@rollup/plugin-typescript": "^4.0.0", | ||
"connect": "^3.6.6", | ||
"eslint": "^5.10.0", | ||
"eslint-config-prettier": "^4.1.0", | ||
"eslint": "^6.8.0", | ||
"eslint-config-prettier": "^6.10.1", | ||
"eslint-plugin-import": "^2.14.0", | ||
"husky": "^1.3.1", | ||
"husky": "^4.2.5", | ||
"jasmine-core": "^3.3.0", | ||
"karma": "^3.1.4", | ||
"karma": "^5.0.2", | ||
"karma-babel-preprocessor": "^8.0.0-beta.0", | ||
"karma-chrome-launcher": "^2.2.0", | ||
"karma-chrome-launcher": "^3.1.0", | ||
"karma-firefox-launcher": "^1.1.0", | ||
"karma-jasmine": "^2.0.1", | ||
"karma-sauce-launcher": "^2.0.2", | ||
"karma-jasmine": "^3.1.1", | ||
"karma-sauce-launcher": "^4.1.3", | ||
"npm-run-all": "^4.1.5", | ||
"prettier": "1.15.3", | ||
"rollup": "^1.7.0", | ||
"prettier": "2.0.4", | ||
"rollup": "^2.6.1", | ||
"rollup-plugin-babel": "^4.3.2", | ||
"rollup-plugin-typescript": "^1.0.1", | ||
"serve-static": "^1.13.2", | ||
"terser": "^3.13.1", | ||
"terser": "^4.6.11", | ||
"typescript": "^3.8.3", | ||
"yargs": "^12.0.5" | ||
"yargs": "^15.3.1" | ||
} | ||
} |
@@ -26,2 +26,4 @@ [![npm version](https://badge.fury.io/js/penpal.svg)](https://badge.fury.io/js/penpal) | ||
``` | ||
Penpal.connectToChild | ||
Penpal.connectToParent | ||
Penpal.ErrorCode.ConnectionDestroyed | ||
@@ -31,4 +33,2 @@ Penpal.ErrorCode.ConnectionTimeout | ||
Penpal.ErrorCode.NoIframeSrc | ||
Penpal.connectToChild | ||
Penpal.connectToParent | ||
``` | ||
@@ -56,9 +56,9 @@ | ||
return num1 + num2; | ||
} | ||
} | ||
}, | ||
}, | ||
}); | ||
connection.promise.then(child => { | ||
child.multiply(2, 6).then(total => console.log(total)); | ||
child.divide(12, 4).then(total => console.log(total)); | ||
connection.promise.then((child) => { | ||
child.multiply(2, 6).then((total) => console.log(total)); | ||
child.divide(12, 4).then((total) => console.log(total)); | ||
}); | ||
@@ -80,3 +80,3 @@ ``` | ||
// Return a promise if the value being returned requires asynchronous processing. | ||
return new Promise(resolve => { | ||
return new Promise((resolve) => { | ||
setTimeout(() => { | ||
@@ -86,8 +86,8 @@ resolve(num1 / num2); | ||
}); | ||
} | ||
} | ||
}, | ||
}, | ||
}); | ||
connection.promise.then(parent => { | ||
parent.add(3, 1).then(total => console.log(total)); | ||
connection.promise.then((parent) => { | ||
parent.add(3, 1).then((total) => console.log(total)); | ||
}); | ||
@@ -94,0 +94,0 @@ ``` |
Sorry, the diff of this file is not supported yet
Major refactor
Supply chain riskPackage has recently undergone a major refactor. It may be unstable or indicate significant internal changes. Use caution when updating to versions that include significant changes.
Found 1 instance in 1 package
0
88087