@picked/client 0.0.1-dev.1764025609515 → 0.0.1-dev.1764096269522
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 +105 -102
- package/dist/esm/server/index.js +1 -1
- package/dist/experience-instance-BpQMqclI.cjs +1 -0
- package/dist/{experience-instance-QtGs0N3g.js → experience-instance-CMrX6QA2.js} +87 -86
- package/dist/types/entities/feature/feature.d.ts.map +1 -1
- package/dist/types/utils/dom.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 N=(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)=>N(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"),z=require("../id-BKIWbSTy.cjs"),_=require("../object-BbFTsGh3.cjs"),k=require("../supports-YvpQZxbh.cjs"),M=f.createDomain("experience"),q=h.createFactory(({client:t,experience:e})=>{const r=M.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 K(t){return h.invoke(q,t)}const H=h.createFactory(({client:t})=>{const e=M.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=K({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 W(t){return h.invoke(H,t)}const G=(t,e)=>{e.register(t)},T=(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 Y(t,e)&&T(t,e)}))},Y=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},J=(t,e,r)=>{const n=e.name,c=e.setup(t);if(c){const u=r[n]??{};r[n]=Object.freeze({...u,...c})}},Q=f.createDomain("component"),X=h.createFactory(({client:t,component:e,name:r})=>{const n=t.frameworks.getByName(e.frameworkName);return{name:r,component:e,frameworkStore:n}});function Z(t){return h.invoke(X,t)}const ee=h.createFactory(({client:t})=>{const e=Q.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=Z({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 te(t){return h.invoke(ee,t)}const j=(t,e,r)=>{r.register(t,e)},re=f.createDomain("framework"),se=h.createFactory(({client:t})=>{const e=re.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 ne(t){return h.invoke(se,t)}const oe=(t,e)=>{e.register(t.name,t)},ie=6e3,$=w.createStorageKey("last_ping","global"),ae=t=>`${t}/api/v1/ping`,ce=async t=>{try{const e=Date.now(),r=localStorage.getItem($);if(r&&e-parseInt(r)<ie)return!0;const n=ae(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 ue(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 le=f.createDomain("predicate"),pe=h.createFactory(({client:t})=>{const e=le.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 ge(t){return h.invoke(pe,t)}const de=(t,e,r)=>{r.register(t,e)},C=f.createDomain("feature"),fe=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 me(t){return h.invoke(fe,t)}const ye=(t,e,r)=>{r.register(t,e)},R=f.createDomain("history");function O(t,e){return{id:z.generateId(`history-entry-${Date.now()}-${Math.random()}}`),node:e,at:Date.now(),experienceId:t}}const he=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 Se(){return h.invoke(he)}const ve=()=>f.createEvent(),ke=f.createDomain("field"),we=h.createFactory(()=>{const t=ke.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 Fe(){return h.invoke(we)}const be=(t,e)=>{e.register(t)},Ie=f.createDomain("action"),xe=h.createFactory(()=>{const t=Ie.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 Ee(){return h.invoke(xe)}const Re=(t,e,r)=>{r.register(t,e)};function L(t){return typeof t>"u"||t===null||t===""||Array.isArray(t)&&!t.length}const Pe=f.createDomain("response"),Ae=h.createFactory(({client:t})=>{const e=Pe.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&&!_.isEmpty(v.validation)&&!L(d)){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&&L(d)){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 De(t){return h.invoke(Ae,t)}const Be=()=>"0.0.1-dev.1764025609515";function je(){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 Ce(){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 Oe=()=>({id:Ce()}),Le=w.createStorageKey("session","global"),Me=()=>{if(!k.supportsLocalStorage())return null;const t=w.localStore.get(Le);let e=t.isSet()?t.json():null;return e||(e=Oe(),t.set(e)),e},Te=()=>Me();class D{constructor(e){y(this,"options");y(this,"isReady",!1);y(this,"project");y(this,"plugins",{});y(this,"eventBus",ve());y(this,"organizationId");y(this,"projectId");y(this,"apiUrl");y(this,"session");y(this,"searchParams",$e());y(this,"history",Se());y(this,"components",te({client:this}));y(this,"experienceInstances",F.createExperienceInstanceIndex({client:this}));y(this,"experiences",W({client:this}));y(this,"frameworks",ne({client:this}));y(this,"predicates",ge({client:this}));y(this,"features",me({client:this}));y(this,"responses",De({client:this}));y(this,"fields",Fe());y(this,"actions",Ee());I.logger("info","Picked client initializing."),this.organizationId=e.organizationId,this.projectId=e.projectId,this.options=Object.freeze(e),this.apiUrl=e.apiUrl||je(),this.session=Te(),this.setupPlugins(),this.setupFeatures(),this.setupPredicates(),this.setupActions(),this.eventBus({type:"initialized",version:Be()}),I.logger("info","Picked client initialized.")}start(){ce(this),(async()=>{k.supportsDocument()&&(document.body&&B(this),await F.domInteractive(),B(this),this.eventBus({type:"ready"}),this.isReady=!0,this.session&&this.eventBus({type:"session",...this.session}))})()}registerFramework(e){oe(e,this.frameworks)}registerComponent(e,r){j(e,r,this.components)}registerPlugin(e){J(this,e,this.plugins)}registerFeature(e,r){ye(e,r,this.features)}registerPredicate(e,r){de(e,r,this.predicates)}registerField(e){be(e,this.fields)}registerAction(e,r){Re(e,r,this.actions)}registerExperience(e){e.component&&j(`experience:${e.id}`,e.component,this.components),G(e,this.experiences)}getStateSnapshot(){return ue(this)}async launchExperienceById(e){const r=this.experiences.getById(e).getState();if(!r){I.logger("warn",`Experience with id '${e}' not found.`);return}T(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 V(t){var e;return((e=t.options)==null?void 0:e.some(r=>"condition"in r))??!1}function Ve(t){return t.some(e=>e.condition||V(e))}async function Ue(t,e){return e.length===0||!Ve(e)?e:(await Promise.all(e.map(async n=>{if(!(n.condition?await F.evaluateRuleLogic(t,n.condition):!0))return null;if(!n.options||!V(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 Ne=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=Ne;exports.getStepFields=Ue;
|
|
1
|
+
"use strict";var U=Object.defineProperty;var N=(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)=>N(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-BpQMqclI.cjs"),I=require("../logger-BsmHUUw1.cjs"),w=require("../storage-DuRlyFaY.cjs"),z=require("../id-BKIWbSTy.cjs"),_=require("../object-BbFTsGh3.cjs"),k=require("../supports-YvpQZxbh.cjs"),M=f.createDomain("experience"),q=h.createFactory(({client:t,experience:e})=>{const r=M.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 K(t){return h.invoke(q,t)}const H=h.createFactory(({client:t})=>{const e=M.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=K({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 W(t){return h.invoke(H,t)}const G=(t,e)=>{e.register(t)},T=(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 Y(t,e)&&T(t,e)}))},Y=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},J=(t,e,r)=>{const n=e.name,c=e.setup(t);if(c){const u=r[n]??{};r[n]=Object.freeze({...u,...c})}},Q=f.createDomain("component"),X=h.createFactory(({client:t,component:e,name:r})=>{const n=t.frameworks.getByName(e.frameworkName);return{name:r,component:e,frameworkStore:n}});function Z(t){return h.invoke(X,t)}const ee=h.createFactory(({client:t})=>{const e=Q.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=Z({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 te(t){return h.invoke(ee,t)}const j=(t,e,r)=>{r.register(t,e)},re=f.createDomain("framework"),se=h.createFactory(({client:t})=>{const e=re.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 ne(t){return h.invoke(se,t)}const oe=(t,e)=>{e.register(t.name,t)},ie=6e3,$=w.createStorageKey("last_ping","global"),ae=t=>`${t}/api/v1/ping`,ce=async t=>{try{const e=Date.now(),r=localStorage.getItem($);if(r&&e-parseInt(r)<ie)return!0;const n=ae(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 ue(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 le=f.createDomain("predicate"),pe=h.createFactory(({client:t})=>{const e=le.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 ge(t){return h.invoke(pe,t)}const de=(t,e,r)=>{r.register(t,e)},C=f.createDomain("feature"),fe=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&&A.key===m);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,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: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&&m.key===i.feature.key);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,key:i})=>!p.some(m=>m.id===a&&m.key===i),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(g=>g.id===a.id&&g.key===a.key)?p:[...p,a],target:r});function b(p){return e.map(a=>a[p],{skipVoid:!1})}return{register:c,getByName:b,listStore:S}});function me(t){return h.invoke(fe,t)}const ye=(t,e,r)=>{r.register(t,e)},R=f.createDomain("history");function O(t,e){return{id:z.generateId(`history-entry-${Date.now()}-${Math.random()}}`),node:e,at:Date.now(),experienceId:t}}const he=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 Se(){return h.invoke(he)}const ve=()=>f.createEvent(),ke=f.createDomain("field"),we=h.createFactory(()=>{const t=ke.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 Fe(){return h.invoke(we)}const be=(t,e)=>{e.register(t)},Ie=f.createDomain("action"),xe=h.createFactory(()=>{const t=Ie.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 Ee(){return h.invoke(xe)}const Re=(t,e,r)=>{r.register(t,e)};function L(t){return typeof t>"u"||t===null||t===""||Array.isArray(t)&&!t.length}const Pe=f.createDomain("response"),Ae=h.createFactory(({client:t})=>{const e=Pe.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&&!_.isEmpty(v.validation)&&!L(d)){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&&L(d)){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 De(t){return h.invoke(Ae,t)}const Be=()=>"0.0.1-dev.1764096269522";function je(){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 Ce(){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 Oe=()=>({id:Ce()}),Le=w.createStorageKey("session","global"),Me=()=>{if(!k.supportsLocalStorage())return null;const t=w.localStore.get(Le);let e=t.isSet()?t.json():null;return e||(e=Oe(),t.set(e)),e},Te=()=>Me();class D{constructor(e){y(this,"options");y(this,"isReady",!1);y(this,"project");y(this,"plugins",{});y(this,"eventBus",ve());y(this,"organizationId");y(this,"projectId");y(this,"apiUrl");y(this,"session");y(this,"searchParams",$e());y(this,"history",Se());y(this,"components",te({client:this}));y(this,"experienceInstances",F.createExperienceInstanceIndex({client:this}));y(this,"experiences",W({client:this}));y(this,"frameworks",ne({client:this}));y(this,"predicates",ge({client:this}));y(this,"features",me({client:this}));y(this,"responses",De({client:this}));y(this,"fields",Fe());y(this,"actions",Ee());I.logger("info","Picked client initializing."),this.organizationId=e.organizationId,this.projectId=e.projectId,this.options=Object.freeze(e),this.apiUrl=e.apiUrl||je(),this.session=Te(),this.setupPlugins(),this.setupFeatures(),this.setupPredicates(),this.setupActions(),this.eventBus({type:"initialized",version:Be()}),I.logger("info","Picked client initialized.")}start(){ce(this),(async()=>{k.supportsDocument()&&(document.body&&B(this),await F.domInteractive(),B(this),this.eventBus({type:"ready"}),this.isReady=!0,this.session&&this.eventBus({type:"session",...this.session}))})()}registerFramework(e){oe(e,this.frameworks)}registerComponent(e,r){j(e,r,this.components)}registerPlugin(e){J(this,e,this.plugins)}registerFeature(e,r){ye(e,r,this.features)}registerPredicate(e,r){de(e,r,this.predicates)}registerField(e){be(e,this.fields)}registerAction(e,r){Re(e,r,this.actions)}registerExperience(e){e.component&&j(`experience:${e.id}`,e.component,this.components),G(e,this.experiences)}getStateSnapshot(){return ue(this)}async launchExperienceById(e){const r=this.experiences.getById(e).getState();if(!r){I.logger("warn",`Experience with id '${e}' not found.`);return}T(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 V(t){var e;return((e=t.options)==null?void 0:e.some(r=>"condition"in r))??!1}function Ve(t){return t.some(e=>e.condition||V(e))}async function Ue(t,e){return e.length===0||!Ve(e)?e:(await Promise.all(e.map(async n=>{if(!(n.condition?await F.evaluateRuleLogic(t,n.condition):!0))return null;if(!n.options||!V(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 Ne=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=Ne;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-BpQMqclI.cjs");function S(){let c,i;return{promise:new Promise((t,o)=>{c=t,i=o}),resolve:t=>c(t),reject:t=>i(t)}}function C(c,i){const{promise:f,resolve:t}=S(),o=r.createEvent(),s=r.createEvent(),l=r.createEvent(),u=r.createEvent(),p=r.createEvent(),g=c.experiences.listStore.map(e=>e.map(n=>k.createExperienceInstance({client:c,experience:n}))),a=r.createStore({currentExperienceIndex:0,renderedExperiences:[],isComplete:!1}),m=r.createEffect(async({experience:e,availableRenderers:n,startRendererIndex:v=0})=>{if(!e)return null;for(let d=v;d<n.length;d++){const x=n[d],E=e.componentStore.getState();if(E&&(x!=null&&x.isValidComponent(E.component)))return{rendered:await x.render(E.component,c,e),rendererIndex:d}}return null});a.on(l,(e,n)=>({...e,renderedExperiences:[...e.renderedExperiences,n],currentExperienceIndex:e.currentExperienceIndex+1})).on(p,e=>({...e,currentExperienceIndex:e.currentExperienceIndex+1})).on(u,e=>({...e,isComplete:!0})).reset(o),r.sample({clock:o,target:s}),r.sample({clock:s,source:{experiences:g,state:a},filter:({experiences:e,state:n})=>n.currentExperienceIndex<e.length&&!n.isComplete,fn:({experiences:e,state:n})=>({experience:e[n.currentExperienceIndex],availableRenderers:i,startRendererIndex:0}),target:m}),r.sample({clock:m.doneData,filter:e=>e!==null,fn:e=>e.rendered.body,target:l}),r.sample({clock:l,target:s}),r.sample({clock:m.doneData,filter:e=>e===null,target:p}),r.sample({clock:p,target:s}),r.sample({clock:[s,p,l],source:{experiences:g,state:a},filter:({experiences:e,state:n})=>n.currentExperienceIndex>=e.length,target:u});const I=r.attach({source:a,effect:e=>{e.isComplete&&t(e.renderedExperiences)}});return r.sample({clock:u,target:I}),o(),f}exports.render=C;
|
package/dist/esm/index.js
CHANGED
|
@@ -1,20 +1,20 @@
|
|
|
1
1
|
var Y = Object.defineProperty;
|
|
2
2
|
var J = (t, e, r) => e in t ? Y(t, e, { enumerable: !0, configurable: !0, writable: !0, value: r }) : t[e] = r;
|
|
3
3
|
var m = (t, e, r) => J(t, typeof e != "symbol" ? e + "" : e, r);
|
|
4
|
-
import { createDomain as
|
|
5
|
-
import { createFactory as
|
|
6
|
-
import { g as
|
|
7
|
-
import { f as
|
|
8
|
-
import { l as
|
|
9
|
-
import { c as R, s as
|
|
4
|
+
import { createDomain as b, createApi as I, createEffect as M, attach as Q, sample as x, combine as O, createEvent as C } from "effector";
|
|
5
|
+
import { createFactory as v, invoke as w } from "@withease/factories";
|
|
6
|
+
import { g as _, t as X, c as Z, i as ee, e as $, a as te, b as re, d as se } from "../experience-instance-CMrX6QA2.js";
|
|
7
|
+
import { f as kt } from "../experience-instance-CMrX6QA2.js";
|
|
8
|
+
import { l as k } from "../logger-C9a75KZn.js";
|
|
9
|
+
import { c as R, s as j, l as D } from "../storage-Cb_71y48.js";
|
|
10
10
|
import { a as wt } from "../storage-Cb_71y48.js";
|
|
11
11
|
import { g as ne } from "../id-BW-g3y32.js";
|
|
12
12
|
import { i as oe } from "../object-JwZ58NOH.js";
|
|
13
13
|
import { s as H, a as ie, b as ae, c as ce, d as ue } from "../supports-BjhuLJ8z.js";
|
|
14
|
-
import { h as
|
|
15
|
-
const K =
|
|
14
|
+
import { h as bt, f as It, j as xt, e as Et, g as Pt, i as Rt, k as Bt } from "../supports-BjhuLJ8z.js";
|
|
15
|
+
const K = b("experience"), le = v(
|
|
16
16
|
({ client: t, experience: e }) => {
|
|
17
|
-
const r = K.store(e), n =
|
|
17
|
+
const r = K.store(e), n = I(r, {
|
|
18
18
|
merge(l, h) {
|
|
19
19
|
return {
|
|
20
20
|
...l,
|
|
@@ -48,8 +48,8 @@ const K = I("experience"), le = k(
|
|
|
48
48
|
function de(t) {
|
|
49
49
|
return w(le, t);
|
|
50
50
|
}
|
|
51
|
-
const pe =
|
|
52
|
-
const e = K.store({}), r =
|
|
51
|
+
const pe = v(({ client: t }) => {
|
|
52
|
+
const e = K.store({}), r = I(e, {
|
|
53
53
|
register(s, o) {
|
|
54
54
|
return {
|
|
55
55
|
...s,
|
|
@@ -82,7 +82,7 @@ function ge(t) {
|
|
|
82
82
|
const fe = (t, e) => {
|
|
83
83
|
e.register(t);
|
|
84
84
|
}, q = (t, e) => {
|
|
85
|
-
const { targetSelectors: r } = e.configStore.getState(), n =
|
|
85
|
+
const { targetSelectors: r } = e.configStore.getState(), n = _(r, e.id);
|
|
86
86
|
n.forEach(
|
|
87
87
|
({ elements: u }) => u.forEach((s) => X(s, e.id))
|
|
88
88
|
), Z(n, e.id).forEach((u) => {
|
|
@@ -96,14 +96,14 @@ const fe = (t, e) => {
|
|
|
96
96
|
);
|
|
97
97
|
}, me = async (t, e) => {
|
|
98
98
|
const { decisionLogic: r, targetSelectors: n } = e.configStore.getState();
|
|
99
|
-
return
|
|
99
|
+
return _(n, e.id).length < 1 || n.length === 0 ? !1 : r && ee(r) ? await $(t, r) === !0 : !0;
|
|
100
100
|
}, he = (t, e, r) => {
|
|
101
101
|
const n = e.name, c = e.setup(t);
|
|
102
102
|
if (c) {
|
|
103
103
|
const u = r[n] ?? {};
|
|
104
104
|
r[n] = Object.freeze({ ...u, ...c });
|
|
105
105
|
}
|
|
106
|
-
}, ye =
|
|
106
|
+
}, ye = b("component"), Se = v(
|
|
107
107
|
({ client: t, component: e, name: r }) => {
|
|
108
108
|
const n = t.frameworks.getByName(e.frameworkName);
|
|
109
109
|
return {
|
|
@@ -113,11 +113,11 @@ const fe = (t, e) => {
|
|
|
113
113
|
};
|
|
114
114
|
}
|
|
115
115
|
);
|
|
116
|
-
function
|
|
116
|
+
function ke(t) {
|
|
117
117
|
return w(Se, t);
|
|
118
118
|
}
|
|
119
|
-
const
|
|
120
|
-
const e = ye.store({}), r =
|
|
119
|
+
const ve = v(({ client: t }) => {
|
|
120
|
+
const e = ye.store({}), r = I(e, {
|
|
121
121
|
register(s, o) {
|
|
122
122
|
return {
|
|
123
123
|
...s,
|
|
@@ -126,11 +126,11 @@ const ke = k(({ client: t }) => {
|
|
|
126
126
|
}
|
|
127
127
|
});
|
|
128
128
|
function n(s, o) {
|
|
129
|
-
e.getState()[s] &&
|
|
129
|
+
e.getState()[s] && k(
|
|
130
130
|
"warn",
|
|
131
131
|
`Component '${s}' already registered. Registering again will override the previous registration.`
|
|
132
132
|
);
|
|
133
|
-
const h =
|
|
133
|
+
const h = ke({ client: t, name: s, component: o });
|
|
134
134
|
r.register(h);
|
|
135
135
|
}
|
|
136
136
|
const c = e.map((s) => Object.values(s));
|
|
@@ -144,12 +144,12 @@ const ke = k(({ client: t }) => {
|
|
|
144
144
|
};
|
|
145
145
|
});
|
|
146
146
|
function we(t) {
|
|
147
|
-
return w(
|
|
147
|
+
return w(ve, t);
|
|
148
148
|
}
|
|
149
149
|
const T = (t, e, r) => {
|
|
150
150
|
r.register(t, e);
|
|
151
|
-
},
|
|
152
|
-
const e =
|
|
151
|
+
}, Fe = b("framework"), be = v(({ client: t }) => {
|
|
152
|
+
const e = Fe.store({}), r = I(e, {
|
|
153
153
|
register(s, o) {
|
|
154
154
|
return {
|
|
155
155
|
...s,
|
|
@@ -158,7 +158,7 @@ const T = (t, e, r) => {
|
|
|
158
158
|
}
|
|
159
159
|
});
|
|
160
160
|
function n(s, o) {
|
|
161
|
-
e.getState()[s] &&
|
|
161
|
+
e.getState()[s] && k(
|
|
162
162
|
"warn",
|
|
163
163
|
`Framework '${s}' already registered. Registering again will override the previous registration.`
|
|
164
164
|
), r.register({ name: s, framework: o });
|
|
@@ -173,10 +173,10 @@ const T = (t, e, r) => {
|
|
|
173
173
|
listStore: c
|
|
174
174
|
};
|
|
175
175
|
});
|
|
176
|
-
function
|
|
177
|
-
return w(
|
|
176
|
+
function Ie(t) {
|
|
177
|
+
return w(be, t);
|
|
178
178
|
}
|
|
179
|
-
const
|
|
179
|
+
const xe = (t, e) => {
|
|
180
180
|
e.register(t.name, t);
|
|
181
181
|
}, Ee = 6e3, N = R("last_ping", "global"), Pe = (t) => `${t}/api/v1/ping`, Re = async (t) => {
|
|
182
182
|
try {
|
|
@@ -197,7 +197,7 @@ const Fe = (t, e) => {
|
|
|
197
197
|
})).ok;
|
|
198
198
|
return S && localStorage.setItem(N, e.toString()), S;
|
|
199
199
|
} catch (e) {
|
|
200
|
-
return
|
|
200
|
+
return k("error", e), !1;
|
|
201
201
|
}
|
|
202
202
|
};
|
|
203
203
|
function Be(t) {
|
|
@@ -212,8 +212,8 @@ function Be(t) {
|
|
|
212
212
|
};
|
|
213
213
|
return Object.freeze(r);
|
|
214
214
|
}
|
|
215
|
-
const Ae =
|
|
216
|
-
const e = Ae.store({}), r =
|
|
215
|
+
const Ae = b("predicate"), $e = v(({ client: t }) => {
|
|
216
|
+
const e = Ae.store({}), r = I(e, {
|
|
217
217
|
register(s, o) {
|
|
218
218
|
return {
|
|
219
219
|
...s,
|
|
@@ -225,7 +225,7 @@ const Ae = I("predicate"), $e = k(({ client: t }) => {
|
|
|
225
225
|
}
|
|
226
226
|
});
|
|
227
227
|
function n(s, o) {
|
|
228
|
-
e.getState()[s] &&
|
|
228
|
+
e.getState()[s] && k(
|
|
229
229
|
"warn",
|
|
230
230
|
`Predicate '${s}' already registered. Registering again will override the previous registration.`
|
|
231
231
|
), r.register(Object.freeze({ name: s, predicate: o }));
|
|
@@ -245,8 +245,8 @@ function je(t) {
|
|
|
245
245
|
}
|
|
246
246
|
const Oe = (t, e, r) => {
|
|
247
247
|
r.register(t, e);
|
|
248
|
-
}, z =
|
|
249
|
-
const e = z.store({}), r = z.store([]), n =
|
|
248
|
+
}, z = b("feature"), Ce = v(({ client: t }) => {
|
|
249
|
+
const e = z.store({}), r = z.store([]), n = I(e, {
|
|
250
250
|
register(d, a) {
|
|
251
251
|
return {
|
|
252
252
|
...d,
|
|
@@ -255,7 +255,7 @@ const Oe = (t, e, r) => {
|
|
|
255
255
|
}
|
|
256
256
|
});
|
|
257
257
|
function c(d, a) {
|
|
258
|
-
e.getState()[d] &&
|
|
258
|
+
e.getState()[d] && k(
|
|
259
259
|
"warn",
|
|
260
260
|
`Feature '${d}' already registered. Registering again will override the previous registration.`
|
|
261
261
|
);
|
|
@@ -279,27 +279,29 @@ const Oe = (t, e, r) => {
|
|
|
279
279
|
key: a,
|
|
280
280
|
storage: i = "local"
|
|
281
281
|
}) => {
|
|
282
|
-
const p = R(`feature:${d}:${a}`, "global"), g = (i === "session" ?
|
|
282
|
+
const p = R(`feature:${d}:${a}`, "global"), g = (i === "session" ? j : D).get(p).boolean();
|
|
283
283
|
return g === null ? null : { id: d, key: a, bucket: g, storage: i };
|
|
284
284
|
}
|
|
285
285
|
), s = M((d) => {
|
|
286
286
|
if (!d)
|
|
287
287
|
return null;
|
|
288
288
|
const a = R(`feature:${d.id}:${d.key}`, "global");
|
|
289
|
-
(d.storage === "session" ?
|
|
289
|
+
(d.storage === "session" ? j : D).set(a, d.bucket);
|
|
290
290
|
}), o = /* @__PURE__ */ new Map(), l = Q({
|
|
291
291
|
source: { allFeaturesStore: e, resolvedFeaturesStore: r },
|
|
292
292
|
effect: async ({ allFeaturesStore: d, resolvedFeaturesStore: a }, { id: i, decide: p, key: f }) => {
|
|
293
|
-
const g = a.find(
|
|
293
|
+
const g = a.find(
|
|
294
|
+
(A) => A.id === i && A.key === f
|
|
295
|
+
);
|
|
294
296
|
if (g)
|
|
295
297
|
return g;
|
|
296
298
|
const y = d[i];
|
|
297
299
|
if (!y)
|
|
298
300
|
throw new Error(`Feature with id '${i}' not found`);
|
|
299
|
-
const
|
|
300
|
-
if (
|
|
301
|
-
const
|
|
302
|
-
return { id: y.id, bucket:
|
|
301
|
+
const F = o.get(`${i}:${f}`);
|
|
302
|
+
if (F !== void 0) {
|
|
303
|
+
const A = await F;
|
|
304
|
+
return { id: y.id, bucket: A, key: f, storage: y.feature.storage };
|
|
303
305
|
}
|
|
304
306
|
const B = p();
|
|
305
307
|
o.set(`${i}:${f}`, B);
|
|
@@ -307,19 +309,14 @@ const Oe = (t, e, r) => {
|
|
|
307
309
|
return { id: y.id, bucket: E, key: f, storage: y.feature.storage };
|
|
308
310
|
}
|
|
309
311
|
});
|
|
310
|
-
|
|
312
|
+
x({
|
|
311
313
|
clock: n.register,
|
|
312
|
-
|
|
313
|
-
|
|
314
|
-
|
|
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 };
|
|
314
|
+
fn: (d) => {
|
|
315
|
+
const { id: a, feature: i } = d;
|
|
316
|
+
return { id: a, key: i.feature.key, storage: i.feature.storage };
|
|
320
317
|
},
|
|
321
318
|
target: u
|
|
322
|
-
}),
|
|
319
|
+
}), x({
|
|
323
320
|
source: e,
|
|
324
321
|
clock: l.doneData,
|
|
325
322
|
fn: (d, a) => {
|
|
@@ -334,7 +331,9 @@ const Oe = (t, e, r) => {
|
|
|
334
331
|
allFeaturesStore: d,
|
|
335
332
|
resolvedFeaturesStore: a
|
|
336
333
|
}) => Object.values(d).map((i) => {
|
|
337
|
-
const p = a.find(
|
|
334
|
+
const p = a.find(
|
|
335
|
+
(f) => f.id === i.id && f.key === i.feature.key
|
|
336
|
+
);
|
|
338
337
|
return p ? {
|
|
339
338
|
id: i.id,
|
|
340
339
|
name: i.feature.name,
|
|
@@ -350,19 +349,23 @@ const Oe = (t, e, r) => {
|
|
|
350
349
|
};
|
|
351
350
|
})
|
|
352
351
|
);
|
|
353
|
-
|
|
352
|
+
x({
|
|
354
353
|
clock: l.doneData,
|
|
355
354
|
source: { resolvedFeatures: r },
|
|
356
|
-
filter: ({ resolvedFeatures: d }, { id: a }) => !d.some(
|
|
355
|
+
filter: ({ resolvedFeatures: d }, { id: a, key: i }) => !d.some(
|
|
356
|
+
(f) => f.id === a && f.key === i
|
|
357
|
+
),
|
|
357
358
|
fn: (d, a) => a,
|
|
358
359
|
target: t.eventBus.prepend((d) => ({
|
|
359
360
|
type: "feature_decide",
|
|
360
361
|
feature: d
|
|
361
362
|
}))
|
|
362
|
-
}),
|
|
363
|
+
}), x({
|
|
363
364
|
clock: [u.doneData, l.doneData],
|
|
364
365
|
source: r,
|
|
365
|
-
fn: (d, a) => !a || d.some(
|
|
366
|
+
fn: (d, a) => !a || d.some(
|
|
367
|
+
(p) => p.id === a.id && p.key === a.key
|
|
368
|
+
) ? d : [...d, a],
|
|
366
369
|
target: r
|
|
367
370
|
});
|
|
368
371
|
function S(d) {
|
|
@@ -379,8 +382,8 @@ function De(t) {
|
|
|
379
382
|
}
|
|
380
383
|
const Me = (t, e, r) => {
|
|
381
384
|
r.register(t, e);
|
|
382
|
-
}, P =
|
|
383
|
-
function
|
|
385
|
+
}, P = b("history");
|
|
386
|
+
function L(t, e) {
|
|
384
387
|
return {
|
|
385
388
|
// eslint-disable-next-line sonarjs/pseudo-random
|
|
386
389
|
id: ne(`history-entry-${Date.now()}-${Math.random()}}`),
|
|
@@ -389,14 +392,14 @@ function _(t, e) {
|
|
|
389
392
|
experienceId: t
|
|
390
393
|
};
|
|
391
394
|
}
|
|
392
|
-
const Ve =
|
|
395
|
+
const Ve = v(() => {
|
|
393
396
|
const t = P.store({ entries: [] }), e = P.event(), r = P.event(), n = P.event(), c = P.event();
|
|
394
397
|
t.on(e, (s, o) => ({
|
|
395
|
-
entries: [...s.entries,
|
|
398
|
+
entries: [...s.entries, L(o.experienceId, o.node)]
|
|
396
399
|
})), t.on(r, (s, o) => ({
|
|
397
400
|
entries: [
|
|
398
401
|
...s.entries.slice(0, -1),
|
|
399
|
-
|
|
402
|
+
L(o.experienceId, o.node)
|
|
400
403
|
]
|
|
401
404
|
})), t.on(c, (s, o) => o);
|
|
402
405
|
function u(s, o) {
|
|
@@ -430,8 +433,8 @@ const Ve = k(() => {
|
|
|
430
433
|
function Te() {
|
|
431
434
|
return w(Ve);
|
|
432
435
|
}
|
|
433
|
-
const Ne = () => C(), ze =
|
|
434
|
-
const t = ze.store({}), e =
|
|
436
|
+
const Ne = () => C(), ze = b("field"), Le = v(() => {
|
|
437
|
+
const t = ze.store({}), e = I(t, {
|
|
435
438
|
register(s, o) {
|
|
436
439
|
return {
|
|
437
440
|
...s,
|
|
@@ -456,13 +459,13 @@ const Ne = () => C(), ze = I("field"), _e = k(() => {
|
|
|
456
459
|
getByName: u
|
|
457
460
|
};
|
|
458
461
|
});
|
|
459
|
-
function
|
|
460
|
-
return w(
|
|
462
|
+
function Ue() {
|
|
463
|
+
return w(Le);
|
|
461
464
|
}
|
|
462
|
-
const
|
|
465
|
+
const _e = (t, e) => {
|
|
463
466
|
e.register(t);
|
|
464
|
-
}, He =
|
|
465
|
-
const t = He.store({}), e =
|
|
467
|
+
}, He = b("action"), Ke = v(() => {
|
|
468
|
+
const t = He.store({}), e = I(t, {
|
|
466
469
|
register(u, s) {
|
|
467
470
|
return {
|
|
468
471
|
...u,
|
|
@@ -492,11 +495,11 @@ function qe() {
|
|
|
492
495
|
const Ge = (t, e, r) => {
|
|
493
496
|
r.register(t, e);
|
|
494
497
|
};
|
|
495
|
-
function
|
|
498
|
+
function U(t) {
|
|
496
499
|
return typeof t > "u" || t === null || t === "" || Array.isArray(t) && !t.length;
|
|
497
500
|
}
|
|
498
|
-
const We =
|
|
499
|
-
const e = We.store({}), r = C(), n = C(), c =
|
|
501
|
+
const We = b("response"), Ye = v(({ client: t }) => {
|
|
502
|
+
const e = We.store({}), r = C(), n = C(), c = I(e, {
|
|
500
503
|
register(a, i) {
|
|
501
504
|
return {
|
|
502
505
|
...a,
|
|
@@ -535,20 +538,20 @@ const We = I("response"), Ye = k(({ client: t }) => {
|
|
|
535
538
|
});
|
|
536
539
|
return;
|
|
537
540
|
}
|
|
538
|
-
if (y.multiple && (typeof g == "string" || typeof g == "number" || typeof g == "boolean") && (g = [g]), y.validation && !oe(y.validation) && !
|
|
539
|
-
const
|
|
541
|
+
if (y.multiple && (typeof g == "string" || typeof g == "number" || typeof g == "boolean") && (g = [g]), y.validation && !oe(y.validation) && !U(g)) {
|
|
542
|
+
const F = await $(t, y.validation, {
|
|
540
543
|
$input: g
|
|
541
544
|
});
|
|
542
|
-
if (typeof
|
|
545
|
+
if (typeof F == "string") {
|
|
543
546
|
i.push({
|
|
544
547
|
fieldId: p,
|
|
545
|
-
userMessage:
|
|
546
|
-
systemMessage: `Field validation resulted in an error: ${
|
|
548
|
+
userMessage: F,
|
|
549
|
+
systemMessage: `Field validation resulted in an error: ${F}.`,
|
|
547
550
|
value: g
|
|
548
551
|
});
|
|
549
552
|
return;
|
|
550
553
|
}
|
|
551
|
-
if (
|
|
554
|
+
if (F === !1) {
|
|
552
555
|
i.push({
|
|
553
556
|
fieldId: p,
|
|
554
557
|
userMessage: "This field is invalid",
|
|
@@ -558,7 +561,7 @@ const We = I("response"), Ye = k(({ client: t }) => {
|
|
|
558
561
|
return;
|
|
559
562
|
}
|
|
560
563
|
}
|
|
561
|
-
if (y.required &&
|
|
564
|
+
if (y.required && U(g)) {
|
|
562
565
|
i.push({
|
|
563
566
|
fieldId: p,
|
|
564
567
|
userMessage: "This field is required",
|
|
@@ -577,11 +580,11 @@ const We = I("response"), Ye = k(({ client: t }) => {
|
|
|
577
580
|
return;
|
|
578
581
|
}
|
|
579
582
|
if (y.options) {
|
|
580
|
-
const
|
|
581
|
-
Array.isArray(g) && (B.every((E) =>
|
|
583
|
+
const F = y.options.map((E) => E.value), B = Array.isArray(g) ? g : [g];
|
|
584
|
+
Array.isArray(g) && (B.every((E) => F.includes(E)) || i.push({
|
|
582
585
|
fieldId: p,
|
|
583
586
|
userMessage: "This field expects a valid option",
|
|
584
|
-
systemMessage: `Field expects a valid option. Valid options are: ${
|
|
587
|
+
systemMessage: `Field expects a valid option. Valid options are: ${F.join(", ")}`,
|
|
585
588
|
value: g
|
|
586
589
|
}));
|
|
587
590
|
}
|
|
@@ -607,10 +610,10 @@ const We = I("response"), Ye = k(({ client: t }) => {
|
|
|
607
610
|
return g || (p != null && p.defaultValue ? p.defaultValue : null);
|
|
608
611
|
});
|
|
609
612
|
}
|
|
610
|
-
return
|
|
613
|
+
return x({
|
|
611
614
|
clock: r,
|
|
612
615
|
target: c.clearAll
|
|
613
|
-
}),
|
|
616
|
+
}), x({
|
|
614
617
|
clock: n,
|
|
615
618
|
target: c.clear
|
|
616
619
|
}), {
|
|
@@ -628,7 +631,7 @@ const We = I("response"), Ye = k(({ client: t }) => {
|
|
|
628
631
|
function Je(t) {
|
|
629
632
|
return w(Ye, t);
|
|
630
633
|
}
|
|
631
|
-
const Qe = () => "0.0.1-dev.
|
|
634
|
+
const Qe = () => "0.0.1-dev.1764096269522";
|
|
632
635
|
function Xe() {
|
|
633
636
|
if (H()) {
|
|
634
637
|
const t = [
|
|
@@ -656,9 +659,9 @@ function Ze() {
|
|
|
656
659
|
}
|
|
657
660
|
const n = R("s");
|
|
658
661
|
if (r.size > 0)
|
|
659
|
-
|
|
662
|
+
j.set(n, e);
|
|
660
663
|
else {
|
|
661
|
-
const c =
|
|
664
|
+
const c = j.get(n);
|
|
662
665
|
if (c)
|
|
663
666
|
return c.json() || {};
|
|
664
667
|
}
|
|
@@ -694,13 +697,13 @@ class G {
|
|
|
694
697
|
m(this, "components", we({ client: this }));
|
|
695
698
|
m(this, "experienceInstances", re({ client: this }));
|
|
696
699
|
m(this, "experiences", ge({ client: this }));
|
|
697
|
-
m(this, "frameworks",
|
|
700
|
+
m(this, "frameworks", Ie({ client: this }));
|
|
698
701
|
m(this, "predicates", je({ client: this }));
|
|
699
702
|
m(this, "features", De({ client: this }));
|
|
700
703
|
m(this, "responses", Je({ client: this }));
|
|
701
|
-
m(this, "fields",
|
|
704
|
+
m(this, "fields", Ue());
|
|
702
705
|
m(this, "actions", qe());
|
|
703
|
-
|
|
706
|
+
k("info", "Picked client initializing."), this.organizationId = e.organizationId, this.projectId = e.projectId, this.options = Object.freeze(e), this.apiUrl = e.apiUrl || Xe(), this.session = nt(), this.setupPlugins(), this.setupFeatures(), this.setupPredicates(), this.setupActions(), this.eventBus({ type: "initialized", version: Qe() }), k("info", "Picked client initialized.");
|
|
704
707
|
}
|
|
705
708
|
start() {
|
|
706
709
|
Re(this), (async () => {
|
|
@@ -708,7 +711,7 @@ class G {
|
|
|
708
711
|
})();
|
|
709
712
|
}
|
|
710
713
|
registerFramework(e) {
|
|
711
|
-
|
|
714
|
+
xe(e, this.frameworks);
|
|
712
715
|
}
|
|
713
716
|
registerComponent(e, r) {
|
|
714
717
|
T(e, r, this.components);
|
|
@@ -723,7 +726,7 @@ class G {
|
|
|
723
726
|
Oe(e, r, this.predicates);
|
|
724
727
|
}
|
|
725
728
|
registerField(e) {
|
|
726
|
-
|
|
729
|
+
_e(e, this.fields);
|
|
727
730
|
}
|
|
728
731
|
registerAction(e, r) {
|
|
729
732
|
Ge(e, r, this.actions);
|
|
@@ -737,7 +740,7 @@ class G {
|
|
|
737
740
|
async launchExperienceById(e) {
|
|
738
741
|
const r = this.experiences.getById(e).getState();
|
|
739
742
|
if (!r) {
|
|
740
|
-
|
|
743
|
+
k("warn", `Experience with id '${e}' not found.`);
|
|
741
744
|
return;
|
|
742
745
|
}
|
|
743
746
|
q(this, r);
|
|
@@ -795,7 +798,7 @@ class G {
|
|
|
795
798
|
const e = this.options.predicates;
|
|
796
799
|
e && Object.entries(e).forEach(([r, n]) => {
|
|
797
800
|
if (typeof n != "function") {
|
|
798
|
-
|
|
801
|
+
k("warn", `Predicate "${r}" is not a function.`);
|
|
799
802
|
return;
|
|
800
803
|
}
|
|
801
804
|
this.registerPredicate(r, n);
|
|
@@ -805,7 +808,7 @@ class G {
|
|
|
805
808
|
const e = this.options.actions;
|
|
806
809
|
e && Object.entries(e).forEach(([r, n]) => {
|
|
807
810
|
if (typeof n != "function") {
|
|
808
|
-
|
|
811
|
+
k("warn", `Action "${r}" is not a function.`);
|
|
809
812
|
return;
|
|
810
813
|
}
|
|
811
814
|
this.registerAction(r, n);
|
|
@@ -815,7 +818,7 @@ class G {
|
|
|
815
818
|
return this.plugins[e] ?? {};
|
|
816
819
|
}
|
|
817
820
|
}
|
|
818
|
-
m(G, "logger",
|
|
821
|
+
m(G, "logger", k);
|
|
819
822
|
function W(t) {
|
|
820
823
|
var e;
|
|
821
824
|
return ((e = t.options) == null ? void 0 : e.some((r) => "condition" in r)) ?? !1;
|
|
@@ -826,12 +829,12 @@ function ot(t) {
|
|
|
826
829
|
async function mt(t, e) {
|
|
827
830
|
return e.length === 0 || !ot(e) ? e : (await Promise.all(
|
|
828
831
|
e.map(async (n) => {
|
|
829
|
-
if (!(n.condition ? await
|
|
832
|
+
if (!(n.condition ? await $(t, n.condition) : !0))
|
|
830
833
|
return null;
|
|
831
834
|
if (!n.options || !W(n))
|
|
832
835
|
return n;
|
|
833
836
|
const s = (await Promise.all(
|
|
834
|
-
n.options.map(async (l) => l.condition ? await
|
|
837
|
+
n.options.map(async (l) => l.condition ? await $(t, l.condition) ? l : null : l)
|
|
835
838
|
)).filter((l) => l !== null);
|
|
836
839
|
return s.length === n.options.length ? n : s.length === 0 ? null : { ...n, options: s };
|
|
837
840
|
})
|
|
@@ -845,17 +848,17 @@ export {
|
|
|
845
848
|
G as Picked,
|
|
846
849
|
ht as createClient,
|
|
847
850
|
R as createStorageKey,
|
|
848
|
-
|
|
851
|
+
$ as evaluateRuleLogic,
|
|
849
852
|
mt as getStepFields,
|
|
850
|
-
|
|
853
|
+
kt as isPickedRoot,
|
|
851
854
|
D as localStore,
|
|
852
|
-
|
|
855
|
+
j as sessionStore,
|
|
853
856
|
wt as subscribe,
|
|
854
|
-
|
|
857
|
+
bt as supportsCookies,
|
|
855
858
|
ce as supportsCryptoRandomUUID,
|
|
856
859
|
H as supportsDocument,
|
|
857
|
-
|
|
858
|
-
|
|
860
|
+
It as supportsHistory,
|
|
861
|
+
xt as supportsIntersectionObserver,
|
|
859
862
|
ae as supportsLocalStorage,
|
|
860
863
|
Et as supportsLocation,
|
|
861
864
|
Pt as supportsSessionStorage,
|
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-CMrX6QA2.js";
|
|
3
3
|
function R() {
|
|
4
4
|
let c, p;
|
|
5
5
|
return {
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"use strict";const i=require("effector"),q=require("@withease/factories"),H=require("./supports-YvpQZxbh.cjs"),N=require("./logger-BsmHUUw1.cjs"),ge=require("./object-BbFTsGh3.cjs");function me(e){return typeof e=="number"&&!isNaN(e)}function R(e){return typeof e=="string"}function E(e){return Array.isArray(e)}function ne(e){return e instanceof Promise}function Z(e){return typeof e=="object"&&e!==null&&!Array.isArray(e)&&Object.keys(e).length===1}function m(e){if(me(e))return e;const t=parseFloat(`${e}`);return isNaN(t)?0:t}function T(e){return`${e}`}const he={"==":(e,t)=>e==t,"===":(e,t)=>e===t,"!=":(e,t)=>e!=t,"!==":(e,t)=>e!==t,">":(e,t)=>m(e)>m(t),">=":(e,t)=>m(e)>=m(t),"<":(e,t,r)=>{const n=m(e),a=m(t);if(r===void 0)return n<a;const c=m(r);return n<a&&a<c},"<=":(e,t,r)=>{const n=m(e),a=m(t);if(r===void 0)return n<=a;const c=m(r);return n<=a&&a<=c},"!!":async e=>await O(e),"!":async e=>!await O(e),"%":(e,t)=>m(e)%m(t),log:e=>(console.log(e),e),in:(e,t)=>t?R(t)?t.indexOf(T(e))!==-1:E(t)?t.includes(e):!1:!1,cat:(...e)=>e.map(T).join(""),substr:(e,t,r)=>{const n=T(e),a=m(t);if(r===void 0)return n.substr(a);const c=m(r);if(c<0){const o=n.substr(a);return o.substr(0,o.length+c)}return n.substr(a,c)},"+":(...e)=>e.reduce((t,r)=>m(t)+m(r),0),"*":(...e)=>e.reduce((t,r)=>m(t)*m(r),1),"-":(e,t)=>{const r=m(e);return t===void 0?-r:r-m(t)},"/":(e,t)=>m(e)/m(t),min:(...e)=>Math.min(...e.map(m)),max:(...e)=>Math.max(...e.map(m)),merge:(...e)=>e.reduce((t,r)=>E(r)?t.concat(r):t.concat([r]),[]),var(e,t){const r=arguments.length>1?t:null;if(e===""||e==="."||e===null||e===void 0)return this;if(typeof e=="number"&&Array.isArray(this))return e>=0&&e<this.length?this[e]:r;const n=T(e);if(n===""||n===".")return this;const a=n.split(".");let c=this;for(const o of a){if(c==null)return r;if(Array.isArray(c)){const u=parseInt(o,10);isNaN(u)?c=c[o]:c=c[u]}else c=c[o]}return c!==void 0?c:r},async missing(...e){const t=E(e[0])?e[0]:e,r=[];for(const n of t){const a=await g({var:n},this);(a===null||a==="")&&r.push(`${n}`)}return r},async missing_some(e,t){const r=await g({missing:t},this);if(!E(r)||!E(t))return[];const n=r.filter(R);return t.filter(R).length-n.length>=m(e)?[]:n},invoke(e){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 O(await g(n[o],t)))return g(n[o+1],t);return n.length%2===1?g(n[n.length-1],t):null;case"and":{let o=null;for(const u of n)if(o=await g(u,t),!await O(o))return o;return o}case"or":{let o=null;for(const u of n)if(o=await g(u,t),await O(o))return o;return o}case"map":{const o=await g(n[0],t);return E(o)?await Promise.all(o.map(u=>g(n[1],u))):[]}case"filter":{const o=await g(n[0],t);return E(o)?(await Promise.all(o.map(async p=>{const y=await O(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 O(await g(n[1],u)))return!1;return!0}case"some":{const o=await g(n[0],t);if(!E(o))return!1;for(const u of o)if(await O(await g(n[1],u)))return!0;return!1}case"none":{const o=await g(n[0],t);if(!E(o))return!0;for(const u of o)if(await O(await g(n[1],u)))return!1;return!0}case"catch":try{return await g(n[0],t)}catch(o){return Z(o)?await g(o,t):n[1]?await g(n[1],o):o instanceof Error?o.message:o}}const a=await Promise.all(n.map(o=>g(o,t))),c=r?he[r]:void 0;if(!c)throw new Error(`Unrecognized operation ${r}`);return c.apply(t,a)}async function O(e){return ne(e)?O(await e):!(Array.isArray(e)&&e.length===0)&&!!e}function Se(e){return Object.keys(e)[0]}function re(e){return!ge.isEmpty(e)}async function V(e,t,r){const n=e.getStateSnapshot(),a=e.predicates.listStore.getState().reduce((u,p)=>({...u,[p.name]:()=>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!H.supportsWindow()||!H.supportsDocument()?[]:Array.from(window.document.querySelectorAll(e)).filter(t=>t instanceof HTMLElement)}const we="open";function Ee(e){if(!H.supportsShadowRoot())throw new Error("Shadow DOM is not supported in this environment");return e.attachShadow({mode:we})}function Ne(){return new Promise((e,t)=>{if(!H.supportsDocument()){t();return}document.readyState!=="loading"?e():document.addEventListener("readystatechange",()=>e(),{once:!0})})}function Ie(e,t){const r=new MutationObserver(n=>{document.contains(e)||(r.disconnect(),t())});r.observe(document.body,{childList:!0,subtree:!0})}const C="picked-root",j="picked-target",xe="picked-root";function ke(e,t){return[...e,{selector:`${xe}[experience-id="${t}"]`,placement:"replace"}].flatMap(n=>{const a=ye(n.selector).filter(c=>!Ae(c,t)&&!oe(c,t));return{...n,elements:a}})}function ve(e,t){return e.flatMap(r=>r.elements.map(n=>Be(n,r.placement,t)))}function be(e,t){e.classList.add(j),e.classList.add(`${j}-${t}`)}function Ae(e,t){return t?e.classList.contains(`${j}-${t}`):e.classList.contains(`${j}`)}function oe(e,t){return t?e.classList.contains(`${C}-${t}`):e.classList.contains(C)}function Oe(e){const t=document.createElement("div");return t.style.display="block",t.classList.add(C),t.classList.add(`${C}-${e}`),t}function Be(e,t,r){let n;const a=Oe(r);if(e instanceof Document)n=e.body.appendChild(a);else{switch(t){case"replace":e.replaceWith(a);break;case"before":e.before(a);break;case"after":e.after(a);break;case"prepend":e.prepend(a);break;default:e.append(a);break}n=a}return n}function 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):[]})),$e=(e,t,r)=>se(e,t,r,!0,new Set),ie=(e,t,r,n,a=new Set)=>{if(a.has(r.id))return[-1,-1];a.add(r.id);const c=t.filter(p=>p.sourceNodeId===r.id);if(c.length===0)return[0,0];let o=1/0,u=-1/0;for(const p of c){const y=e.find(L=>L.id===p.destinationNodeId);if(!y)continue;const[k,B]=ie(e,t,y,!1,new Set(a));k!==-1&&(o=Math.min(o,k+1),u=Math.max(u,B+1))}return o===1/0?[-1,-1]:[o,u]},Te=(e,t,r)=>ie(e,t,r,!0,new Set),ae=(e,t,r,n=new Set)=>{if(n.has(r.id))return[-1,-1];if(n.add(r.id),r.type==="origin")return[0,0];const a=t.filter(u=>u.destinationNodeId===r.id);if(a.length===0)return[-1,-1];let c=1/0,o=-1/0;for(const u of a){const p=e.find(B=>B.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]},Me=(e,t,r)=>ae(e,t,r,new Set),ce=e=>e.find(r=>r.type==="origin")||null,U=(e,t,r)=>{if(!e)return ce(t);const n=r.find(c=>c.sourceNodeId===e.id);if(!n)return null;const a=t.find(c=>c.id===n.destinationNodeId);return a||null};async function Le(e,t,r,n){const a=e?"true":"false",c=n.find(o=>o.sourceNodeHandle===a&&o.sourceNodeId===t);return r.find(o=>o.id===(c==null?void 0:c.destinationNodeId))}const X=i.createDomain("experience-instance"),De=q.createFactory(({client:e,experience:t,target:r})=>{const n=i.createEvent(),a=i.createEvent(),c=i.createEvent(),o=i.createEvent(),u=i.createEvent(),p=i.createEvent(),y=t.componentStore,k=X.store("transitioning"),B=e.history.entriesStore.map(s=>s.filter(l=>l.experienceId===t.id)),L=B.map(s=>s.filter(l=>M(l.node))),I=B.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?$e(s,l,d):[]),A=i.combine(t.treeStore,I,({nodes:s,edges:l},d)=>d?Me(s,l,d):[-1,-1]),_=i.combine(t.treeStore,I,({nodes:s,edges:l},d)=>d?Te(s,l,d):[-1,-1]),v=X.store(!1),F=i.createApi(v,{open:()=>!0,close:()=>!1,toggle:s=>!s,set:(s,l)=>l}),fe=i.createEffect(async()=>{e.history.back({experienceId:t.id})}),le=i.attach({source:t.treeStore,effect:async(s,l)=>{const d=s.nodes.find(w=>M(w)&&w.stepId===l);d&&e.history.push({experienceId:t.id,node:d})}}),z=i.attach({source:I,effect:s=>{}}),W=i.attach({source:t.treeStore,effect:async({nodes:s})=>ce(s)}),G=i.attach({source:t.treeStore,effect:async({nodes:s,edges:l},d)=>U(d,s,l)}),K=i.attach({source:t.treeStore,effect:async({nodes:s,edges:l,conditionals:d},w)=>{if(!w)return;const $=d.find(b=>b.id===w.conditionalId);if(!$)return;const x=w.id,S=await V(e,$.condition);return Le(!!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}])=>U(s,l,d)}),D=i.attach({source:[I,t.treeStore],effect:async([s,{nodes:l,edges:d}])=>U(s,l,d)}),pe=i.createEffect(s=>{e.history.push({experienceId:t.id,node:s})}),Y=i.attach({source:t.configStore,effect:async({initializeOpenLogic:s})=>re(s)?!!await V(e,s):s??!1});return i.split({source:I,match:s=>s?Fe(s)?"condition":M(s)?"step":_e(s)?"launchExperience":ee(s)?"origin":te(s)?"action":"other":"none",cases:{none:W,origin:G,condition:K,step:z,launchExperience:de,action:J,__:i.createEvent()}}),i.sample({clock:[K.doneData,G.doneData,W.doneData,D.doneData,Q.doneData,J.doneData],filter:Boolean,target:pe}),i.sample({clock:a,target:D}),i.sample({clock:a,source:f,filter:Boolean,target:e.eventBus.prepend(s=>({type:"step_submit",step:s,experience:t}))}),i.sample({clock:D.done,source:f,filter:Boolean,target:e.eventBus.prepend(s=>({type:"step_submit_success",step:s,experience:t}))}),i.sample({clock:D.fail,source:f,filter:Boolean,target:e.eventBus.prepend(s=>({type:"step_submit_error",step:s,experience:t}))}),i.sample({clock:c,target:fe}),i.sample({clock:o,target:le}),i.sample({source:i.combine([K.pending,G.pending,W.pending,D.pending]),fn:s=>s.some(Boolean)?"transitioning":"ready",target:k}),i.sample({clock:z.doneData,source:f,filter:Boolean,target:e.eventBus.prepend(s=>({type:"step_enter",step:s,experience:t}))}),i.sample({clock:p,target:Y}),i.sample({source:Y.doneData,fn:Boolean,target:v}),i.sample({source:I,clock:n,filter:s=>s?ee(s):!0,target:Q}),i.sample({source:v,filter:Boolean,target:n}),i.sample({source:v,filter:Boolean,target:e.eventBus.prepend(()=>({type:"experience_open",experience:t}))}),i.sample({source:v,filter:s=>!s,target:e.eventBus.prepend(()=>({type:"experience_close",experience:t}))}),i.sample({clock:u,target:[p]}),u(),{id:Math.random().toString(36).substring(7),experienceId:t.id,configStore:t.configStore,target:r,componentStore:y,stateStore:k,isOpenStore:v,open:F.open,close:F.close,toggleOpen:F.toggle,setOpen:F.set,treeStore:t.treeStore,currentNodeStore:I,currentStepStore:f,nextReachableStepNodesStore:h,stepsToOriginStore:A,stepsToLeafStore:_,goToNextStep:a,goToPreviousStep:c,goToStepById:o,stepsHistoryStore:L}});function ue(e){return q.invoke(De,e)}const Re=q.createFactory(({client:e})=>{const t=X.store({}),r=i.createEvent(),n=i.createEvent(),a=i.createEvent(),c=i.createApi(t,{register(f,h){const A=[...f[h.experienceId]??[]];return A.push(h),{...f,[h.experienceId]:A}},unregister(f,h){var v;const A=h.experienceId,_=(v=f[A])==null?void 0:v.filter(F=>F!==h);return{...f,[A]:_??[]}}}),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&&Ie(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 _=f.target;if(!_){N.logger("error",`No target element registered for experience '${f.experienceId}'. Skipping rendering.`);return}const v=Ee(_);try{A.render(v,h.component,e,f)}catch(F){N.logger("error",F)}});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 B(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:B,getByExperienceId:I,listStore:L}});function Pe(e){return q.invoke(Re,e)}exports.createAppHosts=ve;exports.createExperienceInstance=ue;exports.createExperienceInstanceIndex=Pe;exports.domInteractive=Ne;exports.evaluateRuleLogic=V;exports.getTargetElements=ke;exports.isPickedRoot=oe;exports.isRulesLogic=re;exports.isStepNode=M;exports.tagTargetElement=be;
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { createDomain as ht, createEvent as
|
|
1
|
+
import { createDomain as ht, createEvent as O, combine as C, createApi as ot, createEffect as M, attach as _, split as yt, sample as m } from "effector";
|
|
2
2
|
import { createFactory as it, invoke as st } from "@withease/factories";
|
|
3
3
|
import { i as wt, s as at, a as Nt } from "./supports-BjhuLJ8z.js";
|
|
4
4
|
import { l as I } from "./logger-C9a75KZn.js";
|
|
@@ -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 B(t),
|
|
51
|
+
"!": async (t) => !await B(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),
|
|
@@ -141,20 +141,20 @@ async function p(t, e) {
|
|
|
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 B(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 B(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 B(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 B(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,21 +184,21 @@ 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 B(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 B(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 B(await p(n[1], c))) return !1;
|
|
202
202
|
return !0;
|
|
203
203
|
}
|
|
204
204
|
case "catch":
|
|
@@ -212,8 +212,8 @@ async function p(t, e) {
|
|
|
212
212
|
if (!a) throw new Error(`Unrecognized operation ${r}`);
|
|
213
213
|
return a.apply(e, s);
|
|
214
214
|
}
|
|
215
|
-
async function
|
|
216
|
-
return ct(t) ?
|
|
215
|
+
async function B(t) {
|
|
216
|
+
return ct(t) ? B(await t) : !(Array.isArray(t) && t.length === 0) && !!t;
|
|
217
217
|
}
|
|
218
218
|
function kt(t) {
|
|
219
219
|
return Object.keys(t)[0];
|
|
@@ -255,12 +255,13 @@ function bt(t) {
|
|
|
255
255
|
(e) => e instanceof HTMLElement
|
|
256
256
|
);
|
|
257
257
|
}
|
|
258
|
-
|
|
258
|
+
const vt = "open";
|
|
259
|
+
function Ot(t) {
|
|
259
260
|
if (!wt())
|
|
260
261
|
throw new Error("Shadow DOM is not supported in this environment");
|
|
261
|
-
return t.attachShadow({ mode:
|
|
262
|
+
return t.attachShadow({ mode: vt });
|
|
262
263
|
}
|
|
263
|
-
function
|
|
264
|
+
function zt() {
|
|
264
265
|
return new Promise((t, e) => {
|
|
265
266
|
if (!at()) {
|
|
266
267
|
e();
|
|
@@ -275,18 +276,18 @@ function Bt(t, e) {
|
|
|
275
276
|
});
|
|
276
277
|
r.observe(document.body, { childList: !0, subtree: !0 });
|
|
277
278
|
}
|
|
278
|
-
const
|
|
279
|
-
function
|
|
279
|
+
const G = "picked-root", K = "picked-target", _t = "picked-root";
|
|
280
|
+
function Jt(t, e) {
|
|
280
281
|
return [
|
|
281
282
|
...t,
|
|
282
283
|
// Target and replace picked-root web components
|
|
283
284
|
{
|
|
284
|
-
selector: `${
|
|
285
|
+
selector: `${_t}[experience-id="${e}"]`,
|
|
285
286
|
placement: "replace"
|
|
286
287
|
}
|
|
287
288
|
].flatMap((n) => {
|
|
288
289
|
const s = bt(n.selector).filter(
|
|
289
|
-
(a) =>
|
|
290
|
+
(a) => !$t(a, e) && !Ft(a, e)
|
|
290
291
|
);
|
|
291
292
|
return {
|
|
292
293
|
...n,
|
|
@@ -294,25 +295,25 @@ function zt(t, e) {
|
|
|
294
295
|
};
|
|
295
296
|
});
|
|
296
297
|
}
|
|
297
|
-
function Jt(t, e) {
|
|
298
|
-
return t.flatMap((r) => r.elements.map((n) => Mt(n, r.placement, e)));
|
|
299
|
-
}
|
|
300
298
|
function Qt(t, e) {
|
|
301
|
-
t.
|
|
299
|
+
return t.flatMap((r) => r.elements.map((n) => Tt(n, r.placement, e)));
|
|
302
300
|
}
|
|
303
|
-
function
|
|
304
|
-
|
|
301
|
+
function Yt(t, e) {
|
|
302
|
+
t.classList.add(K), t.classList.add(`${K}-${e}`);
|
|
303
|
+
}
|
|
304
|
+
function $t(t, e) {
|
|
305
|
+
return e ? t.classList.contains(`${K}-${e}`) : t.classList.contains(`${K}`);
|
|
305
306
|
}
|
|
306
|
-
function
|
|
307
|
-
return e ? t.classList.contains(`${
|
|
307
|
+
function Ft(t, e) {
|
|
308
|
+
return e ? t.classList.contains(`${G}-${e}`) : t.classList.contains(G);
|
|
308
309
|
}
|
|
309
|
-
function
|
|
310
|
+
function Mt(t) {
|
|
310
311
|
const e = document.createElement("div");
|
|
311
|
-
return e.style.display = "block", e.classList.add(
|
|
312
|
+
return e.style.display = "block", e.classList.add(G), e.classList.add(`${G}-${t}`), e;
|
|
312
313
|
}
|
|
313
|
-
function
|
|
314
|
+
function Tt(t, e, r) {
|
|
314
315
|
let n;
|
|
315
|
-
const s =
|
|
316
|
+
const s = Mt(r);
|
|
316
317
|
if (t instanceof Document)
|
|
317
318
|
n = t.body.appendChild(s);
|
|
318
319
|
else {
|
|
@@ -337,13 +338,13 @@ function Mt(t, e, r) {
|
|
|
337
338
|
}
|
|
338
339
|
return n;
|
|
339
340
|
}
|
|
340
|
-
function
|
|
341
|
+
function Lt(t) {
|
|
341
342
|
return t.type === "conditional";
|
|
342
343
|
}
|
|
343
344
|
function j(t) {
|
|
344
345
|
return t.type === "step";
|
|
345
346
|
}
|
|
346
|
-
function
|
|
347
|
+
function Dt(t) {
|
|
347
348
|
return t.type === "experience";
|
|
348
349
|
}
|
|
349
350
|
function nt(t) {
|
|
@@ -355,7 +356,7 @@ function rt(t) {
|
|
|
355
356
|
const ut = (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
357
|
const c = t.find((d) => d.id === o.destinationNodeId);
|
|
357
358
|
return c ? ut(t, e, c, !1, s) : [];
|
|
358
|
-
})),
|
|
359
|
+
})), Pt = (t, e, r) => ut(t, e, r, !0, /* @__PURE__ */ new Set()), ft = (t, e, r, n, s = /* @__PURE__ */ new Set()) => {
|
|
359
360
|
if (s.has(r.id)) return [-1, -1];
|
|
360
361
|
s.add(r.id);
|
|
361
362
|
const a = e.filter((d) => d.sourceNodeId === r.id);
|
|
@@ -364,24 +365,24 @@ const ut = (t, e, r, n, s = /* @__PURE__ */ new Set()) => s.has(r.id) ? [] : (s.
|
|
|
364
365
|
for (const d of a) {
|
|
365
366
|
const y = t.find((P) => P.id === d.destinationNodeId);
|
|
366
367
|
if (!y) continue;
|
|
367
|
-
const [k,
|
|
368
|
+
const [k, $] = ft(
|
|
368
369
|
t,
|
|
369
370
|
e,
|
|
370
371
|
y,
|
|
371
372
|
!1,
|
|
372
373
|
new Set(s)
|
|
373
374
|
);
|
|
374
|
-
k !== -1 && (o = Math.min(o, k + 1), c = Math.max(c,
|
|
375
|
+
k !== -1 && (o = Math.min(o, k + 1), c = Math.max(c, $ + 1));
|
|
375
376
|
}
|
|
376
377
|
return o === 1 / 0 ? [-1, -1] : [o, c];
|
|
377
|
-
},
|
|
378
|
+
}, Rt = (t, e, r) => ft(t, e, r, !0, /* @__PURE__ */ new Set()), lt = (t, e, r, n = /* @__PURE__ */ new Set()) => {
|
|
378
379
|
if (n.has(r.id)) return [-1, -1];
|
|
379
380
|
if (n.add(r.id), r.type === "origin") return [0, 0];
|
|
380
381
|
const s = e.filter((c) => c.destinationNodeId === r.id);
|
|
381
382
|
if (s.length === 0) return [-1, -1];
|
|
382
383
|
let a = 1 / 0, o = -1 / 0;
|
|
383
384
|
for (const c of s) {
|
|
384
|
-
const d = t.find((
|
|
385
|
+
const d = t.find(($) => $.id === c.sourceNodeId);
|
|
385
386
|
if (!d) continue;
|
|
386
387
|
const [y, k] = lt(
|
|
387
388
|
t,
|
|
@@ -392,7 +393,7 @@ const ut = (t, e, r, n, s = /* @__PURE__ */ new Set()) => s.has(r.id) ? [] : (s.
|
|
|
392
393
|
y !== -1 && (a = Math.min(a, y + 1), o = Math.max(o, k + 1));
|
|
393
394
|
}
|
|
394
395
|
return a === 1 / 0 ? [-1, -1] : [a, o];
|
|
395
|
-
},
|
|
396
|
+
}, Ct = (t, e, r) => lt(t, e, r, /* @__PURE__ */ new Set()), dt = (t) => t.find((r) => r.type === "origin") || null, X = (t, e, r) => {
|
|
396
397
|
if (!t)
|
|
397
398
|
return dt(e);
|
|
398
399
|
const n = r.find((a) => a.sourceNodeId === t.id);
|
|
@@ -401,19 +402,19 @@ const ut = (t, e, r, n, s = /* @__PURE__ */ new Set()) => s.has(r.id) ? [] : (s.
|
|
|
401
402
|
const s = e.find((a) => a.id === n.destinationNodeId);
|
|
402
403
|
return s || null;
|
|
403
404
|
};
|
|
404
|
-
async function
|
|
405
|
+
async function Ht(t, e, r, n) {
|
|
405
406
|
const s = t ? "true" : "false", a = n.find(
|
|
406
407
|
(o) => o.sourceNodeHandle === s && o.sourceNodeId === e
|
|
407
408
|
);
|
|
408
409
|
return r.find((o) => o.id === (a == null ? void 0 : a.destinationNodeId));
|
|
409
410
|
}
|
|
410
|
-
const z = ht("experience-instance"),
|
|
411
|
+
const z = ht("experience-instance"), jt = it(
|
|
411
412
|
({
|
|
412
413
|
client: t,
|
|
413
414
|
experience: e,
|
|
414
415
|
target: r
|
|
415
416
|
}) => {
|
|
416
|
-
const n =
|
|
417
|
+
const n = O(), s = O(), a = O(), o = O(), c = O(), d = O(), y = e.componentStore, k = z.store("transitioning"), $ = t.history.entriesStore.map((i) => i.filter((f) => f.experienceId === e.id)), P = $.map((i) => i.filter((f) => j(f.node))), x = $.map((i) => {
|
|
417
418
|
var f;
|
|
418
419
|
return ((f = i[i.length - 1]) == null ? void 0 : f.node) || null;
|
|
419
420
|
}), u = C(
|
|
@@ -423,39 +424,39 @@ const z = ht("experience-instance"), Ht = it(
|
|
|
423
424
|
), S = C(
|
|
424
425
|
e.treeStore,
|
|
425
426
|
x,
|
|
426
|
-
({ nodes: i, edges: f }, l) => l ?
|
|
427
|
+
({ nodes: i, edges: f }, l) => l ? Pt(i, f, l) : []
|
|
427
428
|
), v = C(
|
|
428
429
|
e.treeStore,
|
|
429
430
|
x,
|
|
430
|
-
({ nodes: i, edges: f }, l) => l ?
|
|
431
|
+
({ nodes: i, edges: f }, l) => l ? Ct(i, f, l) : [-1, -1]
|
|
431
432
|
), T = C(
|
|
432
433
|
e.treeStore,
|
|
433
434
|
x,
|
|
434
|
-
({ nodes: i, edges: f }, l) => l ?
|
|
435
|
-
), A = z.store(!1),
|
|
435
|
+
({ nodes: i, edges: f }, l) => l ? Rt(i, f, l) : [-1, -1]
|
|
436
|
+
), A = z.store(!1), F = ot(A, {
|
|
436
437
|
open: () => !0,
|
|
437
438
|
close: () => !1,
|
|
438
439
|
toggle: (i) => !i,
|
|
439
440
|
set: (i, f) => f
|
|
440
441
|
}), pt = M(async () => {
|
|
441
442
|
t.history.back({ experienceId: e.id });
|
|
442
|
-
}), gt =
|
|
443
|
+
}), gt = _({
|
|
443
444
|
source: e.treeStore,
|
|
444
445
|
effect: async (i, f) => {
|
|
445
446
|
const l = i.nodes.find((w) => j(w) && w.stepId === f);
|
|
446
447
|
l && t.history.push({ experienceId: e.id, node: l });
|
|
447
448
|
}
|
|
448
|
-
}), J =
|
|
449
|
+
}), J = _({
|
|
449
450
|
source: x,
|
|
450
451
|
effect: (i) => {
|
|
451
452
|
}
|
|
452
|
-
}),
|
|
453
|
+
}), U = _({
|
|
453
454
|
source: e.treeStore,
|
|
454
455
|
effect: async ({ nodes: i }) => dt(i)
|
|
455
|
-
}),
|
|
456
|
+
}), V = _({
|
|
456
457
|
source: e.treeStore,
|
|
457
458
|
effect: async ({ nodes: i, edges: f }, l) => X(l, i, f)
|
|
458
|
-
}), q =
|
|
459
|
+
}), q = _({
|
|
459
460
|
source: e.treeStore,
|
|
460
461
|
effect: async ({ nodes: i, edges: f, conditionals: l }, w) => {
|
|
461
462
|
if (!w)
|
|
@@ -464,9 +465,9 @@ const z = ht("experience-instance"), Ht = it(
|
|
|
464
465
|
if (!L)
|
|
465
466
|
return;
|
|
466
467
|
const E = w.id, h = await et(t, L.condition);
|
|
467
|
-
return
|
|
468
|
+
return Ht(!!h, E, i, f);
|
|
468
469
|
}
|
|
469
|
-
}), Q =
|
|
470
|
+
}), Q = _({
|
|
470
471
|
source: e.treeStore,
|
|
471
472
|
effect: async ({ nodes: i, edges: f }, l) => {
|
|
472
473
|
if (!l || !rt(l))
|
|
@@ -503,46 +504,46 @@ const z = ht("experience-instance"), Ht = it(
|
|
|
503
504
|
} catch (E) {
|
|
504
505
|
I("warn", `Action '${w}' failed:`, E);
|
|
505
506
|
const h = f.find(
|
|
506
|
-
(
|
|
507
|
+
(W) => W.sourceNodeId === l.id && W.sourceNodeHandle === "false"
|
|
507
508
|
);
|
|
508
509
|
if (!h)
|
|
509
510
|
return I("warn", `No 'false' edge found for action node ${l.id}`), null;
|
|
510
|
-
const b = i.find((
|
|
511
|
+
const b = i.find((W) => W.id === h.destinationNodeId);
|
|
511
512
|
return I("info", `Action '${w}' failed, moving to node ${b == null ? void 0 : b.id}`), b || null;
|
|
512
513
|
}
|
|
513
514
|
}
|
|
514
515
|
}), mt = M((i) => {
|
|
515
516
|
if (i)
|
|
516
517
|
return t.launchExperienceById(i.experienceId);
|
|
517
|
-
}), Y =
|
|
518
|
+
}), Y = _({
|
|
518
519
|
source: [x, e.treeStore],
|
|
519
520
|
effect: async ([i, { nodes: f, edges: l }]) => X(i, f, l)
|
|
520
|
-
}), R =
|
|
521
|
+
}), R = _({
|
|
521
522
|
source: [x, e.treeStore],
|
|
522
523
|
effect: async ([i, { nodes: f, edges: l }]) => X(i, f, l)
|
|
523
524
|
}), St = M((i) => {
|
|
524
525
|
t.history.push({ experienceId: e.id, node: i });
|
|
525
|
-
}), Z =
|
|
526
|
+
}), Z = _({
|
|
526
527
|
source: e.configStore,
|
|
527
528
|
effect: async ({ initializeOpenLogic: i }) => At(i) ? !!await et(t, i) : i ?? !1
|
|
528
529
|
});
|
|
529
530
|
return yt({
|
|
530
531
|
source: x,
|
|
531
|
-
match: (i) => i ?
|
|
532
|
+
match: (i) => i ? Lt(i) ? "condition" : j(i) ? "step" : Dt(i) ? "launchExperience" : nt(i) ? "origin" : rt(i) ? "action" : "other" : "none",
|
|
532
533
|
cases: {
|
|
533
|
-
none:
|
|
534
|
-
origin:
|
|
534
|
+
none: U,
|
|
535
|
+
origin: V,
|
|
535
536
|
condition: q,
|
|
536
537
|
step: J,
|
|
537
538
|
launchExperience: mt,
|
|
538
539
|
action: Q,
|
|
539
|
-
__:
|
|
540
|
+
__: O()
|
|
540
541
|
}
|
|
541
542
|
}), m({
|
|
542
543
|
clock: [
|
|
543
544
|
q.doneData,
|
|
544
|
-
W.doneData,
|
|
545
545
|
V.doneData,
|
|
546
|
+
U.doneData,
|
|
546
547
|
R.doneData,
|
|
547
548
|
Y.doneData,
|
|
548
549
|
Q.doneData
|
|
@@ -585,8 +586,8 @@ const z = ht("experience-instance"), Ht = it(
|
|
|
585
586
|
}), m({ clock: o, target: gt }), m({
|
|
586
587
|
source: C([
|
|
587
588
|
q.pending,
|
|
588
|
-
W.pending,
|
|
589
589
|
V.pending,
|
|
590
|
+
U.pending,
|
|
590
591
|
R.pending
|
|
591
592
|
]),
|
|
592
593
|
fn: (i) => i.some(Boolean) ? "transitioning" : "ready",
|
|
@@ -644,10 +645,10 @@ const z = ht("experience-instance"), Ht = it(
|
|
|
644
645
|
stateStore: k,
|
|
645
646
|
// open close
|
|
646
647
|
isOpenStore: A,
|
|
647
|
-
open:
|
|
648
|
-
close:
|
|
649
|
-
toggleOpen:
|
|
650
|
-
setOpen:
|
|
648
|
+
open: F.open,
|
|
649
|
+
close: F.close,
|
|
650
|
+
toggleOpen: F.toggle,
|
|
651
|
+
setOpen: F.set,
|
|
651
652
|
// nodes
|
|
652
653
|
treeStore: e.treeStore,
|
|
653
654
|
currentNodeStore: x,
|
|
@@ -663,11 +664,11 @@ const z = ht("experience-instance"), Ht = it(
|
|
|
663
664
|
};
|
|
664
665
|
}
|
|
665
666
|
);
|
|
666
|
-
function
|
|
667
|
-
return st(
|
|
667
|
+
function Wt(t) {
|
|
668
|
+
return st(jt, t);
|
|
668
669
|
}
|
|
669
670
|
const Gt = it(({ client: t }) => {
|
|
670
|
-
const e = z.store({}), r =
|
|
671
|
+
const e = z.store({}), r = O(), n = O(), s = O(), a = ot(e, {
|
|
671
672
|
register(u, S) {
|
|
672
673
|
const v = [
|
|
673
674
|
...u[S.experienceId] ?? []
|
|
@@ -680,7 +681,7 @@ const Gt = it(({ client: t }) => {
|
|
|
680
681
|
unregister(u, S) {
|
|
681
682
|
var A;
|
|
682
683
|
const v = S.experienceId, T = (A = u[v]) == null ? void 0 : A.filter(
|
|
683
|
-
(
|
|
684
|
+
(F) => F !== S
|
|
684
685
|
);
|
|
685
686
|
return {
|
|
686
687
|
...u,
|
|
@@ -688,7 +689,7 @@ const Gt = it(({ client: t }) => {
|
|
|
688
689
|
};
|
|
689
690
|
}
|
|
690
691
|
}), o = M(
|
|
691
|
-
({ experience: u, target: S }) =>
|
|
692
|
+
({ experience: u, target: S }) => Wt({ client: t, experience: u, target: S })
|
|
692
693
|
), c = M((u) => {
|
|
693
694
|
a.register(u);
|
|
694
695
|
}), d = M(
|
|
@@ -721,11 +722,11 @@ const Gt = it(({ client: t }) => {
|
|
|
721
722
|
);
|
|
722
723
|
return;
|
|
723
724
|
}
|
|
724
|
-
const A =
|
|
725
|
+
const A = Ot(T);
|
|
725
726
|
try {
|
|
726
727
|
v.render(A, S.component, t, u);
|
|
727
|
-
} catch (
|
|
728
|
-
I("error",
|
|
728
|
+
} catch (F) {
|
|
729
|
+
I("error", F);
|
|
729
730
|
}
|
|
730
731
|
});
|
|
731
732
|
m({
|
|
@@ -751,7 +752,7 @@ const Gt = it(({ client: t }) => {
|
|
|
751
752
|
clock: n,
|
|
752
753
|
target: k
|
|
753
754
|
});
|
|
754
|
-
function
|
|
755
|
+
function $(u, S) {
|
|
755
756
|
r({ experience: u, target: S });
|
|
756
757
|
}
|
|
757
758
|
const P = e.map((u) => Object.values(u).flat());
|
|
@@ -759,23 +760,23 @@ const Gt = it(({ client: t }) => {
|
|
|
759
760
|
return e.map((S) => S[u] || [], { skipVoid: !1 });
|
|
760
761
|
}
|
|
761
762
|
return {
|
|
762
|
-
spawn:
|
|
763
|
+
spawn: $,
|
|
763
764
|
getByExperienceId: x,
|
|
764
765
|
listStore: P
|
|
765
766
|
};
|
|
766
767
|
});
|
|
767
|
-
function
|
|
768
|
+
function Zt(t) {
|
|
768
769
|
return st(Gt, t);
|
|
769
770
|
}
|
|
770
771
|
export {
|
|
771
772
|
j as a,
|
|
772
|
-
|
|
773
|
-
|
|
774
|
-
|
|
773
|
+
Zt as b,
|
|
774
|
+
Qt as c,
|
|
775
|
+
zt as d,
|
|
775
776
|
et as e,
|
|
776
|
-
|
|
777
|
-
|
|
778
|
-
|
|
777
|
+
Ft as f,
|
|
778
|
+
Jt as g,
|
|
779
|
+
Wt as h,
|
|
779
780
|
At as i,
|
|
780
|
-
|
|
781
|
+
Yt as t
|
|
781
782
|
};
|
|
@@ -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;sBAwM5B,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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dom.d.ts","sourceRoot":"","sources":["../../../src/utils/dom.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,mCAAmC,CAAA;AAGzE,wBAAgB,aAAa,CAAC,QAAQ,EAAE,MAAM,GAAG,WAAW,EAAE,CAQ7D;
|
|
1
|
+
{"version":3,"file":"dom.d.ts","sourceRoot":"","sources":["../../../src/utils/dom.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,mCAAmC,CAAA;AAGzE,wBAAgB,aAAa,CAAC,QAAQ,EAAE,MAAM,GAAG,WAAW,EAAE,CAQ7D;AAID,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,WAAW,GAAG,UAAU,CAMhE;AAED,wBAAgB,cAAc,IAAI,OAAO,CAAC,IAAI,CAAC,CAa9C;AAED,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,IAAI,QAS1E;AAED,KAAK,SAAS,GAAG,SAAS,GAAG,QAAQ,GAAG,OAAO,GAAG,SAAS,GAAG,QAAQ,CAAA;AAOtE,wBAAgB,iBAAiB,CAC/B,OAAO,EAAE;IAAE,QAAQ,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,SAAS,CAAA;CAAE,EAAE,EACrD,YAAY,EAAE,MAAM,GACnB,CAAC,gBAAgB,GAAG;IAAE,QAAQ,EAAE,WAAW,EAAE,CAAA;CAAE,CAAC,EAAE,CAqBpD;AAED,wBAAgB,cAAc,CAC5B,OAAO,EAAE,CAAC,gBAAgB,GAAG;IAAE,QAAQ,EAAE,WAAW,EAAE,CAAA;CAAE,CAAC,EAAE,EAC3D,YAAY,EAAE,MAAM,iBAOrB;AAGD,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,QAG1E;AAED,wBAAgB,cAAc,CAAC,OAAO,EAAE,WAAW,EAAE,YAAY,CAAC,EAAE,MAAM,WAMzE;AAED,wBAAgB,YAAY,CAAC,OAAO,EAAE,WAAW,EAAE,YAAY,CAAC,EAAE,MAAM,WAMvE;AAED,wBAAgB,gBAAgB,CAAC,YAAY,EAAE,MAAM,kBAMpD;AAED,wBAAgB,iBAAiB,CAC/B,MAAM,EAAE,WAAW,GAAG,QAAQ,EAC9B,SAAS,EAAE,SAAS,EACpB,YAAY,EAAE,MAAM,eA+BrB"}
|
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;
|