dromo-uploader-js 2.0.2 → 2.0.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/DromoUploader.js +1 -1
- package/dist/DromoUploader.js.map +1 -1
- package/dist/index.d.ts +9 -1
- package/dist/index.js +2 -2
- package/dist/index.js.map +1 -1
- package/dist/interfaces.d.ts +17 -8
- package/package.json +1 -1
package/dist/DromoUploader.js
CHANGED
|
@@ -12,5 +12,5 @@ var DromoUploader=function(){"use strict";
|
|
|
12
12
|
LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
|
|
13
13
|
OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
|
|
14
14
|
PERFORMANCE OF THIS SOFTWARE.
|
|
15
|
-
***************************************************************************** */var e=function(){return(e=Object.assign||function(e){for(var t,n=1,r=arguments.length;n<r;n++)for(var o in t=arguments[n])Object.prototype.hasOwnProperty.call(t,o)&&(e[o]=t[o]);return e}).apply(this,arguments)};function t(e,t,n,r){return new(n||(n=Promise))((function(o,i){function s(e){try{c(r.next(e))}catch(e){i(e)}}function a(e){try{c(r.throw(e))}catch(e){i(e)}}function c(e){var t;e.done?o(e.value):(t=e.value,t instanceof n?t:new n((function(e){e(t)}))).then(s,a)}c((r=r.apply(e,t||[])).next())}))}function n(e,t){var n,r,o,i,s={label:0,sent:function(){if(1&o[0])throw o[1];return o[1]},trys:[],ops:[]};return i={next:a(0),throw:a(1),return:a(2)},"function"==typeof Symbol&&(i[Symbol.iterator]=function(){return this}),i;function a(i){return function(a){return function(i){if(n)throw new TypeError("Generator is already executing.");for(;s;)try{if(n=1,r&&(o=2&i[0]?r.return:i[0]?r.throw||((o=r.return)&&o.call(r),0):r.next)&&!(o=o.call(r,i[1])).done)return o;switch(r=0,o&&(i=[2&i[0],o.value]),i[0]){case 0:case 1:o=i;break;case 4:return s.label++,{value:i[1],done:!1};case 5:s.label++,r=i[1],i=[0];continue;case 7:i=s.ops.pop(),s.trys.pop();continue;default:if(!(o=s.trys,(o=o.length>0&&o[o.length-1])||6!==i[0]&&2!==i[0])){s=0;continue}if(3===i[0]&&(!o||i[1]>o[0]&&i[1]<o[3])){s.label=i[1];break}if(6===i[0]&&s.label<o[1]){s.label=o[1],o=i;break}if(o&&s.label<o[2]){s.label=o[2],s.ops.push(i);break}o[2]&&s.ops.pop(),s.trys.pop();continue}i=t.call(e,s)}catch(e){i=[6,e],r=0}finally{n=o=0}if(5&i[0])throw i[1];return{value:i[0]?i[1]:void 0,done:!0}}([i,a])}}}var r,o,i,s,a,c,l={IFRAME_URL:"https://widget.dromo.io/"}.IFRAME_URL;!function(e){e.INIT_IFRAME="INIT_IFRAME"}(r||(r={})),function(e){e.Call="call",e.Reply="reply",e.Syn="syn",e.SynAck="synAck",e.Ack="ack"}(o||(o={})),function(e){e.Fulfilled="fulfilled",e.Rejected="rejected"}(i||(i={})),function(e){e.ConnectionDestroyed="ConnectionDestroyed",e.ConnectionTimeout="ConnectionTimeout",e.NotInIframe="NotInIframe",e.NoIframeSrc="NoIframeSrc"}(s||(s={})),function(e){e.DataCloneError="DataCloneError"}(a||(a={})),function(e){e.Message="message"}(c||(c={}));const u={"http:":"80","https:":"443"},d=/^(https?:)?\/\/([^/:]+)?(:(\d+))?/,h=["file:","data:"];const f=({name:e,message:t,stack:n})=>({name:e,message:t,stack:n});let m=0;var p=()=>++m,v=(e,t,n,r,a)=>{const{localName:l,local:u,remote:d,originForSending:h,originForReceiving:f}=t;let m=!1;a(`${l}: Connecting call sender`);const v=e=>(...t)=>{let n;a(`${l}: Sending ${e}() call`);try{d.closed&&(n=!0)}catch(e){n=!0}if(n&&r(),m){const t=new Error(`Unable to send ${e}() call due to destroyed connection`);throw t.code=s.ConnectionDestroyed,t}return new Promise(((n,r)=>{const s=p(),m=t=>{if(t.source!==d||t.data.penpal!==o.Reply||t.data.id!==s)return;if(t.origin!==f)return void a(`${l} received message from origin ${t.origin} which did not match expected origin ${f}`);const h=t.data;a(`${l}: Received ${e}() reply`),u.removeEventListener(c.Message,m);let p=h.returnValue;h.returnValueIsError&&(p=(e=>{const t=new Error;return Object.keys(e).forEach((n=>t[n]=e[n])),t})(p)),(h.resolution===i.Fulfilled?n:r)(p)};u.addEventListener(c.Message,m);const v={penpal:o.Call,id:s,methodName:e,args:t};d.postMessage(v,h)}))};return n.reduce(((e,t)=>(e[t]=v(t),e)),e),()=>{m=!0}},g=(e,t,n,r,s)=>{const{destroy:l,onDestroy:u}=r;let d,h;const m={};return r=>{if(r.origin!==t)return void s(`Parent: Handshake - Received ACK message from origin ${r.origin} which did not match expected origin ${t}`);s("Parent: Handshake - Received ACK");const p={localName:"Parent",local:window,remote:r.source,originForSending:n,originForReceiving:t};d&&d(),d=((e,t,n)=>{const{localName:r,local:s,remote:l,originForSending:u,originForReceiving:d}=e;let h=!1;const m=e=>{if(e.source!==l||e.data.penpal!==o.Call)return;if(e.origin!==d)return void n(`${r} received message from origin ${e.origin} which did not match expected origin ${d}`);const s=e.data,{methodName:c,args:m,id:p}=s;n(`${r}: Received ${c}() call`);const v=e=>t=>{if(n(`${r}: Sending ${c}() reply`),h)return void n(`${r}: Unable to send ${c}() reply due to destroyed connection`);const s={penpal:o.Reply,id:p,resolution:e,returnValue:t};e===i.Rejected&&t instanceof Error&&(s.returnValue=f(t),s.returnValueIsError=!0);try{l.postMessage(s,u)}catch(e){if(e.name===a.DataCloneError){const t={penpal:o.Reply,id:p,resolution:i.Rejected,returnValue:f(e),returnValueIsError:!0};l.postMessage(t,u)}throw e}};new Promise((e=>e(t[c].apply(t,m)))).then(v(i.Fulfilled),v(i.Rejected))};return s.addEventListener(c.Message,m),()=>{h=!0,s.removeEventListener(c.Message,m)}})(p,e,s),u(d),h&&h.forEach((e=>{delete m[e]})),h=r.data.methodNames;const g=v(m,p,h,l,s);return u(g),m}};var w=e=>{let{iframe:t,methods:n={},childOrigin:r,timeout:i,debug:a=!1}=e;const l=(e=>(...t)=>{e&&console.log("[Penpal]",...t)})(a),f=(()=>{const e=[];let t=!1;return{destroy(n){t=!0,e.forEach((e=>{e(n)}))},onDestroy(n){t?n():e.push(n)}}})(),{onDestroy:m,destroy:p}=f;r||((e=>{if(!e.src&&!e.srcdoc){const e=new Error("Iframe must have src or srcdoc property defined.");throw e.code=s.NoIframeSrc,e}})(t),r=(e=>{if(e&&h.find((t=>e.startsWith(t))))return"null";const t=document.location,n=d.exec(e);let r,o,i;return n?(r=n[1]?n[1]:t.protocol,o=n[2],i=n[4]):(r=t.protocol,o=t.hostname,i=t.port),`${r}//${o}${i&&i!==u[r]?`:${i}`:""}`})(t.src));const v="null"===r?"*":r,w=((e,t,n,r)=>i=>{if(i.origin!==n)return void e(`Parent: Handshake - Received SYN message from origin ${i.origin} which did not match expected origin ${n}`);e("Parent: Handshake - Received SYN, responding with SYN-ACK");const s={penpal:o.SynAck,methodNames:Object.keys(t)};i.source.postMessage(s,r)})(l,n,r,v),k=g(n,r,v,f,l);return{promise:new Promise(((e,n)=>{const r=((e,t)=>{let n;return void 0!==e&&(n=window.setTimeout((()=>{const n=new Error(`Connection timed out after ${e}ms`);n.code=s.ConnectionTimeout,t(n)}),e)),()=>{clearTimeout(n)}})(i,p),a=n=>{if(n.source===t.contentWindow&&n.data)if(n.data.penpal!==o.Syn)if(n.data.penpal!==o.Ack);else{const t=k(n);t&&(r(),e(t))}else w(n)};window.addEventListener(c.Message,a),l("Parent: Awaiting handshake"),((e,t)=>{const{destroy:n,onDestroy:r}=t,o=setInterval((()=>{e.isConnected||(clearInterval(o),n())}),6e4);r((()=>{clearInterval(o)}))})(t,f),m((e=>{window.removeEventListener(c.Message,a),e||((e=new Error("Connection destroyed")).code=s.ConnectionDestroyed),n(e)}))})),destroy(){p()}}},k=function(t){var n=e({},t);return n.validators&&(n.validators=n.validators.map((function(t){return("regex_match"===t.validate||"regex_exclude"===t.validate)&&t.regex instanceof RegExp?e(e({},t),{regex:t.regex.source,regexOptions:{ignoreCase:t.regex.flags.includes("i"),dotAll:t.regex.flags.includes("s"),multiline:t.regex.flags.includes("m"),unicode:t.regex.flags.includes("u")}}):t}))),n};return function(){function r(r,o,i,s){var a=this;this.columnHooks=[],this.bulkRowHooks=[],this.rowHooks=[],this.stepHooks=[],this.rowDeleteHooks=[],this.initChild=function(){return t(a,void 0,void 0,(function(){var e,t,r,o;return n(this,(function(n){switch(n.label){case 0:return this.connection?[4,this.connection.promise]:(console.error("shim cannot connect with Dromo service."),[2]);case 1:return e=n.sent(),t=Array.from(document.getElementsByTagName("script")).some((function(e){return"https://unpkg.com/dromo-uploader-js/dist/DromoUploader.js"===e.src||"https://cdn.jsdelivr.net/npm/dromo-uploader-js@latest/dist/DromoUploader.js"===e.src})),this.fields&&this.settings&&this.user?(t||(this.settings.version=null!==(r=this.settings.version)&&void 0!==r?r:"v2"),this.settings.browserExcelParsing=null===(o=this.settings.browserExcelParsing)||void 0===o||o,[4,e.init(this.licenseKey,this.fields,this.settings,this.user,this.appHost)]):[3,3];case 2:return n.sent(),[3,6];case 3:return this.schemaName?[4,e.initFromSavedSchema(this.licenseKey,this.schemaName,this.appHost,{user:this.user,developmentMode:this.developmentMode,headerRowOverride:this.headerRowOverride})]:[3,5];case 4:return n.sent(),[3,6];case 5:console.error("Invalid Dromo configuration"),n.label=6;case 6:return[4,e.setNumRegisteredRowHooks(this.totalNumRowHooks())];case 7:return n.sent(),[4,e.setNumRegisteredColHooks(this.columnHooks.length)];case 8:return n.sent(),[4,e.setNumRegisteredRowDeleteHooks(this.rowDeleteHooks.length)];case 9:return n.sent(),[2]}}))}))},this.initIFrame=function(){var e,t;if(!document.getElementById(a.iframeId)){var n=document.createElement("iframe"),r=null!==(t=null===(e=a.settings)||void 0===e?void 0:e.importIdentifier)&&void 0!==t?t:a.schemaName;n.title=r?"Dromo Importer: "+r:"Dromo Importer",n.src=window.DROMO_WIDGET_OVERRIDE||l,n.id=a.iframeId,n.style.height="100%",n.style.width="100%",n.style.border="0",n.crossorigin="anonymous",a.iframe=n}},this.createConnection=function(){var r=a,o=a.iframe;o?a.connection=w({iframe:o,methods:{handleColumnHooks:function(o,i){return t(this,void 0,void 0,(function(){var s,a,c,l,u=this;return n(this,(function(d){switch(d.label){case 0:return s=r.columnHooks.filter((function(e){return e.fieldName===o})),a=new Map,c=i,[4,s.reduce((function(e,r){return t(u,void 0,void 0,(function(){var o=this;return n(this,(function(i){switch(i.label){case 0:return[4,e.then((function(){return t(o,void 0,void 0,(function(){var e;return n(this,(function(t){switch(t.label){case 0:return t.trys.push([0,2,,3]),[4,r.callback(c)];case 1:return t.sent().forEach((function(e){if(void 0!==e.value||void 0!==e.info){var t={};void 0!==e.value&&(t.value=e.value,c[e.index]=e.value),void 0!==e.info&&(t.info=e.info),a.set(e.index,t)}})),[3,3];case 2:return e=t.sent(),console.error("[Dromo-External-Error] There was an error running your col hook.",e),[3,3];case 3:return[2]}}))}))}))];case 1:return i.sent(),[2]}}))}))}),Promise.resolve())];case 1:return d.sent(),l=[],a.forEach((function(t,n){return l.push(e(e({},t),{index:n}))})),[2,l]}}))}))},handleRowHooks:function(e,o){return t(this,void 0,void 0,(function(){var i,s,a,c,l,u,d,h,f,m,p,v,g=this;return n(this,(function(w){switch(w.label){case 0:i=new Map,s=new Map(e.map((function(e){return[e.index,e]}))),a=function(e,t){for(var n,r=0,o=Object.entries(null!=t?t:{});r<o.length;r++){var a=o[r],c=a[0],l=a[1];if(void 0===l.value&&void 0===l.info&&void 0===l.selectOptions)return;var u=s.get(e),d=i.get(e)||{},h=null!==(n=d[c])&&void 0!==n?n:{};void 0!==l.value&&(h.value=l.value,u.row[c].value=l.value),void 0!==l.info&&(h.info=l.info,u.row[c].info=l.info),void 0!==l.selectOptions&&(h.selectOptions=l.selectOptions,u.row[c].selectOptions=l.selectOptions),d[c]=h,i.set(e,d)}},c=0,l=r.bulkRowHooks,w.label=1;case 1:if(!(c<l.length))return[3,6];u=l[c],w.label=2;case 2:return w.trys.push([2,4,,5]),[4,u(e,o)];case 3:for(d=w.sent(),h=0,f=d;h<f.length;h++)m=f[h],a(m.index,m.row);return[3,5];case 4:return p=w.sent(),console.error("[Dromo-External-Error] There was an error running your bulk row hook.",p),[3,5];case 5:return c++,[3,1];case 6:return[4,Promise.all(e.map((function(e){return t(g,void 0,void 0,(function(){var t,i,s,c,l;return n(this,(function(n){switch(n.label){case 0:t=0,i=r.rowHooks,n.label=1;case 1:if(!(t<i.length))return[3,6];s=i[t],n.label=2;case 2:return n.trys.push([2,4,,5]),[4,s.callback(e,o)];case 3:return c=n.sent(),a(e.index,c.row),[3,5];case 4:return l=n.sent(),console.error("[Dromo-External-Error] There was an error running your row hook.",l),[3,5];case 5:return t++,[3,1];case 6:return[2]}}))}))})))];case 7:return w.sent(),v=[],i.forEach((function(e,t){v.push({index:t,row:e})})),[2,v]}}))}))},handleStepHook:function(e,t){r.stepHooks.forEach((function(n){if(e===n.type)try{n.callback(r,t)}catch(e){console.error("[Dromo-External-Error] There was an error in your step callback.",e)}}))},handleRowDeleteHooks:function(e){var o=this;return Promise.all(e.map((function(e){return t(o,void 0,void 0,(function(){var o=this;return n(this,(function(i){switch(i.label){case 0:return[4,r.rowDeleteHooks.forEach((function(r){return t(o,void 0,void 0,(function(){var t;return n(this,(function(n){switch(n.label){case 0:return n.trys.push([0,2,,3]),[4,r(e)];case 1:return n.sent(),[3,3];case 2:return t=n.sent(),console.error("[Dromo-External-Error] There was an error running your row delete hook.",t),[3,3];case 3:return[2]}}))}))}))];case 1:return i.sent(),[2]}}))}))})))},handleBeforeFinishCallback:function(e,o){return t(this,void 0,void 0,(function(){var t;return n(this,(function(n){switch(n.label){case 0:if(!r.beforeFinishCallback)return[3,4];n.label=1;case 1:return n.trys.push([1,3,,4]),[4,r.beforeFinishCallback(e,o,r)];case 2:return[2,n.sent()];case 3:return t=n.sent(),console.error("[Dromo-External-Error] There was an error in your beforeFinish callback.",t),[3,4];case 4:return[2]}}))}))},handleResults:function(e,o){return t(this,void 0,void 0,(function(){var t;return n(this,(function(n){switch(n.label){case 0:if(!r.resultsCallback)return[3,4];n.label=1;case 1:return n.trys.push([1,3,,4]),[4,r.resultsCallback(e,o)];case 2:return n.sent(),[3,4];case 3:return t=n.sent(),console.error("[Dromo-External-Error] There was an error in your onResult callback.",t),[3,4];case 4:return r.close(),[2]}}))}))},handleCloseModal:function(){r.close()},handleCancel:function(){if(r.cancelCallback)try{r.cancelCallback()}catch(e){console.error("[Dromo-External-Error] There was an error in your cancel callback.",e)}r.close()}}}):console.error("shim cannot connect to Dromo.")},this.mountIFrame=function(){if(!document.getElementById(a.iframeId)){var e=document.createElement("div");e.id=a.wrapperId,e.style.zIndex=Number.MAX_SAFE_INTEGER.toString(),e.style.visibility="hidden",e.style.width="0px",e.style.height="0px",e.style.position="fixed",e.style.top="0px",e.style.left="0px",e.style.right="0px",e.style.bottom="0px",e.appendChild(a.iframe),document.body.appendChild(e),a.wrapper=e}},this.showIFrame=function(){a.wrapper&&(a.wrapper.style.visibility="visible",a.wrapper.style.width="100%",a.wrapper.style.height="100%",document.body.style.overflow="hidden")},this.registerColumnHook=function(e,t){a.columnHooks.push({fieldName:e,callback:t}),a.connection&&a.connection.promise.then((function(e){e.setNumRegisteredColHooks(a.columnHooks.length)}))},this.totalNumRowHooks=function(){return a.rowHooks.length+a.bulkRowHooks.length},this.registerBulkRowHook=function(e){a.bulkRowHooks.push(e),a.connection&&a.connection.promise.then((function(e){e.setNumRegisteredRowHooks(a.totalNumRowHooks())}))},this.registerRowHook=function(e){a.rowHooks.push({callback:e}),a.connection&&a.connection.promise.then((function(e){e.setNumRegisteredRowHooks(a.totalNumRowHooks())}))},this.registerStepHook=function(e,t){a.stepHooks.push({type:e,callback:t})},this.registerRowDeleteHook=function(e){a.rowDeleteHooks.push(e),a.connection&&a.connection.promise.then((function(e){e.setNumRegisteredRowDeleteHooks(a.rowDeleteHooks.length)}))},this.beforeFinish=function(e){a.beforeFinishCallback=e},this.registerAllHooks=function(e){if(e.columnHooks)for(var t=0,n=e.columnHooks;t<n.length;t++){var r=n[t],o=r.fieldName,i=r.callback;a.registerColumnHook(o,i)}if(e.rowHooks)for(var s=0,c=e.rowHooks;s<c.length;s++){var l=c[s];a.registerRowHook(l)}if(e.bulkRowHooks)for(var u=0,d=e.bulkRowHooks;u<d.length;u++){var h=d[u];a.registerBulkRowHook(h)}if(e.rowDeleteHooks)for(var f=0,m=e.rowDeleteHooks;f<m.length;f++){var p=m[f];a.registerRowDeleteHook(p)}if(e.stepHooks)for(var v=0,g=e.stepHooks;v<g.length;v++){var w=g[v],k=w.type;i=w.callback;a.registerStepHook(k,i)}e.beforeFinishCallback&&a.beforeFinish(e.beforeFinishCallback)},this.onResults=function(e){a.resultsCallback=e},this.onCancel=function(e){a.cancelCallback=e},this.setUser=function(e){return t(a,void 0,void 0,(function(){return n(this,(function(t){switch(t.label){case 0:return this.user=e,this.connection?[4,this.connection.promise]:[3,3];case 1:return[4,t.sent().setUser(this.user)];case 2:t.sent(),t.label=3;case 3:return[2]}}))}))},this.addField=function(e,r){return t(a,void 0,void 0,(function(){return n(this,(function(t){switch(t.label){case 0:return this.connection?[4,this.connection.promise]:[3,3];case 1:return[4,t.sent().addField(k(e),r)];case 2:return t.sent(),[3,4];case 3:console.error("[Dromo-Error] Invalid connection to Dromo Uploader."),t.label=4;case 4:return[2]}}))}))},this.removeField=function(e){return t(a,void 0,void 0,(function(){return n(this,(function(t){switch(t.label){case 0:return this.connection?[4,this.connection.promise]:[3,3];case 1:return[4,t.sent().removeField(e)];case 2:return t.sent(),[3,4];case 3:console.error("[Dromo-Error] Invalid connection to Dromo Uploader."),t.label=4;case 4:return[2]}}))}))},this.updateInfoMessages=function(e){return t(a,void 0,void 0,(function(){return n(this,(function(t){switch(t.label){case 0:return this.connection?[4,this.connection.promise]:[3,3];case 1:return[4,t.sent().updateInfoMessages(e)];case 2:return t.sent(),[3,4];case 3:console.error("[Dromo-Error] Invalid connection to Dromo Uploader."),t.label=4;case 4:return[2]}}))}))},this.setHeaderRowOverride=function(e){return t(a,void 0,void 0,(function(){return n(this,(function(t){switch(t.label){case 0:return this.headerRowOverride=e,this.connection?[4,this.connection.promise]:[3,3];case 1:return[4,t.sent().setHeaderRowOverride(e)];case 2:t.sent(),t.label=3;case 3:return[2]}}))}))},this.open=function(){return t(a,void 0,void 0,(function(){return n(this,(function(e){switch(e.label){case 0:return this.wrapper||(this.initIFrame(),this.createConnection(),this.mountIFrame()),[4,this.initChild()];case 1:return e.sent(),this.showIFrame(),[2]}}))}))},this.close=function(){a.wrapper&&(a.wrapper.style.visibility="hidden",a.wrapper.style.width="0px",a.wrapper.style.height="0px",document.body.style.overflow="inherit")},this.setDevelopmentMode=function(e){return t(a,void 0,void 0,(function(){return n(this,(function(t){switch(t.label){case 0:return this.developmentMode=e,this.connection?[4,this.connection.promise]:[3,3];case 1:return[4,t.sent().setDevelopmentMode(this.developmentMode)];case 2:t.sent(),t.label=3;case 3:return[2]}}))}))},this.rehydrate=function(e,r){return t(a,void 0,void 0,(function(){return n(this,(function(t){switch(t.label){case 0:return this.wrapper||(this.initIFrame(),this.createConnection(),this.mountIFrame()),[4,this.initChild()];case 1:return t.sent(),[4,this.connection.promise];case 2:return[4,t.sent().rehydrate(e,r)];case 3:return t.sent(),this.showIFrame(),[2]}}))}))},this.iframeId=Math.random().toString(36).substring(7)+"-dromo-iframe-element",this.wrapperId=Math.random().toString(36).substring(7)+"-dromo-container",this.appHost=document.location.hostname,void 0!==i&&void 0!==s?(this.licenseKey=r,this.fields=o.map(k),this.settings=i,this.user=s):(this.licenseKey=r,this.schemaName=o)}return r.rehydrateHeadless=function(e){var o=e.licenseKey,i=e.headlessImportId,s=e.fields,a=e.settings,c=e.hooks,l=e.rehydrateState;return t(void 0,void 0,void 0,(function(){var e;return n(this,(function(t){switch(t.label){case 0:return(e=new r(o,s,a,{id:"headless-review"})).registerAllHooks(c),[4,e.rehydrate(l,i)];case 1:return t.sent(),e.open(),[2]}}))}))},r}()}();
|
|
15
|
+
***************************************************************************** */var e=function(){return(e=Object.assign||function(e){for(var n,t=1,r=arguments.length;t<r;t++)for(var o in n=arguments[t])Object.prototype.hasOwnProperty.call(n,o)&&(e[o]=n[o]);return e}).apply(this,arguments)};function n(e,n,t,r){return new(t||(t=Promise))((function(o,i){function s(e){try{a(r.next(e))}catch(e){i(e)}}function c(e){try{a(r.throw(e))}catch(e){i(e)}}function a(e){var n;e.done?o(e.value):(n=e.value,n instanceof t?n:new t((function(e){e(n)}))).then(s,c)}a((r=r.apply(e,n||[])).next())}))}function t(e,n){var t,r,o,i,s={label:0,sent:function(){if(1&o[0])throw o[1];return o[1]},trys:[],ops:[]};return i={next:c(0),throw:c(1),return:c(2)},"function"==typeof Symbol&&(i[Symbol.iterator]=function(){return this}),i;function c(i){return function(c){return function(i){if(t)throw new TypeError("Generator is already executing.");for(;s;)try{if(t=1,r&&(o=2&i[0]?r.return:i[0]?r.throw||((o=r.return)&&o.call(r),0):r.next)&&!(o=o.call(r,i[1])).done)return o;switch(r=0,o&&(i=[2&i[0],o.value]),i[0]){case 0:case 1:o=i;break;case 4:return s.label++,{value:i[1],done:!1};case 5:s.label++,r=i[1],i=[0];continue;case 7:i=s.ops.pop(),s.trys.pop();continue;default:if(!(o=s.trys,(o=o.length>0&&o[o.length-1])||6!==i[0]&&2!==i[0])){s=0;continue}if(3===i[0]&&(!o||i[1]>o[0]&&i[1]<o[3])){s.label=i[1];break}if(6===i[0]&&s.label<o[1]){s.label=o[1],o=i;break}if(o&&s.label<o[2]){s.label=o[2],s.ops.push(i);break}o[2]&&s.ops.pop(),s.trys.pop();continue}i=n.call(e,s)}catch(e){i=[6,e],r=0}finally{t=o=0}if(5&i[0])throw i[1];return{value:i[0]?i[1]:void 0,done:!0}}([i,c])}}}var r,o,i,s,c,a,l={IFRAME_URL:"https://widget.dromo.io/"}.IFRAME_URL;!function(e){e.INIT_IFRAME="INIT_IFRAME"}(r||(r={})),function(e){e.Call="call",e.Reply="reply",e.Syn="syn",e.SynAck="synAck",e.Ack="ack"}(o||(o={})),function(e){e.Fulfilled="fulfilled",e.Rejected="rejected"}(i||(i={})),function(e){e.ConnectionDestroyed="ConnectionDestroyed",e.ConnectionTimeout="ConnectionTimeout",e.NotInIframe="NotInIframe",e.NoIframeSrc="NoIframeSrc"}(s||(s={})),function(e){e.DataCloneError="DataCloneError"}(c||(c={})),function(e){e.Message="message"}(a||(a={}));const u={"http:":"80","https:":"443"},d=/^(https?:)?\/\/([^/:]+)?(:(\d+))?/,h=["file:","data:"];const f=({name:e,message:n,stack:t})=>({name:e,message:n,stack:t});let m=0;var p=()=>++m,v=(e,n,t,r,c)=>{const{localName:l,local:u,remote:d,originForSending:h,originForReceiving:f}=n;let m=!1;c(`${l}: Connecting call sender`);const v=e=>(...n)=>{let t;c(`${l}: Sending ${e}() call`);try{d.closed&&(t=!0)}catch(e){t=!0}if(t&&r(),m){const n=new Error(`Unable to send ${e}() call due to destroyed connection`);throw n.code=s.ConnectionDestroyed,n}return new Promise(((t,r)=>{const s=p(),m=n=>{if(n.source!==d||n.data.penpal!==o.Reply||n.data.id!==s)return;if(n.origin!==f)return void c(`${l} received message from origin ${n.origin} which did not match expected origin ${f}`);const h=n.data;c(`${l}: Received ${e}() reply`),u.removeEventListener(a.Message,m);let p=h.returnValue;h.returnValueIsError&&(p=(e=>{const n=new Error;return Object.keys(e).forEach((t=>n[t]=e[t])),n})(p)),(h.resolution===i.Fulfilled?t:r)(p)};u.addEventListener(a.Message,m);const v={penpal:o.Call,id:s,methodName:e,args:n};d.postMessage(v,h)}))};return t.reduce(((e,n)=>(e[n]=v(n),e)),e),()=>{m=!0}},w=(e,n,t,r,s)=>{const{destroy:l,onDestroy:u}=r;let d,h;const m={};return r=>{if(r.origin!==n)return void s(`Parent: Handshake - Received ACK message from origin ${r.origin} which did not match expected origin ${n}`);s("Parent: Handshake - Received ACK");const p={localName:"Parent",local:window,remote:r.source,originForSending:t,originForReceiving:n};d&&d(),d=((e,n,t)=>{const{localName:r,local:s,remote:l,originForSending:u,originForReceiving:d}=e;let h=!1;const m=e=>{if(e.source!==l||e.data.penpal!==o.Call)return;if(e.origin!==d)return void t(`${r} received message from origin ${e.origin} which did not match expected origin ${d}`);const s=e.data,{methodName:a,args:m,id:p}=s;t(`${r}: Received ${a}() call`);const v=e=>n=>{if(t(`${r}: Sending ${a}() reply`),h)return void t(`${r}: Unable to send ${a}() reply due to destroyed connection`);const s={penpal:o.Reply,id:p,resolution:e,returnValue:n};e===i.Rejected&&n instanceof Error&&(s.returnValue=f(n),s.returnValueIsError=!0);try{l.postMessage(s,u)}catch(e){if(e.name===c.DataCloneError){const n={penpal:o.Reply,id:p,resolution:i.Rejected,returnValue:f(e),returnValueIsError:!0};l.postMessage(n,u)}throw e}};new Promise((e=>e(n[a].apply(n,m)))).then(v(i.Fulfilled),v(i.Rejected))};return s.addEventListener(a.Message,m),()=>{h=!0,s.removeEventListener(a.Message,m)}})(p,e,s),u(d),h&&h.forEach((e=>{delete m[e]})),h=r.data.methodNames;const w=v(m,p,h,l,s);return u(w),m}};var g=e=>{let{iframe:n,methods:t={},childOrigin:r,timeout:i,debug:c=!1}=e;const l=(e=>(...n)=>{e&&console.log("[Penpal]",...n)})(c),f=(()=>{const e=[];let n=!1;return{destroy(t){n=!0,e.forEach((e=>{e(t)}))},onDestroy(t){n?t():e.push(t)}}})(),{onDestroy:m,destroy:p}=f;r||((e=>{if(!e.src&&!e.srcdoc){const e=new Error("Iframe must have src or srcdoc property defined.");throw e.code=s.NoIframeSrc,e}})(n),r=(e=>{if(e&&h.find((n=>e.startsWith(n))))return"null";const n=document.location,t=d.exec(e);let r,o,i;return t?(r=t[1]?t[1]:n.protocol,o=t[2],i=t[4]):(r=n.protocol,o=n.hostname,i=n.port),`${r}//${o}${i&&i!==u[r]?`:${i}`:""}`})(n.src));const v="null"===r?"*":r,g=((e,n,t,r)=>i=>{if(i.origin!==t)return void e(`Parent: Handshake - Received SYN message from origin ${i.origin} which did not match expected origin ${t}`);e("Parent: Handshake - Received SYN, responding with SYN-ACK");const s={penpal:o.SynAck,methodNames:Object.keys(n)};i.source.postMessage(s,r)})(l,t,r,v),k=w(t,r,v,f,l);return{promise:new Promise(((e,t)=>{const r=((e,n)=>{let t;return void 0!==e&&(t=window.setTimeout((()=>{const t=new Error(`Connection timed out after ${e}ms`);t.code=s.ConnectionTimeout,n(t)}),e)),()=>{clearTimeout(t)}})(i,p),c=t=>{if(t.source===n.contentWindow&&t.data)if(t.data.penpal!==o.Syn)if(t.data.penpal!==o.Ack);else{const n=k(t);n&&(r(),e(n))}else g(t)};window.addEventListener(a.Message,c),l("Parent: Awaiting handshake"),((e,n)=>{const{destroy:t,onDestroy:r}=n,o=setInterval((()=>{e.isConnected||(clearInterval(o),t())}),6e4);r((()=>{clearInterval(o)}))})(n,f),m((e=>{window.removeEventListener(a.Message,c),e||((e=new Error("Connection destroyed")).code=s.ConnectionDestroyed),t(e)}))})),destroy(){p()}}},k=function(n){var t=e({},n);return t.validators&&(t.validators=t.validators.map((function(n){return("regex_match"===n.validate||"regex_exclude"===n.validate)&&n.regex instanceof RegExp?e(e({},n),{regex:n.regex.source,regexOptions:{ignoreCase:n.regex.flags.includes("i"),dotAll:n.regex.flags.includes("s"),multiline:n.regex.flags.includes("m"),unicode:n.regex.flags.includes("u")}}):n}))),t};return function(){function r(r,o,i,s){var c=this;this.columnHooks=[],this.bulkRowHooks=[],this.rowHooks=[],this.stepHooks=[],this.rowDeleteHooks=[],this.initChild=function(){return n(c,void 0,void 0,(function(){var n,r,o,i,s;return t(this,(function(t){switch(t.label){case 0:return this.connection?[4,this.connection.promise]:(console.error("shim cannot connect with Dromo service."),[2]);case 1:return n=t.sent(),r=Array.from(document.getElementsByTagName("script")).some((function(e){return"https://unpkg.com/dromo-uploader-js/dist/DromoUploader.js"===e.src||"https://cdn.jsdelivr.net/npm/dromo-uploader-js@latest/dist/DromoUploader.js"===e.src})),this.fields&&this.settings&&this.user?(o=e({},this.settings),r||(o.version=null!==(i=o.version)&&void 0!==i?i:"v2"),o.browserExcelParsing=null===(s=o.browserExcelParsing)||void 0===s||s,[4,n.init(this.licenseKey,this.fields,o,this.user,this.appHost)]):[3,3];case 2:return t.sent(),[3,6];case 3:return this.schemaName?[4,n.initFromSavedSchema(this.licenseKey,this.schemaName,this.appHost,{user:this.user,developmentMode:this.developmentMode,headerRowOverride:this.headerRowOverride})]:[3,5];case 4:return t.sent(),[3,6];case 5:console.error("Invalid Dromo configuration"),t.label=6;case 6:return[4,n.setNumRegisteredRowHooks(this.totalNumRowHooks())];case 7:return t.sent(),[4,n.setNumRegisteredColHooks(this.columnHooks.length)];case 8:return t.sent(),[4,n.setNumRegisteredRowDeleteHooks(this.rowDeleteHooks.length)];case 9:return t.sent(),[2]}}))}))},this.initIFrame=function(){var e,n;if(!document.getElementById(c.iframeId)){var t=document.createElement("iframe"),r=null!==(n=null===(e=c.settings)||void 0===e?void 0:e.importIdentifier)&&void 0!==n?n:c.schemaName;t.title=r?"Dromo Importer: "+r:"Dromo Importer",t.src=window.DROMO_WIDGET_OVERRIDE||l,t.id=c.iframeId,t.style.height="100%",t.style.width="100%",t.style.border="0",t.crossorigin="anonymous",c.iframe=t}},this.createConnection=function(){var r=c,o=c.iframe;o?c.connection=g({iframe:o,methods:{handleColumnHooks:function(o,i){return n(this,void 0,void 0,(function(){var s,c,a,l,u=this;return t(this,(function(d){switch(d.label){case 0:return s=r.columnHooks.filter((function(e){return e.fieldName===o})),c=new Map,a=i,[4,s.reduce((function(e,r){return n(u,void 0,void 0,(function(){var o=this;return t(this,(function(i){switch(i.label){case 0:return[4,e.then((function(){return n(o,void 0,void 0,(function(){var e;return t(this,(function(n){switch(n.label){case 0:return n.trys.push([0,2,,3]),[4,r.callback(a)];case 1:return n.sent().forEach((function(e){if(void 0!==e.value||void 0!==e.info){var n={};void 0!==e.value&&(n.value=e.value,a[e.index]=e.value),void 0!==e.info&&(n.info=e.info),c.set(e.index,n)}})),[3,3];case 2:return e=n.sent(),console.error("[Dromo-External-Error] There was an error running your col hook.",e),[3,3];case 3:return[2]}}))}))}))];case 1:return i.sent(),[2]}}))}))}),Promise.resolve())];case 1:return d.sent(),l=[],c.forEach((function(n,t){return l.push(e(e({},n),{index:t}))})),[2,l]}}))}))},handleRowHooks:function(e,o){return n(this,void 0,void 0,(function(){var i,s,c,a,l,u,d,h,f,m,p,v,w=this;return t(this,(function(g){switch(g.label){case 0:i=new Map,s=new Map(e.map((function(e){return[e.index,e]}))),c=function(e,n){for(var t,r=0,o=Object.entries(null!=n?n:{});r<o.length;r++){var c=o[r],a=c[0],l=c[1];if(void 0===l.value&&void 0===l.info&&void 0===l.selectOptions)return;var u=s.get(e),d=i.get(e)||{},h=null!==(t=d[a])&&void 0!==t?t:{};void 0!==l.value&&(h.value=l.value,u.row[a].value=l.value),void 0!==l.info&&(h.info=l.info,u.row[a].info=l.info),void 0!==l.selectOptions&&(h.selectOptions=l.selectOptions,u.row[a].selectOptions=l.selectOptions),d[a]=h,i.set(e,d)}},a=0,l=r.bulkRowHooks,g.label=1;case 1:if(!(a<l.length))return[3,6];u=l[a],g.label=2;case 2:return g.trys.push([2,4,,5]),[4,u(e,o)];case 3:for(d=g.sent(),h=0,f=d;h<f.length;h++)m=f[h],c(m.index,m.row);return[3,5];case 4:return p=g.sent(),console.error("[Dromo-External-Error] There was an error running your bulk row hook.",p),[3,5];case 5:return a++,[3,1];case 6:return[4,Promise.all(e.map((function(e){return n(w,void 0,void 0,(function(){var n,i,s,a,l;return t(this,(function(t){switch(t.label){case 0:n=0,i=r.rowHooks,t.label=1;case 1:if(!(n<i.length))return[3,6];s=i[n],t.label=2;case 2:return t.trys.push([2,4,,5]),[4,s.callback(e,o)];case 3:return a=t.sent(),c(e.index,a.row),[3,5];case 4:return l=t.sent(),console.error("[Dromo-External-Error] There was an error running your row hook.",l),[3,5];case 5:return n++,[3,1];case 6:return[2]}}))}))})))];case 7:return g.sent(),v=[],i.forEach((function(e,n){v.push({index:n,row:e})})),[2,v]}}))}))},handleStepHook:function(e,n){r.stepHooks.forEach((function(t){if(e===t.type)try{t.callback(r,n)}catch(e){console.error("[Dromo-External-Error] There was an error in your step callback.",e)}}))},handleRowDeleteHooks:function(e){var o=this;return Promise.all(e.map((function(e){return n(o,void 0,void 0,(function(){var o=this;return t(this,(function(i){switch(i.label){case 0:return[4,r.rowDeleteHooks.forEach((function(r){return n(o,void 0,void 0,(function(){var n;return t(this,(function(t){switch(t.label){case 0:return t.trys.push([0,2,,3]),[4,r(e)];case 1:return t.sent(),[3,3];case 2:return n=t.sent(),console.error("[Dromo-External-Error] There was an error running your row delete hook.",n),[3,3];case 3:return[2]}}))}))}))];case 1:return i.sent(),[2]}}))}))})))},handleBeforeFinishCallback:function(e,o){return n(this,void 0,void 0,(function(){var n;return t(this,(function(t){switch(t.label){case 0:if(!r.beforeFinishCallback)return[3,4];t.label=1;case 1:return t.trys.push([1,3,,4]),[4,r.beforeFinishCallback(e,o,r)];case 2:return[2,t.sent()];case 3:return n=t.sent(),console.error("[Dromo-External-Error] There was an error in your beforeFinish callback.",n),[3,4];case 4:return[2]}}))}))},handleResults:function(e,o){return n(this,void 0,void 0,(function(){var n;return t(this,(function(t){switch(t.label){case 0:if(!r.resultsCallback)return[3,4];t.label=1;case 1:return t.trys.push([1,3,,4]),[4,r.resultsCallback(e,o)];case 2:return t.sent(),[3,4];case 3:return n=t.sent(),console.error("[Dromo-External-Error] There was an error in your onResult callback.",n),[3,4];case 4:return r.close(),[2]}}))}))},handleCloseModal:function(){r.close()},handleCancel:function(){if(r.cancelCallback)try{r.cancelCallback()}catch(e){console.error("[Dromo-External-Error] There was an error in your cancel callback.",e)}r.close()}}}):console.error("shim cannot connect to Dromo.")},this.mountIFrame=function(){if(!document.getElementById(c.iframeId)){var e=document.createElement("div");e.id=c.wrapperId,e.style.zIndex=Number.MAX_SAFE_INTEGER.toString(),e.style.visibility="hidden",e.style.width="0px",e.style.height="0px",e.style.position="fixed",e.style.top="0px",e.style.left="0px",e.style.right="0px",e.style.bottom="0px",e.appendChild(c.iframe),document.body.appendChild(e),c.wrapper=e}},this.showIFrame=function(){c.wrapper&&(c.wrapper.style.visibility="visible",c.wrapper.style.width="100%",c.wrapper.style.height="100%",document.body.style.overflow="hidden")},this.registerColumnHook=function(e,n){c.columnHooks.push({fieldName:e,callback:n}),c.connection&&c.connection.promise.then((function(e){e.setNumRegisteredColHooks(c.columnHooks.length)}))},this.totalNumRowHooks=function(){return c.rowHooks.length+c.bulkRowHooks.length},this.registerBulkRowHook=function(e){c.bulkRowHooks.push(e),c.connection&&c.connection.promise.then((function(e){e.setNumRegisteredRowHooks(c.totalNumRowHooks())}))},this.registerRowHook=function(e){c.rowHooks.push({callback:e}),c.connection&&c.connection.promise.then((function(e){e.setNumRegisteredRowHooks(c.totalNumRowHooks())}))},this.registerStepHook=function(e,n){c.stepHooks.push({type:e,callback:n})},this.registerRowDeleteHook=function(e){c.rowDeleteHooks.push(e),c.connection&&c.connection.promise.then((function(e){e.setNumRegisteredRowDeleteHooks(c.rowDeleteHooks.length)}))},this.beforeFinish=function(e){c.beforeFinishCallback=e},this.registerAllHooks=function(e){if(e.columnHooks)for(var n=0,t=e.columnHooks;n<t.length;n++){var r=t[n],o=r.fieldName,i=r.callback;c.registerColumnHook(o,i)}if(e.rowHooks)for(var s=0,a=e.rowHooks;s<a.length;s++){var l=a[s];c.registerRowHook(l)}if(e.bulkRowHooks)for(var u=0,d=e.bulkRowHooks;u<d.length;u++){var h=d[u];c.registerBulkRowHook(h)}if(e.rowDeleteHooks)for(var f=0,m=e.rowDeleteHooks;f<m.length;f++){var p=m[f];c.registerRowDeleteHook(p)}if(e.stepHooks)for(var v=0,w=e.stepHooks;v<w.length;v++){var g=w[v],k=g.type;i=g.callback;c.registerStepHook(k,i)}e.beforeFinishCallback&&c.beforeFinish(e.beforeFinishCallback)},this.onResults=function(e){c.resultsCallback=e},this.onCancel=function(e){c.cancelCallback=e},this.setUser=function(e){return n(c,void 0,void 0,(function(){return t(this,(function(n){switch(n.label){case 0:return this.user=e,this.connection?[4,this.connection.promise]:[3,3];case 1:return[4,n.sent().setUser(this.user)];case 2:n.sent(),n.label=3;case 3:return[2]}}))}))},this.addField=function(e,r){return n(c,void 0,void 0,(function(){return t(this,(function(n){switch(n.label){case 0:return this.connection?[4,this.connection.promise]:[3,3];case 1:return[4,n.sent().addField(k(e),r)];case 2:return n.sent(),[3,4];case 3:console.error("[Dromo-Error] Invalid connection to Dromo Uploader."),n.label=4;case 4:return[2]}}))}))},this.removeField=function(e){return n(c,void 0,void 0,(function(){return t(this,(function(n){switch(n.label){case 0:return this.connection?[4,this.connection.promise]:[3,3];case 1:return[4,n.sent().removeField(e)];case 2:return n.sent(),[3,4];case 3:console.error("[Dromo-Error] Invalid connection to Dromo Uploader."),n.label=4;case 4:return[2]}}))}))},this.updateInfoMessages=function(e){return n(c,void 0,void 0,(function(){return t(this,(function(n){switch(n.label){case 0:return this.connection?[4,this.connection.promise]:[3,3];case 1:return[4,n.sent().updateInfoMessages(e)];case 2:return n.sent(),[3,4];case 3:console.error("[Dromo-Error] Invalid connection to Dromo Uploader."),n.label=4;case 4:return[2]}}))}))},this.setHeaderRowOverride=function(e){return n(c,void 0,void 0,(function(){return t(this,(function(n){switch(n.label){case 0:return this.headerRowOverride=e,this.connection?[4,this.connection.promise]:[3,3];case 1:return[4,n.sent().setHeaderRowOverride(e)];case 2:n.sent(),n.label=3;case 3:return[2]}}))}))},this.open=function(){return n(c,void 0,void 0,(function(){return t(this,(function(e){switch(e.label){case 0:return this.wrapper||(this.initIFrame(),this.createConnection(),this.mountIFrame()),[4,this.initChild()];case 1:return e.sent(),this.showIFrame(),[2]}}))}))},this.addRows=function(e){return n(c,void 0,void 0,(function(){return t(this,(function(n){switch(n.label){case 0:return this.connection?[4,this.connection.promise]:[3,3];case 1:return[4,n.sent().addRows(e)];case 2:return n.sent(),[3,4];case 3:console.error("[Dromo-Error] Invalid connection to Dromo Uploader."),n.label=4;case 4:return[2]}}))}))},this.removeRows=function(e){return n(c,void 0,void 0,(function(){return t(this,(function(n){switch(n.label){case 0:return this.connection?[4,this.connection.promise]:[3,3];case 1:return[4,n.sent().removeRows(e)];case 2:return n.sent(),[3,4];case 3:console.error("[Dromo-Error] Invalid connection to Dromo Uploader."),n.label=4;case 4:return[2]}}))}))},this.close=function(){c.wrapper&&(c.wrapper.style.visibility="hidden",c.wrapper.style.width="0px",c.wrapper.style.height="0px",document.body.style.overflow="inherit")},this.setDevelopmentMode=function(e){return n(c,void 0,void 0,(function(){return t(this,(function(n){switch(n.label){case 0:return this.developmentMode=e,this.connection?[4,this.connection.promise]:[3,3];case 1:return[4,n.sent().setDevelopmentMode(this.developmentMode)];case 2:n.sent(),n.label=3;case 3:return[2]}}))}))},this.rehydrate=function(e,r){return n(c,void 0,void 0,(function(){return t(this,(function(n){switch(n.label){case 0:return this.wrapper||(this.initIFrame(),this.createConnection(),this.mountIFrame()),[4,this.initChild()];case 1:return n.sent(),[4,this.connection.promise];case 2:return[4,n.sent().rehydrate(e,r)];case 3:return n.sent(),this.showIFrame(),[2]}}))}))},this.iframeId=Math.random().toString(36).substring(7)+"-dromo-iframe-element",this.wrapperId=Math.random().toString(36).substring(7)+"-dromo-container",this.appHost=document.location.hostname,void 0!==i&&void 0!==s?(this.licenseKey=r,this.fields=o.map(k),this.settings=i,this.user=s):(this.licenseKey=r,this.schemaName=o)}return r.rehydrateHeadless=function(e){var o=e.licenseKey,i=e.headlessImportId,s=e.fields,c=e.settings,a=e.hooks,l=e.rehydrateState;return n(void 0,void 0,void 0,(function(){var e;return t(this,(function(n){switch(n.label){case 0:return(e=new r(o,s,c,{id:"headless-review"})).registerAllHooks(a),[4,e.rehydrate(l,i)];case 1:return n.sent(),e.open(),[2]}}))}))},r}()}();
|
|
16
16
|
//# sourceMappingURL=DromoUploader.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DromoUploader.js","sources":["../node_modules/tslib/tslib.es6.js","../src/constants.ts","../node_modules/penpal/lib/enums.js","../node_modules/penpal/lib/parent/getOriginFromSrc.js","../node_modules/penpal/lib/errorSerialization.js","../node_modules/penpal/lib/generateId.js","../node_modules/penpal/lib/connectCallSender.js","../node_modules/penpal/lib/parent/handleAckMessageFactory.js","../node_modules/penpal/lib/connectCallReceiver.js","../node_modules/penpal/lib/parent/connectToChild.js","../node_modules/penpal/lib/createLogger.js","../node_modules/penpal/lib/createDestructor.js","../node_modules/penpal/lib/parent/validateIframeHasSrcOrSrcDoc.js","../node_modules/penpal/lib/parent/handleSynMessageFactory.js","../node_modules/penpal/lib/startConnectionTimeout.js","../node_modules/penpal/lib/parent/monitorIframeRemoval.js","../src/index.ts"],"sourcesContent":["/*! *****************************************************************************\r\nCopyright (c) Microsoft Corporation.\r\n\r\nPermission to use, copy, modify, and/or distribute this software for any\r\npurpose with or without fee is hereby granted.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\r\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\r\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\r\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\r\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\r\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\r\nPERFORMANCE OF THIS SOFTWARE.\r\n***************************************************************************** */\r\n/* global Reflect, Promise */\r\n\r\nvar extendStatics = function(d, b) {\r\n extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\r\n return extendStatics(d, b);\r\n};\r\n\r\nexport function __extends(d, b) {\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n}\r\n\r\nexport var __assign = function() {\r\n __assign = Object.assign || function __assign(t) {\r\n for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n s = arguments[i];\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\r\n }\r\n return t;\r\n }\r\n return __assign.apply(this, arguments);\r\n}\r\n\r\nexport function __rest(s, e) {\r\n var t = {};\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\r\n t[p] = s[p];\r\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\r\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\r\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\r\n t[p[i]] = s[p[i]];\r\n }\r\n return t;\r\n}\r\n\r\nexport function __decorate(decorators, target, key, desc) {\r\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n}\r\n\r\nexport function __param(paramIndex, decorator) {\r\n return function (target, key) { decorator(target, key, paramIndex); }\r\n}\r\n\r\nexport function __metadata(metadataKey, metadataValue) {\r\n if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(metadataKey, metadataValue);\r\n}\r\n\r\nexport function __awaiter(thisArg, _arguments, P, generator) {\r\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\r\n return new (P || (P = Promise))(function (resolve, reject) {\r\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\r\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\r\n step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n });\r\n}\r\n\r\nexport function __generator(thisArg, body) {\r\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\r\n return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\r\n function verb(n) { return function (v) { return step([n, v]); }; }\r\n function step(op) {\r\n if (f) throw new TypeError(\"Generator is already executing.\");\r\n while (_) try {\r\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\r\n if (y = 0, t) op = [op[0] & 2, t.value];\r\n switch (op[0]) {\r\n case 0: case 1: t = op; break;\r\n case 4: _.label++; return { value: op[1], done: false };\r\n case 5: _.label++; y = op[1]; op = [0]; continue;\r\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\r\n default:\r\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\r\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\r\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\r\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\r\n if (t[2]) _.ops.pop();\r\n _.trys.pop(); continue;\r\n }\r\n op = body.call(thisArg, _);\r\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\r\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\r\n }\r\n}\r\n\r\nexport function __createBinding(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n o[k2] = m[k];\r\n}\r\n\r\nexport function __exportStar(m, exports) {\r\n for (var p in m) if (p !== \"default\" && !exports.hasOwnProperty(p)) exports[p] = m[p];\r\n}\r\n\r\nexport function __values(o) {\r\n var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\r\n if (m) return m.call(o);\r\n if (o && typeof o.length === \"number\") return {\r\n next: function () {\r\n if (o && i >= o.length) o = void 0;\r\n return { value: o && o[i++], done: !o };\r\n }\r\n };\r\n throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\r\n}\r\n\r\nexport function __read(o, n) {\r\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\r\n if (!m) return o;\r\n var i = m.call(o), r, ar = [], e;\r\n try {\r\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\r\n }\r\n catch (error) { e = { error: error }; }\r\n finally {\r\n try {\r\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\r\n }\r\n finally { if (e) throw e.error; }\r\n }\r\n return ar;\r\n}\r\n\r\nexport function __spread() {\r\n for (var ar = [], i = 0; i < arguments.length; i++)\r\n ar = ar.concat(__read(arguments[i]));\r\n return ar;\r\n}\r\n\r\nexport function __spreadArrays() {\r\n for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\r\n for (var r = Array(s), k = 0, i = 0; i < il; i++)\r\n for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\r\n r[k] = a[j];\r\n return r;\r\n};\r\n\r\nexport function __await(v) {\r\n return this instanceof __await ? (this.v = v, this) : new __await(v);\r\n}\r\n\r\nexport function __asyncGenerator(thisArg, _arguments, generator) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var g = generator.apply(thisArg, _arguments || []), i, q = [];\r\n return i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i;\r\n function verb(n) { if (g[n]) i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; }\r\n function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }\r\n function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }\r\n function fulfill(value) { resume(\"next\", value); }\r\n function reject(value) { resume(\"throw\", value); }\r\n function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }\r\n}\r\n\r\nexport function __asyncDelegator(o) {\r\n var i, p;\r\n return i = {}, verb(\"next\"), verb(\"throw\", function (e) { throw e; }), verb(\"return\"), i[Symbol.iterator] = function () { return this; }, i;\r\n function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: n === \"return\" } : f ? f(v) : v; } : f; }\r\n}\r\n\r\nexport function __asyncValues(o) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var m = o[Symbol.asyncIterator], i;\r\n return m ? m.call(o) : (o = typeof __values === \"function\" ? __values(o) : o[Symbol.iterator](), i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i);\r\n function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }\r\n function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }\r\n}\r\n\r\nexport function __makeTemplateObject(cooked, raw) {\r\n if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\r\n return cooked;\r\n};\r\n\r\nexport function __importStar(mod) {\r\n if (mod && mod.__esModule) return mod;\r\n var result = {};\r\n if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k];\r\n result.default = mod;\r\n return result;\r\n}\r\n\r\nexport function __importDefault(mod) {\r\n return (mod && mod.__esModule) ? mod : { default: mod };\r\n}\r\n\r\nexport function __classPrivateFieldGet(receiver, privateMap) {\r\n if (!privateMap.has(receiver)) {\r\n throw new TypeError(\"attempted to get private field on non-instance\");\r\n }\r\n return privateMap.get(receiver);\r\n}\r\n\r\nexport function __classPrivateFieldSet(receiver, privateMap, value) {\r\n if (!privateMap.has(receiver)) {\r\n throw new TypeError(\"attempted to set private field on non-instance\");\r\n }\r\n privateMap.set(receiver, value);\r\n return value;\r\n}\r\n","/* eslint-disable no-unused-vars */\ninterface IEnvironmentConstants {\n IFRAME_URL: string;\n}\nlet EnvironmentConstants: IEnvironmentConstants;\n// @ts-ignore\nif (ENV_IS_PRODUCTION) {\n EnvironmentConstants = {\n IFRAME_URL: \"https://widget.dromo.io/\",\n };\n} else {\n EnvironmentConstants = {\n IFRAME_URL: \"http://localhost:3000/\",\n };\n}\n\n/** @internal */\nexport const IFRAME_URL = EnvironmentConstants.IFRAME_URL;\n/** @internal */\nexport enum EventTypes {\n INIT_IFRAME = \"INIT_IFRAME\",\n}\n","export var MessageType;\n(function (MessageType) {\n MessageType[\"Call\"] = \"call\";\n MessageType[\"Reply\"] = \"reply\";\n MessageType[\"Syn\"] = \"syn\";\n MessageType[\"SynAck\"] = \"synAck\";\n MessageType[\"Ack\"] = \"ack\";\n})(MessageType || (MessageType = {}));\nexport var Resolution;\n(function (Resolution) {\n Resolution[\"Fulfilled\"] = \"fulfilled\";\n Resolution[\"Rejected\"] = \"rejected\";\n})(Resolution || (Resolution = {}));\nexport var ErrorCode;\n(function (ErrorCode) {\n ErrorCode[\"ConnectionDestroyed\"] = \"ConnectionDestroyed\";\n ErrorCode[\"ConnectionTimeout\"] = \"ConnectionTimeout\";\n ErrorCode[\"NotInIframe\"] = \"NotInIframe\";\n ErrorCode[\"NoIframeSrc\"] = \"NoIframeSrc\";\n})(ErrorCode || (ErrorCode = {}));\nexport var NativeErrorName;\n(function (NativeErrorName) {\n NativeErrorName[\"DataCloneError\"] = \"DataCloneError\";\n})(NativeErrorName || (NativeErrorName = {}));\nexport var NativeEventType;\n(function (NativeEventType) {\n NativeEventType[\"Message\"] = \"message\";\n})(NativeEventType || (NativeEventType = {}));\n","const DEFAULT_PORT_BY_PROTOCOL = {\n 'http:': '80',\n 'https:': '443'\n};\nconst URL_REGEX = /^(https?:)?\\/\\/([^/:]+)?(:(\\d+))?/;\nconst opaqueOriginSchemes = ['file:', 'data:'];\n/**\n * Converts a src value into an origin.\n */\nexport default (src) => {\n if (src && opaqueOriginSchemes.find(scheme => src.startsWith(scheme))) {\n // The origin of the child document is an opaque origin and its\n // serialization is \"null\"\n // https://html.spec.whatwg.org/multipage/origin.html#origin\n return 'null';\n }\n // Note that if src is undefined, then srcdoc is being used instead of src\n // and we can follow this same logic below to get the origin of the parent,\n // which is the origin that we will need to use.\n const location = document.location;\n const regexResult = URL_REGEX.exec(src);\n let protocol;\n let hostname;\n let port;\n if (regexResult) {\n // It's an absolute URL. Use the parsed info.\n // regexResult[1] will be undefined if the URL starts with //\n protocol = (regexResult[1] ? regexResult[1] : location.protocol);\n hostname = regexResult[2];\n port = regexResult[4];\n }\n else {\n // It's a relative path. Use the current location's info.\n protocol = location.protocol;\n hostname = location.hostname;\n port = location.port;\n }\n // If the port is the default for the protocol, we don't want to add it to the origin string\n // or it won't match the message's event.origin.\n const portSuffix = port && port !== DEFAULT_PORT_BY_PROTOCOL[protocol] ? `:${port}` : '';\n return `${protocol}//${hostname}${portSuffix}`;\n};\n","/**\n * Converts an error object into a plain object.\n */\nexport const serializeError = ({ name, message, stack }) => ({\n name,\n message,\n stack\n});\n/**\n * Converts a plain object into an error object.\n */\nexport const deserializeError = (obj) => {\n const deserializedError = new Error();\n // @ts-ignore\n Object.keys(obj).forEach(key => (deserializedError[key] = obj[key]));\n return deserializedError;\n};\n","let id = 0;\n/**\n * @return {number} A unique ID (not universally unique)\n */\nexport default () => ++id;\n","import generateId from './generateId';\nimport { deserializeError } from './errorSerialization';\nimport { ErrorCode, MessageType, NativeEventType, Resolution } from './enums';\n/**\n * Augments an object with methods that match those defined by the remote. When these methods are\n * called, a \"call\" message will be sent to the remote, the remote's corresponding method will be\n * executed, and the method's return value will be returned via a message.\n * @param {Object} callSender Sender object that should be augmented with methods.\n * @param {Object} info Information about the local and remote windows.\n * @param {Array} methodNames Names of methods available to be called on the remote.\n * @param {Promise} destructionPromise A promise resolved when destroy() is called on the penpal\n * connection.\n * @returns {Object} The call sender object with methods that may be called.\n */\nexport default (callSender, info, methodNames, destroyConnection, log) => {\n const { localName, local, remote, originForSending, originForReceiving } = info;\n let destroyed = false;\n log(`${localName}: Connecting call sender`);\n const createMethodProxy = (methodName) => {\n return (...args) => {\n log(`${localName}: Sending ${methodName}() call`);\n // This handles the case where the iframe has been removed from the DOM\n // (and therefore its window closed), the consumer has not yet\n // called destroy(), and the user calls a method exposed by\n // the remote. We detect the iframe has been removed and force\n // a destroy() immediately so that the consumer sees the error saying\n // the connection has been destroyed. We wrap this check in a try catch\n // because Edge throws an \"Object expected\" error when accessing\n // contentWindow.closed on a contentWindow from an iframe that's been\n // removed from the DOM.\n let iframeRemoved;\n try {\n if (remote.closed) {\n iframeRemoved = true;\n }\n }\n catch (e) {\n iframeRemoved = true;\n }\n if (iframeRemoved) {\n destroyConnection();\n }\n if (destroyed) {\n const error = new Error(`Unable to send ${methodName}() call due ` + `to destroyed connection`);\n error.code = ErrorCode.ConnectionDestroyed;\n throw error;\n }\n return new Promise((resolve, reject) => {\n const id = generateId();\n const handleMessageEvent = (event) => {\n if (event.source !== remote ||\n event.data.penpal !== MessageType.Reply ||\n event.data.id !== id) {\n return;\n }\n if (event.origin !== originForReceiving) {\n log(`${localName} received message from origin ${event.origin} which did not match expected origin ${originForReceiving}`);\n return;\n }\n const replyMessage = event.data;\n log(`${localName}: Received ${methodName}() reply`);\n local.removeEventListener(NativeEventType.Message, handleMessageEvent);\n let returnValue = replyMessage.returnValue;\n if (replyMessage.returnValueIsError) {\n returnValue = deserializeError(returnValue);\n }\n (replyMessage.resolution === Resolution.Fulfilled ? resolve : reject)(returnValue);\n };\n local.addEventListener(NativeEventType.Message, handleMessageEvent);\n const callMessage = {\n penpal: MessageType.Call,\n id,\n methodName,\n args\n };\n remote.postMessage(callMessage, originForSending);\n });\n };\n };\n methodNames.reduce((api, methodName) => {\n api[methodName] = createMethodProxy(methodName);\n return api;\n }, callSender);\n return () => {\n destroyed = true;\n };\n};\n","import connectCallReceiver from '../connectCallReceiver';\nimport connectCallSender from '../connectCallSender';\n/**\n * Handles an ACK handshake message.\n */\nexport default (methods, childOrigin, originForSending, destructor, log) => {\n const { destroy, onDestroy } = destructor;\n let destroyCallReceiver;\n let receiverMethodNames;\n // We resolve the promise with the call sender. If the child reconnects\n // (for example, after refreshing or navigating to another page that\n // uses Penpal, we'll update the call sender with methods that match the\n // latest provided by the child.\n const callSender = {};\n return (event) => {\n if (event.origin !== childOrigin) {\n log(`Parent: Handshake - Received ACK message from origin ${event.origin} which did not match expected origin ${childOrigin}`);\n return;\n }\n log('Parent: Handshake - Received ACK');\n const info = {\n localName: 'Parent',\n local: window,\n remote: event.source,\n originForSending: originForSending,\n originForReceiving: childOrigin\n };\n // If the child reconnected, we need to destroy the prior call receiver\n // before setting up a new one.\n if (destroyCallReceiver) {\n destroyCallReceiver();\n }\n destroyCallReceiver = connectCallReceiver(info, methods, log);\n onDestroy(destroyCallReceiver);\n // If the child reconnected, we need to remove the methods from the\n // previous call receiver off the sender.\n if (receiverMethodNames) {\n receiverMethodNames.forEach(receiverMethodName => {\n delete callSender[receiverMethodName];\n });\n }\n receiverMethodNames = event.data.methodNames;\n const destroyCallSender = connectCallSender(callSender, info, receiverMethodNames, destroy, log);\n onDestroy(destroyCallSender);\n return callSender;\n };\n};\n","import { serializeError } from './errorSerialization';\nimport { MessageType, NativeEventType, NativeErrorName, Resolution } from './enums';\n/**\n * Listens for \"call\" messages coming from the remote, executes the corresponding method, and\n * responds with the return value.\n */\nexport default (info, methods, log) => {\n const { localName, local, remote, originForSending, originForReceiving } = info;\n let destroyed = false;\n const handleMessageEvent = (event) => {\n if (event.source !== remote || event.data.penpal !== MessageType.Call) {\n return;\n }\n if (event.origin !== originForReceiving) {\n log(`${localName} received message from origin ${event.origin} which did not match expected origin ${originForReceiving}`);\n return;\n }\n const callMessage = event.data;\n const { methodName, args, id } = callMessage;\n log(`${localName}: Received ${methodName}() call`);\n const createPromiseHandler = (resolution) => {\n return (returnValue) => {\n log(`${localName}: Sending ${methodName}() reply`);\n if (destroyed) {\n // It's possible to throw an error here, but it would need to be thrown asynchronously\n // and would only be catchable using window.onerror. This is because the consumer\n // is merely returning a value from their method and not calling any function\n // that they could wrap in a try-catch. Even if the consumer were to catch the error,\n // the value of doing so is questionable. Instead, we'll just log a message.\n log(`${localName}: Unable to send ${methodName}() reply due to destroyed connection`);\n return;\n }\n const message = {\n penpal: MessageType.Reply,\n id,\n resolution,\n returnValue\n };\n if (resolution === Resolution.Rejected &&\n returnValue instanceof Error) {\n message.returnValue = serializeError(returnValue);\n message.returnValueIsError = true;\n }\n try {\n remote.postMessage(message, originForSending);\n }\n catch (err) {\n // If a consumer attempts to send an object that's not cloneable (e.g., window),\n // we want to ensure the receiver's promise gets rejected.\n if (err.name === NativeErrorName.DataCloneError) {\n const errorReplyMessage = {\n penpal: MessageType.Reply,\n id,\n resolution: Resolution.Rejected,\n returnValue: serializeError(err),\n returnValueIsError: true\n };\n remote.postMessage(errorReplyMessage, originForSending);\n }\n throw err;\n }\n };\n };\n new Promise(resolve => resolve(methods[methodName].apply(methods, args))).then(createPromiseHandler(Resolution.Fulfilled), createPromiseHandler(Resolution.Rejected));\n };\n local.addEventListener(NativeEventType.Message, handleMessageEvent);\n return () => {\n destroyed = true;\n local.removeEventListener(NativeEventType.Message, handleMessageEvent);\n };\n};\n","import { ErrorCode, MessageType, NativeEventType } from '../enums';\nimport createDestructor from '../createDestructor';\nimport createLogger from '../createLogger';\nimport getOriginFromSrc from './getOriginFromSrc';\nimport handleAckMessageFactory from './handleAckMessageFactory';\nimport handleSynMessageFactory from './handleSynMessageFactory';\nimport monitorIframeRemoval from './monitorIframeRemoval';\nimport startConnectionTimeout from '../startConnectionTimeout';\nimport validateIframeHasSrcOrSrcDoc from './validateIframeHasSrcOrSrcDoc';\n/**\n * Attempts to establish communication with an iframe.\n */\nexport default (options) => {\n let { iframe, methods = {}, childOrigin, timeout, debug = false } = options;\n const log = createLogger(debug);\n const destructor = createDestructor();\n const { onDestroy, destroy } = destructor;\n if (!childOrigin) {\n validateIframeHasSrcOrSrcDoc(iframe);\n childOrigin = getOriginFromSrc(iframe.src);\n }\n // If event.origin is \"null\", the remote protocol is file: or data: and we\n // must post messages with \"*\" as targetOrigin when sending messages.\n // https://developer.mozilla.org/en-US/docs/Web/API/Window/postMessage#Using_window.postMessage_in_extensions\n const originForSending = childOrigin === 'null' ? '*' : childOrigin;\n const handleSynMessage = handleSynMessageFactory(log, methods, childOrigin, originForSending);\n const handleAckMessage = handleAckMessageFactory(methods, childOrigin, originForSending, destructor, log);\n const promise = new Promise((resolve, reject) => {\n const stopConnectionTimeout = startConnectionTimeout(timeout, destroy);\n const handleMessage = (event) => {\n if (event.source !== iframe.contentWindow || !event.data) {\n return;\n }\n if (event.data.penpal === MessageType.Syn) {\n handleSynMessage(event);\n return;\n }\n if (event.data.penpal === MessageType.Ack) {\n const callSender = handleAckMessage(event);\n if (callSender) {\n stopConnectionTimeout();\n resolve(callSender);\n }\n return;\n }\n };\n window.addEventListener(NativeEventType.Message, handleMessage);\n log('Parent: Awaiting handshake');\n monitorIframeRemoval(iframe, destructor);\n onDestroy((error) => {\n window.removeEventListener(NativeEventType.Message, handleMessage);\n if (!error) {\n error = new Error('Connection destroyed');\n error.code = ErrorCode.ConnectionDestroyed;\n }\n reject(error);\n });\n });\n return {\n promise,\n destroy() {\n // Don't allow consumer to pass an error into destroy.\n destroy();\n }\n };\n};\n","export default (debug) => {\n /**\n * Logs a message if debug is enabled.\n */\n return (...args) => {\n if (debug) {\n console.log('[Penpal]', ...args); // eslint-disable-line no-console\n }\n };\n};\n","export default () => {\n const callbacks = [];\n let destroyed = false;\n return {\n destroy(error) {\n destroyed = true;\n callbacks.forEach(callback => {\n callback(error);\n });\n },\n onDestroy(callback) {\n destroyed ? callback() : callbacks.push(callback);\n }\n };\n};\n","import { ErrorCode } from '../enums';\nexport default (iframe) => {\n if (!iframe.src && !iframe.srcdoc) {\n const error = new Error('Iframe must have src or srcdoc property defined.');\n error.code = ErrorCode.NoIframeSrc;\n throw error;\n }\n};\n","import { MessageType } from '../enums';\n/**\n * Handles a SYN handshake message.\n */\nexport default (log, methods, childOrigin, originForSending) => {\n return (event) => {\n if (event.origin !== childOrigin) {\n log(`Parent: Handshake - Received SYN message from origin ${event.origin} which did not match expected origin ${childOrigin}`);\n return;\n }\n log('Parent: Handshake - Received SYN, responding with SYN-ACK');\n const synAckMessage = {\n penpal: MessageType.SynAck,\n methodNames: Object.keys(methods)\n };\n event.source.postMessage(synAckMessage, originForSending);\n };\n};\n","import { ErrorCode } from './enums';\n/**\n * Starts a timeout and calls the callback with an error\n * if the timeout completes before the stop function is called.\n */\nexport default (timeout, callback) => {\n let timeoutId;\n if (timeout !== undefined) {\n timeoutId = window.setTimeout(() => {\n const error = new Error(`Connection timed out after ${timeout}ms`);\n error.code = ErrorCode.ConnectionTimeout;\n callback(error);\n }, timeout);\n }\n return () => {\n clearTimeout(timeoutId);\n };\n};\n","const CHECK_IFRAME_IN_DOC_INTERVAL = 60000;\n/**\n * Monitors for iframe removal and destroys connection if iframe\n * is found to have been removed from DOM. This is to prevent memory\n * leaks when the iframe is removed from the document and the consumer\n * hasn't called destroy(). Without this, event listeners attached to\n * the window would stick around and since the event handlers have a\n * reference to the iframe in their closures, the iframe would stick\n * around too.\n */\nexport default (iframe, destructor) => {\n const { destroy, onDestroy } = destructor;\n const checkIframeInDocIntervalId = setInterval(() => {\n if (!iframe.isConnected) {\n clearInterval(checkIframeInDocIntervalId);\n destroy();\n }\n }, CHECK_IFRAME_IN_DOC_INTERVAL);\n onDestroy(() => {\n clearInterval(checkIframeInDocIntervalId);\n });\n};\n","import { IFRAME_URL } from \"./constants\";\nimport { connectToChild } from \"penpal\";\nimport { Connection } from \"penpal/lib/types\";\n\nimport {\n ITableMessage,\n IMessagesForCell,\n IColumnHook,\n IColumnHookInput,\n IColumnHookOutput,\n IRowHook,\n IRowHookInput,\n IRowHookOutput,\n IDeveloperField,\n IDeveloperSettings,\n IDeveloperStyleOverrides,\n IUser,\n IValidatorField,\n IRowHookOutputInternal,\n IResultMetadata,\n EStepHook,\n IReviewStepData,\n IStepHook,\n IUploadStepData,\n IRowDeleteHook,\n IBulkRowHook,\n IBeforeFinishCallback,\n IBeforeFinishOutput,\n IPositionSpec,\n IConnectionMethods,\n ISelectField,\n IImporterOptions,\n IAllHooks,\n} from \"./interfaces\";\n\nconst DROMO_WRAPPER_SUFFIX = \"dromo-container\";\nconst IFRAME_SUFFIX = \"dromo-iframe-element\";\n\ndeclare global {\n interface Window {\n DROMO_WIDGET_OVERRIDE?: string;\n }\n}\n\nconst makeFieldSerializable = (field: IDeveloperField) => {\n const newField = { ...field };\n if (newField.validators) {\n newField.validators = newField.validators.map((validator) => {\n if (\n (validator.validate === \"regex_match\" ||\n validator.validate === \"regex_exclude\") &&\n validator.regex instanceof RegExp\n ) {\n return {\n ...validator,\n regex: validator.regex.source,\n regexOptions: {\n ignoreCase: validator.regex.flags.includes(\"i\"),\n dotAll: validator.regex.flags.includes(\"s\"),\n multiline: validator.regex.flags.includes(\"m\"),\n unicode: validator.regex.flags.includes(\"u\"),\n },\n };\n }\n return validator;\n });\n }\n return newField;\n};\n\nexport default class DromoUploader {\n // Unique IDs for iframe and container\n /** @internal */\n iframeId: string;\n /** @internal */\n wrapperId: string;\n\n // Refers to unique backend license key\n /** @internal */\n licenseKey: string;\n // See DeveloperFieldsSchema\n /** @internal */\n fields: IDeveloperField[] | undefined;\n // See DeveloperSettingsSchema\n /** @internal */\n settings: IDeveloperSettings | undefined;\n // See UserSchema\n /** @internal */\n user: IUser | undefined;\n // If the user is using a saved schema, its name\n /** @internal */\n schemaName: string | undefined;\n // DevelopmentMode\n /** @internal */\n developmentMode: boolean | undefined;\n // Header Row Override\n /** @internal */\n headerRowOverride: number | null | undefined;\n\n // HTML references\n /** @internal */\n iframe: HTMLIFrameElement | undefined;\n /** @internal */\n wrapper: HTMLElement | undefined;\n\n // Penpal connection reference\n /** @internal */\n connection: Connection<IConnectionMethods> | undefined;\n\n // Data Hooks\n /** @internal */\n columnHooks: IColumnHook[] = [];\n /** @internal */\n bulkRowHooks: IBulkRowHook[] = [];\n /** @internal */\n rowHooks: { callback: IRowHook }[] = [];\n /** @internal */\n stepHooks: IStepHook[] = [];\n /** @internal */\n rowDeleteHooks: IRowDeleteHook[] = [];\n\n // Callbacks\n /** @internal */\n beforeFinishCallback: IBeforeFinishCallback | undefined;\n /** @internal */\n resultsCallback:\n | ((data: any, metadata: IResultMetadata) => Promise<void> | void)\n | undefined;\n\n /** @internal */\n cancelCallback: (() => void) | undefined;\n\n /** @internal */\n appHost: string;\n\n constructor(\n licenseKey: string,\n fields: IDeveloperField[],\n settings: IDeveloperSettings,\n user: IUser\n );\n\n constructor(licenseKey: string, schemaName: string);\n\n constructor(\n licenseKey: string,\n fieldsOrSchemaName: IDeveloperField[] | string,\n settings?: IDeveloperSettings,\n user?: IUser\n ) {\n this.iframeId =\n Math.random().toString(36).substring(7) + \"-\" + IFRAME_SUFFIX;\n this.wrapperId =\n Math.random().toString(36).substring(7) + \"-\" + DROMO_WRAPPER_SUFFIX;\n this.appHost = document.location.hostname;\n\n if (settings !== undefined && user !== undefined) {\n this.licenseKey = licenseKey;\n this.fields = (fieldsOrSchemaName as IDeveloperField[]).map(\n makeFieldSerializable\n );\n this.settings = settings;\n this.user = user;\n } else {\n this.licenseKey = licenseKey;\n this.schemaName = fieldsOrSchemaName as string;\n }\n }\n\n initChild = async () => {\n if (!this.connection) {\n console.error(\"shim cannot connect with Dromo service.\");\n return;\n }\n\n const child = await this.connection.promise;\n\n // We check to see if this was loaded from either an SDK or snippet that didn't specify a version\n // If it was, this is a legacy snippet/sdk and we should NOT show the redesigned UI\n const loadedFromUnVersionedScript = Array.from(\n document.getElementsByTagName(\"script\")\n ).some(\n (s) =>\n s.src === \"https://unpkg.com/dromo-uploader-js/dist/DromoUploader.js\" ||\n s.src ===\n \"https://cdn.jsdelivr.net/npm/dromo-uploader-js@latest/dist/DromoUploader.js\"\n );\n\n if (this.fields && this.settings && this.user) {\n if (!loadedFromUnVersionedScript) {\n this.settings.version = this.settings.version ?? \"v2\";\n }\n\n this.settings.browserExcelParsing =\n this.settings.browserExcelParsing ?? true;\n\n await child.init(\n this.licenseKey,\n this.fields,\n this.settings,\n this.user,\n this.appHost\n );\n } else if (this.schemaName) {\n await child.initFromSavedSchema(\n this.licenseKey,\n this.schemaName,\n this.appHost,\n {\n user: this.user,\n developmentMode: this.developmentMode,\n headerRowOverride: this.headerRowOverride,\n }\n );\n } else {\n console.error(\"Invalid Dromo configuration\");\n }\n\n await child.setNumRegisteredRowHooks(this.totalNumRowHooks());\n await child.setNumRegisteredColHooks(this.columnHooks.length);\n await child.setNumRegisteredRowDeleteHooks(this.rowDeleteHooks.length);\n };\n\n /**\n * Creates the iframe object\n * @internal\n */\n initIFrame = () => {\n if (!document.getElementById(this.iframeId)) {\n const iframe = document.createElement(\"iframe\");\n const identifier = this.settings?.importIdentifier ?? this.schemaName;\n iframe.title = identifier\n ? `Dromo Importer: ${identifier}`\n : \"Dromo Importer\";\n iframe.src = window.DROMO_WIDGET_OVERRIDE || IFRAME_URL;\n iframe.id = this.iframeId;\n iframe.style.height = \"100%\";\n iframe.style.width = \"100%\";\n iframe.style.border = \"0\";\n // @ts-ignore\n iframe.crossorigin = \"anonymous\";\n this.iframe = iframe;\n }\n };\n\n /**\n * Uses Penpal to create a connection with the iframe that was created\n * @internal\n */\n createConnection = () => {\n // eslint-disable-next-line @typescript-eslint/no-this-alias\n const self = this;\n const iframe = this.iframe;\n\n if (!iframe) {\n console.error(\"shim cannot connect to Dromo.\");\n return;\n }\n this.connection = connectToChild<IConnectionMethods>({\n iframe,\n methods: {\n /**\n * Called for each column/field. Sends all data and expects all the\n * relevant column hooks to be evaluated.\n *\n * @param fieldName the fieldname key for the column\n * @param data the full column of data for the particular key\n */\n async handleColumnHooks(\n fieldName: string,\n data: IColumnHookInput[]\n ): Promise<IColumnHookOutput[]> {\n // Get all the hooks for this particular field\n const hooks = self.columnHooks.filter(\n (h) => h.fieldName === fieldName\n );\n // key is the index in the column (row). Value stores newValue and info.\n // This is the final object that is passed to the app to apply to the\n // global data state.\n const changes = new Map<\n number,\n { newValue?: string; info?: ITableMessage[] }\n >();\n // Each hook call updates this tmpData object with the latest values.\n // This allows us to run hooks sequentially with each subsequent call\n // having the most up to date data\n const tmpData: IColumnHookInput[] = data;\n\n // For each registered hook, call the developer defined callback\n await hooks.reduce(async (previousHookPromise, currentHook) => {\n await previousHookPromise.then(async () => {\n try {\n const hookResponse = await currentHook.callback(tmpData);\n hookResponse.forEach((hookOutput: IColumnHookOutput) => {\n // If the user has updated the value or info for a particular\n // index update the changes map, and the tmpData\n if (\n hookOutput.value !== undefined ||\n hookOutput.info !== undefined\n ) {\n const change: {\n value?: string;\n info?: ITableMessage[];\n } = {};\n if (hookOutput.value !== undefined) {\n change.value = hookOutput.value;\n tmpData[hookOutput.index] = hookOutput.value;\n }\n if (hookOutput.info !== undefined)\n change.info = hookOutput.info;\n changes.set(hookOutput.index, change);\n }\n });\n } catch (err) {\n console.error(\n \"[Dromo-External-Error] There was an error running your col hook.\",\n err\n );\n }\n });\n }, Promise.resolve());\n\n // Change the map into IColumnHookOuput for the application to process\n const columnHookOutput: IColumnHookOutput[] = [];\n changes.forEach((change, index) =>\n columnHookOutput.push({ ...change, index })\n );\n return columnHookOutput;\n },\n\n /**\n * Called singularly for each row. Goes through all row hooks and\n * evaluates them.\n *\n * @param data an array of row data objects\n */\n async handleRowHooks(\n data: IRowHookInput[],\n mode: \"init\" | \"update\"\n ): Promise<IRowHookOutputInternal[]> {\n // Changes is the final changes that will be sent to the frontend\n const changes = new Map<number, IRowHookOutput[\"row\"]>();\n const hookData = new Map(\n data.map((inputRow) => [inputRow.index, inputRow])\n );\n\n // a helper function called for each row that updates the final changes\n // as well as the row data which will be passed to subsequent hooks\n const updateForRow = (\n rowIndex: number,\n rowOutput: IRowHookOutput[\"row\"]\n ) => {\n for (const [fieldName, fieldOutput] of Object.entries(\n rowOutput ?? {}\n )) {\n if (\n fieldOutput.value === undefined &&\n fieldOutput.info === undefined &&\n fieldOutput.selectOptions === undefined\n )\n return;\n\n const rowData = hookData.get(rowIndex)!;\n const rowChanges = changes.get(rowIndex) || {};\n\n const change: {\n value?: string;\n info?: ITableMessage[];\n selectOptions?: ISelectField[\"selectOptions\"];\n } = rowChanges[fieldName] ?? {};\n\n // if there are any changes, we want to both update the changes\n // object sent to the app, and the rowInput sent to subsequent\n // row hooks running on this row so they see the changes from\n // prior row hooks\n if (fieldOutput.value !== undefined) {\n change.value = fieldOutput.value;\n rowData.row[fieldName].value = fieldOutput.value;\n }\n\n if (fieldOutput.info !== undefined) {\n change.info = fieldOutput.info;\n rowData.row[fieldName].info = fieldOutput.info;\n }\n\n if (fieldOutput.selectOptions !== undefined) {\n change.selectOptions = fieldOutput.selectOptions;\n rowData.row[fieldName].selectOptions =\n fieldOutput.selectOptions;\n }\n\n rowChanges[fieldName] = change;\n changes.set(rowIndex, rowChanges);\n }\n };\n\n // First we run the bulk row hooks with all of the input data\n for (const bulkRowHook of self.bulkRowHooks) {\n try {\n const hookOutput = await bulkRowHook(data, mode);\n for (const rowOutput of hookOutput) {\n updateForRow(rowOutput.index, rowOutput.row);\n }\n } catch (err) {\n console.error(\n \"[Dromo-External-Error] There was an error running your bulk row hook.\",\n err\n );\n }\n }\n\n // We want to loop through each row independently. Because each\n // row's execution is independent, we can do row by row first vs\n // hook by hook\n await Promise.all(\n data.map(async (rowInput: IRowHookInput) => {\n for (const rowHook of self.rowHooks) {\n try {\n const hookOutput = await rowHook.callback(rowInput, mode);\n updateForRow(rowInput.index, hookOutput.row);\n } catch (err) {\n console.error(\n \"[Dromo-External-Error] There was an error running your row hook.\",\n err\n );\n }\n }\n })\n );\n\n const finalChanges: IRowHookOutputInternal[] = [];\n\n changes.forEach((rowChanges, rowIndex) => {\n finalChanges.push({ index: rowIndex, row: rowChanges });\n });\n\n return finalChanges;\n },\n handleStepHook(\n step: EStepHook,\n data: IUploadStepData | IReviewStepData\n ) {\n self.stepHooks.forEach((hook) => {\n if (step !== hook.type) return;\n try {\n hook.callback(self, data);\n } catch (err) {\n console.error(\n \"[Dromo-External-Error] There was an error in your step callback.\",\n err\n );\n }\n });\n },\n /**\n * Called singularly for each row. Goes through all delete hooks and\n * evaluates them.\n *\n * @param deletedRows - an array of rows deleted from the data\n */\n handleRowDeleteHooks(deletedRows: IRowHookInput[]): Promise<void[]> {\n // We want to loop through each row independently. Because each\n // row's execution is independent, we can do row by row first vs\n // hook by hook\n return Promise.all(\n deletedRows.map(async (rowData: IRowHookInput) => {\n await self.rowDeleteHooks.forEach(async (currentHook) => {\n try {\n await currentHook(rowData);\n } catch (err) {\n console.error(\n \"[Dromo-External-Error] There was an error running your row delete hook.\",\n err\n );\n }\n });\n })\n );\n },\n async handleBeforeFinishCallback(\n data: Record<string, any>[],\n metadata: IResultMetadata\n ): Promise<IBeforeFinishOutput> {\n if (self.beforeFinishCallback) {\n try {\n return await self.beforeFinishCallback(data, metadata, self);\n } catch (err) {\n console.error(\n \"[Dromo-External-Error] There was an error in your beforeFinish callback.\",\n err\n );\n }\n }\n },\n /**\n * Called after the user has completed the Dromo flow, send the\n * cleaned data to the developer\n *\n * TODO: data cannot be of type any. We need to standardize our return\n * type to be Map<string, any>[]\n * @param data cleaned data after the flow is complete\n */\n async handleResults(\n data: any,\n metadata: IResultMetadata\n ): Promise<void> {\n if (self.resultsCallback) {\n try {\n await self.resultsCallback(data, metadata);\n } catch (err) {\n console.error(\n \"[Dromo-External-Error] There was an error in your onResult callback.\",\n err\n );\n }\n }\n self.close();\n },\n /**\n * Called when the modal has been closed by the finishing of the flow\n */\n handleCloseModal() {\n self.close();\n },\n /**\n * Called when the modal has been closed due to the user canceling the\n * flow\n */\n handleCancel() {\n if (self.cancelCallback) {\n try {\n self.cancelCallback();\n } catch (err) {\n console.error(\n \"[Dromo-External-Error] There was an error in your cancel callback.\",\n err\n );\n }\n }\n self.close();\n },\n },\n });\n };\n\n /**\n * Mounts the iframe in the parent HTML page\n * NOTE: Should be called AFTER the PenPal connection has been created\n * @internal\n */\n mountIFrame = () => {\n if (!document.getElementById(this.iframeId!)) {\n const wrapper = document.createElement(\"div\");\n wrapper.id = this.wrapperId;\n wrapper.style.zIndex = Number.MAX_SAFE_INTEGER.toString();\n wrapper.style.visibility = \"hidden\";\n wrapper.style.width = \"0px\";\n wrapper.style.height = \"0px\";\n wrapper.style.position = \"fixed\";\n wrapper.style.top = \"0px\";\n wrapper.style.left = \"0px\";\n wrapper.style.right = \"0px\";\n wrapper.style.bottom = \"0px\";\n wrapper.appendChild(this.iframe as HTMLIFrameElement);\n document.body.appendChild(wrapper);\n this.wrapper = wrapper;\n }\n };\n\n showIFrame = () => {\n if (this.wrapper) {\n this.wrapper.style.visibility = \"visible\";\n this.wrapper.style.width = \"100%\";\n this.wrapper.style.height = \"100%\";\n document.body.style.overflow = \"hidden\";\n }\n };\n\n /**\n * Function called by the developer to set a callback\n *\n * @param fieldName the key of the column for which we want to trigger the\n * callback\n * @param callback developer defined callback that is callback that is added\n * to a list of column hooks\n */\n registerColumnHook = (\n fieldName: IColumnHook[\"fieldName\"],\n callback: IColumnHook[\"callback\"]\n ) => {\n this.columnHooks.push({\n fieldName: fieldName,\n callback: callback,\n });\n\n // This is kept for the JS version - a user can register after the connection\n // has been made and the modal has been opened. It's bad form, but possible\n if (this.connection) {\n this.connection.promise.then((child) => {\n child.setNumRegisteredColHooks(this.columnHooks.length);\n });\n }\n };\n\n /** @internal */\n totalNumRowHooks = () => {\n return this.rowHooks.length + this.bulkRowHooks.length;\n };\n\n /**\n * Function called by the developer to set a callback\n *\n * @param callback developer defined callback that is added to a list of row\n * hooks\n */\n registerBulkRowHook = (bulkRowHook: IBulkRowHook) => {\n this.bulkRowHooks.push(bulkRowHook);\n\n // This is kept for the JS version - a user can register after the connection\n // has been made and the modal has been opened. It's bad form, but possible\n if (this.connection) {\n this.connection.promise.then((child) => {\n child.setNumRegisteredRowHooks(this.totalNumRowHooks());\n });\n }\n };\n\n /**\n * Function called by the developer to set a callback\n *\n * @param callback developer defined callback that is added to a list of row\n * hooks\n */\n registerRowHook = (callback: IRowHook) => {\n this.rowHooks.push({\n callback: callback,\n });\n\n // This is kept for the JS version - a user can register after the connection\n // has been made and the modal has been opened. It's bad form, but possible\n if (this.connection) {\n this.connection.promise.then((child) => {\n child.setNumRegisteredRowHooks(this.totalNumRowHooks());\n });\n }\n };\n\n /**\n * Function called by the developer to set a callback\n *\n * @param callback developer defined callback that is called per step of the\n * import flow\n */\n registerStepHook = (\n type: IStepHook[\"type\"],\n callback: IStepHook[\"callback\"]\n ) => {\n this.stepHooks.push({ type, callback });\n };\n\n /**\n * Function called by the developer to set a row delete callback\n *\n * @param callback developer defined callback that is called per step of the\n * import flow\n */\n registerRowDeleteHook = (callback: IRowDeleteHook) => {\n this.rowDeleteHooks.push(callback);\n // This is kept for the JS version - a user can register after the connection\n // has been made and the modal has been opened. It's bad form, but possible\n if (this.connection) {\n this.connection.promise.then((child) => {\n child.setNumRegisteredRowDeleteHooks(this.rowDeleteHooks.length);\n });\n }\n };\n\n /**\n * Function called by the developer to set the beforeFinish callback\n *\n * @param callback developer defined callback that is called when the user submits\n */\n beforeFinish = (callback: IBeforeFinishCallback): void => {\n this.beforeFinishCallback = callback;\n };\n\n /**\n * Convenience function for setting all hooks at once.\n *\n * @param hooks object containing all hooks to register\n */\n registerAllHooks = (hooks: IAllHooks): void => {\n if (hooks.columnHooks) {\n for (const { fieldName, callback } of hooks.columnHooks) {\n this.registerColumnHook(fieldName, callback);\n }\n }\n\n if (hooks.rowHooks) {\n for (const rowHook of hooks.rowHooks) {\n this.registerRowHook(rowHook);\n }\n }\n\n if (hooks.bulkRowHooks) {\n for (const bulkRowHook of hooks.bulkRowHooks) {\n this.registerBulkRowHook(bulkRowHook);\n }\n }\n\n if (hooks.rowDeleteHooks) {\n for (const rowDeleteHook of hooks.rowDeleteHooks) {\n this.registerRowDeleteHook(rowDeleteHook);\n }\n }\n\n if (hooks.stepHooks) {\n for (const { type, callback } of hooks.stepHooks) {\n this.registerStepHook(type, callback);\n }\n }\n\n if (hooks.beforeFinishCallback) {\n this.beforeFinish(hooks.beforeFinishCallback);\n }\n };\n\n /**\n * Function called by the developer to set a callback\n *\n * @param callback developer defined callback that is called when the import\n * flow completes\n */\n onResults = (\n callback: (\n data: Record<string, string | number | boolean | null>[],\n metadata: IResultMetadata\n ) => Promise<void> | void\n ) => {\n this.resultsCallback = callback;\n };\n\n /**\n * Function called by the developer to set a callback\n *\n * @param callback developer defined callback that is called when the user\n * cancels the import\n */\n onCancel = (callback: () => void) => {\n this.cancelCallback = callback;\n };\n\n /**\n * Function called by the developer to set or reset the user information\n */\n setUser = async (user: IUser) => {\n this.user = user;\n if (this.connection) {\n const child = await this.connection!.promise;\n await child.setUser(this.user);\n }\n };\n\n /**\n * Function called by the developer to add a field midway through the import\n * process\n */\n addField = async (field: IDeveloperField, position?: IPositionSpec) => {\n if (this.connection) {\n const child = await this.connection!.promise;\n await child.addField(makeFieldSerializable(field), position);\n } else {\n console.error(\"[Dromo-Error] Invalid connection to Dromo Uploader.\");\n }\n };\n\n /**\n * Function called by the developer to remove a field. The data won't appear\n * in the user interface nor in the result data.\n */\n removeField = async (fieldKey: string) => {\n if (this.connection) {\n const child = await this.connection!.promise;\n await child.removeField(fieldKey);\n } else {\n console.error(\"[Dromo-Error] Invalid connection to Dromo Uploader.\");\n }\n };\n\n /**\n * Function called by the developer to add new table messages throughout the\n * import process\n */\n updateInfoMessages = async (messages: IMessagesForCell[]) => {\n if (this.connection) {\n const child = await this.connection!.promise;\n await child.updateInfoMessages(messages);\n } else {\n console.error(\"[Dromo-Error] Invalid connection to Dromo Uploader.\");\n }\n };\n\n /**\n * Function called by the developer to change the matchingStep.headerRowOverride\n * setting from a step hook\n */\n setHeaderRowOverride = async (headerRowOverride: number | null) => {\n this.headerRowOverride = headerRowOverride;\n if (this.connection) {\n const child = await this.connection!.promise;\n await child.setHeaderRowOverride(headerRowOverride);\n }\n };\n\n /**\n * Function called by developer called to open the iframe\n */\n open = async () => {\n if (!this.wrapper) {\n this.initIFrame();\n this.createConnection();\n this.mountIFrame();\n }\n\n await this.initChild();\n this.showIFrame();\n };\n\n /**\n * Function called by developer to close the iframe\n */\n close = () => {\n if (this.wrapper) {\n this.wrapper.style.visibility = \"hidden\";\n this.wrapper.style.width = \"0px\";\n this.wrapper.style.height = \"0px\";\n document.body.style.overflow = \"inherit\";\n }\n };\n\n /**\n * Function called by the developer to set developmentMode\n */\n setDevelopmentMode = async (developmentMode: boolean) => {\n this.developmentMode = developmentMode;\n if (this.connection) {\n const child = await this.connection!.promise;\n await child.setDevelopmentMode(this.developmentMode);\n }\n };\n\n /**\n * @internal\n */\n static rehydrateHeadless = async ({\n licenseKey,\n headlessImportId,\n fields,\n settings,\n hooks,\n rehydrateState,\n }: {\n licenseKey: string;\n headlessImportId: string;\n fields: IDeveloperField[];\n settings: IDeveloperSettings;\n hooks: IAllHooks;\n rehydrateState: any;\n }): Promise<void> => {\n const headlessUser: IUser = { id: \"headless-review\" };\n const dromo = new DromoUploader(licenseKey, fields, settings, headlessUser);\n dromo.registerAllHooks(hooks);\n await dromo.rehydrate(rehydrateState, headlessImportId);\n dromo.open();\n };\n\n /**\n * @internal\n */\n rehydrate = async (rehydrateState: any, headlessImportId: string) => {\n if (!this.wrapper) {\n this.initIFrame();\n this.createConnection();\n this.mountIFrame();\n }\n await this.initChild();\n const child = await this.connection!.promise;\n await child.rehydrate(rehydrateState, headlessImportId);\n this.showIFrame();\n };\n}\n\nexport {\n ITableMessage,\n IMessagesForCell,\n IColumnHook,\n IColumnHookInput,\n IColumnHookOutput,\n IRowHook,\n IRowHookInput,\n IRowHookOutput,\n IDeveloperField,\n IDeveloperSettings,\n IDeveloperStyleOverrides,\n IUser,\n IValidatorField,\n IRowHookOutputInternal,\n IResultMetadata,\n IReviewStepData,\n IStepHook,\n IUploadStepData,\n IRowDeleteHook,\n IBulkRowHook,\n IBeforeFinishCallback,\n IBeforeFinishOutput,\n IPositionSpec,\n IConnectionMethods,\n ISelectField,\n IImporterOptions,\n IAllHooks,\n};\n"],"names":["__assign","Object","assign","t","s","i","n","arguments","length","p","prototype","hasOwnProperty","call","apply","this","__awaiter","thisArg","_arguments","P","generator","Promise","resolve","reject","fulfilled","value","step","next","e","rejected","result","done","then","__generator","body","f","y","g","_","label","sent","trys","ops","verb","throw","return","Symbol","iterator","v","op","TypeError","pop","push","EventTypes","MessageType","Resolution","ErrorCode","NativeErrorName","NativeEventType","IFRAME_URL","DEFAULT_PORT_BY_PROTOCOL","http:","https:","URL_REGEX","opaqueOriginSchemes","serializeError","name","message","stack","id","callSender","info","methodNames","destroyConnection","log","localName","local","remote","originForSending","originForReceiving","destroyed","createMethodProxy","methodName","args","iframeRemoved","closed","error","Error","code","ConnectionDestroyed","generateId","handleMessageEvent","event","source","data","penpal","Reply","origin","replyMessage","removeEventListener","Message","returnValue","returnValueIsError","obj","deserializedError","keys","forEach","key","deserializeError","resolution","Fulfilled","addEventListener","callMessage","Call","postMessage","reduce","api","methods","childOrigin","destructor","destroy","onDestroy","destroyCallReceiver","receiverMethodNames","window","createPromiseHandler","Rejected","err","DataCloneError","errorReplyMessage","connectCallReceiver","receiverMethodName","destroyCallSender","connectCallSender","options","iframe","timeout","debug","console","createLogger","callbacks","[object Object]","callback","createDestructor","src","srcdoc","NoIframeSrc","validateIframeHasSrcOrSrcDoc","find","scheme","startsWith","location","document","regexResult","exec","protocol","hostname","port","getOriginFromSrc","handleSynMessage","synAckMessage","SynAck","handleSynMessageFactory","handleAckMessage","handleAckMessageFactory","promise","stopConnectionTimeout","timeoutId","undefined","setTimeout","ConnectionTimeout","clearTimeout","startConnectionTimeout","handleMessage","contentWindow","Syn","Ack","checkIframeInDocIntervalId","setInterval","isConnected","clearInterval","monitorIframeRemoval","makeFieldSerializable","field","newField","validators","map","validator","validate","regex","RegExp","regexOptions","ignoreCase","flags","includes","dotAll","multiline","unicode","licenseKey","fieldsOrSchemaName","settings","user","connection","child","_c","loadedFromUnVersionedScript","Array","from","getElementsByTagName","some","fields","version","browserExcelParsing","init","appHost","schemaName","initFromSavedSchema","developmentMode","headerRowOverride","setNumRegisteredRowHooks","totalNumRowHooks","setNumRegisteredColHooks","columnHooks","setNumRegisteredRowDeleteHooks","rowDeleteHooks","getElementById","_this","iframeId","createElement","identifier","importIdentifier","title","DROMO_WIDGET_OVERRIDE","style","height","width","border","crossorigin","self","connectToChild","handleColumnHooks","fieldName","hooks","filter","h","changes","Map","tmpData","previousHookPromise","currentHook","_a","hookOutput","change","index","set","err_1","columnHookOutput","handleRowHooks","mode","hookData","inputRow","updateForRow","rowIndex","rowOutput","_b","entries","_i","fieldOutput","selectOptions","rowData","get","rowChanges","row","bulkRowHooks","bulkRowHook","hookOutput_1","err_2","all","rowInput","rowHooks","rowHook","err_3","finalChanges","handleStepHook","stepHooks","hook","type","handleRowDeleteHooks","deletedRows","err_4","handleBeforeFinishCallback","metadata","beforeFinishCallback","err_5","handleResults","resultsCallback","err_6","close","handleCloseModal","handleCancel","cancelCallback","wrapper","wrapperId","zIndex","Number","MAX_SAFE_INTEGER","toString","visibility","position","top","left","right","bottom","appendChild","overflow","registerColumnHook","_d","registerRowHook","_f","_e","registerBulkRowHook","_h","_g","rowDeleteHook","registerRowDeleteHook","_k","_j","_l","registerStepHook","beforeFinish","setUser","addField","fieldKey","removeField","messages","updateInfoMessages","setHeaderRowOverride","initIFrame","createConnection","mountIFrame","initChild","showIFrame","setDevelopmentMode","rehydrateState","headlessImportId","rehydrate","Math","random","substring","DromoUploader","dromo","registerAllHooks","open"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"DromoUploader.js","sources":["../node_modules/tslib/tslib.es6.js","../src/constants.ts","../node_modules/penpal/lib/enums.js","../node_modules/penpal/lib/parent/getOriginFromSrc.js","../node_modules/penpal/lib/errorSerialization.js","../node_modules/penpal/lib/generateId.js","../node_modules/penpal/lib/connectCallSender.js","../node_modules/penpal/lib/parent/handleAckMessageFactory.js","../node_modules/penpal/lib/connectCallReceiver.js","../node_modules/penpal/lib/parent/connectToChild.js","../node_modules/penpal/lib/createLogger.js","../node_modules/penpal/lib/createDestructor.js","../node_modules/penpal/lib/parent/validateIframeHasSrcOrSrcDoc.js","../node_modules/penpal/lib/parent/handleSynMessageFactory.js","../node_modules/penpal/lib/startConnectionTimeout.js","../node_modules/penpal/lib/parent/monitorIframeRemoval.js","../src/index.ts"],"sourcesContent":["/*! *****************************************************************************\r\nCopyright (c) Microsoft Corporation.\r\n\r\nPermission to use, copy, modify, and/or distribute this software for any\r\npurpose with or without fee is hereby granted.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\r\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\r\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\r\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\r\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\r\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\r\nPERFORMANCE OF THIS SOFTWARE.\r\n***************************************************************************** */\r\n/* global Reflect, Promise */\r\n\r\nvar extendStatics = function(d, b) {\r\n extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\r\n return extendStatics(d, b);\r\n};\r\n\r\nexport function __extends(d, b) {\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n}\r\n\r\nexport var __assign = function() {\r\n __assign = Object.assign || function __assign(t) {\r\n for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n s = arguments[i];\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\r\n }\r\n return t;\r\n }\r\n return __assign.apply(this, arguments);\r\n}\r\n\r\nexport function __rest(s, e) {\r\n var t = {};\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\r\n t[p] = s[p];\r\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\r\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\r\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\r\n t[p[i]] = s[p[i]];\r\n }\r\n return t;\r\n}\r\n\r\nexport function __decorate(decorators, target, key, desc) {\r\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n}\r\n\r\nexport function __param(paramIndex, decorator) {\r\n return function (target, key) { decorator(target, key, paramIndex); }\r\n}\r\n\r\nexport function __metadata(metadataKey, metadataValue) {\r\n if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(metadataKey, metadataValue);\r\n}\r\n\r\nexport function __awaiter(thisArg, _arguments, P, generator) {\r\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\r\n return new (P || (P = Promise))(function (resolve, reject) {\r\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\r\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\r\n step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n });\r\n}\r\n\r\nexport function __generator(thisArg, body) {\r\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\r\n return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\r\n function verb(n) { return function (v) { return step([n, v]); }; }\r\n function step(op) {\r\n if (f) throw new TypeError(\"Generator is already executing.\");\r\n while (_) try {\r\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\r\n if (y = 0, t) op = [op[0] & 2, t.value];\r\n switch (op[0]) {\r\n case 0: case 1: t = op; break;\r\n case 4: _.label++; return { value: op[1], done: false };\r\n case 5: _.label++; y = op[1]; op = [0]; continue;\r\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\r\n default:\r\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\r\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\r\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\r\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\r\n if (t[2]) _.ops.pop();\r\n _.trys.pop(); continue;\r\n }\r\n op = body.call(thisArg, _);\r\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\r\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\r\n }\r\n}\r\n\r\nexport function __createBinding(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n o[k2] = m[k];\r\n}\r\n\r\nexport function __exportStar(m, exports) {\r\n for (var p in m) if (p !== \"default\" && !exports.hasOwnProperty(p)) exports[p] = m[p];\r\n}\r\n\r\nexport function __values(o) {\r\n var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\r\n if (m) return m.call(o);\r\n if (o && typeof o.length === \"number\") return {\r\n next: function () {\r\n if (o && i >= o.length) o = void 0;\r\n return { value: o && o[i++], done: !o };\r\n }\r\n };\r\n throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\r\n}\r\n\r\nexport function __read(o, n) {\r\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\r\n if (!m) return o;\r\n var i = m.call(o), r, ar = [], e;\r\n try {\r\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\r\n }\r\n catch (error) { e = { error: error }; }\r\n finally {\r\n try {\r\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\r\n }\r\n finally { if (e) throw e.error; }\r\n }\r\n return ar;\r\n}\r\n\r\nexport function __spread() {\r\n for (var ar = [], i = 0; i < arguments.length; i++)\r\n ar = ar.concat(__read(arguments[i]));\r\n return ar;\r\n}\r\n\r\nexport function __spreadArrays() {\r\n for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\r\n for (var r = Array(s), k = 0, i = 0; i < il; i++)\r\n for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\r\n r[k] = a[j];\r\n return r;\r\n};\r\n\r\nexport function __await(v) {\r\n return this instanceof __await ? (this.v = v, this) : new __await(v);\r\n}\r\n\r\nexport function __asyncGenerator(thisArg, _arguments, generator) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var g = generator.apply(thisArg, _arguments || []), i, q = [];\r\n return i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i;\r\n function verb(n) { if (g[n]) i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; }\r\n function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }\r\n function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }\r\n function fulfill(value) { resume(\"next\", value); }\r\n function reject(value) { resume(\"throw\", value); }\r\n function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }\r\n}\r\n\r\nexport function __asyncDelegator(o) {\r\n var i, p;\r\n return i = {}, verb(\"next\"), verb(\"throw\", function (e) { throw e; }), verb(\"return\"), i[Symbol.iterator] = function () { return this; }, i;\r\n function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: n === \"return\" } : f ? f(v) : v; } : f; }\r\n}\r\n\r\nexport function __asyncValues(o) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var m = o[Symbol.asyncIterator], i;\r\n return m ? m.call(o) : (o = typeof __values === \"function\" ? __values(o) : o[Symbol.iterator](), i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i);\r\n function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }\r\n function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }\r\n}\r\n\r\nexport function __makeTemplateObject(cooked, raw) {\r\n if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\r\n return cooked;\r\n};\r\n\r\nexport function __importStar(mod) {\r\n if (mod && mod.__esModule) return mod;\r\n var result = {};\r\n if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k];\r\n result.default = mod;\r\n return result;\r\n}\r\n\r\nexport function __importDefault(mod) {\r\n return (mod && mod.__esModule) ? mod : { default: mod };\r\n}\r\n\r\nexport function __classPrivateFieldGet(receiver, privateMap) {\r\n if (!privateMap.has(receiver)) {\r\n throw new TypeError(\"attempted to get private field on non-instance\");\r\n }\r\n return privateMap.get(receiver);\r\n}\r\n\r\nexport function __classPrivateFieldSet(receiver, privateMap, value) {\r\n if (!privateMap.has(receiver)) {\r\n throw new TypeError(\"attempted to set private field on non-instance\");\r\n }\r\n privateMap.set(receiver, value);\r\n return value;\r\n}\r\n","/* eslint-disable no-unused-vars */\ninterface IEnvironmentConstants {\n IFRAME_URL: string;\n}\nlet EnvironmentConstants: IEnvironmentConstants;\n// @ts-ignore\nif (ENV_IS_PRODUCTION) {\n EnvironmentConstants = {\n IFRAME_URL: \"https://widget.dromo.io/\",\n };\n} else {\n EnvironmentConstants = {\n IFRAME_URL: \"http://localhost:3000/\",\n };\n}\n\n/** @internal */\nexport const IFRAME_URL = EnvironmentConstants.IFRAME_URL;\n/** @internal */\nexport enum EventTypes {\n INIT_IFRAME = \"INIT_IFRAME\",\n}\n","export var MessageType;\n(function (MessageType) {\n MessageType[\"Call\"] = \"call\";\n MessageType[\"Reply\"] = \"reply\";\n MessageType[\"Syn\"] = \"syn\";\n MessageType[\"SynAck\"] = \"synAck\";\n MessageType[\"Ack\"] = \"ack\";\n})(MessageType || (MessageType = {}));\nexport var Resolution;\n(function (Resolution) {\n Resolution[\"Fulfilled\"] = \"fulfilled\";\n Resolution[\"Rejected\"] = \"rejected\";\n})(Resolution || (Resolution = {}));\nexport var ErrorCode;\n(function (ErrorCode) {\n ErrorCode[\"ConnectionDestroyed\"] = \"ConnectionDestroyed\";\n ErrorCode[\"ConnectionTimeout\"] = \"ConnectionTimeout\";\n ErrorCode[\"NotInIframe\"] = \"NotInIframe\";\n ErrorCode[\"NoIframeSrc\"] = \"NoIframeSrc\";\n})(ErrorCode || (ErrorCode = {}));\nexport var NativeErrorName;\n(function (NativeErrorName) {\n NativeErrorName[\"DataCloneError\"] = \"DataCloneError\";\n})(NativeErrorName || (NativeErrorName = {}));\nexport var NativeEventType;\n(function (NativeEventType) {\n NativeEventType[\"Message\"] = \"message\";\n})(NativeEventType || (NativeEventType = {}));\n","const DEFAULT_PORT_BY_PROTOCOL = {\n 'http:': '80',\n 'https:': '443'\n};\nconst URL_REGEX = /^(https?:)?\\/\\/([^/:]+)?(:(\\d+))?/;\nconst opaqueOriginSchemes = ['file:', 'data:'];\n/**\n * Converts a src value into an origin.\n */\nexport default (src) => {\n if (src && opaqueOriginSchemes.find(scheme => src.startsWith(scheme))) {\n // The origin of the child document is an opaque origin and its\n // serialization is \"null\"\n // https://html.spec.whatwg.org/multipage/origin.html#origin\n return 'null';\n }\n // Note that if src is undefined, then srcdoc is being used instead of src\n // and we can follow this same logic below to get the origin of the parent,\n // which is the origin that we will need to use.\n const location = document.location;\n const regexResult = URL_REGEX.exec(src);\n let protocol;\n let hostname;\n let port;\n if (regexResult) {\n // It's an absolute URL. Use the parsed info.\n // regexResult[1] will be undefined if the URL starts with //\n protocol = (regexResult[1] ? regexResult[1] : location.protocol);\n hostname = regexResult[2];\n port = regexResult[4];\n }\n else {\n // It's a relative path. Use the current location's info.\n protocol = location.protocol;\n hostname = location.hostname;\n port = location.port;\n }\n // If the port is the default for the protocol, we don't want to add it to the origin string\n // or it won't match the message's event.origin.\n const portSuffix = port && port !== DEFAULT_PORT_BY_PROTOCOL[protocol] ? `:${port}` : '';\n return `${protocol}//${hostname}${portSuffix}`;\n};\n","/**\n * Converts an error object into a plain object.\n */\nexport const serializeError = ({ name, message, stack }) => ({\n name,\n message,\n stack\n});\n/**\n * Converts a plain object into an error object.\n */\nexport const deserializeError = (obj) => {\n const deserializedError = new Error();\n // @ts-ignore\n Object.keys(obj).forEach(key => (deserializedError[key] = obj[key]));\n return deserializedError;\n};\n","let id = 0;\n/**\n * @return {number} A unique ID (not universally unique)\n */\nexport default () => ++id;\n","import generateId from './generateId';\nimport { deserializeError } from './errorSerialization';\nimport { ErrorCode, MessageType, NativeEventType, Resolution } from './enums';\n/**\n * Augments an object with methods that match those defined by the remote. When these methods are\n * called, a \"call\" message will be sent to the remote, the remote's corresponding method will be\n * executed, and the method's return value will be returned via a message.\n * @param {Object} callSender Sender object that should be augmented with methods.\n * @param {Object} info Information about the local and remote windows.\n * @param {Array} methodNames Names of methods available to be called on the remote.\n * @param {Promise} destructionPromise A promise resolved when destroy() is called on the penpal\n * connection.\n * @returns {Object} The call sender object with methods that may be called.\n */\nexport default (callSender, info, methodNames, destroyConnection, log) => {\n const { localName, local, remote, originForSending, originForReceiving } = info;\n let destroyed = false;\n log(`${localName}: Connecting call sender`);\n const createMethodProxy = (methodName) => {\n return (...args) => {\n log(`${localName}: Sending ${methodName}() call`);\n // This handles the case where the iframe has been removed from the DOM\n // (and therefore its window closed), the consumer has not yet\n // called destroy(), and the user calls a method exposed by\n // the remote. We detect the iframe has been removed and force\n // a destroy() immediately so that the consumer sees the error saying\n // the connection has been destroyed. We wrap this check in a try catch\n // because Edge throws an \"Object expected\" error when accessing\n // contentWindow.closed on a contentWindow from an iframe that's been\n // removed from the DOM.\n let iframeRemoved;\n try {\n if (remote.closed) {\n iframeRemoved = true;\n }\n }\n catch (e) {\n iframeRemoved = true;\n }\n if (iframeRemoved) {\n destroyConnection();\n }\n if (destroyed) {\n const error = new Error(`Unable to send ${methodName}() call due ` + `to destroyed connection`);\n error.code = ErrorCode.ConnectionDestroyed;\n throw error;\n }\n return new Promise((resolve, reject) => {\n const id = generateId();\n const handleMessageEvent = (event) => {\n if (event.source !== remote ||\n event.data.penpal !== MessageType.Reply ||\n event.data.id !== id) {\n return;\n }\n if (event.origin !== originForReceiving) {\n log(`${localName} received message from origin ${event.origin} which did not match expected origin ${originForReceiving}`);\n return;\n }\n const replyMessage = event.data;\n log(`${localName}: Received ${methodName}() reply`);\n local.removeEventListener(NativeEventType.Message, handleMessageEvent);\n let returnValue = replyMessage.returnValue;\n if (replyMessage.returnValueIsError) {\n returnValue = deserializeError(returnValue);\n }\n (replyMessage.resolution === Resolution.Fulfilled ? resolve : reject)(returnValue);\n };\n local.addEventListener(NativeEventType.Message, handleMessageEvent);\n const callMessage = {\n penpal: MessageType.Call,\n id,\n methodName,\n args\n };\n remote.postMessage(callMessage, originForSending);\n });\n };\n };\n methodNames.reduce((api, methodName) => {\n api[methodName] = createMethodProxy(methodName);\n return api;\n }, callSender);\n return () => {\n destroyed = true;\n };\n};\n","import connectCallReceiver from '../connectCallReceiver';\nimport connectCallSender from '../connectCallSender';\n/**\n * Handles an ACK handshake message.\n */\nexport default (methods, childOrigin, originForSending, destructor, log) => {\n const { destroy, onDestroy } = destructor;\n let destroyCallReceiver;\n let receiverMethodNames;\n // We resolve the promise with the call sender. If the child reconnects\n // (for example, after refreshing or navigating to another page that\n // uses Penpal, we'll update the call sender with methods that match the\n // latest provided by the child.\n const callSender = {};\n return (event) => {\n if (event.origin !== childOrigin) {\n log(`Parent: Handshake - Received ACK message from origin ${event.origin} which did not match expected origin ${childOrigin}`);\n return;\n }\n log('Parent: Handshake - Received ACK');\n const info = {\n localName: 'Parent',\n local: window,\n remote: event.source,\n originForSending: originForSending,\n originForReceiving: childOrigin\n };\n // If the child reconnected, we need to destroy the prior call receiver\n // before setting up a new one.\n if (destroyCallReceiver) {\n destroyCallReceiver();\n }\n destroyCallReceiver = connectCallReceiver(info, methods, log);\n onDestroy(destroyCallReceiver);\n // If the child reconnected, we need to remove the methods from the\n // previous call receiver off the sender.\n if (receiverMethodNames) {\n receiverMethodNames.forEach(receiverMethodName => {\n delete callSender[receiverMethodName];\n });\n }\n receiverMethodNames = event.data.methodNames;\n const destroyCallSender = connectCallSender(callSender, info, receiverMethodNames, destroy, log);\n onDestroy(destroyCallSender);\n return callSender;\n };\n};\n","import { serializeError } from './errorSerialization';\nimport { MessageType, NativeEventType, NativeErrorName, Resolution } from './enums';\n/**\n * Listens for \"call\" messages coming from the remote, executes the corresponding method, and\n * responds with the return value.\n */\nexport default (info, methods, log) => {\n const { localName, local, remote, originForSending, originForReceiving } = info;\n let destroyed = false;\n const handleMessageEvent = (event) => {\n if (event.source !== remote || event.data.penpal !== MessageType.Call) {\n return;\n }\n if (event.origin !== originForReceiving) {\n log(`${localName} received message from origin ${event.origin} which did not match expected origin ${originForReceiving}`);\n return;\n }\n const callMessage = event.data;\n const { methodName, args, id } = callMessage;\n log(`${localName}: Received ${methodName}() call`);\n const createPromiseHandler = (resolution) => {\n return (returnValue) => {\n log(`${localName}: Sending ${methodName}() reply`);\n if (destroyed) {\n // It's possible to throw an error here, but it would need to be thrown asynchronously\n // and would only be catchable using window.onerror. This is because the consumer\n // is merely returning a value from their method and not calling any function\n // that they could wrap in a try-catch. Even if the consumer were to catch the error,\n // the value of doing so is questionable. Instead, we'll just log a message.\n log(`${localName}: Unable to send ${methodName}() reply due to destroyed connection`);\n return;\n }\n const message = {\n penpal: MessageType.Reply,\n id,\n resolution,\n returnValue\n };\n if (resolution === Resolution.Rejected &&\n returnValue instanceof Error) {\n message.returnValue = serializeError(returnValue);\n message.returnValueIsError = true;\n }\n try {\n remote.postMessage(message, originForSending);\n }\n catch (err) {\n // If a consumer attempts to send an object that's not cloneable (e.g., window),\n // we want to ensure the receiver's promise gets rejected.\n if (err.name === NativeErrorName.DataCloneError) {\n const errorReplyMessage = {\n penpal: MessageType.Reply,\n id,\n resolution: Resolution.Rejected,\n returnValue: serializeError(err),\n returnValueIsError: true\n };\n remote.postMessage(errorReplyMessage, originForSending);\n }\n throw err;\n }\n };\n };\n new Promise(resolve => resolve(methods[methodName].apply(methods, args))).then(createPromiseHandler(Resolution.Fulfilled), createPromiseHandler(Resolution.Rejected));\n };\n local.addEventListener(NativeEventType.Message, handleMessageEvent);\n return () => {\n destroyed = true;\n local.removeEventListener(NativeEventType.Message, handleMessageEvent);\n };\n};\n","import { ErrorCode, MessageType, NativeEventType } from '../enums';\nimport createDestructor from '../createDestructor';\nimport createLogger from '../createLogger';\nimport getOriginFromSrc from './getOriginFromSrc';\nimport handleAckMessageFactory from './handleAckMessageFactory';\nimport handleSynMessageFactory from './handleSynMessageFactory';\nimport monitorIframeRemoval from './monitorIframeRemoval';\nimport startConnectionTimeout from '../startConnectionTimeout';\nimport validateIframeHasSrcOrSrcDoc from './validateIframeHasSrcOrSrcDoc';\n/**\n * Attempts to establish communication with an iframe.\n */\nexport default (options) => {\n let { iframe, methods = {}, childOrigin, timeout, debug = false } = options;\n const log = createLogger(debug);\n const destructor = createDestructor();\n const { onDestroy, destroy } = destructor;\n if (!childOrigin) {\n validateIframeHasSrcOrSrcDoc(iframe);\n childOrigin = getOriginFromSrc(iframe.src);\n }\n // If event.origin is \"null\", the remote protocol is file: or data: and we\n // must post messages with \"*\" as targetOrigin when sending messages.\n // https://developer.mozilla.org/en-US/docs/Web/API/Window/postMessage#Using_window.postMessage_in_extensions\n const originForSending = childOrigin === 'null' ? '*' : childOrigin;\n const handleSynMessage = handleSynMessageFactory(log, methods, childOrigin, originForSending);\n const handleAckMessage = handleAckMessageFactory(methods, childOrigin, originForSending, destructor, log);\n const promise = new Promise((resolve, reject) => {\n const stopConnectionTimeout = startConnectionTimeout(timeout, destroy);\n const handleMessage = (event) => {\n if (event.source !== iframe.contentWindow || !event.data) {\n return;\n }\n if (event.data.penpal === MessageType.Syn) {\n handleSynMessage(event);\n return;\n }\n if (event.data.penpal === MessageType.Ack) {\n const callSender = handleAckMessage(event);\n if (callSender) {\n stopConnectionTimeout();\n resolve(callSender);\n }\n return;\n }\n };\n window.addEventListener(NativeEventType.Message, handleMessage);\n log('Parent: Awaiting handshake');\n monitorIframeRemoval(iframe, destructor);\n onDestroy((error) => {\n window.removeEventListener(NativeEventType.Message, handleMessage);\n if (!error) {\n error = new Error('Connection destroyed');\n error.code = ErrorCode.ConnectionDestroyed;\n }\n reject(error);\n });\n });\n return {\n promise,\n destroy() {\n // Don't allow consumer to pass an error into destroy.\n destroy();\n }\n };\n};\n","export default (debug) => {\n /**\n * Logs a message if debug is enabled.\n */\n return (...args) => {\n if (debug) {\n console.log('[Penpal]', ...args); // eslint-disable-line no-console\n }\n };\n};\n","export default () => {\n const callbacks = [];\n let destroyed = false;\n return {\n destroy(error) {\n destroyed = true;\n callbacks.forEach(callback => {\n callback(error);\n });\n },\n onDestroy(callback) {\n destroyed ? callback() : callbacks.push(callback);\n }\n };\n};\n","import { ErrorCode } from '../enums';\nexport default (iframe) => {\n if (!iframe.src && !iframe.srcdoc) {\n const error = new Error('Iframe must have src or srcdoc property defined.');\n error.code = ErrorCode.NoIframeSrc;\n throw error;\n }\n};\n","import { MessageType } from '../enums';\n/**\n * Handles a SYN handshake message.\n */\nexport default (log, methods, childOrigin, originForSending) => {\n return (event) => {\n if (event.origin !== childOrigin) {\n log(`Parent: Handshake - Received SYN message from origin ${event.origin} which did not match expected origin ${childOrigin}`);\n return;\n }\n log('Parent: Handshake - Received SYN, responding with SYN-ACK');\n const synAckMessage = {\n penpal: MessageType.SynAck,\n methodNames: Object.keys(methods)\n };\n event.source.postMessage(synAckMessage, originForSending);\n };\n};\n","import { ErrorCode } from './enums';\n/**\n * Starts a timeout and calls the callback with an error\n * if the timeout completes before the stop function is called.\n */\nexport default (timeout, callback) => {\n let timeoutId;\n if (timeout !== undefined) {\n timeoutId = window.setTimeout(() => {\n const error = new Error(`Connection timed out after ${timeout}ms`);\n error.code = ErrorCode.ConnectionTimeout;\n callback(error);\n }, timeout);\n }\n return () => {\n clearTimeout(timeoutId);\n };\n};\n","const CHECK_IFRAME_IN_DOC_INTERVAL = 60000;\n/**\n * Monitors for iframe removal and destroys connection if iframe\n * is found to have been removed from DOM. This is to prevent memory\n * leaks when the iframe is removed from the document and the consumer\n * hasn't called destroy(). Without this, event listeners attached to\n * the window would stick around and since the event handlers have a\n * reference to the iframe in their closures, the iframe would stick\n * around too.\n */\nexport default (iframe, destructor) => {\n const { destroy, onDestroy } = destructor;\n const checkIframeInDocIntervalId = setInterval(() => {\n if (!iframe.isConnected) {\n clearInterval(checkIframeInDocIntervalId);\n destroy();\n }\n }, CHECK_IFRAME_IN_DOC_INTERVAL);\n onDestroy(() => {\n clearInterval(checkIframeInDocIntervalId);\n });\n};\n","import { IFRAME_URL } from \"./constants\";\nimport { connectToChild } from \"penpal\";\nimport { Connection } from \"penpal/lib/types\";\n\nimport {\n ITableMessage,\n IMessagesForCell,\n IColumnHook,\n IColumnHookInput,\n IColumnHookOutput,\n IRowHook,\n IRowHookInput,\n IRowHookOutput,\n IDeveloperField,\n IDeveloperSettings,\n IDeveloperStyleOverrides,\n IUser,\n IValidatorField,\n IRowHookOutputInternal,\n IResultMetadata,\n EStepHook,\n IReviewStepData,\n IStepHook,\n IUploadStepData,\n IRowDeleteHook,\n IBulkRowHook,\n IBeforeFinishCallback,\n IBeforeFinishOutput,\n IPositionSpec,\n IConnectionMethods,\n ISelectField,\n IImporterOptions,\n IAllHooks,\n IRowToAdd,\n} from \"./interfaces\";\n\nconst DROMO_WRAPPER_SUFFIX = \"dromo-container\";\nconst IFRAME_SUFFIX = \"dromo-iframe-element\";\n\ndeclare global {\n interface Window {\n DROMO_WIDGET_OVERRIDE?: string;\n }\n}\n\nconst makeFieldSerializable = (field: IDeveloperField) => {\n const newField = { ...field };\n if (newField.validators) {\n newField.validators = newField.validators.map((validator) => {\n if (\n (validator.validate === \"regex_match\" ||\n validator.validate === \"regex_exclude\") &&\n validator.regex instanceof RegExp\n ) {\n return {\n ...validator,\n regex: validator.regex.source,\n regexOptions: {\n ignoreCase: validator.regex.flags.includes(\"i\"),\n dotAll: validator.regex.flags.includes(\"s\"),\n multiline: validator.regex.flags.includes(\"m\"),\n unicode: validator.regex.flags.includes(\"u\"),\n },\n };\n }\n return validator;\n });\n }\n return newField;\n};\n\nexport default class DromoUploader {\n // Unique IDs for iframe and container\n /** @internal */\n iframeId: string;\n /** @internal */\n wrapperId: string;\n\n // Refers to unique backend license key\n /** @internal */\n licenseKey: string;\n // See DeveloperFieldsSchema\n /** @internal */\n fields: IDeveloperField[] | undefined;\n // See DeveloperSettingsSchema\n /** @internal */\n settings: IDeveloperSettings | undefined;\n // See UserSchema\n /** @internal */\n user: IUser | undefined;\n // If the user is using a saved schema, its name\n /** @internal */\n schemaName: string | undefined;\n // DevelopmentMode\n /** @internal */\n developmentMode: boolean | undefined;\n // Header Row Override\n /** @internal */\n headerRowOverride: number | null | undefined;\n\n // HTML references\n /** @internal */\n iframe: HTMLIFrameElement | undefined;\n /** @internal */\n wrapper: HTMLElement | undefined;\n\n // Penpal connection reference\n /** @internal */\n connection: Connection<IConnectionMethods> | undefined;\n\n // Data Hooks\n /** @internal */\n columnHooks: IColumnHook[] = [];\n /** @internal */\n bulkRowHooks: IBulkRowHook[] = [];\n /** @internal */\n rowHooks: { callback: IRowHook }[] = [];\n /** @internal */\n stepHooks: IStepHook[] = [];\n /** @internal */\n rowDeleteHooks: IRowDeleteHook[] = [];\n\n // Callbacks\n /** @internal */\n beforeFinishCallback: IBeforeFinishCallback | undefined;\n /** @internal */\n resultsCallback:\n | ((data: any, metadata: IResultMetadata) => Promise<void> | void)\n | undefined;\n\n /** @internal */\n cancelCallback: (() => void) | undefined;\n\n /** @internal */\n appHost: string;\n\n constructor(\n licenseKey: string,\n fields: IDeveloperField[],\n settings: IDeveloperSettings,\n user: IUser\n );\n\n constructor(licenseKey: string, schemaName: string);\n\n constructor(\n licenseKey: string,\n fieldsOrSchemaName: IDeveloperField[] | string,\n settings?: IDeveloperSettings,\n user?: IUser\n ) {\n this.iframeId =\n Math.random().toString(36).substring(7) + \"-\" + IFRAME_SUFFIX;\n this.wrapperId =\n Math.random().toString(36).substring(7) + \"-\" + DROMO_WRAPPER_SUFFIX;\n this.appHost = document.location.hostname;\n\n if (settings !== undefined && user !== undefined) {\n this.licenseKey = licenseKey;\n this.fields = (fieldsOrSchemaName as IDeveloperField[]).map(\n makeFieldSerializable\n );\n this.settings = settings;\n this.user = user;\n } else {\n this.licenseKey = licenseKey;\n this.schemaName = fieldsOrSchemaName as string;\n }\n }\n\n initChild = async () => {\n if (!this.connection) {\n console.error(\"shim cannot connect with Dromo service.\");\n return;\n }\n\n const child = await this.connection.promise;\n\n // We check to see if this was loaded from either an SDK or snippet that didn't specify a version\n // If it was, this is a legacy snippet/sdk and we should NOT show the redesigned UI\n const loadedFromUnVersionedScript = Array.from(\n document.getElementsByTagName(\"script\")\n ).some(\n (s) =>\n s.src === \"https://unpkg.com/dromo-uploader-js/dist/DromoUploader.js\" ||\n s.src ===\n \"https://cdn.jsdelivr.net/npm/dromo-uploader-js@latest/dist/DromoUploader.js\"\n );\n\n if (this.fields && this.settings && this.user) {\n const settings = { ...this.settings };\n if (!loadedFromUnVersionedScript) {\n settings.version = settings.version ?? \"v2\";\n }\n settings.browserExcelParsing = settings.browserExcelParsing ?? true;\n\n await child.init(\n this.licenseKey,\n this.fields,\n settings,\n this.user,\n this.appHost\n );\n } else if (this.schemaName) {\n await child.initFromSavedSchema(\n this.licenseKey,\n this.schemaName,\n this.appHost,\n {\n user: this.user,\n developmentMode: this.developmentMode,\n headerRowOverride: this.headerRowOverride,\n }\n );\n } else {\n console.error(\"Invalid Dromo configuration\");\n }\n\n await child.setNumRegisteredRowHooks(this.totalNumRowHooks());\n await child.setNumRegisteredColHooks(this.columnHooks.length);\n await child.setNumRegisteredRowDeleteHooks(this.rowDeleteHooks.length);\n };\n\n /**\n * Creates the iframe object\n * @internal\n */\n initIFrame = () => {\n if (!document.getElementById(this.iframeId)) {\n const iframe = document.createElement(\"iframe\");\n const identifier = this.settings?.importIdentifier ?? this.schemaName;\n iframe.title = identifier\n ? `Dromo Importer: ${identifier}`\n : \"Dromo Importer\";\n iframe.src = window.DROMO_WIDGET_OVERRIDE || IFRAME_URL;\n iframe.id = this.iframeId;\n iframe.style.height = \"100%\";\n iframe.style.width = \"100%\";\n iframe.style.border = \"0\";\n // @ts-ignore\n iframe.crossorigin = \"anonymous\";\n this.iframe = iframe;\n }\n };\n\n /**\n * Uses Penpal to create a connection with the iframe that was created\n * @internal\n */\n createConnection = () => {\n // eslint-disable-next-line @typescript-eslint/no-this-alias\n const self = this;\n const iframe = this.iframe;\n\n if (!iframe) {\n console.error(\"shim cannot connect to Dromo.\");\n return;\n }\n this.connection = connectToChild<IConnectionMethods>({\n iframe,\n methods: {\n /**\n * Called for each column/field. Sends all data and expects all the\n * relevant column hooks to be evaluated.\n *\n * @param fieldName the fieldname key for the column\n * @param data the full column of data for the particular key\n */\n async handleColumnHooks(\n fieldName: string,\n data: IColumnHookInput[]\n ): Promise<IColumnHookOutput[]> {\n // Get all the hooks for this particular field\n const hooks = self.columnHooks.filter(\n (h) => h.fieldName === fieldName\n );\n // key is the index in the column (row). Value stores newValue and info.\n // This is the final object that is passed to the app to apply to the\n // global data state.\n const changes = new Map<\n number,\n { newValue?: string; info?: ITableMessage[] }\n >();\n // Each hook call updates this tmpData object with the latest values.\n // This allows us to run hooks sequentially with each subsequent call\n // having the most up to date data\n const tmpData: IColumnHookInput[] = data;\n\n // For each registered hook, call the developer defined callback\n await hooks.reduce(async (previousHookPromise, currentHook) => {\n await previousHookPromise.then(async () => {\n try {\n const hookResponse = await currentHook.callback(tmpData);\n hookResponse.forEach((hookOutput: IColumnHookOutput) => {\n // If the user has updated the value or info for a particular\n // index update the changes map, and the tmpData\n if (\n hookOutput.value !== undefined ||\n hookOutput.info !== undefined\n ) {\n const change: {\n value?: string;\n info?: ITableMessage[];\n } = {};\n if (hookOutput.value !== undefined) {\n change.value = hookOutput.value;\n tmpData[hookOutput.index] = hookOutput.value;\n }\n if (hookOutput.info !== undefined)\n change.info = hookOutput.info;\n changes.set(hookOutput.index, change);\n }\n });\n } catch (err) {\n console.error(\n \"[Dromo-External-Error] There was an error running your col hook.\",\n err\n );\n }\n });\n }, Promise.resolve());\n\n // Change the map into IColumnHookOuput for the application to process\n const columnHookOutput: IColumnHookOutput[] = [];\n changes.forEach((change, index) =>\n columnHookOutput.push({ ...change, index })\n );\n return columnHookOutput;\n },\n\n /**\n * Called singularly for each row. Goes through all row hooks and\n * evaluates them.\n *\n * @param data an array of row data objects\n */\n async handleRowHooks(\n data: IRowHookInput[],\n mode: \"init\" | \"update\"\n ): Promise<IRowHookOutputInternal[]> {\n // Changes is the final changes that will be sent to the frontend\n const changes = new Map<number, IRowHookOutput[\"row\"]>();\n const hookData = new Map(\n data.map((inputRow) => [inputRow.index, inputRow])\n );\n\n // a helper function called for each row that updates the final changes\n // as well as the row data which will be passed to subsequent hooks\n const updateForRow = (\n rowIndex: number,\n rowOutput: IRowHookOutput[\"row\"]\n ) => {\n for (const [fieldName, fieldOutput] of Object.entries(\n rowOutput ?? {}\n )) {\n if (\n fieldOutput.value === undefined &&\n fieldOutput.info === undefined &&\n fieldOutput.selectOptions === undefined\n )\n return;\n\n const rowData = hookData.get(rowIndex)!;\n const rowChanges = changes.get(rowIndex) || {};\n\n const change: {\n value?: string;\n info?: ITableMessage[];\n selectOptions?: ISelectField[\"selectOptions\"];\n } = rowChanges[fieldName] ?? {};\n\n // if there are any changes, we want to both update the changes\n // object sent to the app, and the rowInput sent to subsequent\n // row hooks running on this row so they see the changes from\n // prior row hooks\n if (fieldOutput.value !== undefined) {\n change.value = fieldOutput.value;\n rowData.row[fieldName].value = fieldOutput.value;\n }\n\n if (fieldOutput.info !== undefined) {\n change.info = fieldOutput.info;\n rowData.row[fieldName].info = fieldOutput.info;\n }\n\n if (fieldOutput.selectOptions !== undefined) {\n change.selectOptions = fieldOutput.selectOptions;\n rowData.row[fieldName].selectOptions =\n fieldOutput.selectOptions;\n }\n\n rowChanges[fieldName] = change;\n changes.set(rowIndex, rowChanges);\n }\n };\n\n // First we run the bulk row hooks with all of the input data\n for (const bulkRowHook of self.bulkRowHooks) {\n try {\n const hookOutput = await bulkRowHook(data, mode);\n for (const rowOutput of hookOutput) {\n updateForRow(rowOutput.index, rowOutput.row);\n }\n } catch (err) {\n console.error(\n \"[Dromo-External-Error] There was an error running your bulk row hook.\",\n err\n );\n }\n }\n\n // We want to loop through each row independently. Because each\n // row's execution is independent, we can do row by row first vs\n // hook by hook\n await Promise.all(\n data.map(async (rowInput: IRowHookInput) => {\n for (const rowHook of self.rowHooks) {\n try {\n const hookOutput = await rowHook.callback(rowInput, mode);\n updateForRow(rowInput.index, hookOutput.row);\n } catch (err) {\n console.error(\n \"[Dromo-External-Error] There was an error running your row hook.\",\n err\n );\n }\n }\n })\n );\n\n const finalChanges: IRowHookOutputInternal[] = [];\n\n changes.forEach((rowChanges, rowIndex) => {\n finalChanges.push({ index: rowIndex, row: rowChanges });\n });\n\n return finalChanges;\n },\n handleStepHook(\n step: EStepHook,\n data: IUploadStepData | IReviewStepData\n ) {\n self.stepHooks.forEach((hook) => {\n if (step !== hook.type) return;\n try {\n hook.callback(self, data);\n } catch (err) {\n console.error(\n \"[Dromo-External-Error] There was an error in your step callback.\",\n err\n );\n }\n });\n },\n /**\n * Called singularly for each row. Goes through all delete hooks and\n * evaluates them.\n *\n * @param deletedRows - an array of rows deleted from the data\n */\n handleRowDeleteHooks(deletedRows: IRowHookInput[]): Promise<void[]> {\n // We want to loop through each row independently. Because each\n // row's execution is independent, we can do row by row first vs\n // hook by hook\n return Promise.all(\n deletedRows.map(async (rowData: IRowHookInput) => {\n await self.rowDeleteHooks.forEach(async (currentHook) => {\n try {\n await currentHook(rowData);\n } catch (err) {\n console.error(\n \"[Dromo-External-Error] There was an error running your row delete hook.\",\n err\n );\n }\n });\n })\n );\n },\n async handleBeforeFinishCallback(\n data: Record<string, any>[],\n metadata: IResultMetadata\n ): Promise<IBeforeFinishOutput> {\n if (self.beforeFinishCallback) {\n try {\n return await self.beforeFinishCallback(data, metadata, self);\n } catch (err) {\n console.error(\n \"[Dromo-External-Error] There was an error in your beforeFinish callback.\",\n err\n );\n }\n }\n },\n /**\n * Called after the user has completed the Dromo flow, send the\n * cleaned data to the developer\n *\n * TODO: data cannot be of type any. We need to standardize our return\n * type to be Map<string, any>[]\n * @param data cleaned data after the flow is complete\n */\n async handleResults(\n data: any,\n metadata: IResultMetadata\n ): Promise<void> {\n if (self.resultsCallback) {\n try {\n await self.resultsCallback(data, metadata);\n } catch (err) {\n console.error(\n \"[Dromo-External-Error] There was an error in your onResult callback.\",\n err\n );\n }\n }\n self.close();\n },\n /**\n * Called when the modal has been closed by the finishing of the flow\n */\n handleCloseModal() {\n self.close();\n },\n /**\n * Called when the modal has been closed due to the user canceling the\n * flow\n */\n handleCancel() {\n if (self.cancelCallback) {\n try {\n self.cancelCallback();\n } catch (err) {\n console.error(\n \"[Dromo-External-Error] There was an error in your cancel callback.\",\n err\n );\n }\n }\n self.close();\n },\n },\n });\n };\n\n /**\n * Mounts the iframe in the parent HTML page\n * NOTE: Should be called AFTER the PenPal connection has been created\n * @internal\n */\n mountIFrame = () => {\n if (!document.getElementById(this.iframeId!)) {\n const wrapper = document.createElement(\"div\");\n wrapper.id = this.wrapperId;\n wrapper.style.zIndex = Number.MAX_SAFE_INTEGER.toString();\n wrapper.style.visibility = \"hidden\";\n wrapper.style.width = \"0px\";\n wrapper.style.height = \"0px\";\n wrapper.style.position = \"fixed\";\n wrapper.style.top = \"0px\";\n wrapper.style.left = \"0px\";\n wrapper.style.right = \"0px\";\n wrapper.style.bottom = \"0px\";\n wrapper.appendChild(this.iframe as HTMLIFrameElement);\n document.body.appendChild(wrapper);\n this.wrapper = wrapper;\n }\n };\n\n showIFrame = () => {\n if (this.wrapper) {\n this.wrapper.style.visibility = \"visible\";\n this.wrapper.style.width = \"100%\";\n this.wrapper.style.height = \"100%\";\n document.body.style.overflow = \"hidden\";\n }\n };\n\n /**\n * Function called by the developer to set a callback\n *\n * @param fieldName the key of the column for which we want to trigger the\n * callback\n * @param callback developer defined callback that is callback that is added\n * to a list of column hooks\n */\n registerColumnHook = (\n fieldName: IColumnHook[\"fieldName\"],\n callback: IColumnHook[\"callback\"]\n ) => {\n this.columnHooks.push({\n fieldName: fieldName,\n callback: callback,\n });\n\n // This is kept for the JS version - a user can register after the connection\n // has been made and the modal has been opened. It's bad form, but possible\n if (this.connection) {\n this.connection.promise.then((child) => {\n child.setNumRegisteredColHooks(this.columnHooks.length);\n });\n }\n };\n\n /** @internal */\n totalNumRowHooks = () => {\n return this.rowHooks.length + this.bulkRowHooks.length;\n };\n\n /**\n * Function called by the developer to set a callback\n *\n * @param callback developer defined callback that is added to a list of row\n * hooks\n */\n registerBulkRowHook = (bulkRowHook: IBulkRowHook) => {\n this.bulkRowHooks.push(bulkRowHook);\n\n // This is kept for the JS version - a user can register after the connection\n // has been made and the modal has been opened. It's bad form, but possible\n if (this.connection) {\n this.connection.promise.then((child) => {\n child.setNumRegisteredRowHooks(this.totalNumRowHooks());\n });\n }\n };\n\n /**\n * Function called by the developer to set a callback\n *\n * @param callback developer defined callback that is added to a list of row\n * hooks\n */\n registerRowHook = (callback: IRowHook) => {\n this.rowHooks.push({\n callback: callback,\n });\n\n // This is kept for the JS version - a user can register after the connection\n // has been made and the modal has been opened. It's bad form, but possible\n if (this.connection) {\n this.connection.promise.then((child) => {\n child.setNumRegisteredRowHooks(this.totalNumRowHooks());\n });\n }\n };\n\n /**\n * Function called by the developer to set a callback\n *\n * @param callback developer defined callback that is called per step of the\n * import flow\n */\n registerStepHook = (\n type: IStepHook[\"type\"],\n callback: IStepHook[\"callback\"]\n ) => {\n this.stepHooks.push({ type, callback });\n };\n\n /**\n * Function called by the developer to set a row delete callback\n *\n * @param callback developer defined callback that is called per step of the\n * import flow\n */\n registerRowDeleteHook = (callback: IRowDeleteHook) => {\n this.rowDeleteHooks.push(callback);\n // This is kept for the JS version - a user can register after the connection\n // has been made and the modal has been opened. It's bad form, but possible\n if (this.connection) {\n this.connection.promise.then((child) => {\n child.setNumRegisteredRowDeleteHooks(this.rowDeleteHooks.length);\n });\n }\n };\n\n /**\n * Function called by the developer to set the beforeFinish callback\n *\n * @param callback developer defined callback that is called when the user submits\n */\n beforeFinish = (callback: IBeforeFinishCallback): void => {\n this.beforeFinishCallback = callback;\n };\n\n /**\n * Convenience function for setting all hooks at once.\n *\n * @param hooks object containing all hooks to register\n */\n registerAllHooks = (hooks: IAllHooks): void => {\n if (hooks.columnHooks) {\n for (const { fieldName, callback } of hooks.columnHooks) {\n this.registerColumnHook(fieldName, callback);\n }\n }\n\n if (hooks.rowHooks) {\n for (const rowHook of hooks.rowHooks) {\n this.registerRowHook(rowHook);\n }\n }\n\n if (hooks.bulkRowHooks) {\n for (const bulkRowHook of hooks.bulkRowHooks) {\n this.registerBulkRowHook(bulkRowHook);\n }\n }\n\n if (hooks.rowDeleteHooks) {\n for (const rowDeleteHook of hooks.rowDeleteHooks) {\n this.registerRowDeleteHook(rowDeleteHook);\n }\n }\n\n if (hooks.stepHooks) {\n for (const { type, callback } of hooks.stepHooks) {\n this.registerStepHook(type, callback);\n }\n }\n\n if (hooks.beforeFinishCallback) {\n this.beforeFinish(hooks.beforeFinishCallback);\n }\n };\n\n /**\n * Function called by the developer to set a callback\n *\n * @param callback developer defined callback that is called when the import\n * flow completes\n */\n onResults = (\n callback: (\n data: Record<string, string | number | boolean | null>[],\n metadata: IResultMetadata\n ) => Promise<void> | void\n ) => {\n this.resultsCallback = callback;\n };\n\n /**\n * Function called by the developer to set a callback\n *\n * @param callback developer defined callback that is called when the user\n * cancels the import\n */\n onCancel = (callback: () => void) => {\n this.cancelCallback = callback;\n };\n\n /**\n * Function called by the developer to set or reset the user information\n */\n setUser = async (user: IUser) => {\n this.user = user;\n if (this.connection) {\n const child = await this.connection!.promise;\n await child.setUser(this.user);\n }\n };\n\n /**\n * Function called by the developer to add a field midway through the import\n * process\n */\n addField = async (field: IDeveloperField, position?: IPositionSpec) => {\n if (this.connection) {\n const child = await this.connection!.promise;\n await child.addField(makeFieldSerializable(field), position);\n } else {\n console.error(\"[Dromo-Error] Invalid connection to Dromo Uploader.\");\n }\n };\n\n /**\n * Function called by the developer to remove a field. The data won't appear\n * in the user interface nor in the result data.\n */\n removeField = async (fieldKey: string) => {\n if (this.connection) {\n const child = await this.connection!.promise;\n await child.removeField(fieldKey);\n } else {\n console.error(\"[Dromo-Error] Invalid connection to Dromo Uploader.\");\n }\n };\n\n /**\n * Function called by the developer to add new table messages throughout the\n * import process\n */\n updateInfoMessages = async (messages: IMessagesForCell[]) => {\n if (this.connection) {\n const child = await this.connection!.promise;\n await child.updateInfoMessages(messages);\n } else {\n console.error(\"[Dromo-Error] Invalid connection to Dromo Uploader.\");\n }\n };\n\n /**\n * Function called by the developer to change the matchingStep.headerRowOverride\n * setting from a step hook\n */\n setHeaderRowOverride = async (headerRowOverride: number | null) => {\n this.headerRowOverride = headerRowOverride;\n if (this.connection) {\n const child = await this.connection!.promise;\n await child.setHeaderRowOverride(headerRowOverride);\n }\n };\n\n /**\n * Function called by developer called to open the iframe\n */\n open = async () => {\n if (!this.wrapper) {\n this.initIFrame();\n this.createConnection();\n this.mountIFrame();\n }\n\n await this.initChild();\n this.showIFrame();\n };\n\n /**\n * Function called by the developer to add rows during the import\n */\n addRows = async (rows: IRowToAdd[]) => {\n if (this.connection) {\n const child = await this.connection!.promise;\n await child.addRows(rows);\n } else {\n console.error(\"[Dromo-Error] Invalid connection to Dromo Uploader.\");\n }\n };\n\n /**\n * Function called by the developer to remove rows\n */\n removeRows = async (rowIds: string[]) => {\n if (this.connection) {\n const child = await this.connection!.promise;\n await child.removeRows(rowIds);\n } else {\n console.error(\"[Dromo-Error] Invalid connection to Dromo Uploader.\");\n }\n };\n\n /**\n * Function called by developer to close the iframe\n */\n close = () => {\n if (this.wrapper) {\n this.wrapper.style.visibility = \"hidden\";\n this.wrapper.style.width = \"0px\";\n this.wrapper.style.height = \"0px\";\n document.body.style.overflow = \"inherit\";\n }\n };\n\n /**\n * Function called by the developer to set developmentMode\n */\n setDevelopmentMode = async (developmentMode: boolean) => {\n this.developmentMode = developmentMode;\n if (this.connection) {\n const child = await this.connection!.promise;\n await child.setDevelopmentMode(this.developmentMode);\n }\n };\n\n /**\n * @internal\n */\n static rehydrateHeadless = async ({\n licenseKey,\n headlessImportId,\n fields,\n settings,\n hooks,\n rehydrateState,\n }: {\n licenseKey: string;\n headlessImportId: string;\n fields: IDeveloperField[];\n settings: IDeveloperSettings;\n hooks: IAllHooks;\n rehydrateState: any;\n }): Promise<void> => {\n const headlessUser: IUser = { id: \"headless-review\" };\n const dromo = new DromoUploader(licenseKey, fields, settings, headlessUser);\n dromo.registerAllHooks(hooks);\n await dromo.rehydrate(rehydrateState, headlessImportId);\n dromo.open();\n };\n\n /**\n * @internal\n */\n rehydrate = async (rehydrateState: any, headlessImportId: string) => {\n if (!this.wrapper) {\n this.initIFrame();\n this.createConnection();\n this.mountIFrame();\n }\n await this.initChild();\n const child = await this.connection!.promise;\n await child.rehydrate(rehydrateState, headlessImportId);\n this.showIFrame();\n };\n}\n\nexport {\n ITableMessage,\n IMessagesForCell,\n IColumnHook,\n IColumnHookInput,\n IColumnHookOutput,\n IRowHook,\n IRowHookInput,\n IRowHookOutput,\n IDeveloperField,\n IDeveloperSettings,\n IDeveloperStyleOverrides,\n IUser,\n IValidatorField,\n IRowHookOutputInternal,\n IResultMetadata,\n IReviewStepData,\n IStepHook,\n IUploadStepData,\n IRowDeleteHook,\n IBulkRowHook,\n IBeforeFinishCallback,\n IBeforeFinishOutput,\n IPositionSpec,\n IConnectionMethods,\n ISelectField,\n IImporterOptions,\n IAllHooks,\n};\n"],"names":["__assign","Object","assign","t","s","i","n","arguments","length","p","prototype","hasOwnProperty","call","apply","this","__awaiter","thisArg","_arguments","P","generator","Promise","resolve","reject","fulfilled","value","step","next","e","rejected","result","done","then","__generator","body","f","y","g","_","label","sent","trys","ops","verb","throw","return","Symbol","iterator","v","op","TypeError","pop","push","EventTypes","MessageType","Resolution","ErrorCode","NativeErrorName","NativeEventType","IFRAME_URL","DEFAULT_PORT_BY_PROTOCOL","http:","https:","URL_REGEX","opaqueOriginSchemes","serializeError","name","message","stack","id","callSender","info","methodNames","destroyConnection","log","localName","local","remote","originForSending","originForReceiving","destroyed","createMethodProxy","methodName","args","iframeRemoved","closed","error","Error","code","ConnectionDestroyed","generateId","handleMessageEvent","event","source","data","penpal","Reply","origin","replyMessage","removeEventListener","Message","returnValue","returnValueIsError","obj","deserializedError","keys","forEach","key","deserializeError","resolution","Fulfilled","addEventListener","callMessage","Call","postMessage","reduce","api","methods","childOrigin","destructor","destroy","onDestroy","destroyCallReceiver","receiverMethodNames","window","createPromiseHandler","Rejected","err","DataCloneError","errorReplyMessage","connectCallReceiver","receiverMethodName","destroyCallSender","connectCallSender","options","iframe","timeout","debug","console","createLogger","callbacks","[object Object]","callback","createDestructor","src","srcdoc","NoIframeSrc","validateIframeHasSrcOrSrcDoc","find","scheme","startsWith","location","document","regexResult","exec","protocol","hostname","port","getOriginFromSrc","handleSynMessage","synAckMessage","SynAck","handleSynMessageFactory","handleAckMessage","handleAckMessageFactory","promise","stopConnectionTimeout","timeoutId","undefined","setTimeout","ConnectionTimeout","clearTimeout","startConnectionTimeout","handleMessage","contentWindow","Syn","Ack","checkIframeInDocIntervalId","setInterval","isConnected","clearInterval","monitorIframeRemoval","makeFieldSerializable","field","newField","validators","map","validator","validate","regex","RegExp","regexOptions","ignoreCase","flags","includes","dotAll","multiline","unicode","licenseKey","fieldsOrSchemaName","settings","user","connection","child","_c","loadedFromUnVersionedScript","Array","from","getElementsByTagName","some","fields","version","browserExcelParsing","init","appHost","schemaName","initFromSavedSchema","developmentMode","headerRowOverride","setNumRegisteredRowHooks","totalNumRowHooks","setNumRegisteredColHooks","columnHooks","setNumRegisteredRowDeleteHooks","rowDeleteHooks","getElementById","_this","iframeId","createElement","identifier","importIdentifier","title","DROMO_WIDGET_OVERRIDE","style","height","width","border","crossorigin","self","connectToChild","handleColumnHooks","fieldName","hooks","filter","h","changes","Map","tmpData","previousHookPromise","currentHook","_a","hookOutput","change","index","set","err_1","columnHookOutput","handleRowHooks","mode","hookData","inputRow","updateForRow","rowIndex","rowOutput","_b","entries","_i","fieldOutput","selectOptions","rowData","get","rowChanges","row","bulkRowHooks","bulkRowHook","hookOutput_1","err_2","all","rowInput","rowHooks","rowHook","err_3","finalChanges","handleStepHook","stepHooks","hook","type","handleRowDeleteHooks","deletedRows","err_4","handleBeforeFinishCallback","metadata","beforeFinishCallback","err_5","handleResults","resultsCallback","err_6","close","handleCloseModal","handleCancel","cancelCallback","wrapper","wrapperId","zIndex","Number","MAX_SAFE_INTEGER","toString","visibility","position","top","left","right","bottom","appendChild","overflow","registerColumnHook","_d","registerRowHook","_f","_e","registerBulkRowHook","_h","_g","rowDeleteHook","registerRowDeleteHook","_k","_j","_l","registerStepHook","beforeFinish","setUser","addField","fieldKey","removeField","messages","updateInfoMessages","setHeaderRowOverride","initIFrame","createConnection","mountIFrame","initChild","showIFrame","rows","addRows","rowIds","removeRows","setDevelopmentMode","rehydrateState","headlessImportId","rehydrate","Math","random","substring","DromoUploader","dromo","registerAllHooks","open"],"mappings":"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"}
|
package/dist/index.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { ITableMessage, IMessagesForCell, IColumnHook, IColumnHookInput, IColumnHookOutput, IRowHook, IRowHookInput, IRowHookOutput, IDeveloperField, IDeveloperSettings, IDeveloperStyleOverrides, IUser, IValidatorField, IRowHookOutputInternal, IResultMetadata, IReviewStepData, IStepHook, IUploadStepData, IRowDeleteHook, IBulkRowHook, IBeforeFinishCallback, IBeforeFinishOutput, IPositionSpec, IConnectionMethods, ISelectField, IImporterOptions, IAllHooks } from "./interfaces";
|
|
1
|
+
import { ITableMessage, IMessagesForCell, IColumnHook, IColumnHookInput, IColumnHookOutput, IRowHook, IRowHookInput, IRowHookOutput, IDeveloperField, IDeveloperSettings, IDeveloperStyleOverrides, IUser, IValidatorField, IRowHookOutputInternal, IResultMetadata, IReviewStepData, IStepHook, IUploadStepData, IRowDeleteHook, IBulkRowHook, IBeforeFinishCallback, IBeforeFinishOutput, IPositionSpec, IConnectionMethods, ISelectField, IImporterOptions, IAllHooks, IRowToAdd } from "./interfaces";
|
|
2
2
|
declare global {
|
|
3
3
|
interface Window {
|
|
4
4
|
DROMO_WIDGET_OVERRIDE?: string;
|
|
@@ -104,6 +104,14 @@ export default class DromoUploader {
|
|
|
104
104
|
* Function called by developer called to open the iframe
|
|
105
105
|
*/
|
|
106
106
|
open: () => Promise<void>;
|
|
107
|
+
/**
|
|
108
|
+
* Function called by the developer to add rows during the import
|
|
109
|
+
*/
|
|
110
|
+
addRows: (rows: IRowToAdd[]) => Promise<void>;
|
|
111
|
+
/**
|
|
112
|
+
* Function called by the developer to remove rows
|
|
113
|
+
*/
|
|
114
|
+
removeRows: (rowIds: string[]) => Promise<void>;
|
|
107
115
|
/**
|
|
108
116
|
* Function called by developer to close the iframe
|
|
109
117
|
*/
|
package/dist/index.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
!function(e,
|
|
1
|
+
!function(e,n){"object"==typeof exports&&"undefined"!=typeof module?module.exports=n():"function"==typeof define&&define.amd?define(n):(e="undefined"!=typeof globalThis?globalThis:e||self).DromoUploader=n()}(this,(function(){"use strict";
|
|
2
2
|
/*! *****************************************************************************
|
|
3
3
|
Copyright (c) Microsoft Corporation.
|
|
4
4
|
|
|
@@ -12,5 +12,5 @@
|
|
|
12
12
|
LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
|
|
13
13
|
OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
|
|
14
14
|
PERFORMANCE OF THIS SOFTWARE.
|
|
15
|
-
***************************************************************************** */var e=function(){return(e=Object.assign||function(e){for(var t,n=1,o=arguments.length;n<o;n++)for(var r in t=arguments[n])Object.prototype.hasOwnProperty.call(t,r)&&(e[r]=t[r]);return e}).apply(this,arguments)};function t(e,t,n,o){return new(n||(n=Promise))((function(r,i){function s(e){try{c(o.next(e))}catch(e){i(e)}}function a(e){try{c(o.throw(e))}catch(e){i(e)}}function c(e){var t;e.done?r(e.value):(t=e.value,t instanceof n?t:new n((function(e){e(t)}))).then(s,a)}c((o=o.apply(e,t||[])).next())}))}function n(e,t){var n,o,r,i,s={label:0,sent:function(){if(1&r[0])throw r[1];return r[1]},trys:[],ops:[]};return i={next:a(0),throw:a(1),return:a(2)},"function"==typeof Symbol&&(i[Symbol.iterator]=function(){return this}),i;function a(i){return function(a){return function(i){if(n)throw new TypeError("Generator is already executing.");for(;s;)try{if(n=1,o&&(r=2&i[0]?o.return:i[0]?o.throw||((r=o.return)&&r.call(o),0):o.next)&&!(r=r.call(o,i[1])).done)return r;switch(o=0,r&&(i=[2&i[0],r.value]),i[0]){case 0:case 1:r=i;break;case 4:return s.label++,{value:i[1],done:!1};case 5:s.label++,o=i[1],i=[0];continue;case 7:i=s.ops.pop(),s.trys.pop();continue;default:if(!(r=s.trys,(r=r.length>0&&r[r.length-1])||6!==i[0]&&2!==i[0])){s=0;continue}if(3===i[0]&&(!r||i[1]>r[0]&&i[1]<r[3])){s.label=i[1];break}if(6===i[0]&&s.label<r[1]){s.label=r[1],r=i;break}if(r&&s.label<r[2]){s.label=r[2],s.ops.push(i);break}r[2]&&s.ops.pop(),s.trys.pop();continue}i=t.call(e,s)}catch(e){i=[6,e],o=0}finally{n=r=0}if(5&i[0])throw i[1];return{value:i[0]?i[1]:void 0,done:!0}}([i,a])}}}var o,r,i,s,a,c,l={IFRAME_URL:"https://widget.dromo.io/"}.IFRAME_URL;!function(e){e.INIT_IFRAME="INIT_IFRAME"}(o||(o={})),function(e){e.Call="call",e.Reply="reply",e.Syn="syn",e.SynAck="synAck",e.Ack="ack"}(r||(r={})),function(e){e.Fulfilled="fulfilled",e.Rejected="rejected"}(i||(i={})),function(e){e.ConnectionDestroyed="ConnectionDestroyed",e.ConnectionTimeout="ConnectionTimeout",e.NotInIframe="NotInIframe",e.NoIframeSrc="NoIframeSrc"}(s||(s={})),function(e){e.DataCloneError="DataCloneError"}(a||(a={})),function(e){e.Message="message"}(c||(c={}));const u={"http:":"80","https:":"443"},d=/^(https?:)?\/\/([^/:]+)?(:(\d+))?/,h=["file:","data:"];const f=({name:e,message:t,stack:n})=>({name:e,message:t,stack:n});let m=0;var p=()=>++m,v=(e,t,n,o,a)=>{const{localName:l,local:u,remote:d,originForSending:h,originForReceiving:f}=t;let m=!1;a(`${l}: Connecting call sender`);const v=e=>(...t)=>{let n;a(`${l}: Sending ${e}() call`);try{d.closed&&(n=!0)}catch(e){n=!0}if(n&&o(),m){const t=new Error(`Unable to send ${e}() call due to destroyed connection`);throw t.code=s.ConnectionDestroyed,t}return new Promise(((n,o)=>{const s=p(),m=t=>{if(t.source!==d||t.data.penpal!==r.Reply||t.data.id!==s)return;if(t.origin!==f)return void a(`${l} received message from origin ${t.origin} which did not match expected origin ${f}`);const h=t.data;a(`${l}: Received ${e}() reply`),u.removeEventListener(c.Message,m);let p=h.returnValue;h.returnValueIsError&&(p=(e=>{const t=new Error;return Object.keys(e).forEach((n=>t[n]=e[n])),t})(p)),(h.resolution===i.Fulfilled?n:o)(p)};u.addEventListener(c.Message,m);const v={penpal:r.Call,id:s,methodName:e,args:t};d.postMessage(v,h)}))};return n.reduce(((e,t)=>(e[t]=v(t),e)),e),()=>{m=!0}},g=(e,t,n,o,s)=>{const{destroy:l,onDestroy:u}=o;let d,h;const m={};return o=>{if(o.origin!==t)return void s(`Parent: Handshake - Received ACK message from origin ${o.origin} which did not match expected origin ${t}`);s("Parent: Handshake - Received ACK");const p={localName:"Parent",local:window,remote:o.source,originForSending:n,originForReceiving:t};d&&d(),d=((e,t,n)=>{const{localName:o,local:s,remote:l,originForSending:u,originForReceiving:d}=e;let h=!1;const m=e=>{if(e.source!==l||e.data.penpal!==r.Call)return;if(e.origin!==d)return void n(`${o} received message from origin ${e.origin} which did not match expected origin ${d}`);const s=e.data,{methodName:c,args:m,id:p}=s;n(`${o}: Received ${c}() call`);const v=e=>t=>{if(n(`${o}: Sending ${c}() reply`),h)return void n(`${o}: Unable to send ${c}() reply due to destroyed connection`);const s={penpal:r.Reply,id:p,resolution:e,returnValue:t};e===i.Rejected&&t instanceof Error&&(s.returnValue=f(t),s.returnValueIsError=!0);try{l.postMessage(s,u)}catch(e){if(e.name===a.DataCloneError){const t={penpal:r.Reply,id:p,resolution:i.Rejected,returnValue:f(e),returnValueIsError:!0};l.postMessage(t,u)}throw e}};new Promise((e=>e(t[c].apply(t,m)))).then(v(i.Fulfilled),v(i.Rejected))};return s.addEventListener(c.Message,m),()=>{h=!0,s.removeEventListener(c.Message,m)}})(p,e,s),u(d),h&&h.forEach((e=>{delete m[e]})),h=o.data.methodNames;const g=v(m,p,h,l,s);return u(g),m}};var w=e=>{let{iframe:t,methods:n={},childOrigin:o,timeout:i,debug:a=!1}=e;const l=(e=>(...t)=>{e&&console.log("[Penpal]",...t)})(a),f=(()=>{const e=[];let t=!1;return{destroy(n){t=!0,e.forEach((e=>{e(n)}))},onDestroy(n){t?n():e.push(n)}}})(),{onDestroy:m,destroy:p}=f;o||((e=>{if(!e.src&&!e.srcdoc){const e=new Error("Iframe must have src or srcdoc property defined.");throw e.code=s.NoIframeSrc,e}})(t),o=(e=>{if(e&&h.find((t=>e.startsWith(t))))return"null";const t=document.location,n=d.exec(e);let o,r,i;return n?(o=n[1]?n[1]:t.protocol,r=n[2],i=n[4]):(o=t.protocol,r=t.hostname,i=t.port),`${o}//${r}${i&&i!==u[o]?`:${i}`:""}`})(t.src));const v="null"===o?"*":o,w=((e,t,n,o)=>i=>{if(i.origin!==n)return void e(`Parent: Handshake - Received SYN message from origin ${i.origin} which did not match expected origin ${n}`);e("Parent: Handshake - Received SYN, responding with SYN-ACK");const s={penpal:r.SynAck,methodNames:Object.keys(t)};i.source.postMessage(s,o)})(l,n,o,v),y=g(n,o,v,f,l);return{promise:new Promise(((e,n)=>{const o=((e,t)=>{let n;return void 0!==e&&(n=window.setTimeout((()=>{const n=new Error(`Connection timed out after ${e}ms`);n.code=s.ConnectionTimeout,t(n)}),e)),()=>{clearTimeout(n)}})(i,p),a=n=>{if(n.source===t.contentWindow&&n.data)if(n.data.penpal!==r.Syn)if(n.data.penpal!==r.Ack);else{const t=y(n);t&&(o(),e(t))}else w(n)};window.addEventListener(c.Message,a),l("Parent: Awaiting handshake"),((e,t)=>{const{destroy:n,onDestroy:o}=t,r=setInterval((()=>{e.isConnected||(clearInterval(r),n())}),6e4);o((()=>{clearInterval(r)}))})(t,f),m((e=>{window.removeEventListener(c.Message,a),e||((e=new Error("Connection destroyed")).code=s.ConnectionDestroyed),n(e)}))})),destroy(){p()}}},y=function(t){var n=e({},t);return n.validators&&(n.validators=n.validators.map((function(t){return("regex_match"===t.validate||"regex_exclude"===t.validate)&&t.regex instanceof RegExp?e(e({},t),{regex:t.regex.source,regexOptions:{ignoreCase:t.regex.flags.includes("i"),dotAll:t.regex.flags.includes("s"),multiline:t.regex.flags.includes("m"),unicode:t.regex.flags.includes("u")}}):t}))),n};return function(){function o(o,r,i,s){var a=this;this.columnHooks=[],this.bulkRowHooks=[],this.rowHooks=[],this.stepHooks=[],this.rowDeleteHooks=[],this.initChild=function(){return t(a,void 0,void 0,(function(){var e,t,o,r;return n(this,(function(n){switch(n.label){case 0:return this.connection?[4,this.connection.promise]:(console.error("shim cannot connect with Dromo service."),[2]);case 1:return e=n.sent(),t=Array.from(document.getElementsByTagName("script")).some((function(e){return"https://unpkg.com/dromo-uploader-js/dist/DromoUploader.js"===e.src||"https://cdn.jsdelivr.net/npm/dromo-uploader-js@latest/dist/DromoUploader.js"===e.src})),this.fields&&this.settings&&this.user?(t||(this.settings.version=null!==(o=this.settings.version)&&void 0!==o?o:"v2"),this.settings.browserExcelParsing=null===(r=this.settings.browserExcelParsing)||void 0===r||r,[4,e.init(this.licenseKey,this.fields,this.settings,this.user,this.appHost)]):[3,3];case 2:return n.sent(),[3,6];case 3:return this.schemaName?[4,e.initFromSavedSchema(this.licenseKey,this.schemaName,this.appHost,{user:this.user,developmentMode:this.developmentMode,headerRowOverride:this.headerRowOverride})]:[3,5];case 4:return n.sent(),[3,6];case 5:console.error("Invalid Dromo configuration"),n.label=6;case 6:return[4,e.setNumRegisteredRowHooks(this.totalNumRowHooks())];case 7:return n.sent(),[4,e.setNumRegisteredColHooks(this.columnHooks.length)];case 8:return n.sent(),[4,e.setNumRegisteredRowDeleteHooks(this.rowDeleteHooks.length)];case 9:return n.sent(),[2]}}))}))},this.initIFrame=function(){var e,t;if(!document.getElementById(a.iframeId)){var n=document.createElement("iframe"),o=null!==(t=null===(e=a.settings)||void 0===e?void 0:e.importIdentifier)&&void 0!==t?t:a.schemaName;n.title=o?"Dromo Importer: "+o:"Dromo Importer",n.src=window.DROMO_WIDGET_OVERRIDE||l,n.id=a.iframeId,n.style.height="100%",n.style.width="100%",n.style.border="0",n.crossorigin="anonymous",a.iframe=n}},this.createConnection=function(){var o=a,r=a.iframe;r?a.connection=w({iframe:r,methods:{handleColumnHooks:function(r,i){return t(this,void 0,void 0,(function(){var s,a,c,l,u=this;return n(this,(function(d){switch(d.label){case 0:return s=o.columnHooks.filter((function(e){return e.fieldName===r})),a=new Map,c=i,[4,s.reduce((function(e,o){return t(u,void 0,void 0,(function(){var r=this;return n(this,(function(i){switch(i.label){case 0:return[4,e.then((function(){return t(r,void 0,void 0,(function(){var e;return n(this,(function(t){switch(t.label){case 0:return t.trys.push([0,2,,3]),[4,o.callback(c)];case 1:return t.sent().forEach((function(e){if(void 0!==e.value||void 0!==e.info){var t={};void 0!==e.value&&(t.value=e.value,c[e.index]=e.value),void 0!==e.info&&(t.info=e.info),a.set(e.index,t)}})),[3,3];case 2:return e=t.sent(),console.error("[Dromo-External-Error] There was an error running your col hook.",e),[3,3];case 3:return[2]}}))}))}))];case 1:return i.sent(),[2]}}))}))}),Promise.resolve())];case 1:return d.sent(),l=[],a.forEach((function(t,n){return l.push(e(e({},t),{index:n}))})),[2,l]}}))}))},handleRowHooks:function(e,r){return t(this,void 0,void 0,(function(){var i,s,a,c,l,u,d,h,f,m,p,v,g=this;return n(this,(function(w){switch(w.label){case 0:i=new Map,s=new Map(e.map((function(e){return[e.index,e]}))),a=function(e,t){for(var n,o=0,r=Object.entries(null!=t?t:{});o<r.length;o++){var a=r[o],c=a[0],l=a[1];if(void 0===l.value&&void 0===l.info&&void 0===l.selectOptions)return;var u=s.get(e),d=i.get(e)||{},h=null!==(n=d[c])&&void 0!==n?n:{};void 0!==l.value&&(h.value=l.value,u.row[c].value=l.value),void 0!==l.info&&(h.info=l.info,u.row[c].info=l.info),void 0!==l.selectOptions&&(h.selectOptions=l.selectOptions,u.row[c].selectOptions=l.selectOptions),d[c]=h,i.set(e,d)}},c=0,l=o.bulkRowHooks,w.label=1;case 1:if(!(c<l.length))return[3,6];u=l[c],w.label=2;case 2:return w.trys.push([2,4,,5]),[4,u(e,r)];case 3:for(d=w.sent(),h=0,f=d;h<f.length;h++)m=f[h],a(m.index,m.row);return[3,5];case 4:return p=w.sent(),console.error("[Dromo-External-Error] There was an error running your bulk row hook.",p),[3,5];case 5:return c++,[3,1];case 6:return[4,Promise.all(e.map((function(e){return t(g,void 0,void 0,(function(){var t,i,s,c,l;return n(this,(function(n){switch(n.label){case 0:t=0,i=o.rowHooks,n.label=1;case 1:if(!(t<i.length))return[3,6];s=i[t],n.label=2;case 2:return n.trys.push([2,4,,5]),[4,s.callback(e,r)];case 3:return c=n.sent(),a(e.index,c.row),[3,5];case 4:return l=n.sent(),console.error("[Dromo-External-Error] There was an error running your row hook.",l),[3,5];case 5:return t++,[3,1];case 6:return[2]}}))}))})))];case 7:return w.sent(),v=[],i.forEach((function(e,t){v.push({index:t,row:e})})),[2,v]}}))}))},handleStepHook:function(e,t){o.stepHooks.forEach((function(n){if(e===n.type)try{n.callback(o,t)}catch(e){console.error("[Dromo-External-Error] There was an error in your step callback.",e)}}))},handleRowDeleteHooks:function(e){var r=this;return Promise.all(e.map((function(e){return t(r,void 0,void 0,(function(){var r=this;return n(this,(function(i){switch(i.label){case 0:return[4,o.rowDeleteHooks.forEach((function(o){return t(r,void 0,void 0,(function(){var t;return n(this,(function(n){switch(n.label){case 0:return n.trys.push([0,2,,3]),[4,o(e)];case 1:return n.sent(),[3,3];case 2:return t=n.sent(),console.error("[Dromo-External-Error] There was an error running your row delete hook.",t),[3,3];case 3:return[2]}}))}))}))];case 1:return i.sent(),[2]}}))}))})))},handleBeforeFinishCallback:function(e,r){return t(this,void 0,void 0,(function(){var t;return n(this,(function(n){switch(n.label){case 0:if(!o.beforeFinishCallback)return[3,4];n.label=1;case 1:return n.trys.push([1,3,,4]),[4,o.beforeFinishCallback(e,r,o)];case 2:return[2,n.sent()];case 3:return t=n.sent(),console.error("[Dromo-External-Error] There was an error in your beforeFinish callback.",t),[3,4];case 4:return[2]}}))}))},handleResults:function(e,r){return t(this,void 0,void 0,(function(){var t;return n(this,(function(n){switch(n.label){case 0:if(!o.resultsCallback)return[3,4];n.label=1;case 1:return n.trys.push([1,3,,4]),[4,o.resultsCallback(e,r)];case 2:return n.sent(),[3,4];case 3:return t=n.sent(),console.error("[Dromo-External-Error] There was an error in your onResult callback.",t),[3,4];case 4:return o.close(),[2]}}))}))},handleCloseModal:function(){o.close()},handleCancel:function(){if(o.cancelCallback)try{o.cancelCallback()}catch(e){console.error("[Dromo-External-Error] There was an error in your cancel callback.",e)}o.close()}}}):console.error("shim cannot connect to Dromo.")},this.mountIFrame=function(){if(!document.getElementById(a.iframeId)){var e=document.createElement("div");e.id=a.wrapperId,e.style.zIndex=Number.MAX_SAFE_INTEGER.toString(),e.style.visibility="hidden",e.style.width="0px",e.style.height="0px",e.style.position="fixed",e.style.top="0px",e.style.left="0px",e.style.right="0px",e.style.bottom="0px",e.appendChild(a.iframe),document.body.appendChild(e),a.wrapper=e}},this.showIFrame=function(){a.wrapper&&(a.wrapper.style.visibility="visible",a.wrapper.style.width="100%",a.wrapper.style.height="100%",document.body.style.overflow="hidden")},this.registerColumnHook=function(e,t){a.columnHooks.push({fieldName:e,callback:t}),a.connection&&a.connection.promise.then((function(e){e.setNumRegisteredColHooks(a.columnHooks.length)}))},this.totalNumRowHooks=function(){return a.rowHooks.length+a.bulkRowHooks.length},this.registerBulkRowHook=function(e){a.bulkRowHooks.push(e),a.connection&&a.connection.promise.then((function(e){e.setNumRegisteredRowHooks(a.totalNumRowHooks())}))},this.registerRowHook=function(e){a.rowHooks.push({callback:e}),a.connection&&a.connection.promise.then((function(e){e.setNumRegisteredRowHooks(a.totalNumRowHooks())}))},this.registerStepHook=function(e,t){a.stepHooks.push({type:e,callback:t})},this.registerRowDeleteHook=function(e){a.rowDeleteHooks.push(e),a.connection&&a.connection.promise.then((function(e){e.setNumRegisteredRowDeleteHooks(a.rowDeleteHooks.length)}))},this.beforeFinish=function(e){a.beforeFinishCallback=e},this.registerAllHooks=function(e){if(e.columnHooks)for(var t=0,n=e.columnHooks;t<n.length;t++){var o=n[t],r=o.fieldName,i=o.callback;a.registerColumnHook(r,i)}if(e.rowHooks)for(var s=0,c=e.rowHooks;s<c.length;s++){var l=c[s];a.registerRowHook(l)}if(e.bulkRowHooks)for(var u=0,d=e.bulkRowHooks;u<d.length;u++){var h=d[u];a.registerBulkRowHook(h)}if(e.rowDeleteHooks)for(var f=0,m=e.rowDeleteHooks;f<m.length;f++){var p=m[f];a.registerRowDeleteHook(p)}if(e.stepHooks)for(var v=0,g=e.stepHooks;v<g.length;v++){var w=g[v],y=w.type;i=w.callback;a.registerStepHook(y,i)}e.beforeFinishCallback&&a.beforeFinish(e.beforeFinishCallback)},this.onResults=function(e){a.resultsCallback=e},this.onCancel=function(e){a.cancelCallback=e},this.setUser=function(e){return t(a,void 0,void 0,(function(){return n(this,(function(t){switch(t.label){case 0:return this.user=e,this.connection?[4,this.connection.promise]:[3,3];case 1:return[4,t.sent().setUser(this.user)];case 2:t.sent(),t.label=3;case 3:return[2]}}))}))},this.addField=function(e,o){return t(a,void 0,void 0,(function(){return n(this,(function(t){switch(t.label){case 0:return this.connection?[4,this.connection.promise]:[3,3];case 1:return[4,t.sent().addField(y(e),o)];case 2:return t.sent(),[3,4];case 3:console.error("[Dromo-Error] Invalid connection to Dromo Uploader."),t.label=4;case 4:return[2]}}))}))},this.removeField=function(e){return t(a,void 0,void 0,(function(){return n(this,(function(t){switch(t.label){case 0:return this.connection?[4,this.connection.promise]:[3,3];case 1:return[4,t.sent().removeField(e)];case 2:return t.sent(),[3,4];case 3:console.error("[Dromo-Error] Invalid connection to Dromo Uploader."),t.label=4;case 4:return[2]}}))}))},this.updateInfoMessages=function(e){return t(a,void 0,void 0,(function(){return n(this,(function(t){switch(t.label){case 0:return this.connection?[4,this.connection.promise]:[3,3];case 1:return[4,t.sent().updateInfoMessages(e)];case 2:return t.sent(),[3,4];case 3:console.error("[Dromo-Error] Invalid connection to Dromo Uploader."),t.label=4;case 4:return[2]}}))}))},this.setHeaderRowOverride=function(e){return t(a,void 0,void 0,(function(){return n(this,(function(t){switch(t.label){case 0:return this.headerRowOverride=e,this.connection?[4,this.connection.promise]:[3,3];case 1:return[4,t.sent().setHeaderRowOverride(e)];case 2:t.sent(),t.label=3;case 3:return[2]}}))}))},this.open=function(){return t(a,void 0,void 0,(function(){return n(this,(function(e){switch(e.label){case 0:return this.wrapper||(this.initIFrame(),this.createConnection(),this.mountIFrame()),[4,this.initChild()];case 1:return e.sent(),this.showIFrame(),[2]}}))}))},this.close=function(){a.wrapper&&(a.wrapper.style.visibility="hidden",a.wrapper.style.width="0px",a.wrapper.style.height="0px",document.body.style.overflow="inherit")},this.setDevelopmentMode=function(e){return t(a,void 0,void 0,(function(){return n(this,(function(t){switch(t.label){case 0:return this.developmentMode=e,this.connection?[4,this.connection.promise]:[3,3];case 1:return[4,t.sent().setDevelopmentMode(this.developmentMode)];case 2:t.sent(),t.label=3;case 3:return[2]}}))}))},this.rehydrate=function(e,o){return t(a,void 0,void 0,(function(){return n(this,(function(t){switch(t.label){case 0:return this.wrapper||(this.initIFrame(),this.createConnection(),this.mountIFrame()),[4,this.initChild()];case 1:return t.sent(),[4,this.connection.promise];case 2:return[4,t.sent().rehydrate(e,o)];case 3:return t.sent(),this.showIFrame(),[2]}}))}))},this.iframeId=Math.random().toString(36).substring(7)+"-dromo-iframe-element",this.wrapperId=Math.random().toString(36).substring(7)+"-dromo-container",this.appHost=document.location.hostname,void 0!==i&&void 0!==s?(this.licenseKey=o,this.fields=r.map(y),this.settings=i,this.user=s):(this.licenseKey=o,this.schemaName=r)}return o.rehydrateHeadless=function(e){var r=e.licenseKey,i=e.headlessImportId,s=e.fields,a=e.settings,c=e.hooks,l=e.rehydrateState;return t(void 0,void 0,void 0,(function(){var e;return n(this,(function(t){switch(t.label){case 0:return(e=new o(r,s,a,{id:"headless-review"})).registerAllHooks(c),[4,e.rehydrate(l,i)];case 1:return t.sent(),e.open(),[2]}}))}))},o}()}));
|
|
15
|
+
***************************************************************************** */var e=function(){return(e=Object.assign||function(e){for(var n,t=1,o=arguments.length;t<o;t++)for(var r in n=arguments[t])Object.prototype.hasOwnProperty.call(n,r)&&(e[r]=n[r]);return e}).apply(this,arguments)};function n(e,n,t,o){return new(t||(t=Promise))((function(r,i){function s(e){try{a(o.next(e))}catch(e){i(e)}}function c(e){try{a(o.throw(e))}catch(e){i(e)}}function a(e){var n;e.done?r(e.value):(n=e.value,n instanceof t?n:new t((function(e){e(n)}))).then(s,c)}a((o=o.apply(e,n||[])).next())}))}function t(e,n){var t,o,r,i,s={label:0,sent:function(){if(1&r[0])throw r[1];return r[1]},trys:[],ops:[]};return i={next:c(0),throw:c(1),return:c(2)},"function"==typeof Symbol&&(i[Symbol.iterator]=function(){return this}),i;function c(i){return function(c){return function(i){if(t)throw new TypeError("Generator is already executing.");for(;s;)try{if(t=1,o&&(r=2&i[0]?o.return:i[0]?o.throw||((r=o.return)&&r.call(o),0):o.next)&&!(r=r.call(o,i[1])).done)return r;switch(o=0,r&&(i=[2&i[0],r.value]),i[0]){case 0:case 1:r=i;break;case 4:return s.label++,{value:i[1],done:!1};case 5:s.label++,o=i[1],i=[0];continue;case 7:i=s.ops.pop(),s.trys.pop();continue;default:if(!(r=s.trys,(r=r.length>0&&r[r.length-1])||6!==i[0]&&2!==i[0])){s=0;continue}if(3===i[0]&&(!r||i[1]>r[0]&&i[1]<r[3])){s.label=i[1];break}if(6===i[0]&&s.label<r[1]){s.label=r[1],r=i;break}if(r&&s.label<r[2]){s.label=r[2],s.ops.push(i);break}r[2]&&s.ops.pop(),s.trys.pop();continue}i=n.call(e,s)}catch(e){i=[6,e],o=0}finally{t=r=0}if(5&i[0])throw i[1];return{value:i[0]?i[1]:void 0,done:!0}}([i,c])}}}var o,r,i,s,c,a,l={IFRAME_URL:"https://widget.dromo.io/"}.IFRAME_URL;!function(e){e.INIT_IFRAME="INIT_IFRAME"}(o||(o={})),function(e){e.Call="call",e.Reply="reply",e.Syn="syn",e.SynAck="synAck",e.Ack="ack"}(r||(r={})),function(e){e.Fulfilled="fulfilled",e.Rejected="rejected"}(i||(i={})),function(e){e.ConnectionDestroyed="ConnectionDestroyed",e.ConnectionTimeout="ConnectionTimeout",e.NotInIframe="NotInIframe",e.NoIframeSrc="NoIframeSrc"}(s||(s={})),function(e){e.DataCloneError="DataCloneError"}(c||(c={})),function(e){e.Message="message"}(a||(a={}));const u={"http:":"80","https:":"443"},d=/^(https?:)?\/\/([^/:]+)?(:(\d+))?/,h=["file:","data:"];const f=({name:e,message:n,stack:t})=>({name:e,message:n,stack:t});let m=0;var p=()=>++m,v=(e,n,t,o,c)=>{const{localName:l,local:u,remote:d,originForSending:h,originForReceiving:f}=n;let m=!1;c(`${l}: Connecting call sender`);const v=e=>(...n)=>{let t;c(`${l}: Sending ${e}() call`);try{d.closed&&(t=!0)}catch(e){t=!0}if(t&&o(),m){const n=new Error(`Unable to send ${e}() call due to destroyed connection`);throw n.code=s.ConnectionDestroyed,n}return new Promise(((t,o)=>{const s=p(),m=n=>{if(n.source!==d||n.data.penpal!==r.Reply||n.data.id!==s)return;if(n.origin!==f)return void c(`${l} received message from origin ${n.origin} which did not match expected origin ${f}`);const h=n.data;c(`${l}: Received ${e}() reply`),u.removeEventListener(a.Message,m);let p=h.returnValue;h.returnValueIsError&&(p=(e=>{const n=new Error;return Object.keys(e).forEach((t=>n[t]=e[t])),n})(p)),(h.resolution===i.Fulfilled?t:o)(p)};u.addEventListener(a.Message,m);const v={penpal:r.Call,id:s,methodName:e,args:n};d.postMessage(v,h)}))};return t.reduce(((e,n)=>(e[n]=v(n),e)),e),()=>{m=!0}},w=(e,n,t,o,s)=>{const{destroy:l,onDestroy:u}=o;let d,h;const m={};return o=>{if(o.origin!==n)return void s(`Parent: Handshake - Received ACK message from origin ${o.origin} which did not match expected origin ${n}`);s("Parent: Handshake - Received ACK");const p={localName:"Parent",local:window,remote:o.source,originForSending:t,originForReceiving:n};d&&d(),d=((e,n,t)=>{const{localName:o,local:s,remote:l,originForSending:u,originForReceiving:d}=e;let h=!1;const m=e=>{if(e.source!==l||e.data.penpal!==r.Call)return;if(e.origin!==d)return void t(`${o} received message from origin ${e.origin} which did not match expected origin ${d}`);const s=e.data,{methodName:a,args:m,id:p}=s;t(`${o}: Received ${a}() call`);const v=e=>n=>{if(t(`${o}: Sending ${a}() reply`),h)return void t(`${o}: Unable to send ${a}() reply due to destroyed connection`);const s={penpal:r.Reply,id:p,resolution:e,returnValue:n};e===i.Rejected&&n instanceof Error&&(s.returnValue=f(n),s.returnValueIsError=!0);try{l.postMessage(s,u)}catch(e){if(e.name===c.DataCloneError){const n={penpal:r.Reply,id:p,resolution:i.Rejected,returnValue:f(e),returnValueIsError:!0};l.postMessage(n,u)}throw e}};new Promise((e=>e(n[a].apply(n,m)))).then(v(i.Fulfilled),v(i.Rejected))};return s.addEventListener(a.Message,m),()=>{h=!0,s.removeEventListener(a.Message,m)}})(p,e,s),u(d),h&&h.forEach((e=>{delete m[e]})),h=o.data.methodNames;const w=v(m,p,h,l,s);return u(w),m}};var g=e=>{let{iframe:n,methods:t={},childOrigin:o,timeout:i,debug:c=!1}=e;const l=(e=>(...n)=>{e&&console.log("[Penpal]",...n)})(c),f=(()=>{const e=[];let n=!1;return{destroy(t){n=!0,e.forEach((e=>{e(t)}))},onDestroy(t){n?t():e.push(t)}}})(),{onDestroy:m,destroy:p}=f;o||((e=>{if(!e.src&&!e.srcdoc){const e=new Error("Iframe must have src or srcdoc property defined.");throw e.code=s.NoIframeSrc,e}})(n),o=(e=>{if(e&&h.find((n=>e.startsWith(n))))return"null";const n=document.location,t=d.exec(e);let o,r,i;return t?(o=t[1]?t[1]:n.protocol,r=t[2],i=t[4]):(o=n.protocol,r=n.hostname,i=n.port),`${o}//${r}${i&&i!==u[o]?`:${i}`:""}`})(n.src));const v="null"===o?"*":o,g=((e,n,t,o)=>i=>{if(i.origin!==t)return void e(`Parent: Handshake - Received SYN message from origin ${i.origin} which did not match expected origin ${t}`);e("Parent: Handshake - Received SYN, responding with SYN-ACK");const s={penpal:r.SynAck,methodNames:Object.keys(n)};i.source.postMessage(s,o)})(l,t,o,v),y=w(t,o,v,f,l);return{promise:new Promise(((e,t)=>{const o=((e,n)=>{let t;return void 0!==e&&(t=window.setTimeout((()=>{const t=new Error(`Connection timed out after ${e}ms`);t.code=s.ConnectionTimeout,n(t)}),e)),()=>{clearTimeout(t)}})(i,p),c=t=>{if(t.source===n.contentWindow&&t.data)if(t.data.penpal!==r.Syn)if(t.data.penpal!==r.Ack);else{const n=y(t);n&&(o(),e(n))}else g(t)};window.addEventListener(a.Message,c),l("Parent: Awaiting handshake"),((e,n)=>{const{destroy:t,onDestroy:o}=n,r=setInterval((()=>{e.isConnected||(clearInterval(r),t())}),6e4);o((()=>{clearInterval(r)}))})(n,f),m((e=>{window.removeEventListener(a.Message,c),e||((e=new Error("Connection destroyed")).code=s.ConnectionDestroyed),t(e)}))})),destroy(){p()}}},y=function(n){var t=e({},n);return t.validators&&(t.validators=t.validators.map((function(n){return("regex_match"===n.validate||"regex_exclude"===n.validate)&&n.regex instanceof RegExp?e(e({},n),{regex:n.regex.source,regexOptions:{ignoreCase:n.regex.flags.includes("i"),dotAll:n.regex.flags.includes("s"),multiline:n.regex.flags.includes("m"),unicode:n.regex.flags.includes("u")}}):n}))),t};return function(){function o(o,r,i,s){var c=this;this.columnHooks=[],this.bulkRowHooks=[],this.rowHooks=[],this.stepHooks=[],this.rowDeleteHooks=[],this.initChild=function(){return n(c,void 0,void 0,(function(){var n,o,r,i,s;return t(this,(function(t){switch(t.label){case 0:return this.connection?[4,this.connection.promise]:(console.error("shim cannot connect with Dromo service."),[2]);case 1:return n=t.sent(),o=Array.from(document.getElementsByTagName("script")).some((function(e){return"https://unpkg.com/dromo-uploader-js/dist/DromoUploader.js"===e.src||"https://cdn.jsdelivr.net/npm/dromo-uploader-js@latest/dist/DromoUploader.js"===e.src})),this.fields&&this.settings&&this.user?(r=e({},this.settings),o||(r.version=null!==(i=r.version)&&void 0!==i?i:"v2"),r.browserExcelParsing=null===(s=r.browserExcelParsing)||void 0===s||s,[4,n.init(this.licenseKey,this.fields,r,this.user,this.appHost)]):[3,3];case 2:return t.sent(),[3,6];case 3:return this.schemaName?[4,n.initFromSavedSchema(this.licenseKey,this.schemaName,this.appHost,{user:this.user,developmentMode:this.developmentMode,headerRowOverride:this.headerRowOverride})]:[3,5];case 4:return t.sent(),[3,6];case 5:console.error("Invalid Dromo configuration"),t.label=6;case 6:return[4,n.setNumRegisteredRowHooks(this.totalNumRowHooks())];case 7:return t.sent(),[4,n.setNumRegisteredColHooks(this.columnHooks.length)];case 8:return t.sent(),[4,n.setNumRegisteredRowDeleteHooks(this.rowDeleteHooks.length)];case 9:return t.sent(),[2]}}))}))},this.initIFrame=function(){var e,n;if(!document.getElementById(c.iframeId)){var t=document.createElement("iframe"),o=null!==(n=null===(e=c.settings)||void 0===e?void 0:e.importIdentifier)&&void 0!==n?n:c.schemaName;t.title=o?"Dromo Importer: "+o:"Dromo Importer",t.src=window.DROMO_WIDGET_OVERRIDE||l,t.id=c.iframeId,t.style.height="100%",t.style.width="100%",t.style.border="0",t.crossorigin="anonymous",c.iframe=t}},this.createConnection=function(){var o=c,r=c.iframe;r?c.connection=g({iframe:r,methods:{handleColumnHooks:function(r,i){return n(this,void 0,void 0,(function(){var s,c,a,l,u=this;return t(this,(function(d){switch(d.label){case 0:return s=o.columnHooks.filter((function(e){return e.fieldName===r})),c=new Map,a=i,[4,s.reduce((function(e,o){return n(u,void 0,void 0,(function(){var r=this;return t(this,(function(i){switch(i.label){case 0:return[4,e.then((function(){return n(r,void 0,void 0,(function(){var e;return t(this,(function(n){switch(n.label){case 0:return n.trys.push([0,2,,3]),[4,o.callback(a)];case 1:return n.sent().forEach((function(e){if(void 0!==e.value||void 0!==e.info){var n={};void 0!==e.value&&(n.value=e.value,a[e.index]=e.value),void 0!==e.info&&(n.info=e.info),c.set(e.index,n)}})),[3,3];case 2:return e=n.sent(),console.error("[Dromo-External-Error] There was an error running your col hook.",e),[3,3];case 3:return[2]}}))}))}))];case 1:return i.sent(),[2]}}))}))}),Promise.resolve())];case 1:return d.sent(),l=[],c.forEach((function(n,t){return l.push(e(e({},n),{index:t}))})),[2,l]}}))}))},handleRowHooks:function(e,r){return n(this,void 0,void 0,(function(){var i,s,c,a,l,u,d,h,f,m,p,v,w=this;return t(this,(function(g){switch(g.label){case 0:i=new Map,s=new Map(e.map((function(e){return[e.index,e]}))),c=function(e,n){for(var t,o=0,r=Object.entries(null!=n?n:{});o<r.length;o++){var c=r[o],a=c[0],l=c[1];if(void 0===l.value&&void 0===l.info&&void 0===l.selectOptions)return;var u=s.get(e),d=i.get(e)||{},h=null!==(t=d[a])&&void 0!==t?t:{};void 0!==l.value&&(h.value=l.value,u.row[a].value=l.value),void 0!==l.info&&(h.info=l.info,u.row[a].info=l.info),void 0!==l.selectOptions&&(h.selectOptions=l.selectOptions,u.row[a].selectOptions=l.selectOptions),d[a]=h,i.set(e,d)}},a=0,l=o.bulkRowHooks,g.label=1;case 1:if(!(a<l.length))return[3,6];u=l[a],g.label=2;case 2:return g.trys.push([2,4,,5]),[4,u(e,r)];case 3:for(d=g.sent(),h=0,f=d;h<f.length;h++)m=f[h],c(m.index,m.row);return[3,5];case 4:return p=g.sent(),console.error("[Dromo-External-Error] There was an error running your bulk row hook.",p),[3,5];case 5:return a++,[3,1];case 6:return[4,Promise.all(e.map((function(e){return n(w,void 0,void 0,(function(){var n,i,s,a,l;return t(this,(function(t){switch(t.label){case 0:n=0,i=o.rowHooks,t.label=1;case 1:if(!(n<i.length))return[3,6];s=i[n],t.label=2;case 2:return t.trys.push([2,4,,5]),[4,s.callback(e,r)];case 3:return a=t.sent(),c(e.index,a.row),[3,5];case 4:return l=t.sent(),console.error("[Dromo-External-Error] There was an error running your row hook.",l),[3,5];case 5:return n++,[3,1];case 6:return[2]}}))}))})))];case 7:return g.sent(),v=[],i.forEach((function(e,n){v.push({index:n,row:e})})),[2,v]}}))}))},handleStepHook:function(e,n){o.stepHooks.forEach((function(t){if(e===t.type)try{t.callback(o,n)}catch(e){console.error("[Dromo-External-Error] There was an error in your step callback.",e)}}))},handleRowDeleteHooks:function(e){var r=this;return Promise.all(e.map((function(e){return n(r,void 0,void 0,(function(){var r=this;return t(this,(function(i){switch(i.label){case 0:return[4,o.rowDeleteHooks.forEach((function(o){return n(r,void 0,void 0,(function(){var n;return t(this,(function(t){switch(t.label){case 0:return t.trys.push([0,2,,3]),[4,o(e)];case 1:return t.sent(),[3,3];case 2:return n=t.sent(),console.error("[Dromo-External-Error] There was an error running your row delete hook.",n),[3,3];case 3:return[2]}}))}))}))];case 1:return i.sent(),[2]}}))}))})))},handleBeforeFinishCallback:function(e,r){return n(this,void 0,void 0,(function(){var n;return t(this,(function(t){switch(t.label){case 0:if(!o.beforeFinishCallback)return[3,4];t.label=1;case 1:return t.trys.push([1,3,,4]),[4,o.beforeFinishCallback(e,r,o)];case 2:return[2,t.sent()];case 3:return n=t.sent(),console.error("[Dromo-External-Error] There was an error in your beforeFinish callback.",n),[3,4];case 4:return[2]}}))}))},handleResults:function(e,r){return n(this,void 0,void 0,(function(){var n;return t(this,(function(t){switch(t.label){case 0:if(!o.resultsCallback)return[3,4];t.label=1;case 1:return t.trys.push([1,3,,4]),[4,o.resultsCallback(e,r)];case 2:return t.sent(),[3,4];case 3:return n=t.sent(),console.error("[Dromo-External-Error] There was an error in your onResult callback.",n),[3,4];case 4:return o.close(),[2]}}))}))},handleCloseModal:function(){o.close()},handleCancel:function(){if(o.cancelCallback)try{o.cancelCallback()}catch(e){console.error("[Dromo-External-Error] There was an error in your cancel callback.",e)}o.close()}}}):console.error("shim cannot connect to Dromo.")},this.mountIFrame=function(){if(!document.getElementById(c.iframeId)){var e=document.createElement("div");e.id=c.wrapperId,e.style.zIndex=Number.MAX_SAFE_INTEGER.toString(),e.style.visibility="hidden",e.style.width="0px",e.style.height="0px",e.style.position="fixed",e.style.top="0px",e.style.left="0px",e.style.right="0px",e.style.bottom="0px",e.appendChild(c.iframe),document.body.appendChild(e),c.wrapper=e}},this.showIFrame=function(){c.wrapper&&(c.wrapper.style.visibility="visible",c.wrapper.style.width="100%",c.wrapper.style.height="100%",document.body.style.overflow="hidden")},this.registerColumnHook=function(e,n){c.columnHooks.push({fieldName:e,callback:n}),c.connection&&c.connection.promise.then((function(e){e.setNumRegisteredColHooks(c.columnHooks.length)}))},this.totalNumRowHooks=function(){return c.rowHooks.length+c.bulkRowHooks.length},this.registerBulkRowHook=function(e){c.bulkRowHooks.push(e),c.connection&&c.connection.promise.then((function(e){e.setNumRegisteredRowHooks(c.totalNumRowHooks())}))},this.registerRowHook=function(e){c.rowHooks.push({callback:e}),c.connection&&c.connection.promise.then((function(e){e.setNumRegisteredRowHooks(c.totalNumRowHooks())}))},this.registerStepHook=function(e,n){c.stepHooks.push({type:e,callback:n})},this.registerRowDeleteHook=function(e){c.rowDeleteHooks.push(e),c.connection&&c.connection.promise.then((function(e){e.setNumRegisteredRowDeleteHooks(c.rowDeleteHooks.length)}))},this.beforeFinish=function(e){c.beforeFinishCallback=e},this.registerAllHooks=function(e){if(e.columnHooks)for(var n=0,t=e.columnHooks;n<t.length;n++){var o=t[n],r=o.fieldName,i=o.callback;c.registerColumnHook(r,i)}if(e.rowHooks)for(var s=0,a=e.rowHooks;s<a.length;s++){var l=a[s];c.registerRowHook(l)}if(e.bulkRowHooks)for(var u=0,d=e.bulkRowHooks;u<d.length;u++){var h=d[u];c.registerBulkRowHook(h)}if(e.rowDeleteHooks)for(var f=0,m=e.rowDeleteHooks;f<m.length;f++){var p=m[f];c.registerRowDeleteHook(p)}if(e.stepHooks)for(var v=0,w=e.stepHooks;v<w.length;v++){var g=w[v],y=g.type;i=g.callback;c.registerStepHook(y,i)}e.beforeFinishCallback&&c.beforeFinish(e.beforeFinishCallback)},this.onResults=function(e){c.resultsCallback=e},this.onCancel=function(e){c.cancelCallback=e},this.setUser=function(e){return n(c,void 0,void 0,(function(){return t(this,(function(n){switch(n.label){case 0:return this.user=e,this.connection?[4,this.connection.promise]:[3,3];case 1:return[4,n.sent().setUser(this.user)];case 2:n.sent(),n.label=3;case 3:return[2]}}))}))},this.addField=function(e,o){return n(c,void 0,void 0,(function(){return t(this,(function(n){switch(n.label){case 0:return this.connection?[4,this.connection.promise]:[3,3];case 1:return[4,n.sent().addField(y(e),o)];case 2:return n.sent(),[3,4];case 3:console.error("[Dromo-Error] Invalid connection to Dromo Uploader."),n.label=4;case 4:return[2]}}))}))},this.removeField=function(e){return n(c,void 0,void 0,(function(){return t(this,(function(n){switch(n.label){case 0:return this.connection?[4,this.connection.promise]:[3,3];case 1:return[4,n.sent().removeField(e)];case 2:return n.sent(),[3,4];case 3:console.error("[Dromo-Error] Invalid connection to Dromo Uploader."),n.label=4;case 4:return[2]}}))}))},this.updateInfoMessages=function(e){return n(c,void 0,void 0,(function(){return t(this,(function(n){switch(n.label){case 0:return this.connection?[4,this.connection.promise]:[3,3];case 1:return[4,n.sent().updateInfoMessages(e)];case 2:return n.sent(),[3,4];case 3:console.error("[Dromo-Error] Invalid connection to Dromo Uploader."),n.label=4;case 4:return[2]}}))}))},this.setHeaderRowOverride=function(e){return n(c,void 0,void 0,(function(){return t(this,(function(n){switch(n.label){case 0:return this.headerRowOverride=e,this.connection?[4,this.connection.promise]:[3,3];case 1:return[4,n.sent().setHeaderRowOverride(e)];case 2:n.sent(),n.label=3;case 3:return[2]}}))}))},this.open=function(){return n(c,void 0,void 0,(function(){return t(this,(function(e){switch(e.label){case 0:return this.wrapper||(this.initIFrame(),this.createConnection(),this.mountIFrame()),[4,this.initChild()];case 1:return e.sent(),this.showIFrame(),[2]}}))}))},this.addRows=function(e){return n(c,void 0,void 0,(function(){return t(this,(function(n){switch(n.label){case 0:return this.connection?[4,this.connection.promise]:[3,3];case 1:return[4,n.sent().addRows(e)];case 2:return n.sent(),[3,4];case 3:console.error("[Dromo-Error] Invalid connection to Dromo Uploader."),n.label=4;case 4:return[2]}}))}))},this.removeRows=function(e){return n(c,void 0,void 0,(function(){return t(this,(function(n){switch(n.label){case 0:return this.connection?[4,this.connection.promise]:[3,3];case 1:return[4,n.sent().removeRows(e)];case 2:return n.sent(),[3,4];case 3:console.error("[Dromo-Error] Invalid connection to Dromo Uploader."),n.label=4;case 4:return[2]}}))}))},this.close=function(){c.wrapper&&(c.wrapper.style.visibility="hidden",c.wrapper.style.width="0px",c.wrapper.style.height="0px",document.body.style.overflow="inherit")},this.setDevelopmentMode=function(e){return n(c,void 0,void 0,(function(){return t(this,(function(n){switch(n.label){case 0:return this.developmentMode=e,this.connection?[4,this.connection.promise]:[3,3];case 1:return[4,n.sent().setDevelopmentMode(this.developmentMode)];case 2:n.sent(),n.label=3;case 3:return[2]}}))}))},this.rehydrate=function(e,o){return n(c,void 0,void 0,(function(){return t(this,(function(n){switch(n.label){case 0:return this.wrapper||(this.initIFrame(),this.createConnection(),this.mountIFrame()),[4,this.initChild()];case 1:return n.sent(),[4,this.connection.promise];case 2:return[4,n.sent().rehydrate(e,o)];case 3:return n.sent(),this.showIFrame(),[2]}}))}))},this.iframeId=Math.random().toString(36).substring(7)+"-dromo-iframe-element",this.wrapperId=Math.random().toString(36).substring(7)+"-dromo-container",this.appHost=document.location.hostname,void 0!==i&&void 0!==s?(this.licenseKey=o,this.fields=r.map(y),this.settings=i,this.user=s):(this.licenseKey=o,this.schemaName=r)}return o.rehydrateHeadless=function(e){var r=e.licenseKey,i=e.headlessImportId,s=e.fields,c=e.settings,a=e.hooks,l=e.rehydrateState;return n(void 0,void 0,void 0,(function(){var e;return t(this,(function(n){switch(n.label){case 0:return(e=new o(r,s,c,{id:"headless-review"})).registerAllHooks(a),[4,e.rehydrate(l,i)];case 1:return n.sent(),e.open(),[2]}}))}))},o}()}));
|
|
16
16
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sources":["../node_modules/tslib/tslib.es6.js","../src/constants.ts","../node_modules/penpal/lib/enums.js","../node_modules/penpal/lib/parent/getOriginFromSrc.js","../node_modules/penpal/lib/errorSerialization.js","../node_modules/penpal/lib/generateId.js","../node_modules/penpal/lib/connectCallSender.js","../node_modules/penpal/lib/parent/handleAckMessageFactory.js","../node_modules/penpal/lib/connectCallReceiver.js","../node_modules/penpal/lib/parent/connectToChild.js","../node_modules/penpal/lib/createLogger.js","../node_modules/penpal/lib/createDestructor.js","../node_modules/penpal/lib/parent/validateIframeHasSrcOrSrcDoc.js","../node_modules/penpal/lib/parent/handleSynMessageFactory.js","../node_modules/penpal/lib/startConnectionTimeout.js","../node_modules/penpal/lib/parent/monitorIframeRemoval.js","../src/index.ts"],"sourcesContent":["/*! *****************************************************************************\r\nCopyright (c) Microsoft Corporation.\r\n\r\nPermission to use, copy, modify, and/or distribute this software for any\r\npurpose with or without fee is hereby granted.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\r\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\r\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\r\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\r\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\r\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\r\nPERFORMANCE OF THIS SOFTWARE.\r\n***************************************************************************** */\r\n/* global Reflect, Promise */\r\n\r\nvar extendStatics = function(d, b) {\r\n extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\r\n return extendStatics(d, b);\r\n};\r\n\r\nexport function __extends(d, b) {\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n}\r\n\r\nexport var __assign = function() {\r\n __assign = Object.assign || function __assign(t) {\r\n for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n s = arguments[i];\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\r\n }\r\n return t;\r\n }\r\n return __assign.apply(this, arguments);\r\n}\r\n\r\nexport function __rest(s, e) {\r\n var t = {};\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\r\n t[p] = s[p];\r\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\r\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\r\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\r\n t[p[i]] = s[p[i]];\r\n }\r\n return t;\r\n}\r\n\r\nexport function __decorate(decorators, target, key, desc) {\r\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n}\r\n\r\nexport function __param(paramIndex, decorator) {\r\n return function (target, key) { decorator(target, key, paramIndex); }\r\n}\r\n\r\nexport function __metadata(metadataKey, metadataValue) {\r\n if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(metadataKey, metadataValue);\r\n}\r\n\r\nexport function __awaiter(thisArg, _arguments, P, generator) {\r\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\r\n return new (P || (P = Promise))(function (resolve, reject) {\r\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\r\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\r\n step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n });\r\n}\r\n\r\nexport function __generator(thisArg, body) {\r\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\r\n return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\r\n function verb(n) { return function (v) { return step([n, v]); }; }\r\n function step(op) {\r\n if (f) throw new TypeError(\"Generator is already executing.\");\r\n while (_) try {\r\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\r\n if (y = 0, t) op = [op[0] & 2, t.value];\r\n switch (op[0]) {\r\n case 0: case 1: t = op; break;\r\n case 4: _.label++; return { value: op[1], done: false };\r\n case 5: _.label++; y = op[1]; op = [0]; continue;\r\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\r\n default:\r\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\r\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\r\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\r\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\r\n if (t[2]) _.ops.pop();\r\n _.trys.pop(); continue;\r\n }\r\n op = body.call(thisArg, _);\r\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\r\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\r\n }\r\n}\r\n\r\nexport function __createBinding(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n o[k2] = m[k];\r\n}\r\n\r\nexport function __exportStar(m, exports) {\r\n for (var p in m) if (p !== \"default\" && !exports.hasOwnProperty(p)) exports[p] = m[p];\r\n}\r\n\r\nexport function __values(o) {\r\n var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\r\n if (m) return m.call(o);\r\n if (o && typeof o.length === \"number\") return {\r\n next: function () {\r\n if (o && i >= o.length) o = void 0;\r\n return { value: o && o[i++], done: !o };\r\n }\r\n };\r\n throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\r\n}\r\n\r\nexport function __read(o, n) {\r\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\r\n if (!m) return o;\r\n var i = m.call(o), r, ar = [], e;\r\n try {\r\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\r\n }\r\n catch (error) { e = { error: error }; }\r\n finally {\r\n try {\r\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\r\n }\r\n finally { if (e) throw e.error; }\r\n }\r\n return ar;\r\n}\r\n\r\nexport function __spread() {\r\n for (var ar = [], i = 0; i < arguments.length; i++)\r\n ar = ar.concat(__read(arguments[i]));\r\n return ar;\r\n}\r\n\r\nexport function __spreadArrays() {\r\n for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\r\n for (var r = Array(s), k = 0, i = 0; i < il; i++)\r\n for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\r\n r[k] = a[j];\r\n return r;\r\n};\r\n\r\nexport function __await(v) {\r\n return this instanceof __await ? (this.v = v, this) : new __await(v);\r\n}\r\n\r\nexport function __asyncGenerator(thisArg, _arguments, generator) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var g = generator.apply(thisArg, _arguments || []), i, q = [];\r\n return i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i;\r\n function verb(n) { if (g[n]) i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; }\r\n function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }\r\n function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }\r\n function fulfill(value) { resume(\"next\", value); }\r\n function reject(value) { resume(\"throw\", value); }\r\n function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }\r\n}\r\n\r\nexport function __asyncDelegator(o) {\r\n var i, p;\r\n return i = {}, verb(\"next\"), verb(\"throw\", function (e) { throw e; }), verb(\"return\"), i[Symbol.iterator] = function () { return this; }, i;\r\n function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: n === \"return\" } : f ? f(v) : v; } : f; }\r\n}\r\n\r\nexport function __asyncValues(o) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var m = o[Symbol.asyncIterator], i;\r\n return m ? m.call(o) : (o = typeof __values === \"function\" ? __values(o) : o[Symbol.iterator](), i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i);\r\n function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }\r\n function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }\r\n}\r\n\r\nexport function __makeTemplateObject(cooked, raw) {\r\n if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\r\n return cooked;\r\n};\r\n\r\nexport function __importStar(mod) {\r\n if (mod && mod.__esModule) return mod;\r\n var result = {};\r\n if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k];\r\n result.default = mod;\r\n return result;\r\n}\r\n\r\nexport function __importDefault(mod) {\r\n return (mod && mod.__esModule) ? mod : { default: mod };\r\n}\r\n\r\nexport function __classPrivateFieldGet(receiver, privateMap) {\r\n if (!privateMap.has(receiver)) {\r\n throw new TypeError(\"attempted to get private field on non-instance\");\r\n }\r\n return privateMap.get(receiver);\r\n}\r\n\r\nexport function __classPrivateFieldSet(receiver, privateMap, value) {\r\n if (!privateMap.has(receiver)) {\r\n throw new TypeError(\"attempted to set private field on non-instance\");\r\n }\r\n privateMap.set(receiver, value);\r\n return value;\r\n}\r\n","/* eslint-disable no-unused-vars */\ninterface IEnvironmentConstants {\n IFRAME_URL: string;\n}\nlet EnvironmentConstants: IEnvironmentConstants;\n// @ts-ignore\nif (ENV_IS_PRODUCTION) {\n EnvironmentConstants = {\n IFRAME_URL: \"https://widget.dromo.io/\",\n };\n} else {\n EnvironmentConstants = {\n IFRAME_URL: \"http://localhost:3000/\",\n };\n}\n\n/** @internal */\nexport const IFRAME_URL = EnvironmentConstants.IFRAME_URL;\n/** @internal */\nexport enum EventTypes {\n INIT_IFRAME = \"INIT_IFRAME\",\n}\n","export var MessageType;\n(function (MessageType) {\n MessageType[\"Call\"] = \"call\";\n MessageType[\"Reply\"] = \"reply\";\n MessageType[\"Syn\"] = \"syn\";\n MessageType[\"SynAck\"] = \"synAck\";\n MessageType[\"Ack\"] = \"ack\";\n})(MessageType || (MessageType = {}));\nexport var Resolution;\n(function (Resolution) {\n Resolution[\"Fulfilled\"] = \"fulfilled\";\n Resolution[\"Rejected\"] = \"rejected\";\n})(Resolution || (Resolution = {}));\nexport var ErrorCode;\n(function (ErrorCode) {\n ErrorCode[\"ConnectionDestroyed\"] = \"ConnectionDestroyed\";\n ErrorCode[\"ConnectionTimeout\"] = \"ConnectionTimeout\";\n ErrorCode[\"NotInIframe\"] = \"NotInIframe\";\n ErrorCode[\"NoIframeSrc\"] = \"NoIframeSrc\";\n})(ErrorCode || (ErrorCode = {}));\nexport var NativeErrorName;\n(function (NativeErrorName) {\n NativeErrorName[\"DataCloneError\"] = \"DataCloneError\";\n})(NativeErrorName || (NativeErrorName = {}));\nexport var NativeEventType;\n(function (NativeEventType) {\n NativeEventType[\"Message\"] = \"message\";\n})(NativeEventType || (NativeEventType = {}));\n","const DEFAULT_PORT_BY_PROTOCOL = {\n 'http:': '80',\n 'https:': '443'\n};\nconst URL_REGEX = /^(https?:)?\\/\\/([^/:]+)?(:(\\d+))?/;\nconst opaqueOriginSchemes = ['file:', 'data:'];\n/**\n * Converts a src value into an origin.\n */\nexport default (src) => {\n if (src && opaqueOriginSchemes.find(scheme => src.startsWith(scheme))) {\n // The origin of the child document is an opaque origin and its\n // serialization is \"null\"\n // https://html.spec.whatwg.org/multipage/origin.html#origin\n return 'null';\n }\n // Note that if src is undefined, then srcdoc is being used instead of src\n // and we can follow this same logic below to get the origin of the parent,\n // which is the origin that we will need to use.\n const location = document.location;\n const regexResult = URL_REGEX.exec(src);\n let protocol;\n let hostname;\n let port;\n if (regexResult) {\n // It's an absolute URL. Use the parsed info.\n // regexResult[1] will be undefined if the URL starts with //\n protocol = (regexResult[1] ? regexResult[1] : location.protocol);\n hostname = regexResult[2];\n port = regexResult[4];\n }\n else {\n // It's a relative path. Use the current location's info.\n protocol = location.protocol;\n hostname = location.hostname;\n port = location.port;\n }\n // If the port is the default for the protocol, we don't want to add it to the origin string\n // or it won't match the message's event.origin.\n const portSuffix = port && port !== DEFAULT_PORT_BY_PROTOCOL[protocol] ? `:${port}` : '';\n return `${protocol}//${hostname}${portSuffix}`;\n};\n","/**\n * Converts an error object into a plain object.\n */\nexport const serializeError = ({ name, message, stack }) => ({\n name,\n message,\n stack\n});\n/**\n * Converts a plain object into an error object.\n */\nexport const deserializeError = (obj) => {\n const deserializedError = new Error();\n // @ts-ignore\n Object.keys(obj).forEach(key => (deserializedError[key] = obj[key]));\n return deserializedError;\n};\n","let id = 0;\n/**\n * @return {number} A unique ID (not universally unique)\n */\nexport default () => ++id;\n","import generateId from './generateId';\nimport { deserializeError } from './errorSerialization';\nimport { ErrorCode, MessageType, NativeEventType, Resolution } from './enums';\n/**\n * Augments an object with methods that match those defined by the remote. When these methods are\n * called, a \"call\" message will be sent to the remote, the remote's corresponding method will be\n * executed, and the method's return value will be returned via a message.\n * @param {Object} callSender Sender object that should be augmented with methods.\n * @param {Object} info Information about the local and remote windows.\n * @param {Array} methodNames Names of methods available to be called on the remote.\n * @param {Promise} destructionPromise A promise resolved when destroy() is called on the penpal\n * connection.\n * @returns {Object} The call sender object with methods that may be called.\n */\nexport default (callSender, info, methodNames, destroyConnection, log) => {\n const { localName, local, remote, originForSending, originForReceiving } = info;\n let destroyed = false;\n log(`${localName}: Connecting call sender`);\n const createMethodProxy = (methodName) => {\n return (...args) => {\n log(`${localName}: Sending ${methodName}() call`);\n // This handles the case where the iframe has been removed from the DOM\n // (and therefore its window closed), the consumer has not yet\n // called destroy(), and the user calls a method exposed by\n // the remote. We detect the iframe has been removed and force\n // a destroy() immediately so that the consumer sees the error saying\n // the connection has been destroyed. We wrap this check in a try catch\n // because Edge throws an \"Object expected\" error when accessing\n // contentWindow.closed on a contentWindow from an iframe that's been\n // removed from the DOM.\n let iframeRemoved;\n try {\n if (remote.closed) {\n iframeRemoved = true;\n }\n }\n catch (e) {\n iframeRemoved = true;\n }\n if (iframeRemoved) {\n destroyConnection();\n }\n if (destroyed) {\n const error = new Error(`Unable to send ${methodName}() call due ` + `to destroyed connection`);\n error.code = ErrorCode.ConnectionDestroyed;\n throw error;\n }\n return new Promise((resolve, reject) => {\n const id = generateId();\n const handleMessageEvent = (event) => {\n if (event.source !== remote ||\n event.data.penpal !== MessageType.Reply ||\n event.data.id !== id) {\n return;\n }\n if (event.origin !== originForReceiving) {\n log(`${localName} received message from origin ${event.origin} which did not match expected origin ${originForReceiving}`);\n return;\n }\n const replyMessage = event.data;\n log(`${localName}: Received ${methodName}() reply`);\n local.removeEventListener(NativeEventType.Message, handleMessageEvent);\n let returnValue = replyMessage.returnValue;\n if (replyMessage.returnValueIsError) {\n returnValue = deserializeError(returnValue);\n }\n (replyMessage.resolution === Resolution.Fulfilled ? resolve : reject)(returnValue);\n };\n local.addEventListener(NativeEventType.Message, handleMessageEvent);\n const callMessage = {\n penpal: MessageType.Call,\n id,\n methodName,\n args\n };\n remote.postMessage(callMessage, originForSending);\n });\n };\n };\n methodNames.reduce((api, methodName) => {\n api[methodName] = createMethodProxy(methodName);\n return api;\n }, callSender);\n return () => {\n destroyed = true;\n };\n};\n","import connectCallReceiver from '../connectCallReceiver';\nimport connectCallSender from '../connectCallSender';\n/**\n * Handles an ACK handshake message.\n */\nexport default (methods, childOrigin, originForSending, destructor, log) => {\n const { destroy, onDestroy } = destructor;\n let destroyCallReceiver;\n let receiverMethodNames;\n // We resolve the promise with the call sender. If the child reconnects\n // (for example, after refreshing or navigating to another page that\n // uses Penpal, we'll update the call sender with methods that match the\n // latest provided by the child.\n const callSender = {};\n return (event) => {\n if (event.origin !== childOrigin) {\n log(`Parent: Handshake - Received ACK message from origin ${event.origin} which did not match expected origin ${childOrigin}`);\n return;\n }\n log('Parent: Handshake - Received ACK');\n const info = {\n localName: 'Parent',\n local: window,\n remote: event.source,\n originForSending: originForSending,\n originForReceiving: childOrigin\n };\n // If the child reconnected, we need to destroy the prior call receiver\n // before setting up a new one.\n if (destroyCallReceiver) {\n destroyCallReceiver();\n }\n destroyCallReceiver = connectCallReceiver(info, methods, log);\n onDestroy(destroyCallReceiver);\n // If the child reconnected, we need to remove the methods from the\n // previous call receiver off the sender.\n if (receiverMethodNames) {\n receiverMethodNames.forEach(receiverMethodName => {\n delete callSender[receiverMethodName];\n });\n }\n receiverMethodNames = event.data.methodNames;\n const destroyCallSender = connectCallSender(callSender, info, receiverMethodNames, destroy, log);\n onDestroy(destroyCallSender);\n return callSender;\n };\n};\n","import { serializeError } from './errorSerialization';\nimport { MessageType, NativeEventType, NativeErrorName, Resolution } from './enums';\n/**\n * Listens for \"call\" messages coming from the remote, executes the corresponding method, and\n * responds with the return value.\n */\nexport default (info, methods, log) => {\n const { localName, local, remote, originForSending, originForReceiving } = info;\n let destroyed = false;\n const handleMessageEvent = (event) => {\n if (event.source !== remote || event.data.penpal !== MessageType.Call) {\n return;\n }\n if (event.origin !== originForReceiving) {\n log(`${localName} received message from origin ${event.origin} which did not match expected origin ${originForReceiving}`);\n return;\n }\n const callMessage = event.data;\n const { methodName, args, id } = callMessage;\n log(`${localName}: Received ${methodName}() call`);\n const createPromiseHandler = (resolution) => {\n return (returnValue) => {\n log(`${localName}: Sending ${methodName}() reply`);\n if (destroyed) {\n // It's possible to throw an error here, but it would need to be thrown asynchronously\n // and would only be catchable using window.onerror. This is because the consumer\n // is merely returning a value from their method and not calling any function\n // that they could wrap in a try-catch. Even if the consumer were to catch the error,\n // the value of doing so is questionable. Instead, we'll just log a message.\n log(`${localName}: Unable to send ${methodName}() reply due to destroyed connection`);\n return;\n }\n const message = {\n penpal: MessageType.Reply,\n id,\n resolution,\n returnValue\n };\n if (resolution === Resolution.Rejected &&\n returnValue instanceof Error) {\n message.returnValue = serializeError(returnValue);\n message.returnValueIsError = true;\n }\n try {\n remote.postMessage(message, originForSending);\n }\n catch (err) {\n // If a consumer attempts to send an object that's not cloneable (e.g., window),\n // we want to ensure the receiver's promise gets rejected.\n if (err.name === NativeErrorName.DataCloneError) {\n const errorReplyMessage = {\n penpal: MessageType.Reply,\n id,\n resolution: Resolution.Rejected,\n returnValue: serializeError(err),\n returnValueIsError: true\n };\n remote.postMessage(errorReplyMessage, originForSending);\n }\n throw err;\n }\n };\n };\n new Promise(resolve => resolve(methods[methodName].apply(methods, args))).then(createPromiseHandler(Resolution.Fulfilled), createPromiseHandler(Resolution.Rejected));\n };\n local.addEventListener(NativeEventType.Message, handleMessageEvent);\n return () => {\n destroyed = true;\n local.removeEventListener(NativeEventType.Message, handleMessageEvent);\n };\n};\n","import { ErrorCode, MessageType, NativeEventType } from '../enums';\nimport createDestructor from '../createDestructor';\nimport createLogger from '../createLogger';\nimport getOriginFromSrc from './getOriginFromSrc';\nimport handleAckMessageFactory from './handleAckMessageFactory';\nimport handleSynMessageFactory from './handleSynMessageFactory';\nimport monitorIframeRemoval from './monitorIframeRemoval';\nimport startConnectionTimeout from '../startConnectionTimeout';\nimport validateIframeHasSrcOrSrcDoc from './validateIframeHasSrcOrSrcDoc';\n/**\n * Attempts to establish communication with an iframe.\n */\nexport default (options) => {\n let { iframe, methods = {}, childOrigin, timeout, debug = false } = options;\n const log = createLogger(debug);\n const destructor = createDestructor();\n const { onDestroy, destroy } = destructor;\n if (!childOrigin) {\n validateIframeHasSrcOrSrcDoc(iframe);\n childOrigin = getOriginFromSrc(iframe.src);\n }\n // If event.origin is \"null\", the remote protocol is file: or data: and we\n // must post messages with \"*\" as targetOrigin when sending messages.\n // https://developer.mozilla.org/en-US/docs/Web/API/Window/postMessage#Using_window.postMessage_in_extensions\n const originForSending = childOrigin === 'null' ? '*' : childOrigin;\n const handleSynMessage = handleSynMessageFactory(log, methods, childOrigin, originForSending);\n const handleAckMessage = handleAckMessageFactory(methods, childOrigin, originForSending, destructor, log);\n const promise = new Promise((resolve, reject) => {\n const stopConnectionTimeout = startConnectionTimeout(timeout, destroy);\n const handleMessage = (event) => {\n if (event.source !== iframe.contentWindow || !event.data) {\n return;\n }\n if (event.data.penpal === MessageType.Syn) {\n handleSynMessage(event);\n return;\n }\n if (event.data.penpal === MessageType.Ack) {\n const callSender = handleAckMessage(event);\n if (callSender) {\n stopConnectionTimeout();\n resolve(callSender);\n }\n return;\n }\n };\n window.addEventListener(NativeEventType.Message, handleMessage);\n log('Parent: Awaiting handshake');\n monitorIframeRemoval(iframe, destructor);\n onDestroy((error) => {\n window.removeEventListener(NativeEventType.Message, handleMessage);\n if (!error) {\n error = new Error('Connection destroyed');\n error.code = ErrorCode.ConnectionDestroyed;\n }\n reject(error);\n });\n });\n return {\n promise,\n destroy() {\n // Don't allow consumer to pass an error into destroy.\n destroy();\n }\n };\n};\n","export default (debug) => {\n /**\n * Logs a message if debug is enabled.\n */\n return (...args) => {\n if (debug) {\n console.log('[Penpal]', ...args); // eslint-disable-line no-console\n }\n };\n};\n","export default () => {\n const callbacks = [];\n let destroyed = false;\n return {\n destroy(error) {\n destroyed = true;\n callbacks.forEach(callback => {\n callback(error);\n });\n },\n onDestroy(callback) {\n destroyed ? callback() : callbacks.push(callback);\n }\n };\n};\n","import { ErrorCode } from '../enums';\nexport default (iframe) => {\n if (!iframe.src && !iframe.srcdoc) {\n const error = new Error('Iframe must have src or srcdoc property defined.');\n error.code = ErrorCode.NoIframeSrc;\n throw error;\n }\n};\n","import { MessageType } from '../enums';\n/**\n * Handles a SYN handshake message.\n */\nexport default (log, methods, childOrigin, originForSending) => {\n return (event) => {\n if (event.origin !== childOrigin) {\n log(`Parent: Handshake - Received SYN message from origin ${event.origin} which did not match expected origin ${childOrigin}`);\n return;\n }\n log('Parent: Handshake - Received SYN, responding with SYN-ACK');\n const synAckMessage = {\n penpal: MessageType.SynAck,\n methodNames: Object.keys(methods)\n };\n event.source.postMessage(synAckMessage, originForSending);\n };\n};\n","import { ErrorCode } from './enums';\n/**\n * Starts a timeout and calls the callback with an error\n * if the timeout completes before the stop function is called.\n */\nexport default (timeout, callback) => {\n let timeoutId;\n if (timeout !== undefined) {\n timeoutId = window.setTimeout(() => {\n const error = new Error(`Connection timed out after ${timeout}ms`);\n error.code = ErrorCode.ConnectionTimeout;\n callback(error);\n }, timeout);\n }\n return () => {\n clearTimeout(timeoutId);\n };\n};\n","const CHECK_IFRAME_IN_DOC_INTERVAL = 60000;\n/**\n * Monitors for iframe removal and destroys connection if iframe\n * is found to have been removed from DOM. This is to prevent memory\n * leaks when the iframe is removed from the document and the consumer\n * hasn't called destroy(). Without this, event listeners attached to\n * the window would stick around and since the event handlers have a\n * reference to the iframe in their closures, the iframe would stick\n * around too.\n */\nexport default (iframe, destructor) => {\n const { destroy, onDestroy } = destructor;\n const checkIframeInDocIntervalId = setInterval(() => {\n if (!iframe.isConnected) {\n clearInterval(checkIframeInDocIntervalId);\n destroy();\n }\n }, CHECK_IFRAME_IN_DOC_INTERVAL);\n onDestroy(() => {\n clearInterval(checkIframeInDocIntervalId);\n });\n};\n","import { IFRAME_URL } from \"./constants\";\nimport { connectToChild } from \"penpal\";\nimport { Connection } from \"penpal/lib/types\";\n\nimport {\n ITableMessage,\n IMessagesForCell,\n IColumnHook,\n IColumnHookInput,\n IColumnHookOutput,\n IRowHook,\n IRowHookInput,\n IRowHookOutput,\n IDeveloperField,\n IDeveloperSettings,\n IDeveloperStyleOverrides,\n IUser,\n IValidatorField,\n IRowHookOutputInternal,\n IResultMetadata,\n EStepHook,\n IReviewStepData,\n IStepHook,\n IUploadStepData,\n IRowDeleteHook,\n IBulkRowHook,\n IBeforeFinishCallback,\n IBeforeFinishOutput,\n IPositionSpec,\n IConnectionMethods,\n ISelectField,\n IImporterOptions,\n IAllHooks,\n} from \"./interfaces\";\n\nconst DROMO_WRAPPER_SUFFIX = \"dromo-container\";\nconst IFRAME_SUFFIX = \"dromo-iframe-element\";\n\ndeclare global {\n interface Window {\n DROMO_WIDGET_OVERRIDE?: string;\n }\n}\n\nconst makeFieldSerializable = (field: IDeveloperField) => {\n const newField = { ...field };\n if (newField.validators) {\n newField.validators = newField.validators.map((validator) => {\n if (\n (validator.validate === \"regex_match\" ||\n validator.validate === \"regex_exclude\") &&\n validator.regex instanceof RegExp\n ) {\n return {\n ...validator,\n regex: validator.regex.source,\n regexOptions: {\n ignoreCase: validator.regex.flags.includes(\"i\"),\n dotAll: validator.regex.flags.includes(\"s\"),\n multiline: validator.regex.flags.includes(\"m\"),\n unicode: validator.regex.flags.includes(\"u\"),\n },\n };\n }\n return validator;\n });\n }\n return newField;\n};\n\nexport default class DromoUploader {\n // Unique IDs for iframe and container\n /** @internal */\n iframeId: string;\n /** @internal */\n wrapperId: string;\n\n // Refers to unique backend license key\n /** @internal */\n licenseKey: string;\n // See DeveloperFieldsSchema\n /** @internal */\n fields: IDeveloperField[] | undefined;\n // See DeveloperSettingsSchema\n /** @internal */\n settings: IDeveloperSettings | undefined;\n // See UserSchema\n /** @internal */\n user: IUser | undefined;\n // If the user is using a saved schema, its name\n /** @internal */\n schemaName: string | undefined;\n // DevelopmentMode\n /** @internal */\n developmentMode: boolean | undefined;\n // Header Row Override\n /** @internal */\n headerRowOverride: number | null | undefined;\n\n // HTML references\n /** @internal */\n iframe: HTMLIFrameElement | undefined;\n /** @internal */\n wrapper: HTMLElement | undefined;\n\n // Penpal connection reference\n /** @internal */\n connection: Connection<IConnectionMethods> | undefined;\n\n // Data Hooks\n /** @internal */\n columnHooks: IColumnHook[] = [];\n /** @internal */\n bulkRowHooks: IBulkRowHook[] = [];\n /** @internal */\n rowHooks: { callback: IRowHook }[] = [];\n /** @internal */\n stepHooks: IStepHook[] = [];\n /** @internal */\n rowDeleteHooks: IRowDeleteHook[] = [];\n\n // Callbacks\n /** @internal */\n beforeFinishCallback: IBeforeFinishCallback | undefined;\n /** @internal */\n resultsCallback:\n | ((data: any, metadata: IResultMetadata) => Promise<void> | void)\n | undefined;\n\n /** @internal */\n cancelCallback: (() => void) | undefined;\n\n /** @internal */\n appHost: string;\n\n constructor(\n licenseKey: string,\n fields: IDeveloperField[],\n settings: IDeveloperSettings,\n user: IUser\n );\n\n constructor(licenseKey: string, schemaName: string);\n\n constructor(\n licenseKey: string,\n fieldsOrSchemaName: IDeveloperField[] | string,\n settings?: IDeveloperSettings,\n user?: IUser\n ) {\n this.iframeId =\n Math.random().toString(36).substring(7) + \"-\" + IFRAME_SUFFIX;\n this.wrapperId =\n Math.random().toString(36).substring(7) + \"-\" + DROMO_WRAPPER_SUFFIX;\n this.appHost = document.location.hostname;\n\n if (settings !== undefined && user !== undefined) {\n this.licenseKey = licenseKey;\n this.fields = (fieldsOrSchemaName as IDeveloperField[]).map(\n makeFieldSerializable\n );\n this.settings = settings;\n this.user = user;\n } else {\n this.licenseKey = licenseKey;\n this.schemaName = fieldsOrSchemaName as string;\n }\n }\n\n initChild = async () => {\n if (!this.connection) {\n console.error(\"shim cannot connect with Dromo service.\");\n return;\n }\n\n const child = await this.connection.promise;\n\n // We check to see if this was loaded from either an SDK or snippet that didn't specify a version\n // If it was, this is a legacy snippet/sdk and we should NOT show the redesigned UI\n const loadedFromUnVersionedScript = Array.from(\n document.getElementsByTagName(\"script\")\n ).some(\n (s) =>\n s.src === \"https://unpkg.com/dromo-uploader-js/dist/DromoUploader.js\" ||\n s.src ===\n \"https://cdn.jsdelivr.net/npm/dromo-uploader-js@latest/dist/DromoUploader.js\"\n );\n\n if (this.fields && this.settings && this.user) {\n if (!loadedFromUnVersionedScript) {\n this.settings.version = this.settings.version ?? \"v2\";\n }\n\n this.settings.browserExcelParsing =\n this.settings.browserExcelParsing ?? true;\n\n await child.init(\n this.licenseKey,\n this.fields,\n this.settings,\n this.user,\n this.appHost\n );\n } else if (this.schemaName) {\n await child.initFromSavedSchema(\n this.licenseKey,\n this.schemaName,\n this.appHost,\n {\n user: this.user,\n developmentMode: this.developmentMode,\n headerRowOverride: this.headerRowOverride,\n }\n );\n } else {\n console.error(\"Invalid Dromo configuration\");\n }\n\n await child.setNumRegisteredRowHooks(this.totalNumRowHooks());\n await child.setNumRegisteredColHooks(this.columnHooks.length);\n await child.setNumRegisteredRowDeleteHooks(this.rowDeleteHooks.length);\n };\n\n /**\n * Creates the iframe object\n * @internal\n */\n initIFrame = () => {\n if (!document.getElementById(this.iframeId)) {\n const iframe = document.createElement(\"iframe\");\n const identifier = this.settings?.importIdentifier ?? this.schemaName;\n iframe.title = identifier\n ? `Dromo Importer: ${identifier}`\n : \"Dromo Importer\";\n iframe.src = window.DROMO_WIDGET_OVERRIDE || IFRAME_URL;\n iframe.id = this.iframeId;\n iframe.style.height = \"100%\";\n iframe.style.width = \"100%\";\n iframe.style.border = \"0\";\n // @ts-ignore\n iframe.crossorigin = \"anonymous\";\n this.iframe = iframe;\n }\n };\n\n /**\n * Uses Penpal to create a connection with the iframe that was created\n * @internal\n */\n createConnection = () => {\n // eslint-disable-next-line @typescript-eslint/no-this-alias\n const self = this;\n const iframe = this.iframe;\n\n if (!iframe) {\n console.error(\"shim cannot connect to Dromo.\");\n return;\n }\n this.connection = connectToChild<IConnectionMethods>({\n iframe,\n methods: {\n /**\n * Called for each column/field. Sends all data and expects all the\n * relevant column hooks to be evaluated.\n *\n * @param fieldName the fieldname key for the column\n * @param data the full column of data for the particular key\n */\n async handleColumnHooks(\n fieldName: string,\n data: IColumnHookInput[]\n ): Promise<IColumnHookOutput[]> {\n // Get all the hooks for this particular field\n const hooks = self.columnHooks.filter(\n (h) => h.fieldName === fieldName\n );\n // key is the index in the column (row). Value stores newValue and info.\n // This is the final object that is passed to the app to apply to the\n // global data state.\n const changes = new Map<\n number,\n { newValue?: string; info?: ITableMessage[] }\n >();\n // Each hook call updates this tmpData object with the latest values.\n // This allows us to run hooks sequentially with each subsequent call\n // having the most up to date data\n const tmpData: IColumnHookInput[] = data;\n\n // For each registered hook, call the developer defined callback\n await hooks.reduce(async (previousHookPromise, currentHook) => {\n await previousHookPromise.then(async () => {\n try {\n const hookResponse = await currentHook.callback(tmpData);\n hookResponse.forEach((hookOutput: IColumnHookOutput) => {\n // If the user has updated the value or info for a particular\n // index update the changes map, and the tmpData\n if (\n hookOutput.value !== undefined ||\n hookOutput.info !== undefined\n ) {\n const change: {\n value?: string;\n info?: ITableMessage[];\n } = {};\n if (hookOutput.value !== undefined) {\n change.value = hookOutput.value;\n tmpData[hookOutput.index] = hookOutput.value;\n }\n if (hookOutput.info !== undefined)\n change.info = hookOutput.info;\n changes.set(hookOutput.index, change);\n }\n });\n } catch (err) {\n console.error(\n \"[Dromo-External-Error] There was an error running your col hook.\",\n err\n );\n }\n });\n }, Promise.resolve());\n\n // Change the map into IColumnHookOuput for the application to process\n const columnHookOutput: IColumnHookOutput[] = [];\n changes.forEach((change, index) =>\n columnHookOutput.push({ ...change, index })\n );\n return columnHookOutput;\n },\n\n /**\n * Called singularly for each row. Goes through all row hooks and\n * evaluates them.\n *\n * @param data an array of row data objects\n */\n async handleRowHooks(\n data: IRowHookInput[],\n mode: \"init\" | \"update\"\n ): Promise<IRowHookOutputInternal[]> {\n // Changes is the final changes that will be sent to the frontend\n const changes = new Map<number, IRowHookOutput[\"row\"]>();\n const hookData = new Map(\n data.map((inputRow) => [inputRow.index, inputRow])\n );\n\n // a helper function called for each row that updates the final changes\n // as well as the row data which will be passed to subsequent hooks\n const updateForRow = (\n rowIndex: number,\n rowOutput: IRowHookOutput[\"row\"]\n ) => {\n for (const [fieldName, fieldOutput] of Object.entries(\n rowOutput ?? {}\n )) {\n if (\n fieldOutput.value === undefined &&\n fieldOutput.info === undefined &&\n fieldOutput.selectOptions === undefined\n )\n return;\n\n const rowData = hookData.get(rowIndex)!;\n const rowChanges = changes.get(rowIndex) || {};\n\n const change: {\n value?: string;\n info?: ITableMessage[];\n selectOptions?: ISelectField[\"selectOptions\"];\n } = rowChanges[fieldName] ?? {};\n\n // if there are any changes, we want to both update the changes\n // object sent to the app, and the rowInput sent to subsequent\n // row hooks running on this row so they see the changes from\n // prior row hooks\n if (fieldOutput.value !== undefined) {\n change.value = fieldOutput.value;\n rowData.row[fieldName].value = fieldOutput.value;\n }\n\n if (fieldOutput.info !== undefined) {\n change.info = fieldOutput.info;\n rowData.row[fieldName].info = fieldOutput.info;\n }\n\n if (fieldOutput.selectOptions !== undefined) {\n change.selectOptions = fieldOutput.selectOptions;\n rowData.row[fieldName].selectOptions =\n fieldOutput.selectOptions;\n }\n\n rowChanges[fieldName] = change;\n changes.set(rowIndex, rowChanges);\n }\n };\n\n // First we run the bulk row hooks with all of the input data\n for (const bulkRowHook of self.bulkRowHooks) {\n try {\n const hookOutput = await bulkRowHook(data, mode);\n for (const rowOutput of hookOutput) {\n updateForRow(rowOutput.index, rowOutput.row);\n }\n } catch (err) {\n console.error(\n \"[Dromo-External-Error] There was an error running your bulk row hook.\",\n err\n );\n }\n }\n\n // We want to loop through each row independently. Because each\n // row's execution is independent, we can do row by row first vs\n // hook by hook\n await Promise.all(\n data.map(async (rowInput: IRowHookInput) => {\n for (const rowHook of self.rowHooks) {\n try {\n const hookOutput = await rowHook.callback(rowInput, mode);\n updateForRow(rowInput.index, hookOutput.row);\n } catch (err) {\n console.error(\n \"[Dromo-External-Error] There was an error running your row hook.\",\n err\n );\n }\n }\n })\n );\n\n const finalChanges: IRowHookOutputInternal[] = [];\n\n changes.forEach((rowChanges, rowIndex) => {\n finalChanges.push({ index: rowIndex, row: rowChanges });\n });\n\n return finalChanges;\n },\n handleStepHook(\n step: EStepHook,\n data: IUploadStepData | IReviewStepData\n ) {\n self.stepHooks.forEach((hook) => {\n if (step !== hook.type) return;\n try {\n hook.callback(self, data);\n } catch (err) {\n console.error(\n \"[Dromo-External-Error] There was an error in your step callback.\",\n err\n );\n }\n });\n },\n /**\n * Called singularly for each row. Goes through all delete hooks and\n * evaluates them.\n *\n * @param deletedRows - an array of rows deleted from the data\n */\n handleRowDeleteHooks(deletedRows: IRowHookInput[]): Promise<void[]> {\n // We want to loop through each row independently. Because each\n // row's execution is independent, we can do row by row first vs\n // hook by hook\n return Promise.all(\n deletedRows.map(async (rowData: IRowHookInput) => {\n await self.rowDeleteHooks.forEach(async (currentHook) => {\n try {\n await currentHook(rowData);\n } catch (err) {\n console.error(\n \"[Dromo-External-Error] There was an error running your row delete hook.\",\n err\n );\n }\n });\n })\n );\n },\n async handleBeforeFinishCallback(\n data: Record<string, any>[],\n metadata: IResultMetadata\n ): Promise<IBeforeFinishOutput> {\n if (self.beforeFinishCallback) {\n try {\n return await self.beforeFinishCallback(data, metadata, self);\n } catch (err) {\n console.error(\n \"[Dromo-External-Error] There was an error in your beforeFinish callback.\",\n err\n );\n }\n }\n },\n /**\n * Called after the user has completed the Dromo flow, send the\n * cleaned data to the developer\n *\n * TODO: data cannot be of type any. We need to standardize our return\n * type to be Map<string, any>[]\n * @param data cleaned data after the flow is complete\n */\n async handleResults(\n data: any,\n metadata: IResultMetadata\n ): Promise<void> {\n if (self.resultsCallback) {\n try {\n await self.resultsCallback(data, metadata);\n } catch (err) {\n console.error(\n \"[Dromo-External-Error] There was an error in your onResult callback.\",\n err\n );\n }\n }\n self.close();\n },\n /**\n * Called when the modal has been closed by the finishing of the flow\n */\n handleCloseModal() {\n self.close();\n },\n /**\n * Called when the modal has been closed due to the user canceling the\n * flow\n */\n handleCancel() {\n if (self.cancelCallback) {\n try {\n self.cancelCallback();\n } catch (err) {\n console.error(\n \"[Dromo-External-Error] There was an error in your cancel callback.\",\n err\n );\n }\n }\n self.close();\n },\n },\n });\n };\n\n /**\n * Mounts the iframe in the parent HTML page\n * NOTE: Should be called AFTER the PenPal connection has been created\n * @internal\n */\n mountIFrame = () => {\n if (!document.getElementById(this.iframeId!)) {\n const wrapper = document.createElement(\"div\");\n wrapper.id = this.wrapperId;\n wrapper.style.zIndex = Number.MAX_SAFE_INTEGER.toString();\n wrapper.style.visibility = \"hidden\";\n wrapper.style.width = \"0px\";\n wrapper.style.height = \"0px\";\n wrapper.style.position = \"fixed\";\n wrapper.style.top = \"0px\";\n wrapper.style.left = \"0px\";\n wrapper.style.right = \"0px\";\n wrapper.style.bottom = \"0px\";\n wrapper.appendChild(this.iframe as HTMLIFrameElement);\n document.body.appendChild(wrapper);\n this.wrapper = wrapper;\n }\n };\n\n showIFrame = () => {\n if (this.wrapper) {\n this.wrapper.style.visibility = \"visible\";\n this.wrapper.style.width = \"100%\";\n this.wrapper.style.height = \"100%\";\n document.body.style.overflow = \"hidden\";\n }\n };\n\n /**\n * Function called by the developer to set a callback\n *\n * @param fieldName the key of the column for which we want to trigger the\n * callback\n * @param callback developer defined callback that is callback that is added\n * to a list of column hooks\n */\n registerColumnHook = (\n fieldName: IColumnHook[\"fieldName\"],\n callback: IColumnHook[\"callback\"]\n ) => {\n this.columnHooks.push({\n fieldName: fieldName,\n callback: callback,\n });\n\n // This is kept for the JS version - a user can register after the connection\n // has been made and the modal has been opened. It's bad form, but possible\n if (this.connection) {\n this.connection.promise.then((child) => {\n child.setNumRegisteredColHooks(this.columnHooks.length);\n });\n }\n };\n\n /** @internal */\n totalNumRowHooks = () => {\n return this.rowHooks.length + this.bulkRowHooks.length;\n };\n\n /**\n * Function called by the developer to set a callback\n *\n * @param callback developer defined callback that is added to a list of row\n * hooks\n */\n registerBulkRowHook = (bulkRowHook: IBulkRowHook) => {\n this.bulkRowHooks.push(bulkRowHook);\n\n // This is kept for the JS version - a user can register after the connection\n // has been made and the modal has been opened. It's bad form, but possible\n if (this.connection) {\n this.connection.promise.then((child) => {\n child.setNumRegisteredRowHooks(this.totalNumRowHooks());\n });\n }\n };\n\n /**\n * Function called by the developer to set a callback\n *\n * @param callback developer defined callback that is added to a list of row\n * hooks\n */\n registerRowHook = (callback: IRowHook) => {\n this.rowHooks.push({\n callback: callback,\n });\n\n // This is kept for the JS version - a user can register after the connection\n // has been made and the modal has been opened. It's bad form, but possible\n if (this.connection) {\n this.connection.promise.then((child) => {\n child.setNumRegisteredRowHooks(this.totalNumRowHooks());\n });\n }\n };\n\n /**\n * Function called by the developer to set a callback\n *\n * @param callback developer defined callback that is called per step of the\n * import flow\n */\n registerStepHook = (\n type: IStepHook[\"type\"],\n callback: IStepHook[\"callback\"]\n ) => {\n this.stepHooks.push({ type, callback });\n };\n\n /**\n * Function called by the developer to set a row delete callback\n *\n * @param callback developer defined callback that is called per step of the\n * import flow\n */\n registerRowDeleteHook = (callback: IRowDeleteHook) => {\n this.rowDeleteHooks.push(callback);\n // This is kept for the JS version - a user can register after the connection\n // has been made and the modal has been opened. It's bad form, but possible\n if (this.connection) {\n this.connection.promise.then((child) => {\n child.setNumRegisteredRowDeleteHooks(this.rowDeleteHooks.length);\n });\n }\n };\n\n /**\n * Function called by the developer to set the beforeFinish callback\n *\n * @param callback developer defined callback that is called when the user submits\n */\n beforeFinish = (callback: IBeforeFinishCallback): void => {\n this.beforeFinishCallback = callback;\n };\n\n /**\n * Convenience function for setting all hooks at once.\n *\n * @param hooks object containing all hooks to register\n */\n registerAllHooks = (hooks: IAllHooks): void => {\n if (hooks.columnHooks) {\n for (const { fieldName, callback } of hooks.columnHooks) {\n this.registerColumnHook(fieldName, callback);\n }\n }\n\n if (hooks.rowHooks) {\n for (const rowHook of hooks.rowHooks) {\n this.registerRowHook(rowHook);\n }\n }\n\n if (hooks.bulkRowHooks) {\n for (const bulkRowHook of hooks.bulkRowHooks) {\n this.registerBulkRowHook(bulkRowHook);\n }\n }\n\n if (hooks.rowDeleteHooks) {\n for (const rowDeleteHook of hooks.rowDeleteHooks) {\n this.registerRowDeleteHook(rowDeleteHook);\n }\n }\n\n if (hooks.stepHooks) {\n for (const { type, callback } of hooks.stepHooks) {\n this.registerStepHook(type, callback);\n }\n }\n\n if (hooks.beforeFinishCallback) {\n this.beforeFinish(hooks.beforeFinishCallback);\n }\n };\n\n /**\n * Function called by the developer to set a callback\n *\n * @param callback developer defined callback that is called when the import\n * flow completes\n */\n onResults = (\n callback: (\n data: Record<string, string | number | boolean | null>[],\n metadata: IResultMetadata\n ) => Promise<void> | void\n ) => {\n this.resultsCallback = callback;\n };\n\n /**\n * Function called by the developer to set a callback\n *\n * @param callback developer defined callback that is called when the user\n * cancels the import\n */\n onCancel = (callback: () => void) => {\n this.cancelCallback = callback;\n };\n\n /**\n * Function called by the developer to set or reset the user information\n */\n setUser = async (user: IUser) => {\n this.user = user;\n if (this.connection) {\n const child = await this.connection!.promise;\n await child.setUser(this.user);\n }\n };\n\n /**\n * Function called by the developer to add a field midway through the import\n * process\n */\n addField = async (field: IDeveloperField, position?: IPositionSpec) => {\n if (this.connection) {\n const child = await this.connection!.promise;\n await child.addField(makeFieldSerializable(field), position);\n } else {\n console.error(\"[Dromo-Error] Invalid connection to Dromo Uploader.\");\n }\n };\n\n /**\n * Function called by the developer to remove a field. The data won't appear\n * in the user interface nor in the result data.\n */\n removeField = async (fieldKey: string) => {\n if (this.connection) {\n const child = await this.connection!.promise;\n await child.removeField(fieldKey);\n } else {\n console.error(\"[Dromo-Error] Invalid connection to Dromo Uploader.\");\n }\n };\n\n /**\n * Function called by the developer to add new table messages throughout the\n * import process\n */\n updateInfoMessages = async (messages: IMessagesForCell[]) => {\n if (this.connection) {\n const child = await this.connection!.promise;\n await child.updateInfoMessages(messages);\n } else {\n console.error(\"[Dromo-Error] Invalid connection to Dromo Uploader.\");\n }\n };\n\n /**\n * Function called by the developer to change the matchingStep.headerRowOverride\n * setting from a step hook\n */\n setHeaderRowOverride = async (headerRowOverride: number | null) => {\n this.headerRowOverride = headerRowOverride;\n if (this.connection) {\n const child = await this.connection!.promise;\n await child.setHeaderRowOverride(headerRowOverride);\n }\n };\n\n /**\n * Function called by developer called to open the iframe\n */\n open = async () => {\n if (!this.wrapper) {\n this.initIFrame();\n this.createConnection();\n this.mountIFrame();\n }\n\n await this.initChild();\n this.showIFrame();\n };\n\n /**\n * Function called by developer to close the iframe\n */\n close = () => {\n if (this.wrapper) {\n this.wrapper.style.visibility = \"hidden\";\n this.wrapper.style.width = \"0px\";\n this.wrapper.style.height = \"0px\";\n document.body.style.overflow = \"inherit\";\n }\n };\n\n /**\n * Function called by the developer to set developmentMode\n */\n setDevelopmentMode = async (developmentMode: boolean) => {\n this.developmentMode = developmentMode;\n if (this.connection) {\n const child = await this.connection!.promise;\n await child.setDevelopmentMode(this.developmentMode);\n }\n };\n\n /**\n * @internal\n */\n static rehydrateHeadless = async ({\n licenseKey,\n headlessImportId,\n fields,\n settings,\n hooks,\n rehydrateState,\n }: {\n licenseKey: string;\n headlessImportId: string;\n fields: IDeveloperField[];\n settings: IDeveloperSettings;\n hooks: IAllHooks;\n rehydrateState: any;\n }): Promise<void> => {\n const headlessUser: IUser = { id: \"headless-review\" };\n const dromo = new DromoUploader(licenseKey, fields, settings, headlessUser);\n dromo.registerAllHooks(hooks);\n await dromo.rehydrate(rehydrateState, headlessImportId);\n dromo.open();\n };\n\n /**\n * @internal\n */\n rehydrate = async (rehydrateState: any, headlessImportId: string) => {\n if (!this.wrapper) {\n this.initIFrame();\n this.createConnection();\n this.mountIFrame();\n }\n await this.initChild();\n const child = await this.connection!.promise;\n await child.rehydrate(rehydrateState, headlessImportId);\n this.showIFrame();\n };\n}\n\nexport {\n ITableMessage,\n IMessagesForCell,\n IColumnHook,\n IColumnHookInput,\n IColumnHookOutput,\n IRowHook,\n IRowHookInput,\n IRowHookOutput,\n IDeveloperField,\n IDeveloperSettings,\n IDeveloperStyleOverrides,\n IUser,\n IValidatorField,\n IRowHookOutputInternal,\n IResultMetadata,\n IReviewStepData,\n IStepHook,\n IUploadStepData,\n IRowDeleteHook,\n IBulkRowHook,\n IBeforeFinishCallback,\n IBeforeFinishOutput,\n IPositionSpec,\n IConnectionMethods,\n ISelectField,\n IImporterOptions,\n IAllHooks,\n};\n"],"names":["__assign","Object","assign","t","s","i","n","arguments","length","p","prototype","hasOwnProperty","call","apply","this","__awaiter","thisArg","_arguments","P","generator","Promise","resolve","reject","fulfilled","value","step","next","e","rejected","result","done","then","__generator","body","f","y","g","_","label","sent","trys","ops","verb","throw","return","Symbol","iterator","v","op","TypeError","pop","push","EventTypes","MessageType","Resolution","ErrorCode","NativeErrorName","NativeEventType","IFRAME_URL","DEFAULT_PORT_BY_PROTOCOL","http:","https:","URL_REGEX","opaqueOriginSchemes","serializeError","name","message","stack","id","callSender","info","methodNames","destroyConnection","log","localName","local","remote","originForSending","originForReceiving","destroyed","createMethodProxy","methodName","args","iframeRemoved","closed","error","Error","code","ConnectionDestroyed","generateId","handleMessageEvent","event","source","data","penpal","Reply","origin","replyMessage","removeEventListener","Message","returnValue","returnValueIsError","obj","deserializedError","keys","forEach","key","deserializeError","resolution","Fulfilled","addEventListener","callMessage","Call","postMessage","reduce","api","methods","childOrigin","destructor","destroy","onDestroy","destroyCallReceiver","receiverMethodNames","window","createPromiseHandler","Rejected","err","DataCloneError","errorReplyMessage","connectCallReceiver","receiverMethodName","destroyCallSender","connectCallSender","options","iframe","timeout","debug","console","createLogger","callbacks","[object Object]","callback","createDestructor","src","srcdoc","NoIframeSrc","validateIframeHasSrcOrSrcDoc","find","scheme","startsWith","location","document","regexResult","exec","protocol","hostname","port","getOriginFromSrc","handleSynMessage","synAckMessage","SynAck","handleSynMessageFactory","handleAckMessage","handleAckMessageFactory","promise","stopConnectionTimeout","timeoutId","undefined","setTimeout","ConnectionTimeout","clearTimeout","startConnectionTimeout","handleMessage","contentWindow","Syn","Ack","checkIframeInDocIntervalId","setInterval","isConnected","clearInterval","monitorIframeRemoval","makeFieldSerializable","field","newField","validators","map","validator","validate","regex","RegExp","regexOptions","ignoreCase","flags","includes","dotAll","multiline","unicode","licenseKey","fieldsOrSchemaName","settings","user","connection","child","_c","loadedFromUnVersionedScript","Array","from","getElementsByTagName","some","fields","version","browserExcelParsing","init","appHost","schemaName","initFromSavedSchema","developmentMode","headerRowOverride","setNumRegisteredRowHooks","totalNumRowHooks","setNumRegisteredColHooks","columnHooks","setNumRegisteredRowDeleteHooks","rowDeleteHooks","getElementById","_this","iframeId","createElement","identifier","importIdentifier","title","DROMO_WIDGET_OVERRIDE","style","height","width","border","crossorigin","self","connectToChild","handleColumnHooks","fieldName","hooks","filter","h","changes","Map","tmpData","previousHookPromise","currentHook","_a","hookOutput","change","index","set","err_1","columnHookOutput","handleRowHooks","mode","hookData","inputRow","updateForRow","rowIndex","rowOutput","_b","entries","_i","fieldOutput","selectOptions","rowData","get","rowChanges","row","bulkRowHooks","bulkRowHook","hookOutput_1","err_2","all","rowInput","rowHooks","rowHook","err_3","finalChanges","handleStepHook","stepHooks","hook","type","handleRowDeleteHooks","deletedRows","err_4","handleBeforeFinishCallback","metadata","beforeFinishCallback","err_5","handleResults","resultsCallback","err_6","close","handleCloseModal","handleCancel","cancelCallback","wrapper","wrapperId","zIndex","Number","MAX_SAFE_INTEGER","toString","visibility","position","top","left","right","bottom","appendChild","overflow","registerColumnHook","_d","registerRowHook","_f","_e","registerBulkRowHook","_h","_g","rowDeleteHook","registerRowDeleteHook","_k","_j","_l","registerStepHook","beforeFinish","setUser","addField","fieldKey","removeField","messages","updateInfoMessages","setHeaderRowOverride","initIFrame","createConnection","mountIFrame","initChild","showIFrame","setDevelopmentMode","rehydrateState","headlessImportId","rehydrate","Math","random","substring","DromoUploader","dromo","registerAllHooks","open"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","sources":["../node_modules/tslib/tslib.es6.js","../src/constants.ts","../node_modules/penpal/lib/enums.js","../node_modules/penpal/lib/parent/getOriginFromSrc.js","../node_modules/penpal/lib/errorSerialization.js","../node_modules/penpal/lib/generateId.js","../node_modules/penpal/lib/connectCallSender.js","../node_modules/penpal/lib/parent/handleAckMessageFactory.js","../node_modules/penpal/lib/connectCallReceiver.js","../node_modules/penpal/lib/parent/connectToChild.js","../node_modules/penpal/lib/createLogger.js","../node_modules/penpal/lib/createDestructor.js","../node_modules/penpal/lib/parent/validateIframeHasSrcOrSrcDoc.js","../node_modules/penpal/lib/parent/handleSynMessageFactory.js","../node_modules/penpal/lib/startConnectionTimeout.js","../node_modules/penpal/lib/parent/monitorIframeRemoval.js","../src/index.ts"],"sourcesContent":["/*! *****************************************************************************\r\nCopyright (c) Microsoft Corporation.\r\n\r\nPermission to use, copy, modify, and/or distribute this software for any\r\npurpose with or without fee is hereby granted.\r\n\r\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\r\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\r\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\r\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\r\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\r\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\r\nPERFORMANCE OF THIS SOFTWARE.\r\n***************************************************************************** */\r\n/* global Reflect, Promise */\r\n\r\nvar extendStatics = function(d, b) {\r\n extendStatics = Object.setPrototypeOf ||\r\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\r\n function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\r\n return extendStatics(d, b);\r\n};\r\n\r\nexport function __extends(d, b) {\r\n extendStatics(d, b);\r\n function __() { this.constructor = d; }\r\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\r\n}\r\n\r\nexport var __assign = function() {\r\n __assign = Object.assign || function __assign(t) {\r\n for (var s, i = 1, n = arguments.length; i < n; i++) {\r\n s = arguments[i];\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\r\n }\r\n return t;\r\n }\r\n return __assign.apply(this, arguments);\r\n}\r\n\r\nexport function __rest(s, e) {\r\n var t = {};\r\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\r\n t[p] = s[p];\r\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\r\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\r\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\r\n t[p[i]] = s[p[i]];\r\n }\r\n return t;\r\n}\r\n\r\nexport function __decorate(decorators, target, key, desc) {\r\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\r\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\r\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\r\n return c > 3 && r && Object.defineProperty(target, key, r), r;\r\n}\r\n\r\nexport function __param(paramIndex, decorator) {\r\n return function (target, key) { decorator(target, key, paramIndex); }\r\n}\r\n\r\nexport function __metadata(metadataKey, metadataValue) {\r\n if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(metadataKey, metadataValue);\r\n}\r\n\r\nexport function __awaiter(thisArg, _arguments, P, generator) {\r\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\r\n return new (P || (P = Promise))(function (resolve, reject) {\r\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\r\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\r\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\r\n step((generator = generator.apply(thisArg, _arguments || [])).next());\r\n });\r\n}\r\n\r\nexport function __generator(thisArg, body) {\r\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;\r\n return g = { next: verb(0), \"throw\": verb(1), \"return\": verb(2) }, typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\r\n function verb(n) { return function (v) { return step([n, v]); }; }\r\n function step(op) {\r\n if (f) throw new TypeError(\"Generator is already executing.\");\r\n while (_) try {\r\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\r\n if (y = 0, t) op = [op[0] & 2, t.value];\r\n switch (op[0]) {\r\n case 0: case 1: t = op; break;\r\n case 4: _.label++; return { value: op[1], done: false };\r\n case 5: _.label++; y = op[1]; op = [0]; continue;\r\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\r\n default:\r\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\r\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\r\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\r\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\r\n if (t[2]) _.ops.pop();\r\n _.trys.pop(); continue;\r\n }\r\n op = body.call(thisArg, _);\r\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\r\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\r\n }\r\n}\r\n\r\nexport function __createBinding(o, m, k, k2) {\r\n if (k2 === undefined) k2 = k;\r\n o[k2] = m[k];\r\n}\r\n\r\nexport function __exportStar(m, exports) {\r\n for (var p in m) if (p !== \"default\" && !exports.hasOwnProperty(p)) exports[p] = m[p];\r\n}\r\n\r\nexport function __values(o) {\r\n var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\r\n if (m) return m.call(o);\r\n if (o && typeof o.length === \"number\") return {\r\n next: function () {\r\n if (o && i >= o.length) o = void 0;\r\n return { value: o && o[i++], done: !o };\r\n }\r\n };\r\n throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\r\n}\r\n\r\nexport function __read(o, n) {\r\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\r\n if (!m) return o;\r\n var i = m.call(o), r, ar = [], e;\r\n try {\r\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\r\n }\r\n catch (error) { e = { error: error }; }\r\n finally {\r\n try {\r\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\r\n }\r\n finally { if (e) throw e.error; }\r\n }\r\n return ar;\r\n}\r\n\r\nexport function __spread() {\r\n for (var ar = [], i = 0; i < arguments.length; i++)\r\n ar = ar.concat(__read(arguments[i]));\r\n return ar;\r\n}\r\n\r\nexport function __spreadArrays() {\r\n for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\r\n for (var r = Array(s), k = 0, i = 0; i < il; i++)\r\n for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\r\n r[k] = a[j];\r\n return r;\r\n};\r\n\r\nexport function __await(v) {\r\n return this instanceof __await ? (this.v = v, this) : new __await(v);\r\n}\r\n\r\nexport function __asyncGenerator(thisArg, _arguments, generator) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var g = generator.apply(thisArg, _arguments || []), i, q = [];\r\n return i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i;\r\n function verb(n) { if (g[n]) i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; }\r\n function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }\r\n function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }\r\n function fulfill(value) { resume(\"next\", value); }\r\n function reject(value) { resume(\"throw\", value); }\r\n function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }\r\n}\r\n\r\nexport function __asyncDelegator(o) {\r\n var i, p;\r\n return i = {}, verb(\"next\"), verb(\"throw\", function (e) { throw e; }), verb(\"return\"), i[Symbol.iterator] = function () { return this; }, i;\r\n function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: n === \"return\" } : f ? f(v) : v; } : f; }\r\n}\r\n\r\nexport function __asyncValues(o) {\r\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\r\n var m = o[Symbol.asyncIterator], i;\r\n return m ? m.call(o) : (o = typeof __values === \"function\" ? __values(o) : o[Symbol.iterator](), i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i);\r\n function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }\r\n function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }\r\n}\r\n\r\nexport function __makeTemplateObject(cooked, raw) {\r\n if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\r\n return cooked;\r\n};\r\n\r\nexport function __importStar(mod) {\r\n if (mod && mod.__esModule) return mod;\r\n var result = {};\r\n if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k];\r\n result.default = mod;\r\n return result;\r\n}\r\n\r\nexport function __importDefault(mod) {\r\n return (mod && mod.__esModule) ? mod : { default: mod };\r\n}\r\n\r\nexport function __classPrivateFieldGet(receiver, privateMap) {\r\n if (!privateMap.has(receiver)) {\r\n throw new TypeError(\"attempted to get private field on non-instance\");\r\n }\r\n return privateMap.get(receiver);\r\n}\r\n\r\nexport function __classPrivateFieldSet(receiver, privateMap, value) {\r\n if (!privateMap.has(receiver)) {\r\n throw new TypeError(\"attempted to set private field on non-instance\");\r\n }\r\n privateMap.set(receiver, value);\r\n return value;\r\n}\r\n","/* eslint-disable no-unused-vars */\ninterface IEnvironmentConstants {\n IFRAME_URL: string;\n}\nlet EnvironmentConstants: IEnvironmentConstants;\n// @ts-ignore\nif (ENV_IS_PRODUCTION) {\n EnvironmentConstants = {\n IFRAME_URL: \"https://widget.dromo.io/\",\n };\n} else {\n EnvironmentConstants = {\n IFRAME_URL: \"http://localhost:3000/\",\n };\n}\n\n/** @internal */\nexport const IFRAME_URL = EnvironmentConstants.IFRAME_URL;\n/** @internal */\nexport enum EventTypes {\n INIT_IFRAME = \"INIT_IFRAME\",\n}\n","export var MessageType;\n(function (MessageType) {\n MessageType[\"Call\"] = \"call\";\n MessageType[\"Reply\"] = \"reply\";\n MessageType[\"Syn\"] = \"syn\";\n MessageType[\"SynAck\"] = \"synAck\";\n MessageType[\"Ack\"] = \"ack\";\n})(MessageType || (MessageType = {}));\nexport var Resolution;\n(function (Resolution) {\n Resolution[\"Fulfilled\"] = \"fulfilled\";\n Resolution[\"Rejected\"] = \"rejected\";\n})(Resolution || (Resolution = {}));\nexport var ErrorCode;\n(function (ErrorCode) {\n ErrorCode[\"ConnectionDestroyed\"] = \"ConnectionDestroyed\";\n ErrorCode[\"ConnectionTimeout\"] = \"ConnectionTimeout\";\n ErrorCode[\"NotInIframe\"] = \"NotInIframe\";\n ErrorCode[\"NoIframeSrc\"] = \"NoIframeSrc\";\n})(ErrorCode || (ErrorCode = {}));\nexport var NativeErrorName;\n(function (NativeErrorName) {\n NativeErrorName[\"DataCloneError\"] = \"DataCloneError\";\n})(NativeErrorName || (NativeErrorName = {}));\nexport var NativeEventType;\n(function (NativeEventType) {\n NativeEventType[\"Message\"] = \"message\";\n})(NativeEventType || (NativeEventType = {}));\n","const DEFAULT_PORT_BY_PROTOCOL = {\n 'http:': '80',\n 'https:': '443'\n};\nconst URL_REGEX = /^(https?:)?\\/\\/([^/:]+)?(:(\\d+))?/;\nconst opaqueOriginSchemes = ['file:', 'data:'];\n/**\n * Converts a src value into an origin.\n */\nexport default (src) => {\n if (src && opaqueOriginSchemes.find(scheme => src.startsWith(scheme))) {\n // The origin of the child document is an opaque origin and its\n // serialization is \"null\"\n // https://html.spec.whatwg.org/multipage/origin.html#origin\n return 'null';\n }\n // Note that if src is undefined, then srcdoc is being used instead of src\n // and we can follow this same logic below to get the origin of the parent,\n // which is the origin that we will need to use.\n const location = document.location;\n const regexResult = URL_REGEX.exec(src);\n let protocol;\n let hostname;\n let port;\n if (regexResult) {\n // It's an absolute URL. Use the parsed info.\n // regexResult[1] will be undefined if the URL starts with //\n protocol = (regexResult[1] ? regexResult[1] : location.protocol);\n hostname = regexResult[2];\n port = regexResult[4];\n }\n else {\n // It's a relative path. Use the current location's info.\n protocol = location.protocol;\n hostname = location.hostname;\n port = location.port;\n }\n // If the port is the default for the protocol, we don't want to add it to the origin string\n // or it won't match the message's event.origin.\n const portSuffix = port && port !== DEFAULT_PORT_BY_PROTOCOL[protocol] ? `:${port}` : '';\n return `${protocol}//${hostname}${portSuffix}`;\n};\n","/**\n * Converts an error object into a plain object.\n */\nexport const serializeError = ({ name, message, stack }) => ({\n name,\n message,\n stack\n});\n/**\n * Converts a plain object into an error object.\n */\nexport const deserializeError = (obj) => {\n const deserializedError = new Error();\n // @ts-ignore\n Object.keys(obj).forEach(key => (deserializedError[key] = obj[key]));\n return deserializedError;\n};\n","let id = 0;\n/**\n * @return {number} A unique ID (not universally unique)\n */\nexport default () => ++id;\n","import generateId from './generateId';\nimport { deserializeError } from './errorSerialization';\nimport { ErrorCode, MessageType, NativeEventType, Resolution } from './enums';\n/**\n * Augments an object with methods that match those defined by the remote. When these methods are\n * called, a \"call\" message will be sent to the remote, the remote's corresponding method will be\n * executed, and the method's return value will be returned via a message.\n * @param {Object} callSender Sender object that should be augmented with methods.\n * @param {Object} info Information about the local and remote windows.\n * @param {Array} methodNames Names of methods available to be called on the remote.\n * @param {Promise} destructionPromise A promise resolved when destroy() is called on the penpal\n * connection.\n * @returns {Object} The call sender object with methods that may be called.\n */\nexport default (callSender, info, methodNames, destroyConnection, log) => {\n const { localName, local, remote, originForSending, originForReceiving } = info;\n let destroyed = false;\n log(`${localName}: Connecting call sender`);\n const createMethodProxy = (methodName) => {\n return (...args) => {\n log(`${localName}: Sending ${methodName}() call`);\n // This handles the case where the iframe has been removed from the DOM\n // (and therefore its window closed), the consumer has not yet\n // called destroy(), and the user calls a method exposed by\n // the remote. We detect the iframe has been removed and force\n // a destroy() immediately so that the consumer sees the error saying\n // the connection has been destroyed. We wrap this check in a try catch\n // because Edge throws an \"Object expected\" error when accessing\n // contentWindow.closed on a contentWindow from an iframe that's been\n // removed from the DOM.\n let iframeRemoved;\n try {\n if (remote.closed) {\n iframeRemoved = true;\n }\n }\n catch (e) {\n iframeRemoved = true;\n }\n if (iframeRemoved) {\n destroyConnection();\n }\n if (destroyed) {\n const error = new Error(`Unable to send ${methodName}() call due ` + `to destroyed connection`);\n error.code = ErrorCode.ConnectionDestroyed;\n throw error;\n }\n return new Promise((resolve, reject) => {\n const id = generateId();\n const handleMessageEvent = (event) => {\n if (event.source !== remote ||\n event.data.penpal !== MessageType.Reply ||\n event.data.id !== id) {\n return;\n }\n if (event.origin !== originForReceiving) {\n log(`${localName} received message from origin ${event.origin} which did not match expected origin ${originForReceiving}`);\n return;\n }\n const replyMessage = event.data;\n log(`${localName}: Received ${methodName}() reply`);\n local.removeEventListener(NativeEventType.Message, handleMessageEvent);\n let returnValue = replyMessage.returnValue;\n if (replyMessage.returnValueIsError) {\n returnValue = deserializeError(returnValue);\n }\n (replyMessage.resolution === Resolution.Fulfilled ? resolve : reject)(returnValue);\n };\n local.addEventListener(NativeEventType.Message, handleMessageEvent);\n const callMessage = {\n penpal: MessageType.Call,\n id,\n methodName,\n args\n };\n remote.postMessage(callMessage, originForSending);\n });\n };\n };\n methodNames.reduce((api, methodName) => {\n api[methodName] = createMethodProxy(methodName);\n return api;\n }, callSender);\n return () => {\n destroyed = true;\n };\n};\n","import connectCallReceiver from '../connectCallReceiver';\nimport connectCallSender from '../connectCallSender';\n/**\n * Handles an ACK handshake message.\n */\nexport default (methods, childOrigin, originForSending, destructor, log) => {\n const { destroy, onDestroy } = destructor;\n let destroyCallReceiver;\n let receiverMethodNames;\n // We resolve the promise with the call sender. If the child reconnects\n // (for example, after refreshing or navigating to another page that\n // uses Penpal, we'll update the call sender with methods that match the\n // latest provided by the child.\n const callSender = {};\n return (event) => {\n if (event.origin !== childOrigin) {\n log(`Parent: Handshake - Received ACK message from origin ${event.origin} which did not match expected origin ${childOrigin}`);\n return;\n }\n log('Parent: Handshake - Received ACK');\n const info = {\n localName: 'Parent',\n local: window,\n remote: event.source,\n originForSending: originForSending,\n originForReceiving: childOrigin\n };\n // If the child reconnected, we need to destroy the prior call receiver\n // before setting up a new one.\n if (destroyCallReceiver) {\n destroyCallReceiver();\n }\n destroyCallReceiver = connectCallReceiver(info, methods, log);\n onDestroy(destroyCallReceiver);\n // If the child reconnected, we need to remove the methods from the\n // previous call receiver off the sender.\n if (receiverMethodNames) {\n receiverMethodNames.forEach(receiverMethodName => {\n delete callSender[receiverMethodName];\n });\n }\n receiverMethodNames = event.data.methodNames;\n const destroyCallSender = connectCallSender(callSender, info, receiverMethodNames, destroy, log);\n onDestroy(destroyCallSender);\n return callSender;\n };\n};\n","import { serializeError } from './errorSerialization';\nimport { MessageType, NativeEventType, NativeErrorName, Resolution } from './enums';\n/**\n * Listens for \"call\" messages coming from the remote, executes the corresponding method, and\n * responds with the return value.\n */\nexport default (info, methods, log) => {\n const { localName, local, remote, originForSending, originForReceiving } = info;\n let destroyed = false;\n const handleMessageEvent = (event) => {\n if (event.source !== remote || event.data.penpal !== MessageType.Call) {\n return;\n }\n if (event.origin !== originForReceiving) {\n log(`${localName} received message from origin ${event.origin} which did not match expected origin ${originForReceiving}`);\n return;\n }\n const callMessage = event.data;\n const { methodName, args, id } = callMessage;\n log(`${localName}: Received ${methodName}() call`);\n const createPromiseHandler = (resolution) => {\n return (returnValue) => {\n log(`${localName}: Sending ${methodName}() reply`);\n if (destroyed) {\n // It's possible to throw an error here, but it would need to be thrown asynchronously\n // and would only be catchable using window.onerror. This is because the consumer\n // is merely returning a value from their method and not calling any function\n // that they could wrap in a try-catch. Even if the consumer were to catch the error,\n // the value of doing so is questionable. Instead, we'll just log a message.\n log(`${localName}: Unable to send ${methodName}() reply due to destroyed connection`);\n return;\n }\n const message = {\n penpal: MessageType.Reply,\n id,\n resolution,\n returnValue\n };\n if (resolution === Resolution.Rejected &&\n returnValue instanceof Error) {\n message.returnValue = serializeError(returnValue);\n message.returnValueIsError = true;\n }\n try {\n remote.postMessage(message, originForSending);\n }\n catch (err) {\n // If a consumer attempts to send an object that's not cloneable (e.g., window),\n // we want to ensure the receiver's promise gets rejected.\n if (err.name === NativeErrorName.DataCloneError) {\n const errorReplyMessage = {\n penpal: MessageType.Reply,\n id,\n resolution: Resolution.Rejected,\n returnValue: serializeError(err),\n returnValueIsError: true\n };\n remote.postMessage(errorReplyMessage, originForSending);\n }\n throw err;\n }\n };\n };\n new Promise(resolve => resolve(methods[methodName].apply(methods, args))).then(createPromiseHandler(Resolution.Fulfilled), createPromiseHandler(Resolution.Rejected));\n };\n local.addEventListener(NativeEventType.Message, handleMessageEvent);\n return () => {\n destroyed = true;\n local.removeEventListener(NativeEventType.Message, handleMessageEvent);\n };\n};\n","import { ErrorCode, MessageType, NativeEventType } from '../enums';\nimport createDestructor from '../createDestructor';\nimport createLogger from '../createLogger';\nimport getOriginFromSrc from './getOriginFromSrc';\nimport handleAckMessageFactory from './handleAckMessageFactory';\nimport handleSynMessageFactory from './handleSynMessageFactory';\nimport monitorIframeRemoval from './monitorIframeRemoval';\nimport startConnectionTimeout from '../startConnectionTimeout';\nimport validateIframeHasSrcOrSrcDoc from './validateIframeHasSrcOrSrcDoc';\n/**\n * Attempts to establish communication with an iframe.\n */\nexport default (options) => {\n let { iframe, methods = {}, childOrigin, timeout, debug = false } = options;\n const log = createLogger(debug);\n const destructor = createDestructor();\n const { onDestroy, destroy } = destructor;\n if (!childOrigin) {\n validateIframeHasSrcOrSrcDoc(iframe);\n childOrigin = getOriginFromSrc(iframe.src);\n }\n // If event.origin is \"null\", the remote protocol is file: or data: and we\n // must post messages with \"*\" as targetOrigin when sending messages.\n // https://developer.mozilla.org/en-US/docs/Web/API/Window/postMessage#Using_window.postMessage_in_extensions\n const originForSending = childOrigin === 'null' ? '*' : childOrigin;\n const handleSynMessage = handleSynMessageFactory(log, methods, childOrigin, originForSending);\n const handleAckMessage = handleAckMessageFactory(methods, childOrigin, originForSending, destructor, log);\n const promise = new Promise((resolve, reject) => {\n const stopConnectionTimeout = startConnectionTimeout(timeout, destroy);\n const handleMessage = (event) => {\n if (event.source !== iframe.contentWindow || !event.data) {\n return;\n }\n if (event.data.penpal === MessageType.Syn) {\n handleSynMessage(event);\n return;\n }\n if (event.data.penpal === MessageType.Ack) {\n const callSender = handleAckMessage(event);\n if (callSender) {\n stopConnectionTimeout();\n resolve(callSender);\n }\n return;\n }\n };\n window.addEventListener(NativeEventType.Message, handleMessage);\n log('Parent: Awaiting handshake');\n monitorIframeRemoval(iframe, destructor);\n onDestroy((error) => {\n window.removeEventListener(NativeEventType.Message, handleMessage);\n if (!error) {\n error = new Error('Connection destroyed');\n error.code = ErrorCode.ConnectionDestroyed;\n }\n reject(error);\n });\n });\n return {\n promise,\n destroy() {\n // Don't allow consumer to pass an error into destroy.\n destroy();\n }\n };\n};\n","export default (debug) => {\n /**\n * Logs a message if debug is enabled.\n */\n return (...args) => {\n if (debug) {\n console.log('[Penpal]', ...args); // eslint-disable-line no-console\n }\n };\n};\n","export default () => {\n const callbacks = [];\n let destroyed = false;\n return {\n destroy(error) {\n destroyed = true;\n callbacks.forEach(callback => {\n callback(error);\n });\n },\n onDestroy(callback) {\n destroyed ? callback() : callbacks.push(callback);\n }\n };\n};\n","import { ErrorCode } from '../enums';\nexport default (iframe) => {\n if (!iframe.src && !iframe.srcdoc) {\n const error = new Error('Iframe must have src or srcdoc property defined.');\n error.code = ErrorCode.NoIframeSrc;\n throw error;\n }\n};\n","import { MessageType } from '../enums';\n/**\n * Handles a SYN handshake message.\n */\nexport default (log, methods, childOrigin, originForSending) => {\n return (event) => {\n if (event.origin !== childOrigin) {\n log(`Parent: Handshake - Received SYN message from origin ${event.origin} which did not match expected origin ${childOrigin}`);\n return;\n }\n log('Parent: Handshake - Received SYN, responding with SYN-ACK');\n const synAckMessage = {\n penpal: MessageType.SynAck,\n methodNames: Object.keys(methods)\n };\n event.source.postMessage(synAckMessage, originForSending);\n };\n};\n","import { ErrorCode } from './enums';\n/**\n * Starts a timeout and calls the callback with an error\n * if the timeout completes before the stop function is called.\n */\nexport default (timeout, callback) => {\n let timeoutId;\n if (timeout !== undefined) {\n timeoutId = window.setTimeout(() => {\n const error = new Error(`Connection timed out after ${timeout}ms`);\n error.code = ErrorCode.ConnectionTimeout;\n callback(error);\n }, timeout);\n }\n return () => {\n clearTimeout(timeoutId);\n };\n};\n","const CHECK_IFRAME_IN_DOC_INTERVAL = 60000;\n/**\n * Monitors for iframe removal and destroys connection if iframe\n * is found to have been removed from DOM. This is to prevent memory\n * leaks when the iframe is removed from the document and the consumer\n * hasn't called destroy(). Without this, event listeners attached to\n * the window would stick around and since the event handlers have a\n * reference to the iframe in their closures, the iframe would stick\n * around too.\n */\nexport default (iframe, destructor) => {\n const { destroy, onDestroy } = destructor;\n const checkIframeInDocIntervalId = setInterval(() => {\n if (!iframe.isConnected) {\n clearInterval(checkIframeInDocIntervalId);\n destroy();\n }\n }, CHECK_IFRAME_IN_DOC_INTERVAL);\n onDestroy(() => {\n clearInterval(checkIframeInDocIntervalId);\n });\n};\n","import { IFRAME_URL } from \"./constants\";\nimport { connectToChild } from \"penpal\";\nimport { Connection } from \"penpal/lib/types\";\n\nimport {\n ITableMessage,\n IMessagesForCell,\n IColumnHook,\n IColumnHookInput,\n IColumnHookOutput,\n IRowHook,\n IRowHookInput,\n IRowHookOutput,\n IDeveloperField,\n IDeveloperSettings,\n IDeveloperStyleOverrides,\n IUser,\n IValidatorField,\n IRowHookOutputInternal,\n IResultMetadata,\n EStepHook,\n IReviewStepData,\n IStepHook,\n IUploadStepData,\n IRowDeleteHook,\n IBulkRowHook,\n IBeforeFinishCallback,\n IBeforeFinishOutput,\n IPositionSpec,\n IConnectionMethods,\n ISelectField,\n IImporterOptions,\n IAllHooks,\n IRowToAdd,\n} from \"./interfaces\";\n\nconst DROMO_WRAPPER_SUFFIX = \"dromo-container\";\nconst IFRAME_SUFFIX = \"dromo-iframe-element\";\n\ndeclare global {\n interface Window {\n DROMO_WIDGET_OVERRIDE?: string;\n }\n}\n\nconst makeFieldSerializable = (field: IDeveloperField) => {\n const newField = { ...field };\n if (newField.validators) {\n newField.validators = newField.validators.map((validator) => {\n if (\n (validator.validate === \"regex_match\" ||\n validator.validate === \"regex_exclude\") &&\n validator.regex instanceof RegExp\n ) {\n return {\n ...validator,\n regex: validator.regex.source,\n regexOptions: {\n ignoreCase: validator.regex.flags.includes(\"i\"),\n dotAll: validator.regex.flags.includes(\"s\"),\n multiline: validator.regex.flags.includes(\"m\"),\n unicode: validator.regex.flags.includes(\"u\"),\n },\n };\n }\n return validator;\n });\n }\n return newField;\n};\n\nexport default class DromoUploader {\n // Unique IDs for iframe and container\n /** @internal */\n iframeId: string;\n /** @internal */\n wrapperId: string;\n\n // Refers to unique backend license key\n /** @internal */\n licenseKey: string;\n // See DeveloperFieldsSchema\n /** @internal */\n fields: IDeveloperField[] | undefined;\n // See DeveloperSettingsSchema\n /** @internal */\n settings: IDeveloperSettings | undefined;\n // See UserSchema\n /** @internal */\n user: IUser | undefined;\n // If the user is using a saved schema, its name\n /** @internal */\n schemaName: string | undefined;\n // DevelopmentMode\n /** @internal */\n developmentMode: boolean | undefined;\n // Header Row Override\n /** @internal */\n headerRowOverride: number | null | undefined;\n\n // HTML references\n /** @internal */\n iframe: HTMLIFrameElement | undefined;\n /** @internal */\n wrapper: HTMLElement | undefined;\n\n // Penpal connection reference\n /** @internal */\n connection: Connection<IConnectionMethods> | undefined;\n\n // Data Hooks\n /** @internal */\n columnHooks: IColumnHook[] = [];\n /** @internal */\n bulkRowHooks: IBulkRowHook[] = [];\n /** @internal */\n rowHooks: { callback: IRowHook }[] = [];\n /** @internal */\n stepHooks: IStepHook[] = [];\n /** @internal */\n rowDeleteHooks: IRowDeleteHook[] = [];\n\n // Callbacks\n /** @internal */\n beforeFinishCallback: IBeforeFinishCallback | undefined;\n /** @internal */\n resultsCallback:\n | ((data: any, metadata: IResultMetadata) => Promise<void> | void)\n | undefined;\n\n /** @internal */\n cancelCallback: (() => void) | undefined;\n\n /** @internal */\n appHost: string;\n\n constructor(\n licenseKey: string,\n fields: IDeveloperField[],\n settings: IDeveloperSettings,\n user: IUser\n );\n\n constructor(licenseKey: string, schemaName: string);\n\n constructor(\n licenseKey: string,\n fieldsOrSchemaName: IDeveloperField[] | string,\n settings?: IDeveloperSettings,\n user?: IUser\n ) {\n this.iframeId =\n Math.random().toString(36).substring(7) + \"-\" + IFRAME_SUFFIX;\n this.wrapperId =\n Math.random().toString(36).substring(7) + \"-\" + DROMO_WRAPPER_SUFFIX;\n this.appHost = document.location.hostname;\n\n if (settings !== undefined && user !== undefined) {\n this.licenseKey = licenseKey;\n this.fields = (fieldsOrSchemaName as IDeveloperField[]).map(\n makeFieldSerializable\n );\n this.settings = settings;\n this.user = user;\n } else {\n this.licenseKey = licenseKey;\n this.schemaName = fieldsOrSchemaName as string;\n }\n }\n\n initChild = async () => {\n if (!this.connection) {\n console.error(\"shim cannot connect with Dromo service.\");\n return;\n }\n\n const child = await this.connection.promise;\n\n // We check to see if this was loaded from either an SDK or snippet that didn't specify a version\n // If it was, this is a legacy snippet/sdk and we should NOT show the redesigned UI\n const loadedFromUnVersionedScript = Array.from(\n document.getElementsByTagName(\"script\")\n ).some(\n (s) =>\n s.src === \"https://unpkg.com/dromo-uploader-js/dist/DromoUploader.js\" ||\n s.src ===\n \"https://cdn.jsdelivr.net/npm/dromo-uploader-js@latest/dist/DromoUploader.js\"\n );\n\n if (this.fields && this.settings && this.user) {\n const settings = { ...this.settings };\n if (!loadedFromUnVersionedScript) {\n settings.version = settings.version ?? \"v2\";\n }\n settings.browserExcelParsing = settings.browserExcelParsing ?? true;\n\n await child.init(\n this.licenseKey,\n this.fields,\n settings,\n this.user,\n this.appHost\n );\n } else if (this.schemaName) {\n await child.initFromSavedSchema(\n this.licenseKey,\n this.schemaName,\n this.appHost,\n {\n user: this.user,\n developmentMode: this.developmentMode,\n headerRowOverride: this.headerRowOverride,\n }\n );\n } else {\n console.error(\"Invalid Dromo configuration\");\n }\n\n await child.setNumRegisteredRowHooks(this.totalNumRowHooks());\n await child.setNumRegisteredColHooks(this.columnHooks.length);\n await child.setNumRegisteredRowDeleteHooks(this.rowDeleteHooks.length);\n };\n\n /**\n * Creates the iframe object\n * @internal\n */\n initIFrame = () => {\n if (!document.getElementById(this.iframeId)) {\n const iframe = document.createElement(\"iframe\");\n const identifier = this.settings?.importIdentifier ?? this.schemaName;\n iframe.title = identifier\n ? `Dromo Importer: ${identifier}`\n : \"Dromo Importer\";\n iframe.src = window.DROMO_WIDGET_OVERRIDE || IFRAME_URL;\n iframe.id = this.iframeId;\n iframe.style.height = \"100%\";\n iframe.style.width = \"100%\";\n iframe.style.border = \"0\";\n // @ts-ignore\n iframe.crossorigin = \"anonymous\";\n this.iframe = iframe;\n }\n };\n\n /**\n * Uses Penpal to create a connection with the iframe that was created\n * @internal\n */\n createConnection = () => {\n // eslint-disable-next-line @typescript-eslint/no-this-alias\n const self = this;\n const iframe = this.iframe;\n\n if (!iframe) {\n console.error(\"shim cannot connect to Dromo.\");\n return;\n }\n this.connection = connectToChild<IConnectionMethods>({\n iframe,\n methods: {\n /**\n * Called for each column/field. Sends all data and expects all the\n * relevant column hooks to be evaluated.\n *\n * @param fieldName the fieldname key for the column\n * @param data the full column of data for the particular key\n */\n async handleColumnHooks(\n fieldName: string,\n data: IColumnHookInput[]\n ): Promise<IColumnHookOutput[]> {\n // Get all the hooks for this particular field\n const hooks = self.columnHooks.filter(\n (h) => h.fieldName === fieldName\n );\n // key is the index in the column (row). Value stores newValue and info.\n // This is the final object that is passed to the app to apply to the\n // global data state.\n const changes = new Map<\n number,\n { newValue?: string; info?: ITableMessage[] }\n >();\n // Each hook call updates this tmpData object with the latest values.\n // This allows us to run hooks sequentially with each subsequent call\n // having the most up to date data\n const tmpData: IColumnHookInput[] = data;\n\n // For each registered hook, call the developer defined callback\n await hooks.reduce(async (previousHookPromise, currentHook) => {\n await previousHookPromise.then(async () => {\n try {\n const hookResponse = await currentHook.callback(tmpData);\n hookResponse.forEach((hookOutput: IColumnHookOutput) => {\n // If the user has updated the value or info for a particular\n // index update the changes map, and the tmpData\n if (\n hookOutput.value !== undefined ||\n hookOutput.info !== undefined\n ) {\n const change: {\n value?: string;\n info?: ITableMessage[];\n } = {};\n if (hookOutput.value !== undefined) {\n change.value = hookOutput.value;\n tmpData[hookOutput.index] = hookOutput.value;\n }\n if (hookOutput.info !== undefined)\n change.info = hookOutput.info;\n changes.set(hookOutput.index, change);\n }\n });\n } catch (err) {\n console.error(\n \"[Dromo-External-Error] There was an error running your col hook.\",\n err\n );\n }\n });\n }, Promise.resolve());\n\n // Change the map into IColumnHookOuput for the application to process\n const columnHookOutput: IColumnHookOutput[] = [];\n changes.forEach((change, index) =>\n columnHookOutput.push({ ...change, index })\n );\n return columnHookOutput;\n },\n\n /**\n * Called singularly for each row. Goes through all row hooks and\n * evaluates them.\n *\n * @param data an array of row data objects\n */\n async handleRowHooks(\n data: IRowHookInput[],\n mode: \"init\" | \"update\"\n ): Promise<IRowHookOutputInternal[]> {\n // Changes is the final changes that will be sent to the frontend\n const changes = new Map<number, IRowHookOutput[\"row\"]>();\n const hookData = new Map(\n data.map((inputRow) => [inputRow.index, inputRow])\n );\n\n // a helper function called for each row that updates the final changes\n // as well as the row data which will be passed to subsequent hooks\n const updateForRow = (\n rowIndex: number,\n rowOutput: IRowHookOutput[\"row\"]\n ) => {\n for (const [fieldName, fieldOutput] of Object.entries(\n rowOutput ?? {}\n )) {\n if (\n fieldOutput.value === undefined &&\n fieldOutput.info === undefined &&\n fieldOutput.selectOptions === undefined\n )\n return;\n\n const rowData = hookData.get(rowIndex)!;\n const rowChanges = changes.get(rowIndex) || {};\n\n const change: {\n value?: string;\n info?: ITableMessage[];\n selectOptions?: ISelectField[\"selectOptions\"];\n } = rowChanges[fieldName] ?? {};\n\n // if there are any changes, we want to both update the changes\n // object sent to the app, and the rowInput sent to subsequent\n // row hooks running on this row so they see the changes from\n // prior row hooks\n if (fieldOutput.value !== undefined) {\n change.value = fieldOutput.value;\n rowData.row[fieldName].value = fieldOutput.value;\n }\n\n if (fieldOutput.info !== undefined) {\n change.info = fieldOutput.info;\n rowData.row[fieldName].info = fieldOutput.info;\n }\n\n if (fieldOutput.selectOptions !== undefined) {\n change.selectOptions = fieldOutput.selectOptions;\n rowData.row[fieldName].selectOptions =\n fieldOutput.selectOptions;\n }\n\n rowChanges[fieldName] = change;\n changes.set(rowIndex, rowChanges);\n }\n };\n\n // First we run the bulk row hooks with all of the input data\n for (const bulkRowHook of self.bulkRowHooks) {\n try {\n const hookOutput = await bulkRowHook(data, mode);\n for (const rowOutput of hookOutput) {\n updateForRow(rowOutput.index, rowOutput.row);\n }\n } catch (err) {\n console.error(\n \"[Dromo-External-Error] There was an error running your bulk row hook.\",\n err\n );\n }\n }\n\n // We want to loop through each row independently. Because each\n // row's execution is independent, we can do row by row first vs\n // hook by hook\n await Promise.all(\n data.map(async (rowInput: IRowHookInput) => {\n for (const rowHook of self.rowHooks) {\n try {\n const hookOutput = await rowHook.callback(rowInput, mode);\n updateForRow(rowInput.index, hookOutput.row);\n } catch (err) {\n console.error(\n \"[Dromo-External-Error] There was an error running your row hook.\",\n err\n );\n }\n }\n })\n );\n\n const finalChanges: IRowHookOutputInternal[] = [];\n\n changes.forEach((rowChanges, rowIndex) => {\n finalChanges.push({ index: rowIndex, row: rowChanges });\n });\n\n return finalChanges;\n },\n handleStepHook(\n step: EStepHook,\n data: IUploadStepData | IReviewStepData\n ) {\n self.stepHooks.forEach((hook) => {\n if (step !== hook.type) return;\n try {\n hook.callback(self, data);\n } catch (err) {\n console.error(\n \"[Dromo-External-Error] There was an error in your step callback.\",\n err\n );\n }\n });\n },\n /**\n * Called singularly for each row. Goes through all delete hooks and\n * evaluates them.\n *\n * @param deletedRows - an array of rows deleted from the data\n */\n handleRowDeleteHooks(deletedRows: IRowHookInput[]): Promise<void[]> {\n // We want to loop through each row independently. Because each\n // row's execution is independent, we can do row by row first vs\n // hook by hook\n return Promise.all(\n deletedRows.map(async (rowData: IRowHookInput) => {\n await self.rowDeleteHooks.forEach(async (currentHook) => {\n try {\n await currentHook(rowData);\n } catch (err) {\n console.error(\n \"[Dromo-External-Error] There was an error running your row delete hook.\",\n err\n );\n }\n });\n })\n );\n },\n async handleBeforeFinishCallback(\n data: Record<string, any>[],\n metadata: IResultMetadata\n ): Promise<IBeforeFinishOutput> {\n if (self.beforeFinishCallback) {\n try {\n return await self.beforeFinishCallback(data, metadata, self);\n } catch (err) {\n console.error(\n \"[Dromo-External-Error] There was an error in your beforeFinish callback.\",\n err\n );\n }\n }\n },\n /**\n * Called after the user has completed the Dromo flow, send the\n * cleaned data to the developer\n *\n * TODO: data cannot be of type any. We need to standardize our return\n * type to be Map<string, any>[]\n * @param data cleaned data after the flow is complete\n */\n async handleResults(\n data: any,\n metadata: IResultMetadata\n ): Promise<void> {\n if (self.resultsCallback) {\n try {\n await self.resultsCallback(data, metadata);\n } catch (err) {\n console.error(\n \"[Dromo-External-Error] There was an error in your onResult callback.\",\n err\n );\n }\n }\n self.close();\n },\n /**\n * Called when the modal has been closed by the finishing of the flow\n */\n handleCloseModal() {\n self.close();\n },\n /**\n * Called when the modal has been closed due to the user canceling the\n * flow\n */\n handleCancel() {\n if (self.cancelCallback) {\n try {\n self.cancelCallback();\n } catch (err) {\n console.error(\n \"[Dromo-External-Error] There was an error in your cancel callback.\",\n err\n );\n }\n }\n self.close();\n },\n },\n });\n };\n\n /**\n * Mounts the iframe in the parent HTML page\n * NOTE: Should be called AFTER the PenPal connection has been created\n * @internal\n */\n mountIFrame = () => {\n if (!document.getElementById(this.iframeId!)) {\n const wrapper = document.createElement(\"div\");\n wrapper.id = this.wrapperId;\n wrapper.style.zIndex = Number.MAX_SAFE_INTEGER.toString();\n wrapper.style.visibility = \"hidden\";\n wrapper.style.width = \"0px\";\n wrapper.style.height = \"0px\";\n wrapper.style.position = \"fixed\";\n wrapper.style.top = \"0px\";\n wrapper.style.left = \"0px\";\n wrapper.style.right = \"0px\";\n wrapper.style.bottom = \"0px\";\n wrapper.appendChild(this.iframe as HTMLIFrameElement);\n document.body.appendChild(wrapper);\n this.wrapper = wrapper;\n }\n };\n\n showIFrame = () => {\n if (this.wrapper) {\n this.wrapper.style.visibility = \"visible\";\n this.wrapper.style.width = \"100%\";\n this.wrapper.style.height = \"100%\";\n document.body.style.overflow = \"hidden\";\n }\n };\n\n /**\n * Function called by the developer to set a callback\n *\n * @param fieldName the key of the column for which we want to trigger the\n * callback\n * @param callback developer defined callback that is callback that is added\n * to a list of column hooks\n */\n registerColumnHook = (\n fieldName: IColumnHook[\"fieldName\"],\n callback: IColumnHook[\"callback\"]\n ) => {\n this.columnHooks.push({\n fieldName: fieldName,\n callback: callback,\n });\n\n // This is kept for the JS version - a user can register after the connection\n // has been made and the modal has been opened. It's bad form, but possible\n if (this.connection) {\n this.connection.promise.then((child) => {\n child.setNumRegisteredColHooks(this.columnHooks.length);\n });\n }\n };\n\n /** @internal */\n totalNumRowHooks = () => {\n return this.rowHooks.length + this.bulkRowHooks.length;\n };\n\n /**\n * Function called by the developer to set a callback\n *\n * @param callback developer defined callback that is added to a list of row\n * hooks\n */\n registerBulkRowHook = (bulkRowHook: IBulkRowHook) => {\n this.bulkRowHooks.push(bulkRowHook);\n\n // This is kept for the JS version - a user can register after the connection\n // has been made and the modal has been opened. It's bad form, but possible\n if (this.connection) {\n this.connection.promise.then((child) => {\n child.setNumRegisteredRowHooks(this.totalNumRowHooks());\n });\n }\n };\n\n /**\n * Function called by the developer to set a callback\n *\n * @param callback developer defined callback that is added to a list of row\n * hooks\n */\n registerRowHook = (callback: IRowHook) => {\n this.rowHooks.push({\n callback: callback,\n });\n\n // This is kept for the JS version - a user can register after the connection\n // has been made and the modal has been opened. It's bad form, but possible\n if (this.connection) {\n this.connection.promise.then((child) => {\n child.setNumRegisteredRowHooks(this.totalNumRowHooks());\n });\n }\n };\n\n /**\n * Function called by the developer to set a callback\n *\n * @param callback developer defined callback that is called per step of the\n * import flow\n */\n registerStepHook = (\n type: IStepHook[\"type\"],\n callback: IStepHook[\"callback\"]\n ) => {\n this.stepHooks.push({ type, callback });\n };\n\n /**\n * Function called by the developer to set a row delete callback\n *\n * @param callback developer defined callback that is called per step of the\n * import flow\n */\n registerRowDeleteHook = (callback: IRowDeleteHook) => {\n this.rowDeleteHooks.push(callback);\n // This is kept for the JS version - a user can register after the connection\n // has been made and the modal has been opened. It's bad form, but possible\n if (this.connection) {\n this.connection.promise.then((child) => {\n child.setNumRegisteredRowDeleteHooks(this.rowDeleteHooks.length);\n });\n }\n };\n\n /**\n * Function called by the developer to set the beforeFinish callback\n *\n * @param callback developer defined callback that is called when the user submits\n */\n beforeFinish = (callback: IBeforeFinishCallback): void => {\n this.beforeFinishCallback = callback;\n };\n\n /**\n * Convenience function for setting all hooks at once.\n *\n * @param hooks object containing all hooks to register\n */\n registerAllHooks = (hooks: IAllHooks): void => {\n if (hooks.columnHooks) {\n for (const { fieldName, callback } of hooks.columnHooks) {\n this.registerColumnHook(fieldName, callback);\n }\n }\n\n if (hooks.rowHooks) {\n for (const rowHook of hooks.rowHooks) {\n this.registerRowHook(rowHook);\n }\n }\n\n if (hooks.bulkRowHooks) {\n for (const bulkRowHook of hooks.bulkRowHooks) {\n this.registerBulkRowHook(bulkRowHook);\n }\n }\n\n if (hooks.rowDeleteHooks) {\n for (const rowDeleteHook of hooks.rowDeleteHooks) {\n this.registerRowDeleteHook(rowDeleteHook);\n }\n }\n\n if (hooks.stepHooks) {\n for (const { type, callback } of hooks.stepHooks) {\n this.registerStepHook(type, callback);\n }\n }\n\n if (hooks.beforeFinishCallback) {\n this.beforeFinish(hooks.beforeFinishCallback);\n }\n };\n\n /**\n * Function called by the developer to set a callback\n *\n * @param callback developer defined callback that is called when the import\n * flow completes\n */\n onResults = (\n callback: (\n data: Record<string, string | number | boolean | null>[],\n metadata: IResultMetadata\n ) => Promise<void> | void\n ) => {\n this.resultsCallback = callback;\n };\n\n /**\n * Function called by the developer to set a callback\n *\n * @param callback developer defined callback that is called when the user\n * cancels the import\n */\n onCancel = (callback: () => void) => {\n this.cancelCallback = callback;\n };\n\n /**\n * Function called by the developer to set or reset the user information\n */\n setUser = async (user: IUser) => {\n this.user = user;\n if (this.connection) {\n const child = await this.connection!.promise;\n await child.setUser(this.user);\n }\n };\n\n /**\n * Function called by the developer to add a field midway through the import\n * process\n */\n addField = async (field: IDeveloperField, position?: IPositionSpec) => {\n if (this.connection) {\n const child = await this.connection!.promise;\n await child.addField(makeFieldSerializable(field), position);\n } else {\n console.error(\"[Dromo-Error] Invalid connection to Dromo Uploader.\");\n }\n };\n\n /**\n * Function called by the developer to remove a field. The data won't appear\n * in the user interface nor in the result data.\n */\n removeField = async (fieldKey: string) => {\n if (this.connection) {\n const child = await this.connection!.promise;\n await child.removeField(fieldKey);\n } else {\n console.error(\"[Dromo-Error] Invalid connection to Dromo Uploader.\");\n }\n };\n\n /**\n * Function called by the developer to add new table messages throughout the\n * import process\n */\n updateInfoMessages = async (messages: IMessagesForCell[]) => {\n if (this.connection) {\n const child = await this.connection!.promise;\n await child.updateInfoMessages(messages);\n } else {\n console.error(\"[Dromo-Error] Invalid connection to Dromo Uploader.\");\n }\n };\n\n /**\n * Function called by the developer to change the matchingStep.headerRowOverride\n * setting from a step hook\n */\n setHeaderRowOverride = async (headerRowOverride: number | null) => {\n this.headerRowOverride = headerRowOverride;\n if (this.connection) {\n const child = await this.connection!.promise;\n await child.setHeaderRowOverride(headerRowOverride);\n }\n };\n\n /**\n * Function called by developer called to open the iframe\n */\n open = async () => {\n if (!this.wrapper) {\n this.initIFrame();\n this.createConnection();\n this.mountIFrame();\n }\n\n await this.initChild();\n this.showIFrame();\n };\n\n /**\n * Function called by the developer to add rows during the import\n */\n addRows = async (rows: IRowToAdd[]) => {\n if (this.connection) {\n const child = await this.connection!.promise;\n await child.addRows(rows);\n } else {\n console.error(\"[Dromo-Error] Invalid connection to Dromo Uploader.\");\n }\n };\n\n /**\n * Function called by the developer to remove rows\n */\n removeRows = async (rowIds: string[]) => {\n if (this.connection) {\n const child = await this.connection!.promise;\n await child.removeRows(rowIds);\n } else {\n console.error(\"[Dromo-Error] Invalid connection to Dromo Uploader.\");\n }\n };\n\n /**\n * Function called by developer to close the iframe\n */\n close = () => {\n if (this.wrapper) {\n this.wrapper.style.visibility = \"hidden\";\n this.wrapper.style.width = \"0px\";\n this.wrapper.style.height = \"0px\";\n document.body.style.overflow = \"inherit\";\n }\n };\n\n /**\n * Function called by the developer to set developmentMode\n */\n setDevelopmentMode = async (developmentMode: boolean) => {\n this.developmentMode = developmentMode;\n if (this.connection) {\n const child = await this.connection!.promise;\n await child.setDevelopmentMode(this.developmentMode);\n }\n };\n\n /**\n * @internal\n */\n static rehydrateHeadless = async ({\n licenseKey,\n headlessImportId,\n fields,\n settings,\n hooks,\n rehydrateState,\n }: {\n licenseKey: string;\n headlessImportId: string;\n fields: IDeveloperField[];\n settings: IDeveloperSettings;\n hooks: IAllHooks;\n rehydrateState: any;\n }): Promise<void> => {\n const headlessUser: IUser = { id: \"headless-review\" };\n const dromo = new DromoUploader(licenseKey, fields, settings, headlessUser);\n dromo.registerAllHooks(hooks);\n await dromo.rehydrate(rehydrateState, headlessImportId);\n dromo.open();\n };\n\n /**\n * @internal\n */\n rehydrate = async (rehydrateState: any, headlessImportId: string) => {\n if (!this.wrapper) {\n this.initIFrame();\n this.createConnection();\n this.mountIFrame();\n }\n await this.initChild();\n const child = await this.connection!.promise;\n await child.rehydrate(rehydrateState, headlessImportId);\n this.showIFrame();\n };\n}\n\nexport {\n ITableMessage,\n IMessagesForCell,\n IColumnHook,\n IColumnHookInput,\n IColumnHookOutput,\n IRowHook,\n IRowHookInput,\n IRowHookOutput,\n IDeveloperField,\n IDeveloperSettings,\n IDeveloperStyleOverrides,\n IUser,\n IValidatorField,\n IRowHookOutputInternal,\n IResultMetadata,\n IReviewStepData,\n IStepHook,\n IUploadStepData,\n IRowDeleteHook,\n IBulkRowHook,\n IBeforeFinishCallback,\n IBeforeFinishOutput,\n IPositionSpec,\n IConnectionMethods,\n ISelectField,\n IImporterOptions,\n IAllHooks,\n};\n"],"names":["__assign","Object","assign","t","s","i","n","arguments","length","p","prototype","hasOwnProperty","call","apply","this","__awaiter","thisArg","_arguments","P","generator","Promise","resolve","reject","fulfilled","value","step","next","e","rejected","result","done","then","__generator","body","f","y","g","_","label","sent","trys","ops","verb","throw","return","Symbol","iterator","v","op","TypeError","pop","push","EventTypes","MessageType","Resolution","ErrorCode","NativeErrorName","NativeEventType","IFRAME_URL","DEFAULT_PORT_BY_PROTOCOL","http:","https:","URL_REGEX","opaqueOriginSchemes","serializeError","name","message","stack","id","callSender","info","methodNames","destroyConnection","log","localName","local","remote","originForSending","originForReceiving","destroyed","createMethodProxy","methodName","args","iframeRemoved","closed","error","Error","code","ConnectionDestroyed","generateId","handleMessageEvent","event","source","data","penpal","Reply","origin","replyMessage","removeEventListener","Message","returnValue","returnValueIsError","obj","deserializedError","keys","forEach","key","deserializeError","resolution","Fulfilled","addEventListener","callMessage","Call","postMessage","reduce","api","methods","childOrigin","destructor","destroy","onDestroy","destroyCallReceiver","receiverMethodNames","window","createPromiseHandler","Rejected","err","DataCloneError","errorReplyMessage","connectCallReceiver","receiverMethodName","destroyCallSender","connectCallSender","options","iframe","timeout","debug","console","createLogger","callbacks","[object Object]","callback","createDestructor","src","srcdoc","NoIframeSrc","validateIframeHasSrcOrSrcDoc","find","scheme","startsWith","location","document","regexResult","exec","protocol","hostname","port","getOriginFromSrc","handleSynMessage","synAckMessage","SynAck","handleSynMessageFactory","handleAckMessage","handleAckMessageFactory","promise","stopConnectionTimeout","timeoutId","undefined","setTimeout","ConnectionTimeout","clearTimeout","startConnectionTimeout","handleMessage","contentWindow","Syn","Ack","checkIframeInDocIntervalId","setInterval","isConnected","clearInterval","monitorIframeRemoval","makeFieldSerializable","field","newField","validators","map","validator","validate","regex","RegExp","regexOptions","ignoreCase","flags","includes","dotAll","multiline","unicode","licenseKey","fieldsOrSchemaName","settings","user","connection","child","_c","loadedFromUnVersionedScript","Array","from","getElementsByTagName","some","fields","version","browserExcelParsing","init","appHost","schemaName","initFromSavedSchema","developmentMode","headerRowOverride","setNumRegisteredRowHooks","totalNumRowHooks","setNumRegisteredColHooks","columnHooks","setNumRegisteredRowDeleteHooks","rowDeleteHooks","getElementById","_this","iframeId","createElement","identifier","importIdentifier","title","DROMO_WIDGET_OVERRIDE","style","height","width","border","crossorigin","self","connectToChild","handleColumnHooks","fieldName","hooks","filter","h","changes","Map","tmpData","previousHookPromise","currentHook","_a","hookOutput","change","index","set","err_1","columnHookOutput","handleRowHooks","mode","hookData","inputRow","updateForRow","rowIndex","rowOutput","_b","entries","_i","fieldOutput","selectOptions","rowData","get","rowChanges","row","bulkRowHooks","bulkRowHook","hookOutput_1","err_2","all","rowInput","rowHooks","rowHook","err_3","finalChanges","handleStepHook","stepHooks","hook","type","handleRowDeleteHooks","deletedRows","err_4","handleBeforeFinishCallback","metadata","beforeFinishCallback","err_5","handleResults","resultsCallback","err_6","close","handleCloseModal","handleCancel","cancelCallback","wrapper","wrapperId","zIndex","Number","MAX_SAFE_INTEGER","toString","visibility","position","top","left","right","bottom","appendChild","overflow","registerColumnHook","_d","registerRowHook","_f","_e","registerBulkRowHook","_h","_g","rowDeleteHook","registerRowDeleteHook","_k","_j","_l","registerStepHook","beforeFinish","setUser","addField","fieldKey","removeField","messages","updateInfoMessages","setHeaderRowOverride","initIFrame","createConnection","mountIFrame","initChild","showIFrame","rows","addRows","rowIds","removeRows","setDevelopmentMode","rehydrateState","headlessImportId","rehydrate","Math","random","substring","DromoUploader","dromo","registerAllHooks","open"],"mappings":";;;;;;;;;;;;;;oFA6BO,IAAIA,EAAW,WAQlB,OAPAA,EAAWC,OAAOC,QAAU,SAAkBC,GAC1C,IAAK,IAAIC,EAAGC,EAAI,EAAGC,EAAIC,UAAUC,OAAQH,EAAIC,EAAGD,IAE5C,IAAK,IAAII,KADTL,EAAIG,UAAUF,GACOJ,OAAOS,UAAUC,eAAeC,KAAKR,EAAGK,KAAIN,EAAEM,GAAKL,EAAEK,IAE9E,OAAON,IAEKU,MAAMC,KAAMP,YA8BzB,SAASQ,EAAUC,EAASC,EAAYC,EAAGC,GAE9C,OAAO,IAAKD,IAAMA,EAAIE,WAAU,SAAUC,EAASC,GAC/C,SAASC,EAAUC,GAAS,IAAMC,EAAKN,EAAUO,KAAKF,IAAW,MAAOG,GAAKL,EAAOK,IACpF,SAASC,EAASJ,GAAS,IAAMC,EAAKN,EAAiB,MAAEK,IAAW,MAAOG,GAAKL,EAAOK,IACvF,SAASF,EAAKI,GAJlB,IAAeL,EAIaK,EAAOC,KAAOT,EAAQQ,EAAOL,QAJ1CA,EAIyDK,EAAOL,MAJhDA,aAAiBN,EAAIM,EAAQ,IAAIN,GAAE,SAAUG,GAAWA,EAAQG,OAITO,KAAKR,EAAWK,GAClGH,GAAMN,EAAYA,EAAUN,MAAMG,EAASC,GAAc,KAAKS,WAI/D,SAASM,EAAYhB,EAASiB,GACjC,IAAsGC,EAAGC,EAAGhC,EAAGiC,EAA3GC,EAAI,CAAEC,MAAO,EAAGC,KAAM,WAAa,GAAW,EAAPpC,EAAE,GAAQ,MAAMA,EAAE,GAAI,OAAOA,EAAE,IAAOqC,KAAM,GAAIC,IAAK,IAChG,OAAOL,EAAI,CAAEV,KAAMgB,EAAK,GAAIC,MAASD,EAAK,GAAIE,OAAUF,EAAK,IAAwB,mBAAXG,SAA0BT,EAAES,OAAOC,UAAY,WAAa,OAAOhC,OAAUsB,EACvJ,SAASM,EAAKpC,GAAK,OAAO,SAAUyC,GAAK,OACzC,SAAcC,GACV,GAAId,EAAG,MAAM,IAAIe,UAAU,mCAC3B,KAAOZ,OACH,GAAIH,EAAI,EAAGC,IAAMhC,EAAY,EAAR6C,EAAG,GAASb,EAAU,OAAIa,EAAG,GAAKb,EAAS,SAAOhC,EAAIgC,EAAU,SAAMhC,EAAES,KAAKuB,GAAI,GAAKA,EAAET,SAAWvB,EAAIA,EAAES,KAAKuB,EAAGa,EAAG,KAAKlB,KAAM,OAAO3B,EAE3J,OADIgC,EAAI,EAAGhC,IAAG6C,EAAK,CAAS,EAARA,EAAG,GAAQ7C,EAAEqB,QACzBwB,EAAG,IACP,KAAK,EAAG,KAAK,EAAG7C,EAAI6C,EAAI,MACxB,KAAK,EAAc,OAAXX,EAAEC,QAAgB,CAAEd,MAAOwB,EAAG,GAAIlB,MAAM,GAChD,KAAK,EAAGO,EAAEC,QAASH,EAAIa,EAAG,GAAIA,EAAK,CAAC,GAAI,SACxC,KAAK,EAAGA,EAAKX,EAAEI,IAAIS,MAAOb,EAAEG,KAAKU,MAAO,SACxC,QACI,KAAM/C,EAAIkC,EAAEG,MAAMrC,EAAIA,EAAEK,OAAS,GAAKL,EAAEA,EAAEK,OAAS,KAAkB,IAAVwC,EAAG,IAAsB,IAAVA,EAAG,IAAW,CAAEX,EAAI,EAAG,SACjG,GAAc,IAAVW,EAAG,MAAc7C,GAAM6C,EAAG,GAAK7C,EAAE,IAAM6C,EAAG,GAAK7C,EAAE,IAAM,CAAEkC,EAAEC,MAAQU,EAAG,GAAI,MAC9E,GAAc,IAAVA,EAAG,IAAYX,EAAEC,MAAQnC,EAAE,GAAI,CAAEkC,EAAEC,MAAQnC,EAAE,GAAIA,EAAI6C,EAAI,MAC7D,GAAI7C,GAAKkC,EAAEC,MAAQnC,EAAE,GAAI,CAAEkC,EAAEC,MAAQnC,EAAE,GAAIkC,EAAEI,IAAIU,KAAKH,GAAK,MACvD7C,EAAE,IAAIkC,EAAEI,IAAIS,MAChBb,EAAEG,KAAKU,MAAO,SAEtBF,EAAKf,EAAKrB,KAAKI,EAASqB,GAC1B,MAAOV,GAAKqB,EAAK,CAAC,EAAGrB,GAAIQ,EAAI,UAAeD,EAAI/B,EAAI,EACtD,GAAY,EAAR6C,EAAG,GAAQ,MAAMA,EAAG,GAAI,MAAO,CAAExB,MAAOwB,EAAG,GAAKA,EAAG,QAAK,EAAQlB,MAAM,GArB9BL,CAAK,CAACnB,EAAGyC,MC/DtD,IAEKK,ECnBDC,EAQAC,EAKAC,EAOAC,EAIAC,EDPEC,EAVY,CACrBA,WAAY,4BAS+BA,YAE/C,SAAYN,GACVA,4BADF,CAAYA,IAAAA,OClBZ,SAAWC,GACPA,EAAkB,KAAI,OACtBA,EAAmB,MAAI,QACvBA,EAAiB,IAAI,MACrBA,EAAoB,OAAI,SACxBA,EAAiB,IAAI,MALzB,CAMGA,IAAgBA,EAAc,KAEjC,SAAWC,GACPA,EAAsB,UAAI,YAC1BA,EAAqB,SAAI,WAF7B,CAGGA,IAAeA,EAAa,KAE/B,SAAWC,GACPA,EAA+B,oBAAI,sBACnCA,EAA6B,kBAAI,oBACjCA,EAAuB,YAAI,cAC3BA,EAAuB,YAAI,cAJ/B,CAKGA,IAAcA,EAAY,KAE7B,SAAWC,GACPA,EAAgC,eAAI,iBADxC,CAEGA,IAAoBA,EAAkB,KAEzC,SAAWC,GACPA,EAAyB,QAAI,UADjC,CAEGA,IAAoBA,EAAkB,KC3BzC,MAAME,EAA2B,CAC7BC,QAAS,KACTC,SAAU,OAERC,EAAY,oCACZC,EAAsB,CAAC,QAAS,SCF/B,MAAMC,EAAiB,EAAGC,KAAAA,EAAMC,QAAAA,EAASC,MAAAA,OAC5CF,KAAAA,EACAC,QAAAA,EACAC,MAAAA,ICNJ,IAAIC,EAAK,QAIM,MAAQA,ICUR,CAACC,EAAYC,EAAMC,EAAaC,EAAmBC,KAC9D,MAAMC,UAAEA,EAASC,MAAEA,EAAKC,OAAEA,EAAMC,iBAAEA,EAAgBC,mBAAEA,GAAuBR,EAC3E,IAAIS,GAAY,EAChBN,EAAI,GAAGC,6BACP,MAAMM,EAAqBC,GAChB,IAAIC,KAWP,IAAIC,EAVJV,EAAI,GAAGC,cAAsBO,YAW7B,IACQL,EAAOQ,SACPD,GAAgB,GAGxB,MAAOxD,GACHwD,GAAgB,EAKpB,GAHIA,GACAX,IAEAO,EAAW,CACX,MAAMM,EAAQ,IAAIC,MAAM,kBAAkBL,wCAE1C,MADAI,EAAME,KAAOhC,EAAUiC,oBACjBH,EAEV,OAAO,IAAIjE,SAAQ,CAACC,EAASC,KACzB,MAAM8C,EAAKqB,IACLC,EAAsBC,IACxB,GAAIA,EAAMC,SAAWhB,GACjBe,EAAME,KAAKC,SAAWzC,EAAY0C,OAClCJ,EAAME,KAAKzB,KAAOA,EAClB,OAEJ,GAAIuB,EAAMK,SAAWlB,EAEjB,YADAL,EAAI,GAAGC,kCAA0CiB,EAAMK,8CAA8ClB,KAGzG,MAAMmB,EAAeN,EAAME,KAC3BpB,EAAI,GAAGC,eAAuBO,aAC9BN,EAAMuB,oBAAoBzC,EAAgB0C,QAAST,GACnD,IAAIU,EAAcH,EAAaG,YAC3BH,EAAaI,qBACbD,EFrDQ,CAACE,IAC7B,MAAMC,EAAoB,IAAIjB,MAG9B,OADArF,OAAOuG,KAAKF,GAAKG,SAAQC,GAAQH,EAAkBG,GAAOJ,EAAII,KACvDH,GEiD2BI,CAAiBP,KAElCH,EAAaW,aAAetD,EAAWuD,UAAYxF,EAAUC,GAAQ8E,IAE1EzB,EAAMmC,iBAAiBrD,EAAgB0C,QAAST,GAChD,MAAMqB,EAAc,CAChBjB,OAAQzC,EAAY2D,KACpB5C,GAAAA,EACAa,WAAAA,EACAC,KAAAA,GAEJN,EAAOqC,YAAYF,EAAalC,OAQ5C,OAJAN,EAAY2C,QAAO,CAACC,EAAKlC,KACrBkC,EAAIlC,GAAcD,EAAkBC,GAC7BkC,IACR9C,GACI,KACHU,GAAY,MC/EL,CAACqC,EAASC,EAAaxC,EAAkByC,EAAY7C,KAChE,MAAM8C,QAAEA,EAAOC,UAAEA,GAAcF,EAC/B,IAAIG,EACAC,EAKJ,MAAMrD,EAAa,GACnB,OAAQsB,IACJ,GAAIA,EAAMK,SAAWqB,EAEjB,YADA5C,EAAI,wDAAwDkB,EAAMK,8CAA8CqB,KAGpH5C,EAAI,oCACJ,MAAMH,EAAO,CACTI,UAAW,SACXC,MAAOgD,OACP/C,OAAQe,EAAMC,OACdf,iBAAkBA,EAClBC,mBAAoBuC,GAIpBI,GACAA,IAEJA,EC1BO,EAACnD,EAAM8C,EAAS3C,KAC3B,MAAMC,UAAEA,EAASC,MAAEA,EAAKC,OAAEA,EAAMC,iBAAEA,EAAgBC,mBAAEA,GAAuBR,EAC3E,IAAIS,GAAY,EAChB,MAAMW,EAAsBC,IACxB,GAAIA,EAAMC,SAAWhB,GAAUe,EAAME,KAAKC,SAAWzC,EAAY2D,KAC7D,OAEJ,GAAIrB,EAAMK,SAAWlB,EAEjB,YADAL,EAAI,GAAGC,kCAA0CiB,EAAMK,8CAA8ClB,KAGzG,MAAMiC,EAAcpB,EAAME,MACpBZ,WAAEA,EAAUC,KAAEA,EAAId,GAAEA,GAAO2C,EACjCtC,EAAI,GAAGC,eAAuBO,YAC9B,MAAM2C,EAAwBhB,GAClBR,IAEJ,GADA3B,EAAI,GAAGC,cAAsBO,aACzBF,EAOA,YADAN,EAAI,GAAGC,qBAA6BO,yCAGxC,MAAMf,EAAU,CACZ4B,OAAQzC,EAAY0C,MACpB3B,GAAAA,EACAwC,WAAAA,EACAR,YAAAA,GAEAQ,IAAetD,EAAWuE,UAC1BzB,aAAuBd,QACvBpB,EAAQkC,YAAcpC,EAAeoC,GACrClC,EAAQmC,oBAAqB,GAEjC,IACIzB,EAAOqC,YAAY/C,EAASW,GAEhC,MAAOiD,GAGH,GAAIA,EAAI7D,OAAST,EAAgBuE,eAAgB,CAC7C,MAAMC,EAAoB,CACtBlC,OAAQzC,EAAY0C,MACpB3B,GAAAA,EACAwC,WAAYtD,EAAWuE,SACvBzB,YAAapC,EAAe8D,GAC5BzB,oBAAoB,GAExBzB,EAAOqC,YAAYe,EAAmBnD,GAE1C,MAAMiD,IAIlB,IAAI1G,SAAQC,GAAWA,EAAQ+F,EAAQnC,GAAYpE,MAAMuG,EAASlC,MAAQnD,KAAK6F,EAAqBtE,EAAWuD,WAAYe,EAAqBtE,EAAWuE,YAG/J,OADAlD,EAAMmC,iBAAiBrD,EAAgB0C,QAAST,GACzC,KACHX,GAAY,EACZJ,EAAMuB,oBAAoBzC,EAAgB0C,QAAST,KDpC7BuC,CAAoB3D,EAAM8C,EAAS3C,GACzD+C,EAAUC,GAGNC,GACAA,EAAoBjB,SAAQyB,WACjB7D,EAAW6D,MAG1BR,EAAsB/B,EAAME,KAAKtB,YACjC,MAAM4D,EAAoBC,EAAkB/D,EAAYC,EAAMoD,EAAqBH,EAAS9C,GAE5F,OADA+C,EAAUW,GACH9D,UEhCCgE,IACZ,IAAIC,OAAEA,EAAMlB,QAAEA,EAAU,GAAEC,YAAEA,EAAWkB,QAAEA,EAAOC,MAAEA,GAAQ,GAAUH,EACpE,MAAM5D,ECdK,CAAC+D,GAIL,IAAItD,KACHsD,GACAC,QAAQhE,IAAI,cAAeS,IDQvBwD,CAAaF,GACnBlB,EEfK,MACX,MAAMqB,EAAY,GAClB,IAAI5D,GAAY,EAChB,MAAO,CACH6D,QAAQvD,GACJN,GAAY,EACZ4D,EAAUlC,SAAQoC,IACdA,EAASxD,OAGjBuD,UAAUC,GACN9D,EAAY8D,IAAaF,EAAUxF,KAAK0F,MFI7BC,IACbtB,UAAEA,EAASD,QAAEA,GAAYD,EAC1BD,IGhBM,CAACiB,IACZ,IAAKA,EAAOS,MAAQT,EAAOU,OAAQ,CAC/B,MAAM3D,EAAQ,IAAIC,MAAM,oDAExB,MADAD,EAAME,KAAOhC,EAAU0F,YACjB5D,IHaN6D,CAA6BZ,GAC7BjB,ENVO,CAAC0B,IACZ,GAAIA,GAAOhF,EAAoBoF,MAAKC,GAAUL,EAAIM,WAAWD,KAIzD,MAAO,OAKX,MAAME,EAAWC,SAASD,SACpBE,EAAc1F,EAAU2F,KAAKV,GACnC,IAAIW,EACAC,EACAC,EAiBJ,OAhBIJ,GAGAE,EAAYF,EAAY,GAAKA,EAAY,GAAKF,EAASI,SACvDC,EAAWH,EAAY,GACvBI,EAAOJ,EAAY,KAInBE,EAAWJ,EAASI,SACpBC,EAAWL,EAASK,SACpBC,EAAON,EAASM,MAKb,GAAGF,MAAaC,IADJC,GAAQA,IAASjG,EAAyB+F,GAAY,IAAIE,IAAS,MMpBpEC,CAAiBvB,EAAOS,MAK1C,MAAMlE,EAAmC,SAAhBwC,EAAyB,IAAMA,EAClDyC,EIrBK,EAACrF,EAAK2C,EAASC,EAAaxC,IAC/Bc,IACJ,GAAIA,EAAMK,SAAWqB,EAEjB,YADA5C,EAAI,wDAAwDkB,EAAMK,8CAA8CqB,KAGpH5C,EAAI,6DACJ,MAAMsF,EAAgB,CAClBjE,OAAQzC,EAAY2G,OACpBzF,YAAatE,OAAOuG,KAAKY,IAE7BzB,EAAMC,OAAOqB,YAAY8C,EAAelF,IJUnBoF,CAAwBxF,EAAK2C,EAASC,EAAaxC,GACtEqF,EAAmBC,EAAwB/C,EAASC,EAAaxC,EAAkByC,EAAY7C,GAgCrG,MAAO,CACH2F,QAhCY,IAAIhJ,SAAQ,CAACC,EAASC,KAClC,MAAM+I,EKvBC,EAAC9B,EAASM,KACrB,IAAIyB,EAQJ,YAPgBC,IAAZhC,IACA+B,EAAY3C,OAAO6C,YAAW,KAC1B,MAAMnF,EAAQ,IAAIC,MAAM,8BAA8BiD,OACtDlD,EAAME,KAAOhC,EAAUkH,kBACvB5B,EAASxD,KACVkD,IAEA,KACHmC,aAAaJ,KLaiBK,CAAuBpC,EAAShB,GACxDqD,EAAiBjF,IACnB,GAAIA,EAAMC,SAAW0C,EAAOuC,eAAkBlF,EAAME,KAGpD,GAAIF,EAAME,KAAKC,SAAWzC,EAAYyH,IAItC,GAAInF,EAAME,KAAKC,SAAWzC,EAAY0H,SAAtC,CACI,MAAM1G,EAAa6F,EAAiBvE,GAChCtB,IACAgG,IACAhJ,EAAQgD,SAPZyF,EAAiBnE,IAYzBgC,OAAOb,iBAAiBrD,EAAgB0C,QAASyE,GACjDnG,EAAI,8BMrCG,EAAC6D,EAAQhB,KACpB,MAAMC,QAAEA,EAAOC,UAAEA,GAAcF,EACzB0D,EAA6BC,aAAY,KACtC3C,EAAO4C,cACRC,cAAcH,GACdzD,OAfyB,KAkBjCC,GAAU,KACN2D,cAAcH,ON6BdI,CAAqB9C,EAAQhB,GAC7BE,GAAWnC,IACPsC,OAAOzB,oBAAoBzC,EAAgB0C,QAASyE,GAC/CvF,KACDA,EAAQ,IAAIC,MAAM,yBACZC,KAAOhC,EAAUiC,qBAE3BlE,EAAO+D,SAKXuD,UAEIrB,OOjBN8D,EAAwB,SAACC,GAC7B,IAAMC,OAAgBD,GAsBtB,OArBIC,EAASC,aACXD,EAASC,WAAaD,EAASC,WAAWC,KAAI,SAACC,GAC7C,OAC0B,gBAAvBA,EAAUC,UACc,kBAAvBD,EAAUC,WACZD,EAAUE,iBAAiBC,cAGtBH,IACHE,MAAOF,EAAUE,MAAMhG,OACvBkG,aAAc,CACZC,WAAYL,EAAUE,MAAMI,MAAMC,SAAS,KAC3CC,OAAQR,EAAUE,MAAMI,MAAMC,SAAS,KACvCE,UAAWT,EAAUE,MAAMI,MAAMC,SAAS,KAC1CG,QAASV,EAAUE,MAAMI,MAAMC,SAAS,QAIvCP,MAGJH,qBA6EP,WACEc,EACAC,EACAC,EACAC,GAJF,WAjCA1L,iBAA6B,GAE7BA,kBAA+B,GAE/BA,cAAqC,GAErCA,eAAyB,GAEzBA,oBAAmC,GAkDnCA,eAAY,gHACV,OAAKA,KAAK2L,cAKU3L,KAAK2L,WAAWrC,UAJlC3B,QAAQpD,MAAM,8DAIVqH,EAAQC,SAIRC,EAA8BC,MAAMC,KACxCvD,SAASwD,qBAAqB,WAC9BC,MACA,SAAC5M,GACC,MAAU,8DAAVA,EAAE2I,KAEA,gFADF3I,EAAE2I,OAIFjI,KAAKmM,QAAUnM,KAAKyL,UAAYzL,KAAK0L,MACjCD,OAAgBzL,KAAKyL,UACtBK,IACHL,EAASW,kBAAUX,EAASW,uBAAW,MAEzCX,EAASY,8BAAsBZ,EAASY,uCAElCT,EAAMU,KACVtM,KAAKuL,WACLvL,KAAKmM,OACLV,EACAzL,KAAK0L,KACL1L,KAAKuM,+BALPV,6BAOS7L,KAAKwM,cACRZ,EAAMa,oBACVzM,KAAKuL,WACLvL,KAAKwM,WACLxM,KAAKuM,QACL,CACEb,KAAM1L,KAAK0L,KACXgB,gBAAiB1M,KAAK0M,gBACtBC,kBAAmB3M,KAAK2M,yCAP5Bd,sBAWAlE,QAAQpD,MAAM,gDAGhB,SAAMqH,EAAMgB,yBAAyB5M,KAAK6M,4BAC1C,OADAhB,YACMD,EAAMkB,yBAAyB9M,KAAK+M,YAAYrN,gBACtD,OADAmM,YACMD,EAAMoB,+BAA+BhN,KAAKiN,eAAevN,uBAA/DmM,qBAOF7L,gBAAa,mBACX,IAAKyI,SAASyE,eAAeC,EAAKC,UAAW,CAC3C,IAAM5F,EAASiB,SAAS4E,cAAc,UAChCC,sBAAaH,EAAK1B,+BAAU8B,gCAAoBJ,EAAKX,WAC3DhF,EAAOgG,MAAQF,EACX,mBAAmBA,EACnB,iBACJ9F,EAAOS,IAAMpB,OAAO4G,uBAAyB7K,EAC7C4E,EAAOlE,GAAK6J,EAAKC,SACjB5F,EAAOkG,MAAMC,OAAS,OACtBnG,EAAOkG,MAAME,MAAQ,OACrBpG,EAAOkG,MAAMG,OAAS,IAEtBrG,EAAOsG,YAAc,YACrBX,EAAK3F,OAASA,IAQlBxH,sBAAmB,WAEjB,IAAM+N,EAAOZ,EACP3F,EAAS2F,EAAK3F,OAEfA,EAIL2F,EAAKxB,WAAaqC,EAAmC,CACnDxG,SACAlB,QAAS,CAQD2H,kBAAN,SACEC,EACAnJ,gHAmBA,OAhBMoJ,EAAQJ,EAAKhB,YAAYqB,QAC7B,SAACC,GAAM,OAAAA,EAAEH,YAAcA,KAKnBI,EAAU,IAAIC,IAOdC,EAA8BzJ,KAG9BoJ,EAAM/H,QAAO,SAAOqI,EAAqBC,qGAC7C,SAAMD,EAAoBxN,MAAK,wGAEN,gCAAMyN,EAAY3G,SAASyG,kBAA3BG,SACRhJ,SAAQ,SAACiJ,GAGpB,QACuBnF,IAArBmF,EAAWlO,YACS+I,IAApBmF,EAAWpL,KACX,CACA,IAAMqL,EAGF,QACqBpF,IAArBmF,EAAWlO,QACbmO,EAAOnO,MAAQkO,EAAWlO,MAC1B8N,EAAQI,EAAWE,OAASF,EAAWlO,YAEjB+I,IAApBmF,EAAWpL,OACbqL,EAAOrL,KAAOoL,EAAWpL,MAC3B8K,EAAQS,IAAIH,EAAWE,MAAOD,sCAIlClH,QAAQpD,MACN,mEACAyK,mDA1BNL,sBA8BCrO,QAAQC,mBAOX,OAtCAoO,SAkCMM,EAAwC,GAC9CX,EAAQ3I,SAAQ,SAACkJ,EAAQC,GACvB,OAAAG,EAAiB5M,YAAUwM,IAAQC,iBAE9BG,WASHC,eAAN,SACEnK,EACAoK,gIAGMb,EAAU,IAAIC,IACda,EAAW,IAAIb,IACnBxJ,EAAK4F,KAAI,SAAC0E,GAAa,MAAA,CAACA,EAASP,MAAOO,OAKpCC,EAAe,SACnBC,EACAC,GAEA,cAAuCC,EAAAtQ,OAAOuQ,QAC5CF,MAAAA,EAAAA,EAAa,IADwBG,WAAAA,IAEpC,CAFQ,IAAA9D,OAACqC,OAAW0B,OAGrB,QACwBnG,IAAtBmG,EAAYlP,YACS+I,IAArBmG,EAAYpM,WACkBiG,IAA9BmG,EAAYC,cAEZ,OAEF,IAAMC,EAAUV,EAASW,IAAIR,GACvBS,EAAa1B,EAAQyB,IAAIR,IAAa,GAEtCV,YAIFmB,EAAW9B,kBAAc,QAMHzE,IAAtBmG,EAAYlP,QACdmO,EAAOnO,MAAQkP,EAAYlP,MAC3BoP,EAAQG,IAAI/B,GAAWxN,MAAQkP,EAAYlP,YAGpB+I,IAArBmG,EAAYpM,OACdqL,EAAOrL,KAAOoM,EAAYpM,KAC1BsM,EAAQG,IAAI/B,GAAW1K,KAAOoM,EAAYpM,WAGViG,IAA9BmG,EAAYC,gBACdhB,EAAOgB,cAAgBD,EAAYC,cACnCC,EAAQG,IAAI/B,GAAW2B,cACrBD,EAAYC,eAGhBG,EAAW9B,GAAaW,EACxBP,EAAQS,IAAIQ,EAAUS,SAKArB,EAAAZ,EAAKmC,mCAALP,wBAAfQ,wBAEY,gCAAMA,EAAYpL,EAAMoK,WAC3C,IADMP,EAAa/C,aACKuE,IAAAX,WAAAA,IAAbD,OACTF,EAAaE,EAAUV,MAAOU,EAAUS,0CAG1CtI,QAAQpD,MACN,wEACA8L,uBAToBV,iBAiB1B,SAAMrP,QAAQgQ,IACZvL,EAAK4F,KAAI,SAAO4F,4GACQ5B,EAAAZ,EAAKyC,+BAALb,wBAAXc,wBAEY,gCAAMA,EAAQ1I,SAASwI,EAAUpB,kBAA9CP,EAAaa,SACnBH,EAAaiB,EAASzB,MAAOF,EAAWqB,oCAExCtI,QAAQpD,MACN,mEACAmM,uBAPgBf,8CAoB1B,OAtBA9D,SAgBM8E,EAAyC,GAE/CrC,EAAQ3I,SAAQ,SAACqK,EAAYT,GAC3BoB,EAAatO,KAAK,CAAEyM,MAAOS,EAAUU,IAAKD,UAGrCW,WAETC,eAAA,SACEjQ,EACAoE,GAEAgJ,EAAK8C,UAAUlL,SAAQ,SAACmL,GACtB,GAAInQ,IAASmQ,EAAKC,KAClB,IACED,EAAK/I,SAASgG,EAAMhJ,GACpB,MAAOiC,GACPW,QAAQpD,MACN,mEACAyC,QAWRgK,qBAAA,SAAqBC,GAArB,WAIE,OAAO3Q,QAAQgQ,IACbW,EAAYtG,KAAI,SAAOmF,qGACrB,SAAM/B,EAAKd,eAAetH,SAAQ,SAAO+I,gGAErC,gCAAMA,EAAYoB,kBAAlBnB,wCAEAhH,QAAQpD,MACN,0EACA2M,mDANNvC,yBAaAwC,2BAAN,SACEpM,EACAqM,uGAEIrD,EAAKsD,qBAAL,6BAEO,gCAAMtD,EAAKsD,qBAAqBtM,EAAMqM,EAAUrD,WAAvD,SAAOY,mCAEPhH,QAAQpD,MACN,2EACA+M,kCAaFC,cAAN,SACExM,EACAqM,uGAEIrD,EAAKyD,gBAAL,6BAEA,gCAAMzD,EAAKyD,gBAAgBzM,EAAMqM,kBAAjCzC,wCAEAhH,QAAQpD,MACN,uEACAkN,uBAIN1D,EAAK2D,oBAKPC,4BACE5D,EAAK2D,SAMPE,wBACE,GAAI7D,EAAK8D,eACP,IACE9D,EAAK8D,iBACL,MAAO7K,GACPW,QAAQpD,MACN,qEACAyC,GAIN+G,EAAK2D,YA5RT/J,QAAQpD,MAAM,kCAuSlBvE,iBAAc,WACZ,IAAKyI,SAASyE,eAAeC,EAAKC,UAAY,CAC5C,IAAM0E,EAAUrJ,SAAS4E,cAAc,OACvCyE,EAAQxO,GAAK6J,EAAK4E,UAClBD,EAAQpE,MAAMsE,OAASC,OAAOC,iBAAiBC,WAC/CL,EAAQpE,MAAM0E,WAAa,SAC3BN,EAAQpE,MAAME,MAAQ,MACtBkE,EAAQpE,MAAMC,OAAS,MACvBmE,EAAQpE,MAAM2E,SAAW,QACzBP,EAAQpE,MAAM4E,IAAM,MACpBR,EAAQpE,MAAM6E,KAAO,MACrBT,EAAQpE,MAAM8E,MAAQ,MACtBV,EAAQpE,MAAM+E,OAAS,MACvBX,EAAQY,YAAYvF,EAAK3F,QACzBiB,SAAStH,KAAKuR,YAAYZ,GAC1B3E,EAAK2E,QAAUA,IAInB9R,gBAAa,WACPmN,EAAK2E,UACP3E,EAAK2E,QAAQpE,MAAM0E,WAAa,UAChCjF,EAAK2E,QAAQpE,MAAME,MAAQ,OAC3BT,EAAK2E,QAAQpE,MAAMC,OAAS,OAC5BlF,SAAStH,KAAKuM,MAAMiF,SAAW,WAYnC3S,wBAAqB,SACnBkO,EACAnG,GAEAoF,EAAKJ,YAAY1K,KAAK,CACpB6L,UAAWA,EACXnG,SAAUA,IAKRoF,EAAKxB,YACPwB,EAAKxB,WAAWrC,QAAQrI,MAAK,SAAC2K,GAC5BA,EAAMkB,yBAAyBK,EAAKJ,YAAYrN,YAMtDM,sBAAmB,WACjB,OAAOmN,EAAKqD,SAAS9Q,OAASyN,EAAK+C,aAAaxQ,QASlDM,yBAAsB,SAACmQ,GACrBhD,EAAK+C,aAAa7N,KAAK8N,GAInBhD,EAAKxB,YACPwB,EAAKxB,WAAWrC,QAAQrI,MAAK,SAAC2K,GAC5BA,EAAMgB,yBAAyBO,EAAKN,wBAW1C7M,qBAAkB,SAAC+H,GACjBoF,EAAKqD,SAASnO,KAAK,CACjB0F,SAAUA,IAKRoF,EAAKxB,YACPwB,EAAKxB,WAAWrC,QAAQrI,MAAK,SAAC2K,GAC5BA,EAAMgB,yBAAyBO,EAAKN,wBAW1C7M,sBAAmB,SACjB+Q,EACAhJ,GAEAoF,EAAK0D,UAAUxO,KAAK,CAAE0O,OAAMhJ,cAS9B/H,2BAAwB,SAAC+H,GACvBoF,EAAKF,eAAe5K,KAAK0F,GAGrBoF,EAAKxB,YACPwB,EAAKxB,WAAWrC,QAAQrI,MAAK,SAAC2K,GAC5BA,EAAMoB,+BAA+BG,EAAKF,eAAevN,YAU/DM,kBAAe,SAAC+H,GACdoF,EAAKkE,qBAAuBtJ,GAQ9B/H,sBAAmB,SAACmO,GAClB,GAAIA,EAAMpB,YACR,IAAsC,QAAA4B,EAAAR,EAAMpB,YAAN4C,WAAAA,IAAmB,CAA9C,IAAAF,OAAEvB,cAAWnG,aACtBoF,EAAKyF,mBAAmB1E,EAAWnG,GAIvC,GAAIoG,EAAMqC,SACR,IAAsB,QAAAqC,EAAA1E,EAAMqC,SAAN3E,WAAAA,IAAgB,CAAjC,IAAM4E,OACTtD,EAAK2F,gBAAgBrC,GAIzB,GAAItC,EAAM+B,aACR,IAA0B,QAAA6C,EAAA5E,EAAM+B,aAAN8C,WAAAA,IAAoB,CAAzC,IAAM7C,OACThD,EAAK8F,oBAAoB9C,GAI7B,GAAIhC,EAAMlB,eACR,IAA4B,QAAAiG,EAAA/E,EAAMlB,eAANkG,WAAAA,IAAsB,CAA7C,IAAMC,OACTjG,EAAKkG,sBAAsBD,GAI/B,GAAIjF,EAAM0C,UACR,IAAiC,QAAAyC,EAAAnF,EAAM0C,UAAN0C,WAAAA,IAAiB,CAAvC,IAAAC,OAAEzC,SAAMhJ,aACjBoF,EAAKsG,iBAAiB1C,EAAMhJ,GAI5BoG,EAAMkD,sBACRlE,EAAKuG,aAAavF,EAAMkD,uBAU5BrR,eAAY,SACV+H,GAKAoF,EAAKqE,gBAAkBzJ,GASzB/H,cAAW,SAAC+H,GACVoF,EAAK0E,eAAiB9J,GAMxB/H,aAAU,SAAO0L,iGACf1L,KAAK0L,KAAOA,EACR1L,KAAK2L,cACa3L,KAAK2L,WAAYrC,sBACrC,SADcqF,SACFgF,QAAQ3T,KAAK0L,cAAzBiD,4CAQJ3O,cAAW,SAAOwK,EAAwB6H,iGACpCrS,KAAK2L,cACa3L,KAAK2L,WAAYrC,sBACrC,SADcqF,SACFiF,SAASrJ,EAAsBC,GAAQ6H,kBAAnD1D,sBAEAhH,QAAQpD,MAAM,0FAQlBvE,iBAAc,SAAO6T,iGACf7T,KAAK2L,cACa3L,KAAK2L,WAAYrC,sBACrC,SADcqF,SACFmF,YAAYD,kBAAxBlF,sBAEAhH,QAAQpD,MAAM,0FAQlBvE,wBAAqB,SAAO+T,iGACtB/T,KAAK2L,cACa3L,KAAK2L,WAAYrC,sBACrC,SADcqF,SACFqF,mBAAmBD,kBAA/BpF,sBAEAhH,QAAQpD,MAAM,0FAQlBvE,0BAAuB,SAAO2M,iGAC5B3M,KAAK2M,kBAAoBA,EACrB3M,KAAK2L,cACa3L,KAAK2L,WAAYrC,sBACrC,SADcqF,SACFsF,qBAAqBtH,WAAjCgC,4CAOJ3O,UAAO,kGAOL,OANKA,KAAK8R,UACR9R,KAAKkU,aACLlU,KAAKmU,mBACLnU,KAAKoU,kBAGDpU,KAAKqU,2BAAX1F,SACA3O,KAAKsU,yBAMPtU,aAAU,SAAOuU,iGACXvU,KAAK2L,cACa3L,KAAK2L,WAAYrC,sBACrC,SADcqF,SACF6F,QAAQD,kBAApB5F,sBAEAhH,QAAQpD,MAAM,0FAOlBvE,gBAAa,SAAOyU,iGACdzU,KAAK2L,cACa3L,KAAK2L,WAAYrC,sBACrC,SADcqF,SACF+F,WAAWD,kBAAvB9F,sBAEAhH,QAAQpD,MAAM,0FAOlBvE,WAAQ,WACFmN,EAAK2E,UACP3E,EAAK2E,QAAQpE,MAAM0E,WAAa,SAChCjF,EAAK2E,QAAQpE,MAAME,MAAQ,MAC3BT,EAAK2E,QAAQpE,MAAMC,OAAS,MAC5BlF,SAAStH,KAAKuM,MAAMiF,SAAW,YAOnC3S,wBAAqB,SAAO0M,iGAC1B1M,KAAK0M,gBAAkBA,EACnB1M,KAAK2L,cACa3L,KAAK2L,WAAYrC,sBACrC,SADcqF,SACFgG,mBAAmB3U,KAAK0M,yBAApCiC,4CAgCJ3O,eAAY,SAAO4U,EAAqBC,0FAMtC,OALK7U,KAAK8R,UACR9R,KAAKkU,aACLlU,KAAKmU,mBACLnU,KAAKoU,kBAEDpU,KAAKqU,oBACG,OADd1F,YACoB3O,KAAK2L,WAAYrC,gBACrC,SADcqF,SACFmG,UAAUF,EAAgBC,kBAAtClG,SACA3O,KAAKsU,yBAzvBLtU,KAAKoN,SACH2H,KAAKC,SAAS7C,SAAS,IAAI8C,UAAU,GAArCF,wBACF/U,KAAK+R,UACHgD,KAAKC,SAAS7C,SAAS,IAAI8C,UAAU,GAArCF,mBACF/U,KAAKuM,QAAU9D,SAASD,SAASK,cAEhBY,IAAbgC,QAAmChC,IAATiC,GAC5B1L,KAAKuL,WAAaA,EAClBvL,KAAKmM,OAAUX,EAAyCb,IACtDJ,GAEFvK,KAAKyL,SAAWA,EAChBzL,KAAK0L,KAAOA,IAEZ1L,KAAKuL,WAAaA,EAClBvL,KAAKwM,WAAahB,GA4uBxB,OApCS0J,oBAAoB,SAAOvG,OAChCpD,eACAsJ,qBACA1I,WACAV,aACA0C,UACAyG,qHAYA,OAFMO,EAAQ,IAAID,EAAc3J,EAAYY,EAAQV,EADxB,CAAEnI,GAAI,qBAE5B8R,iBAAiBjH,MACjBgH,EAAML,UAAUF,EAAgBC,kBAAtCpF,SACA0F,EAAME"}
|
package/dist/interfaces.d.ts
CHANGED
|
@@ -266,7 +266,7 @@ export declare type IDeveloperStyleOverrides = {
|
|
|
266
266
|
currentFontWeight?: string;
|
|
267
267
|
};
|
|
268
268
|
};
|
|
269
|
-
export declare type TLocaleShorthand = "
|
|
269
|
+
export declare type TLocaleShorthand = "bn" | "en" | "hr" | "ja" | "nl" | "ru" | "uk" | "cs" | "es" | "hu" | "ko" | "no" | "sv" | "vi" | "da" | "fi" | "id" | "lt" | "pl" | "sw" | "zh_CN" | "de" | "fr" | "is" | "lv" | "pt" | "th" | "zh_TW" | "el" | "hi" | "it" | "ms" | "ro" | "tr";
|
|
270
270
|
export declare type IDeveloperSettings = {
|
|
271
271
|
importIdentifier: string;
|
|
272
272
|
title?: string | undefined;
|
|
@@ -331,8 +331,10 @@ export interface IConnectionMethods {
|
|
|
331
331
|
updateInfoMessages: (messages: IMessagesForCell[]) => void;
|
|
332
332
|
setDevelopmentMode: (developmentMode: boolean) => void;
|
|
333
333
|
rehydrate: (rehydrateState: any, headlessImportId?: string) => void;
|
|
334
|
+
addRows: (rows: IRowToAdd[]) => void;
|
|
335
|
+
removeRows: (rowIds: string[]) => void;
|
|
334
336
|
}
|
|
335
|
-
export declare type IPublicConnectionMethods = Pick<IConnectionMethods, "addField" | "updateInfoMessages" | "setHeaderRowOverride" | "setUser" | "removeField" | "setDevelopmentMode">;
|
|
337
|
+
export declare type IPublicConnectionMethods = Pick<IConnectionMethods, "addField" | "updateInfoMessages" | "setHeaderRowOverride" | "setUser" | "removeField" | "setDevelopmentMode" | "addRows" | "removeRows">;
|
|
336
338
|
export declare type IDeveloperFieldType = "string" | "checkbox" | "select" | "number" | "date" | "datetime" | "time" | "email";
|
|
337
339
|
export interface ICellRef {
|
|
338
340
|
rowIndex: number;
|
|
@@ -359,6 +361,7 @@ export interface IRowDeleteHook {
|
|
|
359
361
|
export interface IColumnHookInput {
|
|
360
362
|
index: number;
|
|
361
363
|
value: any;
|
|
364
|
+
rowId: string;
|
|
362
365
|
}
|
|
363
366
|
export interface IColumnHookOutput {
|
|
364
367
|
index: number;
|
|
@@ -375,16 +378,22 @@ export interface IRowHookInput {
|
|
|
375
378
|
};
|
|
376
379
|
};
|
|
377
380
|
index: number;
|
|
381
|
+
rowId: string;
|
|
378
382
|
}
|
|
379
383
|
export interface IRowHookOutput {
|
|
380
|
-
row:
|
|
381
|
-
|
|
382
|
-
|
|
383
|
-
|
|
384
|
-
|
|
385
|
-
|
|
384
|
+
row: IRow;
|
|
385
|
+
}
|
|
386
|
+
export interface IRow {
|
|
387
|
+
[key: string]: {
|
|
388
|
+
value?: any;
|
|
389
|
+
info?: ITableMessage[];
|
|
390
|
+
selectOptions?: ISelectField["selectOptions"];
|
|
386
391
|
};
|
|
387
392
|
}
|
|
393
|
+
export interface IRowToAdd {
|
|
394
|
+
index?: number;
|
|
395
|
+
row: IRow;
|
|
396
|
+
}
|
|
388
397
|
export interface IRowHookOutputInternal extends IRowHookOutput {
|
|
389
398
|
index: number;
|
|
390
399
|
}
|