@picked/client 0.0.1-dev.1777616114652 → 0.0.1-dev.1777856271317
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/{api-Dn57QBPm.js → api-DaHz97Mz.js} +1 -1
- package/dist/{api-BryLRI2Y.cjs → api-dOWgI8zV.cjs} +1 -1
- package/dist/cjs/index.js +1 -1
- package/dist/cjs/plugins/dom-observer/index.js +1 -1
- package/dist/cjs/plugins/dynamic-experiences/index.js +1 -1
- package/dist/esm/index.js +2 -2
- package/dist/esm/plugins/dom-observer/index.js +70 -44
- package/dist/esm/plugins/dynamic-experiences/index.js +1 -1
- package/dist/types/entities/history/history.d.ts.map +1 -1
- package/dist/types/plugins/dom-observer/plugin.d.ts +18 -6
- package/dist/types/plugins/dom-observer/plugin.d.ts.map +1 -1
- package/package.json +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
var e=`Picked-Client`,t=`Picked-Version`;function n(n,r){return{[e]:n,[t]:r}}var r=()=>`0.0.1-dev.
|
|
1
|
+
var e=`Picked-Client`,t=`Picked-Version`;function n(n,r){return{[e]:n,[t]:r}}var r=()=>`0.0.1-dev.1777856271317`,i=`v1`;function a(e,t){return new URL(`/api/${i}/${t}`,e).toString()}function o(e){return{...n(`sdk`,r()),...e}}async function s(e,t,n){let r=a(e,t);return fetch(r,{headers:o(n)})}async function c(e,t,n,r){let i=a(e,t);return fetch(i,{method:`POST`,headers:{"Content-Type":`application/json`,...o(r)},body:JSON.stringify(n)})}Object.defineProperty(exports,`i`,{enumerable:!0,get:function(){return n}}),Object.defineProperty(exports,`n`,{enumerable:!0,get:function(){return c}}),Object.defineProperty(exports,`r`,{enumerable:!0,get:function(){return r}}),Object.defineProperty(exports,`t`,{enumerable:!0,get:function(){return s}});
|
package/dist/cjs/index.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require(`../rules-logic-DNLOv90w.cjs`),t=require(`../object-CUJOjanb.cjs`),n=require(`../logger-fbvQC40v.cjs`),r=require(`../supports-Dsjg-82e.cjs`),i=require(`../nodes-DDDs-rC2.cjs`),a=require(`../experience-BhteyYBl.cjs`),o=require(`../storage-BXSlLTRa.cjs`),s=require(`../api-BryLRI2Y.cjs`),c=require(`../experience-instance-CZDcicPj.cjs`),l=require(`../id-Bbodazn8.cjs`);let u=require(`effector`),d=require(`@withease/factories`);var f=(e,t,n)=>{let r=t.name,i=t.setup(e);if(i){let e=n[r]??{};n[r]=Object.freeze({...e,...i})}},p=(0,u.createDomain)(`component`),m=(0,d.createFactory)(({client:e,component:t,name:n})=>({name:n,component:t,frameworkStore:e.frameworks.getByName(t.frameworkName)}));function h(e){return(0,d.invoke)(m,e)}var g=(0,d.createFactory)(({client:e})=>{let t=p.store({}),n=(0,u.createApi)(t,{register(e,t){return{...e,[t.name]:t}}});function r(r,i){t.getState()[r]&&`${r}`;let a=h({client:e,name:r,component:i});n.register(a)}let i=t.map(e=>Object.values(e));function a(e){return t.map(t=>t[e],{skipVoid:!1})}return{register:r,getByName:a,listStore:i}});function _(e){return(0,d.invoke)(g,e)}var v=(e,t,n)=>{n.register(e,t)},ee=(0,u.createDomain)(`framework`),y=(0,d.createFactory)(({client:e})=>{let t=ee.store({}),n=(0,u.createApi)(t,{register(e,t){return{...e,[t.name]:t.framework}}});function r(e,r){t.getState()[e]&&`${e}`,n.register({name:e,framework:r})}let i=t.map(e=>Object.values(e));function a(e){return t.map(t=>t[e],{skipVoid:!1})}return{register:r,getByName:a,listStore:i}});function b(e){return(0,d.invoke)(y,e)}var x=(e,t)=>{t.register(e.name,e)},S=6e3,C=o.t(`last_ping`,`global`),te=async e=>{try{let t=Date.now(),n=o.n.get(C),r=0;if(n.isSet()&&(r=n.json()??0),r&&t-r<S)return!0;let i={projectId:e.projectId,path:window.location.pathname},a={},c=document.getElementById(`picked_script`)?.dataset.verceltoken;c&&(a[`x-vercel-protection-bypass`]=c);let l=(await s.n(e.apiUrl,`ping`,i,a)).ok;return l&&n.set(t),l}catch{return!1}};function w(e){let t=typeof window<`u`,n={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(n)}var ne=(0,u.createDomain)(`predicate`),re=(0,d.createFactory)(({client:e})=>{let t=ne.store({}),n=(0,u.createApi)(t,{register(e,t){return{...e,[t.name]:{name:t.name,predicate:t.predicate}}}});function r(e,r){t.getState()[e]&&`${e}`,n.register(Object.freeze({name:e,predicate:r}))}let i=t.map(e=>Object.values(e));function a(e){return t.map(t=>t[e]?.predicate,{skipVoid:!1})}function o(t){let n=(0,u.createStore)(()=>void 0,{skipVoid:!1}),r=(0,u.createEffect)(async()=>{let n=a(t).getState();if(!n)return;let r=w(e);return(...e)=>n({...r,args:e})});return(0,u.sample)({source:{responses:e.responses.listStore,fields:e.fields.listStore},target:r}),(0,u.sample)({clock:r.doneData,filter:e=>e!==void 0,target:n}),r(),n}return{register:r,getByName:a,listStore:i,getEvokablePredicate:o}});function ie(e){return(0,d.invoke)(re,e)}var ae=(e,t,n)=>{n.register(e,t)},T=(0,u.createDomain)(`feature`),E=(0,d.createFactory)(({client:e})=>{let t=T.store({}),n=T.store([]),r=(0,u.createApi)(t,{register(e,t){return{...e,[t.id]:t.feature}}});function i(e,n){t.getState()[e]&&`${e}`;let i={id:e,feature:{...n,id:e}};r.register(Object.freeze({id:e,feature:i}))}let a=(0,u.createEffect)(async({id:e,key:t,storage:n=`local`})=>{let r=o.t(`feature:${e}:${t}`,`global`),i=(n===`session`?o.r:o.n).get(r).boolean();return i===null?null:{id:e,key:t,bucket:i,storage:n}}),s=(0,u.createEffect)(e=>{if(!e)return null;let t=o.t(`feature:${e.id}:${e.key}`,`global`);(e.storage===`session`?o.r:o.n).set(t,e.bucket)}),c=new Map,l=(0,u.attach)({source:{allFeaturesStore:t,resolvedFeaturesStore:n},effect:async({allFeaturesStore:e,resolvedFeaturesStore:t},{id:n,decide:r,key:i})=>{let a=t.find(e=>e.id===n&&e.key===i);if(a)return a;let o=e[n];if(!o)throw Error(`Feature with id '${n}' not found`);let s=c.get(`${n}:${i}`);if(s!==void 0){let e=await s;return{id:o.id,bucket:e,key:i,storage:o.feature.storage}}let l=r();c.set(`${n}:${i}`,l);let u=await l;return{id:o.id,bucket:u,key:i,storage:o.feature.storage}}});(0,u.sample)({clock:r.register,fn:e=>{let{id:t,feature:n}=e;return{id:t,key:n.feature.key,storage:n.feature.storage}},target:a}),(0,u.sample)({source:t,clock:l.doneData,fn:(e,t)=>{let{id:n,bucket:r,storage:i}=t,a=e[n]?.feature.key;return a?{key:a,id:n,bucket:r,storage:i}:null},target:s});let d=(0,u.combine)({allFeaturesStore:t,resolvedFeaturesStore:n}).map(({allFeaturesStore:e,resolvedFeaturesStore:t})=>Object.values(e).map(e=>{let n=t.find(t=>t.id===e.id&&t.key===e.feature.key);return n?{id:e.id,name:e.feature.name,key:e.feature.key,getBucket:()=>({id:e.id,bucket:n.bucket}),isResolved:!0}:{id:e.id,name:e.feature.name,key:e.feature.key,getBucket:async()=>await l(e.feature),isResolved:!1}}));(0,u.sample)({clock:l.doneData,source:{resolvedFeatures:n},filter:({resolvedFeatures:e},{id:t,key:n})=>!e.some(e=>e.id===t&&e.key===n),fn:(e,t)=>t,target:e.eventBus.prepend(e=>({type:`feature_decide`,feature:e}))}),(0,u.sample)({clock:[a.doneData,l.doneData],source:n,fn:(e,t)=>!t||e.some(e=>e.id===t.id&&e.key===t.key)?e:[...e,t],target:n});function f(e){return d.map(t=>t.find(t=>t.id===e))}function p(e){return t.map(t=>t[e],{skipVoid:!1})}function m(e){let t=(0,u.createStore)(async()=>void 0,{skipVoid:!1}),r=(0,u.createEffect)(async()=>{let t=f(e).getState();if(t)return async()=>(await t.getBucket()).bucket});return(0,u.sample)({source:n,filter:t=>t.some(t=>t.id===e),target:r}),(0,u.sample)({clock:r.doneData,filter:e=>e!==void 0,target:t}),r(),t}return{register:i,getById:f,getByName:p,listStore:d,getEvokableFeature:m}});function D(e){return(0,d.invoke)(E,e)}var O=(e,t,n)=>{n.register(e,t)},k=(0,u.createDomain)(`history`);function A(e,t){return{id:l.t(`history-entry-${Date.now()}-${Math.random()}}`),node:t,at:Date.now(),experienceId:e}}var j=(0,d.createFactory)(()=>{let e=k.store({entries:[]}),t=k.event(),n=k.event(),r=k.event(),a=k.event(),o=k.event();e.on(t,(e,t)=>({entries:[...e.entries,A(t.experienceId,t.node)]})),e.on(n,(e,t)=>({entries:[...e.entries.slice(0,-1),A(t.experienceId,t.node)]})),e.on(a,(e,t)=>t),e.on(o,(e,t)=>({entries:e.entries.filter(e=>e.experienceId!==t.experienceId)}));function s(e,t){let n={lastStepIndex:-1,secondLastStepIndex:-1};for(let r=e.length-1;r>=0;r--){let a=e[r],o=a?.node;if(!(!o||!i.a(o))&&!(t&&a.experienceId!==t))if(n.lastStepIndex===-1)n.lastStepIndex=r;else{n.secondLastStepIndex=r;break}}return n}return e.on(r,(e,t)=>{let{secondLastStepIndex:n}=s(e.entries,t.experienceId),r=n===-1?e.entries:e.entries.slice(0,n+1);return{...e,entries:r}}),{push:t,replace:n,back:r,restore:a,clearForExperience:o,entriesStore:e.map(e=>e.entries)}});function M(){return(0,d.invoke)(j)}var N=0,P=e=>{let t=(0,u.createStore)([]);return(0,u.sample)({clock:e,source:t,fn:(e,t)=>[...e,{id:N++,at:new Date,payload:t}],target:t}),t},F=(0,u.createDomain)(`field`),I=(0,d.createFactory)(()=>{let e=F.store({}),t=(0,u.createApi)(e,{register(e,t){return{...e,[t.field.id]:t.field}},updateByKey(e,t){let n=Object.values(e).find(e=>e.key===t.fieldKey);return n?{...e,[n.id]:Object.assign({},n,t.updates)}:e}});function n(e){t.register({field:e})}function r(n,r){let i=e.getState(),a=Object.values(i).find(e=>e.key===n)?.key;a&&t.updateByKey({fieldKey:a,updates:r})}let i=e.map(e=>Object.values(e));function a(t){return e.map(e=>e[t]??null,{skipVoid:!1})}function o(t){return e.map(e=>Object.values(e).find(e=>e.key===t)??null,{skipVoid:!1})}function s(t){return e.map(e=>Object.values(e).find(e=>e.name===t)??null,{skipVoid:!1})}return{register:n,update:r,getById:a,getByKey:o,listStore:i,getByName:s}});function L(){return(0,d.invoke)(I)}var R=(0,u.createDomain)(`step`),z=(0,d.createFactory)(()=>{let e=R.store({}),t=(0,u.createApi)(e,{register(e,t){return{...e,[t.step.id]:t.step}}});function n(e){t.register({step:e})}let r=e.map(e=>Object.values(e));function i(t){return e.map(e=>e[t]??null,{skipVoid:!1})}function a(t){return e.map(e=>Object.values(e).find(e=>e.key===t)??null,{skipVoid:!1})}return{register:n,getById:i,getByKey:a,listStore:r,indexStore:e}});function B(){return(0,d.invoke)(z)}function V(e,t){t.register(e)}var H=(0,u.createDomain)(`action`),U=(0,d.createFactory)(({client:e})=>{let t=H.store({}),n=(0,u.createApi)(t,{register(e,t){return{...e,[t.key]:{key:t.key,action:t.action}}}});function r(e,r){t.getState()[e]&&`${e}`,n.register(Object.freeze({key:e,action:r}))}let i=t.map(e=>Object.values(e));function a(e){return t.map(t=>t[e]?.action,{skipVoid:!1})}function o(t,n){let r=(0,u.createStore)(()=>void 0,{skipVoid:!1}),i=n?{experience:n.experience}:null,o=(0,u.createEffect)(async()=>{let n=a(t).getState();if(!n)return;let r=w(e);return(...e)=>n({...r,args:e},i)});return(0,u.sample)({source:{responses:e.responses.listStore,fields:e.fields.listStore},target:o}),(0,u.sample)({clock:o.doneData,filter:e=>e!==void 0,target:r}),o(),r}return{register:r,getByKey:a,listStore:i,getEvokableAction:o}});function W(e){return(0,d.invoke)(U,e)}var G=(e,t,n)=>{n.register(e,t)};function K(e,t,n,r){return{fieldKey:e.key,userMessage:n,systemMessage:r,value:t}}function q(e){return e===null||e===``||Array.isArray(e)&&!e.length}function J(e){return typeof e==`string`||typeof e==`number`||typeof e==`boolean`||e===null}function Y(e){try{return JSON.stringify(e),!0}catch{return!1}}function oe(e,t){return t.find(t=>t.key===e)??null}function se(e,t){return e.multiple&&(typeof t==`string`||typeof t==`number`||typeof t==`boolean`)?[t]:t}function ce(e,t){if(e.type!==`object`||q(t))return null;if(e.multiple){if(!Array.isArray(t))return K(e,t,`This field expects multiple values`,`Field expects an array of objects.`);for(let n of t){if(typeof n!=`object`||!n)return K(e,t,`This field expects object values`,`Field expects an array of objects, but received non-object value.`);if(!Y(n))return K(e,t,`This field contains non-serializable data`,`Field value contains non-JSON-serializable data (functions, circular references, etc.).`)}return null}return Array.isArray(t)?K(e,t,`This field expects a single value`,`Field expects a single object, not an array.`):typeof t!=`object`||!t?K(e,t,`This field expects an object value`,`Field expects an object value.`):Y(t)?null:K(e,t,`This field contains non-serializable data`,`Field value contains non-JSON-serializable data (functions, circular references, etc.).`)}function le(e,t){if(q(t)||!Array.isArray(e.options)||e.options.length===0)return null;let n=Array.isArray(t)?t:[t];if(e.type===`object`){let r=new Set(e.options.map(e=>JSON.stringify(e.value)));return n.every(e=>r.has(JSON.stringify(e)))?null:K(e,t,`This field expects a valid option`,`Field expects a valid option from the defined choices.`)}let r=e.options.map(e=>e.value);return n.every(e=>!J(e)||e===null?!1:r.includes(e))?null:K(e,t,`This field expects a valid option`,`Field expects a valid option. Valid options are: ${r.join(`, `)}`)}async function ue(e,n,r,i){if(n.validation&&!t.t(n.validation)&&!q(r)){let t=i?{$input:r,responses:i}:{$input:r},a=await e(n.validation,t);if(typeof a==`string`)return K(n,r,a,`Field validation resulted in an error: ${a}.`);if(a===!1)return K(n,r,`This field is invalid`,`Field validation resulted in an unspecified error.`)}return n.required&&q(r)?K(n,r,`This field is required`,`Field is required.`):!n.multiple&&Array.isArray(r)&&r.length>1?K(n,r,`This field expects a single response`,`Field expects a single response.`):null}var de=(0,u.createDomain)(`response`),fe=(0,d.createFactory)(({client:t})=>{let n=de.store({}),r=(0,u.createEvent)(),i=(0,u.createEvent)(),a=(0,u.createApi)(n,{register(e,t){return{...e,[t.fieldKey]:t.response}},registerBatch(e,t){return{...e,...t}},clear(e,t){return Object.fromEntries(Object.entries(e).filter(([e])=>e!==t))},clearAll(){return{}}});function o(e,t){if(typeof e==`string`){if(t===void 0)throw Error(`Response is required when registering a single field`);a.register({fieldKey:e,response:t})}else a.registerBatch(e)}let s=(n,r)=>e.t(t,n,r),c=(0,u.attach)({source:{allFields:t.fields.listStore,existingResponses:n},effect:async({allFields:e,existingResponses:t},n)=>{let r=[],i={},a={...t,...n},o=Object.entries(n),c=await Promise.allSettled(o.map(async([t,n])=>{let o=oe(t,e);if(!o){r.push({fieldKey:t,userMessage:`Field '${t}' not found`,systemMessage:`No field with key '${t}' exists. Available field keys are: ${e.map(e=>e.key).join(`,`)}.`,value:n});return}let c=se(o,n),l=await ue(s,o,c,a);if(l){r.push(l);return}let u=ce(o,c);if(u){r.push(u);return}let d=le(o,c);if(d){r.push(d);return}i[o.key]=n}));for(let[e,t]of c.entries()){if(t.status!==`rejected`)continue;let n=o[e];if(!n)continue;let[i,a]=n,s=t.reason instanceof Error?t.reason.message:String(t.reason);r.push({fieldKey:i,userMessage:`An unexpected error occurred validating this field`,systemMessage:`Validation threw for field '${i}': ${s}`,value:a})}return{responsesToCommit:i,validationErrors:r}}});async function l(e){return c(e)}let d=(0,u.attach)({source:n,effect:async(e,t)=>{let{responsesToCommit:n,validationErrors:r}=await c(t);return r.length?{errors:r}:(a.registerBatch(n),{errors:[]})}});async function f(e){return d(e)}let p=n.map(e=>e),m=n.map(e=>Object.entries(e).map(([e,t])=>({fieldKey:e,value:t})));function h(e){return(0,u.combine)({f:e,s:n},({f:e,s:t})=>{let n=e?t[e.key]??null:null;return n===null?e?.defaultValue!==void 0&&e.defaultValue!==null?e.defaultValue:null:n})}function g(e){return h(t.fields.getById(e))}function _(e){return h(t.fields.getByKey(e))}function v(e){return h(t.fields.getByName(e))}return(0,u.sample)({clock:r,target:a.clearAll}),(0,u.sample)({clock:i,target:a.clear}),{register:o,clearAll:r,clear:i,commit:f,getResponsesToCommit:l,listStore:m,getAllStore:p,getByFieldId:g,getByFieldKey:_,getByFieldName:v}});function pe(e){return(0,d.invoke)(fe,e)}var me=(0,u.createDomain)(`condition`),he=(0,d.createFactory)(()=>{let e=me.store({}),t=(0,u.createApi)(e,{register(e,t){return{...e,[t.condition.id]:t.condition}}});function n(e){t.register({condition:e})}let r=e.map(e=>Object.values(e));function i(t){return e.map(e=>e[t]??null,{skipVoid:!1})}function a(t){return e.map(e=>Object.values(e).find(e=>e.key===t)??null,{skipVoid:!1})}return{register:n,getById:i,getByKey:a,listStore:r,indexStore:e}});function ge(){return(0,d.invoke)(he)}function _e(){if(r.r()){let e=[document.currentScript,document.getElementById(`picked_script`),document.getElementById(`picked`),document.getElementById(`cvly`),document.getElementById(`cvly-x`)];for(let t of e)if(t?.dataset.api)return t.dataset.api}return`https://api.picked.app`}function ve(){if(!r.d())return{};let e=new URLSearchParams(window.location.search),t={},n=new Set;for(let[t]of e.entries())t.startsWith(`picked-`)&&n.add(t);for(let r of n){let n=r.replace(`picked-`,``);t[n]=e.getAll(r)}let i=o.t(`s`);if(n.size>0)o.r.set(i,t);else{let e=o.r.get(i);if(e)return e.json()||{}}return t}function ye(){return r.n()?crypto.randomUUID():`${Date.now().toString(36)}-${Math.random().toString(36).substring(2,15)}-${Math.random().toString(36).substring(2,15)}-${Math.random().toString(36).substring(2,15)}`}var be=o.t(`session`,`global`),xe=()=>{let e=o.n.get(be),t;e.isSet()&&(t=e.json());let n=t=>e.set({id:t.id,isUser:t.isUser,identifiers:t.identifiers}),r={id:t?.id??ye(),isUser:t?.isUser??void 0,identifiers:t?.identifiers??void 0,setIsUser(e){this.isUser=e,n(this)},setIdentifier(e,t){this.identifiers={...this.identifiers,[e]:t},n(this)},removeIdentifier(e){this.identifiers&&(this.identifiers=Object.fromEntries(Object.entries(this.identifiers).filter(([t])=>t!==e)),this.identifiers=Object.keys(this.identifiers).length?this.identifiers:void 0,n(this))}};return n(r),r},Se=()=>r.o()?xe():null;function X(){if(r.d())return globalThis.window.pickedConfig}function Z(){if(!r.d())return;let e=X(),t=e?.organizationId,n=e?.projectId;return t&&n?{organizationId:t,projectId:n}:void 0}function Ce(){if(!r.r())return;let e=document.getElementById(`picked_script`)||document.querySelector(`script#picked`)||document.getElementById(`cvly`);if(!e)return;let t=e.dataset.organizationid||e.getAttribute(`organization-id`),n=e.dataset.projectid||e.getAttribute(`project-id`);return t&&n?{organizationId:t,projectId:n}:void 0}function we(e){let{organizationId:t,projectId:n}=e;if(t&&n)return{organizationId:t,projectId:n};let r=Z();if(r)return r;let i=Ce();if(i)return i;throw Error(`organizationId and projectId are required. You can provide them via one of:
|
|
1
|
+
Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require(`../rules-logic-DNLOv90w.cjs`),t=require(`../object-CUJOjanb.cjs`),n=require(`../logger-fbvQC40v.cjs`),r=require(`../supports-Dsjg-82e.cjs`),i=require(`../nodes-DDDs-rC2.cjs`),a=require(`../experience-BhteyYBl.cjs`),o=require(`../storage-BXSlLTRa.cjs`),s=require(`../api-dOWgI8zV.cjs`),c=require(`../experience-instance-CZDcicPj.cjs`),l=require(`../id-Bbodazn8.cjs`);let u=require(`effector`),d=require(`@withease/factories`);var f=(e,t,n)=>{let r=t.name,i=t.setup(e);if(i){let e=n[r]??{};n[r]=Object.freeze({...e,...i})}},p=(0,u.createDomain)(`component`),m=(0,d.createFactory)(({client:e,component:t,name:n})=>({name:n,component:t,frameworkStore:e.frameworks.getByName(t.frameworkName)}));function h(e){return(0,d.invoke)(m,e)}var g=(0,d.createFactory)(({client:e})=>{let t=p.store({}),n=(0,u.createApi)(t,{register(e,t){return{...e,[t.name]:t}}});function r(r,i){t.getState()[r]&&`${r}`;let a=h({client:e,name:r,component:i});n.register(a)}let i=t.map(e=>Object.values(e));function a(e){return t.map(t=>t[e],{skipVoid:!1})}return{register:r,getByName:a,listStore:i}});function _(e){return(0,d.invoke)(g,e)}var v=(e,t,n)=>{n.register(e,t)},ee=(0,u.createDomain)(`framework`),y=(0,d.createFactory)(({client:e})=>{let t=ee.store({}),n=(0,u.createApi)(t,{register(e,t){return{...e,[t.name]:t.framework}}});function r(e,r){t.getState()[e]&&`${e}`,n.register({name:e,framework:r})}let i=t.map(e=>Object.values(e));function a(e){return t.map(t=>t[e],{skipVoid:!1})}return{register:r,getByName:a,listStore:i}});function b(e){return(0,d.invoke)(y,e)}var x=(e,t)=>{t.register(e.name,e)},S=6e3,C=o.t(`last_ping`,`global`),te=async e=>{try{let t=Date.now(),n=o.n.get(C),r=0;if(n.isSet()&&(r=n.json()??0),r&&t-r<S)return!0;let i={projectId:e.projectId,path:window.location.pathname},a={},c=document.getElementById(`picked_script`)?.dataset.verceltoken;c&&(a[`x-vercel-protection-bypass`]=c);let l=(await s.n(e.apiUrl,`ping`,i,a)).ok;return l&&n.set(t),l}catch{return!1}};function w(e){let t=typeof window<`u`,n={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(n)}var ne=(0,u.createDomain)(`predicate`),re=(0,d.createFactory)(({client:e})=>{let t=ne.store({}),n=(0,u.createApi)(t,{register(e,t){return{...e,[t.name]:{name:t.name,predicate:t.predicate}}}});function r(e,r){t.getState()[e]&&`${e}`,n.register(Object.freeze({name:e,predicate:r}))}let i=t.map(e=>Object.values(e));function a(e){return t.map(t=>t[e]?.predicate,{skipVoid:!1})}function o(t){let n=(0,u.createStore)(()=>void 0,{skipVoid:!1}),r=(0,u.createEffect)(async()=>{let n=a(t).getState();if(!n)return;let r=w(e);return(...e)=>n({...r,args:e})});return(0,u.sample)({source:{responses:e.responses.listStore,fields:e.fields.listStore},target:r}),(0,u.sample)({clock:r.doneData,filter:e=>e!==void 0,target:n}),r(),n}return{register:r,getByName:a,listStore:i,getEvokablePredicate:o}});function ie(e){return(0,d.invoke)(re,e)}var ae=(e,t,n)=>{n.register(e,t)},T=(0,u.createDomain)(`feature`),E=(0,d.createFactory)(({client:e})=>{let t=T.store({}),n=T.store([]),r=(0,u.createApi)(t,{register(e,t){return{...e,[t.id]:t.feature}}});function i(e,n){t.getState()[e]&&`${e}`;let i={id:e,feature:{...n,id:e}};r.register(Object.freeze({id:e,feature:i}))}let a=(0,u.createEffect)(async({id:e,key:t,storage:n=`local`})=>{let r=o.t(`feature:${e}:${t}`,`global`),i=(n===`session`?o.r:o.n).get(r).boolean();return i===null?null:{id:e,key:t,bucket:i,storage:n}}),s=(0,u.createEffect)(e=>{if(!e)return null;let t=o.t(`feature:${e.id}:${e.key}`,`global`);(e.storage===`session`?o.r:o.n).set(t,e.bucket)}),c=new Map,l=(0,u.attach)({source:{allFeaturesStore:t,resolvedFeaturesStore:n},effect:async({allFeaturesStore:e,resolvedFeaturesStore:t},{id:n,decide:r,key:i})=>{let a=t.find(e=>e.id===n&&e.key===i);if(a)return a;let o=e[n];if(!o)throw Error(`Feature with id '${n}' not found`);let s=c.get(`${n}:${i}`);if(s!==void 0){let e=await s;return{id:o.id,bucket:e,key:i,storage:o.feature.storage}}let l=r();c.set(`${n}:${i}`,l);let u=await l;return{id:o.id,bucket:u,key:i,storage:o.feature.storage}}});(0,u.sample)({clock:r.register,fn:e=>{let{id:t,feature:n}=e;return{id:t,key:n.feature.key,storage:n.feature.storage}},target:a}),(0,u.sample)({source:t,clock:l.doneData,fn:(e,t)=>{let{id:n,bucket:r,storage:i}=t,a=e[n]?.feature.key;return a?{key:a,id:n,bucket:r,storage:i}:null},target:s});let d=(0,u.combine)({allFeaturesStore:t,resolvedFeaturesStore:n}).map(({allFeaturesStore:e,resolvedFeaturesStore:t})=>Object.values(e).map(e=>{let n=t.find(t=>t.id===e.id&&t.key===e.feature.key);return n?{id:e.id,name:e.feature.name,key:e.feature.key,getBucket:()=>({id:e.id,bucket:n.bucket}),isResolved:!0}:{id:e.id,name:e.feature.name,key:e.feature.key,getBucket:async()=>await l(e.feature),isResolved:!1}}));(0,u.sample)({clock:l.doneData,source:{resolvedFeatures:n},filter:({resolvedFeatures:e},{id:t,key:n})=>!e.some(e=>e.id===t&&e.key===n),fn:(e,t)=>t,target:e.eventBus.prepend(e=>({type:`feature_decide`,feature:e}))}),(0,u.sample)({clock:[a.doneData,l.doneData],source:n,fn:(e,t)=>!t||e.some(e=>e.id===t.id&&e.key===t.key)?e:[...e,t],target:n});function f(e){return d.map(t=>t.find(t=>t.id===e))}function p(e){return t.map(t=>t[e],{skipVoid:!1})}function m(e){let t=(0,u.createStore)(async()=>void 0,{skipVoid:!1}),r=(0,u.createEffect)(async()=>{let t=f(e).getState();if(t)return async()=>(await t.getBucket()).bucket});return(0,u.sample)({source:n,filter:t=>t.some(t=>t.id===e),target:r}),(0,u.sample)({clock:r.doneData,filter:e=>e!==void 0,target:t}),r(),t}return{register:i,getById:f,getByName:p,listStore:d,getEvokableFeature:m}});function D(e){return(0,d.invoke)(E,e)}var O=(e,t,n)=>{n.register(e,t)},k=(0,u.createDomain)(`history`);function A(e,t){return{id:l.t(`history-entry-${Date.now()}-${Math.random()}}`),node:t,at:Date.now(),experienceId:e}}var j=(0,d.createFactory)(()=>{let e=k.store({entries:[]}),t=k.event(),n=k.event(),r=k.event(),a=k.event(),o=k.event();e.on(t,(e,t)=>({entries:[...e.entries,A(t.experienceId,t.node)]})),e.on(n,(e,t)=>({entries:[...e.entries.slice(0,-1),A(t.experienceId,t.node)]})),e.on(a,(e,t)=>t),e.on(o,(e,t)=>e.entries.every(e=>e.experienceId!==t.experienceId)?e:{entries:e.entries.filter(e=>e.experienceId!==t.experienceId)});function s(e,t){let n={lastStepIndex:-1,secondLastStepIndex:-1};for(let r=e.length-1;r>=0;r--){let a=e[r],o=a?.node;if(!(!o||!i.a(o))&&!(t&&a.experienceId!==t))if(n.lastStepIndex===-1)n.lastStepIndex=r;else{n.secondLastStepIndex=r;break}}return n}return e.on(r,(e,t)=>{let{secondLastStepIndex:n}=s(e.entries,t.experienceId),r=n===-1?e.entries:e.entries.slice(0,n+1);return{...e,entries:r}}),{push:t,replace:n,back:r,restore:a,clearForExperience:o,entriesStore:e.map(e=>e.entries)}});function M(){return(0,d.invoke)(j)}var N=0,P=e=>{let t=(0,u.createStore)([]);return(0,u.sample)({clock:e,source:t,fn:(e,t)=>[...e,{id:N++,at:new Date,payload:t}],target:t}),t},F=(0,u.createDomain)(`field`),I=(0,d.createFactory)(()=>{let e=F.store({}),t=(0,u.createApi)(e,{register(e,t){return{...e,[t.field.id]:t.field}},updateByKey(e,t){let n=Object.values(e).find(e=>e.key===t.fieldKey);return n?{...e,[n.id]:Object.assign({},n,t.updates)}:e}});function n(e){t.register({field:e})}function r(n,r){let i=e.getState(),a=Object.values(i).find(e=>e.key===n)?.key;a&&t.updateByKey({fieldKey:a,updates:r})}let i=e.map(e=>Object.values(e));function a(t){return e.map(e=>e[t]??null,{skipVoid:!1})}function o(t){return e.map(e=>Object.values(e).find(e=>e.key===t)??null,{skipVoid:!1})}function s(t){return e.map(e=>Object.values(e).find(e=>e.name===t)??null,{skipVoid:!1})}return{register:n,update:r,getById:a,getByKey:o,listStore:i,getByName:s}});function L(){return(0,d.invoke)(I)}var R=(0,u.createDomain)(`step`),z=(0,d.createFactory)(()=>{let e=R.store({}),t=(0,u.createApi)(e,{register(e,t){return{...e,[t.step.id]:t.step}}});function n(e){t.register({step:e})}let r=e.map(e=>Object.values(e));function i(t){return e.map(e=>e[t]??null,{skipVoid:!1})}function a(t){return e.map(e=>Object.values(e).find(e=>e.key===t)??null,{skipVoid:!1})}return{register:n,getById:i,getByKey:a,listStore:r,indexStore:e}});function B(){return(0,d.invoke)(z)}function V(e,t){t.register(e)}var H=(0,u.createDomain)(`action`),U=(0,d.createFactory)(({client:e})=>{let t=H.store({}),n=(0,u.createApi)(t,{register(e,t){return{...e,[t.key]:{key:t.key,action:t.action}}}});function r(e,r){t.getState()[e]&&`${e}`,n.register(Object.freeze({key:e,action:r}))}let i=t.map(e=>Object.values(e));function a(e){return t.map(t=>t[e]?.action,{skipVoid:!1})}function o(t,n){let r=(0,u.createStore)(()=>void 0,{skipVoid:!1}),i=n?{experience:n.experience}:null,o=(0,u.createEffect)(async()=>{let n=a(t).getState();if(!n)return;let r=w(e);return(...e)=>n({...r,args:e},i)});return(0,u.sample)({source:{responses:e.responses.listStore,fields:e.fields.listStore},target:o}),(0,u.sample)({clock:o.doneData,filter:e=>e!==void 0,target:r}),o(),r}return{register:r,getByKey:a,listStore:i,getEvokableAction:o}});function W(e){return(0,d.invoke)(U,e)}var G=(e,t,n)=>{n.register(e,t)};function K(e,t,n,r){return{fieldKey:e.key,userMessage:n,systemMessage:r,value:t}}function q(e){return e===null||e===``||Array.isArray(e)&&!e.length}function J(e){return typeof e==`string`||typeof e==`number`||typeof e==`boolean`||e===null}function Y(e){try{return JSON.stringify(e),!0}catch{return!1}}function oe(e,t){return t.find(t=>t.key===e)??null}function se(e,t){return e.multiple&&(typeof t==`string`||typeof t==`number`||typeof t==`boolean`)?[t]:t}function ce(e,t){if(e.type!==`object`||q(t))return null;if(e.multiple){if(!Array.isArray(t))return K(e,t,`This field expects multiple values`,`Field expects an array of objects.`);for(let n of t){if(typeof n!=`object`||!n)return K(e,t,`This field expects object values`,`Field expects an array of objects, but received non-object value.`);if(!Y(n))return K(e,t,`This field contains non-serializable data`,`Field value contains non-JSON-serializable data (functions, circular references, etc.).`)}return null}return Array.isArray(t)?K(e,t,`This field expects a single value`,`Field expects a single object, not an array.`):typeof t!=`object`||!t?K(e,t,`This field expects an object value`,`Field expects an object value.`):Y(t)?null:K(e,t,`This field contains non-serializable data`,`Field value contains non-JSON-serializable data (functions, circular references, etc.).`)}function le(e,t){if(q(t)||!Array.isArray(e.options)||e.options.length===0)return null;let n=Array.isArray(t)?t:[t];if(e.type===`object`){let r=new Set(e.options.map(e=>JSON.stringify(e.value)));return n.every(e=>r.has(JSON.stringify(e)))?null:K(e,t,`This field expects a valid option`,`Field expects a valid option from the defined choices.`)}let r=e.options.map(e=>e.value);return n.every(e=>!J(e)||e===null?!1:r.includes(e))?null:K(e,t,`This field expects a valid option`,`Field expects a valid option. Valid options are: ${r.join(`, `)}`)}async function ue(e,n,r,i){if(n.validation&&!t.t(n.validation)&&!q(r)){let t=i?{$input:r,responses:i}:{$input:r},a=await e(n.validation,t);if(typeof a==`string`)return K(n,r,a,`Field validation resulted in an error: ${a}.`);if(a===!1)return K(n,r,`This field is invalid`,`Field validation resulted in an unspecified error.`)}return n.required&&q(r)?K(n,r,`This field is required`,`Field is required.`):!n.multiple&&Array.isArray(r)&&r.length>1?K(n,r,`This field expects a single response`,`Field expects a single response.`):null}var de=(0,u.createDomain)(`response`),fe=(0,d.createFactory)(({client:t})=>{let n=de.store({}),r=(0,u.createEvent)(),i=(0,u.createEvent)(),a=(0,u.createApi)(n,{register(e,t){return{...e,[t.fieldKey]:t.response}},registerBatch(e,t){return{...e,...t}},clear(e,t){return Object.fromEntries(Object.entries(e).filter(([e])=>e!==t))},clearAll(){return{}}});function o(e,t){if(typeof e==`string`){if(t===void 0)throw Error(`Response is required when registering a single field`);a.register({fieldKey:e,response:t})}else a.registerBatch(e)}let s=(n,r)=>e.t(t,n,r),c=(0,u.attach)({source:{allFields:t.fields.listStore,existingResponses:n},effect:async({allFields:e,existingResponses:t},n)=>{let r=[],i={},a={...t,...n},o=Object.entries(n),c=await Promise.allSettled(o.map(async([t,n])=>{let o=oe(t,e);if(!o){r.push({fieldKey:t,userMessage:`Field '${t}' not found`,systemMessage:`No field with key '${t}' exists. Available field keys are: ${e.map(e=>e.key).join(`,`)}.`,value:n});return}let c=se(o,n),l=await ue(s,o,c,a);if(l){r.push(l);return}let u=ce(o,c);if(u){r.push(u);return}let d=le(o,c);if(d){r.push(d);return}i[o.key]=n}));for(let[e,t]of c.entries()){if(t.status!==`rejected`)continue;let n=o[e];if(!n)continue;let[i,a]=n,s=t.reason instanceof Error?t.reason.message:String(t.reason);r.push({fieldKey:i,userMessage:`An unexpected error occurred validating this field`,systemMessage:`Validation threw for field '${i}': ${s}`,value:a})}return{responsesToCommit:i,validationErrors:r}}});async function l(e){return c(e)}let d=(0,u.attach)({source:n,effect:async(e,t)=>{let{responsesToCommit:n,validationErrors:r}=await c(t);return r.length?{errors:r}:(a.registerBatch(n),{errors:[]})}});async function f(e){return d(e)}let p=n.map(e=>e),m=n.map(e=>Object.entries(e).map(([e,t])=>({fieldKey:e,value:t})));function h(e){return(0,u.combine)({f:e,s:n},({f:e,s:t})=>{let n=e?t[e.key]??null:null;return n===null?e?.defaultValue!==void 0&&e.defaultValue!==null?e.defaultValue:null:n})}function g(e){return h(t.fields.getById(e))}function _(e){return h(t.fields.getByKey(e))}function v(e){return h(t.fields.getByName(e))}return(0,u.sample)({clock:r,target:a.clearAll}),(0,u.sample)({clock:i,target:a.clear}),{register:o,clearAll:r,clear:i,commit:f,getResponsesToCommit:l,listStore:m,getAllStore:p,getByFieldId:g,getByFieldKey:_,getByFieldName:v}});function pe(e){return(0,d.invoke)(fe,e)}var me=(0,u.createDomain)(`condition`),he=(0,d.createFactory)(()=>{let e=me.store({}),t=(0,u.createApi)(e,{register(e,t){return{...e,[t.condition.id]:t.condition}}});function n(e){t.register({condition:e})}let r=e.map(e=>Object.values(e));function i(t){return e.map(e=>e[t]??null,{skipVoid:!1})}function a(t){return e.map(e=>Object.values(e).find(e=>e.key===t)??null,{skipVoid:!1})}return{register:n,getById:i,getByKey:a,listStore:r,indexStore:e}});function ge(){return(0,d.invoke)(he)}function _e(){if(r.r()){let e=[document.currentScript,document.getElementById(`picked_script`),document.getElementById(`picked`),document.getElementById(`cvly`),document.getElementById(`cvly-x`)];for(let t of e)if(t?.dataset.api)return t.dataset.api}return`https://api.picked.app`}function ve(){if(!r.d())return{};let e=new URLSearchParams(window.location.search),t={},n=new Set;for(let[t]of e.entries())t.startsWith(`picked-`)&&n.add(t);for(let r of n){let n=r.replace(`picked-`,``);t[n]=e.getAll(r)}let i=o.t(`s`);if(n.size>0)o.r.set(i,t);else{let e=o.r.get(i);if(e)return e.json()||{}}return t}function ye(){return r.n()?crypto.randomUUID():`${Date.now().toString(36)}-${Math.random().toString(36).substring(2,15)}-${Math.random().toString(36).substring(2,15)}-${Math.random().toString(36).substring(2,15)}`}var be=o.t(`session`,`global`),xe=()=>{let e=o.n.get(be),t;e.isSet()&&(t=e.json());let n=t=>e.set({id:t.id,isUser:t.isUser,identifiers:t.identifiers}),r={id:t?.id??ye(),isUser:t?.isUser??void 0,identifiers:t?.identifiers??void 0,setIsUser(e){this.isUser=e,n(this)},setIdentifier(e,t){this.identifiers={...this.identifiers,[e]:t},n(this)},removeIdentifier(e){this.identifiers&&(this.identifiers=Object.fromEntries(Object.entries(this.identifiers).filter(([t])=>t!==e)),this.identifiers=Object.keys(this.identifiers).length?this.identifiers:void 0,n(this))}};return n(r),r},Se=()=>r.o()?xe():null;function X(){if(r.d())return globalThis.window.pickedConfig}function Z(){if(!r.d())return;let e=X(),t=e?.organizationId,n=e?.projectId;return t&&n?{organizationId:t,projectId:n}:void 0}function Ce(){if(!r.r())return;let e=document.getElementById(`picked_script`)||document.querySelector(`script#picked`)||document.getElementById(`cvly`);if(!e)return;let t=e.dataset.organizationid||e.getAttribute(`organization-id`),n=e.dataset.projectid||e.getAttribute(`project-id`);return t&&n?{organizationId:t,projectId:n}:void 0}function we(e){let{organizationId:t,projectId:n}=e;if(t&&n)return{organizationId:t,projectId:n};let r=Z();if(r)return r;let i=Ce();if(i)return i;throw Error(`organizationId and projectId are required. You can provide them via one of:
|
|
2
2
|
(1) createClient({ organizationId, projectId }) options;
|
|
3
3
|
(2) window.pickedConfig = { organizationId, projectId };
|
|
4
4
|
(3) a <script> tag with id 'picked_script', 'picked', or 'cvly' that includes data-organizationid/data-projectid (or organization-id/project-id) attributes.`)}function Q(e){return e==null||e===``||Number.isNaN(e)}var Te={default:(e,t)=>Q(e)?String(t??``):String(e),append:(e,t)=>t&&!Q(e)?`${e} ${t}`:e,prepend:(e,t)=>t&&!Q(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;let t=new Intl.ListFormat(`en`,{style:`long`,type:`conjunction`});if(Array.isArray(e))return t.format(e.map(String));if(e instanceof Map){let n=Array.from(e.entries()).map(([e,t])=>`${e}: ${t}`);return t.format(n)}return e instanceof Set?t.format(Array.from(e).map(String)):e}};function Ee(e){return typeof e==`object`&&!!e}function De(e,t){let n=t;for(let t of e.split(`.`))if(Ee(n)&&t in n)n=n[t];else return;return typeof n==`function`?n():n}function Oe(e,t){let n=e.split(`|`).map(e=>e.trim()),r=De(n.shift()??``,t);for(let e of n){let[t,...n]=e.split(`:`),i=t?.trim()??``,a=n.join(`:`).trim().replaceAll(/(?:^['"]|['"]$)/g,``),o=Te[i];o&&(r=o(r,a))}return Q(r)?``:typeof r==`object`?JSON.stringify(r):String(r)}function ke(e,t){let n=``,r=0;for(;r<e.length;)if(e[r]===`{`&&e[r+1]===`{`){r+=2;let i=``;for(;r<e.length;){if(e[r]===`}`&&e[r+1]===`}`){r+=2;break}i+=e[r++]}n+=Oe(i.trim(),t)}else n+=e[r++];return n}var $=class{static logger=n.t;options;isReady=!1;plugins={};pluginStartHooks=[];eventBus=(0,u.createEvent)();events;organizationId;projectId;apiUrl;dashboardUrl;documentationSiteUrl;session;precondition;condition;preconditionPassed;searchParams=ve();history=M();components=_({client:this});experienceInstances=c.n({client:this});experiences=a.t({client:this});frameworks=b({client:this});predicates=ie({client:this});features=D({client:this});conditions=ge();fields=L();responses=pe({client:this});steps=B();actions=W({client:this});constructor(e){this.events=P(this.eventBus);let{organizationId:t,projectId:n}=we(e);this.organizationId=t,this.projectId=n,this.options=Object.freeze(e),this.apiUrl=e.apiUrl||_e(),this.dashboardUrl=e.dashboardUrl??`https://dashboard.picked.app`,this.documentationSiteUrl=e.documentationSiteUrl??`https://docs.picked.app`,this.session=Se(),this.setupPlugins(),this.setupFeatures(),this.setupPredicates(),this.setupActions(),this.setupComponents(),this.precondition=e.precondition,this.condition=e.condition,this.eventBus({type:`load`,version:s.r()})}start=()=>{te(this),(async()=>{if(!r.r())return;await this.runPluginStartHooks();let e=await this.evaluateGate(this.precondition);this.preconditionPassed=e;let t;e&&(t=await this.evaluateGate(this.condition));let n=e&&t===!0;if(typeof t==`boolean`&&this.session){let e=t;this.session.setIsUser(e),this.eventBus({type:`user_decide`,value:e})}if(this.eventBus({type:`initialize`}),n&&a.n(this),await i.c(),n&&a.n(this),this.eventBus({type:`ready`}),this.isReady=!0,this.session){let{id:e,isUser:t,identifiers:n}=this.session;this.eventBus({type:`session`,id:e,isUser:t,identifiers:n})}})()};registerFramework=e=>{x(e,this.frameworks)};registerComponent=(e,t)=>{v(e,t,this.components)};registerPlugin=e=>{f(this,e,this.plugins);let t=this.plugins[e.name];t?.onStart&&this.pluginStartHooks.push(t.onStart)};registerFeature=(e,t)=>{O(e,t,this.features)};registerPredicate=(e,t)=>{ae(e,t,this.predicates)};registerCondition=e=>{this.conditions.register(e)};registerField=e=>{this.fields.register(e)};registerStep=e=>{V(e,this.steps)};registerAction=(e,t)=>{G(e,t,this.actions)};registerExperience=e=>{e.component&&v(`experience:${e.id}`,e.component,this.components),this.experiences.register(e)};getStateSnapshot=()=>w(this);launchExperienceById=async(e,t)=>{this.experiences.launch({id:e,options:t})};launchExperienceByKey=async(e,t)=>{this.experiences.launch({key:e,options:t})};openExperienceById=async e=>{this.experiences.open({id:e})};openExperienceByKey=async e=>{this.experiences.open({key:e})};async runPluginStartHooks(){for(let e of this.pluginStartHooks)await e()}async evaluateGate(t){return t===void 0?!0:typeof t==`boolean`?t:await e.t(this,t)===!0}setupPlugins(){this.options.plugins?.forEach(e=>{if(Array.isArray(e)){e.forEach(e=>{this.registerPlugin(e)});return}let t=typeof e==`function`?e():e;if(Array.isArray(t)){t.forEach(e=>this.registerPlugin(e));return}this.registerPlugin(t)})}setupFeatures(){let e=this.options.features;e&&Object.entries(e).forEach(([e,t])=>{let n=typeof t==`function`?t():t;this.registerFeature(e,n)}),this.searchParams.feature&&this.searchParams.feature.forEach(e=>{try{let[t,n]=e.split(`:`);if(!t||!n)return;let r=n;r===`true`&&(r=!0),r===`false`&&(r=!1),this.registerFeature(t,{key:`${r}`,name:t,decide:()=>r,storage:`session`})}catch{}})}setupPredicates(){let e=this.options.predicates;e&&Object.entries(e).forEach(([e,t])=>{if(typeof t!=`function`){`${e}`;return}this.registerPredicate(e,t)})}setupActions(){let e=this.options.actions;e&&Object.entries(e).forEach(([e,t])=>{if(typeof t!=`function`){`${e}`;return}this.registerAction(e,t)})}setupComponents(){let e=this.options.components;e&&Object.entries(e).forEach(([e,t])=>{this.registerComponent(e,t)})}getPluginConfig=e=>this.plugins[e]??{};renderString=(e,t)=>{let n=this.responses.listStore.getState().reduce((e,t)=>(e[t.fieldKey]=t.value,e),{});return ke(e,{...t,responses:n})}};function Ae(e){return{$$type:`lazy-component`,load:e}}function je(e){return typeof e==`object`&&!!e&&`$$type`in e&&e.$$type===`lazy-component`}var Me=e=>{let t=new $(e);return r.p(t),t};exports.Picked=$,exports.createClient=Me,exports.createStorageKey=o.t,exports.evaluateRuleLogic=e.t,exports.getPickedConfig=X,exports.isLazyLoader=je,exports.isPickedRoot=i.u,exports.lazyComponent=Ae,exports.localStore=o.n,exports.sessionStore=o.r,exports.subscribe=o.i,exports.supportsCookies=r.t,exports.supportsCryptoRandomUUID=r.n,exports.supportsDocument=r.r,exports.supportsHistory=r.i,exports.supportsIntersectionObserver=r.a,exports.supportsLocalStorage=r.o,exports.supportsLocation=r.s,exports.supportsSessionStorage=r.c,exports.supportsShadowRoot=r.l,exports.supportsWebComponents=r.u,exports.supportsWindow=r.d;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require(`../../../logger-fbvQC40v.cjs`),t=require(`../../../supports-Dsjg-82e.cjs`),n=require(`../../../experience-BhteyYBl.cjs`);var
|
|
1
|
+
Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require(`../../../logger-fbvQC40v.cjs`),t=require(`../../../supports-Dsjg-82e.cjs`),n=require(`../../../nodes-DDDs-rC2.cjs`),r=require(`../../../experience-BhteyYBl.cjs`);var i=new WeakSet,a=()=>({name:`dom-observer`,setup:e=>{o()&&(i.has(e)||(i.add(e),s(e)))}});function o(){return!(!t.d()||!t.r()||typeof MutationObserver!=`function`||typeof requestAnimationFrame!=`function`)}function s(e){if(document.body){c(e);return}n.c().then(()=>{document.body&&c(e)})}function c(t){let n=[],i=``,a=new Map,o=new Set,s=new Map,c=new Set,d=()=>{let e=new Set;for(let n of t.experiences.listStore.getState()){let t=n.configStore.getState().targetSelectors;for(let n of t){if(typeof n.selector!=`string`)continue;let t=n.selector.trim();if(!(t.length===0||e.has(t))){if(!l(t)){`${t}`;continue}e.add(t)}}}n=Array.from(e),i=n.join(`,`)},f=e=>{let t=new Set(e.map(e=>e.id));for(let[e,n]of a)t.has(e)||(n(),a.delete(e));for(let t of e)a.has(t.id)||a.set(t.id,t.configStore.watch(d))};t.experiences.listStore.watch(e=>{f(e)}),t.experienceInstances.listStore.watch(e=>{for(let t of e)o.add(t.experienceId),s.delete(t.experienceId),c.delete(t.experienceId)});let p=!1,m=!1,h,g=()=>{if(o.size===0)return;let e=new Set;for(let n of t.experienceInstances.listStore.getState())e.add(n.experienceId);for(let n of o){if(e.has(n)){s.delete(n);continue}if(c.has(n))continue;let r=(s.get(n)??0)+1;r>=2?(t.history.clearForExperience({experienceId:n}),c.add(n),s.delete(n)):s.set(n,r)}},_=()=>{if(p){m=!0;return}p=!0;try{g()}catch{}Promise.resolve(r.n(t)).catch(t=>e.t(`error`,t)).finally(()=>{p=!1,m&&(m=!1,v())})},v=()=>{h===void 0&&(h=requestAnimationFrame(()=>{h=void 0,_()}))};new MutationObserver(e=>{if(i.length!==0){for(let t of e)if(t.type===`childList`&&u(t.addedNodes,i)){v();return}}}).observe(document.body,{childList:!0,subtree:!0})}function l(e){try{return document.createDocumentFragment().querySelector(e),!0}catch{return!1}}function u(e,t){if(t.length===0)return!1;for(let n of Array.from(e))if(n instanceof Element&&(n.matches(t)||n.querySelector(t)!==null))return!0;return!1}exports.domObserverPlugin=a;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`}),require(`../../../logger-fbvQC40v.cjs`);const e=require(`../../../api-
|
|
1
|
+
Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`}),require(`../../../logger-fbvQC40v.cjs`);const e=require(`../../../api-dOWgI8zV.cjs`);function t(e){let t=2166136261;for(let n=0;n<e.length;n++)t^=e.charCodeAt(n),t=Math.imul(t,16777619);return t>>>0}function n(e){return t(e)%100}function r(e,t){return t<=0?!1:t>=100?!0:e<t}function i(e){return typeof e==`object`&&!!e&&`features`in e&&Array.isArray(e.features)}function a(e,t){if(Array.isArray(t.conditions))for(let n of t.conditions)e.registerCondition(n)}function o(e,t){e.registerExperience({id:t.id,key:t.key,name:t.name,targets:t.targets,nodes:t.nodes,edges:t.edges,condition:t.condition,initializeOpen:t.initializeOpen,componentName:t.componentName})}function s(e,t){if(Array.isArray(t.fields))for(let n of t.fields)e.registerField(n)}function c(e,t){if(!Array.isArray(t.steps))return;let n=new Map(t.fields.map(e=>[e.id,e.key]));for(let r of t.steps){let t=[];for(let e of r.fieldIds??[]){let i=n.get(e);if(i===void 0){`${r.key}${e}`;continue}t.push(i)}e.registerStep({id:r.id,key:r.key,name:r.name,fieldKeys:t,layoutName:r.layoutName})}}function l(e,t){if(Array.isArray(t.experiences))for(let n of t.experiences)o(e,n)}function u(e){let t=e.searchParams[`preview-token`];if(t&&t.length>0)return t[0]}function d(e){let t=new Set,n=e.searchParams.feature;if(!n)return t;for(let e of n){let n=e.indexOf(`:`);n>0&&t.add(e.substring(0,n))}return t}function f(e,t,r){let i=d(e),a=e.session?.id;if(!a)throw Error(`Session ID is required for feature registration`);let o=n(a);for(let n of t.features)i.has(n.id)||p(e,n,r,o)}function p(e,t,n,i){e.registerFeature(t.id,{key:`v${t.version}`,name:t.name,storage:n?`session`:`local`,decide:()=>t.enabled?r(i,t.weight):!1})}function m(){let e;try{e=__PICKED_PROJECT_CONFIG__}catch{return}if(e===void 0)return;let t;if(typeof e==`string`)try{t=JSON.parse(e)}catch{return}else t=e;if(i(t))return t}function h(e){try{let t=new URL(e).hostname;return t===`localhost`||t===`127.0.0.1`||t===`::1`}catch{return!1}}function g(e){if(typeof e!=`object`||!e||!(`cause`in e))return!1;let{cause:t}=e;return typeof t!=`object`||!t||!(`code`in t)?!1:t.code===`ECONNREFUSED`}async function _(t,n,r){let a=r?.previewToken?`projects/${n}?preview_token=${encodeURIComponent(r.previewToken)}`:`projects/${n}`,o;try{o=await e.t(t,a,r?.headers)}catch(e){return h(t)&&g(e),null}if(!o.ok)return`${o.status.toString()}`,null;let s;try{s=await o.json()}catch{return null}return i(s)?s:null}function v(e){return{name:`dynamic-experiences`,setup:t=>{let n=e?.apiUrl??t.apiUrl;return{onStart:async()=>{let r=u(t);if(r){let e=await _(n,t.projectId,{previewToken:r});e&&(f(t,e,!0),a(t,e),s(t,e),c(t,e),l(t,e));return}let i=e?.projectConfig??m();if(i){f(t,i,!1),a(t,i),s(t,i),c(t,i),l(t,i);return}let o=await _(n,t.projectId);o&&(f(t,o,!1),a(t,o),s(t,o),c(t,o),l(t,o))}}}}}exports.createClientHeaders=e.i,exports.dynamicExperiencesPlugin=v,exports.fetchProject=_;
|
package/dist/esm/index.js
CHANGED
|
@@ -5,7 +5,7 @@ import { a as r, c as i, d as a, i as o, l as s, n as c, o as l, p as u, r as d,
|
|
|
5
5
|
import { a as h, c as g, u as _ } from "../nodes-ChVU1VZO.js";
|
|
6
6
|
import { n as v, t as ee } from "../experience-CoMdlvyn.js";
|
|
7
7
|
import { i as te, n as y, r as b, t as x } from "../storage-hOHCCXvP.js";
|
|
8
|
-
import { n as ne, r as re } from "../api-
|
|
8
|
+
import { n as ne, r as re } from "../api-DaHz97Mz.js";
|
|
9
9
|
import { n as ie } from "../experience-instance-IkIw31Cg.js";
|
|
10
10
|
import { t as S } from "../id-B-N2zNbS.js";
|
|
11
11
|
import { attach as C, combine as w, createApi as T, createDomain as E, createEffect as D, createEvent as O, createStore as k, sample as A } from "effector";
|
|
@@ -343,7 +343,7 @@ function K(e, t) {
|
|
|
343
343
|
}
|
|
344
344
|
var ge = j(() => {
|
|
345
345
|
let e = G.store({ entries: [] }), t = G.event(), n = G.event(), r = G.event(), i = G.event(), a = G.event();
|
|
346
|
-
e.on(t, (e, t) => ({ entries: [...e.entries, K(t.experienceId, t.node)] })), e.on(n, (e, t) => ({ entries: [...e.entries.slice(0, -1), K(t.experienceId, t.node)] })), e.on(i, (e, t) => t), e.on(a, (e, t) => ({ entries: e.entries.filter((e) => e.experienceId !== t.experienceId) })
|
|
346
|
+
e.on(t, (e, t) => ({ entries: [...e.entries, K(t.experienceId, t.node)] })), e.on(n, (e, t) => ({ entries: [...e.entries.slice(0, -1), K(t.experienceId, t.node)] })), e.on(i, (e, t) => t), e.on(a, (e, t) => e.entries.every((e) => e.experienceId !== t.experienceId) ? e : { entries: e.entries.filter((e) => e.experienceId !== t.experienceId) });
|
|
347
347
|
function o(e, t) {
|
|
348
348
|
let n = {
|
|
349
349
|
lastStepIndex: -1,
|
|
@@ -1,56 +1,88 @@
|
|
|
1
1
|
import { t as e } from "../../../logger-6z_gb4rA.js";
|
|
2
2
|
import { d as t, r as n } from "../../../supports-0XIfd4-R.js";
|
|
3
|
-
import {
|
|
3
|
+
import { c as r } from "../../../nodes-ChVU1VZO.js";
|
|
4
|
+
import { n as i } from "../../../experience-CoMdlvyn.js";
|
|
4
5
|
//#region src/plugins/dom-observer/plugin.ts
|
|
5
|
-
var
|
|
6
|
+
var a = /* @__PURE__ */ new WeakSet(), o = () => ({
|
|
6
7
|
name: "dom-observer",
|
|
7
8
|
setup: (e) => {
|
|
8
|
-
|
|
9
|
+
s() && (a.has(e) || (a.add(e), c(e)));
|
|
9
10
|
}
|
|
10
11
|
});
|
|
11
|
-
function
|
|
12
|
-
return !(!t() || !n() || typeof MutationObserver != "function" || typeof requestAnimationFrame != "function"
|
|
12
|
+
function s() {
|
|
13
|
+
return !(!t() || !n() || typeof MutationObserver != "function" || typeof requestAnimationFrame != "function");
|
|
13
14
|
}
|
|
14
|
-
function
|
|
15
|
-
|
|
15
|
+
function c(e) {
|
|
16
|
+
if (document.body) {
|
|
17
|
+
l(e);
|
|
18
|
+
return;
|
|
19
|
+
}
|
|
20
|
+
r().then(() => {
|
|
21
|
+
document.body && l(e);
|
|
22
|
+
});
|
|
23
|
+
}
|
|
24
|
+
function l(t) {
|
|
25
|
+
let n = [], r = "", a = /* @__PURE__ */ new Map(), o = /* @__PURE__ */ new Set(), s = /* @__PURE__ */ new Map(), c = /* @__PURE__ */ new Set(), l = () => {
|
|
16
26
|
let e = /* @__PURE__ */ new Set();
|
|
17
27
|
for (let n of t.experiences.listStore.getState()) {
|
|
18
28
|
let t = n.configStore.getState().targetSelectors;
|
|
19
|
-
for (let n of t)
|
|
29
|
+
for (let n of t) {
|
|
30
|
+
if (typeof n.selector != "string") continue;
|
|
31
|
+
let t = n.selector.trim();
|
|
32
|
+
if (!(t.length === 0 || e.has(t))) {
|
|
33
|
+
if (!u(t)) {
|
|
34
|
+
`${t}`;
|
|
35
|
+
continue;
|
|
36
|
+
}
|
|
37
|
+
e.add(t);
|
|
38
|
+
}
|
|
39
|
+
}
|
|
20
40
|
}
|
|
21
|
-
n = Array.from(e);
|
|
22
|
-
},
|
|
41
|
+
n = Array.from(e), r = n.join(",");
|
|
42
|
+
}, f = (e) => {
|
|
23
43
|
let t = new Set(e.map((e) => e.id));
|
|
24
|
-
for (let [e, n] of
|
|
25
|
-
for (let t of e)
|
|
44
|
+
for (let [e, n] of a) t.has(e) || (n(), a.delete(e));
|
|
45
|
+
for (let t of e) a.has(t.id) || a.set(t.id, t.configStore.watch(l));
|
|
26
46
|
};
|
|
27
47
|
t.experiences.listStore.watch((e) => {
|
|
28
|
-
|
|
48
|
+
f(e);
|
|
29
49
|
}), t.experienceInstances.listStore.watch((e) => {
|
|
30
|
-
for (let t of e)
|
|
50
|
+
for (let t of e) o.add(t.experienceId), s.delete(t.experienceId), c.delete(t.experienceId);
|
|
31
51
|
});
|
|
32
|
-
let
|
|
33
|
-
if (
|
|
34
|
-
let e = /* @__PURE__ */ new
|
|
35
|
-
for (let n of t.experienceInstances.listStore.getState()) e.
|
|
36
|
-
for (let n of
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
52
|
+
let p = !1, m = !1, h, g = () => {
|
|
53
|
+
if (o.size === 0) return;
|
|
54
|
+
let e = /* @__PURE__ */ new Set();
|
|
55
|
+
for (let n of t.experienceInstances.listStore.getState()) e.add(n.experienceId);
|
|
56
|
+
for (let n of o) {
|
|
57
|
+
if (e.has(n)) {
|
|
58
|
+
s.delete(n);
|
|
59
|
+
continue;
|
|
60
|
+
}
|
|
61
|
+
if (c.has(n)) continue;
|
|
62
|
+
let r = (s.get(n) ?? 0) + 1;
|
|
63
|
+
r >= 2 ? (t.history.clearForExperience({ experienceId: n }), c.add(n), s.delete(n)) : s.set(n, r);
|
|
64
|
+
}
|
|
65
|
+
}, _ = () => {
|
|
66
|
+
if (p) {
|
|
67
|
+
m = !0;
|
|
40
68
|
return;
|
|
41
69
|
}
|
|
42
|
-
|
|
43
|
-
|
|
70
|
+
p = !0;
|
|
71
|
+
try {
|
|
72
|
+
g();
|
|
73
|
+
} catch {}
|
|
74
|
+
Promise.resolve(i(t)).catch((t) => /* @__PURE__ */ e("error", t)).finally(() => {
|
|
75
|
+
p = !1, m && (m = !1, v());
|
|
44
76
|
});
|
|
45
|
-
},
|
|
46
|
-
|
|
47
|
-
|
|
77
|
+
}, v = () => {
|
|
78
|
+
h === void 0 && (h = requestAnimationFrame(() => {
|
|
79
|
+
h = void 0, _();
|
|
48
80
|
}));
|
|
49
81
|
};
|
|
50
82
|
new MutationObserver((e) => {
|
|
51
|
-
if (
|
|
52
|
-
for (let t of e) if (t.type === "childList" &&
|
|
53
|
-
|
|
83
|
+
if (r.length !== 0) {
|
|
84
|
+
for (let t of e) if (t.type === "childList" && d(t.addedNodes, r)) {
|
|
85
|
+
v();
|
|
54
86
|
return;
|
|
55
87
|
}
|
|
56
88
|
}
|
|
@@ -59,23 +91,17 @@ function s(t) {
|
|
|
59
91
|
subtree: !0
|
|
60
92
|
});
|
|
61
93
|
}
|
|
62
|
-
function
|
|
63
|
-
if (t.length === 0) return !1;
|
|
64
|
-
let n = t.join(",");
|
|
65
|
-
for (let r of Array.from(e)) if (r instanceof Element && l(r, n, t)) return !0;
|
|
66
|
-
return !1;
|
|
67
|
-
}
|
|
68
|
-
function l(e, t, n) {
|
|
94
|
+
function u(e) {
|
|
69
95
|
try {
|
|
70
|
-
return
|
|
96
|
+
return document.createDocumentFragment().querySelector(e), !0;
|
|
71
97
|
} catch {
|
|
72
|
-
for (let t of n) try {
|
|
73
|
-
if (e.matches(t) || e.querySelector(t) !== null) return !0;
|
|
74
|
-
} catch {
|
|
75
|
-
continue;
|
|
76
|
-
}
|
|
77
98
|
return !1;
|
|
78
99
|
}
|
|
79
100
|
}
|
|
101
|
+
function d(e, t) {
|
|
102
|
+
if (t.length === 0) return !1;
|
|
103
|
+
for (let n of Array.from(e)) if (n instanceof Element && (n.matches(t) || n.querySelector(t) !== null)) return !0;
|
|
104
|
+
return !1;
|
|
105
|
+
}
|
|
80
106
|
//#endregion
|
|
81
|
-
export {
|
|
107
|
+
export { o as domObserverPlugin };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"history.d.ts","sourceRoot":"","sources":["../../../../src/entities/history/history.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAA;AAM9D,MAAM,WAAW,YAAY;IAC3B,EAAE,EAAE,MAAM,CAAA;IACV,IAAI,EAAE,cAAc,CAAA;IACpB,EAAE,EAAE,MAAM,CAAA;IACV,YAAY,EAAE,MAAM,CAAA;CACrB;
|
|
1
|
+
{"version":3,"file":"history.d.ts","sourceRoot":"","sources":["../../../../src/entities/history/history.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAA;AAM9D,MAAM,WAAW,YAAY;IAC3B,EAAE,EAAE,MAAM,CAAA;IACV,IAAI,EAAE,cAAc,CAAA;IACpB,EAAE,EAAE,MAAM,CAAA;IACV,YAAY,EAAE,MAAM,CAAA;CACrB;AAwGD,wBAAgB,aAAa;;sBAvFsB,MAAM;cAAQ,cAAc;;;sBACzB,MAAM;cAAQ,cAAc;;;uBAC9B,MAAM;;;iBACT,YAAY,EAAE;;;sBACE,MAAM;;;EAqFtE"}
|
|
@@ -16,16 +16,28 @@ import { Plugin } from '../../entities/plugin/plugin';
|
|
|
16
16
|
* selector set is rebuilt whenever `client.experiences.listStore` changes
|
|
17
17
|
* or any registered experience's `configStore` updates, so newly
|
|
18
18
|
* registered experiences and re-merged target selectors both extend the
|
|
19
|
-
* watch list without restarting the observer.
|
|
19
|
+
* watch list without restarting the observer. Invalid selectors are
|
|
20
|
+
* filtered (and a warning logged) at recompute time so the matcher hot
|
|
21
|
+
* path never throws.
|
|
20
22
|
*
|
|
21
23
|
* Before each reconcile, history is cleared for any experience whose
|
|
22
|
-
* instance was previously observed alive but
|
|
23
|
-
*
|
|
24
|
-
*
|
|
25
|
-
*
|
|
24
|
+
* instance was previously observed alive but has been absent for at
|
|
25
|
+
* least two consecutive reconciles. The two-frame debounce prevents
|
|
26
|
+
* transient unmounts (SPA route reflows, conditional re-renders, portal
|
|
27
|
+
* repositioning) from wiping mid-flow user history. Each id is cleared
|
|
28
|
+
* at most once per spawn, and cold inits with restored history left by
|
|
29
|
+
* `historyBrowserStoragePlugin` are left untouched because no prior
|
|
30
|
+
* instance has been observed.
|
|
31
|
+
*
|
|
32
|
+
* Setup is deferred until `document.body` is parsed, so SDKs loaded from
|
|
33
|
+
* `<head>` without `defer` (the standard Shopify-theme / GTM-template
|
|
34
|
+
* pattern) still install once the body becomes available.
|
|
26
35
|
*
|
|
27
36
|
* No-ops outside browser environments and on partial-DOM runtimes that
|
|
28
|
-
* lack `MutationObserver
|
|
37
|
+
* lack `MutationObserver` or `requestAnimationFrame`. `MutationObserver`
|
|
38
|
+
* does not cross shadow root or iframe boundaries, so experiences whose
|
|
39
|
+
* target lives inside a shadow tree or a cross-origin frame are not
|
|
40
|
+
* reconciled by this plugin.
|
|
29
41
|
*
|
|
30
42
|
* @returns {Plugin} The plugin.
|
|
31
43
|
* @example
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"plugin.d.ts","sourceRoot":"","sources":["../../../../src/plugins/dom-observer/plugin.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"plugin.d.ts","sourceRoot":"","sources":["../../../../src/plugins/dom-observer/plugin.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,8BAA8B,CAAA;AAK1D;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+CG;AACH,eAAO,MAAM,iBAAiB,QAAO,MAiBpC,CAAA"}
|