@picked/client 0.0.1-dev.1763077817547 → 0.0.1-dev.1763330007276

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/cjs/index.js CHANGED
@@ -1 +1 @@
1
- "use strict";var m=Object.defineProperty;var y=(i,e,t)=>e in i?m(i,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):i[e]=t;var o=(i,e,t)=>y(i,typeof e!="symbol"?e+"":e,t);Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const r=require("../user-session-Bny5aSWK.cjs"),d=require("../logger-BsmHUUw1.cjs"),l=require("../experience-instance-B2l_MG7I.cjs"),S=require("effector"),c=require("../supports-YvpQZxbh.cjs"),u=require("../storage-DuRlyFaY.cjs"),w=(i,e,t)=>{const s=e.name,n=e.setup(i);if(n){const a=t[s]??{};t[s]=Object.freeze({...a,...n})}};function v(i){const e=typeof window<"u",t={client:i,responses:i.responses.listStore.getState(),fields:i.fields.listStore.getState(),location:e?window.location:void 0,document:e?window.document:void 0,sessionStorage:e?window.sessionStorage:void 0,localStorage:e?window.localStorage:void 0};return Object.freeze(t)}const I=()=>S.createEvent(),P=()=>"0.0.1-dev.1763077817547";function k(){if(c.supportsDocument()){const i=[document.currentScript,document.getElementById("picked_script"),document.getElementById("picked"),document.getElementById("cvly"),document.getElementById("cvly-x")];for(const e of i)if(e!=null&&e.dataset.api)return e.dataset.api}return"https://api.picked.app"}function x(){if(!c.supportsWindow())return{};const i=new URLSearchParams(window.location.search),e={},t=new Set;for(const[n]of i.entries())n.startsWith("picked-")&&t.add(n);for(const n of t){const a=n.replace("picked-","");e[a]=i.getAll(n)}const s=u.createStorageKey("s");if(t.size>0)u.sessionStore.set(s,e);else{const n=u.sessionStore.get(s);if(n)return n.json()||{}}return e}class h{constructor(e){o(this,"options");o(this,"isReady",!1);o(this,"project");o(this,"plugins",{});o(this,"eventBus",I());o(this,"organizationId");o(this,"projectId");o(this,"apiUrl");o(this,"session");o(this,"searchParams",x());o(this,"history",r.createHistory());o(this,"components",r.createComponentIndex({client:this}));o(this,"experienceInstances",l.createExperienceInstanceIndex({client:this}));o(this,"experiences",r.createExperienceIndex({client:this}));o(this,"frameworks",r.createFrameworkIndex({client:this}));o(this,"predicates",r.createPredicateIndex({client:this}));o(this,"features",r.createFeatureIndex({client:this}));o(this,"responses",r.createResponseIndex({client:this}));o(this,"fields",r.createFieldIndex());o(this,"actions",r.createActionIndex());d.logger("info","Picked client initializing."),this.organizationId=e.organizationId,this.projectId=e.projectId,this.options=Object.freeze(e),this.apiUrl=e.apiUrl||k(),this.session=r.initialiseSession(),this.setupPlugins(),this.setupFeatures(),this.setupPredicates(),this.setupActions(),this.eventBus({type:"initialized",version:P()}),d.logger("info","Picked client initialized.")}start(){r.ping(this),(async()=>{c.supportsDocument()&&(document.body&&r.initialiseExperiences(this),await l.domInteractive(),await r.initialiseExperiences(this),this.eventBus({type:"ready"}),this.isReady=!0,this.session&&this.eventBus({type:"session",...this.session}))})()}registerFramework(e){r.setupFramework(e,this.frameworks)}registerComponent(e,t){r.setupComponent(e,t,this.components)}registerPlugin(e){w(this,e,this.plugins)}registerFeature(e,t){r.setupFeature(e,t,this.features)}registerPredicate(e,t){r.setupPredicate(e,t,this.predicates)}registerField(e){r.setupField(e,this.fields)}registerAction(e,t){r.setupAction(e,t,this.actions)}registerExperience(e){e.component&&r.setupComponent(`experience:${e.id}`,e.component,this.components),r.setupExperience(e,this.experiences)}getStateSnapshot(){return v(this)}async launchExperienceById(e){const t=this.experiences.getById(e).getState();if(!t){d.logger("warn",`Experience with id '${e}' not found.`);return}r.initialiseExperience(this,t)}setupPlugins(){var e;(e=this.options.plugins)==null||e.forEach(t=>{if(Array.isArray(t)){t.forEach(n=>{this.registerPlugin(n)});return}const s=typeof t=="function"?t():t;if(Array.isArray(s)){s.forEach(n=>this.registerPlugin(n));return}this.registerPlugin(s)})}setupFeatures(){const e=this.options.features;e&&(Object.entries(e).forEach(([t,s])=>{const n=typeof s=="function"?s():s;this.registerFeature(t,n)}),this.searchParams.feature&&this.searchParams.feature.forEach(t=>{try{const[s,n]=t.split(":");if(!s||!n)return;let a=n;a==="true"&&(a=!0),a==="false"&&(a=!1),this.registerFeature(s,{key:`${a}`,name:s,decide:()=>a,storage:"session"})}catch{}}))}setupPredicates(){const e=this.options.predicates;e&&Object.entries(e).forEach(([t,s])=>{if(typeof s!="function"){d.logger("warn",`Predicate "${t}" is not a function.`);return}this.registerPredicate(t,s)})}setupActions(){const e=this.options.actions;e&&Object.entries(e).forEach(([t,s])=>{if(typeof s!="function"){d.logger("warn",`Action "${t}" is not a function.`);return}this.registerAction(t,s)})}getPluginConfig(e){return this.plugins[e]??{}}}o(h,"logger",d.logger);function f(i){var e;return((e=i.options)==null?void 0:e.some(t=>"condition"in t))??!1}function E(i){return i.some(e=>e.condition||f(e))}async function C(i,e){return e.length===0||!E(e)?e:(await Promise.all(e.map(async s=>{if(!(s.condition?await l.evaluateRuleLogic(i,s.condition):!0))return null;if(!s.options||!f(s))return s;const g=(await Promise.all(s.options.map(async p=>p.condition?await l.evaluateRuleLogic(i,p.condition)?p:null:p))).filter(p=>p!==null);return g.length===s.options.length?s:g.length===0?null:{...s,options:g}}))).filter(s=>s!==null)}const R=i=>{const e=new h(i);return c.bindClient(e),e};exports.evaluateRuleLogic=l.evaluateRuleLogic;exports.isPickedRoot=l.isPickedRoot;exports.supportsCookies=c.supportsCookies;exports.supportsCryptoRandomUUID=c.supportsCryptoRandomUUID;exports.supportsDocument=c.supportsDocument;exports.supportsHistory=c.supportsHistory;exports.supportsIntersectionObserver=c.supportsIntersectionObserver;exports.supportsLocalStorage=c.supportsLocalStorage;exports.supportsLocation=c.supportsLocation;exports.supportsSessionStorage=c.supportsSessionStorage;exports.supportsShadowRoot=c.supportsShadowRoot;exports.supportsWebComponents=c.supportsWebComponents;exports.supportsWindow=c.supportsWindow;exports.createStorageKey=u.createStorageKey;exports.localStore=u.localStore;exports.sessionStore=u.sessionStore;exports.subscribe=u.subscribe;exports.Picked=h;exports.createClient=R;exports.getStepFields=C;
1
+ "use strict";var m=Object.defineProperty;var y=(i,e,t)=>e in i?m(i,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):i[e]=t;var o=(i,e,t)=>y(i,typeof e!="symbol"?e+"":e,t);Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const r=require("../user-session-D-l-VMTb.cjs"),d=require("../logger-BsmHUUw1.cjs"),l=require("../experience-instance-B2l_MG7I.cjs"),S=require("effector"),c=require("../supports-YvpQZxbh.cjs"),u=require("../storage-DuRlyFaY.cjs"),w=(i,e,t)=>{const s=e.name,n=e.setup(i);if(n){const a=t[s]??{};t[s]=Object.freeze({...a,...n})}};function v(i){const e=typeof window<"u",t={client:i,responses:i.responses.listStore.getState(),fields:i.fields.listStore.getState(),location:e?window.location:void 0,document:e?window.document:void 0,sessionStorage:e?window.sessionStorage:void 0,localStorage:e?window.localStorage:void 0};return Object.freeze(t)}const I=()=>S.createEvent(),P=()=>"0.0.1-dev.1763330007276";function k(){if(c.supportsDocument()){const i=[document.currentScript,document.getElementById("picked_script"),document.getElementById("picked"),document.getElementById("cvly"),document.getElementById("cvly-x")];for(const e of i)if(e!=null&&e.dataset.api)return e.dataset.api}return"https://api.picked.app"}function x(){if(!c.supportsWindow())return{};const i=new URLSearchParams(window.location.search),e={},t=new Set;for(const[n]of i.entries())n.startsWith("picked-")&&t.add(n);for(const n of t){const a=n.replace("picked-","");e[a]=i.getAll(n)}const s=u.createStorageKey("s");if(t.size>0)u.sessionStore.set(s,e);else{const n=u.sessionStore.get(s);if(n)return n.json()||{}}return e}class h{constructor(e){o(this,"options");o(this,"isReady",!1);o(this,"project");o(this,"plugins",{});o(this,"eventBus",I());o(this,"organizationId");o(this,"projectId");o(this,"apiUrl");o(this,"session");o(this,"searchParams",x());o(this,"history",r.createHistory());o(this,"components",r.createComponentIndex({client:this}));o(this,"experienceInstances",l.createExperienceInstanceIndex({client:this}));o(this,"experiences",r.createExperienceIndex({client:this}));o(this,"frameworks",r.createFrameworkIndex({client:this}));o(this,"predicates",r.createPredicateIndex({client:this}));o(this,"features",r.createFeatureIndex({client:this}));o(this,"responses",r.createResponseIndex({client:this}));o(this,"fields",r.createFieldIndex());o(this,"actions",r.createActionIndex());d.logger("info","Picked client initializing."),this.organizationId=e.organizationId,this.projectId=e.projectId,this.options=Object.freeze(e),this.apiUrl=e.apiUrl||k(),this.session=r.initialiseSession(),this.setupPlugins(),this.setupFeatures(),this.setupPredicates(),this.setupActions(),this.eventBus({type:"initialized",version:P()}),d.logger("info","Picked client initialized.")}start(){r.ping(this),(async()=>{c.supportsDocument()&&(document.body&&r.initialiseExperiences(this),await l.domInteractive(),await r.initialiseExperiences(this),this.eventBus({type:"ready"}),this.isReady=!0,this.session&&this.eventBus({type:"session",...this.session}))})()}registerFramework(e){r.setupFramework(e,this.frameworks)}registerComponent(e,t){r.setupComponent(e,t,this.components)}registerPlugin(e){w(this,e,this.plugins)}registerFeature(e,t){r.setupFeature(e,t,this.features)}registerPredicate(e,t){r.setupPredicate(e,t,this.predicates)}registerField(e){r.setupField(e,this.fields)}registerAction(e,t){r.setupAction(e,t,this.actions)}registerExperience(e){e.component&&r.setupComponent(`experience:${e.id}`,e.component,this.components),r.setupExperience(e,this.experiences)}getStateSnapshot(){return v(this)}async launchExperienceById(e){const t=this.experiences.getById(e).getState();if(!t){d.logger("warn",`Experience with id '${e}' not found.`);return}r.initialiseExperience(this,t)}setupPlugins(){var e;(e=this.options.plugins)==null||e.forEach(t=>{if(Array.isArray(t)){t.forEach(n=>{this.registerPlugin(n)});return}const s=typeof t=="function"?t():t;if(Array.isArray(s)){s.forEach(n=>this.registerPlugin(n));return}this.registerPlugin(s)})}setupFeatures(){const e=this.options.features;e&&(Object.entries(e).forEach(([t,s])=>{const n=typeof s=="function"?s():s;this.registerFeature(t,n)}),this.searchParams.feature&&this.searchParams.feature.forEach(t=>{try{const[s,n]=t.split(":");if(!s||!n)return;let a=n;a==="true"&&(a=!0),a==="false"&&(a=!1),this.registerFeature(s,{key:`${a}`,name:s,decide:()=>a,storage:"session"})}catch{}}))}setupPredicates(){const e=this.options.predicates;e&&Object.entries(e).forEach(([t,s])=>{if(typeof s!="function"){d.logger("warn",`Predicate "${t}" is not a function.`);return}this.registerPredicate(t,s)})}setupActions(){const e=this.options.actions;e&&Object.entries(e).forEach(([t,s])=>{if(typeof s!="function"){d.logger("warn",`Action "${t}" is not a function.`);return}this.registerAction(t,s)})}getPluginConfig(e){return this.plugins[e]??{}}}o(h,"logger",d.logger);function f(i){var e;return((e=i.options)==null?void 0:e.some(t=>"condition"in t))??!1}function E(i){return i.some(e=>e.condition||f(e))}async function C(i,e){return e.length===0||!E(e)?e:(await Promise.all(e.map(async s=>{if(!(s.condition?await l.evaluateRuleLogic(i,s.condition):!0))return null;if(!s.options||!f(s))return s;const g=(await Promise.all(s.options.map(async p=>p.condition?await l.evaluateRuleLogic(i,p.condition)?p:null:p))).filter(p=>p!==null);return g.length===s.options.length?s:g.length===0?null:{...s,options:g}}))).filter(s=>s!==null)}const R=i=>{const e=new h(i);return c.bindClient(e),e};exports.evaluateRuleLogic=l.evaluateRuleLogic;exports.isPickedRoot=l.isPickedRoot;exports.supportsCookies=c.supportsCookies;exports.supportsCryptoRandomUUID=c.supportsCryptoRandomUUID;exports.supportsDocument=c.supportsDocument;exports.supportsHistory=c.supportsHistory;exports.supportsIntersectionObserver=c.supportsIntersectionObserver;exports.supportsLocalStorage=c.supportsLocalStorage;exports.supportsLocation=c.supportsLocation;exports.supportsSessionStorage=c.supportsSessionStorage;exports.supportsShadowRoot=c.supportsShadowRoot;exports.supportsWebComponents=c.supportsWebComponents;exports.supportsWindow=c.supportsWindow;exports.createStorageKey=u.createStorageKey;exports.localStore=u.localStore;exports.sessionStore=u.sessionStore;exports.subscribe=u.subscribe;exports.Picked=h;exports.createClient=R;exports.getStepFields=C;
@@ -1 +1 @@
1
- "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const r=require("../../../supports-YvpQZxbh.cjs");require("../../../user-session-Bny5aSWK.cjs");require("../../../experience-instance-B2l_MG7I.cjs");require("effector");function c(){if(!r.supportsWindow()||!window.pickedConfig)throw new Error("Picked config not found. Ensure the Picked Script is enabled on your Shopify storefront");return window.pickedConfig}function d(){if(r.supportsWindow())return c().customer}function s(){if(r.supportsWindow())return c().product}function u(){if(r.supportsWindow())return c().collection}function l(){if(r.supportsWindow())return c().experiments}function f(){var e;if(r.supportsWindow())return(e=c().storefront_api)==null?void 0:e.token}const t={homepage:/^\/$/,page:/(?:^|\/)pages\/[^/]+$/,blog:/(?:^|\/)blogs\/(?<blogHandle>[^/]+)\/?$/,article:/^\/blogs\/[^/]+\/(?<article>[^/]+)\/?$/,cart:/(?:^|\/)cart\/[^/]+$/,checkout:/^\/checkout\/.+/,appProxy:/^\/(?:a|apps|community|tools)\/(?<proxyTarget>[^/]+)/,accountWildcard:/^\/account\/.+/,accountLogin:/^\/account\/login(?:\/|$)/,accountRegister:/^\/account\/register(?:\/|$)/},n=(e,o)=>o?!!e.exec(o.pathname):!1,a=(e,o)=>{if(o){const i=e.exec(o.pathname);if(i)return i[1]}},p=e=>{var o,i;switch(e){case"product":return((o=s())==null?void 0:o.handle)??!1;case"collection":return((i=u())==null?void 0:i.handle)??!1;default:return!1}},h={"is-page":({location:e})=>n(t.page,e),"get-page-handle":({location:e})=>a(t.page,e),"is-product-page":()=>!!p("product"),"get-product-handle":()=>p("product"),"is-collection-page":()=>!!p("collection"),"get-collection-handle":()=>p("collection"),"is-blog-page":({location:e})=>n(t.blog,e),"get-blog-handle":({location:e})=>a(t.blog,e),"is-article-page":({location:e})=>n(t.article,e),"get-article-handle":({location:e})=>a(t.article,e),"is-app-proxy-page":({location:e})=>n(t.appProxy,e),"get-app-proxy-handle":({location:e})=>a(t.appProxy,e),"is-account-page":({location:e})=>n(t.accountWildcard,e),"is-login-page":({location:e})=>n(t.accountLogin,e),"is-register-page":({location:e})=>n(t.accountRegister,e),"is-cart-page":({location:e})=>n(t.cart,e),"is-checkout-page":({location:e})=>n(t.checkout,e),"is-homepage":({location:e})=>n(t.homepage,e)};function g(){if(!r.supportsWindow()||!window.Shopify)throw new Error("Shopify global object not found. This plugin must be used on a Shopify storefront page.");return window.Shopify}function y(e){var o,i;return typeof((i=(o=g())==null?void 0:o.analytics)==null?void 0:i.publish)=="function"}const P=()=>({name:"shopify",setup:e=>{Object.entries(h).forEach(([o,i])=>{e.registerPredicate(`shopify-${o}`,i)}),r.supportsWindow()&&e.eventBus.watch(o=>{y()&&o.type==="session"&&window.Shopify.analytics.publish("picked:session",{id:o.id})})}});exports.getPickedConfig=c;exports.getPickedConfigCollection=u;exports.getPickedConfigCustomer=d;exports.getPickedConfigExperiments=l;exports.getPickedConfigProduct=s;exports.getPickedConfigStorefrontApiToken=f;exports.getShopify=g;exports.shopifyPlugin=P;
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const r=require("../../../supports-YvpQZxbh.cjs");require("../../../user-session-D-l-VMTb.cjs");require("../../../experience-instance-B2l_MG7I.cjs");require("effector");function c(){if(!r.supportsWindow()||!window.pickedConfig)throw new Error("Picked config not found. Ensure the Picked Script is enabled on your Shopify storefront");return window.pickedConfig}function d(){if(r.supportsWindow())return c().customer}function s(){if(r.supportsWindow())return c().product}function u(){if(r.supportsWindow())return c().collection}function l(){if(r.supportsWindow())return c().experiments}function f(){var e;if(r.supportsWindow())return(e=c().storefront_api)==null?void 0:e.token}const t={homepage:/^\/$/,page:/(?:^|\/)pages\/[^/]+$/,blog:/(?:^|\/)blogs\/(?<blogHandle>[^/]+)\/?$/,article:/^\/blogs\/[^/]+\/(?<article>[^/]+)\/?$/,cart:/(?:^|\/)cart\/[^/]+$/,checkout:/^\/checkout\/.+/,appProxy:/^\/(?:a|apps|community|tools)\/(?<proxyTarget>[^/]+)/,accountWildcard:/^\/account\/.+/,accountLogin:/^\/account\/login(?:\/|$)/,accountRegister:/^\/account\/register(?:\/|$)/},n=(e,o)=>o?!!e.exec(o.pathname):!1,a=(e,o)=>{if(o){const i=e.exec(o.pathname);if(i)return i[1]}},p=e=>{var o,i;switch(e){case"product":return((o=s())==null?void 0:o.handle)??!1;case"collection":return((i=u())==null?void 0:i.handle)??!1;default:return!1}},h={"is-page":({location:e})=>n(t.page,e),"get-page-handle":({location:e})=>a(t.page,e),"is-product-page":()=>!!p("product"),"get-product-handle":()=>p("product"),"is-collection-page":()=>!!p("collection"),"get-collection-handle":()=>p("collection"),"is-blog-page":({location:e})=>n(t.blog,e),"get-blog-handle":({location:e})=>a(t.blog,e),"is-article-page":({location:e})=>n(t.article,e),"get-article-handle":({location:e})=>a(t.article,e),"is-app-proxy-page":({location:e})=>n(t.appProxy,e),"get-app-proxy-handle":({location:e})=>a(t.appProxy,e),"is-account-page":({location:e})=>n(t.accountWildcard,e),"is-login-page":({location:e})=>n(t.accountLogin,e),"is-register-page":({location:e})=>n(t.accountRegister,e),"is-cart-page":({location:e})=>n(t.cart,e),"is-checkout-page":({location:e})=>n(t.checkout,e),"is-homepage":({location:e})=>n(t.homepage,e)};function g(){if(!r.supportsWindow()||!window.Shopify)throw new Error("Shopify global object not found. This plugin must be used on a Shopify storefront page.");return window.Shopify}function y(e){var o,i;return typeof((i=(o=g())==null?void 0:o.analytics)==null?void 0:i.publish)=="function"}const P=()=>({name:"shopify",setup:e=>{Object.entries(h).forEach(([o,i])=>{e.registerPredicate(`shopify-${o}`,i)}),r.supportsWindow()&&e.eventBus.watch(o=>{y()&&o.type==="session"&&window.Shopify.analytics.publish("picked:session",{id:o.id})})}});exports.getPickedConfig=c;exports.getPickedConfigCollection=u;exports.getPickedConfigCustomer=d;exports.getPickedConfigExperiments=l;exports.getPickedConfigProduct=s;exports.getPickedConfigStorefrontApiToken=f;exports.getShopify=g;exports.shopifyPlugin=P;
package/dist/esm/index.js CHANGED
@@ -1,7 +1,7 @@
1
1
  var y = Object.defineProperty;
