@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.
@@ -8,7 +8,7 @@ function n(n, r) {
8
8
  }
9
9
  //#endregion
10
10
  //#region src/utils/version.ts
11
- var r = () => "0.0.1-dev.1777616114652", i = "v1";
11
+ var r = () => "0.0.1-dev.1777856271317", i = "v1";
12
12
  function a(e, t) {
13
13
  return new URL(`/api/${i}/${t}`, e).toString();
14
14
  }
@@ -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.1777616114652`,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}});
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 r=new WeakSet,i=()=>({name:`dom-observer`,setup:e=>{a()&&(r.has(e)||(r.add(e),o(e)))}});function a(){return!(!t.d()||!t.r()||typeof MutationObserver!=`function`||typeof requestAnimationFrame!=`function`||!document.body)}function o(t){let r=[],i=new Map,a=new Set,o=()=>{let e=new Set;for(let n of t.experiences.listStore.getState()){let t=n.configStore.getState().targetSelectors;for(let n of t)typeof n.selector==`string`&&n.selector.length>0&&e.add(n.selector)}r=Array.from(e)},c=e=>{let t=new Set(e.map(e=>e.id));for(let[e,n]of i)t.has(e)||(n(),i.delete(e));for(let t of e)i.has(t.id)||i.set(t.id,t.configStore.watch(o))};t.experiences.listStore.watch(e=>{c(e)}),t.experienceInstances.listStore.watch(e=>{for(let t of e)a.add(t.experienceId)});let l=!1,u=!1,d,f=()=>{if(a.size===0)return;let e=new Map;for(let n of t.experienceInstances.listStore.getState())e.set(n.experienceId,(e.get(n.experienceId)??0)+1);for(let n of a)(e.get(n)??0)===0&&t.history.clearForExperience({experienceId:n})},p=()=>{if(l){u=!0;return}l=!0,f(),Promise.resolve(n.n(t)).catch(t=>e.t(`error`,t)).finally(()=>{l=!1,u&&(u=!1,m())})},m=()=>{d===void 0&&(d=requestAnimationFrame(()=>{d=void 0,p()}))};new MutationObserver(e=>{if(r.length!==0){for(let t of e)if(t.type===`childList`&&s(t.addedNodes,r)){m();return}}}).observe(document.body,{childList:!0,subtree:!0})}function s(e,t){if(t.length===0)return!1;let n=t.join(`,`);for(let r of Array.from(e))if(r instanceof Element&&c(r,n,t))return!0;return!1}function c(e,t,n){try{return e.matches(t)||e.querySelector(t)!==null}catch{for(let t of n)try{if(e.matches(t)||e.querySelector(t)!==null)return!0}catch{continue}return!1}}exports.domObserverPlugin=i;
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-BryLRI2Y.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=_;
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-Dn57QBPm.js";
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 { n as r } from "../../../experience-CoMdlvyn.js";
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 i = /* @__PURE__ */ new WeakSet(), a = () => ({
6
+ var a = /* @__PURE__ */ new WeakSet(), o = () => ({
6
7
  name: "dom-observer",
7
8
  setup: (e) => {
8
- o() && (i.has(e) || (i.add(e), s(e)));
9
+ s() && (a.has(e) || (a.add(e), c(e)));
9
10
  }
10
11
  });
11
- function o() {
12
- return !(!t() || !n() || typeof MutationObserver != "function" || typeof requestAnimationFrame != "function" || !document.body);
12
+ function s() {
13
+ return !(!t() || !n() || typeof MutationObserver != "function" || typeof requestAnimationFrame != "function");
13
14
  }
14
- function s(t) {
15
- let n = [], i = /* @__PURE__ */ new Map(), a = /* @__PURE__ */ new Set(), o = () => {
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) typeof n.selector == "string" && n.selector.length > 0 && e.add(n.selector);
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
- }, s = (e) => {
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 i) t.has(e) || (n(), i.delete(e));
25
- for (let t of e) i.has(t.id) || i.set(t.id, t.configStore.watch(o));
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
- s(e);
48
+ f(e);
29
49
  }), t.experienceInstances.listStore.watch((e) => {
30
- for (let t of e) a.add(t.experienceId);
50
+ for (let t of e) o.add(t.experienceId), s.delete(t.experienceId), c.delete(t.experienceId);
31
51
  });
32
- let l = !1, u = !1, d, f = () => {
33
- if (a.size === 0) return;
34
- let e = /* @__PURE__ */ new Map();
35
- for (let n of t.experienceInstances.listStore.getState()) e.set(n.experienceId, (e.get(n.experienceId) ?? 0) + 1);
36
- for (let n of a) (e.get(n) ?? 0) === 0 && t.history.clearForExperience({ experienceId: n });
37
- }, p = () => {
38
- if (l) {
39
- u = !0;
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
- l = !0, f(), Promise.resolve(r(t)).catch((t) => /* @__PURE__ */ e("error", t)).finally(() => {
43
- l = !1, u && (u = !1, m());
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
- }, m = () => {
46
- d === void 0 && (d = requestAnimationFrame(() => {
47
- d = void 0, p();
77
+ }, v = () => {
78
+ h === void 0 && (h = requestAnimationFrame(() => {
79
+ h = void 0, _();
48
80
  }));
49
81
  };
50
82
  new MutationObserver((e) => {
51
- if (n.length !== 0) {
52
- for (let t of e) if (t.type === "childList" && c(t.addedNodes, n)) {
53
- m();
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 c(e, t) {
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 e.matches(t) || e.querySelector(t) !== null;
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 { a as domObserverPlugin };
107
+ export { o as domObserverPlugin };
@@ -1,5 +1,5 @@
1
1
  import "../../../logger-6z_gb4rA.js";
2
- import { i as e, t } from "../../../api-Dn57QBPm.js";
2
+ import { i as e, t } from "../../../api-DaHz97Mz.js";
3
3
  //#region src/plugins/dynamic-experiences/hash.ts
4
4
  function n(e) {
5
5
  let t = 2166136261;
@@ -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;AAkGD,wBAAgB,aAAa;;sBAjFsB,MAAM;cAAQ,cAAc;;;sBACzB,MAAM;cAAQ,cAAc;;;uBAC9B,MAAM;;;iBACT,YAAY,EAAE;;;sBACE,MAAM;;;EA+EtE"}
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 is no longer present,
23
- * preventing a re-spawn from inheriting a stale `currentNode`. Cold
24
- * inits with restored history left by `historyBrowserStoragePlugin` are
25
- * left untouched because no prior instance has been observed.
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`, `requestAnimationFrame`, or `document.body`.
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":"AAKA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,8BAA8B,CAAA;AAK1D;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAmCG;AACH,eAAO,MAAM,iBAAiB,QAAO,MAiBpC,CAAA"}
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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@picked/client",
3
- "version": "0.0.1-dev.1777616114652",
3
+ "version": "0.0.1-dev.1777856271317",
4
4
  "dependencies": {
5
5
  "@withease/factories": "^1.0.5"
6
6
  },