@picked/client 0.0.62 → 0.0.63

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 (59) hide show
  1. package/dist/api-BZK_ICsc.cjs +1 -0
  2. package/dist/{api-CD_x70IA.js → api-CQuvieEa.js} +7 -4
  3. package/dist/cjs/index.js +2 -2
  4. package/dist/cjs/plugins/dom-observer/index.js +1 -1
  5. package/dist/cjs/plugins/dynamic-experiences/index.js +1 -1
  6. package/dist/cjs/plugins/experience-browser-storage/index.js +1 -1
  7. package/dist/cjs/plugins/history-browser-storage/index.js +1 -1
  8. package/dist/cjs/plugins/responses-browser-storage/index.js +1 -1
  9. package/dist/cjs/plugins/responses-indexeddb/index.js +1 -1
  10. package/dist/cjs/plugins/single-page-app/index.js +1 -1
  11. package/dist/cjs/plugins/web-components/index.js +1 -1
  12. package/dist/cjs/plugins/window-object/index.js +1 -1
  13. package/dist/cjs/server/index.js +1 -1
  14. package/dist/{dom-DGePXPpM.js → dom-DjfSrkpp.js} +7 -7
  15. package/dist/{dom-C3C6Fmwz.cjs → dom-sqnnO-CT.cjs} +1 -1
  16. package/dist/esm/index.js +406 -400
  17. package/dist/esm/plugins/dom-observer/index.js +2 -2
  18. package/dist/esm/plugins/dynamic-experiences/index.js +3 -234
  19. package/dist/esm/plugins/experience-browser-storage/index.js +1 -1
  20. package/dist/esm/plugins/history-browser-storage/index.js +1 -1
  21. package/dist/esm/plugins/responses-browser-storage/index.js +1 -1
  22. package/dist/esm/plugins/responses-indexeddb/index.js +1 -1
  23. package/dist/esm/plugins/single-page-app/index.js +14 -14
  24. package/dist/esm/plugins/web-components/index.js +2 -2
  25. package/dist/esm/plugins/window-object/index.js +1 -1
  26. package/dist/esm/server/index.js +94 -57
  27. package/dist/experience-instance-CVKoGtYE.cjs +1 -0
  28. package/dist/{experience-instance-DImym3m_.js → experience-instance-DBzfLqnk.js} +161 -65
  29. package/dist/plugin-C0q0cRCy.js +241 -0
  30. package/dist/plugin-gwaOQFCe.cjs +1 -0
  31. package/dist/preview-bridge-CGyx7dEx.js +33 -0
  32. package/dist/preview-bridge-DIdDvNXQ.cjs +1 -0
  33. package/dist/supports-34OzZK5j.cjs +1 -0
  34. package/dist/{supports-0XIfd4-R.js → supports-BgjwyijI.js} +11 -4
  35. package/dist/types/entities/content/content.d.ts +5 -0
  36. package/dist/types/entities/content/content.d.ts.map +1 -1
  37. package/dist/types/lifecycle/condition-selection.d.ts +112 -0
  38. package/dist/types/lifecycle/condition-selection.d.ts.map +1 -0
  39. package/dist/types/lifecycle/lifecycle.d.ts.map +1 -1
  40. package/dist/types/picked.d.ts +19 -0
  41. package/dist/types/picked.d.ts.map +1 -1
  42. package/dist/types/plugins/dynamic-experiences/plugin.d.ts +24 -1
  43. package/dist/types/plugins/dynamic-experiences/plugin.d.ts.map +1 -1
  44. package/dist/types/plugins/dynamic-experiences/types.d.ts +9 -1
  45. package/dist/types/plugins/dynamic-experiences/types.d.ts.map +1 -1
  46. package/dist/types/preview-bridge/index.d.ts +14 -0
  47. package/dist/types/preview-bridge/index.d.ts.map +1 -0
  48. package/dist/types/server/index.d.ts +8 -0
  49. package/dist/types/server/index.d.ts.map +1 -1
  50. package/dist/types/server/serialize.d.ts +84 -0
  51. package/dist/types/server/serialize.d.ts.map +1 -0
  52. package/dist/types/utils/api.d.ts +23 -1
  53. package/dist/types/utils/api.d.ts.map +1 -1
  54. package/dist/types/utils/supports.d.ts +85 -0
  55. package/dist/types/utils/supports.d.ts.map +1 -1
  56. package/package.json +5 -5
  57. package/dist/api-BB-f9JB_.cjs +0 -1
  58. package/dist/experience-instance-DygAdzbn.cjs +0 -1
  59. package/dist/supports-Dsjg-82e.cjs +0 -1
@@ -0,0 +1 @@
1
+ var e=Symbol(`Picked`),t=globalThis,n=n=>{t[e]=n};function r(){try{return`location`in t&&!!t.location}catch{return!1}}function i(){try{return`history`in t&&!!t.history}catch{return!1}}function a(){try{return`localStorage`in t&&!!t.localStorage}catch{return!1}}function o(){try{return`sessionStorage`in t&&!!t.sessionStorage}catch{return!1}}function s(){try{return`document`in t&&`cookie`in t.document}catch{return!1}}function c(){try{return`document`in t&&`createElement`in t.document&&`attachShadow`in t.document.createElement(`div`)}catch{return!1}}function l(){try{return`window`in t}catch{return!1}}function u(){try{return l()&&t.top!==t.self}catch{return!0}}function d(){try{return`document`in t}catch{return!1}}function f(){try{return`IntersectionObserver`in t}catch{return!1}}function p(){try{return`customElements`in t&&!!t.customElements}catch{return!1}}function m(){try{return`crypto`in t&&`randomUUID`in t.crypto}catch{return!1}}Object.defineProperty(exports,`a`,{enumerable:!0,get:function(){return i}}),Object.defineProperty(exports,`c`,{enumerable:!0,get:function(){return r}}),Object.defineProperty(exports,`d`,{enumerable:!0,get:function(){return p}}),Object.defineProperty(exports,`f`,{enumerable:!0,get:function(){return l}}),Object.defineProperty(exports,`i`,{enumerable:!0,get:function(){return d}}),Object.defineProperty(exports,`l`,{enumerable:!0,get:function(){return o}}),Object.defineProperty(exports,`m`,{enumerable:!0,get:function(){return n}}),Object.defineProperty(exports,`n`,{enumerable:!0,get:function(){return s}}),Object.defineProperty(exports,`o`,{enumerable:!0,get:function(){return f}}),Object.defineProperty(exports,`p`,{enumerable:!0,get:function(){return t}}),Object.defineProperty(exports,`r`,{enumerable:!0,get:function(){return m}}),Object.defineProperty(exports,`s`,{enumerable:!0,get:function(){return a}}),Object.defineProperty(exports,`t`,{enumerable:!0,get:function(){return u}}),Object.defineProperty(exports,`u`,{enumerable:!0,get:function(){return c}});
@@ -54,27 +54,34 @@ function l() {
54
54
  }
