@warp-drive-mirror/core 5.10.0-alpha.21 → 5.10.0-alpha.23

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 (133) hide show
  1. package/dist/{-private-CvZfrDZl.js → -private-DhEjiHue.js} +2 -2
  2. package/dist/{-private-CvZfrDZl.js.map → -private-DhEjiHue.js.map} +1 -1
  3. package/dist/build-config/babel-macros.d.ts +5 -0
  4. package/dist/build-config/canary-features.d.ts +5 -0
  5. package/dist/build-config/debugging.d.ts +59 -0
  6. package/dist/build-config/deprecations.d.ts +5 -0
  7. package/dist/build-config.d.ts +17 -0
  8. package/dist/{concepts-vh86nAcd.d.ts → concepts-Db9ssz1h.d.ts} +3 -3
  9. package/dist/{concepts-vh86nAcd.d.ts.map → concepts-Db9ssz1h.d.ts.map} +1 -1
  10. package/dist/configure.d.ts +8 -0
  11. package/dist/configure.js +1 -1
  12. package/dist/{document-B8Fup751.d.ts → document-BUmwSPVO.d.ts} +2 -2
  13. package/dist/{document-B8Fup751.d.ts.map → document-BUmwSPVO.d.ts.map} +1 -1
  14. package/dist/{fields-r1rZJB9d.d.ts → fields-B-jO-dzB.d.ts} +111 -47
  15. package/dist/fields-B-jO-dzB.d.ts.map +1 -0
  16. package/dist/graph/-private.d.ts +1 -1
  17. package/dist/graph/-private.js +33 -20
  18. package/dist/graph/-private.js.map +1 -1
  19. package/dist/{graph-BqxaFjEb.d.ts → graph-CoQhsOgT.d.ts} +3 -3
  20. package/dist/{graph-BqxaFjEb.d.ts.map → graph-CoQhsOgT.d.ts.map} +1 -1
  21. package/dist/index.d.ts +1 -1
  22. package/dist/index.js +1 -1
  23. package/dist/{internal-D_WIXC4r.d.ts → internal-BrC3kM86.d.ts} +20 -6
  24. package/dist/internal-BrC3kM86.d.ts.map +1 -0
  25. package/dist/reactive/-private.d.ts +1 -1
  26. package/dist/reactive.d.ts +276 -1
  27. package/dist/reactive.js +2 -2
  28. package/dist/{request-CxtnNIIp.js → request-qKqD2aCa.js} +2 -2
  29. package/dist/{request-CxtnNIIp.js.map → request-qKqD2aCa.js.map} +1 -1
  30. package/dist/request.d.ts +9 -1
  31. package/dist/request.js +1 -1
  32. package/dist/signals/-leaked.d.ts +15 -1
  33. package/dist/signals/-leaked.d.ts.map +1 -1
  34. package/dist/signals/-leaked.js +1 -1
  35. package/dist/{src-ccp1WKyt.js → src-spa19bCt.js} +30 -13
  36. package/dist/src-spa19bCt.js.map +1 -0
  37. package/dist/store/-private.d.ts +1 -1
  38. package/dist/store/-private.js +1 -1
  39. package/dist/store.d.ts +6 -1
  40. package/dist/types/-private.js +1 -1
  41. package/dist/types/cache/relationship.d.ts +5 -0
  42. package/dist/types/cache.d.ts +6 -1
  43. package/dist/types/graph.d.ts +6 -1
  44. package/dist/types/record.d.ts +5 -0
  45. package/dist/types/request.d.ts +1 -1
  46. package/dist/types/schema/concepts.d.ts +6 -1
  47. package/dist/types/schema/fields.d.ts +2 -2
  48. package/dist/types/schema/fields.js +82 -23
  49. package/dist/types/schema/fields.js.map +1 -1
  50. package/dist/types/schema/schema-service.d.ts +6 -1
  51. package/dist/types/spec/document.d.ts +1 -1
  52. package/dist/types/spec/error.d.ts +4 -0
  53. package/dist/types/spec/json-api-raw.d.ts +5 -0
  54. package/dist/types.d.ts +9 -1
  55. package/dist/unpkg/{dev-deprecated/-private-B4pCmkq-.js → dev/-private-BJ2WIhKs.js} +2 -2
  56. package/dist/unpkg/dev/{-private-B4pCmkq-.js.map → -private-BJ2WIhKs.js.map} +1 -1
  57. package/dist/unpkg/dev/configure.js +1 -1
  58. package/dist/unpkg/dev/graph/-private.js +34 -21
  59. package/dist/unpkg/dev/graph/-private.js.map +1 -1
  60. package/dist/unpkg/dev/index.js +1 -1
  61. package/dist/unpkg/dev/reactive.js +2 -2
  62. package/dist/unpkg/dev/{request-oWpijCPQ.js → request-6lzVjHLN.js} +2 -2
  63. package/dist/unpkg/{dev-deprecated/request-oWpijCPQ.js.map → dev/request-6lzVjHLN.js.map} +1 -1
  64. package/dist/unpkg/dev/request.js +1 -1
  65. package/dist/unpkg/dev/signals/-leaked.js +1 -1
  66. package/dist/unpkg/dev/{src-C4ET4R1n.js → src-D1dbEzXb.js} +31 -14
  67. package/dist/unpkg/dev/src-D1dbEzXb.js.map +1 -0
  68. package/dist/unpkg/dev/store/-private.js +1 -1
  69. package/dist/unpkg/dev/{store-dZViNfMK.js → store-DVS3G92Q.js} +2 -2
  70. package/dist/unpkg/dev/{store-dZViNfMK.js.map → store-DVS3G92Q.js.map} +1 -1
  71. package/dist/unpkg/dev/store.js +1 -1
  72. package/dist/unpkg/dev/types/-private.js +1 -1
  73. package/dist/unpkg/dev/types/schema/fields.js +82 -23
  74. package/dist/unpkg/dev/types/schema/fields.js.map +1 -1
  75. package/dist/unpkg/{dev/-private-B4pCmkq-.js → dev-deprecated/-private-BJ2WIhKs.js} +2 -2
  76. package/dist/unpkg/dev-deprecated/{-private-B4pCmkq-.js.map → -private-BJ2WIhKs.js.map} +1 -1
  77. package/dist/unpkg/dev-deprecated/configure.js +1 -1
  78. package/dist/unpkg/dev-deprecated/graph/-private.js +34 -21
  79. package/dist/unpkg/dev-deprecated/graph/-private.js.map +1 -1
  80. package/dist/unpkg/dev-deprecated/index.js +1 -1
  81. package/dist/unpkg/dev-deprecated/reactive.js +2 -2
  82. package/dist/unpkg/dev-deprecated/{request-oWpijCPQ.js → request-6lzVjHLN.js} +2 -2
  83. package/dist/unpkg/{dev/request-oWpijCPQ.js.map → dev-deprecated/request-6lzVjHLN.js.map} +1 -1
  84. package/dist/unpkg/dev-deprecated/request.js +1 -1
  85. package/dist/unpkg/dev-deprecated/signals/-leaked.js +1 -1
  86. package/dist/unpkg/dev-deprecated/{src-jHpowq3S.js → src-Tvv7X1KB.js} +30 -13
  87. package/dist/unpkg/dev-deprecated/src-Tvv7X1KB.js.map +1 -0
  88. package/dist/unpkg/dev-deprecated/store/-private.js +1 -1
  89. package/dist/unpkg/dev-deprecated/types/-private.js +1 -1
  90. package/dist/unpkg/dev-deprecated/types/schema/fields.js +82 -23
  91. package/dist/unpkg/dev-deprecated/types/schema/fields.js.map +1 -1
  92. package/dist/unpkg/{prod-deprecated/-private-CrUi_3E_.js → prod/-private-Dg07O05r.js} +2 -2
  93. package/dist/unpkg/{prod-deprecated/-private-CrUi_3E_.js.map → prod/-private-Dg07O05r.js.map} +1 -1
  94. package/dist/unpkg/prod/configure.js +1 -1
  95. package/dist/unpkg/prod/graph/-private.js +27 -12
  96. package/dist/unpkg/prod/graph/-private.js.map +1 -1
  97. package/dist/unpkg/prod/index.js +1 -1
  98. package/dist/unpkg/prod/reactive.js +2 -2
  99. package/dist/unpkg/{prod-deprecated/request-Cgw3j6Dx.js → prod/request-edWLn9JK.js} +2 -2
  100. package/dist/unpkg/prod/{request-Cgw3j6Dx.js.map → request-edWLn9JK.js.map} +1 -1
  101. package/dist/unpkg/prod/request.js +1 -1
  102. package/dist/unpkg/prod/signals/-leaked.js +1 -1
  103. package/dist/unpkg/prod/{src-DFmPDGQ6.js → src-BIRx6kC-.js} +33 -12
  104. package/dist/unpkg/prod/src-BIRx6kC-.js.map +1 -0
  105. package/dist/unpkg/prod/store/-private.js +1 -1
  106. package/dist/unpkg/prod/types/-private.js +1 -1
  107. package/dist/unpkg/prod/types/schema/fields.js +82 -23
  108. package/dist/unpkg/prod/types/schema/fields.js.map +1 -1
  109. package/dist/unpkg/{prod/-private-CrUi_3E_.js → prod-deprecated/-private-Dg07O05r.js} +2 -2
  110. package/dist/unpkg/{prod/-private-CrUi_3E_.js.map → prod-deprecated/-private-Dg07O05r.js.map} +1 -1
  111. package/dist/unpkg/prod-deprecated/configure.js +1 -1
  112. package/dist/unpkg/prod-deprecated/graph/-private.js +27 -12
  113. package/dist/unpkg/prod-deprecated/graph/-private.js.map +1 -1
  114. package/dist/unpkg/prod-deprecated/index.js +1 -1
  115. package/dist/unpkg/prod-deprecated/reactive.js +2 -2
  116. package/dist/unpkg/{prod/request-Cgw3j6Dx.js → prod-deprecated/request-edWLn9JK.js} +2 -2
  117. package/dist/unpkg/prod-deprecated/{request-Cgw3j6Dx.js.map → request-edWLn9JK.js.map} +1 -1
  118. package/dist/unpkg/prod-deprecated/request.js +1 -1
  119. package/dist/unpkg/prod-deprecated/signals/-leaked.js +1 -1
  120. package/dist/unpkg/prod-deprecated/{src-BgQLcshl.js → src-0f4an0QR.js} +33 -12
  121. package/dist/unpkg/prod-deprecated/src-0f4an0QR.js.map +1 -0
  122. package/dist/unpkg/prod-deprecated/store/-private.js +1 -1
  123. package/dist/unpkg/prod-deprecated/types/-private.js +1 -1
  124. package/dist/unpkg/prod-deprecated/types/schema/fields.js +82 -23
  125. package/dist/unpkg/prod-deprecated/types/schema/fields.js.map +1 -1
  126. package/package.json +4 -4
  127. package/dist/fields-r1rZJB9d.d.ts.map +0 -1
  128. package/dist/internal-D_WIXC4r.d.ts.map +0 -1
  129. package/dist/src-ccp1WKyt.js.map +0 -1
  130. package/dist/unpkg/dev/src-C4ET4R1n.js.map +0 -1
  131. package/dist/unpkg/dev-deprecated/src-jHpowq3S.js.map +0 -1
  132. package/dist/unpkg/prod/src-DFmPDGQ6.js.map +0 -1
  133. package/dist/unpkg/prod-deprecated/src-BgQLcshl.js.map +0 -1