2
2
  var w = (i, e, t) => e in i ? y(i, e, { enumerable: !0, configurable: !0, writable: !0, value: t }) : i[e] = t;
3
3
  var n = (i, e, t) => w(i, typeof e != "symbol" ? e + "" : e, t);
4
- import { c as S, a as x, b as I, d as P, e as v, f as k, g as E, h as F, i as b, j as C, p as A, s as R, k as u, l as j, m as B, n as z, o as U, q as O, r as $, t as d } from "../user-session-sUXlj29_.js";
4
+ import { c as S, a as x, b as I, d as P, e as v, f as k, g as E, h as F, i as b, j as C, p as A, s as R, k as u, l as j, m as B, n as z, o as U, q as O, r as $, t as d } from "../user-session-Ht0ayuo5.js";
5
5
  import { l as c } from "../logger-C9a75KZn.js";
6
6
  import { c as K, d as L, e as l } from "../experience-instance-CeuHLrdL.js";
7
7
  import { i as pe } from "../experience-instance-CeuHLrdL.js";
@@ -29,7 +29,7 @@ function N(i) {
29
29
  };
30
30
  return Object.freeze(t);
31
31
  }
32
- const T = () => W(), V = () => "0.0.1-dev.1763077817547";
32
+ const T = () => W(), V = () => "0.0.1-dev.1763330007276";
33
33
  function G() {
34
34
  if (h()) {
35
35
  const i = [
@@ -1,5 +1,5 @@
1
1
  import { a as r } from "../../../supports-DBMT17KZ.js";
2
- import "../../../user-session-sUXlj29_.js";
2
+ import "../../../user-session-Ht0ayuo5.js";
3
3
  import "../../../experience-instance-CeuHLrdL.js";
4
4
  import "effector";
5
5
  function c() {
@@ -1 +1 @@
1
- {"version":3,"file":"feature.d.ts","sourceRoot":"","sources":["../../../../src/entities/feature/feature.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,cAAc,CAAA;AAI1C,MAAM,WAAW,OAAO;IACtB,GAAG,EAAE,MAAM,CAAA;IACX,IAAI,EAAE,MAAM,CAAA;IACZ,MAAM,EAAE,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,GAAG,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAA;IACnE,OAAO,CAAC,EAAE,OAAO,GAAG,SAAS,CAAA;CAC9B;AAED,MAAM,MAAM,aAAa,GAAG,UAAU,CAAC,OAAO,kBAAkB,CAAC,CAAA;AAEjE,MAAM,WAAW,gBAAgB;IAC/B,EAAE,EAAE,MAAM,CAAA;IACV,OAAO,EAAE,OAAO,GAAG;QAAE,EAAE,EAAE,MAAM,CAAA;KAAE,CAAA;CAClC;AAED,MAAM,WAAW,eAAe;IAC9B,EAAE,EAAE,MAAM,CAAA;IACV,MAAM,EAAE,OAAO,GAAG,MAAM,CAAA;IACxB,GAAG,EAAE,MAAM,CAAA;IACX,OAAO,CAAC,EAAE,OAAO,GAAG,SAAS,CAAA;CAC9B;AAED,MAAM,WAAW,iBAAiB;IAChC,IAAI,EAAE,MAAM,CAAA;IACZ,GAAG,EAAE,MAAM,CAAA;IACX,EAAE,EAAE,MAAM,CAAA;CACX;AAED,MAAM,WAAW,uBAAwB,SAAQ,iBAAiB;IAChE,UAAU,EAAE,KAAK,CAAA;IACjB,SAAS,EAAE,MAAM,OAAO,CAAC;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAA;KAAE,CAAC,CAAA;CACnE;AAED,MAAM,WAAW,qBAAsB,SAAQ,iBAAiB;IAC9D,UAAU,EAAE,IAAI,CAAA;IAChB,SAAS,EAAE,MAAM;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAA;KAAE,CAAA;CAC1D;AAED,MAAM,MAAM,aAAa,GAAG,uBAAuB,GAAG,qBAAqB,CAAA;AAK3E,QAAA,MAAM,yBAAyB,eAA8B;IAAE,MAAM,EAAE,MAAM,CAAA;CAAE;mBAgBvD,MAAM,WAAW,OAAO,KAAG,IAAI;sBAyM5B,MAAM;;CAS/B,CAAA;AAEF,wBAAgB,kBAAkB,CAAC,CAAC,SAAS,UAAU,CAAC,OAAO,yBAAyB,CAAC,CAAC,CAAC,CAAC,EAC1F,MAAM,EAAE,CAAC,GACR,UAAU,CAAC,OAAO,yBAAyB,CAAC,CAE9C;AAED,eAAO,MAAM,YAAY,GAAI,MAAM,MAAM,EAAE,SAAS,OAAO,EAAE,UAAU,aAAa,SAEnF,CAAA"}
1
+ {"version":3,"file":"feature.d.ts","sourceRoot":"","sources":["../../../../src/entities/feature/feature.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,cAAc,CAAA;AAI1C,MAAM,WAAW,OAAO;IACtB,GAAG,EAAE,MAAM,CAAA;IACX,IAAI,EAAE,MAAM,CAAA;IACZ,MAAM,EAAE,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,GAAG,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAA;IACnE,OAAO,CAAC,EAAE,OAAO,GAAG,SAAS,CAAA;CAC9B;AAED,MAAM,MAAM,aAAa,GAAG,UAAU,CAAC,OAAO,kBAAkB,CAAC,CAAA;AAEjE,MAAM,WAAW,gBAAgB;IAC/B,EAAE,EAAE,MAAM,CAAA;IACV,OAAO,EAAE,OAAO,GAAG;QAAE,EAAE,EAAE,MAAM,CAAA;KAAE,CAAA;CAClC;AAED,MAAM,WAAW,eAAe;IAC9B,EAAE,EAAE,MAAM,CAAA;IACV,MAAM,EAAE,OAAO,GAAG,MAAM,CAAA;IACxB,GAAG,EAAE,MAAM,CAAA;IACX,OAAO,CAAC,EAAE,OAAO,GAAG,SAAS,CAAA;CAC9B;AAED,MAAM,WAAW,iBAAiB;IAChC,IAAI,EAAE,MAAM,CAAA;IACZ,GAAG,EAAE,MAAM,CAAA;IACX,EAAE,EAAE,MAAM,CAAA;CACX;AAED,MAAM,WAAW,uBAAwB,SAAQ,iBAAiB;IAChE,UAAU,EAAE,KAAK,CAAA;IACjB,SAAS,EAAE,MAAM,OAAO,CAAC;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAA;KAAE,CAAC,CAAA;CACnE;AAED,MAAM,WAAW,qBAAsB,SAAQ,iBAAiB;IAC9D,UAAU,EAAE,IAAI,CAAA;IAChB,SAAS,EAAE,MAAM;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAA;KAAE,CAAA;CAC1D;AAED,MAAM,MAAM,aAAa,GAAG,uBAAuB,GAAG,qBAAqB,CAAA;AAK3E,QAAA,MAAM,yBAAyB,eAA8B;IAAE,MAAM,EAAE,MAAM,CAAA;CAAE;mBAgBvD,MAAM,WAAW,OAAO,KAAG,IAAI;sBA6L5B,MAAM;;CAS/B,CAAA;AAEF,wBAAgB,kBAAkB,CAAC,CAAC,SAAS,UAAU,CAAC,OAAO,yBAAyB,CAAC,CAAC,CAAC,CAAC,EAC1F,MAAM,EAAE,CAAC,GACR,UAAU,CAAC,OAAO,yBAAyB,CAAC,CAE9C;AAED,eAAO,MAAM,YAAY,GAAI,MAAM,MAAM,EAAE,SAAS,OAAO,EAAE,UAAU,aAAa,SAEnF,CAAA"}
@@ -0,0 +1 @@
1
+ "use strict";const p=require("effector"),y=require("@withease/factories"),w=require("./experience-instance-B2l_MG7I.cjs"),b=require("./logger-BsmHUUw1.cjs"),x=require("./storage-DuRlyFaY.cjs"),P=require("./id-BKIWbSTy.cjs"),M=require("./object-BbFTsGh3.cjs"),B=require("./supports-YvpQZxbh.cjs"),j=p.createDomain("experience"),T=y.createFactory(({client:t,experience:e})=>{const i=j.store(e),g=p.createApi(i,{merge(c,S){return{...c,...S.experience}}}),m=i.map(c=>({name:c.name,decisionLogic:c.decide,targetSelectors:c.targets,initializeOpenLogic:e.initializeOpen})),d=t.components.listStore.map(c=>c.find(S=>S.name===`experience:${e.id}`)||c.find(S=>S.name==="experience"),{skipVoid:!1}),r=i.map(c=>({steps:c.steps,nodes:c.nodes,edges:c.edges,conditionals:c.conditionals})),n=e.actions??[];return{id:e.id,configStore:m,treeStore:r,componentStore:d,actions:n,merge:g.merge}});function V(t){return y.invoke(T,t)}const N=y.createFactory(({client:t})=>{const e=j.store({}),i=p.createApi(e,{register(r,n){return{...r,[n.id]:n}}});function g(r){const n=e.getState()[r.id];if(n){n.merge({experience:r,strategy:"override"});return}const c=V({client:t,experience:r});i.register(c)}const m=e.map(r=>Object.values(r));function d(r){return e.map(n=>n[r],{skipVoid:!1})}return{register:g,getById:d,listStore:m}});function C(t){return y.invoke(N,t)}const L=(t,e)=>{e.register(t)},O=(t,e)=>{const{targetSelectors:i}=e.configStore.getState(),g=w.getTargetElements(i,e.id);g.forEach(({elements:d})=>d.forEach(r=>w.tagTargetElement(r,e.id))),w.createAppHosts(g,e.id).forEach(d=>{t.experienceInstances.spawn(e,d)})},q=async t=>{await Promise.all(t.experiences.listStore.getState().map(async e=>{await _(t,e)&&O(t,e)}))},_=async(t,e)=>{const{decisionLogic:i,targetSelectors:g}=e.configStore.getState();return w.getTargetElements(g,e.id).length<1||g.length===0?!1:i&&w.isRulesLogic(i)?await w.evaluateRuleLogic(t,i)===!0:!0},U=p.createDomain("component"),H=y.createFactory(({client:t,component:e,name:i})=>{const g=t.frameworks.getByName(e.frameworkName);return{name:i,component:e,frameworkStore:g}});function K(t){return y.invoke(H,t)}const z=y.createFactory(({client:t})=>{const e=U.store({}),i=p.createApi(e,{register(r,n){return{...r,[n.name]:n}}});function g(r,n){e.getState()[r]&&b.logger("warn",`Component '${r}' already registered. Registering again will override the previous registration.`);const S=K({client:t,name:r,component:n});i.register(S)}const m=e.map(r=>Object.values(r));function d(r){return e.map(n=>n[r],{skipVoid:!1})}return{register:g,getByName:d,listStore:m}});function G(t){return y.invoke(z,t)}const Y=(t,e,i)=>{i.register(t,e)},J=p.createDomain("framework"),Q=y.createFactory(({client:t})=>{const e=J.store({}),i=p.createApi(e,{register(r,n){return{...r,[n.name]:n.framework}}});function g(r,n){e.getState()[r]&&b.logger("warn",`Framework '${r}' already registered. Registering again will override the previous registration.`),i.register({name:r,framework:n})}const m=e.map(r=>Object.values(r));function d(r){return e.map(n=>n[r],{skipVoid:!1})}return{register:g,getByName:d,listStore:m}});function W(t){return y.invoke(Q,t)}const X=(t,e)=>{e.register(t.name,t)},Z=6e3,D=x.createStorageKey("last_ping","global"),ee=t=>`${t}/api/v1/ping`,te=async t=>{try{const e=Date.now(),i=localStorage.getItem(D);if(i&&e-parseInt(i)<Z)return!0;const g=ee(t.apiUrl),m={projectId:t.projectId,path:window.location.pathname},d=JSON.stringify(m),r={"Content-Type":"application/json"},n=document.getElementById("picked_script"),c=n==null?void 0:n.dataset.verceltoken;c&&(r["x-vercel-protection-bypass"]=c);const k=(await fetch(g,{method:"POST",headers:r,body:d})).ok;return k&&localStorage.setItem(D,e.toString()),k}catch(e){return b.logger("error",e),!1}},re=p.createDomain("predicate"),ne=y.createFactory(({client:t})=>{const e=re.store({}),i=p.createApi(e,{register(r,n){return{...r,[n.name]:{name:n.name,predicate:n.predicate}}}});function g(r,n){e.getState()[r]&&b.logger("warn",`Predicate '${r}' already registered. Registering again will override the previous registration.`),i.register(Object.freeze({name:r,predicate:n}))}const m=e.map(r=>Object.values(r));function d(r){return e.map(n=>n[r],{skipVoid:!1})}return{register:g,getByName:d,listStore:m}});function se(t){return y.invoke(ne,t)}const oe=(t,e,i)=>{i.register(t,e)},$=p.createDomain("feature"),ie=y.createFactory(({client:t})=>{const e=$.store({}),i=$.store([]),g=p.createApi(e,{register(a,o){return{...a,[o.id]:o.feature}}});function m(a,o){e.getState()[a]&&b.logger("warn",`Feature '${a}' already registered. Registering again will override the previous registration.`);const l={id:a,feature:{...o,id:a}};g.register(Object.freeze({id:a,feature:l}))}const d=p.createEffect(async({id:a,key:o,storage:s="local"})=>{const l=x.createStorageKey(`feature:${a}:${o}`,"global"),u=(s==="session"?x.sessionStore:x.localStore).get(l).boolean();return u===null?null:{id:a,key:o,bucket:u}}),r=p.createEffect(a=>{if(!a)return null;const o=x.createStorageKey(`feature:${a.id}:${a.key}`,"global");(a.storage==="session"?x.sessionStore:x.localStore).set(o,a.bucket)}),n=new Map,c=p.attach({source:{allFeaturesStore:e,resolvedFeaturesStore:i},effect:async({allFeaturesStore:a,resolvedFeaturesStore:o},{id:s,decide:l,key:f})=>{const u=o.find(A=>A.id===s);if(u)return u;const v=a[s];if(!v)throw new Error(`Feature with id '${s}' not found`);const F=n.get(`${s}:${f}`);if(F!==void 0){const A=await F;return{id:v.id,bucket:A,key:f,storage:v.feature.storage}}const E=l();n.set(`${s}:${f}`,E);const I=await E;return{id:v.id,bucket:I,key:f,storage:v.feature.storage}}});p.sample({clock:g.register,fn:a=>{const{id:o,feature:s}=a;return{id:o,key:s.feature.key,storage:s.feature.storage}},target:d}),p.sample({source:e,clock:c.doneData,fn:(a,o)=>{var v;const{id:s,bucket:l,storage:f}=o,u=(v=a[s])==null?void 0:v.feature.key;return u?{key:u,id:s,bucket:l,storage:f}:null},target:r});const S=p.combine({allFeaturesStore:e,resolvedFeaturesStore:i}).map(({allFeaturesStore:a,resolvedFeaturesStore:o})=>Object.values(a).map(s=>{const l=o.find(f=>f.id===s.id);return l?{id:s.id,name:s.feature.name,key:s.feature.key,getBucket:()=>({id:s.id,bucket:l.bucket}),isResolved:!0}:{id:s.id,name:s.feature.name,key:s.feature.key,getBucket:async()=>await c(s.feature),isResolved:!1}}));p.sample({clock:c.doneData,source:{resolvedFeatures:i},filter:({resolvedFeatures:a},{id:o})=>!a.some(s=>s.id===o),fn:(a,o)=>o,target:t.eventBus.prepend(a=>({type:"feature_decide",feature:a}))}),p.sample({clock:[d.doneData,c.doneData],source:i,fn:(a,o)=>!o||a.some(s=>s.id===o.id)?a:[...a,o],target:i});function k(a){return e.map(o=>o[a],{skipVoid:!1})}return{register:m,getByName:k,listStore:S}});function ae(t){return y.invoke(ie,t)}const ce=(t,e,i)=>{i.register(t,e)},h=p.createDomain("history");function R(t,e){return{id:P.generateId(`history-entry-${Date.now()}-${Math.random()}}`),node:e,at:Date.now(),experienceId:t}}const ue=y.createFactory(()=>{const t=h.store({entries:[]}),e=h.event(),i=h.event(),g=h.event(),m=h.event();t.on(e,(r,n)=>({entries:[...r.entries,R(n.experienceId,n.node)]})),t.on(i,(r,n)=>({entries:[...r.entries.slice(0,-1),R(n.experienceId,n.node)]})),t.on(m,(r,n)=>n);function d(r,n){const c={lastStepIndex:-1,secondLastStepIndex:-1};for(let S=r.length-1;S>=0;S--){const k=r[S],a=k==null?void 0:k.node;if(!(!a||!w.isStepNode(a))&&!(n&&(k==null?void 0:k.experienceId)!==n))if(c.lastStepIndex===-1)c.lastStepIndex=S;else{c.secondLastStepIndex=S;break}}return c}return t.on(g,(r,n)=>{const{secondLastStepIndex:c}=d(r.entries,n.experienceId),S=c!==-1?r.entries.slice(0,c+1):r.entries;return{...r,entries:S}}),{push:e,replace:i,back:g,restore:m,entriesStore:t.map(r=>r.entries)}});function le(){return y.invoke(ue)}const ge=p.createDomain("field"),de=y.createFactory(()=>{const t=ge.store({}),e=p.createApi(t,{register(r,n){return{...r,[n.field.id]:n.field}}});function i(r){e.register({field:r})}const g=t.map(r=>Object.values(r));function m(r){return t.map(n=>n[r]||null)}function d(r){return t.map(n=>Object.values(n).find(c=>c.name===r)||null)}return{register:i,getById:m,listStore:g,getByName:d}});function pe(){return y.invoke(de)}const me=(t,e)=>{e.register(t)},fe=p.createDomain("action"),ye=y.createFactory(()=>{const t=fe.store({}),e=p.createApi(t,{register(d,r){return{...d,[r.name]:{name:r.name,action:r.action}}}});function i(d,r){e.register({name:d,action:r})}const g=t.map(d=>Object.values(d));function m(d){return t.map(r=>r[d],{skipVoid:!1})}return{register:i,getByName:m,listStore:g}});function Se(){return y.invoke(ye)}const ve=(t,e,i)=>{i.register(t,e)},ke=p.createDomain("response"),Fe=y.createFactory(({client:t})=>{const e=ke.store({}),i=p.createEvent(),g=p.createEvent(),m=p.createApi(e,{register(o,s){return{...o,[s.fieldId]:s.response}},registerBatch(o,s){return{...o,...s}},clear(o,s){const{[s]:l,...f}=o;return f},clearAll(){return{}}});function d(o,s){m.register({fieldId:o,response:s})}async function r(o){const s=[];return await Promise.allSettled(Object.entries(o).map(async([l,f])=>{let u=f;const v=t.fields.getById(l).getState();if(!v){s.push({fieldId:l,userMessage:`Field '${l}' not found`,systemMessage:`No field with ID '${l}' exists. Available field IDs are: ${Object.keys(t.fields.listStore.getState()).join(",")}.`,value:u});return}if(v.multiple&&(typeof u=="string"||typeof u=="number"||typeof u=="boolean")&&(u=[u]),v.validation&&!M.isEmpty(v.validation)){const F=await w.evaluateRuleLogic(t,v.validation,{$input:u});if(typeof F=="string"){s.push({fieldId:l,userMessage:F,systemMessage:`Field validation resulted in an error: ${F}.`,value:u});return}if(F===!1){s.push({fieldId:l,userMessage:"This field is invalid",systemMessage:"Field validation resulted in an unspecified error.",value:u});return}}if(v.required&&(typeof u>"u"||u===null||u===""||Array.isArray(u)&&!u.length)){s.push({fieldId:l,userMessage:"This field is required",systemMessage:"Field is required.",value:u});return}if(!v.multiple&&Array.isArray(u)&&u.length>1){s.push({fieldId:l,userMessage:"This field expects a single response",systemMessage:"Field expects a single response.",value:u});return}if(v.options){const F=v.options.map(I=>I.value),E=Array.isArray(u)?u:[u];Array.isArray(u)&&(E.every(I=>F.includes(I))||s.push({fieldId:l,userMessage:"This field expects a valid option",systemMessage:`Field expects a valid option. Valid options are: ${F.join(", ")}`,value:u}))}})),{responsesToCommit:o,validationErrors:s}}async function n(o){const{responsesToCommit:s,validationErrors:l}=await r(o);return l.length?{errors:l}:(m.registerBatch(s),{errors:[]})}const c=e.map(o=>o),S=e.map(o=>Object.keys(o).map(l=>({fieldId:l,value:o[l]})));function k(o){const s=t.fields.getById(o),l=e.map(f=>f[o]||null);return p.combine({f:s,r:l},({f,r:u})=>u||(f!=null&&f.defaultValue?f.defaultValue:null))}function a(o){const s=t.fields.getByName(o);return p.combine({f:s,s:e},({f:l,s:f})=>{const u=l&&f[l.id]||null;return u||(l!=null&&l.defaultValue?l.defaultValue:null)})}return p.sample({clock:i,target:m.clearAll}),p.sample({clock:g,target:m.clear}),{register:d,clearAll:i,clear:g,commit:n,getResponsesToCommit:r,listStore:S,getAllStore:c,getByFieldId:k,getByFieldName:a}});function xe(t){return y.invoke(Fe,t)}function we(){if(B.supportsCryptoRandomUUID())return crypto.randomUUID();const t=Date.now().toString(36),e=Math.random().toString(36).substring(2,15),i=Math.random().toString(36).substring(2,15),g=Math.random().toString(36).substring(2,15);return`${t}-${e}-${i}-${g}`}const Ie=()=>({id:we()}),he=x.createStorageKey("session","global"),be=()=>{if(!B.supportsLocalStorage())return null;const t=x.localStore.get(he);let e=t.isSet()?t.json():null;return e||(e=Ie(),t.set(e)),e},Ee=()=>be();exports.createActionIndex=Se;exports.createComponentIndex=G;exports.createExperienceIndex=C;exports.createFeatureIndex=ae;exports.createFieldIndex=pe;exports.createFrameworkIndex=W;exports.createHistory=le;exports.createPredicateIndex=se;exports.createResponseIndex=xe;exports.initialiseExperience=O;exports.initialiseExperiences=q;exports.initialiseSession=Ee;exports.ping=te;exports.setupAction=ve;exports.setupComponent=Y;exports.setupExperience=L;exports.setupFeature=ce;exports.setupField=me;exports.setupFramework=X;exports.setupPredicate=oe;
@@ -1,33 +1,33 @@
1
1
  import { createDomain as h, createApi as b, createEffect as j, attach as _, sample as x, combine as B, createEvent as O } from "effector";
2
- import { createFactory as k, invoke as v } from "@withease/factories";
2
+ import { createFactory as v, invoke as k } from "@withease/factories";
3
3
  import { g as N, t as U, b as H, f as q, e as C, h as z } from "./experience-instance-CeuHLrdL.js";
4
4
  import { l as E } from "./logger-C9a75KZn.js";
5
5
  import { c as D, s as M, l as A } from "./storage-Cb_71y48.js";
6
6
  import { g as G } from "./id-BW-g3y32.js";
7
7
  import { i as K } from "./object-JwZ58NOH.js";
8
8
  import { e as Y, k as J } from "./supports-DBMT17KZ.js";
9
- const L = h("experience"), Q = k(
9
+ const L = h("experience"), Q = v(
10
10
  ({ client: t, experience: e }) => {
11
11
  const i = L.store(e), g = b(i, {
12
- merge(u, m) {
12
+ merge(c, m) {
13
13
  return {
14
- ...u,
14
+ ...c,
15
15
  ...m.experience
16
16
  };
17
17
  }
18
- }), p = i.map((u) => ({
19
- name: u.name,
20
- decisionLogic: u.decide,
21
- targetSelectors: u.targets,
18
+ }), p = i.map((c) => ({
19
+ name: c.name,
20
+ decisionLogic: c.decide,
21
+ targetSelectors: c.targets,
22
22
  initializeOpenLogic: e.initializeOpen
23
23
  })), d = t.components.listStore.map(
24
- (u) => u.find((m) => m.name === `experience:${e.id}`) || u.find((m) => m.name === "experience"),
24
+ (c) => c.find((m) => m.name === `experience:${e.id}`) || c.find((m) => m.name === "experience"),
25
25
  { skipVoid: !1 }
26
- ), r = i.map((u) => ({
27
- steps: u.steps,
28
- nodes: u.nodes,
29
- edges: u.edges,
30
- conditionals: u.conditionals
26
+ ), r = i.map((c) => ({
27
+ steps: c.steps,
28
+ nodes: c.nodes,
29
+ edges: c.edges,
30
+ conditionals: c.conditionals
31
31
  })), n = e.actions ?? [];
32
32
  return {
33
33
  id: e.id,
@@ -40,9 +40,9 @@ const L = h("experience"), Q = k(
40
40
  }
41
41
  );
42
42
  function W(t) {
43
- return v(Q, t);
43
+ return k(Q, t);
44
44
  }
45
- const X = k(({ client: t }) => {
45
+ const X = v(({ client: t }) => {
46
46
  const e = L.store({}), i = b(e, {
47
47
  register(r, n) {
48
48
  return {
@@ -57,8 +57,8 @@ const X = k(({ client: t }) => {
57
57
  n.merge({ experience: r, strategy: "override" });
58
58
  return;
59
59
  }
60
- const u = W({ client: t, experience: r });
61
- i.register(u);
60
+ const c = W({ client: t, experience: r });
61
+ i.register(c);
62
62
  }
63
63
  const p = e.map((r) => Object.values(r));
64
64
  function d(r) {
@@ -71,7 +71,7 @@ const X = k(({ client: t }) => {
71
71
  };
72
72
  });
73
73
  function Ae(t) {
74
- return v(X, t);
74
+ return k(X, t);
75
75
  }
76
76
  const je = (t, e) => {
77
77
  e.register(t);
@@ -91,7 +91,7 @@ const je = (t, e) => {
91
91
  }, ee = async (t, e) => {
92
92
  const { decisionLogic: i, targetSelectors: g } = e.configStore.getState();
93
93
  return N(g, e.id).length < 1 || g.length === 0 ? !1 : i && q(i) ? await C(t, i) === !0 : !0;
94
- }, te = h("component"), re = k(
94
+ }, te = h("component"), re = v(
95
95
  ({ client: t, component: e, name: i }) => {
96
96
  const g = t.frameworks.getByName(e.frameworkName);
97
97
  return {
@@ -102,9 +102,9 @@ const je = (t, e) => {
102
102
  }
103
103
  );
104
104
  function ne(t) {
105
- return v(re, t);
105
+ return k(re, t);
106
106
  }
107
- const se = k(({ client: t }) => {
107
+ const se = v(({ client: t }) => {
108
108
  const e = te.store({}), i = b(e, {
109
109
  register(r, n) {
110
110
  return {
@@ -132,11 +132,11 @@ const se = k(({ client: t }) => {
132
132
  };
133
133
  });
134
134
  function Me(t) {
135
- return v(se, t);
135
+ return k(se, t);
136
136
  }
137
137
  const Pe = (t, e, i) => {
138
138
  i.register(t, e);
139
- }, oe = h("framework"), ie = k(({ client: t }) => {
139
+ }, oe = h("framework"), ie = v(({ client: t }) => {
140
140
  const e = oe.store({}), i = b(e, {
141
141
  register(r, n) {
142
142
  return {
@@ -162,7 +162,7 @@ const Pe = (t, e, i) => {
162
162
  };
163
163
  });
164
164
  function Te(t) {
165
- return v(ie, t);
165
+ return k(ie, t);
166
166
  }
167
167
  const Ve = (t, e) => {
168
168
  e.register(t.name, t);
@@ -176,8 +176,8 @@ const Ve = (t, e) => {
176
176
  path: window.location.pathname
177
177
  }, d = JSON.stringify(p), r = {
178
178
  "Content-Type": "application/json"
179
- }, n = document.getElementById("picked_script"), u = n == null ? void 0 : n.dataset.verceltoken;
180
- u && (r["x-vercel-protection-bypass"] = u);
179
+ }, n = document.getElementById("picked_script"), c = n == null ? void 0 : n.dataset.verceltoken;
180
+ c && (r["x-vercel-protection-bypass"] = c);
181
181
  const S = (await fetch(g, {
182
182
  method: "POST",
183
183
  headers: r,
@@ -187,7 +187,7 @@ const Ve = (t, e) => {
187
187
  } catch (e) {
188
188
  return E("error", e), !1;
189
189
  }
190
- }, ue = h("predicate"), le = k(({ client: t }) => {
190
+ }, ue = h("predicate"), le = v(({ client: t }) => {
191
191
  const e = ue.store({}), i = b(e, {
192
192
  register(r, n) {
193
193
  return {
@@ -216,11 +216,11 @@ const Ve = (t, e) => {
216
216
  };
217
217
  });
218
218
  function Ce(t) {
219
- return v(le, t);
219
+ return k(le, t);
220
220
  }
221
221
  const Le = (t, e, i) => {
222
222
  i.register(t, e);
223
- }, T = h("feature"), ge = k(({ client: t }) => {
223
+ }, T = h("feature"), ge = v(({ client: t }) => {
224
224
  const e = T.store({}), i = T.store([]), g = b(e, {
225
225
  register(a, o) {
226
226
  return {
@@ -234,7 +234,7 @@ const Le = (t, e, i) => {
234
234
  "warn",
235
235
  `Feature '${a}' already registered. Registering again will override the previous registration.`
236
236
  );
237
- const c = {
237
+ const l = {
238
238
  id: a,
239
239
  feature: {
240
240
  ...o,
@@ -244,7 +244,7 @@ const Le = (t, e, i) => {
244
244
  g.register(
245
245
  Object.freeze({
246
246
  id: a,
247
- feature: c
247
+ feature: l
248
248
  })
249
249
  );
250
250
  }
@@ -254,20 +254,20 @@ const Le = (t, e, i) => {
254
254
  key: o,
255
255
  storage: s = "local"
256
256
  }) => {
257
- const c = D(`feature:${a}:${o}`, "global"), l = (s === "session" ? M : A).get(c).boolean();
258
- return l === null ? null : { id: a, key: o, bucket: l, storage: s };
257
+ const l = D(`feature:${a}:${o}`, "global"), u = (s === "session" ? M : A).get(l).boolean();
258
+ return u === null ? null : { id: a, key: o, bucket: u };
259
259
  }
260
260
  ), r = j((a) => {
261
261
  if (!a)
262
262
  return null;
263
263
  const o = D(`feature:${a.id}:${a.key}`, "global");
264
264
  (a.storage === "session" ? M : A).set(o, a.bucket);
265
- }), n = /* @__PURE__ */ new Map(), u = _({
265
+ }), n = /* @__PURE__ */ new Map(), c = _({
266
266
  source: { allFeaturesStore: e, resolvedFeaturesStore: i },
267
- effect: async ({ allFeaturesStore: a, resolvedFeaturesStore: o }, { id: s, decide: c, key: f }) => {
268
- const l = o.find((R) => R.id === s);
269
- if (l)
270
- return l;
267
+ effect: async ({ allFeaturesStore: a, resolvedFeaturesStore: o }, { id: s, decide: l, key: f }) => {
268
+ const u = o.find((R) => R.id === s);
269
+ if (u)
270
+ return u;
271
271
  const y = a[s];
272
272
  if (!y)
273
273
  throw new Error(`Feature with id '${s}' not found`);
@@ -276,7 +276,7 @@ const Le = (t, e, i) => {
276
276
  const R = await w;
277
277
  return { id: y.id, bucket: R, key: f, storage: y.feature.storage };
278
278
  }
279
- const $ = c();
279
+ const $ = l();
280
280
  n.set(`${s}:${f}`, $);
281
281
  const F = await $;
282
282
  return { id: y.id, bucket: F, key: f, storage: y.feature.storage };
@@ -284,23 +284,18 @@ const Le = (t, e, i) => {
284
284
  });
285
285
  x({
286
286
  clock: g.register,
287
- source: e,
288
- filter: (a, o) => {
289
- const s = a[o.id];
290
- return s ? s.feature.key !== o.feature.feature.key || s.feature.storage !== o.feature.feature.storage : !0;
291
- },
292
- fn: (a, o) => {
293
- const { id: s, feature: c } = o;
294
- return { id: s, key: c.feature.key, storage: c.feature.storage };
287
+ fn: (a) => {
288
+ const { id: o, feature: s } = a;
289
+ return { id: o, key: s.feature.key, storage: s.feature.storage };
295
290
  },
296
291
  target: d
297
292
  }), x({
298
293
  source: e,
299
- clock: u.doneData,
294
+ clock: c.doneData,
300
295
  fn: (a, o) => {
301
296
  var y;
302
- const { id: s, bucket: c, storage: f } = o, l = (y = a[s]) == null ? void 0 : y.feature.key;
303
- return l ? { key: l, id: s, bucket: c, storage: f } : null;
297
+ const { id: s, bucket: l, storage: f } = o, u = (y = a[s]) == null ? void 0 : y.feature.key;
298
+ return u ? { key: u, id: s, bucket: l, storage: f } : null;
304
299
  },
305
300
  target: r
306
301
  });
@@ -309,24 +304,24 @@ const Le = (t, e, i) => {
309
304
  allFeaturesStore: a,
310
305
  resolvedFeaturesStore: o
311
306
  }) => Object.values(a).map((s) => {
312
- const c = o.find((f) => f.id === s.id);
313
- return c ? {
307
+ const l = o.find((f) => f.id === s.id);
308
+ return l ? {
314
309
  id: s.id,
315
310
  name: s.feature.name,
316
311
  key: s.feature.key,
317
- getBucket: () => ({ id: s.id, bucket: c.bucket }),
312
+ getBucket: () => ({ id: s.id, bucket: l.bucket }),
318
313
  isResolved: !0
319
314
  } : {
320
315
  id: s.id,
321
316
  name: s.feature.name,
322
317
  key: s.feature.key,
323
- getBucket: async () => await u(s.feature),
318
+ getBucket: async () => await c(s.feature),
324
319
  isResolved: !1
325
320
  };
326
321
  })
327
322
  );
328
323
  x({
329
- clock: u.doneData,
324
+ clock: c.doneData,
330
325
  source: { resolvedFeatures: i },
331
326
  filter: ({ resolvedFeatures: a }, { id: o }) => !a.some((s) => s.id === o),
332
327
  fn: (a, o) => o,
@@ -335,7 +330,7 @@ const Le = (t, e, i) => {
335
330
  feature: a
336
331
  }))
337
332
  }), x({
338
- clock: [d.doneData, u.doneData],
333
+ clock: [d.doneData, c.doneData],
339
334
  source: i,
340
335
  fn: (a, o) => !o || a.some((s) => s.id === o.id) ? a : [...a, o],
341
336
  target: i
@@ -350,7 +345,7 @@ const Le = (t, e, i) => {
350
345
  };
351
346
  });
352
347
  function _e(t) {
353
- return v(ge, t);
348
+ return k(ge, t);
354
349
  }
355
350
  const Ue = (t, e, i) => {
356
351
  i.register(t, e);
@@ -364,7 +359,7 @@ function V(t, e) {
364
359
  experienceId: t
365
360
  };
366
361
  }
367
- const de = k(() => {
362
+ const de = v(() => {
368
363
  const t = I.store({ entries: [] }), e = I.event(), i = I.event(), g = I.event(), p = I.event();
369
364
  t.on(e, (r, n) => ({
370
365
  entries: [...r.entries, V(n.experienceId, n.node)]
@@ -375,21 +370,21 @@ const de = k(() => {
375
370
  ]
376
371
  })), t.on(p, (r, n) => n);
377
372
  function d(r, n) {
378
- const u = { lastStepIndex: -1, secondLastStepIndex: -1 };
373
+ const c = { lastStepIndex: -1, secondLastStepIndex: -1 };
379
374
  for (let m = r.length - 1; m >= 0; m--) {
380
375
  const S = r[m], a = S == null ? void 0 : S.node;
381
376
  if (!(!a || !z(a)) && !(n && (S == null ? void 0 : S.experienceId) !== n))
382
- if (u.lastStepIndex === -1)
383
- u.lastStepIndex = m;
377
+ if (c.lastStepIndex === -1)
378
+ c.lastStepIndex = m;
384
379
  else {
385
- u.secondLastStepIndex = m;
380
+ c.secondLastStepIndex = m;
386
381
  break;
387
382
  }
388
383
  }
389
- return u;
384
+ return c;
390
385
  }
391
386
  return t.on(g, (r, n) => {
392
- const { secondLastStepIndex: u } = d(r.entries, n.experienceId), m = u !== -1 ? r.entries.slice(0, u + 1) : r.entries;
387
+ const { secondLastStepIndex: c } = d(r.entries, n.experienceId), m = c !== -1 ? r.entries.slice(0, c + 1) : r.entries;
393
388
  return {
394
389
  ...r,
395
390
  entries: m
@@ -403,9 +398,9 @@ const de = k(() => {
403
398
  };
404
399
  });
405
400
  function He() {
406
- return v(de);
401
+ return k(de);
407
402
  }
408
- const pe = h("field"), fe = k(() => {
403
+ const pe = h("field"), fe = v(() => {
409
404
  const t = pe.store({}), e = b(t, {
410
405
  register(r, n) {
411
406
  return {
@@ -422,7 +417,7 @@ const pe = h("field"), fe = k(() => {
422
417
  return t.map((n) => n[r] || null);
423
418
  }
424
419
  function d(r) {
425
- return t.map((n) => Object.values(n).find((u) => u.name === r) || null);
420
+ return t.map((n) => Object.values(n).find((c) => c.name === r) || null);
426
421
  }
427
422
  return {
428
423
  register: i,
@@ -432,11 +427,11 @@ const pe = h("field"), fe = k(() => {
432
427
  };
433
428
  });
434
429
  function qe() {
435
- return v(fe);
430
+ return k(fe);
436
431
  }
437
432
  const ze = (t, e) => {
438
433
  e.register(t);
439
- }, me = h("action"), ye = k(() => {
434
+ }, me = h("action"), ye = v(() => {
440
435
  const t = me.store({}), e = b(t, {
441
436
  register(d, r) {
442
437
  return {
@@ -462,11 +457,11 @@ const ze = (t, e) => {
462
457
  };
463
458
  });
464
459
  function Ge() {
465
- return v(ye);
460
+ return k(ye);
466
461
  }
467
462
  const Ke = (t, e, i) => {
468
463
  i.register(t, e);
469
- }, Se = h("response"), ke = k(({ client: t }) => {
464
+ }, Se = h("response"), ve = v(({ client: t }) => {
470
465
  const e = Se.store({}), i = O(), g = O(), p = b(e, {
471
466
  register(o, s) {
472
467
  return {
@@ -481,7 +476,7 @@ const Ke = (t, e, i) => {
481
476
  };
482
477
  },
483
478
  clear(o, s) {
484
- const { [s]: c, ...f } = o;
479
+ const { [s]: l, ...f } = o;
485
480
  return f;
486
481
  },
487
482
  clearAll() {
@@ -494,88 +489,88 @@ const Ke = (t, e, i) => {
494
489
  async function r(o) {
495
490
  const s = [];
496
491
  return await Promise.allSettled(
497
- Object.entries(o).map(async ([c, f]) => {
498
- let l = f;
499
- const y = t.fields.getById(c).getState();
492
+ Object.entries(o).map(async ([l, f]) => {
493
+ let u = f;
494
+ const y = t.fields.getById(l).getState();
500
495
  if (!y) {
501
496
  s.push({
502
- fieldId: c,
503
- userMessage: `Field '${c}' not found`,
504
- systemMessage: `No field with ID '${c}' exists. Available field IDs are: ${Object.keys(t.fields.listStore.getState()).join(",")}.`,
505
- value: l
497
+ fieldId: l,
498
+ userMessage: `Field '${l}' not found`,
499
+ systemMessage: `No field with ID '${l}' exists. Available field IDs are: ${Object.keys(t.fields.listStore.getState()).join(",")}.`,
500
+ value: u
506
501
  });
507
502
  return;
508
503
  }
509
- if (y.multiple && (typeof l == "string" || typeof l == "number" || typeof l == "boolean") && (l = [l]), y.validation && !K(y.validation)) {
504
+ if (y.multiple && (typeof u == "string" || typeof u == "number" || typeof u == "boolean") && (u = [u]), y.validation && !K(y.validation)) {
510
505
  const w = await C(t, y.validation, {
511
- $input: l
506
+ $input: u
512
507
  });
513
508
  if (typeof w == "string") {
514
509
  s.push({
515
- fieldId: c,
510
+ fieldId: l,
516
511
  userMessage: w,
517
512
  systemMessage: `Field validation resulted in an error: ${w}.`,
518
- value: l
513
+ value: u
519
514
  });
520
515
  return;
521
516
  }
522
517
  if (w === !1) {
523
518
  s.push({
524
- fieldId: c,
519
+ fieldId: l,
525
520
  userMessage: "This field is invalid",
526
521
  systemMessage: "Field validation resulted in an unspecified error.",
527
- value: l
522
+ value: u
528
523
  });
529
524
  return;
530
525
  }
531
526
  }
532
- if (y.required && (typeof l > "u" || l === null || l === "" || Array.isArray(l) && !l.length)) {
527
+ if (y.required && (typeof u > "u" || u === null || u === "" || Array.isArray(u) && !u.length)) {
533
528
  s.push({
534
- fieldId: c,
529
+ fieldId: l,
535
530
  userMessage: "This field is required",
536
531
  systemMessage: "Field is required.",
537
- value: l
532
+ value: u
538
533
  });
539
534
  return;
540
535
  }
541
- if (!y.multiple && Array.isArray(l) && l.length > 1) {
536
+ if (!y.multiple && Array.isArray(u) && u.length > 1) {
542
537
  s.push({
543
- fieldId: c,
538
+ fieldId: l,
544
539
  userMessage: "This field expects a single response",
545
540
  systemMessage: "Field expects a single response.",
546
- value: l
541
+ value: u
547
542
  });
548
543
  return;
549
544
  }
550
545
  if (y.options) {
551
- const w = y.options.map((F) => F.value), $ = Array.isArray(l) ? l : [l];
552
- Array.isArray(l) && ($.every((F) => w.includes(F)) || s.push({
553
- fieldId: c,
546
+ const w = y.options.map((F) => F.value), $ = Array.isArray(u) ? u : [u];
547
+ Array.isArray(u) && ($.every((F) => w.includes(F)) || s.push({
548
+ fieldId: l,
554
549
  userMessage: "This field expects a valid option",
555
550
  systemMessage: `Field expects a valid option. Valid options are: ${w.join(", ")}`,
556
- value: l
551
+ value: u
557
552
  }));
558
553
  }
559
554
  })
560
555
  ), { responsesToCommit: o, validationErrors: s };
561
556
  }
562
557
  async function n(o) {
563
- const { responsesToCommit: s, validationErrors: c } = await r(o);
564
- return c.length ? { errors: c } : (p.registerBatch(s), { errors: [] });
558
+ const { responsesToCommit: s, validationErrors: l } = await r(o);
559
+ return l.length ? { errors: l } : (p.registerBatch(s), { errors: [] });
565
560
  }
566
- const u = e.map((o) => o), m = e.map((o) => Object.keys(o).map((c) => ({
567
- fieldId: c,
568
- value: o[c]
561
+ const c = e.map((o) => o), m = e.map((o) => Object.keys(o).map((l) => ({
562
+ fieldId: l,
563
+ value: o[l]
569
564
  })));
570
565
  function S(o) {
571
- const s = t.fields.getById(o), c = e.map((f) => f[o] || null);
572
- return B({ f: s, r: c }, ({ f, r: l }) => l || (f != null && f.defaultValue ? f.defaultValue : null));
566
+ const s = t.fields.getById(o), l = e.map((f) => f[o] || null);
567
+ return B({ f: s, r: l }, ({ f, r: u }) => u || (f != null && f.defaultValue ? f.defaultValue : null));
573
568
  }
574
569
  function a(o) {
575
570
  const s = t.fields.getByName(o);
576
- return B({ f: s, s: e }, ({ f: c, s: f }) => {
577
- const l = c && f[c.id] || null;
578
- return l || (c != null && c.defaultValue ? c.defaultValue : null);
571
+ return B({ f: s, s: e }, ({ f: l, s: f }) => {
572
+ const u = l && f[l.id] || null;
573
+ return u || (l != null && l.defaultValue ? l.defaultValue : null);
579
574
  });
580
575
  }
581
576
  return x({
@@ -591,22 +586,22 @@ const Ke = (t, e, i) => {
591
586
  commit: n,
592
587
  getResponsesToCommit: r,
593
588
  listStore: m,
594
- getAllStore: u,
589
+ getAllStore: c,
595
590
  getByFieldId: S,
596
591
  getByFieldName: a
597
592
  };
598
593
  });
599
594
  function Ye(t) {
600
- return v(ke, t);
595
+ return k(ve, t);
601
596
  }
602
- function ve() {
597
+ function ke() {
603
598
  if (J())
604
599
  return crypto.randomUUID();
605
600
  const t = Date.now().toString(36), e = Math.random().toString(36).substring(2, 15), i = Math.random().toString(36).substring(2, 15), g = Math.random().toString(36).substring(2, 15);
606
601
  return `${t}-${e}-${i}-${g}`;
607
602
  }
608
603
  const we = () => ({
609
- id: ve()
604
+ id: ke()
610
605
  }), he = D("session", "global"), be = () => {
611
606
  if (!Y()) return null;
612
607
  const t = A.get(he);
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@picked/client",
3
- "version": "0.0.1-dev.1763077817547",
3
+ "version": "0.0.1-dev.1763330007276",
4
4
  "dependencies": {
5
5
  "@withease/factories": "^1.0.5"
6
6
  },
@@ -1 +0,0 @@
1
- "use strict";const p=require("effector"),y=require("@withease/factories"),w=require("./experience-instance-B2l_MG7I.cjs"),b=require("./logger-BsmHUUw1.cjs"),x=require("./storage-DuRlyFaY.cjs"),P=require("./id-BKIWbSTy.cjs"),M=require("./object-BbFTsGh3.cjs"),B=require("./supports-YvpQZxbh.cjs"),j=p.createDomain("experience"),T=y.createFactory(({client:t,experience:e})=>{const i=j.store(e),g=p.createApi(i,{merge(u,S){return{...u,...S.experience}}}),f=i.map(u=>({name:u.name,decisionLogic:u.decide,targetSelectors:u.targets,initializeOpenLogic:e.initializeOpen})),d=t.components.listStore.map(u=>u.find(S=>S.name===`experience:${e.id}`)||u.find(S=>S.name==="experience"),{skipVoid:!1}),r=i.map(u=>({steps:u.steps,nodes:u.nodes,edges:u.edges,conditionals:u.conditionals})),n=e.actions??[];return{id:e.id,configStore:f,treeStore:r,componentStore:d,actions:n,merge:g.merge}});function V(t){return y.invoke(T,t)}const N=y.createFactory(({client:t})=>{const e=j.store({}),i=p.createApi(e,{register(r,n){return{...r,[n.id]:n}}});function g(r){const n=e.getState()[r.id];if(n){n.merge({experience:r,strategy:"override"});return}const u=V({client:t,experience:r});i.register(u)}const f=e.map(r=>Object.values(r));function d(r){return e.map(n=>n[r],{skipVoid:!1})}return{register:g,getById:d,listStore:f}});function C(t){return y.invoke(N,t)}const L=(t,e)=>{e.register(t)},O=(t,e)=>{const{targetSelectors:i}=e.configStore.getState(),g=w.getTargetElements(i,e.id);g.forEach(({elements:d})=>d.forEach(r=>w.tagTargetElement(r,e.id))),w.createAppHosts(g,e.id).forEach(d=>{t.experienceInstances.spawn(e,d)})},q=async t=>{await Promise.all(t.experiences.listStore.getState().map(async e=>{await _(t,e)&&O(t,e)}))},_=async(t,e)=>{const{decisionLogic:i,targetSelectors:g}=e.configStore.getState();return w.getTargetElements(g,e.id).length<1||g.length===0?!1:i&&w.isRulesLogic(i)?await w.evaluateRuleLogic(t,i)===!0:!0},U=p.createDomain("component"),H=y.createFactory(({client:t,component:e,name:i})=>{const g=t.frameworks.getByName(e.frameworkName);return{name:i,component:e,frameworkStore:g}});function K(t){return y.invoke(H,t)}const z=y.createFactory(({client:t})=>{const e=U.store({}),i=p.createApi(e,{register(r,n){return{...r,[n.name]:n}}});function g(r,n){e.getState()[r]&&b.logger("warn",`Component '${r}' already registered. Registering again will override the previous registration.`);const S=K({client:t,name:r,component:n});i.register(S)}const f=e.map(r=>Object.values(r));function d(r){return e.map(n=>n[r],{skipVoid:!1})}return{register:g,getByName:d,listStore:f}});function G(t){return y.invoke(z,t)}const Y=(t,e,i)=>{i.register(t,e)},J=p.createDomain("framework"),Q=y.createFactory(({client:t})=>{const e=J.store({}),i=p.createApi(e,{register(r,n){return{...r,[n.name]:n.framework}}});function g(r,n){e.getState()[r]&&b.logger("warn",`Framework '${r}' already registered. Registering again will override the previous registration.`),i.register({name:r,framework:n})}const f=e.map(r=>Object.values(r));function d(r){return e.map(n=>n[r],{skipVoid:!1})}return{register:g,getByName:d,listStore:f}});function W(t){return y.invoke(Q,t)}const X=(t,e)=>{e.register(t.name,t)},Z=6e3,D=x.createStorageKey("last_ping","global"),ee=t=>`${t}/api/v1/ping`,te=async t=>{try{const e=Date.now(),i=localStorage.getItem(D);if(i&&e-parseInt(i)<Z)return!0;const g=ee(t.apiUrl),f={projectId:t.projectId,path:window.location.pathname},d=JSON.stringify(f),r={"Content-Type":"application/json"},n=document.getElementById("picked_script"),u=n==null?void 0:n.dataset.verceltoken;u&&(r["x-vercel-protection-bypass"]=u);const k=(await fetch(g,{method:"POST",headers:r,body:d})).ok;return k&&localStorage.setItem(D,e.toString()),k}catch(e){return b.logger("error",e),!1}},re=p.createDomain("predicate"),ne=y.createFactory(({client:t})=>{const e=re.store({}),i=p.createApi(e,{register(r,n){return{...r,[n.name]:{name:n.name,predicate:n.predicate}}}});function g(r,n){e.getState()[r]&&b.logger("warn",`Predicate '${r}' already registered. Registering again will override the previous registration.`),i.register(Object.freeze({name:r,predicate:n}))}const f=e.map(r=>Object.values(r));function d(r){return e.map(n=>n[r],{skipVoid:!1})}return{register:g,getByName:d,listStore:f}});function se(t){return y.invoke(ne,t)}const oe=(t,e,i)=>{i.register(t,e)},$=p.createDomain("feature"),ie=y.createFactory(({client:t})=>{const e=$.store({}),i=$.store([]),g=p.createApi(e,{register(a,o){return{...a,[o.id]:o.feature}}});function f(a,o){e.getState()[a]&&b.logger("warn",`Feature '${a}' already registered. Registering again will override the previous registration.`);const c={id:a,feature:{...o,id:a}};g.register(Object.freeze({id:a,feature:c}))}const d=p.createEffect(async({id:a,key:o,storage:s="local"})=>{const c=x.createStorageKey(`feature:${a}:${o}`,"global"),l=(s==="session"?x.sessionStore:x.localStore).get(c).boolean();return l===null?null:{id:a,key:o,bucket:l,storage:s}}),r=p.createEffect(a=>{if(!a)return null;const o=x.createStorageKey(`feature:${a.id}:${a.key}`,"global");(a.storage==="session"?x.sessionStore:x.localStore).set(o,a.bucket)}),n=new Map,u=p.attach({source:{allFeaturesStore:e,resolvedFeaturesStore:i},effect:async({allFeaturesStore:a,resolvedFeaturesStore:o},{id:s,decide:c,key:m})=>{const l=o.find(A=>A.id===s);if(l)return l;const v=a[s];if(!v)throw new Error(`Feature with id '${s}' not found`);const F=n.get(`${s}:${m}`);if(F!==void 0){const A=await F;return{id:v.id,bucket:A,key:m,storage:v.feature.storage}}const E=c();n.set(`${s}:${m}`,E);const I=await E;return{id:v.id,bucket:I,key:m,storage:v.feature.storage}}});p.sample({clock:g.register,source:e,filter:(a,o)=>{const s=a[o.id];return s?s.feature.key!==o.feature.feature.key||s.feature.storage!==o.feature.feature.storage:!0},fn:(a,o)=>{const{id:s,feature:c}=o;return{id:s,key:c.feature.key,storage:c.feature.storage}},target:d}),p.sample({source:e,clock:u.doneData,fn:(a,o)=>{var v;const{id:s,bucket:c,storage:m}=o,l=(v=a[s])==null?void 0:v.feature.key;return l?{key:l,id:s,bucket:c,storage:m}:null},target:r});const S=p.combine({allFeaturesStore:e,resolvedFeaturesStore:i}).map(({allFeaturesStore:a,resolvedFeaturesStore:o})=>Object.values(a).map(s=>{const c=o.find(m=>m.id===s.id);return c?{id:s.id,name:s.feature.name,key:s.feature.key,getBucket:()=>({id:s.id,bucket:c.bucket}),isResolved:!0}:{id:s.id,name:s.feature.name,key:s.feature.key,getBucket:async()=>await u(s.feature),isResolved:!1}}));p.sample({clock:u.doneData,source:{resolvedFeatures:i},filter:({resolvedFeatures:a},{id:o})=>!a.some(s=>s.id===o),fn:(a,o)=>o,target:t.eventBus.prepend(a=>({type:"feature_decide",feature:a}))}),p.sample({clock:[d.doneData,u.doneData],source:i,fn:(a,o)=>!o||a.some(s=>s.id===o.id)?a:[...a,o],target:i});function k(a){return e.map(o=>o[a],{skipVoid:!1})}return{register:f,getByName:k,listStore:S}});function ae(t){return y.invoke(ie,t)}const ce=(t,e,i)=>{i.register(t,e)},h=p.createDomain("history");function R(t,e){return{id:P.generateId(`history-entry-${Date.now()}-${Math.random()}}`),node:e,at:Date.now(),experienceId:t}}const ue=y.createFactory(()=>{const t=h.store({entries:[]}),e=h.event(),i=h.event(),g=h.event(),f=h.event();t.on(e,(r,n)=>({entries:[...r.entries,R(n.experienceId,n.node)]})),t.on(i,(r,n)=>({entries:[...r.entries.slice(0,-1),R(n.experienceId,n.node)]})),t.on(f,(r,n)=>n);function d(r,n){const u={lastStepIndex:-1,secondLastStepIndex:-1};for(let S=r.length-1;S>=0;S--){const k=r[S],a=k==null?void 0:k.node;if(!(!a||!w.isStepNode(a))&&!(n&&(k==null?void 0:k.experienceId)!==n))if(u.lastStepIndex===-1)u.lastStepIndex=S;else{u.secondLastStepIndex=S;break}}return u}return t.on(g,(r,n)=>{const{secondLastStepIndex:u}=d(r.entries,n.experienceId),S=u!==-1?r.entries.slice(0,u+1):r.entries;return{...r,entries:S}}),{push:e,replace:i,back:g,restore:f,entriesStore:t.map(r=>r.entries)}});function le(){return y.invoke(ue)}const ge=p.createDomain("field"),de=y.createFactory(()=>{const t=ge.store({}),e=p.createApi(t,{register(r,n){return{...r,[n.field.id]:n.field}}});function i(r){e.register({field:r})}const g=t.map(r=>Object.values(r));function f(r){return t.map(n=>n[r]||null)}function d(r){return t.map(n=>Object.values(n).find(u=>u.name===r)||null)}return{register:i,getById:f,listStore:g,getByName:d}});function pe(){return y.invoke(de)}const fe=(t,e)=>{e.register(t)},me=p.createDomain("action"),ye=y.createFactory(()=>{const t=me.store({}),e=p.createApi(t,{register(d,r){return{...d,[r.name]:{name:r.name,action:r.action}}}});function i(d,r){e.register({name:d,action:r})}const g=t.map(d=>Object.values(d));function f(d){return t.map(r=>r[d],{skipVoid:!1})}return{register:i,getByName:f,listStore:g}});function Se(){return y.invoke(ye)}const ve=(t,e,i)=>{i.register(t,e)},ke=p.createDomain("response"),Fe=y.createFactory(({client:t})=>{const e=ke.store({}),i=p.createEvent(),g=p.createEvent(),f=p.createApi(e,{register(o,s){return{...o,[s.fieldId]:s.response}},registerBatch(o,s){return{...o,...s}},clear(o,s){const{[s]:c,...m}=o;return m},clearAll(){return{}}});function d(o,s){f.register({fieldId:o,response:s})}async function r(o){const s=[];return await Promise.allSettled(Object.entries(o).map(async([c,m])=>{let l=m;const v=t.fields.getById(c).getState();if(!v){s.push({fieldId:c,userMessage:`Field '${c}' not found`,systemMessage:`No field with ID '${c}' exists. Available field IDs are: ${Object.keys(t.fields.listStore.getState()).join(",")}.`,value:l});return}if(v.multiple&&(typeof l=="string"||typeof l=="number"||typeof l=="boolean")&&(l=[l]),v.validation&&!M.isEmpty(v.validation)){const F=await w.evaluateRuleLogic(t,v.validation,{$input:l});if(typeof F=="string"){s.push({fieldId:c,userMessage:F,systemMessage:`Field validation resulted in an error: ${F}.`,value:l});return}if(F===!1){s.push({fieldId:c,userMessage:"This field is invalid",systemMessage:"Field validation resulted in an unspecified error.",value:l});return}}if(v.required&&(typeof l>"u"||l===null||l===""||Array.isArray(l)&&!l.length)){s.push({fieldId:c,userMessage:"This field is required",systemMessage:"Field is required.",value:l});return}if(!v.multiple&&Array.isArray(l)&&l.length>1){s.push({fieldId:c,userMessage:"This field expects a single response",systemMessage:"Field expects a single response.",value:l});return}if(v.options){const F=v.options.map(I=>I.value),E=Array.isArray(l)?l:[l];Array.isArray(l)&&(E.every(I=>F.includes(I))||s.push({fieldId:c,userMessage:"This field expects a valid option",systemMessage:`Field expects a valid option. Valid options are: ${F.join(", ")}`,value:l}))}})),{responsesToCommit:o,validationErrors:s}}async function n(o){const{responsesToCommit:s,validationErrors:c}=await r(o);return c.length?{errors:c}:(f.registerBatch(s),{errors:[]})}const u=e.map(o=>o),S=e.map(o=>Object.keys(o).map(c=>({fieldId:c,value:o[c]})));function k(o){const s=t.fields.getById(o),c=e.map(m=>m[o]||null);return p.combine({f:s,r:c},({f:m,r:l})=>l||(m!=null&&m.defaultValue?m.defaultValue:null))}function a(o){const s=t.fields.getByName(o);return p.combine({f:s,s:e},({f:c,s:m})=>{const l=c&&m[c.id]||null;return l||(c!=null&&c.defaultValue?c.defaultValue:null)})}return p.sample({clock:i,target:f.clearAll}),p.sample({clock:g,target:f.clear}),{register:d,clearAll:i,clear:g,commit:n,getResponsesToCommit:r,listStore:S,getAllStore:u,getByFieldId:k,getByFieldName:a}});function xe(t){return y.invoke(Fe,t)}function we(){if(B.supportsCryptoRandomUUID())return crypto.randomUUID();const t=Date.now().toString(36),e=Math.random().toString(36).substring(2,15),i=Math.random().toString(36).substring(2,15),g=Math.random().toString(36).substring(2,15);return`${t}-${e}-${i}-${g}`}const Ie=()=>({id:we()}),he=x.createStorageKey("session","global"),be=()=>{if(!B.supportsLocalStorage())return null;const t=x.localStore.get(he);let e=t.isSet()?t.json():null;return e||(e=Ie(),t.set(e)),e},Ee=()=>be();exports.createActionIndex=Se;exports.createComponentIndex=G;exports.createExperienceIndex=C;exports.createFeatureIndex=ae;exports.createFieldIndex=pe;exports.createFrameworkIndex=W;exports.createHistory=le;exports.createPredicateIndex=se;exports.createResponseIndex=xe;exports.initialiseExperience=O;exports.initialiseExperiences=q;exports.initialiseSession=Ee;exports.ping=te;exports.setupAction=ve;exports.setupComponent=Y;exports.setupExperience=L;exports.setupFeature=ce;exports.setupField=fe;exports.setupFramework=X;exports.setupPredicate=oe;