@picked/client 0.0.16 → 0.0.17
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-BpQMqclI.cjs +1 -0
- package/dist/{experience-instance-CeuHLrdL.js → experience-instance-C2AnM2J_.js} +87 -86
- 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-CxJHSMaR.js → user-session-BfQ93xNC.js} +80 -77
- package/dist/user-session-Tmc9ZSAw.cjs +1 -0
- package/package.json +1 -1
- package/dist/experience-instance-B2l_MG7I.cjs +0 -1
- package/dist/user-session-X9sLAm_B.cjs +0 -1
package/dist/cjs/index.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";var m=Object.defineProperty;var y=(i,e,t)=>e in i?m(i,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):i[e]=t;var o=(i,e,t)=>y(i,typeof e!="symbol"?e+"":e,t);Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const r=require("../user-session-
|
|
1
|
+
"use strict";var m=Object.defineProperty;var y=(i,e,t)=>e in i?m(i,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):i[e]=t;var o=(i,e,t)=>y(i,typeof e!="symbol"?e+"":e,t);Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const r=require("../user-session-Tmc9ZSAw.cjs"),d=require("../logger-BsmHUUw1.cjs"),l=require("../experience-instance-BpQMqclI.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.17";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-Tmc9ZSAw.cjs");require("../../../experience-instance-BpQMqclI.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-BpQMqclI.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-BfQ93xNC.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-C2AnM2J_.js";
|
|
7
|
+
import { i as pe } from "../experience-instance-C2AnM2J_.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.
|
|
32
|
+
const T = () => W(), V = () => "0.0.17";
|
|
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-BfQ93xNC.js";
|
|
3
|
+
import "../../../experience-instance-C2AnM2J_.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-C2AnM2J_.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"),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,4 +1,4 @@
|
|
|
1
|
-
import { createDomain as ht, createEvent as
|
|
1
|
+
import { createDomain as ht, createEvent as O, combine as C, createApi as ot, createEffect as M, attach as _, 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 B(t),
|
|
51
|
+
"!": async (t) => !await B(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 B(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 B(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 B(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 B(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 B(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 B(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 B(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 B(t) {
|
|
216
|
+
return ct(t) ? B(await t) : !(Array.isArray(t) && t.length === 0) && !!t;
|
|
217
217
|
}
|
|
218
218
|
function kt(t) {
|
|
219
219
|
return Object.keys(t)[0];
|
|
@@ -255,12 +255,13 @@ function bt(t) {
|
|
|
255
255
|
(e) => e instanceof HTMLElement
|
|
256
256
|
);
|
|
257
257
|
}
|
|
258
|
-
|
|
258
|
+
const vt = "open";
|
|
259
|
+
function Ot(t) {
|
|
259
260
|
if (!wt())
|
|
260
261
|
throw new Error("Shadow DOM is not supported in this environment");
|
|
261
|
-
return t.attachShadow({ mode:
|
|
262
|
+
return t.attachShadow({ mode: vt });
|
|
262
263
|
}
|
|
263
|
-
function
|
|
264
|
+
function zt() {
|
|
264
265
|
return new Promise((t, e) => {
|
|
265
266
|
if (!at()) {
|
|
266
267
|
e();
|
|
@@ -275,18 +276,18 @@ function Bt(t, e) {
|
|
|
275
276
|
});
|
|
276
277
|
r.observe(document.body, { childList: !0, subtree: !0 });
|
|
277
278
|
}
|
|
278
|
-
const
|
|
279
|
-
function
|
|
279
|
+
const G = "picked-root", K = "picked-target", _t = "picked-root";
|
|
280
|
+
function Jt(t, e) {
|
|
280
281
|
return [
|
|
281
282
|
...t,
|
|
282
283
|
// Target and replace picked-root web components
|
|
283
284
|
{
|
|
284
|
-
selector: `${
|
|
285
|
+
selector: `${_t}[experience-id="${e}"]`,
|
|
285
286
|
placement: "replace"
|
|
286
287
|
}
|
|
287
288
|
].flatMap((n) => {
|
|
288
289
|
const s = bt(n.selector).filter(
|
|
289
|
-
(a) =>
|
|
290
|
+
(a) => !$t(a, e) && !Ft(a, e)
|
|
290
291
|
);
|
|
291
292
|
return {
|
|
292
293
|
...n,
|
|
@@ -294,25 +295,25 @@ function zt(t, e) {
|
|
|
294
295
|
};
|
|
295
296
|
});
|
|
296
297
|
}
|
|
297
|
-
function Jt(t, e) {
|
|
298
|
-
return t.flatMap((r) => r.elements.map((n) => Mt(n, r.placement, e)));
|
|
299
|
-
}
|
|
300
298
|
function Qt(t, e) {
|
|
301
|
-
t.
|
|
299
|
+
return t.flatMap((r) => r.elements.map((n) => Tt(n, r.placement, e)));
|
|
302
300
|
}
|
|
303
|
-
function
|
|
304
|
-
|
|
301
|
+
function Yt(t, e) {
|
|
302
|
+
t.classList.add(K), t.classList.add(`${K}-${e}`);
|
|
303
|
+
}
|
|
304
|
+
function $t(t, e) {
|
|
305
|
+
return e ? t.classList.contains(`${K}-${e}`) : t.classList.contains(`${K}`);
|
|
305
306
|
}
|
|
306
|
-
function
|
|
307
|
-
return e ? t.classList.contains(`${
|
|
307
|
+
function Ft(t, e) {
|
|
308
|
+
return e ? t.classList.contains(`${G}-${e}`) : t.classList.contains(G);
|
|
308
309
|
}
|
|
309
|
-
function
|
|
310
|
+
function Mt(t) {
|
|
310
311
|
const e = document.createElement("div");
|
|
311
|
-
return e.style.display = "block", e.classList.add(
|
|
312
|
+
return e.style.display = "block", e.classList.add(G), e.classList.add(`${G}-${t}`), e;
|
|
312
313
|
}
|
|
313
|
-
function
|
|
314
|
+
function Tt(t, e, r) {
|
|
314
315
|
let n;
|
|
315
|
-
const s =
|
|
316
|
+
const s = Mt(r);
|
|
316
317
|
if (t instanceof Document)
|
|
317
318
|
n = t.body.appendChild(s);
|
|
318
319
|
else {
|
|
@@ -337,13 +338,13 @@ function Mt(t, e, r) {
|
|
|
337
338
|
}
|
|
338
339
|
return n;
|
|
339
340
|
}
|
|
340
|
-
function
|
|
341
|
+
function Lt(t) {
|
|
341
342
|
return t.type === "conditional";
|
|
342
343
|
}
|
|
343
344
|
function j(t) {
|
|
344
345
|
return t.type === "step";
|
|
345
346
|
}
|
|
346
|
-
function
|
|
347
|
+
function Dt(t) {
|
|
347
348
|
return t.type === "experience";
|
|
348
349
|
}
|
|
349
350
|
function nt(t) {
|
|
@@ -355,7 +356,7 @@ function rt(t) {
|
|
|
355
356
|
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) => {
|
|
356
357
|
const c = t.find((d) => d.id === o.destinationNodeId);
|
|
357
358
|
return c ? ut(t, e, c, !1, s) : [];
|
|
358
|
-
})),
|
|
359
|
+
})), Pt = (t, e, r) => ut(t, e, r, !0, /* @__PURE__ */ new Set()), ft = (t, e, r, n, s = /* @__PURE__ */ new Set()) => {
|
|
359
360
|
if (s.has(r.id)) return [-1, -1];
|
|
360
361
|
s.add(r.id);
|
|
361
362
|
const a = e.filter((d) => d.sourceNodeId === r.id);
|
|
@@ -364,24 +365,24 @@ const ut = (t, e, r, n, s = /* @__PURE__ */ new Set()) => s.has(r.id) ? [] : (s.
|
|
|
364
365
|
for (const d of a) {
|
|
365
366
|
const y = t.find((P) => P.id === d.destinationNodeId);
|
|
366
367
|
if (!y) continue;
|
|
367
|
-
const [k,
|
|
368
|
+
const [k, $] = ft(
|
|
368
369
|
t,
|
|
369
370
|
e,
|
|
370
371
|
y,
|
|
371
372
|
!1,
|
|
372
373
|
new Set(s)
|
|
373
374
|
);
|
|
374
|
-
k !== -1 && (o = Math.min(o, k + 1), c = Math.max(c,
|
|
375
|
+
k !== -1 && (o = Math.min(o, k + 1), c = Math.max(c, $ + 1));
|
|
375
376
|
}
|
|
376
377
|
return o === 1 / 0 ? [-1, -1] : [o, c];
|
|
377
|
-
},
|
|
378
|
+
}, Rt = (t, e, r) => ft(t, e, r, !0, /* @__PURE__ */ new Set()), lt = (t, e, r, n = /* @__PURE__ */ new Set()) => {
|
|
378
379
|
if (n.has(r.id)) return [-1, -1];
|
|
379
380
|
if (n.add(r.id), r.type === "origin") return [0, 0];
|
|
380
381
|
const s = e.filter((c) => c.destinationNodeId === r.id);
|
|
381
382
|
if (s.length === 0) return [-1, -1];
|
|
382
383
|
let a = 1 / 0, o = -1 / 0;
|
|
383
384
|
for (const c of s) {
|
|
384
|
-
const d = t.find((
|
|
385
|
+
const d = t.find(($) => $.id === c.sourceNodeId);
|
|
385
386
|
if (!d) continue;
|
|
386
387
|
const [y, k] = lt(
|
|
387
388
|
t,
|
|
@@ -392,7 +393,7 @@ const ut = (t, e, r, n, s = /* @__PURE__ */ new Set()) => s.has(r.id) ? [] : (s.
|
|
|
392
393
|
y !== -1 && (a = Math.min(a, y + 1), o = Math.max(o, k + 1));
|
|
393
394
|
}
|
|
394
395
|
return a === 1 / 0 ? [-1, -1] : [a, o];
|
|
395
|
-
},
|
|
396
|
+
}, Ct = (t, e, r) => lt(t, e, r, /* @__PURE__ */ new Set()), dt = (t) => t.find((r) => r.type === "origin") || null, X = (t, e, r) => {
|
|
396
397
|
if (!t)
|
|
397
398
|
return dt(e);
|
|
398
399
|
const n = r.find((a) => a.sourceNodeId === t.id);
|
|
@@ -401,19 +402,19 @@ const ut = (t, e, r, n, s = /* @__PURE__ */ new Set()) => s.has(r.id) ? [] : (s.
|
|
|
401
402
|
const s = e.find((a) => a.id === n.destinationNodeId);
|
|
402
403
|
return s || null;
|
|
403
404
|
};
|
|
404
|
-
async function
|
|
405
|
+
async function Ht(t, e, r, n) {
|
|
405
406
|
const s = t ? "true" : "false", a = n.find(
|
|
406
407
|
(o) => o.sourceNodeHandle === s && o.sourceNodeId === e
|
|
407
408
|
);
|
|
408
409
|
return r.find((o) => o.id === (a == null ? void 0 : a.destinationNodeId));
|
|
409
410
|
}
|
|
410
|
-
const z = ht("experience-instance"),
|
|
411
|
+
const z = ht("experience-instance"), jt = it(
|
|
411
412
|
({
|
|
412
413
|
client: t,
|
|
413
414
|
experience: e,
|
|
414
415
|
target: r
|
|
415
416
|
}) => {
|
|
416
|
-
const n =
|
|
417
|
+
const n = O(), s = O(), a = O(), o = O(), c = O(), d = O(), y = e.componentStore, k = z.store("transitioning"), $ = t.history.entriesStore.map((i) => i.filter((f) => f.experienceId === e.id)), P = $.map((i) => i.filter((f) => j(f.node))), x = $.map((i) => {
|
|
417
418
|
var f;
|
|
418
419
|
return ((f = i[i.length - 1]) == null ? void 0 : f.node) || null;
|
|
419
420
|
}), u = C(
|
|
@@ -423,39 +424,39 @@ const z = ht("experience-instance"), Ht = it(
|
|
|
423
424
|
), S = C(
|
|
424
425
|
e.treeStore,
|
|
425
426
|
x,
|
|
426
|
-
({ nodes: i, edges: f }, l) => l ?
|
|
427
|
+
({ nodes: i, edges: f }, l) => l ? Pt(i, f, l) : []
|
|
427
428
|
), v = C(
|
|
428
429
|
e.treeStore,
|
|
429
430
|
x,
|
|
430
|
-
({ nodes: i, edges: f }, l) => l ?
|
|
431
|
+
({ nodes: i, edges: f }, l) => l ? Ct(i, f, l) : [-1, -1]
|
|
431
432
|
), T = C(
|
|
432
433
|
e.treeStore,
|
|
433
434
|
x,
|
|
434
|
-
({ nodes: i, edges: f }, l) => l ?
|
|
435
|
-
), A = z.store(!1),
|
|
435
|
+
({ nodes: i, edges: f }, l) => l ? Rt(i, f, l) : [-1, -1]
|
|
436
|
+
), A = z.store(!1), F = ot(A, {
|
|
436
437
|
open: () => !0,
|
|
437
438
|
close: () => !1,
|
|
438
439
|
toggle: (i) => !i,
|
|
439
440
|
set: (i, f) => f
|
|
440
441
|
}), pt = M(async () => {
|
|
441
442
|
t.history.back({ experienceId: e.id });
|
|
442
|
-
}), gt =
|
|
443
|
+
}), gt = _({
|
|
443
444
|
source: e.treeStore,
|
|
444
445
|
effect: async (i, f) => {
|
|
445
446
|
const l = i.nodes.find((w) => j(w) && w.stepId === f);
|
|
446
447
|
l && t.history.push({ experienceId: e.id, node: l });
|
|
447
448
|
}
|
|
448
|
-
}), J =
|
|
449
|
+
}), J = _({
|
|
449
450
|
source: x,
|
|
450
451
|
effect: (i) => {
|
|
451
452
|
}
|
|
452
|
-
}),
|
|
453
|
+
}), U = _({
|
|
453
454
|
source: e.treeStore,
|
|
454
455
|
effect: async ({ nodes: i }) => dt(i)
|
|
455
|
-
}),
|
|
456
|
+
}), V = _({
|
|
456
457
|
source: e.treeStore,
|
|
457
458
|
effect: async ({ nodes: i, edges: f }, l) => X(l, i, f)
|
|
458
|
-
}), q =
|
|
459
|
+
}), q = _({
|
|
459
460
|
source: e.treeStore,
|
|
460
461
|
effect: async ({ nodes: i, edges: f, conditionals: l }, w) => {
|
|
461
462
|
if (!w)
|
|
@@ -464,9 +465,9 @@ const z = ht("experience-instance"), Ht = it(
|
|
|
464
465
|
if (!L)
|
|
465
466
|
return;
|
|
466
467
|
const E = w.id, h = await et(t, L.condition);
|
|
467
|
-
return
|
|
468
|
+
return Ht(!!h, E, i, f);
|
|
468
469
|
}
|
|
469
|
-
}), Q =
|
|
470
|
+
}), Q = _({
|
|
470
471
|
source: e.treeStore,
|
|
471
472
|
effect: async ({ nodes: i, edges: f }, l) => {
|
|
472
473
|
if (!l || !rt(l))
|
|
@@ -503,46 +504,46 @@ const z = ht("experience-instance"), Ht = it(
|
|
|
503
504
|
} catch (E) {
|
|
504
505
|
I("warn", `Action '${w}' failed:`, E);
|
|
505
506
|
const h = f.find(
|
|
506
|
-
(
|
|
507
|
+
(W) => W.sourceNodeId === l.id && W.sourceNodeHandle === "false"
|
|
507
508
|
);
|
|
508
509
|
if (!h)
|
|
509
510
|
return I("warn", `No 'false' edge found for action node ${l.id}`), null;
|
|
510
|
-
const b = i.find((
|
|
511
|
+
const b = i.find((W) => W.id === h.destinationNodeId);
|
|
511
512
|
return I("info", `Action '${w}' failed, moving to node ${b == null ? void 0 : b.id}`), b || null;
|
|
512
513
|
}
|
|
513
514
|
}
|
|
514
515
|
}), mt = M((i) => {
|
|
515
516
|
if (i)
|
|
516
517
|
return t.launchExperienceById(i.experienceId);
|
|
517
|
-
}), Y =
|
|
518
|
+
}), Y = _({
|
|
518
519
|
source: [x, e.treeStore],
|
|
519
520
|
effect: async ([i, { nodes: f, edges: l }]) => X(i, f, l)
|
|
520
|
-
}), R =
|
|
521
|
+
}), R = _({
|
|
521
522
|
source: [x, e.treeStore],
|
|
522
523
|
effect: async ([i, { nodes: f, edges: l }]) => X(i, f, l)
|
|
523
524
|
}), St = M((i) => {
|
|
524
525
|
t.history.push({ experienceId: e.id, node: i });
|
|
525
|
-
}), Z =
|
|
526
|
+
}), Z = _({
|
|
526
527
|
source: e.configStore,
|
|
527
528
|
effect: async ({ initializeOpenLogic: i }) => At(i) ? !!await et(t, i) : i ?? !1
|
|
528
529
|
});
|
|
529
530
|
return yt({
|
|
530
531
|
source: x,
|
|
531
|
-
match: (i) => i ?
|
|
532
|
+
match: (i) => i ? Lt(i) ? "condition" : j(i) ? "step" : Dt(i) ? "launchExperience" : nt(i) ? "origin" : rt(i) ? "action" : "other" : "none",
|
|
532
533
|
cases: {
|
|
533
|
-
none:
|
|
534
|
-
origin:
|
|
534
|
+
none: U,
|
|
535
|
+
origin: V,
|
|
535
536
|
condition: q,
|
|
536
537
|
step: J,
|
|
537
538
|
launchExperience: mt,
|
|
538
539
|
action: Q,
|
|
539
|
-
__:
|
|
540
|
+
__: O()
|
|
540
541
|
}
|
|
541
542
|
}), m({
|
|
542
543
|
clock: [
|
|
543
544
|
q.doneData,
|
|
544
|
-
W.doneData,
|
|
545
545
|
V.doneData,
|
|
546
|
+
U.doneData,
|
|
546
547
|
R.doneData,
|
|
547
548
|
Y.doneData,
|
|
548
549
|
Q.doneData
|
|
@@ -585,8 +586,8 @@ const z = ht("experience-instance"), Ht = it(
|
|
|
585
586
|
}), m({ clock: o, target: gt }), m({
|
|
586
587
|
source: C([
|
|
587
588
|
q.pending,
|
|
588
|
-
W.pending,
|
|
589
589
|
V.pending,
|
|
590
|
+
U.pending,
|
|
590
591
|
R.pending
|
|
591
592
|
]),
|
|
592
593
|
fn: (i) => i.some(Boolean) ? "transitioning" : "ready",
|
|
@@ -644,10 +645,10 @@ const z = ht("experience-instance"), Ht = it(
|
|
|
644
645
|
stateStore: k,
|
|
645
646
|
// open close
|
|
646
647
|
isOpenStore: A,
|
|
647
|
-
open:
|
|
648
|
-
close:
|
|
649
|
-
toggleOpen:
|
|
650
|
-
setOpen:
|
|
648
|
+
open: F.open,
|
|
649
|
+
close: F.close,
|
|
650
|
+
toggleOpen: F.toggle,
|
|
651
|
+
setOpen: F.set,
|
|
651
652
|
// nodes
|
|
652
653
|
treeStore: e.treeStore,
|
|
653
654
|
currentNodeStore: x,
|
|
@@ -663,11 +664,11 @@ const z = ht("experience-instance"), Ht = it(
|
|
|
663
664
|
};
|
|
664
665
|
}
|
|
665
666
|
);
|
|
666
|
-
function
|
|
667
|
-
return st(
|
|
667
|
+
function Wt(t) {
|
|
668
|
+
return st(jt, t);
|
|
668
669
|
}
|
|
669
670
|
const Gt = it(({ client: t }) => {
|
|
670
|
-
const e = z.store({}), r =
|
|
671
|
+
const e = z.store({}), r = O(), n = O(), s = O(), a = ot(e, {
|
|
671
672
|
register(u, S) {
|
|
672
673
|
const v = [
|
|
673
674
|
...u[S.experienceId] ?? []
|
|
@@ -680,7 +681,7 @@ const Gt = it(({ client: t }) => {
|
|
|
680
681
|
unregister(u, S) {
|
|
681
682
|
var A;
|
|
682
683
|
const v = S.experienceId, T = (A = u[v]) == null ? void 0 : A.filter(
|
|
683
|
-
(
|
|
684
|
+
(F) => F !== S
|
|
684
685
|
);
|
|
685
686
|
return {
|
|
686
687
|
...u,
|
|
@@ -688,7 +689,7 @@ const Gt = it(({ client: t }) => {
|
|
|
688
689
|
};
|
|
689
690
|
}
|
|
690
691
|
}), o = M(
|
|
691
|
-
({ experience: u, target: S }) =>
|
|
692
|
+
({ experience: u, target: S }) => Wt({ client: t, experience: u, target: S })
|
|
692
693
|
), c = M((u) => {
|
|
693
694
|
a.register(u);
|
|
694
695
|
}), d = M(
|
|
@@ -721,11 +722,11 @@ const Gt = it(({ client: t }) => {
|
|
|
721
722
|
);
|
|
722
723
|
return;
|
|
723
724
|
}
|
|
724
|
-
const A =
|
|
725
|
+
const A = Ot(T);
|
|
725
726
|
try {
|
|
726
727
|
v.render(A, S.component, t, u);
|
|
727
|
-
} catch (
|
|
728
|
-
I("error",
|
|
728
|
+
} catch (F) {
|
|
729
|
+
I("error", F);
|
|
729
730
|
}
|
|
730
731
|
});
|
|
731
732
|
m({
|
|
@@ -751,7 +752,7 @@ const Gt = it(({ client: t }) => {
|
|
|
751
752
|
clock: n,
|
|
752
753
|
target: k
|
|
753
754
|
});
|
|
754
|
-
function
|
|
755
|
+
function $(u, S) {
|
|
755
756
|
r({ experience: u, target: S });
|
|
756
757
|
}
|
|
757
758
|
const P = e.map((u) => Object.values(u).flat());
|
|
@@ -759,23 +760,23 @@ const Gt = it(({ client: t }) => {
|
|
|
759
760
|
return e.map((S) => S[u] || [], { skipVoid: !1 });
|
|
760
761
|
}
|
|
761
762
|
return {
|
|
762
|
-
spawn:
|
|
763
|
+
spawn: $,
|
|
763
764
|
getByExperienceId: x,
|
|
764
765
|
listStore: P
|
|
765
766
|
};
|
|
766
767
|
});
|
|
767
|
-
function
|
|
768
|
+
function Zt(t) {
|
|
768
769
|
return st(Gt, t);
|
|
769
770
|
}
|
|
770
771
|
export {
|
|
771
|
-
|
|
772
|
-
|
|
773
|
-
|
|
774
|
-
|
|
772
|
+
Wt as a,
|
|
773
|
+
Qt as b,
|
|
774
|
+
Zt as c,
|
|
775
|
+
zt as d,
|
|
775
776
|
et as e,
|
|
776
777
|
At as f,
|
|
777
|
-
|
|
778
|
+
Jt as g,
|
|
778
779
|
j as h,
|
|
779
|
-
|
|
780
|
-
|
|
780
|
+
Ft as i,
|
|
781
|
+
Yt as t
|
|
781
782
|
};
|
|
@@ -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;sBAwM5B,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;AAID,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 w, createApi as F, createEffect as j, attach as U, sample as b, 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-C2AnM2J_.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 D, s as M, l as A } from "./storage-Cb_71y48.js";
|
|
6
|
+
import { g as Y } from "./id-BW-g3y32.js";
|
|
7
|
+
import { i as J } from "./object-JwZ58NOH.js";
|
|
8
|
+
import { e as K, k as Q } from "./supports-DBMT17KZ.js";
|
|
9
|
+
const _ = w("experience"), W = k(
|
|
10
10
|
({ client: e, experience: t }) => {
|
|
11
|
-
const i = _.store(t), g =
|
|
11
|
+
const i = _.store(t), g = F(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 = F(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 = w("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 = F(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 = w("framework"), ae = k(({ client: e }) => {
|
|
140
|
+
const t = ie.store({}), i = F(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 = D("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 = w("predicate"), ge = k(({ client: e }) => {
|
|
191
|
+
const t = le.store({}), i = F(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 = w("feature"), de = k(({ client: e }) => {
|
|
224
|
+
const t = V.store({}), i = V.store([]), g = F(t, {
|
|
225
225
|
register(a, o) {
|
|
226
226
|
return {
|
|
227
227
|
...a,
|
|
@@ -254,47 +254,44 @@ const _e = (e, t, i) => {
|
|
|
254
254
|
key: o,
|
|
255
255
|
storage: s = "local"
|
|
256
256
|
}) => {
|
|
257
|
-
const c =
|
|
257
|
+
const c = D(`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 = D(`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(
|
|
268
|
+
const l = o.find(
|
|
269
|
+
($) => $.id === s && $.key === f
|
|
270
|
+
);
|
|
269
271
|
if (l)
|
|
270
272
|
return l;
|
|
271
273
|
const y = a[s];
|
|
272
274
|
if (!y)
|
|
273
275
|
throw new Error(`Feature with id '${s}' not found`);
|
|
274
|
-
const
|
|
275
|
-
if (
|
|
276
|
-
const
|
|
277
|
-
return { id: y.id, bucket:
|
|
276
|
+
const h = n.get(`${s}:${f}`);
|
|
277
|
+
if (h !== void 0) {
|
|
278
|
+
const $ = await h;
|
|
279
|
+
return { id: y.id, bucket: $, key: f, storage: y.feature.storage };
|
|
278
280
|
}
|
|
279
|
-
const
|
|
280
|
-
n.set(`${s}:${f}`,
|
|
281
|
-
const
|
|
282
|
-
return { id: y.id, bucket:
|
|
281
|
+
const R = c();
|
|
282
|
+
n.set(`${s}:${f}`, R);
|
|
283
|
+
const x = await R;
|
|
284
|
+
return { id: y.id, bucket: x, key: f, storage: y.feature.storage };
|
|
283
285
|
}
|
|
284
286
|
});
|
|
285
|
-
|
|
287
|
+
b({
|
|
286
288
|
clock: g.register,
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
return s ? s.feature.key !== o.feature.feature.key || s.feature.storage !== o.feature.feature.storage : !0;
|
|
291
|
-
},
|
|
292
|
-
fn: (a, o) => {
|
|
293
|
-
const { id: s, feature: c } = o;
|
|
294
|
-
return { id: s, key: c.feature.key, storage: c.feature.storage };
|
|
289
|
+
fn: (a) => {
|
|
290
|
+
const { id: o, feature: s } = a;
|
|
291
|
+
return { id: o, key: s.feature.key, storage: s.feature.storage };
|
|
295
292
|
},
|
|
296
293
|
target: d
|
|
297
|
-
}),
|
|
294
|
+
}), b({
|
|
298
295
|
source: t,
|
|
299
296
|
clock: u.doneData,
|
|
300
297
|
fn: (a, o) => {
|
|
@@ -309,7 +306,9 @@ const _e = (e, t, i) => {
|
|
|
309
306
|
allFeaturesStore: a,
|
|
310
307
|
resolvedFeaturesStore: o
|
|
311
308
|
}) => Object.values(a).map((s) => {
|
|
312
|
-
const c = o.find(
|
|
309
|
+
const c = o.find(
|
|
310
|
+
(f) => f.id === s.id && f.key === s.feature.key
|
|
311
|
+
);
|
|
313
312
|
return c ? {
|
|
314
313
|
id: s.id,
|
|
315
314
|
name: s.feature.name,
|
|
@@ -325,19 +324,23 @@ const _e = (e, t, i) => {
|
|
|
325
324
|
};
|
|
326
325
|
})
|
|
327
326
|
);
|
|
328
|
-
|
|
327
|
+
b({
|
|
329
328
|
clock: u.doneData,
|
|
330
329
|
source: { resolvedFeatures: i },
|
|
331
|
-
filter: ({ resolvedFeatures: a }, { id: o }) => !a.some(
|
|
330
|
+
filter: ({ resolvedFeatures: a }, { id: o, key: s }) => !a.some(
|
|
331
|
+
(f) => f.id === o && f.key === s
|
|
332
|
+
),
|
|
332
333
|
fn: (a, o) => o,
|
|
333
334
|
target: e.eventBus.prepend((a) => ({
|
|
334
335
|
type: "feature_decide",
|
|
335
336
|
feature: a
|
|
336
337
|
}))
|
|
337
|
-
}),
|
|
338
|
+
}), b({
|
|
338
339
|
clock: [d.doneData, u.doneData],
|
|
339
340
|
source: i,
|
|
340
|
-
fn: (a, o) => !o || a.some(
|
|
341
|
+
fn: (a, o) => !o || a.some(
|
|
342
|
+
(c) => c.id === o.id && c.key === o.key
|
|
343
|
+
) ? a : [...a, o],
|
|
341
344
|
target: i
|
|
342
345
|
});
|
|
343
346
|
function S(a) {
|
|
@@ -354,11 +357,11 @@ function Ue(e) {
|
|
|
354
357
|
}
|
|
355
358
|
const He = (e, t, i) => {
|
|
356
359
|
i.register(e, t);
|
|
357
|
-
}, I =
|
|
360
|
+
}, I = w("history");
|
|
358
361
|
function T(e, t) {
|
|
359
362
|
return {
|
|
360
363
|
// eslint-disable-next-line sonarjs/pseudo-random
|
|
361
|
-
id:
|
|
364
|
+
id: Y(`history-entry-${Date.now()}-${Math.random()}}`),
|
|
362
365
|
node: t,
|
|
363
366
|
at: Date.now(),
|
|
364
367
|
experienceId: e
|
|
@@ -405,8 +408,8 @@ const pe = k(() => {
|
|
|
405
408
|
function qe() {
|
|
406
409
|
return v(pe);
|
|
407
410
|
}
|
|
408
|
-
const fe =
|
|
409
|
-
const e = fe.store({}), t =
|
|
411
|
+
const fe = w("field"), me = k(() => {
|
|
412
|
+
const e = fe.store({}), t = F(e, {
|
|
410
413
|
register(r, n) {
|
|
411
414
|
return {
|
|
412
415
|
...r,
|
|
@@ -436,8 +439,8 @@ function ze() {
|
|
|
436
439
|
}
|
|
437
440
|
const Ge = (e, t) => {
|
|
438
441
|
t.register(e);
|
|
439
|
-
}, ye =
|
|
440
|
-
const e = ye.store({}), t =
|
|
442
|
+
}, ye = w("action"), Se = k(() => {
|
|
443
|
+
const e = ye.store({}), t = F(e, {
|
|
441
444
|
register(d, r) {
|
|
442
445
|
return {
|
|
443
446
|
...d,
|
|
@@ -461,17 +464,17 @@ const Ge = (e, t) => {
|
|
|
461
464
|
listStore: g
|
|
462
465
|
};
|
|
463
466
|
});
|
|
464
|
-
function
|
|
467
|
+
function Ye() {
|
|
465
468
|
return v(Se);
|
|
466
469
|
}
|
|
467
|
-
const
|
|
470
|
+
const Je = (e, t, i) => {
|
|
468
471
|
i.register(e, t);
|
|
469
472
|
};
|
|
470
473
|
function N(e) {
|
|
471
474
|
return typeof e > "u" || e === null || e === "" || Array.isArray(e) && !e.length;
|
|
472
475
|
}
|
|
473
|
-
const ke =
|
|
474
|
-
const t = ke.store({}), i = O(), g = O(), p =
|
|
476
|
+
const ke = w("response"), ve = k(({ client: e }) => {
|
|
477
|
+
const t = ke.store({}), i = O(), g = O(), p = F(t, {
|
|
475
478
|
register(o, s) {
|
|
476
479
|
return {
|
|
477
480
|
...o,
|
|
@@ -510,20 +513,20 @@ const ke = h("response"), ve = k(({ client: e }) => {
|
|
|
510
513
|
});
|
|
511
514
|
return;
|
|
512
515
|
}
|
|
513
|
-
if (y.multiple && (typeof l == "string" || typeof l == "number" || typeof l == "boolean") && (l = [l]), y.validation && !
|
|
514
|
-
const
|
|
516
|
+
if (y.multiple && (typeof l == "string" || typeof l == "number" || typeof l == "boolean") && (l = [l]), y.validation && !J(y.validation) && !N(l)) {
|
|
517
|
+
const h = await L(e, y.validation, {
|
|
515
518
|
$input: l
|
|
516
519
|
});
|
|
517
|
-
if (typeof
|
|
520
|
+
if (typeof h == "string") {
|
|
518
521
|
s.push({
|
|
519
522
|
fieldId: c,
|
|
520
|
-
userMessage:
|
|
521
|
-
systemMessage: `Field validation resulted in an error: ${
|
|
523
|
+
userMessage: h,
|
|
524
|
+
systemMessage: `Field validation resulted in an error: ${h}.`,
|
|
522
525
|
value: l
|
|
523
526
|
});
|
|
524
527
|
return;
|
|
525
528
|
}
|
|
526
|
-
if (
|
|
529
|
+
if (h === !1) {
|
|
527
530
|
s.push({
|
|
528
531
|
fieldId: c,
|
|
529
532
|
userMessage: "This field is invalid",
|
|
@@ -552,11 +555,11 @@ const ke = h("response"), ve = k(({ client: e }) => {
|
|
|
552
555
|
return;
|
|
553
556
|
}
|
|
554
557
|
if (y.options) {
|
|
555
|
-
const
|
|
556
|
-
Array.isArray(l) && (
|
|
558
|
+
const h = y.options.map((x) => x.value), R = Array.isArray(l) ? l : [l];
|
|
559
|
+
Array.isArray(l) && (R.every((x) => h.includes(x)) || s.push({
|
|
557
560
|
fieldId: c,
|
|
558
561
|
userMessage: "This field expects a valid option",
|
|
559
|
-
systemMessage: `Field expects a valid option. Valid options are: ${
|
|
562
|
+
systemMessage: `Field expects a valid option. Valid options are: ${h.join(", ")}`,
|
|
560
563
|
value: l
|
|
561
564
|
}));
|
|
562
565
|
}
|
|
@@ -582,10 +585,10 @@ const ke = h("response"), ve = k(({ client: e }) => {
|
|
|
582
585
|
return l || (c != null && c.defaultValue ? c.defaultValue : null);
|
|
583
586
|
});
|
|
584
587
|
}
|
|
585
|
-
return
|
|
588
|
+
return b({
|
|
586
589
|
clock: i,
|
|
587
590
|
target: p.clearAll
|
|
588
|
-
}),
|
|
591
|
+
}), b({
|
|
589
592
|
clock: g,
|
|
590
593
|
target: p.clear
|
|
591
594
|
}), {
|
|
@@ -600,23 +603,23 @@ const ke = h("response"), ve = k(({ client: e }) => {
|
|
|
600
603
|
getByFieldName: a
|
|
601
604
|
};
|
|
602
605
|
});
|
|
603
|
-
function
|
|
606
|
+
function Ke(e) {
|
|
604
607
|
return v(ve, e);
|
|
605
608
|
}
|
|
606
|
-
function
|
|
609
|
+
function he() {
|
|
607
610
|
if (Q())
|
|
608
611
|
return crypto.randomUUID();
|
|
609
612
|
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);
|
|
610
613
|
return `${e}-${t}-${i}-${g}`;
|
|
611
614
|
}
|
|
612
|
-
const
|
|
613
|
-
id:
|
|
614
|
-
}),
|
|
615
|
-
if (!
|
|
616
|
-
const e = A.get(
|
|
615
|
+
const we = () => ({
|
|
616
|
+
id: he()
|
|
617
|
+
}), Fe = D("session", "global"), be = () => {
|
|
618
|
+
if (!K()) return null;
|
|
619
|
+
const e = A.get(Fe);
|
|
617
620
|
let t = e.isSet() ? e.json() : null;
|
|
618
|
-
return t || (t =
|
|
619
|
-
}, Qe = () =>
|
|
621
|
+
return t || (t = we(), e.set(t)), t;
|
|
622
|
+
}, Qe = () => be();
|
|
620
623
|
export {
|
|
621
624
|
Pe as a,
|
|
622
625
|
je as b,
|
|
@@ -624,15 +627,15 @@ export {
|
|
|
624
627
|
Te as d,
|
|
625
628
|
Le as e,
|
|
626
629
|
Ue as f,
|
|
627
|
-
|
|
630
|
+
Ke as g,
|
|
628
631
|
ze as h,
|
|
629
|
-
|
|
632
|
+
Ye as i,
|
|
630
633
|
Qe as j,
|
|
631
634
|
Ve as k,
|
|
632
635
|
He as l,
|
|
633
636
|
_e as m,
|
|
634
637
|
Ge as n,
|
|
635
|
-
|
|
638
|
+
Je as o,
|
|
636
639
|
Ce as p,
|
|
637
640
|
Oe as q,
|
|
638
641
|
ee as r,
|
|
@@ -0,0 +1 @@
|
|
|
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;
|
package/package.json
CHANGED
|
@@ -1 +0,0 @@
|
|
|
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 +0,0 @@
|
|
|
1
|
-
"use strict";const p=require("effector"),y=require("@withease/factories"),w=require("./experience-instance-B2l_MG7I.cjs"),b=require("./logger-BsmHUUw1.cjs"),x=require("./storage-DuRlyFaY.cjs"),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;
|