@picked/client 0.0.1-dev.1767659629925 → 0.0.1-dev.1767832235641
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 +2 -2
- package/dist/cjs/plugins/data-layer/index.js +1 -0
- package/dist/esm/index.js +254 -899
- package/dist/esm/plugins/data-layer/index.js +137 -0
- package/dist/esm/plugins/single-page-app/index.js +3 -3
- package/dist/esm/plugins/web-components/index.js +1 -1
- package/dist/esm/plugins/window-object/index.js +1 -1
- package/dist/esm/server/index.js +7 -7
- package/dist/{experience-instance-C4INDX6a.js → experience-instance-Du9C8zgX.js} +7 -7
- package/dist/{supports-BjhuLJ8z.js → supports-DBMT17KZ.js} +10 -10
- package/dist/types/plugins/data-layer/index.d.ts +2 -0
- package/dist/types/plugins/data-layer/index.d.ts.map +1 -0
- package/dist/types/plugins/data-layer/plugin.d.ts +75 -0
- package/dist/types/plugins/data-layer/plugin.d.ts.map +1 -0
- package/dist/types/utils/events.d.ts +11 -1
- package/dist/types/utils/events.d.ts.map +1 -1
- package/dist/user-session-C2bE4Lvn.cjs +1 -0
- package/dist/user-session-C7d13-Tp.js +673 -0
- package/package.json +7 -1
package/dist/cjs/index.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
"use strict";var N=Object.defineProperty;var V=(t,e,r)=>e in t?N(t,e,{enumerable:!0,configurable:!0,writable:!0,value:r}):t[e]=r;var h=(t,e,r)=>V(t,typeof e!="symbol"?e+"":e,r);Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const f=require("effector"),S=require("@withease/factories"),b=require("../experience-instance-DjjpHk0t.cjs"),F=require("../logger-BsmHUUw1.cjs"),w=require("../storage-YlR83AWP.cjs"),_=require("../id-BKIWbSTy.cjs"),q=require("../object-BbFTsGh3.cjs"),k=require("../supports-YvpQZxbh.cjs"),U=f.createDomain("experience"),K=S.createFactory(({client:t,experience:e})=>{const r=U.store(e),n=f.createApi(r,{merge(c,m){return{...c,...m.experience}}}),i=r.map(c=>({name:c.name,decisionLogic:c.condition??c.decide,targetSelectors:c.targets,initializeOpenLogic:e.initializeOpen})),a=t.components.listStore.map(c=>c.find(m=>m.name===`experience:${e.id}`)||c.find(m=>m.name==="experience"),{skipVoid:!1}),s=r.map(c=>({steps:c.steps,nodes:c.nodes,edges:c.edges,conditionals:c.conditionals})),o=e.actions??[];return{id:e.id,configStore:i,treeStore:s,componentStore:a,actions:o,merge:n.merge}});function W(t){return S.invoke(K,t)}const H=S.createFactory(({client:t})=>{const e=U.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 c=W({client:t,experience:s});r.register(c)}const i=e.map(s=>Object.values(s));function a(s){return e.map(o=>o[s],{skipVoid:!1})}return{register:n,getById:a,listStore:i}});function G(t){return S.invoke(H,t)}const Y=(t,e)=>{e.register(t)},L=(t,e)=>{const{targetSelectors:r}=e.configStore.getState(),n=b.getTargetElements(r,e.id);n.forEach(({elements:a})=>a.forEach(s=>b.tagTargetElement(s,e.id))),b.createAppHosts(n,e.id).forEach(a=>{t.experienceInstances.spawn(e,a)})},$=async t=>{await Promise.all(t.experiences.listStore.getState().map(async e=>{await J(t,e)&&L(t,e)}))},J=async(t,e)=>{const{decisionLogic:r,targetSelectors:n}=e.configStore.getState();return b.getTargetElements(n,e.id).length<1||n.length===0?!1:r&&b.isRulesLogic(r)?await b.evaluateRuleLogic(t,r)===!0:!0},Q=(t,e,r)=>{const n=e.name,i=e.setup(t);if(i){const a=r[n]??{};r[n]=Object.freeze({...a,...i})}},X=f.createDomain("component"),Z=S.createFactory(({client:t,component:e,name:r})=>{const n=t.frameworks.getByName(e.frameworkName);return{name:r,component:e,frameworkStore:n}});function ee(t){return S.invoke(Z,t)}const te=S.createFactory(({client:t})=>{const e=X.store({}),r=f.createApi(e,{register(s,o){return{...s,[o.name]:o}}});function n(s,o){e.getState()[s]&&F.logger("warn",`Component '${s}' already registered. Registering again will override the previous registration.`);const m=ee({client:t,name:s,component:o});r.register(m)}const i=e.map(s=>Object.values(s));function a(s){return e.map(o=>o[s],{skipVoid:!1})}return{register:n,getByName:a,listStore:i}});function re(t){return S.invoke(te,t)}const B=(t,e,r)=>{r.register(t,e)},ne=f.createDomain("framework"),se=S.createFactory(({client:t})=>{const e=ne.store({}),r=f.createApi(e,{register(s,o){return{...s,[o.name]:o.framework}}});function n(s,o){e.getState()[s]&&F.logger("warn",`Framework '${s}' already registered. Registering again will override the previous registration.`),r.register({name:s,framework:o})}const i=e.map(s=>Object.values(s));function a(s){return e.map(o=>o[s],{skipVoid:!1})}return{register:n,getByName:a,listStore:i}});function ie(t){return S.invoke(se,t)}const oe=(t,e)=>{e.register(t.name,t)},ae=6e3,ce=w.createStorageKey("last_ping","global"),ue=t=>`${t}/api/v1/ping`,de=async t=>{try{const e=Date.now(),r=w.localStore.get(ce);let n=0;if(r.isSet()&&(n=r.json()??0),n&&e-n<ae)return!0;const i=ue(t.apiUrl),a={projectId:t.projectId,path:window.location.pathname},s=JSON.stringify(a),o={"Content-Type":"application/json"},c=document.getElementById("picked_script"),m=c==null?void 0:c.dataset.verceltoken;m&&(o["x-vercel-protection-bypass"]=m);const l=(await fetch(i,{method:"POST",headers:o,body:s})).ok;return l&&r.set(e),l}catch(e){return F.logger("error",e),!1}};function le(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 pe=f.createDomain("predicate"),ge=S.createFactory(({client:t})=>{const e=pe.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]&&F.logger("warn",`Predicate '${s}' already registered. Registering again will override the previous registration.`),r.register(Object.freeze({name:s,predicate:o}))}const i=e.map(s=>Object.values(s));function a(s){return e.map(o=>o[s],{skipVoid:!1})}return{register:n,getByName:a,listStore:i}});function fe(t){return S.invoke(ge,t)}const me=(t,e,r)=>{r.register(t,e)},C=f.createDomain("feature"),ye=S.createFactory(({client:t})=>{const e=C.store({}),r=C.store([]),n=f.createApi(e,{register(l,d){return{...l,[d.id]:d.feature}}});function i(l,d){e.getState()[l]&&F.logger("warn",`Feature '${l}' already registered. Registering again will override the previous registration.`);const p={id:l,feature:{...d,id:l}};n.register(Object.freeze({id:l,feature:p}))}const a=f.createEffect(async({id:l,key:d,storage:u="local"})=>{const p=w.createStorageKey(`feature:${l}:${d}`,"global"),g=(u==="session"?w.sessionStore:w.localStore).get(p).boolean();return g===null?null:{id:l,key:d,bucket:g,storage:u}}),s=f.createEffect(l=>{if(!l)return null;const d=w.createStorageKey(`feature:${l.id}:${l.key}`,"global");(l.storage==="session"?w.sessionStore:w.localStore).set(d,l.bucket)}),o=new Map,c=f.attach({source:{allFeaturesStore:e,resolvedFeaturesStore:r},effect:async({allFeaturesStore:l,resolvedFeaturesStore:d},{id:u,decide:p,key:y})=>{const g=d.find(A=>A.id===u&&A.key===y);if(g)return g;const v=l[u];if(!v)throw new Error(`Feature with id '${u}' not found`);const E=o.get(`${u}:${y}`);if(E!==void 0){const A=await E;return{id:v.id,bucket:A,key:y,storage:v.feature.storage}}const R=p();o.set(`${u}:${y}`,R);const j=await R;return{id:v.id,bucket:j,key:y,storage:v.feature.storage}}});f.sample({clock:n.register,fn:l=>{const{id:d,feature:u}=l;return{id:d,key:u.feature.key,storage:u.feature.storage}},target:a}),f.sample({source:e,clock:c.doneData,fn:(l,d)=>{var v;const{id:u,bucket:p,storage:y}=d,g=(v=l[u])==null?void 0:v.feature.key;return g?{key:g,id:u,bucket:p,storage:y}:null},target:s});const m=f.combine({allFeaturesStore:e,resolvedFeaturesStore:r}).map(({allFeaturesStore:l,resolvedFeaturesStore:d})=>Object.values(l).map(u=>{const p=d.find(y=>y.id===u.id&&y.key===u.feature.key);return p?{id:u.id,name:u.feature.name,key:u.feature.key,getBucket:()=>({id:u.id,bucket:p.bucket}),isResolved:!0}:{id:u.id,name:u.feature.name,key:u.feature.key,getBucket:async()=>await c(u.feature),isResolved:!1}}));f.sample({clock:c.doneData,source:{resolvedFeatures:r},filter:({resolvedFeatures:l},{id:d,key:u})=>!l.some(y=>y.id===d&&y.key===u),fn:(l,d)=>d,target:t.eventBus.prepend(l=>({type:"feature_decide",feature:l}))}),f.sample({clock:[a.doneData,c.doneData],source:r,fn:(l,d)=>!d||l.some(p=>p.id===d.id&&p.key===d.key)?l:[...l,d],target:r});function I(l){return e.map(d=>d[l],{skipVoid:!1})}return{register:i,getByName:I,listStore:m}});function he(t){return S.invoke(ye,t)}const Se=(t,e,r)=>{r.register(t,e)},x=f.createDomain("history");function O(t,e){return{id:_.generateId(`history-entry-${Date.now()}-${Math.random()}}`),node:e,at:Date.now(),experienceId:t}}const ke=S.createFactory(()=>{const t=x.store({entries:[]}),e=x.event(),r=x.event(),n=x.event(),i=x.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(i,(s,o)=>o);function a(s,o){const c={lastStepIndex:-1,secondLastStepIndex:-1};for(let m=s.length-1;m>=0;m--){const I=s[m],l=I==null?void 0:I.node;if(!(!l||!b.isStepNode(l))&&!(o&&(I==null?void 0:I.experienceId)!==o))if(c.lastStepIndex===-1)c.lastStepIndex=m;else{c.secondLastStepIndex=m;break}}return c}return t.on(n,(s,o)=>{const{secondLastStepIndex:c}=a(s.entries,o.experienceId),m=c!==-1?s.entries.slice(0,c+1):s.entries;return{...s,entries:m}}),{push:e,replace:r,back:n,restore:i,entriesStore:t.map(s=>s.entries)}});function ve(){return S.invoke(ke)}const we=()=>f.createEvent(),Ie=f.createDomain("field"),be=S.createFactory(()=>{const t=Ie.store({}),e=f.createApi(t,{register(o,c){return{...o,[c.field.id]:c.field}}});function r(o){e.register({field:o})}function n(o,c){const m=a(o).getState();if(!m)return;const I=Object.assign({},m,{...c});e.register({field:{...I}})}const i=t.map(o=>Object.values(o));function a(o){return t.map(c=>c[o]||null)}function s(o){return t.map(c=>Object.values(c).find(m=>m.name===o)||null)}return{register:r,update:n,getById:a,listStore:i,getByName:s}});function Fe(){return S.invoke(be)}const Ee=(t,e)=>{e.register(t)},je=f.createDomain("action"),xe=S.createFactory(()=>{const t=je.store({}),e=f.createApi(t,{register(a,s){return{...a,[s.name]:{name:s.name,action:s.action}}}});function r(a,s){e.register({name:a,action:s})}const n=t.map(a=>Object.values(a));function i(a){return t.map(s=>s[a],{skipVoid:!1})}return{register:r,getByName:i,listStore:n}});function Re(){return S.invoke(xe)}const Ae=(t,e,r)=>{r.register(t,e)};function z(t){return typeof t>"u"||t===null||t===""||Array.isArray(t)&&!t.length}const Pe=f.createDomain("response"),De=S.createFactory(({client:t})=>{const e=Pe.store({}),r=f.createEvent(),n=f.createEvent(),i=f.createApi(e,{register(d,u){return{...d,[u.fieldId]:u.response}},registerBatch(d,u){return{...d,...u}},clear(d,u){const{[u]:p,...y}=d;return y},clearAll(){return{}}});function a(d,u){i.register({fieldId:d,response:u})}async function s(d){const u=[];return await Promise.allSettled(Object.entries(d).map(async([p,y])=>{let g=y;const v=t.fields.getById(p).getState();if(!v){u.push({fieldId:p,userMessage:`Field '${p}' not found`,systemMessage:`No field with ID '${p}' exists. Available field IDs are: ${Object.keys(t.fields.listStore.getState()).join(",")}.`,value:g});return}if(v.multiple&&(typeof g=="string"||typeof g=="number"||typeof g=="boolean")&&(g=[g]),v.validation&&!q.isEmpty(v.validation)&&!z(g)){const E=await b.evaluateRuleLogic(t,v.validation,{$input:g});if(typeof E=="string"){u.push({fieldId:p,userMessage:E,systemMessage:`Field validation resulted in an error: ${E}.`,value:g});return}if(E===!1){u.push({fieldId:p,userMessage:"This field is invalid",systemMessage:"Field validation resulted in an unspecified error.",value:g});return}}if(v.required&&z(g)){u.push({fieldId:p,userMessage:"This field is required",systemMessage:"Field is required.",value:g});return}if(!v.multiple&&Array.isArray(g)&&g.length>1){u.push({fieldId:p,userMessage:"This field expects a single response",systemMessage:"Field expects a single response.",value:g});return}if(v.options){const E=v.options.map(j=>j.value),R=Array.isArray(g)?g:[g];Array.isArray(g)&&(R.every(j=>E.includes(j))||u.push({fieldId:p,userMessage:"This field expects a valid option",systemMessage:`Field expects a valid option. Valid options are: ${E.join(", ")}`,value:g}))}})),{responsesToCommit:d,validationErrors:u}}async function o(d){const{responsesToCommit:u,validationErrors:p}=await s(d);return p.length?{errors:p}:(i.registerBatch(u),{errors:[]})}const c=e.map(d=>d),m=e.map(d=>Object.keys(d).map(p=>({fieldId:p,value:d[p]})));function I(d){const u=t.fields.getById(d),p=e.map(y=>y[d]||null);return f.combine({f:u,r:p},({f:y,r:g})=>g||(y!=null&&y.defaultValue?y.defaultValue:null))}function l(d){const u=t.fields.getByName(d);return f.combine({f:u,s:e},({f:p,s:y})=>{const g=p&&y[p.id]||null;return g||(p!=null&&p.defaultValue?p.defaultValue:null)})}return f.sample({clock:r,target:i.clearAll}),f.sample({clock:n,target:i.clear}),{register:a,clearAll:r,clear:n,commit:o,getResponsesToCommit:s,listStore:m,getAllStore:c,getByFieldId:I,getByFieldName:l}});function $e(t){return S.invoke(De,t)}const Be=()=>"0.0.1-dev.1767659629925";function Ce(){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 Oe(){if(!k.supportsWindow())return{};const t=new URLSearchParams(window.location.search),e={},r=new Set;for(const[i]of t.entries())i.startsWith("picked-")&&r.add(i);for(const i of r){const a=i.replace("picked-","");e[a]=t.getAll(i)}const n=w.createStorageKey("s");if(r.size>0)w.sessionStore.set(n,e);else{const i=w.sessionStore.get(n);if(i)return i.json()||{}}return e}function ze(){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 Ue=w.createStorageKey("session","global"),Le=()=>{const t=w.localStore.get(Ue);let e;t.isSet()&&(e=t.json());const r=i=>t.set({id:i.id,isUser:i.isUser,identifiers:i.identifiers}),n={id:(e==null?void 0:e.id)??ze(),isUser:(e==null?void 0:e.isUser)??void 0,identifiers:(e==null?void 0:e.identifiers)??void 0,setIsUser(i){this.isUser=i,r(this)},setIdentifier(i,a){this.identifiers={...this.identifiers,[i]:a},r(this)},removeIdentifier(i){this.identifiers&&(this.identifiers=Object.fromEntries(Object.entries(this.identifiers).filter(([a])=>a!==i)),this.identifiers=Object.keys(this.identifiers).length?this.identifiers:void 0,r(this))}};return r(n),n},Me=()=>k.supportsLocalStorage()?Le():null;function M(){if(k.supportsWindow())return globalThis.window.pickedConfig}function Te(){if(!k.supportsWindow())return;const t=M(),e=t==null?void 0:t.organizationId,r=t==null?void 0:t.projectId;return e&&r?{organizationId:e,projectId:r}:void 0}function Ne(){if(!k.supportsDocument())return;const t=document.getElementById("picked_script")||document.querySelector("script#picked")||document.getElementById("cvly");if(!t)return;const e=t.dataset.organizationid||t.getAttribute("organization-id"),r=t.dataset.projectid||t.getAttribute("project-id");return e&&r?{organizationId:e,projectId:r}:void 0}function Ve(t){const{organizationId:e,projectId:r}=t;if(e&&r)return{organizationId:e,projectId:r};const n=Te();if(n)return n;const i=Ne();if(i)return i;throw new Error(`organizationId and projectId are required. You can provide them via one of:
|
|
1
|
+
"use strict";var P=Object.defineProperty;var k=(e,t,i)=>t in e?P(e,t,{enumerable:!0,configurable:!0,writable:!0,value:i}):e[t]=i;var s=(e,t,i)=>k(e,typeof t!="symbol"?t+"":t,i);Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const c=require("../user-session-C2bE4Lvn.cjs"),f=require("../logger-BsmHUUw1.cjs"),u=require("../experience-instance-DjjpHk0t.cjs"),b=require("effector"),a=require("../supports-YvpQZxbh.cjs"),l=require("../storage-YlR83AWP.cjs"),j=(e,t,i)=>{const o=t.name,n=t.setup(e);if(n){const r=i[o]??{};i[o]=Object.freeze({...r,...n})}};function E(e){const t=typeof window<"u",i={client:e,responses:e.responses.listStore.getState(),fields:e.fields.listStore.getState(),location:t?window.location:void 0,document:t?window.document:void 0,sessionStorage:t?window.sessionStorage:void 0,localStorage:t?window.localStorage:void 0};return Object.freeze(i)}const C=()=>b.createEvent(),v=()=>"0.0.1-dev.1767832235641";function x(){if(a.supportsDocument()){const e=[document.currentScript,document.getElementById("picked_script"),document.getElementById("picked"),document.getElementById("cvly"),document.getElementById("cvly-x")];for(const t of e)if(t!=null&&t.dataset.api)return t.dataset.api}return"https://api.picked.app"}function z(){if(!a.supportsWindow())return{};const e=new URLSearchParams(window.location.search),t={},i=new Set;for(const[n]of e.entries())n.startsWith("picked-")&&i.add(n);for(const n of i){const r=n.replace("picked-","");t[r]=e.getAll(n)}const o=l.createStorageKey("s");if(i.size>0)l.sessionStore.set(o,t);else{const n=l.sessionStore.get(o);if(n)return n.json()||{}}return t}function S(){if(a.supportsWindow())return globalThis.window.pickedConfig}function A(){if(!a.supportsWindow())return;const e=S(),t=e==null?void 0:e.organizationId,i=e==null?void 0:e.projectId;return t&&i?{organizationId:t,projectId:i}:void 0}function R(){if(!a.supportsDocument())return;const e=document.getElementById("picked_script")||document.querySelector("script#picked")||document.getElementById("cvly");if(!e)return;const t=e.dataset.organizationid||e.getAttribute("organization-id"),i=e.dataset.projectid||e.getAttribute("project-id");return t&&i?{organizationId:t,projectId:i}:void 0}function F(e){const{organizationId:t,projectId:i}=e;if(t&&i)return{organizationId:t,projectId:i};const o=A();if(o)return o;const n=R();if(n)return n;throw new Error(`organizationId and projectId are required. You can provide them via one of:
|
|
2
2
|
(1) createClient({ organizationId, projectId }) options;
|
|
3
3
|
(2) window.pickedConfig = { organizationId, projectId };
|
|
4
|
-
(3) a <script> tag with id 'picked_script', 'picked', or 'cvly' that includes data-organizationid/data-projectid (or organization-id/project-id) attributes.`)}function
|
|
4
|
+
(3) a <script> tag with id 'picked_script', 'picked', or 'cvly' that includes data-organizationid/data-projectid (or organization-id/project-id) attributes.`)}function g(e){return e==null||e===""||Number.isNaN(e)}const B={default:(e,t)=>g(e)?String(t??""):String(e),append:(e,t)=>t&&!g(e)?`${e} ${t}`:e,prepend:(e,t)=>t&&!g(e)?`${t} ${e}`:e,upper:e=>typeof e=="string"?e.toUpperCase():e,lower:e=>typeof e=="string"?e.toLowerCase():e,capitalize:e=>typeof e=="string"?e.charAt(0).toUpperCase()+e.slice(1):e,list:e=>{if(!e||typeof e!="object")return e;const t=new Intl.ListFormat("en",{style:"long",type:"conjunction"});if(Array.isArray(e))return t.format(e.map(String));if(e instanceof Map){const i=Array.from(e.entries()).map(([o,n])=>`${o}: ${n}`);return t.format(i)}return e instanceof Set?t.format(Array.from(e).map(String)):e}};function L(e){return typeof e=="object"&&e!==null}function U(e,t){let i=t;for(const o of e.split("."))if(L(i)&&o in i)i=i[o];else return;return typeof i=="function"?i():i}function $(e,t){const i=e.split("|").map(r=>r.trim()),o=i.shift()??"";let n=U(o,t);for(const r of i){const[d,...m]=r.split(":"),p=(d==null?void 0:d.trim())??"",y=m.join(":").trim().replaceAll(/(?:^['"]|['"]$)/g,""),I=B[p];I&&(n=I(n,y))}return g(n)?"":typeof n=="object"?JSON.stringify(n):String(n)}function O(e,t){let i="",o=0;for(;o<e.length;)if(e[o]==="{"&&e[o+1]==="{"){o+=2;let n="";for(;o<e.length;){if(e[o]==="}"&&e[o+1]==="}"){o+=2;break}n+=e[o++]}i+=$(n.trim(),t)}else i+=e[o++];return i}class h{constructor(t){s(this,"options");s(this,"isReady",!1);s(this,"project");s(this,"plugins",{});s(this,"eventBus",C());s(this,"organizationId");s(this,"projectId");s(this,"apiUrl");s(this,"session");s(this,"precondition");s(this,"condition");s(this,"searchParams",z());s(this,"history",c.createHistory());s(this,"components",c.createComponentIndex({client:this}));s(this,"experienceInstances",u.createExperienceInstanceIndex({client:this}));s(this,"experiences",c.createExperienceIndex({client:this}));s(this,"frameworks",c.createFrameworkIndex({client:this}));s(this,"predicates",c.createPredicateIndex({client:this}));s(this,"features",c.createFeatureIndex({client:this}));s(this,"responses",c.createResponseIndex({client:this}));s(this,"fields",c.createFieldIndex());s(this,"actions",c.createActionIndex());s(this,"renderString",(t,i)=>{const o=this.responses.listStore.getState().reduce((n,r)=>(n[r.fieldId]=r.value,n),{});return O(t,{...i,responses:o})});f.logger("info","Picked client initializing.");const{organizationId:i,projectId:o}=F(t);this.organizationId=i,this.projectId=o,this.options=Object.freeze(t),this.apiUrl=t.apiUrl||x(),this.session=c.initialiseSession(),this.setupPlugins(),this.setupFeatures(),this.setupPredicates(),this.setupActions(),this.precondition=t.precondition,this.condition=t.condition,this.eventBus({type:"load",version:v()}),f.logger("info","Picked client initialized.")}start(){c.ping(this),(async()=>{if(!a.supportsDocument())return;let i;typeof this.precondition>"u"?i=!0:typeof this.precondition=="boolean"?i=this.precondition:i=await u.evaluateRuleLogic(this,this.precondition)===!0;let o;i&&(this.condition===void 0?o=!0:typeof this.condition=="boolean"?o=this.condition:o=await u.evaluateRuleLogic(this,this.condition)===!0);const n=i&&o===!0;if(typeof o=="boolean"&&this.session){const r=o;this.session.setIsUser(r),this.eventBus({type:"user_decide",is_user:r})}this.eventBus({type:"initialize"}),document.body&&n&&c.initialiseExperiences(this),await u.domInteractive(),n&&c.initialiseExperiences(this),this.eventBus({type:"ready"}),this.isReady=!0,this.session&&this.eventBus({type:"session",...this.session})})()}registerFramework(t){c.setupFramework(t,this.frameworks)}registerComponent(t,i){c.setupComponent(t,i,this.components)}registerPlugin(t){j(this,t,this.plugins)}registerFeature(t,i){c.setupFeature(t,i,this.features)}registerPredicate(t,i){c.setupPredicate(t,i,this.predicates)}registerField(t){c.setupField(t,this.fields)}registerAction(t,i){c.setupAction(t,i,this.actions)}registerExperience(t){t.component&&c.setupComponent(`experience:${t.id}`,t.component,this.components),c.setupExperience(t,this.experiences)}getStateSnapshot(){return E(this)}async launchExperienceById(t){const i=this.experiences.getById(t).getState();if(!i){f.logger("warn",`Experience with id '${t}' not found.`);return}c.initialiseExperience(this,i)}setupPlugins(){var t;(t=this.options.plugins)==null||t.forEach(i=>{if(Array.isArray(i)){i.forEach(n=>{this.registerPlugin(n)});return}const o=typeof i=="function"?i():i;if(Array.isArray(o)){o.forEach(n=>this.registerPlugin(n));return}this.registerPlugin(o)})}setupFeatures(){const t=this.options.features;t&&(Object.entries(t).forEach(([i,o])=>{const n=typeof o=="function"?o():o;this.registerFeature(i,n)}),this.searchParams.feature&&this.searchParams.feature.forEach(i=>{try{const[o,n]=i.split(":");if(!o||!n)return;let r=n;r==="true"&&(r=!0),r==="false"&&(r=!1),this.registerFeature(o,{key:`${r}`,name:o,decide:()=>r,storage:"session"})}catch{}}))}setupPredicates(){const t=this.options.predicates;t&&Object.entries(t).forEach(([i,o])=>{if(typeof o!="function"){f.logger("warn",`Predicate "${i}" is not a function.`);return}this.registerPredicate(i,o)})}setupActions(){const t=this.options.actions;t&&Object.entries(t).forEach(([i,o])=>{if(typeof o!="function"){f.logger("warn",`Action "${i}" is not a function.`);return}this.registerAction(i,o)})}getPluginConfig(t){return this.plugins[t]??{}}}s(h,"logger",f.logger);function w(e){var t;return((t=e.options)==null?void 0:t.some(i=>"condition"in i))??!1}function W(e){return e.some(t=>t.condition||w(t))}async function q(e,t){return t.length===0||!W(t)?t:(await Promise.all(t.map(async o=>{if(!(o.condition?await u.evaluateRuleLogic(e,o.condition):!0))return null;if(!o.options||!w(o))return o;const d=(await Promise.all(o.options.map(async p=>p.condition?await u.evaluateRuleLogic(e,p.condition)?p:null:p))).filter(p=>p!==null);return d.length===o.options.length?o:d.length===0?null:{...o,options:d}}))).filter(o=>o!==null)}const D=e=>{const t=new h(e);return a.bindClient(t),t};exports.evaluateRuleLogic=u.evaluateRuleLogic;exports.isPickedRoot=u.isPickedRoot;exports.supportsCookies=a.supportsCookies;exports.supportsCryptoRandomUUID=a.supportsCryptoRandomUUID;exports.supportsDocument=a.supportsDocument;exports.supportsHistory=a.supportsHistory;exports.supportsIntersectionObserver=a.supportsIntersectionObserver;exports.supportsLocalStorage=a.supportsLocalStorage;exports.supportsLocation=a.supportsLocation;exports.supportsSessionStorage=a.supportsSessionStorage;exports.supportsShadowRoot=a.supportsShadowRoot;exports.supportsWebComponents=a.supportsWebComponents;exports.supportsWindow=a.supportsWindow;exports.createStorageKey=l.createStorageKey;exports.localStore=l.localStore;exports.sessionStore=l.sessionStore;exports.subscribe=l.subscribe;exports.Picked=h;exports.createClient=D;exports.getPickedConfig=S;exports.getStepFields=q;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const c=require("effector");require("../../../user-session-C2bE4Lvn.cjs");const k=require("../../../supports-YvpQZxbh.cjs");require("../../../experience-instance-DjjpHk0t.cjs");const v="development",I=["experience_open","experience_close","experience_initialize","experience_complete","recommendation_present","initialize","step_enter","step_submit","experience_interaction"];function _(e){if(!k.supportsWindow())return;const t=[];globalThis.dataLayer=globalThis.dataLayer??t,globalThis.dataLayer.push(e)}const b=()=>sessionStorage.getItem("cvly_env");function y(e){const t=e?"true":"false";document.cookie=`picked-user=${t}; path=/; max-age=31536000; samesite=none; secure`}function P(e){document.cookie=`picked-id=${e}; path=/; max-age=31536000; samesite=none; secure`}const T=(e,t)=>e.filter(r=>!!(t==null?void 0:t.fieldIds.includes(r.fieldId)));function w(e){return e.isResolved}const B=e=>e.flatMap(t=>{if(!w(t))return[];const{id:r,key:s,name:o}=t,{bucket:u}=t.getBucket();return[{name:o,key:s,feature:r,bucket:u}]}),q=e=>{if("experience"in e&&e.experience){const{experience:t}=e;return{id:t.id,title:t.configStore.getState().name}}if("experienceInstance"in e&&e.experienceInstance){const{experienceInstance:t}=e;return{id:t.experienceId,title:t.configStore.getState().name}}},l=c.createEvent(),D=({featureWatchList:e=["convincely-enabled"],eventListOverride:t=I,eventMappingOverride:r}={})=>({name:"data-layer-plugin",setup:s=>{if(!k.supportsWindow())return;const{organizationId:o,projectId:u}=s,a=b();s.eventBus.watch(n=>{n.type==="user_decide"&&y(n.is_user),n.type==="session"&&P(n.id)});const m=c.attach({source:{responses:s.responses.listStore,features:s.features.listStore},effect:async({responses:n,features:p},i)=>{var f;const{type:d}=i,h=q(i),L="step"in i?T(n,i.step):void 0,E={event:"picked_event",picked_action:r?r[d]:d,picked_app:{organizationId:o,projectId:u},picked_feature_list:B(p),picked_environment:v,picked_step:"step"in i?i.step:void 0,picked_form:"form"in i?i.form:void 0,picked_exception:"exception"in i?(f=i.exception.reason)==null?void 0:f[0]:void 0,picked_experience:h,picked_responses:L,picked_cvly_env:a,picked_value:"value"in i?i.value:void 0,picked_item:void 0};return _(E)}}),g=c.createEffect(n=>{if(!("feature"in n))return null;const p={event:"picked_event",picked_action:"picked_decision",picked_app:{organizationId:o,projectId:u},picked_feature_list:void 0,picked_environment:v,picked_value:`${n.feature.id}:${n.feature.bucket}`,picked_step:void 0,picked_form:void 0,picked_experience:void 0,picked_responses:void 0,picked_cvly_env:a};return _(p)});c.sample({clock:l,target:s.eventBus});const x=new Set(t);c.sample({clock:s.eventBus,filter:n=>x.has(n.type),target:m});const S=new Set(e);c.sample({source:s.eventBus,filter:n=>n.type==="feature_decide"&&S.has(n.feature.id),target:g})}});exports.dataLayerPlugin=D;exports.pushToDataLayerEvent=l;
|