@picked/client 0.0.1-dev.1762985685249 → 0.0.1-dev.1763014928671
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cjs/index.js +1 -1
- package/dist/cjs/server/index.js +1 -1
- package/dist/esm/index.js +74 -69
- package/dist/esm/server/index.js +1 -1
- package/dist/experience-instance-CF6m7G83.cjs +1 -0
- package/dist/{experience-instance-QtGs0N3g.js → experience-instance-CKru5var.js} +167 -167
- package/dist/types/entities/experience-instance/experience-instance.d.ts.map +1 -1
- package/dist/types/entities/feature/feature.d.ts.map +1 -1
- package/package.json +1 -1
- package/dist/experience-instance-B2l_MG7I.cjs +0 -1
package/dist/cjs/index.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";var U=Object.defineProperty;var V=(t,e,r)=>e in t?U(t,e,{enumerable:!0,configurable:!0,writable:!0,value:r}):t[e]=r;var y=(t,e,r)=>V(t,typeof e!="symbol"?e+"":e,r);Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const f=require("effector"),h=require("@withease/factories"),F=require("../experience-instance-B2l_MG7I.cjs"),I=require("../logger-BsmHUUw1.cjs"),w=require("../storage-DuRlyFaY.cjs"),N=require("../id-BKIWbSTy.cjs"),z=require("../object-BbFTsGh3.cjs"),k=require("../supports-YvpQZxbh.cjs"),L=f.createDomain("experience"),_=h.createFactory(({client:t,experience:e})=>{const r=L.store(e),n=f.createApi(r,{merge(l,S){return{...l,...S.experience}}}),c=r.map(l=>({name:l.name,decisionLogic:l.decide,targetSelectors:l.targets,initializeOpenLogic:e.initializeOpen})),u=t.components.listStore.map(l=>l.find(S=>S.name===`experience:${e.id}`)||l.find(S=>S.name==="experience"),{skipVoid:!1}),s=r.map(l=>({steps:l.steps,nodes:l.nodes,edges:l.edges,conditionals:l.conditionals})),o=e.actions??[];return{id:e.id,configStore:c,treeStore:s,componentStore:u,actions:o,merge:n.merge}});function q(t){return h.invoke(_,t)}const K=h.createFactory(({client:t})=>{const e=L.store({}),r=f.createApi(e,{register(s,o){return{...s,[o.id]:o}}});function n(s){const o=e.getState()[s.id];if(o){o.merge({experience:s,strategy:"override"});return}const l=q({client:t,experience:s});r.register(l)}const c=e.map(s=>Object.values(s));function u(s){return e.map(o=>o[s],{skipVoid:!1})}return{register:n,getById:u,listStore:c}});function H(t){return h.invoke(K,t)}const W=(t,e)=>{e.register(t)},M=(t,e)=>{const{targetSelectors:r}=e.configStore.getState(),n=F.getTargetElements(r,e.id);n.forEach(({elements:u})=>u.forEach(s=>F.tagTargetElement(s,e.id))),F.createAppHosts(n,e.id).forEach(u=>{t.experienceInstances.spawn(e,u)})},B=async t=>{await Promise.all(t.experiences.listStore.getState().map(async e=>{await G(t,e)&&M(t,e)}))},G=async(t,e)=>{const{decisionLogic:r,targetSelectors:n}=e.configStore.getState();return F.getTargetElements(n,e.id).length<1||n.length===0?!1:r&&F.isRulesLogic(r)?await F.evaluateRuleLogic(t,r)===!0:!0},Y=(t,e,r)=>{const n=e.name,c=e.setup(t);if(c){const u=r[n]??{};r[n]=Object.freeze({...u,...c})}},J=f.createDomain("component"),Q=h.createFactory(({client:t,component:e,name:r})=>{const n=t.frameworks.getByName(e.frameworkName);return{name:r,component:e,frameworkStore:n}});function X(t){return h.invoke(Q,t)}const Z=h.createFactory(({client:t})=>{const e=J.store({}),r=f.createApi(e,{register(s,o){return{...s,[o.name]:o}}});function n(s,o){e.getState()[s]&&I.logger("warn",`Component '${s}' already registered. Registering again will override the previous registration.`);const S=X({client:t,name:s,component:o});r.register(S)}const c=e.map(s=>Object.values(s));function u(s){return e.map(o=>o[s],{skipVoid:!1})}return{register:n,getByName:u,listStore:c}});function ee(t){return h.invoke(Z,t)}const $=(t,e,r)=>{r.register(t,e)},te=f.createDomain("framework"),re=h.createFactory(({client:t})=>{const e=te.store({}),r=f.createApi(e,{register(s,o){return{...s,[o.name]:o.framework}}});function n(s,o){e.getState()[s]&&I.logger("warn",`Framework '${s}' already registered. Registering again will override the previous registration.`),r.register({name:s,framework:o})}const c=e.map(s=>Object.values(s));function u(s){return e.map(o=>o[s],{skipVoid:!1})}return{register:n,getByName:u,listStore:c}});function se(t){return h.invoke(re,t)}const ne=(t,e)=>{e.register(t.name,t)},oe=6e3,j=w.createStorageKey("last_ping","global"),ie=t=>`${t}/api/v1/ping`,ae=async t=>{try{const e=Date.now(),r=localStorage.getItem(j);if(r&&e-parseInt(r)<oe)return!0;const n=ie(t.apiUrl),c={projectId:t.projectId,path:window.location.pathname},u=JSON.stringify(c),s={"Content-Type":"application/json"},o=document.getElementById("picked_script"),l=o==null?void 0:o.dataset.verceltoken;l&&(s["x-vercel-protection-bypass"]=l);const b=(await fetch(n,{method:"POST",headers:s,body:u})).ok;return b&&localStorage.setItem(j,e.toString()),b}catch(e){return I.logger("error",e),!1}};function ce(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 ue=f.createDomain("predicate"),le=h.createFactory(({client:t})=>{const e=ue.store({}),r=f.createApi(e,{register(s,o){return{...s,[o.name]:{name:o.name,predicate:o.predicate}}}});function n(s,o){e.getState()[s]&&I.logger("warn",`Predicate '${s}' already registered. Registering again will override the previous registration.`),r.register(Object.freeze({name:s,predicate:o}))}const c=e.map(s=>Object.values(s));function u(s){return e.map(o=>o[s],{skipVoid:!1})}return{register:n,getByName:u,listStore:c}});function pe(t){return h.invoke(le,t)}const ge=(t,e,r)=>{r.register(t,e)},C=f.createDomain("feature"),de=h.createFactory(({client:t})=>{const e=C.store({}),r=C.store([]),n=f.createApi(e,{register(p,a){return{...p,[a.id]:a.feature}}});function c(p,a){e.getState()[p]&&I.logger("warn",`Feature '${p}' already registered. Registering again will override the previous registration.`);const d={id:p,feature:{...a,id:p}};n.register(Object.freeze({id:p,feature:d}))}const u=f.createEffect(async({id:p,key:a,storage:i="local"})=>{const d=w.createStorageKey(`feature:${p}:${a}`,"global"),g=(i==="session"?w.sessionStore:w.localStore).get(d).boolean();return g===null?null:{id:p,key:a,bucket:g}}),s=f.createEffect(p=>{if(!p)return null;const a=w.createStorageKey(`feature:${p.id}:${p.key}`,"global");(p.storage==="session"?w.sessionStore:w.localStore).set(a,p.bucket)}),o=new Map,l=f.attach({source:{allFeaturesStore:e,resolvedFeaturesStore:r},effect:async({allFeaturesStore:p,resolvedFeaturesStore:a},{id:i,decide:d,key:m})=>{const g=a.find(A=>A.id===i);if(g)return g;const v=p[i];if(!v)throw new Error(`Feature with id '${i}' not found`);const x=o.get(`${i}:${m}`);if(x!==void 0){const A=await x;return{id:v.id,bucket:A,key:m,storage:v.feature.storage}}const P=d();o.set(`${i}:${m}`,P);const E=await P;return{id:v.id,bucket:E,key:m,storage:v.feature.storage}}});f.sample({clock:n.register,fn:p=>{const{id:a,feature:i}=p;return{id:a,key:i.feature.key,storage:i.feature.storage}},target:u}),f.sample({source:e,clock:l.doneData,fn:(p,a)=>{var v;const{id:i,bucket:d,storage:m}=a,g=(v=p[i])==null?void 0:v.feature.key;return g?{key:g,id:i,bucket:d,storage:m}:null},target:s});const S=f.combine({allFeaturesStore:e,resolvedFeaturesStore:r}).map(({allFeaturesStore:p,resolvedFeaturesStore:a})=>Object.values(p).map(i=>{const d=a.find(m=>m.id===i.id);return d?{id:i.id,name:i.feature.name,key:i.feature.key,getBucket:()=>({id:i.id,bucket:d.bucket}),isResolved:!0}:{id:i.id,name:i.feature.name,key:i.feature.key,getBucket:async()=>await l(i.feature),isResolved:!1}}));f.sample({clock:l.doneData,source:{resolvedFeatures:r},filter:({resolvedFeatures:p},{id:a})=>!p.some(i=>i.id===a),fn:(p,a)=>a,target:t.eventBus.prepend(p=>({type:"feature_decide",feature:p}))}),f.sample({clock:[u.doneData,l.doneData],source:r,fn:(p,a)=>!a||p.some(i=>i.id===a.id)?p:[...p,a],target:r});function b(p){return e.map(a=>a[p],{skipVoid:!1})}return{register:c,getByName:b,listStore:S}});function fe(t){return h.invoke(de,t)}const me=(t,e,r)=>{r.register(t,e)},R=f.createDomain("history");function O(t,e){return{id:N.generateId(`history-entry-${Date.now()}-${Math.random()}}`),node:e,at:Date.now(),experienceId:t}}const ye=h.createFactory(()=>{const t=R.store({entries:[]}),e=R.event(),r=R.event(),n=R.event(),c=R.event();t.on(e,(s,o)=>({entries:[...s.entries,O(o.experienceId,o.node)]})),t.on(r,(s,o)=>({entries:[...s.entries.slice(0,-1),O(o.experienceId,o.node)]})),t.on(c,(s,o)=>o);function u(s,o){const l={lastStepIndex:-1,secondLastStepIndex:-1};for(let S=s.length-1;S>=0;S--){const b=s[S],p=b==null?void 0:b.node;if(!(!p||!F.isStepNode(p))&&!(o&&(b==null?void 0:b.experienceId)!==o))if(l.lastStepIndex===-1)l.lastStepIndex=S;else{l.secondLastStepIndex=S;break}}return l}return t.on(n,(s,o)=>{const{secondLastStepIndex:l}=u(s.entries,o.experienceId),S=l!==-1?s.entries.slice(0,l+1):s.entries;return{...s,entries:S}}),{push:e,replace:r,back:n,restore:c,entriesStore:t.map(s=>s.entries)}});function he(){return h.invoke(ye)}const Se=()=>f.createEvent(),ve=f.createDomain("field"),ke=h.createFactory(()=>{const t=ve.store({}),e=f.createApi(t,{register(s,o){return{...s,[o.field.id]:o.field}}});function r(s){e.register({field:s})}const n=t.map(s=>Object.values(s));function c(s){return t.map(o=>o[s]||null)}function u(s){return t.map(o=>Object.values(o).find(l=>l.name===s)||null)}return{register:r,getById:c,listStore:n,getByName:u}});function we(){return h.invoke(ke)}const Fe=(t,e)=>{e.register(t)},be=f.createDomain("action"),Ie=h.createFactory(()=>{const t=be.store({}),e=f.createApi(t,{register(u,s){return{...u,[s.name]:{name:s.name,action:s.action}}}});function r(u,s){e.register({name:u,action:s})}const n=t.map(u=>Object.values(u));function c(u){return t.map(s=>s[u],{skipVoid:!1})}return{register:r,getByName:c,listStore:n}});function xe(){return h.invoke(Ie)}const Ee=(t,e,r)=>{r.register(t,e)},Re=f.createDomain("response"),Pe=h.createFactory(({client:t})=>{const e=Re.store({}),r=f.createEvent(),n=f.createEvent(),c=f.createApi(e,{register(a,i){return{...a,[i.fieldId]:i.response}},registerBatch(a,i){return{...a,...i}},clear(a,i){const{[i]:d,...m}=a;return m},clearAll(){return{}}});function u(a,i){c.register({fieldId:a,response:i})}async function s(a){const i=[];return await Promise.allSettled(Object.entries(a).map(async([d,m])=>{let g=m;const v=t.fields.getById(d).getState();if(!v){i.push({fieldId:d,userMessage:`Field '${d}' not found`,systemMessage:`No field with ID '${d}' exists. Available field IDs are: ${Object.keys(t.fields.listStore.getState()).join(",")}.`,value:g});return}if(v.multiple&&(typeof g=="string"||typeof g=="number"||typeof g=="boolean")&&(g=[g]),v.validation&&!z.isEmpty(v.validation)){const x=await F.evaluateRuleLogic(t,v.validation,{$input:g});if(typeof x=="string"){i.push({fieldId:d,userMessage:x,systemMessage:`Field validation resulted in an error: ${x}.`,value:g});return}if(x===!1){i.push({fieldId:d,userMessage:"This field is invalid",systemMessage:"Field validation resulted in an unspecified error.",value:g});return}}if(v.required&&(typeof g>"u"||g===null||g===""||Array.isArray(g)&&!g.length)){i.push({fieldId:d,userMessage:"This field is required",systemMessage:"Field is required.",value:g});return}if(!v.multiple&&Array.isArray(g)&&g.length>1){i.push({fieldId:d,userMessage:"This field expects a single response",systemMessage:"Field expects a single response.",value:g});return}if(v.options){const x=v.options.map(E=>E.value),P=Array.isArray(g)?g:[g];Array.isArray(g)&&(P.every(E=>x.includes(E))||i.push({fieldId:d,userMessage:"This field expects a valid option",systemMessage:`Field expects a valid option. Valid options are: ${x.join(", ")}`,value:g}))}})),{responsesToCommit:a,validationErrors:i}}async function o(a){const{responsesToCommit:i,validationErrors:d}=await s(a);return d.length?{errors:d}:(c.registerBatch(i),{errors:[]})}const l=e.map(a=>a),S=e.map(a=>Object.keys(a).map(d=>({fieldId:d,value:a[d]})));function b(a){const i=t.fields.getById(a),d=e.map(m=>m[a]||null);return f.combine({f:i,r:d},({f:m,r:g})=>g||(m!=null&&m.defaultValue?m.defaultValue:null))}function p(a){const i=t.fields.getByName(a);return f.combine({f:i,s:e},({f:d,s:m})=>{const g=d&&m[d.id]||null;return g||(d!=null&&d.defaultValue?d.defaultValue:null)})}return f.sample({clock:r,target:c.clearAll}),f.sample({clock:n,target:c.clear}),{register:u,clearAll:r,clear:n,commit:o,getResponsesToCommit:s,listStore:S,getAllStore:l,getByFieldId:b,getByFieldName:p}});function Ae(t){return h.invoke(Pe,t)}const De=()=>"0.0.1-dev.1762985685249";function Be(){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 $e(){if(!k.supportsWindow())return{};const t=new URLSearchParams(window.location.search),e={},r=new Set;for(const[c]of t.entries())c.startsWith("picked-")&&r.add(c);for(const c of r){const u=c.replace("picked-","");e[u]=t.getAll(c)}const n=w.createStorageKey("s");if(r.size>0)w.sessionStore.set(n,e);else{const c=w.sessionStore.get(n);if(c)return c.json()||{}}return e}function je(){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 Ce=()=>({id:je()}),Oe=w.createStorageKey("session","global"),Le=()=>{if(!k.supportsLocalStorage())return null;const t=w.localStore.get(Oe);let e=t.isSet()?t.json():null;return e||(e=Ce(),t.set(e)),e},Me=()=>Le();class D{constructor(e){y(this,"options");y(this,"isReady",!1);y(this,"project");y(this,"plugins",{});y(this,"eventBus",Se());y(this,"organizationId");y(this,"projectId");y(this,"apiUrl");y(this,"session");y(this,"searchParams",$e());y(this,"history",he());y(this,"components",ee({client:this}));y(this,"experienceInstances",F.createExperienceInstanceIndex({client:this}));y(this,"experiences",H({client:this}));y(this,"frameworks",se({client:this}));y(this,"predicates",pe({client:this}));y(this,"features",fe({client:this}));y(this,"responses",Ae({client:this}));y(this,"fields",we());y(this,"actions",xe());I.logger("info","Picked client initializing."),this.organizationId=e.organizationId,this.projectId=e.projectId,this.options=Object.freeze(e),this.apiUrl=e.apiUrl||Be(),this.session=Me(),this.setupPlugins(),this.setupFeatures(),this.setupPredicates(),this.setupActions(),this.eventBus({type:"initialized",version:De()}),I.logger("info","Picked client initialized.")}start(){ae(this),(async()=>{k.supportsDocument()&&(document.body&&B(this),await F.domInteractive(),await B(this),this.eventBus({type:"ready"}),this.isReady=!0,this.session&&this.eventBus({type:"session",...this.session}))})()}registerFramework(e){ne(e,this.frameworks)}registerComponent(e,r){$(e,r,this.components)}registerPlugin(e){Y(this,e,this.plugins)}registerFeature(e,r){me(e,r,this.features)}registerPredicate(e,r){ge(e,r,this.predicates)}registerField(e){Fe(e,this.fields)}registerAction(e,r){Ee(e,r,this.actions)}registerExperience(e){e.component&&$(`experience:${e.id}`,e.component,this.components),W(e,this.experiences)}getStateSnapshot(){return ce(this)}async launchExperienceById(e){const r=this.experiences.getById(e).getState();if(!r){I.logger("warn",`Experience with id '${e}' not found.`);return}M(this,r)}setupPlugins(){var e;(e=this.options.plugins)==null||e.forEach(r=>{if(Array.isArray(r)){r.forEach(c=>{this.registerPlugin(c)});return}const n=typeof r=="function"?r():r;if(Array.isArray(n)){n.forEach(c=>this.registerPlugin(c));return}this.registerPlugin(n)})}setupFeatures(){const e=this.options.features;e&&(Object.entries(e).forEach(([r,n])=>{const c=typeof n=="function"?n():n;this.registerFeature(r,c)}),this.searchParams.feature&&this.searchParams.feature.forEach(r=>{try{const[n,c]=r.split(":");if(!n||!c)return;let u=c;u==="true"&&(u=!0),u==="false"&&(u=!1),this.registerFeature(n,{key:`${u}`,name:n,decide:()=>u,storage:"session"})}catch{}}))}setupPredicates(){const e=this.options.predicates;e&&Object.entries(e).forEach(([r,n])=>{if(typeof n!="function"){I.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"){I.logger("warn",`Action "${r}" is not a function.`);return}this.registerAction(r,n)})}getPluginConfig(e){return this.plugins[e]??{}}}y(D,"logger",I.logger);function T(t){var e;return((e=t.options)==null?void 0:e.some(r=>"condition"in r))??!1}function Te(t){return t.some(e=>e.condition||T(e))}async function Ue(t,e){return e.length===0||!Te(e)?e:(await Promise.all(e.map(async n=>{if(!(n.condition?await F.evaluateRuleLogic(t,n.condition):!0))return null;if(!n.options||!T(n))return n;const s=(await Promise.all(n.options.map(async l=>l.condition?await F.evaluateRuleLogic(t,l.condition)?l:null:l))).filter(l=>l!==null);return s.length===n.options.length?n:s.length===0?null:{...n,options:s}}))).filter(n=>n!==null)}const Ve=t=>{const e=new D(t);return k.bindClient(e),e};exports.evaluateRuleLogic=F.evaluateRuleLogic;exports.isPickedRoot=F.isPickedRoot;exports.createStorageKey=w.createStorageKey;exports.localStore=w.localStore;exports.sessionStore=w.sessionStore;exports.subscribe=w.subscribe;exports.supportsCookies=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=D;exports.createClient=Ve;exports.getStepFields=Ue;
|
|
1
|
+
"use strict";var U=Object.defineProperty;var V=(t,e,r)=>e in t?U(t,e,{enumerable:!0,configurable:!0,writable:!0,value:r}):t[e]=r;var y=(t,e,r)=>V(t,typeof e!="symbol"?e+"":e,r);Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const f=require("effector"),h=require("@withease/factories"),F=require("../experience-instance-CF6m7G83.cjs"),I=require("../logger-BsmHUUw1.cjs"),w=require("../storage-DuRlyFaY.cjs"),N=require("../id-BKIWbSTy.cjs"),z=require("../object-BbFTsGh3.cjs"),k=require("../supports-YvpQZxbh.cjs"),L=f.createDomain("experience"),_=h.createFactory(({client:t,experience:e})=>{const r=L.store(e),n=f.createApi(r,{merge(l,S){return{...l,...S.experience}}}),c=r.map(l=>({name:l.name,decisionLogic:l.decide,targetSelectors:l.targets,initializeOpenLogic:e.initializeOpen})),u=t.components.listStore.map(l=>l.find(S=>S.name===`experience:${e.id}`)||l.find(S=>S.name==="experience"),{skipVoid:!1}),s=r.map(l=>({steps:l.steps,nodes:l.nodes,edges:l.edges,conditionals:l.conditionals})),o=e.actions??[];return{id:e.id,configStore:c,treeStore:s,componentStore:u,actions:o,merge:n.merge}});function q(t){return h.invoke(_,t)}const K=h.createFactory(({client:t})=>{const e=L.store({}),r=f.createApi(e,{register(s,o){return{...s,[o.id]:o}}});function n(s){const o=e.getState()[s.id];if(o){o.merge({experience:s,strategy:"override"});return}const l=q({client:t,experience:s});r.register(l)}const c=e.map(s=>Object.values(s));function u(s){return e.map(o=>o[s],{skipVoid:!1})}return{register:n,getById:u,listStore:c}});function H(t){return h.invoke(K,t)}const W=(t,e)=>{e.register(t)},M=(t,e)=>{const{targetSelectors:r}=e.configStore.getState(),n=F.getTargetElements(r,e.id);n.forEach(({elements:u})=>u.forEach(s=>F.tagTargetElement(s,e.id))),F.createAppHosts(n,e.id).forEach(u=>{t.experienceInstances.spawn(e,u)})},B=async t=>{await Promise.all(t.experiences.listStore.getState().map(async e=>{await G(t,e)&&M(t,e)}))},G=async(t,e)=>{const{decisionLogic:r,targetSelectors:n}=e.configStore.getState();return F.getTargetElements(n,e.id).length<1||n.length===0?!1:r&&F.isRulesLogic(r)?await F.evaluateRuleLogic(t,r)===!0:!0},Y=(t,e,r)=>{const n=e.name,c=e.setup(t);if(c){const u=r[n]??{};r[n]=Object.freeze({...u,...c})}},J=f.createDomain("component"),Q=h.createFactory(({client:t,component:e,name:r})=>{const n=t.frameworks.getByName(e.frameworkName);return{name:r,component:e,frameworkStore:n}});function X(t){return h.invoke(Q,t)}const Z=h.createFactory(({client:t})=>{const e=J.store({}),r=f.createApi(e,{register(s,o){return{...s,[o.name]:o}}});function n(s,o){e.getState()[s]&&I.logger("warn",`Component '${s}' already registered. Registering again will override the previous registration.`);const S=X({client:t,name:s,component:o});r.register(S)}const c=e.map(s=>Object.values(s));function u(s){return e.map(o=>o[s],{skipVoid:!1})}return{register:n,getByName:u,listStore:c}});function ee(t){return h.invoke(Z,t)}const j=(t,e,r)=>{r.register(t,e)},te=f.createDomain("framework"),re=h.createFactory(({client:t})=>{const e=te.store({}),r=f.createApi(e,{register(s,o){return{...s,[o.name]:o.framework}}});function n(s,o){e.getState()[s]&&I.logger("warn",`Framework '${s}' already registered. Registering again will override the previous registration.`),r.register({name:s,framework:o})}const c=e.map(s=>Object.values(s));function u(s){return e.map(o=>o[s],{skipVoid:!1})}return{register:n,getByName:u,listStore:c}});function se(t){return h.invoke(re,t)}const ne=(t,e)=>{e.register(t.name,t)},oe=6e3,$=w.createStorageKey("last_ping","global"),ie=t=>`${t}/api/v1/ping`,ae=async t=>{try{const e=Date.now(),r=localStorage.getItem($);if(r&&e-parseInt(r)<oe)return!0;const n=ie(t.apiUrl),c={projectId:t.projectId,path:window.location.pathname},u=JSON.stringify(c),s={"Content-Type":"application/json"},o=document.getElementById("picked_script"),l=o==null?void 0:o.dataset.verceltoken;l&&(s["x-vercel-protection-bypass"]=l);const b=(await fetch(n,{method:"POST",headers:s,body:u})).ok;return b&&localStorage.setItem($,e.toString()),b}catch(e){return I.logger("error",e),!1}};function ce(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 ue=f.createDomain("predicate"),le=h.createFactory(({client:t})=>{const e=ue.store({}),r=f.createApi(e,{register(s,o){return{...s,[o.name]:{name:o.name,predicate:o.predicate}}}});function n(s,o){e.getState()[s]&&I.logger("warn",`Predicate '${s}' already registered. Registering again will override the previous registration.`),r.register(Object.freeze({name:s,predicate:o}))}const c=e.map(s=>Object.values(s));function u(s){return e.map(o=>o[s],{skipVoid:!1})}return{register:n,getByName:u,listStore:c}});function pe(t){return h.invoke(le,t)}const ge=(t,e,r)=>{r.register(t,e)},C=f.createDomain("feature"),de=h.createFactory(({client:t})=>{const e=C.store({}),r=C.store([]),n=f.createApi(e,{register(p,a){return{...p,[a.id]:a.feature}}});function c(p,a){e.getState()[p]&&I.logger("warn",`Feature '${p}' already registered. Registering again will override the previous registration.`);const g={id:p,feature:{...a,id:p}};n.register(Object.freeze({id:p,feature:g}))}const u=f.createEffect(async({id:p,key:a,storage:i="local"})=>{const g=w.createStorageKey(`feature:${p}:${a}`,"global"),d=(i==="session"?w.sessionStore:w.localStore).get(g).boolean();return d===null?null:{id:p,key:a,bucket:d,storage:i}}),s=f.createEffect(p=>{if(!p)return null;const a=w.createStorageKey(`feature:${p.id}:${p.key}`,"global");(p.storage==="session"?w.sessionStore:w.localStore).set(a,p.bucket)}),o=new Map,l=f.attach({source:{allFeaturesStore:e,resolvedFeaturesStore:r},effect:async({allFeaturesStore:p,resolvedFeaturesStore:a},{id:i,decide:g,key:m})=>{const d=a.find(A=>A.id===i);if(d)return d;const v=p[i];if(!v)throw new Error(`Feature with id '${i}' not found`);const x=o.get(`${i}:${m}`);if(x!==void 0){const A=await x;return{id:v.id,bucket:A,key:m,storage:v.feature.storage}}const P=g();o.set(`${i}:${m}`,P);const E=await P;return{id:v.id,bucket:E,key:m,storage:v.feature.storage}}});f.sample({clock:n.register,source:e,filter:(p,a)=>{const i=p[a.id];return i?i.feature.key!==a.feature.feature.key||i.feature.storage!==a.feature.feature.storage:!0},fn:(p,a)=>{const{id:i,feature:g}=a;return{id:i,key:g.feature.key,storage:g.feature.storage}},target:u}),f.sample({source:e,clock:l.doneData,fn:(p,a)=>{var v;const{id:i,bucket:g,storage:m}=a,d=(v=p[i])==null?void 0:v.feature.key;return d?{key:d,id:i,bucket:g,storage:m}:null},target:s});const S=f.combine({allFeaturesStore:e,resolvedFeaturesStore:r}).map(({allFeaturesStore:p,resolvedFeaturesStore:a})=>Object.values(p).map(i=>{const g=a.find(m=>m.id===i.id);return g?{id:i.id,name:i.feature.name,key:i.feature.key,getBucket:()=>({id:i.id,bucket:g.bucket}),isResolved:!0}:{id:i.id,name:i.feature.name,key:i.feature.key,getBucket:async()=>await l(i.feature),isResolved:!1}}));f.sample({clock:l.doneData,source:{resolvedFeatures:r},filter:({resolvedFeatures:p},{id:a})=>!p.some(i=>i.id===a),fn:(p,a)=>a,target:t.eventBus.prepend(p=>({type:"feature_decide",feature:p}))}),f.sample({clock:[u.doneData,l.doneData],source:r,fn:(p,a)=>!a||p.some(i=>i.id===a.id)?p:[...p,a],target:r});function b(p){return e.map(a=>a[p],{skipVoid:!1})}return{register:c,getByName:b,listStore:S}});function fe(t){return h.invoke(de,t)}const me=(t,e,r)=>{r.register(t,e)},R=f.createDomain("history");function O(t,e){return{id:N.generateId(`history-entry-${Date.now()}-${Math.random()}}`),node:e,at:Date.now(),experienceId:t}}const ye=h.createFactory(()=>{const t=R.store({entries:[]}),e=R.event(),r=R.event(),n=R.event(),c=R.event();t.on(e,(s,o)=>({entries:[...s.entries,O(o.experienceId,o.node)]})),t.on(r,(s,o)=>({entries:[...s.entries.slice(0,-1),O(o.experienceId,o.node)]})),t.on(c,(s,o)=>o);function u(s,o){const l={lastStepIndex:-1,secondLastStepIndex:-1};for(let S=s.length-1;S>=0;S--){const b=s[S],p=b==null?void 0:b.node;if(!(!p||!F.isStepNode(p))&&!(o&&(b==null?void 0:b.experienceId)!==o))if(l.lastStepIndex===-1)l.lastStepIndex=S;else{l.secondLastStepIndex=S;break}}return l}return t.on(n,(s,o)=>{const{secondLastStepIndex:l}=u(s.entries,o.experienceId),S=l!==-1?s.entries.slice(0,l+1):s.entries;return{...s,entries:S}}),{push:e,replace:r,back:n,restore:c,entriesStore:t.map(s=>s.entries)}});function he(){return h.invoke(ye)}const Se=()=>f.createEvent(),ve=f.createDomain("field"),ke=h.createFactory(()=>{const t=ve.store({}),e=f.createApi(t,{register(s,o){return{...s,[o.field.id]:o.field}}});function r(s){e.register({field:s})}const n=t.map(s=>Object.values(s));function c(s){return t.map(o=>o[s]||null)}function u(s){return t.map(o=>Object.values(o).find(l=>l.name===s)||null)}return{register:r,getById:c,listStore:n,getByName:u}});function we(){return h.invoke(ke)}const Fe=(t,e)=>{e.register(t)},be=f.createDomain("action"),Ie=h.createFactory(()=>{const t=be.store({}),e=f.createApi(t,{register(u,s){return{...u,[s.name]:{name:s.name,action:s.action}}}});function r(u,s){e.register({name:u,action:s})}const n=t.map(u=>Object.values(u));function c(u){return t.map(s=>s[u],{skipVoid:!1})}return{register:r,getByName:c,listStore:n}});function xe(){return h.invoke(Ie)}const Ee=(t,e,r)=>{r.register(t,e)},Re=f.createDomain("response"),Pe=h.createFactory(({client:t})=>{const e=Re.store({}),r=f.createEvent(),n=f.createEvent(),c=f.createApi(e,{register(a,i){return{...a,[i.fieldId]:i.response}},registerBatch(a,i){return{...a,...i}},clear(a,i){const{[i]:g,...m}=a;return m},clearAll(){return{}}});function u(a,i){c.register({fieldId:a,response:i})}async function s(a){const i=[];return await Promise.allSettled(Object.entries(a).map(async([g,m])=>{let d=m;const v=t.fields.getById(g).getState();if(!v){i.push({fieldId:g,userMessage:`Field '${g}' not found`,systemMessage:`No field with ID '${g}' exists. Available field IDs are: ${Object.keys(t.fields.listStore.getState()).join(",")}.`,value:d});return}if(v.multiple&&(typeof d=="string"||typeof d=="number"||typeof d=="boolean")&&(d=[d]),v.validation&&!z.isEmpty(v.validation)){const x=await F.evaluateRuleLogic(t,v.validation,{$input:d});if(typeof x=="string"){i.push({fieldId:g,userMessage:x,systemMessage:`Field validation resulted in an error: ${x}.`,value:d});return}if(x===!1){i.push({fieldId:g,userMessage:"This field is invalid",systemMessage:"Field validation resulted in an unspecified error.",value:d});return}}if(v.required&&(typeof d>"u"||d===null||d===""||Array.isArray(d)&&!d.length)){i.push({fieldId:g,userMessage:"This field is required",systemMessage:"Field is required.",value:d});return}if(!v.multiple&&Array.isArray(d)&&d.length>1){i.push({fieldId:g,userMessage:"This field expects a single response",systemMessage:"Field expects a single response.",value:d});return}if(v.options){const x=v.options.map(E=>E.value),P=Array.isArray(d)?d:[d];Array.isArray(d)&&(P.every(E=>x.includes(E))||i.push({fieldId:g,userMessage:"This field expects a valid option",systemMessage:`Field expects a valid option. Valid options are: ${x.join(", ")}`,value:d}))}})),{responsesToCommit:a,validationErrors:i}}async function o(a){const{responsesToCommit:i,validationErrors:g}=await s(a);return g.length?{errors:g}:(c.registerBatch(i),{errors:[]})}const l=e.map(a=>a),S=e.map(a=>Object.keys(a).map(g=>({fieldId:g,value:a[g]})));function b(a){const i=t.fields.getById(a),g=e.map(m=>m[a]||null);return f.combine({f:i,r:g},({f:m,r:d})=>d||(m!=null&&m.defaultValue?m.defaultValue:null))}function p(a){const i=t.fields.getByName(a);return f.combine({f:i,s:e},({f:g,s:m})=>{const d=g&&m[g.id]||null;return d||(g!=null&&g.defaultValue?g.defaultValue:null)})}return f.sample({clock:r,target:c.clearAll}),f.sample({clock:n,target:c.clear}),{register:u,clearAll:r,clear:n,commit:o,getResponsesToCommit:s,listStore:S,getAllStore:l,getByFieldId:b,getByFieldName:p}});function Ae(t){return h.invoke(Pe,t)}const De=()=>"0.0.1-dev.1763014928671";function Be(){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 je(){if(!k.supportsWindow())return{};const t=new URLSearchParams(window.location.search),e={},r=new Set;for(const[c]of t.entries())c.startsWith("picked-")&&r.add(c);for(const c of r){const u=c.replace("picked-","");e[u]=t.getAll(c)}const n=w.createStorageKey("s");if(r.size>0)w.sessionStore.set(n,e);else{const c=w.sessionStore.get(n);if(c)return c.json()||{}}return e}function $e(){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 Ce=()=>({id:$e()}),Oe=w.createStorageKey("session","global"),Le=()=>{if(!k.supportsLocalStorage())return null;const t=w.localStore.get(Oe);let e=t.isSet()?t.json():null;return e||(e=Ce(),t.set(e)),e},Me=()=>Le();class D{constructor(e){y(this,"options");y(this,"isReady",!1);y(this,"project");y(this,"plugins",{});y(this,"eventBus",Se());y(this,"organizationId");y(this,"projectId");y(this,"apiUrl");y(this,"session");y(this,"searchParams",je());y(this,"history",he());y(this,"components",ee({client:this}));y(this,"experienceInstances",F.createExperienceInstanceIndex({client:this}));y(this,"experiences",H({client:this}));y(this,"frameworks",se({client:this}));y(this,"predicates",pe({client:this}));y(this,"features",fe({client:this}));y(this,"responses",Ae({client:this}));y(this,"fields",we());y(this,"actions",xe());I.logger("info","Picked client initializing."),this.organizationId=e.organizationId,this.projectId=e.projectId,this.options=Object.freeze(e),this.apiUrl=e.apiUrl||Be(),this.session=Me(),this.setupPlugins(),this.setupFeatures(),this.setupPredicates(),this.setupActions(),this.eventBus({type:"initialized",version:De()}),I.logger("info","Picked client initialized.")}start(){ae(this),(async()=>{k.supportsDocument()&&(document.body&&B(this),await F.domInteractive(),await B(this),this.eventBus({type:"ready"}),this.isReady=!0,this.session&&this.eventBus({type:"session",...this.session}))})()}registerFramework(e){ne(e,this.frameworks)}registerComponent(e,r){j(e,r,this.components)}registerPlugin(e){Y(this,e,this.plugins)}registerFeature(e,r){me(e,r,this.features)}registerPredicate(e,r){ge(e,r,this.predicates)}registerField(e){Fe(e,this.fields)}registerAction(e,r){Ee(e,r,this.actions)}registerExperience(e){e.component&&j(`experience:${e.id}`,e.component,this.components),W(e,this.experiences)}getStateSnapshot(){return ce(this)}async launchExperienceById(e){const r=this.experiences.getById(e).getState();if(!r){I.logger("warn",`Experience with id '${e}' not found.`);return}M(this,r)}setupPlugins(){var e;(e=this.options.plugins)==null||e.forEach(r=>{if(Array.isArray(r)){r.forEach(c=>{this.registerPlugin(c)});return}const n=typeof r=="function"?r():r;if(Array.isArray(n)){n.forEach(c=>this.registerPlugin(c));return}this.registerPlugin(n)})}setupFeatures(){const e=this.options.features;e&&(Object.entries(e).forEach(([r,n])=>{const c=typeof n=="function"?n():n;this.registerFeature(r,c)}),this.searchParams.feature&&this.searchParams.feature.forEach(r=>{try{const[n,c]=r.split(":");if(!n||!c)return;let u=c;u==="true"&&(u=!0),u==="false"&&(u=!1),this.registerFeature(n,{key:`${u}`,name:n,decide:()=>u,storage:"session"})}catch{}}))}setupPredicates(){const e=this.options.predicates;e&&Object.entries(e).forEach(([r,n])=>{if(typeof n!="function"){I.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"){I.logger("warn",`Action "${r}" is not a function.`);return}this.registerAction(r,n)})}getPluginConfig(e){return this.plugins[e]??{}}}y(D,"logger",I.logger);function T(t){var e;return((e=t.options)==null?void 0:e.some(r=>"condition"in r))??!1}function Te(t){return t.some(e=>e.condition||T(e))}async function Ue(t,e){return e.length===0||!Te(e)?e:(await Promise.all(e.map(async n=>{if(!(n.condition?await F.evaluateRuleLogic(t,n.condition):!0))return null;if(!n.options||!T(n))return n;const s=(await Promise.all(n.options.map(async l=>l.condition?await F.evaluateRuleLogic(t,l.condition)?l:null:l))).filter(l=>l!==null);return s.length===n.options.length?n:s.length===0?null:{...n,options:s}}))).filter(n=>n!==null)}const Ve=t=>{const e=new D(t);return k.bindClient(e),e};exports.evaluateRuleLogic=F.evaluateRuleLogic;exports.isPickedRoot=F.isPickedRoot;exports.createStorageKey=w.createStorageKey;exports.localStore=w.localStore;exports.sessionStore=w.sessionStore;exports.subscribe=w.subscribe;exports.supportsCookies=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=D;exports.createClient=Ve;exports.getStepFields=Ue;
|
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-CF6m7G83.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,14 +3,14 @@ var Y = (t, e, r) => e in t ? W(t, e, { enumerable: !0, configurable: !0, writab
|
|
|
3
3
|
var m = (t, e, r) => Y(t, typeof e != "symbol" ? e + "" : e, r);
|
|
4
4
|
import { createDomain as I, createApi as x, createEffect as M, attach as J, sample as F, combine as O, createEvent as C } from "effector";
|
|
5
5
|
import { createFactory as w, invoke as k } from "@withease/factories";
|
|
6
|
-
import { g as
|
|
7
|
-
import { f as St } from "../experience-instance-
|
|
6
|
+
import { g as L, t as Q, c as X, i as Z, e as A, a as ee, b as te, d as re } from "../experience-instance-CKru5var.js";
|
|
7
|
+
import { f as St } from "../experience-instance-CKru5var.js";
|
|
8
8
|
import { l as v } from "../logger-C9a75KZn.js";
|
|
9
9
|
import { c as B, s as $, l as D } from "../storage-Cb_71y48.js";
|
|
10
10
|
import { a as wt } from "../storage-Cb_71y48.js";
|
|
11
11
|
import { g as se } from "../id-BW-g3y32.js";
|
|
12
12
|
import { i as ne } from "../object-JwZ58NOH.js";
|
|
13
|
-
import { s as
|
|
13
|
+
import { s as U, a as oe, b as ie, c as ae, d as ce } from "../supports-BjhuLJ8z.js";
|
|
14
14
|
import { h as bt, f as It, j as xt, e as Ft, g as Et, i as Pt, k as Bt } from "../supports-BjhuLJ8z.js";
|
|
15
15
|
const H = I("experience"), ue = w(
|
|
16
16
|
({ client: t, experience: e }) => {
|
|
@@ -82,7 +82,7 @@ function pe(t) {
|
|
|
82
82
|
const ge = (t, e) => {
|
|
83
83
|
e.register(t);
|
|
84
84
|
}, K = (t, e) => {
|
|
85
|
-
const { targetSelectors: r } = e.configStore.getState(), n =
|
|
85
|
+
const { targetSelectors: r } = e.configStore.getState(), n = L(r, e.id);
|
|
86
86
|
n.forEach(
|
|
87
87
|
({ elements: u }) => u.forEach((s) => Q(s, e.id))
|
|
88
88
|
), X(n, e.id).forEach((u) => {
|
|
@@ -96,7 +96,7 @@ const ge = (t, e) => {
|
|
|
96
96
|
);
|
|
97
97
|
}, fe = async (t, e) => {
|
|
98
98
|
const { decisionLogic: r, targetSelectors: n } = e.configStore.getState();
|
|
99
|
-
return
|
|
99
|
+
return L(n, e.id).length < 1 || n.length === 0 ? !1 : r && Z(r) ? await A(t, r) === !0 : !0;
|
|
100
100
|
}, me = (t, e, r) => {
|
|
101
101
|
const n = e.name, c = e.setup(t);
|
|
102
102
|
if (c) {
|
|
@@ -259,7 +259,7 @@ const je = (t, e, r) => {
|
|
|
259
259
|
"warn",
|
|
260
260
|
`Feature '${d}' already registered. Registering again will override the previous registration.`
|
|
261
261
|
);
|
|
262
|
-
const
|
|
262
|
+
const p = {
|
|
263
263
|
id: d,
|
|
264
264
|
feature: {
|
|
265
265
|
...a,
|
|
@@ -269,7 +269,7 @@ const je = (t, e, r) => {
|
|
|
269
269
|
n.register(
|
|
270
270
|
Object.freeze({
|
|
271
271
|
id: d,
|
|
272
|
-
feature:
|
|
272
|
+
feature: p
|
|
273
273
|
})
|
|
274
274
|
);
|
|
275
275
|
}
|
|
@@ -279,8 +279,8 @@ const je = (t, e, r) => {
|
|
|
279
279
|
key: a,
|
|
280
280
|
storage: i = "local"
|
|
281
281
|
}) => {
|
|
282
|
-
const
|
|
283
|
-
return
|
|
282
|
+
const p = B(`feature:${d}:${a}`, "global"), g = (i === "session" ? $ : D).get(p).boolean();
|
|
283
|
+
return g === null ? null : { id: d, key: a, bucket: g, storage: i };
|
|
284
284
|
}
|
|
285
285
|
), s = M((d) => {
|
|
286
286
|
if (!d)
|
|
@@ -289,10 +289,10 @@ const je = (t, e, r) => {
|
|
|
289
289
|
(d.storage === "session" ? $ : D).set(a, d.bucket);
|
|
290
290
|
}), o = /* @__PURE__ */ new Map(), l = J({
|
|
291
291
|
source: { allFeaturesStore: e, resolvedFeaturesStore: r },
|
|
292
|
-
effect: async ({ allFeaturesStore: d, resolvedFeaturesStore: a }, { id: i, decide:
|
|
293
|
-
const
|
|
294
|
-
if (
|
|
295
|
-
return
|
|
292
|
+
effect: async ({ allFeaturesStore: d, resolvedFeaturesStore: a }, { id: i, decide: p, key: f }) => {
|
|
293
|
+
const g = a.find((j) => j.id === i);
|
|
294
|
+
if (g)
|
|
295
|
+
return g;
|
|
296
296
|
const y = d[i];
|
|
297
297
|
if (!y)
|
|
298
298
|
throw new Error(`Feature with id '${i}' not found`);
|
|
@@ -301,7 +301,7 @@ const je = (t, e, r) => {
|
|
|
301
301
|
const j = await b;
|
|
302
302
|
return { id: y.id, bucket: j, key: f, storage: y.feature.storage };
|
|
303
303
|
}
|
|
304
|
-
const R =
|
|
304
|
+
const R = p();
|
|
305
305
|
o.set(`${i}:${f}`, R);
|
|
306
306
|
const E = await R;
|
|
307
307
|
return { id: y.id, bucket: E, key: f, storage: y.feature.storage };
|
|
@@ -309,9 +309,14 @@ const je = (t, e, r) => {
|
|
|
309
309
|
});
|
|
310
310
|
F({
|
|
311
311
|
clock: n.register,
|
|
312
|
-
|
|
313
|
-
|
|
314
|
-
|
|
312
|
+
source: e,
|
|
313
|
+
filter: (d, a) => {
|
|
314
|
+
const i = d[a.id];
|
|
315
|
+
return i ? i.feature.key !== a.feature.feature.key || i.feature.storage !== a.feature.feature.storage : !0;
|
|
316
|
+
},
|
|
317
|
+
fn: (d, a) => {
|
|
318
|
+
const { id: i, feature: p } = a;
|
|
319
|
+
return { id: i, key: p.feature.key, storage: p.feature.storage };
|
|
315
320
|
},
|
|
316
321
|
target: u
|
|
317
322
|
}), F({
|
|
@@ -319,8 +324,8 @@ const je = (t, e, r) => {
|
|
|
319
324
|
clock: l.doneData,
|
|
320
325
|
fn: (d, a) => {
|
|
321
326
|
var y;
|
|
322
|
-
const { id: i, bucket:
|
|
323
|
-
return
|
|
327
|
+
const { id: i, bucket: p, storage: f } = a, g = (y = d[i]) == null ? void 0 : y.feature.key;
|
|
328
|
+
return g ? { key: g, id: i, bucket: p, storage: f } : null;
|
|
324
329
|
},
|
|
325
330
|
target: s
|
|
326
331
|
});
|
|
@@ -329,12 +334,12 @@ const je = (t, e, r) => {
|
|
|
329
334
|
allFeaturesStore: d,
|
|
330
335
|
resolvedFeaturesStore: a
|
|
331
336
|
}) => Object.values(d).map((i) => {
|
|
332
|
-
const
|
|
333
|
-
return
|
|
337
|
+
const p = a.find((f) => f.id === i.id);
|
|
338
|
+
return p ? {
|
|
334
339
|
id: i.id,
|
|
335
340
|
name: i.feature.name,
|
|
336
341
|
key: i.feature.key,
|
|
337
|
-
getBucket: () => ({ id: i.id, bucket:
|
|
342
|
+
getBucket: () => ({ id: i.id, bucket: p.bucket }),
|
|
338
343
|
isResolved: !0
|
|
339
344
|
} : {
|
|
340
345
|
id: i.id,
|
|
@@ -375,7 +380,7 @@ function Ce(t) {
|
|
|
375
380
|
const De = (t, e, r) => {
|
|
376
381
|
r.register(t, e);
|
|
377
382
|
}, P = I("history");
|
|
378
|
-
function
|
|
383
|
+
function _(t, e) {
|
|
379
384
|
return {
|
|
380
385
|
// eslint-disable-next-line sonarjs/pseudo-random
|
|
381
386
|
id: se(`history-entry-${Date.now()}-${Math.random()}}`),
|
|
@@ -387,11 +392,11 @@ function L(t, e) {
|
|
|
387
392
|
const Me = w(() => {
|
|
388
393
|
const t = P.store({ entries: [] }), e = P.event(), r = P.event(), n = P.event(), c = P.event();
|
|
389
394
|
t.on(e, (s, o) => ({
|
|
390
|
-
entries: [...s.entries,
|
|
395
|
+
entries: [...s.entries, _(o.experienceId, o.node)]
|
|
391
396
|
})), t.on(r, (s, o) => ({
|
|
392
397
|
entries: [
|
|
393
398
|
...s.entries.slice(0, -1),
|
|
394
|
-
|
|
399
|
+
_(o.experienceId, o.node)
|
|
395
400
|
]
|
|
396
401
|
})), t.on(c, (s, o) => o);
|
|
397
402
|
function u(s, o) {
|
|
@@ -451,13 +456,13 @@ const Ve = () => C(), Ne = I("field"), ze = w(() => {
|
|
|
451
456
|
getByName: u
|
|
452
457
|
};
|
|
453
458
|
});
|
|
454
|
-
function
|
|
459
|
+
function _e() {
|
|
455
460
|
return k(ze);
|
|
456
461
|
}
|
|
457
|
-
const
|
|
462
|
+
const Le = (t, e) => {
|
|
458
463
|
e.register(t);
|
|
459
|
-
},
|
|
460
|
-
const t =
|
|
464
|
+
}, Ue = I("action"), He = w(() => {
|
|
465
|
+
const t = Ue.store({}), e = x(t, {
|
|
461
466
|
register(u, s) {
|
|
462
467
|
return {
|
|
463
468
|
...u,
|
|
@@ -501,7 +506,7 @@ const qe = (t, e, r) => {
|
|
|
501
506
|
};
|
|
502
507
|
},
|
|
503
508
|
clear(a, i) {
|
|
504
|
-
const { [i]:
|
|
509
|
+
const { [i]: p, ...f } = a;
|
|
505
510
|
return f;
|
|
506
511
|
},
|
|
507
512
|
clearAll() {
|
|
@@ -514,88 +519,88 @@ const qe = (t, e, r) => {
|
|
|
514
519
|
async function s(a) {
|
|
515
520
|
const i = [];
|
|
516
521
|
return await Promise.allSettled(
|
|
517
|
-
Object.entries(a).map(async ([
|
|
518
|
-
let
|
|
519
|
-
const y = t.fields.getById(
|
|
522
|
+
Object.entries(a).map(async ([p, f]) => {
|
|
523
|
+
let g = f;
|
|
524
|
+
const y = t.fields.getById(p).getState();
|
|
520
525
|
if (!y) {
|
|
521
526
|
i.push({
|
|
522
|
-
fieldId:
|
|
523
|
-
userMessage: `Field '${
|
|
524
|
-
systemMessage: `No field with ID '${
|
|
525
|
-
value:
|
|
527
|
+
fieldId: p,
|
|
528
|
+
userMessage: `Field '${p}' not found`,
|
|
529
|
+
systemMessage: `No field with ID '${p}' exists. Available field IDs are: ${Object.keys(t.fields.listStore.getState()).join(",")}.`,
|
|
530
|
+
value: g
|
|
526
531
|
});
|
|
527
532
|
return;
|
|
528
533
|
}
|
|
529
|
-
if (y.multiple && (typeof
|
|
534
|
+
if (y.multiple && (typeof g == "string" || typeof g == "number" || typeof g == "boolean") && (g = [g]), y.validation && !ne(y.validation)) {
|
|
530
535
|
const b = await A(t, y.validation, {
|
|
531
|
-
$input:
|
|
536
|
+
$input: g
|
|
532
537
|
});
|
|
533
538
|
if (typeof b == "string") {
|
|
534
539
|
i.push({
|
|
535
|
-
fieldId:
|
|
540
|
+
fieldId: p,
|
|
536
541
|
userMessage: b,
|
|
537
542
|
systemMessage: `Field validation resulted in an error: ${b}.`,
|
|
538
|
-
value:
|
|
543
|
+
value: g
|
|
539
544
|
});
|
|
540
545
|
return;
|
|
541
546
|
}
|
|
542
547
|
if (b === !1) {
|
|
543
548
|
i.push({
|
|
544
|
-
fieldId:
|
|
549
|
+
fieldId: p,
|
|
545
550
|
userMessage: "This field is invalid",
|
|
546
551
|
systemMessage: "Field validation resulted in an unspecified error.",
|
|
547
|
-
value:
|
|
552
|
+
value: g
|
|
548
553
|
});
|
|
549
554
|
return;
|
|
550
555
|
}
|
|
551
556
|
}
|
|
552
|
-
if (y.required && (typeof
|
|
557
|
+
if (y.required && (typeof g > "u" || g === null || g === "" || Array.isArray(g) && !g.length)) {
|
|
553
558
|
i.push({
|
|
554
|
-
fieldId:
|
|
559
|
+
fieldId: p,
|
|
555
560
|
userMessage: "This field is required",
|
|
556
561
|
systemMessage: "Field is required.",
|
|
557
|
-
value:
|
|
562
|
+
value: g
|
|
558
563
|
});
|
|
559
564
|
return;
|
|
560
565
|
}
|
|
561
|
-
if (!y.multiple && Array.isArray(
|
|
566
|
+
if (!y.multiple && Array.isArray(g) && g.length > 1) {
|
|
562
567
|
i.push({
|
|
563
|
-
fieldId:
|
|
568
|
+
fieldId: p,
|
|
564
569
|
userMessage: "This field expects a single response",
|
|
565
570
|
systemMessage: "Field expects a single response.",
|
|
566
|
-
value:
|
|
571
|
+
value: g
|
|
567
572
|
});
|
|
568
573
|
return;
|
|
569
574
|
}
|
|
570
575
|
if (y.options) {
|
|
571
|
-
const b = y.options.map((E) => E.value), R = Array.isArray(
|
|
572
|
-
Array.isArray(
|
|
573
|
-
fieldId:
|
|
576
|
+
const b = y.options.map((E) => E.value), R = Array.isArray(g) ? g : [g];
|
|
577
|
+
Array.isArray(g) && (R.every((E) => b.includes(E)) || i.push({
|
|
578
|
+
fieldId: p,
|
|
574
579
|
userMessage: "This field expects a valid option",
|
|
575
580
|
systemMessage: `Field expects a valid option. Valid options are: ${b.join(", ")}`,
|
|
576
|
-
value:
|
|
581
|
+
value: g
|
|
577
582
|
}));
|
|
578
583
|
}
|
|
579
584
|
})
|
|
580
585
|
), { responsesToCommit: a, validationErrors: i };
|
|
581
586
|
}
|
|
582
587
|
async function o(a) {
|
|
583
|
-
const { responsesToCommit: i, validationErrors:
|
|
584
|
-
return
|
|
588
|
+
const { responsesToCommit: i, validationErrors: p } = await s(a);
|
|
589
|
+
return p.length ? { errors: p } : (c.registerBatch(i), { errors: [] });
|
|
585
590
|
}
|
|
586
|
-
const l = e.map((a) => a), h = e.map((a) => Object.keys(a).map((
|
|
587
|
-
fieldId:
|
|
588
|
-
value: a[
|
|
591
|
+
const l = e.map((a) => a), h = e.map((a) => Object.keys(a).map((p) => ({
|
|
592
|
+
fieldId: p,
|
|
593
|
+
value: a[p]
|
|
589
594
|
})));
|
|
590
595
|
function S(a) {
|
|
591
|
-
const i = t.fields.getById(a),
|
|
592
|
-
return O({ f: i, r:
|
|
596
|
+
const i = t.fields.getById(a), p = e.map((f) => f[a] || null);
|
|
597
|
+
return O({ f: i, r: p }, ({ f, r: g }) => g || (f != null && f.defaultValue ? f.defaultValue : null));
|
|
593
598
|
}
|
|
594
599
|
function d(a) {
|
|
595
600
|
const i = t.fields.getByName(a);
|
|
596
|
-
return O({ f: i, s: e }, ({ f:
|
|
597
|
-
const
|
|
598
|
-
return
|
|
601
|
+
return O({ f: i, s: e }, ({ f: p, s: f }) => {
|
|
602
|
+
const g = p && f[p.id] || null;
|
|
603
|
+
return g || (p != null && p.defaultValue ? p.defaultValue : null);
|
|
599
604
|
});
|
|
600
605
|
}
|
|
601
606
|
return F({
|
|
@@ -619,9 +624,9 @@ const qe = (t, e, r) => {
|
|
|
619
624
|
function Ye(t) {
|
|
620
625
|
return k(We, t);
|
|
621
626
|
}
|
|
622
|
-
const Je = () => "0.0.1-dev.
|
|
627
|
+
const Je = () => "0.0.1-dev.1763014928671";
|
|
623
628
|
function Qe() {
|
|
624
|
-
if (
|
|
629
|
+
if (U()) {
|
|
625
630
|
const t = [
|
|
626
631
|
document.currentScript,
|
|
627
632
|
document.getElementById("picked_script"),
|
|
@@ -689,13 +694,13 @@ class q {
|
|
|
689
694
|
m(this, "predicates", $e({ client: this }));
|
|
690
695
|
m(this, "features", Ce({ client: this }));
|
|
691
696
|
m(this, "responses", Ye({ client: this }));
|
|
692
|
-
m(this, "fields",
|
|
697
|
+
m(this, "fields", _e());
|
|
693
698
|
m(this, "actions", Ke());
|
|
694
699
|
v("info", "Picked client initializing."), this.organizationId = e.organizationId, this.projectId = e.projectId, this.options = Object.freeze(e), this.apiUrl = e.apiUrl || Qe(), this.session = st(), this.setupPlugins(), this.setupFeatures(), this.setupPredicates(), this.setupActions(), this.eventBus({ type: "initialized", version: Je() }), v("info", "Picked client initialized.");
|
|
695
700
|
}
|
|
696
701
|
start() {
|
|
697
702
|
Pe(this), (async () => {
|
|
698
|
-
|
|
703
|
+
U() && (document.body && T(this), await re(), await T(this), this.eventBus({ type: "ready" }), this.isReady = !0, this.session && this.eventBus({ type: "session", ...this.session }));
|
|
699
704
|
})();
|
|
700
705
|
}
|
|
701
706
|
registerFramework(e) {
|
|
@@ -714,7 +719,7 @@ class q {
|
|
|
714
719
|
je(e, r, this.predicates);
|
|
715
720
|
}
|
|
716
721
|
registerField(e) {
|
|
717
|
-
|
|
722
|
+
Le(e, this.fields);
|
|
718
723
|
}
|
|
719
724
|
registerAction(e, r) {
|
|
720
725
|
qe(e, r, this.actions);
|
|
@@ -844,7 +849,7 @@ export {
|
|
|
844
849
|
wt as subscribe,
|
|
845
850
|
bt as supportsCookies,
|
|
846
851
|
ae as supportsCryptoRandomUUID,
|
|
847
|
-
|
|
852
|
+
U as supportsDocument,
|
|
848
853
|
It as supportsHistory,
|
|
849
854
|
xt as supportsIntersectionObserver,
|
|
850
855
|
ie as supportsLocalStorage,
|
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-CKru5var.js";
|
|
3
3
|
function R() {
|
|
4
4
|
let c, p;
|
|
5
5
|
return {
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"use strict";const s=require("effector"),G=require("@withease/factories"),H=require("./supports-YvpQZxbh.cjs"),N=require("./logger-BsmHUUw1.cjs"),mt=require("./object-BbFTsGh3.cjs");function ht(t){return typeof t=="number"&&!isNaN(t)}function R(t){return typeof t=="string"}function E(t){return Array.isArray(t)}function rt(t){return t instanceof Promise}function tt(t){return typeof t=="object"&&t!==null&&!Array.isArray(t)&&Object.keys(t).length===1}function m(t){if(ht(t))return t;const e=parseFloat(`${t}`);return isNaN(e)?0:e}function T(t){return`${t}`}const St={"==":(t,e)=>t==e,"===":(t,e)=>t===e,"!=":(t,e)=>t!=e,"!==":(t,e)=>t!==e,">":(t,e)=>m(t)>m(e),">=":(t,e)=>m(t)>=m(e),"<":(t,e,r)=>{const n=m(t),a=m(e);if(r===void 0)return n<a;const c=m(r);return n<a&&a<c},"<=":(t,e,r)=>{const n=m(t),a=m(e);if(r===void 0)return n<=a;const c=m(r);return n<=a&&a<=c},"!!":async t=>await B(t),"!":async t=>!await B(t),"%":(t,e)=>m(t)%m(e),log:t=>(console.log(t),t),in:(t,e)=>e?R(e)?e.indexOf(T(t))!==-1:E(e)?e.includes(t):!1:!1,cat:(...t)=>t.map(T).join(""),substr:(t,e,r)=>{const n=T(t),a=m(e);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)},"+":(...t)=>t.reduce((e,r)=>m(e)+m(r),0),"*":(...t)=>t.reduce((e,r)=>m(e)*m(r),1),"-":(t,e)=>{const r=m(t);return e===void 0?-r:r-m(e)},"/":(t,e)=>m(t)/m(e),min:(...t)=>Math.min(...t.map(m)),max:(...t)=>Math.max(...t.map(m)),merge:(...t)=>t.reduce((e,r)=>E(r)?e.concat(r):e.concat([r]),[]),var(t,e){const r=arguments.length>1?e:null;if(t===""||t==="."||t===null||t===void 0)return this;if(typeof t=="number"&&Array.isArray(this))return t>=0&&t<this.length?this[t]:r;const n=T(t);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(...t){const e=E(t[0])?t[0]:t,r=[];for(const n of e){const a=await g({var:n},this);(a===null||a==="")&&r.push(`${n}`)}return r},async missing_some(t,e){const r=await g({missing:e},this);if(!E(r)||!E(e))return[];const n=r.filter(R);return e.filter(R).length-n.length>=m(t)?[]:n},invoke(t){return typeof t!="function"?null:t()},regexp_matches(t,e){let r=t,n="";if(E(t)){const[c,o]=t;r=c,n=o}return!R(r)||!R(n)?!1:new RegExp(r,n).test(T(e))},throw(t){throw new Error(T(t))}};async function g(t,e){if(!t)return t;if(rt(t))return g(await t,e);if(E(t))return Promise.all(t.map(o=>g(o,e)));if(!tt(t))return t;const r=yt(t);let n=r?t[r]??[]:[];switch(E(n)||(n=[n]),r){case"if":case"?:":for(let o=0;o<n.length-1;o+=2)if(await B(await g(n[o],e)))return g(n[o+1],e);return n.length%2===1?g(n[n.length-1],e):null;case"and":{let o=null;for(const u of n)if(o=await g(u,e),!await B(o))return o;return o}case"or":{let o=null;for(const u of n)if(o=await g(u,e),await B(o))return o;return o}case"map":{const o=await g(n[0],e);return E(o)?await Promise.all(o.map(u=>g(n[1],u))):[]}case"filter":{const o=await g(n[0],e);return E(o)?(await Promise.all(o.map(async p=>{const y=await B(await g(n[1],p));return{item:p,shouldInclude:y}}))).filter(({shouldInclude:p})=>p).map(({item:p})=>p):[]}case"reduce":{const o=await g(n[0],e);if(!E(o))return n.length>2?await g(n[2],e):null;const u=n[1];let y=n.length>2?await g(n[2],e):null;for(const k of o)y=await g(u,{current:k,accumulator:y});return y}case"all":{const o=await g(n[0],e);if(!E(o)||o.length===0)return!1;for(const u of o)if(!await B(await g(n[1],u)))return!1;return!0}case"some":{const o=await g(n[0],e);if(!E(o))return!1;for(const u of o)if(await B(await g(n[1],u)))return!0;return!1}case"none":{const o=await g(n[0],e);if(!E(o))return!0;for(const u of o)if(await B(await g(n[1],u)))return!1;return!0}case"catch":try{return await g(n[0],e)}catch(o){return tt(o)?await g(o,e):n[1]?await g(n[1],o):o instanceof Error?o.message:o}}const a=await Promise.all(n.map(o=>g(o,e))),c=r?St[r]:void 0;if(!c)throw new Error(`Unrecognized operation ${r}`);return c.apply(e,a)}async function B(t){return rt(t)?B(await t):!(Array.isArray(t)&&t.length===0)&&!!t}function yt(t){return Object.keys(t)[0]}function ot(t){return!mt.isEmpty(t)}async function z(t,e,r){const n=t.getStateSnapshot(),a=t.predicates.listStore.getState().reduce((u,p)=>({...u,[p.name]:()=>p.predicate(n)}),{}),c=t.features.listStore.getState().reduce((u,p)=>({...u,[p.id]:async()=>{const{bucket:y}=await p.getBucket();return y}}),{}),o={...r,responses:t.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(e,o)}function wt(t){return!H.supportsWindow()||!H.supportsDocument()?[]:Array.from(window.document.querySelectorAll(t)).filter(e=>e instanceof HTMLElement)}function Et(t){if(!H.supportsShadowRoot())throw new Error("Shadow DOM is not supported in this environment");return t.attachShadow({mode:"closed"})}function Nt(){return new Promise((t,e)=>{if(!H.supportsDocument()){e();return}document.readyState!=="loading"?t():document.addEventListener("readystatechange",()=>t(),{once:!0})})}function It(t,e){const r=new MutationObserver(n=>{document.contains(t)||(r.disconnect(),e())});r.observe(document.body,{childList:!0,subtree:!0})}const j="picked-root",q="picked-target",xt="picked-root";function kt(t,e){return[...t,{selector:`${xt}[experience-id="${e}"]`,placement:"replace"}].flatMap(n=>{const a=wt(n.selector).filter(c=>!At(c,e)&&!it(c,e));return{...n,elements:a}})}function vt(t,e){return t.flatMap(r=>r.elements.map(n=>Ot(n,r.placement,e)))}function bt(t,e){t.classList.add(q),t.classList.add(`${q}-${e}`)}function At(t,e){return e?t.classList.contains(`${q}-${e}`):t.classList.contains(`${q}`)}function it(t,e){return e?t.classList.contains(`${j}-${e}`):t.classList.contains(j)}function Bt(t){const e=document.createElement("div");return e.style.display="block",e.classList.add(j),e.classList.add(`${j}-${t}`),e}function Ot(t,e,r){let n;const a=Bt(r);if(t instanceof Document)n=t.body.appendChild(a);else{switch(e){case"replace":t.replaceWith(a);break;case"before":t.before(a);break;case"after":t.after(a);break;case"prepend":t.prepend(a);break;default:t.append(a);break}n=a}return n}function Ft(t){return t.type==="conditional"}function L(t){return t.type==="step"}function $t(t){return t.type==="experience"}function et(t){return t.type==="origin"}function nt(t){return t.type==="action"}const st=(t,e,r,n,a=new Set)=>a.has(r.id)?[]:(a.add(r.id),L(r)&&!n?[r]:e.filter(o=>o.sourceNodeId===r.id).flatMap(o=>{const u=t.find(p=>p.id===o.destinationNodeId);return u?st(t,e,u,!1,a):[]})),_t=(t,e,r)=>st(t,e,r,!0,new Set),at=(t,e,r,n,a=new Set)=>{if(a.has(r.id))return[-1,-1];a.add(r.id);const c=e.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 y=t.find(M=>M.id===p.destinationNodeId);if(!y)continue;const[k,O]=at(t,e,y,!1,new Set(a));k!==-1&&(o=Math.min(o,k+1),u=Math.max(u,O+1))}return o===1/0?[-1,-1]:[o,u]},Tt=(t,e,r)=>at(t,e,r,!0,new Set),ct=(t,e,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=e.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=t.find(O=>O.id===u.sourceNodeId);if(!p)continue;const[y,k]=ct(t,e,p,new Set(n));y!==-1&&(c=Math.min(c,y+1),o=Math.max(o,k+1))}return c===1/0?[-1,-1]:[c,o]},Lt=(t,e,r)=>ct(t,e,r,new Set),ut=t=>t.find(r=>r.type==="origin")||null,W=(t,e,r)=>{if(!t)return ut(e);const n=r.find(c=>c.sourceNodeId===t.id);if(!n)return null;const a=e.find(c=>c.id===n.destinationNodeId);return a||null};async function Mt(t,e,r,n){const a=t?"true":"false",c=n.find(o=>o.sourceNodeHandle===a&&o.sourceNodeId===e);return r.find(o=>o.id===(c==null?void 0:c.destinationNodeId))}const X=s.createDomain("experience-instance"),Dt=G.createFactory(({client:t,experience:e,target:r})=>{const n=s.createEvent(),a=s.createEvent(),c=s.createEvent(),o=s.createEvent(),u=s.createEvent(),p=s.createEvent(),y=e.componentStore,k=X.store("transitioning"),O=t.history.entriesStore.map(i=>i.filter(l=>l.experienceId===e.id)),M=O.map(i=>i.filter(l=>L(l.node))),I=O.map(i=>{var l;return((l=i[i.length-1])==null?void 0:l.node)||null}),f=s.combine(e.treeStore,I,({steps:i},l)=>i.find(d=>l&&L(l)&&d.id===l.stepId)||null),h=s.combine(e.treeStore,I,({nodes:i,edges:l},d)=>d?_t(i,l,d):[]),b=s.combine(e.treeStore,I,({nodes:i,edges:l},d)=>d?Lt(i,l,d):[-1,-1]),F=s.combine(e.treeStore,I,({nodes:i,edges:l},d)=>d?Tt(i,l,d):[-1,-1]),$=e.configStore.getState().initializeOpenLogic,A=X.store($===!0),P=s.createApi(A,{open:()=>!0,close:()=>!1,toggle:i=>!i,set:(i,l)=>l}),lt=s.createEffect(async()=>{t.history.back({experienceId:e.id})}),dt=s.attach({source:e.treeStore,effect:async(i,l)=>{const d=i.nodes.find(w=>L(w)&&w.stepId===l);d&&t.history.push({experienceId:e.id,node:d})}}),J=s.attach({source:I,effect:i=>{}}),K=s.attach({source:e.treeStore,effect:async({nodes:i})=>ut(i)}),U=s.attach({source:e.treeStore,effect:async({nodes:i,edges:l},d)=>W(d,i,l)}),V=s.attach({source:e.treeStore,effect:async({nodes:i,edges:l,conditionals:d},w)=>{if(!w)return;const _=d.find(v=>v.id===w.conditionalId);if(!_)return;const x=w.id,S=await z(t,_.condition);return Mt(!!S,x,i,l)}}),Q=s.attach({source:e.treeStore,effect:async({nodes:i,edges:l},d)=>{if(!d||!nt(d))return;const w=d.action;if(!w){N.logger("warn",`Action node ${d.id} has no action name`);return}const _=t.actions.getByName(w).getState();if(!_){N.logger("warn",`Action '${w}' not registered on client`);const x=l.find(S=>S.sourceNodeId===d.id&&S.sourceNodeHandle==="false");return x?i.find(S=>S.id===x.destinationNodeId):null}if(typeof _.action!="function"){N.logger("warn",`Action '${w}' is not a function`);const x=l.find(S=>S.sourceNodeId===d.id&&S.sourceNodeHandle==="false");return x?i.find(S=>S.id===x.destinationNodeId):null}try{N.logger("info",`Executing action: ${w}`),await _.action();const x=l.find(v=>v.sourceNodeId===d.id&&v.sourceNodeHandle==="true");if(!x)return N.logger("warn",`No 'true' edge found for action node ${d.id}`),null;const S=i.find(v=>v.id===x.destinationNodeId);return N.logger("info",`Action '${w}' succeeded, moving to node ${S==null?void 0:S.id}`),S||null}catch(x){N.logger("warn",`Action '${w}' failed:`,x);const S=l.find(C=>C.sourceNodeId===d.id&&C.sourceNodeHandle==="false");if(!S)return N.logger("warn",`No 'false' edge found for action node ${d.id}`),null;const v=i.find(C=>C.id===S.destinationNodeId);return N.logger("info",`Action '${w}' failed, moving to node ${v==null?void 0:v.id}`),v||null}}}),pt=s.createEffect(i=>{if(i)return t.launchExperienceById(i.experienceId)}),Y=s.attach({source:[I,e.treeStore],effect:async([i,{nodes:l,edges:d}])=>W(i,l,d)}),D=s.attach({source:[I,e.treeStore],effect:async([i,{nodes:l,edges:d}])=>W(i,l,d)}),gt=s.createEffect(i=>{t.history.push({experienceId:e.id,node:i})}),Z=s.attach({source:e.configStore,effect:async({initializeOpenLogic:i})=>ot(i)?!!await z(t,i):i??!1});return s.split({source:I,match:i=>i?Ft(i)?"condition":L(i)?"step":$t(i)?"launchExperience":et(i)?"origin":nt(i)?"action":"other":"none",cases:{none:K,origin:U,condition:V,step:J,launchExperience:pt,action:Q,__:s.createEvent()}}),s.sample({clock:[V.doneData,U.doneData,K.doneData,D.doneData,Y.doneData,Q.doneData],filter:Boolean,target:gt}),s.sample({clock:a,target:D}),s.sample({clock:a,source:f,filter:Boolean,target:t.eventBus.prepend(i=>({type:"step_submit",step:i,experience:e}))}),s.sample({clock:D.done,source:f,filter:Boolean,target:t.eventBus.prepend(i=>({type:"step_submit_success",step:i,experience:e}))}),s.sample({clock:D.fail,source:f,filter:Boolean,target:t.eventBus.prepend(i=>({type:"step_submit_error",step:i,experience:e}))}),s.sample({clock:c,target:lt}),s.sample({clock:o,target:dt}),s.sample({source:s.combine([V.pending,U.pending,K.pending,D.pending]),fn:i=>i.some(Boolean)?"transitioning":"ready",target:k}),s.sample({clock:J.doneData,source:f,filter:Boolean,target:t.eventBus.prepend(i=>({type:"step_enter",step:i,experience:e}))}),s.sample({clock:p,target:Z}),s.sample({source:Z.doneData,fn:i=>!!i,target:A}),s.sample({source:I,clock:n,filter:i=>i?et(i):!0,target:Y}),s.sample({source:A,filter:i=>!!i,target:n}),s.sample({source:A,filter:Boolean,target:t.eventBus.prepend(()=>({type:"experience_open",experience:e}))}),s.sample({source:A,filter:i=>!i,target:t.eventBus.prepend(()=>({type:"experience_close",experience:e}))}),s.sample({clock:u,target:[p]}),u(),{id:Math.random().toString(36).substring(7),experienceId:e.id,configStore:e.configStore,target:r,componentStore:y,stateStore:k,isOpenStore:A,open:P.open,close:P.close,toggleOpen:P.toggle,setOpen:P.set,treeStore:e.treeStore,currentNodeStore:I,currentStepStore:f,nextReachableStepNodesStore:h,stepsToOriginStore:b,stepsToLeafStore:F,goToNextStep:a,goToPreviousStep:c,goToStepById:o,stepsHistoryStore:M}});function ft(t){return G.invoke(Dt,t)}const Rt=G.createFactory(({client:t})=>{const e=X.store({}),r=s.createEvent(),n=s.createEvent(),a=s.createEvent(),c=s.createApi(e,{register(f,h){const b=[...f[h.experienceId]??[]];return b.push(h),{...f,[h.experienceId]:b}},unregister(f,h){var $;const b=h.experienceId,F=($=f[b])==null?void 0:$.filter(A=>A!==h);return{...f,[b]:F??[]}}}),o=s.createEffect(({experience:f,target:h})=>ft({client:t,experience:f,target:h})),u=s.createEffect(f=>{c.register(f)}),p=s.createEffect(f=>{f.target&&It(f.target,()=>{a(f)})}),y=s.createEffect(f=>{c.unregister(f)}),k=s.createEffect(f=>{const h=f.componentStore.getState();if(!h){N.logger("warn","No app component registered. Skipping init.");return}const b=h.frameworkStore.getState();if(!b){N.logger("error",`No framework registered for component '${h.name}'. Skipping rendering.`);return}const F=f.target;if(!F){N.logger("error",`No target element registered for experience '${f.experienceId}'. Skipping rendering.`);return}const $=Et(F);try{b.render($,h.component,t,f)}catch(A){N.logger("error",A)}});s.sample({clock:r,target:o}),s.sample({clock:a,target:y}),s.sample({clock:o.doneData,target:[u,p,n]}),s.sample({clock:o.doneData,target:t.eventBus.prepend(f=>({type:"experience_initialized",experienceInstance:f}))}),s.sample({clock:n,target:k});function O(f,h){r({experience:f,target:h})}const M=e.map(f=>Object.values(f).flat());function I(f){return e.map(h=>h[f]||[],{skipVoid:!1})}return{spawn:O,getByExperienceId:I,listStore:M}});function Pt(t){return G.invoke(Rt,t)}exports.createAppHosts=vt;exports.createExperienceInstance=ft;exports.createExperienceInstanceIndex=Pt;exports.domInteractive=Nt;exports.evaluateRuleLogic=z;exports.getTargetElements=kt;exports.isPickedRoot=it;exports.isRulesLogic=ot;exports.isStepNode=L;exports.tagTargetElement=bt;
|
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
import { createDomain as
|
|
2
|
-
import { createFactory as
|
|
3
|
-
import { i as
|
|
1
|
+
import { createDomain as yt, createEvent as B, combine as C, createApi as it, createEffect as _, attach as $, split as wt, sample as m } from "effector";
|
|
2
|
+
import { createFactory as st, invoke as at } from "@withease/factories";
|
|
3
|
+
import { i as Nt, s as ct, a as It } from "./supports-BjhuLJ8z.js";
|
|
4
4
|
import { l as I } from "./logger-C9a75KZn.js";
|
|
5
|
-
import { i as
|
|
6
|
-
function
|
|
5
|
+
import { i as xt } from "./object-JwZ58NOH.js";
|
|
6
|
+
function Et(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 ut(t) {
|
|
16
16
|
return t instanceof Promise;
|
|
17
17
|
}
|
|
18
|
-
function
|
|
18
|
+
function et(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 (Et(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 kt = {
|
|
30
30
|
// eslint-disable-next-line eqeqeq
|
|
31
31
|
"==": (t, e) => t == e,
|
|
32
32
|
"===": (t, e) => t === e,
|
|
@@ -47,8 +47,8 @@ const Et = {
|
|
|
47
47
|
const a = g(r);
|
|
48
48
|
return n <= s && s <= a;
|
|
49
49
|
},
|
|
50
|
-
"!!": async (t) => await
|
|
51
|
-
"!": async (t) => !await
|
|
50
|
+
"!!": async (t) => await O(t),
|
|
51
|
+
"!": async (t) => !await O(t),
|
|
52
52
|
"%": (t, e) => g(t) % g(e),
|
|
53
53
|
// eslint-disable-next-line sonarjs/function-return-type
|
|
54
54
|
log: (t) => (console.log(t), t),
|
|
@@ -130,31 +130,31 @@ const Et = {
|
|
|
130
130
|
};
|
|
131
131
|
async function p(t, e) {
|
|
132
132
|
if (!t) return t;
|
|
133
|
-
if (
|
|
133
|
+
if (ut(t))
|
|
134
134
|
return p(await t, e);
|
|
135
135
|
if (N(t))
|
|
136
136
|
return Promise.all(t.map((o) => p(o, e)));
|
|
137
|
-
if (!
|
|
138
|
-
const r =
|
|
137
|
+
if (!et(t)) return t;
|
|
138
|
+
const r = At(t);
|
|
139
139
|
let n = r ? t[r] ?? [] : [];
|
|
140
140
|
switch (N(n) || (n = [n]), r) {
|
|
141
141
|
case "if":
|
|
142
142
|
case "?:":
|
|
143
143
|
for (let o = 0; o < n.length - 1; o += 2)
|
|
144
|
-
if (await
|
|
144
|
+
if (await O(await p(n[o], e)))
|
|
145
145
|
return p(n[o + 1], e);
|
|
146
146
|
return n.length % 2 === 1 ? p(n[n.length - 1], e) : null;
|
|
147
147
|
case "and": {
|
|
148
148
|
let o = null;
|
|
149
149
|
for (const c of n)
|
|
150
|
-
if (o = await p(c, e), !await
|
|
150
|
+
if (o = await p(c, e), !await O(o))
|
|
151
151
|
return o;
|
|
152
152
|
return o;
|
|
153
153
|
}
|
|
154
154
|
case "or": {
|
|
155
155
|
let o = null;
|
|
156
156
|
for (const c of n)
|
|
157
|
-
if (o = await p(c, e), await
|
|
157
|
+
if (o = await p(c, e), await O(o)) return o;
|
|
158
158
|
return o;
|
|
159
159
|
}
|
|
160
160
|
case "map": {
|
|
@@ -165,7 +165,7 @@ async function p(t, e) {
|
|
|
165
165
|
const o = await p(n[0], e);
|
|
166
166
|
return N(o) ? (await Promise.all(
|
|
167
167
|
o.map(async (d) => {
|
|
168
|
-
const y = await
|
|
168
|
+
const y = await O(await p(n[1], d));
|
|
169
169
|
return { item: d, shouldInclude: y };
|
|
170
170
|
})
|
|
171
171
|
)).filter(({ shouldInclude: d }) => d).map(({ item: d }) => d) : [];
|
|
@@ -184,44 +184,44 @@ async function p(t, e) {
|
|
|
184
184
|
const o = await p(n[0], e);
|
|
185
185
|
if (!N(o) || o.length === 0) return !1;
|
|
186
186
|
for (const c of o)
|
|
187
|
-
if (!await
|
|
187
|
+
if (!await O(await p(n[1], c))) return !1;
|
|
188
188
|
return !0;
|
|
189
189
|
}
|
|
190
190
|
case "some": {
|
|
191
191
|
const o = await p(n[0], e);
|
|
192
192
|
if (!N(o)) return !1;
|
|
193
193
|
for (const c of o)
|
|
194
|
-
if (await
|
|
194
|
+
if (await O(await p(n[1], c))) return !0;
|
|
195
195
|
return !1;
|
|
196
196
|
}
|
|
197
197
|
case "none": {
|
|
198
198
|
const o = await p(n[0], e);
|
|
199
199
|
if (!N(o)) return !0;
|
|
200
200
|
for (const c of o)
|
|
201
|
-
if (await
|
|
201
|
+
if (await O(await p(n[1], c))) return !1;
|
|
202
202
|
return !0;
|
|
203
203
|
}
|
|
204
204
|
case "catch":
|
|
205
205
|
try {
|
|
206
206
|
return await p(n[0], e);
|
|
207
207
|
} catch (o) {
|
|
208
|
-
return
|
|
208
|
+
return et(o) ? await p(o, e) : n[1] ? await p(n[1], o) : o instanceof Error ? o.message : o;
|
|
209
209
|
}
|
|
210
210
|
}
|
|
211
|
-
const s = await Promise.all(n.map((o) => p(o, e))), a = r ?
|
|
211
|
+
const s = await Promise.all(n.map((o) => p(o, e))), a = r ? kt[r] : void 0;
|
|
212
212
|
if (!a) throw new Error(`Unrecognized operation ${r}`);
|
|
213
213
|
return a.apply(e, s);
|
|
214
214
|
}
|
|
215
|
-
async function
|
|
216
|
-
return
|
|
215
|
+
async function O(t) {
|
|
216
|
+
return ut(t) ? O(await t) : !(Array.isArray(t) && t.length === 0) && !!t;
|
|
217
217
|
}
|
|
218
|
-
function
|
|
218
|
+
function At(t) {
|
|
219
219
|
return Object.keys(t)[0];
|
|
220
220
|
}
|
|
221
|
-
function
|
|
222
|
-
return !
|
|
221
|
+
function bt(t) {
|
|
222
|
+
return !xt(t);
|
|
223
223
|
}
|
|
224
|
-
async function
|
|
224
|
+
async function nt(t, e, r) {
|
|
225
225
|
const n = t.getStateSnapshot(), s = t.predicates.listStore.getState().reduce((c, d) => ({
|
|
226
226
|
...c,
|
|
227
227
|
[d.name]: () => d.predicate(n)
|
|
@@ -250,33 +250,33 @@ async function et(t, e, r) {
|
|
|
250
250
|
};
|
|
251
251
|
return await p(e, o);
|
|
252
252
|
}
|
|
253
|
-
function
|
|
254
|
-
return !
|
|
253
|
+
function vt(t) {
|
|
254
|
+
return !It() || !ct() ? [] : Array.from(window.document.querySelectorAll(t)).filter(
|
|
255
255
|
(e) => e instanceof HTMLElement
|
|
256
256
|
);
|
|
257
257
|
}
|
|
258
|
-
function
|
|
259
|
-
if (!
|
|
258
|
+
function Bt(t) {
|
|
259
|
+
if (!Nt())
|
|
260
260
|
throw new Error("Shadow DOM is not supported in this environment");
|
|
261
261
|
return t.attachShadow({ mode: "closed" });
|
|
262
262
|
}
|
|
263
263
|
function Xt() {
|
|
264
264
|
return new Promise((t, e) => {
|
|
265
|
-
if (!
|
|
265
|
+
if (!ct()) {
|
|
266
266
|
e();
|
|
267
267
|
return;
|
|
268
268
|
}
|
|
269
269
|
document.readyState !== "loading" ? t() : document.addEventListener("readystatechange", () => t(), { once: !0 });
|
|
270
270
|
});
|
|
271
271
|
}
|
|
272
|
-
function
|
|
272
|
+
function Ot(t, e) {
|
|
273
273
|
const r = new MutationObserver((n) => {
|
|
274
274
|
document.contains(t) || (r.disconnect(), e());
|
|
275
275
|
});
|
|
276
276
|
r.observe(document.body, { childList: !0, subtree: !0 });
|
|
277
277
|
}
|
|
278
|
-
const
|
|
279
|
-
function
|
|
278
|
+
const U = "picked-root", V = "picked-target", $t = "picked-root";
|
|
279
|
+
function Jt(t, e) {
|
|
280
280
|
return [
|
|
281
281
|
...t,
|
|
282
282
|
// Target and replace picked-root web components
|
|
@@ -285,8 +285,8 @@ function zt(t, e) {
|
|
|
285
285
|
placement: "replace"
|
|
286
286
|
}
|
|
287
287
|
].flatMap((n) => {
|
|
288
|
-
const s =
|
|
289
|
-
(a) => !Ft(a, e) && !
|
|
288
|
+
const s = vt(n.selector).filter(
|
|
289
|
+
(a) => !Ft(a, e) && !_t(a, e)
|
|
290
290
|
);
|
|
291
291
|
return {
|
|
292
292
|
...n,
|
|
@@ -294,25 +294,25 @@ function zt(t, e) {
|
|
|
294
294
|
};
|
|
295
295
|
});
|
|
296
296
|
}
|
|
297
|
-
function Jt(t, e) {
|
|
298
|
-
return t.flatMap((r) => r.elements.map((n) => Mt(n, r.placement, e)));
|
|
299
|
-
}
|
|
300
297
|
function Qt(t, e) {
|
|
301
|
-
t.
|
|
298
|
+
return t.flatMap((r) => r.elements.map((n) => Tt(n, r.placement, e)));
|
|
299
|
+
}
|
|
300
|
+
function Yt(t, e) {
|
|
301
|
+
t.classList.add(V), t.classList.add(`${V}-${e}`);
|
|
302
302
|
}
|
|
303
303
|
function Ft(t, e) {
|
|
304
|
-
return e ? t.classList.contains(`${
|
|
304
|
+
return e ? t.classList.contains(`${V}-${e}`) : t.classList.contains(`${V}`);
|
|
305
305
|
}
|
|
306
|
-
function
|
|
307
|
-
return e ? t.classList.contains(`${
|
|
306
|
+
function _t(t, e) {
|
|
307
|
+
return e ? t.classList.contains(`${U}-${e}`) : t.classList.contains(U);
|
|
308
308
|
}
|
|
309
|
-
function
|
|
309
|
+
function Mt(t) {
|
|
310
310
|
const e = document.createElement("div");
|
|
311
|
-
return e.style.display = "block", e.classList.add(
|
|
311
|
+
return e.style.display = "block", e.classList.add(U), e.classList.add(`${U}-${t}`), e;
|
|
312
312
|
}
|
|
313
|
-
function
|
|
313
|
+
function Tt(t, e, r) {
|
|
314
314
|
let n;
|
|
315
|
-
const s =
|
|
315
|
+
const s = Mt(r);
|
|
316
316
|
if (t instanceof Document)
|
|
317
317
|
n = t.body.appendChild(s);
|
|
318
318
|
else {
|
|
@@ -337,25 +337,25 @@ function Mt(t, e, r) {
|
|
|
337
337
|
}
|
|
338
338
|
return n;
|
|
339
339
|
}
|
|
340
|
-
function
|
|
340
|
+
function Lt(t) {
|
|
341
341
|
return t.type === "conditional";
|
|
342
342
|
}
|
|
343
343
|
function j(t) {
|
|
344
344
|
return t.type === "step";
|
|
345
345
|
}
|
|
346
|
-
function
|
|
346
|
+
function Dt(t) {
|
|
347
347
|
return t.type === "experience";
|
|
348
348
|
}
|
|
349
|
-
function
|
|
349
|
+
function rt(t) {
|
|
350
350
|
return t.type === "origin";
|
|
351
351
|
}
|
|
352
|
-
function
|
|
352
|
+
function ot(t) {
|
|
353
353
|
return t.type === "action";
|
|
354
354
|
}
|
|
355
|
-
const
|
|
355
|
+
const ft = (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) => {
|
|
356
356
|
const c = t.find((d) => d.id === o.destinationNodeId);
|
|
357
|
-
return c ?
|
|
358
|
-
})),
|
|
357
|
+
return c ? ft(t, e, c, !1, s) : [];
|
|
358
|
+
})), Pt = (t, e, r) => ft(t, e, r, !0, /* @__PURE__ */ new Set()), lt = (t, e, r, n, s = /* @__PURE__ */ new Set()) => {
|
|
359
359
|
if (s.has(r.id)) return [-1, -1];
|
|
360
360
|
s.add(r.id);
|
|
361
361
|
const a = e.filter((d) => d.sourceNodeId === r.id);
|
|
@@ -364,26 +364,26 @@ const ut = (t, e, r, n, s = /* @__PURE__ */ new Set()) => s.has(r.id) ? [] : (s.
|
|
|
364
364
|
for (const d of a) {
|
|
365
365
|
const y = t.find((P) => P.id === d.destinationNodeId);
|
|
366
366
|
if (!y) continue;
|
|
367
|
-
const [k,
|
|
367
|
+
const [k, F] = lt(
|
|
368
368
|
t,
|
|
369
369
|
e,
|
|
370
370
|
y,
|
|
371
371
|
!1,
|
|
372
372
|
new Set(s)
|
|
373
373
|
);
|
|
374
|
-
k !== -1 && (o = Math.min(o, k + 1), c = Math.max(c,
|
|
374
|
+
k !== -1 && (o = Math.min(o, k + 1), c = Math.max(c, F + 1));
|
|
375
375
|
}
|
|
376
376
|
return o === 1 / 0 ? [-1, -1] : [o, c];
|
|
377
|
-
},
|
|
377
|
+
}, Rt = (t, e, r) => lt(t, e, r, !0, /* @__PURE__ */ new Set()), dt = (t, e, r, n = /* @__PURE__ */ new Set()) => {
|
|
378
378
|
if (n.has(r.id)) return [-1, -1];
|
|
379
379
|
if (n.add(r.id), r.type === "origin") return [0, 0];
|
|
380
380
|
const s = e.filter((c) => c.destinationNodeId === r.id);
|
|
381
381
|
if (s.length === 0) return [-1, -1];
|
|
382
382
|
let a = 1 / 0, o = -1 / 0;
|
|
383
383
|
for (const c of s) {
|
|
384
|
-
const d = t.find((
|
|
384
|
+
const d = t.find((F) => F.id === c.sourceNodeId);
|
|
385
385
|
if (!d) continue;
|
|
386
|
-
const [y, k] =
|
|
386
|
+
const [y, k] = dt(
|
|
387
387
|
t,
|
|
388
388
|
e,
|
|
389
389
|
d,
|
|
@@ -392,28 +392,28 @@ const ut = (t, e, r, n, s = /* @__PURE__ */ new Set()) => s.has(r.id) ? [] : (s.
|
|
|
392
392
|
y !== -1 && (a = Math.min(a, y + 1), o = Math.max(o, k + 1));
|
|
393
393
|
}
|
|
394
394
|
return a === 1 / 0 ? [-1, -1] : [a, o];
|
|
395
|
-
},
|
|
395
|
+
}, Ct = (t, e, r) => dt(t, e, r, /* @__PURE__ */ new Set()), pt = (t) => t.find((r) => r.type === "origin") || null, X = (t, e, r) => {
|
|
396
396
|
if (!t)
|
|
397
|
-
return
|
|
397
|
+
return pt(e);
|
|
398
398
|
const n = r.find((a) => a.sourceNodeId === t.id);
|
|
399
399
|
if (!n)
|
|
400
400
|
return null;
|
|
401
401
|
const s = e.find((a) => a.id === n.destinationNodeId);
|
|
402
402
|
return s || null;
|
|
403
403
|
};
|
|
404
|
-
async function
|
|
404
|
+
async function Ht(t, e, r, n) {
|
|
405
405
|
const s = t ? "true" : "false", a = n.find(
|
|
406
406
|
(o) => o.sourceNodeHandle === s && o.sourceNodeId === e
|
|
407
407
|
);
|
|
408
408
|
return r.find((o) => o.id === (a == null ? void 0 : a.destinationNodeId));
|
|
409
409
|
}
|
|
410
|
-
const
|
|
410
|
+
const J = yt("experience-instance"), jt = st(
|
|
411
411
|
({
|
|
412
412
|
client: t,
|
|
413
413
|
experience: e,
|
|
414
414
|
target: r
|
|
415
415
|
}) => {
|
|
416
|
-
const n = B(), s = B(), a = B(), o = B(), c = B(), d = B(), y = e.componentStore, k =
|
|
416
|
+
const n = B(), s = B(), a = B(), o = B(), c = B(), d = B(), y = e.componentStore, k = J.store("transitioning"), F = t.history.entriesStore.map((i) => i.filter((f) => f.experienceId === e.id)), P = F.map((i) => i.filter((f) => j(f.node))), x = F.map((i) => {
|
|
417
417
|
var f;
|
|
418
418
|
return ((f = i[i.length - 1]) == null ? void 0 : f.node) || null;
|
|
419
419
|
}), u = C(
|
|
@@ -423,53 +423,53 @@ const z = ht("experience-instance"), Ht = it(
|
|
|
423
423
|
), S = C(
|
|
424
424
|
e.treeStore,
|
|
425
425
|
x,
|
|
426
|
-
({ nodes: i, edges: f }, l) => l ?
|
|
427
|
-
),
|
|
426
|
+
({ nodes: i, edges: f }, l) => l ? Pt(i, f, l) : []
|
|
427
|
+
), b = C(
|
|
428
428
|
e.treeStore,
|
|
429
429
|
x,
|
|
430
|
-
({ nodes: i, edges: f }, l) => l ?
|
|
431
|
-
),
|
|
430
|
+
({ nodes: i, edges: f }, l) => l ? Ct(i, f, l) : [-1, -1]
|
|
431
|
+
), M = C(
|
|
432
432
|
e.treeStore,
|
|
433
433
|
x,
|
|
434
|
-
({ nodes: i, edges: f }, l) => l ?
|
|
435
|
-
),
|
|
434
|
+
({ nodes: i, edges: f }, l) => l ? Rt(i, f, l) : [-1, -1]
|
|
435
|
+
), T = e.configStore.getState().initializeOpenLogic, v = J.store(T === !0), G = it(v, {
|
|
436
436
|
open: () => !0,
|
|
437
437
|
close: () => !1,
|
|
438
438
|
toggle: (i) => !i,
|
|
439
439
|
set: (i, f) => f
|
|
440
|
-
}),
|
|
440
|
+
}), gt = _(async () => {
|
|
441
441
|
t.history.back({ experienceId: e.id });
|
|
442
|
-
}),
|
|
442
|
+
}), mt = $({
|
|
443
443
|
source: e.treeStore,
|
|
444
444
|
effect: async (i, f) => {
|
|
445
445
|
const l = i.nodes.find((w) => j(w) && w.stepId === f);
|
|
446
446
|
l && t.history.push({ experienceId: e.id, node: l });
|
|
447
447
|
}
|
|
448
|
-
}),
|
|
448
|
+
}), Q = $({
|
|
449
449
|
source: x,
|
|
450
450
|
effect: (i) => {
|
|
451
451
|
}
|
|
452
|
-
}),
|
|
452
|
+
}), W = $({
|
|
453
453
|
source: e.treeStore,
|
|
454
|
-
effect: async ({ nodes: i }) =>
|
|
455
|
-
}),
|
|
454
|
+
effect: async ({ nodes: i }) => pt(i)
|
|
455
|
+
}), q = $({
|
|
456
456
|
source: e.treeStore,
|
|
457
457
|
effect: async ({ nodes: i, edges: f }, l) => X(l, i, f)
|
|
458
|
-
}),
|
|
458
|
+
}), z = $({
|
|
459
459
|
source: e.treeStore,
|
|
460
460
|
effect: async ({ nodes: i, edges: f, conditionals: l }, w) => {
|
|
461
461
|
if (!w)
|
|
462
462
|
return;
|
|
463
|
-
const L = l.find((
|
|
463
|
+
const L = l.find((A) => A.id === w.conditionalId);
|
|
464
464
|
if (!L)
|
|
465
465
|
return;
|
|
466
|
-
const E = w.id, h = await
|
|
467
|
-
return
|
|
466
|
+
const E = w.id, h = await nt(t, L.condition);
|
|
467
|
+
return Ht(!!h, E, i, f);
|
|
468
468
|
}
|
|
469
|
-
}),
|
|
469
|
+
}), Y = $({
|
|
470
470
|
source: e.treeStore,
|
|
471
471
|
effect: async ({ nodes: i, edges: f }, l) => {
|
|
472
|
-
if (!l || !
|
|
472
|
+
if (!l || !ot(l))
|
|
473
473
|
return;
|
|
474
474
|
const w = l.action;
|
|
475
475
|
if (!w) {
|
|
@@ -494,61 +494,61 @@ const z = ht("experience-instance"), Ht = it(
|
|
|
494
494
|
try {
|
|
495
495
|
I("info", `Executing action: ${w}`), await L.action();
|
|
496
496
|
const E = f.find(
|
|
497
|
-
(
|
|
497
|
+
(A) => A.sourceNodeId === l.id && A.sourceNodeHandle === "true"
|
|
498
498
|
);
|
|
499
499
|
if (!E)
|
|
500
500
|
return I("warn", `No 'true' edge found for action node ${l.id}`), null;
|
|
501
|
-
const h = i.find((
|
|
501
|
+
const h = i.find((A) => A.id === E.destinationNodeId);
|
|
502
502
|
return I("info", `Action '${w}' succeeded, moving to node ${h == null ? void 0 : h.id}`), h || null;
|
|
503
503
|
} catch (E) {
|
|
504
504
|
I("warn", `Action '${w}' failed:`, E);
|
|
505
505
|
const h = f.find(
|
|
506
|
-
(
|
|
506
|
+
(K) => K.sourceNodeId === l.id && K.sourceNodeHandle === "false"
|
|
507
507
|
);
|
|
508
508
|
if (!h)
|
|
509
509
|
return I("warn", `No 'false' edge found for action node ${l.id}`), null;
|
|
510
|
-
const
|
|
511
|
-
return I("info", `Action '${w}' failed, moving to node ${
|
|
510
|
+
const A = i.find((K) => K.id === h.destinationNodeId);
|
|
511
|
+
return I("info", `Action '${w}' failed, moving to node ${A == null ? void 0 : A.id}`), A || null;
|
|
512
512
|
}
|
|
513
513
|
}
|
|
514
|
-
}),
|
|
514
|
+
}), St = _((i) => {
|
|
515
515
|
if (i)
|
|
516
516
|
return t.launchExperienceById(i.experienceId);
|
|
517
|
-
}),
|
|
517
|
+
}), Z = $({
|
|
518
518
|
source: [x, e.treeStore],
|
|
519
519
|
effect: async ([i, { nodes: f, edges: l }]) => X(i, f, l)
|
|
520
|
-
}), R =
|
|
520
|
+
}), R = $({
|
|
521
521
|
source: [x, e.treeStore],
|
|
522
522
|
effect: async ([i, { nodes: f, edges: l }]) => X(i, f, l)
|
|
523
|
-
}),
|
|
523
|
+
}), ht = _((i) => {
|
|
524
524
|
t.history.push({ experienceId: e.id, node: i });
|
|
525
|
-
}),
|
|
525
|
+
}), tt = $({
|
|
526
526
|
source: e.configStore,
|
|
527
|
-
effect: async ({ initializeOpenLogic: i }) =>
|
|
527
|
+
effect: async ({ initializeOpenLogic: i }) => bt(i) ? !!await nt(t, i) : i ?? !1
|
|
528
528
|
});
|
|
529
|
-
return
|
|
529
|
+
return wt({
|
|
530
530
|
source: x,
|
|
531
|
-
match: (i) => i ?
|
|
531
|
+
match: (i) => i ? Lt(i) ? "condition" : j(i) ? "step" : Dt(i) ? "launchExperience" : rt(i) ? "origin" : ot(i) ? "action" : "other" : "none",
|
|
532
532
|
cases: {
|
|
533
|
-
none:
|
|
534
|
-
origin:
|
|
535
|
-
condition:
|
|
536
|
-
step:
|
|
537
|
-
launchExperience:
|
|
538
|
-
action:
|
|
533
|
+
none: W,
|
|
534
|
+
origin: q,
|
|
535
|
+
condition: z,
|
|
536
|
+
step: Q,
|
|
537
|
+
launchExperience: St,
|
|
538
|
+
action: Y,
|
|
539
539
|
__: B()
|
|
540
540
|
}
|
|
541
541
|
}), m({
|
|
542
542
|
clock: [
|
|
543
|
+
z.doneData,
|
|
543
544
|
q.doneData,
|
|
544
545
|
W.doneData,
|
|
545
|
-
V.doneData,
|
|
546
546
|
R.doneData,
|
|
547
|
-
|
|
548
|
-
|
|
547
|
+
Z.doneData,
|
|
548
|
+
Y.doneData
|
|
549
549
|
],
|
|
550
550
|
filter: Boolean,
|
|
551
|
-
target:
|
|
551
|
+
target: ht
|
|
552
552
|
}), m({
|
|
553
553
|
clock: s,
|
|
554
554
|
target: R
|
|
@@ -581,18 +581,18 @@ const z = ht("experience-instance"), Ht = it(
|
|
|
581
581
|
}))
|
|
582
582
|
}), m({
|
|
583
583
|
clock: a,
|
|
584
|
-
target:
|
|
585
|
-
}), m({ clock: o, target:
|
|
584
|
+
target: gt
|
|
585
|
+
}), m({ clock: o, target: mt }), m({
|
|
586
586
|
source: C([
|
|
587
|
+
z.pending,
|
|
587
588
|
q.pending,
|
|
588
589
|
W.pending,
|
|
589
|
-
V.pending,
|
|
590
590
|
R.pending
|
|
591
591
|
]),
|
|
592
592
|
fn: (i) => i.some(Boolean) ? "transitioning" : "ready",
|
|
593
593
|
target: k
|
|
594
594
|
}), m({
|
|
595
|
-
clock:
|
|
595
|
+
clock: Q.doneData,
|
|
596
596
|
source: u,
|
|
597
597
|
filter: Boolean,
|
|
598
598
|
target: t.eventBus.prepend((i) => ({
|
|
@@ -602,29 +602,29 @@ const z = ht("experience-instance"), Ht = it(
|
|
|
602
602
|
}))
|
|
603
603
|
}), m({
|
|
604
604
|
clock: d,
|
|
605
|
-
target:
|
|
605
|
+
target: tt
|
|
606
606
|
}), m({
|
|
607
|
-
source:
|
|
608
|
-
fn:
|
|
609
|
-
target:
|
|
607
|
+
source: tt.doneData,
|
|
608
|
+
fn: (i) => !!i,
|
|
609
|
+
target: v
|
|
610
610
|
}), m({
|
|
611
611
|
source: x,
|
|
612
612
|
clock: n,
|
|
613
|
-
filter: (i) => i ?
|
|
614
|
-
target:
|
|
613
|
+
filter: (i) => i ? rt(i) : !0,
|
|
614
|
+
target: Z
|
|
615
615
|
}), m({
|
|
616
|
-
source:
|
|
617
|
-
filter:
|
|
616
|
+
source: v,
|
|
617
|
+
filter: (i) => !!i,
|
|
618
618
|
target: n
|
|
619
619
|
}), m({
|
|
620
|
-
source:
|
|
620
|
+
source: v,
|
|
621
621
|
filter: Boolean,
|
|
622
622
|
target: t.eventBus.prepend(() => ({
|
|
623
623
|
type: "experience_open",
|
|
624
624
|
experience: e
|
|
625
625
|
}))
|
|
626
626
|
}), m({
|
|
627
|
-
source:
|
|
627
|
+
source: v,
|
|
628
628
|
filter: (i) => !i,
|
|
629
629
|
target: t.eventBus.prepend(() => ({
|
|
630
630
|
type: "experience_close",
|
|
@@ -643,18 +643,18 @@ const z = ht("experience-instance"), Ht = it(
|
|
|
643
643
|
// state
|
|
644
644
|
stateStore: k,
|
|
645
645
|
// open close
|
|
646
|
-
isOpenStore:
|
|
647
|
-
open:
|
|
648
|
-
close:
|
|
649
|
-
toggleOpen:
|
|
650
|
-
setOpen:
|
|
646
|
+
isOpenStore: v,
|
|
647
|
+
open: G.open,
|
|
648
|
+
close: G.close,
|
|
649
|
+
toggleOpen: G.toggle,
|
|
650
|
+
setOpen: G.set,
|
|
651
651
|
// nodes
|
|
652
652
|
treeStore: e.treeStore,
|
|
653
653
|
currentNodeStore: x,
|
|
654
654
|
currentStepStore: u,
|
|
655
655
|
nextReachableStepNodesStore: S,
|
|
656
|
-
stepsToOriginStore:
|
|
657
|
-
stepsToLeafStore:
|
|
656
|
+
stepsToOriginStore: b,
|
|
657
|
+
stepsToLeafStore: M,
|
|
658
658
|
// history
|
|
659
659
|
goToNextStep: s,
|
|
660
660
|
goToPreviousStep: a,
|
|
@@ -663,69 +663,69 @@ const z = ht("experience-instance"), Ht = it(
|
|
|
663
663
|
};
|
|
664
664
|
}
|
|
665
665
|
);
|
|
666
|
-
function
|
|
667
|
-
return
|
|
666
|
+
function Gt(t) {
|
|
667
|
+
return at(jt, t);
|
|
668
668
|
}
|
|
669
|
-
const
|
|
670
|
-
const e =
|
|
669
|
+
const Kt = st(({ client: t }) => {
|
|
670
|
+
const e = J.store({}), r = B(), n = B(), s = B(), a = it(e, {
|
|
671
671
|
register(u, S) {
|
|
672
|
-
const
|
|
672
|
+
const b = [
|
|
673
673
|
...u[S.experienceId] ?? []
|
|
674
674
|
];
|
|
675
|
-
return
|
|
675
|
+
return b.push(S), {
|
|
676
676
|
...u,
|
|
677
|
-
[S.experienceId]:
|
|
677
|
+
[S.experienceId]: b
|
|
678
678
|
};
|
|
679
679
|
},
|
|
680
680
|
unregister(u, S) {
|
|
681
|
-
var
|
|
682
|
-
const
|
|
683
|
-
(
|
|
681
|
+
var T;
|
|
682
|
+
const b = S.experienceId, M = (T = u[b]) == null ? void 0 : T.filter(
|
|
683
|
+
(v) => v !== S
|
|
684
684
|
);
|
|
685
685
|
return {
|
|
686
686
|
...u,
|
|
687
|
-
[
|
|
687
|
+
[b]: M ?? []
|
|
688
688
|
};
|
|
689
689
|
}
|
|
690
|
-
}), o =
|
|
691
|
-
({ experience: u, target: S }) =>
|
|
692
|
-
), c =
|
|
690
|
+
}), o = _(
|
|
691
|
+
({ experience: u, target: S }) => Gt({ client: t, experience: u, target: S })
|
|
692
|
+
), c = _((u) => {
|
|
693
693
|
a.register(u);
|
|
694
|
-
}), d =
|
|
694
|
+
}), d = _(
|
|
695
695
|
(u) => {
|
|
696
|
-
u.target &&
|
|
696
|
+
u.target && Ot(u.target, () => {
|
|
697
697
|
s(u);
|
|
698
698
|
});
|
|
699
699
|
}
|
|
700
|
-
), y =
|
|
700
|
+
), y = _((u) => {
|
|
701
701
|
a.unregister(u);
|
|
702
|
-
}), k =
|
|
702
|
+
}), k = _((u) => {
|
|
703
703
|
const S = u.componentStore.getState();
|
|
704
704
|
if (!S) {
|
|
705
705
|
I("warn", "No app component registered. Skipping init.");
|
|
706
706
|
return;
|
|
707
707
|
}
|
|
708
|
-
const
|
|
709
|
-
if (!
|
|
708
|
+
const b = S.frameworkStore.getState();
|
|
709
|
+
if (!b) {
|
|
710
710
|
I(
|
|
711
711
|
"error",
|
|
712
712
|
`No framework registered for component '${S.name}'. Skipping rendering.`
|
|
713
713
|
);
|
|
714
714
|
return;
|
|
715
715
|
}
|
|
716
|
-
const
|
|
717
|
-
if (!
|
|
716
|
+
const M = u.target;
|
|
717
|
+
if (!M) {
|
|
718
718
|
I(
|
|
719
719
|
"error",
|
|
720
720
|
`No target element registered for experience '${u.experienceId}'. Skipping rendering.`
|
|
721
721
|
);
|
|
722
722
|
return;
|
|
723
723
|
}
|
|
724
|
-
const
|
|
724
|
+
const T = Bt(M);
|
|
725
725
|
try {
|
|
726
|
-
|
|
727
|
-
} catch (
|
|
728
|
-
I("error",
|
|
726
|
+
b.render(T, S.component, t, u);
|
|
727
|
+
} catch (v) {
|
|
728
|
+
I("error", v);
|
|
729
729
|
}
|
|
730
730
|
});
|
|
731
731
|
m({
|
|
@@ -751,7 +751,7 @@ const Gt = it(({ client: t }) => {
|
|
|
751
751
|
clock: n,
|
|
752
752
|
target: k
|
|
753
753
|
});
|
|
754
|
-
function
|
|
754
|
+
function F(u, S) {
|
|
755
755
|
r({ experience: u, target: S });
|
|
756
756
|
}
|
|
757
757
|
const P = e.map((u) => Object.values(u).flat());
|
|
@@ -759,23 +759,23 @@ const Gt = it(({ client: t }) => {
|
|
|
759
759
|
return e.map((S) => S[u] || [], { skipVoid: !1 });
|
|
760
760
|
}
|
|
761
761
|
return {
|
|
762
|
-
spawn:
|
|
762
|
+
spawn: F,
|
|
763
763
|
getByExperienceId: x,
|
|
764
764
|
listStore: P
|
|
765
765
|
};
|
|
766
766
|
});
|
|
767
|
-
function
|
|
768
|
-
return
|
|
767
|
+
function Zt(t) {
|
|
768
|
+
return at(Kt, t);
|
|
769
769
|
}
|
|
770
770
|
export {
|
|
771
771
|
j as a,
|
|
772
|
-
|
|
773
|
-
|
|
772
|
+
Zt as b,
|
|
773
|
+
Qt as c,
|
|
774
774
|
Xt as d,
|
|
775
|
-
|
|
776
|
-
|
|
777
|
-
|
|
778
|
-
|
|
779
|
-
|
|
780
|
-
|
|
775
|
+
nt as e,
|
|
776
|
+
_t as f,
|
|
777
|
+
Jt as g,
|
|
778
|
+
Gt as h,
|
|
779
|
+
bt as i,
|
|
780
|
+
Yt as t
|
|
781
781
|
};
|
|
@@ -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;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA6ZF,CAAA;AAED,wBAAgB,wBAAwB,CACtC,CAAC,SAAS,UAAU,CAAC,OAAO,+BAA+B,CAAC,CAAC,CAAC,CAAC,EAC/D,MAAM,EAAE,CAAC,GAAG,UAAU,CAAC,OAAO,+BAA+B,CAAC,CAE/D;AAED,QAAA,MAAM,oCAAoC,eAA8B;IAAE,MAAM,EAAE,MAAM,CAAA;CAAE;wBAqI7D,eAAe,UAAU,WAAW;4BAQhC,UAAU,CAAC,IAAI,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAS/C,CAAA;AAEF,wBAAgB,6BAA6B,CAC3C,CAAC,SAAS,UAAU,CAAC,OAAO,oCAAoC,CAAC,CAAC,CAAC,CAAC,EACpE,MAAM,EAAE,CAAC,GAAG,UAAU,CAAC,OAAO,oCAAoC,CAAC,CAEpE"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"feature.d.ts","sourceRoot":"","sources":["../../../../src/entities/feature/feature.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,cAAc,CAAA;AAI1C,MAAM,WAAW,OAAO;IACtB,GAAG,EAAE,MAAM,CAAA;IACX,IAAI,EAAE,MAAM,CAAA;IACZ,MAAM,EAAE,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,GAAG,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAA;IACnE,OAAO,CAAC,EAAE,OAAO,GAAG,SAAS,CAAA;CAC9B;AAED,MAAM,MAAM,aAAa,GAAG,UAAU,CAAC,OAAO,kBAAkB,CAAC,CAAA;AAEjE,MAAM,WAAW,gBAAgB;IAC/B,EAAE,EAAE,MAAM,CAAA;IACV,OAAO,EAAE,OAAO,GAAG;QAAE,EAAE,EAAE,MAAM,CAAA;KAAE,CAAA;CAClC;AAED,MAAM,WAAW,eAAe;IAC9B,EAAE,EAAE,MAAM,CAAA;IACV,MAAM,EAAE,OAAO,GAAG,MAAM,CAAA;IACxB,GAAG,EAAE,MAAM,CAAA;IACX,OAAO,CAAC,EAAE,OAAO,GAAG,SAAS,CAAA;CAC9B;AAED,MAAM,WAAW,iBAAiB;IAChC,IAAI,EAAE,MAAM,CAAA;IACZ,GAAG,EAAE,MAAM,CAAA;IACX,EAAE,EAAE,MAAM,CAAA;CACX;AAED,MAAM,WAAW,uBAAwB,SAAQ,iBAAiB;IAChE,UAAU,EAAE,KAAK,CAAA;IACjB,SAAS,EAAE,MAAM,OAAO,CAAC;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAA;KAAE,CAAC,CAAA;CACnE;AAED,MAAM,WAAW,qBAAsB,SAAQ,iBAAiB;IAC9D,UAAU,EAAE,IAAI,CAAA;IAChB,SAAS,EAAE,MAAM;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAA;KAAE,CAAA;CAC1D;AAED,MAAM,MAAM,aAAa,GAAG,uBAAuB,GAAG,qBAAqB,CAAA;AAK3E,QAAA,MAAM,yBAAyB,eAA8B;IAAE,MAAM,EAAE,MAAM,CAAA;CAAE;mBAgBvD,MAAM,WAAW,OAAO,KAAG,IAAI;
|
|
1
|
+
{"version":3,"file":"feature.d.ts","sourceRoot":"","sources":["../../../../src/entities/feature/feature.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,cAAc,CAAA;AAI1C,MAAM,WAAW,OAAO;IACtB,GAAG,EAAE,MAAM,CAAA;IACX,IAAI,EAAE,MAAM,CAAA;IACZ,MAAM,EAAE,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,GAAG,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAA;IACnE,OAAO,CAAC,EAAE,OAAO,GAAG,SAAS,CAAA;CAC9B;AAED,MAAM,MAAM,aAAa,GAAG,UAAU,CAAC,OAAO,kBAAkB,CAAC,CAAA;AAEjE,MAAM,WAAW,gBAAgB;IAC/B,EAAE,EAAE,MAAM,CAAA;IACV,OAAO,EAAE,OAAO,GAAG;QAAE,EAAE,EAAE,MAAM,CAAA;KAAE,CAAA;CAClC;AAED,MAAM,WAAW,eAAe;IAC9B,EAAE,EAAE,MAAM,CAAA;IACV,MAAM,EAAE,OAAO,GAAG,MAAM,CAAA;IACxB,GAAG,EAAE,MAAM,CAAA;IACX,OAAO,CAAC,EAAE,OAAO,GAAG,SAAS,CAAA;CAC9B;AAED,MAAM,WAAW,iBAAiB;IAChC,IAAI,EAAE,MAAM,CAAA;IACZ,GAAG,EAAE,MAAM,CAAA;IACX,EAAE,EAAE,MAAM,CAAA;CACX;AAED,MAAM,WAAW,uBAAwB,SAAQ,iBAAiB;IAChE,UAAU,EAAE,KAAK,CAAA;IACjB,SAAS,EAAE,MAAM,OAAO,CAAC;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAA;KAAE,CAAC,CAAA;CACnE;AAED,MAAM,WAAW,qBAAsB,SAAQ,iBAAiB;IAC9D,UAAU,EAAE,IAAI,CAAA;IAChB,SAAS,EAAE,MAAM;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAA;KAAE,CAAA;CAC1D;AAED,MAAM,MAAM,aAAa,GAAG,uBAAuB,GAAG,qBAAqB,CAAA;AAK3E,QAAA,MAAM,yBAAyB,eAA8B;IAAE,MAAM,EAAE,MAAM,CAAA;CAAE;mBAgBvD,MAAM,WAAW,OAAO,KAAG,IAAI;sBAyM5B,MAAM;;CAS/B,CAAA;AAEF,wBAAgB,kBAAkB,CAAC,CAAC,SAAS,UAAU,CAAC,OAAO,yBAAyB,CAAC,CAAC,CAAC,CAAC,EAC1F,MAAM,EAAE,CAAC,GACR,UAAU,CAAC,OAAO,yBAAyB,CAAC,CAE9C;AAED,eAAO,MAAM,YAAY,GAAI,MAAM,MAAM,EAAE,SAAS,OAAO,EAAE,UAAU,aAAa,SAEnF,CAAA"}
|
package/package.json
CHANGED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
"use strict";const i=require("effector"),q=require("@withease/factories"),C=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 B(e),"!":async e=>!await B(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){return typeof e!="function"?null:e()},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 B(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 B(o))return o;return o}case"or":{let o=null;for(const u of n)if(o=await g(u,t),await B(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 y=await B(await g(n[1],p));return{item:p,shouldInclude:y}}))).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 y=n.length>2?await g(n[2],t):null;for(const k of o)y=await g(u,{current:k,accumulator:y});return y}case"all":{const o=await g(n[0],t);if(!E(o)||o.length===0)return!1;for(const u of o)if(!await B(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 B(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 B(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 B(e){return ne(e)?B(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 W(e,t,r){const n=e.getStateSnapshot(),a=e.predicates.listStore.getState().reduce((u,p)=>({...u,[p.name]:()=>p.predicate(n)}),{}),c=e.features.listStore.getState().reduce((u,p)=>({...u,[p.id]:async()=>{const{bucket:y}=await p.getBucket();return y}}),{}),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!C.supportsWindow()||!C.supportsDocument()?[]:Array.from(window.document.querySelectorAll(e)).filter(t=>t instanceof HTMLElement)}function we(e){if(!C.supportsShadowRoot())throw new Error("Shadow DOM is not supported in this environment");return e.attachShadow({mode:"closed"})}function Ee(){return new Promise((e,t)=>{if(!C.supportsDocument()){t();return}document.readyState!=="loading"?e():document.addEventListener("readystatechange",()=>e(),{once:!0})})}function Ne(e,t){const r=new MutationObserver(n=>{document.contains(e)||(r.disconnect(),t())});r.observe(document.body,{childList:!0,subtree:!0})}const H="picked-root",j="picked-target",Ie="picked-root";function xe(e,t){return[...e,{selector:`${Ie}[experience-id="${t}"]`,placement:"replace"}].flatMap(n=>{const a=ye(n.selector).filter(c=>!be(c,t)&&!oe(c,t));return{...n,elements:a}})}function ke(e,t){return e.flatMap(r=>r.elements.map(n=>Be(n,r.placement,t)))}function ve(e,t){e.classList.add(j),e.classList.add(`${j}-${t}`)}function be(e,t){return t?e.classList.contains(`${j}-${t}`):e.classList.contains(`${j}`)}function oe(e,t){return t?e.classList.contains(`${H}-${t}`):e.classList.contains(H)}function Ae(e){const t=document.createElement("div");return t.style.display="block",t.classList.add(H),t.classList.add(`${H}-${e}`),t}function Be(e,t,r){let n;const a=Ae(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 Fe(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):[]})),Oe=(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 y=e.find(L=>L.id===p.destinationNodeId);if(!y)continue;const[k,F]=ie(e,t,y,!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]},_e=(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[y,k]=ae(e,t,p,new Set(n));y!==-1&&(c=Math.min(c,y+1),o=Math.max(o,k+1))}return c===1/0?[-1,-1]:[c,o]},Te=(e,t,r)=>ae(e,t,r,new Set),ce=e=>e.find(r=>r.type==="origin")||null,V=(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 Me(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"),Le=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(),y=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),h=i.combine(t.treeStore,I,({nodes:s,edges:l},d)=>d?Oe(s,l,d):[]),A=i.combine(t.treeStore,I,({nodes:s,edges:l},d)=>d?Te(s,l,d):[-1,-1]),O=i.combine(t.treeStore,I,({nodes:s,edges:l},d)=>d?_e(s,l,d):[-1,-1]),v=X.store(!1),$=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=>{}}),G=i.attach({source:t.treeStore,effect:async({nodes:s})=>ce(s)}),K=i.attach({source:t.treeStore,effect:async({nodes:s,edges:l},d)=>V(d,s,l)}),U=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,S=await W(e,_.condition);return Me(!!S,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(S=>S.sourceNodeId===d.id&&S.sourceNodeHandle==="false");return x?s.find(S=>S.id===x.destinationNodeId):null}if(typeof _.action!="function"){N.logger("warn",`Action '${w}' is not a function`);const x=l.find(S=>S.sourceNodeId===d.id&&S.sourceNodeHandle==="false");return x?s.find(S=>S.id===x.destinationNodeId):null}try{N.logger("info",`Executing action: ${w}`),await _.action();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 S=s.find(b=>b.id===x.destinationNodeId);return N.logger("info",`Action '${w}' succeeded, moving to node ${S==null?void 0:S.id}`),S||null}catch(x){N.logger("warn",`Action '${w}' failed:`,x);const S=l.find(P=>P.sourceNodeId===d.id&&P.sourceNodeHandle==="false");if(!S)return N.logger("warn",`No 'false' edge found for action node ${d.id}`),null;const b=s.find(P=>P.id===S.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}])=>V(s,l,d)}),D=i.attach({source:[I,t.treeStore],effect:async([s,{nodes:l,edges:d}])=>V(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 W(e,s):s??!1});return i.split({source:I,match:s=>s?Fe(s)?"condition":M(s)?"step":$e(s)?"launchExperience":ee(s)?"origin":te(s)?"action":"other":"none",cases:{none:G,origin:K,condition:U,step:z,launchExperience:de,action:J,__:i.createEvent()}}),i.sample({clock:[U.doneData,K.doneData,G.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([U.pending,K.pending,G.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:y,stateStore:k,isOpenStore:v,open:$.open,close:$.close,toggleOpen:$.toggle,setOpen:$.set,treeStore:t.treeStore,currentNodeStore:I,currentStepStore:f,nextReachableStepNodesStore:h,stepsToOriginStore:A,stepsToLeafStore:O,goToNextStep:a,goToPreviousStep:c,goToStepById:o,stepsHistoryStore:L}});function ue(e){return q.invoke(Le,e)}const De=q.createFactory(({client:e})=>{const t=X.store({}),r=i.createEvent(),n=i.createEvent(),a=i.createEvent(),c=i.createApi(t,{register(f,h){const A=[...f[h.experienceId]??[]];return A.push(h),{...f,[h.experienceId]:A}},unregister(f,h){var v;const A=h.experienceId,O=(v=f[A])==null?void 0:v.filter($=>$!==h);return{...f,[A]:O??[]}}}),o=i.createEffect(({experience:f,target:h})=>ue({client:e,experience:f,target:h})),u=i.createEffect(f=>{c.register(f)}),p=i.createEffect(f=>{f.target&&Ne(f.target,()=>{a(f)})}),y=i.createEffect(f=>{c.unregister(f)}),k=i.createEffect(f=>{const h=f.componentStore.getState();if(!h){N.logger("warn","No app component registered. Skipping init.");return}const A=h.frameworkStore.getState();if(!A){N.logger("error",`No framework registered for component '${h.name}'. Skipping rendering.`);return}const O=f.target;if(!O){N.logger("error",`No target element registered for experience '${f.experienceId}'. Skipping rendering.`);return}const v=we(O);try{A.render(v,h.component,e,f)}catch($){N.logger("error",$)}});i.sample({clock:r,target:o}),i.sample({clock:a,target:y}),i.sample({clock:o.doneData,target:[u,p,n]}),i.sample({clock:o.doneData,target:e.eventBus.prepend(f=>({type:"experience_initialized",experienceInstance:f}))}),i.sample({clock:n,target:k});function F(f,h){r({experience:f,target:h})}const L=t.map(f=>Object.values(f).flat());function I(f){return t.map(h=>h[f]||[],{skipVoid:!1})}return{spawn:F,getByExperienceId:I,listStore:L}});function Re(e){return q.invoke(De,e)}exports.createAppHosts=ke;exports.createExperienceInstance=ue;exports.createExperienceInstanceIndex=Re;exports.domInteractive=Ee;exports.evaluateRuleLogic=W;exports.getTargetElements=xe;exports.isPickedRoot=oe;exports.isRulesLogic=re;exports.isStepNode=M;exports.tagTargetElement=ve;
|