@@ -1,3 +1,3 @@
1
- import { M as registerSignals, N as setupSignals } from "./-private-B4pCmkq-.js";
1
+ import { M as registerSignals, N as setupSignals } from "./-private-BJ2WIhKs.js";
2
2
 
3
3
  export { registerSignals, setupSignals };
@@ -1,5 +1,6 @@
1
- import { getOrSetGlobal, peekTransient, setTransient } from "../types/-private.js";
2
1
  import { t as getGlobalConfig } from "../runtime-RYvEtg99.js";
2
+ import { getOrSetGlobal, peekTransient, setTransient } from "../types/-private.js";
3
+ import { isRelationshipKind } from "../types/schema/fields.js";
3
4
 
4
5
  // src/graph/-private/coerce-id.ts
5
6
  function coerceId(id) {
@@ -169,20 +170,14 @@ function assertRelationshipData(store, resourceKey, data, meta) {
169
170
  }
170
171
 
171
172
  // src/graph/-private/-edge-definition.ts
172
- const RELATIONSHIP_KINDS = [
173
- "belongsTo",
174
- "hasMany",
175
- "resource",
176
- "collection"
177
- ];
178
173
  function isLegacyField(field) {
179
174
  return field.kind === "belongsTo" || field.kind === "hasMany";
180
175
  }
181
176
  function isRelationshipField(field) {
182
- return RELATIONSHIP_KINDS.includes(field.kind);
177
+ return isRelationshipKind(field.kind);
183
178
  }
184
179
  function temporaryConvertToLegacy(field) {
185
- return {
180
+ const legacy = {
186
181
  kind: field.kind === "resource" ? "belongsTo" : "hasMany",
187
182
  name: field.name,
188
183
  type: field.type,
@@ -192,6 +187,8 @@ function temporaryConvertToLegacy(field) {
192
187
  resetOnRemoteUpdate: false
193
188
  }, field.options)
194
189
  };
190
+ if (field.sourceKey) legacy.sourceKey = field.sourceKey;
191
+ return legacy;
195
192
  }
196
193
  /**
197
194
  *
@@ -276,10 +273,12 @@ function syncMeta(definition, inverseDefinition) {
276
273
  inverseDefinition.resetOnRemoteUpdate = resetOnRemoteUpdate;
277
274
  }
278
275
  function upgradeMeta(meta) {
276
+ const fieldKind = meta.kind;
279
277
  if (!isLegacyField(meta)) meta = temporaryConvertToLegacy(meta);
280
278
  const niceMeta = {};
281
279
  const options = meta.options;
282
280
  niceMeta.kind = meta.kind;
281
+ niceMeta.fieldKind = fieldKind;
283
282
  niceMeta.key = meta.sourceKey ?? meta.name;
284
283
  niceMeta.name = meta.name;
285
284
  niceMeta.type = meta.type;
@@ -368,7 +367,7 @@ function upgradeDefinition(graph, key, propertyName, isImplicit = false) {
368
367
  })(storeWrapper.schema.hasResource({ type: inverseType }));
369
368
  inverseDefinition = null;
370
369
  } else {
371
- inverseKey = inverseForRelationship(getStore(storeWrapper), key, meta.name);
370
+ inverseKey = inverseNameFor(meta);
372
371
  if (!inverseKey && definition.isPolymorphic && definition.inverseKey) inverseDefinition = {
373
372
  kind: "belongsTo",
374
373
  key: definition.inverseKey,
@@ -392,10 +391,13 @@ function upgradeDefinition(graph, key, propertyName, isImplicit = false) {
392
391
  ((test) => {
393
392
  if (!test) throw new Error(`Expected ${inverseKey} to be a relationship`);
394
393
  })(isRelationshipField(metaFromInverse));
394
+ ((test) => {
395
+ if (!test) throw new Error(`'${type}.${propertyName}' is a '${meta.kind}' field, but its inverse '${inverseType}.${inverseKey}' is a '${metaFromInverse.kind}' field. A 'resource' or 'collection' field can only have a 'resource' or 'collection' field as its inverse, and a 'belongsTo' or 'hasMany' field can only have a 'belongsTo' or 'hasMany' field as its inverse.`);
396
+ })(isLegacyField(meta) === isLegacyField(metaFromInverse));
395
397
  inverseDefinition = upgradeMeta(metaFromInverse);
396
- inverseKey = inverseDefinition.key;
397
398
  }
398
399
  }
400
+ if (inverseDefinition) inverseKey = inverseDefinition.key;
399
401
  if (!inverseDefinition) {
400
402
  inverseKey = implicitKeyFor(type, propertyName);
401
403
  inverseDefinition = {
@@ -475,16 +477,20 @@ function upgradeDefinition(graph, key, propertyName, isImplicit = false) {
475
477
  expandingSet(cache, inverseType, inverseKey, info);
476
478
  return info;
477
479
  }
478
- function inverseForRelationship(store, resourceKey, key) {
479
- const definition = store.schema.fields(resourceKey).get(key);
480
- if (!definition) return null;
481
- ((test) => {
482
- if (!test) throw new Error(`Expected ${key} to be a relationship`);
483
- })(isRelationshipField(definition));
480
+ /**
481
+ * The `name` of the field on the related type that `field` declares as its inverse,
482
+ * or `null` when it declares no inverse.
483
+ *
484
+ * `options.inverse` always names the inverse by its `name`, never by its `sourceKey`.
485
+ * `resource` and `collection` fields may omit it, in which case they are unidirectional;
486
+ * the legacy kinds must state it explicitly.
487
+ */
488
+ function inverseNameFor(field) {
489
+ const { options } = isLegacyField(field) ? field : temporaryConvertToLegacy(field);
484
490
  ((test) => {
485
491
  if (!test) throw new Error(`Expected the relationship defintion to specify the inverse type or null.`);
486
- })(definition.options?.inverse === null || typeof definition.options?.inverse === "string" && definition.options.inverse.length > 0);
487
- return definition.options.inverse;
492
+ })(options?.inverse === null || typeof options?.inverse === "string" && options.inverse.length > 0);
493
+ return options.inverse;
488
494
  }
