@picked/client 0.0.1-dev.1777938796953 → 0.0.1-dev.1778136207545

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 (102) hide show
  1. package/README.md +0 -8
  2. package/dist/{api-Bn4z854o.js → api-Crj5wFbR.js} +1 -1
  3. package/dist/{api-GE6C0lxp.cjs → api-NcKXNrkY.cjs} +1 -1
  4. package/dist/cjs/form/index.js +1 -1
  5. package/dist/cjs/index.js +4 -4
  6. package/dist/cjs/plugins/dynamic-experiences/index.js +1 -1
  7. package/dist/cjs/plugins/experience-browser-storage/index.js +1 -1
  8. package/dist/cjs/plugins/history-browser-storage/index.js +1 -1
  9. package/dist/cjs/plugins/single-page-app/index.js +1 -1
  10. package/dist/cjs/plugins/web-components/index.js +1 -1
  11. package/dist/cjs/server/index.js +1 -1
  12. package/dist/docs/actions.mdx +0 -1
  13. package/dist/docs/index.md +0 -2
  14. package/dist/docs/pickedql/dimensions.md +2 -0
  15. package/dist/docs/pickedql/virtual-functions.md +27 -0
  16. package/dist/docs/sdk/actions.md +0 -1
  17. package/dist/docs/sdk/features.md +0 -1
  18. package/dist/docs/sdk/index.md +0 -1
  19. package/dist/docs/sdk/plugins/create-experience.md +0 -1
  20. package/dist/docs/sdk/plugins/dynamic-experiences.md +0 -1
  21. package/dist/docs/sdk/plugins/window-object.md +0 -1
  22. package/dist/docs/sdk/predicates.md +0 -1
  23. package/dist/esm/form/index.js +1 -1
  24. package/dist/esm/index.js +1011 -533
  25. package/dist/esm/plugins/dynamic-experiences/index.js +127 -60
  26. package/dist/esm/plugins/experience-browser-storage/index.js +8 -5
  27. package/dist/esm/plugins/history-browser-storage/index.js +3 -3
  28. package/dist/esm/plugins/single-page-app/index.js +1 -1
  29. package/dist/esm/plugins/web-components/index.js +1 -1
  30. package/dist/esm/server/index.js +23 -13
  31. package/dist/{experience-instance-CWYRLfFM.js → experience-instance-BrLWgVAN.js} +135 -127
  32. package/dist/experience-instance-Ct3ogC7n.cjs +1 -0
  33. package/dist/rules-logic-D_CVBuv7.js +13 -0
  34. package/dist/rules-logic-H6P8xwHF.cjs +1 -0
  35. package/dist/types/client.d.ts +2 -2
  36. package/dist/types/entities/action/action.d.ts +6 -3
  37. package/dist/types/entities/action/action.d.ts.map +1 -1
  38. package/dist/types/entities/component/component.d.ts +39 -2
  39. package/dist/types/entities/component/component.d.ts.map +1 -1
  40. package/dist/types/entities/content/content.d.ts +37 -0
  41. package/dist/types/entities/content/content.d.ts.map +1 -0
  42. package/dist/types/entities/experience/experience.d.ts +69 -112
  43. package/dist/types/entities/experience/experience.d.ts.map +1 -1
  44. package/dist/types/entities/experience-instance/experience-instance.d.ts +17 -2
  45. package/dist/types/entities/experience-instance/experience-instance.d.ts.map +1 -1
  46. package/dist/types/entities/feature/feature.d.ts +26 -2
  47. package/dist/types/entities/feature/feature.d.ts.map +1 -1
  48. package/dist/types/entities/field/field.d.ts.map +1 -1
  49. package/dist/types/entities/framework/framework.d.ts +24 -3
  50. package/dist/types/entities/framework/framework.d.ts.map +1 -1
  51. package/dist/types/entities/history/history.d.ts +15 -27
  52. package/dist/types/entities/history/history.d.ts.map +1 -1
  53. package/dist/types/entities/plugin/plugin.d.ts +32 -1
  54. package/dist/types/entities/plugin/plugin.d.ts.map +1 -1
  55. package/dist/types/entities/predicate/predicate.d.ts +24 -3
  56. package/dist/types/entities/predicate/predicate.d.ts.map +1 -1
  57. package/dist/types/entities/session/session.d.ts +45 -0
  58. package/dist/types/entities/session/session.d.ts.map +1 -0
  59. package/dist/types/entities/step/step.d.ts +14 -0
  60. package/dist/types/entities/step/step.d.ts.map +1 -1
  61. package/dist/types/exports.d.ts +9 -3
  62. package/dist/types/exports.d.ts.map +1 -1
  63. package/dist/types/index.d.ts +3 -1
  64. package/dist/types/index.d.ts.map +1 -1
  65. package/dist/types/lifecycle/lifecycle.d.ts +47 -0
  66. package/dist/types/lifecycle/lifecycle.d.ts.map +1 -0
  67. package/dist/types/lifecycle/rules-logic.d.ts +24 -0
  68. package/dist/types/lifecycle/rules-logic.d.ts.map +1 -0
  69. package/dist/types/lifecycle/state-snapshot.d.ts +37 -0
  70. package/dist/types/lifecycle/state-snapshot.d.ts.map +1 -0
  71. package/dist/types/logic-engine.d.ts +1 -1
  72. package/dist/types/logic-engine.d.ts.map +1 -1
  73. package/dist/types/picked.d.ts +149 -190
  74. package/dist/types/picked.d.ts.map +1 -1
  75. package/dist/types/plugins/dynamic-experiences/index.d.ts +2 -1
  76. package/dist/types/plugins/dynamic-experiences/index.d.ts.map +1 -1
  77. package/dist/types/plugins/dynamic-experiences/plugin.d.ts +18 -1
  78. package/dist/types/plugins/dynamic-experiences/plugin.d.ts.map +1 -1
  79. package/dist/types/plugins/dynamic-experiences/types.d.ts +62 -1
  80. package/dist/types/plugins/dynamic-experiences/types.d.ts.map +1 -1
  81. package/dist/types/plugins/experience-browser-storage/plugin.d.ts.map +1 -1
  82. package/dist/types/plugins/history-browser-storage/plugin.d.ts +0 -14
  83. package/dist/types/plugins/history-browser-storage/plugin.d.ts.map +1 -1
  84. package/dist/types/plugins/web-components/plugin.d.ts.map +1 -1
  85. package/dist/types/server/index.d.ts +7 -0
  86. package/dist/types/server/index.d.ts.map +1 -1
  87. package/dist/types/utils/events.d.ts +1 -1
  88. package/dist/types/utils/events.d.ts.map +1 -1
  89. package/dist/types/utils/picked-config.d.ts +12 -4
  90. package/dist/types/utils/picked-config.d.ts.map +1 -1
  91. package/dist/types/utils/rules-logic.d.ts +4 -9
  92. package/dist/types/utils/rules-logic.d.ts.map +1 -1
  93. package/package.json +2 -2
  94. package/dist/experience-instance-BDTNGT8a.cjs +0 -1
  95. package/dist/rules-logic-BTIxfrJJ.js +0 -240
  96. package/dist/rules-logic-DNLOv90w.cjs +0 -1
  97. package/dist/types/utils/state-snaphot.d.ts +0 -26
  98. package/dist/types/utils/state-snaphot.d.ts.map +0 -1
  99. package/dist/types/utils/user-session.d.ts +0 -12
  100. package/dist/types/utils/user-session.d.ts.map +0 -1
  101. /package/dist/{object-C82v79xc.js → object-DvUDOytC.js} +0 -0
  102. /package/dist/{object-CUJOjanb.cjs → object-ThO1DEyl.cjs} +0 -0
