@jitsu/js 1.9.0-canary.581.20240115194116 → 1.9.0
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/.turbo/turbo-build.log +4 -4
- package/.turbo/turbo-clean.log +1 -1
- package/.turbo/turbo-test.log +1359 -125
- package/__tests__/playwright/cases/callbacks.html +21 -0
- package/__tests__/playwright/integration.test.ts +26 -2
- package/dist/browser.d.ts +1 -1
- package/dist/jitsu.cjs.js +514 -36
- package/dist/jitsu.d.ts +4 -0
- package/dist/jitsu.es.js +514 -36
- package/dist/version.d.ts +1 -1
- package/dist/web/p.js.txt +532 -37
- package/package.json +3 -2
- package/src/analytics-plugin.ts +26 -1
- package/src/browser.ts +17 -2
- package/src/destination-plugins/gtm.ts +19 -30
- package/src/index.ts +10 -10
- package/src/jitsu.ts +5 -0
- package/src/version.ts +2 -2
package/dist/jitsu.cjs.js
CHANGED
|
@@ -280,7 +280,6 @@ var __awaiter$3 = (undefined && undefined.__awaiter) || function (thisArg, _argu
|
|
|
280
280
|
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
281
281
|
});
|
|
282
282
|
};
|
|
283
|
-
const defaultScriptSrc$1 = "https://www.googletagmanager.com/gtag/js";
|
|
284
283
|
const gtmPlugin = {
|
|
285
284
|
id: "gtm",
|
|
286
285
|
handle(config, payload) {
|
|
@@ -328,31 +327,27 @@ function initGtmIfNeeded(config, payload) {
|
|
|
328
327
|
}
|
|
329
328
|
setGtmState("loading");
|
|
330
329
|
const dlName = config.dataLayerName || "dataLayer";
|
|
331
|
-
const dlParam = dlName !== "dataLayer" ? "&l=" + dlName : "";
|
|
332
|
-
const previewParams = config.preview
|
|
333
|
-
? `>m_preview=${config.preview}>m_auth=${config.auth}>m_cookies_win=x`
|
|
334
|
-
: "";
|
|
335
330
|
const tagId = config.containerId;
|
|
336
|
-
|
|
337
|
-
|
|
338
|
-
|
|
339
|
-
|
|
340
|
-
|
|
341
|
-
|
|
342
|
-
|
|
343
|
-
|
|
344
|
-
|
|
345
|
-
|
|
346
|
-
|
|
347
|
-
|
|
348
|
-
|
|
349
|
-
|
|
350
|
-
|
|
351
|
-
|
|
352
|
-
|
|
353
|
-
|
|
354
|
-
|
|
355
|
-
});
|
|
331
|
+
(function (w, l, i) {
|
|
332
|
+
w[l] = w[l] || [];
|
|
333
|
+
w[l].push({
|
|
334
|
+
user_id: payload.userId,
|
|
335
|
+
});
|
|
336
|
+
w[l].push({
|
|
337
|
+
"gtm.start": new Date().getTime(),
|
|
338
|
+
event: "gtm.js",
|
|
339
|
+
});
|
|
340
|
+
const dl = l != "dataLayer" ? "&l=" + l : "";
|
|
341
|
+
const scriptSrc = "https://www.googletagmanager.com/gtm.js?id=" + i + dl;
|
|
342
|
+
loadScript(scriptSrc)
|
|
343
|
+
.then(() => {
|
|
344
|
+
setGtmState("loaded");
|
|
345
|
+
})
|
|
346
|
+
.catch(e => {
|
|
347
|
+
console.warn(`GTM (containerId=${tagId}) init failed: ${e.message}`, e);
|
|
348
|
+
setGtmState("failed");
|
|
349
|
+
});
|
|
350
|
+
})(window, dlName, tagId);
|
|
356
351
|
});
|
|
357
352
|
}
|
|
358
353
|
|
|
@@ -484,8 +479,7 @@ const internalDestinationPlugins = {
|
|
|
484
479
|
[logrocketPlugin.id]: logrocketPlugin,
|
|
485
480
|
};
|
|
486
481
|
|
|
487
|
-
|
|
488
|
-
const jitsuVersion = "0.0.0";
|
|
482
|
+
const jitsuVersion = "2.0.0";
|
|
489
483
|
const jitsuLibraryName = "@jitsu/js";
|
|
490
484
|
|
|
491
485
|
const publicSuffixes = "ac,com.ac,edu.ac,gov.ac,net.ac,mil.ac,org.ac,ad,nom.ad,ae,co.ae,net.ae,org.ae,sch.ae,ac.ae,gov.ae,mil.ae,aero,af,gov.af,com.af,org.af,net.af,edu.af,ag,com.ag,org.ag,net.ag,co.ag,nom.ag,ai,off.ai,com.ai,net.ai,org.ai,al,com.al,edu.al,gov.al,mil.al,net.al,org.al,am,co.am,com.am,commune.am,net.am,org.am,ao,ed.ao,gv.ao,og.ao,co.ao,pb.ao,it.ao,aq,ar,bet.ar,com.ar,coop.ar,edu.ar,gob.ar,gov.ar,int.ar,mil.ar,musica.ar,mutual.ar,net.ar,org.ar,senasa.ar,tur.ar,arpa,e164.arpa,in-addr.arpa,ip6.arpa,iris.arpa,uri.arpa,urn.arpa,as,gov.as,asia,at,ac.at,co.at,gv.at,or.at,sth.ac.at,au,com.au,net.au,org.au,edu.au,gov.au,asn.au,id.au,act.au,nsw.au,nt.au,qld.au,sa.au,tas.au,vic.au,wa.au,aw,com.aw,ax,az,com.az,net.az,int.az,gov.az,org.az,edu.az,info.az,pp.az,mil.az,name.az,pro.az,biz.az,ba,com.ba,edu.ba,gov.ba,mil.ba,net.ba,org.ba,bb,biz.bb,co.bb,com.bb,edu.bb,gov.bb,info.bb,net.bb,org.bb,store.bb,tv.bb,bd,be,ac.be,bf,gov.bf,bg,a.bg,b.bg,c.bg,d.bg,e.bg,f.bg,g.bg,h.bg,i.bg,j.bg,k.bg,l.bg,m.bg,n.bg,o.bg,p.bg,q.bg,r.bg,s.bg,t.bg,u.bg,v.bg,w.bg,x.bg,y.bg,z.bg,0.bg,1.bg,2.bg,3.bg,4.bg,5.bg,6.bg,7.bg,8.bg,9.bg,bh,com.bh,edu.bh,net.bh,org.bh,gov.bh,bi,co.bi,com.bi,edu.bi,or.bi,org.bi,biz,bj,africa.bj,agro.bj,architectes.bj,assur.bj,avocats.bj,co.bj,com.bj,eco.bj,econo.bj,edu.bj,info.bj,loisirs.bj,money.bj,net.bj,org.bj,ote.bj,resto.bj,restaurant.bj,tourism.bj,univ.bj,bm,com.bm,edu.bm,gov.bm,net.bm,org.bm,bn,com.bn,edu.bn,gov.bn,net.bn,org.bn,bo,com.bo,edu.bo,gob.bo,int.bo,org.bo,net.bo,mil.bo,tv.bo,web.bo,br,9guacu.br,abc.br,adm.br,adv.br,agr.br,aju.br,am.br,anani.br,aparecida.br,app.br,arq.br,art.br,ato.br,b.br,barueri.br,belem.br,bhz.br,bib.br,bio.br,blog.br,bmd.br,boavista.br,bsb.br,campinagrande.br,campinas.br,caxias.br,cim.br,cng.br,cnt.br,com.br,contagem.br,coop.br,coz.br,cri.br,cuiaba.br,curitiba.br,def.br,des.br,det.br,dev.br,ecn.br,eco.br,edu.br,emp.br,enf.br,eng.br,esp.br,etc.br,eti.br,far.br,feira.br,flog.br,floripa.br,fm.br,fnd.br,fortal.br,fot.br,foz.br,fst.br,g12.br,geo.br,ggf.br,goiania.br,gov.br,gru.br,imb.br,ind.br,inf.br,jab.br,jampa.br,jdf.br,joinville.br,jor.br,jus.br,leg.br,lel.br,log.br,londrina.br,macapa.br,maceio.br,manaus.br,maringa.br,mat.br,med.br,mil.br,morena.br,mp.br,mus.br,natal.br,net.br,niteroi.br,nom.br,not.br,ntr.br,odo.br,ong.br,org.br,osasco.br,palmas.br,poa.br,ppg.br,pro.br,psc.br,psi.br,pvh.br,qsl.br,radio.br,rec.br,recife.br,rep.br,ribeirao.br,rio.br,riobranco.br,riopreto.br,salvador.br,sampa.br,santamaria.br,santoandre.br,saobernardo.br,saogonca.br,seg.br,sjc.br,slg.br,slz.br,sorocaba.br,srv.br,taxi.br,tc.br,tec.br,teo.br,the.br,tmp.br,trd.br,tur.br,tv.br,udi.br,vet.br,vix.br,vlog.br,wiki.br,zlg.br,bs,com.bs,net.bs,org.bs,edu.bs,gov.bs,bt,com.bt,edu.bt,gov.bt,net.bt,org.bt,bv,bw,co.bw,org.bw,by,gov.by,mil.by,com.by,of.by,bz,com.bz,net.bz,org.bz,edu.bz,gov.bz,ca,ab.ca,bc.ca,mb.ca,nb.ca,nf.ca,nl.ca,ns.ca,nt.ca,nu.ca,on.ca,pe.ca,qc.ca,sk.ca,yk.ca,gc.ca,cat,cc,cd,gov.cd,cf,cg,ch,ci,org.ci,or.ci,com.ci,co.ci,edu.ci,ed.ci,ac.ci,net.ci,go.ci,asso.ci,aéroport.ci,int.ci,presse.ci,md.ci,gouv.ci,ck,cl,co.cl,gob.cl,gov.cl,mil.cl,cm,co.cm,com.cm,gov.cm,net.cm,cn,ac.cn,com.cn,edu.cn,gov.cn,net.cn,org.cn,mil.cn,co,arts.co,com.co,edu.co,firm.co,gov.co,info.co,int.co,mil.co,net.co,nom.co,org.co,rec.co,web.co,com,coop,cr,ac.cr,co.cr,ed.cr,fi.cr,go.cr,or.cr,sa.cr,cu,com.cu,edu.cu,org.cu,net.cu,gov.cu,inf.cu,cv,com.cv,edu.cv,int.cv,nome.cv,org.cv,cw,com.cw,edu.cw,net.cw,org.cw,cx,gov.cx,cy,ac.cy,biz.cy,com.cy,ekloges.cy,gov.cy,ltd.cy,mil.cy,net.cy,org.cy,press.cy,pro.cy,tm.cy,cz,de,dj,dk,dm,com.dm,net.dm,org.dm,edu.dm,gov.dm,do,art.do,com.do,edu.do,gob.do,gov.do,mil.do,net.do,org.do,sld.do,web.do,dz,art.dz,asso.dz,com.dz,edu.dz,gov.dz,org.dz,net.dz,pol.dz,soc.dz,tm.dz,ec,com.ec,info.ec,net.ec,fin.ec,k12.ec,med.ec,pro.ec,org.ec,edu.ec,gov.ec,gob.ec,mil.ec,edu,ee,edu.ee,gov.ee,riik.ee,lib.ee,med.ee,com.ee,pri.ee,aip.ee,org.ee,fie.ee,eg,com.eg,edu.eg,eun.eg,gov.eg,mil.eg,name.eg,net.eg,org.eg,sci.eg,er,es,com.es,nom.es,org.es,gob.es,edu.es,et,com.et,gov.et,org.et,edu.et,biz.et,name.et,info.et,net.et,eu,fi,aland.fi,fj,ac.fj,biz.fj,com.fj,gov.fj,info.fj,mil.fj,name.fj,net.fj,org.fj,pro.fj,fk,com.fm,edu.fm,net.fm,org.fm,fm,fo,fr,asso.fr,com.fr,gouv.fr,nom.fr,prd.fr,tm.fr,aeroport.fr,avocat.fr,avoues.fr,cci.fr,chambagri.fr,chirurgiens-dentistes.fr,experts-comptables.fr,geometre-expert.fr,greta.fr,huissier-justice.fr,medecin.fr,notaires.fr,pharmacien.fr,port.fr,veterinaire.fr,ga,gb,edu.gd,gov.gd,gd,ge,com.ge,edu.ge,gov.ge,org.ge,mil.ge,net.ge,pvt.ge,gf,gg,co.gg,net.gg,org.gg,gh,com.gh,edu.gh,gov.gh,org.gh,mil.gh,gi,com.gi,ltd.gi,gov.gi,mod.gi,edu.gi,org.gi,gl,co.gl,com.gl,edu.gl,net.gl,org.gl,gm,gn,ac.gn,com.gn,edu.gn,gov.gn,org.gn,net.gn,gov,gp,com.gp,net.gp,mobi.gp,edu.gp,org.gp,asso.gp,gq,gr,com.gr,edu.gr,net.gr,org.gr,gov.gr,gs,gt,com.gt,edu.gt,gob.gt,ind.gt,mil.gt,net.gt,org.gt,gu,com.gu,edu.gu,gov.gu,guam.gu,info.gu,net.gu,org.gu,web.gu,gw,gy,co.gy,com.gy,edu.gy,gov.gy,net.gy,org.gy,hk,com.hk,edu.hk,gov.hk,idv.hk,net.hk,org.hk,hm,hn,com.hn,edu.hn,org.hn,net.hn,mil.hn,gob.hn,hr,iz.hr,from.hr,name.hr,com.hr,ht,com.ht,shop.ht,firm.ht,info.ht,adult.ht,net.ht,pro.ht,org.ht,med.ht,art.ht,coop.ht,pol.ht,asso.ht,edu.ht,rel.ht,gouv.ht,perso.ht,hu,co.hu,info.hu,org.hu,priv.hu,sport.hu,tm.hu,2000.hu,agrar.hu,bolt.hu,casino.hu,city.hu,erotica.hu,erotika.hu,film.hu,forum.hu,games.hu,hotel.hu,ingatlan.hu,jogasz.hu,konyvelo.hu,lakas.hu,media.hu,news.hu,reklam.hu,sex.hu,shop.hu,suli.hu,szex.hu,tozsde.hu,utazas.hu,video.hu,id,ac.id,biz.id,co.id,desa.id,go.id,mil.id,my.id,net.id,or.id,ponpes.id,sch.id,web.id,ie,gov.ie,il,ac.il,co.il,gov.il,idf.il,k12.il,muni.il,net.il,org.il,im,ac.im,co.im,com.im,ltd.co.im,net.im,org.im,plc.co.im,tt.im,tv.im,in,5g.in,6g.in,ac.in,ai.in,am.in,bihar.in,biz.in,business.in,ca.in,cn.in,co.in,com.in,coop.in,cs.in,delhi.in,dr.in,edu.in,er.in,firm.in,gen.in,gov.in,gujarat.in,ind.in,info.in,int.in,internet.in,io.in,me.in,mil.in,net.in,nic.in,org.in,pg.in,post.in,pro.in,res.in,travel.in,tv.in,uk.in,up.in,us.in,info,int,eu.int,io,com.io,iq,gov.iq,edu.iq,mil.iq,com.iq,org.iq,net.iq,ir,ac.ir,co.ir,gov.ir,id.ir,net.ir,org.ir,sch.ir,is,net.is,com.is,edu.is,gov.is,org.is,int.is,it,gov.it,edu.it,je,co.je,net.je,org.je,jm,jo,com.jo,org.jo,net.jo,edu.jo,sch.jo,gov.jo,mil.jo,name.jo,jobs,jp,ac.jp,ad.jp,co.jp,ed.jp,go.jp,gr.jp,lg.jp,ne.jp,or.jp,ke,ac.ke,co.ke,go.ke,info.ke,me.ke,mobi.ke,ne.ke,or.ke,sc.ke,kg,org.kg,net.kg,com.kg,edu.kg,gov.kg,mil.kg,kh,ki,edu.ki,biz.ki,net.ki,org.ki,gov.ki,info.ki,com.ki,km,org.km,nom.km,gov.km,prd.km,tm.km,edu.km,mil.km,ass.km,com.km,kn,net.kn,org.kn,edu.kn,gov.kn,kp,com.kp,edu.kp,gov.kp,org.kp,rep.kp,tra.kp,kr,ac.kr,co.kr,es.kr,go.kr,hs.kr,kg.kr,mil.kr,ms.kr,ne.kr,or.kr,pe.kr,re.kr,sc.kr,kw,com.kw,edu.kw,emb.kw,gov.kw,ind.kw,net.kw,org.kw,ky,com.ky,edu.ky,net.ky,org.ky,kz,org.kz,edu.kz,net.kz,gov.kz,mil.kz,com.kz,la,int.la,net.la,info.la,edu.la,gov.la,per.la,com.la,org.la,lb,com.lb,edu.lb,gov.lb,net.lb,org.lb,lc,com.lc,net.lc,co.lc,org.lc,edu.lc,gov.lc,li,lk,gov.lk,sch.lk,net.lk,int.lk,com.lk,org.lk,edu.lk,ngo.lk,soc.lk,web.lk,ltd.lk,assn.lk,grp.lk,hotel.lk,ac.lk,lr,com.lr,edu.lr,gov.lr,org.lr,net.lr,ls,ac.ls,biz.ls,co.ls,edu.ls,gov.ls,info.ls,net.ls,org.ls,sc.ls,lt,gov.lt,lu,lv,com.lv,edu.lv,gov.lv,org.lv,mil.lv,id.lv,net.lv,asn.lv,conf.lv,ly,com.ly,net.ly,gov.ly,plc.ly,edu.ly,sch.ly,med.ly,org.ly,id.ly,ma,co.ma,net.ma,gov.ma,org.ma,ac.ma,press.ma,mc,tm.mc,asso.mc,md,me,co.me,net.me,org.me,edu.me,ac.me,gov.me,its.me,priv.me,mg,org.mg,nom.mg,gov.mg,prd.mg,tm.mg,edu.mg,mil.mg,com.mg,co.mg,mh,mil,mk,com.mk,org.mk,net.mk,edu.mk,gov.mk,inf.mk,name.mk,ml,com.ml,edu.ml,gouv.ml,gov.ml,net.ml,org.ml,presse.ml,mm,mn,gov.mn,edu.mn,org.mn,mo,com.mo,net.mo,org.mo,edu.mo,gov.mo,mobi,mp,mq,mr,gov.mr,ms,com.ms,edu.ms,gov.ms,net.ms,org.ms,mt,com.mt,edu.mt,net.mt,org.mt,mu,com.mu,net.mu,org.mu,gov.mu,ac.mu,co.mu,or.mu,museum,mv,aero.mv,biz.mv,com.mv,coop.mv,edu.mv,gov.mv,info.mv,int.mv,mil.mv,museum.mv,name.mv,net.mv,org.mv,pro.mv,mw,ac.mw,biz.mw,co.mw,com.mw,coop.mw,edu.mw,gov.mw,int.mw,museum.mw,net.mw,org.mw,mx,com.mx,org.mx,gob.mx,edu.mx,net.mx,my,biz.my,com.my,edu.my,gov.my,mil.my,name.my,net.my,org.my,mz,ac.mz,adv.mz,co.mz,edu.mz,gov.mz,mil.mz,net.mz,org.mz,na,info.na,pro.na,name.na,school.na,or.na,dr.na,us.na,mx.na,ca.na,in.na,cc.na,tv.na,ws.na,mobi.na,co.na,com.na,org.na,name,nc,asso.nc,nom.nc,ne,net,nf,com.nf,net.nf,per.nf,rec.nf,web.nf,arts.nf,firm.nf,info.nf,other.nf,store.nf,ng,com.ng,edu.ng,gov.ng,i.ng,mil.ng,mobi.ng,name.ng,net.ng,org.ng,sch.ng,ni,ac.ni,biz.ni,co.ni,com.ni,edu.ni,gob.ni,in.ni,info.ni,int.ni,mil.ni,net.ni,nom.ni,org.ni,web.ni,nl,no,fhs.no,vgs.no,fylkesbibl.no,folkebibl.no,museum.no,idrett.no,priv.no,mil.no,stat.no,dep.no,kommune.no,herad.no,np,nr,biz.nr,info.nr,gov.nr,edu.nr,org.nr,net.nr,com.nr,nu,nz,ac.nz,co.nz,cri.nz,geek.nz,gen.nz,govt.nz,health.nz,iwi.nz,kiwi.nz,maori.nz,mil.nz,māori.nz,net.nz,org.nz,parliament.nz,school.nz,om,co.om,com.om,edu.om,gov.om,med.om,museum.om,net.om,org.om,pro.om,onion,org,pa,ac.pa,gob.pa,com.pa,org.pa,sld.pa,edu.pa,net.pa,ing.pa,abo.pa,med.pa,nom.pa,pe,edu.pe,gob.pe,nom.pe,mil.pe,org.pe,com.pe,net.pe,pf,com.pf,org.pf,edu.pf,pg,ph,com.ph,net.ph,org.ph,gov.ph,edu.ph,ngo.ph,mil.ph,i.ph,pk,com.pk,net.pk,edu.pk,org.pk,fam.pk,biz.pk,web.pk,gov.pk,gob.pk,gok.pk,gon.pk,gop.pk,gos.pk,info.pk,pl,com.pl,net.pl,org.pl,aid.pl,agro.pl,atm.pl,auto.pl,biz.pl,edu.pl,gmina.pl,gsm.pl,info.pl,mail.pl,miasta.pl,media.pl,mil.pl,nieruchomosci.pl,nom.pl,pc.pl,powiat.pl,priv.pl,realestate.pl,rel.pl,sex.pl,shop.pl,sklep.pl,sos.pl,szkola.pl,targi.pl,tm.pl,tourism.pl,travel.pl,turystyka.pl,pm,pn,gov.pn,co.pn,org.pn,edu.pn,net.pn,post,pr,com.pr,net.pr,org.pr,gov.pr,edu.pr,isla.pr,pro.pr,biz.pr,info.pr,name.pr,est.pr,prof.pr,ac.pr,pro,aaa.pro,aca.pro,acct.pro,avocat.pro,bar.pro,cpa.pro,eng.pro,jur.pro,law.pro,med.pro,recht.pro,ps,edu.ps,gov.ps,sec.ps,plo.ps,com.ps,org.ps,net.ps,pt,net.pt,gov.pt,org.pt,edu.pt,int.pt,publ.pt,com.pt,nome.pt,pw,co.pw,ne.pw,or.pw,ed.pw,go.pw,belau.pw,py,com.py,coop.py,edu.py,gov.py,mil.py,net.py,org.py,qa,com.qa,edu.qa,gov.qa,mil.qa,name.qa,net.qa,org.qa,sch.qa,re,asso.re,com.re,nom.re,ro,arts.ro,com.ro,firm.ro,info.ro,nom.ro,nt.ro,org.ro,rec.ro,store.ro,tm.ro,www.ro,rs,ac.rs,co.rs,edu.rs,gov.rs,in.rs,org.rs,ru,rw,ac.rw,co.rw,coop.rw,gov.rw,mil.rw,net.rw,org.rw,sa,com.sa,net.sa,org.sa,gov.sa,med.sa,pub.sa,edu.sa,sch.sa,sb,com.sb,edu.sb,gov.sb,net.sb,org.sb,sc,com.sc,gov.sc,net.sc,org.sc,edu.sc,sd,com.sd,net.sd,org.sd,edu.sd,med.sd,tv.sd,gov.sd,info.sd,se,a.se,ac.se,b.se,bd.se,brand.se,c.se,d.se,e.se,f.se,fh.se,fhsk.se,fhv.se,g.se,h.se,i.se,k.se,komforb.se,kommunalforbund.se,komvux.se,l.se,lanbib.se,m.se,n.se,naturbruksgymn.se,o.se,org.se,p.se,parti.se,pp.se,press.se,r.se,s.se,t.se,tm.se,u.se,w.se,x.se,y.se,z.se,sg,com.sg,net.sg,org.sg,gov.sg,edu.sg,per.sg,sh,com.sh,net.sh,gov.sh,org.sh,mil.sh,si,sj,sk,sl,com.sl,net.sl,edu.sl,gov.sl,org.sl,sm,sn,art.sn,com.sn,edu.sn,gouv.sn,org.sn,perso.sn,univ.sn,so,com.so,edu.so,gov.so,me.so,net.so,org.so,sr,ss,biz.ss,com.ss,edu.ss,gov.ss,me.ss,net.ss,org.ss,sch.ss,st,co.st,com.st,consulado.st,edu.st,embaixada.st,mil.st,net.st,org.st,principe.st,saotome.st,store.st,su,sv,com.sv,edu.sv,gob.sv,org.sv,red.sv,sx,gov.sx,sy,edu.sy,gov.sy,net.sy,mil.sy,com.sy,org.sy,sz,co.sz,ac.sz,org.sz,tc,td,tel,tf,tg,th,ac.th,co.th,go.th,in.th,mi.th,net.th,or.th,tj,ac.tj,biz.tj,co.tj,com.tj,edu.tj,go.tj,gov.tj,int.tj,mil.tj,name.tj,net.tj,nic.tj,org.tj,test.tj,web.tj,tk,tl,gov.tl,tm,com.tm,co.tm,org.tm,net.tm,nom.tm,gov.tm,mil.tm,edu.tm,tn,com.tn,ens.tn,fin.tn,gov.tn,ind.tn,info.tn,intl.tn,mincom.tn,nat.tn,net.tn,org.tn,perso.tn,tourism.tn,to,com.to,gov.to,net.to,org.to,edu.to,mil.to,tr,av.tr,bbs.tr,bel.tr,biz.tr,com.tr,dr.tr,edu.tr,gen.tr,gov.tr,info.tr,mil.tr,k12.tr,kep.tr,name.tr,net.tr,org.tr,pol.tr,tel.tr,tsk.tr,tv.tr,web.tr,nc.tr,tt,co.tt,com.tt,org.tt,net.tt,biz.tt,info.tt,pro.tt,int.tt,coop.tt,jobs.tt,mobi.tt,travel.tt,museum.tt,aero.tt,name.tt,gov.tt,edu.tt,tv,tw,edu.tw,gov.tw,mil.tw,com.tw,net.tw,org.tw,idv.tw,game.tw,ebiz.tw,club.tw,tz,ac.tz,co.tz,go.tz,hotel.tz,info.tz,me.tz,mil.tz,mobi.tz,ne.tz,or.tz,sc.tz,tv.tz,ua,com.ua,edu.ua,gov.ua,in.ua,net.ua,org.ua,ug,co.ug,or.ug,ac.ug,sc.ug,go.ug,ne.ug,com.ug,org.ug,uk,ac.uk,co.uk,gov.uk,ltd.uk,me.uk,net.uk,nhs.uk,org.uk,plc.uk,police.uk,us,dni.us,fed.us,isa.us,kids.us,nsn.us,ak.us,al.us,ar.us,as.us,az.us,ca.us,co.us,ct.us,dc.us,de.us,fl.us,ga.us,gu.us,hi.us,ia.us,id.us,il.us,in.us,ks.us,ky.us,la.us,ma.us,md.us,me.us,mi.us,mn.us,mo.us,ms.us,mt.us,nc.us,nd.us,ne.us,nh.us,nj.us,nm.us,nv.us,ny.us,oh.us,ok.us,or.us,pa.us,pr.us,ri.us,sc.us,sd.us,tn.us,tx.us,ut.us,vi.us,vt.us,va.us,wa.us,wi.us,wv.us,wy.us,uy,com.uy,edu.uy,gub.uy,mil.uy,net.uy,org.uy,uz,co.uz,com.uz,net.uz,org.uz,va,vc,com.vc,net.vc,org.vc,gov.vc,mil.vc,edu.vc,ve,arts.ve,bib.ve,co.ve,com.ve,e12.ve,edu.ve,firm.ve,gob.ve,gov.ve,info.ve,int.ve,mil.ve,net.ve,nom.ve,org.ve,rar.ve,rec.ve,store.ve,tec.ve,web.ve,vg,vi,co.vi,com.vi,k12.vi,net.vi,org.vi,vn,ac.vn,ai.vn,biz.vn,com.vn,edu.vn,gov.vn,health.vn,id.vn,info.vn,int.vn,io.vn,name.vn,net.vn,org.vn,pro.vn,vu,com.vu,edu.vu,net.vu,org.vu,wf,ws,com.ws,net.ws,org.ws,gov.ws,edu.ws,yt,ye,com.ye,edu.ye,gov.ye,net.ye,mil.ye,org.ye,ac.za,agric.za,alt.za,co.za,edu.za,gov.za,grondar.za,law.za,mil.za,net.za,ngo.za,nic.za,nis.za,nom.za,org.za,school.za,tm.za,web.za,zm,ac.zm,biz.zm,co.zm,com.zm,edu.zm,gov.zm,info.zm,mil.zm,net.zm,org.zm,sch.zm,zw,ac.zw,co.zw,gov.zw,mil.zw,org.zw".split(",");
|
|
@@ -512,6 +506,469 @@ function getTopLevelDomain(hostname) {
|
|
|
512
506
|
}
|
|
513
507
|
}
|
|
514
508
|
|
|
509
|
+
class Processor {
|
|
510
|
+
constructor(options) {
|
|
511
|
+
this.selfOptions = options || {};
|
|
512
|
+
this.pipes = {};
|
|
513
|
+
}
|
|
514
|
+
options(options) {
|
|
515
|
+
if (options) {
|
|
516
|
+
this.selfOptions = options;
|
|
517
|
+
}
|
|
518
|
+
return this.selfOptions;
|
|
519
|
+
}
|
|
520
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
521
|
+
pipe(name, pipeArg) {
|
|
522
|
+
let pipe = pipeArg;
|
|
523
|
+
if (typeof name === "string") {
|
|
524
|
+
if (typeof pipe === "undefined") {
|
|
525
|
+
return this.pipes[name];
|
|
526
|
+
}
|
|
527
|
+
else {
|
|
528
|
+
this.pipes[name] = pipe;
|
|
529
|
+
}
|
|
530
|
+
}
|
|
531
|
+
if (name && name.name) {
|
|
532
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
533
|
+
pipe = name;
|
|
534
|
+
if (pipe.processor === this) {
|
|
535
|
+
return pipe;
|
|
536
|
+
}
|
|
537
|
+
this.pipes[pipe.name] = pipe;
|
|
538
|
+
}
|
|
539
|
+
pipe.processor = this;
|
|
540
|
+
return pipe;
|
|
541
|
+
}
|
|
542
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
543
|
+
process(input, pipe) {
|
|
544
|
+
let context = input;
|
|
545
|
+
context.options = this.options();
|
|
546
|
+
let nextPipe = pipe || input.pipe || "default";
|
|
547
|
+
let lastPipe;
|
|
548
|
+
while (nextPipe) {
|
|
549
|
+
if (typeof context.nextAfterChildren !== "undefined") {
|
|
550
|
+
// children processed and coming back to parent
|
|
551
|
+
context.next = context.nextAfterChildren;
|
|
552
|
+
context.nextAfterChildren = null;
|
|
553
|
+
}
|
|
554
|
+
if (typeof nextPipe === "string") {
|
|
555
|
+
nextPipe = this.pipe(nextPipe);
|
|
556
|
+
}
|
|
557
|
+
nextPipe.process(context);
|
|
558
|
+
lastPipe = nextPipe;
|
|
559
|
+
nextPipe = null;
|
|
560
|
+
if (context) {
|
|
561
|
+
if (context.next) {
|
|
562
|
+
context = context.next;
|
|
563
|
+
nextPipe = context.pipe || lastPipe;
|
|
564
|
+
}
|
|
565
|
+
}
|
|
566
|
+
}
|
|
567
|
+
// eslint-disable-next-line @typescript-eslint/no-unsafe-return
|
|
568
|
+
return context.hasResult ? context.result : undefined;
|
|
569
|
+
}
|
|
570
|
+
}
|
|
571
|
+
|
|
572
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
573
|
+
class Pipe {
|
|
574
|
+
constructor(name) {
|
|
575
|
+
this.name = name;
|
|
576
|
+
this.filters = [];
|
|
577
|
+
}
|
|
578
|
+
process(input) {
|
|
579
|
+
if (!this.processor) {
|
|
580
|
+
throw new Error("add this pipe to a processor before using it");
|
|
581
|
+
}
|
|
582
|
+
const debug = this.debug;
|
|
583
|
+
const length = this.filters.length;
|
|
584
|
+
const context = input;
|
|
585
|
+
for (let index = 0; index < length; index++) {
|
|
586
|
+
const filter = this.filters[index];
|
|
587
|
+
if (debug) {
|
|
588
|
+
this.log(`filter: ${filter.filterName}`);
|
|
589
|
+
}
|
|
590
|
+
filter(context);
|
|
591
|
+
if (typeof context === "object" && context.exiting) {
|
|
592
|
+
context.exiting = false;
|
|
593
|
+
break;
|
|
594
|
+
}
|
|
595
|
+
}
|
|
596
|
+
if (!context.next && this.resultCheck) {
|
|
597
|
+
this.resultCheck(context);
|
|
598
|
+
}
|
|
599
|
+
}
|
|
600
|
+
log(msg) {
|
|
601
|
+
console.log(`[jsondiffpatch] ${this.name} pipe, ${msg}`);
|
|
602
|
+
}
|
|
603
|
+
append(...args) {
|
|
604
|
+
this.filters.push(...args);
|
|
605
|
+
return this;
|
|
606
|
+
}
|
|
607
|
+
prepend(...args) {
|
|
608
|
+
this.filters.unshift(...args);
|
|
609
|
+
return this;
|
|
610
|
+
}
|
|
611
|
+
indexOf(filterName) {
|
|
612
|
+
if (!filterName) {
|
|
613
|
+
throw new Error("a filter name is required");
|
|
614
|
+
}
|
|
615
|
+
for (let index = 0; index < this.filters.length; index++) {
|
|
616
|
+
const filter = this.filters[index];
|
|
617
|
+
if (filter.filterName === filterName) {
|
|
618
|
+
return index;
|
|
619
|
+
}
|
|
620
|
+
}
|
|
621
|
+
throw new Error(`filter not found: ${filterName}`);
|
|
622
|
+
}
|
|
623
|
+
list() {
|
|
624
|
+
return this.filters.map(f => f.filterName);
|
|
625
|
+
}
|
|
626
|
+
after(filterName, ...params) {
|
|
627
|
+
const index = this.indexOf(filterName);
|
|
628
|
+
this.filters.splice(index + 1, 0, ...params);
|
|
629
|
+
return this;
|
|
630
|
+
}
|
|
631
|
+
before(filterName, ...params) {
|
|
632
|
+
const index = this.indexOf(filterName);
|
|
633
|
+
this.filters.splice(index, 0, ...params);
|
|
634
|
+
return this;
|
|
635
|
+
}
|
|
636
|
+
replace(filterName, ...params) {
|
|
637
|
+
const index = this.indexOf(filterName);
|
|
638
|
+
this.filters.splice(index, 1, ...params);
|
|
639
|
+
return this;
|
|
640
|
+
}
|
|
641
|
+
remove(filterName) {
|
|
642
|
+
const index = this.indexOf(filterName);
|
|
643
|
+
this.filters.splice(index, 1);
|
|
644
|
+
return this;
|
|
645
|
+
}
|
|
646
|
+
clear() {
|
|
647
|
+
this.filters.length = 0;
|
|
648
|
+
return this;
|
|
649
|
+
}
|
|
650
|
+
shouldHaveResult(should) {
|
|
651
|
+
if (should === false) {
|
|
652
|
+
this.resultCheck = null;
|
|
653
|
+
return;
|
|
654
|
+
}
|
|
655
|
+
if (this.resultCheck) {
|
|
656
|
+
return;
|
|
657
|
+
}
|
|
658
|
+
this.resultCheck = context => {
|
|
659
|
+
if (!context.hasResult) {
|
|
660
|
+
console.log(context);
|
|
661
|
+
const error = new Error(`${this.name} failed`);
|
|
662
|
+
error.noResult = true;
|
|
663
|
+
throw error;
|
|
664
|
+
}
|
|
665
|
+
};
|
|
666
|
+
return this;
|
|
667
|
+
}
|
|
668
|
+
}
|
|
669
|
+
|
|
670
|
+
class Context {
|
|
671
|
+
setResult(result) {
|
|
672
|
+
this.result = result;
|
|
673
|
+
this.hasResult = true;
|
|
674
|
+
return this;
|
|
675
|
+
}
|
|
676
|
+
exit() {
|
|
677
|
+
this.exiting = true;
|
|
678
|
+
return this;
|
|
679
|
+
}
|
|
680
|
+
push(child, name) {
|
|
681
|
+
child.parent = this;
|
|
682
|
+
if (typeof name !== "undefined") {
|
|
683
|
+
child.childName = name;
|
|
684
|
+
}
|
|
685
|
+
child.root = this.root || this;
|
|
686
|
+
child.options = child.options || this.options;
|
|
687
|
+
if (!this.children) {
|
|
688
|
+
this.children = [child];
|
|
689
|
+
this.nextAfterChildren = this.next || null;
|
|
690
|
+
this.next = child;
|
|
691
|
+
}
|
|
692
|
+
else {
|
|
693
|
+
this.children[this.children.length - 1].next = child;
|
|
694
|
+
this.children.push(child);
|
|
695
|
+
}
|
|
696
|
+
child.next = this;
|
|
697
|
+
return this;
|
|
698
|
+
}
|
|
699
|
+
}
|
|
700
|
+
|
|
701
|
+
class DiffContext extends Context {
|
|
702
|
+
constructor(left, right) {
|
|
703
|
+
super();
|
|
704
|
+
this.left = left;
|
|
705
|
+
this.right = right;
|
|
706
|
+
this.pipe = "diff";
|
|
707
|
+
}
|
|
708
|
+
setResult(result) {
|
|
709
|
+
return super.setResult(result);
|
|
710
|
+
}
|
|
711
|
+
}
|
|
712
|
+
|
|
713
|
+
class PatchContext extends Context {
|
|
714
|
+
constructor(left, delta) {
|
|
715
|
+
super();
|
|
716
|
+
this.left = left;
|
|
717
|
+
this.delta = delta;
|
|
718
|
+
this.pipe = "patch";
|
|
719
|
+
}
|
|
720
|
+
}
|
|
721
|
+
|
|
722
|
+
function arrayEquals(a, b) {
|
|
723
|
+
if (a.length !== b.length) {
|
|
724
|
+
return false;
|
|
725
|
+
}
|
|
726
|
+
for (let i = 0; i < a.length; i++) {
|
|
727
|
+
if (a[i] !== b[i]) {
|
|
728
|
+
return false;
|
|
729
|
+
}
|
|
730
|
+
}
|
|
731
|
+
return true;
|
|
732
|
+
}
|
|
733
|
+
const diffFilter$1 = function trivialMatchesDiffFilter(context) {
|
|
734
|
+
if (context.left === context.right) {
|
|
735
|
+
context.setResult(undefined).exit();
|
|
736
|
+
return;
|
|
737
|
+
}
|
|
738
|
+
if (typeof context.left === "undefined") {
|
|
739
|
+
if (typeof context.right === "function") {
|
|
740
|
+
throw new Error("functions are not supported");
|
|
741
|
+
}
|
|
742
|
+
context.setResult([context.right]).exit();
|
|
743
|
+
return;
|
|
744
|
+
}
|
|
745
|
+
if (typeof context.right === "undefined") {
|
|
746
|
+
context.setResult([context.left, 0, 0]).exit();
|
|
747
|
+
return;
|
|
748
|
+
}
|
|
749
|
+
if (typeof context.left === "function" || typeof context.right === "function") {
|
|
750
|
+
throw new Error("functions are not supported");
|
|
751
|
+
}
|
|
752
|
+
context.leftType = context.left === null ? "null" : typeof context.left;
|
|
753
|
+
context.rightType = context.right === null ? "null" : typeof context.right;
|
|
754
|
+
if (context.leftType !== context.rightType) {
|
|
755
|
+
context.setResult([context.left, context.right]).exit();
|
|
756
|
+
return;
|
|
757
|
+
}
|
|
758
|
+
if (context.leftType === "boolean" || context.leftType === "number" || context.leftType === "string") {
|
|
759
|
+
context.setResult([context.left, context.right]).exit();
|
|
760
|
+
return;
|
|
761
|
+
}
|
|
762
|
+
if (context.leftType === "object") {
|
|
763
|
+
context.leftIsArray = Array.isArray(context.left);
|
|
764
|
+
}
|
|
765
|
+
if (context.rightType === "object") {
|
|
766
|
+
context.rightIsArray = Array.isArray(context.right);
|
|
767
|
+
}
|
|
768
|
+
if (context.leftIsArray !== context.rightIsArray) {
|
|
769
|
+
context.setResult([context.left, context.right]).exit();
|
|
770
|
+
return;
|
|
771
|
+
}
|
|
772
|
+
if (context.leftIsArray && context.rightIsArray) {
|
|
773
|
+
// eslint-disable-next-line @typescript-eslint/no-unsafe-call
|
|
774
|
+
if (arrayEquals(context.left, context.right)) {
|
|
775
|
+
context.setResult(undefined).exit();
|
|
776
|
+
return;
|
|
777
|
+
}
|
|
778
|
+
else {
|
|
779
|
+
context.setResult([context.left, context.right]).exit();
|
|
780
|
+
return;
|
|
781
|
+
}
|
|
782
|
+
}
|
|
783
|
+
if (context.left instanceof RegExp) {
|
|
784
|
+
if (context.right instanceof RegExp) {
|
|
785
|
+
context.setResult([context.left.toString(), context.right.toString()]).exit();
|
|
786
|
+
}
|
|
787
|
+
else {
|
|
788
|
+
context.setResult([context.left, context.right]).exit();
|
|
789
|
+
}
|
|
790
|
+
}
|
|
791
|
+
};
|
|
792
|
+
diffFilter$1.filterName = "trivial";
|
|
793
|
+
const patchFilter$1 = function trivialMatchesPatchFilter(context) {
|
|
794
|
+
if (typeof context.delta === "undefined") {
|
|
795
|
+
context.setResult(context.left).exit();
|
|
796
|
+
return;
|
|
797
|
+
}
|
|
798
|
+
context.nested = !Array.isArray(context.delta);
|
|
799
|
+
if (context.nested) {
|
|
800
|
+
return;
|
|
801
|
+
}
|
|
802
|
+
const nonNestedDelta = context.delta;
|
|
803
|
+
if (nonNestedDelta.length === 1) {
|
|
804
|
+
context.setResult(nonNestedDelta[0]).exit();
|
|
805
|
+
return;
|
|
806
|
+
}
|
|
807
|
+
if (nonNestedDelta.length === 2) {
|
|
808
|
+
if (context.left instanceof RegExp) {
|
|
809
|
+
const regexArgs = /^\/(.*)\/([gimyu]+)$/.exec(nonNestedDelta[1]);
|
|
810
|
+
if (regexArgs) {
|
|
811
|
+
context.setResult(new RegExp(regexArgs[1], regexArgs[2])).exit();
|
|
812
|
+
return;
|
|
813
|
+
}
|
|
814
|
+
}
|
|
815
|
+
context.setResult(nonNestedDelta[1]).exit();
|
|
816
|
+
return;
|
|
817
|
+
}
|
|
818
|
+
if (nonNestedDelta.length === 3 && nonNestedDelta[2] === 0) {
|
|
819
|
+
context.setResult(undefined).exit();
|
|
820
|
+
}
|
|
821
|
+
};
|
|
822
|
+
patchFilter$1.filterName = "trivial";
|
|
823
|
+
|
|
824
|
+
const collectChildrenDiffFilter = context => {
|
|
825
|
+
if (!context || !context.children) {
|
|
826
|
+
return;
|
|
827
|
+
}
|
|
828
|
+
const length = context.children.length;
|
|
829
|
+
let child;
|
|
830
|
+
let result = context.result;
|
|
831
|
+
for (let index = 0; index < length; index++) {
|
|
832
|
+
child = context.children[index];
|
|
833
|
+
if (typeof child.result === "undefined") {
|
|
834
|
+
continue;
|
|
835
|
+
}
|
|
836
|
+
result = result || {};
|
|
837
|
+
result[child.childName] = child.result;
|
|
838
|
+
}
|
|
839
|
+
if (result && context.leftIsArray) {
|
|
840
|
+
result._t = "a";
|
|
841
|
+
}
|
|
842
|
+
context.setResult(result).exit();
|
|
843
|
+
};
|
|
844
|
+
collectChildrenDiffFilter.filterName = "collectChildren";
|
|
845
|
+
const objectsDiffFilter = context => {
|
|
846
|
+
if (context.leftIsArray || context.leftType !== "object") {
|
|
847
|
+
return;
|
|
848
|
+
}
|
|
849
|
+
const left = context.left;
|
|
850
|
+
const right = context.right;
|
|
851
|
+
let name;
|
|
852
|
+
let child;
|
|
853
|
+
const propertyFilter = context.options.propertyFilter;
|
|
854
|
+
for (name in left) {
|
|
855
|
+
if (!Object.prototype.hasOwnProperty.call(left, name)) {
|
|
856
|
+
continue;
|
|
857
|
+
}
|
|
858
|
+
if (propertyFilter && !propertyFilter(name, context)) {
|
|
859
|
+
continue;
|
|
860
|
+
}
|
|
861
|
+
child = new DiffContext(left[name], right[name]);
|
|
862
|
+
context.push(child, name);
|
|
863
|
+
}
|
|
864
|
+
for (name in right) {
|
|
865
|
+
if (!Object.prototype.hasOwnProperty.call(right, name)) {
|
|
866
|
+
continue;
|
|
867
|
+
}
|
|
868
|
+
if (propertyFilter && !propertyFilter(name, context)) {
|
|
869
|
+
continue;
|
|
870
|
+
}
|
|
871
|
+
if (typeof left[name] === "undefined") {
|
|
872
|
+
child = new DiffContext(undefined, right[name]);
|
|
873
|
+
context.push(child, name);
|
|
874
|
+
}
|
|
875
|
+
}
|
|
876
|
+
if (!context.children || context.children.length === 0) {
|
|
877
|
+
context.setResult(undefined).exit();
|
|
878
|
+
return;
|
|
879
|
+
}
|
|
880
|
+
context.exit();
|
|
881
|
+
};
|
|
882
|
+
objectsDiffFilter.filterName = "objects";
|
|
883
|
+
const patchFilter = function nestedPatchFilter(context) {
|
|
884
|
+
if (!context.nested) {
|
|
885
|
+
return;
|
|
886
|
+
}
|
|
887
|
+
const nestedDelta = context.delta;
|
|
888
|
+
if (nestedDelta._t) {
|
|
889
|
+
return;
|
|
890
|
+
}
|
|
891
|
+
const objectDelta = nestedDelta;
|
|
892
|
+
let name;
|
|
893
|
+
let child;
|
|
894
|
+
for (name in objectDelta) {
|
|
895
|
+
child = new PatchContext(context.left[name], objectDelta[name]);
|
|
896
|
+
context.push(child, name);
|
|
897
|
+
}
|
|
898
|
+
context.exit();
|
|
899
|
+
};
|
|
900
|
+
patchFilter.filterName = "objects";
|
|
901
|
+
const collectChildrenPatchFilter = function collectChildrenPatchFilter(context) {
|
|
902
|
+
if (!context || !context.children) {
|
|
903
|
+
return;
|
|
904
|
+
}
|
|
905
|
+
const deltaWithChildren = context.delta;
|
|
906
|
+
if (deltaWithChildren._t) {
|
|
907
|
+
return;
|
|
908
|
+
}
|
|
909
|
+
const object = context.left;
|
|
910
|
+
const length = context.children.length;
|
|
911
|
+
let child;
|
|
912
|
+
for (let index = 0; index < length; index++) {
|
|
913
|
+
child = context.children[index];
|
|
914
|
+
const property = child.childName;
|
|
915
|
+
if (Object.prototype.hasOwnProperty.call(context.left, property) && child.result === undefined) {
|
|
916
|
+
delete object[property];
|
|
917
|
+
}
|
|
918
|
+
else if (object[property] !== child.result) {
|
|
919
|
+
object[property] = child.result;
|
|
920
|
+
}
|
|
921
|
+
}
|
|
922
|
+
context.setResult(object).exit();
|
|
923
|
+
};
|
|
924
|
+
collectChildrenPatchFilter.filterName = "collectChildren";
|
|
925
|
+
|
|
926
|
+
const diffFilter = function datesDiffFilter(context) {
|
|
927
|
+
if (context.left instanceof Date) {
|
|
928
|
+
if (context.right instanceof Date) {
|
|
929
|
+
if (context.left.getTime() !== context.right.getTime()) {
|
|
930
|
+
context.setResult([context.left, context.right]);
|
|
931
|
+
}
|
|
932
|
+
else {
|
|
933
|
+
context.setResult(undefined);
|
|
934
|
+
}
|
|
935
|
+
}
|
|
936
|
+
else {
|
|
937
|
+
context.setResult([context.left, context.right]);
|
|
938
|
+
}
|
|
939
|
+
context.exit();
|
|
940
|
+
}
|
|
941
|
+
else if (context.right instanceof Date) {
|
|
942
|
+
context.setResult([context.left, context.right]).exit();
|
|
943
|
+
}
|
|
944
|
+
};
|
|
945
|
+
diffFilter.filterName = "dates";
|
|
946
|
+
|
|
947
|
+
class DiffPatcher {
|
|
948
|
+
constructor(options) {
|
|
949
|
+
this.processor = new Processor(options);
|
|
950
|
+
this.processor.pipe(new Pipe("diff")
|
|
951
|
+
.append(collectChildrenDiffFilter, diffFilter$1, diffFilter, objectsDiffFilter)
|
|
952
|
+
.shouldHaveResult());
|
|
953
|
+
this.processor.pipe(new Pipe("patch")
|
|
954
|
+
.append(collectChildrenPatchFilter, patchFilter$1, patchFilter)
|
|
955
|
+
.shouldHaveResult());
|
|
956
|
+
}
|
|
957
|
+
options(options) {
|
|
958
|
+
return this.processor.options(options);
|
|
959
|
+
}
|
|
960
|
+
diff(left, right) {
|
|
961
|
+
return this.processor.process(new DiffContext(left, right));
|
|
962
|
+
}
|
|
963
|
+
patch(left, delta) {
|
|
964
|
+
return this.processor.process(new PatchContext(left, delta));
|
|
965
|
+
}
|
|
966
|
+
}
|
|
967
|
+
|
|
968
|
+
function create(options) {
|
|
969
|
+
return new DiffPatcher(options);
|
|
970
|
+
}
|
|
971
|
+
|
|
515
972
|
/* global analytics */
|
|
516
973
|
var __awaiter$1 = (undefined && undefined.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
517
974
|
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
@@ -522,6 +979,7 @@ var __awaiter$1 = (undefined && undefined.__awaiter) || function (thisArg, _argu
|
|
|
522
979
|
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
523
980
|
});
|
|
524
981
|
};
|
|
982
|
+
const diff = create();
|
|
525
983
|
const defaultConfig = {
|
|
526
984
|
/* Your segment writeKey */
|
|
527
985
|
writeKey: null,
|
|
@@ -532,6 +990,7 @@ const defaultConfig = {
|
|
|
532
990
|
echoEvents: false,
|
|
533
991
|
cookieDomain: undefined,
|
|
534
992
|
runtime: undefined,
|
|
993
|
+
fetchTimeoutMs: undefined,
|
|
535
994
|
s2s: undefined,
|
|
536
995
|
};
|
|
537
996
|
const parseQuery = (qs) => {
|
|
@@ -832,13 +1291,22 @@ function adjustPayload(payload, config, storage, s2s) {
|
|
|
832
1291
|
delete withContext.options;
|
|
833
1292
|
return withContext;
|
|
834
1293
|
}
|
|
1294
|
+
function isDiff(obj) {
|
|
1295
|
+
const keys = Object.keys(obj);
|
|
1296
|
+
return keys.length === 1 && keys[0] === "__diff";
|
|
1297
|
+
}
|
|
835
1298
|
function processDestinations(destinations, method, originalEvent, debug, analyticsInstance) {
|
|
836
1299
|
return __awaiter$1(this, void 0, void 0, function* () {
|
|
837
1300
|
const promises = [];
|
|
838
1301
|
for (const destination of destinations) {
|
|
839
1302
|
let newEvents = [originalEvent];
|
|
840
1303
|
if (destination.newEvents) {
|
|
841
|
-
|
|
1304
|
+
try {
|
|
1305
|
+
newEvents = destination.newEvents.map(e => e === "same" ? originalEvent : isDiff(e) ? diff.patch(originalEvent, e.__diff) : e);
|
|
1306
|
+
}
|
|
1307
|
+
catch (e) {
|
|
1308
|
+
console.error(`[JITSU] Error applying '${destination.id}' changes to event: ${e === null || e === void 0 ? void 0 : e.message}`, e);
|
|
1309
|
+
}
|
|
842
1310
|
}
|
|
843
1311
|
const credentials = Object.assign(Object.assign({}, destination.credentials), destination.options);
|
|
844
1312
|
if (destination.deviceOptions.type === "internal-plugin") {
|
|
@@ -941,6 +1409,12 @@ function send(method, payload, jitsuConfig, instance, store) {
|
|
|
941
1409
|
// console.log(`[JITSU] Sending event to ${url}: `, JSON.stringify(payload, null, 2));
|
|
942
1410
|
// }
|
|
943
1411
|
const adjustedPayload = adjustPayload(payload, jitsuConfig, store, s2s);
|
|
1412
|
+
const abortController = jitsuConfig.fetchTimeoutMs ? new AbortController() : undefined;
|
|
1413
|
+
const abortTimeout = jitsuConfig.fetchTimeoutMs
|
|
1414
|
+
? setTimeout(() => {
|
|
1415
|
+
abortController.abort();
|
|
1416
|
+
}, jitsuConfig.fetchTimeoutMs)
|
|
1417
|
+
: undefined;
|
|
944
1418
|
const authHeader = jitsuConfig.writeKey ? { "X-Write-Key": jitsuConfig.writeKey } : {};
|
|
945
1419
|
let fetchResult;
|
|
946
1420
|
try {
|
|
@@ -948,7 +1422,11 @@ function send(method, payload, jitsuConfig, instance, store) {
|
|
|
948
1422
|
method: "POST",
|
|
949
1423
|
headers: Object.assign(Object.assign({ "Content-Type": "application/json" }, authHeader), debugHeader),
|
|
950
1424
|
body: JSON.stringify(adjustedPayload),
|
|
1425
|
+
signal: abortController === null || abortController === void 0 ? void 0 : abortController.signal,
|
|
951
1426
|
});
|
|
1427
|
+
if (abortTimeout) {
|
|
1428
|
+
clearTimeout(abortTimeout);
|
|
1429
|
+
}
|
|
952
1430
|
}
|
|
953
1431
|
catch (e) {
|
|
954
1432
|
throw new Error(`Calling ${url} failed: ${e.message}`);
|
|
@@ -1185,15 +1663,15 @@ function createUnderlyingAnalyticsInstance(opts, rt, plugins = []) {
|
|
|
1185
1663
|
}, setAnonymousId: (id) => {
|
|
1186
1664
|
if (opts.debug) {
|
|
1187
1665
|
console.log("[JITSU DEBUG] Setting anonymous id to " + id);
|
|
1188
|
-
//Workaround for analytics.js bug. Underlying setAnonymousId doesn't work set the id immediately,
|
|
1189
|
-
//so we got to it manually here. See https://github.com/jitsucom/jitsu/issues/1060
|
|
1190
|
-
storage.setItem("__anon_id", id);
|
|
1191
|
-
const userState = analytics.user();
|
|
1192
|
-
if (userState) {
|
|
1193
|
-
userState.anonymousId = id;
|
|
1194
|
-
}
|
|
1195
|
-
analytics.setAnonymousId(id);
|
|
1196
1666
|
}
|
|
1667
|
+
//Workaround for analytics.js bug. Underlying setAnonymousId doesn't work set the id immediately,
|
|
1668
|
+
//so we got to it manually here. See https://github.com/jitsucom/jitsu/issues/1060
|
|
1669
|
+
storage.setItem("__anon_id", id);
|
|
1670
|
+
const userState = analytics.user();
|
|
1671
|
+
if (userState) {
|
|
1672
|
+
userState.anonymousId = id;
|
|
1673
|
+
}
|
|
1674
|
+
analytics.setAnonymousId(id);
|
|
1197
1675
|
}, group(groupId, traits, options, callback) {
|
|
1198
1676
|
return __awaiter(this, void 0, void 0, function* () {
|
|
1199
1677
|
const results = [];
|
package/dist/jitsu.d.ts
CHANGED
|
@@ -43,6 +43,10 @@ type JitsuOptions = {
|
|
|
43
43
|
* If not set at all, it will be detected automatically by presence of `window` object
|
|
44
44
|
*/
|
|
45
45
|
s2s?: boolean;
|
|
46
|
+
/**
|
|
47
|
+
* Timeout for fetch requests. Default value: 5000
|
|
48
|
+
*/
|
|
49
|
+
fetchTimeoutMs?: number;
|
|
46
50
|
};
|
|
47
51
|
type PersistentStorage = {
|
|
48
52
|
getItem: (key: string, options?: any) => any;
|