@picked/client 0.0.75 → 0.0.76-next.2

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 (32) hide show
  1. package/dist/.tsbuildinfo +1 -1
  2. package/dist/{api-qyDGH_LT.js → api-COSWvuB7.js} +1 -1
  3. package/dist/{api-DnuqBb19.cjs → api-D5KcYECx.cjs} +1 -1
  4. package/dist/cjs/index.js +2 -2
  5. package/dist/cjs/plugins/dynamic-experiences/index.js +1 -1
  6. package/dist/cjs/plugins/responses-browser-storage/index.js +1 -1
  7. package/dist/cjs/plugins/responses-indexeddb/index.js +1 -1
  8. package/dist/cjs/server/index.js +1 -1
  9. package/dist/docs/reference/sdk/features.md +7 -0
  10. package/dist/docs/reference/sdk/fields.md +30 -16
  11. package/dist/esm/index.js +226 -461
  12. package/dist/esm/plugins/dynamic-experiences/index.js +2 -2
  13. package/dist/esm/plugins/responses-browser-storage/index.js +2 -2
  14. package/dist/esm/plugins/responses-indexeddb/index.js +1 -1
  15. package/dist/esm/server/index.js +1 -1
  16. package/dist/{plugin-_IjsFtkt.js → plugin-DDaGe5mb.js} +73 -52
  17. package/dist/plugin-Dj_wKloq.cjs +1 -0
  18. package/dist/{provider-BPkok9kt.js → provider-DD8EeZjr.js} +1 -1
  19. package/dist/{provider-b4PZ4JDf.cjs → provider-Dw9j4glW.cjs} +1 -1
  20. package/dist/types/entities/feature/feature.d.ts +43 -2
  21. package/dist/types/entities/feature/feature.d.ts.map +1 -1
  22. package/dist/types/entities/field/field.d.ts +6 -0
  23. package/dist/types/entities/field/field.d.ts.map +1 -1
  24. package/dist/types/plugins/dynamic-experiences/plugin.d.ts.map +1 -1
  25. package/dist/types/plugins/responses-browser-storage/plugin.d.ts.map +1 -1
  26. package/dist/types/plugins/responses-indexeddb/plugin.d.ts.map +1 -1
  27. package/dist/version-Buf0QGFq.js +256 -0
  28. package/dist/version-DuWNB9EC.cjs +1 -0
  29. package/package.json +2 -2
  30. package/dist/plugin-BlE2cb8o.cjs +0 -1
  31. package/dist/version-BDPumbPI.js +0 -4
  32. package/dist/version-D7F_nhve.cjs +0 -1
