@picked/client 0.0.1-dev.1777593605103 → 0.0.1-dev.1777594341273

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.
@@ -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.1777593605103`,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.1777594341273`,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}});
@@ -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.1777593605103", i = "v1";
11
+ var r = () => "0.0.1-dev.1777594341273", i = "v1";
12
12
  function a(e, t) {
13
13
  return new URL(`/api/${i}/${t}`, e).toString();
14
14
  }
package/dist/cjs/index.js CHANGED
@@ -1,4 +1,4 @@
1
- Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require(`../rules-logic-DJhGFqhC.cjs`),t=require(`../logger-CJUj90QX.cjs`),n=require(`../supports-CKSVYpQx.cjs`),r=require(`../nodes-DBK4N9YY.cjs`),i=require(`../experience-CTEBY-it.cjs`),a=require(`../storage-B6lQtc4-.cjs`),o=require(`../api-DWzLgPsf.cjs`),s=require(`../experience-instance-BN0RZG1b.cjs`),c=require(`../id-Cg7fVl1O.cjs`);let l=require(`effector`),u=require(`@withease/factories`);var d=(e,t,n)=>{let r=t.name,i=t.setup(e);if(i){let e=n[r]??{};n[r]=Object.freeze({...e,...i})}},f=(0,l.createDomain)(`component`),p=(0,u.createFactory)(({client:e,component:t,name:n})=>({name:n,component:t,frameworkStore:e.frameworks.getByName(t.frameworkName)}));function m(e){return(0,u.invoke)(p,e)}var h=(0,u.createFactory)(({client:e})=>{let t=f.store({}),n=(0,l.createApi)(t,{register(e,t){return{...e,[t.name]:t}}});function r(r,i){t.getState()[r]&&`${r}`;let a=m({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 g(e){return(0,u.invoke)(h,e)}var _=(e,t,n)=>{n.register(e,t)},v=(0,l.createDomain)(`framework`),y=(0,u.createFactory)(({client:e})=>{let t=v.store({}),n=(0,l.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 ee(e){return(0,u.invoke)(y,e)}var b=(e,t)=>{t.register(e.name,e)},x=6e3,S=a.t(`last_ping`,`global`),C=async e=>{try{let t=Date.now(),n=a.n.get(S),r=0;if(n.isSet()&&(r=n.json()??0),r&&t-r<x)return!0;let i={projectId:e.projectId,path:window.location.pathname},s={},c=document.getElementById(`picked_script`)?.dataset.verceltoken;c&&(s[`x-vercel-protection-bypass`]=c);let l=(await o.n(e.apiUrl,`ping`,i,s)).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 te=(0,l.createDomain)(`predicate`),ne=(0,u.createFactory)(({client:e})=>{let t=te.store({}),n=(0,l.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,l.createStore)(()=>void 0,{skipVoid:!1}),r=(0,l.createEffect)(async()=>{let n=a(t).getState();if(!n)return;let r=w(e);return(...e)=>n({...r,args:e})});return(0,l.sample)({source:{responses:e.responses.listStore,fields:e.fields.listStore},target:r}),(0,l.sample)({clock:r.doneData,filter:e=>e!==void 0,target:n}),r(),n}return{register:r,getByName:a,listStore:i,getEvokablePredicate:o}});function re(e){return(0,u.invoke)(ne,e)}var ie=(e,t,n)=>{n.register(e,t)},T=(0,l.createDomain)(`feature`),E=(0,u.createFactory)(({client:e})=>{let t=T.store({}),n=T.store([]),r=(0,l.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 o=(0,l.createEffect)(async({id:e,key:t,storage:n=`local`})=>{let r=a.t(`feature:${e}:${t}`,`global`),i=(n===`session`?a.r:a.n).get(r).boolean();return i===null?null:{id:e,key:t,bucket:i,storage:n}}),s=(0,l.createEffect)(e=>{if(!e)return null;let t=a.t(`feature:${e.id}:${e.key}`,`global`);(e.storage===`session`?a.r:a.n).set(t,e.bucket)}),c=new Map,u=(0,l.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,l.sample)({clock:r.register,fn:e=>{let{id:t,feature:n}=e;return{id:t,key:n.feature.key,storage:n.feature.storage}},target:o}),(0,l.sample)({source:t,clock:u.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,l.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 u(e.feature),isResolved:!1}}));(0,l.sample)({clock:u.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,l.sample)({clock:[o.doneData,u.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,l.createStore)(async()=>void 0,{skipVoid:!1}),r=(0,l.createEffect)(async()=>{let t=f(e).getState();if(t)return async()=>(await t.getBucket()).bucket});return(0,l.sample)({source:n,filter:t=>t.some(t=>t.id===e),target:r}),(0,l.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,u.invoke)(E,e)}var O=(e,t,n)=>{n.register(e,t)},k=(0,l.createDomain)(`history`);function A(e,t){return{id:c.t(`history-entry-${Date.now()}-${Math.random()}}`),node:t,at:Date.now(),experienceId:e}}var j=(0,u.createFactory)(()=>{let e=k.store({entries:[]}),t=k.event(),n=k.event(),i=k.event(),a=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);function o(e,t){let n={lastStepIndex:-1,secondLastStepIndex:-1};for(let i=e.length-1;i>=0;i--){let a=e[i],o=a?.node;if(!(!o||!r.a(o))&&!(t&&a.experienceId!==t))if(n.lastStepIndex===-1)n.lastStepIndex=i;else{n.secondLastStepIndex=i;break}}return n}return e.on(i,(e,t)=>{let{secondLastStepIndex:n}=o(e.entries,t.experienceId),r=n===-1?e.entries:e.entries.slice(0,n+1);return{...e,entries:r}}),{push:t,replace:n,back:i,restore:a,entriesStore:e.map(e=>e.entries)}});function M(){return(0,u.invoke)(j)}var N=0,P=e=>{let t=(0,l.createStore)([]);return(0,l.sample)({clock:e,source:t,fn:(e,t)=>[...e,{id:N++,at:new Date,payload:t}],target:t}),t},F=(0,l.createDomain)(`field`),I=(0,u.createFactory)(()=>{let e=F.store({}),t=(0,l.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,u.invoke)(I)}var R=(0,l.createDomain)(`step`),z=(0,u.createFactory)(()=>{let e=R.store({}),t=(0,l.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,u.invoke)(z)}function V(e,t){t.register(e)}var H=(0,l.createDomain)(`action`),U=(0,u.createFactory)(({client:e})=>{let t=H.store({}),n=(0,l.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){let n=(0,l.createStore)(()=>void 0,{skipVoid:!1}),r=(0,l.createEffect)(async()=>{let n=a(t).getState();if(!n)return;let r=w(e);return(...e)=>n({...r,args:e})});return(0,l.sample)({source:{responses:e.responses.listStore,fields:e.fields.listStore},target:r}),(0,l.sample)({clock:r.doneData,filter:e=>e!==void 0,target:n}),r(),n}return{register:r,getByKey:a,listStore:i,getEvokableAction:o}});function W(e){return(0,u.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 ae(e,t){return t.find(t=>t.key===e)??null}function oe(e,t){return e.multiple&&(typeof t==`string`||typeof t==`number`||typeof t==`boolean`)?[t]:t}function se(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 ce(e,t){if(!Array.isArray(e.options)||e.options.length===0)return null;let n=Array.isArray(t)?t:[t];if(e.type===`object`){let r=e.options.map(e=>JSON.stringify(e.value));return n.every(e=>r.includes(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 le(t,n,r,i){if(n.validation&&!e.r(n.validation)&&!q(r)){let e=i?{$input:r,responses:i}:{$input:r},a=await t(n.validation,e);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 ue=(0,l.createDomain)(`response`),de=(0,u.createFactory)(({client:t})=>{let n=ue.store({}),r=(0,l.createEvent)(),i=(0,l.createEvent)(),a=(0,l.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,l.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=ae(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=oe(o,n),l=await le(s,o,c,a);if(l){r.push(l);return}let u=se(o,c);if(u){r.push(u);return}let d=ce(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 u(e){return c(e)}let d=(0,l.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,l.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,l.sample)({clock:r,target:a.clearAll}),(0,l.sample)({clock:i,target:a.clear}),{register:o,clearAll:r,clear:i,commit:f,getResponsesToCommit:u,listStore:m,getAllStore:p,getByFieldId:g,getByFieldKey:_,getByFieldName:v}});function fe(e){return(0,u.invoke)(de,e)}var pe=(0,l.createDomain)(`condition`),me=(0,u.createFactory)(()=>{let e=pe.store({}),t=(0,l.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 he(){return(0,u.invoke)(me)}function ge(){if(n.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 _e(){if(!n.d())return{};let e=new URLSearchParams(window.location.search),t={},r=new Set;for(let[t]of e.entries())t.startsWith(`picked-`)&&r.add(t);for(let n of r){let r=n.replace(`picked-`,``);t[r]=e.getAll(n)}let i=a.t(`s`);if(r.size>0)a.r.set(i,t);else{let e=a.r.get(i);if(e)return e.json()||{}}return t}function ve(){return n.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 ye=a.t(`session`,`global`),be=()=>{let e=a.n.get(ye),t;e.isSet()&&(t=e.json());let n=t=>e.set({id:t.id,isUser:t.isUser,identifiers:t.identifiers}),r={id:t?.id??ve(),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},xe=()=>n.o()?be():null;function X(){if(n.d())return globalThis.window.pickedConfig}function Se(){if(!n.d())return;let e=X(),t=e?.organizationId,r=e?.projectId;return t&&r?{organizationId:t,projectId:r}:void 0}function Z(){if(!n.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`),r=e.dataset.projectid||e.getAttribute(`project-id`);return t&&r?{organizationId:t,projectId:r}:void 0}function Ce(e){let{organizationId:t,projectId:n}=e;if(t&&n)return{organizationId:t,projectId:n};let r=Se();if(r)return r;let i=Z();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-DJhGFqhC.cjs`),t=require(`../logger-CJUj90QX.cjs`),n=require(`../supports-CKSVYpQx.cjs`),r=require(`../nodes-DBK4N9YY.cjs`),i=require(`../experience-CTEBY-it.cjs`),a=require(`../storage-B6lQtc4-.cjs`),o=require(`../api-DWa-ZqA4.cjs`),s=require(`../experience-instance-BN0RZG1b.cjs`),c=require(`../id-Cg7fVl1O.cjs`);let l=require(`effector`),u=require(`@withease/factories`);var d=(e,t,n)=>{let r=t.name,i=t.setup(e);if(i){let e=n[r]??{};n[r]=Object.freeze({...e,...i})}},f=(0,l.createDomain)(`component`),p=(0,u.createFactory)(({client:e,component:t,name:n})=>({name:n,component:t,frameworkStore:e.frameworks.getByName(t.frameworkName)}));function m(e){return(0,u.invoke)(p,e)}var h=(0,u.createFactory)(({client:e})=>{let t=f.store({}),n=(0,l.createApi)(t,{register(e,t){return{...e,[t.name]:t}}});function r(r,i){t.getState()[r]&&`${r}`;let a=m({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 g(e){return(0,u.invoke)(h,e)}var _=(e,t,n)=>{n.register(e,t)},v=(0,l.createDomain)(`framework`),y=(0,u.createFactory)(({client:e})=>{let t=v.store({}),n=(0,l.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 ee(e){return(0,u.invoke)(y,e)}var b=(e,t)=>{t.register(e.name,e)},x=6e3,S=a.t(`last_ping`,`global`),C=async e=>{try{let t=Date.now(),n=a.n.get(S),r=0;if(n.isSet()&&(r=n.json()??0),r&&t-r<x)return!0;let i={projectId:e.projectId,path:window.location.pathname},s={},c=document.getElementById(`picked_script`)?.dataset.verceltoken;c&&(s[`x-vercel-protection-bypass`]=c);let l=(await o.n(e.apiUrl,`ping`,i,s)).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 te=(0,l.createDomain)(`predicate`),ne=(0,u.createFactory)(({client:e})=>{let t=te.store({}),n=(0,l.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,l.createStore)(()=>void 0,{skipVoid:!1}),r=(0,l.createEffect)(async()=>{let n=a(t).getState();if(!n)return;let r=w(e);return(...e)=>n({...r,args:e})});return(0,l.sample)({source:{responses:e.responses.listStore,fields:e.fields.listStore},target:r}),(0,l.sample)({clock:r.doneData,filter:e=>e!==void 0,target:n}),r(),n}return{register:r,getByName:a,listStore:i,getEvokablePredicate:o}});function re(e){return(0,u.invoke)(ne,e)}var ie=(e,t,n)=>{n.register(e,t)},T=(0,l.createDomain)(`feature`),E=(0,u.createFactory)(({client:e})=>{let t=T.store({}),n=T.store([]),r=(0,l.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 o=(0,l.createEffect)(async({id:e,key:t,storage:n=`local`})=>{let r=a.t(`feature:${e}:${t}`,`global`),i=(n===`session`?a.r:a.n).get(r).boolean();return i===null?null:{id:e,key:t,bucket:i,storage:n}}),s=(0,l.createEffect)(e=>{if(!e)return null;let t=a.t(`feature:${e.id}:${e.key}`,`global`);(e.storage===`session`?a.r:a.n).set(t,e.bucket)}),c=new Map,u=(0,l.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,l.sample)({clock:r.register,fn:e=>{let{id:t,feature:n}=e;return{id:t,key:n.feature.key,storage:n.feature.storage}},target:o}),(0,l.sample)({source:t,clock:u.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,l.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 u(e.feature),isResolved:!1}}));(0,l.sample)({clock:u.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,l.sample)({clock:[o.doneData,u.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,l.createStore)(async()=>void 0,{skipVoid:!1}),r=(0,l.createEffect)(async()=>{let t=f(e).getState();if(t)return async()=>(await t.getBucket()).bucket});return(0,l.sample)({source:n,filter:t=>t.some(t=>t.id===e),target:r}),(0,l.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,u.invoke)(E,e)}var O=(e,t,n)=>{n.register(e,t)},k=(0,l.createDomain)(`history`);function A(e,t){return{id:c.t(`history-entry-${Date.now()}-${Math.random()}}`),node:t,at:Date.now(),experienceId:e}}var j=(0,u.createFactory)(()=>{let e=k.store({entries:[]}),t=k.event(),n=k.event(),i=k.event(),a=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);function o(e,t){let n={lastStepIndex:-1,secondLastStepIndex:-1};for(let i=e.length-1;i>=0;i--){let a=e[i],o=a?.node;if(!(!o||!r.a(o))&&!(t&&a.experienceId!==t))if(n.lastStepIndex===-1)n.lastStepIndex=i;else{n.secondLastStepIndex=i;break}}return n}return e.on(i,(e,t)=>{let{secondLastStepIndex:n}=o(e.entries,t.experienceId),r=n===-1?e.entries:e.entries.slice(0,n+1);return{...e,entries:r}}),{push:t,replace:n,back:i,restore:a,entriesStore:e.map(e=>e.entries)}});function M(){return(0,u.invoke)(j)}var N=0,P=e=>{let t=(0,l.createStore)([]);return(0,l.sample)({clock:e,source:t,fn:(e,t)=>[...e,{id:N++,at:new Date,payload:t}],target:t}),t},F=(0,l.createDomain)(`field`),I=(0,u.createFactory)(()=>{let e=F.store({}),t=(0,l.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,u.invoke)(I)}var R=(0,l.createDomain)(`step`),z=(0,u.createFactory)(()=>{let e=R.store({}),t=(0,l.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,u.invoke)(z)}function V(e,t){t.register(e)}var H=(0,l.createDomain)(`action`),U=(0,u.createFactory)(({client:e})=>{let t=H.store({}),n=(0,l.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){let n=(0,l.createStore)(()=>void 0,{skipVoid:!1}),r=(0,l.createEffect)(async()=>{let n=a(t).getState();if(!n)return;let r=w(e);return(...e)=>n({...r,args:e})});return(0,l.sample)({source:{responses:e.responses.listStore,fields:e.fields.listStore},target:r}),(0,l.sample)({clock:r.doneData,filter:e=>e!==void 0,target:n}),r(),n}return{register:r,getByKey:a,listStore:i,getEvokableAction:o}});function W(e){return(0,u.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 ae(e,t){return t.find(t=>t.key===e)??null}function oe(e,t){return e.multiple&&(typeof t==`string`||typeof t==`number`||typeof t==`boolean`)?[t]:t}function se(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 ce(e,t){if(!Array.isArray(e.options)||e.options.length===0)return null;let n=Array.isArray(t)?t:[t];if(e.type===`object`){let r=e.options.map(e=>JSON.stringify(e.value));return n.every(e=>r.includes(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 le(t,n,r,i){if(n.validation&&!e.r(n.validation)&&!q(r)){let e=i?{$input:r,responses:i}:{$input:r},a=await t(n.validation,e);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 ue=(0,l.createDomain)(`response`),de=(0,u.createFactory)(({client:t})=>{let n=ue.store({}),r=(0,l.createEvent)(),i=(0,l.createEvent)(),a=(0,l.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,l.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=ae(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=oe(o,n),l=await le(s,o,c,a);if(l){r.push(l);return}let u=se(o,c);if(u){r.push(u);return}let d=ce(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 u(e){return c(e)}let d=(0,l.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,l.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,l.sample)({clock:r,target:a.clearAll}),(0,l.sample)({clock:i,target:a.clear}),{register:o,clearAll:r,clear:i,commit:f,getResponsesToCommit:u,listStore:m,getAllStore:p,getByFieldId:g,getByFieldKey:_,getByFieldName:v}});function fe(e){return(0,u.invoke)(de,e)}var pe=(0,l.createDomain)(`condition`),me=(0,u.createFactory)(()=>{let e=pe.store({}),t=(0,l.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 he(){return(0,u.invoke)(me)}function ge(){if(n.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 _e(){if(!n.d())return{};let e=new URLSearchParams(window.location.search),t={},r=new Set;for(let[t]of e.entries())t.startsWith(`picked-`)&&r.add(t);for(let n of r){let r=n.replace(`picked-`,``);t[r]=e.getAll(n)}let i=a.t(`s`);if(r.size>0)a.r.set(i,t);else{let e=a.r.get(i);if(e)return e.json()||{}}return t}function ve(){return n.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 ye=a.t(`session`,`global`),be=()=>{let e=a.n.get(ye),t;e.isSet()&&(t=e.json());let n=t=>e.set({id:t.id,isUser:t.isUser,identifiers:t.identifiers}),r={id:t?.id??ve(),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},xe=()=>n.o()?be():null;function X(){if(n.d())return globalThis.window.pickedConfig}function Se(){if(!n.d())return;let e=X(),t=e?.organizationId,r=e?.projectId;return t&&r?{organizationId:t,projectId:r}:void 0}function Z(){if(!n.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`),r=e.dataset.projectid||e.getAttribute(`project-id`);return t&&r?{organizationId:t,projectId:r}:void 0}function Ce(e){let{organizationId:t,projectId:n}=e;if(t&&n)return{organizationId:t,projectId:n};let r=Se();if(r)return r;let i=Z();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 we={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 Te(e){return typeof e==`object`&&!!e}function Ee(e,t){let n=t;for(let t of e.split(`.`))if(Te(n)&&t in n)n=n[t];else return;return typeof n==`function`?n():n}function De(e,t){let n=e.split(`|`).map(e=>e.trim()),r=Ee(n.shift()??``,t);for(let e of n){let[t,...n]=e.split(`:`),i=t?.trim()??``,a=n.join(`:`).trim().replaceAll(/(?:^['"]|['"]$)/g,``),o=we[i];o&&(r=o(r,a))}return Q(r)?``:typeof r==`object`?JSON.stringify(r):String(r)}function Oe(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+=De(i.trim(),t)}else n+=e[r++];return n}var $=class{static logger=t.t;options;isReady=!1;plugins={};pluginStartHooks=[];eventBus=(0,l.createEvent)();events;organizationId;projectId;apiUrl;dashboardUrl;documentationSiteUrl;session;precondition;condition;preconditionPassed;searchParams=_e();history=M();components=g({client:this});experienceInstances=s.n({client:this});experiences=i.t({client:this});frameworks=ee({client:this});predicates=re({client:this});features=D({client:this});conditions=he();fields=L();responses=fe({client:this});steps=B();actions=W({client:this});constructor(e){this.events=P(this.eventBus);let{organizationId:t,projectId:n}=Ce(e);this.organizationId=t,this.projectId=n,this.options=Object.freeze(e),this.apiUrl=e.apiUrl||ge(),this.dashboardUrl=e.dashboardUrl??`https://dashboard.picked.app`,this.documentationSiteUrl=e.documentationSiteUrl??`https://docs.picked.app`,this.session=xe(),this.setupPlugins(),this.setupFeatures(),this.setupPredicates(),this.setupActions(),this.setupComponents(),this.precondition=e.precondition,this.condition=e.condition,this.eventBus({type:`load`,version:o.r()})}start=()=>{C(this),(async()=>{if(!n.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 a=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`}),a&&i.n(this),await r.c(),a&&i.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=>{b(e,this.frameworks)};registerComponent=(e,t)=>{_(e,t,this.components)};registerPlugin=e=>{d(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)=>{ie(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&&_(`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 Oe(e,{...t,responses:n})}};function ke(e){return{$$type:`lazy-component`,load:e}}function Ae(e){return typeof e==`object`&&!!e&&`$$type`in e&&e.$$type===`lazy-component`}var je=e=>{let t=new $(e);return n.p(t),t};exports.Picked=$,exports.createClient=je,exports.createStorageKey=a.t,exports.evaluateRuleLogic=e.t,exports.getPickedConfig=X,exports.isLazyLoader=Ae,exports.isPickedRoot=r.u,exports.lazyComponent=ke,exports.localStore=a.n,exports.sessionStore=a.r,exports.subscribe=a.i,exports.supportsCookies=n.t,exports.supportsCryptoRandomUUID=n.n,exports.supportsDocument=n.r,exports.supportsHistory=n.i,exports.supportsIntersectionObserver=n.a,exports.supportsLocalStorage=n.o,exports.supportsLocation=n.s,exports.supportsSessionStorage=n.c,exports.supportsShadowRoot=n.l,exports.supportsWebComponents=n.u,exports.supportsWindow=n.d;
@@ -1 +1 @@
1
- Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`}),require(`../../../logger-CJUj90QX.cjs`);const e=require(`../../../api-DWzLgPsf.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-CJUj90QX.cjs`);const e=require(`../../../api-DWa-ZqA4.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 +1 @@
1
- Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require(`../../../rules-logic-DJhGFqhC.cjs`),t=require(`../../../supports-CKSVYpQx.cjs`),n=require(`../../../experience-CTEBY-it.cjs`);var r=t.f,i=1e3,a=150,o,s=e=>({name:`single-page-app`,setup:e=>{if(!t.d())return;let r,o,s,l=()=>{r&&=(r.disconnect(),void 0),o!==void 0&&(clearTimeout(o),o=void 0),s!==void 0&&(clearTimeout(s),s=void 0)},u=()=>{n.n(e)};c(()=>{l(),requestAnimationFrame(()=>{u()});let e=new MutationObserver(()=>{u(),s!==void 0&&clearTimeout(s),s=setTimeout(l,a)});e.observe(document.body,{childList:!0,subtree:!0}),r=e,o=setTimeout(l,i)})}});function c(n){if(r.addEventListener(`popstate`,()=>{let e=r.location.href,t=o;o=e,t!==e&&n()}),!t.i())return;function i(e){return function(...t){let r=t.length>2?t[2]:void 0;if(r){let i=o,a=String(r);if(o=a,i===a)return e.apply(this,t);n()}return e.apply(this,t)}}e.i(r.history,`pushState`,i),e.i(r.history,`replaceState`,i)}exports.singlePageAppPlugin=s;
1
+ Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require(`../../../rules-logic-DJhGFqhC.cjs`),t=require(`../../../supports-CKSVYpQx.cjs`),n=require(`../../../experience-CTEBY-it.cjs`);var r=t.f,i=1e3,a=150,o,s=new WeakMap,c=e=>({name:`single-page-app`,setup:e=>{t.d()&&f(()=>u(e))}});function l(e){t.d()&&u(e)}function u(e){s.get(e)?.stop(),s.set(e,d(e))}function d(e){let t,r,o,s=()=>{t&&=(t.disconnect(),void 0),r!==void 0&&(clearTimeout(r),r=void 0),o!==void 0&&(clearTimeout(o),o=void 0)},c=()=>{n.n(e)};requestAnimationFrame(c);let l=new MutationObserver(()=>{c(),o!==void 0&&clearTimeout(o),o=setTimeout(s,a)});return l.observe(document.body,{childList:!0,subtree:!0}),t=l,r=setTimeout(s,i),{stop:s}}function f(n){if(r.addEventListener(`popstate`,()=>{let e=r.location.href,t=o;o=e,t!==e&&n()}),!t.i())return;function i(e){return function(...t){let r=t.length>2?t[2]:void 0;if(r){let i=o,a=String(r);if(o=a,i===a)return e.apply(this,t);n()}return e.apply(this,t)}}e.i(r.history,`pushState`,i),e.i(r.history,`replaceState`,i);let a=r.history.pushState,s=r.history.replaceState;queueMicrotask(()=>{(r.history.pushState!==a||r.history.replaceState!==s)&&console.warn(`@picked/client: window.history.pushState was re-wrapped by another script after Picked's instrumentation. SPA reconciliation will not fire on route changes through that wrapper. Call notifyNavigation(picked) from your router (e.g. React Router useEffect on location, SvelteKit afterNavigate) to trigger reconciliation explicitly.`)})}exports.notifyNavigation=l,exports.singlePageAppPlugin=c;
package/dist/esm/index.js CHANGED
@@ -4,7 +4,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,
4
4
  import { a as h, c as g, u as _ } from "../nodes-2fst8XKi.js";
5
5
  import { n as v, t as ee } from "../experience-CNIhapU2.js";
6
6
  import { i as te, n as y, r as b, t as x } from "../storage-6Xk0uAxB.js";
7
- import { n as ne, r as re } from "../api-DGV5XIrB.js";
7
+ import { n as ne, r as re } from "../api-DtOVNMSX.js";
8
8
  import { n as ie } from "../experience-instance-B0tFPMAU.js";
9
9
  import { t as S } from "../id-n2yrHvNo.js";
10
10
  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";
@@ -1,5 +1,5 @@
1
1
  import "../../../logger-C44jSdYl.js";
2
- import { i as e, t } from "../../../api-DGV5XIrB.js";
2
+ import { i as e, t } from "../../../api-DtOVNMSX.js";
3
3
  //#region src/plugins/dynamic-experiences/hash.ts
4
4
  function n(e) {
5
5
  let t = 2166136261;
@@ -2,30 +2,34 @@ import { i as e } from "../../../rules-logic-D7dL30U1.js";
2
2
  import { d as t, f as n, i as r } from "../../../supports-B_trw6lj.js";
3
3
  import { n as i } from "../../../experience-CNIhapU2.js";
4
4
  //#region src/plugins/single-page-app/plugin.ts
5
- var a = n, o = 1e3, s = 150, c, l = (e) => ({
5
+ var a = n, o = 1e3, s = 150, c, l = /* @__PURE__ */ new WeakMap(), u = (e) => ({
6
6
  name: "single-page-app",
7
7
  setup: (e) => {
8
- if (!t()) return;
9
- let n, r, a, c = () => {
10
- n &&= (n.disconnect(), void 0), r !== void 0 && (clearTimeout(r), r = void 0), a !== void 0 && (clearTimeout(a), a = void 0);
11
- }, l = () => {
12
- i(e);
13
- };
14
- u(() => {
15
- c(), requestAnimationFrame(() => {
16
- l();
17
- });
18
- let e = new MutationObserver(() => {
19
- l(), a !== void 0 && clearTimeout(a), a = setTimeout(c, s);
20
- });
21
- e.observe(document.body, {
22
- childList: !0,
23
- subtree: !0
24
- }), n = e, r = setTimeout(c, o);
25
- });
8
+ t() && m(() => f(e));
26
9
  }
27
10
  });
28
- function u(t) {
11
+ function d(e) {
12
+ t() && f(e);
13
+ }
14
+ function f(e) {
15
+ l.get(e)?.stop(), l.set(e, p(e));
16
+ }
17
+ function p(e) {
18
+ let t, n, r, a = () => {
19
+ t &&= (t.disconnect(), void 0), n !== void 0 && (clearTimeout(n), n = void 0), r !== void 0 && (clearTimeout(r), r = void 0);
20
+ }, c = () => {
21
+ i(e);
22
+ };
23
+ requestAnimationFrame(c);
24
+ let l = new MutationObserver(() => {
25
+ c(), r !== void 0 && clearTimeout(r), r = setTimeout(a, s);
26
+ });
27
+ return l.observe(document.body, {
28
+ childList: !0,
29
+ subtree: !0
30
+ }), t = l, n = setTimeout(a, o), { stop: a };
31
+ }
32
+ function m(t) {
29
33
  if (a.addEventListener("popstate", () => {
30
34
  let e = a.location.href, n = c;
31
35
  c = e, n !== e && t();
@@ -42,6 +46,10 @@ function u(t) {
42
46
  };
43
47
  }
44
48
  e(a.history, "pushState", n), e(a.history, "replaceState", n);
49
+ let i = a.history.pushState, o = a.history.replaceState;
50
+ queueMicrotask(() => {
51
+ (a.history.pushState !== i || a.history.replaceState !== o) && console.warn("@picked/client: window.history.pushState was re-wrapped by another script after Picked's instrumentation. SPA reconciliation will not fire on route changes through that wrapper. Call notifyNavigation(picked) from your router (e.g. React Router useEffect on location, SvelteKit afterNavigate) to trigger reconciliation explicitly.");
52
+ });
45
53
  }
46
54
  //#endregion
47
- export { l as singlePageAppPlugin };
55
+ export { d as notifyNavigation, u as singlePageAppPlugin };
@@ -1,3 +1,4 @@
1
- export { singlePageAppPlugin } from './plugin';
1
+ /** @file Public entrypoint for the single-page-app plugin and its `notifyNavigation` escape hatch. */
2
+ export { singlePageAppPlugin, notifyNavigation } from './plugin';
2
3
  export type * from './plugin';
3
4
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/plugins/single-page-app/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,MAAM,UAAU,CAAA;AAC9C,mBAAmB,UAAU,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/plugins/single-page-app/index.ts"],"names":[],"mappings":"AAAA,sGAAsG;AACtG,OAAO,EAAE,mBAAmB,EAAE,gBAAgB,EAAE,MAAM,UAAU,CAAA;AAChE,mBAAmB,UAAU,CAAA"}
@@ -1,4 +1,5 @@
1
1
  import { Plugin } from '../../entities/plugin/plugin';
2
+ import { Picked } from '../../picked';
2
3
  interface SinglePageAppPluginOptions {
3
4
  /**
4
5
  * Enables monitoring of browser history events (pushState, replaceState, popstate)
@@ -29,6 +30,25 @@ interface SinglePageAppPluginOptions {
29
30
  * ```
30
31
  */
31
32
  export declare const singlePageAppPlugin: (_options: SinglePageAppPluginOptions) => Plugin;
33
+ /**
34
+ * Triggers experience reconciliation for the next ~1 second of DOM mutations.
35
+ * Use from a router lifecycle hook when the SPA plugin's history instrumentation
36
+ * is unable to detect navigations — for example when another script has wrapped
37
+ * `pushState` after Picked's setup, or when the host router doesn't go through
38
+ * `pushState` at all.
39
+ *
40
+ * Safe to call any number of times — successive calls cancel and replace the
41
+ * prior reconcile window for the given client.
42
+ *
43
+ * @param {Picked} client - The Picked client instance to reconcile.
44
+ * @example
45
+ * // React Router
46
+ * useEffect(() => { notifyNavigation(picked) }, [location.pathname])
47
+ *
48
+ * // SvelteKit
49
+ * afterNavigate(() => notifyNavigation(picked))
50
+ */
51
+ export declare function notifyNavigation(client: Picked): void;
32
52
  /**
33
53
  * Instruments browser history so the callback fires whenever the navigation
34
54
  * URL changes via `popstate`, `pushState`, or `replaceState`. Same-URL events
@@ -1 +1 @@
1
- {"version":3,"file":"plugin.d.ts","sourceRoot":"","sources":["../../../../src/plugins/single-page-app/plugin.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,8BAA8B,CAAA;AAS1D,UAAU,0BAA0B;IAClC;;;;OAIG;IACH,iBAAiB,EAAE,IAAI,CAAA;CACxB;AAED;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,eAAO,MAAM,mBAAmB,GAAI,UAAU,0BAA0B,KAAG,MAyD1E,CAAA;AAED;;;;;;;;GAQG;AACH,wBAAgB,iBAAiB,CAAC,QAAQ,EAAE,MAAM,IAAI,GAAG,IAAI,CAiD5D"}
1
+ {"version":3,"file":"plugin.d.ts","sourceRoot":"","sources":["../../../../src/plugins/single-page-app/plugin.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,8BAA8B,CAAA;AAC1D,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,cAAc,CAAA;AAc1C,UAAU,0BAA0B;IAClC;;;;OAIG;IACH,iBAAiB,EAAE,IAAI,CAAA;CACxB;AAED;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,eAAO,MAAM,mBAAmB,GAAI,UAAU,0BAA0B,KAAG,MAW1E,CAAA;AAED;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAMrD;AAwED;;;;;;;;GAQG;AACH,wBAAgB,iBAAiB,CAAC,QAAQ,EAAE,MAAM,IAAI,GAAG,IAAI,CAgE5D"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@picked/client",
3
- "version": "0.0.1-dev.1777593605103",
3
+ "version": "0.0.1-dev.1777594341273",
4
4
  "dependencies": {
5
5
  "@withease/factories": "^1.0.5"
6
6
  },