@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 +1 -1
- package/dist/cjs/plugins/shopify/index.js +1 -1
- package/dist/esm/index.js +2 -2
- package/dist/esm/plugins/shopify/index.js +1 -1
- package/dist/types/entities/feature/feature.d.ts.map +1 -1
- package/dist/user-session-D-l-VMTb.cjs +1 -0
- package/dist/{user-session-sUXlj29_.js → user-session-Ht0ayuo5.js} +105 -110
- package/package.json +1 -1
- package/dist/user-session-Bny5aSWK.cjs +0 -1
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-
|
|
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-
|
|
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-
|
|
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.
|
|
32
|
+
const T = () => W(), V = () => "0.0.1-dev.1763330007276";
|
|
33
33
|
function G() {
|
|
34
34
|
if (h()) {
|
|
35
35
|
const i = [
|
|
@@ -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;
|
|
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
|
|
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 =
|
|
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(
|
|
12
|
+
merge(c, m) {
|
|
13
13
|
return {
|
|
14
|
-
...
|
|
14
|
+
...c,
|
|
15
15
|
...m.experience
|
|
16
16
|
};
|
|
17
17
|
}
|
|
18
|
-
}), p = i.map((
|
|
19
|
-
name:
|
|
20
|
-
decisionLogic:
|
|
21
|
-
targetSelectors:
|
|
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
|
-
(
|
|
24
|
+
(c) => c.find((m) => m.name === `experience:${e.id}`) || c.find((m) => m.name === "experience"),
|
|
25
25
|
{ skipVoid: !1 }
|
|
26
|
-
), r = i.map((
|
|
27
|
-
steps:
|
|
28
|
-
nodes:
|
|
29
|
-
edges:
|
|
30
|
-
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
|
|
43
|
+
return k(Q, t);
|
|
44
44
|
}
|
|
45
|
-
const X =
|
|
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
|
|
61
|
-
i.register(
|
|
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
|
|
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 =
|
|
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
|
|
105
|
+
return k(re, t);
|
|
106
106
|
}
|
|
107
|
-
const se =
|
|
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
|
|
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 =
|
|
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
|
|
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"),
|
|
180
|
-
|
|
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 =
|
|
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
|
|
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 =
|
|
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
|
|
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:
|
|
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
|
|
258
|
-
return
|
|
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(),
|
|
265
|
+
}), n = /* @__PURE__ */ new Map(), c = _({
|
|
266
266
|
source: { allFeaturesStore: e, resolvedFeaturesStore: i },
|
|
267
|
-
effect: async ({ allFeaturesStore: a, resolvedFeaturesStore: o }, { id: s, decide:
|
|
268
|
-
const
|
|
269
|
-
if (
|
|
270
|
-
return
|
|
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 $ =
|
|
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
|
-
|
|
288
|
-
|
|
289
|
-
|
|
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:
|
|
294
|
+
clock: c.doneData,
|
|
300
295
|
fn: (a, o) => {
|
|
301
296
|
var y;
|
|
302
|
-
const { id: s, bucket:
|
|
303
|
-
return
|
|
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
|
|
313
|
-
return
|
|
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:
|
|
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
|
|
318
|
+
getBucket: async () => await c(s.feature),
|
|
324
319
|
isResolved: !1
|
|
325
320
|
};
|
|
326
321
|
})
|
|
327
322
|
);
|
|
328
323
|
x({
|
|
329
|
-
clock:
|
|
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,
|
|
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
|
|
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 =
|
|
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
|
|
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 (
|
|
383
|
-
|
|
377
|
+
if (c.lastStepIndex === -1)
|
|
378
|
+
c.lastStepIndex = m;
|
|
384
379
|
else {
|
|
385
|
-
|
|
380
|
+
c.secondLastStepIndex = m;
|
|
386
381
|
break;
|
|
387
382
|
}
|
|
388
383
|
}
|
|
389
|
-
return
|
|
384
|
+
return c;
|
|
390
385
|
}
|
|
391
386
|
return t.on(g, (r, n) => {
|
|
392
|
-
const { secondLastStepIndex:
|
|
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
|
|
401
|
+
return k(de);
|
|
407
402
|
}
|
|
408
|
-
const pe = h("field"), fe =
|
|
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((
|
|
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
|
|
430
|
+
return k(fe);
|
|
436
431
|
}
|
|
437
432
|
const ze = (t, e) => {
|
|
438
433
|
e.register(t);
|
|
439
|
-
}, me = h("action"), ye =
|
|
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
|
|
460
|
+
return k(ye);
|
|
466
461
|
}
|
|
467
462
|
const Ke = (t, e, i) => {
|
|
468
463
|
i.register(t, e);
|
|
469
|
-
}, Se = h("response"),
|
|
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]:
|
|
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 ([
|
|
498
|
-
let
|
|
499
|
-
const y = t.fields.getById(
|
|
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:
|
|
503
|
-
userMessage: `Field '${
|
|
504
|
-
systemMessage: `No field with ID '${
|
|
505
|
-
value:
|
|
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
|
|
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:
|
|
506
|
+
$input: u
|
|
512
507
|
});
|
|
513
508
|
if (typeof w == "string") {
|
|
514
509
|
s.push({
|
|
515
|
-
fieldId:
|
|
510
|
+
fieldId: l,
|
|
516
511
|
userMessage: w,
|
|
517
512
|
systemMessage: `Field validation resulted in an error: ${w}.`,
|
|
518
|
-
value:
|
|
513
|
+
value: u
|
|
519
514
|
});
|
|
520
515
|
return;
|
|
521
516
|
}
|
|
522
517
|
if (w === !1) {
|
|
523
518
|
s.push({
|
|
524
|
-
fieldId:
|
|
519
|
+
fieldId: l,
|
|
525
520
|
userMessage: "This field is invalid",
|
|
526
521
|
systemMessage: "Field validation resulted in an unspecified error.",
|
|
527
|
-
value:
|
|
522
|
+
value: u
|
|
528
523
|
});
|
|
529
524
|
return;
|
|
530
525
|
}
|
|
531
526
|
}
|
|
532
|
-
if (y.required && (typeof
|
|
527
|
+
if (y.required && (typeof u > "u" || u === null || u === "" || Array.isArray(u) && !u.length)) {
|
|
533
528
|
s.push({
|
|
534
|
-
fieldId:
|
|
529
|
+
fieldId: l,
|
|
535
530
|
userMessage: "This field is required",
|
|
536
531
|
systemMessage: "Field is required.",
|
|
537
|
-
value:
|
|
532
|
+
value: u
|
|
538
533
|
});
|
|
539
534
|
return;
|
|
540
535
|
}
|
|
541
|
-
if (!y.multiple && Array.isArray(
|
|
536
|
+
if (!y.multiple && Array.isArray(u) && u.length > 1) {
|
|
542
537
|
s.push({
|
|
543
|
-
fieldId:
|
|
538
|
+
fieldId: l,
|
|
544
539
|
userMessage: "This field expects a single response",
|
|
545
540
|
systemMessage: "Field expects a single response.",
|
|
546
|
-
value:
|
|
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(
|
|
552
|
-
Array.isArray(
|
|
553
|
-
fieldId:
|
|
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:
|
|
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:
|
|
564
|
-
return
|
|
558
|
+
const { responsesToCommit: s, validationErrors: l } = await r(o);
|
|
559
|
+
return l.length ? { errors: l } : (p.registerBatch(s), { errors: [] });
|
|
565
560
|
}
|
|
566
|
-
const
|
|
567
|
-
fieldId:
|
|
568
|
-
value: o[
|
|
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),
|
|
572
|
-
return B({ f: s, r:
|
|
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:
|
|
577
|
-
const
|
|
578
|
-
return
|
|
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:
|
|
589
|
+
getAllStore: c,
|
|
595
590
|
getByFieldId: S,
|
|
596
591
|
getByFieldName: a
|
|
597
592
|
};
|
|
598
593
|
});
|
|
599
594
|
function Ye(t) {
|
|
600
|
-
return
|
|
595
|
+
return k(ve, t);
|
|
601
596
|
}
|
|
602
|
-
function
|
|
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:
|
|
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 +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;
|