@picked/client 0.0.10-next.4 → 0.0.10
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/cjs/index.js +1 -1
- package/dist/cjs/server/index.js +1 -1
- package/dist/esm/index.js +74 -71
- package/dist/esm/server/index.js +1 -1
- package/dist/{experience-instance-XlIuqLrL.js → experience-instance-BEKoIaYp.js} +46 -37
- package/dist/{experience-instance-DXWLnF-R.cjs → experience-instance-D4dHslLZ.cjs} +1 -1
- package/dist/types/entities/experience-instance/experience-instance.d.ts.map +1 -1
- package/dist/types/picked.d.ts.map +1 -1
- package/dist/types/utils/user-session.d.ts +2 -1
- package/dist/types/utils/user-session.d.ts.map +1 -1
- package/package.json +1 -1
package/dist/cjs/index.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";var T=Object.defineProperty;var U=(t,e,s)=>e in t?T(t,e,{enumerable:!0,configurable:!0,writable:!0,value:s}):t[e]=s;var h=(t,e,s)=>U(t,typeof e!="symbol"?e+"":e,s);Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const f=require("effector"),S=require("@withease/factories"),F=require("../experience-instance-DXWLnF-R.cjs"),x=require("../logger-BsmHUUw1.cjs"),k=require("../storage-LI3UdcCr.cjs"),V=require("../id-BKIWbSTy.cjs"),N=require("../object-BbFTsGh3.cjs"),v=require("../supports-YvpQZxbh.cjs"),O=f.createDomain("experience"),K=S.createFactory(({client:t,experience:e})=>{const s=O.store(e),o=f.createApi(s,{merge(n,p){return{...n,...p.experience}}}),i=s.map(n=>({type:n.type,name:n.name,decisionLogic:n.decide,targetSelectors:n.targets})),l=t.components.listStore.map(n=>n.find(p=>p.name===`experience:${e.id}`)||n.find(p=>p.name==="experience"),{skipVoid:!1}),r=s.map(n=>({steps:n.steps,nodes:n.nodes,edges:n.edges,conditionals:n.conditionals}));return{id:e.id,configStore:i,treeStore:r,componentStore:l,merge:o.merge}});function z(t){return S.invoke(K,t)}const q=S.createFactory(({client:t})=>{const e=O.store({}),s=f.createApi(e,{register(r,n){return{...r,[n.id]:n}}});function o(r){const n=e.getState()[r.id];if(n){n.merge({experience:r,strategy:"override"});return}const p=z({client:t,experience:r});s.register(p)}const i=e.map(r=>Object.values(r));function l(r){return e.map(n=>n[r],{skipVoid:!1})}return{register:o,getById:l,listStore:i}});function _(t){return S.invoke(q,t)}const H=(t,e)=>{e.register(t)},L=(t,e)=>{const{targetSelectors:s}=e.configStore.getState(),o=F.getTargetElements(s,e.id);o.forEach(({elements:l})=>l.forEach(r=>F.tagTargetElement(r,e.id))),F.createAppHosts(o,e.id).forEach(l=>{t.experienceInstances.spawn(e,l)})},A=async t=>{await Promise.all(t.experiences.listStore.getState().map(async e=>{await W(t,e)&&L(t,e)}))},W=async(t,e)=>{const{type:s,decisionLogic:o,targetSelectors:i}=e.configStore.getState();return F.getTargetElements(i,e.id).length<1?!1:s==="funnel"?o?await F.evaluateRuleLogic(t,o)===!0:!1:i.length===0?!1:F.isRulesLogic(o)?await F.evaluateRuleLogic(t,o)===!0:!0},G=(t,e,s)=>{const o=e.name,i=e.setup(t);if(i){const l=s[o]??{};s[o]=Object.freeze({...l,...i})}},Y=f.createDomain("component"),J=S.createFactory(({client:t,component:e,name:s})=>{const o=t.frameworks.getByName(e.frameworkName);return{name:s,component:e,frameworkStore:o}});function Q(t){return S.invoke(J,t)}const X=S.createFactory(({client:t})=>{const e=Y.store({}),s=f.createApi(e,{register(r,n){return{...r,[n.name]:n}}});function o(r,n){e.getState()[r]&&x.logger("warn",`Component '${r}' already registered. Registering again will override the previous registration.`);const w=Q({client:t,name:r,component:n});s.register(w)}const i=e.map(r=>Object.values(r));function l(r){return e.map(n=>n[r],{skipVoid:!1})}return{register:o,getByName:l,listStore:i}});function Z(t){return S.invoke(X,t)}const $=(t,e,s)=>{s.register(t,e)},ee=f.createDomain("framework"),te=S.createFactory(({client:t})=>{const e=ee.store({}),s=f.createApi(e,{register(r,n){return{...r,[n.name]:n.framework}}});function o(r,n){e.getState()[r]&&x.logger("warn",`Framework '${r}' already registered. Registering again will override the previous registration.`),s.register({name:r,framework:n})}const i=e.map(r=>Object.values(r));function l(r){return e.map(n=>n[r],{skipVoid:!1})}return{register:o,getByName:l,listStore:i}});function re(t){return S.invoke(te,t)}const se=(t,e)=>{e.register(t.name,t)},ne=6e3,B=k.createStorageKey("last_ping","global"),oe=t=>`${t}/api/v1/ping`,ie=async t=>{try{const e=Date.now(),s=localStorage.getItem(B);if(s&&e-parseInt(s)<ne)return!0;const o=oe(t.apiUrl),i={projectId:t.projectId,path:window.location.pathname},l=JSON.stringify(i),r={"Content-Type":"application/json"},n=document.getElementById("picked_script"),p=n==null?void 0:n.dataset.verceltoken;p&&(r["x-vercel-protection-bypass"]=p);const c=(await fetch(o,{method:"POST",headers:r,body:l})).ok;return c&&localStorage.setItem(B,e.toString()),c}catch(e){return x.logger("error",e),!1}};function ae(t){const e=typeof window<"u",s={client:t,responses:t.responses.listStore.getState(),fields:t.fields.listStore.getState(),location:e?window.location:void 0,document:e?window.document:void 0,sessionStorage:e?window.sessionStorage:void 0,localStorage:e?window.localStorage:void 0};return Object.freeze(s)}const ce=f.createDomain("predicate"),ue=S.createFactory(({client:t})=>{const e=ce.store({}),s=f.createApi(e,{register(r,n){return{...r,[n.name]:{name:n.name,predicate:n.predicate}}}});function o(r,n){e.getState()[r]&&x.logger("warn",`Predicate '${r}' already registered. Registering again will override the previous registration.`),s.register(Object.freeze({name:r,predicate:n}))}const i=e.map(r=>Object.values(r));function l(r){return e.map(n=>n[r],{skipVoid:!1})}return{register:o,getByName:l,listStore:i}});function le(t){return S.invoke(ue,t)}const pe=(t,e,s)=>{s.register(t,e)},j=f.createDomain("feature"),ge=S.createFactory(()=>{const t=j.store({}),e=j.store([]),s=f.createApi(t,{register(c,m){return{...c,[m.id]:m.feature}}});function o(c,m){t.getState()[c]&&x.logger("warn",`Feature '${c}' already registered. Registering again will override the previous registration.`);const g={id:c,feature:{...m,id:c}};s.register(Object.freeze({id:c,feature:g}))}const i=f.createEffect(async({id:c,key:m,storage:a="local"})=>{const g=k.createStorageKey(`feature:${c}:${m}`,"global"),y=(a==="session"?k.sessionStore:k.localStore).get(g).boolean();if(y!==null)return{id:c,bucket:y}}),l=f.createEffect(c=>{if(!c)return null;const m=k.createStorageKey(`feature:${c.id}:${c.key}`,"global");(c.storage==="session"?k.sessionStore:k.localStore).set(m,c.bucket)}),r=new Map,n=f.attach({source:{allFeaturesStore:t,resolvedFeaturesStore:e},effect:async({allFeaturesStore:c,resolvedFeaturesStore:m},{id:a,decide:g,key:d})=>{const y=m.find(E=>E.id===a);if(y)return y;const u=c[a];if(!u)throw new Error(`Feature with id '${a}' not found`);const b=r.get(`${a}:${d}`);if(b!==void 0){const E=await b;return{id:u.id,bucket:E,storage:u.feature.storage}}const I=g();r.set(`${a}:${d}`,I);const P=await I;return{id:u.id,bucket:P,storage:u.feature.storage}}});f.sample({clock:s.register,fn:c=>{const{id:m,feature:a}=c;return{id:m,key:a.feature.key,storage:a.feature.storage}},target:i}),f.sample({source:e,clock:[i.doneData,n.doneData],fn:(c,m)=>!m||c.some(a=>a.id===m.id)?c:[...c,m],target:e}),f.sample({source:t,clock:n.doneData,fn:(c,m)=>{var u;const{id:a,bucket:g,storage:d}=m,y=(u=c[a])==null?void 0:u.feature.key;return y?{key:y,id:a,bucket:g,storage:d}:null},target:l});const p=f.combine({allFeaturesStore:t,resolvedFeaturesStore:e}).map(({allFeaturesStore:c,resolvedFeaturesStore:m})=>Object.values(c).map(a=>{const g=m.find(d=>d.id===a.id);return g?{id:a.id,name:a.feature.name,key:a.feature.key,getBucket:()=>({id:a.id,bucket:g.bucket}),isResolved:!0}:{id:a.id,name:a.feature.name,key:a.feature.key,getBucket:async()=>await n(a.feature),isResolved:!1}}));function w(c){return t.map(m=>m[c],{skipVoid:!1})}return{register:o,getByName:w,listStore:p}});function de(){return S.invoke(ge)}const fe=(t,e,s)=>{s.register(t,e)},R=f.createDomain("history");function C(t,e){return{id:V.generateId(`history-entry-${Date.now()}-${Math.random()}}`),node:e,at:Date.now(),experienceId:t}}const me=S.createFactory(()=>{const t=R.store({entries:[]}),e=R.event(),s=R.event(),o=R.event(),i=R.event();t.on(e,(r,n)=>({entries:[...r.entries,C(n.experienceId,n.node)]})),t.on(s,(r,n)=>({entries:[...r.entries.slice(0,-1),C(n.experienceId,n.node)]})),t.on(i,(r,n)=>n);function l(r,n){const p={lastStepIndex:-1,secondLastStepIndex:-1};for(let w=r.length-1;w>=0;w--){const c=r[w],m=c==null?void 0:c.node;if(!(!m||!F.isStepNode(m))&&!(n&&(c==null?void 0:c.experienceId)!==n))if(p.lastStepIndex===-1)p.lastStepIndex=w;else{p.secondLastStepIndex=w;break}}return p}return t.on(o,(r,n)=>{const{secondLastStepIndex:p}=l(r.entries,n.experienceId),w=p!==-1?r.entries.slice(0,p+1):r.entries;return{...r,entries:w}}),{push:e,replace:s,back:o,restore:i,entriesStore:t.map(r=>r.entries)}});function ye(){return S.invoke(me)}const he=()=>f.createEvent(),Se=f.createDomain("field"),ve=S.createFactory(()=>{const t=Se.store({}),e=f.createApi(t,{register(r,n){return{...r,[n.field.id]:n.field}}});function s(r){e.register({field:r})}const o=t.map(r=>Object.values(r));function i(r){return t.map(n=>n[r]||null)}function l(r){return t.map(n=>Object.values(n).find(p=>p.name===r)||null)}return{register:s,getById:i,listStore:o,getByName:l}});function ke(){return S.invoke(ve)}const we=(t,e)=>{e.register(t)},Fe=f.createDomain("response"),be=S.createFactory(({client:t})=>{const e=Fe.store({}),s=f.createEvent(),o=f.createEvent(),i=f.createApi(e,{register(a,g){return{...a,[g.fieldId]:g.response}},registerBatch(a,g){return{...a,...g}},clear(a,g){const{[g]:d,...y}=a;return y},clearAll(){return{}}});function l(a,g){i.register({fieldId:a,response:g})}async function r(a){const g=[];return await Promise.allSettled(Object.entries(a).map(async([d,y])=>{let u=y;const b=t.fields.getById(d).getState();if(!b){g.push({fieldId:d,userMessage:`Field '${d}' not found`,systemMessage:`No field with ID '${d}' exists. Available field IDs are: ${Object.keys(t.fields.listStore.getState()).join(",")}.`,value:u});return}if(b.multiple&&(typeof u=="string"||typeof u=="number"||typeof u=="boolean")&&(u=[u]),b.validation&&!N.isEmpty(b.validation)){const I=await F.evaluateRuleLogic(t,b.validation,{$input:u});if(typeof I=="string"){g.push({fieldId:d,userMessage:I,systemMessage:`Field validation resulted in an error: ${I}.`,value:u});return}if(I===!1){g.push({fieldId:d,userMessage:"This field is invalid",systemMessage:"Field validation resulted in an unspecified error.",value:u});return}}if(b.required&&(typeof u>"u"||u===null||u===""||Array.isArray(u)&&!u.length)){g.push({fieldId:d,userMessage:"This field is required",systemMessage:"Field is required.",value:u});return}if(!b.multiple&&Array.isArray(u)&&u.length>1){g.push({fieldId:d,userMessage:"This field expects a single response",systemMessage:"Field expects a single response.",value:u});return}if(b.options){const I=b.options.map(E=>E.value),P=Array.isArray(u)?u:[u];Array.isArray(u)&&(P.every(E=>I.includes(E))||g.push({fieldId:d,userMessage:"This field expects a valid option",systemMessage:`Field expects a valid option. Valid options are: ${I.join(", ")}`,value:u}))}})),{responsesToCommit:a,validationErrors:g}}async function n(a){const{responsesToCommit:g,validationErrors:d}=await r(a);return d.length?{errors:d}:(i.registerBatch(g),{errors:[]})}const p=e.map(a=>a),w=e.map(a=>Object.keys(a).map(d=>({fieldId:d,value:a[d]})));function c(a){const g=t.fields.getById(a),d=e.map(y=>y[a]||null);return f.combine({f:g,r:d},({f:y,r:u})=>u||(y!=null&&y.defaultValue?y.defaultValue:null))}function m(a){const g=t.fields.getByName(a);return f.combine({f:g,s:e},({f:d,s:y})=>{const u=d&&y[d.id]||null;return u||(d!=null&&d.defaultValue?d.defaultValue:null)})}return f.sample({clock:s,target:i.clearAll}),f.sample({clock:o,target:i.clear}),{register:l,clearAll:s,clear:o,commit:n,getResponsesToCommit:r,listStore:w,getAllStore:p,getByFieldId:c,getByFieldName:m}});function Ie(t){return S.invoke(be,t)}const xe=()=>"0.0.10-next.4";function Ee(){if(v.supportsDocument()){const t=[document.currentScript,document.getElementById("picked_script"),document.getElementById("picked"),document.getElementById("cvly"),document.getElementById("cvly-x")];for(const e of t)if(e!=null&&e.dataset.api)return e.dataset.api}return"https://api.picked.app"}function Re(){if(!v.supportsWindow())return{};const t=new URLSearchParams(window.location.search),e={},s=new Set;for(const[i]of t.entries())i.startsWith("picked-")&&s.add(i);for(const i of s){const l=i.replace("picked-","");e[l]=t.getAll(i)}const o=k.createStorageKey("s");if(s.size>0)k.sessionStore.set(o,e);else{const i=k.sessionStore.get(o);if(i)return i.json()||{}}return e}function Pe(){if(v.supportsCryptoRandomUUID())return crypto.randomUUID();const t=Date.now().toString(36),e=Math.random().toString(36).substring(2,15),s=Math.random().toString(36).substring(2,15),o=Math.random().toString(36).substring(2,15);return`${t}-${e}-${s}-${o}`}const De=()=>({id:Pe()}),Ae=k.createStorageKey("session","global"),$e=()=>{if(!v.supportsLocalStorage())return null;const t=k.localStore.get(Ae);let e=t.isSet()?t.json():null;return e||(e=De(),t.set(e)),e},Be=()=>$e();class D{constructor(e){h(this,"options");h(this,"isReady",!1);h(this,"project");h(this,"plugins",{});h(this,"eventBus",he());h(this,"organizationId");h(this,"projectId");h(this,"apiUrl");h(this,"session");h(this,"searchParams",Re());h(this,"history",ye());h(this,"components",Z({client:this}));h(this,"experienceInstances",F.createExperienceInstanceIndex({client:this}));h(this,"experiences",_({client:this}));h(this,"frameworks",re({client:this}));h(this,"predicates",le({client:this}));h(this,"features",de());h(this,"responses",Ie({client:this}));h(this,"fields",ke());x.logger("info","Picked client initializing."),this.organizationId=e.organizationId,this.projectId=e.projectId,this.options=Object.freeze(e),this.apiUrl=e.apiUrl||Ee(),this.session=Be(),this.setupPlugins(),this.setupFeatures(),this.setupPredicates(),this.eventBus({type:"initialized",version:xe()}),x.logger("info","Picked client initialized.")}start(){ie(this),(async()=>{v.supportsDocument()&&(document.body&&A(this),await F.domInteractive(),await A(this),this.eventBus({type:"ready"}),this.isReady=!0,this.session&&this.eventBus({type:"session",...this.session}))})()}registerFramework(e){se(e,this.frameworks)}registerComponent(e,s){$(e,s,this.components)}registerPlugin(e){G(this,e,this.plugins)}registerFeature(e,s){fe(e,s,this.features)}registerPredicate(e,s){pe(e,s,this.predicates)}registerField(e){we(e,this.fields)}registerExperience(e){e.component&&$(`experience:${e.id}`,e.component,this.components),H(e,this.experiences)}getStateSnapshot(){return ae(this)}async launchExperienceById(e){const s=this.experiences.getById(e).getState();if(!s){x.logger("warn",`Experience with id '${e}' not found.`);return}L(this,s)}setupPlugins(){var e;(e=this.options.plugins)==null||e.forEach(s=>{if(Array.isArray(s)){s.forEach(i=>{this.registerPlugin(i)});return}const o=typeof s=="function"?s():s;if(Array.isArray(o)){o.forEach(i=>this.registerPlugin(i));return}this.registerPlugin(o)})}setupFeatures(){const e=this.options.features;e&&(Object.entries(e).forEach(([s,o])=>{const i=typeof o=="function"?o():o;this.registerFeature(s,i)}),this.searchParams.feature&&this.searchParams.feature.forEach(s=>{try{const[o,i]=s.split(":");if(!o||!i)return;let l=i;l==="true"&&(l=!0),l==="false"&&(l=!1),this.registerFeature(o,{key:`${l}`,name:o,decide:()=>l,storage:"session"})}catch{}}))}setupPredicates(){const e=this.options.predicates;e&&Object.entries(e).forEach(([s,o])=>{if(typeof o!="function"){x.logger("warn",`Predicate "${s}" is not a function.`);return}this.registerPredicate(s,o)})}getPluginConfig(e){return this.plugins[e]??{}}}h(D,"logger",x.logger);function M(t){var e;return((e=t.options)==null?void 0:e.some(s=>"condition"in s))??!1}function je(t){return t.some(e=>e.condition||M(e))}async function Ce(t,e){return e.length===0||!je(e)?e:(await Promise.all(e.map(async o=>{if(!(o.condition?await F.evaluateRuleLogic(t,o.condition):!0))return null;if(!o.options||!M(o))return o;const r=(await Promise.all(o.options.map(async p=>p.condition?await F.evaluateRuleLogic(t,p.condition)?p:null:p))).filter(p=>p!==null);return r.length===o.options.length?o:r.length===0?null:{...o,options:r}}))).filter(o=>o!==null)}const Oe=t=>{const e=new D(t);return v.bindClient(e),e};exports.evaluateRuleLogic=F.evaluateRuleLogic;exports.isPickedRoot=F.isPickedRoot;exports.createStorageKey=k.createStorageKey;exports.localStore=k.localStore;exports.sessionStore=k.sessionStore;exports.subscribe=k.subscribe;exports.supportsCookies=v.supportsCookies;exports.supportsCryptoRandomUUID=v.supportsCryptoRandomUUID;exports.supportsDocument=v.supportsDocument;exports.supportsHistory=v.supportsHistory;exports.supportsIntersectionObserver=v.supportsIntersectionObserver;exports.supportsLocalStorage=v.supportsLocalStorage;exports.supportsLocation=v.supportsLocation;exports.supportsSessionStorage=v.supportsSessionStorage;exports.supportsShadowRoot=v.supportsShadowRoot;exports.supportsWebComponents=v.supportsWebComponents;exports.supportsWindow=v.supportsWindow;exports.Picked=D;exports.createClient=Oe;exports.getStepFields=Ce;
|
|
1
|
+
"use strict";var T=Object.defineProperty;var U=(t,e,s)=>e in t?T(t,e,{enumerable:!0,configurable:!0,writable:!0,value:s}):t[e]=s;var h=(t,e,s)=>U(t,typeof e!="symbol"?e+"":e,s);Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const f=require("effector"),S=require("@withease/factories"),F=require("../experience-instance-D4dHslLZ.cjs"),x=require("../logger-BsmHUUw1.cjs"),w=require("../storage-LI3UdcCr.cjs"),V=require("../id-BKIWbSTy.cjs"),N=require("../object-BbFTsGh3.cjs"),v=require("../supports-YvpQZxbh.cjs"),L=f.createDomain("experience"),z=S.createFactory(({client:t,experience:e})=>{const s=L.store(e),o=f.createApi(s,{merge(n,p){return{...n,...p.experience}}}),i=s.map(n=>({type:n.type,name:n.name,decisionLogic:n.decide,targetSelectors:n.targets})),l=t.components.listStore.map(n=>n.find(p=>p.name===`experience:${e.id}`)||n.find(p=>p.name==="experience"),{skipVoid:!1}),r=s.map(n=>({steps:n.steps,nodes:n.nodes,edges:n.edges,conditionals:n.conditionals}));return{id:e.id,configStore:i,treeStore:r,componentStore:l,merge:o.merge}});function q(t){return S.invoke(z,t)}const K=S.createFactory(({client:t})=>{const e=L.store({}),s=f.createApi(e,{register(r,n){return{...r,[n.id]:n}}});function o(r){const n=e.getState()[r.id];if(n){n.merge({experience:r,strategy:"override"});return}const p=q({client:t,experience:r});s.register(p)}const i=e.map(r=>Object.values(r));function l(r){return e.map(n=>n[r],{skipVoid:!1})}return{register:o,getById:l,listStore:i}});function _(t){return S.invoke(K,t)}const H=(t,e)=>{e.register(t)},O=(t,e)=>{const{targetSelectors:s}=e.configStore.getState(),o=F.getTargetElements(s,e.id);o.forEach(({elements:l})=>l.forEach(r=>F.tagTargetElement(r,e.id))),F.createAppHosts(o,e.id).forEach(l=>{t.experienceInstances.spawn(e,l)})},$=async t=>{await Promise.all(t.experiences.listStore.getState().map(async e=>{await W(t,e)&&O(t,e)}))},W=async(t,e)=>{const{type:s,decisionLogic:o,targetSelectors:i}=e.configStore.getState();return F.getTargetElements(i,e.id).length<1?!1:s==="funnel"?o?await F.evaluateRuleLogic(t,o)===!0:!1:i.length===0?!1:F.isRulesLogic(o)?await F.evaluateRuleLogic(t,o)===!0:!0},G=(t,e,s)=>{const o=e.name,i=e.setup(t);if(i){const l=s[o]??{};s[o]=Object.freeze({...l,...i})}},J=f.createDomain("component"),Y=S.createFactory(({client:t,component:e,name:s})=>{const o=t.frameworks.getByName(e.frameworkName);return{name:s,component:e,frameworkStore:o}});function Q(t){return S.invoke(Y,t)}const X=S.createFactory(({client:t})=>{const e=J.store({}),s=f.createApi(e,{register(r,n){return{...r,[n.name]:n}}});function o(r,n){e.getState()[r]&&x.logger("warn",`Component '${r}' already registered. Registering again will override the previous registration.`);const k=Q({client:t,name:r,component:n});s.register(k)}const i=e.map(r=>Object.values(r));function l(r){return e.map(n=>n[r],{skipVoid:!1})}return{register:o,getByName:l,listStore:i}});function Z(t){return S.invoke(X,t)}const A=(t,e,s)=>{s.register(t,e)},ee=f.createDomain("framework"),te=S.createFactory(({client:t})=>{const e=ee.store({}),s=f.createApi(e,{register(r,n){return{...r,[n.name]:n.framework}}});function o(r,n){e.getState()[r]&&x.logger("warn",`Framework '${r}' already registered. Registering again will override the previous registration.`),s.register({name:r,framework:n})}const i=e.map(r=>Object.values(r));function l(r){return e.map(n=>n[r],{skipVoid:!1})}return{register:o,getByName:l,listStore:i}});function re(t){return S.invoke(te,t)}const se=(t,e)=>{e.register(t.name,t)},ne=6e3,B=w.createStorageKey("last_ping","global"),oe=t=>`${t}/api/v1/ping`,ie=async t=>{try{const e=Date.now(),s=localStorage.getItem(B);if(s&&e-parseInt(s)<ne)return!0;const o=oe(t.apiUrl),i={projectId:t.projectId,path:window.location.pathname},l=JSON.stringify(i),r={"Content-Type":"application/json"},n=document.getElementById("picked_script"),p=n==null?void 0:n.dataset.verceltoken;p&&(r["x-vercel-protection-bypass"]=p);const c=(await fetch(o,{method:"POST",headers:r,body:l})).ok;return c&&localStorage.setItem(B,e.toString()),c}catch(e){return x.logger("error",e),!1}};function ae(t){const e=typeof window<"u",s={client:t,responses:t.responses.listStore.getState(),fields:t.fields.listStore.getState(),location:e?window.location:void 0,document:e?window.document:void 0,sessionStorage:e?window.sessionStorage:void 0,localStorage:e?window.localStorage:void 0};return Object.freeze(s)}const ce=f.createDomain("predicate"),ue=S.createFactory(({client:t})=>{const e=ce.store({}),s=f.createApi(e,{register(r,n){return{...r,[n.name]:{name:n.name,predicate:n.predicate}}}});function o(r,n){e.getState()[r]&&x.logger("warn",`Predicate '${r}' already registered. Registering again will override the previous registration.`),s.register(Object.freeze({name:r,predicate:n}))}const i=e.map(r=>Object.values(r));function l(r){return e.map(n=>n[r],{skipVoid:!1})}return{register:o,getByName:l,listStore:i}});function le(t){return S.invoke(ue,t)}const pe=(t,e,s)=>{s.register(t,e)},j=f.createDomain("feature"),ge=S.createFactory(()=>{const t=j.store({}),e=j.store([]),s=f.createApi(t,{register(c,m){return{...c,[m.id]:m.feature}}});function o(c,m){t.getState()[c]&&x.logger("warn",`Feature '${c}' already registered. Registering again will override the previous registration.`);const g={id:c,feature:{...m,id:c}};s.register(Object.freeze({id:c,feature:g}))}const i=f.createEffect(async({id:c,key:m,storage:a="local"})=>{const g=w.createStorageKey(`feature:${c}:${m}`,"global"),y=(a==="session"?w.sessionStore:w.localStore).get(g).boolean();if(y!==null)return{id:c,bucket:y}}),l=f.createEffect(c=>{if(!c)return null;const m=w.createStorageKey(`feature:${c.id}:${c.key}`,"global");(c.storage==="session"?w.sessionStore:w.localStore).set(m,c.bucket)}),r=new Map,n=f.attach({source:{allFeaturesStore:t,resolvedFeaturesStore:e},effect:async({allFeaturesStore:c,resolvedFeaturesStore:m},{id:a,decide:g,key:d})=>{const y=m.find(E=>E.id===a);if(y)return y;const u=c[a];if(!u)throw new Error(`Feature with id '${a}' not found`);const b=r.get(`${a}:${d}`);if(b){const E=await b;return{id:u.id,bucket:E,storage:u.feature.storage}}const I=g();r.set(`${a}:${d}`,I);const P=await I;return{id:u.id,bucket:P,storage:u.feature.storage}}});f.sample({clock:s.register,fn:c=>{const{id:m,feature:a}=c;return{id:m,key:a.feature.key,storage:a.feature.storage}},target:i}),f.sample({source:e,clock:[i.doneData,n.doneData],fn:(c,m)=>!m||c.some(a=>a.id===m.id)?c:[...c,m],target:e}),f.sample({source:t,clock:n.doneData,fn:(c,m)=>{var u;const{id:a,bucket:g,storage:d}=m,y=(u=c[a])==null?void 0:u.feature.key;return y?{key:y,id:a,bucket:g,storage:d}:null},target:l});const p=f.combine({allFeaturesStore:t,resolvedFeaturesStore:e}).map(({allFeaturesStore:c,resolvedFeaturesStore:m})=>Object.values(c).map(a=>{const g=m.find(d=>d.id===a.id);return g?{id:a.id,name:a.feature.name,key:a.feature.key,getBucket:()=>({id:a.id,bucket:g.bucket}),isResolved:!0}:{id:a.id,name:a.feature.name,key:a.feature.key,getBucket:async()=>await n(a.feature),isResolved:!1}}));function k(c){return t.map(m=>m[c],{skipVoid:!1})}return{register:o,getByName:k,listStore:p}});function de(){return S.invoke(ge)}const fe=(t,e,s)=>{s.register(t,e)},R=f.createDomain("history");function C(t,e){return{id:V.generateId(`history-entry-${Date.now()}-${Math.random()}}`),node:e,at:Date.now(),experienceId:t}}const me=S.createFactory(()=>{const t=R.store({entries:[]}),e=R.event(),s=R.event(),o=R.event(),i=R.event();t.on(e,(r,n)=>({entries:[...r.entries,C(n.experienceId,n.node)]})),t.on(s,(r,n)=>({entries:[...r.entries.slice(0,-1),C(n.experienceId,n.node)]})),t.on(i,(r,n)=>n);function l(r,n){const p={lastStepIndex:-1,secondLastStepIndex:-1};for(let k=r.length-1;k>=0;k--){const c=r[k],m=c==null?void 0:c.node;if(!(!m||!F.isStepNode(m))&&!(n&&(c==null?void 0:c.experienceId)!==n))if(p.lastStepIndex===-1)p.lastStepIndex=k;else{p.secondLastStepIndex=k;break}}return p}return t.on(o,(r,n)=>{const{secondLastStepIndex:p}=l(r.entries,n.experienceId),k=p!==-1?r.entries.slice(0,p+1):r.entries;return{...r,entries:k}}),{push:e,replace:s,back:o,restore:i,entriesStore:t.map(r=>r.entries)}});function ye(){return S.invoke(me)}const he=()=>f.createEvent(),Se=f.createDomain("field"),ve=S.createFactory(()=>{const t=Se.store({}),e=f.createApi(t,{register(r,n){return{...r,[n.field.id]:n.field}}});function s(r){e.register({field:r})}const o=t.map(r=>Object.values(r));function i(r){return t.map(n=>n[r]||null)}function l(r){return t.map(n=>Object.values(n).find(p=>p.name===r)||null)}return{register:s,getById:i,listStore:o,getByName:l}});function ke(){return S.invoke(ve)}const we=(t,e)=>{e.register(t)},Fe=f.createDomain("response"),be=S.createFactory(({client:t})=>{const e=Fe.store({}),s=f.createEvent(),o=f.createEvent(),i=f.createApi(e,{register(a,g){return{...a,[g.fieldId]:g.response}},registerBatch(a,g){return{...a,...g}},clear(a,g){const{[g]:d,...y}=a;return y},clearAll(){return{}}});function l(a,g){i.register({fieldId:a,response:g})}async function r(a){const g=[];return await Promise.allSettled(Object.entries(a).map(async([d,y])=>{let u=y;const b=t.fields.getById(d).getState();if(!b){g.push({fieldId:d,userMessage:`Field '${d}' not found`,systemMessage:`No field with ID '${d}' exists. Available field IDs are: ${Object.keys(t.fields.listStore.getState()).join(",")}.`,value:u});return}if(b.multiple&&(typeof u=="string"||typeof u=="number"||typeof u=="boolean")&&(u=[u]),b.validation&&!N.isEmpty(b.validation)){const I=await F.evaluateRuleLogic(t,b.validation,{$input:u});if(typeof I=="string"){g.push({fieldId:d,userMessage:I,systemMessage:`Field validation resulted in an error: ${I}.`,value:u});return}if(I===!1){g.push({fieldId:d,userMessage:"This field is invalid",systemMessage:"Field validation resulted in an unspecified error.",value:u});return}}if(b.required&&(typeof u>"u"||u===null||u===""||Array.isArray(u)&&!u.length)){g.push({fieldId:d,userMessage:"This field is required",systemMessage:"Field is required.",value:u});return}if(!b.multiple&&Array.isArray(u)&&u.length>1){g.push({fieldId:d,userMessage:"This field expects a single response",systemMessage:"Field expects a single response.",value:u});return}if(b.options){const I=b.options.map(E=>E.value),P=Array.isArray(u)?u:[u];Array.isArray(u)&&(P.every(E=>I.includes(E))||g.push({fieldId:d,userMessage:"This field expects a valid option",systemMessage:`Field expects a valid option. Valid options are: ${I.join(", ")}`,value:u}))}})),{responsesToCommit:a,validationErrors:g}}async function n(a){const{responsesToCommit:g,validationErrors:d}=await r(a);return d.length?{errors:d}:(i.registerBatch(g),{errors:[]})}const p=e.map(a=>a),k=e.map(a=>Object.keys(a).map(d=>({fieldId:d,value:a[d]})));function c(a){const g=t.fields.getById(a),d=e.map(y=>y[a]||null);return f.combine({f:g,r:d},({f:y,r:u})=>u||(y!=null&&y.defaultValue?y.defaultValue:null))}function m(a){const g=t.fields.getByName(a);return f.combine({f:g,s:e},({f:d,s:y})=>{const u=d&&y[d.id]||null;return u||(d!=null&&d.defaultValue?d.defaultValue:null)})}return f.sample({clock:s,target:i.clearAll}),f.sample({clock:o,target:i.clear}),{register:l,clearAll:s,clear:o,commit:n,getResponsesToCommit:r,listStore:k,getAllStore:p,getByFieldId:c,getByFieldName:m}});function Ie(t){return S.invoke(be,t)}const xe=()=>"0.0.10";function Ee(){if(v.supportsDocument()){const t=[document.currentScript,document.getElementById("picked_script"),document.getElementById("picked"),document.getElementById("cvly"),document.getElementById("cvly-x")];for(const e of t)if(e!=null&&e.dataset.api)return e.dataset.api}return"https://api.picked.app"}function Re(){if(!v.supportsWindow())return{};const t=new URLSearchParams(window.location.search),e={},s=new Set;for(const[i]of t.entries())i.startsWith("picked-")&&s.add(i);for(const i of s){const l=i.replace("picked-","");e[l]=t.getAll(i)}const o=w.createStorageKey("s");if(s.size>0)w.sessionStore.set(o,e);else{const i=w.sessionStore.get(o);if(i)return i.json()||{}}return e}function Pe(){if(v.supportsCryptoRandomUUID())return crypto.randomUUID();const t=Date.now().toString(36),e=Math.random().toString(36).substring(2,15),s=Math.random().toString(36).substring(2,15),o=Math.random().toString(36).substring(2,15);return`${t}-${e}-${s}-${o}`}const De=()=>({id:Pe()}),$e=()=>{if(!v.supportsLocalStorage())return null;const t=w.localStore.get("session");let e=t.isSet()?t.json():null;return e||(e=De(),t.set(e)),e},Ae=t=>{const e=$e();return e&&t.eventBus({type:"session",...e}),e};class D{constructor(e){h(this,"options");h(this,"isReady",!1);h(this,"project");h(this,"plugins",{});h(this,"eventBus",he());h(this,"organizationId");h(this,"projectId");h(this,"apiUrl");h(this,"session");h(this,"searchParams",Re());h(this,"history",ye());h(this,"components",Z({client:this}));h(this,"experienceInstances",F.createExperienceInstanceIndex({client:this}));h(this,"experiences",_({client:this}));h(this,"frameworks",re({client:this}));h(this,"predicates",le({client:this}));h(this,"features",de());h(this,"responses",Ie({client:this}));h(this,"fields",ke());x.logger("info","Picked client initializing."),this.organizationId=e.organizationId,this.projectId=e.projectId,this.options=Object.freeze(e),this.apiUrl=e.apiUrl||Ee(),this.setupPlugins(),this.setupFeatures(),this.setupPredicates(),this.session=Ae(this),this.eventBus({type:"initialized",version:xe()}),x.logger("info","Picked client initialized.")}start(){ie(this),(async()=>{v.supportsDocument()&&(document.body&&await $(this),await F.domInteractive(),await $(this),this.eventBus({type:"ready"}),this.isReady=!0)})()}registerFramework(e){se(e,this.frameworks)}registerComponent(e,s){A(e,s,this.components)}registerPlugin(e){G(this,e,this.plugins)}registerFeature(e,s){fe(e,s,this.features)}registerPredicate(e,s){pe(e,s,this.predicates)}registerField(e){we(e,this.fields)}registerExperience(e){e.component&&A(`experience:${e.id}`,e.component,this.components),H(e,this.experiences)}getStateSnapshot(){return ae(this)}async launchExperienceById(e){const s=this.experiences.getById(e).getState();if(!s){x.logger("warn",`Experience with id '${e}' not found.`);return}O(this,s)}setupPlugins(){var e;(e=this.options.plugins)==null||e.forEach(s=>{if(Array.isArray(s)){s.forEach(i=>{this.registerPlugin(i)});return}const o=typeof s=="function"?s():s;if(Array.isArray(o)){o.forEach(i=>this.registerPlugin(i));return}this.registerPlugin(o)})}setupFeatures(){const e=this.options.features;e&&(Object.entries(e).forEach(([s,o])=>{const i=typeof o=="function"?o():o;this.registerFeature(s,i)}),this.searchParams.feature&&this.searchParams.feature.forEach(s=>{try{const[o,i]=s.split(":");if(!o||!i)return;let l=i;l==="true"&&(l=!0),l==="false"&&(l=!1),this.registerFeature(o,{key:`${l}`,name:o,decide:()=>l,storage:"session"})}catch{}}))}setupPredicates(){const e=this.options.predicates;e&&Object.entries(e).forEach(([s,o])=>{if(typeof o!="function"){x.logger("warn",`Predicate "${s}" is not a function.`);return}this.registerPredicate(s,o)})}getPluginConfig(e){return this.plugins[e]??{}}}h(D,"logger",x.logger);function M(t){var e;return((e=t.options)==null?void 0:e.some(s=>"condition"in s))??!1}function Be(t){return t.some(e=>e.condition||M(e))}async function je(t,e){return e.length===0||!Be(e)?e:(await Promise.all(e.map(async o=>{if(!(o.condition?await F.evaluateRuleLogic(t,o.condition):!0))return null;if(!o.options||!M(o))return o;const r=(await Promise.all(o.options.map(async p=>p.condition?await F.evaluateRuleLogic(t,p.condition)?p:null:p))).filter(p=>p!==null);return r.length===o.options.length?o:r.length===0?null:{...o,options:r}}))).filter(o=>o!==null)}const Ce=t=>{const e=new D(t);return v.bindClient(e),e};exports.evaluateRuleLogic=F.evaluateRuleLogic;exports.isPickedRoot=F.isPickedRoot;exports.createStorageKey=w.createStorageKey;exports.localStore=w.localStore;exports.sessionStore=w.sessionStore;exports.subscribe=w.subscribe;exports.supportsCookies=v.supportsCookies;exports.supportsCryptoRandomUUID=v.supportsCryptoRandomUUID;exports.supportsDocument=v.supportsDocument;exports.supportsHistory=v.supportsHistory;exports.supportsIntersectionObserver=v.supportsIntersectionObserver;exports.supportsLocalStorage=v.supportsLocalStorage;exports.supportsLocation=v.supportsLocation;exports.supportsSessionStorage=v.supportsSessionStorage;exports.supportsShadowRoot=v.supportsShadowRoot;exports.supportsWebComponents=v.supportsWebComponents;exports.supportsWindow=v.supportsWindow;exports.Picked=D;exports.createClient=Ce;exports.getStepFields=je;
|
package/dist/cjs/server/index.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const r=require("effector"),k=require("../../experience-instance-
|
|
1
|
+
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const r=require("effector"),k=require("../../experience-instance-D4dHslLZ.cjs");function S(){let c,i;return{promise:new Promise((t,o)=>{c=t,i=o}),resolve:t=>c(t),reject:t=>i(t)}}function C(c,i){const{promise:f,resolve:t}=S(),o=r.createEvent(),s=r.createEvent(),l=r.createEvent(),u=r.createEvent(),p=r.createEvent(),g=c.experiences.listStore.map(e=>e.map(n=>k.createExperienceInstance({client:c,experience:n}))),a=r.createStore({currentExperienceIndex:0,renderedExperiences:[],isComplete:!1}),m=r.createEffect(async({experience:e,availableRenderers:n,startRendererIndex:v=0})=>{if(!e)return null;for(let d=v;d<n.length;d++){const x=n[d],E=e.componentStore.getState();if(E&&(x!=null&&x.isValidComponent(E.component)))return{rendered:await x.render(E.component,c,e),rendererIndex:d}}return null});a.on(l,(e,n)=>({...e,renderedExperiences:[...e.renderedExperiences,n],currentExperienceIndex:e.currentExperienceIndex+1})).on(p,e=>({...e,currentExperienceIndex:e.currentExperienceIndex+1})).on(u,e=>({...e,isComplete:!0})).reset(o),r.sample({clock:o,target:s}),r.sample({clock:s,source:{experiences:g,state:a},filter:({experiences:e,state:n})=>n.currentExperienceIndex<e.length&&!n.isComplete,fn:({experiences:e,state:n})=>({experience:e[n.currentExperienceIndex],availableRenderers:i,startRendererIndex:0}),target:m}),r.sample({clock:m.doneData,filter:e=>e!==null,fn:e=>e.rendered.body,target:l}),r.sample({clock:l,target:s}),r.sample({clock:m.doneData,filter:e=>e===null,target:p}),r.sample({clock:p,target:s}),r.sample({clock:[s,p,l],source:{experiences:g,state:a},filter:({experiences:e,state:n})=>n.currentExperienceIndex>=e.length,target:u});const I=r.attach({source:a,effect:e=>{e.isComplete&&t(e.renderedExperiences)}});return r.sample({clock:u,target:I}),o(),f}exports.render=C;
|
package/dist/esm/index.js
CHANGED
|
@@ -1,17 +1,17 @@
|
|
|
1
|
-
var
|
|
2
|
-
var
|
|
3
|
-
var
|
|
4
|
-
import { createDomain as x, createApi as I, createEffect as O, attach as
|
|
1
|
+
var W = Object.defineProperty;
|
|
2
|
+
var G = (t, e, s) => e in t ? W(t, e, { enumerable: !0, configurable: !0, writable: !0, value: s }) : t[e] = s;
|
|
3
|
+
var y = (t, e, s) => G(t, typeof e != "symbol" ? e + "" : e, s);
|
|
4
|
+
import { createDomain as x, createApi as I, createEffect as O, attach as J, sample as P, combine as A, createEvent as C } from "effector";
|
|
5
5
|
import { createFactory as k, invoke as b } from "@withease/factories";
|
|
6
|
-
import { g as U, t as
|
|
7
|
-
import { f as
|
|
6
|
+
import { g as U, t as Y, c as Q, e as R, i as X, a as Z, b as ee, d as te } from "../experience-instance-BEKoIaYp.js";
|
|
7
|
+
import { f as pt } from "../experience-instance-BEKoIaYp.js";
|
|
8
8
|
import { l as v } from "../logger-C9a75KZn.js";
|
|
9
9
|
import { c as $, s as B, l as D } from "../storage-BxBBl9Bw.js";
|
|
10
|
-
import { a as
|
|
10
|
+
import { a as ft } from "../storage-BxBBl9Bw.js";
|
|
11
11
|
import { g as re } from "../id-BW-g3y32.js";
|
|
12
12
|
import { i as se } from "../object-JwZ58NOH.js";
|
|
13
13
|
import { s as z, a as ne, b as oe, c as ie, d as ae } from "../supports-BjhuLJ8z.js";
|
|
14
|
-
import { h as yt, f as
|
|
14
|
+
import { h as yt, f as ht, j as St, e as wt, g as vt, i as kt, k as bt } from "../supports-BjhuLJ8z.js";
|
|
15
15
|
const _ = x("experience"), ce = k(
|
|
16
16
|
({ client: t, experience: e }) => {
|
|
17
17
|
const s = _.store(e), o = I(s, {
|
|
@@ -83,7 +83,7 @@ const pe = (t, e) => {
|
|
|
83
83
|
}, H = (t, e) => {
|
|
84
84
|
const { targetSelectors: s } = e.configStore.getState(), o = U(s, e.id);
|
|
85
85
|
o.forEach(
|
|
86
|
-
({ elements: l }) => l.forEach((r) =>
|
|
86
|
+
({ elements: l }) => l.forEach((r) => Y(r, e.id))
|
|
87
87
|
), Q(o, e.id).forEach((l) => {
|
|
88
88
|
t.experienceInstances.spawn(e, l);
|
|
89
89
|
});
|
|
@@ -102,7 +102,7 @@ const pe = (t, e) => {
|
|
|
102
102
|
const l = s[o] ?? {};
|
|
103
103
|
s[o] = Object.freeze({ ...l, ...i });
|
|
104
104
|
}
|
|
105
|
-
}, me = x("component"),
|
|
105
|
+
}, me = x("component"), ye = k(
|
|
106
106
|
({ client: t, component: e, name: s }) => {
|
|
107
107
|
const o = t.frameworks.getByName(e.frameworkName);
|
|
108
108
|
return {
|
|
@@ -112,8 +112,8 @@ const pe = (t, e) => {
|
|
|
112
112
|
};
|
|
113
113
|
}
|
|
114
114
|
);
|
|
115
|
-
function
|
|
116
|
-
return b(
|
|
115
|
+
function he(t) {
|
|
116
|
+
return b(ye, t);
|
|
117
117
|
}
|
|
118
118
|
const Se = k(({ client: t }) => {
|
|
119
119
|
const e = me.store({}), s = I(e, {
|
|
@@ -129,8 +129,8 @@ const Se = k(({ client: t }) => {
|
|
|
129
129
|
"warn",
|
|
130
130
|
`Component '${r}' already registered. Registering again will override the previous registration.`
|
|
131
131
|
);
|
|
132
|
-
const
|
|
133
|
-
s.register(
|
|
132
|
+
const h = he({ client: t, name: r, component: n });
|
|
133
|
+
s.register(h);
|
|
134
134
|
}
|
|
135
135
|
const i = e.map((r) => Object.values(r));
|
|
136
136
|
function l(r) {
|
|
@@ -287,7 +287,7 @@ const je = (t, e, s) => {
|
|
|
287
287
|
return null;
|
|
288
288
|
const f = $(`feature:${c.id}:${c.key}`, "global");
|
|
289
289
|
(c.storage === "session" ? B : D).set(f, c.bucket);
|
|
290
|
-
}), r = /* @__PURE__ */ new Map(), n =
|
|
290
|
+
}), r = /* @__PURE__ */ new Map(), n = J({
|
|
291
291
|
source: { allFeaturesStore: t, resolvedFeaturesStore: e },
|
|
292
292
|
effect: async ({ allFeaturesStore: c, resolvedFeaturesStore: f }, { id: a, decide: p, key: g }) => {
|
|
293
293
|
const m = f.find((F) => F.id === a);
|
|
@@ -297,7 +297,7 @@ const je = (t, e, s) => {
|
|
|
297
297
|
if (!u)
|
|
298
298
|
throw new Error(`Feature with id '${a}' not found`);
|
|
299
299
|
const S = r.get(`${a}:${g}`);
|
|
300
|
-
if (S
|
|
300
|
+
if (S) {
|
|
301
301
|
const F = await S;
|
|
302
302
|
return { id: u.id, bucket: F, storage: u.feature.storage };
|
|
303
303
|
}
|
|
@@ -350,12 +350,12 @@ const je = (t, e, s) => {
|
|
|
350
350
|
};
|
|
351
351
|
})
|
|
352
352
|
);
|
|
353
|
-
function
|
|
353
|
+
function h(c) {
|
|
354
354
|
return t.map((f) => f[c], { skipVoid: !1 });
|
|
355
355
|
}
|
|
356
356
|
return {
|
|
357
357
|
register: o,
|
|
358
|
-
getByName:
|
|
358
|
+
getByName: h,
|
|
359
359
|
listStore: d
|
|
360
360
|
};
|
|
361
361
|
});
|
|
@@ -386,23 +386,23 @@ const Oe = k(() => {
|
|
|
386
386
|
})), t.on(i, (r, n) => n);
|
|
387
387
|
function l(r, n) {
|
|
388
388
|
const d = { lastStepIndex: -1, secondLastStepIndex: -1 };
|
|
389
|
-
for (let
|
|
390
|
-
const c = r[
|
|
389
|
+
for (let h = r.length - 1; h >= 0; h--) {
|
|
390
|
+
const c = r[h], f = c == null ? void 0 : c.node;
|
|
391
391
|
if (!(!f || !Z(f)) && !(n && (c == null ? void 0 : c.experienceId) !== n))
|
|
392
392
|
if (d.lastStepIndex === -1)
|
|
393
|
-
d.lastStepIndex =
|
|
393
|
+
d.lastStepIndex = h;
|
|
394
394
|
else {
|
|
395
|
-
d.secondLastStepIndex =
|
|
395
|
+
d.secondLastStepIndex = h;
|
|
396
396
|
break;
|
|
397
397
|
}
|
|
398
398
|
}
|
|
399
399
|
return d;
|
|
400
400
|
}
|
|
401
401
|
return t.on(o, (r, n) => {
|
|
402
|
-
const { secondLastStepIndex: d } = l(r.entries, n.experienceId),
|
|
402
|
+
const { secondLastStepIndex: d } = l(r.entries, n.experienceId), h = d !== -1 ? r.entries.slice(0, d + 1) : r.entries;
|
|
403
403
|
return {
|
|
404
404
|
...r,
|
|
405
|
-
entries:
|
|
405
|
+
entries: h
|
|
406
406
|
};
|
|
407
407
|
}), {
|
|
408
408
|
push: e,
|
|
@@ -543,7 +543,7 @@ const Ue = (t, e) => {
|
|
|
543
543
|
const { responsesToCommit: p, validationErrors: g } = await r(a);
|
|
544
544
|
return g.length ? { errors: g } : (i.registerBatch(p), { errors: [] });
|
|
545
545
|
}
|
|
546
|
-
const d = e.map((a) => a),
|
|
546
|
+
const d = e.map((a) => a), h = e.map((a) => Object.keys(a).map((g) => ({
|
|
547
547
|
fieldId: g,
|
|
548
548
|
value: a[g]
|
|
549
549
|
})));
|
|
@@ -570,7 +570,7 @@ const Ue = (t, e) => {
|
|
|
570
570
|
clear: o,
|
|
571
571
|
commit: n,
|
|
572
572
|
getResponsesToCommit: r,
|
|
573
|
-
listStore:
|
|
573
|
+
listStore: h,
|
|
574
574
|
getAllStore: d,
|
|
575
575
|
getByFieldId: c,
|
|
576
576
|
getByFieldName: f
|
|
@@ -579,7 +579,7 @@ const Ue = (t, e) => {
|
|
|
579
579
|
function He(t) {
|
|
580
580
|
return b(_e, t);
|
|
581
581
|
}
|
|
582
|
-
const Ke = () => "0.0.10
|
|
582
|
+
const Ke = () => "0.0.10";
|
|
583
583
|
function qe() {
|
|
584
584
|
if (z()) {
|
|
585
585
|
const t = [
|
|
@@ -595,7 +595,7 @@ function qe() {
|
|
|
595
595
|
}
|
|
596
596
|
return "https://api.picked.app";
|
|
597
597
|
}
|
|
598
|
-
function
|
|
598
|
+
function We() {
|
|
599
599
|
if (!ne())
|
|
600
600
|
return {};
|
|
601
601
|
const t = new URLSearchParams(window.location.search), e = {}, s = /* @__PURE__ */ new Set();
|
|
@@ -615,46 +615,49 @@ function Ge() {
|
|
|
615
615
|
}
|
|
616
616
|
return e;
|
|
617
617
|
}
|
|
618
|
-
function
|
|
618
|
+
function Ge() {
|
|
619
619
|
if (ie())
|
|
620
620
|
return crypto.randomUUID();
|
|
621
621
|
const t = Date.now().toString(36), e = Math.random().toString(36).substring(2, 15), s = Math.random().toString(36).substring(2, 15), o = Math.random().toString(36).substring(2, 15);
|
|
622
622
|
return `${t}-${e}-${s}-${o}`;
|
|
623
623
|
}
|
|
624
|
-
const
|
|
625
|
-
id:
|
|
626
|
-
}),
|
|
624
|
+
const Je = () => ({
|
|
625
|
+
id: Ge()
|
|
626
|
+
}), Ye = () => {
|
|
627
627
|
if (!oe()) return null;
|
|
628
|
-
const t = D.get(
|
|
628
|
+
const t = D.get("session");
|
|
629
629
|
let e = t.isSet() ? t.json() : null;
|
|
630
|
-
return e || (e =
|
|
631
|
-
},
|
|
630
|
+
return e || (e = Je(), t.set(e)), e;
|
|
631
|
+
}, Qe = (t) => {
|
|
632
|
+
const e = Ye();
|
|
633
|
+
return e && t.eventBus({ type: "session", ...e }), e;
|
|
634
|
+
};
|
|
632
635
|
class K {
|
|
633
636
|
constructor(e) {
|
|
634
|
-
|
|
635
|
-
|
|
636
|
-
|
|
637
|
-
|
|
638
|
-
|
|
639
|
-
|
|
640
|
-
|
|
641
|
-
|
|
642
|
-
|
|
643
|
-
|
|
644
|
-
|
|
645
|
-
|
|
646
|
-
|
|
647
|
-
|
|
648
|
-
|
|
649
|
-
|
|
650
|
-
|
|
651
|
-
|
|
652
|
-
|
|
653
|
-
v("info", "Picked client initializing."), this.organizationId = e.organizationId, this.projectId = e.projectId, this.options = Object.freeze(e), this.apiUrl = e.apiUrl || qe(), this.
|
|
637
|
+
y(this, "options");
|
|
638
|
+
y(this, "isReady", !1);
|
|
639
|
+
y(this, "project");
|
|
640
|
+
y(this, "plugins", {});
|
|
641
|
+
y(this, "eventBus", Te());
|
|
642
|
+
y(this, "organizationId");
|
|
643
|
+
y(this, "projectId");
|
|
644
|
+
y(this, "apiUrl");
|
|
645
|
+
y(this, "session");
|
|
646
|
+
y(this, "searchParams", We());
|
|
647
|
+
y(this, "history", Me());
|
|
648
|
+
y(this, "components", we({ client: this }));
|
|
649
|
+
y(this, "experienceInstances", ee({ client: this }));
|
|
650
|
+
y(this, "experiences", de({ client: this }));
|
|
651
|
+
y(this, "frameworks", be({ client: this }));
|
|
652
|
+
y(this, "predicates", Be({ client: this }));
|
|
653
|
+
y(this, "features", Ce());
|
|
654
|
+
y(this, "responses", He({ client: this }));
|
|
655
|
+
y(this, "fields", Le());
|
|
656
|
+
v("info", "Picked client initializing."), this.organizationId = e.organizationId, this.projectId = e.projectId, this.options = Object.freeze(e), this.apiUrl = e.apiUrl || qe(), this.setupPlugins(), this.setupFeatures(), this.setupPredicates(), this.session = Qe(this), this.eventBus({ type: "initialized", version: Ke() }), v("info", "Picked client initialized.");
|
|
654
657
|
}
|
|
655
658
|
start() {
|
|
656
659
|
Ee(this), (async () => {
|
|
657
|
-
z() && (document.body && M(this), await te(), await M(this), this.eventBus({ type: "ready" }), this.isReady = !0
|
|
660
|
+
z() && (document.body && await M(this), await te(), await M(this), this.eventBus({ type: "ready" }), this.isReady = !0);
|
|
658
661
|
})();
|
|
659
662
|
}
|
|
660
663
|
registerFramework(e) {
|
|
@@ -752,16 +755,16 @@ class K {
|
|
|
752
755
|
return this.plugins[e] ?? {};
|
|
753
756
|
}
|
|
754
757
|
}
|
|
755
|
-
|
|
758
|
+
y(K, "logger", v);
|
|
756
759
|
function q(t) {
|
|
757
760
|
var e;
|
|
758
761
|
return ((e = t.options) == null ? void 0 : e.some((s) => "condition" in s)) ?? !1;
|
|
759
762
|
}
|
|
760
|
-
function
|
|
763
|
+
function Xe(t) {
|
|
761
764
|
return t.some((e) => e.condition || q(e));
|
|
762
765
|
}
|
|
763
|
-
async function
|
|
764
|
-
return e.length === 0 || !
|
|
766
|
+
async function ct(t, e) {
|
|
767
|
+
return e.length === 0 || !Xe(e) ? e : (await Promise.all(
|
|
765
768
|
e.map(async (o) => {
|
|
766
769
|
if (!(o.condition ? await R(t, o.condition) : !0))
|
|
767
770
|
return null;
|
|
@@ -774,29 +777,29 @@ async function ut(t, e) {
|
|
|
774
777
|
})
|
|
775
778
|
)).filter((o) => o !== null);
|
|
776
779
|
}
|
|
777
|
-
const
|
|
780
|
+
const ut = (t) => {
|
|
778
781
|
const e = new K(t);
|
|
779
782
|
return ae(e), e;
|
|
780
783
|
};
|
|
781
784
|
export {
|
|
782
785
|
K as Picked,
|
|
783
|
-
|
|
786
|
+
ut as createClient,
|
|
784
787
|
$ as createStorageKey,
|
|
785
788
|
R as evaluateRuleLogic,
|
|
786
|
-
|
|
787
|
-
|
|
789
|
+
ct as getStepFields,
|
|
790
|
+
pt as isPickedRoot,
|
|
788
791
|
D as localStore,
|
|
789
792
|
B as sessionStore,
|
|
790
|
-
|
|
793
|
+
ft as subscribe,
|
|
791
794
|
yt as supportsCookies,
|
|
792
795
|
ie as supportsCryptoRandomUUID,
|
|
793
796
|
z as supportsDocument,
|
|
794
|
-
|
|
795
|
-
|
|
797
|
+
ht as supportsHistory,
|
|
798
|
+
St as supportsIntersectionObserver,
|
|
796
799
|
oe as supportsLocalStorage,
|
|
797
|
-
|
|
798
|
-
|
|
799
|
-
|
|
800
|
-
|
|
800
|
+
wt as supportsLocation,
|
|
801
|
+
vt as supportsSessionStorage,
|
|
802
|
+
kt as supportsShadowRoot,
|
|
803
|
+
bt as supportsWebComponents,
|
|
801
804
|
ne as supportsWindow
|
|
802
805
|
};
|
package/dist/esm/server/index.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { createEvent as i, createStore as v, createEffect as C, sample as n, attach as S } from "effector";
|
|
2
|
-
import { h as F } from "../../experience-instance-
|
|
2
|
+
import { h as F } from "../../experience-instance-BEKoIaYp.js";
|
|
3
3
|
function R() {
|
|
4
4
|
let c, p;
|
|
5
5
|
return {
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { createDomain as ft, createEvent as b, combine as F, createApi as J, sample as S, createEffect as
|
|
1
|
+
import { createDomain as ft, createEvent as b, combine as F, createApi as J, sample as S, createEffect as B, attach as _, split as lt } from "effector";
|
|
2
2
|
import { createFactory as Q, invoke as Y } from "@withease/factories";
|
|
3
3
|
import { i as pt, s as Z, a as dt } from "./supports-BjhuLJ8z.js";
|
|
4
4
|
import { l as D } from "./logger-C9a75KZn.js";
|
|
@@ -275,18 +275,18 @@ function Et(t, e) {
|
|
|
275
275
|
});
|
|
276
276
|
r.observe(document.body, { childList: !0, subtree: !0 });
|
|
277
277
|
}
|
|
278
|
-
const P = "picked-root", R = "picked-target",
|
|
278
|
+
const P = "picked-root", R = "picked-target", kt = "picked-root";
|
|
279
279
|
function Kt(t, e) {
|
|
280
280
|
return [
|
|
281
281
|
...t,
|
|
282
282
|
// Target and replace picked-root web components
|
|
283
283
|
{
|
|
284
|
-
selector: `${
|
|
284
|
+
selector: `${kt}[experience-id="${e}"]`,
|
|
285
285
|
placement: "replace"
|
|
286
286
|
}
|
|
287
287
|
].flatMap((n) => {
|
|
288
288
|
const i = wt(n.selector).filter(
|
|
289
|
-
(a) => !
|
|
289
|
+
(a) => !It(a, e) && !Nt(a, e)
|
|
290
290
|
);
|
|
291
291
|
return {
|
|
292
292
|
...n,
|
|
@@ -295,12 +295,12 @@ function Kt(t, e) {
|
|
|
295
295
|
});
|
|
296
296
|
}
|
|
297
297
|
function Ut(t, e) {
|
|
298
|
-
return t.flatMap((r) => r.elements.map((n) =>
|
|
298
|
+
return t.flatMap((r) => r.elements.map((n) => Bt(n, r.placement, e)));
|
|
299
299
|
}
|
|
300
300
|
function Vt(t, e) {
|
|
301
301
|
t.classList.add(R), t.classList.add(`${R}-${e}`);
|
|
302
302
|
}
|
|
303
|
-
function
|
|
303
|
+
function It(t, e) {
|
|
304
304
|
return e ? t.classList.contains(`${R}-${e}`) : t.classList.contains(`${R}`);
|
|
305
305
|
}
|
|
306
306
|
function Nt(t, e) {
|
|
@@ -310,7 +310,7 @@ function bt(t) {
|
|
|
310
310
|
const e = document.createElement("div");
|
|
311
311
|
return e.style.display = "block", e.classList.add(P), e.classList.add(`${P}-${t}`), e;
|
|
312
312
|
}
|
|
313
|
-
function
|
|
313
|
+
function Bt(t, e, r) {
|
|
314
314
|
let n;
|
|
315
315
|
const i = bt(r);
|
|
316
316
|
if (t instanceof Document)
|
|
@@ -337,13 +337,13 @@ function _t(t, e, r) {
|
|
|
337
337
|
}
|
|
338
338
|
return n;
|
|
339
339
|
}
|
|
340
|
-
function
|
|
340
|
+
function _t(t) {
|
|
341
341
|
return t.type === "conditional";
|
|
342
342
|
}
|
|
343
343
|
function $(t) {
|
|
344
344
|
return t.type === "step";
|
|
345
345
|
}
|
|
346
|
-
function
|
|
346
|
+
function vt(t) {
|
|
347
347
|
return t.type === "experience";
|
|
348
348
|
}
|
|
349
349
|
function X(t) {
|
|
@@ -352,7 +352,7 @@ function X(t) {
|
|
|
352
352
|
const et = (t, e, r, n, i = /* @__PURE__ */ new Set()) => i.has(r.id) ? [] : (i.add(r.id), $(r) && !n ? [r] : e.filter((o) => o.sourceNodeId === r.id).flatMap((o) => {
|
|
353
353
|
const c = t.find((u) => u.id === o.destinationNodeId);
|
|
354
354
|
return c ? et(t, e, c, !1, i) : [];
|
|
355
|
-
})),
|
|
355
|
+
})), At = (t, e, r) => et(t, e, r, !0, /* @__PURE__ */ new Set()), nt = (t, e, r, n, i = /* @__PURE__ */ new Set()) => {
|
|
356
356
|
if (i.has(r.id)) return [-1, -1];
|
|
357
357
|
i.add(r.id);
|
|
358
358
|
const a = e.filter((u) => u.sourceNodeId === r.id);
|
|
@@ -420,7 +420,7 @@ const U = ft("experience-instance"), Ft = Q(
|
|
|
420
420
|
), C = F(
|
|
421
421
|
e.treeStore,
|
|
422
422
|
y,
|
|
423
|
-
({ nodes: s, edges: l }, g) => g ?
|
|
423
|
+
({ nodes: s, edges: l }, g) => g ? At(s, l, g) : []
|
|
424
424
|
), f = F(
|
|
425
425
|
e.treeStore,
|
|
426
426
|
y,
|
|
@@ -450,50 +450,50 @@ const U = ft("experience-instance"), Ft = Q(
|
|
|
450
450
|
experience: e
|
|
451
451
|
}))
|
|
452
452
|
});
|
|
453
|
-
const
|
|
453
|
+
const v = B(async () => {
|
|
454
454
|
t.history.back({ experienceId: e.id });
|
|
455
|
-
}), L =
|
|
455
|
+
}), L = _({
|
|
456
456
|
source: e.treeStore,
|
|
457
457
|
effect: async (s, l) => {
|
|
458
|
-
const g = s.nodes.find((
|
|
458
|
+
const g = s.nodes.find((A) => $(A) && A.stepId === l);
|
|
459
459
|
g && t.history.push({ experienceId: e.id, node: g });
|
|
460
460
|
}
|
|
461
|
-
}), V =
|
|
461
|
+
}), V = _({
|
|
462
462
|
source: y,
|
|
463
463
|
effect: (s) => {
|
|
464
464
|
}
|
|
465
|
-
}), H =
|
|
465
|
+
}), H = _({
|
|
466
466
|
source: e.treeStore,
|
|
467
467
|
effect: async ({ nodes: s }) => ot(s)
|
|
468
|
-
}), j =
|
|
468
|
+
}), j = _({
|
|
469
469
|
source: e.treeStore,
|
|
470
470
|
effect: async ({ nodes: s, edges: l }, g) => K(g, s, l)
|
|
471
|
-
}), G =
|
|
471
|
+
}), G = _({
|
|
472
472
|
source: e.treeStore,
|
|
473
|
-
effect: async ({ nodes: s, edges: l, conditionals: g },
|
|
474
|
-
if (!
|
|
473
|
+
effect: async ({ nodes: s, edges: l, conditionals: g }, A) => {
|
|
474
|
+
if (!A)
|
|
475
475
|
return;
|
|
476
|
-
const q = g.find((ut) => ut.id ===
|
|
476
|
+
const q = g.find((ut) => ut.id === A.conditionalId);
|
|
477
477
|
if (!q)
|
|
478
478
|
return;
|
|
479
|
-
const at =
|
|
479
|
+
const at = A.id, ct = await yt(t, q.condition);
|
|
480
480
|
return Tt(!!ct, at, s, l);
|
|
481
481
|
}
|
|
482
|
-
}), st =
|
|
482
|
+
}), st = B((s) => {
|
|
483
483
|
if (s)
|
|
484
484
|
return t.launchExperienceById(s.experienceId);
|
|
485
|
-
}), W =
|
|
485
|
+
}), W = _({
|
|
486
486
|
source: [y, e.treeStore],
|
|
487
487
|
effect: async ([s, { nodes: l, edges: g }]) => K(s, l, g)
|
|
488
|
-
}), T =
|
|
488
|
+
}), T = _({
|
|
489
489
|
source: [y, e.treeStore],
|
|
490
490
|
effect: async ([s, { nodes: l, edges: g }]) => K(s, l, g)
|
|
491
|
-
}), it =
|
|
491
|
+
}), it = B((s) => {
|
|
492
492
|
t.history.push({ experienceId: e.id, node: s });
|
|
493
493
|
});
|
|
494
494
|
return lt({
|
|
495
495
|
source: y,
|
|
496
|
-
match: (s) => s ?
|
|
496
|
+
match: (s) => s ? _t(s) ? "condition" : $(s) ? "step" : vt(s) ? "launchExperience" : X(s) ? "origin" : "other" : "none",
|
|
497
497
|
cases: {
|
|
498
498
|
none: H,
|
|
499
499
|
origin: j,
|
|
@@ -544,7 +544,16 @@ const U = ft("experience-instance"), Ft = Q(
|
|
|
544
544
|
}))
|
|
545
545
|
}), S({
|
|
546
546
|
clock: a,
|
|
547
|
-
target:
|
|
547
|
+
target: v
|
|
548
|
+
}), S({
|
|
549
|
+
clock: a,
|
|
550
|
+
source: k,
|
|
551
|
+
filter: Boolean,
|
|
552
|
+
target: t.eventBus.prepend((s) => ({
|
|
553
|
+
type: "step_submit",
|
|
554
|
+
step: s,
|
|
555
|
+
experience: e
|
|
556
|
+
}))
|
|
548
557
|
}), S({ clock: o, target: L }), S({
|
|
549
558
|
source: F([
|
|
550
559
|
G.pending,
|
|
@@ -613,8 +622,8 @@ const $t = Q(({ client: t }) => {
|
|
|
613
622
|
};
|
|
614
623
|
},
|
|
615
624
|
unregister(f, m) {
|
|
616
|
-
var
|
|
617
|
-
const x = m.experienceId, N = (
|
|
625
|
+
var v;
|
|
626
|
+
const x = m.experienceId, N = (v = f[x]) == null ? void 0 : v.filter(
|
|
618
627
|
(L) => L !== m
|
|
619
628
|
);
|
|
620
629
|
return {
|
|
@@ -622,19 +631,19 @@ const $t = Q(({ client: t }) => {
|
|
|
622
631
|
[x]: N ?? []
|
|
623
632
|
};
|
|
624
633
|
}
|
|
625
|
-
}), o =
|
|
634
|
+
}), o = B(
|
|
626
635
|
({ experience: f, target: m }) => Ot({ client: t, experience: f, target: m })
|
|
627
|
-
), c =
|
|
636
|
+
), c = B((f) => {
|
|
628
637
|
a.register(f);
|
|
629
|
-
}), u =
|
|
638
|
+
}), u = B(
|
|
630
639
|
(f) => {
|
|
631
640
|
f.target && Et(f.target, () => {
|
|
632
641
|
i(f);
|
|
633
642
|
});
|
|
634
643
|
}
|
|
635
|
-
), h =
|
|
644
|
+
), h = B((f) => {
|
|
636
645
|
a.unregister(f);
|
|
637
|
-
}), E =
|
|
646
|
+
}), E = B((f) => {
|
|
638
647
|
const m = f.componentStore.getState();
|
|
639
648
|
if (!m) {
|
|
640
649
|
D("warn", "No app component registered. Skipping init.");
|
|
@@ -656,9 +665,9 @@ const $t = Q(({ client: t }) => {
|
|
|
656
665
|
);
|
|
657
666
|
return;
|
|
658
667
|
}
|
|
659
|
-
const
|
|
668
|
+
const v = xt(N);
|
|
660
669
|
try {
|
|
661
|
-
x.render(
|
|
670
|
+
x.render(v, m.component, t, f);
|
|
662
671
|
} catch (L) {
|
|
663
672
|
D("error", L);
|
|
664
673
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";const a=require("effector"),D=require("@withease/factories"),F=require("./supports-YvpQZxbh.cjs"),M=require("./logger-BsmHUUw1.cjs"),ce=require("./object-BbFTsGh3.cjs");function ae(e){return typeof e=="number"&&!isNaN(e)}function T(e){return typeof e=="string"}function w(e){return Array.isArray(e)}function z(e){return e instanceof Promise}function V(e){return typeof e=="object"&&e!==null&&!Array.isArray(e)&&Object.keys(e).length===1}function g(e){if(ae(e))return e;const t=parseFloat(`${e}`);return isNaN(t)?0:t}function A(e){return`${e}`}const ue={"==":(e,t)=>e==t,"===":(e,t)=>e===t,"!=":(e,t)=>e!=t,"!==":(e,t)=>e!==t,">":(e,t)=>g(e)>g(t),">=":(e,t)=>g(e)>=g(t),"<":(e,t,r)=>{const n=g(e),i=g(t);if(r===void 0)return n<i;const c=g(r);return n<i&&i<c},"<=":(e,t,r)=>{const n=g(e),i=g(t);if(r===void 0)return n<=i;const c=g(r);return n<=i&&i<=c},"!!":async e=>await I(e),"!":async e=>!await I(e),"%":(e,t)=>g(e)%g(t),log:e=>(console.log(e),e),in:(e,t)=>t?T(t)?t.indexOf(A(e))!==-1:w(t)?t.includes(e):!1:!1,cat:(...e)=>e.map(A).join(""),substr:(e,t,r)=>{const n=A(e),i=g(t);if(r===void 0)return n.substr(i);const c=g(r);if(c<0){const o=n.substr(i);return o.substr(0,o.length+c)}return n.substr(i,c)},"+":(...e)=>e.reduce((t,r)=>g(t)+g(r),0),"*":(...e)=>e.reduce((t,r)=>g(t)*g(r),1),"-":(e,t)=>{const r=g(e);return t===void 0?-r:r-g(t)},"/":(e,t)=>g(e)/g(t),min:(...e)=>Math.min(...e.map(g)),max:(...e)=>Math.max(...e.map(g)),merge:(...e)=>e.reduce((t,r)=>w(r)?t.concat(r):t.concat([r]),[]),var(e,t){const r=arguments.length>1?t:null;if(e===""||e==="."||e===null||e===void 0)return this;if(typeof e=="number"&&Array.isArray(this))return e>=0&&e<this.length?this[e]:r;const n=A(e);if(n===""||n===".")return this;const i=n.split(".");let c=this;for(const o of i){if(c==null)return r;if(Array.isArray(c)){const u=parseInt(o,10);isNaN(u)?c=c[o]:c=c[u]}else c=c[o]}return c!==void 0?c:r},async missing(...e){const t=w(e[0])?e[0]:e,r=[];for(const n of t){const i=await d({var:n},this);(i===null||i==="")&&r.push(`${n}`)}return r},async missing_some(e,t){const r=await d({missing:t},this);if(!w(r)||!w(t))return[];const n=r.filter(T);return t.filter(T).length-n.length>=g(e)?[]:n},invoke(e){return typeof e!="function"?null:e()},regexp_matches(e,t){let r=e,n="";if(w(e)){const[c,o]=e;r=c,n=o}return!T(r)||!T(n)?!1:new RegExp(r,n).test(A(t))},throw(e){throw new Error(A(e))}};async function d(e,t){if(!e)return e;if(z(e))return d(await e,t);if(w(e))return Promise.all(e.map(o=>d(o,t)));if(!V(e))return e;const r=fe(e);let n=r?e[r]??[]:[];switch(w(n)||(n=[n]),r){case"if":case"?:":for(let o=0;o<n.length-1;o+=2)if(await I(await d(n[o],t)))return d(n[o+1],t);return n.length%2===1?d(n[n.length-1],t):null;case"and":{let o=null;for(const u of n)if(o=await d(u,t),!await I(o))return o;return o}case"or":{let o=null;for(const u of n)if(o=await d(u,t),await I(o))return o;return o}case"map":{const o=await d(n[0],t);return w(o)?await Promise.all(o.map(u=>d(n[1],u))):[]}case"filter":{const o=await d(n[0],t);return w(o)?(await Promise.all(o.map(async f=>{const S=await I(await d(n[1],f));return{item:f,shouldInclude:S}}))).filter(({shouldInclude:f})=>f).map(({item:f})=>f):[]}case"reduce":{const o=await d(n[0],t);if(!w(o))return n.length>2?await d(n[2],t):null;const u=n[1];let S=n.length>2?await d(n[2],t):null;for(const x of o)S=await d(u,{current:x,accumulator:S});return S}case"all":{const o=await d(n[0],t);if(!w(o)||o.length===0)return!1;for(const u of o)if(!await I(await d(n[1],u)))return!1;return!0}case"some":{const o=await d(n[0],t);if(!w(o))return!1;for(const u of o)if(await I(await d(n[1],u)))return!0;return!1}case"none":{const o=await d(n[0],t);if(!w(o))return!0;for(const u of o)if(await I(await d(n[1],u)))return!1;return!0}case"catch":try{return await d(n[0],t)}catch(o){return V(o)?await d(o,t):n[1]?await d(n[1],o):o instanceof Error?o.message:o}}const i=await Promise.all(n.map(o=>d(o,t))),c=r?ue[r]:void 0;if(!c)throw new Error(`Unrecognized operation ${r}`);return c.apply(t,i)}async function I(e){return z(e)?I(await e):!(Array.isArray(e)&&e.length===0)&&!!e}function fe(e){return Object.keys(e)[0]}function le(e){return!ce.isEmpty(e)}async function X(e,t,r){const n=e.getStateSnapshot(),i=e.predicates.listStore.getState().reduce((u,f)=>({...u,[f.name]:()=>f.predicate(n)}),{}),c=e.features.listStore.getState().reduce((u,f)=>({...u,[f.id]:async()=>{const{bucket:S}=await f.getBucket();return S}}),{}),o={...r,responses:e.responses.getAllStore.getState(),location:typeof n.location=="object"?{hash:n.location.hash,host:n.location.host,hostname:n.location.hostname,href:n.location.href,origin:n.location.origin,pathname:n.location.pathname,port:n.location.port,protocol:n.location.protocol,search:n.location.search}:void 0,predicates:i,features:c};return await d(t,o)}function pe(e){return!F.supportsWindow()||!F.supportsDocument()?[]:Array.from(window.document.querySelectorAll(e)).filter(t=>t instanceof HTMLElement)}function de(e){if(!F.supportsShadowRoot())throw new Error("Shadow DOM is not supported in this environment");return e.attachShadow({mode:"closed"})}function ge(){return new Promise((e,t)=>{if(!F.supportsDocument()){t();return}document.readyState!=="loading"?e():document.addEventListener("readystatechange",()=>e(),{once:!0})})}function me(e,t){const r=new MutationObserver(n=>{document.contains(e)||(r.disconnect(),t())});r.observe(document.body,{childList:!0,subtree:!0})}const O="picked-root",R="picked-target",he="picked-root";function Se(e,t){return[...e,{selector:`${he}[experience-id="${t}"]`,placement:"replace"}].flatMap(n=>{const i=pe(n.selector).filter(c=>!Ee(c,t)&&!J(c,t));return{...n,elements:i}})}function ye(e,t){return e.flatMap(r=>r.elements.map(n=>Ie(n,r.placement,t)))}function we(e,t){e.classList.add(R),e.classList.add(`${R}-${t}`)}function Ee(e,t){return t?e.classList.contains(`${R}-${t}`):e.classList.contains(`${R}`)}function J(e,t){return t?e.classList.contains(`${O}-${t}`):e.classList.contains(O)}function xe(e){const t=document.createElement("div");return t.style.display="block",t.classList.add(O),t.classList.add(`${O}-${e}`),t}function Ie(e,t,r){let n;const i=xe(r);if(e instanceof Document)n=e.body.appendChild(i);else{switch(t){case"replace":e.replaceWith(i);break;case"before":e.before(i);break;case"after":e.after(i);break;case"prepend":e.prepend(i);break;default:e.append(i);break}n=i}return n}function ke(e){return e.type==="conditional"}function _(e){return e.type==="step"}function Ne(e){return e.type==="experience"}function W(e){return e.type==="origin"}const Q=(e,t,r,n,i=new Set)=>i.has(r.id)?[]:(i.add(r.id),_(r)&&!n?[r]:t.filter(o=>o.sourceNodeId===r.id).flatMap(o=>{const u=e.find(f=>f.id===o.destinationNodeId);return u?Q(e,t,u,!1,i):[]})),be=(e,t,r)=>Q(e,t,r,!0,new Set),Y=(e,t,r,n,i=new Set)=>{if(i.has(r.id))return[-1,-1];i.add(r.id);const c=t.filter(f=>f.sourceNodeId===r.id);if(c.length===0)return[0,0];let o=1/0,u=-1/0;for(const f of c){const S=e.find(k=>k.id===f.destinationNodeId);if(!S)continue;const[x,y]=Y(e,t,S,!1,new Set(i));x!==-1&&(o=Math.min(o,x+1),u=Math.max(u,y+1))}return o===1/0?[-1,-1]:[o,u]},ve=(e,t,r)=>Y(e,t,r,!0,new Set),Z=(e,t,r,n=new Set)=>{if(n.has(r.id))return[-1,-1];if(n.add(r.id),r.type==="origin")return[0,0];const i=t.filter(u=>u.destinationNodeId===r.id);if(i.length===0)return[-1,-1];let c=1/0,o=-1/0;for(const u of i){const f=e.find(y=>y.id===u.sourceNodeId);if(!f)continue;const[S,x]=Z(e,t,f,new Set(n));S!==-1&&(c=Math.min(c,S+1),o=Math.max(o,x+1))}return c===1/0?[-1,-1]:[c,o]},Ae=(e,t,r)=>Z(e,t,r,new Set),ee=e=>e.find(r=>r.type==="origin")||null,j=(e,t,r)=>{if(!e)return ee(t);const n=r.find(c=>c.sourceNodeId===e.id);if(!n)return null;const i=t.find(c=>c.id===n.destinationNodeId);return i||null};async function _e(e,t,r,n){const i=e?"true":"false",c=n.find(o=>o.sourceNodeHandle===i&&o.sourceNodeId===t);return r.find(o=>o.id===(c==null?void 0:c.destinationNodeId))}const q=a.createDomain("experience-instance"),Be=D.createFactory(({client:e,experience:t,target:r})=>{const n=a.createEvent(),i=a.createEvent(),c=a.createEvent(),o=a.createEvent(),u=t.componentStore,f=q.store("transitioning"),S=e.history.entriesStore.map(s=>s.filter(p=>p.experienceId===t.id)),x=S.map(s=>s.filter(p=>_(p.node))),y=S.map(s=>{var p;return((p=s[s.length-1])==null?void 0:p.node)||null}),k=a.combine(t.treeStore,y,({steps:s},p)=>s.find(m=>p&&_(p)&&m.id===p.stepId)||null),P=a.combine(t.treeStore,y,({nodes:s,edges:p},m)=>m?be(s,p,m):[]),l=a.combine(t.treeStore,y,({nodes:s,edges:p},m)=>m?Ae(s,p,m):[-1,-1]),h=a.combine(t.treeStore,y,({nodes:s,edges:p},m)=>m?ve(s,p,m):[-1,-1]),E=q.store(!0),N=a.createApi(E,{open:()=>!0,close:()=>!1,toggle:s=>!s,set:(s,p)=>p});a.sample({source:E,filter:Boolean,target:e.eventBus.prepend(()=>({type:"experience_open",experience:t}))}),a.sample({source:E,filter:s=>!s,target:e.eventBus.prepend(()=>({type:"experience_close",experience:t}))});const b=a.createEffect(async()=>{e.history.back({experienceId:t.id})}),B=a.attach({source:t.treeStore,effect:async(s,p)=>{const m=s.nodes.find(v=>_(v)&&v.stepId===p);m&&e.history.push({experienceId:t.id,node:m})}}),G=a.attach({source:y,effect:s=>{}}),$=a.attach({source:t.treeStore,effect:async({nodes:s})=>ee(s)}),C=a.attach({source:t.treeStore,effect:async({nodes:s,edges:p},m)=>j(m,s,p)}),H=a.attach({source:t.treeStore,effect:async({nodes:s,edges:p,conditionals:m},v)=>{if(!v)return;const U=m.find(ie=>ie.id===v.conditionalId);if(!U)return;const oe=v.id,se=await X(e,U.condition);return _e(!!se,oe,s,p)}}),ne=a.createEffect(s=>{if(s)return e.launchExperienceById(s.experienceId)}),K=a.attach({source:[y,t.treeStore],effect:async([s,{nodes:p,edges:m}])=>j(s,p,m)}),L=a.attach({source:[y,t.treeStore],effect:async([s,{nodes:p,edges:m}])=>j(s,p,m)}),re=a.createEffect(s=>{e.history.push({experienceId:t.id,node:s})});return a.split({source:y,match:s=>s?ke(s)?"condition":_(s)?"step":Ne(s)?"launchExperience":W(s)?"origin":"other":"none",cases:{none:$,origin:C,condition:H,step:G,launchExperience:ne,__:a.createEvent()}}),a.sample({clock:[H.doneData,C.doneData,$.doneData,L.doneData,K.doneData],filter:Boolean,target:re}),a.sample({clock:i,target:L}),a.sample({clock:i,source:k,filter:Boolean,target:e.eventBus.prepend(s=>({type:"step_submit",step:s,experience:t}))}),a.sample({clock:L.done,source:k,filter:Boolean,target:e.eventBus.prepend(s=>({type:"step_submit_success",step:s,experience:t}))}),a.sample({clock:L.fail,source:k,filter:Boolean,target:e.eventBus.prepend(s=>({type:"step_submit_error",step:s,experience:t}))}),a.sample({clock:c,target:b}),a.sample({clock:o,target:B}),a.sample({source:a.combine([H.pending,C.pending,$.pending,L.pending]),fn:s=>s.some(Boolean)?"transitioning":"ready",target:f}),a.sample({clock:G.doneData,source:k,filter:Boolean,target:e.eventBus.prepend(s=>({type:"step_enter",step:s,experience:t}))}),a.sample({source:y,clock:n,filter:s=>s?W(s):!0,target:K}),n(),{id:Math.random().toString(36).substring(7),experienceId:t.id,configStore:t.configStore,target:r,componentStore:u,stateStore:f,isOpenStore:E,open:N.open,close:N.close,toggleOpen:N.toggle,setOpen:N.set,treeStore:t.treeStore,currentNodeStore:y,currentStepStore:k,nextReachableStepNodesStore:P,stepsToOriginStore:l,stepsToLeafStore:h,goToNextStep:i,goToPreviousStep:c,goToStepById:o,stepsHistoryStore:x}});function te(e){return D.invoke(Be,e)}const Le=D.createFactory(({client:e})=>{const t=q.store({}),r=a.createEvent(),n=a.createEvent(),i=a.createEvent(),c=a.createApi(t,{register(l,h){const E=[...l[h.experienceId]??[]];return E.push(h),{...l,[h.experienceId]:E}},unregister(l,h){var b;const E=h.experienceId,N=(b=l[E])==null?void 0:b.filter(B=>B!==h);return{...l,[E]:N??[]}}}),o=a.createEffect(({experience:l,target:h})=>te({client:e,experience:l,target:h})),u=a.createEffect(l=>{c.register(l)}),f=a.createEffect(l=>{l.target&&me(l.target,()=>{i(l)})}),S=a.createEffect(l=>{c.unregister(l)}),x=a.createEffect(l=>{const h=l.componentStore.getState();if(!h){M.logger("warn","No app component registered. Skipping init.");return}const E=h.frameworkStore.getState();if(!E){M.logger("error",`No framework registered for component '${h.name}'. Skipping rendering.`);return}const N=l.target;if(!N){M.logger("error",`No target element registered for experience '${l.experienceId}'. Skipping rendering.`);return}const b=de(N);try{E.render(b,h.component,e,l)}catch(B){M.logger("error",B)}});a.sample({clock:r,target:o}),a.sample({clock:i,target:S}),a.sample({clock:o.doneData,target:[u,f,n]}),a.sample({clock:o.doneData,target:e.eventBus.prepend(l=>({type:"experience_initialized",experienceInstance:l}))}),a.sample({clock:n,target:x});function y(l,h){r({experience:l,target:h})}const k=t.map(l=>Object.values(l).flat());function P(l){return t.map(h=>h[l]||[],{skipVoid:!1})}return{spawn:y,getByExperienceId:P,listStore:k}});function Te(e){return D.invoke(Le,e)}exports.createAppHosts=ye;exports.createExperienceInstance=te;exports.createExperienceInstanceIndex=Te;exports.domInteractive=ge;exports.evaluateRuleLogic=X;exports.getTargetElements=Se;exports.isPickedRoot=J;exports.isRulesLogic=le;exports.isStepNode=_;exports.tagTargetElement=we;
|
|
1
|
+
"use strict";const a=require("effector"),D=require("@withease/factories"),F=require("./supports-YvpQZxbh.cjs"),M=require("./logger-BsmHUUw1.cjs"),ce=require("./object-BbFTsGh3.cjs");function ae(e){return typeof e=="number"&&!isNaN(e)}function T(e){return typeof e=="string"}function w(e){return Array.isArray(e)}function z(e){return e instanceof Promise}function V(e){return typeof e=="object"&&e!==null&&!Array.isArray(e)&&Object.keys(e).length===1}function g(e){if(ae(e))return e;const t=parseFloat(`${e}`);return isNaN(t)?0:t}function A(e){return`${e}`}const ue={"==":(e,t)=>e==t,"===":(e,t)=>e===t,"!=":(e,t)=>e!=t,"!==":(e,t)=>e!==t,">":(e,t)=>g(e)>g(t),">=":(e,t)=>g(e)>=g(t),"<":(e,t,r)=>{const n=g(e),i=g(t);if(r===void 0)return n<i;const c=g(r);return n<i&&i<c},"<=":(e,t,r)=>{const n=g(e),i=g(t);if(r===void 0)return n<=i;const c=g(r);return n<=i&&i<=c},"!!":async e=>await k(e),"!":async e=>!await k(e),"%":(e,t)=>g(e)%g(t),log:e=>(console.log(e),e),in:(e,t)=>t?T(t)?t.indexOf(A(e))!==-1:w(t)?t.includes(e):!1:!1,cat:(...e)=>e.map(A).join(""),substr:(e,t,r)=>{const n=A(e),i=g(t);if(r===void 0)return n.substr(i);const c=g(r);if(c<0){const o=n.substr(i);return o.substr(0,o.length+c)}return n.substr(i,c)},"+":(...e)=>e.reduce((t,r)=>g(t)+g(r),0),"*":(...e)=>e.reduce((t,r)=>g(t)*g(r),1),"-":(e,t)=>{const r=g(e);return t===void 0?-r:r-g(t)},"/":(e,t)=>g(e)/g(t),min:(...e)=>Math.min(...e.map(g)),max:(...e)=>Math.max(...e.map(g)),merge:(...e)=>e.reduce((t,r)=>w(r)?t.concat(r):t.concat([r]),[]),var(e,t){const r=arguments.length>1?t:null;if(e===""||e==="."||e===null||e===void 0)return this;if(typeof e=="number"&&Array.isArray(this))return e>=0&&e<this.length?this[e]:r;const n=A(e);if(n===""||n===".")return this;const i=n.split(".");let c=this;for(const o of i){if(c==null)return r;if(Array.isArray(c)){const u=parseInt(o,10);isNaN(u)?c=c[o]:c=c[u]}else c=c[o]}return c!==void 0?c:r},async missing(...e){const t=w(e[0])?e[0]:e,r=[];for(const n of t){const i=await d({var:n},this);(i===null||i==="")&&r.push(`${n}`)}return r},async missing_some(e,t){const r=await d({missing:t},this);if(!w(r)||!w(t))return[];const n=r.filter(T);return t.filter(T).length-n.length>=g(e)?[]:n},invoke(e){return typeof e!="function"?null:e()},regexp_matches(e,t){let r=e,n="";if(w(e)){const[c,o]=e;r=c,n=o}return!T(r)||!T(n)?!1:new RegExp(r,n).test(A(t))},throw(e){throw new Error(A(e))}};async function d(e,t){if(!e)return e;if(z(e))return d(await e,t);if(w(e))return Promise.all(e.map(o=>d(o,t)));if(!V(e))return e;const r=fe(e);let n=r?e[r]??[]:[];switch(w(n)||(n=[n]),r){case"if":case"?:":for(let o=0;o<n.length-1;o+=2)if(await k(await d(n[o],t)))return d(n[o+1],t);return n.length%2===1?d(n[n.length-1],t):null;case"and":{let o=null;for(const u of n)if(o=await d(u,t),!await k(o))return o;return o}case"or":{let o=null;for(const u of n)if(o=await d(u,t),await k(o))return o;return o}case"map":{const o=await d(n[0],t);return w(o)?await Promise.all(o.map(u=>d(n[1],u))):[]}case"filter":{const o=await d(n[0],t);return w(o)?(await Promise.all(o.map(async f=>{const S=await k(await d(n[1],f));return{item:f,shouldInclude:S}}))).filter(({shouldInclude:f})=>f).map(({item:f})=>f):[]}case"reduce":{const o=await d(n[0],t);if(!w(o))return n.length>2?await d(n[2],t):null;const u=n[1];let S=n.length>2?await d(n[2],t):null;for(const x of o)S=await d(u,{current:x,accumulator:S});return S}case"all":{const o=await d(n[0],t);if(!w(o)||o.length===0)return!1;for(const u of o)if(!await k(await d(n[1],u)))return!1;return!0}case"some":{const o=await d(n[0],t);if(!w(o))return!1;for(const u of o)if(await k(await d(n[1],u)))return!0;return!1}case"none":{const o=await d(n[0],t);if(!w(o))return!0;for(const u of o)if(await k(await d(n[1],u)))return!1;return!0}case"catch":try{return await d(n[0],t)}catch(o){return V(o)?await d(o,t):n[1]?await d(n[1],o):o instanceof Error?o.message:o}}const i=await Promise.all(n.map(o=>d(o,t))),c=r?ue[r]:void 0;if(!c)throw new Error(`Unrecognized operation ${r}`);return c.apply(t,i)}async function k(e){return z(e)?k(await e):!(Array.isArray(e)&&e.length===0)&&!!e}function fe(e){return Object.keys(e)[0]}function le(e){return!ce.isEmpty(e)}async function X(e,t,r){const n=e.getStateSnapshot(),i=e.predicates.listStore.getState().reduce((u,f)=>({...u,[f.name]:()=>f.predicate(n)}),{}),c=e.features.listStore.getState().reduce((u,f)=>({...u,[f.id]:async()=>{const{bucket:S}=await f.getBucket();return S}}),{}),o={...r,responses:e.responses.getAllStore.getState(),location:typeof n.location=="object"?{hash:n.location.hash,host:n.location.host,hostname:n.location.hostname,href:n.location.href,origin:n.location.origin,pathname:n.location.pathname,port:n.location.port,protocol:n.location.protocol,search:n.location.search}:void 0,predicates:i,features:c};return await d(t,o)}function pe(e){return!F.supportsWindow()||!F.supportsDocument()?[]:Array.from(window.document.querySelectorAll(e)).filter(t=>t instanceof HTMLElement)}function de(e){if(!F.supportsShadowRoot())throw new Error("Shadow DOM is not supported in this environment");return e.attachShadow({mode:"closed"})}function ge(){return new Promise((e,t)=>{if(!F.supportsDocument()){t();return}document.readyState!=="loading"?e():document.addEventListener("readystatechange",()=>e(),{once:!0})})}function me(e,t){const r=new MutationObserver(n=>{document.contains(e)||(r.disconnect(),t())});r.observe(document.body,{childList:!0,subtree:!0})}const O="picked-root",R="picked-target",he="picked-root";function Se(e,t){return[...e,{selector:`${he}[experience-id="${t}"]`,placement:"replace"}].flatMap(n=>{const i=pe(n.selector).filter(c=>!Ee(c,t)&&!J(c,t));return{...n,elements:i}})}function ye(e,t){return e.flatMap(r=>r.elements.map(n=>Ie(n,r.placement,t)))}function we(e,t){e.classList.add(R),e.classList.add(`${R}-${t}`)}function Ee(e,t){return t?e.classList.contains(`${R}-${t}`):e.classList.contains(`${R}`)}function J(e,t){return t?e.classList.contains(`${O}-${t}`):e.classList.contains(O)}function xe(e){const t=document.createElement("div");return t.style.display="block",t.classList.add(O),t.classList.add(`${O}-${e}`),t}function Ie(e,t,r){let n;const i=xe(r);if(e instanceof Document)n=e.body.appendChild(i);else{switch(t){case"replace":e.replaceWith(i);break;case"before":e.before(i);break;case"after":e.after(i);break;case"prepend":e.prepend(i);break;default:e.append(i);break}n=i}return n}function ke(e){return e.type==="conditional"}function B(e){return e.type==="step"}function Ne(e){return e.type==="experience"}function W(e){return e.type==="origin"}const Q=(e,t,r,n,i=new Set)=>i.has(r.id)?[]:(i.add(r.id),B(r)&&!n?[r]:t.filter(o=>o.sourceNodeId===r.id).flatMap(o=>{const u=e.find(f=>f.id===o.destinationNodeId);return u?Q(e,t,u,!1,i):[]})),be=(e,t,r)=>Q(e,t,r,!0,new Set),Y=(e,t,r,n,i=new Set)=>{if(i.has(r.id))return[-1,-1];i.add(r.id);const c=t.filter(f=>f.sourceNodeId===r.id);if(c.length===0)return[0,0];let o=1/0,u=-1/0;for(const f of c){const S=e.find(I=>I.id===f.destinationNodeId);if(!S)continue;const[x,y]=Y(e,t,S,!1,new Set(i));x!==-1&&(o=Math.min(o,x+1),u=Math.max(u,y+1))}return o===1/0?[-1,-1]:[o,u]},ve=(e,t,r)=>Y(e,t,r,!0,new Set),Z=(e,t,r,n=new Set)=>{if(n.has(r.id))return[-1,-1];if(n.add(r.id),r.type==="origin")return[0,0];const i=t.filter(u=>u.destinationNodeId===r.id);if(i.length===0)return[-1,-1];let c=1/0,o=-1/0;for(const u of i){const f=e.find(y=>y.id===u.sourceNodeId);if(!f)continue;const[S,x]=Z(e,t,f,new Set(n));S!==-1&&(c=Math.min(c,S+1),o=Math.max(o,x+1))}return c===1/0?[-1,-1]:[c,o]},Ae=(e,t,r)=>Z(e,t,r,new Set),ee=e=>e.find(r=>r.type==="origin")||null,j=(e,t,r)=>{if(!e)return ee(t);const n=r.find(c=>c.sourceNodeId===e.id);if(!n)return null;const i=t.find(c=>c.id===n.destinationNodeId);return i||null};async function Be(e,t,r,n){const i=e?"true":"false",c=n.find(o=>o.sourceNodeHandle===i&&o.sourceNodeId===t);return r.find(o=>o.id===(c==null?void 0:c.destinationNodeId))}const q=a.createDomain("experience-instance"),_e=D.createFactory(({client:e,experience:t,target:r})=>{const n=a.createEvent(),i=a.createEvent(),c=a.createEvent(),o=a.createEvent(),u=t.componentStore,f=q.store("transitioning"),S=e.history.entriesStore.map(s=>s.filter(p=>p.experienceId===t.id)),x=S.map(s=>s.filter(p=>B(p.node))),y=S.map(s=>{var p;return((p=s[s.length-1])==null?void 0:p.node)||null}),I=a.combine(t.treeStore,y,({steps:s},p)=>s.find(m=>p&&B(p)&&m.id===p.stepId)||null),P=a.combine(t.treeStore,y,({nodes:s,edges:p},m)=>m?be(s,p,m):[]),l=a.combine(t.treeStore,y,({nodes:s,edges:p},m)=>m?Ae(s,p,m):[-1,-1]),h=a.combine(t.treeStore,y,({nodes:s,edges:p},m)=>m?ve(s,p,m):[-1,-1]),E=q.store(!0),N=a.createApi(E,{open:()=>!0,close:()=>!1,toggle:s=>!s,set:(s,p)=>p});a.sample({source:E,filter:Boolean,target:e.eventBus.prepend(()=>({type:"experience_open",experience:t}))}),a.sample({source:E,filter:s=>!s,target:e.eventBus.prepend(()=>({type:"experience_close",experience:t}))});const b=a.createEffect(async()=>{e.history.back({experienceId:t.id})}),_=a.attach({source:t.treeStore,effect:async(s,p)=>{const m=s.nodes.find(v=>B(v)&&v.stepId===p);m&&e.history.push({experienceId:t.id,node:m})}}),G=a.attach({source:y,effect:s=>{}}),$=a.attach({source:t.treeStore,effect:async({nodes:s})=>ee(s)}),C=a.attach({source:t.treeStore,effect:async({nodes:s,edges:p},m)=>j(m,s,p)}),H=a.attach({source:t.treeStore,effect:async({nodes:s,edges:p,conditionals:m},v)=>{if(!v)return;const U=m.find(ie=>ie.id===v.conditionalId);if(!U)return;const oe=v.id,se=await X(e,U.condition);return Be(!!se,oe,s,p)}}),ne=a.createEffect(s=>{if(s)return e.launchExperienceById(s.experienceId)}),K=a.attach({source:[y,t.treeStore],effect:async([s,{nodes:p,edges:m}])=>j(s,p,m)}),L=a.attach({source:[y,t.treeStore],effect:async([s,{nodes:p,edges:m}])=>j(s,p,m)}),re=a.createEffect(s=>{e.history.push({experienceId:t.id,node:s})});return a.split({source:y,match:s=>s?ke(s)?"condition":B(s)?"step":Ne(s)?"launchExperience":W(s)?"origin":"other":"none",cases:{none:$,origin:C,condition:H,step:G,launchExperience:ne,__:a.createEvent()}}),a.sample({clock:[H.doneData,C.doneData,$.doneData,L.doneData,K.doneData],filter:Boolean,target:re}),a.sample({clock:i,target:L}),a.sample({clock:i,source:I,filter:Boolean,target:e.eventBus.prepend(s=>({type:"step_submit",step:s,experience:t}))}),a.sample({clock:L.done,source:I,filter:Boolean,target:e.eventBus.prepend(s=>({type:"step_submit_success",step:s,experience:t}))}),a.sample({clock:L.fail,source:I,filter:Boolean,target:e.eventBus.prepend(s=>({type:"step_submit_error",step:s,experience:t}))}),a.sample({clock:c,target:b}),a.sample({clock:c,source:I,filter:Boolean,target:e.eventBus.prepend(s=>({type:"step_submit",step:s,experience:t}))}),a.sample({clock:o,target:_}),a.sample({source:a.combine([H.pending,C.pending,$.pending,L.pending]),fn:s=>s.some(Boolean)?"transitioning":"ready",target:f}),a.sample({clock:G.doneData,source:I,filter:Boolean,target:e.eventBus.prepend(s=>({type:"step_enter",step:s,experience:t}))}),a.sample({source:y,clock:n,filter:s=>s?W(s):!0,target:K}),n(),{id:Math.random().toString(36).substring(7),experienceId:t.id,configStore:t.configStore,target:r,componentStore:u,stateStore:f,isOpenStore:E,open:N.open,close:N.close,toggleOpen:N.toggle,setOpen:N.set,treeStore:t.treeStore,currentNodeStore:y,currentStepStore:I,nextReachableStepNodesStore:P,stepsToOriginStore:l,stepsToLeafStore:h,goToNextStep:i,goToPreviousStep:c,goToStepById:o,stepsHistoryStore:x}});function te(e){return D.invoke(_e,e)}const Le=D.createFactory(({client:e})=>{const t=q.store({}),r=a.createEvent(),n=a.createEvent(),i=a.createEvent(),c=a.createApi(t,{register(l,h){const E=[...l[h.experienceId]??[]];return E.push(h),{...l,[h.experienceId]:E}},unregister(l,h){var b;const E=h.experienceId,N=(b=l[E])==null?void 0:b.filter(_=>_!==h);return{...l,[E]:N??[]}}}),o=a.createEffect(({experience:l,target:h})=>te({client:e,experience:l,target:h})),u=a.createEffect(l=>{c.register(l)}),f=a.createEffect(l=>{l.target&&me(l.target,()=>{i(l)})}),S=a.createEffect(l=>{c.unregister(l)}),x=a.createEffect(l=>{const h=l.componentStore.getState();if(!h){M.logger("warn","No app component registered. Skipping init.");return}const E=h.frameworkStore.getState();if(!E){M.logger("error",`No framework registered for component '${h.name}'. Skipping rendering.`);return}const N=l.target;if(!N){M.logger("error",`No target element registered for experience '${l.experienceId}'. Skipping rendering.`);return}const b=de(N);try{E.render(b,h.component,e,l)}catch(_){M.logger("error",_)}});a.sample({clock:r,target:o}),a.sample({clock:i,target:S}),a.sample({clock:o.doneData,target:[u,f,n]}),a.sample({clock:o.doneData,target:e.eventBus.prepend(l=>({type:"experience_initialized",experienceInstance:l}))}),a.sample({clock:n,target:x});function y(l,h){r({experience:l,target:h})}const I=t.map(l=>Object.values(l).flat());function P(l){return t.map(h=>h[l]||[],{skipVoid:!1})}return{spawn:y,getByExperienceId:P,listStore:I}});function Te(e){return D.invoke(Le,e)}exports.createAppHosts=ye;exports.createExperienceInstance=te;exports.createExperienceInstanceIndex=Te;exports.domInteractive=ge;exports.evaluateRuleLogic=X;exports.getTargetElements=Se;exports.isPickedRoot=J;exports.isRulesLogic=le;exports.isStepNode=B;exports.tagTargetElement=we;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"experience-instance.d.ts","sourceRoot":"","sources":["../../../../src/entities/experience-instance/experience-instance.ts"],"names":[],"mappings":"AAWA,OAAO,KAAK,EAEV,UAAU,EACV,cAAc,EACd,cAAc,EACd,eAAe,EACf,gBAAgB,EAGjB,MAAM,0BAA0B,CAAA;AACjC,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,cAAc,CAAA;AAmB1C,MAAM,MAAM,kBAAkB,GAAG,UAAU,CAAC,OAAO,wBAAwB,CAAC,CAAA;AAC5E,MAAM,MAAM,uBAAuB,GAAG,UAAU,CAAC,OAAO,6BAA6B,CAAC,CAAA;AACtF,MAAM,WAAW,wBAAwB;IACvC,QAAQ,EAAE,WAAW,EAAE,CAAA;IACvB,SAAS,EAAE,gBAAgB,CAAC,WAAW,CAAC,CAAA;CACzC;AAED,QAAA,MAAM,+BAA+B,oCAKhC;IACD,MAAM,EAAE,MAAM,CAAA;IACd,UAAU,EAAE,eAAe,CAAA;IAC3B,MAAM,CAAC,EAAE,WAAW,CAAA;CACrB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
|
1
|
+
{"version":3,"file":"experience-instance.d.ts","sourceRoot":"","sources":["../../../../src/entities/experience-instance/experience-instance.ts"],"names":[],"mappings":"AAWA,OAAO,KAAK,EAEV,UAAU,EACV,cAAc,EACd,cAAc,EACd,eAAe,EACf,gBAAgB,EAGjB,MAAM,0BAA0B,CAAA;AACjC,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,cAAc,CAAA;AAmB1C,MAAM,MAAM,kBAAkB,GAAG,UAAU,CAAC,OAAO,wBAAwB,CAAC,CAAA;AAC5E,MAAM,MAAM,uBAAuB,GAAG,UAAU,CAAC,OAAO,6BAA6B,CAAC,CAAA;AACtF,MAAM,WAAW,wBAAwB;IACvC,QAAQ,EAAE,WAAW,EAAE,CAAA;IACvB,SAAS,EAAE,gBAAgB,CAAC,WAAW,CAAC,CAAA;CACzC;AAED,QAAA,MAAM,+BAA+B,oCAKhC;IACD,MAAM,EAAE,MAAM,CAAA;IACd,UAAU,EAAE,eAAe,CAAA;IAC3B,MAAM,CAAC,EAAE,WAAW,CAAA;CACrB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAyTF,CAAA;AAED,wBAAgB,wBAAwB,CACtC,CAAC,SAAS,UAAU,CAAC,OAAO,+BAA+B,CAAC,CAAC,CAAC,CAAC,EAC/D,MAAM,EAAE,CAAC,GAAG,UAAU,CAAC,OAAO,+BAA+B,CAAC,CAE/D;AAED,QAAA,MAAM,oCAAoC,eAA8B;IAAE,MAAM,EAAE,MAAM,CAAA;CAAE;wBAqI7D,eAAe,UAAU,WAAW;4BAQhC,UAAU,CAAC,IAAI,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAS/C,CAAA;AAEF,wBAAgB,6BAA6B,CAC3C,CAAC,SAAS,UAAU,CAAC,OAAO,oCAAoC,CAAC,CAAC,CAAC,CAAC,EACpE,MAAM,EAAE,CAAC,GAAG,UAAU,CAAC,OAAO,oCAAoC,CAAC,CAEpE"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"picked.d.ts","sourceRoot":"","sources":["../../src/picked.ts"],"names":[],"mappings":"AACA,OAAO,EAEL,KAAK,UAAU,EAIhB,MAAM,kCAAkC,CAAA;AACzC,OAAO,EAAE,KAAK,MAAM,EAAE,KAAK,iBAAiB,EAAe,MAAM,0BAA0B,CAAA;AAC3F,OAAO,EAAE,KAAK,mBAAmB,EAAE,MAAM,UAAU,CAAA;AACnD,OAAO,EACL,KAAK,mBAAmB,EACxB,KAAK,gBAAgB,EAGtB,MAAM,gCAAgC,CAAA;AACvC,OAAO,EAEL,KAAK,SAAS,EAEf,MAAM,gCAAgC,CAAA;AAGvC,OAAO,EAAuB,KAAK,aAAa,EAAE,MAAM,uBAAuB,CAAA;AAC/E,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,gCAAgC,CAAA;AAE/D,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,4BAA4B,CAAA;AAMzD,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,wBAAwB,CAAA;AAOnD,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,sBAAsB,CAAA;AAGnD,qBAAa,MAAM;IACjB,MAAM,CAAC,QAAQ,CAAC,MAAM,0FAAS;IAC/B,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAqB;IAE7C,OAAO,UAAQ;IAEf,OAAO,CAAC,OAAO,CAAC,CAAS;IAEzB,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAwB;IAEhD,SAAgB,QAAQ,gEAAmB;IAC3C,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAA;IAC/B,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAA;IAC1B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;IACvB,QAAQ,CAAC,OAAO,CAAC,EAAE,OAAO,GAAG,IAAI,CAAA;IAEjC,QAAQ,CAAC,YAAY,qDAAoB;IAEzC,QAAQ,CAAC,OAAO;;;;;;;;;;;;;;;;MAAkB;IAElC,QAAQ,CAAC,UAAU;;;;;;;;;;;MAAyC;IAC5D,QAAQ,CAAC,mBAAmB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;MAAkD;IAC9E,QAAQ,CAAC,WAAW;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;MAA0C;IAC9D,QAAQ,CAAC,UAAU;;;;MAAyC;IAC5D,QAAQ,CAAC,UAAU;;;;;;;;;;MAAyC;IAC5D,QAAQ,CAAC,QAAQ;;;;MAAuB;IACxC,QAAQ,CAAC,SAAS;;;;;;;;;;;;;;;;;;;;MAAwC;IAC1D,QAAQ,CAAC,MAAM;;;;;MAAqB;gBAExB,OAAO,EAAE,mBAAmB;
|
|
1
|
+
{"version":3,"file":"picked.d.ts","sourceRoot":"","sources":["../../src/picked.ts"],"names":[],"mappings":"AACA,OAAO,EAEL,KAAK,UAAU,EAIhB,MAAM,kCAAkC,CAAA;AACzC,OAAO,EAAE,KAAK,MAAM,EAAE,KAAK,iBAAiB,EAAe,MAAM,0BAA0B,CAAA;AAC3F,OAAO,EAAE,KAAK,mBAAmB,EAAE,MAAM,UAAU,CAAA;AACnD,OAAO,EACL,KAAK,mBAAmB,EACxB,KAAK,gBAAgB,EAGtB,MAAM,gCAAgC,CAAA;AACvC,OAAO,EAEL,KAAK,SAAS,EAEf,MAAM,gCAAgC,CAAA;AAGvC,OAAO,EAAuB,KAAK,aAAa,EAAE,MAAM,uBAAuB,CAAA;AAC/E,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,gCAAgC,CAAA;AAE/D,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,4BAA4B,CAAA;AAMzD,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,wBAAwB,CAAA;AAOnD,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,sBAAsB,CAAA;AAGnD,qBAAa,MAAM;IACjB,MAAM,CAAC,QAAQ,CAAC,MAAM,0FAAS;IAC/B,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAqB;IAE7C,OAAO,UAAQ;IAEf,OAAO,CAAC,OAAO,CAAC,CAAS;IAEzB,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAwB;IAEhD,SAAgB,QAAQ,gEAAmB;IAC3C,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAA;IAC/B,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAA;IAC1B,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;IACvB,QAAQ,CAAC,OAAO,CAAC,EAAE,OAAO,GAAG,IAAI,CAAA;IAEjC,QAAQ,CAAC,YAAY,qDAAoB;IAEzC,QAAQ,CAAC,OAAO;;;;;;;;;;;;;;;;MAAkB;IAElC,QAAQ,CAAC,UAAU;;;;;;;;;;;MAAyC;IAC5D,QAAQ,CAAC,mBAAmB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;MAAkD;IAC9E,QAAQ,CAAC,WAAW;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;MAA0C;IAC9D,QAAQ,CAAC,UAAU;;;;MAAyC;IAC5D,QAAQ,CAAC,UAAU;;;;;;;;;;MAAyC;IAC5D,QAAQ,CAAC,QAAQ;;;;MAAuB;IACxC,QAAQ,CAAC,SAAS;;;;;;;;;;;;;;;;;;;;MAAwC;IAC1D,QAAQ,CAAC,MAAM;;;;;MAAqB;gBAExB,OAAO,EAAE,mBAAmB;IAoBxC,KAAK,IAAI,IAAI;IA8Bb,iBAAiB,CAAC,SAAS,EAAE,SAAS;IAItC,iBAAiB,CAAC,IAAI,EAAE,MAAM,mBAAmB,EAAE,SAAS,EAAE,gBAAgB;IAI9E,cAAc,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI;IAIpC,eAAe,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO;IAI9C,iBAAiB,CAAC,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,SAAS;IAIpD,aAAa,CAAC,KAAK,EAAE,KAAK;IAI1B,kBAAkB,CAAC,UAAU,EAAE,UAAU,GAAG,IAAI;IAQhD,gBAAgB,IAAI,aAAa;IAI3B,oBAAoB,CAAC,YAAY,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAqB/D,OAAO,CAAC,YAAY;IA6BpB,OAAO,CAAC,aAAa;IA8CrB,OAAO,CAAC,eAAe;IAgBvB,eAAe,CAAC,UAAU,EAAE,MAAM,GAAG,iBAAiB,CAAC,MAAM,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;CAGzF"}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
|
+
import { Picked } from '../picked';
|
|
1
2
|
export interface Session {
|
|
2
3
|
id: string;
|
|
3
4
|
}
|
|
4
|
-
export declare const initialiseSession: () => Session | null;
|
|
5
|
+
export declare const initialiseSession: (client: Picked) => Session | null;
|
|
5
6
|
//# sourceMappingURL=user-session.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"user-session.d.ts","sourceRoot":"","sources":["../../../src/utils/user-session.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"user-session.d.ts","sourceRoot":"","sources":["../../../src/utils/user-session.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,WAAW,CAAA;AAIvC,MAAM,WAAW,OAAO;IACtB,EAAE,EAAE,MAAM,CAAA;CACX;AAsCD,eAAO,MAAM,iBAAiB,GAAI,QAAQ,MAAM,mBAQ/C,CAAA"}
|