@picked/client 0.0.7 → 0.0.8-next.1

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.
Files changed (29) hide show
  1. package/dist/cjs/index.js +1 -1
  2. package/dist/cjs/plugins/create-experience/index.js +1 -1
  3. package/dist/cjs/plugins/responses-browser-storage/index.js +1 -1
  4. package/dist/cjs/plugins/responses-indexeddb/index.js +1 -1
  5. package/dist/cjs/server/index.js +1 -1
  6. package/dist/esm/index.js +323 -291
  7. package/dist/esm/plugins/create-experience/index.js +75 -67
  8. package/dist/esm/plugins/responses-browser-storage/index.js +16 -15
  9. package/dist/esm/plugins/responses-indexeddb/index.js +24 -21
  10. package/dist/esm/server/index.js +1 -1
  11. package/dist/{experience-instance-DYZovD6a.js → experience-instance-C1Ky25uw.js} +17 -16
  12. package/dist/{experience-instance-DwO_yZK0.cjs → experience-instance-DNI5sbjx.cjs} +1 -1
  13. package/dist/types/entities/experience-instance/experience-instance.d.ts +3 -0
  14. package/dist/types/entities/experience-instance/experience-instance.d.ts.map +1 -1
  15. package/dist/types/entities/field/field.d.ts +27 -19
  16. package/dist/types/entities/field/field.d.ts.map +1 -1
  17. package/dist/types/entities/predicate/predicate.d.ts +1 -1
  18. package/dist/types/entities/predicate/predicate.d.ts.map +1 -1
  19. package/dist/types/entities/response/response.d.ts +8 -0
  20. package/dist/types/entities/response/response.d.ts.map +1 -1
  21. package/dist/types/exports.d.ts +2 -0
  22. package/dist/types/exports.d.ts.map +1 -1
  23. package/dist/types/picked.d.ts +12 -6
  24. package/dist/types/picked.d.ts.map +1 -1
  25. package/dist/types/plugins/create-experience/create-experience.d.ts +17 -6
  26. package/dist/types/plugins/create-experience/create-experience.d.ts.map +1 -1
  27. package/dist/types/utils/get-step-fields.d.ts +4 -0
  28. package/dist/types/utils/get-step-fields.d.ts.map +1 -0
  29. package/package.json +1 -1