489
495
 
490
496
  // src/graph/-private/debug/assert-polymorphic-type.ts
@@ -555,6 +561,7 @@ let assertInheritedSchema;
555
561
  name: definition.inverseName,
556
562
  type: definition.inverseType,
557
563
  kind: definition.inverseKind,
564
+ fieldKind: definition.inverseKind,
558
565
  isAsync: definition.inverseIsAsync,
559
566
  isPolymorphic: true,
560
567
  isLinksMode: definition.isLinksMode,
@@ -732,6 +739,7 @@ function addToInverse(graph, resourceKey, key, value, isRemote) {
732
739
  graph._addToTransaction(relationship);
733
740
  if (relationship.remoteState !== null) removeFromInverse(graph, relationship.remoteState, relationship.definition.inverseKey, resourceKey, isRemote);
734
741
  relationship.remoteState = value;
742
+ relationship.state.hasReceivedRemoteData = true;
735
743
  notifyChange(graph, relationship);
736
744
  }
737
745
  if (relationship.localState !== value) {
@@ -745,8 +753,10 @@ function addToInverse(graph, resourceKey, key, value, isRemote) {
745
753
  graph._addToTransaction(relationship);
746
754
  relationship.remoteState.push(value);
747
755
  relationship.remoteMembers.add(value);
748
- if (relationship.additions?.has(value)) relationship.additions.delete(value);
749
- else {
756
+ if (relationship.additions?.has(value)) {
757
+ relationship.additions.delete(value);
758
+ flushCanonical(graph, relationship, "remote");
759
+ } else {
750
760
  relationship.isDirty = true;
751
761
  relationship.state.hasReceivedData = true;
752
762
  flushCanonical(graph, relationship);
@@ -774,6 +784,7 @@ function removeFromInverse(graph, resourceKey, key, value, isRemote) {
774
784
  if (isRemote) {
775
785
  graph._addToTransaction(relationship);
776
786
  relationship.remoteState = null;
787
+ relationship.state.hasReceivedRemoteData = true;
777
788
  notifyChange(graph, relationship);
778
789
  }
779
790
  if (relationship.localState === value) {
@@ -783,7 +794,9 @@ function removeFromInverse(graph, resourceKey, key, value, isRemote) {
783
794
  } else if (isHasMany(relationship)) {
784
795
  if (isRemote) {
785
796
  graph._addToTransaction(relationship);
797
+ const wasMember = relationship.remoteMembers.has(value);
786
798
  if (_removeRemote(relationship, value)) notifyChange(graph, relationship);
799
+ else if (wasMember) notifyChange(graph, relationship, "remote");
787
800
  } else if (_removeLocal(relationship, value)) notifyChange(graph, relationship, "local");
788
801
  } else if (isRemote) {
789
802
  relationship.remoteMembers.delete(value);