rest-client-vue 1.1.1-b9 → 1.2.0-b2

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.
@@ -1,61 +1,72 @@
1
- var we = Object.defineProperty;
2
- var Ce = (f, s, R) => s in f ? we(f, s, { enumerable: !0, configurable: !0, writable: !0, value: R }) : f[s] = R;
3
- var ae = (f, s, R) => (Ce(f, typeof s != "symbol" ? s + "" : s, R), R), Te = (f, s, R) => {
4
- if (!s.has(f))
5
- throw TypeError("Cannot " + R);
1
+ var Ee = Object.defineProperty;
2
+ var Ce = (h, i, g) => i in h ? Ee(h, i, { enumerable: !0, configurable: !0, writable: !0, value: g }) : h[i] = g;
3
+ var ae = (h, i, g) => (Ce(h, typeof i != "symbol" ? i + "" : i, g), g), Te = (h, i, g) => {
4
+ if (!i.has(h))
5
+ throw TypeError("Cannot " + g);
6
6
  };
7
- var M = (f, s, R) => (Te(f, s, "read from private field"), R ? R.call(f) : s.get(f)), Se = (f, s, R) => {
8
- if (s.has(f))
7
+ var Q = (h, i, g) => (Te(h, i, "read from private field"), g ? g.call(h) : i.get(h)), Se = (h, i, g) => {
8
+ if (i.has(h))
9
9
  throw TypeError("Cannot add the same private member more than once");
10
- s instanceof WeakSet ? s.add(f) : s.set(f, R);
10
+ i instanceof WeakSet ? i.add(h) : i.set(h, g);
11
11
  };
12
12
  import a from "lodash";
13
13
  import { v4 as H } from "uuid";
14
- import { ref as I, toRef as se, computed as S, watch as T, nextTick as Le } from "vue";
15
- import P from "axios";
16
- import me from "jsog";
14
+ import { ref as I, toRef as se, computed as R, watch as L, nextTick as Le } from "vue";
15
+ import $ from "axios";
16
+ import pe from "jsog";
17
17
  import X from "json-stringify-deterministic";
18
- import { defineStore as pe } from "pinia";
18
+ import { defineStore as me } from "pinia";
19
19
  const ye = {
20
20
  apiBaseUrl: "",
21
21
  useVueLogger: !1
22
22
  };
23
- class _e extends Error {
24
- constructor(R, $ = void 0, e = void 0) {
25
- super(R);
23
+ class Be extends Error {
24
+ constructor(g, U = void 0, e = void 0) {
25
+ super(g);
26
26
  ae(this, "context");
27
27
  ae(this, "innerError");
28
- this.context = $, this.innerError = e;
28
+ this.context = U, this.innerError = e;
29
29
  }
30
30
  }
31
- var k;
31
+ var _;
32
32
  class Ie {
33
33
  constructor() {
34
- Se(this, k, {});
34
+ Se(this, _, {});
35
35
  }
36
36
  clearAllStores() {
37
- for (const s in M(this, k))
38
- M(this, k)[s].clear();
37
+ for (const i in Q(this, _))
38
+ Q(this, _)[i].clear();
39
39
  }
40
- destroyStore(s) {
41
- M(this, k)[s] && (M(this, k)[s].$dispose(), delete M(this, k)[s]);
40
+ destroyStore(i) {
41
+ Q(this, _)[i] && (Q(this, _)[i].$dispose(), delete Q(this, _)[i]);
42
42
  }
43
- getStore(s) {
44
- return M(this, k)[s];
43
+ getStore(i) {
44
+ return Q(this, _)[i];
45
45
  }
46
- registerStore(s, R) {
47
- M(this, k)[s] = R;
46
+ registerStore(i, g) {
47
+ Q(this, _)[i] = g;
48
48
  }
49
49
  }
50
- k = new WeakMap();
51
- function v(f, s) {
52
- return a.get(f, (s == null ? void 0 : s.idProperty) || "_id");
50
+ _ = new WeakMap();
51
+ function v(h, i) {
52
+ return a.get(h, (i == null ? void 0 : i.idProperty) || "_id");
53
53
  }
54
- function $e(f, s) {
55
- var R;
56
- return f && ((R = s.filter) != null && R.resourceIds) && !s.order ? s.filter.resourceIds.map(($) => f.find((e) => v(e, s) == $)).filter(($) => $ != null) : f;
54
+ function $e(h, i) {
55
+ const g = a.map(
56
+ i,
57
+ (U, e) => U != null ? `${encodeURIComponent(e)}=${encodeURIComponent(U)}` : null
58
+ ).filter((U) => U != null).join("&");
59
+ if (g.length > 0) {
60
+ const U = h.indexOf("?");
61
+ return U == h.length - 1 ? `${h}${g}` : U >= 0 ? `${h}&${g}` : `${h}?${g}`;
62
+ } else
63
+ return h;
57
64
  }
58
- const De = {
65
+ function xe(h, i) {
66
+ var g;
67
+ return h && ((g = i.filter) != null && g.resourceIds) && !i.order ? i.filter.resourceIds.map((U) => h.find((e) => v(e, i) == U)).filter((U) => U != null) : h;
68
+ }
69
+ const Ue = {
59
70
  detail: {
60
71
  allowMultiple: !0,
61
72
  autoEdit: !1,
@@ -81,7 +92,7 @@ const De = {
81
92
  [{ path: "history.creation.timestamp" }, "desc"],
82
93
  [{ path: "history.creation.indexInBatch" }, "desc"]
83
94
  ]
84
- }, Z = {
95
+ }, Y = {
85
96
  resources: [],
86
97
  remoteCollectionSize: null,
87
98
  status: "NotLoaded",
@@ -89,22 +100,23 @@ const De = {
89
100
  detailSelection: [],
90
101
  invalidResources: [],
91
102
  transientData: {}
92
- }, ne = {
103
+ }, oe = {
93
104
  editingDetailSelection: !1,
94
105
  batchSaveAttempted: !1,
95
106
  editors: [],
96
107
  listNavigators: {}
97
- }, Pe = (f, s) => {
98
- s = a.merge({}, De, s);
99
- const R = pe(f, {
108
+ }, Pe = (h, i) => {
109
+ i = a.merge({}, Ue, i);
110
+ const g = me(h, {
100
111
  state: () => ({
101
- idProperty: s.idProperty,
102
- filter: s.filter,
103
- order: s.order || null,
104
- propertyBlacklist: s.propertyBlacklist || null,
105
- referencePathsToExpand: s.referencePathsToExpand || null,
106
- ...Z,
107
- ...ne
112
+ idProperty: i.idProperty,
113
+ filter: i.filter,
114
+ order: i.order || null,
115
+ propertiesToExclude: i.propertiesToExclude || null,
116
+ referencePathsToExpand: i.referencePathsToExpand || null,
117
+ restCollectionUrl: i.restCollectionUrl,
118
+ ...Y,
119
+ ...oe
108
120
  }),
109
121
  getters: {
110
122
  /**
@@ -118,10 +130,10 @@ const De = {
118
130
  (l = e.filter) != null && l.namedFilter && (r.namedFilter = e.filter.namedFilter);
119
131
  const t = [];
120
132
  if ((u = e.filter) != null && u.resourceIds && t.push({ l: { path: e.idProperty }, r: { constant: e.filter.resourceIds }, operator: "in" }), (c = e.filter) != null && c.query && t.push((d = e.filter) == null ? void 0 : d.query), t.length > 0) {
121
- const y = t.length == 1 ? t[0] : { and: t };
122
- r.q = X(y);
133
+ const m = t.length == 1 ? t[0] : { and: t };
134
+ r.q = X(m);
123
135
  }
124
- return e.order && (r.o = X(e.order)), e.propertyBlacklist && (r.ex = X(e.propertyBlacklist)), e.referencePathsToExpand && (r.r = X(e.referencePathsToExpand)), r;
136
+ return e.order && (r.o = X(e.order)), e.propertiesToExclude && (r.ex = X(e.propertiesToExclude)), e.referencePathsToExpand && (r.r = X(e.referencePathsToExpand)), r;
125
137
  }
126
138
  },
127
139
  actions: {
@@ -134,10 +146,10 @@ const De = {
134
146
  * Configuration is retained, but REST collection contents and contextual state are reset.
135
147
  */
136
148
  reset() {
137
- for (const e in Z)
138
- this[e] = Z[e];
139
- for (const e in ne)
140
- this[e] = ne[e];
149
+ for (const e in Y)
150
+ this[e] = Y[e];
151
+ for (const e in oe)
152
+ this[e] = oe[e];
141
153
  },
142
154
  /**
143
155
  * Reset the store to its initial state, but retain transient data if appropriate.
@@ -146,7 +158,7 @@ const De = {
146
158
  * Transient data are retained if options.limitTransientDataToLocalCollection is false.
147
159
  */
148
160
  resetRetainingTransientData() {
149
- if (s.limitTransientDataToLocalCollection)
161
+ if (i.limitTransientDataToLocalCollection)
150
162
  this.reset();
151
163
  else {
152
164
  const e = this.transientData;
@@ -237,8 +249,8 @@ const De = {
237
249
  * Configuration and contextual state are retained, but REST collection contents are reset.
238
250
  */
239
251
  clear() {
240
- for (const e in Z)
241
- this[e] = Z[e];
252
+ for (const e in Y)
253
+ this[e] = Y[e];
242
254
  },
243
255
  /**
244
256
  * Clear the collection's contents, but retain transient data if appropriate.
@@ -247,7 +259,7 @@ const De = {
247
259
  * Transient data are retained if options.limitTransientDataToLocalCollection is false.
248
260
  */
249
261
  clearRetainingTransientData() {
250
- if (s.limitTransientDataToLocalCollection)
262
+ if (i.limitTransientDataToLocalCollection)
251
263
  this.reset();
252
264
  else {
253
265
  const e = this.transientData;
@@ -289,32 +301,29 @@ const De = {
289
301
  * @param loadOptions Pagination options that may override the defaults.
290
302
  */
291
303
  async _loadResources(e, r, t) {
292
- var z, F, A, B, O;
304
+ var x, A, N, O, k;
293
305
  const l = e == 0;
294
- if (this.status = l ? "Loading" : "LoadingMore", this._loadOffset = e, ((z = this.filter) == null ? void 0 : z.query) === !1) {
306
+ if (this.status = l ? "Loading" : "LoadingMore", this._loadOffset = e, ((x = this.filter) == null ? void 0 : x.query) === !1) {
295
307
  this.resources = [], this.remoteCollectionSize = 0;
296
308
  return;
297
309
  }
298
- const u = this.fixedQueryParams, c = a.cloneDeep(u), d = l ? (F = this.filter) != null && F.resourceIds && !this.order ? null : t.firstPageSize || ((A = s.loading) == null ? void 0 : A.firstPageSize) || t.pageSize || ((B = s.loading) == null ? void 0 : B.pageSize) || null : t.pageSize || ((O = s.loading) == null ? void 0 : O.pageSize) || null, y = d != null || s.limit != null ? a.min(a.filter([d, s.limit], (g) => g != null)) : void 0;
299
- y != null ? (c.offset = e, c.limit = y) : e != 0 && (c.offset = e);
300
- const U = a.map(
301
- c,
302
- (g, m) => g != null ? `${encodeURIComponent(m)}=${encodeURIComponent(g)}` : null
303
- ).filter((g) => g != null).join("&"), L = a.isEmpty(U) ? s.restCollectionUrl : `${s.restCollectionUrl}?${U}`;
310
+ const u = this.fixedQueryParams, c = a.cloneDeep(u), d = l ? (A = this.filter) != null && A.resourceIds && !this.order ? null : t.firstPageSize || ((N = i.loading) == null ? void 0 : N.firstPageSize) || t.pageSize || ((O = i.loading) == null ? void 0 : O.pageSize) || null : t.pageSize || ((k = i.loading) == null ? void 0 : k.pageSize) || null, m = d != null || i.limit != null ? a.min(a.filter([d, i.limit], (P) => P != null)) : void 0;
311
+ m != null ? (c.offset = e, c.limit = m) : e != 0 && (c.offset = e);
312
+ const w = $e(i.restCollectionUrl, c);
304
313
  try {
305
- const g = await P.get(L), m = this.fixedQueryParams;
306
- if (r != this._loadId || e != this._loadOffset || !a.isEqual(u, m))
307
- console.log(`Discarding resources fetched by obsolete query from ${s.restCollectionUrl}.`);
314
+ const P = await $.get(w), y = this.fixedQueryParams;
315
+ if (r != this._loadId || e != this._loadOffset || !a.isEqual(u, y))
316
+ console.log(`Discarding resources fetched by obsolete query from ${i.restCollectionUrl}.`);
308
317
  else {
309
- const E = me.decode(a.get(g, "data.data", [])), C = (l ? 0 : this.resources.length) + E.length, D = y == null || E.length < y || s.limit && C >= s.limit;
318
+ const S = pe.decode(a.get(P, "data.data", [])), T = (l ? 0 : this.resources.length) + S.length, E = m == null || S.length < m || i.limit && T >= i.limit;
310
319
  console.log(
311
- `Loaded ${E.length}${l ? "" : " more"} resources from ${s.restCollectionUrl}`
320
+ `Loaded ${S.length}${l ? "" : " more"} resources from ${i.restCollectionUrl}`
312
321
  ), l && (this.resources = []);
313
- const W = [...this.resources, ...E.map((J) => Object.freeze(J))];
314
- this.resources = $e(W, this), a.get(g, "data.totalCollectionSize") ? this.remoteCollectionSize = a.get(g, "data.totalCollectionSize") : this.remoteCollectionSize = null, this.status = D ? "Loaded" : "LoadingMore", D || this._loadResources(this.resources.length, r, t);
322
+ const D = [...this.resources, ...S.map((W) => Object.freeze(W))];
323
+ this.resources = xe(D, this), a.get(P, "data.totalCollectionSize") ? this.remoteCollectionSize = a.get(P, "data.totalCollectionSize") : this.remoteCollectionSize = null, this.status = E ? "Loaded" : "LoadingMore", E || this._loadResources(this.resources.length, r, t);
315
324
  }
316
- } catch (g) {
317
- console.log(`Error while loading resources (URL="${L}"):`, g), this.clearRetainingTransientData(), this.status = "Failed";
325
+ } catch (P) {
326
+ console.log(`Error while loading resources (URL="${w}"):`, P), this.clearRetainingTransientData(), this.status = "Failed";
318
327
  }
319
328
  },
320
329
  // ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////
@@ -332,9 +341,9 @@ const De = {
332
341
  async checkForDeletedResource(e) {
333
342
  let r;
334
343
  try {
335
- r = await P.get(`${s.restCollectionUrl}/${e}`);
344
+ r = await $.get(`${i.restCollectionUrl}/${e}`);
336
345
  } catch (t) {
337
- P.isAxiosError(t) && (r = t.response);
346
+ $.isAxiosError(t) && (r = t.response);
338
347
  }
339
348
  return r && r.status == 404 ? (this.recordDeletion(e), !0) : !1;
340
349
  },
@@ -351,7 +360,7 @@ const De = {
351
360
  var r;
352
361
  if (["Loaded", "LoadingMore"].includes(this.status)) {
353
362
  let t = this.resources.findIndex((l) => v(l, this) == e);
354
- t >= 0 && this.resources.splice(t, 1), t = this.selection.findIndex((l) => v(l, this) == e), t >= 0 && this.selection.splice(t, 1), t = this.detailSelection.findIndex((l) => v(l, this) == e), t >= 0 && (this.detailSelection.splice(t, 1), this.detailSelection.length == 0 && (this.editingDetailSelection = ((r = s.detail) == null ? void 0 : r.autoEdit) || !1)), s.limitTransientDataToLocalCollection && delete this.transientData[e];
363
+ t >= 0 && this.resources.splice(t, 1), t = this.selection.findIndex((l) => v(l, this) == e), t >= 0 && this.selection.splice(t, 1), t = this.detailSelection.findIndex((l) => v(l, this) == e), t >= 0 && (this.detailSelection.splice(t, 1), this.detailSelection.length == 0 && (this.editingDetailSelection = ((r = i.detail) == null ? void 0 : r.autoEdit) || !1)), i.limitTransientDataToLocalCollection && delete this.transientData[e];
355
364
  }
356
365
  },
357
366
  /**
@@ -373,7 +382,7 @@ const De = {
373
382
  var l;
374
383
  if (["Loaded", "LoadingMore"].includes(this.status)) {
375
384
  const u = Object.freeze(e);
376
- r ? this.resources.unshift(u) : this.resources.push(u), (l = s.detail) != null && l.autoFromSingleInsertion && (this.detailSelection.length == 0 || this.detailSelection.length == 1 && v(this.detailSelection[0], this) == null) && (this.detailSelection = [u], this.editingDetailSelection = s.detail.autoEdit);
385
+ r ? this.resources.unshift(u) : this.resources.push(u), (l = i.detail) != null && l.autoFromSingleInsertion && (this.detailSelection.length == 0 || this.detailSelection.length == 1 && v(this.detailSelection[0], this) == null) && (this.detailSelection = [u], this.editingDetailSelection = i.detail.autoEdit);
377
386
  const c = v(e, this);
378
387
  c && (t === void 0 ? delete this.transientData[c] : this.transientData[c] = t);
379
388
  }
@@ -419,7 +428,7 @@ const De = {
419
428
  const t = a.map(
420
429
  r,
421
430
  (c, d) => c != null ? `${encodeURIComponent(d)}=${encodeURIComponent(c)}` : null
422
- ).filter((c) => c != null).join("&"), l = a.isEmpty(t) ? `${s.restCollectionUrl}/${e}` : `${s.restCollectionUrl}/${e}?${t}`, u = await P.get(l);
431
+ ).filter((c) => c != null).join("&"), l = a.isEmpty(t) ? `${i.restCollectionUrl}/${e}` : `${i.restCollectionUrl}/${e}?${t}`, u = await $.get(l);
423
432
  if (u.status == 200) {
424
433
  const c = u.data;
425
434
  return this.recordUpdate(c), c;
@@ -446,9 +455,9 @@ const De = {
446
455
  * @param resourceId The ID of the resource to delete.
447
456
  */
448
457
  async deleteResource(e) {
449
- if ((await P.delete(`${s.restCollectionUrl}/${e}`)).status == 200 && ["Loaded", "LoadingMore"].includes(this.status)) {
458
+ if ((await $.delete(`${i.restCollectionUrl}/${e}`)).status == 200 && ["Loaded", "LoadingMore"].includes(this.status)) {
450
459
  let t = this.resources.findIndex((l) => v(l, this) == e);
451
- t >= 0 && this.resources.splice(t, 1), t = this.selection.findIndex((l) => v(l, this) == e), t >= 0 && this.selection.splice(t, 1), t = this.detailSelection.findIndex((l) => v(l, this) == e), t >= 0 && (this.detailSelection.splice(t, 1), this.detailSelection.length == 0 && (this.editingDetailSelection = s.detail.autoEdit)), s.limitTransientDataToLocalCollection && delete this.transientData[e];
460
+ t >= 0 && this.resources.splice(t, 1), t = this.selection.findIndex((l) => v(l, this) == e), t >= 0 && this.selection.splice(t, 1), t = this.detailSelection.findIndex((l) => v(l, this) == e), t >= 0 && (this.detailSelection.splice(t, 1), this.detailSelection.length == 0 && (this.editingDetailSelection = i.detail.autoEdit)), i.limitTransientDataToLocalCollection && delete this.transientData[e];
452
461
  }
453
462
  },
454
463
  /**
@@ -463,9 +472,9 @@ const De = {
463
472
  * the operation failed.
464
473
  */
465
474
  async saveResource(e) {
466
- const r = v(e, this), t = r == null, l = await P({
475
+ const r = v(e, this), t = r == null, l = await $({
467
476
  method: t ? "post" : "put",
468
- url: t ? s.restCollectionUrl : `${s.restCollectionUrl}/${r}`,
477
+ url: t ? i.restCollectionUrl : `${i.restCollectionUrl}/${r}`,
469
478
  data: e
470
479
  });
471
480
  if (l.status == 200) {
@@ -485,16 +494,42 @@ const De = {
485
494
  * @returns An array of refreshed local resources, one for each remote resource whose save operation succeeded.
486
495
  */
487
496
  async saveResources(e) {
488
- const r = await P({
497
+ const r = await $({
489
498
  method: "put",
490
- url: s.restCollectionUrl,
499
+ url: i.restCollectionUrl,
491
500
  data: e
492
501
  });
493
502
  if (r.status == 200) {
494
503
  const t = r.data || [], l = [];
495
504
  for (const [u, c] of t.entries()) {
496
- const d = v(e[u], this) == null, y = v(c, this), U = y ? await this.refreshResource(y) : null;
497
- d && this.recordInsertion(U || c), l.push(U || Object.freeze(c));
505
+ const d = v(e[u], this) == null, m = v(c, this), w = m ? await this.refreshResource(m) : null;
506
+ d && this.recordInsertion(w || c), l.push(w || Object.freeze(c));
507
+ }
508
+ return l;
509
+ }
510
+ return [];
511
+ },
512
+ /**
513
+ * Perform an update on one or more resources of the remote collection, then mirror the changes in the local collection.
514
+ *
515
+ * After writing changes, {@link refreshResource} is called to ensure that the local resource (which is also the
516
+ * return value) has the same object-graph characteristics as the rest of the local collection.
517
+ *
518
+ * @param resourcePropertyUpdates The list of update operations to perform, each having ID, property path, value, and update method.
519
+ * @returns The refreshed local resource after the change has been persisted to the remote collection, or null if
520
+ * the operation failed.
521
+ */
522
+ async updateResources(e) {
523
+ const r = await $({
524
+ method: "patch",
525
+ url: i.restCollectionUrl,
526
+ data: e
527
+ });
528
+ if (r.status == 200) {
529
+ const t = r.data || [], l = [];
530
+ for (const u of t) {
531
+ const c = v(u, this), d = c ? await this.refreshResource(c) : null;
532
+ l.push(d || Object.freeze(u));
498
533
  }
499
534
  return l;
500
535
  }
@@ -559,7 +594,7 @@ const De = {
559
594
  let c = e;
560
595
  if (t) {
561
596
  const d = a.difference(e, u);
562
- d.length > 0 && (c = u.concat(d).filter((y) => y != null));
597
+ d.length > 0 && (c = u.concat(d).filter((m) => m != null));
563
598
  }
564
599
  a.isEqual(u, c) || this.setSelection(c, l);
565
600
  },
@@ -574,30 +609,30 @@ const De = {
574
609
  if (!a.isEqual(e, this.selection.map((t) => v(t, this)))) {
575
610
  let t = !0;
576
611
  if (this.editors.length > 0) {
577
- if (s.detail.autoFromSingleSelection && this.selection.length == 1)
612
+ if (i.detail.autoFromSingleSelection && this.selection.length == 1)
578
613
  t = !1;
579
- else if (s.detail.autoFromMultipleSelection && s.detail.allowMultiple && this.selection.length > 1)
614
+ else if (i.detail.autoFromMultipleSelection && i.detail.allowMultiple && this.selection.length > 1)
580
615
  t = !1;
581
- else if (s.detail.constrainToSelection) {
616
+ else if (i.detail.constrainToSelection) {
582
617
  const l = this.selection.map((d) => v(d, this)), c = this.detailSelection.map((d) => v(d, this)).filter((d) => l.includes(d));
583
618
  this.detailSelection.filter((d) => !c.includes(v(d, this))).length > 0 && (t = !1);
584
619
  }
585
620
  }
586
621
  if (!t)
587
622
  return;
588
- if (this.selection = e.map((l) => this.resources.find((u) => v(u, this) == l)).filter((l) => l != null), s.detail.autoFromSingleSelection && this.selection.length == 1) {
623
+ if (this.selection = e.map((l) => this.resources.find((u) => v(u, this) == l)).filter((l) => l != null), i.detail.autoFromSingleSelection && this.selection.length == 1) {
589
624
  const l = this.selection[0];
590
625
  (this.detailSelection.length != 1 || v(this.detailSelection[0], this) != v(l, this)) && (this.detailSelection = [l]);
591
- } else if (s.detail.autoFromMultipleSelection && s.detail.allowMultiple && this.selection.length > 1)
626
+ } else if (i.detail.autoFromMultipleSelection && i.detail.allowMultiple && this.selection.length > 1)
592
627
  a.isEqual(
593
628
  this.selection.map((l) => v(l, this)),
594
629
  this.detailSelection.map((l) => v(l, this))
595
630
  ) || (this.detailSelection = a.clone(this.selection));
596
- else if (s.detail.constrainToSelection) {
631
+ else if (i.detail.constrainToSelection) {
597
632
  const l = this.selection.map((d) => v(d, this)), u = this.detailSelection.map((d) => v(d, this)), c = u.filter((d) => l.includes(d));
598
633
  a.isEqual(c, u) || (this.detailSelection = this.detailSelection.filter((d) => c.includes(v(d, this))));
599
634
  }
600
- this.detailSelection.length == 0 ? this.editingDetailSelection = !1 : this.editingDetailSelection = r !== void 0 ? r : this.editingDetailSelection || s.detail.autoEdit;
635
+ this.detailSelection.length == 0 ? this.editingDetailSelection = !1 : this.editingDetailSelection = r !== void 0 ? r : this.editingDetailSelection || i.detail.autoEdit;
601
636
  }
602
637
  },
603
638
  // ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////
@@ -621,9 +656,9 @@ const De = {
621
656
  * or set to true if options.detail.autoEdit is true.
622
657
  */
623
658
  showSelectionAsDetail(e) {
624
- if (this.selection.length <= 1 || s.detail.allowMultiple) {
659
+ if (this.selection.length <= 1 || i.detail.allowMultiple) {
625
660
  const r = this.selection.map((l) => v(l, this)), t = this.detailSelection.map((l) => v(l, this));
626
- a.isEqual(r, t) || (this.detailSelection = a.clone(this.selection)), this.detailSelection.length == 0 ? this.editingDetailSelection = !1 : this.editingDetailSelection = e !== void 0 ? e : this.editingDetailSelection || s.detail.autoEdit;
661
+ a.isEqual(r, t) || (this.detailSelection = a.clone(this.selection)), this.detailSelection.length == 0 ? this.editingDetailSelection = !1 : this.editingDetailSelection = e !== void 0 ? e : this.editingDetailSelection || i.detail.autoEdit;
627
662
  }
628
663
  },
629
664
  // ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////
@@ -677,228 +712,229 @@ const De = {
677
712
  });
678
713
  return (() => {
679
714
  const e = (r, t) => {
680
- const l = R(r, t);
681
- return re.registerStore(l.$id, l), l;
715
+ const l = g(r, t);
716
+ return ie.registerStore(l.$id, l), l;
682
717
  };
683
- return e.$id = R.$id, e;
718
+ return e.$id = g.$id, e;
684
719
  })();
685
- }, re = new Ie(), Oe = (f = {}) => {
720
+ }, ie = new Ie(), Qe = (h = {}) => {
686
721
  var ue, de, he, fe;
687
722
  const {
688
- collectionId: s,
689
- draftBatchId: R,
690
- enabled: $,
723
+ collectionId: i,
724
+ draftBatchId: g,
725
+ enabled: U,
691
726
  resourceType: e,
692
727
  options: r
693
- } = f, t = I(void 0), l = I(s), u = I(R), c = I($ ?? !0), d = I([se(e)]), y = I(r), U = S(() => u.value), L = I(c.value), z = I(H()), F = I((de = (ue = y.value) == null ? void 0 : ue.filter) == null ? void 0 : de.resourceIds), A = I((fe = (he = y.value) == null ? void 0 : he.filter) == null ? void 0 : fe.query), B = S(
694
- () => u.value == null && l.value != null && re.getStore(l.value) != null
695
- ), O = I(B.value), g = S(() => C("status", "Uninitialized"));
696
- function m(i) {
728
+ } = h, t = I(void 0), l = I(i), u = I(g), c = I(U ?? !0), d = I([se(e)]), m = I(r), w = R(() => u.value), x = I(c.value), A = I(H()), N = I((de = (ue = m.value) == null ? void 0 : ue.filter) == null ? void 0 : de.resourceIds), O = I((fe = (he = m.value) == null ? void 0 : he.filter) == null ? void 0 : fe.query), k = R(
729
+ () => u.value == null && l.value != null && ie.getStore(l.value) != null
730
+ ), P = I(k.value), y = R(() => E("status", "Uninitialized"));
731
+ function S(s) {
697
732
  if (t.value)
698
- return i(t.value);
733
+ return s(t.value);
699
734
  }
700
- async function E(i) {
735
+ async function T(s) {
701
736
  if (t.value)
702
- return await i(t.value);
737
+ return await s(t.value);
703
738
  }
704
- function C(i, o) {
739
+ function E(s, n) {
705
740
  if (t.value)
706
- return t.value[i];
707
- if (o !== void 0)
708
- return o;
741
+ return t.value[s];
742
+ if (n !== void 0)
743
+ return n;
709
744
  throw "Attempted to use a REST collection store that has not been created, with no default value.";
710
745
  }
711
- const D = (i = {}) => {
712
- var ie, ve, ge, Re;
746
+ const D = (s = {}) => {
747
+ var te, ve, ge, Re;
713
748
  const {
714
- collectionId: o,
715
- draftBatchId: w,
716
- enabled: q,
749
+ collectionId: n,
750
+ draftBatchId: C,
751
+ enabled: F,
717
752
  resourceType: le,
718
- options: te
719
- } = i;
720
- l.value = o, u.value = w, c.value = q ?? !0, d.value = [se(le)], te != null && (y.value = te, F.value = (ve = (ie = y.value) == null ? void 0 : ie.filter) == null ? void 0 : ve.resourceIds, A.value = (Re = (ge = y.value) == null ? void 0 : ge.filter) == null ? void 0 : Re.query), z.value = H(), W(c.value);
721
- }, W = async (i) => {
722
- i != L.value && (L.value = i, i && (Y(), b()));
723
- }, J = async (i) => {
724
- F.value = i, await E(async (o) => await o.setFilterResourceIds(F.value || null));
725
- }, K = async (i) => {
726
- if (A.value = i, g.value != "Uninitialized") {
727
- const o = i, w = S(() => a.isFunction(o) ? p.value ? o(p.value) : null : o);
728
- await E((q) => q.setQuery(w.value || null));
753
+ options: ee
754
+ } = s;
755
+ l.value = n, u.value = C, c.value = F ?? !0, d.value = [se(le)], ee != null && (m.value = ee, N.value = (ve = (te = m.value) == null ? void 0 : te.filter) == null ? void 0 : ve.resourceIds, O.value = (Re = (ge = m.value) == null ? void 0 : ge.filter) == null ? void 0 : Re.query), A.value = H(), W(c.value);
756
+ }, W = async (s) => {
757
+ s != x.value && (x.value = s, s && (K(), z()));
758
+ }, re = async (s) => {
759
+ N.value = s, await T(async (n) => await n.setFilterResourceIds(N.value || null));
760
+ }, J = async (s) => {
761
+ if (O.value = s, y.value != "Uninitialized") {
762
+ const n = s, C = R(() => a.isFunction(n) ? p.value ? n(p.value) : null : n);
763
+ await T((F) => F.setQuery(C.value || null));
729
764
  }
730
- }, Y = () => {
731
- y.value = a.merge({}, y.value || {}, {
732
- filter: { resourceIds: F.value, query: A.value }
765
+ }, K = () => {
766
+ m.value = a.merge({}, m.value || {}, {
767
+ filter: { resourceIds: N.value, query: O.value }
733
768
  });
734
- }, p = S(
769
+ }, p = R(
735
770
  () => d.value[0].value || void 0
736
- ), _ = function(i) {
737
- const o = a.get(i, "filter.query"), w = a.get(i, "propertyBlacklist"), q = a.get(i, "referencePathsToExpand"), le = a.isFunction(o) ? o(p.value) : o, te = p.value ? a.isFunction(w) ? w(p.value) : w || [] : [], ie = p.value ? a.isFunction(q) ? q(p.value) : q || [] : [];
771
+ ), B = function(s) {
772
+ const n = a.get(s, "filter.query"), C = a.get(s, "propertiesToExclude"), F = a.get(s, "referencePathsToExpand"), le = a.isFunction(n) ? n(p.value) : n, ee = p.value ? a.isFunction(C) ? C(p.value) : C || [] : [], te = p.value ? a.isFunction(F) ? F(p.value) : F || [] : [];
738
773
  return {
739
- ...a.cloneDeep(i || {}),
774
+ ...a.cloneDeep(s || {}),
740
775
  filter: {
741
- ...a.cloneDeep((i == null ? void 0 : i.filter) || {}),
776
+ ...a.cloneDeep((s == null ? void 0 : s.filter) || {}),
742
777
  query: le
743
778
  },
744
- propertyBlacklist: te,
745
- referencePathsToExpand: ie
779
+ propertiesToExclude: ee,
780
+ referencePathsToExpand: te
746
781
  };
747
- }, x = S(() => _(y.value)), Q = S(() => {
748
- if (x.value.restCollectionUrl !== void 0)
749
- return x.value.restCollectionUrl;
750
- if (!O.value)
751
- return !p.value || !p.value.collectionName ? null : U.value ? `${ee.config.apiBaseUrl}/draft-batches/${U.value}/${p.value.collectionName}` : `${ee.config.apiBaseUrl}/${p.value.collectionName}`;
752
- }), n = S(() => {
753
- var i;
782
+ }, q = R(() => B(m.value)), j = R(() => {
783
+ if (q.value.restCollectionUrl !== void 0)
784
+ return q.value.restCollectionUrl;
785
+ if (!P.value)
786
+ return !p.value || !p.value.collectionName ? null : w.value ? `${V.config.apiBaseUrl}/draft-batches/${w.value}/${p.value.collectionName}` : `${V.config.apiBaseUrl}/${p.value.collectionName}`;
787
+ }), o = R(() => {
788
+ var s;
754
789
  if (p.value)
755
790
  return a.mergeWith(
756
- a.cloneDeep(De),
757
- x.value,
791
+ a.cloneDeep(Ue),
792
+ q.value,
758
793
  {
759
- idProperty: (i = p.value) == null ? void 0 : i.idProperty,
760
- restCollectionUrl: Q.value || ""
794
+ idProperty: (s = p.value) == null ? void 0 : s.idProperty,
795
+ restCollectionUrl: j.value || ""
761
796
  },
762
- (o, w) => {
763
- if (a.isArray(w) && w.length == 0 && (o == null || a.isArray(o)))
764
- return w;
797
+ (n, C) => {
798
+ if (a.isArray(C) && C.length == 0 && (n == null || a.isArray(n)))
799
+ return C;
765
800
  }
766
801
  );
767
- }), h = I(0), N = S(
802
+ }), f = I(0), b = R(
768
803
  () => {
769
- var i;
770
- return h.value, l.value || p.value && ((i = p.value) == null ? void 0 : i.collectionName) && (U.value ? `draftBatches/${U.value}/${p.value.collectionName}/${z.value}` : `${p.value.collectionName}/${z.value}`) || null;
804
+ var s;
805
+ return f.value, l.value || p.value && ((s = p.value) == null ? void 0 : s.collectionName) && (w.value ? `draftBatches/${w.value}/${p.value.collectionName}/${A.value}` : `${p.value.collectionName}/${A.value}`) || null;
771
806
  }
772
- ), b = () => {
773
- if (L.value) {
774
- let i = !1;
775
- return p.value && N.value && (t.value = re.getStore(N.value), t.value ? i = !1 : n.value && (O.value = !1, t.value = Pe(N.value, n.value)(), i = !0)), i;
807
+ ), z = () => {
808
+ if (x.value) {
809
+ let s = !1;
810
+ return p.value && b.value && (t.value = ie.getStore(b.value), t.value ? s = !1 : o.value && (P.value = !1, t.value = Pe(b.value, o.value)(), s = !0)), s;
776
811
  } else
777
812
  return !1;
778
813
  }, G = () => {
779
- N.value && l.value == N.value ? (t.value = void 0, b()) : (t.value = void 0, h.value = h.value + 1, b());
814
+ b.value && l.value == b.value ? (t.value = void 0, z()) : (t.value = void 0, f.value = f.value + 1, z());
780
815
  };
781
- T(U, (i, o) => {
782
- a.isEqual(i, o) || G();
783
- }), T(L, (i, o) => {
784
- i != o && (i ? b() : t.value = void 0);
785
- }), T(p, (i, o) => {
786
- i && !o ? b() : !i && o || a.isEqual(i, o) || G();
787
- }), T(n, (i, o) => {
788
- a.isEqual(i, o) || G();
789
- }), T(B, () => {
790
- B.value || (O.value = !1);
791
- }), T(N, () => b()), T(Q, (i, o) => {
792
- a.isEqual(i, o) || G();
816
+ L(w, (s, n) => {
817
+ a.isEqual(s, n) || G();
818
+ }), L(x, (s, n) => {
819
+ s != n && (s ? z() : t.value = void 0);
820
+ }), L(p, (s, n) => {
821
+ s && !n ? z() : !s && n || a.isEqual(s, n) || G();
822
+ }), L(o, (s, n) => {
823
+ a.isEqual(s, n) || G();
824
+ }), L(k, () => {
825
+ k.value || (P.value = !1);
826
+ }), L(b, () => z()), L(j, (s, n) => {
827
+ a.isEqual(s, n) || G();
793
828
  });
794
- const j = [], Ee = function(i) {
795
- g.value != "Uninitialized" ? Le(i) : j.push(i);
829
+ const M = [], we = function(s) {
830
+ y.value != "Uninitialized" ? Le(s) : M.push(s);
796
831
  };
797
- return T(g, (i, o) => {
798
- if (i != "Uninitialized" && o == "Uninitialized") {
799
- const w = a.clone(j);
800
- j.splice(0, j.length);
801
- for (const q of w)
802
- q();
832
+ return L(y, (s, n) => {
833
+ if (s != "Uninitialized" && n == "Uninitialized") {
834
+ const C = a.clone(M);
835
+ M.splice(0, M.length);
836
+ for (const F of C)
837
+ F();
803
838
  }
804
- }), b(), {
839
+ }), z(), {
805
840
  // Configuration
806
- collectionId: N,
807
- draftBatchId: U,
841
+ collectionId: b,
842
+ draftBatchId: w,
808
843
  resourceType: p,
809
- restCollectionUrl: Q,
844
+ restCollectionUrl: R(() => E("restCollectionUrl", null)),
810
845
  // Status
811
- enabled: L,
812
- status: g,
813
- batchSaveAttempted: S(() => C("batchSaveAttempted", !1)),
814
- listNavigators: S(() => C("listNavigators", !1)),
846
+ enabled: x,
847
+ status: y,
848
+ batchSaveAttempted: R(() => E("batchSaveAttempted", !1)),
849
+ listNavigators: R(() => E("listNavigators", !1)),
815
850
  // Resources loaded from the REST API
816
- invalidResources: S(() => C("invalidResources", [])),
817
- resources: S(() => g.value != "Uninitialized" ? (E((i) => i.ensureCollectionLoaded()), C("resources", [])) : []),
818
- remoteCollectionSize: S(() => C("remoteCollectionSize", null)),
851
+ invalidResources: R(() => E("invalidResources", [])),
852
+ resources: R(() => y.value != "Uninitialized" ? (T((s) => s.ensureCollectionLoaded()), E("resources", [])) : []),
853
+ remoteCollectionSize: R(() => E("remoteCollectionSize", null)),
819
854
  // Transient data
820
- transientData: S(() => C("transientData", [])),
855
+ transientData: R(() => E("transientData", [])),
821
856
  // Selection and detail selection
822
- detailSelection: S(() => C("detailSelection", [])),
823
- editingDetailSelection: S(() => C("editingDetailSelection", !1)),
824
- selection: S(() => C("selection", [])),
857
+ detailSelection: R(() => E("detailSelection", [])),
858
+ editingDetailSelection: R(() => E("editingDetailSelection", !1)),
859
+ selection: R(() => E("selection", [])),
825
860
  // Methods: Configuration
826
861
  reconfigureCollection: D,
827
- setEditingDetailSelection: (i) => m(
828
- (o) => o.setEditingDetailSelection(i)
862
+ setEditingDetailSelection: (s) => S(
863
+ (n) => n.setEditingDetailSelection(s)
829
864
  ),
830
865
  setEnabled: W,
831
- setFilterResourceIds: J,
832
- setQuery: K,
866
+ setFilterResourceIds: re,
867
+ setQuery: J,
833
868
  // Methods: Status
834
- ensureStore: b,
869
+ ensureStore: z,
835
870
  // TODO Rename
836
- setBatchSaveAttempted: (i) => m((o) => o.setBatchSaveAttempted(i)),
871
+ setBatchSaveAttempted: (s) => S((n) => n.setBatchSaveAttempted(s)),
837
872
  // Local collection management
838
- clear: () => m((i) => i.clear()),
839
- ensureCollectionLoaded: async () => await E(async (i) => i.ensureCollectionLoaded()),
840
- loadResources: async () => await E(async (i) => await i.loadResources()),
873
+ clear: () => S((s) => s.clear()),
874
+ ensureCollectionLoaded: async () => await T(async (s) => s.ensureCollectionLoaded()),
875
+ loadResources: async () => await T(async (s) => await s.loadResources()),
841
876
  // Methods: Recording changes to the collection
842
- addResource: (i) => m((o) => o.addResource(i)),
843
- checkForDeletedResource: async (i) => await E(async (o) => await o.checkForDeletedResource(i)) == !0,
844
- recordDeletion: (i) => m((o) => o.recordDeletion(i)),
845
- recordInsertion: (i, { insertAtBeginning: o = !1, transientData: w = void 0 } = {}) => m((q) => q.recordInsertion(i, { insertAtBeginning: o, transientData: w })),
846
- recordUpdate: (i) => m((o) => o.recordUpdate(i)),
847
- refreshResource: async (i) => await E(
848
- async (o) => await o.refreshResource(i)
877
+ addResource: (s) => S((n) => n.addResource(s)),
878
+ checkForDeletedResource: async (s) => await T(async (n) => await n.checkForDeletedResource(s)) == !0,
879
+ recordDeletion: (s) => S((n) => n.recordDeletion(s)),
880
+ recordInsertion: (s, { insertAtBeginning: n = !1, transientData: C = void 0 } = {}) => S((F) => F.recordInsertion(s, { insertAtBeginning: n, transientData: C })),
881
+ recordUpdate: (s) => S((n) => n.recordUpdate(s)),
882
+ refreshResource: async (s) => await T(
883
+ async (n) => await n.refreshResource(s)
849
884
  ),
850
885
  // Methods: Modifying the collection
851
- deleteResource: async (i) => await E(
852
- async (o) => await o.deleteResource(i)
886
+ deleteResource: async (s) => await T(
887
+ async (n) => await n.deleteResource(s)
853
888
  ),
854
- saveResource: async (i) => await E(async (o) => await o.saveResource(i)),
855
- saveResources: async (i) => await E(async (o) => await o.saveResources(i)),
889
+ saveResource: async (s) => await T(async (n) => await n.saveResource(s)),
890
+ saveResources: async (s) => await T(async (n) => await n.saveResources(s)),
891
+ updateResources: async (s) => await T(async (n) => await n.updateResources(s)),
856
892
  // Methods: Transient data
857
- clearTransientData: () => m((i) => i.clearTransientData()),
858
- setInvalidResourceIds: (i) => m((o) => o.setInvalidResourceIds(i)),
859
- setTransientDataForResources: (i) => m(
860
- (o) => o.setTransientDataForResources(i)
893
+ clearTransientData: () => S((s) => s.clearTransientData()),
894
+ setInvalidResourceIds: (s) => S((n) => n.setInvalidResourceIds(s)),
895
+ setTransientDataForResources: (s) => S(
896
+ (n) => n.setTransientDataForResources(s)
861
897
  ),
862
898
  // Methods: Selection and detail selection
863
- clearSelection: () => m((i) => i.clearSelection()),
864
- deselectResources: (i) => m((o) => o.deselectResources(i)),
865
- selectResources: (i, o) => m(
866
- (w) => w.selectResources(i, o)
899
+ clearSelection: () => S((s) => s.clearSelection()),
900
+ deselectResources: (s) => S((n) => n.deselectResources(s)),
901
+ selectResources: (s, n) => S(
902
+ (C) => C.selectResources(s, n)
867
903
  ),
868
904
  // Methods: Managing the detail view
869
- hideDetail: () => m((i) => i.hideDetail()),
905
+ hideDetail: () => S((s) => s.hideDetail()),
870
906
  // Methods: Editors
871
- deregisterEditor: (i) => m((o) => o.deregisterEditor(i)),
872
- registerEditor: (i) => m((o) => o.registerEditor(i)),
907
+ deregisterEditor: (s) => S((n) => n.deregisterEditor(s)),
908
+ registerEditor: (s) => S((n) => n.registerEditor(s)),
873
909
  // Methods: List navigators
874
- deregisterListNavigator: (i) => m((o) => o.deregisterListNavigator(i)),
875
- registerListNavigator: (i) => m((o) => o.registerListNavigator(i)),
910
+ deregisterListNavigator: (s) => S((n) => n.deregisterListNavigator(s)),
911
+ registerListNavigator: (s) => S((n) => n.registerListNavigator(s)),
876
912
  // Callbacks
877
- onItemsStoreReady: Ee
913
+ onItemsStoreReady: we
878
914
  };
879
- }, Qe = () => {
880
- re.clearAllStores();
915
+ }, je = () => {
916
+ ie.clearAllStores();
881
917
  };
882
- function oe(f, s) {
883
- return a.get(f, (s == null ? void 0 : s.idProperty) || "_id");
918
+ function ne(h, i) {
919
+ return a.get(h, (i == null ? void 0 : i.idProperty) || "_id");
884
920
  }
885
- const Ue = {
921
+ const De = {
886
922
  idProperty: "_id"
887
- }, V = {
923
+ }, Z = {
888
924
  resource: null,
889
925
  status: "NotLoaded"
890
- }, xe = (f, s) => {
891
- s = a.merge({}, Ue, s);
892
- const R = pe(f, {
926
+ }, qe = (h, i) => {
927
+ i = a.merge({}, De, i);
928
+ const g = me(h, {
893
929
  state: () => ({
894
- idProperty: s.idProperty,
895
- resourceId: s.resourceId || null,
896
- resourceUrl: s.resourceUrl || null,
897
- referencePathsToExpand: s.referencePathsToExpand || null,
898
- ...V
930
+ idProperty: i.idProperty,
931
+ resourceId: i.resourceId || null,
932
+ resourceUrl: i.resourceUrl || null,
933
+ referencePathsToExpand: i.referencePathsToExpand || null,
934
+ ...Z
899
935
  }),
900
936
  getters: {
901
- currentResourceUrl: (e) => e.resourceUrl || (s.restCollectionUrl && e.resourceId ? `${s.restCollectionUrl}/${e.resourceId}` : null) || s.restCollectionUrl || null,
937
+ currentResourceUrl: (e) => e.resourceUrl || (i.restCollectionUrl && e.resourceId ? `${i.restCollectionUrl}/${e.resourceId}` : null) || i.restCollectionUrl || null,
902
938
  /** Get the REST query parameters that can be determined from the options. */
903
939
  fixedQueryParams: (e) => {
904
940
  const r = {};
@@ -915,8 +951,8 @@ const Ue = {
915
951
  * Configuration is retained, but REST resource content and contextual state are reset.
916
952
  */
917
953
  reset() {
918
- for (const e in V)
919
- this[e] = V[e];
954
+ for (const e in Z)
955
+ this[e] = Z[e];
920
956
  },
921
957
  async setResourceId(e) {
922
958
  const r = this.currentResourceUrl;
@@ -935,8 +971,8 @@ const Ue = {
935
971
  * Configuration and contextual state are retained, but REST collection contents are reset.
936
972
  */
937
973
  clear() {
938
- for (const e in V)
939
- this[e] = V[e];
974
+ for (const e in Z)
975
+ this[e] = Z[e];
940
976
  },
941
977
  /**
942
978
  * Load the resource, if it has not been loaded.
@@ -961,8 +997,8 @@ const Ue = {
961
997
  (c, d) => c != null ? `${encodeURIComponent(d)}=${encodeURIComponent(c)}` : null
962
998
  ).filter((c) => c != null).join("&"), u = a.isEmpty(l) ? this.currentResourceUrl : `${this.currentResourceUrl}?${l}`;
963
999
  try {
964
- const c = await P.get(u), d = this.fixedQueryParams;
965
- e != this._loadId || !a.isEqual(r, d) ? console.log(`Discarding resource fetched by obsolete query from ${u}.`) : (this.resource = me.decode(a.get(c, "data", {})), this.status = "Loaded");
1000
+ const c = await $.get(u), d = this.fixedQueryParams;
1001
+ e != this._loadId || !a.isEqual(r, d) ? console.log(`Discarding resource fetched by obsolete query from ${u}.`) : (this.resource = pe.decode(a.get(c, "data", {})), this.status = "Loaded");
966
1002
  } catch (c) {
967
1003
  console.log(`Error while loading resource (URL="${u}")`, c), this.reset(), this.status = "Failed";
968
1004
  }
@@ -984,9 +1020,9 @@ const Ue = {
984
1020
  if (this.currentResourceUrl) {
985
1021
  let e;
986
1022
  try {
987
- e = await P.get(this.currentResourceUrl);
1023
+ e = await $.get(this.currentResourceUrl);
988
1024
  } catch (r) {
989
- P.isAxiosError(r) && (e = r.response);
1025
+ $.isAxiosError(r) && (e = r.response);
990
1026
  }
991
1027
  return e && e.status == 404 ? (this.recordDeletion(), !0) : !1;
992
1028
  } else
@@ -1021,7 +1057,7 @@ const Ue = {
1021
1057
  * @param resource The resource that has been inserted.
1022
1058
  */
1023
1059
  recordInsertion(e) {
1024
- this.resourceId = oe(e, this) || null, this.status == "Loaded" && (this.resource = Object.freeze(e));
1060
+ this.resourceId = ne(e, this) || null, this.status == "Loaded" && (this.resource = Object.freeze(e));
1025
1061
  },
1026
1062
  /**
1027
1063
  * Record an update, making the same changes in the local resource.
@@ -1042,7 +1078,7 @@ const Ue = {
1042
1078
  * @param resource The resource that has been updated.
1043
1079
  */
1044
1080
  recordUpdate(e) {
1045
- this.resourceId = oe(e, this) || null, this.status == "Loaded" && (this.resource = Object.freeze(e));
1081
+ this.resourceId = ne(e, this) || null, this.status == "Loaded" && (this.resource = Object.freeze(e));
1046
1082
  },
1047
1083
  async refreshResource() {
1048
1084
  return await this.loadResource(), this.resource;
@@ -1057,7 +1093,7 @@ const Ue = {
1057
1093
  */
1058
1094
  async deleteResource() {
1059
1095
  if (this.currentResourceUrl)
1060
- (await P.delete(this.currentResourceUrl)).status == 200 && this.recordDeletion();
1096
+ (await $.delete(this.currentResourceUrl)).status == 200 && this.recordDeletion();
1061
1097
  else
1062
1098
  throw "Cannot delete a resource because its URL, or its ID and collection URL, are unknown.";
1063
1099
  },
@@ -1073,12 +1109,12 @@ const Ue = {
1073
1109
  * the operation failed.
1074
1110
  */
1075
1111
  async saveResource(e) {
1076
- const r = oe(e, this), t = r == null;
1112
+ const r = ne(e, this), t = r == null;
1077
1113
  if (!r)
1078
1114
  throw "The REST resource store cannot create new resources on the server.";
1079
1115
  if (!this.currentResourceUrl)
1080
1116
  throw "Cannot save a resource because its URL, or its ID and collection URL, are unknown.";
1081
- const l = await P({
1117
+ const l = await $({
1082
1118
  method: t ? "post" : "put",
1083
1119
  url: this.currentResourceUrl,
1084
1120
  data: e
@@ -1089,6 +1125,30 @@ const Ue = {
1089
1125
  }
1090
1126
  return null;
1091
1127
  },
1128
+ /**
1129
+ * Partial update of the remote resource, then mirror the change locally.
1130
+ *
1131
+ * After writing changes, {@link refreshResource} is called to ensure that the local resource (which is also the
1132
+ * return value) has the same object-graph characteristics as the rest of the local collection.
1133
+ *
1134
+ * @param resourcePropertyUpdates A list of property paths, values, and update methods to apply .
1135
+ * @returns The refreshed local resource after the change has been persisted to the remote collection, or null if
1136
+ * the operation failed.
1137
+ */
1138
+ async updateResource(e) {
1139
+ if (!this.currentResourceUrl)
1140
+ throw "Cannot save a resource because its URL, or its ID and collection URL, are unknown.";
1141
+ const r = await $({
1142
+ method: "patch",
1143
+ url: this.currentResourceUrl,
1144
+ data: e
1145
+ });
1146
+ if (r.status == 200) {
1147
+ const t = r.data;
1148
+ return await this.refreshResource() || Object.freeze(t);
1149
+ }
1150
+ return null;
1151
+ },
1092
1152
  // ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////
1093
1153
  // Actions: Custom API endpoints
1094
1154
  // ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////
@@ -1100,7 +1160,7 @@ const Ue = {
1100
1160
  c = `${this.currentResourceUrl}/${t}`;
1101
1161
  else
1102
1162
  throw "Cannot make a custom API request for a resource because its URL, or its ID and collection URL, are unknown.";
1103
- const d = await P({
1163
+ const d = await $({
1104
1164
  method: r || "get",
1105
1165
  url: c,
1106
1166
  data: u
@@ -1111,148 +1171,149 @@ const Ue = {
1111
1171
  });
1112
1172
  return (() => {
1113
1173
  const e = (r, t) => {
1114
- const l = R(r, t);
1174
+ const l = g(r, t);
1115
1175
  return ce.registerStore(l.$id, l), l;
1116
1176
  };
1117
- return e.$id = R.$id, e;
1177
+ return e.$id = g.$id, e;
1118
1178
  })();
1119
- }, ce = new Ie(), Me = (f = {}) => {
1179
+ }, ce = new Ie(), Me = (h = {}) => {
1120
1180
  const {
1121
- resourceClientId: s,
1122
- draftBatchId: R,
1123
- enabled: $,
1181
+ resourceClientId: i,
1182
+ draftBatchId: g,
1183
+ enabled: U,
1124
1184
  resourceType: e,
1125
1185
  options: r
1126
- } = f, t = I(void 0), l = I(s), u = I(R), c = I($ ?? !0), d = I([se(e)]), y = I(r), U = S(() => u.value), L = I(c.value), z = I(H()), F = S(
1186
+ } = h, t = I(void 0), l = I(i), u = I(g), c = I(U ?? !0), d = I([se(e)]), m = I(r), w = R(() => u.value), x = I(c.value), A = I(H()), N = R(
1127
1187
  () => u.value == null && l.value != null && ce.getStore(l.value) != null
1128
- ), A = I(F.value), B = S(() => m("status", "Uninitialized"));
1129
- function O(n) {
1188
+ ), O = I(N.value), k = R(() => S("status", "Uninitialized"));
1189
+ function P(o) {
1130
1190
  if (t.value)
1131
- return n(t.value);
1191
+ return o(t.value);
1132
1192
  }
1133
- async function g(n) {
1193
+ async function y(o) {
1134
1194
  if (t.value)
1135
- return await n(t.value);
1195
+ return await o(t.value);
1136
1196
  }
1137
- function m(n, h) {
1197
+ function S(o, f) {
1138
1198
  if (t.value)
1139
- return t.value[n];
1140
- if (h !== void 0)
1141
- return h;
1199
+ return t.value[o];
1200
+ if (f !== void 0)
1201
+ return f;
1142
1202
  throw "Attempted to use a REST resource store that has not been created, with no default value.";
1143
1203
  }
1144
- const E = (n = {}) => {
1204
+ const T = (o = {}) => {
1145
1205
  const {
1146
- resourceClientId: h,
1147
- draftBatchId: N,
1148
- enabled: b,
1206
+ resourceClientId: f,
1207
+ draftBatchId: b,
1208
+ enabled: z,
1149
1209
  resourceType: G,
1150
- options: j
1151
- } = n;
1152
- l.value = h, u.value = N, c.value = b ?? !0, d.value = [se(G)], j != null && (y.value = j), z.value = H(), C(c.value);
1153
- }, C = async (n) => {
1154
- n != L.value && (L.value = n, n && x());
1155
- }, D = S(
1210
+ options: M
1211
+ } = o;
1212
+ l.value = f, u.value = b, c.value = z ?? !0, d.value = [se(G)], M != null && (m.value = M), A.value = H(), E(c.value);
1213
+ }, E = async (o) => {
1214
+ o != x.value && (x.value = o, o && q());
1215
+ }, D = R(
1156
1216
  () => d.value[0].value || void 0
1157
- ), W = function(n) {
1158
- const h = a.get(n, "referencePathsToExpand"), N = D.value ? a.isFunction(h) ? h(D.value) : h || [] : [];
1217
+ ), W = function(o) {
1218
+ const f = a.get(o, "referencePathsToExpand"), b = D.value ? a.isFunction(f) ? f(D.value) : f || [] : [];
1159
1219
  return {
1160
- ...a.cloneDeep(n || {}),
1161
- referencePathsToExpand: N
1220
+ ...a.cloneDeep(o || {}),
1221
+ referencePathsToExpand: b
1162
1222
  };
1163
- }, J = S(() => W(y.value)), K = S(() => {
1223
+ }, re = R(() => W(m.value)), J = R(() => {
1164
1224
  if (!D.value)
1165
1225
  return null;
1166
- if (!A.value)
1167
- return !D.value || !D.value.collectionName ? null : U.value ? `${ee.config.apiBaseUrl}/draft-batches/${U.value}/${D.value.collectionName}` : `${ee.config.apiBaseUrl}/${D.value.collectionName}`;
1168
- }), Y = S(() => {
1169
- if (D.value && K.value)
1226
+ if (!O.value)
1227
+ return !D.value || !D.value.collectionName ? null : w.value ? `${V.config.apiBaseUrl}/draft-batches/${w.value}/${D.value.collectionName}` : `${V.config.apiBaseUrl}/${D.value.collectionName}`;
1228
+ }), K = R(() => {
1229
+ if (D.value && J.value)
1170
1230
  return a.mergeWith(
1171
- a.cloneDeep(Ue),
1172
- J.value,
1231
+ a.cloneDeep(De),
1232
+ re.value,
1173
1233
  {
1174
1234
  idProperty: D.value.idProperty,
1175
- restCollectionUrl: K.value
1235
+ restCollectionUrl: J.value
1176
1236
  },
1177
- (n, h) => {
1178
- if (a.isArray(h) && h.length == 0 && (n == null || a.isArray(n)))
1179
- return h;
1237
+ (o, f) => {
1238
+ if (a.isArray(f) && f.length == 0 && (o == null || a.isArray(o)))
1239
+ return f;
1180
1240
  }
1181
1241
  );
1182
- }), p = I(0), _ = S(
1242
+ }), p = I(0), B = R(
1183
1243
  () => {
1184
- var n;
1185
- return p.value, l.value || D.value && ((n = D.value) == null ? void 0 : n.collectionName) && (U.value ? `draftBatches/${U.value}/${D.value.collectionName}/${z.value}` : `${D.value.collectionName}/${z.value}`) || null;
1244
+ var o;
1245
+ return p.value, l.value || D.value && ((o = D.value) == null ? void 0 : o.collectionName) && (w.value ? `draftBatches/${w.value}/${D.value.collectionName}/${A.value}` : `${D.value.collectionName}/${A.value}`) || null;
1186
1246
  }
1187
- ), x = () => {
1188
- if (L.value) {
1189
- let n = !1;
1190
- return D.value && _.value && (t.value = ce.getStore(_.value), t.value ? n = !1 : Y.value && (A.value = !1, t.value = xe(_.value, Y.value)(), n = !0)), n;
1247
+ ), q = () => {
1248
+ if (x.value) {
1249
+ let o = !1;
1250
+ return D.value && B.value && (t.value = ce.getStore(B.value), t.value ? o = !1 : K.value && (O.value = !1, t.value = qe(B.value, K.value)(), o = !0)), o;
1191
1251
  } else
1192
1252
  return !1;
1193
- }, Q = () => {
1194
- _.value && l.value == _.value ? (t.value = void 0, x()) : (t.value = void 0, p.value = p.value + 1, x());
1253
+ }, j = () => {
1254
+ B.value && l.value == B.value ? (t.value = void 0, q()) : (t.value = void 0, p.value = p.value + 1, q());
1195
1255
  };
1196
- return T(U, (n, h) => {
1197
- a.isEqual(n, h) || Q();
1198
- }), T(L, (n, h) => {
1199
- n != h && (n ? x() : t.value = void 0);
1200
- }), T(D, (n, h) => {
1201
- n && !h ? x() : !n && h || a.isEqual(n, h) || Q();
1202
- }), T(Y, (n, h) => {
1203
- a.isEqual(n, h) || Q();
1204
- }), T(F, () => {
1205
- F.value || (A.value = !1);
1206
- }), T(_, () => x()), T(K, (n, h) => {
1207
- a.isEqual(n, h) || Q();
1208
- }), x(), {
1256
+ return L(w, (o, f) => {
1257
+ a.isEqual(o, f) || j();
1258
+ }), L(x, (o, f) => {
1259
+ o != f && (o ? q() : t.value = void 0);
1260
+ }), L(D, (o, f) => {
1261
+ o && !f ? q() : !o && f || a.isEqual(o, f) || j();
1262
+ }), L(K, (o, f) => {
1263
+ a.isEqual(o, f) || j();
1264
+ }), L(N, () => {
1265
+ N.value || (O.value = !1);
1266
+ }), L(B, () => q()), L(J, (o, f) => {
1267
+ a.isEqual(o, f) || j();
1268
+ }), q(), {
1209
1269
  // Configuration
1210
- resourceClientId: _,
1211
- draftBatchId: U,
1212
- enabled: L,
1270
+ resourceClientId: B,
1271
+ draftBatchId: w,
1272
+ enabled: x,
1213
1273
  resourceType: D,
1214
1274
  // Status
1215
- status: B,
1275
+ status: k,
1216
1276
  // Resources loaded from the REST API
1217
- resource: S(() => B.value != "Uninitialized" ? (g((n) => n.ensureResourceLoaded()), m("resource", [])) : []),
1218
- resourceId: S(() => m("resourceId", null)),
1219
- resourceUrl: S(() => m("resourceUrl", null)),
1277
+ resource: R(() => k.value != "Uninitialized" ? (y((o) => o.ensureResourceLoaded()), S("resource", [])) : []),
1278
+ resourceId: R(() => S("resourceId", null)),
1279
+ resourceUrl: R(() => S("resourceUrl", null)),
1220
1280
  // Methods: Configuration
1221
- reconfigureClient: E,
1222
- setEnabled: C,
1223
- setResourceId: async (n) => await g(async (h) => await h.setResourceId(n)),
1224
- setResourceUrl: async (n) => await g(async (h) => await h.setResourceUrl(n)),
1281
+ reconfigureClient: T,
1282
+ setEnabled: E,
1283
+ setResourceId: async (o) => await y(async (f) => await f.setResourceId(o)),
1284
+ setResourceUrl: async (o) => await y(async (f) => await f.setResourceUrl(o)),
1225
1285
  // Methods: Status
1226
- ensureStore: x,
1286
+ ensureStore: q,
1227
1287
  // Methods: Resource management
1228
- clear: () => O((n) => n.clear()),
1229
- ensureResourceLoaded: async () => await g(async (n) => n.ensureResourceLoaded()),
1230
- loadResource: async () => await g(async (n) => await n.loadResource()),
1288
+ clear: () => P((o) => o.clear()),
1289
+ ensureResourceLoaded: async () => await y(async (o) => o.ensureResourceLoaded()),
1290
+ loadResource: async () => await y(async (o) => await o.loadResource()),
1231
1291
  // Methods: Recording changes to the resource
1232
- checkForDeletedResource: async () => await g(async (n) => await n.checkForDeletedResource()) == !0,
1233
- recordDeletion: () => g((n) => n.recordDeletion()),
1234
- recordInsertion: (n) => g((h) => h.recordInsertion(n)),
1235
- recordUpdate: (n) => g((h) => h.recordUpdate(n)),
1236
- refreshResource: async () => await g(async (n) => await n.refreshResource()),
1292
+ checkForDeletedResource: async () => await y(async (o) => await o.checkForDeletedResource()) == !0,
1293
+ recordDeletion: () => y((o) => o.recordDeletion()),
1294
+ recordInsertion: (o) => y((f) => f.recordInsertion(o)),
1295
+ recordUpdate: (o) => y((f) => f.recordUpdate(o)),
1296
+ refreshResource: async () => await y(async (o) => await o.refreshResource()),
1237
1297
  // Methods: Modifying the resource
1238
- deleteResource: async () => await g(async (n) => await n.deleteResource()),
1239
- saveResource: async (n) => await g(async (h) => await h.saveResource(n)),
1298
+ deleteResource: async () => await y(async (o) => await o.deleteResource()),
1299
+ saveResource: async (o) => await y(async (f) => await f.saveResource(o)),
1300
+ updateResource: async (o) => await y(async (f) => await f.updateResource(o)),
1240
1301
  // Methods: Custom API endpoints
1241
- makeCustomApiRequest: async (n) => await g(
1242
- async (h) => await h.makeCustomApiRequest(n)
1302
+ makeCustomApiRequest: async (o) => await y(
1303
+ async (f) => await f.makeCustomApiRequest(o)
1243
1304
  )
1244
1305
  };
1245
- }, ee = {
1306
+ }, V = {
1246
1307
  config: { ...ye }
1247
1308
  };
1248
- function je(f) {
1249
- ee.config = a.merge({}, ye, f);
1309
+ function We(h) {
1310
+ V.config = a.merge({}, ye, h);
1250
1311
  }
1251
1312
  export {
1252
- _e as ApiClientError,
1253
- Qe as clearAllRestCollections,
1254
- je as initRestClient,
1255
- ee as restClient,
1256
- Oe as useRestCollection,
1313
+ Be as ApiClientError,
1314
+ je as clearAllRestCollections,
1315
+ We as initRestClient,
1316
+ V as restClient,
1317
+ Qe as useRestCollection,
1257
1318
  Me as useRestResource
1258
1319
  };