package/dist/esm/index.js CHANGED
@@ -1,24 +1,24 @@
1
- var q = Object.defineProperty;
2
- var W = (t, e, s) => e in t ? q(t, e, { enumerable: !0, configurable: !0, writable: !0, value: s }) : t[e] = s;
3
- var m = (t, e, s) => W(t, typeof e != "symbol" ? e + "" : e, s);
4
- import { createDomain as x, createApi as b, createEffect as O, attach as G, sample as E, combine as R, createEvent as A } from "effector";
5
- import { createFactory as v, invoke as k } from "@withease/factories";
6
- import { g as z, t as J, c as Y, e as D, i as Q, a as X, b as Z, d as ee } from "../experience-instance-DYZovD6a.js";
7
- import { f as st } from "../experience-instance-DYZovD6a.js";
8
- import { l as w } from "../logger-C9a75KZn.js";
9
- import { c as j, s as B, l as C } from "../storage-D87xFySf.js";
10
- import { a as ot } from "../storage-D87xFySf.js";
11
- import { g as te } from "../id-BW-g3y32.js";
12
- import { i as re } from "../object-JwZ58NOH.js";
13
- import { s as _, a as se, b as ne } from "../supports-yKVnaaMQ.js";
14
- import { g as at, d as ct, i as ut, e as lt, c as dt, f as pt, h as gt, j as ft } from "../supports-yKVnaaMQ.js";
15
- const U = x("experience"), oe = v(
1
+ var W = Object.defineProperty;
2
+ var G = (t, e, s) => e in t ? W(t, e, { enumerable: !0, configurable: !0, writable: !0, value: s }) : t[e] = s;
3
+ var y = (t, e, s) => G(t, typeof e != "symbol" ? e + "" : e, s);
4
+ import { createDomain as F, createApi as b, createEffect as D, attach as J, sample as P, combine as A, createEvent as C } from "effector";
5
+ import { createFactory as k, invoke as x } from "@withease/factories";
6
+ import { g as z, t as Y, c as Q, e as R, i as X, a as Z, b as ee, d as te } from "../experience-instance-C1Ky25uw.js";
7
+ import { f as it } from "../experience-instance-C1Ky25uw.js";
8
+ import { l as v } from "../logger-C9a75KZn.js";
9
+ import { c as B, s as j, l as O } from "../storage-D87xFySf.js";
10
+ import { a as ct } from "../storage-D87xFySf.js";
11
+ import { g as re } from "../id-BW-g3y32.js";
12
+ import { i as se } from "../object-JwZ58NOH.js";
13
+ import { s as _, a as ne, b as oe } from "../supports-yKVnaaMQ.js";
14
+ import { g as lt, d as dt, i as pt, e as gt, c as ft, f as mt, h as yt, j as ht } from "../supports-yKVnaaMQ.js";
15
+ const U = F("experience"), ie = k(
16
16
  ({ client: t, experience: e }) => {
17
17
  const s = U.store(e), o = b(s, {
18
- merge(n, g) {
18
+ merge(n, d) {
19
19
  return {
20
20
  ...n,
21
- ...g.experience
21
+ ...d.experience
22
22
  };
23
23
  }
24
24
  }), i = s.map((n) => ({
@@ -26,8 +26,8 @@ const U = x("experience"), oe = v(
26
26
  name: n.name,
27
27
  decisionLogic: n.decide,
28
28
  targetSelectors: n.targets
29
- })), d = t.components.listStore.map(
30
- (n) => n.find((g) => g.name === `experience:${e.id}`) || n.find((g) => g.name === "experience"),
29
+ })), l = t.components.listStore.map(
30
+ (n) => n.find((d) => d.name === `experience:${e.id}`) || n.find((d) => d.name === "experience"),
31
31
  { skipVoid: !1 }
32
32
  ), r = s.map((n) => ({
33
33
  steps: n.steps,
@@ -39,15 +39,15 @@ const U = x("experience"), oe = v(
39
39
  id: e.id,
40
40
  configStore: i,
41
41
  treeStore: r,
42
- componentStore: d,
42
+ componentStore: l,
43
43
  merge: o.merge
44
44
  };
45
45
  }
46
46
  );
47
- function ie(t) {
48
- return k(oe, t);
47
+ function ae(t) {
48
+ return x(ie, t);
49
49
  }
50
- const ae = v(({ client: t }) => {
50
+ const ce = k(({ client: t }) => {
51
51
  const e = U.store({}), s = b(e, {
52
52
  register(r, n) {
53
53
  return {
@@ -62,47 +62,47 @@ const ae = v(({ client: t }) => {
62
62
  n.merge({ experience: r, strategy: "override" });
63
63
  return;
64
64
  }
65
- const g = ie({ client: t, experience: r });
66
- s.register(g);
65
+ const d = ae({ client: t, experience: r });
66
+ s.register(d);
67
67
  }
68
68
  const i = e.map((r) => Object.values(r));
69
- function d(r) {
69
+ function l(r) {
70
70
  return e.map((n) => n[r], { skipVoid: !1 });
71
71
  }
72
72
  return {
73
73
  register: o,
74
- getById: d,
74
+ getById: l,
75
75
  listStore: i
76
76
  };
77
77
  });
78
- function ce(t) {
79
- return k(ae, t);
78
+ function ue(t) {
79
+ return x(ce, t);
80
80
  }
81
- const ue = (t, e) => {
81
+ const le = (t, e) => {
82
82
  e.register(t);
83
83
  }, H = (t, e) => {
84
84
  const { targetSelectors: s } = e.configStore.getState(), o = z(s, e.id);
85
85
  o.forEach(
86
- ({ elements: d }) => d.forEach((r) => J(r, e.id))
87
- ), Y(o, e.id).forEach((d) => {
88
- t.experienceInstances.spawn(e, d);
86
+ ({ elements: l }) => l.forEach((r) => Y(r, e.id))
87
+ ), Q(o, e.id).forEach((l) => {
88
+ t.experienceInstances.spawn(e, l);
89
89
  });
90
- }, V = async (t) => {
90
+ }, T = async (t) => {
91
91
  await Promise.all(
92
92
  t.experiences.listStore.getState().map(async (e) => {
93
- await le(t, e) && H(t, e);
93
+ await de(t, e) && H(t, e);
94
94
  })
95
95
  );
96
- }, le = async (t, e) => {
96
+ }, de = async (t, e) => {
97
97
  const { type: s, decisionLogic: o, targetSelectors: i } = e.configStore.getState();
98
- return z(i, e.id).length < 1 ? !1 : s === "funnel" ? o ? await D(t, o) === !0 : !1 : i.length === 0 ? !1 : Q(o) ? await D(t, o) === !0 : !0;
99
- }, de = (t, e, s) => {
98
+ return z(i, e.id).length < 1 ? !1 : s === "funnel" ? o ? await R(t, o) === !0 : !1 : i.length === 0 ? !1 : X(o) ? await R(t, o) === !0 : !0;
99
+ }, pe = (t, e, s) => {
100
100
  const o = e.name, i = e.setup(t);
101
101
  if (i) {
102
- const d = s[o] ?? {};
103
- s[o] = Object.freeze({ ...d, ...i });
102
+ const l = s[o] ?? {};
103
+ s[o] = Object.freeze({ ...l, ...i });
104
104
  }
105
- }, pe = x("component"), ge = v(
105
+ }, ge = F("component"), fe = k(
106
106
  ({ client: t, component: e, name: s }) => {
107
107
  const o = t.frameworks.getByName(e.frameworkName);
108
108
  return {
@@ -112,11 +112,11 @@ const ue = (t, e) => {
112
112
  };
113
113
  }
114
114
  );
115
- function fe(t) {
116
- return k(ge, t);
115
+ function me(t) {
116
+ return x(fe, t);
117
117
  }
118
- const me = v(({ client: t }) => {
119
- const e = pe.store({}), s = b(e, {
118
+ const ye = k(({ client: t }) => {
119
+ const e = ge.store({}), s = b(e, {
120
120
  register(r, n) {
121
121
  return {
122
122
  ...r,
@@ -125,30 +125,30 @@ const me = v(({ client: t }) => {
125
125
  }
126
126
  });
127
127
  function o(r, n) {
128
- e.getState()[r] && w(
128
+ e.getState()[r] && v(
129
129
  "warn",
130
130
  `Component '${r}' already registered. Registering again will override the previous registration.`
131
131
  );
132
- const h = fe({ client: t, name: r, component: n });
132
+ const h = me({ client: t, name: r, component: n });
133
133
  s.register(h);
134
134
  }
135
135
  const i = e.map((r) => Object.values(r));
136
- function d(r) {
136
+ function l(r) {
137
137
  return e.map((n) => n[r], { skipVoid: !1 });
138
138
  }
139
139
  return {
140
140
  register: o,
141
- getByName: d,
141
+ getByName: l,
142
142
  listStore: i
143
143
  };
144
144
  });
145
- function ye(t) {
146
- return k(me, t);
145
+ function he(t) {
146
+ return x(ye, t);
147
147
  }
148
- const M = (t, e, s) => {
148
+ const V = (t, e, s) => {
149
149
  s.register(t, e);
150
- }, he = x("framework"), Se = v(({ client: t }) => {
151
- const e = he.store({}), s = b(e, {
150
+ }, Se = F("framework"), we = k(({ client: t }) => {
151
+ const e = Se.store({}), s = b(e, {
152
152
  register(r, n) {
153
153
  return {
154
154
  ...r,
@@ -157,49 +157,49 @@ const M = (t, e, s) => {
157
157
  }
158
158
  });
159
159
  function o(r, n) {
160
- e.getState()[r] && w(
160
+ e.getState()[r] && v(
161
161
  "warn",
162
162
  `Framework '${r}' already registered. Registering again will override the previous registration.`
163
163
  ), s.register({ name: r, framework: n });
164
164
  }
165
165
  const i = e.map((r) => Object.values(r));
166
- function d(r) {
166
+ function l(r) {
167
167
  return e.map((n) => n[r], { skipVoid: !1 });
168
168
  }
169
169
  return {
170
170
  register: o,
171
- getByName: d,
171
+ getByName: l,
172
172
  listStore: i
173
173
  };
174
174
  });
175
- function we(t) {
176
- return k(Se, t);
175
+ function ve(t) {
176
+ return x(we, t);
177
177
  }
178
- const ve = (t, e) => {
178
+ const ke = (t, e) => {
179
179
  e.register(t.name, t);
180
- }, ke = 6e3, N = j("last_ping", "global"), xe = (t) => `${t}/api/v1/ping`, be = async (t) => {
180
+ }, xe = 6e3, M = B("last_ping", "global"), Fe = (t) => `${t}/api/v1/ping`, be = async (t) => {
181
181
  try {
182
- const e = Date.now(), s = localStorage.getItem(N);
183
- if (s && e - parseInt(s) < ke)
182
+ const e = Date.now(), s = localStorage.getItem(M);
183
+ if (s && e - parseInt(s) < xe)
184
184
  return !0;
185
- const o = xe(t.apiUrl), i = {
185
+ const o = Fe(t.apiUrl), i = {
186
186
  projectId: t.projectId,
187
187
  path: window.location.pathname
188
- }, d = JSON.stringify(i), r = {
188
+ }, l = JSON.stringify(i), r = {
189
189
  "Content-Type": "application/json"
190
- }, n = document.getElementById("picked_script"), g = n == null ? void 0 : n.dataset.verceltoken;
191
- g && (r["x-vercel-protection-bypass"] = g);
192
- const u = (await fetch(o, {
190
+ }, n = document.getElementById("picked_script"), d = n == null ? void 0 : n.dataset.verceltoken;
191
+ d && (r["x-vercel-protection-bypass"] = d);
192
+ const c = (await fetch(o, {
193
193
  method: "POST",
194
194
  headers: r,
195
- body: d
195
+ body: l
196
196
  })).ok;
197
- return u && localStorage.setItem(N, e.toString()), u;
197
+ return c && localStorage.setItem(M, e.toString()), c;
198
198
  } catch (e) {
199
- return w("error", e), !1;
199
+ return v("error", e), !1;
200
200
  }
201
201
  };
202
- function Fe(t) {
202
+ function Ie(t) {
203
203
  const e = typeof window < "u", s = {
204
204
  client: t,
205
205
  responses: t.responses.listStore.getState(),
@@ -211,8 +211,8 @@ function Fe(t) {
211
211
  };
212
212
  return Object.freeze(s);
213
213
  }
214
- const Ie = x("predicate"), Ee = v(({ client: t }) => {
215
- const e = Ie.store({}), s = b(e, {
214
+ const Ee = F("predicate"), Pe = k(({ client: t }) => {
215
+ const e = Ee.store({}), s = b(e, {
216
216
  register(r, n) {
217
217
  return {
218
218
  ...r,
@@ -224,117 +224,117 @@ const Ie = x("predicate"), Ee = v(({ client: t }) => {
224
224
  }
225
225
  });
226
226
  function o(r, n) {
227
- e.getState()[r] && w(
227
+ e.getState()[r] && v(
228
228
  "warn",
229
229
  `Predicate '${r}' already registered. Registering again will override the previous registration.`
230
230
  ), s.register(Object.freeze({ name: r, predicate: n }));
231
231
  }
232
232
  const i = e.map((r) => Object.values(r));
233
- function d(r) {
233
+ function l(r) {
234
234
  return e.map((n) => n[r], { skipVoid: !1 });
235
235
  }
236
236
  return {
237
237
  register: o,
238
- getByName: d,
238
+ getByName: l,
239
239
  listStore: i
240
240
  };
241
241
  });
242
- function Pe(t) {
243
- return k(Ee, t);
242
+ function Re(t) {
243
+ return x(Pe, t);
244
244
  }
245
- const je = (t, e, s) => {
245
+ const Be = (t, e, s) => {
246
246
  s.register(t, e);
247
- }, T = x("feature"), Be = v(() => {
248
- const t = T.store({}), e = T.store([]), s = b(t, {
249
- register(u, c) {
247
+ }, N = F("feature"), je = k(() => {
248
+ const t = N.store({}), e = N.store([]), s = b(t, {
249
+ register(c, f) {
250
250
  return {
251
- ...u,
252
- [c.id]: c.feature
251
+ ...c,
252
+ [f.id]: f.feature
253
253
  };
254
254
  }
255
255
  });
256
- function o(u, c) {
257
- t.getState()[u] && w(
256
+ function o(c, f) {
257
+ t.getState()[c] && v(
258
258
  "warn",
259
- `Feature '${u}' already registered. Registering again will override the previous registration.`
259
+ `Feature '${c}' already registered. Registering again will override the previous registration.`
260
260
  );
261
261
  const p = {
262
- id: u,
262
+ id: c,
263
263
  feature: {
264
- ...c,
265
- id: u
264
+ ...f,
265
+ id: c
266
266
  }
267
267
  };
268
268
  s.register(
269
269
  Object.freeze({
270
- id: u,
270
+ id: c,
271
271
  feature: p
272
272
  })
273
273
  );
274
274
  }
275
- const i = O(
275
+ const i = D(
276
276
  async ({
277
- id: u,
278
- key: c,
277
+ id: c,
278
+ key: f,
279
279
  storage: a = "local"
280
280
  }) => {
281
- const p = j(`feature:${u}:${c}`, "global"), l = (a === "session" ? B : C).get(p).boolean();
282
- if (l !== null)
283
- return { id: u, bucket: l };
281
+ const p = B(`feature:${c}:${f}`, "global"), m = (a === "session" ? j : O).get(p).boolean();
282
+ if (m !== null)
283
+ return { id: c, bucket: m };
284
284
  }
285
- ), d = O((u) => {
286
- if (!u)
285
+ ), l = D((c) => {
286
+ if (!c)
287
287
  return null;
288
- const c = j(`feature:${u.id}:${u.key}`, "global");
289
- (u.storage === "session" ? B : C).set(c, u.bucket);
290
- }), r = /* @__PURE__ */ new Map(), n = G({
288
+ const f = B(`feature:${c.id}:${c.key}`, "global");
289
+ (c.storage === "session" ? j : O).set(f, c.bucket);
290
+ }), r = /* @__PURE__ */ new Map(), n = J({
291
291
  source: { allFeaturesStore: t, resolvedFeaturesStore: e },
292
- effect: async ({ allFeaturesStore: u, resolvedFeaturesStore: c }, { id: a, decide: p, key: f }) => {
293
- const l = c.find(($) => $.id === a);
294
- if (l)
295
- return l;
296
- const y = u[a];
297
- if (!y)
292
+ effect: async ({ allFeaturesStore: c, resolvedFeaturesStore: f }, { id: a, decide: p, key: g }) => {
293
+ const m = f.find((I) => I.id === a);
294
+ if (m)
295
+ return m;
296
+ const u = c[a];
297
+ if (!u)
298
298
  throw new Error(`Feature with id '${a}' not found`);
299
- const S = r.get(`${a}:${f}`);
299
+ const S = r.get(`${a}:${g}`);
300
300
  if (S) {
301
- const $ = await S;
302
- return { id: y.id, bucket: $, storage: y.feature.storage };
301
+ const I = await S;
302
+ return { id: u.id, bucket: I, storage: u.feature.storage };
303
303
  }
304
- const P = p();
305
- r.set(`${a}:${f}`, P);
306
- const F = await P;
307
- return { id: y.id, bucket: F, storage: y.feature.storage };
304
+ const w = p();
305
+ r.set(`${a}:${g}`, w);
306
+ const $ = await w;
307
+ return { id: u.id, bucket: $, storage: u.feature.storage };
308
308
  }
309
309
  });
310
- E({
310
+ P({
311
311
  clock: s.register,
312
- fn: (u) => {
313
- const { id: c, feature: a } = u;
314
- return { id: c, key: a.feature.key, storage: a.feature.storage };
312
+ fn: (c) => {
313
+ const { id: f, feature: a } = c;
314
+ return { id: f, key: a.feature.key, storage: a.feature.storage };
315
315
  },
316
316
  target: i
317
- }), E({
317
+ }), P({
318
318
  source: e,
319
319
  clock: [i.doneData, n.doneData],
320
- fn: (u, c) => !c || u.some((a) => a.id === c.id) ? u : [...u, c],
320
+ fn: (c, f) => !f || c.some((a) => a.id === f.id) ? c : [...c, f],
321
321
  target: e
322
- }), E({
322
+ }), P({
323
323
  source: t,
324
324
  clock: n.doneData,
325
- fn: (u, c) => {
326
- var y;
327
- const { id: a, bucket: p, storage: f } = c, l = (y = u[a]) == null ? void 0 : y.feature.key;
328
- return l ? { key: l, id: a, bucket: p, storage: f } : null;
325
+ fn: (c, f) => {
326
+ var u;
327
+ const { id: a, bucket: p, storage: g } = f, m = (u = c[a]) == null ? void 0 : u.feature.key;
328
+ return m ? { key: m, id: a, bucket: p, storage: g } : null;
329
329
  },
330
- target: d
330
+ target: l
331
331
  });
332
- const g = R({ allFeaturesStore: t, resolvedFeaturesStore: e }).map(
332
+ const d = A({ allFeaturesStore: t, resolvedFeaturesStore: e }).map(
333
333
  ({
334
- allFeaturesStore: u,
335
- resolvedFeaturesStore: c
336
- }) => Object.values(u).map((a) => {
337
- const p = c.find((f) => f.id === a.id);
334
+ allFeaturesStore: c,
335
+ resolvedFeaturesStore: f
336
+ }) => Object.values(c).map((a) => {
337
+ const p = f.find((g) => g.id === a.id);
338
338
  return p ? {
339
339
  id: a.id,
340
340
  name: a.feature.name,
@@ -350,32 +350,32 @@ const je = (t, e, s) => {
350
350
  };
351
351
  })
352
352
  );
353
- function h(u) {
354
- return t.map((c) => c[u], { skipVoid: !1 });
353
+ function h(c) {
354
+ return t.map((f) => f[c], { skipVoid: !1 });
355
355
  }
356
356
  return {
357
357
  register: o,
358
358
  getByName: h,
359
- listStore: g
359
+ listStore: d
360
360
  };
361
361
  });
362
362
  function $e() {
363
- return k(Be);
363
+ return x(je);
364
364
  }
365
- const Re = (t, e, s) => {
365
+ const Ae = (t, e, s) => {
366
366
  s.register(t, e);
367
- }, I = x("history");
367
+ }, E = F("history");
368
368
  function L(t, e) {
369
369
  return {
370
370
  // eslint-disable-next-line sonarjs/pseudo-random
371
- id: te(`history-entry-${Date.now()}-${Math.random()}}`),
371
+ id: re(`history-entry-${Date.now()}-${Math.random()}}`),
372
372
  node: e,
373
373
  at: Date.now(),
374
374
  experienceId: t
375
375
  };
376
376
  }
377
- const Ae = v(() => {
378
- const t = I.store({ entries: [] }), e = I.event(), s = I.event(), o = I.event(), i = I.event();
377
+ const Ce = k(() => {
378
+ const t = E.store({ entries: [] }), e = E.event(), s = E.event(), o = E.event(), i = E.event();
379
379
  t.on(e, (r, n) => ({
380
380
  entries: [...r.entries, L(n.experienceId, n.node)]
381
381
  })), t.on(s, (r, n) => ({
@@ -384,22 +384,22 @@ const Ae = v(() => {
384
384
  L(n.experienceId, n.node)
385
385
  ]
386
386
  })), t.on(i, (r, n) => n);
387
- function d(r, n) {
388
- const g = { lastStepIndex: -1, secondLastStepIndex: -1 };
387
+ function l(r, n) {
388
+ const d = { lastStepIndex: -1, secondLastStepIndex: -1 };
389
389
  for (let h = r.length - 1; h >= 0; h--) {
390
- const u = r[h], c = u == null ? void 0 : u.node;
391
- if (!(!c || !X(c)) && !(n && (u == null ? void 0 : u.experienceId) !== n))
392
- if (g.lastStepIndex === -1)
393
- g.lastStepIndex = h;
390
+ const c = r[h], f = c == null ? void 0 : c.node;
391
+ if (!(!f || !Z(f)) && !(n && (c == null ? void 0 : c.experienceId) !== n))
392
+ if (d.lastStepIndex === -1)
393
+ d.lastStepIndex = h;
394
394
  else {
395
- g.secondLastStepIndex = h;
395
+ d.secondLastStepIndex = h;
396
396
  break;
397
397
  }
398
398
  }
399
- return g;
399
+ return d;
400
400
  }
401
401
  return t.on(o, (r, n) => {
402
- const { secondLastStepIndex: g } = d(r.entries, n.experienceId), h = g !== -1 ? r.entries.slice(0, g + 1) : r.entries;
402
+ const { secondLastStepIndex: d } = l(r.entries, n.experienceId), h = d !== -1 ? r.entries.slice(0, d + 1) : r.entries;
403
403
  return {
404
404
  ...r,
405
405
  entries: h
@@ -413,10 +413,10 @@ const Ae = v(() => {
413
413
  };
414
414
  });
415
415
  function De() {
416
- return k(Ae);
416
+ return x(Ce);
417
417
  }
418
- const Oe = () => A(), Ce = x("field"), Ve = v(() => {
419
- const t = Ce.store({}), e = b(t, {
418
+ const Oe = () => C(), Te = F("field"), Ve = k(() => {
419
+ const t = Te.store({}), e = b(t, {
420
420
  register(r, n) {
421
421
  return {
422
422
  ...r,
@@ -431,147 +431,156 @@ const Oe = () => A(), Ce = x("field"), Ve = v(() => {
431
431
  function i(r) {
432
432
  return t.map((n) => n[r] || null);
433
433
  }
434
- function d(r) {
435
- return t.map((n) => Object.values(n).find((g) => g.name === r) || null);
434
+ function l(r) {
435
+ return t.map((n) => Object.values(n).find((d) => d.name === r) || null);
436
436
  }
437
437
  return {
438
438
  register: s,
439
439
  getById: i,
440
440
  listStore: o,
441
- getByName: d
441
+ getByName: l
442
442
  };
443
443
  });
444
444
  function Me() {
445
- return k(Ve);
445
+ return x(Ve);
446
446
  }
447
447
  const Ne = (t, e) => {
448
448
  e.register(t);
449
- }, Te = x("response"), Le = v(({ client: t }) => {
450
- const e = Te.store({}), s = A(), o = A(), i = b(e, {
451
- register(c, a) {
449
+ }, Le = F("response"), ze = k(({ client: t }) => {
450
+ const e = Le.store({}), s = C(), o = C(), i = b(e, {
451
+ register(a, p) {
452
452
  return {
453
- ...c,
454
- [a.fieldId]: a.response
453
+ ...a,
454
+ [p.fieldId]: p.response
455
455
  };
456
456
  },
457
- clear(c, a) {
458
- const { [a]: p, ...f } = c;
459
- return f;
457
+ registerBatch(a, p) {
458
+ return {
459
+ ...a,
460
+ ...p
461
+ };
462
+ },
463
+ clear(a, p) {
464
+ const { [p]: g, ...m } = a;
465
+ return m;
460
466
  },
461
467
  clearAll() {
462
468
  return {};
463
469
  }
464
470
  });
465
- function d(c, a) {
466
- i.register({ fieldId: c, response: a });
471
+ function l(a, p) {
472
+ i.register({ fieldId: a, response: p });
467
473
  }
468
- async function r(c) {
469
- const a = [];
474
+ async function r(a) {
475
+ const p = [];
470
476
  return await Promise.allSettled(
471
- Object.entries(c).map(async ([p, f]) => {
472
- let l = f;
473
- const y = t.fields.getById(p).getState();
474
- if (!y) {
475
- a.push({
476
- fieldId: p,
477
- userMessage: `Field '${p}' not found`,
478
- systemMessage: `No field with ID '${p}' exists. Available field IDs are: ${Object.keys(t.fields.listStore.getState()).join(",")}.`,
479
- value: l
477
+ Object.entries(a).map(async ([g, m]) => {
478
+ let u = m;
479
+ const S = t.fields.getById(g).getState();
480
+ if (!S) {
481
+ p.push({
482
+ fieldId: g,
483
+ userMessage: `Field '${g}' not found`,
484
+ systemMessage: `No field with ID '${g}' exists. Available field IDs are: ${Object.keys(t.fields.listStore.getState()).join(",")}.`,
485
+ value: u
480
486
  });
481
487
  return;
482
488
  }
483
- if (y.multiple && (typeof l == "string" || typeof l == "number" || typeof l == "boolean") && (l = [l]), !re(y.validation)) {
484
- const S = await D(t, y.validation, {
485
- $input: l
489
+ if (S.multiple && (typeof u == "string" || typeof u == "number" || typeof u == "boolean") && (u = [u]), S.validation && !se(S.validation)) {
490
+ const w = await R(t, S.validation, {
491
+ $input: u
486
492
  });
487
- if (typeof S == "string") {
488
- a.push({
489
- fieldId: p,
490
- userMessage: S,
491
- systemMessage: `Field validation resulted in an error: ${S}.`,
492
- value: l
493
+ if (typeof w == "string") {
494
+ p.push({
495
+ fieldId: g,
496
+ userMessage: w,
497
+ systemMessage: `Field validation resulted in an error: ${w}.`,
498
+ value: u
493
499
  });
494
500
  return;
495
501
  }
496
- if (S === !1) {
497
- a.push({
498
- fieldId: p,
502
+ if (w === !1) {
503
+ p.push({
504
+ fieldId: g,
499
505
  userMessage: "This field is invalid",
500
506
  systemMessage: "Field validation resulted in an unspecified error.",
501
- value: l
507
+ value: u
502
508
  });
503
509
  return;
504
510
  }
505
511
  }
506
- if (y.required && (typeof l > "u" || l === null || l === "" || Array.isArray(l) && !l.length)) {
507
- a.push({
508
- fieldId: p,
512
+ if (S.required && (typeof u > "u" || u === null || u === "" || Array.isArray(u) && !u.length)) {
513
+ p.push({
514
+ fieldId: g,
509
515
  userMessage: "This field is required",
510
516
  systemMessage: "Field is required.",
511
- value: l
517
+ value: u
512
518
  });
513
519
  return;
514
520
  }
515
- if (!y.multiple && Array.isArray(l) && l.length > 1) {
516
- a.push({
517
- fieldId: p,
521
+ if (!S.multiple && Array.isArray(u) && u.length > 1) {
522
+ p.push({
523
+ fieldId: g,
518
524
  userMessage: "This field expects a single response",
519
525
  systemMessage: "Field expects a single response.",
520
- value: l
526
+ value: u
521
527
  });
522
528
  return;
523
529
  }
524
- if (y.options) {
525
- const S = y.options.map((F) => F.value), P = Array.isArray(l) ? l : [l];
526
- Array.isArray(l) && (P.every((F) => S.includes(F)) || a.push({
527
- fieldId: p,
530
+ if (S.options) {
531
+ const w = S.options.map((I) => I.value), $ = Array.isArray(u) ? u : [u];
532
+ Array.isArray(u) && ($.every((I) => w.includes(I)) || p.push({
533
+ fieldId: g,
528
534
  userMessage: "This field expects a valid option",
529
- systemMessage: `Field expects a valid option. Valid options are: ${S.join(", ")}`,
530
- value: l
535
+ systemMessage: `Field expects a valid option. Valid options are: ${w.join(", ")}`,
536
+ value: u
531
537
  }));
532
538
  }
533
539
  })
534
- ), a.length ? { errors: a } : (Object.entries(c).forEach(([p, f]) => {
535
- d(p, f);
536
- }), { errors: [] });
540
+ ), { responsesToCommit: a, validationErrors: p };
541
+ }
542
+ async function n(a) {
543
+ const { responsesToCommit: p, validationErrors: g } = await r(a);
544
+ return g.length ? { errors: g } : (i.registerBatch(p), { errors: [] });
537
545
  }
538
- const n = e.map((c) => c), g = e.map((c) => Object.keys(c).map((p) => ({
539
- fieldId: p,
540
- value: c[p]
546
+ const d = e.map((a) => a), h = e.map((a) => Object.keys(a).map((g) => ({
547
+ fieldId: g,
548
+ value: a[g]
541
549
  })));
542
- function h(c) {
543
- const a = t.fields.getById(c), p = e.map((f) => f[c] || null);
544
- return R({ f: a, r: p }, ({ f, r: l }) => l || (f != null && f.defaultValue ? f.defaultValue : null));
545
- }
546
- function u(c) {
547
- const a = t.fields.getByName(c);
548
- return R({ f: a, s: e }, ({ f: p, s: f }) => {
549
- const l = p && f[p.id] || null;
550
- return l || (p != null && p.defaultValue ? p.defaultValue : null);
550
+ function c(a) {
551
+ const p = t.fields.getById(a), g = e.map((m) => m[a] || null);
552
+ return A({ f: p, r: g }, ({ f: m, r: u }) => u || (m != null && m.defaultValue ? m.defaultValue : null));
553
+ }
554
+ function f(a) {
555
+ const p = t.fields.getByName(a);
556
+ return A({ f: p, s: e }, ({ f: g, s: m }) => {
557
+ const u = g && m[g.id] || null;
558
+ return u || (g != null && g.defaultValue ? g.defaultValue : null);
551
559
  });
552
560
  }
553
- return E({
561
+ return P({
554
562
  clock: s,
555
563
  target: i.clearAll
556
- }), E({
564
+ }), P({
557
565
  clock: o,
558
566
  target: i.clear
559
567
  }), {
560
- register: d,
568
+ register: l,
561
569
  clearAll: s,
562
570
  clear: o,
563
- commit: r,
564
- listStore: g,
565
- getAllStore: n,
566
- getByFieldId: h,
567
- getByFieldName: u
571
+ commit: n,
572
+ getResponsesToCommit: r,
573
+ listStore: h,
574
+ getAllStore: d,
575
+ getByFieldId: c,
576
+ getByFieldName: f
568
577
  };
569
578
  });
570
- function ze(t) {
571
- return k(Le, t);
579
+ function _e(t) {
580
+ return x(ze, t);
572
581
  }
573
- const _e = () => "0.0.7";
574
- function Ue() {
582
+ const Ue = () => "0.0.8-next.1";
583
+ function He() {
575
584
  if (_()) {
576
585
  const t = [
577
586
  document.currentScript,
@@ -586,21 +595,21 @@ function Ue() {
586
595
  }
587
596
  return "https://api.picked.app";
588
597
  }
589
- function He() {
590
- if (!se())
598
+ function Ke() {
599
+ if (!ne())
591
600
  return {};
592
601
  const t = new URLSearchParams(window.location.search), e = {}, s = /* @__PURE__ */ new Set();
593
602
  for (const [i] of t.entries())
594
603
  i.startsWith("picked-") && s.add(i);
595
604
  for (const i of s) {
596
- const d = i.replace("picked-", "");
597
- e[d] = t.getAll(i);
605
+ const l = i.replace("picked-", "");
606
+ e[l] = t.getAll(i);
598
607
  }
599
- const o = j("s");
608
+ const o = B("s");
600
609
  if (s.size > 0)
601
- B.set(o, e);
610
+ j.set(o, e);
602
611
  else {
603
- const i = B.get(o);
612
+ const i = j.get(o);
604
613
  if (i)
605
614
  return i.json() || {};
606
615
  }
@@ -608,59 +617,59 @@ function He() {
608
617
  }
609
618
  class K {
610
619
  constructor(e) {
611
- m(this, "options");
612
- m(this, "isReady", !1);
613
- m(this, "project");
614
- m(this, "plugins", {});
615
- m(this, "eventBus", Oe());
616
- m(this, "organizationId");
617
- m(this, "projectId");
618
- m(this, "apiUrl");
619
- m(this, "searchParams", He());
620
- m(this, "history", De());
621
- m(this, "components", ye({ client: this }));
622
- m(this, "experienceInstances", Z({ client: this }));
623
- m(this, "experiences", ce({ client: this }));
624
- m(this, "frameworks", we({ client: this }));
625
- m(this, "predicates", Pe({ client: this }));
626
- m(this, "features", $e());
627
- m(this, "fields", Me());
628
- m(this, "responses", ze({ client: this }));
629
- w("info", "Picked client initializing."), this.organizationId = e.organizationId, this.projectId = e.projectId, this.options = Object.freeze(e), this.apiUrl = e.apiUrl || Ue(), this.setupPlugins(), this.setupFeatures(), this.setupPredicates(), this.eventBus({ type: "initialized", version: _e() }), w("info", "Picked client initialized.");
620
+ y(this, "options");
621
+ y(this, "isReady", !1);
622
+ y(this, "project");
623
+ y(this, "plugins", {});
624
+ y(this, "eventBus", Oe());
625
+ y(this, "organizationId");
626
+ y(this, "projectId");
627
+ y(this, "apiUrl");
628
+ y(this, "searchParams", Ke());
629
+ y(this, "history", De());
630
+ y(this, "components", he({ client: this }));
631
+ y(this, "experienceInstances", ee({ client: this }));
632
+ y(this, "experiences", ue({ client: this }));
633
+ y(this, "frameworks", ve({ client: this }));
634
+ y(this, "predicates", Re({ client: this }));
635
+ y(this, "features", $e());
636
+ y(this, "responses", _e({ client: this }));
637
+ y(this, "fields", Me());
638
+ v("info", "Picked client initializing."), this.organizationId = e.organizationId, this.projectId = e.projectId, this.options = Object.freeze(e), this.apiUrl = e.apiUrl || He(), this.setupPlugins(), this.setupFeatures(), this.setupPredicates(), this.eventBus({ type: "initialized", version: Ue() }), v("info", "Picked client initialized.");
630
639
  }
631
640
  start() {
632
641
  be(this), (async () => {
633
- _() && (document.body && await V(this), await ee(), await V(this), this.eventBus({ type: "ready" }), this.isReady = !0);
642
+ _() && (document.body && await T(this), await te(), await T(this), this.eventBus({ type: "ready" }), this.isReady = !0);
634
643
  })();
635
644
  }
636
645
  registerFramework(e) {
637
- ve(e, this.frameworks);
646
+ ke(e, this.frameworks);
638
647
  }
639
648
  registerComponent(e, s) {
640
- M(e, s, this.components);
649
+ V(e, s, this.components);
641
650
  }
642
651
  registerPlugin(e) {
643
- de(this, e, this.plugins);
652
+ pe(this, e, this.plugins);
644
653
  }
645
654
  registerFeature(e, s) {
646
- Re(e, s, this.features);
655
+ Ae(e, s, this.features);
647
656
  }
648
657
  registerPredicate(e, s) {
649
- je(e, s, this.predicates);
658
+ Be(e, s, this.predicates);
650
659
  }
651
660
  registerField(e) {
652
661
  Ne(e, this.fields);
653
662
  }
654
663
  registerExperience(e) {
655
- e.component && M(`experience:${e.id}`, e.component, this.components), ue(e, this.experiences);
664
+ e.component && V(`experience:${e.id}`, e.component, this.components), le(e, this.experiences);
656
665
  }
657
666
  getStateSnapshot() {
658
- return Fe(this);
667
+ return Ie(this);
659
668
  }
660
669
  async launchExperienceById(e) {
661
670
  const s = this.experiences.getById(e).getState();
662
671
  if (!s) {
663
- w("warn", `Experience with id '${e}' not found.`);
672
+ v("warn", `Experience with id '${e}' not found.`);
664
673
  return;
665
674
  }
666
675
  H(this, s);
@@ -701,13 +710,13 @@ class K {
701
710
  const [o, i] = s.split(":");
702
711
  if (!o || !i)
703
712
  return;
704
- let d = i;
705
- d === "true" && (d = !0), d === "false" && (d = !1), this.registerFeature(o, {
706
- key: `${d}`,
713
+ let l = i;
714
+ l === "true" && (l = !0), l === "false" && (l = !1), this.registerFeature(o, {
715
+ key: `${l}`,
707
716
  // use the assigned bucket value as the key
708
717
  name: o,
709
718
  // eslint-disable-next-line sonarjs/function-return-type
710
- decide: () => d,
719
+ decide: () => l,
711
720
  storage: "session"
712
721
  });
713
722
  } catch {
@@ -718,7 +727,7 @@ class K {
718
727
  const e = this.options.predicates;
719
728
  e && Object.entries(e).forEach(([s, o]) => {
720
729
  if (typeof o != "function") {
721
- w("warn", `Predicate "${s}" is not a function.`);
730
+ v("warn", `Predicate "${s}" is not a function.`);
722
731
  return;
723
732
  }
724
733
  this.registerPredicate(s, o);
@@ -728,27 +737,50 @@ class K {
728
737
  return this.plugins[e] ?? {};
729
738
  }
730
739
  }
731
- m(K, "logger", w);
732
- const et = (t) => {
740
+ y(K, "logger", v);
741
+ function q(t) {
742
+ var e;
743
+ return ((e = t.options) == null ? void 0 : e.some((s) => "condition" in s)) ?? !1;
744
+ }
745
+ function qe(t) {
746
+ return t.some((e) => e.condition || q(e));
747
+ }
748
+ async function rt(t, e) {
749
+ return e.length === 0 || !qe(e) ? e : (await Promise.all(
750
+ e.map(async (o) => {
751
+ if (!(o.condition ? await R(t, o.condition) : !0))
752
+ return null;
753
+ if (!o.options || !q(o))
754
+ return o;
755
+ const r = (await Promise.all(
756
+ o.options.map(async (d) => d.condition ? await R(t, d.condition) ? d : null : d)
757
+ )).filter((d) => d !== null);
758
+ return r.length === o.options.length ? o : r.length === 0 ? null : { ...o, options: r };
759
+ })
760
+ )).filter((o) => o !== null);
761
+ }
762
+ const st = (t) => {
733
763
  const e = new K(t);
734
- return ne(e), e;
764
+ return oe(e), e;
735
765
  };
736
766
  export {
737
767
  K as Picked,
738
- et as createClient,
739
- j as createStorageKey,
740
- st as isPickedRoot,
741
- C as localStore,
742
- B as sessionStore,
743
- ot as subscribe,
744
- at as supportsCookies,
768
+ st as createClient,
769
+ B as createStorageKey,
770
+ R as evaluateRuleLogic,
771
+ rt as getStepFields,
772
+ it as isPickedRoot,
773
+ O as localStore,
774
+ j as sessionStore,
775
+ ct as subscribe,
776
+ lt as supportsCookies,
745
777
  _ as supportsDocument,
746
- ct as supportsHistory,
747
- ut as supportsIntersectionObserver,
748
- lt as supportsLocalStorage,
749
- dt as supportsLocation,
750
- pt as supportsSessionStorage,
751
- gt as supportsShadowRoot,
752
- ft as supportsWebComponents,
753
- se as supportsWindow
778
+ dt as supportsHistory,
779
+ pt as supportsIntersectionObserver,
780
+ gt as supportsLocalStorage,
781
+ ft as supportsLocation,
782
+ mt as supportsSessionStorage,
783
+ yt as supportsShadowRoot,
784
+ ht as supportsWebComponents,
785
+ ne as supportsWindow
754
786
  };