@@ -1,209 +1,175 @@
1
+ import { Effect, EventCallable, Store, StoreWritable } from 'effector';
1
2
  import { Experience, LaunchExperienceOptions } from './entities/experience/experience';
2
3
  import { Plugin, PluginConfigIndex } from './entities/plugin/plugin';
3
4
  import { CreateClientOptions } from './client';
4
5
  import { AdaptedComponent } from './entities/component/component';
5
6
  import { Framework } from './entities/framework/framework';
6
- import { StateSnapshot } from './utils/state-snaphot';
7
+ import { StateSnapshot } from './lifecycle/state-snapshot';
8
+ import { EvaluateRuleLogicParams } from './lifecycle/rules-logic';
9
+ import { LifecycleStage } from './lifecycle/lifecycle';
7
10
  import { Predicate } from './entities/predicate/predicate';
8
11
  import { Feature } from './entities/feature/feature';
9
12
  import { EventBusPayload, EventHistoryStore } from './utils/events';
10
13
  import { Field } from './entities/field/field';
11
14
  import { ExperienceStep } from './entities/step/step';
15
+ import { Content } from './entities/content/content';
16
+ import { ContentLoader } from './plugins/dynamic-experiences/types';
12
17
  import { Action } from './entities/action/action';
13
18
  import { Condition } from './entities/condition/condition';
