@wix/himalaya-cli 0.1535.0 → 0.1537.0

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 (30) hide show
  1. package/dist/authoring-runtime/node_modules/@wix/himalaya/dist/_types/stdlib/wix-sdk/bookings-v2/src/extensions.d.ts +16 -0
  2. package/dist/authoring-runtime/node_modules/@wix/himalaya/dist/_types/stdlib/wix-sdk/data-collections-v1/src/extensions.d.ts +4 -0
  3. package/dist/authoring-runtime/node_modules/@wix/himalaya/dist/_types/stdlib/wix-sdk/wix-data/src/index.d.ts +497 -4
  4. package/dist/authoring-runtime/node_modules/@wix/himalaya/dist/wix-bookings.mjs +5 -0
  5. package/dist/authoring-runtime/node_modules/@wix/himalaya/dist/wix-data-collections.mjs +1 -5
  6. package/dist/authoring-runtime/node_modules/@wix/himalaya/dist/wix-data.mjs +315 -7
  7. package/dist/cli.mjs +805 -533
  8. package/dist/preview-assets.generated.bin +0 -0
  9. package/fixtures/wix-canned.json +1 -0
  10. package/guides/cms-collections.md +31 -0
  11. package/guides/himi-json-output.md +9 -0
  12. package/guides/release-notes.md +12 -0
  13. package/guides/wix-api-usage.md +53 -6
  14. package/package.json +2 -2
  15. package/templates/beauty-salon/dev/index.ts +1109 -2310
  16. package/templates/beauty-salon/tier5-src/_shared/himi-bookings.ts +121 -1
  17. package/templates/beauty-salon/tier5-src/himi-booking-service/index.ts +9 -55
  18. package/templates/beauty-salon/tier5-src/himi-booking-services/index.ts +264 -18
  19. package/templates/branded-lite/dev/index.ts +1075 -2276
  20. package/templates/branded-lite/tier5-src/_shared/himi-bookings.ts +121 -1
  21. package/templates/branded-lite/tier5-src/himi-booking-service/index.ts +9 -55
  22. package/templates/branded-lite/tier5-src/himi-booking-services/index.ts +264 -18
  23. package/templates/gym-fitness/dev/index.ts +1075 -2276
  24. package/templates/gym-fitness/tier5-src/_shared/himi-bookings.ts +121 -1
  25. package/templates/gym-fitness/tier5-src/himi-booking-service/index.ts +9 -55
  26. package/templates/gym-fitness/tier5-src/himi-booking-services/index.ts +264 -18
  27. package/templates/yoga-studio/dev/index.ts +1137 -2338
  28. package/templates/yoga-studio/tier5-src/_shared/himi-bookings.ts +121 -1
  29. package/templates/yoga-studio/tier5-src/himi-booking-service/index.ts +9 -55
  30. package/templates/yoga-studio/tier5-src/himi-booking-services/index.ts +264 -18
@@ -7,18 +7,30 @@ function wixCall(method, path, body) {
7
7
  }
8
8
  return globalThis.himalaya.wixApi.call(method, path, body);
9
9
  }
