@picked/client 0.0.12-next.14 → 0.0.12-next.2
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/plugins/create-experience/index.js +1 -1
- package/dist/cjs/plugins/shopify/index.js +1 -1
- package/dist/cjs/server/index.js +1 -1
- package/dist/esm/index.js +745 -150
- package/dist/esm/plugins/create-experience/index.js +45 -45
- package/dist/esm/plugins/shopify/index.js +36 -68
- 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-BBz99AXU.js +766 -0
- package/dist/experience-instance-DDsqvl4c.cjs +1 -0
- package/dist/{supports-DBMT17KZ.js → supports-BjhuLJ8z.js} +10 -10
- package/dist/types/entities/experience/experience.d.ts +5 -5
- package/dist/types/entities/experience/experience.d.ts.map +1 -1
- package/dist/types/entities/experience-instance/experience-instance.d.ts +3 -3
- package/dist/types/entities/experience-instance/experience-instance.d.ts.map +1 -1
- package/dist/types/entities/feature/feature.d.ts +2 -5
- package/dist/types/entities/feature/feature.d.ts.map +1 -1
- package/dist/types/picked.d.ts +4 -4
- package/dist/types/picked.d.ts.map +1 -1
- package/dist/types/plugins/create-experience/create-experience.d.ts +3 -3
- package/dist/types/plugins/create-experience/create-experience.d.ts.map +1 -1
- package/dist/types/plugins/shopify/index.d.ts +0 -2
- package/dist/types/plugins/shopify/index.d.ts.map +1 -1
- package/dist/types/plugins/shopify/{predicates.d.ts → shopify.d.ts} +6 -20
- package/dist/types/plugins/shopify/shopify.d.ts.map +1 -0
- package/dist/types/plugins/shopify/{global-obj.d.ts → utils.d.ts} +1 -8
- package/dist/types/plugins/shopify/utils.d.ts.map +1 -0
- package/dist/types/utils/events.d.ts +4 -10
- package/dist/types/utils/events.d.ts.map +1 -1
- package/package.json +1 -1
- package/dist/experience-instance-B2l_MG7I.cjs +0 -1
- package/dist/experience-instance-CeuHLrdL.js +0 -781
- package/dist/types/plugins/shopify/global-obj.d.ts.map +0 -1
- package/dist/types/plugins/shopify/picked-config.d.ts +0 -96
- package/dist/types/plugins/shopify/picked-config.d.ts.map +0 -1
- package/dist/types/plugins/shopify/predicates.d.ts.map +0 -1
- package/dist/user-session-D-l-VMTb.cjs +0 -1
- package/dist/user-session-Ht0ayuo5.js +0 -632
package/dist/cjs/index.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";var m=Object.defineProperty;var y=(i,e,t)=>e in i?m(i,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):i[e]=t;var o=(i,e,t)=>y(i,typeof e!="symbol"?e+"":e,t);Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const n=require("../user-session-D-l-VMTb.cjs"),d=require("../logger-BsmHUUw1.cjs"),l=require("../experience-instance-B2l_MG7I.cjs"),S=require("effector"),c=require("../supports-YvpQZxbh.cjs"),u=require("../storage-DuRlyFaY.cjs"),w=(i,e,t)=>{const s=e.name,r=e.setup(i);if(r){const a=t[s]??{};t[s]=Object.freeze({...a,...r})}};function I(i){const e=typeof window<"u",t={client:i,responses:i.responses.listStore.getState(),fields:i.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(t)}const v=()=>S.createEvent(),P=()=>"0.0.12-next.14";function x(){if(c.supportsDocument()){const i=[document.currentScript,document.getElementById("picked_script"),document.getElementById("picked"),document.getElementById("cvly"),document.getElementById("cvly-x")];for(const e of i)if(e!=null&&e.dataset.api)return e.dataset.api}return"https://api.picked.app"}function k(){if(!c.supportsWindow())return{};const i=new URLSearchParams(window.location.search),e={},t=new Set;for(const[r]of i.entries())r.startsWith("picked-")&&t.add(r);for(const r of t){const a=r.replace("picked-","");e[a]=i.getAll(r)}const s=u.createStorageKey("s");if(t.size>0)u.sessionStore.set(s,e);else{const r=u.sessionStore.get(s);if(r)return r.json()||{}}return e}class h{constructor(e){o(this,"options");o(this,"isReady",!1);o(this,"project");o(this,"plugins",{});o(this,"eventBus",v());o(this,"organizationId");o(this,"projectId");o(this,"apiUrl");o(this,"session");o(this,"searchParams",k());o(this,"history",n.createHistory());o(this,"components",n.createComponentIndex({client:this}));o(this,"experienceInstances",l.createExperienceInstanceIndex({client:this}));o(this,"experiences",n.createExperienceIndex({client:this}));o(this,"frameworks",n.createFrameworkIndex({client:this}));o(this,"predicates",n.createPredicateIndex({client:this}));o(this,"features",n.createFeatureIndex({client:this}));o(this,"responses",n.createResponseIndex({client:this}));o(this,"fields",n.createFieldIndex());o(this,"actions",n.createActionIndex());d.logger("info","Picked client initializing."),this.organizationId=e.organizationId,this.projectId=e.projectId,this.options=Object.freeze(e),this.apiUrl=e.apiUrl||x(),this.session=n.initialiseSession(),this.setupPlugins(),this.setupFeatures(),this.setupPredicates(),this.setupActions(),this.eventBus({type:"initialized",version:P()}),d.logger("info","Picked client initialized.")}start(){n.ping(this),(async()=>{c.supportsDocument()&&(document.body&&n.initialiseExperiences(this),await l.domInteractive(),await n.initialiseExperiences(this),this.eventBus({type:"ready"}),this.isReady=!0,this.session&&this.eventBus({type:"session",...this.session}))})()}registerFramework(e){n.setupFramework(e,this.frameworks)}registerComponent(e,t){n.setupComponent(e,t,this.components)}registerPlugin(e){w(this,e,this.plugins)}registerFeature(e,t){n.setupFeature(e,t,this.features)}registerPredicate(e,t){n.setupPredicate(e,t,this.predicates)}registerField(e){n.setupField(e,this.fields)}registerAction(e,t){n.setupAction(e,t,this.actions)}registerExperience(e){e.component&&n.setupComponent(`experience:${e.id}`,e.component,this.components),n.setupExperience(e,this.experiences)}getStateSnapshot(){return I(this)}async launchExperienceById(e){const t=this.experiences.getById(e).getState();if(!t){d.logger("warn",`Experience with id '${e}' not found.`);return}n.initialiseExperience(this,t)}setupPlugins(){var e;(e=this.options.plugins)==null||e.forEach(t=>{if(Array.isArray(t)){t.forEach(r=>{this.registerPlugin(r)});return}const s=typeof t=="function"?t():t;if(Array.isArray(s)){s.forEach(r=>this.registerPlugin(r));return}this.registerPlugin(s)})}setupFeatures(){const e=this.options.features;e&&(Object.entries(e).forEach(([t,s])=>{const r=typeof s=="function"?s():s;this.registerFeature(t,r)}),this.searchParams.feature&&this.searchParams.feature.forEach(t=>{try{const[s,r]=t.split(":");if(!s||!r)return;let a=r;a==="true"&&(a=!0),a==="false"&&(a=!1),this.registerFeature(s,{key:`${a}`,name:s,decide:()=>a,storage:"session"})}catch{}}))}setupPredicates(){const e=this.options.predicates;e&&Object.entries(e).forEach(([t,s])=>{if(typeof s!="function"){d.logger("warn",`Predicate "${t}" is not a function.`);return}this.registerPredicate(t,s)})}setupActions(){const e=this.options.actions;e&&Object.entries(e).forEach(([t,s])=>{if(typeof s!="function"){d.logger("warn",`Action "${t}" is not a function.`);return}this.registerAction(t,s)})}getPluginConfig(e){return this.plugins[e]??{}}}o(h,"logger",d.logger);function f(i){var e;return((e=i.options)==null?void 0:e.some(t=>"condition"in t))??!1}function E(i){return i.some(e=>e.condition||f(e))}async function C(i,e){return e.length===0||!E(e)?e:(await Promise.all(e.map(async s=>{if(!(s.condition?await l.evaluateRuleLogic(i,s.condition):!0))return null;if(!s.options||!f(s))return s;const g=(await Promise.all(s.options.map(async p=>p.condition?await l.evaluateRuleLogic(i,p.condition)?p:null:p))).filter(p=>p!==null);return g.length===s.options.length?s:g.length===0?null:{...s,options:g}}))).filter(s=>s!==null)}const R=i=>{const e=new h(i);return c.bindClient(e),e};exports.evaluateRuleLogic=l.evaluateRuleLogic;exports.isPickedRoot=l.isPickedRoot;exports.supportsCookies=c.supportsCookies;exports.supportsCryptoRandomUUID=c.supportsCryptoRandomUUID;exports.supportsDocument=c.supportsDocument;exports.supportsHistory=c.supportsHistory;exports.supportsIntersectionObserver=c.supportsIntersectionObserver;exports.supportsLocalStorage=c.supportsLocalStorage;exports.supportsLocation=c.supportsLocation;exports.supportsSessionStorage=c.supportsSessionStorage;exports.supportsShadowRoot=c.supportsShadowRoot;exports.supportsWebComponents=c.supportsWebComponents;exports.supportsWindow=c.supportsWindow;exports.createStorageKey=u.createStorageKey;exports.localStore=u.localStore;exports.sessionStore=u.sessionStore;exports.subscribe=u.subscribe;exports.Picked=h;exports.createClient=R;exports.getStepFields=C;
|
|
1
|
+
"use strict";var T=Object.defineProperty;var U=(t,e,s)=>e in t?T(t,e,{enumerable:!0,configurable:!0,writable:!0,value:s}):t[e]=s;var y=(t,e,s)=>U(t,typeof e!="symbol"?e+"":e,s);Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const f=require("effector"),h=require("@withease/factories"),F=require("../experience-instance-DDsqvl4c.cjs"),I=require("../logger-BsmHUUw1.cjs"),w=require("../storage-DuRlyFaY.cjs"),V=require("../id-BKIWbSTy.cjs"),N=require("../object-BbFTsGh3.cjs"),k=require("../supports-YvpQZxbh.cjs"),O=f.createDomain("experience"),K=h.createFactory(({client:t,experience:e})=>{const s=O.store(e),n=f.createApi(s,{merge(u,S){return{...u,...S.experience}}}),i=s.map(u=>({type:u.type,name:u.name,decisionLogic:u.decide,targetSelectors:u.targets})),c=t.components.listStore.map(u=>u.find(S=>S.name===`experience:${e.id}`)||u.find(S=>S.name==="experience"),{skipVoid:!1}),r=s.map(u=>({steps:u.steps,nodes:u.nodes,edges:u.edges,conditionals:u.conditionals})),o=e.actions??[];return{id:e.id,configStore:i,treeStore:r,componentStore:c,actions:o,merge:n.merge}});function z(t){return h.invoke(K,t)}const q=h.createFactory(({client:t})=>{const e=O.store({}),s=f.createApi(e,{register(r,o){return{...r,[o.id]:o}}});function n(r){const o=e.getState()[r.id];if(o){o.merge({experience:r,strategy:"override"});return}const u=z({client:t,experience:r});s.register(u)}const i=e.map(r=>Object.values(r));function c(r){return e.map(o=>o[r],{skipVoid:!1})}return{register:n,getById:c,listStore:i}});function _(t){return h.invoke(q,t)}const H=(t,e)=>{e.register(t)},L=(t,e)=>{const{targetSelectors:s}=e.configStore.getState(),n=F.getTargetElements(s,e.id);n.forEach(({elements:c})=>c.forEach(r=>F.tagTargetElement(r,e.id))),F.createAppHosts(n,e.id).forEach(c=>{t.experienceInstances.spawn(e,c)})},D=async t=>{await Promise.all(t.experiences.listStore.getState().map(async e=>{await W(t,e)&&L(t,e)}))},W=async(t,e)=>{const{type:s,decisionLogic:n,targetSelectors:i}=e.configStore.getState();return F.getTargetElements(i,e.id).length<1?!1:s==="funnel"?n?await F.evaluateRuleLogic(t,n)===!0:!1:i.length===0?!1:F.isRulesLogic(n)?await F.evaluateRuleLogic(t,n)===!0:!0},G=(t,e,s)=>{const n=e.name,i=e.setup(t);if(i){const c=s[n]??{};s[n]=Object.freeze({...c,...i})}},Y=f.createDomain("component"),J=h.createFactory(({client:t,component:e,name:s})=>{const n=t.frameworks.getByName(e.frameworkName);return{name:s,component:e,frameworkStore:n}});function Q(t){return h.invoke(J,t)}const X=h.createFactory(({client:t})=>{const e=Y.store({}),s=f.createApi(e,{register(r,o){return{...r,[o.name]:o}}});function n(r,o){e.getState()[r]&&I.logger("warn",`Component '${r}' already registered. Registering again will override the previous registration.`);const S=Q({client:t,name:r,component:o});s.register(S)}const i=e.map(r=>Object.values(r));function c(r){return e.map(o=>o[r],{skipVoid:!1})}return{register:n,getByName:c,listStore:i}});function Z(t){return h.invoke(X,t)}const $=(t,e,s)=>{s.register(t,e)},ee=f.createDomain("framework"),te=h.createFactory(({client:t})=>{const e=ee.store({}),s=f.createApi(e,{register(r,o){return{...r,[o.name]:o.framework}}});function n(r,o){e.getState()[r]&&I.logger("warn",`Framework '${r}' already registered. Registering again will override the previous registration.`),s.register({name:r,framework:o})}const i=e.map(r=>Object.values(r));function c(r){return e.map(o=>o[r],{skipVoid:!1})}return{register:n,getByName:c,listStore:i}});function re(t){return h.invoke(te,t)}const se=(t,e)=>{e.register(t.name,t)},ne=6e3,j=w.createStorageKey("last_ping","global"),oe=t=>`${t}/api/v1/ping`,ie=async t=>{try{const e=Date.now(),s=localStorage.getItem(j);if(s&&e-parseInt(s)<ne)return!0;const n=oe(t.apiUrl),i={projectId:t.projectId,path:window.location.pathname},c=JSON.stringify(i),r={"Content-Type":"application/json"},o=document.getElementById("picked_script"),u=o==null?void 0:o.dataset.verceltoken;u&&(r["x-vercel-protection-bypass"]=u);const l=(await fetch(n,{method:"POST",headers:r,body:c})).ok;return l&&localStorage.setItem(j,e.toString()),l}catch(e){return I.logger("error",e),!1}};function ae(t){const e=typeof window<"u",s={client:t,responses:t.responses.listStore.getState(),fields:t.fields.listStore.getState(),location:e?window.location:void 0,document:e?window.document:void 0,sessionStorage:e?window.sessionStorage:void 0,localStorage:e?window.localStorage:void 0};return Object.freeze(s)}const ce=f.createDomain("predicate"),ue=h.createFactory(({client:t})=>{const e=ce.store({}),s=f.createApi(e,{register(r,o){return{...r,[o.name]:{name:o.name,predicate:o.predicate}}}});function n(r,o){e.getState()[r]&&I.logger("warn",`Predicate '${r}' already registered. Registering again will override the previous registration.`),s.register(Object.freeze({name:r,predicate:o}))}const i=e.map(r=>Object.values(r));function c(r){return e.map(o=>o[r],{skipVoid:!1})}return{register:n,getByName:c,listStore:i}});function le(t){return h.invoke(ue,t)}const pe=(t,e,s)=>{s.register(t,e)},B=f.createDomain("feature"),ge=h.createFactory(()=>{const t=B.store({}),e=B.store([]),s=f.createApi(t,{register(l,m){return{...l,[m.id]:m.feature}}});function n(l,m){t.getState()[l]&&I.logger("warn",`Feature '${l}' already registered. Registering again will override the previous registration.`);const g={id:l,feature:{...m,id:l}};s.register(Object.freeze({id:l,feature:g}))}const i=f.createEffect(async({id:l,key:m,storage:a="local"})=>{const g=w.createStorageKey(`feature:${l}:${m}`,"global"),v=(a==="session"?w.sessionStore:w.localStore).get(g).boolean();if(v!==null)return{id:l,bucket:v}}),c=f.createEffect(l=>{if(!l)return null;const m=w.createStorageKey(`feature:${l.id}:${l.key}`,"global");(l.storage==="session"?w.sessionStore:w.localStore).set(m,l.bucket)}),r=new Map,o=f.attach({source:{allFeaturesStore:t,resolvedFeaturesStore:e},effect:async({allFeaturesStore:l,resolvedFeaturesStore:m},{id:a,decide:g,key:d})=>{const v=m.find(E=>E.id===a);if(v)return v;const p=l[a];if(!p)throw new Error(`Feature with id '${a}' not found`);const b=r.get(`${a}:${d}`);if(b!==void 0){const E=await b;return{id:p.id,bucket:E,storage:p.feature.storage}}const x=g();r.set(`${a}:${d}`,x);const P=await x;return{id:p.id,bucket:P,storage:p.feature.storage}}});f.sample({clock:s.register,fn:l=>{const{id:m,feature:a}=l;return{id:m,key:a.feature.key,storage:a.feature.storage}},target:i}),f.sample({source:e,clock:[i.doneData,o.doneData],fn:(l,m)=>!m||l.some(a=>a.id===m.id)?l:[...l,m],target:e}),f.sample({source:t,clock:o.doneData,fn:(l,m)=>{var p;const{id:a,bucket:g,storage:d}=m,v=(p=l[a])==null?void 0:p.feature.key;return v?{key:v,id:a,bucket:g,storage:d}:null},target:c});const u=f.combine({allFeaturesStore:t,resolvedFeaturesStore:e}).map(({allFeaturesStore:l,resolvedFeaturesStore:m})=>Object.values(l).map(a=>{const g=m.find(d=>d.id===a.id);return g?{id:a.id,name:a.feature.name,key:a.feature.key,getBucket:()=>({id:a.id,bucket:g.bucket}),isResolved:!0}:{id:a.id,name:a.feature.name,key:a.feature.key,getBucket:async()=>await o(a.feature),isResolved:!1}}));function S(l){return t.map(m=>m[l],{skipVoid:!1})}return{register:n,getByName:S,listStore:u}});function de(){return h.invoke(ge)}const fe=(t,e,s)=>{s.register(t,e)},R=f.createDomain("history");function C(t,e){return{id:V.generateId(`history-entry-${Date.now()}-${Math.random()}}`),node:e,at:Date.now(),experienceId:t}}const me=h.createFactory(()=>{const t=R.store({entries:[]}),e=R.event(),s=R.event(),n=R.event(),i=R.event();t.on(e,(r,o)=>({entries:[...r.entries,C(o.experienceId,o.node)]})),t.on(s,(r,o)=>({entries:[...r.entries.slice(0,-1),C(o.experienceId,o.node)]})),t.on(i,(r,o)=>o);function c(r,o){const u={lastStepIndex:-1,secondLastStepIndex:-1};for(let S=r.length-1;S>=0;S--){const l=r[S],m=l==null?void 0:l.node;if(!(!m||!F.isStepNode(m))&&!(o&&(l==null?void 0:l.experienceId)!==o))if(u.lastStepIndex===-1)u.lastStepIndex=S;else{u.secondLastStepIndex=S;break}}return u}return t.on(n,(r,o)=>{const{secondLastStepIndex:u}=c(r.entries,o.experienceId),S=u!==-1?r.entries.slice(0,u+1):r.entries;return{...r,entries:S}}),{push:e,replace:s,back:n,restore:i,entriesStore:t.map(r=>r.entries)}});function ye(){return h.invoke(me)}const he=()=>f.createEvent(),Se=f.createDomain("field"),ve=h.createFactory(()=>{const t=Se.store({}),e=f.createApi(t,{register(r,o){return{...r,[o.field.id]:o.field}}});function s(r){e.register({field:r})}const n=t.map(r=>Object.values(r));function i(r){return t.map(o=>o[r]||null)}function c(r){return t.map(o=>Object.values(o).find(u=>u.name===r)||null)}return{register:s,getById:i,listStore:n,getByName:c}});function ke(){return h.invoke(ve)}const we=(t,e)=>{e.register(t)},Fe=f.createDomain("action"),be=h.createFactory(()=>{const t=Fe.store({}),e=f.createApi(t,{register(c,r){return{...c,[r.name]:{name:r.name,action:r.action}}}});function s(c,r){e.register({name:c,action:r})}const n=t.map(c=>Object.values(c));function i(c){return t.map(r=>r[c],{skipVoid:!1})}return{register:s,getByName:i,listStore:n}});function Ie(){return h.invoke(be)}const xe=(t,e,s)=>{s.register(t,e)},Ee=f.createDomain("response"),Re=h.createFactory(({client:t})=>{const e=Ee.store({}),s=f.createEvent(),n=f.createEvent(),i=f.createApi(e,{register(a,g){return{...a,[g.fieldId]:g.response}},registerBatch(a,g){return{...a,...g}},clear(a,g){const{[g]:d,...v}=a;return v},clearAll(){return{}}});function c(a,g){i.register({fieldId:a,response:g})}async function r(a){const g=[];return await Promise.allSettled(Object.entries(a).map(async([d,v])=>{let p=v;const b=t.fields.getById(d).getState();if(!b){g.push({fieldId:d,userMessage:`Field '${d}' not found`,systemMessage:`No field with ID '${d}' exists. Available field IDs are: ${Object.keys(t.fields.listStore.getState()).join(",")}.`,value:p});return}if(b.multiple&&(typeof p=="string"||typeof p=="number"||typeof p=="boolean")&&(p=[p]),b.validation&&!N.isEmpty(b.validation)){const x=await F.evaluateRuleLogic(t,b.validation,{$input:p});if(typeof x=="string"){g.push({fieldId:d,userMessage:x,systemMessage:`Field validation resulted in an error: ${x}.`,value:p});return}if(x===!1){g.push({fieldId:d,userMessage:"This field is invalid",systemMessage:"Field validation resulted in an unspecified error.",value:p});return}}if(b.required&&(typeof p>"u"||p===null||p===""||Array.isArray(p)&&!p.length)){g.push({fieldId:d,userMessage:"This field is required",systemMessage:"Field is required.",value:p});return}if(!b.multiple&&Array.isArray(p)&&p.length>1){g.push({fieldId:d,userMessage:"This field expects a single response",systemMessage:"Field expects a single response.",value:p});return}if(b.options){const x=b.options.map(E=>E.value),P=Array.isArray(p)?p:[p];Array.isArray(p)&&(P.every(E=>x.includes(E))||g.push({fieldId:d,userMessage:"This field expects a valid option",systemMessage:`Field expects a valid option. Valid options are: ${x.join(", ")}`,value:p}))}})),{responsesToCommit:a,validationErrors:g}}async function o(a){const{responsesToCommit:g,validationErrors:d}=await r(a);return d.length?{errors:d}:(i.registerBatch(g),{errors:[]})}const u=e.map(a=>a),S=e.map(a=>Object.keys(a).map(d=>({fieldId:d,value:a[d]})));function l(a){const g=t.fields.getById(a),d=e.map(v=>v[a]||null);return f.combine({f:g,r:d},({f:v,r:p})=>p||(v!=null&&v.defaultValue?v.defaultValue:null))}function m(a){const g=t.fields.getByName(a);return f.combine({f:g,s:e},({f:d,s:v})=>{const p=d&&v[d.id]||null;return p||(d!=null&&d.defaultValue?d.defaultValue:null)})}return f.sample({clock:s,target:i.clearAll}),f.sample({clock:n,target:i.clear}),{register:c,clearAll:s,clear:n,commit:o,getResponsesToCommit:r,listStore:S,getAllStore:u,getByFieldId:l,getByFieldName:m}});function Pe(t){return h.invoke(Re,t)}const Ae=()=>"0.0.12-next.2";function De(){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={},s=new Set;for(const[i]of t.entries())i.startsWith("picked-")&&s.add(i);for(const i of s){const c=i.replace("picked-","");e[c]=t.getAll(i)}const n=w.createStorageKey("s");if(s.size>0)w.sessionStore.set(n,e);else{const i=w.sessionStore.get(n);if(i)return i.json()||{}}return e}function je(){if(k.supportsCryptoRandomUUID())return crypto.randomUUID();const t=Date.now().toString(36),e=Math.random().toString(36).substring(2,15),s=Math.random().toString(36).substring(2,15),n=Math.random().toString(36).substring(2,15);return`${t}-${e}-${s}-${n}`}const Be=()=>({id:je()}),Ce=w.createStorageKey("session","global"),Oe=()=>{if(!k.supportsLocalStorage())return null;const t=w.localStore.get(Ce);let e=t.isSet()?t.json():null;return e||(e=Be(),t.set(e)),e},Le=()=>Oe();class A{constructor(e){y(this,"options");y(this,"isReady",!1);y(this,"project");y(this,"plugins",{});y(this,"eventBus",he());y(this,"organizationId");y(this,"projectId");y(this,"apiUrl");y(this,"session");y(this,"searchParams",$e());y(this,"history",ye());y(this,"components",Z({client:this}));y(this,"experienceInstances",F.createExperienceInstanceIndex({client:this}));y(this,"experiences",_({client:this}));y(this,"frameworks",re({client:this}));y(this,"predicates",le({client:this}));y(this,"features",de());y(this,"responses",Pe({client:this}));y(this,"fields",ke());y(this,"actions",Ie());I.logger("info","Picked client initializing."),this.organizationId=e.organizationId,this.projectId=e.projectId,this.options=Object.freeze(e),this.apiUrl=e.apiUrl||De(),this.session=Le(),this.setupPlugins(),this.setupFeatures(),this.setupPredicates(),this.setupActions(),this.eventBus({type:"initialized",version:Ae()}),I.logger("info","Picked client initialized.")}start(){ie(this),(async()=>{k.supportsDocument()&&(document.body&&D(this),await F.domInteractive(),await D(this),this.eventBus({type:"ready"}),this.isReady=!0,this.session&&this.eventBus({type:"session",...this.session}))})()}registerFramework(e){se(e,this.frameworks)}registerComponent(e,s){$(e,s,this.components)}registerPlugin(e){G(this,e,this.plugins)}registerFeature(e,s){fe(e,s,this.features)}registerPredicate(e,s){pe(e,s,this.predicates)}registerField(e){we(e,this.fields)}registerAction(e,s){xe(e,s,this.actions)}registerExperience(e){e.component&&$(`experience:${e.id}`,e.component,this.components),H(e,this.experiences)}getStateSnapshot(){return ae(this)}async launchExperienceById(e){const s=this.experiences.getById(e).getState();if(!s){I.logger("warn",`Experience with id '${e}' not found.`);return}L(this,s)}setupPlugins(){var e;(e=this.options.plugins)==null||e.forEach(s=>{if(Array.isArray(s)){s.forEach(i=>{this.registerPlugin(i)});return}const n=typeof s=="function"?s():s;if(Array.isArray(n)){n.forEach(i=>this.registerPlugin(i));return}this.registerPlugin(n)})}setupFeatures(){const e=this.options.features;e&&(Object.entries(e).forEach(([s,n])=>{const i=typeof n=="function"?n():n;this.registerFeature(s,i)}),this.searchParams.feature&&this.searchParams.feature.forEach(s=>{try{const[n,i]=s.split(":");if(!n||!i)return;let c=i;c==="true"&&(c=!0),c==="false"&&(c=!1),this.registerFeature(n,{key:`${c}`,name:n,decide:()=>c,storage:"session"})}catch{}}))}setupPredicates(){const e=this.options.predicates;e&&Object.entries(e).forEach(([s,n])=>{if(typeof n!="function"){I.logger("warn",`Predicate "${s}" is not a function.`);return}this.registerPredicate(s,n)})}setupActions(){const e=this.options.actions;e&&Object.entries(e).forEach(([s,n])=>{if(typeof n!="function"){I.logger("warn",`Action "${s}" is not a function.`);return}this.registerAction(s,n)})}getPluginConfig(e){return this.plugins[e]??{}}}y(A,"logger",I.logger);function M(t){var e;return((e=t.options)==null?void 0:e.some(s=>"condition"in s))??!1}function Me(t){return t.some(e=>e.condition||M(e))}async function Te(t,e){return e.length===0||!Me(e)?e:(await Promise.all(e.map(async n=>{if(!(n.condition?await F.evaluateRuleLogic(t,n.condition):!0))return null;if(!n.options||!M(n))return n;const r=(await Promise.all(n.options.map(async u=>u.condition?await F.evaluateRuleLogic(t,u.condition)?u:null:u))).filter(u=>u!==null);return r.length===n.options.length?n:r.length===0?null:{...n,options:r}}))).filter(n=>n!==null)}const Ue=t=>{const e=new A(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=A;exports.createClient=Ue;exports.getStepFields=Te;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const p=require("../../../id-BKIWbSTy.cjs"),a={serialize(i){return JSON.stringify(i)},deserialize(i){return JSON.parse(i)}},y=i=>({name:"create-experience",setup:d=>{i.experiences.forEach(l=>{const
|
|
1
|
+
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const p=require("../../../id-BKIWbSTy.cjs"),a={serialize(i){return JSON.stringify(i)},deserialize(i){return JSON.parse(i)}},y=i=>({name:"create-experience",setup:d=>{i.experiences.forEach(l=>{const s=l.serialize(),o=a.deserialize(s);o.component=l.component,d.registerExperience(o),o.fields.forEach(f=>{d.registerField(f)})})}}),m=(i,d)=>({id:p.generateId("node"),position:[0,0],experience:d,type:"action",action:i.action,addNext(s){if(!s.node)throw new Error("Cannot connect to node");const o=u({sourceNode:this,destinationNode:s.node,sourceNodeHandle:null},d);d.edges.push(o)},onSuccess(s){if(!s.node)throw new Error("Cannot connect to node");const o=u({sourceNode:this,destinationNode:s.node,sourceNodeHandle:"true"},d);d.edges.push(o)},onFail(s){if(!s.node)throw new Error("Cannot connect to node");const o=u({sourceNode:this,destinationNode:s.node,sourceNodeHandle:"false"},d);d.edges.push(o)},serialize(){return a.serialize({id:this.id,type:this.type,action:this.action,position:this.position})}}),z=i=>({id:i.id??p.generateId("step"),label:i.label,fields:i.fields??[],addField(d){var s,o;const l="serialize"in d?d:N(d);return(s=this.fields)!=null&&s.includes(l)||(o=this.fields)==null||o.push(l),l}}),b=(i,d)=>{const l={id:i.id??p.generateId("step"),label:i.label,experience:d,fields:i.fields??[],node:null,nextStep(s){return this.experience.addStep(s,this)},nextConditional(s){return this.experience.addConditional(s,this)},addNextExperience(s){return this.experience.addExperience(s,this)},addField(s){return this.experience.addField(s,this)},serialize(){return a.serialize({id:this.id,label:this.label,fieldIds:this.fields.map(s=>s.id)})}};return h({step:l,type:"step"},d),l},x=()=>[0,0],h=(i,d)=>{const l={id:p.generateId("node"),position:x(),experience:d};if(i.type==="step"){const o={...l,type:"step",connectedStep:i.step,serialize(){return a.serialize({id:this.id,type:this.type,stepId:this.connectedStep.id,position:this.position,label:this.connectedStep.label})}};return o.connectedStep.node=o,o}if(i.type==="conditional"){const o={...l,type:"conditional",connectedConditional:i.conditional,serialize(){return a.serialize({id:this.id,type:this.type,conditionalId:this.connectedConditional.id,position:this.position})}};return o.connectedConditional.node=o,o}return i.type==="experience"?{...l,type:"experience",connectedExperience:i.experience,serialize(){return a.serialize({id:this.id,type:this.type,experienceId:this.connectedExperience.id,position:this.position})}}:{...l,type:"origin",serialize(){return a.serialize({id:this.id,type:this.type,position:this.position})}}},u=(i,d)=>({id:p.generateId("edge"),sourceNode:i.sourceNode,sourceNodeHandle:i.sourceNodeHandle,destinationNode:i.destinationNode,experience:d,serialize(){return a.serialize({id:this.id,sourceNodeHandle:this.sourceNodeHandle??void 0,sourceNodeId:this.sourceNode.id,destinationNodeId:this.destinationNode.id})}}),g=(i,d)=>{const l={id:p.generateId("conditional"),condition:i.condition,node:null,experience:d,addTrue(s){if(!this.node||!s.node)throw new Error("todo no node");const o=u({sourceNode:this.node,destinationNode:s.node,sourceNodeHandle:"true"},this.experience);this.experience.edges.push(o)},addFalse(s){if(!this.node||!s.node)throw new Error("todo no node");const o=u({sourceNode:this.node,destinationNode:s.node,sourceNodeHandle:"false"},this.experience);this.experience.edges.push(o)},serialize(){return a.serialize({id:this.id,condition:this.condition})}};return h({conditional:l,type:"conditional"},d),l},N=i=>{var l;return{id:i.id,name:i.name,type:i.type,label:i.label,placeholder:i.placeholder,description:i.description,helpText:i.helpText,defaultValue:i.defaultValue??null,multiple:i.multiple,validation:i.validation??{},condition:i.condition,required:i.required,options:((l=i.options)==null?void 0:l.map(s=>({...s})))??null,policies:i.policies,serialize(){const s={id:this.id,name:this.name,label:this.label,placeholder:this.placeholder,required:this.required,description:this.description,helpText:this.helpText,validation:this.validation,condition:this.condition,policies:this.policies},o=typeof this.defaultValue=="string"?this.defaultValue:void 0,f=typeof this.defaultValue=="number"?this.defaultValue:void 0,n=typeof this.defaultValue=="boolean"?this.defaultValue:void 0;switch(this.type){case"text":if(this.multiple){let e;if(Array.isArray(this.defaultValue)){e=[];for(const t of this.defaultValue)typeof t=="string"&&e.push(t);e.length===0&&(e=void 0)}return a.serialize({...s,type:"text",multiple:!0,defaultValue:e,options:this.options?this.options.map(t=>({id:t.id,label:t.label,value:`${t.value}`,condition:t.condition})):null})}return a.serialize({...s,type:"text",multiple:!1,defaultValue:o,options:this.options?this.options.map(e=>({id:e.id,label:e.label,value:`${e.value}`,condition:e.condition})):null});case"number":if(this.multiple){let e;if(Array.isArray(this.defaultValue)){e=[];for(const t of this.defaultValue)typeof t=="number"&&e.push(t);e.length===0&&(e=void 0)}return a.serialize({...s,type:"number",multiple:!0,defaultValue:e,options:this.options?this.options.map(t=>({id:t.id,label:t.label,value:Number(t.value),condition:t.condition})):null})}return a.serialize({...s,type:"number",multiple:!1,defaultValue:f,options:this.options?this.options.map(e=>({id:e.id,label:e.label,value:Number(e.value),condition:e.condition})):null});case"boolean":if(this.multiple){let e;if(Array.isArray(this.defaultValue)){e=[];for(const t of this.defaultValue)typeof t=="boolean"&&e.push(t);e.length===0&&(e=void 0)}return a.serialize({...s,type:"boolean",multiple:!0,defaultValue:e,options:this.options?this.options.map(t=>({id:t.id,label:t.label,value:!!t.value,condition:t.condition})):null})}return a.serialize({...s,type:"boolean",multiple:!1,defaultValue:n,options:this.options?this.options.map(e=>({id:e.id,label:e.label,value:!!e.value,condition:e.condition})):null});default:throw new Error("Unsupported field type")}}}},v=i=>{const d=[],l=[],s=[],o=[],f=[];return{id:i.id,component:i.component,type:i.type,name:i.name,decide:i.decide,targets:i.targets,steps:d,nodes:l,edges:s,fields:f,conditionals:o,addStep(n,e){let t=e==null?void 0:e.node;this.nodes.length===0&&(t=h({type:"origin"},this),this.nodes.push(t));const r="serialize"in n?n:b(n,this);if(t){if(!r.node)throw new Error("todo no node");const c=u({sourceNode:t,destinationNode:r.node,sourceNodeHandle:null},this);this.edges.push(c)}return r.fields.length>0&&r.fields.forEach(c=>{this.fields.includes(c)||this.fields.push(c)}),this.steps.includes(r)||(this.steps.push(r),r.node&&this.nodes.push(r.node)),r},addAction(n,e){let t=e==null?void 0:e.node;this.nodes.length===0&&(t=h({type:"origin"},this),this.nodes.push(t));const r="serialize"in n?n:m(n,this);if(t){const c=u({sourceNode:t,destinationNode:r,sourceNodeHandle:null},this);this.edges.push(c)}return this.nodes.push(r),r},addConditional(n,e){let t=e==null?void 0:e.node;this.nodes.length===0&&(t=h({type:"origin"},this),this.nodes.push(t));const r="serialize"in n?n:g(n,this);if(t){if(!r.node)throw new Error("todo no node");const c=u({sourceNode:t,destinationNode:r.node,sourceNodeHandle:null},this);this.edges.push(c)}return this.conditionals.includes(r)||(this.conditionals.push(r),r.node&&this.nodes.push(r.node)),r},addExperience(n,e){let t=e==null?void 0:e.node;this.nodes.length===0&&(t=h({type:"origin"},this),this.nodes.push(t));const r=h({type:"experience",experience:n},this);if(this.nodes.push(r),t){const c=u({sourceNode:t,destinationNode:r,sourceNodeHandle:null},this);this.edges.push(c)}return n},addField(n,e){const t="serialize"in n?n:N(n);return e&&e.fields.push(t),this.fields.includes(t)||this.fields.push(t),t},serialize(){return a.serialize({id:this.id,type:this.type,component:this.component,name:this.name,decide:this.decide,targets:this.targets,steps:this.steps.map(n=>a.deserialize(n.serialize())),nodes:this.nodes.map(n=>a.deserialize(n.serialize())),edges:this.edges.map(n=>a.deserialize(n.serialize())),conditionals:this.conditionals.map(n=>a.deserialize(n.serialize())),fields:this.fields.map(n=>a.deserialize(n.serialize()))})}}};exports.createConditional=g;exports.createEdge=u;exports.createExperience=v;exports.createExperiencePlugin=y;exports.createField=N;exports.createNode=h;exports.createStep=z;exports.serialization=a;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const
|
|
1
|
+
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const n=require("../../../supports-YvpQZxbh.cjs"),t={homepage:/^\/$/,productPage:/(?:^|\/)products\/(?<productHandle>[^/]+)\/?$/,collection:/^\/collections\/[^/]+\/?$/,page:/(?:^|\/)pages\/[^/]+$/,blog:/(?:^|\/)blogs\/(?<blogHandle>[^/]+)\/?$/,article:/^\/blogs\/[^/]+\/(?<article>[^/]+)\/?$/,cart:/(?:^|\/)cart\/[^/]+$/,checkout:/^\/checkout\/.+/,appProxy:/^\/(?:a|apps|community|tools)\/(?<proxyTarget>[^/]+)/,accountWildcard:/^\/account\/.+/,accountLogin:/^\/account\/login(?:\/|$)/,accountRegister:/^\/account\/register(?:\/|$)/},p=/^\/collections\/(?<collectionHandle>[^/]+)(?:\/|$)/,a=(e,o)=>o?!!e.exec(o.pathname):!1,i=(e,o)=>{if(o){const c=e.exec(o.pathname);if(c)return c[1]}},s={"is-page":({location:e})=>a(t.page,e),"get-page-handle":({location:e})=>i(t.page,e),"is-product-page":({location:e})=>a(t.productPage,e),"get-product-handle":({location:e})=>i(t.productPage,e),"is-collection-page":({location:e})=>a(t.collection,e),"get-collection-handle":({location:e})=>i(p,e),"is-blog-page":({location:e})=>a(t.blog,e),"get-blog-handle":({location:e})=>i(t.blog,e),"is-article-page":({location:e})=>a(t.article,e),"get-article-handle":({location:e})=>i(t.article,e),"is-app-proxy-page":({location:e})=>a(t.appProxy,e),"get-app-proxy-handle":({location:e})=>i(t.appProxy,e),"is-account-page":({location:e})=>a(t.accountWildcard,e),"is-login-page":({location:e})=>a(t.accountLogin,e),"is-register-page":({location:e})=>a(t.accountRegister,e),"is-cart-page":({location:e})=>a(t.cart,e),"is-checkout-page":({location:e})=>a(t.checkout,e),"is-homepage":({location:e})=>a(t.homepage,e)};function r(e){var o,c;return typeof((c=(o=e.Shopify)==null?void 0:o.analytics)==null?void 0:c.publish)=="function"}const l=()=>({name:"shopify",setup:e=>{Object.entries(s).forEach(([o,c])=>{e.registerPredicate(`shopify-${o}`,c)}),n.supportsWindow()&&e.eventBus.watch(o=>{r(window)&&o.type==="session"&&window.Shopify.analytics.publish("picked:session",{id:o.id})})}});exports.shopifyPlugin=l;
|
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-DDsqvl4c.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;
|