@picked/client 0.0.78-next.2 → 0.0.78
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/.tsbuildinfo +1 -1
- package/dist/{api-R3q_6NiX.cjs → api-D8PwsNng.cjs} +1 -1
- package/dist/{api-gGqMLTec.js → api-UIhyhfXr.js} +1 -1
- package/dist/cjs/index.js +2 -2
- package/dist/cjs/plugins/dynamic-experiences/index.js +1 -1
- package/dist/cjs/plugins/telemetry/index.js +1 -0
- package/dist/cjs/server/index.js +1 -1
- package/dist/emit-D-tLiWL1.cjs +1 -0
- package/dist/emit-Ds2EG7CB.js +14 -0
- package/dist/esm/index.js +270 -229
- package/dist/esm/plugins/dynamic-experiences/index.js +2 -2
- package/dist/esm/plugins/telemetry/index.js +97 -0
- package/dist/esm/server/index.js +1 -1
- package/dist/{plugin-CaJyXwSN.js → plugin-Bw2zcQdo.js} +2 -2
- package/dist/{plugin-D4WVP2aO.cjs → plugin-yRsnejB-.cjs} +1 -1
- package/dist/provider--Ay8gF6g.js +94 -0
- package/dist/provider-B00HUXyt.cjs +1 -0
- package/dist/types/data-source/api.d.ts.map +1 -1
- package/dist/types/data-source/provider.d.ts +3 -0
- package/dist/types/data-source/provider.d.ts.map +1 -1
- package/dist/types/data-source/request-observer.d.ts +58 -0
- package/dist/types/data-source/request-observer.d.ts.map +1 -0
- package/dist/types/entities/plugin/plugin.d.ts +4 -0
- package/dist/types/entities/plugin/plugin.d.ts.map +1 -1
- package/dist/types/lifecycle/lifecycle.d.ts.map +1 -1
- package/dist/types/picked.d.ts +8 -1
- package/dist/types/picked.d.ts.map +1 -1
- package/dist/types/plugins/telemetry/emit.d.ts +18 -0
- package/dist/types/plugins/telemetry/emit.d.ts.map +1 -0
- package/dist/types/plugins/telemetry/index.d.ts +4 -0
- package/dist/types/plugins/telemetry/index.d.ts.map +1 -0
- package/dist/types/plugins/telemetry/plugin-summary.d.ts +10 -0
- package/dist/types/plugins/telemetry/plugin-summary.d.ts.map +1 -0
- package/dist/types/plugins/telemetry/plugin.d.ts +45 -0
- package/dist/types/plugins/telemetry/plugin.d.ts.map +1 -0
- package/dist/types/utils/client-telemetry.d.ts +25 -0
- package/dist/types/utils/client-telemetry.d.ts.map +1 -0
- package/dist/types/utils/user-timing.d.ts +21 -0
- package/dist/types/utils/user-timing.d.ts.map +1 -0
- package/dist/{version-ZVJWOz2D.cjs → version-B8rBLzNJ.cjs} +1 -1
- package/dist/{version-CaCM83j4.js → version-CKlW2zIn.js} +1 -1
- package/package.json +16 -4
- package/dist/provider-C12099cw.cjs +0 -1
- package/dist/provider-D5CCq15k.js +0 -69
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import { t as e } from "../../../plugin-
|
|
2
|
-
import { n as t, t as n } from "../../../api-
|
|
1
|
+
import { t as e } from "../../../plugin-Bw2zcQdo.js";
|
|
2
|
+
import { n as t, t as n } from "../../../api-UIhyhfXr.js";
|
|
3
3
|
import { n as r } from "../../../registry-CXZv0uLg.js";
|
|
4
4
|
import { createClientHeaders as i, fetchSchema as a } from "@picked/delivery-api-client";
|
|
5
5
|
export { i as createClientHeaders, e as dynamicExperiencesPlugin, n as fetchExperienceContent, t as fetchProject, a as fetchSchema, r as registerPickedBundle };
|
|
@@ -0,0 +1,97 @@
|
|
|
1
|
+
import { f as e, p as t } from "../../../supports-CO9bJGNl.js";
|
|
2
|
+
import { createSpanId as n, createTraceId as r, formatTraceparent as i, toUnixNano as a } from "@picked/telemetry";
|
|
3
|
+
//#region src/plugins/telemetry/plugin-summary.ts
|
|
4
|
+
var o = 100;
|
|
5
|
+
function s(e) {
|
|
6
|
+
return [...e].sort((e, t) => e.localeCompare(t)).slice(0, o);
|
|
7
|
+
}
|
|
8
|
+
//#endregion
|
|
9
|
+
//#region src/plugins/telemetry/plugin.ts
|
|
10
|
+
var c = "telemetry", l = 5e3;
|
|
11
|
+
function u() {
|
|
12
|
+
try {
|
|
13
|
+
let e = t.navigator;
|
|
14
|
+
return "globalPrivacyControl" in e && e.globalPrivacyControl === !0 || e.doNotTrack === "1";
|
|
15
|
+
} catch {
|
|
16
|
+
return !1;
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
function d() {
|
|
20
|
+
return performance.timeOrigin + performance.now();
|
|
21
|
+
}
|
|
22
|
+
function f(e) {
|
|
23
|
+
try {
|
|
24
|
+
t.addEventListener("pagehide", e), t.document.addEventListener("visibilitychange", () => {
|
|
25
|
+
t.document.visibilityState === "hidden" && e();
|
|
26
|
+
});
|
|
27
|
+
} catch {}
|
|
28
|
+
}
|
|
29
|
+
function p(t) {
|
|
30
|
+
return {
|
|
31
|
+
name: c,
|
|
32
|
+
setup: (o) => {
|
|
33
|
+
if (!e() || u() || !(Math.random() < (t?.sampleRate ?? 1))) return;
|
|
34
|
+
let s = t?.endpoint, c = r(), p = n(), _ = [], v, y = () => {
|
|
35
|
+
clearTimeout(v), v = void 0, g(s, m(o), _);
|
|
36
|
+
}, b = () => {
|
|
37
|
+
v ??= setTimeout(y, l);
|
|
38
|
+
};
|
|
39
|
+
f(y), o.telemetry.observeDeliveryAPIRequests({ onRequest: (e) => {
|
|
40
|
+
let t = n(), r = d();
|
|
41
|
+
return {
|
|
42
|
+
headers: { traceparent: i(c, t, !0) },
|
|
43
|
+
onSettled: (n) => {
|
|
44
|
+
_.push({
|
|
45
|
+
name: `picked.delivery.${e}`,
|
|
46
|
+
traceId: c,
|
|
47
|
+
spanId: t,
|
|
48
|
+
parentSpanId: p,
|
|
49
|
+
startTimeUnixNano: a(r),
|
|
50
|
+
endTimeUnixNano: a(d()),
|
|
51
|
+
attributes: { "picked.endpoint": e },
|
|
52
|
+
status: n ? "ok" : "error"
|
|
53
|
+
}), _.length >= 50 ? y() : b();
|
|
54
|
+
}
|
|
55
|
+
};
|
|
56
|
+
} }), o.eventBus.watch((e) => {
|
|
57
|
+
if (e.type !== "ready") return;
|
|
58
|
+
let t = o.performance.startMeasure;
|
|
59
|
+
if (t) {
|
|
60
|
+
let e = performance.timeOrigin + t.startTime;
|
|
61
|
+
_.push({
|
|
62
|
+
name: "picked.start",
|
|
63
|
+
traceId: c,
|
|
64
|
+
spanId: p,
|
|
65
|
+
startTimeUnixNano: a(e),
|
|
66
|
+
endTimeUnixNano: a(e + t.duration),
|
|
67
|
+
attributes: h(o),
|
|
68
|
+
status: "ok"
|
|
69
|
+
});
|
|
70
|
+
}
|
|
71
|
+
y();
|
|
72
|
+
});
|
|
73
|
+
}
|
|
74
|
+
};
|
|
75
|
+
}
|
|
76
|
+
function m(e) {
|
|
77
|
+
return {
|
|
78
|
+
"service.name": "picked-sdk",
|
|
79
|
+
"picked.project_id": e.projectId
|
|
80
|
+
};
|
|
81
|
+
}
|
|
82
|
+
function h(e) {
|
|
83
|
+
return {
|
|
84
|
+
"picked.data.mode": e.dataSource ? "bundle" : "api",
|
|
85
|
+
"picked.sdk.plugins": s(Object.keys(e.plugins)).join(",")
|
|
86
|
+
};
|
|
87
|
+
}
|
|
88
|
+
async function g(e, t, n) {
|
|
89
|
+
if (n.length === 0) return;
|
|
90
|
+
let r = n.splice(0, n.length);
|
|
91
|
+
try {
|
|
92
|
+
let { flushSpans: n } = await import("../../../emit-Ds2EG7CB.js");
|
|
93
|
+
await n(e, t, r);
|
|
94
|
+
} catch {}
|
|
95
|
+
}
|
|
96
|
+
//#endregion
|
|
97
|
+
export { c as TELEMETRY_PLUGIN_NAME, p as telemetryPlugin };
|
package/dist/esm/server/index.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { a as e, c as t, i as n, o as r, s as i, t as a, u as o } from "../../experience-instance-DGk11d8a.js";
|
|
2
|
-
import { n as s } from "../../plugin-
|
|
2
|
+
import { n as s } from "../../plugin-Bw2zcQdo.js";
|
|
3
3
|
import { attach as c, createEffect as l, createEvent as u, createStore as d, sample as f } from "effector";
|
|
4
4
|
//#region src/server/serialize.ts
|
|
5
5
|
var p = 1e4;
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import "./logger-DMN6TxJJ.js";
|
|
2
|
-
import { r as e } from "./version-
|
|
3
|
-
import "./api-
|
|
2
|
+
import { r as e } from "./version-CKlW2zIn.js";
|
|
3
|
+
import "./api-UIhyhfXr.js";
|
|
4
4
|
import { attach as t } from "effector";
|
|
5
5
|
//#region src/plugins/dynamic-experiences/hash.ts
|
|
6
6
|
function n(e) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
require("./logger-CSTvAyyB.cjs");const e=require("./version-
|
|
1
|
+
require("./logger-CSTvAyyB.cjs");const e=require("./version-B8rBLzNJ.cjs");require("./api-D8PwsNng.cjs");let t=require("effector");function n(e){let t=2166136261;for(let n of e)t^=n.codePointAt(0)??0,t=Math.imul(t,16777619);return t>>>0}function r(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 i(e,t){return r(n(`${e}:${t}`))%100}function a(e,t){return t<=0?!1:t>=100||e<t}var o=4294967296;function s(e,t,i){return(r(n(`${e}:${t}:${i}`))+.5)/o}function c(e,t,n){return n.weight<=0?0:n.weight/-Math.log(s(e,t,n.key))}function l(e,t,n){let r=null,i=0;for(let a of n){let n=c(e,t,a);n<=0||(n>i||n===i&&r!==null&&a.key<r.key)&&(i=n,r=a)}return r}function u(e,t){if(Array.isArray(t.conditions))for(let n of t.conditions)e.registerCondition(n)}function d(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 f(e){return typeof e!=`object`||!e?!1:`id`in e&&`key`in e&&`type`in e&&`name`in e}function p(e,t){if(Array.isArray(t.fields))for(let n of t.fields)f(n)&&e.registerField(n)}function m(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 h(e,t){if(Array.isArray(t.experiences))for(let n of t.experiences)d(e,n)}function g(e,t,n){y(e,t,n.isPreview,n.sessionId),u(e,t),p(e,t),m(e,t),h(e,t)}function _(e){let t=e.searchParams[`preview-token`];if(t&&t.length>0)return t[0]}function v(t){let n=new Map,r=t.searchParams.feature;if(!r)return n;for(let t of r){let r=e.r(t);r&&n.set(r.id,r.bucket)}return n}function y(e,t,n,r){let i=v(e);for(let a of t.features){let t=i.get(a.id);if(t!==void 0){b(e,a,t);continue}x(e,a,n,r)}}function b(e,t,n){e.registerFeature(t.id,{key:`${n}`,name:t.name,enabled:!0,weight:t.weight,...t.valueType!==void 0&&{valueType:t.valueType},...t.variants!==void 0&&{variants:t.variants},storage:`session`,decide:()=>n})}function x(e,t,n,r){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`,valueType:t.valueType,variants:s,decide:()=>t.valueType===`text`?!s||s.length===0?(`${o}`,!1):l(r,o,s)?.value??!1:a(i(r,o),t.weight)})}function S(e,t){for(let n of[...t.references??[],...t.content])e.registerContent({id:n.id,contentModelKey:n.contentModelKey,data:n.data})}function C(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&&S(e,n),n}finally{n.delete(r.id)}})();return n.set(r.id,o),o}}function w(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 T(){return{name:`dynamic-experiences`,setup:e=>({onStart:(0,t.attach)({source:e.session.store.map(e=>e.id),effect:async t=>{let n=_(e),r=n!==void 0,i=n===void 0?void 0:{previewToken:n},a=await e.getProjectConfig(n===void 0?void 0:{previewToken:n}).catch(e=>null);if(e.contentLoader=C(e,w(t=>e.getExperienceContent(t,i),a)),!a)return;let o=e.seededVersionId;if(o!==null&&o!==a.versionId){e.versionSkew={seeded:o,resolved:a.versionId},`${a.versionId}${o}`;return}e.previewEmbedderOrigins=a.previewEmbedderOrigins??null,g(e,a,{isPreview:r,sessionId:t})}})})}}Object.defineProperty(exports,"n",{enumerable:!0,get:function(){return g}}),Object.defineProperty(exports,"t",{enumerable:!0,get:function(){return T}});
|
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
import "./logger-DMN6TxJJ.js";
|
|
2
|
+
import { n as e, t } from "./api-UIhyhfXr.js";
|
|
3
|
+
import { r as n, t as r } from "./registry-CXZv0uLg.js";
|
|
4
|
+
//#region src/data-source/request-observer.ts
|
|
5
|
+
function i(e, t) {
|
|
6
|
+
try {
|
|
7
|
+
return e?.onRequest(t) ?? {};
|
|
8
|
+
} catch {
|
|
9
|
+
return {};
|
|
10
|
+
}
|
|
11
|
+
}
|
|
12
|
+
function a(e, t) {
|
|
13
|
+
try {
|
|
14
|
+
e.onSettled?.(t);
|
|
15
|
+
} catch {}
|
|
16
|
+
}
|
|
17
|
+
async function o(e, t, n) {
|
|
18
|
+
let r = i(e?.(), t);
|
|
19
|
+
try {
|
|
20
|
+
let e = await n(r.headers);
|
|
21
|
+
return a(r, e !== null), e;
|
|
22
|
+
} catch (e) {
|
|
23
|
+
throw a(r, !1), e;
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
//#endregion
|
|
27
|
+
//#region src/data-source/provider.ts
|
|
28
|
+
var s = "bundle", c = "api";
|
|
29
|
+
async function l() {
|
|
30
|
+
try {
|
|
31
|
+
let e = await import("virtual:picked/data");
|
|
32
|
+
return n(e) ? e : null;
|
|
33
|
+
} catch {
|
|
34
|
+
return null;
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
function u(e) {
|
|
38
|
+
if (e === void 0 || n(e)) return e;
|
|
39
|
+
}
|
|
40
|
+
function d(n) {
|
|
41
|
+
let { apiUrl: i, projectId: a, previewToken: d, signal: f, getRequestObserver: p } = n, m = !!d, h = m ? c : n.mode, g = u(m ? void 0 : n.bundle), _ = m ? void 0 : n.projectConfig, v = n.getContent, y = {
|
|
42
|
+
mode: h ?? c,
|
|
43
|
+
manifest: null
|
|
44
|
+
}, b, x, S = /* @__PURE__ */ new Map();
|
|
45
|
+
function C() {
|
|
46
|
+
if (h === c) return Promise.resolve(null);
|
|
47
|
+
if (g) return Promise.resolve(g);
|
|
48
|
+
let e = r();
|
|
49
|
+
return e ? Promise.resolve(e) : (b ??= l(), b);
|
|
50
|
+
}
|
|
51
|
+
function w(e) {
|
|
52
|
+
y.mode = e ? s : c, y.manifest = e ? e.manifestMetadata : null;
|
|
53
|
+
}
|
|
54
|
+
async function T() {
|
|
55
|
+
if (_) return w(await C()), _;
|
|
56
|
+
let t = await C();
|
|
57
|
+
return w(t), t ? t.projectConfig : h === s ? null : o(p, "project-config", (t) => e(i, a, {
|
|
58
|
+
...d !== void 0 && { previewToken: d },
|
|
59
|
+
...f !== void 0 && { signal: f },
|
|
60
|
+
...t !== void 0 && { headers: t }
|
|
61
|
+
}));
|
|
62
|
+
}
|
|
63
|
+
async function E(e, n) {
|
|
64
|
+
let r = d === void 0 ? void 0 : { previewToken: d };
|
|
65
|
+
if (v) return v(e, r);
|
|
66
|
+
let c = await C();
|
|
67
|
+
if (w(c), c) try {
|
|
68
|
+
return await c.experienceContent(e, r);
|
|
69
|
+
} catch {
|
|
70
|
+
return `${e.id}`, null;
|
|
71
|
+
}
|
|
72
|
+
if (h === s) return null;
|
|
73
|
+
let l = n ?? f;
|
|
74
|
+
return o(p, "experience-content", (n) => t(i, a, e.id, {
|
|
75
|
+
...d !== void 0 && { previewToken: d },
|
|
76
|
+
...l !== void 0 && { signal: l },
|
|
77
|
+
...n !== void 0 && { headers: n }
|
|
78
|
+
}));
|
|
79
|
+
}
|
|
80
|
+
return {
|
|
81
|
+
meta: y,
|
|
82
|
+
getProjectConfig: () => (x ??= T(), x),
|
|
83
|
+
getContent: (e, t) => {
|
|
84
|
+
let n = S.get(e.id);
|
|
85
|
+
if (n) return n;
|
|
86
|
+
let r = E(e, t?.signal).finally(() => {
|
|
87
|
+
S.delete(e.id);
|
|
88
|
+
});
|
|
89
|
+
return S.set(e.id, r), r;
|
|
90
|
+
}
|
|
91
|
+
};
|
|
92
|
+
}
|
|
93
|
+
//#endregion
|
|
94
|
+
export { d as createPickedDataProvider };
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
require("./logger-CSTvAyyB.cjs");const e=require("./api-D8PwsNng.cjs"),t=require("./registry-C1t8l3t9.cjs");function n(e,t){try{return e?.onRequest(t)??{}}catch{return{}}}function r(e,t){try{e.onSettled?.(t)}catch{}}async function i(e,t,i){let a=n(e?.(),t);try{let e=await i(a.headers);return r(a,e!==null),e}catch(e){throw r(a,!1),e}}var a=`bundle`,o=`api`;async function s(){try{let e=await import(`virtual:picked/data`);return t.r(e)?e:null}catch{return null}}function c(e){if(e===void 0||t.r(e))return e}function l(n){let{apiUrl:r,projectId:l,previewToken:u,signal:d,getRequestObserver:f}=n,p=!!u,m=p?o:n.mode,h=c(p?void 0:n.bundle),g=p?void 0:n.projectConfig,_=n.getContent,v={mode:m??o,manifest:null},y,b,x=new Map;function S(){if(m===o)return Promise.resolve(null);if(h)return Promise.resolve(h);let e=t.t();return e?Promise.resolve(e):(y??=s(),y)}function C(e){v.mode=e?a:o,v.manifest=e?e.manifestMetadata:null}async function w(){if(g)return C(await S()),g;let t=await S();return C(t),t?t.projectConfig:m===a?null:i(f,`project-config`,t=>e.n(r,l,{...u!==void 0&&{previewToken:u},...d!==void 0&&{signal:d},...t!==void 0&&{headers:t}}))}async function T(t,n){let o=u===void 0?void 0:{previewToken:u};if(_)return _(t,o);let s=await S();if(C(s),s)try{return await s.experienceContent(t,o)}catch{return`${t.id}`,null}if(m===a)return null;let c=n??d;return i(f,`experience-content`,n=>e.t(r,l,t.id,{...u!==void 0&&{previewToken:u},...c!==void 0&&{signal:c},...n!==void 0&&{headers:n}}))}return{meta:v,getProjectConfig:()=>(b??=w(),b),getContent:(e,t)=>{let n=x.get(e.id);if(n)return n;let r=T(e,t?.signal).finally(()=>{x.delete(e.id)});return x.set(e.id,r),r}}}exports.createPickedDataProvider=l;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"api.d.ts","sourceRoot":"","sources":["../../../src/data-source/api.ts"],"names":[],"mappings":"AAgBA,OAAO,KAAK,EACV,yBAAyB,EACzB,mBAAmB,EACnB,aAAa,EACd,MAAM,6BAA6B,CAAA;
|
|
1
|
+
{"version":3,"file":"api.d.ts","sourceRoot":"","sources":["../../../src/data-source/api.ts"],"names":[],"mappings":"AAgBA,OAAO,KAAK,EACV,yBAAyB,EACzB,mBAAmB,EACnB,aAAa,EACd,MAAM,6BAA6B,CAAA;AAgDpC;;;;;;;;;;;;GAYG;AACH,wBAAgB,eAAe,CAAC,IAAI,EAAE,OAAO,GAAG,IAAI,IAAI,aAAa,CAEpE;AAED;;;;;;;;;GASG;AACH,wBAAgB,2BAA2B,CAAC,IAAI,EAAE,OAAO,GAAG,IAAI,IAAI,yBAAyB,CAM5F;AAED;;;;;;;;;;;;;;GAcG;AACH,wBAAsB,YAAY,CAChC,MAAM,EAAE,MAAM,EACd,SAAS,EAAE,MAAM,EACjB,OAAO,CAAC,EAAE,mBAAmB,GAC5B,OAAO,CAAC,aAAa,GAAG,IAAI,CAAC,CAE/B;AAED;;;;;;;;;;;;;;;GAeG;AACH,wBAAsB,sBAAsB,CAC1C,MAAM,EAAE,MAAM,EACd,SAAS,EAAE,MAAM,EACjB,YAAY,EAAE,MAAM,EACpB,OAAO,CAAC,EAAE,mBAAmB,GAC5B,OAAO,CAAC,yBAAyB,GAAG,IAAI,CAAC,CAE3C"}
|
|
@@ -9,6 +9,7 @@
|
|
|
9
9
|
*/
|
|
10
10
|
import type { ExperienceContentResponse, ProjectConfig } from '@picked/delivery-api-client';
|
|
11
11
|
import type { ContentLoader, PickedManifestMetadata, VirtualPickedData } from '../plugins/dynamic-experiences/types';
|
|
12
|
+
import { type DeliveryAPIRequestObserverSource } from './request-observer';
|
|
12
13
|
import { isVirtualPickedData } from './virtual-data';
|
|
13
14
|
/** Where a data provider reads project config and CMS content from. */
|
|
14
15
|
export type PickedDataMode = 'bundle' | 'api';
|
|
@@ -41,6 +42,8 @@ export interface PickedDataProviderOptions {
|
|
|
41
42
|
getContent?: ContentLoader;
|
|
42
43
|
/** Abort signal applied to API fetches, such as an `AbortSignal.timeout` deadline. */
|
|
43
44
|
signal?: AbortSignal;
|
|
45
|
+
/** Supplies the observer wrapped around each delivery API fetch, read once per request. */
|
|
46
|
+
getRequestObserver?: DeliveryAPIRequestObserverSource;
|
|
44
47
|
}
|
|
45
48
|
/** Read-only description of what a provider resolved to. */
|
|
46
49
|
export interface PickedDataProviderMeta {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"provider.d.ts","sourceRoot":"","sources":["../../../src/data-source/provider.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AACH,OAAO,KAAK,EAAE,yBAAyB,EAAE,aAAa,EAAE,MAAM,6BAA6B,CAAA;AAE3F,OAAO,KAAK,EACV,aAAa,EACb,sBAAsB,EACtB,iBAAiB,EAClB,MAAM,sCAAsC,CAAA;
|
|
1
|
+
{"version":3,"file":"provider.d.ts","sourceRoot":"","sources":["../../../src/data-source/provider.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AACH,OAAO,KAAK,EAAE,yBAAyB,EAAE,aAAa,EAAE,MAAM,6BAA6B,CAAA;AAE3F,OAAO,KAAK,EACV,aAAa,EACb,sBAAsB,EACtB,iBAAiB,EAClB,MAAM,sCAAsC,CAAA;AAE7C,OAAO,EAEL,KAAK,gCAAgC,EACtC,MAAM,oBAAoB,CAAA;AAE3B,OAAO,EAAE,mBAAmB,EAAE,MAAM,gBAAgB,CAAA;AAEpD,uEAAuE;AACvE,MAAM,MAAM,cAAc,GAAG,QAAQ,GAAG,KAAK,CAAA;AAQ7C,oDAAoD;AACpD,MAAM,WAAW,yBAAyB;IACxC,sFAAsF;IACtF,MAAM,EAAE,MAAM,CAAA;IACd,sCAAsC;IACtC,SAAS,EAAE,MAAM,CAAA;IACjB;;;OAGG;IACH,IAAI,CAAC,EAAE,cAAc,CAAA;IACrB;;;;OAIG;IACH,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB;;;;OAIG;IACH,MAAM,CAAC,EAAE,iBAAiB,CAAA;IAC1B,sFAAsF;IACtF,aAAa,CAAC,EAAE,aAAa,CAAA;IAC7B,sFAAsF;IACtF,UAAU,CAAC,EAAE,aAAa,CAAA;IAC1B,sFAAsF;IACtF,MAAM,CAAC,EAAE,WAAW,CAAA;IACpB,2FAA2F;IAC3F,kBAAkB,CAAC,EAAE,gCAAgC,CAAA;CACtD;AAED,4DAA4D;AAC5D,MAAM,WAAW,sBAAsB;IACrC,yDAAyD;IACzD,IAAI,EAAE,cAAc,CAAA;IACpB,gFAAgF;IAChF,QAAQ,EAAE,sBAAsB,GAAG,IAAI,CAAA;CACxC;AAED,6EAA6E;AAC7E,MAAM,WAAW,kBAAkB;IACjC,wFAAwF;IACxF,QAAQ,CAAC,IAAI,EAAE,sBAAsB,CAAA;IACrC,4FAA4F;IAC5F,gBAAgB,EAAE,MAAM,OAAO,CAAC,aAAa,GAAG,IAAI,CAAC,CAAA;IACrD,oGAAoG;IACpG,UAAU,EAAE,CACV,UAAU,EAAE;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,GAAG,EAAE,MAAM,CAAA;KAAE,EACvC,OAAO,CAAC,EAAE;QAAE,MAAM,CAAC,EAAE,WAAW,CAAA;KAAE,KAC/B,OAAO,CAAC,yBAAyB,GAAG,IAAI,CAAC,CAAA;CAC/C;AAED;;;;;;;;;;;;;;;;;;;GAmBG;AACH,wBAAsB,wBAAwB,IAAI,OAAO,CAAC,iBAAiB,GAAG,IAAI,CAAC,CAYlF;AAED,OAAO,EAAE,mBAAmB,EAAE,CAAA;AAyB9B;;;;;;;;;;GAUG;AACH,wBAAgB,wBAAwB,CAAC,OAAO,EAAE,yBAAyB,GAAG,kBAAkB,CA6K/F"}
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @file The hook the telemetry plugin uses to observe delivery API requests.
|
|
3
|
+
*
|
|
4
|
+
* An observer belongs to the client that registered it and is passed in per
|
|
5
|
+
* request, so two clients on one page observe only their own traffic. The
|
|
6
|
+
* observer hands back a per-request handle, so each completion correlates to
|
|
7
|
+
* its own request through the closure that created it.
|
|
8
|
+
*/
|
|
9
|
+
/** Which delivery API endpoint a request is for. */
|
|
10
|
+
export type DeliveryAPIEndpoint = 'project-config' | 'experience-content';
|
|
11
|
+
/** A request in flight, from the observer's point of view. */
|
|
12
|
+
export interface ObservedRequest {
|
|
13
|
+
/** Headers to merge into this request, such as `traceparent`. */
|
|
14
|
+
headers?: Record<string, string>;
|
|
15
|
+
/** Called once the request has settled. */
|
|
16
|
+
onSettled?: (ok: boolean) => void;
|
|
17
|
+
}
|
|
18
|
+
/** Receives delivery API requests as they are made. */
|
|
19
|
+
export interface DeliveryAPIRequestObserver {
|
|
20
|
+
/** Called as a request begins; returns headers to add and a completion callback. */
|
|
21
|
+
onRequest: (endpoint: DeliveryAPIEndpoint) => ObservedRequest;
|
|
22
|
+
}
|
|
23
|
+
/** Supplies the observer in force for the next request, or `null` when there is none. */
|
|
24
|
+
export type DeliveryAPIRequestObserverSource = () => DeliveryAPIRequestObserver | null | undefined;
|
|
25
|
+
/**
|
|
26
|
+
* Notifies the observer that a request is starting.
|
|
27
|
+
*
|
|
28
|
+
* @param {DeliveryAPIRequestObserver | null} [observer] - The observer to notify, if any.
|
|
29
|
+
* @param {DeliveryAPIEndpoint} endpoint - Which endpoint is being called.
|
|
30
|
+
* @returns {ObservedRequest} Headers to merge and a completion callback, both possibly absent.
|
|
31
|
+
* @example const observed = beginObservedRequest(observer, 'project-config')
|
|
32
|
+
*/
|
|
33
|
+
export declare function beginObservedRequest(observer: DeliveryAPIRequestObserver | null | undefined, endpoint: DeliveryAPIEndpoint): ObservedRequest;
|
|
34
|
+
/**
|
|
35
|
+
* Notifies the observer that a request has settled.
|
|
36
|
+
*
|
|
37
|
+
* @param {ObservedRequest} observed - The handle returned when the request began.
|
|
38
|
+
* @param {boolean} ok - Whether the request produced a usable result.
|
|
39
|
+
* @returns {void}
|
|
40
|
+
* @example settleObservedRequest(observed, true)
|
|
41
|
+
*/
|
|
42
|
+
export declare function settleObservedRequest(observed: ObservedRequest, ok: boolean): void;
|
|
43
|
+
/**
|
|
44
|
+
* Runs a delivery API fetch with the observer wrapped around it.
|
|
45
|
+
*
|
|
46
|
+
* The observer is read once per request, so one registered after an earlier fetch
|
|
47
|
+
* still applies to this one. Its headers are handed to `run` to travel with the
|
|
48
|
+
* request, and the same handle receives the outcome.
|
|
49
|
+
*
|
|
50
|
+
* @template T - The value the fetch resolves to.
|
|
51
|
+
* @param {DeliveryAPIRequestObserverSource} [source] - Supplies the observer for this request.
|
|
52
|
+
* @param {DeliveryAPIEndpoint} endpoint - Which endpoint is being called.
|
|
53
|
+
* @param {(headers?: Record<string, string>) => Promise<T | null>} run - The fetch to perform.
|
|
54
|
+
* @returns {Promise<T | null>} Whatever the fetch resolved to.
|
|
55
|
+
* @example observeDeliveryAPIRequest(source, 'project-config', (headers) => fetchProject(url, id, { headers }))
|
|
56
|
+
*/
|
|
57
|
+
export declare function observeDeliveryAPIRequest<T>(source: DeliveryAPIRequestObserverSource | undefined, endpoint: DeliveryAPIEndpoint, run: (headers?: Record<string, string>) => Promise<T | null>): Promise<T | null>;
|
|
58
|
+
//# sourceMappingURL=request-observer.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"request-observer.d.ts","sourceRoot":"","sources":["../../../src/data-source/request-observer.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,oDAAoD;AACpD,MAAM,MAAM,mBAAmB,GAAG,gBAAgB,GAAG,oBAAoB,CAAA;AAEzE,8DAA8D;AAC9D,MAAM,WAAW,eAAe;IAC9B,iEAAiE;IACjE,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IAChC,2CAA2C;IAC3C,SAAS,CAAC,EAAE,CAAC,EAAE,EAAE,OAAO,KAAK,IAAI,CAAA;CAClC;AAED,uDAAuD;AACvD,MAAM,WAAW,0BAA0B;IACzC,oFAAoF;IACpF,SAAS,EAAE,CAAC,QAAQ,EAAE,mBAAmB,KAAK,eAAe,CAAA;CAC9D;AAED,yFAAyF;AACzF,MAAM,MAAM,gCAAgC,GAAG,MAAM,0BAA0B,GAAG,IAAI,GAAG,SAAS,CAAA;AAElG;;;;;;;GAOG;AACH,wBAAgB,oBAAoB,CAClC,QAAQ,EAAE,0BAA0B,GAAG,IAAI,GAAG,SAAS,EACvD,QAAQ,EAAE,mBAAmB,GAC5B,eAAe,CAOjB;AAED;;;;;;;GAOG;AACH,wBAAgB,qBAAqB,CAAC,QAAQ,EAAE,eAAe,EAAE,EAAE,EAAE,OAAO,GAAG,IAAI,CAMlF;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAsB,yBAAyB,CAAC,CAAC,EAC/C,MAAM,EAAE,gCAAgC,GAAG,SAAS,EACpD,QAAQ,EAAE,mBAAmB,EAC7B,GAAG,EAAE,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,KAAK,OAAO,CAAC,CAAC,GAAG,IAAI,CAAC,GAC3D,OAAO,CAAC,CAAC,GAAG,IAAI,CAAC,CAYnB"}
|
|
@@ -34,6 +34,10 @@ export declare function createPluginEffect(handler: () => void | Promise<void>):
|
|
|
34
34
|
/**
|
|
35
35
|
* Registers a plugin with the client by calling its setup hook and merging any returned config into the plugin index.
|
|
36
36
|
*
|
|
37
|
+
* Every plugin takes an entry, so the index is the roster of what is registered. A plugin
|
|
38
|
+
* that returns no config gets an empty one, which is what `getPluginConfig` already
|
|
39
|
+
* answers for a name it does not hold.
|
|
40
|
+
*
|
|
37
41
|
* @param {Picked} client - The Picked client instance.
|
|
38
42
|
* @param {Plugin} plugin - The plugin to register.
|
|
39
43
|
* @param {PluginConfigIndex} plugins - The plugin config index to mutate.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"plugin.d.ts","sourceRoot":"","sources":["../../../../src/entities/plugin/plugin.ts"],"names":[],"mappings":"AAAA,wIAAwI;AACxI,OAAO,EAAgB,KAAK,MAAM,EAAE,MAAM,UAAU,CAAA;AACpD,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,cAAc,CAAA;AAE1C,MAAM,WAAW,MAAM;IACrB,IAAI,EAAE,MAAM,CAAA;IACZ,KAAK,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,IAAI,GAAG,YAAY,CAAA;CAC/C;AAED,MAAM,WAAW,YAAY;IAC3B,qIAAqI;IACrI,OAAO,CAAC,EAAE,MAAM,CAAC,IAAI,EAAE,IAAI,EAAE,KAAK,CAAC,CAAA;IACnC,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAA;CACvB;AAED,MAAM,WAAW,iBAAiB;IAChC,CAAC,GAAG,EAAE,MAAM,GAAG,YAAY,CAAA;CAC5B;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC,IAAI,EAAE,IAAI,EAAE,KAAK,CAAC,CAIjG;AAED
|
|
1
|
+
{"version":3,"file":"plugin.d.ts","sourceRoot":"","sources":["../../../../src/entities/plugin/plugin.ts"],"names":[],"mappings":"AAAA,wIAAwI;AACxI,OAAO,EAAgB,KAAK,MAAM,EAAE,MAAM,UAAU,CAAA;AACpD,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,cAAc,CAAA;AAE1C,MAAM,WAAW,MAAM;IACrB,IAAI,EAAE,MAAM,CAAA;IACZ,KAAK,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,IAAI,GAAG,YAAY,CAAA;CAC/C;AAED,MAAM,WAAW,YAAY;IAC3B,qIAAqI;IACrI,OAAO,CAAC,EAAE,MAAM,CAAC,IAAI,EAAE,IAAI,EAAE,KAAK,CAAC,CAAA;IACnC,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAA;CACvB;AAED,MAAM,WAAW,iBAAiB;IAChC,CAAC,GAAG,EAAE,MAAM,GAAG,YAAY,CAAA;CAC5B;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC,IAAI,EAAE,IAAI,EAAE,KAAK,CAAC,CAIjG;AAED;;;;;;;;;;;;;;GAcG;AACH,eAAO,MAAM,WAAW,WAAY,MAAM,UAAU,MAAM,WAAW,iBAAiB,KAAG,IAOxF,CAAA"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"lifecycle.d.ts","sourceRoot":"","sources":["../../../src/lifecycle/lifecycle.ts"],"names":[],"mappings":"AAAA,oFAAoF;AACpF,OAAO,EAOL,KAAK,MAAM,EACX,KAAK,aAAa,EAElB,KAAK,aAAa,EACnB,MAAM,UAAU,CAAA;AAEjB,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,WAAW,CAAA;AACvC,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAA;AAOhD,4CAA4C;AAC5C,MAAM,MAAM,cAAc,GAAG,MAAM,GAAG,UAAU,GAAG,OAAO,GAAG,QAAQ,CAAA;AAErE,8GAA8G;AAC9G,KAAK,UAAU,GAAG,SAAS,GAAG,OAAO,GAAG,SAAS,CAAA;AAEjD,6DAA6D;AAC7D,UAAU,SAAS;IACjB,8HAA8H;IAC9H,KAAK,EAAE,aAAa,CAAC,IAAI,CAAC,CAAA;IAE1B,4CAA4C;IAC5C,UAAU,EAAE,aAAa,CAAC,OAAO,CAAC,CAAA;IAClC,2FAA2F;IAC3F,uBAAuB,EAAE,aAAa,CAAC,OAAO,GAAG,SAAS,CAAC,CAAA;IAC3D,wFAAwF;IACxF,oBAAoB,EAAE,aAAa,CAAC,OAAO,GAAG,SAAS,CAAC,CAAA;IACxD,qDAAqD;IACrD,mBAAmB,EAAE,aAAa,CAAC,cAAc,CAAC,CAAA;IAElD,sDAAsD;IACtD,uBAAuB,EAAE,aAAa,CAAC,MAAM,CAAC,IAAI,EAAE,IAAI,EAAE,KAAK,CAAC,CAAC,CAAA;IAEjE,iFAAiF;IACjF,eAAe,EAAE,aAAa,CAAC,UAAU,CAAC,CAAA;IAC1C,8EAA8E;IAC9E,YAAY,EAAE,aAAa,CAAC,UAAU,CAAC,CAAA;CACxC;
|
|
1
|
+
{"version":3,"file":"lifecycle.d.ts","sourceRoot":"","sources":["../../../src/lifecycle/lifecycle.ts"],"names":[],"mappings":"AAAA,oFAAoF;AACpF,OAAO,EAOL,KAAK,MAAM,EACX,KAAK,aAAa,EAElB,KAAK,aAAa,EACnB,MAAM,UAAU,CAAA;AAEjB,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,WAAW,CAAA;AACvC,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAA;AAOhD,4CAA4C;AAC5C,MAAM,MAAM,cAAc,GAAG,MAAM,GAAG,UAAU,GAAG,OAAO,GAAG,QAAQ,CAAA;AAErE,8GAA8G;AAC9G,KAAK,UAAU,GAAG,SAAS,GAAG,OAAO,GAAG,SAAS,CAAA;AAEjD,6DAA6D;AAC7D,UAAU,SAAS;IACjB,8HAA8H;IAC9H,KAAK,EAAE,aAAa,CAAC,IAAI,CAAC,CAAA;IAE1B,4CAA4C;IAC5C,UAAU,EAAE,aAAa,CAAC,OAAO,CAAC,CAAA;IAClC,2FAA2F;IAC3F,uBAAuB,EAAE,aAAa,CAAC,OAAO,GAAG,SAAS,CAAC,CAAA;IAC3D,wFAAwF;IACxF,oBAAoB,EAAE,aAAa,CAAC,OAAO,GAAG,SAAS,CAAC,CAAA;IACxD,qDAAqD;IACrD,mBAAmB,EAAE,aAAa,CAAC,cAAc,CAAC,CAAA;IAElD,sDAAsD;IACtD,uBAAuB,EAAE,aAAa,CAAC,MAAM,CAAC,IAAI,EAAE,IAAI,EAAE,KAAK,CAAC,CAAC,CAAA;IAEjE,iFAAiF;IACjF,eAAe,EAAE,aAAa,CAAC,UAAU,CAAC,CAAA;IAC1C,8EAA8E;IAC9E,YAAY,EAAE,aAAa,CAAC,UAAU,CAAC,CAAA;CACxC;AA4OD;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,eAAe,CAAC,MAAM,EAAE;IAAE,MAAM,EAAE,MAAM,CAAA;CAAE,GAAG,SAAS,CAErE"}
|
package/dist/types/picked.d.ts
CHANGED
|
@@ -20,6 +20,8 @@ import type { Content, ContentDataPatch } from './entities/content/content';
|
|
|
20
20
|
import type { ContentLoader } from './plugins/dynamic-experiences/types';
|
|
21
21
|
import type { Action } from './entities/action/action';
|
|
22
22
|
import { type Condition } from './entities/condition/condition';
|
|
23
|
+
import { type StartTiming } from './utils/user-timing';
|
|
24
|
+
import { type ClientTelemetry } from './utils/client-telemetry';
|
|
23
25
|
import type { SessionEntity } from './entities/session/session';
|
|
24
26
|
/**
|
|
25
27
|
* Provenance metadata describing where the Picked client's project config and
|
|
@@ -74,7 +76,10 @@ export declare class Picked {
|
|
|
74
76
|
* nobody" and stays closed.
|
|
75
77
|
*/
|
|
76
78
|
previewEmbedderOrigins: string[] | null;
|
|
77
|
-
|
|
79
|
+
/** Config of every registered plugin, keyed by name in registration order. */
|
|
80
|
+
readonly plugins: PluginConfigIndex;
|
|
81
|
+
/** This client's telemetry hooks. */
|
|
82
|
+
readonly telemetry: ClientTelemetry;
|
|
78
83
|
private readonly dataProviders;
|
|
79
84
|
readonly eventBus: EventCallable<EventBusPayload>;
|
|
80
85
|
readonly events: EventHistoryStore;
|
|
@@ -83,6 +88,8 @@ export declare class Picked {
|
|
|
83
88
|
readonly dashboardUrl: string;
|
|
84
89
|
readonly documentationSiteUrl: string;
|
|
85
90
|
readonly session: SessionEntity;
|
|
91
|
+
/** This client's User Timing entries for its own start chain. */
|
|
92
|
+
readonly performance: StartTiming;
|
|
86
93
|
readonly searchParams: import(".").PickedSearchParams;
|
|
87
94
|
readonly history: {
|
|
88
95
|
push: EventCallable<{
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"picked.d.ts","sourceRoot":"","sources":["../../src/picked.ts"],"names":[],"mappings":"AAAA,qEAAqE;AACrE,OAAO,EAGL,KAAK,MAAM,EACX,KAAK,aAAa,EAClB,KAAK,KAAK,EACV,KAAK,aAAa,EACnB,MAAM,UAAU,CAAA;AACjB,OAAO,KAAK,EAAE,yBAAyB,EAAE,aAAa,EAAE,MAAM,6BAA6B,CAAA;AAC3F,OAAO,EAEL,KAAK,UAAU,EACf,KAAK,uBAAuB,EAC7B,MAAM,kCAAkC,CAAA;AACzC,OAAO,EAAE,KAAK,MAAM,EAAE,KAAK,iBAAiB,EAAe,MAAM,0BAA0B,CAAA;AAC3F,OAAO,EAAE,KAAK,mBAAmB,EAAE,MAAM,UAAU,CAAA;AACnD,OAAO,EACL,KAAK,gBAAgB,EAGtB,MAAM,gCAAgC,CAAA;AACvC,OAAO,EAEL,KAAK,SAAS,EAEf,MAAM,gCAAgC,CAAA;AACvC,OAAO,EAAE,MAAM,EAAE,MAAM,gBAAgB,CAAA;AACvC,OAAO,EAA4B,KAAK,aAAa,EAAE,MAAM,4BAA4B,CAAA;AACzF,OAAO,EAA6B,KAAK,uBAAuB,EAAE,MAAM,yBAAyB,CAAA;AACjG,OAAO,EAAE,KAAK,gBAAgB,EAA0B,MAAM,iCAAiC,CAAA;AAC/F,OAAO,EAAmB,KAAK,cAAc,EAAE,MAAM,uBAAuB,CAAA;AAC5E,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,gCAAgC,CAAA;AAE/D,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,4BAA4B,CAAA;AAIzD,OAAO,EAAsB,KAAK,eAAe,EAAE,KAAK,iBAAiB,EAAE,MAAM,gBAAgB,CAAA;AACjG,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,wBAAwB,CAAA;AAEnD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAA;AAE1D,OAAO,KAAK,EAAE,OAAO,EAAE,gBAAgB,EAAE,MAAM,4BAA4B,CAAA;AAE3E,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,qCAAqC,CAAA;AAExE,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,0BAA0B,CAAA;AAGtD,OAAO,EAAE,KAAK,SAAS,EAAwB,MAAM,gCAAgC,CAAA;AAIrF,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAA;AAM/D;;;;GAIG;AACH,MAAM,WAAW,gBAAgB;IAC/B,0GAA0G;IAC1G,IAAI,EAAE,KAAK,GAAG,OAAO,CAAA;IACrB,6FAA6F;IAC7F,SAAS,EAAE,MAAM,GAAG,IAAI,CAAA;IACxB,0DAA0D;IAC1D,gBAAgB,EAAE,MAAM,GAAG,IAAI,CAAA;IAC/B,4DAA4D;IAC5D,WAAW,EAAE,MAAM,GAAG,IAAI,CAAA;CAC3B;AAED,qBAAa,MAAM;IACjB,MAAM,CAAC,QAAQ,CAAC,MAAM,gBAAS;IAC/B,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAqB;IAE7C;;;;OAIG;IACH,UAAU,EAAE,gBAAgB,GAAG,IAAI,CAAO;IAE1C;;;;OAIG;IACH,eAAe,EAAE,MAAM,GAAG,IAAI,CAAO;IAErC;;;;OAIG;IACH,WAAW,EAAE;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI,CAAO;IAE/D;;;;;OAKG;IACH,aAAa,CAAC,EAAE,aAAa,CAAA;IAE7B;;;;;OAKG;IACH,sBAAsB,EAAE,MAAM,EAAE,GAAG,IAAI,CAAO;IAE9C,
|
|
1
|
+
{"version":3,"file":"picked.d.ts","sourceRoot":"","sources":["../../src/picked.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @file The lazily-imported half of the telemetry plugin.
|
|
3
|
+
*
|
|
4
|
+
* This module holds the only import of the OTLP emitter, so bundlers give it
|
|
5
|
+
* its own chunk and the plugin can load it after first paint.
|
|
6
|
+
*/
|
|
7
|
+
import { type SpanAttributes, type TelemetrySpan } from '@picked/telemetry';
|
|
8
|
+
/**
|
|
9
|
+
* Sends a batch of spans and resolves once the attempt has finished.
|
|
10
|
+
*
|
|
11
|
+
* @param {string} [endpoint] - OTLP HTTP trace endpoint. Defaults to Picked's collector.
|
|
12
|
+
* @param {SpanAttributes} resource - Resource attributes describing this SDK instance.
|
|
13
|
+
* @param {TelemetrySpan[]} spans - Spans to send.
|
|
14
|
+
* @returns {Promise<void>} Resolves when the batch has been attempted.
|
|
15
|
+
* @example await flushSpans(undefined, { 'service.name': 'picked-sdk' }, spans)
|
|
16
|
+
*/
|
|
17
|
+
export declare function flushSpans(endpoint: string | undefined, resource: SpanAttributes, spans: TelemetrySpan[]): Promise<void>;
|
|
18
|
+
//# sourceMappingURL=emit.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"emit.d.ts","sourceRoot":"","sources":["../../../../src/plugins/telemetry/emit.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,OAAO,EAA0B,KAAK,cAAc,EAAE,KAAK,aAAa,EAAE,MAAM,mBAAmB,CAAA;AAEnG;;;;;;;;GAQG;AACH,wBAAsB,UAAU,CAC9B,QAAQ,EAAE,MAAM,GAAG,SAAS,EAC5B,QAAQ,EAAE,cAAc,EACxB,KAAK,EAAE,aAAa,EAAE,GACrB,OAAO,CAAC,IAAI,CAAC,CAYf"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/plugins/telemetry/index.ts"],"names":[],"mappings":"AAAA,kEAAkE;AAClE,OAAO,EAAE,eAAe,EAAE,qBAAqB,EAAE,MAAM,UAAU,CAAA;AACjE,mBAAmB,UAAU,CAAA"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
/** @file Summarises a client's registered plugin names for telemetry. */
|
|
2
|
+
/**
|
|
3
|
+
* Sorts and caps a client's registered plugin names for reporting.
|
|
4
|
+
*
|
|
5
|
+
* @param {string[]} registered - Every plugin name registered on the client.
|
|
6
|
+
* @returns {string[]} The names, sorted, capped at the reporting limit.
|
|
7
|
+
* @example summarisePlugins(['window', 'analytics']) // ['analytics', 'window']
|
|
8
|
+
*/
|
|
9
|
+
export declare function summarisePlugins(registered: string[]): string[];
|
|
10
|
+
//# sourceMappingURL=plugin-summary.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"plugin-summary.d.ts","sourceRoot":"","sources":["../../../../src/plugins/telemetry/plugin-summary.ts"],"names":[],"mappings":"AAAA,yEAAyE;AAKzE;;;;;;GAMG;AACH,wBAAgB,gBAAgB,CAAC,UAAU,EAAE,MAAM,EAAE,GAAG,MAAM,EAAE,CAE/D"}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
import type { Plugin } from '../../entities/plugin/plugin';
|
|
2
|
+
/** Plugin name under which this plugin registers. */
|
|
3
|
+
export declare const TELEMETRY_PLUGIN_NAME = "telemetry";
|
|
4
|
+
/**
|
|
5
|
+
* Spans held before a flush is forced.
|
|
6
|
+
*
|
|
7
|
+
* A session buffers between flushes, so this is what bounds the buffer on a
|
|
8
|
+
* long-lived page that keeps making delivery API requests.
|
|
9
|
+
*/
|
|
10
|
+
export declare const MAX_BUFFERED_SPANS = 50;
|
|
11
|
+
/**
|
|
12
|
+
* How long the batch waits after its first span for others to join it.
|
|
13
|
+
*
|
|
14
|
+
* The ready flush goes out before a delivery API request settles, and a session
|
|
15
|
+
* makes far fewer requests than {@link MAX_BUFFERED_SPANS} — so this timer is
|
|
16
|
+
* what sends a delivery span while the session is still running, leaving the
|
|
17
|
+
* page-hidden flush as the backstop for whatever the last few seconds hold.
|
|
18
|
+
*/
|
|
19
|
+
export declare const FLUSH_DELAY_MS = 5000;
|
|
20
|
+
/** Options for {@link telemetryPlugin}. */
|
|
21
|
+
export interface TelemetryPluginOptions {
|
|
22
|
+
/**
|
|
23
|
+
* Fraction of sessions to trace, between 0 and 1.
|
|
24
|
+
*
|
|
25
|
+
* Decided once per client, before the first request, since it also decides
|
|
26
|
+
* whether `traceparent` is sent.
|
|
27
|
+
*
|
|
28
|
+
* @default 1
|
|
29
|
+
*/
|
|
30
|
+
sampleRate?: number;
|
|
31
|
+
/** OTLP HTTP trace endpoint. Defaults to Picked's collector. */
|
|
32
|
+
endpoint?: string;
|
|
33
|
+
}
|
|
34
|
+
/**
|
|
35
|
+
* Creates the browser telemetry plugin.
|
|
36
|
+
*
|
|
37
|
+
* @param {TelemetryPluginOptions} [options] - Sampling and endpoint overrides.
|
|
38
|
+
* @returns {Plugin} A plugin to register with the Picked client.
|
|
39
|
+
* @example
|
|
40
|
+
* ```typescript
|
|
41
|
+
* const client = createClient({ plugins: [telemetryPlugin({ sampleRate: 0.05 })] })
|
|
42
|
+
* ```
|
|
43
|
+
*/
|
|
44
|
+
export declare function telemetryPlugin(options?: TelemetryPluginOptions): Plugin;
|
|
45
|
+
//# sourceMappingURL=plugin.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"plugin.d.ts","sourceRoot":"","sources":["../../../../src/plugins/telemetry/plugin.ts"],"names":[],"mappings":"AAUA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,8BAA8B,CAAA;AAK1D,qDAAqD;AACrD,eAAO,MAAM,qBAAqB,cAAc,CAAA;AAEhD;;;;;GAKG;AACH,eAAO,MAAM,kBAAkB,KAAK,CAAA;AAEpC;;;;;;;GAOG;AACH,eAAO,MAAM,cAAc,OAAO,CAAA;AAElC,2CAA2C;AAC3C,MAAM,WAAW,sBAAsB;IACrC;;;;;;;OAOG;IACH,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,gEAAgE;IAChE,QAAQ,CAAC,EAAE,MAAM,CAAA;CAClB;AAwDD;;;;;;;;;GASG;AACH,wBAAgB,eAAe,CAAC,OAAO,CAAC,EAAE,sBAAsB,GAAG,MAAM,CA+ExE"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @file The telemetry hooks one client exposes.
|
|
3
|
+
*
|
|
4
|
+
* The observer belongs to the client that registered it, so several clients on
|
|
5
|
+
* one page observe only their own traffic.
|
|
6
|
+
*/
|
|
7
|
+
import type { DeliveryAPIRequestObserver } from '../data-source/request-observer';
|
|
8
|
+
/** One client's telemetry hooks. */
|
|
9
|
+
export interface ClientTelemetry {
|
|
10
|
+
/** Registers the observer wrapped around this client's delivery API requests, or clears it. */
|
|
11
|
+
observeDeliveryAPIRequests: (next: DeliveryAPIRequestObserver | null) => void;
|
|
12
|
+
/** The observer in force, or `null` while none is registered. */
|
|
13
|
+
readonly deliveryAPIRequestObserver: DeliveryAPIRequestObserver | null;
|
|
14
|
+
}
|
|
15
|
+
/**
|
|
16
|
+
* Creates the telemetry hooks for one client.
|
|
17
|
+
*
|
|
18
|
+
* The observer is read per request, so registering one after an earlier fetch
|
|
19
|
+
* still applies to the next.
|
|
20
|
+
*
|
|
21
|
+
* @returns {ClientTelemetry} The hooks to register through and read from.
|
|
22
|
+
* @example const telemetry = createClientTelemetry()
|
|
23
|
+
*/
|
|
24
|
+
export declare function createClientTelemetry(): ClientTelemetry;
|
|
25
|
+
//# sourceMappingURL=client-telemetry.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"client-telemetry.d.ts","sourceRoot":"","sources":["../../../src/utils/client-telemetry.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,OAAO,KAAK,EAAE,0BAA0B,EAAE,MAAM,iCAAiC,CAAA;AAEjF,oCAAoC;AACpC,MAAM,WAAW,eAAe;IAC9B,+FAA+F;IAC/F,0BAA0B,EAAE,CAAC,IAAI,EAAE,0BAA0B,GAAG,IAAI,KAAK,IAAI,CAAA;IAC7E,iEAAiE;IACjE,QAAQ,CAAC,0BAA0B,EAAE,0BAA0B,GAAG,IAAI,CAAA;CACvE;AAED;;;;;;;;GAQG;AACH,wBAAgB,qBAAqB,IAAI,eAAe,CAWvD"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
/** One client's User Timing entries for its own start chain. */
|
|
2
|
+
export interface StartTiming {
|
|
3
|
+
/** Records the begin mark and remembers when it landed. */
|
|
4
|
+
markBegin: () => void;
|
|
5
|
+
/** Records the measure, spanning from this client's begin mark to now. */
|
|
6
|
+
measure: () => void;
|
|
7
|
+
/** The completed measure, or `null` while the start chain is unfinished. */
|
|
8
|
+
readonly startMeasure: PerformanceMeasure | null;
|
|
9
|
+
}
|
|
10
|
+
/**
|
|
11
|
+
* Creates the start-chain timing for one client.
|
|
12
|
+
*
|
|
13
|
+
* The begin mark's own timestamp anchors the measure, so several clients on one
|
|
14
|
+
* page each span their own start rather than the most recent mark of that name,
|
|
15
|
+
* and each holds the measure it produced.
|
|
16
|
+
*
|
|
17
|
+
* @returns {StartTiming} The timing handle to record through and read from.
|
|
18
|
+
* @example const timing = createStartTiming()
|
|
19
|
+
*/
|
|
20
|
+
export declare function createStartTiming(): StartTiming;
|
|
21
|
+
//# sourceMappingURL=user-timing.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"user-timing.d.ts","sourceRoot":"","sources":["../../../src/utils/user-timing.ts"],"names":[],"mappings":"AAmBA,gEAAgE;AAChE,MAAM,WAAW,WAAW;IAC1B,2DAA2D;IAC3D,SAAS,EAAE,MAAM,IAAI,CAAA;IACrB,0EAA0E;IAC1E,OAAO,EAAE,MAAM,IAAI,CAAA;IACnB,4EAA4E;IAC5E,QAAQ,CAAC,YAAY,EAAE,kBAAkB,GAAG,IAAI,CAAA;CACjD;AAmBD;;;;;;;;;GASG;AACH,wBAAgB,iBAAiB,IAAI,WAAW,CA2B/C"}
|
|
@@ -1 +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),{skipVoid:!1})}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.78
|
|
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),{skipVoid:!1})}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.78`;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}});
|