10
- function queryDataItems(dataCollectionId, limit = 50, filter, returnTotalCount = false, offset = 0, sort) {
10
+ function queryDataItems(dataCollectionId, limit = 50, filter, returnTotalCount = false, offset = 0, sort, options) {
11
11
  if (!dataCollectionId) throw new Error("queryDataItems: dataCollectionId is required");
12
+ const cursor = options?.cursorPaging;
13
+ if (cursor && offset) {
14
+ throw new Error("queryDataItems: offset and options.cursorPaging are mutually exclusive \u2014 page one way");
15
+ }
16
+ const followUp = !!cursor?.cursor;
12
17
  const body = {
13
18
  dataCollectionId,
14
19
  query: {
15
20
  // `offset` is omitted when 0 so a caller that does not page sends the byte-identical
16
21
  // body it sent before this parameter existed.
17
- paging: { limit, ...offset ? { offset } : {} },
18
- ...filter ? { filter } : {},
19
- ...sort?.length ? { sort: sort.map((k) => ({ fieldName: k.fieldName, order: k.order ?? "ASC" })) } : {}
22
+ ...cursor ? { cursorPaging: { limit: cursor.limit ?? limit, ...cursor.cursor ? { cursor: cursor.cursor } : {} } } : { paging: { limit, ...offset ? { offset } : {} } },
23
+ ...filter && !followUp ? { filter } : {},
24
+ ...sort?.length && !followUp ? { sort: sort.map((k) => ({ fieldName: k.fieldName, order: k.order ?? "ASC" })) } : {},
25
+ ...options?.fields?.length ? { fields: options.fields } : {}
20
26
  },
21
- ...returnTotalCount ? { returnTotalCount: true } : {}
27
+ ...returnTotalCount && !followUp ? { returnTotalCount: true } : {},
28
+ // Each of these is appended only when set: an absent option leaves the body exactly as it
29
+ // was before the option existed, so recorded net-mocks and fixtures keep matching.
30
+ ...options?.consistentRead ? { consistentRead: true } : {},
31
+ ...options?.includeReferences?.length ? { includeReferences: options.includeReferences } : {},
32
+ ...options?.language ? { language: options.language } : {},
33
+ ...options?.includeDraftItems ? { publishPluginOptions: { includeDraftItems: true } } : {}
22
34
  };
23
35
  return wixCall("POST", "/wix-data/v2/items/query", body);
24
36
  }
@@ -30,13 +42,30 @@ function getDataItem(dataCollectionId, dataItemId) {
30
42
  `/wix-data/v2/items/${encodeURIComponent(dataItemId)}?dataCollectionId=${encodeURIComponent(dataCollectionId)}`
31
43
  );
32
44
  }