14
- import { SessionStore } from './utils/user-session';
15
- import { LogicRule } from './logic-engine';
19
+ import { SessionEntity } from './entities/session/session';
20
+ /**
21
+ * Provenance metadata describing where the Picked client's project config and
22
+ * content came from. Set by `dynamicExperiencesPlugin` when the Vite plugin's
23
+ * virtual data module is available; remains `null` otherwise.
24
+ */
25
+ export interface PickedDataSource {
26
+ /** `'build'` when build-mode prefetch JSON was used, `'dev'` when the dev-mode runtime fetch was used. */
27
+ mode: 'dev' | 'build';
28
+ /** ISO 8601 timestamp from the manifest. `null` in dev mode where no manifest is written. */
29
+ fetchedAt: string | null;
30
+ /** The `versionId` recorded by the source, when known. */
31
+ projectVersionId: string | null;
32
+ /** The `workspaceId` recorded by the source, when known. */
33
+ workspaceId: string | null;
34
+ }
16
35
  export declare class Picked {
17
36
  static readonly logger: (level: "log" | "warn" | "info" | "error", ...args: Parameters<Console["log"]>) => void;
18
37
  private readonly options;
19
- isReady: boolean;
38
+ /**
39
+ * Provenance metadata for the data backing this client. Populated by
40
+ * `dynamicExperiencesPlugin` when the Vite plugin's virtual data module is
41
+ * resolvable; remains `null` when the SDK is using the runtime API path.
42
+ */
43
+ dataSource: PickedDataSource | null;
44
+ /**
45
+ * Content fetcher selected by `dynamicExperiencesPlugin`'s resolution chain.
46
+ * Called by `prepareExperienceContent` between target-match and
47
+ * the per-experience `initialiseFx`. `undefined` when no plugin has registered one yet.
48
+ */
49
+ contentLoader?: ContentLoader;
20
50
  private readonly plugins;
21
- private readonly pluginStartHooks;
22
- readonly eventBus: import('effector').EventCallable<EventBusPayload>;
51
+ readonly eventBus: EventCallable<EventBusPayload>;
23
52
  readonly events: EventHistoryStore;
24
- readonly organizationId: string;
25
53
  readonly projectId: string;
26
54
  readonly apiUrl: string;
27
55
  readonly dashboardUrl: string;
28
56
  readonly documentationSiteUrl: string;
29
- readonly session?: SessionStore | null;
30
- readonly precondition?: LogicRule | boolean;
31
- readonly condition?: LogicRule | boolean;
32
- preconditionPassed?: boolean;
57
+ readonly session: SessionEntity;
33
58
  readonly searchParams: import('.').PickedSearchParams;
34
59
  readonly history: {
35
- push: import('effector').EventCallable<import('.').InstanceNodeIntent>;
36
- replace: import('effector').EventCallable<import('.').InstanceNodeIntent>;
37
- back: import('effector').EventCallable<Pick<import('.').InstanceScope, "instanceId">>;
38
- restoreSnapshots: import('effector').EventCallable<{
39
- snapshots: Record<string, import('.').HistoryEntry[]>;
60
+ push: EventCallable<{
61
+ experienceId: string;
62
+ node: import('.').ExperienceNode;
63
+ }>;
64
+ replace: EventCallable<{
65
+ experienceId: string;
66
+ node: import('.').ExperienceNode;
67
+ }>;
68
+ back: EventCallable<{
69
+ experienceId?: string;
40
70
  }>;
41
- seedInstanceFromSnapshot: import('effector').EventCallable<import('.').InstanceScope>;
42
- entriesStore: import('effector').Store<import('.').HistoryEntry[]>;
43
- snapshotStore: import('effector').Store<Record<string, import('.').HistoryEntry[]>>;
71
+ restore: EventCallable<{
72
+ entries: import('.').HistoryEntry[];
73
+ }>;
74
+ entriesStore: Store<import('.').HistoryEntry[]>;
44
75
  };
45
76
  readonly components: {
46
- register: (name: string, component: AdaptedComponent) => void;
47
- getByName: (name: string) => import('effector').Store<{
77
+ register: EventCallable<{
78
+ name: string;
79
+ component: AdaptedComponent;
80
+ }>;
81
+ getByName: (name: string) => Store<{
48
82
  name: string;
49
83
  component: AdaptedComponent;
50
84
  } | undefined>;
51
- listStore: import('effector').Store<{
85
+ listStore: Store<{
52
86
  name: string;
53
87
  component: AdaptedComponent<string, unknown>;
54
- frameworkStore: import('effector').Store<Framework | undefined>;
88
+ frameworkStore: Store<Framework | undefined>;
55
89
  }[]>;
56
90
  };
57
91
  readonly experienceInstances: {
58
92
  spawn: (experience: import('.').ExperienceStore, target: HTMLElement, options?: LaunchExperienceOptions) => void;
59
- getByExperienceKey: (key: Experience["key"]) => import('effector').Store<import('.').ExperienceInstance[]>;
60
- getByExperienceId: (id: Experience["id"]) => import('effector').Store<import('.').ExperienceInstance[]>;
61
- listStore: import('effector').Store<import('.').ExperienceInstance[]>;
93
+ getByExperienceKey: (key: Experience["key"]) => Store<import('.').ExperienceInstance[]>;
94
+ getByExperienceId: (id: Experience["id"]) => Store<import('.').ExperienceInstance[]>;
95
+ listStore: Store<import('.').ExperienceInstance[]>;
62
96
  };
63
97
  readonly experiences: {
64
- register: (experience: Experience) => void;
65
- get: (id: Experience["id"]) => import('effector').Store<{
66
- id: string;
67
- key: string;
68
- name: string;
69
- configStore: import('effector').Store<{
70
- name: string;
71
- decisionLogic: import('./logic-engine').LogicValue | LogicRule;
72
- targetSelectors: import('.').ExperienceTarget[];
73
- initializeOpenLogic: import('./logic-engine').LogicValue | LogicRule;
74
- }>;
75
- treeStore: import('effector').Store<{
76
- steps: ExperienceStep[];
77
- nodes: import('.').ExperienceNode[];
78
- edges: import('.').ExperienceEdge[];
79
- conditions: Condition[];
80
- }>;
81
- componentStore: import('effector').Store<{
82
- name: string;
83
- component: AdaptedComponent<string, unknown>;
84
- frameworkStore: import('effector').Store<Framework | undefined>;
85
- } | undefined>;
86
- actions: import('.').ExperienceAction[];
87
- merge: import('effector').EventCallable<{
88
- experience: Partial<Experience>;
89
- strategy: "override";
90
- }>;
91
- } | undefined>;
92
- getById: (id: Experience["id"]) => import('effector').Store<{
93
- id: string;
94
- key: string;
95
- name: string;
96
- configStore: import('effector').Store<{
97
- name: string;
98
- decisionLogic: import('./logic-engine').LogicValue | LogicRule;
99
- targetSelectors: import('.').ExperienceTarget[];
100
- initializeOpenLogic: import('./logic-engine').LogicValue | LogicRule;
101
- }>;
102
- treeStore: import('effector').Store<{
103
- steps: ExperienceStep[];
104
- nodes: import('.').ExperienceNode[];
105
- edges: import('.').ExperienceEdge[];
106
- conditions: Condition[];
107
- }>;
108
- componentStore: import('effector').Store<{
109
- name: string;
110
- component: AdaptedComponent<string, unknown>;
111
- frameworkStore: import('effector').Store<Framework | undefined>;
112
- } | undefined>;
113
- actions: import('.').ExperienceAction[];
114
- merge: import('effector').EventCallable<{
115
- experience: Partial<Experience>;
116
- strategy: "override";
117
- }>;
118
- } | undefined>;
119
- getByKey: (key: Experience["key"]) => import('effector').Store<import('.').ExperienceStore | undefined>;
120
- launch: import('effector').Effect<{
98
+ register: EventCallable<Experience>;
99
+ get: (id: Experience["id"]) => Store<import('.').ExperienceStore | undefined>;
100
+ getById: (id: Experience["id"]) => Store<import('.').ExperienceStore | undefined>;
101
+ getByKey: (key: Experience["key"]) => Store<import('.').ExperienceStore | undefined>;
102
+ launch: Effect<{
121
103
  key: string;
122
104
  options?: LaunchExperienceOptions;
123
105
  } | {
124
106
  id: string;
125
107
  options?: LaunchExperienceOptions;
126
108
  }, void, Error>;
127
- open: import('effector').Effect<{
109
+ open: Effect<{
128
110
  key: string;
129
111
  options?: import('./exports').OpenExperienceOptions;
130
112
  } | {
131
113
  id: string;
132
114
  options?: import('./exports').OpenExperienceOptions;
133
115
  }, void, Error>;
134
- listStore: import('effector').Store<{
135
- id: string;
136
- key: string;
137
- name: string;
138
- configStore: import('effector').Store<{
139
- name: string;
140
- decisionLogic: import('./logic-engine').LogicValue | LogicRule;
141
- targetSelectors: import('.').ExperienceTarget[];
142
- initializeOpenLogic: import('./logic-engine').LogicValue | LogicRule;
143
- }>;
144
- treeStore: import('effector').Store<{
145
- steps: ExperienceStep[];
146
- nodes: import('.').ExperienceNode[];
147
- edges: import('.').ExperienceEdge[];
148
- conditions: Condition[];
149
- }>;
150
- componentStore: import('effector').Store<{
151
- name: string;
152
- component: AdaptedComponent<string, unknown>;
153
- frameworkStore: import('effector').Store<Framework | undefined>;
154
- } | undefined>;
155
- actions: import('.').ExperienceAction[];
156
- merge: import('effector').EventCallable<{
157
- experience: Partial<Experience>;
158
- strategy: "override";
159
- }>;
160
- }[]>;
116
+ listStore: Store<import('.').ExperienceStore[]>;
117
+ initialiseExperiencesFx: Effect<void, void, Error>;
161
118
  };
162
119
  readonly frameworks: {
163
- register: (name: string, framework: Framework) => void;
164
- getByName: (name: string) => import('effector').Store<Framework | undefined>;
165
- listStore: import('effector').Store<Framework[]>;
120
+ register: EventCallable<{
121
+ name: string;
122
+ framework: Framework;
123
+ }>;
124
+ getByName: (name: string) => Store<Framework | undefined>;
125
+ listStore: Store<Framework[]>;
166
126
  };
167
127
  readonly predicates: {
168
- register: (name: string, predicate: Predicate) => void;
169
- getByName: (name: string) => import('effector').Store<Predicate | undefined>;
170
- listStore: import('effector').Store<{
128
+ register: EventCallable<{
129
+ name: string;
130
+ predicate: Predicate;
131
+ }>;
132
+ getByName: (name: string) => Store<Predicate | undefined>;
133
+ listStore: Store<{
171
134
  name: string;
172
135
  predicate: Predicate;
173
136
  }[]>;
174
- getEvokablePredicate: (predicateName: string) => import('effector').Store<() => ReturnType<Predicate>>;
137
+ getEvokablePredicate: (predicateName: string) => Store<() => ReturnType<Predicate>>;
175
138
  };
176
139
  readonly features: {
177
- register: (id: string, feature: Feature) => void;
178
- getById: (id: string) => import('effector').Store<import('.').FeatureBucket | undefined>;
179
- getByName: (name: string) => import('effector').Store<import('.').FeatureIndexItem | undefined>;
180
- listStore: import('effector').Store<import('.').FeatureBucket[]>;
181
- getEvokableFeature: (featureName: string) => import('effector').Store<() => Promise<boolean | string | undefined>>;
140
+ register: EventCallable<{
141
+ id: string;
142
+ feature: Feature;
143
+ }>;
144
+ getById: (id: string) => Store<import('.').FeatureBucket | undefined>;
145
+ getByName: (name: string) => Store<import('.').FeatureIndexItem | undefined>;
146
+ listStore: Store<import('.').FeatureBucket[]>;
147
+ getEvokableFeature: (featureName: string) => Store<() => Promise<boolean | string | undefined>>;
182
148
  };
183
149
  readonly conditions: {
184
150
  register: (condition: Condition) => void;
185
- getById: (id: Condition["id"]) => import('effector').Store<Condition | null>;
186
- getByKey: (key: Condition["key"]) => import('effector').Store<Condition | null>;
187
- listStore: import('effector').Store<Condition[]>;
188
- indexStore: import('effector').StoreWritable<{
151
+ getById: (id: Condition["id"]) => Store<Condition | null>;
152
+ getByKey: (key: Condition["key"]) => Store<Condition | null>;
153
+ listStore: Store<Condition[]>;
154
+ indexStore: StoreWritable<{
189
155
  [id: string]: Condition;
190
156
  }>;
191
157
  };
192
158
  readonly fields: {
193
159
  register: (field: Field) => void;
194
160
  update: (key: import('.').FieldBase["key"], updates: Partial<Field>) => void;
195
- getById: (id: import('.').FieldBase["id"]) => import('effector').Store<Field | null>;
196
- getByKey: (key: import('.').FieldBase["key"]) => import('effector').Store<Field | null>;
197
- listStore: import('effector').Store<Field[]>;
198
- getByName: (name: import('.').FieldBase["name"]) => import('effector').Store<Field | null>;
161
+ getById: (id: import('.').FieldBase["id"]) => Store<Field | null>;
162
+ getByKey: (key: import('.').FieldBase["key"]) => Store<Field | null>;
163
+ listStore: Store<Field[]>;
164
+ getByName: (name: import('.').FieldBase["name"]) => Store<Field | null>;
199
165
  };
200
166
  readonly responses: {
201
167
  register: {
202
168
  (fieldKey: Field["key"], response: import('.').Response): void;
203
169
  (payload: Record<Field["key"], import('.').Response>, response?: never): void;
204
170
  };
205
- clearAll: import('effector').EventCallable<void>;
206
- clear: import('effector').EventCallable<string>;
171
+ clearAll: EventCallable<void>;
172
+ clear: EventCallable<string>;
207
173
  commit: (responsesToCommit: import('.').CommitResponses) => Promise<{
208
174
  errors: import('.').ValidationError[];
209
175
  }>;
@@ -211,36 +177,71 @@ export declare class Picked {
211
177
  responsesToCommit: import('.').CommitResponses;
212
178
  validationErrors: import('.').ValidationError[];
213
179
  }>;
214
- listStore: import('effector').Store<{
180
+ listStore: Store<{
215
181
  fieldKey: string;
216
182
  value: import('.').FieldValue;
217
183
  }[]>;
218
- getAllStore: import('effector').Store<{
184
+ getAllStore: Store<{
219
185
  [fieldKey: string]: import('.').FieldValue;
220
186
  }>;
221
- getByFieldId: (id: Field["id"]) => import('effector').Store<import('.').FieldValue>;
222
- getByFieldKey: (key: Field["key"]) => import('effector').Store<import('.').FieldValue>;
223
- getByFieldName: (fieldName: Field["name"]) => import('effector').Store<import('.').FieldValue>;
187
+ getByFieldId: (id: Field["id"]) => Store<import('.').FieldValue>;
188
+ getByFieldKey: (key: Field["key"]) => Store<import('.').FieldValue>;
189
+ getByFieldName: (fieldName: Field["name"]) => Store<import('.').FieldValue>;
224
190
  };
225
191
  readonly steps: {
226
192
  register: (step: ExperienceStep) => void;
227
- getById: (id: ExperienceStep["id"]) => import('effector').Store<ExperienceStep | null>;
228
- getByKey: (key: ExperienceStep["key"]) => import('effector').Store<ExperienceStep | null>;
229
- listStore: import('effector').Store<ExperienceStep[]>;
230
- indexStore: import('effector').StoreWritable<{
193
+ getById: (id: ExperienceStep["id"]) => Store<ExperienceStep | null>;
194
+ getByKey: (key: ExperienceStep["key"]) => Store<ExperienceStep | null>;
195
+ listStore: Store<ExperienceStep[]>;
196
+ indexStore: StoreWritable<{
231
197
  [id: string]: ExperienceStep;
232
198
  }>;
233
199
  };
200
+ readonly contents: {
201
+ register: (content: Content) => void;
202
+ getById: (id: Content["id"]) => Store<Content | null>;
203
+ listStore: Store<Content[]>;
204
+ indexStore: StoreWritable<{
205
+ [id: string]: Content;
206
+ }>;
207
+ };
234
208
  readonly actions: {
235
- register: (key: string, action: Action) => void;
236
- getByKey: (key: string) => import('effector').Store<Action | undefined>;
237
- listStore: import('effector').Store<import('.').ActionIndexItem[]>;
209
+ register: EventCallable<{
210
+ key: string;
211
+ action: Action;
212
+ }>;
213
+ getByKey: (key: string) => Store<Action | undefined>;
214
+ listStore: Store<import('.').ActionIndexItem[]>;
238
215
  getEvokableAction: (actionKey: string, options?: {
239
216
  experience: import('.').ExperienceInstance;
240
- }) => import('effector').Store<() => ReturnType<Action>>;
217
+ }) => Store<() => ReturnType<Action>>;
241
218
  };
219
+ readonly stateSnapshotStore: Store<StateSnapshot>;
220
+ readonly evaluateRuleLogicFx: Effect<EvaluateRuleLogicParams, unknown, Error>;
221
+ /** Public trigger — fires the start chain. `await allSettled(client.start, { scope })` resolves once the chain has fully settled. */
222
+ readonly start: EventCallable<void>;
223
+ /** Reactive store of the readiness flag. */
224
+ readonly readyStore: StoreWritable<boolean>;
225
+ /** Reactive store of the precondition-gate result (`undefined` until `start` is fired). */
226
+ readonly preconditionPassedStore: StoreWritable<boolean | undefined>;
227
+ /** Reactive store of the condition-gate result (`undefined` until `start` is fired). */
228
+ readonly conditionPassedStore: StoreWritable<boolean | undefined>;
229
+ /** Reactive store of the current lifecycle stage. */
230
+ readonly lifecycleStageStore: StoreWritable<LifecycleStage>;
231
+ private readonly lifecycle;
232
+ /**
233
+ * Effect that interpolates a template string against the latest responses plus a caller-supplied context. Source is `responses.listStore` so renders are scope-aware and pick up the latest committed responses without `.getState()`.
234
+ *
235
+ * @example
236
+ * ```typescript
237
+ * const greeting = await client.renderStringFx({ template: 'Hi {{name}}', context: { name: 'Mae' } })
238
+ * ```
239
+ */
240
+ readonly renderStringFx: Effect<{
241
+ template: string;
242
+ context?: Record<string, unknown>;
243
+ }, string, Error>;
242
244
  constructor(options: CreateClientOptions);
243
- start: () => void;
244
245
  registerFramework: (framework: Framework) => void;
245
246
  registerComponent: (name: string, component: AdaptedComponent) => void;
246
247
  registerPlugin: (plugin: Plugin) => void;
@@ -249,9 +250,9 @@ export declare class Picked {
249
250
  registerCondition: (condition: Condition) => void;
250
251
  registerField: (field: Field) => void;
251
252
  registerStep: (step: ExperienceStep) => void;
253
+ registerContent: (content: Content) => void;
252
254
  registerAction: (key: string, action: Action) => void;
253
255
  registerExperience: (experience: Experience) => void;
254
- getStateSnapshot: () => StateSnapshot;
255
256
  /**
256
257
  * Launches an experience by ID.
257
258
  *
@@ -294,53 +295,11 @@ export declare class Picked {
294
295
  * ```
295
296
  */
296
297
  openExperienceByKey: (experienceKey: string) => Promise<void>;
297
- private runPluginStartHooks;
298
- private evaluateGate;
299
298
  private setupPlugins;
300
299
  private setupFeatures;
301
300
  private setupPredicates;
302
301
  private setupActions;
303
302
  private setupComponents;
304
303
  getPluginConfig: (pluginName: string) => PluginConfigIndex[string] | Record<string, unknown>;
305
- /**
306
- * Interpolates a template string using values from the client's response store and/or a provided context.
307
- * Supports dot-notation, modifiers, and executing functions found in the context.
308
- *
309
- * Sources:
310
- * - responses.*: Loaded automatically from the client's internal response store by fieldId (e.g. {{ responses.email }}).
311
- * - Context: Any non-responses.* key must be supplied in the context; nested dot-notation is supported.
312
- * - Functions: If a context value is a function, it is invoked and its result is rendered.
313
- *
314
- * Placeholders:
315
- * - {{ key | modifier: arg | modifier2: arg2 }} with modifiers applied left-to-right.
316
- *
317
- * Modifiers:
318
- * - default: Use the argument when the value is null, undefined, NaN, or empty string; otherwise return the value as a string.
319
- * - append: Append the argument (space-separated) when the value is non-empty.
320
- * - prepend: Prepend the argument (space-separated) when the value is non-empty.
321
- * - upper: Uppercase string values.
322
- * - lower: Lowercase string values.
323
- * - capitalize: Capitalize the first letter of string values.
324
- * - list: Format Arrays, Maps, and Sets via Intl.ListFormat (Maps render as key: value pairs).
325
- *
326
- * Behavior:
327
- * - Empty values (null, undefined, empty string, NaN) render as empty. Numeric 0 renders as "0", boolean false renders as "false", and boolean true renders as "true".
328
- * - Objects and arrays are JSON-stringified; Maps/Sets serialize to {} unless the list modifier is used.
329
- * - Unknown modifiers are ignored.
330
- *
331
- * @param template Template containing placeholders.
332
- * @param context Optional data for interpolation. Non-responses.* keys belong here; function values are executed.
333
- * @returns Interpolated string.
334
- * @example
335
- * renderString("Hello {{ name | default: 'Guest' | capitalize }}! Email: {{ responses.email | lower }}.", { name: "ALICE" })
336
- * // => "Hello Alice! Email: alice@example.com."
337
- * @example
338
- * renderString("User: {{ getName | capitalize }}", { getName: () => "alice" })
339
- * // => "User: Alice"
340
- * @example
341
- * renderString("Fruits: {{ fruits | list }}", { fruits: ["apple", "banana", "cherry"] })
342
- * // => "Fruits: apple, banana, and cherry"
343
- */
344
- renderString: (template: string, context?: Record<string, unknown>) => string;
345
304
  }
346
305
  //# sourceMappingURL=picked.d.ts.map
@@ -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,4 +1,5 @@
1
- export { dynamicExperiencesPlugin, fetchProject } from './plugin';
1
+ /** @file Public exports for the dynamic-experiences plugin (project config + per-experience content resolution). */
2
+ export { dynamicExperiencesPlugin, fetchExperienceContent, fetchProject } from './plugin';
2
3
  export { createClientHeaders } from '../../utils/client-headers';
3
4
  export type * from './types';
4
5
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/plugins/dynamic-experiences/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,wBAAwB,EAAE,YAAY,EAAE,MAAM,UAAU,CAAA;AACjE,OAAO,EAAE,mBAAmB,EAAE,MAAM,4BAA4B,CAAA;AAChE,mBAAmB,SAAS,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/plugins/dynamic-experiences/index.ts"],"names":[],"mappings":"AAAA,oHAAoH;AACpH,OAAO,EAAE,wBAAwB,EAAE,sBAAsB,EAAE,YAAY,EAAE,MAAM,UAAU,CAAA;AACzF,OAAO,EAAE,mBAAmB,EAAE,MAAM,4BAA4B,CAAA;AAChE,mBAAmB,SAAS,CAAA"}
@@ -1,5 +1,5 @@
1
1
  import { Plugin } from '../../entities/plugin/plugin';
2
- import { DynamicExperiencesPluginOptions, FetchProjectOptions, ProjectConfig } from './types';
2
+ import { DynamicExperiencesPluginOptions, ExperienceContentResponse, FetchProjectOptions, ProjectConfig } from './types';
3
3
  /**
4
4
  * Fetches the project configuration from the Picked REST API.
5
5
  *
@@ -16,6 +16,23 @@ import { DynamicExperiencesPluginOptions, FetchProjectOptions, ProjectConfig } f
16
16
  * ```
17
17
  */
18
18
  export declare function fetchProject(apiUrl: string, projectId: string, options?: FetchProjectOptions): Promise<ProjectConfig | null>;
19
+ /**
20
+ * Fetches per-experience content from the Picked API.
21
+ *
22
+ * Returns `null` on network failure, non-OK responses, or invalid JSON shape — preserving
23
+ * the failure-tolerant policy: experiences still render, layouts handle null defensively.
24
+ *
25
+ * @param {string} apiUrl - Base URL for the Picked API.
26
+ * @param {string} projectId - Project ID to fetch content for.
27
+ * @param {string} experienceId - Experience ID whose content to fetch.
28
+ * @param {FetchProjectOptions} [options] - Optional headers and preview token.
29
+ * @returns {Promise<ExperienceContentResponse | null>} Validated content response, or `null` on any failure.
30
+ * @example
31
+ * ```typescript
32
+ * const content = await fetchExperienceContent('https://api.picked.app', 'proj_1', 'exp_1')
33
+ * ```
34
+ */
35
+ export declare function fetchExperienceContent(apiUrl: string, projectId: string, experienceId: string, options?: FetchProjectOptions): Promise<ExperienceContentResponse | null>;
19
36
  /**
20
37
  * Plugin that fetches project configuration from the Picked REST API and registers
21
38
  * features, steps, fields, and experiences with the client.
@@ -1 +1 @@
1
- {"version":3,"file":"plugin.d.ts","sourceRoot":"","sources":["../../../../src/plugins/dynamic-experiences/plugin.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,8BAA8B,CAAA;AAK1D,OAAO,KAAK,EACV,+BAA+B,EAC/B,mBAAmB,EACnB,aAAa,EAGd,MAAM,SAAS,CAAA;AA4VhB;;;;;;;;;;;;;;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;AAED;;;;;;;;;;;;;;;;;;;GAmBG;AACH,wBAAgB,wBAAwB,CAAC,OAAO,CAAC,EAAE,+BAA+B,GAAG,MAAM,CAgD1F"}
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;AAgOD;;;;;;;;;;;;;;;;;;;GAmBG;AACH,wBAAgB,wBAAwB,CAAC,OAAO,CAAC,EAAE,+BAA+B,GAAG,MAAM,CAoC1F"}
@@ -9,8 +9,14 @@ import { LogicRule, LogicValue } from '../../logic-engine';
9
9
  * keys against `ProjectConfig.fields` at registration time.
10
10
  *
11
11
  * `fieldIds` is optional: layout-only steps (driven purely by `layoutName`) omit it.
12
+ *
13
+ * `layoutContentId` is the wire-format reference to a CMS Content record. The actual
14
+ * content blob is delivered by `dynamicExperiencesPlugin`'s content resolution chain
15
+ * (virtual data module, preview-token API fetch, or direct API fetch) and registered
16
+ * via `client.registerContent`. Steps' derived `layoutContentStore` resolves reactively
17
+ * against the registry at render time.
12
18
  */
13
- export type ApiExperienceStep = Omit<ExperienceStep, 'fieldKeys'> & {
19
+ export type ApiExperienceStep = Omit<ExperienceStep, 'fieldKeys' | 'layoutContentStore'> & {
14
20
  fieldIds?: string[];
15
21
  };
16
22
  export interface ProjectConfigFeature {
@@ -66,9 +72,64 @@ export interface ProjectConfig {
66
72
  export interface DynamicExperiencesPluginOptions {
67
73
  apiUrl?: string;
68
74
  projectConfig?: ProjectConfig;
75
+ /**
76
+ * Customer-supplied content fetcher. When provided, supersedes both the virtual
77
+ * data module and the runtime API for per-experience content resolution.
78
+ * Customers using this override are responsible for project ↔ content version
79
+ * consistency. Receives the resolved experience and the current preview token
80
+ * (when present) so the customer can decide preview semantics themselves.
81
+ */
82
+ getContent?: (experience: {
83
+ id: string;
84
+ key: string;
85
+ }, options?: {
86
+ previewToken?: string;
87
+ }) => Promise<ExperienceContentResponse | null>;
69
88
  }
70
89
  export interface FetchProjectOptions {
71
90
  previewToken?: string;
72
91
  headers?: Record<string, string>;
73
92
  }
93
+ /**
94
+ * Wire-format content blob as returned by the Picked API content endpoint.
95
+ */
96
+ export interface ContentBlob {
97
+ id: string;
98
+ data: Record<string, unknown>;
99
+ }
100
+ /**
101
+ * Wire-format response shape for `GET /api/v1/projects/:projectId/experiences/:experienceId/content`.
102
+ * The response is agnostic of step structure — step ↔ content mapping is encoded in the
103
+ * project blob via `Step.layoutContentId`.
104
+ */
105
+ export interface ExperienceContentResponse {
106
+ experienceId: string;
107
+ versionId: string;
108
+ content: ContentBlob[];
109
+ }
110
+ /**
111
+ * Function that resolves an experience's content blobs. Set on the Picked client by
112
+ * `dynamicExperiencesPlugin` (selecting from virtual module, getContent override, or API)
113
+ * and called by `prepareExperienceContent` between target-match and `initialiseExperience`.
114
+ */
115
+ export type ContentLoader = (experience: {
116
+ id: string;
117
+ key: string;
118
+ }, options?: {
119
+ previewToken?: string;
120
+ }) => Promise<ExperienceContentResponse | null>;
121
+ /**
122
+ * Optional-fields surface of the virtual data module exposed by `@picked/vite-plugin-picked`.
123
+ * The shape is identical between dev (`vite serve`) and build (`vite build`) modes.
124
+ */
125
+ export interface VirtualPickedData {
126
+ projectConfig: ProjectConfig;
127
+ experienceContent: ContentLoader;
128
+ manifestMetadata: {
129
+ mode: 'dev' | 'build';
130
+ fetchedAt: string | null;
131
+ projectVersionId: string | null;
132
+ workspaceId: string | null;
133
+ };
134
+ }
74
135
  //# sourceMappingURL=types.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../src/plugins/dynamic-experiences/types.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAA;AAC9D,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,4BAA4B,CAAA;AACvD,OAAO,KAAK,EACV,cAAc,EACd,cAAc,EACd,gBAAgB,EACjB,MAAM,sCAAsC,CAAA;AAC7C,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,oCAAoC,CAAA;AACnE,OAAO,KAAK,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAA;AAE/D;;;;;;GAMG;AACH,MAAM,MAAM,iBAAiB,GAAG,IAAI,CAAC,cAAc,EAAE,WAAW,CAAC,GAAG;IAClE,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAA;CACpB,CAAA;AAED,MAAM,WAAW,oBAAoB;IACnC,EAAE,EAAE,MAAM,CAAA;IACV,IAAI,EAAE,MAAM,CAAA;IACZ,OAAO,EAAE,OAAO,CAAA;IAChB,MAAM,EAAE,MAAM,CAAA;IACd,OAAO,EAAE,MAAM,CAAA;CAChB;AAED,MAAM,MAAM,iBAAiB,GAAG,cAAc,CAAA;AAE9C;;;;;;GAMG;AACH,MAAM,WAAW,uBAAuB;IACtC,EAAE,EAAE,MAAM,CAAA;IACV,GAAG,EAAE,MAAM,CAAA;IACX,IAAI,EAAE,MAAM,CAAA;IACZ,aAAa,EAAE,MAAM,CAAA;IACrB,KAAK,EAAE,iBAAiB,EAAE,CAAA;IAC1B,KAAK,EAAE,cAAc,EAAE,CAAA;IACvB,2EAA2E;IAC3E,SAAS,EAAE,SAAS,GAAG,UAAU,CAAA;IACjC,oEAAoE;IACpE,cAAc,EAAE,SAAS,GAAG,UAAU,CAAA;IACtC,+CAA+C;IAC/C,OAAO,EAAE,gBAAgB,EAAE,CAAA;CAC5B;AAED,MAAM,WAAW,aAAa;IAC5B,EAAE,EAAE,MAAM,CAAA;IACV,IAAI,EAAE,MAAM,CAAA;IACZ,MAAM,EAAE,MAAM,CAAA;IACd,SAAS,EAAE,MAAM,CAAA;IACjB,WAAW,EAAE,MAAM,CAAA;IACnB,QAAQ,EAAE,oBAAoB,EAAE,CAAA;IAChC,yEAAyE;IACzE,WAAW,EAAE,uBAAuB,EAAE,CAAA;IACtC,yDAAyD;IACzD,KAAK,EAAE,iBAAiB,EAAE,CAAA;IAC1B,oDAAoD;IACpD,MAAM,EAAE,KAAK,EAAE,CAAA;IACf,wEAAwE;IACxE,UAAU,EAAE,SAAS,EAAE,CAAA;IACvB,OAAO,EAAE,KAAK,CAAC;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,GAAG,EAAE,MAAM,CAAA;KAAE,CAAC,CAAA;CAC1D;AAED,MAAM,WAAW,+BAA+B;IAC9C,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,aAAa,CAAC,EAAE,aAAa,CAAA;CAC9B;AAED,MAAM,WAAW,mBAAmB;IAClC,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;CACjC"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../src/plugins/dynamic-experiences/types.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAA;AAC9D,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,4BAA4B,CAAA;AACvD,OAAO,KAAK,EACV,cAAc,EACd,cAAc,EACd,gBAAgB,EACjB,MAAM,sCAAsC,CAAA;AAC7C,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,oCAAoC,CAAA;AACnE,OAAO,KAAK,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAA;AAE/D;;;;;;;;;;;;GAYG;AACH,MAAM,MAAM,iBAAiB,GAAG,IAAI,CAAC,cAAc,EAAE,WAAW,GAAG,oBAAoB,CAAC,GAAG;IACzF,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAA;CACpB,CAAA;AAED,MAAM,WAAW,oBAAoB;IACnC,EAAE,EAAE,MAAM,CAAA;IACV,IAAI,EAAE,MAAM,CAAA;IACZ,OAAO,EAAE,OAAO,CAAA;IAChB,MAAM,EAAE,MAAM,CAAA;IACd,OAAO,EAAE,MAAM,CAAA;CAChB;AAED,MAAM,MAAM,iBAAiB,GAAG,cAAc,CAAA;AAE9C;;;;;;GAMG;AACH,MAAM,WAAW,uBAAuB;IACtC,EAAE,EAAE,MAAM,CAAA;IACV,GAAG,EAAE,MAAM,CAAA;IACX,IAAI,EAAE,MAAM,CAAA;IACZ,aAAa,EAAE,MAAM,CAAA;IACrB,KAAK,EAAE,iBAAiB,EAAE,CAAA;IAC1B,KAAK,EAAE,cAAc,EAAE,CAAA;IACvB,2EAA2E;IAC3E,SAAS,EAAE,SAAS,GAAG,UAAU,CAAA;IACjC,oEAAoE;IACpE,cAAc,EAAE,SAAS,GAAG,UAAU,CAAA;IACtC,+CAA+C;IAC/C,OAAO,EAAE,gBAAgB,EAAE,CAAA;CAC5B;AAED,MAAM,WAAW,aAAa;IAC5B,EAAE,EAAE,MAAM,CAAA;IACV,IAAI,EAAE,MAAM,CAAA;IACZ,MAAM,EAAE,MAAM,CAAA;IACd,SAAS,EAAE,MAAM,CAAA;IACjB,WAAW,EAAE,MAAM,CAAA;IACnB,QAAQ,EAAE,oBAAoB,EAAE,CAAA;IAChC,yEAAyE;IACzE,WAAW,EAAE,uBAAuB,EAAE,CAAA;IACtC,yDAAyD;IACzD,KAAK,EAAE,iBAAiB,EAAE,CAAA;IAC1B,oDAAoD;IACpD,MAAM,EAAE,KAAK,EAAE,CAAA;IACf,wEAAwE;IACxE,UAAU,EAAE,SAAS,EAAE,CAAA;IACvB,OAAO,EAAE,KAAK,CAAC;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,GAAG,EAAE,MAAM,CAAA;KAAE,CAAC,CAAA;CAC1D;AAED,MAAM,WAAW,+BAA+B;IAC9C,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,aAAa,CAAC,EAAE,aAAa,CAAA;IAC7B;;;;;;OAMG;IACH,UAAU,CAAC,EAAE,CACX,UAAU,EAAE;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,GAAG,EAAE,MAAM,CAAA;KAAE,EACvC,OAAO,CAAC,EAAE;QAAE,YAAY,CAAC,EAAE,MAAM,CAAA;KAAE,KAChC,OAAO,CAAC,yBAAyB,GAAG,IAAI,CAAC,CAAA;CAC/C;AAED,MAAM,WAAW,mBAAmB;IAClC,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;CACjC;AAED;;GAEG;AACH,MAAM,WAAW,WAAW;IAC1B,EAAE,EAAE,MAAM,CAAA;IACV,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;CAC9B;AAED;;;;GAIG;AACH,MAAM,WAAW,yBAAyB;IACxC,YAAY,EAAE,MAAM,CAAA;IACpB,SAAS,EAAE,MAAM,CAAA;IACjB,OAAO,EAAE,WAAW,EAAE,CAAA;CACvB;AAED;;;;GAIG;AACH,MAAM,MAAM,aAAa,GAAG,CAC1B,UAAU,EAAE;IAAE,EAAE,EAAE,MAAM,CAAC;IAAC,GAAG,EAAE,MAAM,CAAA;CAAE,EACvC,OAAO,CAAC,EAAE;IAAE,YAAY,CAAC,EAAE,MAAM,CAAA;CAAE,KAChC,OAAO,CAAC,yBAAyB,GAAG,IAAI,CAAC,CAAA;AAE9C;;;GAGG;AACH,MAAM,WAAW,iBAAiB;IAChC,aAAa,EAAE,aAAa,CAAA;IAC5B,iBAAiB,EAAE,aAAa,CAAA;IAChC,gBAAgB,EAAE;QAChB,IAAI,EAAE,KAAK,GAAG,OAAO,CAAA;QACrB,SAAS,EAAE,MAAM,GAAG,IAAI,CAAA;QACxB,gBAAgB,EAAE,MAAM,GAAG,IAAI,CAAA;QAC/B,WAAW,EAAE,MAAM,GAAG,IAAI,CAAA;KAC3B,CAAA;CACF"}
@@ -1 +1 @@
1
- {"version":3,"file":"plugin.d.ts","sourceRoot":"","sources":["../../../../src/plugins/experience-browser-storage/plugin.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,8BAA8B,CAAA;AAM1D,UAAU,8BAA8B;IACtC,OAAO,CAAC,EAAE,OAAO,GAAG,SAAS,CAAA;CAC9B;AAED,eAAO,MAAM,8BAA8B,GAAI,eAE5C,8BAAmC,KAAG,MA+CxC,CAAA"}
1
+ {"version":3,"file":"plugin.d.ts","sourceRoot":"","sources":["../../../../src/plugins/experience-browser-storage/plugin.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,8BAA8B,CAAA;AAM1D,UAAU,8BAA8B;IACtC,OAAO,CAAC,EAAE,OAAO,GAAG,SAAS,CAAA;CAC9B;AAED,eAAO,MAAM,8BAA8B,GAAI,eAE5C,8BAAmC,KAAG,MAmDxC,CAAA"}