55
55
  }
56
56
  function u() {
57
+ try {
58
+ return l() && t.top !== t.self;
59
+ } catch {
60
+ return !0;
61
+ }
62
+ }
63
+ function d() {
57
64
  try {
58
65
  return "document" in t;
59
66
  } catch {
60
67
  return !1;
61
68
  }
62
69
  }
63
- function d() {
70
+ function f() {
64
71
  try {
65
72
  return "IntersectionObserver" in t;
66
73
  } catch {
67
74
  return !1;
68
75
  }
69
76
  }
70
- function f() {
77
+ function p() {
71
78
  try {
72
79
  return "customElements" in t && !!t.customElements;
73
80
  } catch {
74
81
  return !1;
75
82
  }
76
83
  }
77
- function p() {
84
+ function m() {
78
85
  try {
79
86
  return "crypto" in t && "randomUUID" in t.crypto;
80
87
  } catch {
@@ -82,4 +89,4 @@ function p() {
82
89
  }
83
90
  }
84
91
  //#endregion
85
- export { d as a, o as c, l as d, t as f, i, c as l, p as n, a as o, n as p, u as r, r as s, s as t, f as u };
92
+ export { i as a, r as c, p as d, l as f, d as i, o as l, n as m, s as n, f as o, t as p, m as r, a as s, u as t, c as u };
@@ -1,6 +1,11 @@
1
1
  import { Store } from 'effector';
2
2
  export interface Content {
3
3
  id: string;
4
+ /**
5
+ * The `key` of the Content Model that produced this entry. Optional because
6
+ * non-wire producers may omit it; wire blobs always carry it (or `null`).
7
+ */
8
+ contentModelKey?: string | null;
4
9
  data: Record<string, unknown>;
5
10
  }
6
11
  export type ContentsStore = ReturnType<typeof createContentIndex>;
@@ -1 +1 @@
1
- {"version":3,"file":"content.d.ts","sourceRoot":"","sources":["../../../../src/entities/content/content.ts"],"names":[],"mappings":"AAAA,oGAAoG;AACpG,OAAO,EAA2B,KAAK,KAAK,EAAE,MAAM,UAAU,CAAA;AAK9D,MAAM,WAAW,OAAO;IACtB,EAAE,EAAE,MAAM,CAAA;IACV,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;CAC9B;AAED,MAAM,MAAM,aAAa,GAAG,UAAU,CAAC,OAAO,kBAAkB,CAAC,CAAA;AAEjE,QAAA,MAAM,yBAAyB;wBAuBF,OAAO,KAAG,IAAI;kBAmBpB,OAAO,CAAC,IAAI,CAAC,KAAG,KAAK,CAAC,OAAO,GAAG,IAAI,CAAC;;;;;CAU1D,CAAA;AAEF;;;;;;;;GAQG;AACH,wBAAgB,kBAAkB,IAAI,UAAU,CAAC,OAAO,yBAAyB,CAAC,CAEjF;AAED;;;;;;;;;GASG;AACH,wBAAgB,YAAY,CAAC,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,aAAa,GAAG,IAAI,CAEzE"}
1
+ {"version":3,"file":"content.d.ts","sourceRoot":"","sources":["../../../../src/entities/content/content.ts"],"names":[],"mappings":"AAAA,oGAAoG;AACpG,OAAO,EAA2B,KAAK,KAAK,EAAE,MAAM,UAAU,CAAA;AAK9D,MAAM,WAAW,OAAO;IACtB,EAAE,EAAE,MAAM,CAAA;IACV;;;OAGG;IACH,eAAe,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IAC/B,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;CAC9B;AAED,MAAM,MAAM,aAAa,GAAG,UAAU,CAAC,OAAO,kBAAkB,CAAC,CAAA;AAEjE,QAAA,MAAM,yBAAyB;wBAuBF,OAAO,KAAG,IAAI;kBAmBpB,OAAO,CAAC,IAAI,CAAC,KAAG,KAAK,CAAC,OAAO,GAAG,IAAI,CAAC;;;;;CAU1D,CAAA;AAEF;;;;;;;;GAQG;AACH,wBAAgB,kBAAkB,IAAI,UAAU,CAAC,OAAO,yBAAyB,CAAC,CAEjF;AAED;;;;;;;;;GASG;AACH,wBAAgB,YAAY,CAAC,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,aAAa,GAAG,IAAI,CAEzE"}
@@ -0,0 +1,112 @@
1
+ import { Store } from 'effector';
2
+ import { LogicObject, LogicRule, LogicValue } from '../logic-engine';
3
+ import { Picked } from '../picked';
4
+ /** A condition rule that may be json-logic, a raw logic value, or unset. */
5
+ type ConditionRule = LogicRule | LogicValue | undefined;
6
+ /**
7
+ * Produces a stable, key-order-independent string hash of a logic rule for use as a cache key.
8
+ *
9
+ * Object keys are sorted recursively, arrays preserve their order, and `undefined` is
10
+ * normalised to `null`. Equivalent rules with reordered keys hash identically; rules that
11
+ * differ in any value or array order hash differently.
12
+ *
13
+ * @param {ConditionRule} rule - The rule to hash.
14
+ * @returns {string} A deterministic string key for the rule.
15
+ * @example
16
+ * hashRule({ '==': [1, 1] }) // '{"==":[1,1]}'
17
+ */
18
+ export declare function hashRule(rule: ConditionRule): string;
19
+ /**
20
+ * Reactive store of memoized condition-evaluation results, keyed by rule hash.
21
+ */
22
+ export interface ConditionResults {
23
+ /** Reactive store mapping rule hashes to their boolean evaluation result. */
24
+ store: Store<Record<string, boolean>>;
25
+ /** Writes a single hash-to-result entry into the store. */
26
+ set: (payload: {
27
+ hash: string;
28
+ result: boolean;
29
+ }) => void;
30
+ /** Bulk-seeds the store from a snapshot of hash-to-result entries, such as the server snapshot. */
31
+ seed: (results: Record<string, boolean>) => void;
32
+ /** Synchronously reads the current result for a key, or `undefined` when absent. */
33
+ peek: (hash: string) => boolean | undefined;
34
+ /** Clears every stored result (for example between server `serialize` calls on a reused client). */
35
+ reset: () => void;
36
+ }
37
+ /**
38
+ * Creates a reactive condition-results store keyed by rule hash, mirroring the entity-index
39
+ * factory pattern.
40
+ *
41
+ * @returns {ConditionResults} A condition-results store with set, seed, peek, and reset.
42
+ * @example
43
+ * const results = createConditionResults()
44
+ * results.set({ hash: 'h1', result: true })
45
+ * results.peek('h1') // true
46
+ */
47
+ export declare function createConditionResults(): ConditionResults;
48
+ /**
49
+ * Determines whether a rule references an action anywhere in its tree.
50
+ *
51
+ * Actions are injected into the evaluation context under the `actions` namespace and invoked via
52
+ * `{ invoke: [{ var: 'actions.<key>' }] }`. Because actions have side effects, a rule that
53
+ * references one cannot be memoised: its result must be re-resolved on every evaluation so the
54
+ * side effect re-runs.
55
+ *
56
+ * @param {unknown} value - The rule fragment to inspect.
57
+ * @returns {boolean} True when the fragment references the `actions` namespace anywhere.
58
+ * @example
59
+ * ruleReferencesAction({ invoke: [{ var: 'actions.track' }] }) // true
60
+ */
61
+ export declare function ruleReferencesAction(value: unknown): boolean;
62
+ /**
63
+ * Evaluates a condition rule with memoization against the client's `conditionResults` store.
64
+ *
65
+ * Every rule (including `undefined`/`null`, empty, and boolean gates) is hashed and its result
66
+ * cached, so callers can read it synchronously via `conditionResults.peek(hashRule(rule))` (which
67
+ * `<ExperienceSlot>` relies on for slot selection, such as an experience with no condition). A cache hit
68
+ * returns the stored value; a miss resolves the gate (evaluating non-empty logic rules via
69
+ * `evaluateRuleLogic`), writes the result back to the store (propagating reactively), and returns it.
70
+ *
71
+ * Rules that reference an action (a `var` under the `actions` namespace) are never read from or
72
+ * written to the cache: actions have side effects that must re-run on every evaluation, so caching
73
+ * their result would suppress those effects.
74
+ *
75
+ * @param {Picked} client - The Picked client providing the evaluation context and results store.
76
+ * @param {ConditionRule} rule - The condition rule to evaluate.
77
+ * @param {object} [options] - Optional evaluation options.
78
+ * @param {LogicObject} [options.context] - Context overrides merged into the evaluation (e.g. URL location).
79
+ * @returns {Promise<boolean>} Whether the condition resolves truthy.
80
+ * @example
81
+ * const active = await evaluateConditionMemo(client, { '==': [1, 1] })
82
+ */
83
+ export declare function evaluateConditionMemo(client: Picked, rule: ConditionRule, options?: {
84
+ context?: LogicObject;
85
+ }): Promise<boolean>;
86
+ /**
87
+ * Determines whether an experience is active by AND-ing the optional client precondition, the
88
+ * optional client condition, and the experience's own condition through the memoized evaluator.
89
+ *
90
+ * This is the DOM-free analogue of `shouldInitialiseFx` used for slot-based and server-side
91
+ * selection: each unset gate is treated as passing.
92
+ *
93
+ * @param {Picked} client - The Picked client providing the evaluation context and results store.
94
+ * @param {object} experience - The experience to test.
95
+ * @param {LogicRule | LogicValue} [experience.condition] - The experience's decision logic.
96
+ * @param {object} [options] - Optional gate inputs.
97
+ * @param {LogicObject} [options.context] - Context overrides merged into every evaluation.
98
+ * @param {LogicRule | LogicValue} [options.precondition] - The client-level precondition gate.
99
+ * @param {LogicRule | LogicValue} [options.condition] - The client-level condition gate.
100
+ * @returns {Promise<boolean>} Whether the experience is active for the given context.
101
+ * @example
102
+ * const active = await isExperienceActive(client, { condition: exp.condition }, { context })
103
+ */
104
+ export declare function isExperienceActive(client: Picked, experience: {
105
+ condition?: LogicRule | LogicValue;
106
+ }, options?: {
107
+ context?: LogicObject;
108
+ precondition?: LogicRule | LogicValue;
109
+ condition?: LogicRule | LogicValue;
110
+ }): Promise<boolean>;
111
+ export {};
112
+ //# sourceMappingURL=condition-selection.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"condition-selection.d.ts","sourceRoot":"","sources":["../../../src/lifecycle/condition-selection.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AACH,OAAO,EAA2B,KAAK,KAAK,EAAE,MAAM,UAAU,CAAA;AAE9D,OAAO,KAAK,EAAE,WAAW,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAA;AACzE,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,WAAW,CAAA;AAKvC,4EAA4E;AAC5E,KAAK,aAAa,GAAG,SAAS,GAAG,UAAU,GAAG,SAAS,CAAA;AA6CvD;;;;;;;;;;;GAWG;AACH,wBAAgB,QAAQ,CAAC,IAAI,EAAE,aAAa,GAAG,MAAM,CAEpD;AAED;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,6EAA6E;IAC7E,KAAK,EAAE,KAAK,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAA;IACrC,2DAA2D;IAC3D,GAAG,EAAE,CAAC,OAAO,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,OAAO,CAAA;KAAE,KAAK,IAAI,CAAA;IACzD,mGAAmG;IACnG,IAAI,EAAE,CAAC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,IAAI,CAAA;IAChD,oFAAoF;IACpF,IAAI,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,GAAG,SAAS,CAAA;IAC3C,oGAAoG;IACpG,KAAK,EAAE,MAAM,IAAI,CAAA;CAClB;AA+ED;;;;;;;;;GASG;AACH,wBAAgB,sBAAsB,IAAI,gBAAgB,CAEzD;AAoDD;;;;;;;;;;;;GAYG;AACH,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CAe5D;AAED;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,wBAAsB,qBAAqB,CACzC,MAAM,EAAE,MAAM,EACd,IAAI,EAAE,aAAa,EACnB,OAAO,CAAC,EAAE;IAAE,OAAO,CAAC,EAAE,WAAW,CAAA;CAAE,GAClC,OAAO,CAAC,OAAO,CAAC,CAkBlB;AAED;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAsB,kBAAkB,CACtC,MAAM,EAAE,MAAM,EACd,UAAU,EAAE;IAAE,SAAS,CAAC,EAAE,SAAS,GAAG,UAAU,CAAA;CAAE,EAClD,OAAO,CAAC,EAAE;IACR,OAAO,CAAC,EAAE,WAAW,CAAA;IACrB,YAAY,CAAC,EAAE,SAAS,GAAG,UAAU,CAAA;IACrC,SAAS,CAAC,EAAE,SAAS,GAAG,UAAU,CAAA;CACnC,GACA,OAAO,CAAC,OAAO,CAAC,CAYlB"}
@@ -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;AAqOD;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,eAAe,CAAC,MAAM,EAAE;IAAE,MAAM,EAAE,MAAM,CAAA;CAAE,GAAG,SAAS,CAErE"}
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;AAyOD;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,eAAe,CAAC,MAAM,EAAE;IAAE,MAAM,EAAE,MAAM,CAAA;CAAE,GAAG,SAAS,CAErE"}
@@ -6,6 +6,7 @@ import { AdaptedComponent } from './entities/component/component';
6
6
  import { Framework } from './entities/framework/framework';
7
7
  import { StateSnapshot } from './lifecycle/state-snapshot';
8
8
  import { EvaluateRuleLogicParams } from './lifecycle/rules-logic';
9
+ import { ConditionResults } from './lifecycle/condition-selection';
9
10
  import { LifecycleStage } from './lifecycle/lifecycle';
10
11
  import { Predicate } from './entities/predicate/predicate';
11
12
  import { Feature } from './entities/feature/feature';
@@ -217,6 +218,13 @@ export declare class Picked {
217
218
  experience: import('.').ExperienceInstance;
218
219
  }) => Store<() => ReturnType<Action>>;
219
220
  };
221
+ /**
222
+ * Memoized condition-evaluation results keyed by rule hash. Populated by the
223
+ * server `serialize` selection and the memoized evaluator (`evaluateConditionMemo`),
224
+ * and seeded on the client from the SSR snapshot so first paint reuses the server's
225
+ * selection without re-evaluating.
226
+ */
227
+ readonly conditionResults: ConditionResults;
220
228
  readonly stateSnapshotStore: Store<StateSnapshot>;
221
229
  readonly evaluateRuleLogicFx: Effect<EvaluateRuleLogicParams, unknown, Error>;
222
230
  /** Public trigger — fires the start chain. `await allSettled(client.start, { scope })` resolves once the chain has fully settled. */
@@ -243,6 +251,17 @@ export declare class Picked {
243
251
  context?: Record<string, unknown>;
244
252
  }, string, Error>;
245
253
  constructor(options: CreateClientOptions);
254
+ /**
255
+ * Lazily starts the preview bridge when the client runs inside an iframe in preview mode (a
256
+ * `preview-token` search param is present). The bridge is loaded via a dynamic `import()` so it is
257
+ * code-split out of production bundles and fetched only inside the dashboard preview; failures are
258
+ * swallowed so client creation never depends on it.
259
+ *
260
+ * @returns {void} Nothing.
261
+ * @example
262
+ * this.maybeStartPreviewBridge()
263
+ */
264
+ private maybeStartPreviewBridge;
246
265
  registerFramework: (framework: Framework) => void;
247
266
  registerComponent: (name: string, component: AdaptedComponent) => void;
248
267
  registerPlugin: (plugin: Plugin) => void;
@@ -1 +1 @@
1
- {"version":3,"file":"picked.d.ts","sourceRoot":"","sources":["../../src/picked.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"picked.d.ts","sourceRoot":"","sources":["../../src/picked.ts"],"names":[],"mappings":"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"}
@@ -1,5 +1,28 @@
1
1
  import { Plugin } from '../../entities/plugin/plugin';
2
+ import { Picked } from '../../picked';
2
3
  import { DynamicExperiencesPluginOptions, ExperienceContentResponse, FetchProjectOptions, ProjectConfig } from './types';
4
+ /**
5
+ * Synchronously registers a complete project config with the client: features, conditions,
6
+ * fields, steps, and experiences, in dependency order.
7
+ *
8
+ * Extracted from `dynamicExperiencesPlugin`'s `onStart` so the same registration runs outside
9
+ * the lifecycle (notably from the server `serialize` helper and the SSR provider), where the
10
+ * stores must be populated synchronously before selection or rendering.
11
+ *
12
+ * @param {Picked} client - Picked client instance.
13
+ * @param {ProjectConfig} config - Project configuration to register.
14
+ * @param {object} options - Registration options.
15
+ * @param {boolean} options.isPreview - Whether features use session storage instead of local storage.
16
+ * @param {string} options.sessionId - Current session id, used as the seed for stable feature allocation.
17
+ * @example
18
+ * ```typescript
19
+ * registerProjectConfig(client, config, { isPreview: false, sessionId: 's' })
20
+ * ```
21
+ */
22
+ export declare function registerProjectConfig(client: Picked, config: ProjectConfig, options: {
23
+ isPreview: boolean;
24
+ sessionId: string;
25
+ }): void;
3
26
  /**
4
27
  * Fetches the project configuration from the Picked REST API.
5
28
  *
@@ -25,7 +48,7 @@ export declare function fetchProject(apiUrl: string, projectId: string, options?
25
48
  * @param {string} apiUrl - Base URL for the Picked API.
26
49
  * @param {string} projectId - Project ID to fetch content for.
27
50
  * @param {string} experienceId - Experience ID whose content to fetch.
28
- * @param {FetchProjectOptions} [options] - Optional headers and preview token.
51
+ * @param {FetchProjectOptions} [options] - Optional headers, preview token, and abort signal.
29
52
  * @returns {Promise<ExperienceContentResponse | null>} Validated content response, or `null` on any failure.
30
53
  * @example
31
54
  * ```typescript
@@ -1 +1 @@
1
- {"version":3,"file":"plugin.d.ts","sourceRoot":"","sources":["../../../../src/plugins/dynamic-experiences/plugin.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,8BAA8B,CAAA;AAK1D,OAAO,KAAK,EAEV,+BAA+B,EAC/B,yBAAyB,EACzB,mBAAmB,EACnB,aAAa,EAId,MAAM,SAAS,CAAA;AAsThB;;;;;;;;;;;;;;GAcG;AACH,wBAAsB,YAAY,CAChC,MAAM,EAAE,MAAM,EACd,SAAS,EAAE,MAAM,EACjB,OAAO,CAAC,EAAE,mBAAmB,GAC5B,OAAO,CAAC,aAAa,GAAG,IAAI,CAAC,CAmC/B;AAoBD;;;;;;;;;;;;;;;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,CAsC3C;AAkPD;;;;;;;;;;;;;;;;;;;GAmBG;AACH,wBAAgB,wBAAwB,CAAC,OAAO,CAAC,EAAE,+BAA+B,GAAG,MAAM,CAoC1F"}
1
+ {"version":3,"file":"plugin.d.ts","sourceRoot":"","sources":["../../../../src/plugins/dynamic-experiences/plugin.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,8BAA8B,CAAA;AAC1D,OAAO,KAAK,EAAE,MAAM,EAAoB,MAAM,cAAc,CAAA;AAI5D,OAAO,KAAK,EAEV,+BAA+B,EAC/B,yBAAyB,EACzB,mBAAmB,EACnB,aAAa,EAId,MAAM,SAAS,CAAA;AA4JhB;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAgB,qBAAqB,CACnC,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,aAAa,EACrB,OAAO,EAAE;IAAE,SAAS,EAAE,OAAO,CAAC;IAAC,SAAS,EAAE,MAAM,CAAA;CAAE,GACjD,IAAI,CAMN;AA4JD;;;;;;;;;;;;;;GAcG;AACH,wBAAsB,YAAY,CAChC,MAAM,EAAE,MAAM,EACd,SAAS,EAAE,MAAM,EACjB,OAAO,CAAC,EAAE,mBAAmB,GAC5B,OAAO,CAAC,aAAa,GAAG,IAAI,CAAC,CAmC/B;AAoBD;;;;;;;;;;;;;;;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,CAsC3C;AAkPD;;;;;;;;;;;;;;;;;;;GAmBG;AACH,wBAAgB,wBAAwB,CAAC,OAAO,CAAC,EAAE,+BAA+B,GAAG,MAAM,CAgC1F"}
@@ -89,22 +89,30 @@ export interface DynamicExperiencesPluginOptions {
89
89
  export interface FetchProjectOptions {
90
90
  previewToken?: string;
91
91
  headers?: Record<string, string>;
92
+ /** Abort signal applied to the underlying `fetch` (for example an `AbortSignal.timeout` deadline). */
93
+ signal?: AbortSignal;
92
94
  }
93
95
  /**
94
96
  * Wire-format content blob as returned by the Picked API content endpoint.
95
97
  */
96
98
  export interface ContentBlob {
97
99
  id: string;
100
+ /** The `key` of the Content Model that produced this entry, or `null` when unresolved. */
101
+ contentModelKey: string | null;
98
102
  data: Record<string, unknown>;
99
103
  }
100
104
  /**
101
105
  * Wire-format response shape for `GET /api/v1/projects/:projectId/experiences/:experienceId/content`.
102
106
  * The response is agnostic of step structure — step ↔ content mapping is encoded in the
103
107
  * project blob via `Step.layoutContentId`.
108
+ *
109
+ * `versionId` is the published workspace version id on the published surface and
110
+ * `null` on the preview surface, where there is no published version (mirroring
111
+ * how the preview project-config payload surfaces `versionId: null`).
104
112
  */
105
113
  export interface ExperienceContentResponse {
106
114
  experienceId: string;
107
- versionId: string;
115
+ versionId: string | null;
108
116
  content: ContentBlob[];
109
117
  }
110
118
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../src/plugins/dynamic-experiences/types.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../src/plugins/dynamic-experiences/types.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,14 @@
1
+ /** The `postMessage` `type` discriminator for navigation reports sent to the embedding parent frame. */
2
+ export declare const PREVIEW_NAVIGATION_MESSAGE = "picked-preview:navigation";
3
+ /**
4
+ * Starts reporting this frame's URL to the embedding parent frame: posts immediately, then again on
5
+ * every SPA navigation (`history.pushState`/`replaceState` and `popstate`). Listeners are wired at
6
+ * most once per frame, so multiple Picked clients on the same page do not double-report.
7
+ *
8
+ * @returns {() => void} A teardown function that detaches the `popstate` listener and re-arms the bridge.
9
+ * @example
10
+ * const stop = initPreviewBridge()
11
+ * // later, e.g. in a test: stop()
12
+ */
13
+ export declare function initPreviewBridge(): () => void;
14
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/preview-bridge/index.ts"],"names":[],"mappings":"AAUA,wGAAwG;AACxG,eAAO,MAAM,0BAA0B,8BAA8B,CAAA;AAmErE;;;;;;;;;GASG;AACH,wBAAgB,iBAAiB,IAAI,MAAM,IAAI,CAwB9C"}
@@ -1,6 +1,12 @@
1
1
  import { Picked } from '../picked';
2
2
  import { ExperienceInstance } from '../entities/experience-instance/experience-instance';
3
3
  import { AdaptedComponent } from '../entities/component/component';
4
+ export { serialize, type PickedSnapshot, type SerializeParams, type SerializeAttributes, type SerializeLocation, type SerializeGetContent, } from './serialize';
5
+ export { createExperienceInstance } from '../entities/experience-instance/experience-instance';
6
+ export type { ExperienceInstance } from '../entities/experience-instance/experience-instance';
7
+ export { registerProjectConfig } from '../plugins/dynamic-experiences/plugin';
8
+ export { hashRule, evaluateConditionMemo, isExperienceActive, ruleReferencesAction, } from '../lifecycle/condition-selection';
9
+ export type { ContentBlob, ProjectConfig, ProjectConfigExperience, ExperienceContentResponse, } from '../plugins/dynamic-experiences/types';
4
10
  export interface Renderer<T = AdaptedComponent<string, unknown>> {
5
11
  isValidComponent: (component: AdaptedComponent<string, unknown>) => boolean;
6
12
  render: (component: T, client: Picked, experience: ExperienceInstance) => Promise<{
@@ -14,6 +20,8 @@ export interface Renderer<T = AdaptedComponent<string, unknown>> {
14
20
  * @param {Picked} client - The Picked client instance.
15
21
  * @param {Renderer[]} renderers - Array of available renderers to use.
16
22
  * @returns {Promise<string[]>} A promise resolving to rendered experience HTML strings.
23
+ * @example
24
+ * const html = await render(client, [svelteRenderer])
17
25
  */
18
26
  export declare function render(client: Picked, renderers: Renderer[]): Promise<string[]>;
19
27
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/server/index.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,WAAW,CAAA;AACvC,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,qDAAqD,CAAA;AAE7F,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,iCAAiC,CAAA;AAwBvE,MAAM,WAAW,QAAQ,CAAC,CAAC,GAAG,gBAAgB,CAAC,MAAM,EAAE,OAAO,CAAC;IAC7D,gBAAgB,EAAE,CAAC,SAAS,EAAE,gBAAgB,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,OAAO,CAAA;IAC3E,MAAM,EAAE,CACN,SAAS,EAAE,CAAC,EACZ,MAAM,EAAE,MAAM,EACd,UAAU,EAAE,kBAAkB,KAC3B,OAAO,CAAC;QACX,IAAI,EAAE,MAAM,CAAA;QACZ,IAAI,EAAE,MAAM,CAAA;KACb,CAAC,CAAA;CACH;AAmBD;;;;;;GAMG;AACH,wBAAgB,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,QAAQ,EAAE,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CAkJ/E"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/server/index.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,WAAW,CAAA;AACvC,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,qDAAqD,CAAA;AAE7F,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,iCAAiC,CAAA;AAEvE,OAAO,EACL,SAAS,EACT,KAAK,cAAc,EACnB,KAAK,eAAe,EACpB,KAAK,mBAAmB,EACxB,KAAK,iBAAiB,EACtB,KAAK,mBAAmB,GACzB,MAAM,aAAa,CAAA;AACpB,OAAO,EAAE,wBAAwB,EAAE,MAAM,qDAAqD,CAAA;AAC9F,YAAY,EAAE,kBAAkB,EAAE,MAAM,qDAAqD,CAAA;AAC7F,OAAO,EAAE,qBAAqB,EAAE,MAAM,uCAAuC,CAAA;AAC7E,OAAO,EACL,QAAQ,EACR,qBAAqB,EACrB,kBAAkB,EAClB,oBAAoB,GACrB,MAAM,kCAAkC,CAAA;AACzC,YAAY,EACV,WAAW,EACX,aAAa,EACb,uBAAuB,EACvB,yBAAyB,GAC1B,MAAM,sCAAsC,CAAA;AA0B7C,MAAM,WAAW,QAAQ,CAAC,CAAC,GAAG,gBAAgB,CAAC,MAAM,EAAE,OAAO,CAAC;IAC7D,gBAAgB,EAAE,CAAC,SAAS,EAAE,gBAAgB,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,OAAO,CAAA;IAC3E,MAAM,EAAE,CACN,SAAS,EAAE,CAAC,EACZ,MAAM,EAAE,MAAM,EACd,UAAU,EAAE,kBAAkB,KAC3B,OAAO,CAAC;QACX,IAAI,EAAE,MAAM,CAAA;QACZ,IAAI,EAAE,MAAM,CAAA;KACb,CAAC,CAAA;CACH;AAmBD;;;;;;;;GAQG;AACH,wBAAgB,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,QAAQ,EAAE,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,CAoJ/E"}
@@ -0,0 +1,84 @@
1
+ import { Picked } from '../picked';
2
+ import { ContentBlob, ExperienceContentResponse, ProjectConfig } from '../plugins/dynamic-experiences/types';
3
+ /** Subset of `Location` fields that can be injected into the selection context. */
4
+ export interface SerializeLocation {
5
+ href: string;
6
+ pathname: string;
7
+ search: string;
8
+ hostname: string;
9
+ origin: string;
10
+ protocol: string;
11
+ port: string;
12
+ host: string;
13
+ hash: string;
14
+ }
15
+ /** Optional attributes injected into the selection context (currently the URL). */
16
+ export interface SerializeAttributes {
17
+ location?: Partial<SerializeLocation>;
18
+ }
19
+ /** Customer-supplied content fetcher used in place of the runtime API during serialization. */
20
+ export type SerializeGetContent = (experience: {
21
+ id: string;
22
+ key: string;
23
+ }, options?: {
24
+ previewToken?: string;
25
+ }) => Promise<ExperienceContentResponse | null>;
26
+ /** Parameters for {@link serialize}. */
27
+ export interface SerializeParams {
28
+ /** The project config to register and select against. */
29
+ projectConfig: ProjectConfig;
30
+ /** URL attributes injected into the selection context. */
31
+ attributes?: SerializeAttributes;
32
+ /** Optional content fetcher; falls back to the runtime API when omitted. */
33
+ getContent?: SerializeGetContent;
34
+ /**
35
+ * Preview token forwarded to the default API content fetch (and to a custom `getContent`), so
36
+ * preview (unpublished) content resolves during preview SSR. The server has no `searchParams`,
37
+ * so the token cannot be recovered otherwise.
38
+ */
39
+ previewToken?: string;
40
+ /**
41
+ * Per-content-fetch timeout in milliseconds for the default API path, so a slow or hung upstream
42
+ * cannot stall the SSR render indefinitely. On timeout the blob is skipped and the render
43
+ * proceeds (matching the existing null-tolerant path). Defaults to {@link DEFAULT_CONTENT_TIMEOUT_MS}.
44
+ */
45
+ timeoutMs?: number;
46
+ }
47
+ /**
48
+ * Plain-JSON SSR snapshot produced by {@link serialize} and consumed by the client provider.
49
+ */
50
+ export interface PickedSnapshot {
51
+ /** The project version the snapshot was selected against, or `null` when unknown. */
52
+ versionId: string | null;
53
+ /** The project config the server selected with (travels for preview parity). */
54
+ projectConfig: ProjectConfig;
55
+ /** Deduped content blobs for the selected experiences. */
56
+ content: ContentBlob[];
57
+ /** Memoized condition-evaluation results keyed by rule hash. */
58
+ conditionResults: Record<string, boolean>;
59
+ }
60
+ /**
61
+ * Registers a project config, selects experiences whose conditions pass for the given URL,
62
+ * fetches content for the selected experiences that reference CMS layout content, and returns
63
+ * a plain-JSON snapshot for SSR hydration.
64
+ *
65
+ * Registration is synchronous (no `client.start()`), so the client's stores are populated
66
+ * before selection. The condition-results store is reset at entry so a client reused across
67
+ * requests never seeds one request's selection with another's; `serialize` still expects a
68
+ * per-request client (concurrent calls on one client are not supported). Each experience's own
69
+ * condition is evaluated through the memoized evaluator against the injected URL; client-level
70
+ * precondition/condition are not evaluated here in v1. Content is fetched via the `getContent`
71
+ * override when provided, otherwise via the runtime API (with `previewToken` forwarded and a
72
+ * per-fetch timeout so a slow upstream cannot stall the render), and deduped by blob id.
73
+ *
74
+ * @param {Picked} client - The Picked client to register and select with.
75
+ * @param {SerializeParams} params - Project config, URL attributes, and optional content fetcher.
76
+ * @returns {Promise<PickedSnapshot>} The plain-JSON snapshot of config, content, and condition results.
77
+ * @example
78
+ * const snapshot = await serialize(client, {
79
+ * projectConfig,
80
+ * attributes: { location: { pathname: '/promo' } },
81
+ * })
82
+ */
83
+ export declare function serialize(client: Picked, params: SerializeParams): Promise<PickedSnapshot>;
84
+ //# sourceMappingURL=serialize.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"serialize.d.ts","sourceRoot":"","sources":["../../../src/server/serialize.ts"],"names":[],"mappings":"AAWA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,WAAW,CAAA;AAOvC,OAAO,KAAK,EACV,WAAW,EACX,yBAAyB,EACzB,aAAa,EAEd,MAAM,sCAAsC,CAAA;AAE7C,mFAAmF;AACnF,MAAM,WAAW,iBAAiB;IAChC,IAAI,EAAE,MAAM,CAAA;IACZ,QAAQ,EAAE,MAAM,CAAA;IAChB,MAAM,EAAE,MAAM,CAAA;IACd,QAAQ,EAAE,MAAM,CAAA;IAChB,MAAM,EAAE,MAAM,CAAA;IACd,QAAQ,EAAE,MAAM,CAAA;IAChB,IAAI,EAAE,MAAM,CAAA;IACZ,IAAI,EAAE,MAAM,CAAA;IACZ,IAAI,EAAE,MAAM,CAAA;CACb;AAED,mFAAmF;AACnF,MAAM,WAAW,mBAAmB;IAClC,QAAQ,CAAC,EAAE,OAAO,CAAC,iBAAiB,CAAC,CAAA;CACtC;AAED,+FAA+F;AAC/F,MAAM,MAAM,mBAAmB,GAAG,CAChC,UAAU,EAAE;IACV,EAAE,EAAE,MAAM,CAAA;IACV,GAAG,EAAE,MAAM,CAAA;CACZ,EACD,OAAO,CAAC,EAAE;IAAE,YAAY,CAAC,EAAE,MAAM,CAAA;CAAE,KAChC,OAAO,CAAC,yBAAyB,GAAG,IAAI,CAAC,CAAA;AAK9C,wCAAwC;AACxC,MAAM,WAAW,eAAe;IAC9B,yDAAyD;IACzD,aAAa,EAAE,aAAa,CAAA;IAC5B,0DAA0D;IAC1D,UAAU,CAAC,EAAE,mBAAmB,CAAA;IAChC,4EAA4E;IAC5E,UAAU,CAAC,EAAE,mBAAmB,CAAA;IAChC;;;;OAIG;IACH,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB;;;;OAIG;IACH,SAAS,CAAC,EAAE,MAAM,CAAA;CACnB;AAED;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B,qFAAqF;IACrF,SAAS,EAAE,MAAM,GAAG,IAAI,CAAA;IACxB,gFAAgF;IAChF,aAAa,EAAE,aAAa,CAAA;IAC5B,0DAA0D;IAC1D,OAAO,EAAE,WAAW,EAAE,CAAA;IACtB,gEAAgE;IAChE,gBAAgB,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;CAC1C;AAoCD;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,wBAAsB,SAAS,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,eAAe,GAAG,OAAO,CAAC,cAAc,CAAC,CAgEhG"}
@@ -1,3 +1,25 @@
1
- export declare function get(baseUrl: string, path: string, headers?: Record<string, string>): Promise<Response>;
1
+ /**
2
+ * Performs a GET request against the Picked API.
3
+ *
4
+ * @param {string} baseUrl - The API origin.
5
+ * @param {string} path - The path relative to `/api/v1/`.
6
+ * @param {Record<string, string>} [headers] - Optional header overrides.
7
+ * @param {AbortSignal} [signal] - Optional abort signal, such as a timeout deadline.
8
+ * @returns {Promise<Response>} The fetch response.
9
+ * @example
10
+ * const response = await get('https://api.picked.app', 'projects/p1')
11
+ */
12
+ export declare function get(baseUrl: string, path: string, headers?: Record<string, string>, signal?: AbortSignal): Promise<Response>;
13
+ /**
14
+ * Performs a JSON POST request against the Picked API.
15
+ *
16
+ * @param {string} baseUrl - The API origin.
17
+ * @param {string} path - The path relative to `/api/v1/`.
18
+ * @param {unknown} data - The request body, serialised as JSON.
19
+ * @param {Record<string, string>} [headers] - Optional header overrides.
20
+ * @returns {Promise<Response>} The fetch response.
21
+ * @example
22
+ * const response = await post('https://api.picked.app', 'events', { type: 'load' })
23
+ */
2
24
  export declare function post(baseUrl: string, path: string, data: unknown, headers?: Record<string, string>): Promise<Response>;
3
25
  //# sourceMappingURL=api.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"api.d.ts","sourceRoot":"","sources":["../../../src/utils/api.ts"],"names":[],"mappings":"AAaA,wBAAsB,GAAG,CACvB,OAAO,EAAE,MAAM,EACf,IAAI,EAAE,MAAM,EACZ,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAC/B,OAAO,CAAC,QAAQ,CAAC,CAInB;AAED,wBAAsB,IAAI,CACxB,OAAO,EAAE,MAAM,EACf,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,OAAO,EACb,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAC/B,OAAO,CAAC,QAAQ,CAAC,CAQnB"}
1
+ {"version":3,"file":"api.d.ts","sourceRoot":"","sources":["../../../src/utils/api.ts"],"names":[],"mappings":"AA+BA;;;;;;;;;;GAUG;AACH,wBAAsB,GAAG,CACvB,OAAO,EAAE,MAAM,EACf,IAAI,EAAE,MAAM,EACZ,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EAChC,MAAM,CAAC,EAAE,WAAW,GACnB,OAAO,CAAC,QAAQ,CAAC,CAInB;AAED;;;;;;;;;;GAUG;AACH,wBAAsB,IAAI,CACxB,OAAO,EAAE,MAAM,EACf,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,OAAO,EACb,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAC/B,OAAO,CAAC,QAAQ,CAAC,CAQnB"}
@@ -1,12 +1,97 @@
1
+ /**
2
+ * Determines whether the global `location` object is available.
3
+ *
4
+ * @returns {boolean} True when `location` is available.
5
+ * @example
6
+ * supportsLocation()
7
+ */
1
8
  export declare function supportsLocation(): boolean;
9
+ /**
10
+ * Determines whether the global `history` object is available.
11
+ *
12
+ * @returns {boolean} True when `history` is available.
13
+ * @example
14
+ * supportsHistory()
15
+ */
2
16
  export declare function supportsHistory(): boolean;
17
+ /**
18
+ * Determines whether `localStorage` is available.
19
+ *
20
+ * @returns {boolean} True when `localStorage` is available.
21
+ * @example
22
+ * supportsLocalStorage()
23
+ */
3
24
  export declare function supportsLocalStorage(): boolean;
25
+ /**
26
+ * Determines whether `sessionStorage` is available.
27
+ *
28
+ * @returns {boolean} True when `sessionStorage` is available.
29
+ * @example
30
+ * supportsSessionStorage()
31
+ */
4
32
  export declare function supportsSessionStorage(): boolean;
33
+ /**
34
+ * Determines whether `document.cookie` is available.
35
+ *
36
+ * @returns {boolean} True when cookies are available.
37
+ * @example
38
+ * supportsCookies()
39
+ */
5
40
  export declare function supportsCookies(): boolean;
41
+ /**
42
+ * Determines whether Shadow DOM (`attachShadow`) is available.
43
+ *
44
+ * @returns {boolean} True when Shadow DOM is available.
45
+ * @example
46
+ * supportsShadowRoot()
47
+ */
6
48
  export declare function supportsShadowRoot(): boolean;
49
+ /**
50
+ * Determines whether the global `window` object is available.
51
+ *
52
+ * @returns {boolean} True when `window` is available.
53
+ * @example
54
+ * supportsWindow()
55
+ */
7
56
  export declare function supportsWindow(): boolean;
57
+ /**
58
+ * Determines whether the current context runs inside an iframe (its top window differs from itself).
59
+ *
60
+ * @returns {boolean} True when embedded in an iframe.
61
+ * @example
62
+ * isInsideIframe()
63
+ */
64
+ export declare function isInsideIframe(): boolean;
65
+ /**
66
+ * Determines whether the global `document` object is available.
67
+ *
68
+ * @returns {boolean} True when `document` is available.
69
+ * @example
70
+ * supportsDocument()
71
+ */
8
72
  export declare function supportsDocument(): boolean;
73
+ /**
74
+ * Determines whether `IntersectionObserver` is available.
75
+ *
76
+ * @returns {boolean} True when `IntersectionObserver` is available.
77
+ * @example
78
+ * supportsIntersectionObserver()
79
+ */
9
80
  export declare function supportsIntersectionObserver(): boolean;
81
+ /**
82
+ * Determines whether Custom Elements (`customElements`) are available.
83
+ *
84
+ * @returns {boolean} True when Custom Elements are available.
85
+ * @example
86
+ * supportsWebComponents()
87
+ */
10
88
  export declare function supportsWebComponents(): boolean;
89
+ /**
90
+ * Determines whether `crypto.randomUUID` is available.
91
+ *
92
+ * @returns {boolean} True when `crypto.randomUUID` is available.
93
+ * @example
94
+ * supportsCryptoRandomUUID()
95
+ */
11
96
  export declare function supportsCryptoRandomUUID(): boolean;
12
97
  //# sourceMappingURL=supports.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"supports.d.ts","sourceRoot":"","sources":["../../../src/utils/supports.ts"],"names":[],"mappings":"AAEA,wBAAgB,gBAAgB,IAAI,OAAO,CAM1C;AAED,wBAAgB,eAAe,IAAI,OAAO,CAMzC;AAED,wBAAgB,oBAAoB,IAAI,OAAO,CAM9C;AAED,wBAAgB,sBAAsB,IAAI,OAAO,CAMhD;AAED,wBAAgB,eAAe,IAAI,OAAO,CAMzC;AAED,wBAAgB,kBAAkB,IAAI,OAAO,CAU5C;AAED,wBAAgB,cAAc,IAAI,OAAO,CAMxC;AAED,wBAAgB,gBAAgB,IAAI,OAAO,CAM1C;AAED,wBAAgB,4BAA4B,IAAI,OAAO,CAMtD;AAED,wBAAgB,qBAAqB,IAAI,OAAO,CAM/C;AAED,wBAAgB,wBAAwB,IAAI,OAAO,CAMlD"}
1
+ {"version":3,"file":"supports.d.ts","sourceRoot":"","sources":["../../../src/utils/supports.ts"],"names":[],"mappings":"AAGA;;;;;;GAMG;AACH,wBAAgB,gBAAgB,IAAI,OAAO,CAM1C;AAED;;;;;;GAMG;AACH,wBAAgB,eAAe,IAAI,OAAO,CAMzC;AAED;;;;;;GAMG;AACH,wBAAgB,oBAAoB,IAAI,OAAO,CAM9C;AAED;;;;;;GAMG;AACH,wBAAgB,sBAAsB,IAAI,OAAO,CAMhD;AAED;;;;;;GAMG;AACH,wBAAgB,eAAe,IAAI,OAAO,CAMzC;AAED;;;;;;GAMG;AACH,wBAAgB,kBAAkB,IAAI,OAAO,CAU5C;AAED;;;;;;GAMG;AACH,wBAAgB,cAAc,IAAI,OAAO,CAMxC;AAED;;;;;;GAMG;AACH,wBAAgB,cAAc,IAAI,OAAO,CAMxC;AAED;;;;;;GAMG;AACH,wBAAgB,gBAAgB,IAAI,OAAO,CAM1C;AAED;;;;;;GAMG;AACH,wBAAgB,4BAA4B,IAAI,OAAO,CAMtD;AAED;;;;;;GAMG;AACH,wBAAgB,qBAAqB,IAAI,OAAO,CAM/C;AAED;;;;;;GAMG;AACH,wBAAgB,wBAAwB,IAAI,OAAO,CAMlD"}