@picked/client 0.0.16-next.4 → 0.0.16
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/cjs/server/index.js +1 -1
- package/dist/esm/index.js +4 -4
- package/dist/esm/plugins/shopify/index.js +2 -2
- package/dist/esm/server/index.js +1 -1
- package/dist/experience-instance-B2l_MG7I.cjs +1 -0
- package/dist/{experience-instance-C2AnM2J_.js → experience-instance-CeuHLrdL.js} +86 -87
- package/dist/types/entities/feature/feature.d.ts.map +1 -1
- package/dist/types/utils/dom.d.ts.map +1 -1
- package/dist/{user-session-BfQ93xNC.js → user-session-CxJHSMaR.js} +77 -80
- package/dist/user-session-X9sLAm_B.cjs +1 -0
- package/package.json +1 -1
- package/dist/experience-instance-BpQMqclI.cjs +0 -1
- package/dist/user-session-Tmc9ZSAw.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
|
|
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-X9sLAm_B.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.16";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(),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-X9sLAm_B.cjs");require("../../../experience-instance-B2l_MG7I.cjs");require("effector");function c(){if(r.supportsWindow())return window.pickedConfig}function l(){var e;if(r.supportsWindow())return(e=c())==null?void 0:e.customer}function s(){var e;if(r.supportsWindow())return(e=c())==null?void 0:e.product}function u(){var e;if(r.supportsWindow())return(e=c())==null?void 0:e.collection}function d(){var e;if(r.supportsWindow())return(e=c())==null?void 0:e.experiments}function f(){var e,o;if(r.supportsWindow())return(o=(e=c())==null?void 0:e.storefront_api)==null?void 0:o.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=l;exports.getPickedConfigExperiments=d;exports.getPickedConfigProduct=s;exports.getPickedConfigStorefrontApiToken=f;exports.getShopify=g;exports.shopifyPlugin=P;
|
package/dist/cjs/server/index.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const r=require("effector"),k=require("../../experience-instance-
|
|
1
|
+
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const r=require("effector"),k=require("../../experience-instance-B2l_MG7I.cjs");function S(){let c,i;return{promise:new Promise((t,o)=>{c=t,i=o}),resolve:t=>c(t),reject:t=>i(t)}}function C(c,i){const{promise:f,resolve:t}=S(),o=r.createEvent(),s=r.createEvent(),l=r.createEvent(),u=r.createEvent(),p=r.createEvent(),g=c.experiences.listStore.map(e=>e.map(n=>k.createExperienceInstance({client:c,experience:n}))),a=r.createStore({currentExperienceIndex:0,renderedExperiences:[],isComplete:!1}),m=r.createEffect(async({experience:e,availableRenderers:n,startRendererIndex:v=0})=>{if(!e)return null;for(let d=v;d<n.length;d++){const x=n[d],E=e.componentStore.getState();if(E&&(x!=null&&x.isValidComponent(E.component)))return{rendered:await x.render(E.component,c,e),rendererIndex:d}}return null});a.on(l,(e,n)=>({...e,renderedExperiences:[...e.renderedExperiences,n],currentExperienceIndex:e.currentExperienceIndex+1})).on(p,e=>({...e,currentExperienceIndex:e.currentExperienceIndex+1})).on(u,e=>({...e,isComplete:!0})).reset(o),r.sample({clock:o,target:s}),r.sample({clock:s,source:{experiences:g,state:a},filter:({experiences:e,state:n})=>n.currentExperienceIndex<e.length&&!n.isComplete,fn:({experiences:e,state:n})=>({experience:e[n.currentExperienceIndex],availableRenderers:i,startRendererIndex:0}),target:m}),r.sample({clock:m.doneData,filter:e=>e!==null,fn:e=>e.rendered.body,target:l}),r.sample({clock:l,target:s}),r.sample({clock:m.doneData,filter:e=>e===null,target:p}),r.sample({clock:p,target:s}),r.sample({clock:[s,p,l],source:{experiences:g,state:a},filter:({experiences:e,state:n})=>n.currentExperienceIndex>=e.length,target:u});const I=r.attach({source:a,effect:e=>{e.isComplete&&t(e.renderedExperiences)}});return r.sample({clock:u,target:I}),o(),f}exports.render=C;
|
package/dist/esm/index.js
CHANGED
|
@@ -1,10 +1,10 @@
|
|
|
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-CxJHSMaR.js";
|
|
5
5
|
import { l as c } from "../logger-C9a75KZn.js";
|
|
6
|
-
import { c as K, d as L, e as l } from "../experience-instance-
|
|
7
|
-
import { i as pe } from "../experience-instance-
|
|
6
|
+
import { c as K, d as L, e as l } from "../experience-instance-CeuHLrdL.js";
|
|
7
|
+
import { i as pe } from "../experience-instance-CeuHLrdL.js";
|
|
8
8
|
import { createEvent as W } from "effector";
|
|
9
9
|
import { s as h, a as _, b as D } from "../supports-DBMT17KZ.js";
|
|
10
10
|
import { g as de, k as le, d as fe, i as he, e as ge, c as me, f as ye, h as we, j as Se } from "../supports-DBMT17KZ.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.16
|
|
32
|
+
const T = () => W(), V = () => "0.0.16";
|
|
33
33
|
function G() {
|
|
34
34
|
if (h()) {
|
|
35
35
|
const i = [
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { a as r } from "../../../supports-DBMT17KZ.js";
|
|
2
|
-
import "../../../user-session-
|
|
3
|
-
import "../../../experience-instance-
|
|
2
|
+
import "../../../user-session-CxJHSMaR.js";
|
|
3
|
+
import "../../../experience-instance-CeuHLrdL.js";
|
|
4
4
|
import "effector";
|
|
5
5
|
function a() {
|
|
6
6
|
if (r())
|
package/dist/esm/server/index.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { createEvent as i, createStore as C, createEffect as S, sample as n, attach as h } from "effector";
|
|
2
|
-
import { a as F } from "../../experience-instance-
|
|
2
|
+
import { a as F } from "../../experience-instance-CeuHLrdL.js";
|
|
3
3
|
function R() {
|
|
4
4
|
let c, p;
|
|
5
5
|
return {
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"use strict";const i=require("effector"),q=require("@withease/factories"),C=require("./supports-YvpQZxbh.cjs"),N=require("./logger-BsmHUUw1.cjs"),ge=require("./object-BbFTsGh3.cjs");function me(e){return typeof e=="number"&&!isNaN(e)}function R(e){return typeof e=="string"}function E(e){return Array.isArray(e)}function ne(e){return e instanceof Promise}function Z(e){return typeof e=="object"&&e!==null&&!Array.isArray(e)&&Object.keys(e).length===1}function m(e){if(me(e))return e;const t=parseFloat(`${e}`);return isNaN(t)?0:t}function T(e){return`${e}`}const he={"==":(e,t)=>e==t,"===":(e,t)=>e===t,"!=":(e,t)=>e!=t,"!==":(e,t)=>e!==t,">":(e,t)=>m(e)>m(t),">=":(e,t)=>m(e)>=m(t),"<":(e,t,r)=>{const n=m(e),a=m(t);if(r===void 0)return n<a;const c=m(r);return n<a&&a<c},"<=":(e,t,r)=>{const n=m(e),a=m(t);if(r===void 0)return n<=a;const c=m(r);return n<=a&&a<=c},"!!":async e=>await B(e),"!":async e=>!await B(e),"%":(e,t)=>m(e)%m(t),log:e=>(console.log(e),e),in:(e,t)=>t?R(t)?t.indexOf(T(e))!==-1:E(t)?t.includes(e):!1:!1,cat:(...e)=>e.map(T).join(""),substr:(e,t,r)=>{const n=T(e),a=m(t);if(r===void 0)return n.substr(a);const c=m(r);if(c<0){const o=n.substr(a);return o.substr(0,o.length+c)}return n.substr(a,c)},"+":(...e)=>e.reduce((t,r)=>m(t)+m(r),0),"*":(...e)=>e.reduce((t,r)=>m(t)*m(r),1),"-":(e,t)=>{const r=m(e);return t===void 0?-r:r-m(t)},"/":(e,t)=>m(e)/m(t),min:(...e)=>Math.min(...e.map(m)),max:(...e)=>Math.max(...e.map(m)),merge:(...e)=>e.reduce((t,r)=>E(r)?t.concat(r):t.concat([r]),[]),var(e,t){const r=arguments.length>1?t:null;if(e===""||e==="."||e===null||e===void 0)return this;if(typeof e=="number"&&Array.isArray(this))return e>=0&&e<this.length?this[e]:r;const n=T(e);if(n===""||n===".")return this;const a=n.split(".");let c=this;for(const o of a){if(c==null)return r;if(Array.isArray(c)){const u=parseInt(o,10);isNaN(u)?c=c[o]:c=c[u]}else c=c[o]}return c!==void 0?c:r},async missing(...e){const t=E(e[0])?e[0]:e,r=[];for(const n of t){const a=await g({var:n},this);(a===null||a==="")&&r.push(`${n}`)}return r},async missing_some(e,t){const r=await g({missing:t},this);if(!E(r)||!E(t))return[];const n=r.filter(R);return t.filter(R).length-n.length>=m(e)?[]:n},invoke(e){return typeof e!="function"?null:e()},regexp_matches(e,t){let r=e,n="";if(E(e)){const[c,o]=e;r=c,n=o}return!R(r)||!R(n)?!1:new RegExp(r,n).test(T(t))},throw(e){throw new Error(T(e))}};async function g(e,t){if(!e)return e;if(ne(e))return g(await e,t);if(E(e))return Promise.all(e.map(o=>g(o,t)));if(!Z(e))return e;const r=Se(e);let n=r?e[r]??[]:[];switch(E(n)||(n=[n]),r){case"if":case"?:":for(let o=0;o<n.length-1;o+=2)if(await B(await g(n[o],t)))return g(n[o+1],t);return n.length%2===1?g(n[n.length-1],t):null;case"and":{let o=null;for(const u of n)if(o=await g(u,t),!await B(o))return o;return o}case"or":{let o=null;for(const u of n)if(o=await g(u,t),await B(o))return o;return o}case"map":{const o=await g(n[0],t);return E(o)?await Promise.all(o.map(u=>g(n[1],u))):[]}case"filter":{const o=await g(n[0],t);return E(o)?(await Promise.all(o.map(async p=>{const y=await B(await g(n[1],p));return{item:p,shouldInclude:y}}))).filter(({shouldInclude:p})=>p).map(({item:p})=>p):[]}case"reduce":{const o=await g(n[0],t);if(!E(o))return n.length>2?await g(n[2],t):null;const u=n[1];let y=n.length>2?await g(n[2],t):null;for(const k of o)y=await g(u,{current:k,accumulator:y});return y}case"all":{const o=await g(n[0],t);if(!E(o)||o.length===0)return!1;for(const u of o)if(!await B(await g(n[1],u)))return!1;return!0}case"some":{const o=await g(n[0],t);if(!E(o))return!1;for(const u of o)if(await B(await g(n[1],u)))return!0;return!1}case"none":{const o=await g(n[0],t);if(!E(o))return!0;for(const u of o)if(await B(await g(n[1],u)))return!1;return!0}case"catch":try{return await g(n[0],t)}catch(o){return Z(o)?await g(o,t):n[1]?await g(n[1],o):o instanceof Error?o.message:o}}const a=await Promise.all(n.map(o=>g(o,t))),c=r?he[r]:void 0;if(!c)throw new Error(`Unrecognized operation ${r}`);return c.apply(t,a)}async function B(e){return ne(e)?B(await e):!(Array.isArray(e)&&e.length===0)&&!!e}function Se(e){return Object.keys(e)[0]}function re(e){return!ge.isEmpty(e)}async function W(e,t,r){const n=e.getStateSnapshot(),a=e.predicates.listStore.getState().reduce((u,p)=>({...u,[p.name]:()=>p.predicate(n)}),{}),c=e.features.listStore.getState().reduce((u,p)=>({...u,[p.id]:async()=>{const{bucket:y}=await p.getBucket();return y}}),{}),o={...r,responses:e.responses.getAllStore.getState(),location:typeof n.location=="object"?{hash:n.location.hash,host:n.location.host,hostname:n.location.hostname,href:n.location.href,origin:n.location.origin,pathname:n.location.pathname,port:n.location.port,protocol:n.location.protocol,search:n.location.search}:void 0,predicates:a,features:c};return await g(t,o)}function ye(e){return!C.supportsWindow()||!C.supportsDocument()?[]:Array.from(window.document.querySelectorAll(e)).filter(t=>t instanceof HTMLElement)}function we(e){if(!C.supportsShadowRoot())throw new Error("Shadow DOM is not supported in this environment");return e.attachShadow({mode:"closed"})}function Ee(){return new Promise((e,t)=>{if(!C.supportsDocument()){t();return}document.readyState!=="loading"?e():document.addEventListener("readystatechange",()=>e(),{once:!0})})}function Ne(e,t){const r=new MutationObserver(n=>{document.contains(e)||(r.disconnect(),t())});r.observe(document.body,{childList:!0,subtree:!0})}const H="picked-root",j="picked-target",Ie="picked-root";function xe(e,t){return[...e,{selector:`${Ie}[experience-id="${t}"]`,placement:"replace"}].flatMap(n=>{const a=ye(n.selector).filter(c=>!be(c,t)&&!oe(c,t));return{...n,elements:a}})}function ke(e,t){return e.flatMap(r=>r.elements.map(n=>Be(n,r.placement,t)))}function ve(e,t){e.classList.add(j),e.classList.add(`${j}-${t}`)}function be(e,t){return t?e.classList.contains(`${j}-${t}`):e.classList.contains(`${j}`)}function oe(e,t){return t?e.classList.contains(`${H}-${t}`):e.classList.contains(H)}function Ae(e){const t=document.createElement("div");return t.style.display="block",t.classList.add(H),t.classList.add(`${H}-${e}`),t}function Be(e,t,r){let n;const a=Ae(r);if(e instanceof Document)n=e.body.appendChild(a);else{switch(t){case"replace":e.replaceWith(a);break;case"before":e.before(a);break;case"after":e.after(a);break;case"prepend":e.prepend(a);break;default:e.append(a);break}n=a}return n}function Fe(e){return e.type==="conditional"}function M(e){return e.type==="step"}function $e(e){return e.type==="experience"}function ee(e){return e.type==="origin"}function te(e){return e.type==="action"}const se=(e,t,r,n,a=new Set)=>a.has(r.id)?[]:(a.add(r.id),M(r)&&!n?[r]:t.filter(o=>o.sourceNodeId===r.id).flatMap(o=>{const u=e.find(p=>p.id===o.destinationNodeId);return u?se(e,t,u,!1,a):[]})),Oe=(e,t,r)=>se(e,t,r,!0,new Set),ie=(e,t,r,n,a=new Set)=>{if(a.has(r.id))return[-1,-1];a.add(r.id);const c=t.filter(p=>p.sourceNodeId===r.id);if(c.length===0)return[0,0];let o=1/0,u=-1/0;for(const p of c){const y=e.find(L=>L.id===p.destinationNodeId);if(!y)continue;const[k,F]=ie(e,t,y,!1,new Set(a));k!==-1&&(o=Math.min(o,k+1),u=Math.max(u,F+1))}return o===1/0?[-1,-1]:[o,u]},_e=(e,t,r)=>ie(e,t,r,!0,new Set),ae=(e,t,r,n=new Set)=>{if(n.has(r.id))return[-1,-1];if(n.add(r.id),r.type==="origin")return[0,0];const a=t.filter(u=>u.destinationNodeId===r.id);if(a.length===0)return[-1,-1];let c=1/0,o=-1/0;for(const u of a){const p=e.find(F=>F.id===u.sourceNodeId);if(!p)continue;const[y,k]=ae(e,t,p,new Set(n));y!==-1&&(c=Math.min(c,y+1),o=Math.max(o,k+1))}return c===1/0?[-1,-1]:[c,o]},Te=(e,t,r)=>ae(e,t,r,new Set),ce=e=>e.find(r=>r.type==="origin")||null,V=(e,t,r)=>{if(!e)return ce(t);const n=r.find(c=>c.sourceNodeId===e.id);if(!n)return null;const a=t.find(c=>c.id===n.destinationNodeId);return a||null};async function Me(e,t,r,n){const a=e?"true":"false",c=n.find(o=>o.sourceNodeHandle===a&&o.sourceNodeId===t);return r.find(o=>o.id===(c==null?void 0:c.destinationNodeId))}const X=i.createDomain("experience-instance"),Le=q.createFactory(({client:e,experience:t,target:r})=>{const n=i.createEvent(),a=i.createEvent(),c=i.createEvent(),o=i.createEvent(),u=i.createEvent(),p=i.createEvent(),y=t.componentStore,k=X.store("transitioning"),F=e.history.entriesStore.map(s=>s.filter(l=>l.experienceId===t.id)),L=F.map(s=>s.filter(l=>M(l.node))),I=F.map(s=>{var l;return((l=s[s.length-1])==null?void 0:l.node)||null}),f=i.combine(t.treeStore,I,({steps:s},l)=>s.find(d=>l&&M(l)&&d.id===l.stepId)||null),h=i.combine(t.treeStore,I,({nodes:s,edges:l},d)=>d?Oe(s,l,d):[]),A=i.combine(t.treeStore,I,({nodes:s,edges:l},d)=>d?Te(s,l,d):[-1,-1]),O=i.combine(t.treeStore,I,({nodes:s,edges:l},d)=>d?_e(s,l,d):[-1,-1]),v=X.store(!1),$=i.createApi(v,{open:()=>!0,close:()=>!1,toggle:s=>!s,set:(s,l)=>l}),fe=i.createEffect(async()=>{e.history.back({experienceId:t.id})}),le=i.attach({source:t.treeStore,effect:async(s,l)=>{const d=s.nodes.find(w=>M(w)&&w.stepId===l);d&&e.history.push({experienceId:t.id,node:d})}}),z=i.attach({source:I,effect:s=>{}}),G=i.attach({source:t.treeStore,effect:async({nodes:s})=>ce(s)}),K=i.attach({source:t.treeStore,effect:async({nodes:s,edges:l},d)=>V(d,s,l)}),U=i.attach({source:t.treeStore,effect:async({nodes:s,edges:l,conditionals:d},w)=>{if(!w)return;const _=d.find(b=>b.id===w.conditionalId);if(!_)return;const x=w.id,S=await W(e,_.condition);return Me(!!S,x,s,l)}}),J=i.attach({source:t.treeStore,effect:async({nodes:s,edges:l},d)=>{if(!d||!te(d))return;const w=d.action;if(!w){N.logger("warn",`Action node ${d.id} has no action name`);return}const _=e.actions.getByName(w).getState();if(!_){N.logger("warn",`Action '${w}' not registered on client`);const x=l.find(S=>S.sourceNodeId===d.id&&S.sourceNodeHandle==="false");return x?s.find(S=>S.id===x.destinationNodeId):null}if(typeof _.action!="function"){N.logger("warn",`Action '${w}' is not a function`);const x=l.find(S=>S.sourceNodeId===d.id&&S.sourceNodeHandle==="false");return x?s.find(S=>S.id===x.destinationNodeId):null}try{N.logger("info",`Executing action: ${w}`),await _.action();const x=l.find(b=>b.sourceNodeId===d.id&&b.sourceNodeHandle==="true");if(!x)return N.logger("warn",`No 'true' edge found for action node ${d.id}`),null;const S=s.find(b=>b.id===x.destinationNodeId);return N.logger("info",`Action '${w}' succeeded, moving to node ${S==null?void 0:S.id}`),S||null}catch(x){N.logger("warn",`Action '${w}' failed:`,x);const S=l.find(P=>P.sourceNodeId===d.id&&P.sourceNodeHandle==="false");if(!S)return N.logger("warn",`No 'false' edge found for action node ${d.id}`),null;const b=s.find(P=>P.id===S.destinationNodeId);return N.logger("info",`Action '${w}' failed, moving to node ${b==null?void 0:b.id}`),b||null}}}),de=i.createEffect(s=>{if(s)return e.launchExperienceById(s.experienceId)}),Q=i.attach({source:[I,t.treeStore],effect:async([s,{nodes:l,edges:d}])=>V(s,l,d)}),D=i.attach({source:[I,t.treeStore],effect:async([s,{nodes:l,edges:d}])=>V(s,l,d)}),pe=i.createEffect(s=>{e.history.push({experienceId:t.id,node:s})}),Y=i.attach({source:t.configStore,effect:async({initializeOpenLogic:s})=>re(s)?!!await W(e,s):s??!1});return i.split({source:I,match:s=>s?Fe(s)?"condition":M(s)?"step":$e(s)?"launchExperience":ee(s)?"origin":te(s)?"action":"other":"none",cases:{none:G,origin:K,condition:U,step:z,launchExperience:de,action:J,__:i.createEvent()}}),i.sample({clock:[U.doneData,K.doneData,G.doneData,D.doneData,Q.doneData,J.doneData],filter:Boolean,target:pe}),i.sample({clock:a,target:D}),i.sample({clock:a,source:f,filter:Boolean,target:e.eventBus.prepend(s=>({type:"step_submit",step:s,experience:t}))}),i.sample({clock:D.done,source:f,filter:Boolean,target:e.eventBus.prepend(s=>({type:"step_submit_success",step:s,experience:t}))}),i.sample({clock:D.fail,source:f,filter:Boolean,target:e.eventBus.prepend(s=>({type:"step_submit_error",step:s,experience:t}))}),i.sample({clock:c,target:fe}),i.sample({clock:o,target:le}),i.sample({source:i.combine([U.pending,K.pending,G.pending,D.pending]),fn:s=>s.some(Boolean)?"transitioning":"ready",target:k}),i.sample({clock:z.doneData,source:f,filter:Boolean,target:e.eventBus.prepend(s=>({type:"step_enter",step:s,experience:t}))}),i.sample({clock:p,target:Y}),i.sample({source:Y.doneData,fn:Boolean,target:v}),i.sample({source:I,clock:n,filter:s=>s?ee(s):!0,target:Q}),i.sample({source:v,filter:Boolean,target:n}),i.sample({source:v,filter:Boolean,target:e.eventBus.prepend(()=>({type:"experience_open",experience:t}))}),i.sample({source:v,filter:s=>!s,target:e.eventBus.prepend(()=>({type:"experience_close",experience:t}))}),i.sample({clock:u,target:[p]}),u(),{id:Math.random().toString(36).substring(7),experienceId:t.id,configStore:t.configStore,target:r,componentStore:y,stateStore:k,isOpenStore:v,open:$.open,close:$.close,toggleOpen:$.toggle,setOpen:$.set,treeStore:t.treeStore,currentNodeStore:I,currentStepStore:f,nextReachableStepNodesStore:h,stepsToOriginStore:A,stepsToLeafStore:O,goToNextStep:a,goToPreviousStep:c,goToStepById:o,stepsHistoryStore:L}});function ue(e){return q.invoke(Le,e)}const De=q.createFactory(({client:e})=>{const t=X.store({}),r=i.createEvent(),n=i.createEvent(),a=i.createEvent(),c=i.createApi(t,{register(f,h){const A=[...f[h.experienceId]??[]];return A.push(h),{...f,[h.experienceId]:A}},unregister(f,h){var v;const A=h.experienceId,O=(v=f[A])==null?void 0:v.filter($=>$!==h);return{...f,[A]:O??[]}}}),o=i.createEffect(({experience:f,target:h})=>ue({client:e,experience:f,target:h})),u=i.createEffect(f=>{c.register(f)}),p=i.createEffect(f=>{f.target&&Ne(f.target,()=>{a(f)})}),y=i.createEffect(f=>{c.unregister(f)}),k=i.createEffect(f=>{const h=f.componentStore.getState();if(!h){N.logger("warn","No app component registered. Skipping init.");return}const A=h.frameworkStore.getState();if(!A){N.logger("error",`No framework registered for component '${h.name}'. Skipping rendering.`);return}const O=f.target;if(!O){N.logger("error",`No target element registered for experience '${f.experienceId}'. Skipping rendering.`);return}const v=we(O);try{A.render(v,h.component,e,f)}catch($){N.logger("error",$)}});i.sample({clock:r,target:o}),i.sample({clock:a,target:y}),i.sample({clock:o.doneData,target:[u,p,n]}),i.sample({clock:o.doneData,target:e.eventBus.prepend(f=>({type:"experience_initialized",experienceInstance:f}))}),i.sample({clock:n,target:k});function F(f,h){r({experience:f,target:h})}const L=t.map(f=>Object.values(f).flat());function I(f){return t.map(h=>h[f]||[],{skipVoid:!1})}return{spawn:F,getByExperienceId:I,listStore:L}});function Re(e){return q.invoke(De,e)}exports.createAppHosts=ke;exports.createExperienceInstance=ue;exports.createExperienceInstanceIndex=Re;exports.domInteractive=Ee;exports.evaluateRuleLogic=W;exports.getTargetElements=xe;exports.isPickedRoot=oe;exports.isRulesLogic=re;exports.isStepNode=M;exports.tagTargetElement=ve;
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { createDomain as ht, createEvent as
|
|
1
|
+
import { createDomain as ht, createEvent as B, combine as C, createApi as ot, createEffect as M, attach as F, split as yt, sample as m } from "effector";
|
|
2
2
|
import { createFactory as it, invoke as st } from "@withease/factories";
|
|
3
3
|
import { h as wt, s as at, a as Nt } from "./supports-DBMT17KZ.js";
|
|
4
4
|
import { l as I } from "./logger-C9a75KZn.js";
|
|
@@ -47,8 +47,8 @@ const Et = {
|
|
|
47
47
|
const a = g(r);
|
|
48
48
|
return n <= s && s <= a;
|
|
49
49
|
},
|
|
50
|
-
"!!": async (t) => await
|
|
51
|
-
"!": async (t) => !await
|
|
50
|
+
"!!": async (t) => await $(t),
|
|
51
|
+
"!": async (t) => !await $(t),
|
|
52
52
|
"%": (t, e) => g(t) % g(e),
|
|
53
53
|
// eslint-disable-next-line sonarjs/function-return-type
|
|
54
54
|
log: (t) => (console.log(t), t),
|
|
@@ -141,20 +141,20 @@ async function p(t, e) {
|
|
|
141
141
|
case "if":
|
|
142
142
|
case "?:":
|
|
143
143
|
for (let o = 0; o < n.length - 1; o += 2)
|
|
144
|
-
if (await
|
|
144
|
+
if (await $(await p(n[o], e)))
|
|
145
145
|
return p(n[o + 1], e);
|
|
146
146
|
return n.length % 2 === 1 ? p(n[n.length - 1], e) : null;
|
|
147
147
|
case "and": {
|
|
148
148
|
let o = null;
|
|
149
149
|
for (const c of n)
|
|
150
|
-
if (o = await p(c, e), !await
|
|
150
|
+
if (o = await p(c, e), !await $(o))
|
|
151
151
|
return o;
|
|
152
152
|
return o;
|
|
153
153
|
}
|
|
154
154
|
case "or": {
|
|
155
155
|
let o = null;
|
|
156
156
|
for (const c of n)
|
|
157
|
-
if (o = await p(c, e), await
|
|
157
|
+
if (o = await p(c, e), await $(o)) return o;
|
|
158
158
|
return o;
|
|
159
159
|
}
|
|
160
160
|
case "map": {
|
|
@@ -165,7 +165,7 @@ async function p(t, e) {
|
|
|
165
165
|
const o = await p(n[0], e);
|
|
166
166
|
return N(o) ? (await Promise.all(
|
|
167
167
|
o.map(async (d) => {
|
|
168
|
-
const y = await
|
|
168
|
+
const y = await $(await p(n[1], d));
|
|
169
169
|
return { item: d, shouldInclude: y };
|
|
170
170
|
})
|
|
171
171
|
)).filter(({ shouldInclude: d }) => d).map(({ item: d }) => d) : [];
|
|
@@ -184,21 +184,21 @@ async function p(t, e) {
|
|
|
184
184
|
const o = await p(n[0], e);
|
|
185
185
|
if (!N(o) || o.length === 0) return !1;
|
|
186
186
|
for (const c of o)
|
|
187
|
-
if (!await
|
|
187
|
+
if (!await $(await p(n[1], c))) return !1;
|
|
188
188
|
return !0;
|
|
189
189
|
}
|
|
190
190
|
case "some": {
|
|
191
191
|
const o = await p(n[0], e);
|
|
192
192
|
if (!N(o)) return !1;
|
|
193
193
|
for (const c of o)
|
|
194
|
-
if (await
|
|
194
|
+
if (await $(await p(n[1], c))) return !0;
|
|
195
195
|
return !1;
|
|
196
196
|
}
|
|
197
197
|
case "none": {
|
|
198
198
|
const o = await p(n[0], e);
|
|
199
199
|
if (!N(o)) return !0;
|
|
200
200
|
for (const c of o)
|
|
201
|
-
if (await
|
|
201
|
+
if (await $(await p(n[1], c))) return !1;
|
|
202
202
|
return !0;
|
|
203
203
|
}
|
|
204
204
|
case "catch":
|
|
@@ -212,8 +212,8 @@ async function p(t, e) {
|
|
|
212
212
|
if (!a) throw new Error(`Unrecognized operation ${r}`);
|
|
213
213
|
return a.apply(e, s);
|
|
214
214
|
}
|
|
215
|
-
async function
|
|
216
|
-
return ct(t) ?
|
|
215
|
+
async function $(t) {
|
|
216
|
+
return ct(t) ? $(await t) : !(Array.isArray(t) && t.length === 0) && !!t;
|
|
217
217
|
}
|
|
218
218
|
function kt(t) {
|
|
219
219
|
return Object.keys(t)[0];
|
|
@@ -255,13 +255,12 @@ function bt(t) {
|
|
|
255
255
|
(e) => e instanceof HTMLElement
|
|
256
256
|
);
|
|
257
257
|
}
|
|
258
|
-
|
|
259
|
-
function Ot(t) {
|
|
258
|
+
function vt(t) {
|
|
260
259
|
if (!wt())
|
|
261
260
|
throw new Error("Shadow DOM is not supported in this environment");
|
|
262
|
-
return t.attachShadow({ mode:
|
|
261
|
+
return t.attachShadow({ mode: "closed" });
|
|
263
262
|
}
|
|
264
|
-
function
|
|
263
|
+
function Xt() {
|
|
265
264
|
return new Promise((t, e) => {
|
|
266
265
|
if (!at()) {
|
|
267
266
|
e();
|
|
@@ -276,18 +275,18 @@ function Bt(t, e) {
|
|
|
276
275
|
});
|
|
277
276
|
r.observe(document.body, { childList: !0, subtree: !0 });
|
|
278
277
|
}
|
|
279
|
-
const
|
|
280
|
-
function
|
|
278
|
+
const K = "picked-root", U = "picked-target", $t = "picked-root";
|
|
279
|
+
function zt(t, e) {
|
|
281
280
|
return [
|
|
282
281
|
...t,
|
|
283
282
|
// Target and replace picked-root web components
|
|
284
283
|
{
|
|
285
|
-
selector: `${
|
|
284
|
+
selector: `${$t}[experience-id="${e}"]`,
|
|
286
285
|
placement: "replace"
|
|
287
286
|
}
|
|
288
287
|
].flatMap((n) => {
|
|
289
288
|
const s = bt(n.selector).filter(
|
|
290
|
-
(a) =>
|
|
289
|
+
(a) => !Ft(a, e) && !Ot(a, e)
|
|
291
290
|
);
|
|
292
291
|
return {
|
|
293
292
|
...n,
|
|
@@ -295,25 +294,25 @@ function Jt(t, e) {
|
|
|
295
294
|
};
|
|
296
295
|
});
|
|
297
296
|
}
|
|
298
|
-
function
|
|
299
|
-
return t.flatMap((r) => r.elements.map((n) =>
|
|
300
|
-
}
|
|
301
|
-
function Yt(t, e) {
|
|
302
|
-
t.classList.add(K), t.classList.add(`${K}-${e}`);
|
|
297
|
+
function Jt(t, e) {
|
|
298
|
+
return t.flatMap((r) => r.elements.map((n) => Mt(n, r.placement, e)));
|
|
303
299
|
}
|
|
304
|
-
function
|
|
305
|
-
|
|
300
|
+
function Qt(t, e) {
|
|
301
|
+
t.classList.add(U), t.classList.add(`${U}-${e}`);
|
|
306
302
|
}
|
|
307
303
|
function Ft(t, e) {
|
|
308
|
-
return e ? t.classList.contains(`${
|
|
304
|
+
return e ? t.classList.contains(`${U}-${e}`) : t.classList.contains(`${U}`);
|
|
309
305
|
}
|
|
310
|
-
function
|
|
306
|
+
function Ot(t, e) {
|
|
307
|
+
return e ? t.classList.contains(`${K}-${e}`) : t.classList.contains(K);
|
|
308
|
+
}
|
|
309
|
+
function _t(t) {
|
|
311
310
|
const e = document.createElement("div");
|
|
312
|
-
return e.style.display = "block", e.classList.add(
|
|
311
|
+
return e.style.display = "block", e.classList.add(K), e.classList.add(`${K}-${t}`), e;
|
|
313
312
|
}
|
|
314
|
-
function
|
|
313
|
+
function Mt(t, e, r) {
|
|
315
314
|
let n;
|
|
316
|
-
const s =
|
|
315
|
+
const s = _t(r);
|
|
317
316
|
if (t instanceof Document)
|
|
318
317
|
n = t.body.appendChild(s);
|
|
319
318
|
else {
|
|
@@ -338,13 +337,13 @@ function Tt(t, e, r) {
|
|
|
338
337
|
}
|
|
339
338
|
return n;
|
|
340
339
|
}
|
|
341
|
-
function
|
|
340
|
+
function Tt(t) {
|
|
342
341
|
return t.type === "conditional";
|
|
343
342
|
}
|
|
344
343
|
function j(t) {
|
|
345
344
|
return t.type === "step";
|
|
346
345
|
}
|
|
347
|
-
function
|
|
346
|
+
function Lt(t) {
|
|
348
347
|
return t.type === "experience";
|
|
349
348
|
}
|
|
350
349
|
function nt(t) {
|
|
@@ -356,7 +355,7 @@ function rt(t) {
|
|
|
356
355
|
const ut = (t, e, r, n, s = /* @__PURE__ */ new Set()) => s.has(r.id) ? [] : (s.add(r.id), j(r) && !n ? [r] : e.filter((o) => o.sourceNodeId === r.id).flatMap((o) => {
|
|
357
356
|
const c = t.find((d) => d.id === o.destinationNodeId);
|
|
358
357
|
return c ? ut(t, e, c, !1, s) : [];
|
|
359
|
-
})),
|
|
358
|
+
})), Dt = (t, e, r) => ut(t, e, r, !0, /* @__PURE__ */ new Set()), ft = (t, e, r, n, s = /* @__PURE__ */ new Set()) => {
|
|
360
359
|
if (s.has(r.id)) return [-1, -1];
|
|
361
360
|
s.add(r.id);
|
|
362
361
|
const a = e.filter((d) => d.sourceNodeId === r.id);
|
|
@@ -365,24 +364,24 @@ const ut = (t, e, r, n, s = /* @__PURE__ */ new Set()) => s.has(r.id) ? [] : (s.
|
|
|
365
364
|
for (const d of a) {
|
|
366
365
|
const y = t.find((P) => P.id === d.destinationNodeId);
|
|
367
366
|
if (!y) continue;
|
|
368
|
-
const [k,
|
|
367
|
+
const [k, O] = ft(
|
|
369
368
|
t,
|
|
370
369
|
e,
|
|
371
370
|
y,
|
|
372
371
|
!1,
|
|
373
372
|
new Set(s)
|
|
374
373
|
);
|
|
375
|
-
k !== -1 && (o = Math.min(o, k + 1), c = Math.max(c,
|
|
374
|
+
k !== -1 && (o = Math.min(o, k + 1), c = Math.max(c, O + 1));
|
|
376
375
|
}
|
|
377
376
|
return o === 1 / 0 ? [-1, -1] : [o, c];
|
|
378
|
-
},
|
|
377
|
+
}, Pt = (t, e, r) => ft(t, e, r, !0, /* @__PURE__ */ new Set()), lt = (t, e, r, n = /* @__PURE__ */ new Set()) => {
|
|
379
378
|
if (n.has(r.id)) return [-1, -1];
|
|
380
379
|
if (n.add(r.id), r.type === "origin") return [0, 0];
|
|
381
380
|
const s = e.filter((c) => c.destinationNodeId === r.id);
|
|
382
381
|
if (s.length === 0) return [-1, -1];
|
|
383
382
|
let a = 1 / 0, o = -1 / 0;
|
|
384
383
|
for (const c of s) {
|
|
385
|
-
const d = t.find((
|
|
384
|
+
const d = t.find((O) => O.id === c.sourceNodeId);
|
|
386
385
|
if (!d) continue;
|
|
387
386
|
const [y, k] = lt(
|
|
388
387
|
t,
|
|
@@ -393,7 +392,7 @@ const ut = (t, e, r, n, s = /* @__PURE__ */ new Set()) => s.has(r.id) ? [] : (s.
|
|
|
393
392
|
y !== -1 && (a = Math.min(a, y + 1), o = Math.max(o, k + 1));
|
|
394
393
|
}
|
|
395
394
|
return a === 1 / 0 ? [-1, -1] : [a, o];
|
|
396
|
-
},
|
|
395
|
+
}, Rt = (t, e, r) => lt(t, e, r, /* @__PURE__ */ new Set()), dt = (t) => t.find((r) => r.type === "origin") || null, X = (t, e, r) => {
|
|
397
396
|
if (!t)
|
|
398
397
|
return dt(e);
|
|
399
398
|
const n = r.find((a) => a.sourceNodeId === t.id);
|
|
@@ -402,19 +401,19 @@ const ut = (t, e, r, n, s = /* @__PURE__ */ new Set()) => s.has(r.id) ? [] : (s.
|
|
|
402
401
|
const s = e.find((a) => a.id === n.destinationNodeId);
|
|
403
402
|
return s || null;
|
|
404
403
|
};
|
|
405
|
-
async function
|
|
404
|
+
async function Ct(t, e, r, n) {
|
|
406
405
|
const s = t ? "true" : "false", a = n.find(
|
|
407
406
|
(o) => o.sourceNodeHandle === s && o.sourceNodeId === e
|
|
408
407
|
);
|
|
409
408
|
return r.find((o) => o.id === (a == null ? void 0 : a.destinationNodeId));
|
|
410
409
|
}
|
|
411
|
-
const z = ht("experience-instance"),
|
|
410
|
+
const z = ht("experience-instance"), Ht = it(
|
|
412
411
|
({
|
|
413
412
|
client: t,
|
|
414
413
|
experience: e,
|
|
415
414
|
target: r
|
|
416
415
|
}) => {
|
|
417
|
-
const n =
|
|
416
|
+
const n = B(), s = B(), a = B(), o = B(), c = B(), d = B(), y = e.componentStore, k = z.store("transitioning"), O = t.history.entriesStore.map((i) => i.filter((f) => f.experienceId === e.id)), P = O.map((i) => i.filter((f) => j(f.node))), x = O.map((i) => {
|
|
418
417
|
var f;
|
|
419
418
|
return ((f = i[i.length - 1]) == null ? void 0 : f.node) || null;
|
|
420
419
|
}), u = C(
|
|
@@ -424,39 +423,39 @@ const z = ht("experience-instance"), jt = it(
|
|
|
424
423
|
), S = C(
|
|
425
424
|
e.treeStore,
|
|
426
425
|
x,
|
|
427
|
-
({ nodes: i, edges: f }, l) => l ?
|
|
426
|
+
({ nodes: i, edges: f }, l) => l ? Dt(i, f, l) : []
|
|
428
427
|
), v = C(
|
|
429
428
|
e.treeStore,
|
|
430
429
|
x,
|
|
431
|
-
({ nodes: i, edges: f }, l) => l ?
|
|
430
|
+
({ nodes: i, edges: f }, l) => l ? Rt(i, f, l) : [-1, -1]
|
|
432
431
|
), T = C(
|
|
433
432
|
e.treeStore,
|
|
434
433
|
x,
|
|
435
|
-
({ nodes: i, edges: f }, l) => l ?
|
|
436
|
-
), A = z.store(!1),
|
|
434
|
+
({ nodes: i, edges: f }, l) => l ? Pt(i, f, l) : [-1, -1]
|
|
435
|
+
), A = z.store(!1), _ = ot(A, {
|
|
437
436
|
open: () => !0,
|
|
438
437
|
close: () => !1,
|
|
439
438
|
toggle: (i) => !i,
|
|
440
439
|
set: (i, f) => f
|
|
441
440
|
}), pt = M(async () => {
|
|
442
441
|
t.history.back({ experienceId: e.id });
|
|
443
|
-
}), gt =
|
|
442
|
+
}), gt = F({
|
|
444
443
|
source: e.treeStore,
|
|
445
444
|
effect: async (i, f) => {
|
|
446
445
|
const l = i.nodes.find((w) => j(w) && w.stepId === f);
|
|
447
446
|
l && t.history.push({ experienceId: e.id, node: l });
|
|
448
447
|
}
|
|
449
|
-
}), J =
|
|
448
|
+
}), J = F({
|
|
450
449
|
source: x,
|
|
451
450
|
effect: (i) => {
|
|
452
451
|
}
|
|
453
|
-
}),
|
|
452
|
+
}), V = F({
|
|
454
453
|
source: e.treeStore,
|
|
455
454
|
effect: async ({ nodes: i }) => dt(i)
|
|
456
|
-
}),
|
|
455
|
+
}), W = F({
|
|
457
456
|
source: e.treeStore,
|
|
458
457
|
effect: async ({ nodes: i, edges: f }, l) => X(l, i, f)
|
|
459
|
-
}), q =
|
|
458
|
+
}), q = F({
|
|
460
459
|
source: e.treeStore,
|
|
461
460
|
effect: async ({ nodes: i, edges: f, conditionals: l }, w) => {
|
|
462
461
|
if (!w)
|
|
@@ -465,9 +464,9 @@ const z = ht("experience-instance"), jt = it(
|
|
|
465
464
|
if (!L)
|
|
466
465
|
return;
|
|
467
466
|
const E = w.id, h = await et(t, L.condition);
|
|
468
|
-
return
|
|
467
|
+
return Ct(!!h, E, i, f);
|
|
469
468
|
}
|
|
470
|
-
}), Q =
|
|
469
|
+
}), Q = F({
|
|
471
470
|
source: e.treeStore,
|
|
472
471
|
effect: async ({ nodes: i, edges: f }, l) => {
|
|
473
472
|
if (!l || !rt(l))
|
|
@@ -504,46 +503,46 @@ const z = ht("experience-instance"), jt = it(
|
|
|
504
503
|
} catch (E) {
|
|
505
504
|
I("warn", `Action '${w}' failed:`, E);
|
|
506
505
|
const h = f.find(
|
|
507
|
-
(
|
|
506
|
+
(G) => G.sourceNodeId === l.id && G.sourceNodeHandle === "false"
|
|
508
507
|
);
|
|
509
508
|
if (!h)
|
|
510
509
|
return I("warn", `No 'false' edge found for action node ${l.id}`), null;
|
|
511
|
-
const b = i.find((
|
|
510
|
+
const b = i.find((G) => G.id === h.destinationNodeId);
|
|
512
511
|
return I("info", `Action '${w}' failed, moving to node ${b == null ? void 0 : b.id}`), b || null;
|
|
513
512
|
}
|
|
514
513
|
}
|
|
515
514
|
}), mt = M((i) => {
|
|
516
515
|
if (i)
|
|
517
516
|
return t.launchExperienceById(i.experienceId);
|
|
518
|
-
}), Y =
|
|
517
|
+
}), Y = F({
|
|
519
518
|
source: [x, e.treeStore],
|
|
520
519
|
effect: async ([i, { nodes: f, edges: l }]) => X(i, f, l)
|
|
521
|
-
}), R =
|
|
520
|
+
}), R = F({
|
|
522
521
|
source: [x, e.treeStore],
|
|
523
522
|
effect: async ([i, { nodes: f, edges: l }]) => X(i, f, l)
|
|
524
523
|
}), St = M((i) => {
|
|
525
524
|
t.history.push({ experienceId: e.id, node: i });
|
|
526
|
-
}), Z =
|
|
525
|
+
}), Z = F({
|
|
527
526
|
source: e.configStore,
|
|
528
527
|
effect: async ({ initializeOpenLogic: i }) => At(i) ? !!await et(t, i) : i ?? !1
|
|
529
528
|
});
|
|
530
529
|
return yt({
|
|
531
530
|
source: x,
|
|
532
|
-
match: (i) => i ?
|
|
531
|
+
match: (i) => i ? Tt(i) ? "condition" : j(i) ? "step" : Lt(i) ? "launchExperience" : nt(i) ? "origin" : rt(i) ? "action" : "other" : "none",
|
|
533
532
|
cases: {
|
|
534
|
-
none:
|
|
535
|
-
origin:
|
|
533
|
+
none: V,
|
|
534
|
+
origin: W,
|
|
536
535
|
condition: q,
|
|
537
536
|
step: J,
|
|
538
537
|
launchExperience: mt,
|
|
539
538
|
action: Q,
|
|
540
|
-
__:
|
|
539
|
+
__: B()
|
|
541
540
|
}
|
|
542
541
|
}), m({
|
|
543
542
|
clock: [
|
|
544
543
|
q.doneData,
|
|
544
|
+
W.doneData,
|
|
545
545
|
V.doneData,
|
|
546
|
-
U.doneData,
|
|
547
546
|
R.doneData,
|
|
548
547
|
Y.doneData,
|
|
549
548
|
Q.doneData
|
|
@@ -586,8 +585,8 @@ const z = ht("experience-instance"), jt = it(
|
|
|
586
585
|
}), m({ clock: o, target: gt }), m({
|
|
587
586
|
source: C([
|
|
588
587
|
q.pending,
|
|
588
|
+
W.pending,
|
|
589
589
|
V.pending,
|
|
590
|
-
U.pending,
|
|
591
590
|
R.pending
|
|
592
591
|
]),
|
|
593
592
|
fn: (i) => i.some(Boolean) ? "transitioning" : "ready",
|
|
@@ -645,10 +644,10 @@ const z = ht("experience-instance"), jt = it(
|
|
|
645
644
|
stateStore: k,
|
|
646
645
|
// open close
|
|
647
646
|
isOpenStore: A,
|
|
648
|
-
open:
|
|
649
|
-
close:
|
|
650
|
-
toggleOpen:
|
|
651
|
-
setOpen:
|
|
647
|
+
open: _.open,
|
|
648
|
+
close: _.close,
|
|
649
|
+
toggleOpen: _.toggle,
|
|
650
|
+
setOpen: _.set,
|
|
652
651
|
// nodes
|
|
653
652
|
treeStore: e.treeStore,
|
|
654
653
|
currentNodeStore: x,
|
|
@@ -664,11 +663,11 @@ const z = ht("experience-instance"), jt = it(
|
|
|
664
663
|
};
|
|
665
664
|
}
|
|
666
665
|
);
|
|
667
|
-
function
|
|
668
|
-
return st(
|
|
666
|
+
function jt(t) {
|
|
667
|
+
return st(Ht, t);
|
|
669
668
|
}
|
|
670
669
|
const Gt = it(({ client: t }) => {
|
|
671
|
-
const e = z.store({}), r =
|
|
670
|
+
const e = z.store({}), r = B(), n = B(), s = B(), a = ot(e, {
|
|
672
671
|
register(u, S) {
|
|
673
672
|
const v = [
|
|
674
673
|
...u[S.experienceId] ?? []
|
|
@@ -681,7 +680,7 @@ const Gt = it(({ client: t }) => {
|
|
|
681
680
|
unregister(u, S) {
|
|
682
681
|
var A;
|
|
683
682
|
const v = S.experienceId, T = (A = u[v]) == null ? void 0 : A.filter(
|
|
684
|
-
(
|
|
683
|
+
(_) => _ !== S
|
|
685
684
|
);
|
|
686
685
|
return {
|
|
687
686
|
...u,
|
|
@@ -689,7 +688,7 @@ const Gt = it(({ client: t }) => {
|
|
|
689
688
|
};
|
|
690
689
|
}
|
|
691
690
|
}), o = M(
|
|
692
|
-
({ experience: u, target: S }) =>
|
|
691
|
+
({ experience: u, target: S }) => jt({ client: t, experience: u, target: S })
|
|
693
692
|
), c = M((u) => {
|
|
694
693
|
a.register(u);
|
|
695
694
|
}), d = M(
|
|
@@ -722,11 +721,11 @@ const Gt = it(({ client: t }) => {
|
|
|
722
721
|
);
|
|
723
722
|
return;
|
|
724
723
|
}
|
|
725
|
-
const A =
|
|
724
|
+
const A = vt(T);
|
|
726
725
|
try {
|
|
727
726
|
v.render(A, S.component, t, u);
|
|
728
|
-
} catch (
|
|
729
|
-
I("error",
|
|
727
|
+
} catch (_) {
|
|
728
|
+
I("error", _);
|
|
730
729
|
}
|
|
731
730
|
});
|
|
732
731
|
m({
|
|
@@ -752,7 +751,7 @@ const Gt = it(({ client: t }) => {
|
|
|
752
751
|
clock: n,
|
|
753
752
|
target: k
|
|
754
753
|
});
|
|
755
|
-
function
|
|
754
|
+
function O(u, S) {
|
|
756
755
|
r({ experience: u, target: S });
|
|
757
756
|
}
|
|
758
757
|
const P = e.map((u) => Object.values(u).flat());
|
|
@@ -760,23 +759,23 @@ const Gt = it(({ client: t }) => {
|
|
|
760
759
|
return e.map((S) => S[u] || [], { skipVoid: !1 });
|
|
761
760
|
}
|
|
762
761
|
return {
|
|
763
|
-
spawn:
|
|
762
|
+
spawn: O,
|
|
764
763
|
getByExperienceId: x,
|
|
765
764
|
listStore: P
|
|
766
765
|
};
|
|
767
766
|
});
|
|
768
|
-
function
|
|
767
|
+
function Yt(t) {
|
|
769
768
|
return st(Gt, t);
|
|
770
769
|
}
|
|
771
770
|
export {
|
|
772
|
-
|
|
773
|
-
|
|
774
|
-
|
|
775
|
-
|
|
771
|
+
jt as a,
|
|
772
|
+
Jt as b,
|
|
773
|
+
Yt as c,
|
|
774
|
+
Xt as d,
|
|
776
775
|
et as e,
|
|
777
776
|
At as f,
|
|
778
|
-
|
|
777
|
+
zt as g,
|
|
779
778
|
j as h,
|
|
780
|
-
|
|
781
|
-
|
|
779
|
+
Ot as i,
|
|
780
|
+
Qt as t
|
|
782
781
|
};
|
|
@@ -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;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 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dom.d.ts","sourceRoot":"","sources":["../../../src/utils/dom.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,mCAAmC,CAAA;AAGzE,wBAAgB,aAAa,CAAC,QAAQ,EAAE,MAAM,GAAG,WAAW,EAAE,CAQ7D;
|
|
1
|
+
{"version":3,"file":"dom.d.ts","sourceRoot":"","sources":["../../../src/utils/dom.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,mCAAmC,CAAA;AAGzE,wBAAgB,aAAa,CAAC,QAAQ,EAAE,MAAM,GAAG,WAAW,EAAE,CAQ7D;AAED,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,WAAW,GAAG,UAAU,CAMhE;AAED,wBAAgB,cAAc,IAAI,OAAO,CAAC,IAAI,CAAC,CAa9C;AAED,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,IAAI,QAS1E;AAED,KAAK,SAAS,GAAG,SAAS,GAAG,QAAQ,GAAG,OAAO,GAAG,SAAS,GAAG,QAAQ,CAAA;AAOtE,wBAAgB,iBAAiB,CAC/B,OAAO,EAAE;IAAE,QAAQ,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,SAAS,CAAA;CAAE,EAAE,EACrD,YAAY,EAAE,MAAM,GACnB,CAAC,gBAAgB,GAAG;IAAE,QAAQ,EAAE,WAAW,EAAE,CAAA;CAAE,CAAC,EAAE,CAqBpD;AAED,wBAAgB,cAAc,CAC5B,OAAO,EAAE,CAAC,gBAAgB,GAAG;IAAE,QAAQ,EAAE,WAAW,EAAE,CAAA;CAAE,CAAC,EAAE,EAC3D,YAAY,EAAE,MAAM,iBAOrB;AAGD,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,QAG1E;AAED,wBAAgB,cAAc,CAAC,OAAO,EAAE,WAAW,EAAE,YAAY,CAAC,EAAE,MAAM,WAMzE;AAED,wBAAgB,YAAY,CAAC,OAAO,EAAE,WAAW,EAAE,YAAY,CAAC,EAAE,MAAM,WAMvE;AAED,wBAAgB,gBAAgB,CAAC,YAAY,EAAE,MAAM,kBAMpD;AAED,wBAAgB,iBAAiB,CAC/B,MAAM,EAAE,WAAW,GAAG,QAAQ,EAC9B,SAAS,EAAE,SAAS,EACpB,YAAY,EAAE,MAAM,eA+BrB"}
|
|
@@ -1,14 +1,14 @@
|
|
|
1
|
-
import { createDomain as
|
|
1
|
+
import { createDomain as h, createApi as b, createEffect as j, attach as U, sample as x, combine as B, createEvent as O } from "effector";
|
|
2
2
|
import { createFactory as k, invoke as v } from "@withease/factories";
|
|
3
|
-
import { g as C, t as H, b as q, f as z, e as L, h as G } from "./experience-instance-
|
|
3
|
+
import { g as C, t as H, b as q, f as z, e as L, h as G } from "./experience-instance-CeuHLrdL.js";
|
|
4
4
|
import { l as E } from "./logger-C9a75KZn.js";
|
|
5
|
-
import { c as
|
|
6
|
-
import { g as
|
|
7
|
-
import { i as
|
|
8
|
-
import { e as
|
|
9
|
-
const _ =
|
|
5
|
+
import { c as R, s as M, l as A } from "./storage-Cb_71y48.js";
|
|
6
|
+
import { g as K } from "./id-BW-g3y32.js";
|
|
7
|
+
import { i as Y } from "./object-JwZ58NOH.js";
|
|
8
|
+
import { e as J, k as Q } from "./supports-DBMT17KZ.js";
|
|
9
|
+
const _ = h("experience"), W = k(
|
|
10
10
|
({ client: e, experience: t }) => {
|
|
11
|
-
const i = _.store(t), g =
|
|
11
|
+
const i = _.store(t), g = b(i, {
|
|
12
12
|
merge(u, m) {
|
|
13
13
|
return {
|
|
14
14
|
...u,
|
|
@@ -43,7 +43,7 @@ function X(e) {
|
|
|
43
43
|
return v(W, e);
|
|
44
44
|
}
|
|
45
45
|
const Z = k(({ client: e }) => {
|
|
46
|
-
const t = _.store({}), i =
|
|
46
|
+
const t = _.store({}), i = b(t, {
|
|
47
47
|
register(r, n) {
|
|
48
48
|
return {
|
|
49
49
|
...r,
|
|
@@ -91,7 +91,7 @@ const Oe = (e, t) => {
|
|
|
91
91
|
}, te = async (e, t) => {
|
|
92
92
|
const { decisionLogic: i, targetSelectors: g } = t.configStore.getState();
|
|
93
93
|
return C(g, t.id).length < 1 || g.length === 0 ? !1 : i && z(i) ? await L(e, i) === !0 : !0;
|
|
94
|
-
}, re =
|
|
94
|
+
}, re = h("component"), ne = k(
|
|
95
95
|
({ client: e, component: t, name: i }) => {
|
|
96
96
|
const g = e.frameworks.getByName(t.frameworkName);
|
|
97
97
|
return {
|
|
@@ -105,7 +105,7 @@ function se(e) {
|
|
|
105
105
|
return v(ne, e);
|
|
106
106
|
}
|
|
107
107
|
const oe = k(({ client: e }) => {
|
|
108
|
-
const t = re.store({}), i =
|
|
108
|
+
const t = re.store({}), i = b(t, {
|
|
109
109
|
register(r, n) {
|
|
110
110
|
return {
|
|
111
111
|
...r,
|
|
@@ -136,8 +136,8 @@ function Pe(e) {
|
|
|
136
136
|
}
|
|
137
137
|
const Ve = (e, t, i) => {
|
|
138
138
|
i.register(e, t);
|
|
139
|
-
}, ie =
|
|
140
|
-
const t = ie.store({}), i =
|
|
139
|
+
}, ie = h("framework"), ae = k(({ client: e }) => {
|
|
140
|
+
const t = ie.store({}), i = b(t, {
|
|
141
141
|
register(r, n) {
|
|
142
142
|
return {
|
|
143
143
|
...r,
|
|
@@ -166,7 +166,7 @@ function Te(e) {
|
|
|
166
166
|
}
|
|
167
167
|
const Ne = (e, t) => {
|
|
168
168
|
t.register(e.name, e);
|
|
169
|
-
}, ce = 6e3, P =
|
|
169
|
+
}, ce = 6e3, P = R("last_ping", "global"), ue = (e) => `${e}/api/v1/ping`, Ce = async (e) => {
|
|
170
170
|
try {
|
|
171
171
|
const t = Date.now(), i = localStorage.getItem(P);
|
|
172
172
|
if (i && t - parseInt(i) < ce)
|
|
@@ -187,8 +187,8 @@ const Ne = (e, t) => {
|
|
|
187
187
|
} catch (t) {
|
|
188
188
|
return E("error", t), !1;
|
|
189
189
|
}
|
|
190
|
-
}, le =
|
|
191
|
-
const t = le.store({}), i =
|
|
190
|
+
}, le = h("predicate"), ge = k(({ client: e }) => {
|
|
191
|
+
const t = le.store({}), i = b(t, {
|
|
192
192
|
register(r, n) {
|
|
193
193
|
return {
|
|
194
194
|
...r,
|
|
@@ -220,8 +220,8 @@ function Le(e) {
|
|
|
220
220
|
}
|
|
221
221
|
const _e = (e, t, i) => {
|
|
222
222
|
i.register(e, t);
|
|
223
|
-
}, V =
|
|
224
|
-
const t = V.store({}), i = V.store([]), g =
|
|
223
|
+
}, V = h("feature"), de = k(({ client: e }) => {
|
|
224
|
+
const t = V.store({}), i = V.store([]), g = b(t, {
|
|
225
225
|
register(a, o) {
|
|
226
226
|
return {
|
|
227
227
|
...a,
|
|
@@ -254,44 +254,47 @@ const _e = (e, t, i) => {
|
|
|
254
254
|
key: o,
|
|
255
255
|
storage: s = "local"
|
|
256
256
|
}) => {
|
|
257
|
-
const c =
|
|
257
|
+
const c = R(`feature:${a}:${o}`, "global"), l = (s === "session" ? M : A).get(c).boolean();
|
|
258
258
|
return l === null ? null : { id: a, key: o, bucket: l, storage: s };
|
|
259
259
|
}
|
|
260
260
|
), r = j((a) => {
|
|
261
261
|
if (!a)
|
|
262
262
|
return null;
|
|
263
|
-
const o =
|
|
263
|
+
const o = R(`feature:${a.id}:${a.key}`, "global");
|
|
264
264
|
(a.storage === "session" ? M : A).set(o, a.bucket);
|
|
265
265
|
}), n = /* @__PURE__ */ new Map(), u = U({
|
|
266
266
|
source: { allFeaturesStore: t, resolvedFeaturesStore: i },
|
|
267
267
|
effect: async ({ allFeaturesStore: a, resolvedFeaturesStore: o }, { id: s, decide: c, key: f }) => {
|
|
268
|
-
const l = o.find(
|
|
269
|
-
($) => $.id === s && $.key === f
|
|
270
|
-
);
|
|
268
|
+
const l = o.find((D) => D.id === s);
|
|
271
269
|
if (l)
|
|
272
270
|
return l;
|
|
273
271
|
const y = a[s];
|
|
274
272
|
if (!y)
|
|
275
273
|
throw new Error(`Feature with id '${s}' not found`);
|
|
276
|
-
const
|
|
277
|
-
if (
|
|
278
|
-
const
|
|
279
|
-
return { id: y.id, bucket:
|
|
274
|
+
const w = n.get(`${s}:${f}`);
|
|
275
|
+
if (w !== void 0) {
|
|
276
|
+
const D = await w;
|
|
277
|
+
return { id: y.id, bucket: D, key: f, storage: y.feature.storage };
|
|
280
278
|
}
|
|
281
|
-
const
|
|
282
|
-
n.set(`${s}:${f}`,
|
|
283
|
-
const
|
|
284
|
-
return { id: y.id, bucket:
|
|
279
|
+
const $ = c();
|
|
280
|
+
n.set(`${s}:${f}`, $);
|
|
281
|
+
const F = await $;
|
|
282
|
+
return { id: y.id, bucket: F, key: f, storage: y.feature.storage };
|
|
285
283
|
}
|
|
286
284
|
});
|
|
287
|
-
|
|
285
|
+
x({
|
|
288
286
|
clock: g.register,
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
|
|
287
|
+
source: t,
|
|
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 };
|
|
292
295
|
},
|
|
293
296
|
target: d
|
|
294
|
-
}),
|
|
297
|
+
}), x({
|
|
295
298
|
source: t,
|
|
296
299
|
clock: u.doneData,
|
|
297
300
|
fn: (a, o) => {
|
|
@@ -306,9 +309,7 @@ const _e = (e, t, i) => {
|
|
|
306
309
|
allFeaturesStore: a,
|
|
307
310
|
resolvedFeaturesStore: o
|
|
308
311
|
}) => Object.values(a).map((s) => {
|
|
309
|
-
const c = o.find(
|
|
310
|
-
(f) => f.id === s.id && f.key === s.feature.key
|
|
311
|
-
);
|
|
312
|
+
const c = o.find((f) => f.id === s.id);
|
|
312
313
|
return c ? {
|
|
313
314
|
id: s.id,
|
|
314
315
|
name: s.feature.name,
|
|
@@ -324,23 +325,19 @@ const _e = (e, t, i) => {
|
|
|
324
325
|
};
|
|
325
326
|
})
|
|
326
327
|
);
|
|
327
|
-
|
|
328
|
+
x({
|
|
328
329
|
clock: u.doneData,
|
|
329
330
|
source: { resolvedFeatures: i },
|
|
330
|
-
filter: ({ resolvedFeatures: a }, { id: o
|
|
331
|
-
(f) => f.id === o && f.key === s
|
|
332
|
-
),
|
|
331
|
+
filter: ({ resolvedFeatures: a }, { id: o }) => !a.some((s) => s.id === o),
|
|
333
332
|
fn: (a, o) => o,
|
|
334
333
|
target: e.eventBus.prepend((a) => ({
|
|
335
334
|
type: "feature_decide",
|
|
336
335
|
feature: a
|
|
337
336
|
}))
|
|
338
|
-
}),
|
|
337
|
+
}), x({
|
|
339
338
|
clock: [d.doneData, u.doneData],
|
|
340
339
|
source: i,
|
|
341
|
-
fn: (a, o) => !o || a.some(
|
|
342
|
-
(c) => c.id === o.id && c.key === o.key
|
|
343
|
-
) ? a : [...a, o],
|
|
340
|
+
fn: (a, o) => !o || a.some((s) => s.id === o.id) ? a : [...a, o],
|
|
344
341
|
target: i
|
|
345
342
|
});
|
|
346
343
|
function S(a) {
|
|
@@ -357,11 +354,11 @@ function Ue(e) {
|
|
|
357
354
|
}
|
|
358
355
|
const He = (e, t, i) => {
|
|
359
356
|
i.register(e, t);
|
|
360
|
-
}, I =
|
|
357
|
+
}, I = h("history");
|
|
361
358
|
function T(e, t) {
|
|
362
359
|
return {
|
|
363
360
|
// eslint-disable-next-line sonarjs/pseudo-random
|
|
364
|
-
id:
|
|
361
|
+
id: K(`history-entry-${Date.now()}-${Math.random()}}`),
|
|
365
362
|
node: t,
|
|
366
363
|
at: Date.now(),
|
|
367
364
|
experienceId: e
|
|
@@ -408,8 +405,8 @@ const pe = k(() => {
|
|
|
408
405
|
function qe() {
|
|
409
406
|
return v(pe);
|
|
410
407
|
}
|
|
411
|
-
const fe =
|
|
412
|
-
const e = fe.store({}), t =
|
|
408
|
+
const fe = h("field"), me = k(() => {
|
|
409
|
+
const e = fe.store({}), t = b(e, {
|
|
413
410
|
register(r, n) {
|
|
414
411
|
return {
|
|
415
412
|
...r,
|
|
@@ -439,8 +436,8 @@ function ze() {
|
|
|
439
436
|
}
|
|
440
437
|
const Ge = (e, t) => {
|
|
441
438
|
t.register(e);
|
|
442
|
-
}, ye =
|
|
443
|
-
const e = ye.store({}), t =
|
|
439
|
+
}, ye = h("action"), Se = k(() => {
|
|
440
|
+
const e = ye.store({}), t = b(e, {
|
|
444
441
|
register(d, r) {
|
|
445
442
|
return {
|
|
446
443
|
...d,
|
|
@@ -464,17 +461,17 @@ const Ge = (e, t) => {
|
|
|
464
461
|
listStore: g
|
|
465
462
|
};
|
|
466
463
|
});
|
|
467
|
-
function
|
|
464
|
+
function Ke() {
|
|
468
465
|
return v(Se);
|
|
469
466
|
}
|
|
470
|
-
const
|
|
467
|
+
const Ye = (e, t, i) => {
|
|
471
468
|
i.register(e, t);
|
|
472
469
|
};
|
|
473
470
|
function N(e) {
|
|
474
471
|
return typeof e > "u" || e === null || e === "" || Array.isArray(e) && !e.length;
|
|
475
472
|
}
|
|
476
|
-
const ke =
|
|
477
|
-
const t = ke.store({}), i = O(), g = O(), p =
|
|
473
|
+
const ke = h("response"), ve = k(({ client: e }) => {
|
|
474
|
+
const t = ke.store({}), i = O(), g = O(), p = b(t, {
|
|
478
475
|
register(o, s) {
|
|
479
476
|
return {
|
|
480
477
|
...o,
|
|
@@ -513,20 +510,20 @@ const ke = w("response"), ve = k(({ client: e }) => {
|
|
|
513
510
|
});
|
|
514
511
|
return;
|
|
515
512
|
}
|
|
516
|
-
if (y.multiple && (typeof l == "string" || typeof l == "number" || typeof l == "boolean") && (l = [l]), y.validation && !
|
|
517
|
-
const
|
|
513
|
+
if (y.multiple && (typeof l == "string" || typeof l == "number" || typeof l == "boolean") && (l = [l]), y.validation && !Y(y.validation) && !N(l)) {
|
|
514
|
+
const w = await L(e, y.validation, {
|
|
518
515
|
$input: l
|
|
519
516
|
});
|
|
520
|
-
if (typeof
|
|
517
|
+
if (typeof w == "string") {
|
|
521
518
|
s.push({
|
|
522
519
|
fieldId: c,
|
|
523
|
-
userMessage:
|
|
524
|
-
systemMessage: `Field validation resulted in an error: ${
|
|
520
|
+
userMessage: w,
|
|
521
|
+
systemMessage: `Field validation resulted in an error: ${w}.`,
|
|
525
522
|
value: l
|
|
526
523
|
});
|
|
527
524
|
return;
|
|
528
525
|
}
|
|
529
|
-
if (
|
|
526
|
+
if (w === !1) {
|
|
530
527
|
s.push({
|
|
531
528
|
fieldId: c,
|
|
532
529
|
userMessage: "This field is invalid",
|
|
@@ -555,11 +552,11 @@ const ke = w("response"), ve = k(({ client: e }) => {
|
|
|
555
552
|
return;
|
|
556
553
|
}
|
|
557
554
|
if (y.options) {
|
|
558
|
-
const
|
|
559
|
-
Array.isArray(l) && (
|
|
555
|
+
const w = y.options.map((F) => F.value), $ = Array.isArray(l) ? l : [l];
|
|
556
|
+
Array.isArray(l) && ($.every((F) => w.includes(F)) || s.push({
|
|
560
557
|
fieldId: c,
|
|
561
558
|
userMessage: "This field expects a valid option",
|
|
562
|
-
systemMessage: `Field expects a valid option. Valid options are: ${
|
|
559
|
+
systemMessage: `Field expects a valid option. Valid options are: ${w.join(", ")}`,
|
|
563
560
|
value: l
|
|
564
561
|
}));
|
|
565
562
|
}
|
|
@@ -585,10 +582,10 @@ const ke = w("response"), ve = k(({ client: e }) => {
|
|
|
585
582
|
return l || (c != null && c.defaultValue ? c.defaultValue : null);
|
|
586
583
|
});
|
|
587
584
|
}
|
|
588
|
-
return
|
|
585
|
+
return x({
|
|
589
586
|
clock: i,
|
|
590
587
|
target: p.clearAll
|
|
591
|
-
}),
|
|
588
|
+
}), x({
|
|
592
589
|
clock: g,
|
|
593
590
|
target: p.clear
|
|
594
591
|
}), {
|
|
@@ -603,23 +600,23 @@ const ke = w("response"), ve = k(({ client: e }) => {
|
|
|
603
600
|
getByFieldName: a
|
|
604
601
|
};
|
|
605
602
|
});
|
|
606
|
-
function
|
|
603
|
+
function Je(e) {
|
|
607
604
|
return v(ve, e);
|
|
608
605
|
}
|
|
609
|
-
function
|
|
606
|
+
function we() {
|
|
610
607
|
if (Q())
|
|
611
608
|
return crypto.randomUUID();
|
|
612
609
|
const e = Date.now().toString(36), t = Math.random().toString(36).substring(2, 15), i = Math.random().toString(36).substring(2, 15), g = Math.random().toString(36).substring(2, 15);
|
|
613
610
|
return `${e}-${t}-${i}-${g}`;
|
|
614
611
|
}
|
|
615
|
-
const
|
|
616
|
-
id:
|
|
617
|
-
}),
|
|
618
|
-
if (!
|
|
619
|
-
const e = A.get(
|
|
612
|
+
const he = () => ({
|
|
613
|
+
id: we()
|
|
614
|
+
}), be = R("session", "global"), xe = () => {
|
|
615
|
+
if (!J()) return null;
|
|
616
|
+
const e = A.get(be);
|
|
620
617
|
let t = e.isSet() ? e.json() : null;
|
|
621
|
-
return t || (t =
|
|
622
|
-
}, Qe = () =>
|
|
618
|
+
return t || (t = he(), e.set(t)), t;
|
|
619
|
+
}, Qe = () => xe();
|
|
623
620
|
export {
|
|
624
621
|
Pe as a,
|
|
625
622
|
je as b,
|
|
@@ -627,15 +624,15 @@ export {
|
|
|
627
624
|
Te as d,
|
|
628
625
|
Le as e,
|
|
629
626
|
Ue as f,
|
|
630
|
-
|
|
627
|
+
Je as g,
|
|
631
628
|
ze as h,
|
|
632
|
-
|
|
629
|
+
Ke as i,
|
|
633
630
|
Qe as j,
|
|
634
631
|
Ve as k,
|
|
635
632
|
He as l,
|
|
636
633
|
_e as m,
|
|
637
634
|
Ge as n,
|
|
638
|
-
|
|
635
|
+
Ye as o,
|
|
639
636
|
Ce as p,
|
|
640
637
|
Oe as q,
|
|
641
638
|
ee as r,
|
|
@@ -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"),M=require("./id-BKIWbSTy.cjs"),T=require("./object-BbFTsGh3.cjs"),j=require("./supports-YvpQZxbh.cjs"),O=p.createDomain("experience"),V=y.createFactory(({client:e,experience:t})=>{const i=O.store(t),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:t.initializeOpen})),d=e.components.listStore.map(u=>u.find(S=>S.name===`experience:${t.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=t.actions??[];return{id:t.id,configStore:f,treeStore:r,componentStore:d,actions:n,merge:g.merge}});function N(e){return y.invoke(V,e)}const C=y.createFactory(({client:e})=>{const t=O.store({}),i=p.createApi(t,{register(r,n){return{...r,[n.id]:n}}});function g(r){const n=t.getState()[r.id];if(n){n.merge({experience:r,strategy:"override"});return}const u=N({client:e,experience:r});i.register(u)}const f=t.map(r=>Object.values(r));function d(r){return t.map(n=>n[r],{skipVoid:!1})}return{register:g,getById:d,listStore:f}});function L(e){return y.invoke(C,e)}const q=(e,t)=>{t.register(e)},P=(e,t)=>{const{targetSelectors:i}=t.configStore.getState(),g=w.getTargetElements(i,t.id);g.forEach(({elements:d})=>d.forEach(r=>w.tagTargetElement(r,t.id))),w.createAppHosts(g,t.id).forEach(d=>{e.experienceInstances.spawn(t,d)})},_=async e=>{await Promise.all(e.experiences.listStore.getState().map(async t=>{await U(e,t)&&P(e,t)}))},U=async(e,t)=>{const{decisionLogic:i,targetSelectors:g}=t.configStore.getState();return w.getTargetElements(g,t.id).length<1||g.length===0?!1:i&&w.isRulesLogic(i)?await w.evaluateRuleLogic(e,i)===!0:!0},H=p.createDomain("component"),K=y.createFactory(({client:e,component:t,name:i})=>{const g=e.frameworks.getByName(t.frameworkName);return{name:i,component:t,frameworkStore:g}});function z(e){return y.invoke(K,e)}const G=y.createFactory(({client:e})=>{const t=H.store({}),i=p.createApi(t,{register(r,n){return{...r,[n.name]:n}}});function g(r,n){t.getState()[r]&&b.logger("warn",`Component '${r}' already registered. Registering again will override the previous registration.`);const S=z({client:e,name:r,component:n});i.register(S)}const f=t.map(r=>Object.values(r));function d(r){return t.map(n=>n[r],{skipVoid:!1})}return{register:g,getByName:d,listStore:f}});function Y(e){return y.invoke(G,e)}const J=(e,t,i)=>{i.register(e,t)},Q=p.createDomain("framework"),W=y.createFactory(({client:e})=>{const t=Q.store({}),i=p.createApi(t,{register(r,n){return{...r,[n.name]:n.framework}}});function g(r,n){t.getState()[r]&&b.logger("warn",`Framework '${r}' already registered. Registering again will override the previous registration.`),i.register({name:r,framework:n})}const f=t.map(r=>Object.values(r));function d(r){return t.map(n=>n[r],{skipVoid:!1})}return{register:g,getByName:d,listStore:f}});function X(e){return y.invoke(W,e)}const Z=(e,t)=>{t.register(e.name,e)},ee=6e3,D=x.createStorageKey("last_ping","global"),te=e=>`${e}/api/v1/ping`,re=async e=>{try{const t=Date.now(),i=localStorage.getItem(D);if(i&&t-parseInt(i)<ee)return!0;const g=te(e.apiUrl),f={projectId:e.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 v=(await fetch(g,{method:"POST",headers:r,body:d})).ok;return v&&localStorage.setItem(D,t.toString()),v}catch(t){return b.logger("error",t),!1}},ne=p.createDomain("predicate"),se=y.createFactory(({client:e})=>{const t=ne.store({}),i=p.createApi(t,{register(r,n){return{...r,[n.name]:{name:n.name,predicate:n.predicate}}}});function g(r,n){t.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=t.map(r=>Object.values(r));function d(r){return t.map(n=>n[r],{skipVoid:!1})}return{register:g,getByName:d,listStore:f}});function oe(e){return y.invoke(se,e)}const ie=(e,t,i)=>{i.register(e,t)},$=p.createDomain("feature"),ae=y.createFactory(({client:e})=>{const t=$.store({}),i=$.store([]),g=p.createApi(t,{register(a,o){return{...a,[o.id]:o.feature}}});function f(a,o){t.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:t,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 k=a[s];if(!k)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:k.id,bucket:A,key:m,storage:k.feature.storage}}const E=c();n.set(`${s}:${m}`,E);const I=await E;return{id:k.id,bucket:I,key:m,storage:k.feature.storage}}});p.sample({clock:g.register,source:t,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:t,clock:u.doneData,fn:(a,o)=>{var k;const{id:s,bucket:c,storage:m}=o,l=(k=a[s])==null?void 0:k.feature.key;return l?{key:l,id:s,bucket:c,storage:m}:null},target:r});const S=p.combine({allFeaturesStore:t,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:e.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 v(a){return t.map(o=>o[a],{skipVoid:!1})}return{register:f,getByName:v,listStore:S}});function ce(e){return y.invoke(ae,e)}const ue=(e,t,i)=>{i.register(e,t)},h=p.createDomain("history");function R(e,t){return{id:M.generateId(`history-entry-${Date.now()}-${Math.random()}}`),node:t,at:Date.now(),experienceId:e}}const le=y.createFactory(()=>{const e=h.store({entries:[]}),t=h.event(),i=h.event(),g=h.event(),f=h.event();e.on(t,(r,n)=>({entries:[...r.entries,R(n.experienceId,n.node)]})),e.on(i,(r,n)=>({entries:[...r.entries.slice(0,-1),R(n.experienceId,n.node)]})),e.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 v=r[S],a=v==null?void 0:v.node;if(!(!a||!w.isStepNode(a))&&!(n&&(v==null?void 0:v.experienceId)!==n))if(u.lastStepIndex===-1)u.lastStepIndex=S;else{u.secondLastStepIndex=S;break}}return u}return e.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:t,replace:i,back:g,restore:f,entriesStore:e.map(r=>r.entries)}});function ge(){return y.invoke(le)}const de=p.createDomain("field"),pe=y.createFactory(()=>{const e=de.store({}),t=p.createApi(e,{register(r,n){return{...r,[n.field.id]:n.field}}});function i(r){t.register({field:r})}const g=e.map(r=>Object.values(r));function f(r){return e.map(n=>n[r]||null)}function d(r){return e.map(n=>Object.values(n).find(u=>u.name===r)||null)}return{register:i,getById:f,listStore:g,getByName:d}});function fe(){return y.invoke(pe)}const me=(e,t)=>{t.register(e)},ye=p.createDomain("action"),Se=y.createFactory(()=>{const e=ye.store({}),t=p.createApi(e,{register(d,r){return{...d,[r.name]:{name:r.name,action:r.action}}}});function i(d,r){t.register({name:d,action:r})}const g=e.map(d=>Object.values(d));function f(d){return e.map(r=>r[d],{skipVoid:!1})}return{register:i,getByName:f,listStore:g}});function ke(){return y.invoke(Se)}const ve=(e,t,i)=>{i.register(e,t)};function B(e){return typeof e>"u"||e===null||e===""||Array.isArray(e)&&!e.length}const Fe=p.createDomain("response"),xe=y.createFactory(({client:e})=>{const t=Fe.store({}),i=p.createEvent(),g=p.createEvent(),f=p.createApi(t,{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 k=e.fields.getById(c).getState();if(!k){s.push({fieldId:c,userMessage:`Field '${c}' not found`,systemMessage:`No field with ID '${c}' exists. Available field IDs are: ${Object.keys(e.fields.listStore.getState()).join(",")}.`,value:l});return}if(k.multiple&&(typeof l=="string"||typeof l=="number"||typeof l=="boolean")&&(l=[l]),k.validation&&!T.isEmpty(k.validation)&&!B(l)){const F=await w.evaluateRuleLogic(e,k.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(k.required&&B(l)){s.push({fieldId:c,userMessage:"This field is required",systemMessage:"Field is required.",value:l});return}if(!k.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(k.options){const F=k.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=t.map(o=>o),S=t.map(o=>Object.keys(o).map(c=>({fieldId:c,value:o[c]})));function v(o){const s=e.fields.getById(o),c=t.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=e.fields.getByName(o);return p.combine({f:s,s:t},({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:v,getByFieldName:a}});function we(e){return y.invoke(xe,e)}function Ie(){if(j.supportsCryptoRandomUUID())return crypto.randomUUID();const e=Date.now().toString(36),t=Math.random().toString(36).substring(2,15),i=Math.random().toString(36).substring(2,15),g=Math.random().toString(36).substring(2,15);return`${e}-${t}-${i}-${g}`}const he=()=>({id:Ie()}),be=x.createStorageKey("session","global"),Ee=()=>{if(!j.supportsLocalStorage())return null;const e=x.localStore.get(be);let t=e.isSet()?e.json():null;return t||(t=he(),e.set(t)),t},Ae=()=>Ee();exports.createActionIndex=ke;exports.createComponentIndex=Y;exports.createExperienceIndex=L;exports.createFeatureIndex=ce;exports.createFieldIndex=fe;exports.createFrameworkIndex=X;exports.createHistory=ge;exports.createPredicateIndex=oe;exports.createResponseIndex=we;exports.initialiseExperience=P;exports.initialiseExperiences=_;exports.initialiseSession=Ae;exports.ping=re;exports.setupAction=ve;exports.setupComponent=J;exports.setupExperience=q;exports.setupFeature=ue;exports.setupField=me;exports.setupFramework=Z;exports.setupPredicate=ie;
|
package/package.json
CHANGED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
"use strict";const i=require("effector"),q=require("@withease/factories"),H=require("./supports-YvpQZxbh.cjs"),N=require("./logger-BsmHUUw1.cjs"),ge=require("./object-BbFTsGh3.cjs");function me(e){return typeof e=="number"&&!isNaN(e)}function R(e){return typeof e=="string"}function E(e){return Array.isArray(e)}function ne(e){return e instanceof Promise}function Z(e){return typeof e=="object"&&e!==null&&!Array.isArray(e)&&Object.keys(e).length===1}function m(e){if(me(e))return e;const t=parseFloat(`${e}`);return isNaN(t)?0:t}function T(e){return`${e}`}const he={"==":(e,t)=>e==t,"===":(e,t)=>e===t,"!=":(e,t)=>e!=t,"!==":(e,t)=>e!==t,">":(e,t)=>m(e)>m(t),">=":(e,t)=>m(e)>=m(t),"<":(e,t,r)=>{const n=m(e),a=m(t);if(r===void 0)return n<a;const c=m(r);return n<a&&a<c},"<=":(e,t,r)=>{const n=m(e),a=m(t);if(r===void 0)return n<=a;const c=m(r);return n<=a&&a<=c},"!!":async e=>await O(e),"!":async e=>!await O(e),"%":(e,t)=>m(e)%m(t),log:e=>(console.log(e),e),in:(e,t)=>t?R(t)?t.indexOf(T(e))!==-1:E(t)?t.includes(e):!1:!1,cat:(...e)=>e.map(T).join(""),substr:(e,t,r)=>{const n=T(e),a=m(t);if(r===void 0)return n.substr(a);const c=m(r);if(c<0){const o=n.substr(a);return o.substr(0,o.length+c)}return n.substr(a,c)},"+":(...e)=>e.reduce((t,r)=>m(t)+m(r),0),"*":(...e)=>e.reduce((t,r)=>m(t)*m(r),1),"-":(e,t)=>{const r=m(e);return t===void 0?-r:r-m(t)},"/":(e,t)=>m(e)/m(t),min:(...e)=>Math.min(...e.map(m)),max:(...e)=>Math.max(...e.map(m)),merge:(...e)=>e.reduce((t,r)=>E(r)?t.concat(r):t.concat([r]),[]),var(e,t){const r=arguments.length>1?t:null;if(e===""||e==="."||e===null||e===void 0)return this;if(typeof e=="number"&&Array.isArray(this))return e>=0&&e<this.length?this[e]:r;const n=T(e);if(n===""||n===".")return this;const a=n.split(".");let c=this;for(const o of a){if(c==null)return r;if(Array.isArray(c)){const u=parseInt(o,10);isNaN(u)?c=c[o]:c=c[u]}else c=c[o]}return c!==void 0?c:r},async missing(...e){const t=E(e[0])?e[0]:e,r=[];for(const n of t){const a=await g({var:n},this);(a===null||a==="")&&r.push(`${n}`)}return r},async missing_some(e,t){const r=await g({missing:t},this);if(!E(r)||!E(t))return[];const n=r.filter(R);return t.filter(R).length-n.length>=m(e)?[]:n},invoke(e){return typeof e!="function"?null:e()},regexp_matches(e,t){let r=e,n="";if(E(e)){const[c,o]=e;r=c,n=o}return!R(r)||!R(n)?!1:new RegExp(r,n).test(T(t))},throw(e){throw new Error(T(e))}};async function g(e,t){if(!e)return e;if(ne(e))return g(await e,t);if(E(e))return Promise.all(e.map(o=>g(o,t)));if(!Z(e))return e;const r=Se(e);let n=r?e[r]??[]:[];switch(E(n)||(n=[n]),r){case"if":case"?:":for(let o=0;o<n.length-1;o+=2)if(await O(await g(n[o],t)))return g(n[o+1],t);return n.length%2===1?g(n[n.length-1],t):null;case"and":{let o=null;for(const u of n)if(o=await g(u,t),!await O(o))return o;return o}case"or":{let o=null;for(const u of n)if(o=await g(u,t),await O(o))return o;return o}case"map":{const o=await g(n[0],t);return E(o)?await Promise.all(o.map(u=>g(n[1],u))):[]}case"filter":{const o=await g(n[0],t);return E(o)?(await Promise.all(o.map(async p=>{const y=await O(await g(n[1],p));return{item:p,shouldInclude:y}}))).filter(({shouldInclude:p})=>p).map(({item:p})=>p):[]}case"reduce":{const o=await g(n[0],t);if(!E(o))return n.length>2?await g(n[2],t):null;const u=n[1];let y=n.length>2?await g(n[2],t):null;for(const k of o)y=await g(u,{current:k,accumulator:y});return y}case"all":{const o=await g(n[0],t);if(!E(o)||o.length===0)return!1;for(const u of o)if(!await O(await g(n[1],u)))return!1;return!0}case"some":{const o=await g(n[0],t);if(!E(o))return!1;for(const u of o)if(await O(await g(n[1],u)))return!0;return!1}case"none":{const o=await g(n[0],t);if(!E(o))return!0;for(const u of o)if(await O(await g(n[1],u)))return!1;return!0}case"catch":try{return await g(n[0],t)}catch(o){return Z(o)?await g(o,t):n[1]?await g(n[1],o):o instanceof Error?o.message:o}}const a=await Promise.all(n.map(o=>g(o,t))),c=r?he[r]:void 0;if(!c)throw new Error(`Unrecognized operation ${r}`);return c.apply(t,a)}async function O(e){return ne(e)?O(await e):!(Array.isArray(e)&&e.length===0)&&!!e}function Se(e){return Object.keys(e)[0]}function re(e){return!ge.isEmpty(e)}async function V(e,t,r){const n=e.getStateSnapshot(),a=e.predicates.listStore.getState().reduce((u,p)=>({...u,[p.name]:()=>p.predicate(n)}),{}),c=e.features.listStore.getState().reduce((u,p)=>({...u,[p.id]:async()=>{const{bucket:y}=await p.getBucket();return y}}),{}),o={...r,responses:e.responses.getAllStore.getState(),location:typeof n.location=="object"?{hash:n.location.hash,host:n.location.host,hostname:n.location.hostname,href:n.location.href,origin:n.location.origin,pathname:n.location.pathname,port:n.location.port,protocol:n.location.protocol,search:n.location.search}:void 0,predicates:a,features:c};return await g(t,o)}function ye(e){return!H.supportsWindow()||!H.supportsDocument()?[]:Array.from(window.document.querySelectorAll(e)).filter(t=>t instanceof HTMLElement)}const we="open";function Ee(e){if(!H.supportsShadowRoot())throw new Error("Shadow DOM is not supported in this environment");return e.attachShadow({mode:we})}function Ne(){return new Promise((e,t)=>{if(!H.supportsDocument()){t();return}document.readyState!=="loading"?e():document.addEventListener("readystatechange",()=>e(),{once:!0})})}function Ie(e,t){const r=new MutationObserver(n=>{document.contains(e)||(r.disconnect(),t())});r.observe(document.body,{childList:!0,subtree:!0})}const C="picked-root",j="picked-target",xe="picked-root";function ke(e,t){return[...e,{selector:`${xe}[experience-id="${t}"]`,placement:"replace"}].flatMap(n=>{const a=ye(n.selector).filter(c=>!Ae(c,t)&&!oe(c,t));return{...n,elements:a}})}function ve(e,t){return e.flatMap(r=>r.elements.map(n=>Be(n,r.placement,t)))}function be(e,t){e.classList.add(j),e.classList.add(`${j}-${t}`)}function Ae(e,t){return t?e.classList.contains(`${j}-${t}`):e.classList.contains(`${j}`)}function oe(e,t){return t?e.classList.contains(`${C}-${t}`):e.classList.contains(C)}function Oe(e){const t=document.createElement("div");return t.style.display="block",t.classList.add(C),t.classList.add(`${C}-${e}`),t}function Be(e,t,r){let n;const a=Oe(r);if(e instanceof Document)n=e.body.appendChild(a);else{switch(t){case"replace":e.replaceWith(a);break;case"before":e.before(a);break;case"after":e.after(a);break;case"prepend":e.prepend(a);break;default:e.append(a);break}n=a}return n}function Fe(e){return e.type==="conditional"}function M(e){return e.type==="step"}function _e(e){return e.type==="experience"}function ee(e){return e.type==="origin"}function te(e){return e.type==="action"}const se=(e,t,r,n,a=new Set)=>a.has(r.id)?[]:(a.add(r.id),M(r)&&!n?[r]:t.filter(o=>o.sourceNodeId===r.id).flatMap(o=>{const u=e.find(p=>p.id===o.destinationNodeId);return u?se(e,t,u,!1,a):[]})),$e=(e,t,r)=>se(e,t,r,!0,new Set),ie=(e,t,r,n,a=new Set)=>{if(a.has(r.id))return[-1,-1];a.add(r.id);const c=t.filter(p=>p.sourceNodeId===r.id);if(c.length===0)return[0,0];let o=1/0,u=-1/0;for(const p of c){const y=e.find(L=>L.id===p.destinationNodeId);if(!y)continue;const[k,B]=ie(e,t,y,!1,new Set(a));k!==-1&&(o=Math.min(o,k+1),u=Math.max(u,B+1))}return o===1/0?[-1,-1]:[o,u]},Te=(e,t,r)=>ie(e,t,r,!0,new Set),ae=(e,t,r,n=new Set)=>{if(n.has(r.id))return[-1,-1];if(n.add(r.id),r.type==="origin")return[0,0];const a=t.filter(u=>u.destinationNodeId===r.id);if(a.length===0)return[-1,-1];let c=1/0,o=-1/0;for(const u of a){const p=e.find(B=>B.id===u.sourceNodeId);if(!p)continue;const[y,k]=ae(e,t,p,new Set(n));y!==-1&&(c=Math.min(c,y+1),o=Math.max(o,k+1))}return c===1/0?[-1,-1]:[c,o]},Me=(e,t,r)=>ae(e,t,r,new Set),ce=e=>e.find(r=>r.type==="origin")||null,U=(e,t,r)=>{if(!e)return ce(t);const n=r.find(c=>c.sourceNodeId===e.id);if(!n)return null;const a=t.find(c=>c.id===n.destinationNodeId);return a||null};async function Le(e,t,r,n){const a=e?"true":"false",c=n.find(o=>o.sourceNodeHandle===a&&o.sourceNodeId===t);return r.find(o=>o.id===(c==null?void 0:c.destinationNodeId))}const X=i.createDomain("experience-instance"),De=q.createFactory(({client:e,experience:t,target:r})=>{const n=i.createEvent(),a=i.createEvent(),c=i.createEvent(),o=i.createEvent(),u=i.createEvent(),p=i.createEvent(),y=t.componentStore,k=X.store("transitioning"),B=e.history.entriesStore.map(s=>s.filter(l=>l.experienceId===t.id)),L=B.map(s=>s.filter(l=>M(l.node))),I=B.map(s=>{var l;return((l=s[s.length-1])==null?void 0:l.node)||null}),f=i.combine(t.treeStore,I,({steps:s},l)=>s.find(d=>l&&M(l)&&d.id===l.stepId)||null),h=i.combine(t.treeStore,I,({nodes:s,edges:l},d)=>d?$e(s,l,d):[]),A=i.combine(t.treeStore,I,({nodes:s,edges:l},d)=>d?Me(s,l,d):[-1,-1]),_=i.combine(t.treeStore,I,({nodes:s,edges:l},d)=>d?Te(s,l,d):[-1,-1]),v=X.store(!1),F=i.createApi(v,{open:()=>!0,close:()=>!1,toggle:s=>!s,set:(s,l)=>l}),fe=i.createEffect(async()=>{e.history.back({experienceId:t.id})}),le=i.attach({source:t.treeStore,effect:async(s,l)=>{const d=s.nodes.find(w=>M(w)&&w.stepId===l);d&&e.history.push({experienceId:t.id,node:d})}}),z=i.attach({source:I,effect:s=>{}}),W=i.attach({source:t.treeStore,effect:async({nodes:s})=>ce(s)}),G=i.attach({source:t.treeStore,effect:async({nodes:s,edges:l},d)=>U(d,s,l)}),K=i.attach({source:t.treeStore,effect:async({nodes:s,edges:l,conditionals:d},w)=>{if(!w)return;const $=d.find(b=>b.id===w.conditionalId);if(!$)return;const x=w.id,S=await V(e,$.condition);return Le(!!S,x,s,l)}}),J=i.attach({source:t.treeStore,effect:async({nodes:s,edges:l},d)=>{if(!d||!te(d))return;const w=d.action;if(!w){N.logger("warn",`Action node ${d.id} has no action name`);return}const $=e.actions.getByName(w).getState();if(!$){N.logger("warn",`Action '${w}' not registered on client`);const x=l.find(S=>S.sourceNodeId===d.id&&S.sourceNodeHandle==="false");return x?s.find(S=>S.id===x.destinationNodeId):null}if(typeof $.action!="function"){N.logger("warn",`Action '${w}' is not a function`);const x=l.find(S=>S.sourceNodeId===d.id&&S.sourceNodeHandle==="false");return x?s.find(S=>S.id===x.destinationNodeId):null}try{N.logger("info",`Executing action: ${w}`),await $.action();const x=l.find(b=>b.sourceNodeId===d.id&&b.sourceNodeHandle==="true");if(!x)return N.logger("warn",`No 'true' edge found for action node ${d.id}`),null;const S=s.find(b=>b.id===x.destinationNodeId);return N.logger("info",`Action '${w}' succeeded, moving to node ${S==null?void 0:S.id}`),S||null}catch(x){N.logger("warn",`Action '${w}' failed:`,x);const S=l.find(P=>P.sourceNodeId===d.id&&P.sourceNodeHandle==="false");if(!S)return N.logger("warn",`No 'false' edge found for action node ${d.id}`),null;const b=s.find(P=>P.id===S.destinationNodeId);return N.logger("info",`Action '${w}' failed, moving to node ${b==null?void 0:b.id}`),b||null}}}),de=i.createEffect(s=>{if(s)return e.launchExperienceById(s.experienceId)}),Q=i.attach({source:[I,t.treeStore],effect:async([s,{nodes:l,edges:d}])=>U(s,l,d)}),D=i.attach({source:[I,t.treeStore],effect:async([s,{nodes:l,edges:d}])=>U(s,l,d)}),pe=i.createEffect(s=>{e.history.push({experienceId:t.id,node:s})}),Y=i.attach({source:t.configStore,effect:async({initializeOpenLogic:s})=>re(s)?!!await V(e,s):s??!1});return i.split({source:I,match:s=>s?Fe(s)?"condition":M(s)?"step":_e(s)?"launchExperience":ee(s)?"origin":te(s)?"action":"other":"none",cases:{none:W,origin:G,condition:K,step:z,launchExperience:de,action:J,__:i.createEvent()}}),i.sample({clock:[K.doneData,G.doneData,W.doneData,D.doneData,Q.doneData,J.doneData],filter:Boolean,target:pe}),i.sample({clock:a,target:D}),i.sample({clock:a,source:f,filter:Boolean,target:e.eventBus.prepend(s=>({type:"step_submit",step:s,experience:t}))}),i.sample({clock:D.done,source:f,filter:Boolean,target:e.eventBus.prepend(s=>({type:"step_submit_success",step:s,experience:t}))}),i.sample({clock:D.fail,source:f,filter:Boolean,target:e.eventBus.prepend(s=>({type:"step_submit_error",step:s,experience:t}))}),i.sample({clock:c,target:fe}),i.sample({clock:o,target:le}),i.sample({source:i.combine([K.pending,G.pending,W.pending,D.pending]),fn:s=>s.some(Boolean)?"transitioning":"ready",target:k}),i.sample({clock:z.doneData,source:f,filter:Boolean,target:e.eventBus.prepend(s=>({type:"step_enter",step:s,experience:t}))}),i.sample({clock:p,target:Y}),i.sample({source:Y.doneData,fn:Boolean,target:v}),i.sample({source:I,clock:n,filter:s=>s?ee(s):!0,target:Q}),i.sample({source:v,filter:Boolean,target:n}),i.sample({source:v,filter:Boolean,target:e.eventBus.prepend(()=>({type:"experience_open",experience:t}))}),i.sample({source:v,filter:s=>!s,target:e.eventBus.prepend(()=>({type:"experience_close",experience:t}))}),i.sample({clock:u,target:[p]}),u(),{id:Math.random().toString(36).substring(7),experienceId:t.id,configStore:t.configStore,target:r,componentStore:y,stateStore:k,isOpenStore:v,open:F.open,close:F.close,toggleOpen:F.toggle,setOpen:F.set,treeStore:t.treeStore,currentNodeStore:I,currentStepStore:f,nextReachableStepNodesStore:h,stepsToOriginStore:A,stepsToLeafStore:_,goToNextStep:a,goToPreviousStep:c,goToStepById:o,stepsHistoryStore:L}});function ue(e){return q.invoke(De,e)}const Re=q.createFactory(({client:e})=>{const t=X.store({}),r=i.createEvent(),n=i.createEvent(),a=i.createEvent(),c=i.createApi(t,{register(f,h){const A=[...f[h.experienceId]??[]];return A.push(h),{...f,[h.experienceId]:A}},unregister(f,h){var v;const A=h.experienceId,_=(v=f[A])==null?void 0:v.filter(F=>F!==h);return{...f,[A]:_??[]}}}),o=i.createEffect(({experience:f,target:h})=>ue({client:e,experience:f,target:h})),u=i.createEffect(f=>{c.register(f)}),p=i.createEffect(f=>{f.target&&Ie(f.target,()=>{a(f)})}),y=i.createEffect(f=>{c.unregister(f)}),k=i.createEffect(f=>{const h=f.componentStore.getState();if(!h){N.logger("warn","No app component registered. Skipping init.");return}const A=h.frameworkStore.getState();if(!A){N.logger("error",`No framework registered for component '${h.name}'. Skipping rendering.`);return}const _=f.target;if(!_){N.logger("error",`No target element registered for experience '${f.experienceId}'. Skipping rendering.`);return}const v=Ee(_);try{A.render(v,h.component,e,f)}catch(F){N.logger("error",F)}});i.sample({clock:r,target:o}),i.sample({clock:a,target:y}),i.sample({clock:o.doneData,target:[u,p,n]}),i.sample({clock:o.doneData,target:e.eventBus.prepend(f=>({type:"experience_initialized",experienceInstance:f}))}),i.sample({clock:n,target:k});function B(f,h){r({experience:f,target:h})}const L=t.map(f=>Object.values(f).flat());function I(f){return t.map(h=>h[f]||[],{skipVoid:!1})}return{spawn:B,getByExperienceId:I,listStore:L}});function Pe(e){return q.invoke(Re,e)}exports.createAppHosts=ve;exports.createExperienceInstance=ue;exports.createExperienceInstanceIndex=Pe;exports.domInteractive=Ne;exports.evaluateRuleLogic=V;exports.getTargetElements=ke;exports.isPickedRoot=oe;exports.isRulesLogic=re;exports.isStepNode=M;exports.tagTargetElement=be;
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
"use strict";const p=require("effector"),y=require("@withease/factories"),w=require("./experience-instance-BpQMqclI.cjs"),b=require("./logger-BsmHUUw1.cjs"),x=require("./storage-DuRlyFaY.cjs"),M=require("./id-BKIWbSTy.cjs"),T=require("./object-BbFTsGh3.cjs"),j=require("./supports-YvpQZxbh.cjs"),O=p.createDomain("experience"),V=y.createFactory(({client:e,experience:t})=>{const i=O.store(t),g=p.createApi(i,{merge(u,S){return{...u,...S.experience}}}),m=i.map(u=>({name:u.name,decisionLogic:u.decide,targetSelectors:u.targets,initializeOpenLogic:t.initializeOpen})),d=e.components.listStore.map(u=>u.find(S=>S.name===`experience:${t.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=t.actions??[];return{id:t.id,configStore:m,treeStore:r,componentStore:d,actions:n,merge:g.merge}});function N(e){return y.invoke(V,e)}const C=y.createFactory(({client:e})=>{const t=O.store({}),i=p.createApi(t,{register(r,n){return{...r,[n.id]:n}}});function g(r){const n=t.getState()[r.id];if(n){n.merge({experience:r,strategy:"override"});return}const u=N({client:e,experience:r});i.register(u)}const m=t.map(r=>Object.values(r));function d(r){return t.map(n=>n[r],{skipVoid:!1})}return{register:g,getById:d,listStore:m}});function L(e){return y.invoke(C,e)}const q=(e,t)=>{t.register(e)},P=(e,t)=>{const{targetSelectors:i}=t.configStore.getState(),g=w.getTargetElements(i,t.id);g.forEach(({elements:d})=>d.forEach(r=>w.tagTargetElement(r,t.id))),w.createAppHosts(g,t.id).forEach(d=>{e.experienceInstances.spawn(t,d)})},_=async e=>{await Promise.all(e.experiences.listStore.getState().map(async t=>{await U(e,t)&&P(e,t)}))},U=async(e,t)=>{const{decisionLogic:i,targetSelectors:g}=t.configStore.getState();return w.getTargetElements(g,t.id).length<1||g.length===0?!1:i&&w.isRulesLogic(i)?await w.evaluateRuleLogic(e,i)===!0:!0},H=p.createDomain("component"),z=y.createFactory(({client:e,component:t,name:i})=>{const g=e.frameworks.getByName(t.frameworkName);return{name:i,component:t,frameworkStore:g}});function K(e){return y.invoke(z,e)}const G=y.createFactory(({client:e})=>{const t=H.store({}),i=p.createApi(t,{register(r,n){return{...r,[n.name]:n}}});function g(r,n){t.getState()[r]&&b.logger("warn",`Component '${r}' already registered. Registering again will override the previous registration.`);const S=K({client:e,name:r,component:n});i.register(S)}const m=t.map(r=>Object.values(r));function d(r){return t.map(n=>n[r],{skipVoid:!1})}return{register:g,getByName:d,listStore:m}});function Y(e){return y.invoke(G,e)}const J=(e,t,i)=>{i.register(e,t)},Q=p.createDomain("framework"),W=y.createFactory(({client:e})=>{const t=Q.store({}),i=p.createApi(t,{register(r,n){return{...r,[n.name]:n.framework}}});function g(r,n){t.getState()[r]&&b.logger("warn",`Framework '${r}' already registered. Registering again will override the previous registration.`),i.register({name:r,framework:n})}const m=t.map(r=>Object.values(r));function d(r){return t.map(n=>n[r],{skipVoid:!1})}return{register:g,getByName:d,listStore:m}});function X(e){return y.invoke(W,e)}const Z=(e,t)=>{t.register(e.name,e)},ee=6e3,D=x.createStorageKey("last_ping","global"),te=e=>`${e}/api/v1/ping`,re=async e=>{try{const t=Date.now(),i=localStorage.getItem(D);if(i&&t-parseInt(i)<ee)return!0;const g=te(e.apiUrl),m={projectId:e.projectId,path:window.location.pathname},d=JSON.stringify(m),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 v=(await fetch(g,{method:"POST",headers:r,body:d})).ok;return v&&localStorage.setItem(D,t.toString()),v}catch(t){return b.logger("error",t),!1}},ne=p.createDomain("predicate"),se=y.createFactory(({client:e})=>{const t=ne.store({}),i=p.createApi(t,{register(r,n){return{...r,[n.name]:{name:n.name,predicate:n.predicate}}}});function g(r,n){t.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=t.map(r=>Object.values(r));function d(r){return t.map(n=>n[r],{skipVoid:!1})}return{register:g,getByName:d,listStore:m}});function oe(e){return y.invoke(se,e)}const ie=(e,t,i)=>{i.register(e,t)},R=p.createDomain("feature"),ae=y.createFactory(({client:e})=>{const t=R.store({}),i=R.store([]),g=p.createApi(t,{register(a,o){return{...a,[o.id]:o.feature}}});function m(a,o){t.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:t,resolvedFeaturesStore:i},effect:async({allFeaturesStore:a,resolvedFeaturesStore:o},{id:s,decide:c,key:f})=>{const l=o.find(A=>A.id===s&&A.key===f);if(l)return l;const k=a[s];if(!k)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:k.id,bucket:A,key:f,storage:k.feature.storage}}const E=c();n.set(`${s}:${f}`,E);const I=await E;return{id:k.id,bucket:I,key:f,storage:k.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:t,clock:u.doneData,fn:(a,o)=>{var k;const{id:s,bucket:c,storage:f}=o,l=(k=a[s])==null?void 0:k.feature.key;return l?{key:l,id:s,bucket:c,storage:f}:null},target:r});const S=p.combine({allFeaturesStore:t,resolvedFeaturesStore:i}).map(({allFeaturesStore:a,resolvedFeaturesStore:o})=>Object.values(a).map(s=>{const c=o.find(f=>f.id===s.id&&f.key===s.feature.key);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,key:s})=>!a.some(f=>f.id===o&&f.key===s),fn:(a,o)=>o,target:e.eventBus.prepend(a=>({type:"feature_decide",feature:a}))}),p.sample({clock:[d.doneData,u.doneData],source:i,fn:(a,o)=>!o||a.some(c=>c.id===o.id&&c.key===o.key)?a:[...a,o],target:i});function v(a){return t.map(o=>o[a],{skipVoid:!1})}return{register:m,getByName:v,listStore:S}});function ce(e){return y.invoke(ae,e)}const ue=(e,t,i)=>{i.register(e,t)},h=p.createDomain("history");function $(e,t){return{id:M.generateId(`history-entry-${Date.now()}-${Math.random()}}`),node:t,at:Date.now(),experienceId:e}}const le=y.createFactory(()=>{const e=h.store({entries:[]}),t=h.event(),i=h.event(),g=h.event(),m=h.event();e.on(t,(r,n)=>({entries:[...r.entries,$(n.experienceId,n.node)]})),e.on(i,(r,n)=>({entries:[...r.entries.slice(0,-1),$(n.experienceId,n.node)]})),e.on(m,(r,n)=>n);function d(r,n){const u={lastStepIndex:-1,secondLastStepIndex:-1};for(let S=r.length-1;S>=0;S--){const v=r[S],a=v==null?void 0:v.node;if(!(!a||!w.isStepNode(a))&&!(n&&(v==null?void 0:v.experienceId)!==n))if(u.lastStepIndex===-1)u.lastStepIndex=S;else{u.secondLastStepIndex=S;break}}return u}return e.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:t,replace:i,back:g,restore:m,entriesStore:e.map(r=>r.entries)}});function ge(){return y.invoke(le)}const de=p.createDomain("field"),pe=y.createFactory(()=>{const e=de.store({}),t=p.createApi(e,{register(r,n){return{...r,[n.field.id]:n.field}}});function i(r){t.register({field:r})}const g=e.map(r=>Object.values(r));function m(r){return e.map(n=>n[r]||null)}function d(r){return e.map(n=>Object.values(n).find(u=>u.name===r)||null)}return{register:i,getById:m,listStore:g,getByName:d}});function me(){return y.invoke(pe)}const fe=(e,t)=>{t.register(e)},ye=p.createDomain("action"),Se=y.createFactory(()=>{const e=ye.store({}),t=p.createApi(e,{register(d,r){return{...d,[r.name]:{name:r.name,action:r.action}}}});function i(d,r){t.register({name:d,action:r})}const g=e.map(d=>Object.values(d));function m(d){return e.map(r=>r[d],{skipVoid:!1})}return{register:i,getByName:m,listStore:g}});function ke(){return y.invoke(Se)}const ve=(e,t,i)=>{i.register(e,t)};function B(e){return typeof e>"u"||e===null||e===""||Array.isArray(e)&&!e.length}const Fe=p.createDomain("response"),xe=y.createFactory(({client:e})=>{const t=Fe.store({}),i=p.createEvent(),g=p.createEvent(),m=p.createApi(t,{register(o,s){return{...o,[s.fieldId]:s.response}},registerBatch(o,s){return{...o,...s}},clear(o,s){const{[s]:c,...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([c,f])=>{let l=f;const k=e.fields.getById(c).getState();if(!k){s.push({fieldId:c,userMessage:`Field '${c}' not found`,systemMessage:`No field with ID '${c}' exists. Available field IDs are: ${Object.keys(e.fields.listStore.getState()).join(",")}.`,value:l});return}if(k.multiple&&(typeof l=="string"||typeof l=="number"||typeof l=="boolean")&&(l=[l]),k.validation&&!T.isEmpty(k.validation)&&!B(l)){const F=await w.evaluateRuleLogic(e,k.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(k.required&&B(l)){s.push({fieldId:c,userMessage:"This field is required",systemMessage:"Field is required.",value:l});return}if(!k.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(k.options){const F=k.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}:(m.registerBatch(s),{errors:[]})}const u=t.map(o=>o),S=t.map(o=>Object.keys(o).map(c=>({fieldId:c,value:o[c]})));function v(o){const s=e.fields.getById(o),c=t.map(f=>f[o]||null);return p.combine({f:s,r:c},({f,r:l})=>l||(f!=null&&f.defaultValue?f.defaultValue:null))}function a(o){const s=e.fields.getByName(o);return p.combine({f:s,s:t},({f:c,s:f})=>{const l=c&&f[c.id]||null;return l||(c!=null&&c.defaultValue?c.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:u,getByFieldId:v,getByFieldName:a}});function we(e){return y.invoke(xe,e)}function Ie(){if(j.supportsCryptoRandomUUID())return crypto.randomUUID();const e=Date.now().toString(36),t=Math.random().toString(36).substring(2,15),i=Math.random().toString(36).substring(2,15),g=Math.random().toString(36).substring(2,15);return`${e}-${t}-${i}-${g}`}const he=()=>({id:Ie()}),be=x.createStorageKey("session","global"),Ee=()=>{if(!j.supportsLocalStorage())return null;const e=x.localStore.get(be);let t=e.isSet()?e.json():null;return t||(t=he(),e.set(t)),t},Ae=()=>Ee();exports.createActionIndex=ke;exports.createComponentIndex=Y;exports.createExperienceIndex=L;exports.createFeatureIndex=ce;exports.createFieldIndex=me;exports.createFrameworkIndex=X;exports.createHistory=ge;exports.createPredicateIndex=oe;exports.createResponseIndex=we;exports.initialiseExperience=P;exports.initialiseExperiences=_;exports.initialiseSession=Ae;exports.ping=re;exports.setupAction=ve;exports.setupComponent=J;exports.setupExperience=q;exports.setupFeature=ue;exports.setupField=fe;exports.setupFramework=Z;exports.setupPredicate=ie;
|