@@ -0,0 +1,256 @@
1
+ import { t as e } from "./logger-DMN6TxJJ.js";
2
+ import { n as t, r as n, t as r } from "./storage-1MW3-_As.js";
3
+ import { attach as i, combine as a, createApi as o, createDomain as s, createEffect as c, createEvent as l, createStore as u, sample as d } from "effector";
4
+ import { createFactory as f, invoke as p } from "@withease/factories";
5
+ //#region src/entities/feature/feature.ts
6
+ var m = s("feature");
7
+ function h(e) {
8
+ return e?.enabled === !1;
9
+ }
10
+ function g(e) {
11
+ return e === "true" || e !== "false" && e;
12
+ }
13
+ function _(e) {
14
+ let t = e.indexOf(":");
15
+ if (t <= 0) return null;
16
+ let n = e.substring(0, t), r = e.substring(t + 1);
17
+ return r.length === 0 ? null : {
18
+ id: n,
19
+ bucket: g(r)
20
+ };
21
+ }
22
+ var v = f(({ client: s }) => {
23
+ let f = m.store({}), p = m.store([]), _ = o(f, { register(e, t) {
24
+ return {
25
+ ...e,
26
+ [t.id]: t.feature
27
+ };
28
+ } }), v = l();
29
+ d({
30
+ clock: v,
31
+ source: f,
32
+ filter: (e, { id: t }) => e[t] !== void 0,
33
+ fn: (e, { id: t }) => `Feature '${t}' already registered. Registering again will override the previous registration.`
34
+ }).watch((t) => /* @__PURE__ */ e("warn", t)), d({
35
+ clock: v,
36
+ fn: ({ id: e, feature: t }) => Object.freeze({
37
+ id: e,
38
+ feature: {
39
+ id: e,
40
+ feature: {
41
+ ...t,
42
+ id: e
43
+ }
44
+ }
45
+ }),
46
+ target: _.register
47
+ });
48
+ let y = c(async ({ id: e, key: i, storage: a = "local", enabled: o }) => {
49
+ if (o === !1) return null;
50
+ let s = r(`feature:${e}:${i}`, "global"), c = (a === "session" ? n : t).get(s).text();
51
+ return c ? {
52
+ id: e,
53
+ key: i,
54
+ bucket: g(c),
55
+ storage: a
56
+ } : null;
57
+ }), b = c((e) => {
58
+ if (!e) return null;
59
+ let i = r(`feature:${e.id}:${e.key}`, "global");
60
+ (e.storage === "session" ? n : t).set(i, e.bucket);
61
+ }), x = /* @__PURE__ */ new Map(), S = i({
62
+ source: {
63
+ allFeaturesStore: f,
64
+ resolvedFeaturesStore: p
65
+ },
66
+ effect: async ({ allFeaturesStore: e, resolvedFeaturesStore: t }, { id: n, decide: r, key: i }) => {
67
+ let a = t.find((e) => e.id === n && e.key === i);
68
+ if (a) return a;
69
+ let o = e[n];
70
+ if (!o) throw Error(`Feature with id '${n}' not found`);
71
+ if (h(o.feature)) return {
72
+ id: o.id,
73
+ bucket: !1,
74
+ key: i,
75
+ storage: o.feature.storage
76
+ };
77
+ let s = x.get(`${n}:${i}`);
78
+ if (s !== void 0) {
79
+ let e = await s;
80
+ return {
81
+ id: o.id,
82
+ bucket: e,
83
+ key: i,
84
+ storage: o.feature.storage
85
+ };
86
+ }
87
+ let c = r();
88
+ x.set(`${n}:${i}`, c);
89
+ let l = await c;
90
+ return {
91
+ id: o.id,
92
+ bucket: l,
93
+ key: i,
94
+ storage: o.feature.storage
95
+ };
96
+ }
97
+ });
98
+ d({
99
+ clock: _.register,
100
+ fn: (e) => {
101
+ let { id: t, feature: n } = e;
102
+ return {
103
+ id: t,
104
+ key: n.feature.key,
105
+ storage: n.feature.storage,
106
+ enabled: n.feature.enabled
107
+ };
108
+ },
109
+ target: y
110
+ }), d({
111
+ source: f,
112
+ clock: S.doneData,
113
+ filter: (e, t) => !h(e[t.id]?.feature),
114
+ fn: (e, t) => {
115
+ let { id: n, bucket: r, storage: i } = t, a = e[n]?.feature.key;
116
+ return a ? {
117
+ key: a,
118
+ id: n,
119
+ bucket: r,
120
+ storage: i
121
+ } : null;
122
+ },
123
+ target: b
124
+ });
125
+ let C = a({
126
+ allFeaturesStore: f,
127
+ resolvedFeaturesStore: p
128
+ }).map(({ allFeaturesStore: e, resolvedFeaturesStore: t }) => Object.values(e).map((e) => {
129
+ let n = t.find((t) => t.id === e.id && t.key === e.feature.key);
130
+ return n ? {
131
+ id: e.id,
132
+ name: e.feature.name,
133
+ key: e.feature.key,
134
+ enabled: e.feature.enabled,
135
+ weight: e.feature.weight,
136
+ valueType: e.feature.valueType,
137
+ variants: e.feature.variants,
138
+ getBucket: () => ({
139
+ id: e.id,
140
+ bucket: n.bucket
141
+ }),
142
+ isResolved: !0
143
+ } : {
144
+ id: e.id,
145
+ name: e.feature.name,
146
+ key: e.feature.key,
147
+ enabled: e.feature.enabled,
148
+ weight: e.feature.weight,
149
+ valueType: e.feature.valueType,
150
+ variants: e.feature.variants,
151
+ getBucket: async () => await S(e.feature),
152
+ isResolved: !1
153
+ };
154
+ }));
155
+ d({
156
+ clock: S.doneData,
157
+ source: {
158
+ resolvedFeatures: p,
159
+ allFeatures: f
160
+ },
161
+ filter: ({ resolvedFeatures: e, allFeatures: t }, { id: n, key: r }) => !h(t[n]?.feature) && !e.some((e) => e.id === n && e.key === r),
162
+ fn: (e, t) => t,
163
+ target: s.eventBus.prepend((e) => ({
164
+ type: "feature_decide",
165
+ feature: e
166
+ }))
167
+ }), d({
168
+ clock: [y.doneData, S.doneData],
169
+ source: {
170
+ resolvedFeatures: p,
171
+ allFeatures: f
172
+ },
173
+ fn: ({ resolvedFeatures: e, allFeatures: t }, n) => !n || h(t[n.id]?.feature) || e.some((e) => e.id === n.id && e.key === n.key) ? e : [...e, n],
174
+ target: p
175
+ });
176
+ function w(e) {
177
+ return C.map((t) => t.find((t) => t.id === e));
178
+ }
179
+ let T = /* @__PURE__ */ new Map(), E = /* @__PURE__ */ new Map(), D = /* @__PURE__ */ new Map();
180
+ function O(e) {
181
+ let t = T.get(e);
182
+ if (t) return t;
183
+ let n = w(e);
184
+ return T.set(e, n), n;
185
+ }
186
+ function k(e) {
187
+ return f.map((t) => t[e], { skipVoid: !1 });
188
+ }
189
+ function A(e) {
190
+ let t = u(async () => void 0, { skipVoid: !1 }), n = O(e), r = i({
191
+ source: n,
192
+ effect: async (e) => {
193
+ if (e) return async () => (await e.getBucket()).bucket;
194
+ }
195
+ });
196
+ return d({
197
+ clock: n,
198
+ target: r
199
+ }), d({
200
+ clock: r.doneData,
201
+ filter: (e) => e !== void 0,
202
+ target: t
203
+ }), r(), t;
204
+ }
205
+ function j(e) {
206
+ let t = E.get(e);
207
+ if (t) return t;
208
+ let n = A(e);
209
+ return E.set(e, n), n;
210
+ }
211
+ function M(e) {
212
+ let t = j(e), n = u(void 0, { skipVoid: !1 }), r = i({
213
+ source: t,
214
+ mapParams: (e, t) => t,
215
+ effect: c(async (e) => await e())
216
+ });
217
+ return d({
218
+ clock: r.doneData,
219
+ fn: (t) => {
220
+ if (t !== void 0) return {
221
+ id: e,
222
+ bucket: t
223
+ };
224
+ },
225
+ target: n
226
+ }), d({
227
+ clock: t,
228
+ target: r
229
+ }), r(), n;
230
+ }
231
+ function N(e) {
232
+ let t = D.get(e);
233
+ if (t) return t;
234
+ let n = M(e);
235
+ return D.set(e, n), n;
236
+ }
237
+ return {
238
+ register: v,
239
+ getById: O,
240
+ getByName: k,
241
+ listStore: C,
242
+ getEvokableFeature: j,
243
+ getFeatureResult: N
244
+ };
245
+ });
246
+ function y(e) {
247
+ return p(v, e);
248
+ }
249
+ var b = (e, t, n) => {
250
+ n.register({
251
+ id: e,
252
+ feature: t
253
+ });
254
+ }, x = () => "0.0.76-next.2";
255
+ //#endregion
256
+ export { b as i, y as n, _ as r, x as t };
@@ -0,0 +1 @@
1
+ const e=require("./logger-CSTvAyyB.cjs"),t=require("./storage-DUw9UJ2h.cjs");let n=require("effector"),r=require("@withease/factories");var i=(0,n.createDomain)(`feature`);function a(e){return e?.enabled===!1}function o(e){return e===`true`||e!==`false`&&e}function s(e){let t=e.indexOf(`:`);if(t<=0)return null;let n=e.substring(0,t),r=e.substring(t+1);return r.length===0?null:{id:n,bucket:o(r)}}var c=(0,r.createFactory)(({client:r})=>{let s=i.store({}),c=i.store([]),l=(0,n.createApi)(s,{register(e,t){return{...e,[t.id]:t.feature}}}),u=(0,n.createEvent)();(0,n.sample)({clock:u,source:s,filter:(e,{id:t})=>e[t]!==void 0,fn:(e,{id:t})=>`Feature '${t}' already registered. Registering again will override the previous registration.`}).watch(t=>e.t(`warn`,t)),(0,n.sample)({clock:u,fn:({id:e,feature:t})=>Object.freeze({id:e,feature:{id:e,feature:{...t,id:e}}}),target:l.register});let d=(0,n.createEffect)(async({id:e,key:n,storage:r=`local`,enabled:i})=>{if(i===!1)return null;let a=t.t(`feature:${e}:${n}`,`global`),s=(r===`session`?t.r:t.n).get(a).text();return s?{id:e,key:n,bucket:o(s),storage:r}:null}),f=(0,n.createEffect)(e=>{if(!e)return null;let n=t.t(`feature:${e.id}:${e.key}`,`global`);(e.storage===`session`?t.r:t.n).set(n,e.bucket)}),p=new Map,m=(0,n.attach)({source:{allFeaturesStore:s,resolvedFeaturesStore:c},effect:async({allFeaturesStore:e,resolvedFeaturesStore:t},{id:n,decide:r,key:i})=>{let o=t.find(e=>e.id===n&&e.key===i);if(o)return o;let s=e[n];if(!s)throw Error(`Feature with id '${n}' not found`);if(a(s.feature))return{id:s.id,bucket:!1,key:i,storage:s.feature.storage};let c=p.get(`${n}:${i}`);if(c!==void 0){let e=await c;return{id:s.id,bucket:e,key:i,storage:s.feature.storage}}let l=r();p.set(`${n}:${i}`,l);let u=await l;return{id:s.id,bucket:u,key:i,storage:s.feature.storage}}});(0,n.sample)({clock:l.register,fn:e=>{let{id:t,feature:n}=e;return{id:t,key:n.feature.key,storage:n.feature.storage,enabled:n.feature.enabled}},target:d}),(0,n.sample)({source:s,clock:m.doneData,filter:(e,t)=>!a(e[t.id]?.feature),fn:(e,t)=>{let{id:n,bucket:r,storage:i}=t,a=e[n]?.feature.key;return a?{key:a,id:n,bucket:r,storage:i}:null},target:f});let h=(0,n.combine)({allFeaturesStore:s,resolvedFeaturesStore:c}).map(({allFeaturesStore:e,resolvedFeaturesStore:t})=>Object.values(e).map(e=>{let n=t.find(t=>t.id===e.id&&t.key===e.feature.key);return n?{id:e.id,name:e.feature.name,key:e.feature.key,enabled:e.feature.enabled,weight:e.feature.weight,valueType:e.feature.valueType,variants:e.feature.variants,getBucket:()=>({id:e.id,bucket:n.bucket}),isResolved:!0}:{id:e.id,name:e.feature.name,key:e.feature.key,enabled:e.feature.enabled,weight:e.feature.weight,valueType:e.feature.valueType,variants:e.feature.variants,getBucket:async()=>await m(e.feature),isResolved:!1}}));(0,n.sample)({clock:m.doneData,source:{resolvedFeatures:c,allFeatures:s},filter:({resolvedFeatures:e,allFeatures:t},{id:n,key:r})=>!a(t[n]?.feature)&&!e.some(e=>e.id===n&&e.key===r),fn:(e,t)=>t,target:r.eventBus.prepend(e=>({type:`feature_decide`,feature:e}))}),(0,n.sample)({clock:[d.doneData,m.doneData],source:{resolvedFeatures:c,allFeatures:s},fn:({resolvedFeatures:e,allFeatures:t},n)=>!n||a(t[n.id]?.feature)||e.some(e=>e.id===n.id&&e.key===n.key)?e:[...e,n],target:c});function g(e){return h.map(t=>t.find(t=>t.id===e))}let _=new Map,v=new Map,y=new Map;function b(e){let t=_.get(e);if(t)return t;let n=g(e);return _.set(e,n),n}function x(e){return s.map(t=>t[e],{skipVoid:!1})}function S(e){let t=(0,n.createStore)(async()=>void 0,{skipVoid:!1}),r=b(e),i=(0,n.attach)({source:r,effect:async e=>{if(e)return async()=>(await e.getBucket()).bucket}});return(0,n.sample)({clock:r,target:i}),(0,n.sample)({clock:i.doneData,filter:e=>e!==void 0,target:t}),i(),t}function C(e){let t=v.get(e);if(t)return t;let n=S(e);return v.set(e,n),n}function w(e){let t=C(e),r=(0,n.createStore)(void 0,{skipVoid:!1}),i=(0,n.attach)({source:t,mapParams:(e,t)=>t,effect:(0,n.createEffect)(async e=>await e())});return(0,n.sample)({clock:i.doneData,fn:t=>{if(t!==void 0)return{id:e,bucket:t}},target:r}),(0,n.sample)({clock:t,target:i}),i(),r}function T(e){let t=y.get(e);if(t)return t;let n=w(e);return y.set(e,n),n}return{register:u,getById:b,getByName:x,listStore:h,getEvokableFeature:C,getFeatureResult:T}});function l(e){return(0,r.invoke)(c,e)}var u=(e,t,n)=>{n.register({id:e,feature:t})},d=()=>`0.0.76-next.2`;Object.defineProperty(exports,"i",{enumerable:!0,get:function(){return u}}),Object.defineProperty(exports,"n",{enumerable:!0,get:function(){return l}}),Object.defineProperty(exports,"r",{enumerable:!0,get:function(){return s}}),Object.defineProperty(exports,"t",{enumerable:!0,get:function(){return d}});
package/package.json CHANGED
@@ -1,8 +1,8 @@
1
1
  {
2
2
  "name": "@picked/client",
3
- "version": "0.0.75",
3
+ "version": "0.0.76-next.2",
4
4
  "dependencies": {
5
- "@picked/delivery-api-client": "0.0.75",
5
+ "@picked/delivery-api-client": "0.0.76-next.2",
6
6
  "@withease/factories": "^1.0.5"
7
7
  },
8
8
  "devDependencies": {
@@ -1 +0,0 @@
1
- require("./logger-CSTvAyyB.cjs"),require("./api-DnuqBb19.cjs");let e=require("effector");function t(e){let t=2166136261;for(let n of e)t^=n.codePointAt(0)??0,t=Math.imul(t,16777619);return t>>>0}function n(e){let t=e;return t^=t>>>16,t=Math.imul(t,2246822507),t^=t>>>13,t=Math.imul(t,3266489909),t^=t>>>16,t>>>0}function r(e,r){return n(t(`${e}:${r}`))%100}function i(e,t){return t<=0?!1:t>=100||e<t}var a=4294967296;function o(e,r,i){return(n(t(`${e}:${r}:${i}`))+.5)/a}function s(e,t,n){return n.weight<=0?0:n.weight/-Math.log(o(e,t,n.key))}function c(e,t,n){let r=null,i=0;for(let a of n){let n=s(e,t,a);n<=0||(n>i||n===i&&r!==null&&a.key<r.key)&&(i=n,r=a)}return r}function l(e,t){if(Array.isArray(t.conditions))for(let n of t.conditions)e.registerCondition(n)}function u(e,t){e.registerExperience({id:t.id,key:t.key,name:t.name,targets:t.targets,nodes:t.nodes,edges:t.edges,condition:t.condition,initializeOpen:t.initializeOpen,componentName:t.componentName})}function d(e){return typeof e!=`object`||!e?!1:`id`in e&&`key`in e&&`type`in e&&`name`in e}function f(e,t){if(Array.isArray(t.fields))for(let n of t.fields)d(n)&&e.registerField(n)}function p(e,t){if(!Array.isArray(t.steps))return;let n=new Map(t.fields.map(e=>[e.id,e.key]));for(let r of t.steps){let t=[];for(let e of r.fieldIds??[]){let i=n.get(e);if(i===void 0){`${r.key}${e}`;continue}t.push(i)}let i=r.layoutContentId?e.contents.getById(r.layoutContentId):null;e.registerStep({id:r.id,key:r.key,name:r.name,fieldKeys:t,layoutName:r.layoutName,...r.layoutContentId!==void 0&&{layoutContentId:r.layoutContentId,layoutContentStore:i}})}}function m(e,t){if(Array.isArray(t.experiences))for(let n of t.experiences)u(e,n)}function h(e,t,n){v(e,t,n.isPreview,n.sessionId),l(e,t),f(e,t),p(e,t),m(e,t)}function g(e){let t=e.searchParams[`preview-token`];if(t&&t.length>0)return t[0]}function _(e){let t=new Set,n=e.searchParams.feature;if(!n)return t;for(let e of n){let n=e.indexOf(`:`);n>0&&t.add(e.substring(0,n))}return t}function v(e,t,n,r){let i=_(e);for(let a of t.features)i.has(a.id)||y(e,a,n,r)}function y(e,t,n,a){let o=t.id,s=t.variants;e.registerFeature(o,{key:`v${t.version}`,name:t.name,enabled:t.enabled,weight:t.weight,storage:n?`session`:`local`,decide:()=>t.valueType===`text`?!s||s.length===0?(`${o}`,!1):c(a,o,s)?.value??!1:i(r(a,o),t.weight)})}function b(e,t){for(let n of[...t.references??[],...t.content])e.registerContent({id:n.id,contentModelKey:n.contentModelKey,data:n.data})}function x(e,t){let n=new Map;return(r,i)=>{let a=n.get(r.id);if(a)return a;let o=(async()=>{try{let n=await t(r,i);return n&&b(e,n),n}finally{n.delete(r.id)}})();return n.set(r.id,o),o}}function S(e,t){let n=new Set(t&&Array.isArray(t.experiences)?t.experiences.map(e=>e.id):[]);return(t,r)=>n.has(t.id)?e(t,r):Promise.resolve(null)}function C(){return{name:`dynamic-experiences`,setup:t=>({onStart:(0,e.attach)({source:t.session.store.map(e=>e.id),effect:async e=>{let n=g(t),r=n!==void 0,i=n===void 0?void 0:{previewToken:n},a=await t.getProjectConfig(n===void 0?void 0:{previewToken:n}).catch(e=>null);if(t.contentLoader=x(t,S(e=>t.getExperienceContent(e,i),a)),!a)return;let o=t.seededVersionId;if(o!==null&&o!==a.versionId){t.versionSkew={seeded:o,resolved:a.versionId},`${a.versionId}${o}`;return}t.previewEmbedderOrigins=a.previewEmbedderOrigins??null,h(t,a,{isPreview:r,sessionId:e})}})})}}Object.defineProperty(exports,"n",{enumerable:!0,get:function(){return h}}),Object.defineProperty(exports,"t",{enumerable:!0,get:function(){return C}});
@@ -1,4 +0,0 @@
1
- //#region src/utils/version.ts
2
- var e = () => "0.0.75";
3
- //#endregion
4
- export { e as t };
@@ -1 +0,0 @@
1
- var e=()=>`0.0.75`;Object.defineProperty(exports,"t",{enumerable:!0,get:function(){return e}});