33
- function insertDataItem(dataCollectionId, data) {
45
+ function insertDataItem(dataCollectionId, data, options) {
34
46
  if (!dataCollectionId) throw new Error("insertDataItem: dataCollectionId is required");
35
47
  return wixCall("POST", "/wix-data/v2/items", {
36
48
  dataCollectionId,
37
- dataItem: { data }
49
+ dataItem: itemEnvelope("insertDataItem", data, options?.id)
38
50
  });
39
51
  }
52
+ var MAX_ITEM_ID = 128;
53
+ function itemEnvelope(fn, data, id, at) {
54
+ const idName = at ? `${at}.id` : "options.id";
55
+ const dataId = at ? `${at}.data._id` : "data._id";
56
+ if (id === void 0) {
57
+ if (data._id === void 0) return { data };
58
+ if (typeof data._id !== "string" || !data._id) throw new Error(`${fn}: ${dataId} must be a non-empty string`);
59
+ if (data._id.length > MAX_ITEM_ID) throw new Error(`${fn}: ${dataId} is at most ${MAX_ITEM_ID} characters (got ${data._id.length})`);
60
+ return { id: data._id, data };
61
+ }
62
+ if (!id) throw new Error(`${fn}: ${idName} must not be empty`);
63
+ if (id.length > MAX_ITEM_ID) throw new Error(`${fn}: ${idName} is at most ${MAX_ITEM_ID} characters (got ${id.length})`);
64
+ if (data._id !== void 0 && data._id !== id) {
65
+ throw new Error(`${fn}: ${dataId} must match ${idName} (or be left out)`);
66
+ }
67
+ return { id, data };
68
+ }
40
69
  function updateDataItem(dataCollectionId, id, data) {
41
70
  if (!dataCollectionId || !id) throw new Error("updateDataItem: dataCollectionId and id are required");
42
71
  return wixCall("PUT", `/wix-data/v2/items/${encodeURIComponent(id)}`, {
@@ -49,11 +78,290 @@ function removeDataItem(dataCollectionId, id) {
49
78
  const q = `dataCollectionId=${encodeURIComponent(dataCollectionId)}`;
50
79
  return wixCall("DELETE", `/wix-data/v2/items/${encodeURIComponent(id)}?${q}`);
51
80
  }
81
+ var MAX_FIELD_MODIFICATIONS = 100;
82
+ function assertModifications(fn, mods) {
83
+ if (!Array.isArray(mods) || mods.length === 0) throw new Error(`${fn}: at least one field modification is required`);
84
+ if (mods.length > MAX_FIELD_MODIFICATIONS) {
85
+ throw new Error(`${fn}: at most ${MAX_FIELD_MODIFICATIONS} field modifications per patch (got ${mods.length})`);
86
+ }
87
+ for (const m of mods) {
88
+ if (!m?.fieldPath) throw new Error(`${fn}: every field modification needs a fieldPath`);
89
+ }
90
+ }
91
+ function setField(fieldPath, value) {
92
+ return { fieldPath, action: "SET_FIELD", setFieldOptions: { value } };
93
+ }
94
+ function removeField(fieldPath) {
95
+ return { fieldPath, action: "REMOVE_FIELD" };
96
+ }
97
+ function incrementField(fieldPath, by = 1) {
98
+ return { fieldPath, action: "INCREMENT_FIELD", incrementFieldOptions: { value: by } };
99
+ }
100
+ function appendToArray(fieldPath, value) {
101
+ return { fieldPath, action: "APPEND_TO_ARRAY", appendToArrayOptions: { value } };
102
+ }
103
+ function removeFromArray(fieldPath, value) {
104
+ return { fieldPath, action: "REMOVE_FROM_ARRAY", removeFromArrayOptions: { value } };
105
+ }
106
+ function patchDataItem(dataCollectionId, dataItemId, fieldModifications) {
107
+ if (!dataCollectionId || !dataItemId) throw new Error("patchDataItem: dataCollectionId and dataItemId are required");
108
+ assertModifications("patchDataItem", fieldModifications);
109
+ return wixCall("PATCH", `/wix-data/v2/items/${encodeURIComponent(dataItemId)}`, {
110
+ dataCollectionId,
111
+ patch: { dataItemId, fieldModifications }
112
+ });
113
+ }
114
+ function saveDataItem(dataCollectionId, data, options) {
115
+ if (!dataCollectionId) throw new Error("saveDataItem: dataCollectionId is required");
116
+ return wixCall("POST", "/wix-data/v2/items/save", {
117
+ dataCollectionId,
118
+ dataItem: itemEnvelope("saveDataItem", data, options?.id)
119
+ });
120
+ }
121
+ function countDataItems(dataCollectionId, filter, options) {
122
+ if (!dataCollectionId) throw new Error("countDataItems: dataCollectionId is required");
123
+ return wixCall("POST", "/wix-data/v2/items/count", {
124
+ dataCollectionId,
125
+ ...filter ? { filter } : {},
126
+ ...options?.consistentRead ? { consistentRead: true } : {},
127
+ ...options?.language ? { language: options.language } : {},
128
+ ...options?.includeDraftItems ? { publishPluginOptions: { includeDraftItems: true } } : {}
129
+ });
130
+ }
131
+ var MAX_BULK_ITEMS = 1e3;
132
+ var MAX_BULK_PATCHES = 100;
133
+ function assertBatch(fn, what, list, max) {
134
+ if (!Array.isArray(list) || list.length === 0) throw new Error(`${fn}: at least one ${what} is required`);
135
+ const plural = what.endsWith("ch") ? `${what}es` : `${what}s`;
136
+ if (list.length > max) throw new Error(`${fn}: at most ${max} ${plural} per call (got ${list.length})`);
137
+ }
138
+ function bulkFailures(res) {
139
+ return (res?.results ?? []).filter((r) => {
140
+ const meta = r.itemMetadata ?? r.referenceMetadata;
141
+ return meta?.success === false || meta?.success !== true && meta?.error != null;
142
+ });
143
+ }
144
+ function bulkInsertDataItems(dataCollectionId, dataItems, options) {
145
+ if (!dataCollectionId) throw new Error("bulkInsertDataItems: dataCollectionId is required");
146
+ assertBatch("bulkInsertDataItems", "item", dataItems, MAX_BULK_ITEMS);
147
+ return wixCall("POST", "/wix-data/v2/bulk/items/insert", {
148
+ dataCollectionId,
149
+ dataItems: dataItems.map((i, n) => itemEnvelope("bulkInsertDataItems", i.data, i.id, `dataItems[${n}]`)),
150
+ ...options?.returnEntity !== void 0 ? { returnEntity: options.returnEntity } : {}
151
+ });
152
+ }
153
+ function bulkSaveDataItems(dataCollectionId, dataItems, options) {
154
+ if (!dataCollectionId) throw new Error("bulkSaveDataItems: dataCollectionId is required");
155
+ assertBatch("bulkSaveDataItems", "item", dataItems, MAX_BULK_ITEMS);
156
+ return wixCall("POST", "/wix-data/v2/bulk/items/save", {
157
+ dataCollectionId,
158
+ dataItems: dataItems.map((i, n) => itemEnvelope("bulkSaveDataItems", i.data, i.id, `dataItems[${n}]`)),
159
+ ...options?.returnEntity !== void 0 ? { returnEntity: options.returnEntity } : {}
160
+ });
161
+ }
162
+ function bulkUpdateDataItems(dataCollectionId, dataItems, options) {
163
+ if (!dataCollectionId) throw new Error("bulkUpdateDataItems: dataCollectionId is required");
164
+ assertBatch("bulkUpdateDataItems", "item", dataItems, MAX_BULK_ITEMS);
165
+ dataItems.forEach((i, n) => {
166
+ if (!i?.id) throw new Error(`bulkUpdateDataItems: every item needs an id (dataItems[${n}].id)`);
167
+ });
168
+ return wixCall("POST", "/wix-data/v2/bulk/items/update", {
169
+ dataCollectionId,
170
+ dataItems: dataItems.map((i, n) => itemEnvelope("bulkUpdateDataItems", i.data, i.id, `dataItems[${n}]`)),
171
+ ...options?.returnEntity !== void 0 ? { returnEntity: options.returnEntity } : {},
172
+ ...options?.condition ? { condition: options.condition } : {}
173
+ });
174
+ }
175
+ function bulkPatchDataItems(dataCollectionId, patches, options) {
176
+ if (!dataCollectionId) throw new Error("bulkPatchDataItems: dataCollectionId is required");
177
+ assertBatch("bulkPatchDataItems", "patch", patches, MAX_BULK_PATCHES);
178
+ for (const p of patches) {
179
+ if (!p?.dataItemId) throw new Error("bulkPatchDataItems: every patch needs a dataItemId");
180
+ assertModifications("bulkPatchDataItems", p.fieldModifications);
181
+ }
182
+ return wixCall("POST", "/wix-data/v2/bulk/items/patch", {
183
+ dataCollectionId,
184
+ patches: patches.map((p) => ({ dataItemId: p.dataItemId, fieldModifications: p.fieldModifications })),
185
+ ...options?.returnEntity !== void 0 ? { returnEntity: options.returnEntity } : {},
186
+ ...options?.condition ? { condition: options.condition } : {}
187
+ });
188
+ }
189
+ function bulkRemoveDataItems(dataCollectionId, dataItemIds, options) {
190
+ if (!dataCollectionId) throw new Error("bulkRemoveDataItems: dataCollectionId is required");
191
+ assertBatch("bulkRemoveDataItems", "id", dataItemIds, MAX_BULK_ITEMS);
192
+ if (dataItemIds.some((id) => !id)) throw new Error("bulkRemoveDataItems: ids must not be empty");
193
+ return wixCall("POST", "/wix-data/v2/bulk/items/remove", {
194
+ dataCollectionId,
195
+ dataItemIds,
196
+ ...options?.condition ? { condition: options.condition } : {}
197
+ });
198
+ }
199
+ function aggregateDataItemsPipeline(dataCollectionId, pipeline, options) {
200
+ if (!dataCollectionId) throw new Error("aggregateDataItemsPipeline: dataCollectionId is required");
201
+ const followUp = !!pipeline?.cursorPaging?.cursor;
202
+ const stages = pipeline?.stages;
203
+ if (!followUp && (!Array.isArray(stages) || stages.length === 0)) {
204
+ throw new Error("aggregateDataItemsPipeline: pipeline.stages needs at least one stage");
205
+ }
206
+ if ((stages?.length ?? 0) > 100) {
207
+ throw new Error(`aggregateDataItemsPipeline: at most 100 stages per pipeline (got ${stages?.length})`);
208
+ }
209
+ if (pipeline.paging && pipeline.cursorPaging) {
210
+ throw new Error("aggregateDataItemsPipeline: paging and cursorPaging are mutually exclusive");
211
+ }
212
+ return wixCall("POST", "/wix-data/v2/items/aggregate-pipeline", {
213
+ dataCollectionId,
214
+ pipeline: followUp ? { cursorPaging: pipeline.cursorPaging } : pipeline,
215
+ ...options?.returnTotalCount && !followUp ? { returnTotalCount: true } : {},
216
+ ...options?.consistentRead ? { consistentRead: true } : {},
217
+ ...options?.language ? { language: options.language } : {},
218
+ ...options?.includeDraftItems ? { publishPluginOptions: { includeDraftItems: true } } : {}
219
+ });
220
+ }
221
+ function queryDistinctValues(dataCollectionId, fieldName, options) {
222
+ if (!dataCollectionId) throw new Error("queryDistinctValues: dataCollectionId is required");
223
+ if (!fieldName) throw new Error("queryDistinctValues: fieldName is required");
224
+ if (options?.paging && options?.cursorPaging) {
225
+ throw new Error("queryDistinctValues: paging and cursorPaging are mutually exclusive");
226
+ }
227
+ const followUp = !!options?.cursorPaging?.cursor;
228
+ return wixCall("POST", "/wix-data/v2/items/query-distinct-values", {
229
+ dataCollectionId,
230
+ ...followUp ? {} : { fieldName },
231
+ ...options?.filter && !followUp ? { filter: options.filter } : {},
232
+ ...options?.order && !followUp ? { order: options.order } : {},
233
+ ...options?.paging ? { paging: options.paging } : {},
234
+ ...options?.cursorPaging ? { cursorPaging: options.cursorPaging } : {},
235
+ ...options?.returnTotalCount && !followUp ? { returnTotalCount: true } : {},
236
+ ...options?.consistentRead ? { consistentRead: true } : {},
237
+ ...options?.language ? { language: options.language } : {},
238
+ ...options?.includeDraftItems ? { publishPluginOptions: { includeDraftItems: true } } : {}
239
+ });
240
+ }
241
+ function searchDataItems(dataCollectionId, expression, options) {
242
+ if (!dataCollectionId) throw new Error("searchDataItems: dataCollectionId is required");
243
+ if (!expression) throw new Error("searchDataItems: expression is required");
244
+ if (expression.length > 100) throw new Error(`searchDataItems: expression is at most 100 characters (got ${expression.length})`);
245
+ if (options?.cursorPaging) {
246
+ throw new Error("searchDataItems: Wix does not support cursor paging for search \u2014 page with `paging` (offset)");
247
+ }
248
+ return wixCall("POST", "/wix-data/v2/items/search", {
249
+ dataCollectionId,
250
+ search: {
251
+ search: {
252
+ expression,
253
+ ...options?.mode ? { mode: options.mode } : {},
254
+ ...options?.fuzzy ? { fuzzy: true } : {}
255
+ },
256
+ ...options?.paging ? { paging: options.paging } : {},
257
+ ...options?.filter ? { filter: options.filter } : {},
258
+ ...options?.sort?.length ? { sort: options.sort.map((k) => ({ fieldName: k.fieldName, order: k.order ?? "ASC" })) } : {},
259
+ ...options?.fields?.length ? { fields: options.fields } : {}
260
+ },
261
+ ...options?.includeReferences?.length ? { includeReferences: options.includeReferences } : {},
262
+ ...options?.includeDraftItems ? { publishPluginOptions: { includeDraftItems: true } } : {}
263
+ });
264
+ }
265
+ function queryReferencedDataItems(dataCollectionId, referringItemId, referringItemFieldName, options) {
266
+ if (!dataCollectionId || !referringItemId || !referringItemFieldName) {
267
+ throw new Error("queryReferencedDataItems: dataCollectionId, referringItemId and referringItemFieldName are required");
268
+ }
269
+ if (options?.paging && options?.cursorPaging) {
270
+ throw new Error("queryReferencedDataItems: paging and cursorPaging are mutually exclusive");
271
+ }
272
+ const followUp = !!options?.cursorPaging?.cursor;
273
+ return wixCall("POST", "/wix-data/v2/items/query-referenced", {
274
+ dataCollectionId,
275
+ ...followUp ? {} : { referringItemFieldName, referringItemId },
276
+ ...options?.order && !followUp ? { order: options.order } : {},
277
+ ...options?.paging ? { paging: options.paging } : {},
278
+ ...options?.cursorPaging ? { cursorPaging: options.cursorPaging } : {},
279
+ ...options?.fields?.length && !followUp ? { fields: options.fields } : {},
280
+ ...options?.returnTotalCount && !followUp ? { returnTotalCount: true } : {},
281
+ ...options?.consistentRead ? { consistentRead: true } : {},
282
+ ...options?.language ? { language: options.language } : {},
283
+ ...options?.includeDraftItems ? { publishPluginOptions: { includeDraftItems: true } } : {}
284
+ });
285
+ }
286
+ function isReferencedDataItem(dataCollectionId, referringItemId, referringItemFieldName, referencedItemId, options) {
287
+ if (!dataCollectionId || !referringItemId || !referringItemFieldName || !referencedItemId) {
288
+ throw new Error("isReferencedDataItem: dataCollectionId, referringItemId, referringItemFieldName and referencedItemId are required");
289
+ }
290
+ return wixCall("POST", "/wix-data/v2/items/is-referenced", {
291
+ dataCollectionId,
292
+ referringItemFieldName,
293
+ referringItemId,
294
+ referencedItemId,
295
+ ...options?.consistentRead ? { consistentRead: true } : {}
296
+ });
297
+ }
298
+ function assertReferences(fn, refs) {
299
+ assertBatch(fn, "reference", refs, MAX_BULK_ITEMS);
300
+ for (const r of refs) {
301
+ if (!r?.referringItemId || !r.referringItemFieldName || !r.referencedItemId) {
302
+ throw new Error(`${fn}: every reference needs referringItemId, referringItemFieldName and referencedItemId`);
303
+ }
304
+ }
305
+ }
306
+ function insertDataItemReferences(dataCollectionId, references, options) {
307
+ if (!dataCollectionId) throw new Error("insertDataItemReferences: dataCollectionId is required");
308
+ assertReferences("insertDataItemReferences", references);
309
+ return wixCall("POST", "/wix-data/v2/bulk/items/insert-references", {
310
+ dataCollectionId,
311
+ dataItemReferences: references,
312
+ ...options?.returnEntity !== void 0 ? { returnEntity: options.returnEntity } : {}
313
+ });
314
+ }
315
+ function removeDataItemReferences(dataCollectionId, references) {
316
+ if (!dataCollectionId) throw new Error("removeDataItemReferences: dataCollectionId is required");
317
+ assertReferences("removeDataItemReferences", references);
318
+ return wixCall("POST", "/wix-data/v2/bulk/items/remove-references", {
319
+ dataCollectionId,
320
+ dataItemReferences: references
321
+ });
322
+ }
323
+ function replaceDataItemReferences(dataCollectionId, referringItemId, referringItemFieldName, newReferencedItemIds) {
324
+ if (!dataCollectionId || !referringItemId || !referringItemFieldName) {
325
+ throw new Error("replaceDataItemReferences: dataCollectionId, referringItemId and referringItemFieldName are required");
326
+ }
327
+ if (!Array.isArray(newReferencedItemIds)) throw new Error("replaceDataItemReferences: newReferencedItemIds must be an array (empty removes all links)");
328
+ if (newReferencedItemIds.length > MAX_BULK_ITEMS) {
329
+ throw new Error(`replaceDataItemReferences: at most ${MAX_BULK_ITEMS} ids per call (got ${newReferencedItemIds.length})`);
330
+ }
331
+ return wixCall("POST", "/wix-data/v2/items/replace-references", {
332
+ dataCollectionId,
333
+ referringItemFieldName,
334
+ referringItemId,
335
+ newReferencedItemIds
336
+ });
337
+ }
52
338
  export {
339
+ aggregateDataItemsPipeline,
340
+ appendToArray,
341
+ bulkFailures,
342
+ bulkInsertDataItems,
343
+ bulkPatchDataItems,
344
+ bulkRemoveDataItems,
345
+ bulkSaveDataItems,
346
+ bulkUpdateDataItems,
347
+ countDataItems,
53
348
  getDataItem,
349
+ incrementField,
54
350
  insertDataItem,
351
+ insertDataItemReferences,
352
+ isReferencedDataItem,
353
+ patchDataItem,
55
354
  queryDataItems,
355
+ queryDistinctValues,
356
+ queryReferencedDataItems,
56
357
  removeDataItem,
358
+ removeDataItemReferences,
359
+ removeField,
360
+ removeFromArray,
361
+ replaceDataItemReferences,
362
+ saveDataItem,
363
+ searchDataItems,
364
+ setField,
57
365
  updateDataItem,
58
366
  wixCall
59
367
  };