@picked/client 0.0.32 → 0.0.33
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 +3 -3
- package/dist/esm/server/index.js +1 -1
- package/dist/{experience-instance-Bg6BWuwI.js → experience-instance-BstMURAM.js} +164 -151
- package/dist/experience-instance-CqwH_Ayg.cjs +1 -0
- package/dist/types/entities/experience-instance/experience-instance.d.ts.map +1 -1
- package/package.json +1 -1
- package/dist/experience-instance-DBi45xr9.cjs +0 -1
package/dist/cjs/index.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
"use strict";var q=Object.defineProperty;var K=(t,e,r)=>e in t?q(t,e,{enumerable:!0,configurable:!0,writable:!0,value:r}):t[e]=r;var h=(t,e,r)=>K(t,typeof e!="symbol"?e+"":e,r);Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const g=require("effector"),v=require("@withease/factories"),b=require("../experience-instance-DBi45xr9.cjs"),E=require("../logger-BsmHUUw1.cjs"),w=require("../storage-YlR83AWP.cjs"),W=require("../id-BKIWbSTy.cjs"),H=require("../object-BbFTsGh3.cjs"),k=require("../supports-YvpQZxbh.cjs"),L=g.createDomain("experience"),G=v.createFactory(({client:t,experience:e})=>{const r=L.store(e),n=g.createApi(r,{merge(a,f){return{...a,...f.experience}}}),s=r.map(a=>({name:a.name,decisionLogic:a.condition??a.decide,targetSelectors:a.targets,initializeOpenLogic:e.initializeOpen})),d=t.components.listStore.map(a=>a.find(f=>f.name===`experience:${e.id}`)||a.find(f=>f.name==="experience"),{skipVoid:!1}),o=r.map(a=>({steps:a.steps,nodes:a.nodes,edges:a.edges,conditionals:a.conditionals})),i=e.actions??[];return{id:e.id,configStore:s,treeStore:o,componentStore:d,actions:i,merge:n.merge}});function Y(t){return v.invoke(G,t)}const J=v.createFactory(({client:t})=>{const e=L.store({}),r=g.createApi(e,{register(o,i){return{...o,[i.id]:i}}});function n(o){const i=e.getState()[o.id];if(i){i.merge({experience:o,strategy:"override"});return}const a=Y({client:t,experience:o});r.register(a)}const s=e.map(o=>Object.values(o));function d(o){return e.map(i=>i[o],{skipVoid:!1})}return{register:n,getById:d,listStore:s}});function Q(t){return v.invoke(J,t)}const X=(t,e)=>{e.register(t)},V=(t,e)=>{const{targetSelectors:r}=e.configStore.getState(),n=b.getTargetElements(r,e.id);n.forEach(({elements:d})=>d.forEach(o=>b.tagTargetElement(o,e.id))),b.createAppHosts(n,e.id).forEach(d=>{t.experienceInstances.spawn(e,d)})},$=async t=>{await Promise.all(t.experiences.listStore.getState().map(async e=>{await Z(t,e)&&V(t,e)}))},Z=async(t,e)=>{const{decisionLogic:r,targetSelectors:n}=e.configStore.getState();return b.getTargetElements(n,e.id).length<1||n.length===0?!1:r&&b.isRulesLogic(r)?await b.evaluateRuleLogic(t,r)===!0:!0},ee=(t,e,r)=>{const n=e.name,s=e.setup(t);if(s){const d=r[n]??{};r[n]=Object.freeze({...d,...s})}},te=g.createDomain("component"),re=v.createFactory(({client:t,component:e,name:r})=>{const n=t.frameworks.getByName(e.frameworkName);return{name:r,component:e,frameworkStore:n}});function ne(t){return v.invoke(re,t)}const se=v.createFactory(({client:t})=>{const e=te.store({}),r=g.createApi(e,{register(o,i){return{...o,[i.name]:i}}});function n(o,i){e.getState()[o]&&E.logger("warn",`Component '${o}' already registered. Registering again will override the previous registration.`);const f=ne({client:t,name:o,component:i});r.register(f)}const s=e.map(o=>Object.values(o));function d(o){return e.map(i=>i[o],{skipVoid:!1})}return{register:n,getByName:d,listStore:s}});function ie(t){return v.invoke(se,t)}const C=(t,e,r)=>{r.register(t,e)},oe=g.createDomain("framework"),ae=v.createFactory(({client:t})=>{const e=oe.store({}),r=g.createApi(e,{register(o,i){return{...o,[i.name]:i.framework}}});function n(o,i){e.getState()[o]&&E.logger("warn",`Framework '${o}' already registered. Registering again will override the previous registration.`),r.register({name:o,framework:i})}const s=e.map(o=>Object.values(o));function d(o){return e.map(i=>i[o],{skipVoid:!1})}return{register:n,getByName:d,listStore:s}});function ce(t){return v.invoke(ae,t)}const ue=(t,e)=>{e.register(t.name,t)},de=6e3,le=w.createStorageKey("last_ping","global"),pe=t=>`${t}/api/v1/ping`,ge=async t=>{try{const e=Date.now(),r=w.localStore.get(le);let n=0;if(r.isSet()&&(n=r.json()??0),n&&e-n<de)return!0;const s=pe(t.apiUrl),d={projectId:t.projectId,path:window.location.pathname},o=JSON.stringify(d),i={"Content-Type":"application/json"},a=document.getElementById("picked_script"),f=a==null?void 0:a.dataset.verceltoken;f&&(i["x-vercel-protection-bypass"]=f);const F=(await fetch(s,{method:"POST",headers:i,body:o})).ok;return F&&r.set(e),F}catch(e){return E.logger("error",e),!1}};function M(t){const e=typeof window<"u",r={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(r)}const fe=g.createDomain("predicate"),me=v.createFactory(({client:t})=>{const e=fe.store({}),r=g.createApi(e,{register(i,a){return{...i,[a.name]:{name:a.name,predicate:a.predicate}}}});function n(i,a){e.getState()[i]&&E.logger("warn",`Predicate '${i}' already registered. Registering again will override the previous registration.`),r.register(Object.freeze({name:i,predicate:a}))}const s=e.map(i=>Object.values(i));function d(i){return e.map(a=>{var f;return(f=a[i])==null?void 0:f.predicate},{skipVoid:!1})}function o(i){const a=g.createStore(()=>{},{skipVoid:!1}),f=g.createEffect(async()=>{const S=d(i).getState();if(!S)return;const F=M(t);return(...m)=>S({...F,args:m})});return g.sample({source:{responses:t.responses.listStore,fields:t.fields.listStore},target:f}),g.sample({clock:f.doneData,filter:S=>S!==void 0,target:a}),f(),a}return{register:n,getByName:d,listStore:s,getEvokablePredicate:o}});function ye(t){return v.invoke(me,t)}const he=(t,e,r)=>{r.register(t,e)},O=g.createDomain("feature"),Se=v.createFactory(({client:t})=>{const e=O.store({}),r=O.store([]),n=g.createApi(e,{register(c,u){return{...c,[u.id]:u.feature}}});function s(c,u){e.getState()[c]&&E.logger("warn",`Feature '${c}' already registered. Registering again will override the previous registration.`);const p={id:c,feature:{...u,id:c}};n.register(Object.freeze({id:c,feature:p}))}const d=g.createEffect(async({id:c,key:u,storage:l="local"})=>{const p=w.createStorageKey(`feature:${c}:${u}`,"global"),I=(l==="session"?w.sessionStore:w.localStore).get(p).boolean();return I===null?null:{id:c,key:u,bucket:I,storage:l}}),o=g.createEffect(c=>{if(!c)return null;const u=w.createStorageKey(`feature:${c.id}:${c.key}`,"global");(c.storage==="session"?w.sessionStore:w.localStore).set(u,c.bucket)}),i=new Map,a=g.attach({source:{allFeaturesStore:e,resolvedFeaturesStore:r},effect:async({allFeaturesStore:c,resolvedFeaturesStore:u},{id:l,decide:p,key:y})=>{const I=u.find(A=>A.id===l&&A.key===y);if(I)return I;const j=c[l];if(!j)throw new Error(`Feature with id '${l}' not found`);const x=i.get(`${l}:${y}`);if(x!==void 0){const A=await x;return{id:j.id,bucket:A,key:y,storage:j.feature.storage}}const D=p();i.set(`${l}:${y}`,D);const _=await D;return{id:j.id,bucket:_,key:y,storage:j.feature.storage}}});g.sample({clock:n.register,fn:c=>{const{id:u,feature:l}=c;return{id:u,key:l.feature.key,storage:l.feature.storage}},target:d}),g.sample({source:e,clock:a.doneData,fn:(c,u)=>{var j;const{id:l,bucket:p,storage:y}=u,I=(j=c[l])==null?void 0:j.feature.key;return I?{key:I,id:l,bucket:p,storage:y}:null},target:o});const f=g.combine({allFeaturesStore:e,resolvedFeaturesStore:r}).map(({allFeaturesStore:c,resolvedFeaturesStore:u})=>Object.values(c).map(l=>{const p=u.find(y=>y.id===l.id&&y.key===l.feature.key);return p?{id:l.id,name:l.feature.name,key:l.feature.key,getBucket:()=>({id:l.id,bucket:p.bucket}),isResolved:!0}:{id:l.id,name:l.feature.name,key:l.feature.key,getBucket:async()=>await a(l.feature),isResolved:!1}}));g.sample({clock:a.doneData,source:{resolvedFeatures:r},filter:({resolvedFeatures:c},{id:u,key:l})=>!c.some(y=>y.id===u&&y.key===l),fn:(c,u)=>u,target:t.eventBus.prepend(c=>({type:"feature_decide",feature:c}))}),g.sample({clock:[d.doneData,a.doneData],source:r,fn:(c,u)=>!u||c.some(p=>p.id===u.id&&p.key===u.key)?c:[...c,u],target:r});function S(c){return f.map(u=>u.find(l=>l.id===c))}function F(c){return e.map(u=>u[c],{skipVoid:!1})}function m(c){const u=g.createStore(async()=>{},{skipVoid:!1}),l=g.createEffect(async()=>{const p=S(c).getState();if(p)return async()=>(await p.getBucket()).bucket});return g.sample({source:r,filter:p=>p.some(y=>y.id===c),target:l}),g.sample({clock:l.doneData,filter:p=>p!==void 0,target:u}),l(),u}return{register:s,getById:S,getByName:F,listStore:f,getEvokableFeature:m}});function ve(t){return v.invoke(Se,t)}const ke=(t,e,r)=>{r.register(t,e)},R=g.createDomain("history");function z(t,e){return{id:W.generateId(`history-entry-${Date.now()}-${Math.random()}}`),node:e,at:Date.now(),experienceId:t}}const we=v.createFactory(()=>{const t=R.store({entries:[]}),e=R.event(),r=R.event(),n=R.event(),s=R.event();t.on(e,(o,i)=>({entries:[...o.entries,z(i.experienceId,i.node)]})),t.on(r,(o,i)=>({entries:[...o.entries.slice(0,-1),z(i.experienceId,i.node)]})),t.on(s,(o,i)=>i);function d(o,i){const a={lastStepIndex:-1,secondLastStepIndex:-1};for(let f=o.length-1;f>=0;f--){const S=o[f],F=S==null?void 0:S.node;if(!(!F||!b.isStepNode(F))&&!(i&&(S==null?void 0:S.experienceId)!==i))if(a.lastStepIndex===-1)a.lastStepIndex=f;else{a.secondLastStepIndex=f;break}}return a}return t.on(n,(o,i)=>{const{secondLastStepIndex:a}=d(o.entries,i.experienceId),f=a!==-1?o.entries.slice(0,a+1):o.entries;return{...o,entries:f}}),{push:e,replace:r,back:n,restore:s,entriesStore:t.map(o=>o.entries)}});function Ie(){return v.invoke(we)}const be=()=>g.createEvent(),Fe=g.createDomain("field"),Ee=v.createFactory(()=>{const t=Fe.store({}),e=g.createApi(t,{register(i,a){return{...i,[a.field.id]:a.field}}});function r(i){e.register({field:i})}function n(i,a){const f=d(i).getState();if(!f)return;const S=Object.assign({},f,{...a});e.register({field:{...S}})}const s=t.map(i=>Object.values(i));function d(i){return t.map(a=>a[i]||null)}function o(i){return t.map(a=>Object.values(a).find(f=>f.name===i)||null)}return{register:r,update:n,getById:d,listStore:s,getByName:o}});function je(){return v.invoke(Ee)}const xe=(t,e)=>{e.register(t)},Re=g.createDomain("action"),Ae=v.createFactory(()=>{const t=Re.store({}),e=g.createApi(t,{register(o,i){return{...o,[i.name]:{name:i.name,action:i.action}}}});function r(o,i){e.register({name:o,action:i})}const n=t.map(o=>Object.values(o));function s(o){return t.map(i=>i[o],{skipVoid:!1})}function d(o){return t.map(i=>{const a=i[o];return a?a.action:void 0},{skipVoid:!1})}return{register:r,getByName:s,listStore:n,getEvokableAction:d}});function Pe(){return v.invoke(Ae)}const Be=(t,e,r)=>{r.register(t,e)};function U(t){return typeof t>"u"||t===null||t===""||Array.isArray(t)&&!t.length}const De=g.createDomain("response"),$e=v.createFactory(({client:t})=>{const e=De.store({}),r=g.createEvent(),n=g.createEvent(),s=g.createApi(e,{register(m,c){return{...m,[c.fieldId]:c.response}},registerBatch(m,c){return{...m,...c}},clear(m,c){const{[c]:u,...l}=m;return l},clearAll(){return{}}});function d(m,c){if(typeof m=="string"){if(c===void 0)throw new Error("Response is required when registering a single field");s.register({fieldId:m,response:c})}else s.registerBatch(m)}async function o(m){const c=[];return await Promise.allSettled(Object.entries(m).map(async([u,l])=>{let p=l;const y=t.fields.getById(u).getState();if(!y){c.push({fieldId:u,userMessage:`Field '${u}' not found`,systemMessage:`No field with ID '${u}' exists. Available field IDs are: ${Object.keys(t.fields.listStore.getState()).join(",")}.`,value:p});return}if(y.multiple&&(typeof p=="string"||typeof p=="number"||typeof p=="boolean")&&(p=[p]),y.validation&&!H.isEmpty(y.validation)&&!U(p)){const I=await b.evaluateRuleLogic(t,y.validation,{$input:p});if(typeof I=="string"){c.push({fieldId:u,userMessage:I,systemMessage:`Field validation resulted in an error: ${I}.`,value:p});return}if(I===!1){c.push({fieldId:u,userMessage:"This field is invalid",systemMessage:"Field validation resulted in an unspecified error.",value:p});return}}if(y.required&&U(p)){c.push({fieldId:u,userMessage:"This field is required",systemMessage:"Field is required.",value:p});return}if(!y.multiple&&Array.isArray(p)&&p.length>1){c.push({fieldId:u,userMessage:"This field expects a single response",systemMessage:"Field expects a single response.",value:p});return}if(y.options){const I=y.options.map(x=>x.value),j=Array.isArray(p)?p:[p];Array.isArray(p)&&(j.every(x=>I.includes(x))||c.push({fieldId:u,userMessage:"This field expects a valid option",systemMessage:`Field expects a valid option. Valid options are: ${I.join(", ")}`,value:p}))}})),{responsesToCommit:m,validationErrors:c}}async function i(m){const{responsesToCommit:c,validationErrors:u}=await o(m);return u.length?{errors:u}:(s.registerBatch(c),{errors:[]})}const a=e.map(m=>m),f=e.map(m=>Object.keys(m).map(u=>({fieldId:u,value:m[u]})));function S(m){const c=t.fields.getById(m),u=e.map(l=>l[m]||null);return g.combine({f:c,r:u},({f:l,r:p})=>p||(l!=null&&l.defaultValue?l.defaultValue:null))}function F(m){const c=t.fields.getByName(m);return g.combine({f:c,s:e},({f:u,s:l})=>{const p=u&&l[u.id]||null;return p||(u!=null&&u.defaultValue?u.defaultValue:null)})}return g.sample({clock:r,target:s.clearAll}),g.sample({clock:n,target:s.clear}),{register:d,clearAll:r,clear:n,commit:i,getResponsesToCommit:o,listStore:f,getAllStore:a,getByFieldId:S,getByFieldName:F}});function Ce(t){return v.invoke($e,t)}const Oe=()=>"0.0.32";function ze(){if(k.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 Ue(){if(!k.supportsWindow())return{};const t=new URLSearchParams(window.location.search),e={},r=new Set;for(const[s]of t.entries())s.startsWith("picked-")&&r.add(s);for(const s of r){const d=s.replace("picked-","");e[d]=t.getAll(s)}const n=w.createStorageKey("s");if(r.size>0)w.sessionStore.set(n,e);else{const s=w.sessionStore.get(n);if(s)return s.json()||{}}return e}function Le(){if(k.supportsCryptoRandomUUID())return crypto.randomUUID();const t=Date.now().toString(36),e=Math.random().toString(36).substring(2,15),r=Math.random().toString(36).substring(2,15),n=Math.random().toString(36).substring(2,15);return`${t}-${e}-${r}-${n}`}const Ve=w.createStorageKey("session","global"),Me=()=>{const t=w.localStore.get(Ve);let e;t.isSet()&&(e=t.json());const r=s=>t.set({id:s.id,isUser:s.isUser,identifiers:s.identifiers}),n={id:(e==null?void 0:e.id)??Le(),isUser:(e==null?void 0:e.isUser)??void 0,identifiers:(e==null?void 0:e.identifiers)??void 0,setIsUser(s){this.isUser=s,r(this)},setIdentifier(s,d){this.identifiers={...this.identifiers,[s]:d},r(this)},removeIdentifier(s){this.identifiers&&(this.identifiers=Object.fromEntries(Object.entries(this.identifiers).filter(([d])=>d!==s)),this.identifiers=Object.keys(this.identifiers).length?this.identifiers:void 0,r(this))}};return r(n),n},Te=()=>k.supportsLocalStorage()?Me():null;function T(){if(k.supportsWindow())return globalThis.window.pickedConfig}function Ne(){if(!k.supportsWindow())return;const t=T(),e=t==null?void 0:t.organizationId,r=t==null?void 0:t.projectId;return e&&r?{organizationId:e,projectId:r}:void 0}function _e(){if(!k.supportsDocument())return;const t=document.getElementById("picked_script")||document.querySelector("script#picked")||document.getElementById("cvly");if(!t)return;const e=t.dataset.organizationid||t.getAttribute("organization-id"),r=t.dataset.projectid||t.getAttribute("project-id");return e&&r?{organizationId:e,projectId:r}:void 0}function qe(t){const{organizationId:e,projectId:r}=t;if(e&&r)return{organizationId:e,projectId:r};const n=Ne();if(n)return n;const s=_e();if(s)return s;throw new Error(`organizationId and projectId are required. You can provide them via one of:
|
|
1
|
+
"use strict";var q=Object.defineProperty;var K=(t,e,r)=>e in t?q(t,e,{enumerable:!0,configurable:!0,writable:!0,value:r}):t[e]=r;var h=(t,e,r)=>K(t,typeof e!="symbol"?e+"":e,r);Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const g=require("effector"),v=require("@withease/factories"),b=require("../experience-instance-CqwH_Ayg.cjs"),E=require("../logger-BsmHUUw1.cjs"),w=require("../storage-YlR83AWP.cjs"),W=require("../id-BKIWbSTy.cjs"),H=require("../object-BbFTsGh3.cjs"),k=require("../supports-YvpQZxbh.cjs"),L=g.createDomain("experience"),G=v.createFactory(({client:t,experience:e})=>{const r=L.store(e),n=g.createApi(r,{merge(a,f){return{...a,...f.experience}}}),s=r.map(a=>({name:a.name,decisionLogic:a.condition??a.decide,targetSelectors:a.targets,initializeOpenLogic:e.initializeOpen})),d=t.components.listStore.map(a=>a.find(f=>f.name===`experience:${e.id}`)||a.find(f=>f.name==="experience"),{skipVoid:!1}),o=r.map(a=>({steps:a.steps,nodes:a.nodes,edges:a.edges,conditionals:a.conditionals})),i=e.actions??[];return{id:e.id,configStore:s,treeStore:o,componentStore:d,actions:i,merge:n.merge}});function Y(t){return v.invoke(G,t)}const J=v.createFactory(({client:t})=>{const e=L.store({}),r=g.createApi(e,{register(o,i){return{...o,[i.id]:i}}});function n(o){const i=e.getState()[o.id];if(i){i.merge({experience:o,strategy:"override"});return}const a=Y({client:t,experience:o});r.register(a)}const s=e.map(o=>Object.values(o));function d(o){return e.map(i=>i[o],{skipVoid:!1})}return{register:n,getById:d,listStore:s}});function Q(t){return v.invoke(J,t)}const X=(t,e)=>{e.register(t)},V=(t,e)=>{const{targetSelectors:r}=e.configStore.getState(),n=b.getTargetElements(r,e.id);n.forEach(({elements:d})=>d.forEach(o=>b.tagTargetElement(o,e.id))),b.createAppHosts(n,e.id).forEach(d=>{t.experienceInstances.spawn(e,d)})},$=async t=>{await Promise.all(t.experiences.listStore.getState().map(async e=>{await Z(t,e)&&V(t,e)}))},Z=async(t,e)=>{const{decisionLogic:r,targetSelectors:n}=e.configStore.getState();return b.getTargetElements(n,e.id).length<1||n.length===0?!1:r&&b.isRulesLogic(r)?await b.evaluateRuleLogic(t,r)===!0:!0},ee=(t,e,r)=>{const n=e.name,s=e.setup(t);if(s){const d=r[n]??{};r[n]=Object.freeze({...d,...s})}},te=g.createDomain("component"),re=v.createFactory(({client:t,component:e,name:r})=>{const n=t.frameworks.getByName(e.frameworkName);return{name:r,component:e,frameworkStore:n}});function ne(t){return v.invoke(re,t)}const se=v.createFactory(({client:t})=>{const e=te.store({}),r=g.createApi(e,{register(o,i){return{...o,[i.name]:i}}});function n(o,i){e.getState()[o]&&E.logger("warn",`Component '${o}' already registered. Registering again will override the previous registration.`);const f=ne({client:t,name:o,component:i});r.register(f)}const s=e.map(o=>Object.values(o));function d(o){return e.map(i=>i[o],{skipVoid:!1})}return{register:n,getByName:d,listStore:s}});function ie(t){return v.invoke(se,t)}const C=(t,e,r)=>{r.register(t,e)},oe=g.createDomain("framework"),ae=v.createFactory(({client:t})=>{const e=oe.store({}),r=g.createApi(e,{register(o,i){return{...o,[i.name]:i.framework}}});function n(o,i){e.getState()[o]&&E.logger("warn",`Framework '${o}' already registered. Registering again will override the previous registration.`),r.register({name:o,framework:i})}const s=e.map(o=>Object.values(o));function d(o){return e.map(i=>i[o],{skipVoid:!1})}return{register:n,getByName:d,listStore:s}});function ce(t){return v.invoke(ae,t)}const ue=(t,e)=>{e.register(t.name,t)},de=6e3,le=w.createStorageKey("last_ping","global"),pe=t=>`${t}/api/v1/ping`,ge=async t=>{try{const e=Date.now(),r=w.localStore.get(le);let n=0;if(r.isSet()&&(n=r.json()??0),n&&e-n<de)return!0;const s=pe(t.apiUrl),d={projectId:t.projectId,path:window.location.pathname},o=JSON.stringify(d),i={"Content-Type":"application/json"},a=document.getElementById("picked_script"),f=a==null?void 0:a.dataset.verceltoken;f&&(i["x-vercel-protection-bypass"]=f);const F=(await fetch(s,{method:"POST",headers:i,body:o})).ok;return F&&r.set(e),F}catch(e){return E.logger("error",e),!1}};function M(t){const e=typeof window<"u",r={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(r)}const fe=g.createDomain("predicate"),me=v.createFactory(({client:t})=>{const e=fe.store({}),r=g.createApi(e,{register(i,a){return{...i,[a.name]:{name:a.name,predicate:a.predicate}}}});function n(i,a){e.getState()[i]&&E.logger("warn",`Predicate '${i}' already registered. Registering again will override the previous registration.`),r.register(Object.freeze({name:i,predicate:a}))}const s=e.map(i=>Object.values(i));function d(i){return e.map(a=>{var f;return(f=a[i])==null?void 0:f.predicate},{skipVoid:!1})}function o(i){const a=g.createStore(()=>{},{skipVoid:!1}),f=g.createEffect(async()=>{const S=d(i).getState();if(!S)return;const F=M(t);return(...m)=>S({...F,args:m})});return g.sample({source:{responses:t.responses.listStore,fields:t.fields.listStore},target:f}),g.sample({clock:f.doneData,filter:S=>S!==void 0,target:a}),f(),a}return{register:n,getByName:d,listStore:s,getEvokablePredicate:o}});function ye(t){return v.invoke(me,t)}const he=(t,e,r)=>{r.register(t,e)},O=g.createDomain("feature"),Se=v.createFactory(({client:t})=>{const e=O.store({}),r=O.store([]),n=g.createApi(e,{register(c,u){return{...c,[u.id]:u.feature}}});function s(c,u){e.getState()[c]&&E.logger("warn",`Feature '${c}' already registered. Registering again will override the previous registration.`);const p={id:c,feature:{...u,id:c}};n.register(Object.freeze({id:c,feature:p}))}const d=g.createEffect(async({id:c,key:u,storage:l="local"})=>{const p=w.createStorageKey(`feature:${c}:${u}`,"global"),I=(l==="session"?w.sessionStore:w.localStore).get(p).boolean();return I===null?null:{id:c,key:u,bucket:I,storage:l}}),o=g.createEffect(c=>{if(!c)return null;const u=w.createStorageKey(`feature:${c.id}:${c.key}`,"global");(c.storage==="session"?w.sessionStore:w.localStore).set(u,c.bucket)}),i=new Map,a=g.attach({source:{allFeaturesStore:e,resolvedFeaturesStore:r},effect:async({allFeaturesStore:c,resolvedFeaturesStore:u},{id:l,decide:p,key:y})=>{const I=u.find(A=>A.id===l&&A.key===y);if(I)return I;const j=c[l];if(!j)throw new Error(`Feature with id '${l}' not found`);const x=i.get(`${l}:${y}`);if(x!==void 0){const A=await x;return{id:j.id,bucket:A,key:y,storage:j.feature.storage}}const D=p();i.set(`${l}:${y}`,D);const _=await D;return{id:j.id,bucket:_,key:y,storage:j.feature.storage}}});g.sample({clock:n.register,fn:c=>{const{id:u,feature:l}=c;return{id:u,key:l.feature.key,storage:l.feature.storage}},target:d}),g.sample({source:e,clock:a.doneData,fn:(c,u)=>{var j;const{id:l,bucket:p,storage:y}=u,I=(j=c[l])==null?void 0:j.feature.key;return I?{key:I,id:l,bucket:p,storage:y}:null},target:o});const f=g.combine({allFeaturesStore:e,resolvedFeaturesStore:r}).map(({allFeaturesStore:c,resolvedFeaturesStore:u})=>Object.values(c).map(l=>{const p=u.find(y=>y.id===l.id&&y.key===l.feature.key);return p?{id:l.id,name:l.feature.name,key:l.feature.key,getBucket:()=>({id:l.id,bucket:p.bucket}),isResolved:!0}:{id:l.id,name:l.feature.name,key:l.feature.key,getBucket:async()=>await a(l.feature),isResolved:!1}}));g.sample({clock:a.doneData,source:{resolvedFeatures:r},filter:({resolvedFeatures:c},{id:u,key:l})=>!c.some(y=>y.id===u&&y.key===l),fn:(c,u)=>u,target:t.eventBus.prepend(c=>({type:"feature_decide",feature:c}))}),g.sample({clock:[d.doneData,a.doneData],source:r,fn:(c,u)=>!u||c.some(p=>p.id===u.id&&p.key===u.key)?c:[...c,u],target:r});function S(c){return f.map(u=>u.find(l=>l.id===c))}function F(c){return e.map(u=>u[c],{skipVoid:!1})}function m(c){const u=g.createStore(async()=>{},{skipVoid:!1}),l=g.createEffect(async()=>{const p=S(c).getState();if(p)return async()=>(await p.getBucket()).bucket});return g.sample({source:r,filter:p=>p.some(y=>y.id===c),target:l}),g.sample({clock:l.doneData,filter:p=>p!==void 0,target:u}),l(),u}return{register:s,getById:S,getByName:F,listStore:f,getEvokableFeature:m}});function ve(t){return v.invoke(Se,t)}const ke=(t,e,r)=>{r.register(t,e)},R=g.createDomain("history");function z(t,e){return{id:W.generateId(`history-entry-${Date.now()}-${Math.random()}}`),node:e,at:Date.now(),experienceId:t}}const we=v.createFactory(()=>{const t=R.store({entries:[]}),e=R.event(),r=R.event(),n=R.event(),s=R.event();t.on(e,(o,i)=>({entries:[...o.entries,z(i.experienceId,i.node)]})),t.on(r,(o,i)=>({entries:[...o.entries.slice(0,-1),z(i.experienceId,i.node)]})),t.on(s,(o,i)=>i);function d(o,i){const a={lastStepIndex:-1,secondLastStepIndex:-1};for(let f=o.length-1;f>=0;f--){const S=o[f],F=S==null?void 0:S.node;if(!(!F||!b.isStepNode(F))&&!(i&&(S==null?void 0:S.experienceId)!==i))if(a.lastStepIndex===-1)a.lastStepIndex=f;else{a.secondLastStepIndex=f;break}}return a}return t.on(n,(o,i)=>{const{secondLastStepIndex:a}=d(o.entries,i.experienceId),f=a!==-1?o.entries.slice(0,a+1):o.entries;return{...o,entries:f}}),{push:e,replace:r,back:n,restore:s,entriesStore:t.map(o=>o.entries)}});function Ie(){return v.invoke(we)}const be=()=>g.createEvent(),Fe=g.createDomain("field"),Ee=v.createFactory(()=>{const t=Fe.store({}),e=g.createApi(t,{register(i,a){return{...i,[a.field.id]:a.field}}});function r(i){e.register({field:i})}function n(i,a){const f=d(i).getState();if(!f)return;const S=Object.assign({},f,{...a});e.register({field:{...S}})}const s=t.map(i=>Object.values(i));function d(i){return t.map(a=>a[i]||null)}function o(i){return t.map(a=>Object.values(a).find(f=>f.name===i)||null)}return{register:r,update:n,getById:d,listStore:s,getByName:o}});function je(){return v.invoke(Ee)}const xe=(t,e)=>{e.register(t)},Re=g.createDomain("action"),Ae=v.createFactory(()=>{const t=Re.store({}),e=g.createApi(t,{register(o,i){return{...o,[i.name]:{name:i.name,action:i.action}}}});function r(o,i){e.register({name:o,action:i})}const n=t.map(o=>Object.values(o));function s(o){return t.map(i=>i[o],{skipVoid:!1})}function d(o){return t.map(i=>{const a=i[o];return a?a.action:void 0},{skipVoid:!1})}return{register:r,getByName:s,listStore:n,getEvokableAction:d}});function Pe(){return v.invoke(Ae)}const Be=(t,e,r)=>{r.register(t,e)};function U(t){return typeof t>"u"||t===null||t===""||Array.isArray(t)&&!t.length}const De=g.createDomain("response"),$e=v.createFactory(({client:t})=>{const e=De.store({}),r=g.createEvent(),n=g.createEvent(),s=g.createApi(e,{register(m,c){return{...m,[c.fieldId]:c.response}},registerBatch(m,c){return{...m,...c}},clear(m,c){const{[c]:u,...l}=m;return l},clearAll(){return{}}});function d(m,c){if(typeof m=="string"){if(c===void 0)throw new Error("Response is required when registering a single field");s.register({fieldId:m,response:c})}else s.registerBatch(m)}async function o(m){const c=[];return await Promise.allSettled(Object.entries(m).map(async([u,l])=>{let p=l;const y=t.fields.getById(u).getState();if(!y){c.push({fieldId:u,userMessage:`Field '${u}' not found`,systemMessage:`No field with ID '${u}' exists. Available field IDs are: ${Object.keys(t.fields.listStore.getState()).join(",")}.`,value:p});return}if(y.multiple&&(typeof p=="string"||typeof p=="number"||typeof p=="boolean")&&(p=[p]),y.validation&&!H.isEmpty(y.validation)&&!U(p)){const I=await b.evaluateRuleLogic(t,y.validation,{$input:p});if(typeof I=="string"){c.push({fieldId:u,userMessage:I,systemMessage:`Field validation resulted in an error: ${I}.`,value:p});return}if(I===!1){c.push({fieldId:u,userMessage:"This field is invalid",systemMessage:"Field validation resulted in an unspecified error.",value:p});return}}if(y.required&&U(p)){c.push({fieldId:u,userMessage:"This field is required",systemMessage:"Field is required.",value:p});return}if(!y.multiple&&Array.isArray(p)&&p.length>1){c.push({fieldId:u,userMessage:"This field expects a single response",systemMessage:"Field expects a single response.",value:p});return}if(y.options){const I=y.options.map(x=>x.value),j=Array.isArray(p)?p:[p];Array.isArray(p)&&(j.every(x=>I.includes(x))||c.push({fieldId:u,userMessage:"This field expects a valid option",systemMessage:`Field expects a valid option. Valid options are: ${I.join(", ")}`,value:p}))}})),{responsesToCommit:m,validationErrors:c}}async function i(m){const{responsesToCommit:c,validationErrors:u}=await o(m);return u.length?{errors:u}:(s.registerBatch(c),{errors:[]})}const a=e.map(m=>m),f=e.map(m=>Object.keys(m).map(u=>({fieldId:u,value:m[u]})));function S(m){const c=t.fields.getById(m),u=e.map(l=>l[m]||null);return g.combine({f:c,r:u},({f:l,r:p})=>p||(l!=null&&l.defaultValue?l.defaultValue:null))}function F(m){const c=t.fields.getByName(m);return g.combine({f:c,s:e},({f:u,s:l})=>{const p=u&&l[u.id]||null;return p||(u!=null&&u.defaultValue?u.defaultValue:null)})}return g.sample({clock:r,target:s.clearAll}),g.sample({clock:n,target:s.clear}),{register:d,clearAll:r,clear:n,commit:i,getResponsesToCommit:o,listStore:f,getAllStore:a,getByFieldId:S,getByFieldName:F}});function Ce(t){return v.invoke($e,t)}const Oe=()=>"0.0.33";function ze(){if(k.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 Ue(){if(!k.supportsWindow())return{};const t=new URLSearchParams(window.location.search),e={},r=new Set;for(const[s]of t.entries())s.startsWith("picked-")&&r.add(s);for(const s of r){const d=s.replace("picked-","");e[d]=t.getAll(s)}const n=w.createStorageKey("s");if(r.size>0)w.sessionStore.set(n,e);else{const s=w.sessionStore.get(n);if(s)return s.json()||{}}return e}function Le(){if(k.supportsCryptoRandomUUID())return crypto.randomUUID();const t=Date.now().toString(36),e=Math.random().toString(36).substring(2,15),r=Math.random().toString(36).substring(2,15),n=Math.random().toString(36).substring(2,15);return`${t}-${e}-${r}-${n}`}const Ve=w.createStorageKey("session","global"),Me=()=>{const t=w.localStore.get(Ve);let e;t.isSet()&&(e=t.json());const r=s=>t.set({id:s.id,isUser:s.isUser,identifiers:s.identifiers}),n={id:(e==null?void 0:e.id)??Le(),isUser:(e==null?void 0:e.isUser)??void 0,identifiers:(e==null?void 0:e.identifiers)??void 0,setIsUser(s){this.isUser=s,r(this)},setIdentifier(s,d){this.identifiers={...this.identifiers,[s]:d},r(this)},removeIdentifier(s){this.identifiers&&(this.identifiers=Object.fromEntries(Object.entries(this.identifiers).filter(([d])=>d!==s)),this.identifiers=Object.keys(this.identifiers).length?this.identifiers:void 0,r(this))}};return r(n),n},Te=()=>k.supportsLocalStorage()?Me():null;function T(){if(k.supportsWindow())return globalThis.window.pickedConfig}function Ne(){if(!k.supportsWindow())return;const t=T(),e=t==null?void 0:t.organizationId,r=t==null?void 0:t.projectId;return e&&r?{organizationId:e,projectId:r}:void 0}function _e(){if(!k.supportsDocument())return;const t=document.getElementById("picked_script")||document.querySelector("script#picked")||document.getElementById("cvly");if(!t)return;const e=t.dataset.organizationid||t.getAttribute("organization-id"),r=t.dataset.projectid||t.getAttribute("project-id");return e&&r?{organizationId:e,projectId:r}:void 0}function qe(t){const{organizationId:e,projectId:r}=t;if(e&&r)return{organizationId:e,projectId:r};const n=Ne();if(n)return n;const s=_e();if(s)return s;throw new Error(`organizationId and projectId are required. You can provide them via one of:
|
|
2
2
|
(1) createClient({ organizationId, projectId }) options;
|
|
3
3
|
(2) window.pickedConfig = { organizationId, projectId };
|
|
4
4
|
(3) a <script> tag with id 'picked_script', 'picked', or 'cvly' that includes data-organizationid/data-projectid (or organization-id/project-id) attributes.`)}function P(t){return t==null||t===""||Number.isNaN(t)}const Ke={default:(t,e)=>P(t)?String(e??""):String(t),append:(t,e)=>e&&!P(t)?`${t} ${e}`:t,prepend:(t,e)=>e&&!P(t)?`${e} ${t}`:t,upper:t=>typeof t=="string"?t.toUpperCase():t,lower:t=>typeof t=="string"?t.toLowerCase():t,capitalize:t=>typeof t=="string"?t.charAt(0).toUpperCase()+t.slice(1):t,list:t=>{if(!t||typeof t!="object")return t;const e=new Intl.ListFormat("en",{style:"long",type:"conjunction"});if(Array.isArray(t))return e.format(t.map(String));if(t instanceof Map){const r=Array.from(t.entries()).map(([n,s])=>`${n}: ${s}`);return e.format(r)}return t instanceof Set?e.format(Array.from(t).map(String)):t}};function We(t){return typeof t=="object"&&t!==null}function He(t,e){let r=e;for(const n of t.split("."))if(We(r)&&n in r)r=r[n];else return;return typeof r=="function"?r():r}function Ge(t,e){const r=t.split("|").map(d=>d.trim()),n=r.shift()??"";let s=He(n,e);for(const d of r){const[o,...i]=d.split(":"),a=(o==null?void 0:o.trim())??"",f=i.join(":").trim().replaceAll(/(?:^['"]|['"]$)/g,""),S=Ke[a];S&&(s=S(s,f))}return P(s)?"":typeof s=="object"?JSON.stringify(s):String(s)}function Ye(t,e){let r="",n=0;for(;n<t.length;)if(t[n]==="{"&&t[n+1]==="{"){n+=2;let s="";for(;n<t.length;){if(t[n]==="}"&&t[n+1]==="}"){n+=2;break}s+=t[n++]}r+=Ge(s.trim(),e)}else r+=t[n++];return r}class B{constructor(e){h(this,"options");h(this,"isReady",!1);h(this,"project");h(this,"plugins",{});h(this,"eventBus",be());h(this,"organizationId");h(this,"projectId");h(this,"apiUrl");h(this,"session");h(this,"precondition");h(this,"condition");h(this,"searchParams",Ue());h(this,"history",Ie());h(this,"components",ie({client:this}));h(this,"experienceInstances",b.createExperienceInstanceIndex({client:this}));h(this,"experiences",Q({client:this}));h(this,"frameworks",ce({client:this}));h(this,"predicates",ye({client:this}));h(this,"features",ve({client:this}));h(this,"responses",Ce({client:this}));h(this,"fields",je());h(this,"actions",Pe());h(this,"renderString",(e,r)=>{const n=this.responses.listStore.getState().reduce((s,d)=>(s[d.fieldId]=d.value,s),{});return Ye(e,{...r,responses:n})});E.logger("info","Picked client initializing.");const{organizationId:r,projectId:n}=qe(e);this.organizationId=r,this.projectId=n,this.options=Object.freeze(e),this.apiUrl=e.apiUrl||ze(),this.session=Te(),this.setupPlugins(),this.setupFeatures(),this.setupPredicates(),this.setupActions(),this.precondition=e.precondition,this.condition=e.condition,this.eventBus({type:"load",version:Oe()}),E.logger("info","Picked client initialized.")}start(){ge(this),(async()=>{if(!k.supportsDocument())return;let r;typeof this.precondition>"u"?r=!0:typeof this.precondition=="boolean"?r=this.precondition:r=await b.evaluateRuleLogic(this,this.precondition)===!0;let n;r&&(this.condition===void 0?n=!0:typeof this.condition=="boolean"?n=this.condition:n=await b.evaluateRuleLogic(this,this.condition)===!0);const s=r&&n===!0;if(typeof n=="boolean"&&this.session){const d=n;this.session.setIsUser(d),this.eventBus({type:"user_decide",value:d})}this.eventBus({type:"initialize"}),document.body&&s&&$(this),await b.domInteractive(),s&&$(this),this.eventBus({type:"ready"}),this.isReady=!0,this.session&&this.eventBus({type:"session",...this.session})})()}registerFramework(e){ue(e,this.frameworks)}registerComponent(e,r){C(e,r,this.components)}registerPlugin(e){ee(this,e,this.plugins)}registerFeature(e,r){ke(e,r,this.features)}registerPredicate(e,r){he(e,r,this.predicates)}registerField(e){xe(e,this.fields)}registerAction(e,r){Be(e,r,this.actions)}registerExperience(e){e.component&&C(`experience:${e.id}`,e.component,this.components),X(e,this.experiences)}getStateSnapshot(){return M(this)}async launchExperienceById(e){const r=this.experiences.getById(e).getState();if(!r){E.logger("warn",`Experience with id '${e}' not found.`);return}V(this,r)}setupPlugins(){var e;(e=this.options.plugins)==null||e.forEach(r=>{if(Array.isArray(r)){r.forEach(s=>{this.registerPlugin(s)});return}const n=typeof r=="function"?r():r;if(Array.isArray(n)){n.forEach(s=>this.registerPlugin(s));return}this.registerPlugin(n)})}setupFeatures(){const e=this.options.features;e&&(Object.entries(e).forEach(([r,n])=>{const s=typeof n=="function"?n():n;this.registerFeature(r,s)}),this.searchParams.feature&&this.searchParams.feature.forEach(r=>{try{const[n,s]=r.split(":");if(!n||!s)return;let d=s;d==="true"&&(d=!0),d==="false"&&(d=!1),this.registerFeature(n,{key:`${d}`,name:n,decide:()=>d,storage:"session"})}catch{}}))}setupPredicates(){const e=this.options.predicates;e&&Object.entries(e).forEach(([r,n])=>{if(typeof n!="function"){E.logger("warn",`Predicate "${r}" is not a function.`);return}this.registerPredicate(r,n)})}setupActions(){const e=this.options.actions;e&&Object.entries(e).forEach(([r,n])=>{if(typeof n!="function"){E.logger("warn",`Action "${r}" is not a function.`);return}this.registerAction(r,n)})}getPluginConfig(e){return this.plugins[e]??{}}}h(B,"logger",E.logger);function N(t){var e;return((e=t.options)==null?void 0:e.some(r=>"condition"in r))??!1}function Je(t){return t.some(e=>e.condition||N(e))}async function Qe(t,e){return e.length===0||!Je(e)?e:(await Promise.all(e.map(async n=>{if(!(n.condition?await b.evaluateRuleLogic(t,n.condition):!0))return null;if(!n.options||!N(n))return n;const o=(await Promise.all(n.options.map(async a=>a.condition?await b.evaluateRuleLogic(t,a.condition)?a:null:a))).filter(a=>a!==null);return o.length===n.options.length?n:o.length===0?null:{...n,options:o}}))).filter(n=>n!==null)}const Xe=t=>{const e=new B(t);return k.bindClient(e),e};exports.evaluateRuleLogic=b.evaluateRuleLogic;exports.isPickedRoot=b.isPickedRoot;exports.createStorageKey=w.createStorageKey;exports.localStore=w.localStore;exports.sessionStore=w.sessionStore;exports.subscribe=w.subscribe;exports.supportsCookies=k.supportsCookies;exports.supportsCryptoRandomUUID=k.supportsCryptoRandomUUID;exports.supportsDocument=k.supportsDocument;exports.supportsHistory=k.supportsHistory;exports.supportsIntersectionObserver=k.supportsIntersectionObserver;exports.supportsLocalStorage=k.supportsLocalStorage;exports.supportsLocation=k.supportsLocation;exports.supportsSessionStorage=k.supportsSessionStorage;exports.supportsShadowRoot=k.supportsShadowRoot;exports.supportsWebComponents=k.supportsWebComponents;exports.supportsWindow=k.supportsWindow;exports.Picked=B;exports.createClient=Xe;exports.getPickedConfig=T;exports.getStepFields=Qe;
|
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-CqwH_Ayg.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
|
@@ -3,8 +3,8 @@ var te = (t, e, r) => e in t ? ee(t, e, { enumerable: !0, configurable: !0, writ
|
|
|
3
3
|
var h = (t, e, r) => te(t, typeof e != "symbol" ? e + "" : e, r);
|
|
4
4
|
import { createDomain as E, createApi as x, createStore as q, createEffect as $, sample as F, attach as re, combine as D, createEvent as U } from "effector";
|
|
5
5
|
import { createFactory as w, invoke as I } from "@withease/factories";
|
|
6
|
-
import { g as K, t as ne, c as se, i as ie, e as P, a as oe, b as ae, d as ce } from "../experience-instance-
|
|
7
|
-
import { f as Rt } from "../experience-instance-
|
|
6
|
+
import { g as K, t as ne, c as se, i as ie, e as P, a as oe, b as ae, d as ce } from "../experience-instance-BstMURAM.js";
|
|
7
|
+
import { f as Rt } from "../experience-instance-BstMURAM.js";
|
|
8
8
|
import { l as v } from "../logger-C9a75KZn.js";
|
|
9
9
|
import { c as B, l as z, s as O } from "../storage-BLmAhfhl.js";
|
|
10
10
|
import { a as Ct } from "../storage-BLmAhfhl.js";
|
|
@@ -706,7 +706,7 @@ const Xe = E("response"), Ze = w(({ client: t }) => {
|
|
|
706
706
|
function et(t) {
|
|
707
707
|
return I(Ze, t);
|
|
708
708
|
}
|
|
709
|
-
const tt = () => "0.0.
|
|
709
|
+
const tt = () => "0.0.33";
|
|
710
710
|
function rt() {
|
|
711
711
|
if (V()) {
|
|
712
712
|
const t = [
|
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-BstMURAM.js";
|
|
3
3
|
function R() {
|
|
4
4
|
let c, p;
|
|
5
5
|
return {
|
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
import { createDomain as
|
|
2
|
-
import { createFactory as
|
|
3
|
-
import { i as
|
|
1
|
+
import { createDomain as It, createEvent as k, combine as C, createApi as ct, createEffect as M, attach as F, sample as m, split as xt } from "effector";
|
|
2
|
+
import { createFactory as ut, invoke as ft } from "@withease/factories";
|
|
3
|
+
import { i as Et, s as lt, a as kt } from "./supports-BjhuLJ8z.js";
|
|
4
4
|
import { l as I } from "./logger-C9a75KZn.js";
|
|
5
|
-
import { i as
|
|
6
|
-
function
|
|
5
|
+
import { i as At } from "./object-JwZ58NOH.js";
|
|
6
|
+
function bt(t) {
|
|
7
7
|
return typeof t == "number" && !isNaN(t);
|
|
8
8
|
}
|
|
9
9
|
function H(t) {
|
|
@@ -12,21 +12,21 @@ function H(t) {
|
|
|
12
12
|
function N(t) {
|
|
13
13
|
return Array.isArray(t);
|
|
14
14
|
}
|
|
15
|
-
function
|
|
15
|
+
function dt(t) {
|
|
16
16
|
return t instanceof Promise;
|
|
17
17
|
}
|
|
18
|
-
function
|
|
18
|
+
function rt(t) {
|
|
19
19
|
return typeof t == "object" && t !== null && !Array.isArray(t) && Object.keys(t).length === 1;
|
|
20
20
|
}
|
|
21
21
|
function g(t) {
|
|
22
|
-
if (
|
|
22
|
+
if (bt(t)) return t;
|
|
23
23
|
const e = parseFloat(`${t}`);
|
|
24
24
|
return isNaN(e) ? 0 : e;
|
|
25
25
|
}
|
|
26
26
|
function D(t) {
|
|
27
27
|
return `${t}`;
|
|
28
28
|
}
|
|
29
|
-
const
|
|
29
|
+
const vt = {
|
|
30
30
|
// eslint-disable-next-line eqeqeq
|
|
31
31
|
"==": (t, e) => t == e,
|
|
32
32
|
"===": (t, e) => t === e,
|
|
@@ -142,12 +142,12 @@ const Et = {
|
|
|
142
142
|
};
|
|
143
143
|
async function p(t, e) {
|
|
144
144
|
if (!t) return t;
|
|
145
|
-
if (
|
|
145
|
+
if (dt(t))
|
|
146
146
|
return p(await t, e);
|
|
147
147
|
if (N(t))
|
|
148
148
|
return Promise.all(t.map((o) => p(o, e)));
|
|
149
|
-
if (!
|
|
150
|
-
const r =
|
|
149
|
+
if (!rt(t)) return t;
|
|
150
|
+
const r = Ot(t);
|
|
151
151
|
let n = r ? t[r] ?? [] : [];
|
|
152
152
|
switch (N(n) || (n = [n]), r) {
|
|
153
153
|
case "if":
|
|
@@ -188,8 +188,8 @@ async function p(t, e) {
|
|
|
188
188
|
return n.length > 2 ? await p(n[2], e) : null;
|
|
189
189
|
const c = n[1];
|
|
190
190
|
let S = n.length > 2 ? await p(n[2], e) : null;
|
|
191
|
-
for (const
|
|
192
|
-
S = await p(c, { current:
|
|
191
|
+
for (const A of o)
|
|
192
|
+
S = await p(c, { current: A, accumulator: S });
|
|
193
193
|
return S;
|
|
194
194
|
}
|
|
195
195
|
case "all": {
|
|
@@ -217,23 +217,23 @@ async function p(t, e) {
|
|
|
217
217
|
try {
|
|
218
218
|
return await p(n[0], e);
|
|
219
219
|
} catch (o) {
|
|
220
|
-
return
|
|
220
|
+
return rt(o) ? await p(o, e) : n[1] ? await p(n[1], o) : o instanceof Error ? o.message : o;
|
|
221
221
|
}
|
|
222
222
|
}
|
|
223
|
-
const s = await Promise.all(n.map((o) => p(o, e))), a = r ?
|
|
223
|
+
const s = await Promise.all(n.map((o) => p(o, e))), a = r ? vt[r] : void 0;
|
|
224
224
|
if (!a) throw new Error(`Unrecognized operation ${r}`);
|
|
225
225
|
return a.apply(e, s);
|
|
226
226
|
}
|
|
227
227
|
async function B(t) {
|
|
228
|
-
return
|
|
228
|
+
return dt(t) ? B(await t) : !(Array.isArray(t) && t.length === 0) && !!t;
|
|
229
229
|
}
|
|
230
|
-
function
|
|
230
|
+
function Ot(t) {
|
|
231
231
|
return Object.keys(t)[0];
|
|
232
232
|
}
|
|
233
|
-
function
|
|
234
|
-
return !
|
|
233
|
+
function Bt(t) {
|
|
234
|
+
return !At(t);
|
|
235
235
|
}
|
|
236
|
-
async function
|
|
236
|
+
async function ot(t, e, r) {
|
|
237
237
|
const n = t.getStateSnapshot(), s = t.predicates.listStore.getState().reduce((c, d) => ({
|
|
238
238
|
...c,
|
|
239
239
|
[d.name]: (...S) => d.predicate({ ...n, args: S })
|
|
@@ -262,44 +262,44 @@ async function et(t, e, r) {
|
|
|
262
262
|
};
|
|
263
263
|
return await p(e, o);
|
|
264
264
|
}
|
|
265
|
-
function
|
|
266
|
-
return !
|
|
265
|
+
function Ft(t) {
|
|
266
|
+
return !kt() || !lt() ? [] : Array.from(window.document.querySelectorAll(t)).filter(
|
|
267
267
|
(e) => e instanceof HTMLElement
|
|
268
268
|
);
|
|
269
269
|
}
|
|
270
|
-
const
|
|
271
|
-
function
|
|
272
|
-
if (!
|
|
270
|
+
const _t = "open";
|
|
271
|
+
function $t(t) {
|
|
272
|
+
if (!Et())
|
|
273
273
|
throw new Error("Shadow DOM is not supported in this environment");
|
|
274
|
-
return t.attachShadow({ mode:
|
|
274
|
+
return t.attachShadow({ mode: _t });
|
|
275
275
|
}
|
|
276
|
-
function
|
|
276
|
+
function Qt() {
|
|
277
277
|
return new Promise((t, e) => {
|
|
278
|
-
if (!
|
|
278
|
+
if (!lt()) {
|
|
279
279
|
e();
|
|
280
280
|
return;
|
|
281
281
|
}
|
|
282
282
|
document.readyState !== "loading" ? t() : document.addEventListener("readystatechange", () => t(), { once: !0 });
|
|
283
283
|
});
|
|
284
284
|
}
|
|
285
|
-
function
|
|
285
|
+
function Mt(t, e) {
|
|
286
286
|
const r = new MutationObserver((n) => {
|
|
287
287
|
document.contains(t) || (r.disconnect(), e());
|
|
288
288
|
});
|
|
289
289
|
r.observe(document.body, { childList: !0, subtree: !0 });
|
|
290
290
|
}
|
|
291
|
-
const
|
|
292
|
-
function
|
|
291
|
+
const W = "picked-root", G = "picked-target", Tt = "picked-root";
|
|
292
|
+
function Yt(t, e) {
|
|
293
293
|
return [
|
|
294
294
|
...t,
|
|
295
295
|
// Target and replace picked-root web components
|
|
296
296
|
{
|
|
297
|
-
selector: `${
|
|
297
|
+
selector: `${Tt}[experience-id="${e}"]`,
|
|
298
298
|
placement: "replace"
|
|
299
299
|
}
|
|
300
300
|
].flatMap((n) => {
|
|
301
|
-
const s =
|
|
302
|
-
(a) => !
|
|
301
|
+
const s = Ft(n.selector).filter(
|
|
302
|
+
(a) => !Lt(a, e) && !Dt(a, e)
|
|
303
303
|
);
|
|
304
304
|
return {
|
|
305
305
|
...n,
|
|
@@ -307,25 +307,25 @@ function Jt(t, e) {
|
|
|
307
307
|
};
|
|
308
308
|
});
|
|
309
309
|
}
|
|
310
|
-
function
|
|
311
|
-
return t.flatMap((r) => r.elements.map((n) =>
|
|
310
|
+
function Zt(t, e) {
|
|
311
|
+
return t.flatMap((r) => r.elements.map((n) => Pt(n, r.placement, e)));
|
|
312
312
|
}
|
|
313
|
-
function
|
|
314
|
-
t.classList.add(
|
|
313
|
+
function te(t, e) {
|
|
314
|
+
t.classList.add(G), t.classList.add(`${G}-${e}`);
|
|
315
315
|
}
|
|
316
|
-
function
|
|
317
|
-
return e ? t.classList.contains(`${
|
|
316
|
+
function Lt(t, e) {
|
|
317
|
+
return e ? t.classList.contains(`${G}-${e}`) : t.classList.contains(`${G}`);
|
|
318
318
|
}
|
|
319
|
-
function
|
|
320
|
-
return e ? t.classList.contains(`${
|
|
319
|
+
function Dt(t, e) {
|
|
320
|
+
return e ? t.classList.contains(`${W}-${e}`) : t.classList.contains(W);
|
|
321
321
|
}
|
|
322
|
-
function
|
|
322
|
+
function Rt(t) {
|
|
323
323
|
const e = document.createElement("div");
|
|
324
|
-
return e.style.display = "block", e.classList.add(
|
|
324
|
+
return e.style.display = "block", e.classList.add(W), e.classList.add(`${W}-${t}`), e;
|
|
325
325
|
}
|
|
326
|
-
function
|
|
326
|
+
function Pt(t, e, r) {
|
|
327
327
|
let n;
|
|
328
|
-
const s =
|
|
328
|
+
const s = Rt(r);
|
|
329
329
|
if (t instanceof Document)
|
|
330
330
|
n = t.body.appendChild(s);
|
|
331
331
|
else {
|
|
@@ -350,25 +350,25 @@ function Tt(t, e, r) {
|
|
|
350
350
|
}
|
|
351
351
|
return n;
|
|
352
352
|
}
|
|
353
|
-
function
|
|
353
|
+
function it(t) {
|
|
354
354
|
return t.type === "conditional";
|
|
355
355
|
}
|
|
356
356
|
function j(t) {
|
|
357
357
|
return t.type === "step";
|
|
358
358
|
}
|
|
359
|
-
function
|
|
359
|
+
function st(t) {
|
|
360
360
|
return t.type === "experience";
|
|
361
361
|
}
|
|
362
|
-
function
|
|
362
|
+
function z(t) {
|
|
363
363
|
return t.type === "origin";
|
|
364
364
|
}
|
|
365
|
-
function
|
|
365
|
+
function at(t) {
|
|
366
366
|
return t.type === "action";
|
|
367
367
|
}
|
|
368
|
-
const
|
|
368
|
+
const pt = (t, e, r, n, s = /* @__PURE__ */ new Set()) => s.has(r.id) ? [] : (s.add(r.id), j(r) && !n ? [r] : e.filter((o) => o.sourceNodeId === r.id).flatMap((o) => {
|
|
369
369
|
const c = t.find((d) => d.id === o.destinationNodeId);
|
|
370
|
-
return c ?
|
|
371
|
-
})),
|
|
370
|
+
return c ? pt(t, e, c, !1, s) : [];
|
|
371
|
+
})), Ct = (t, e, r) => pt(t, e, r, !0, /* @__PURE__ */ new Set()), gt = (t, e, r, n, s = /* @__PURE__ */ new Set()) => {
|
|
372
372
|
if (s.has(r.id)) return [-1, -1];
|
|
373
373
|
s.add(r.id);
|
|
374
374
|
const a = e.filter((d) => d.sourceNodeId === r.id);
|
|
@@ -377,17 +377,17 @@ const ut = (t, e, r, n, s = /* @__PURE__ */ new Set()) => s.has(r.id) ? [] : (s.
|
|
|
377
377
|
for (const d of a) {
|
|
378
378
|
const S = t.find((R) => R.id === d.destinationNodeId);
|
|
379
379
|
if (!S) continue;
|
|
380
|
-
const [
|
|
380
|
+
const [A, _] = gt(
|
|
381
381
|
t,
|
|
382
382
|
e,
|
|
383
383
|
S,
|
|
384
384
|
!1,
|
|
385
385
|
new Set(s)
|
|
386
386
|
);
|
|
387
|
-
|
|
387
|
+
A !== -1 && (o = Math.min(o, A + 1), c = Math.max(c, _ + 1));
|
|
388
388
|
}
|
|
389
389
|
return o === 1 / 0 ? [-1, -1] : [o, c];
|
|
390
|
-
},
|
|
390
|
+
}, Ht = (t, e, r) => gt(t, e, r, !0, /* @__PURE__ */ new Set()), mt = (t, e, r, n = /* @__PURE__ */ new Set()) => {
|
|
391
391
|
if (n.has(r.id)) return [-1, -1];
|
|
392
392
|
if (n.add(r.id), r.type === "origin") return [0, 0];
|
|
393
393
|
const s = e.filter((c) => c.destinationNodeId === r.id);
|
|
@@ -396,37 +396,37 @@ const ut = (t, e, r, n, s = /* @__PURE__ */ new Set()) => s.has(r.id) ? [] : (s.
|
|
|
396
396
|
for (const c of s) {
|
|
397
397
|
const d = t.find((_) => _.id === c.sourceNodeId);
|
|
398
398
|
if (!d) continue;
|
|
399
|
-
const [S,
|
|
399
|
+
const [S, A] = mt(
|
|
400
400
|
t,
|
|
401
401
|
e,
|
|
402
402
|
d,
|
|
403
403
|
new Set(n)
|
|
404
404
|
);
|
|
405
|
-
S !== -1 && (a = Math.min(a, S + 1), o = Math.max(o,
|
|
405
|
+
S !== -1 && (a = Math.min(a, S + 1), o = Math.max(o, A + 1));
|
|
406
406
|
}
|
|
407
407
|
return a === 1 / 0 ? [-1, -1] : [a, o];
|
|
408
|
-
},
|
|
408
|
+
}, jt = (t, e, r) => mt(t, e, r, /* @__PURE__ */ new Set()), St = (t) => t.find((r) => r.type === "origin") || null, J = (t, e, r) => {
|
|
409
409
|
if (!t)
|
|
410
|
-
return
|
|
410
|
+
return St(e);
|
|
411
411
|
const n = r.find((a) => a.sourceNodeId === t.id);
|
|
412
412
|
if (!n)
|
|
413
413
|
return null;
|
|
414
414
|
const s = e.find((a) => a.id === n.destinationNodeId);
|
|
415
415
|
return s || null;
|
|
416
416
|
};
|
|
417
|
-
async function
|
|
417
|
+
async function Ut(t, e, r, n) {
|
|
418
418
|
const s = t ? "true" : "false", a = n.find(
|
|
419
419
|
(o) => o.sourceNodeHandle === s && o.sourceNodeId === e
|
|
420
420
|
);
|
|
421
421
|
return r.find((o) => o.id === (a == null ? void 0 : a.destinationNodeId));
|
|
422
422
|
}
|
|
423
|
-
const
|
|
423
|
+
const Q = It("experience-instance"), Wt = ut(
|
|
424
424
|
({
|
|
425
425
|
client: t,
|
|
426
426
|
experience: e,
|
|
427
427
|
target: r
|
|
428
428
|
}) => {
|
|
429
|
-
const n =
|
|
429
|
+
const n = k(), s = k(), a = k(), o = k(), c = k(), d = k(), S = e.componentStore, A = Q.store("transitioning"), _ = t.history.entriesStore.map((i) => i.filter((f) => f.experienceId === e.id)), R = _.map((i) => i.filter((f) => j(f.node))), x = _.map((i) => {
|
|
430
430
|
var f;
|
|
431
431
|
return ((f = i[i.length - 1]) == null ? void 0 : f.node) || null;
|
|
432
432
|
}), u = C(
|
|
@@ -436,53 +436,56 @@ const z = ht("experience-instance"), jt = it(
|
|
|
436
436
|
), h = C(
|
|
437
437
|
e.treeStore,
|
|
438
438
|
x,
|
|
439
|
-
({ nodes: i, edges: f }, l) => l ?
|
|
440
|
-
),
|
|
439
|
+
({ nodes: i, edges: f }, l) => l ? Ct(i, f, l) : []
|
|
440
|
+
), O = C(
|
|
441
441
|
e.treeStore,
|
|
442
442
|
x,
|
|
443
|
-
({ nodes: i, edges: f }, l) => l ?
|
|
443
|
+
({ nodes: i, edges: f }, l) => l ? jt(i, f, l) : [-1, -1]
|
|
444
444
|
), T = C(
|
|
445
445
|
e.treeStore,
|
|
446
446
|
x,
|
|
447
|
-
({ nodes: i, edges: f }, l) => l ?
|
|
448
|
-
),
|
|
447
|
+
({ nodes: i, edges: f }, l) => l ? Ht(i, f, l) : [-1, -1]
|
|
448
|
+
), b = Q.store(!1), $ = ct(b, {
|
|
449
449
|
open: () => !0,
|
|
450
450
|
close: () => !1,
|
|
451
451
|
toggle: (i) => !i,
|
|
452
452
|
set: (i, f) => f
|
|
453
|
-
}),
|
|
453
|
+
}), ht = M(async () => {
|
|
454
454
|
t.history.back({ experienceId: e.id });
|
|
455
|
-
}),
|
|
455
|
+
}), yt = F({
|
|
456
456
|
source: e.treeStore,
|
|
457
457
|
effect: async (i, f) => {
|
|
458
458
|
const l = i.nodes.find((w) => j(w) && w.stepId === f);
|
|
459
459
|
l && t.history.push({ experienceId: e.id, node: l });
|
|
460
460
|
}
|
|
461
|
-
}),
|
|
461
|
+
}), Y = F({
|
|
462
462
|
source: x,
|
|
463
463
|
effect: (i) => {
|
|
464
464
|
}
|
|
465
|
-
}),
|
|
465
|
+
}), K = F({
|
|
466
466
|
source: e.treeStore,
|
|
467
|
-
effect: async ({ nodes: i }) =>
|
|
467
|
+
effect: async ({ nodes: i }) => St(i)
|
|
468
468
|
}), V = F({
|
|
469
469
|
source: e.treeStore,
|
|
470
|
-
effect: async ({ nodes: i, edges: f }, l) =>
|
|
470
|
+
effect: async ({ nodes: i, edges: f }, l) => {
|
|
471
|
+
if (z(l))
|
|
472
|
+
return J(l, i, f);
|
|
473
|
+
}
|
|
471
474
|
}), q = F({
|
|
472
475
|
source: e.treeStore,
|
|
473
476
|
effect: async ({ nodes: i, edges: f, conditionals: l }, w) => {
|
|
474
|
-
if (!w)
|
|
477
|
+
if (!it(w))
|
|
475
478
|
return;
|
|
476
|
-
const L = l.find((
|
|
479
|
+
const L = l.find((v) => v.id === w.conditionalId);
|
|
477
480
|
if (!L)
|
|
478
481
|
return;
|
|
479
|
-
const E = w.id, y = await
|
|
480
|
-
return
|
|
482
|
+
const E = w.id, y = await ot(t, L.condition);
|
|
483
|
+
return Ut(!!y, E, i, f);
|
|
481
484
|
}
|
|
482
|
-
}),
|
|
485
|
+
}), Z = F({
|
|
483
486
|
source: e.treeStore,
|
|
484
487
|
effect: async ({ nodes: i, edges: f }, l) => {
|
|
485
|
-
if (!
|
|
488
|
+
if (!at(l))
|
|
486
489
|
return;
|
|
487
490
|
const w = l.action;
|
|
488
491
|
if (!w) {
|
|
@@ -507,61 +510,71 @@ const z = ht("experience-instance"), jt = it(
|
|
|
507
510
|
try {
|
|
508
511
|
I("info", `Executing action: ${w}`), await L.action(w);
|
|
509
512
|
const E = f.find(
|
|
510
|
-
(
|
|
513
|
+
(v) => v.sourceNodeId === l.id && v.sourceNodeHandle === "true"
|
|
511
514
|
);
|
|
512
515
|
if (!E)
|
|
513
516
|
return I("warn", `No 'true' edge found for action node ${l.id}`), null;
|
|
514
|
-
const y = i.find((
|
|
517
|
+
const y = i.find((v) => v.id === E.destinationNodeId);
|
|
515
518
|
return I("info", `Action '${w}' succeeded, moving to node ${y == null ? void 0 : y.id}`), y || null;
|
|
516
519
|
} catch (E) {
|
|
517
520
|
I("warn", `Action '${w}' failed:`, E);
|
|
518
521
|
const y = f.find(
|
|
519
|
-
(
|
|
522
|
+
(U) => U.sourceNodeId === l.id && U.sourceNodeHandle === "false"
|
|
520
523
|
);
|
|
521
524
|
if (!y)
|
|
522
525
|
return I("warn", `No 'false' edge found for action node ${l.id}`), null;
|
|
523
|
-
const
|
|
524
|
-
return I("info", `Action '${w}' failed, moving to node ${
|
|
526
|
+
const v = i.find((U) => U.id === y.destinationNodeId);
|
|
527
|
+
return I("info", `Action '${w}' failed, moving to node ${v == null ? void 0 : v.id}`), v || null;
|
|
525
528
|
}
|
|
526
529
|
}
|
|
527
|
-
}),
|
|
528
|
-
if (i)
|
|
530
|
+
}), wt = M((i) => {
|
|
531
|
+
if (st(i))
|
|
529
532
|
return t.launchExperienceById(i.experienceId);
|
|
530
|
-
}),
|
|
533
|
+
}), tt = F({
|
|
531
534
|
source: [x, e.treeStore],
|
|
532
|
-
effect: async ([i, { nodes: f, edges: l }]) =>
|
|
535
|
+
effect: async ([i, { nodes: f, edges: l }]) => J(i, f, l)
|
|
533
536
|
}), P = F({
|
|
534
537
|
source: [x, e.treeStore],
|
|
535
|
-
effect: async ([i, { nodes: f, edges: l }]) =>
|
|
536
|
-
}),
|
|
538
|
+
effect: async ([i, { nodes: f, edges: l }]) => J(i, f, l)
|
|
539
|
+
}), Nt = M((i) => {
|
|
537
540
|
t.history.push({ experienceId: e.id, node: i });
|
|
538
|
-
}),
|
|
541
|
+
}), et = F({
|
|
539
542
|
source: e.configStore,
|
|
540
|
-
effect: async ({ initializeOpenLogic: i }) =>
|
|
541
|
-
});
|
|
542
|
-
return
|
|
543
|
+
effect: async ({ initializeOpenLogic: i }) => Bt(i) ? !!await ot(t, i) : i ?? !1
|
|
544
|
+
}), X = k(), nt = k();
|
|
545
|
+
return m({
|
|
543
546
|
source: x,
|
|
544
|
-
|
|
547
|
+
target: X
|
|
548
|
+
}), m({
|
|
549
|
+
clock: X,
|
|
550
|
+
filter: (i) => i === null,
|
|
551
|
+
target: K
|
|
552
|
+
}), m({
|
|
553
|
+
clock: X,
|
|
554
|
+
filter: (i) => i !== null,
|
|
555
|
+
target: nt
|
|
556
|
+
}), xt({
|
|
557
|
+
source: nt,
|
|
558
|
+
match: (i) => it(i) ? "condition" : j(i) ? "step" : st(i) ? "launchExperience" : z(i) ? "origin" : at(i) ? "action" : "other",
|
|
545
559
|
cases: {
|
|
546
|
-
none: U,
|
|
547
560
|
origin: V,
|
|
548
561
|
condition: q,
|
|
549
|
-
step:
|
|
550
|
-
launchExperience:
|
|
551
|
-
action:
|
|
552
|
-
__:
|
|
562
|
+
step: Y,
|
|
563
|
+
launchExperience: wt,
|
|
564
|
+
action: Z,
|
|
565
|
+
__: k()
|
|
553
566
|
}
|
|
554
567
|
}), m({
|
|
555
568
|
clock: [
|
|
556
569
|
q.doneData,
|
|
557
570
|
V.doneData,
|
|
558
|
-
|
|
571
|
+
K.doneData,
|
|
559
572
|
P.doneData,
|
|
560
|
-
|
|
561
|
-
|
|
573
|
+
tt.doneData,
|
|
574
|
+
Z.doneData
|
|
562
575
|
],
|
|
563
576
|
filter: Boolean,
|
|
564
|
-
target:
|
|
577
|
+
target: Nt
|
|
565
578
|
}), m({
|
|
566
579
|
clock: s,
|
|
567
580
|
target: P
|
|
@@ -594,18 +607,18 @@ const z = ht("experience-instance"), jt = it(
|
|
|
594
607
|
}))
|
|
595
608
|
}), m({
|
|
596
609
|
clock: a,
|
|
597
|
-
target:
|
|
598
|
-
}), m({ clock: o, target:
|
|
610
|
+
target: ht
|
|
611
|
+
}), m({ clock: o, target: yt }), m({
|
|
599
612
|
source: C([
|
|
600
613
|
q.pending,
|
|
601
614
|
V.pending,
|
|
602
|
-
|
|
615
|
+
K.pending,
|
|
603
616
|
P.pending
|
|
604
617
|
]),
|
|
605
618
|
fn: (i) => i.some(Boolean) ? "transitioning" : "ready",
|
|
606
|
-
target:
|
|
619
|
+
target: A
|
|
607
620
|
}), m({
|
|
608
|
-
clock:
|
|
621
|
+
clock: Y.doneData,
|
|
609
622
|
source: u,
|
|
610
623
|
filter: Boolean,
|
|
611
624
|
target: t.eventBus.prepend((i) => ({
|
|
@@ -615,29 +628,29 @@ const z = ht("experience-instance"), jt = it(
|
|
|
615
628
|
}))
|
|
616
629
|
}), m({
|
|
617
630
|
clock: d,
|
|
618
|
-
target:
|
|
631
|
+
target: et
|
|
619
632
|
}), m({
|
|
620
|
-
source:
|
|
633
|
+
source: et.doneData,
|
|
621
634
|
fn: Boolean,
|
|
622
|
-
target:
|
|
635
|
+
target: b
|
|
623
636
|
}), m({
|
|
624
637
|
source: x,
|
|
625
638
|
clock: n,
|
|
626
|
-
filter: (i) => i ?
|
|
627
|
-
target:
|
|
639
|
+
filter: (i) => i ? z(i) : !0,
|
|
640
|
+
target: tt
|
|
628
641
|
}), m({
|
|
629
|
-
source:
|
|
642
|
+
source: b,
|
|
630
643
|
filter: Boolean,
|
|
631
644
|
target: n
|
|
632
645
|
}), m({
|
|
633
|
-
source:
|
|
646
|
+
source: b,
|
|
634
647
|
filter: Boolean,
|
|
635
648
|
target: t.eventBus.prepend(() => ({
|
|
636
649
|
type: "experience_open",
|
|
637
650
|
experience: e
|
|
638
651
|
}))
|
|
639
652
|
}), m({
|
|
640
|
-
source:
|
|
653
|
+
source: b,
|
|
641
654
|
filter: (i) => !i,
|
|
642
655
|
target: t.eventBus.prepend(() => ({
|
|
643
656
|
type: "experience_close",
|
|
@@ -654,9 +667,9 @@ const z = ht("experience-instance"), jt = it(
|
|
|
654
667
|
target: r,
|
|
655
668
|
componentStore: S,
|
|
656
669
|
// state
|
|
657
|
-
stateStore:
|
|
670
|
+
stateStore: A,
|
|
658
671
|
// open close
|
|
659
|
-
isOpenStore:
|
|
672
|
+
isOpenStore: b,
|
|
660
673
|
open: $.open,
|
|
661
674
|
close: $.close,
|
|
662
675
|
toggleOpen: $.toggle,
|
|
@@ -666,7 +679,7 @@ const z = ht("experience-instance"), jt = it(
|
|
|
666
679
|
currentNodeStore: x,
|
|
667
680
|
currentStepStore: u,
|
|
668
681
|
nextReachableStepNodesStore: h,
|
|
669
|
-
stepsToOriginStore:
|
|
682
|
+
stepsToOriginStore: O,
|
|
670
683
|
stepsToLeafStore: T,
|
|
671
684
|
// history
|
|
672
685
|
goToNextStep: s,
|
|
@@ -676,50 +689,50 @@ const z = ht("experience-instance"), jt = it(
|
|
|
676
689
|
};
|
|
677
690
|
}
|
|
678
691
|
);
|
|
679
|
-
function
|
|
680
|
-
return
|
|
692
|
+
function Gt(t) {
|
|
693
|
+
return ft(Wt, t);
|
|
681
694
|
}
|
|
682
|
-
const
|
|
683
|
-
const e =
|
|
695
|
+
const Kt = ut(({ client: t }) => {
|
|
696
|
+
const e = Q.store({}), r = k(), n = k(), s = k(), a = ct(e, {
|
|
684
697
|
register(u, h) {
|
|
685
|
-
const
|
|
698
|
+
const O = [
|
|
686
699
|
...u[h.experienceId] ?? []
|
|
687
700
|
];
|
|
688
|
-
return
|
|
701
|
+
return O.push(h), {
|
|
689
702
|
...u,
|
|
690
|
-
[h.experienceId]:
|
|
703
|
+
[h.experienceId]: O
|
|
691
704
|
};
|
|
692
705
|
},
|
|
693
706
|
unregister(u, h) {
|
|
694
|
-
var
|
|
695
|
-
const
|
|
707
|
+
var b;
|
|
708
|
+
const O = h.experienceId, T = (b = u[O]) == null ? void 0 : b.filter(
|
|
696
709
|
($) => $ !== h
|
|
697
710
|
);
|
|
698
711
|
return {
|
|
699
712
|
...u,
|
|
700
|
-
[
|
|
713
|
+
[O]: T ?? []
|
|
701
714
|
};
|
|
702
715
|
}
|
|
703
716
|
}), o = M(
|
|
704
|
-
({ experience: u, target: h }) =>
|
|
717
|
+
({ experience: u, target: h }) => Gt({ client: t, experience: u, target: h })
|
|
705
718
|
), c = M((u) => {
|
|
706
719
|
a.register(u);
|
|
707
720
|
}), d = M(
|
|
708
721
|
(u) => {
|
|
709
|
-
u.target &&
|
|
722
|
+
u.target && Mt(u.target, () => {
|
|
710
723
|
s(u);
|
|
711
724
|
});
|
|
712
725
|
}
|
|
713
726
|
), S = M((u) => {
|
|
714
727
|
a.unregister(u);
|
|
715
|
-
}),
|
|
728
|
+
}), A = M((u) => {
|
|
716
729
|
const h = u.componentStore.getState();
|
|
717
730
|
if (!h) {
|
|
718
731
|
I("warn", "No app component registered. Skipping init.");
|
|
719
732
|
return;
|
|
720
733
|
}
|
|
721
|
-
const
|
|
722
|
-
if (!
|
|
734
|
+
const O = h.frameworkStore.getState();
|
|
735
|
+
if (!O) {
|
|
723
736
|
I(
|
|
724
737
|
"error",
|
|
725
738
|
`No framework registered for component '${h.name}'. Skipping rendering.`
|
|
@@ -734,9 +747,9 @@ const Gt = it(({ client: t }) => {
|
|
|
734
747
|
);
|
|
735
748
|
return;
|
|
736
749
|
}
|
|
737
|
-
const
|
|
750
|
+
const b = $t(T);
|
|
738
751
|
try {
|
|
739
|
-
|
|
752
|
+
O.render(b, h.component, t, u);
|
|
740
753
|
} catch ($) {
|
|
741
754
|
I("error", $);
|
|
742
755
|
}
|
|
@@ -762,7 +775,7 @@ const Gt = it(({ client: t }) => {
|
|
|
762
775
|
}))
|
|
763
776
|
}), m({
|
|
764
777
|
clock: n,
|
|
765
|
-
target:
|
|
778
|
+
target: A
|
|
766
779
|
});
|
|
767
780
|
function _(u, h) {
|
|
768
781
|
r({ experience: u, target: h });
|
|
@@ -777,18 +790,18 @@ const Gt = it(({ client: t }) => {
|
|
|
777
790
|
listStore: R
|
|
778
791
|
};
|
|
779
792
|
});
|
|
780
|
-
function
|
|
781
|
-
return
|
|
793
|
+
function ee(t) {
|
|
794
|
+
return ft(Kt, t);
|
|
782
795
|
}
|
|
783
796
|
export {
|
|
784
797
|
j as a,
|
|
785
|
-
|
|
786
|
-
|
|
787
|
-
|
|
788
|
-
|
|
789
|
-
|
|
790
|
-
|
|
791
|
-
|
|
792
|
-
|
|
793
|
-
|
|
798
|
+
ee as b,
|
|
799
|
+
Zt as c,
|
|
800
|
+
Qt as d,
|
|
801
|
+
ot as e,
|
|
802
|
+
Dt as f,
|
|
803
|
+
Yt as g,
|
|
804
|
+
Gt as h,
|
|
805
|
+
Bt as i,
|
|
806
|
+
te as t
|
|
794
807
|
};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"use strict";const i=require("effector"),q=require("@withease/factories"),H=require("./supports-YvpQZxbh.cjs"),N=require("./logger-BsmHUUw1.cjs"),ye=require("./object-BbFTsGh3.cjs");function we(e){return typeof e=="number"&&!isNaN(e)}function R(e){return typeof e=="string"}function E(e){return Array.isArray(e)}function ie(e){return e instanceof Promise}function ne(e){return typeof e=="object"&&e!==null&&!Array.isArray(e)&&Object.keys(e).length===1}function m(e){if(we(e))return e;const t=parseFloat(`${e}`);return isNaN(t)?0:t}function T(e){return`${e}`}const Ee={"==":(e,t)=>e==t,"===":(e,t)=>e===t,"!=":(e,t)=>e!=t,"!==":(e,t)=>e!==t,">":(e,t)=>m(e)>m(t),">=":(e,t)=>m(e)>=m(t),"<":(e,t,r)=>{const n=m(e),a=m(t);if(r===void 0)return n<a;const c=m(r);return n<a&&a<c},"<=":(e,t,r)=>{const n=m(e),a=m(t);if(r===void 0)return n<=a;const c=m(r);return n<=a&&a<=c},"!!":async e=>await O(e),"!":async e=>!await O(e),"%":(e,t)=>m(e)%m(t),log:e=>(console.log(e),e),in:(e,t)=>t?R(t)?t.indexOf(T(e))!==-1:E(t)?t.includes(e):!1:!1,cat:(...e)=>e.map(T).join(""),substr:(e,t,r)=>{const n=T(e),a=m(t);if(r===void 0)return n.substr(a);const c=m(r);if(c<0){const o=n.substr(a);return o.substr(0,o.length+c)}return n.substr(a,c)},"+":(...e)=>e.reduce((t,r)=>m(t)+m(r),0),"*":(...e)=>e.reduce((t,r)=>m(t)*m(r),1),"-":(e,t)=>{const r=m(e);return t===void 0?-r:r-m(t)},"/":(e,t)=>m(e)/m(t),min:(...e)=>Math.min(...e.map(m)),max:(...e)=>Math.max(...e.map(m)),merge:(...e)=>e.reduce((t,r)=>E(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=T(e);if(n===""||n===".")return this;const a=n.split(".");let c=this;for(const o of a){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=E(e[0])?e[0]:e,r=[];for(const n of t){const a=await g({var:n},this);(a===null||a==="")&&r.push(`${n}`)}return r},async missing_some(e,t){const r=await g({missing:t},this);if(!E(r)||!E(t))return[];const n=r.filter(R);return t.filter(R).length-n.length>=m(e)?[]:n},invoke(...e){const[t,...r]=e;return typeof t!="function"?null:Reflect.apply(t,null,r)},regexp_matches(e,t){let r=e,n="";if(E(e)){const[c,o]=e;r=c,n=o}return!R(r)||!R(n)?!1:new RegExp(r,n).test(T(t))},throw(e){throw new Error(T(e))}};async function g(e,t){if(!e)return e;if(ie(e))return g(await e,t);if(E(e))return Promise.all(e.map(o=>g(o,t)));if(!ne(e))return e;const r=Ne(e);let n=r?e[r]??[]:[];switch(E(n)||(n=[n]),r){case"if":case"?:":for(let o=0;o<n.length-1;o+=2)if(await O(await g(n[o],t)))return g(n[o+1],t);return n.length%2===1?g(n[n.length-1],t):null;case"and":{let o=null;for(const u of n)if(o=await g(u,t),!await O(o))return o;return o}case"or":{let o=null;for(const u of n)if(o=await g(u,t),await O(o))return o;return o}case"map":{const o=await g(n[0],t);return E(o)?await Promise.all(o.map(u=>g(n[1],u))):[]}case"filter":{const o=await g(n[0],t);return E(o)?(await Promise.all(o.map(async p=>{const h=await O(await g(n[1],p));return{item:p,shouldInclude:h}}))).filter(({shouldInclude:p})=>p).map(({item:p})=>p):[]}case"reduce":{const o=await g(n[0],t);if(!E(o))return n.length>2?await g(n[2],t):null;const u=n[1];let h=n.length>2?await g(n[2],t):null;for(const k of o)h=await g(u,{current:k,accumulator:h});return h}case"all":{const o=await g(n[0],t);if(!E(o)||o.length===0)return!1;for(const u of o)if(!await O(await g(n[1],u)))return!1;return!0}case"some":{const o=await g(n[0],t);if(!E(o))return!1;for(const u of o)if(await O(await g(n[1],u)))return!0;return!1}case"none":{const o=await g(n[0],t);if(!E(o))return!0;for(const u of o)if(await O(await g(n[1],u)))return!1;return!0}case"catch":try{return await g(n[0],t)}catch(o){return ne(o)?await g(o,t):n[1]?await g(n[1],o):o instanceof Error?o.message:o}}const a=await Promise.all(n.map(o=>g(o,t))),c=r?Ee[r]:void 0;if(!c)throw new Error(`Unrecognized operation ${r}`);return c.apply(t,a)}async function O(e){return ie(e)?O(await e):!(Array.isArray(e)&&e.length===0)&&!!e}function Ne(e){return Object.keys(e)[0]}function ae(e){return!ye.isEmpty(e)}async function z(e,t,r){const n=e.getStateSnapshot(),a=e.predicates.listStore.getState().reduce((u,p)=>({...u,[p.name]:(...h)=>p.predicate({...n,args:h})}),{}),c=e.features.listStore.getState().reduce((u,p)=>({...u,[p.id]:async()=>{const{bucket:h}=await p.getBucket();return h}}),{}),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:a,features:c};return await g(t,o)}function Ie(e){return!H.supportsWindow()||!H.supportsDocument()?[]:Array.from(window.document.querySelectorAll(e)).filter(t=>t instanceof HTMLElement)}const xe="open";function ke(e){if(!H.supportsShadowRoot())throw new Error("Shadow DOM is not supported in this environment");return e.attachShadow({mode:xe})}function ve(){return new Promise((e,t)=>{if(!H.supportsDocument()){t();return}document.readyState!=="loading"?e():document.addEventListener("readystatechange",()=>e(),{once:!0})})}function be(e,t){const r=new MutationObserver(n=>{document.contains(e)||(r.disconnect(),t())});r.observe(document.body,{childList:!0,subtree:!0})}const C="picked-root",j="picked-target",Ae="picked-root";function Oe(e,t){return[...e,{selector:`${Ae}[experience-id="${t}"]`,placement:"replace"}].flatMap(n=>{const a=Ie(n.selector).filter(c=>!_e(c,t)&&!ce(c,t));return{...n,elements:a}})}function Fe(e,t){return e.flatMap(r=>r.elements.map(n=>Te(n,r.placement,t)))}function Be(e,t){e.classList.add(j),e.classList.add(`${j}-${t}`)}function _e(e,t){return t?e.classList.contains(`${j}-${t}`):e.classList.contains(`${j}`)}function ce(e,t){return t?e.classList.contains(`${C}-${t}`):e.classList.contains(C)}function $e(e){const t=document.createElement("div");return t.style.display="block",t.classList.add(C),t.classList.add(`${C}-${e}`),t}function Te(e,t,r){let n;const a=$e(r);if(e instanceof Document)n=e.body.appendChild(a);else{switch(t){case"replace":e.replaceWith(a);break;case"before":e.before(a);break;case"after":e.after(a);break;case"prepend":e.prepend(a);break;default:e.append(a);break}n=a}return n}function re(e){return e.type==="conditional"}function M(e){return e.type==="step"}function oe(e){return e.type==="experience"}function V(e){return e.type==="origin"}function se(e){return e.type==="action"}const ue=(e,t,r,n,a=new Set)=>a.has(r.id)?[]:(a.add(r.id),M(r)&&!n?[r]:t.filter(o=>o.sourceNodeId===r.id).flatMap(o=>{const u=e.find(p=>p.id===o.destinationNodeId);return u?ue(e,t,u,!1,a):[]})),Me=(e,t,r)=>ue(e,t,r,!0,new Set),fe=(e,t,r,n,a=new Set)=>{if(a.has(r.id))return[-1,-1];a.add(r.id);const c=t.filter(p=>p.sourceNodeId===r.id);if(c.length===0)return[0,0];let o=1/0,u=-1/0;for(const p of c){const h=e.find(L=>L.id===p.destinationNodeId);if(!h)continue;const[k,F]=fe(e,t,h,!1,new Set(a));k!==-1&&(o=Math.min(o,k+1),u=Math.max(u,F+1))}return o===1/0?[-1,-1]:[o,u]},Le=(e,t,r)=>fe(e,t,r,!0,new Set),le=(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 a=t.filter(u=>u.destinationNodeId===r.id);if(a.length===0)return[-1,-1];let c=1/0,o=-1/0;for(const u of a){const p=e.find(F=>F.id===u.sourceNodeId);if(!p)continue;const[h,k]=le(e,t,p,new Set(n));h!==-1&&(c=Math.min(c,h+1),o=Math.max(o,k+1))}return c===1/0?[-1,-1]:[c,o]},De=(e,t,r)=>le(e,t,r,new Set),de=e=>e.find(r=>r.type==="origin")||null,X=(e,t,r)=>{if(!e)return de(t);const n=r.find(c=>c.sourceNodeId===e.id);if(!n)return null;const a=t.find(c=>c.id===n.destinationNodeId);return a||null};async function Re(e,t,r,n){const a=e?"true":"false",c=n.find(o=>o.sourceNodeHandle===a&&o.sourceNodeId===t);return r.find(o=>o.id===(c==null?void 0:c.destinationNodeId))}const J=i.createDomain("experience-instance"),Pe=q.createFactory(({client:e,experience:t,target:r})=>{const n=i.createEvent(),a=i.createEvent(),c=i.createEvent(),o=i.createEvent(),u=i.createEvent(),p=i.createEvent(),h=t.componentStore,k=J.store("transitioning"),F=e.history.entriesStore.map(s=>s.filter(l=>l.experienceId===t.id)),L=F.map(s=>s.filter(l=>M(l.node))),I=F.map(s=>{var l;return((l=s[s.length-1])==null?void 0:l.node)||null}),f=i.combine(t.treeStore,I,({steps:s},l)=>s.find(d=>l&&M(l)&&d.id===l.stepId)||null),S=i.combine(t.treeStore,I,({nodes:s,edges:l},d)=>d?Me(s,l,d):[]),A=i.combine(t.treeStore,I,({nodes:s,edges:l},d)=>d?De(s,l,d):[-1,-1]),_=i.combine(t.treeStore,I,({nodes:s,edges:l},d)=>d?Le(s,l,d):[-1,-1]),v=J.store(!1),B=i.createApi(v,{open:()=>!0,close:()=>!1,toggle:s=>!s,set:(s,l)=>l}),ge=i.createEffect(async()=>{e.history.back({experienceId:t.id})}),me=i.attach({source:t.treeStore,effect:async(s,l)=>{const d=s.nodes.find(w=>M(w)&&w.stepId===l);d&&e.history.push({experienceId:t.id,node:d})}}),Q=i.attach({source:I,effect:s=>{}}),U=i.attach({source:t.treeStore,effect:async({nodes:s})=>de(s)}),W=i.attach({source:t.treeStore,effect:async({nodes:s,edges:l},d)=>{if(V(d))return X(d,s,l)}}),G=i.attach({source:t.treeStore,effect:async({nodes:s,edges:l,conditionals:d},w)=>{if(!re(w))return;const $=d.find(b=>b.id===w.conditionalId);if(!$)return;const x=w.id,y=await z(e,$.condition);return Re(!!y,x,s,l)}}),Y=i.attach({source:t.treeStore,effect:async({nodes:s,edges:l},d)=>{if(!se(d))return;const w=d.action;if(!w){N.logger("warn",`Action node ${d.id} has no action name`);return}const $=e.actions.getByName(w).getState();if(!$){N.logger("warn",`Action '${w}' not registered on client`);const x=l.find(y=>y.sourceNodeId===d.id&&y.sourceNodeHandle==="false");return x?s.find(y=>y.id===x.destinationNodeId):null}if(typeof $.action!="function"){N.logger("warn",`Action '${w}' is not a function`);const x=l.find(y=>y.sourceNodeId===d.id&&y.sourceNodeHandle==="false");return x?s.find(y=>y.id===x.destinationNodeId):null}try{N.logger("info",`Executing action: ${w}`),await $.action(w);const x=l.find(b=>b.sourceNodeId===d.id&&b.sourceNodeHandle==="true");if(!x)return N.logger("warn",`No 'true' edge found for action node ${d.id}`),null;const y=s.find(b=>b.id===x.destinationNodeId);return N.logger("info",`Action '${w}' succeeded, moving to node ${y==null?void 0:y.id}`),y||null}catch(x){N.logger("warn",`Action '${w}' failed:`,x);const y=l.find(P=>P.sourceNodeId===d.id&&P.sourceNodeHandle==="false");if(!y)return N.logger("warn",`No 'false' edge found for action node ${d.id}`),null;const b=s.find(P=>P.id===y.destinationNodeId);return N.logger("info",`Action '${w}' failed, moving to node ${b==null?void 0:b.id}`),b||null}}}),he=i.createEffect(s=>{if(oe(s))return e.launchExperienceById(s.experienceId)}),Z=i.attach({source:[I,t.treeStore],effect:async([s,{nodes:l,edges:d}])=>X(s,l,d)}),D=i.attach({source:[I,t.treeStore],effect:async([s,{nodes:l,edges:d}])=>X(s,l,d)}),Se=i.createEffect(s=>{e.history.push({experienceId:t.id,node:s})}),ee=i.attach({source:t.configStore,effect:async({initializeOpenLogic:s})=>ae(s)?!!await z(e,s):s??!1}),K=i.createEvent(),te=i.createEvent();return i.sample({source:I,target:K}),i.sample({clock:K,filter:s=>s===null,target:U}),i.sample({clock:K,filter:s=>s!==null,target:te}),i.split({source:te,match:s=>re(s)?"condition":M(s)?"step":oe(s)?"launchExperience":V(s)?"origin":se(s)?"action":"other",cases:{origin:W,condition:G,step:Q,launchExperience:he,action:Y,__:i.createEvent()}}),i.sample({clock:[G.doneData,W.doneData,U.doneData,D.doneData,Z.doneData,Y.doneData],filter:Boolean,target:Se}),i.sample({clock:a,target:D}),i.sample({clock:a,source:f,filter:Boolean,target:e.eventBus.prepend(s=>({type:"step_submit",step:s,experience:t}))}),i.sample({clock:D.done,source:f,filter:Boolean,target:e.eventBus.prepend(s=>({type:"step_submit_success",step:s,experience:t}))}),i.sample({clock:D.fail,source:f,filter:Boolean,target:e.eventBus.prepend(s=>({type:"step_submit_error",step:s,experience:t}))}),i.sample({clock:c,target:ge}),i.sample({clock:o,target:me}),i.sample({source:i.combine([G.pending,W.pending,U.pending,D.pending]),fn:s=>s.some(Boolean)?"transitioning":"ready",target:k}),i.sample({clock:Q.doneData,source:f,filter:Boolean,target:e.eventBus.prepend(s=>({type:"step_enter",step:s,experience:t}))}),i.sample({clock:p,target:ee}),i.sample({source:ee.doneData,fn:Boolean,target:v}),i.sample({source:I,clock:n,filter:s=>s?V(s):!0,target:Z}),i.sample({source:v,filter:Boolean,target:n}),i.sample({source:v,filter:Boolean,target:e.eventBus.prepend(()=>({type:"experience_open",experience:t}))}),i.sample({source:v,filter:s=>!s,target:e.eventBus.prepend(()=>({type:"experience_close",experience:t}))}),i.sample({clock:u,target:[p]}),u(),{id:Math.random().toString(36).substring(7),experienceId:t.id,configStore:t.configStore,target:r,componentStore:h,stateStore:k,isOpenStore:v,open:B.open,close:B.close,toggleOpen:B.toggle,setOpen:B.set,treeStore:t.treeStore,currentNodeStore:I,currentStepStore:f,nextReachableStepNodesStore:S,stepsToOriginStore:A,stepsToLeafStore:_,goToNextStep:a,goToPreviousStep:c,goToStepById:o,stepsHistoryStore:L}});function pe(e){return q.invoke(Pe,e)}const He=q.createFactory(({client:e})=>{const t=J.store({}),r=i.createEvent(),n=i.createEvent(),a=i.createEvent(),c=i.createApi(t,{register(f,S){const A=[...f[S.experienceId]??[]];return A.push(S),{...f,[S.experienceId]:A}},unregister(f,S){var v;const A=S.experienceId,_=(v=f[A])==null?void 0:v.filter(B=>B!==S);return{...f,[A]:_??[]}}}),o=i.createEffect(({experience:f,target:S})=>pe({client:e,experience:f,target:S})),u=i.createEffect(f=>{c.register(f)}),p=i.createEffect(f=>{f.target&&be(f.target,()=>{a(f)})}),h=i.createEffect(f=>{c.unregister(f)}),k=i.createEffect(f=>{const S=f.componentStore.getState();if(!S){N.logger("warn","No app component registered. Skipping init.");return}const A=S.frameworkStore.getState();if(!A){N.logger("error",`No framework registered for component '${S.name}'. Skipping rendering.`);return}const _=f.target;if(!_){N.logger("error",`No target element registered for experience '${f.experienceId}'. Skipping rendering.`);return}const v=ke(_);try{A.render(v,S.component,e,f)}catch(B){N.logger("error",B)}});i.sample({clock:r,target:o}),i.sample({clock:a,target:h}),i.sample({clock:o.doneData,target:[u,p,n]}),i.sample({clock:o.doneData,target:e.eventBus.prepend(f=>({type:"experience_initialize",experienceInstance:f}))}),i.sample({clock:n,target:k});function F(f,S){r({experience:f,target:S})}const L=t.map(f=>Object.values(f).flat());function I(f){return t.map(S=>S[f]||[],{skipVoid:!1})}return{spawn:F,getByExperienceId:I,listStore:L}});function Ce(e){return q.invoke(He,e)}exports.createAppHosts=Fe;exports.createExperienceInstance=pe;exports.createExperienceInstanceIndex=Ce;exports.domInteractive=ve;exports.evaluateRuleLogic=z;exports.getTargetElements=Oe;exports.isPickedRoot=ce;exports.isRulesLogic=ae;exports.isStepNode=M;exports.tagTargetElement=Be;
|
|
@@ -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;AAoB1C,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;AAoB1C,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;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAsbF,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"}
|
package/package.json
CHANGED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
"use strict";const i=require("effector"),q=require("@withease/factories"),H=require("./supports-YvpQZxbh.cjs"),N=require("./logger-BsmHUUw1.cjs"),ge=require("./object-BbFTsGh3.cjs");function me(e){return typeof e=="number"&&!isNaN(e)}function R(e){return typeof e=="string"}function E(e){return Array.isArray(e)}function ne(e){return e instanceof Promise}function Z(e){return typeof e=="object"&&e!==null&&!Array.isArray(e)&&Object.keys(e).length===1}function m(e){if(me(e))return e;const t=parseFloat(`${e}`);return isNaN(t)?0:t}function T(e){return`${e}`}const he={"==":(e,t)=>e==t,"===":(e,t)=>e===t,"!=":(e,t)=>e!=t,"!==":(e,t)=>e!==t,">":(e,t)=>m(e)>m(t),">=":(e,t)=>m(e)>=m(t),"<":(e,t,r)=>{const n=m(e),a=m(t);if(r===void 0)return n<a;const c=m(r);return n<a&&a<c},"<=":(e,t,r)=>{const n=m(e),a=m(t);if(r===void 0)return n<=a;const c=m(r);return n<=a&&a<=c},"!!":async e=>await O(e),"!":async e=>!await O(e),"%":(e,t)=>m(e)%m(t),log:e=>(console.log(e),e),in:(e,t)=>t?R(t)?t.indexOf(T(e))!==-1:E(t)?t.includes(e):!1:!1,cat:(...e)=>e.map(T).join(""),substr:(e,t,r)=>{const n=T(e),a=m(t);if(r===void 0)return n.substr(a);const c=m(r);if(c<0){const o=n.substr(a);return o.substr(0,o.length+c)}return n.substr(a,c)},"+":(...e)=>e.reduce((t,r)=>m(t)+m(r),0),"*":(...e)=>e.reduce((t,r)=>m(t)*m(r),1),"-":(e,t)=>{const r=m(e);return t===void 0?-r:r-m(t)},"/":(e,t)=>m(e)/m(t),min:(...e)=>Math.min(...e.map(m)),max:(...e)=>Math.max(...e.map(m)),merge:(...e)=>e.reduce((t,r)=>E(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=T(e);if(n===""||n===".")return this;const a=n.split(".");let c=this;for(const o of a){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=E(e[0])?e[0]:e,r=[];for(const n of t){const a=await g({var:n},this);(a===null||a==="")&&r.push(`${n}`)}return r},async missing_some(e,t){const r=await g({missing:t},this);if(!E(r)||!E(t))return[];const n=r.filter(R);return t.filter(R).length-n.length>=m(e)?[]:n},invoke(...e){const[t,...r]=e;return typeof t!="function"?null:Reflect.apply(t,null,r)},regexp_matches(e,t){let r=e,n="";if(E(e)){const[c,o]=e;r=c,n=o}return!R(r)||!R(n)?!1:new RegExp(r,n).test(T(t))},throw(e){throw new Error(T(e))}};async function g(e,t){if(!e)return e;if(ne(e))return g(await e,t);if(E(e))return Promise.all(e.map(o=>g(o,t)));if(!Z(e))return e;const r=Se(e);let n=r?e[r]??[]:[];switch(E(n)||(n=[n]),r){case"if":case"?:":for(let o=0;o<n.length-1;o+=2)if(await O(await g(n[o],t)))return g(n[o+1],t);return n.length%2===1?g(n[n.length-1],t):null;case"and":{let o=null;for(const u of n)if(o=await g(u,t),!await O(o))return o;return o}case"or":{let o=null;for(const u of n)if(o=await g(u,t),await O(o))return o;return o}case"map":{const o=await g(n[0],t);return E(o)?await Promise.all(o.map(u=>g(n[1],u))):[]}case"filter":{const o=await g(n[0],t);return E(o)?(await Promise.all(o.map(async p=>{const h=await O(await g(n[1],p));return{item:p,shouldInclude:h}}))).filter(({shouldInclude:p})=>p).map(({item:p})=>p):[]}case"reduce":{const o=await g(n[0],t);if(!E(o))return n.length>2?await g(n[2],t):null;const u=n[1];let h=n.length>2?await g(n[2],t):null;for(const k of o)h=await g(u,{current:k,accumulator:h});return h}case"all":{const o=await g(n[0],t);if(!E(o)||o.length===0)return!1;for(const u of o)if(!await O(await g(n[1],u)))return!1;return!0}case"some":{const o=await g(n[0],t);if(!E(o))return!1;for(const u of o)if(await O(await g(n[1],u)))return!0;return!1}case"none":{const o=await g(n[0],t);if(!E(o))return!0;for(const u of o)if(await O(await g(n[1],u)))return!1;return!0}case"catch":try{return await g(n[0],t)}catch(o){return Z(o)?await g(o,t):n[1]?await g(n[1],o):o instanceof Error?o.message:o}}const a=await Promise.all(n.map(o=>g(o,t))),c=r?he[r]:void 0;if(!c)throw new Error(`Unrecognized operation ${r}`);return c.apply(t,a)}async function O(e){return ne(e)?O(await e):!(Array.isArray(e)&&e.length===0)&&!!e}function Se(e){return Object.keys(e)[0]}function re(e){return!ge.isEmpty(e)}async function V(e,t,r){const n=e.getStateSnapshot(),a=e.predicates.listStore.getState().reduce((u,p)=>({...u,[p.name]:(...h)=>p.predicate({...n,args:h})}),{}),c=e.features.listStore.getState().reduce((u,p)=>({...u,[p.id]:async()=>{const{bucket:h}=await p.getBucket();return h}}),{}),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:a,features:c};return await g(t,o)}function ye(e){return!H.supportsWindow()||!H.supportsDocument()?[]:Array.from(window.document.querySelectorAll(e)).filter(t=>t instanceof HTMLElement)}const we="open";function Ee(e){if(!H.supportsShadowRoot())throw new Error("Shadow DOM is not supported in this environment");return e.attachShadow({mode:we})}function Ne(){return new Promise((e,t)=>{if(!H.supportsDocument()){t();return}document.readyState!=="loading"?e():document.addEventListener("readystatechange",()=>e(),{once:!0})})}function Ie(e,t){const r=new MutationObserver(n=>{document.contains(e)||(r.disconnect(),t())});r.observe(document.body,{childList:!0,subtree:!0})}const C="picked-root",j="picked-target",xe="picked-root";function ke(e,t){return[...e,{selector:`${xe}[experience-id="${t}"]`,placement:"replace"}].flatMap(n=>{const a=ye(n.selector).filter(c=>!Ae(c,t)&&!oe(c,t));return{...n,elements:a}})}function ve(e,t){return e.flatMap(r=>r.elements.map(n=>Fe(n,r.placement,t)))}function be(e,t){e.classList.add(j),e.classList.add(`${j}-${t}`)}function Ae(e,t){return t?e.classList.contains(`${j}-${t}`):e.classList.contains(`${j}`)}function oe(e,t){return t?e.classList.contains(`${C}-${t}`):e.classList.contains(C)}function Oe(e){const t=document.createElement("div");return t.style.display="block",t.classList.add(C),t.classList.add(`${C}-${e}`),t}function Fe(e,t,r){let n;const a=Oe(r);if(e instanceof Document)n=e.body.appendChild(a);else{switch(t){case"replace":e.replaceWith(a);break;case"before":e.before(a);break;case"after":e.after(a);break;case"prepend":e.prepend(a);break;default:e.append(a);break}n=a}return n}function Be(e){return e.type==="conditional"}function M(e){return e.type==="step"}function _e(e){return e.type==="experience"}function ee(e){return e.type==="origin"}function te(e){return e.type==="action"}const se=(e,t,r,n,a=new Set)=>a.has(r.id)?[]:(a.add(r.id),M(r)&&!n?[r]:t.filter(o=>o.sourceNodeId===r.id).flatMap(o=>{const u=e.find(p=>p.id===o.destinationNodeId);return u?se(e,t,u,!1,a):[]})),$e=(e,t,r)=>se(e,t,r,!0,new Set),ie=(e,t,r,n,a=new Set)=>{if(a.has(r.id))return[-1,-1];a.add(r.id);const c=t.filter(p=>p.sourceNodeId===r.id);if(c.length===0)return[0,0];let o=1/0,u=-1/0;for(const p of c){const h=e.find(L=>L.id===p.destinationNodeId);if(!h)continue;const[k,F]=ie(e,t,h,!1,new Set(a));k!==-1&&(o=Math.min(o,k+1),u=Math.max(u,F+1))}return o===1/0?[-1,-1]:[o,u]},Te=(e,t,r)=>ie(e,t,r,!0,new Set),ae=(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 a=t.filter(u=>u.destinationNodeId===r.id);if(a.length===0)return[-1,-1];let c=1/0,o=-1/0;for(const u of a){const p=e.find(F=>F.id===u.sourceNodeId);if(!p)continue;const[h,k]=ae(e,t,p,new Set(n));h!==-1&&(c=Math.min(c,h+1),o=Math.max(o,k+1))}return c===1/0?[-1,-1]:[c,o]},Me=(e,t,r)=>ae(e,t,r,new Set),ce=e=>e.find(r=>r.type==="origin")||null,U=(e,t,r)=>{if(!e)return ce(t);const n=r.find(c=>c.sourceNodeId===e.id);if(!n)return null;const a=t.find(c=>c.id===n.destinationNodeId);return a||null};async function Le(e,t,r,n){const a=e?"true":"false",c=n.find(o=>o.sourceNodeHandle===a&&o.sourceNodeId===t);return r.find(o=>o.id===(c==null?void 0:c.destinationNodeId))}const X=i.createDomain("experience-instance"),De=q.createFactory(({client:e,experience:t,target:r})=>{const n=i.createEvent(),a=i.createEvent(),c=i.createEvent(),o=i.createEvent(),u=i.createEvent(),p=i.createEvent(),h=t.componentStore,k=X.store("transitioning"),F=e.history.entriesStore.map(s=>s.filter(l=>l.experienceId===t.id)),L=F.map(s=>s.filter(l=>M(l.node))),I=F.map(s=>{var l;return((l=s[s.length-1])==null?void 0:l.node)||null}),f=i.combine(t.treeStore,I,({steps:s},l)=>s.find(d=>l&&M(l)&&d.id===l.stepId)||null),S=i.combine(t.treeStore,I,({nodes:s,edges:l},d)=>d?$e(s,l,d):[]),A=i.combine(t.treeStore,I,({nodes:s,edges:l},d)=>d?Me(s,l,d):[-1,-1]),_=i.combine(t.treeStore,I,({nodes:s,edges:l},d)=>d?Te(s,l,d):[-1,-1]),v=X.store(!1),B=i.createApi(v,{open:()=>!0,close:()=>!1,toggle:s=>!s,set:(s,l)=>l}),fe=i.createEffect(async()=>{e.history.back({experienceId:t.id})}),le=i.attach({source:t.treeStore,effect:async(s,l)=>{const d=s.nodes.find(w=>M(w)&&w.stepId===l);d&&e.history.push({experienceId:t.id,node:d})}}),z=i.attach({source:I,effect:s=>{}}),W=i.attach({source:t.treeStore,effect:async({nodes:s})=>ce(s)}),G=i.attach({source:t.treeStore,effect:async({nodes:s,edges:l},d)=>U(d,s,l)}),K=i.attach({source:t.treeStore,effect:async({nodes:s,edges:l,conditionals:d},w)=>{if(!w)return;const $=d.find(b=>b.id===w.conditionalId);if(!$)return;const x=w.id,y=await V(e,$.condition);return Le(!!y,x,s,l)}}),J=i.attach({source:t.treeStore,effect:async({nodes:s,edges:l},d)=>{if(!d||!te(d))return;const w=d.action;if(!w){N.logger("warn",`Action node ${d.id} has no action name`);return}const $=e.actions.getByName(w).getState();if(!$){N.logger("warn",`Action '${w}' not registered on client`);const x=l.find(y=>y.sourceNodeId===d.id&&y.sourceNodeHandle==="false");return x?s.find(y=>y.id===x.destinationNodeId):null}if(typeof $.action!="function"){N.logger("warn",`Action '${w}' is not a function`);const x=l.find(y=>y.sourceNodeId===d.id&&y.sourceNodeHandle==="false");return x?s.find(y=>y.id===x.destinationNodeId):null}try{N.logger("info",`Executing action: ${w}`),await $.action(w);const x=l.find(b=>b.sourceNodeId===d.id&&b.sourceNodeHandle==="true");if(!x)return N.logger("warn",`No 'true' edge found for action node ${d.id}`),null;const y=s.find(b=>b.id===x.destinationNodeId);return N.logger("info",`Action '${w}' succeeded, moving to node ${y==null?void 0:y.id}`),y||null}catch(x){N.logger("warn",`Action '${w}' failed:`,x);const y=l.find(P=>P.sourceNodeId===d.id&&P.sourceNodeHandle==="false");if(!y)return N.logger("warn",`No 'false' edge found for action node ${d.id}`),null;const b=s.find(P=>P.id===y.destinationNodeId);return N.logger("info",`Action '${w}' failed, moving to node ${b==null?void 0:b.id}`),b||null}}}),de=i.createEffect(s=>{if(s)return e.launchExperienceById(s.experienceId)}),Q=i.attach({source:[I,t.treeStore],effect:async([s,{nodes:l,edges:d}])=>U(s,l,d)}),D=i.attach({source:[I,t.treeStore],effect:async([s,{nodes:l,edges:d}])=>U(s,l,d)}),pe=i.createEffect(s=>{e.history.push({experienceId:t.id,node:s})}),Y=i.attach({source:t.configStore,effect:async({initializeOpenLogic:s})=>re(s)?!!await V(e,s):s??!1});return i.split({source:I,match:s=>s?Be(s)?"condition":M(s)?"step":_e(s)?"launchExperience":ee(s)?"origin":te(s)?"action":"other":"none",cases:{none:W,origin:G,condition:K,step:z,launchExperience:de,action:J,__:i.createEvent()}}),i.sample({clock:[K.doneData,G.doneData,W.doneData,D.doneData,Q.doneData,J.doneData],filter:Boolean,target:pe}),i.sample({clock:a,target:D}),i.sample({clock:a,source:f,filter:Boolean,target:e.eventBus.prepend(s=>({type:"step_submit",step:s,experience:t}))}),i.sample({clock:D.done,source:f,filter:Boolean,target:e.eventBus.prepend(s=>({type:"step_submit_success",step:s,experience:t}))}),i.sample({clock:D.fail,source:f,filter:Boolean,target:e.eventBus.prepend(s=>({type:"step_submit_error",step:s,experience:t}))}),i.sample({clock:c,target:fe}),i.sample({clock:o,target:le}),i.sample({source:i.combine([K.pending,G.pending,W.pending,D.pending]),fn:s=>s.some(Boolean)?"transitioning":"ready",target:k}),i.sample({clock:z.doneData,source:f,filter:Boolean,target:e.eventBus.prepend(s=>({type:"step_enter",step:s,experience:t}))}),i.sample({clock:p,target:Y}),i.sample({source:Y.doneData,fn:Boolean,target:v}),i.sample({source:I,clock:n,filter:s=>s?ee(s):!0,target:Q}),i.sample({source:v,filter:Boolean,target:n}),i.sample({source:v,filter:Boolean,target:e.eventBus.prepend(()=>({type:"experience_open",experience:t}))}),i.sample({source:v,filter:s=>!s,target:e.eventBus.prepend(()=>({type:"experience_close",experience:t}))}),i.sample({clock:u,target:[p]}),u(),{id:Math.random().toString(36).substring(7),experienceId:t.id,configStore:t.configStore,target:r,componentStore:h,stateStore:k,isOpenStore:v,open:B.open,close:B.close,toggleOpen:B.toggle,setOpen:B.set,treeStore:t.treeStore,currentNodeStore:I,currentStepStore:f,nextReachableStepNodesStore:S,stepsToOriginStore:A,stepsToLeafStore:_,goToNextStep:a,goToPreviousStep:c,goToStepById:o,stepsHistoryStore:L}});function ue(e){return q.invoke(De,e)}const Re=q.createFactory(({client:e})=>{const t=X.store({}),r=i.createEvent(),n=i.createEvent(),a=i.createEvent(),c=i.createApi(t,{register(f,S){const A=[...f[S.experienceId]??[]];return A.push(S),{...f,[S.experienceId]:A}},unregister(f,S){var v;const A=S.experienceId,_=(v=f[A])==null?void 0:v.filter(B=>B!==S);return{...f,[A]:_??[]}}}),o=i.createEffect(({experience:f,target:S})=>ue({client:e,experience:f,target:S})),u=i.createEffect(f=>{c.register(f)}),p=i.createEffect(f=>{f.target&&Ie(f.target,()=>{a(f)})}),h=i.createEffect(f=>{c.unregister(f)}),k=i.createEffect(f=>{const S=f.componentStore.getState();if(!S){N.logger("warn","No app component registered. Skipping init.");return}const A=S.frameworkStore.getState();if(!A){N.logger("error",`No framework registered for component '${S.name}'. Skipping rendering.`);return}const _=f.target;if(!_){N.logger("error",`No target element registered for experience '${f.experienceId}'. Skipping rendering.`);return}const v=Ee(_);try{A.render(v,S.component,e,f)}catch(B){N.logger("error",B)}});i.sample({clock:r,target:o}),i.sample({clock:a,target:h}),i.sample({clock:o.doneData,target:[u,p,n]}),i.sample({clock:o.doneData,target:e.eventBus.prepend(f=>({type:"experience_initialize",experienceInstance:f}))}),i.sample({clock:n,target:k});function F(f,S){r({experience:f,target:S})}const L=t.map(f=>Object.values(f).flat());function I(f){return t.map(S=>S[f]||[],{skipVoid:!1})}return{spawn:F,getByExperienceId:I,listStore:L}});function Pe(e){return q.invoke(Re,e)}exports.createAppHosts=ve;exports.createExperienceInstance=ue;exports.createExperienceInstanceIndex=Pe;exports.domInteractive=Ne;exports.evaluateRuleLogic=V;exports.getTargetElements=ke;exports.isPickedRoot=oe;exports.isRulesLogic=re;exports.isStepNode=M;exports.tagTargetElement=be;
|