@datocms/cma-client 5.4.4 → 5.4.6

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.
@@ -36,8 +36,8 @@ function isRichTextFieldValueInRequest(value) {
36
36
  // String ID - referencing existing block
37
37
  if ((0, single_block_1.isItemId)(block))
38
38
  return true;
39
- // Object (either with or without ID for updates/creation)
40
- return (0, single_block_1.isItemWithOptionalIdAndMeta)(block);
39
+ // Object (new, updated, or id-only update — with or without `relationships`)
40
+ return (0, single_block_1.isBlockObjectInRequest)(block);
41
41
  });
42
42
  }
43
43
  exports.isRichTextFieldValueInRequest = isRichTextFieldValueInRequest;
@@ -1 +1 @@
1
- {"version":3,"file":"rich_text.js","sourceRoot":"","sources":["../../../src/fieldTypes/rich_text.ts"],"names":[],"mappings":";;;AAAA,wCAA4C;AAE5C,8EAG4C;AAE5C,iDAMwB;AA2ExB;;;;GAIG;AAEH;;;GAGG;AACH,SAAgB,oBAAoB,CAClC,KAAc;IAEd,OAAO,CACL,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC;QACpB,KAAK,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,OAAO,KAAK,KAAK,QAAQ,IAAI,IAAA,cAAS,EAAC,KAAK,CAAC,CAAC,CACtE,CAAC;AACJ,CAAC;AAPD,oDAOC;AAED,SAAgB,6BAA6B,CAC3C,KAAc;IAEd,OAAO,CACL,IAAA,6CAAqB,EAAC,KAAK,CAAC;QAC5B,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,oBAAoB,CAAC,CACjD,CAAC;AACJ,CAAC;AAPD,sEAOC;AAED;;;GAGG;AACH,SAAgB,6BAA6B,CAE3C,KAAc;IACd,IAAI,KAAK,KAAK,IAAI;QAAE,OAAO,IAAI,CAAC;IAEhC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC;QAAE,OAAO,KAAK,CAAC;IAExC,OAAO,KAAK,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,EAAE;QAC3B,yCAAyC;QACzC,IAAI,IAAA,uBAAQ,EAAC,KAAK,CAAC;YAAE,OAAO,IAAI,CAAC;QAEjC,0DAA0D;QAC1D,OAAO,IAAA,0CAA2B,EAAC,KAAK,CAAC,CAAC;IAC5C,CAAC,CAAC,CAAC;AACL,CAAC;AAdD,sEAcC;AAED,SAAgB,sCAAsC,CAGpD,KAAc;IAEd,OAAO,CACL,IAAA,6CAAqB,EAAC,KAAK,CAAC;QAC5B,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,6BAA6B,CAAC,CAC1D,CAAC;AACJ,CAAC;AATD,wFASC;AAED;;;GAGG;AACH,SAAgB,oCAAoC,CAElD,KAAc;IACd,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC;QAAE,OAAO,KAAK,CAAC;IAExC,OAAO,KAAK,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,EAAE;QAC3B,uFAAuF;QACvF,OAAO,IAAA,qCAAsB,EAAC,KAAK,CAAC,CAAC;IACvC,CAAC,CAAC,CAAC;AACL,CAAC;AATD,oFASC;AAED,SAAgB,6CAA6C,CAG3D,KAAc;IAEd,OAAO,CACL,IAAA,6CAAqB,EAAC,KAAK,CAAC;QAC5B,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,oCAAoC,CAAC,CACjE,CAAC;AACJ,CAAC;AATD,sGASC"}
1
+ {"version":3,"file":"rich_text.js","sourceRoot":"","sources":["../../../src/fieldTypes/rich_text.ts"],"names":[],"mappings":";;;AAAA,wCAA4C;AAE5C,8EAG4C;AAE5C,iDAMwB;AA2ExB;;;;GAIG;AAEH;;;GAGG;AACH,SAAgB,oBAAoB,CAClC,KAAc;IAEd,OAAO,CACL,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC;QACpB,KAAK,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,OAAO,KAAK,KAAK,QAAQ,IAAI,IAAA,cAAS,EAAC,KAAK,CAAC,CAAC,CACtE,CAAC;AACJ,CAAC;AAPD,oDAOC;AAED,SAAgB,6BAA6B,CAC3C,KAAc;IAEd,OAAO,CACL,IAAA,6CAAqB,EAAC,KAAK,CAAC;QAC5B,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,oBAAoB,CAAC,CACjD,CAAC;AACJ,CAAC;AAPD,sEAOC;AAED;;;GAGG;AACH,SAAgB,6BAA6B,CAE3C,KAAc;IACd,IAAI,KAAK,KAAK,IAAI;QAAE,OAAO,IAAI,CAAC;IAEhC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC;QAAE,OAAO,KAAK,CAAC;IAExC,OAAO,KAAK,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,EAAE;QAC3B,yCAAyC;QACzC,IAAI,IAAA,uBAAQ,EAAC,KAAK,CAAC;YAAE,OAAO,IAAI,CAAC;QAEjC,6EAA6E;QAC7E,OAAO,IAAA,qCAAsB,EAAC,KAAK,CAAC,CAAC;IACvC,CAAC,CAAC,CAAC;AACL,CAAC;AAdD,sEAcC;AAED,SAAgB,sCAAsC,CAGpD,KAAc;IAEd,OAAO,CACL,IAAA,6CAAqB,EAAC,KAAK,CAAC;QAC5B,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,6BAA6B,CAAC,CAC1D,CAAC;AACJ,CAAC;AATD,wFASC;AAED;;;GAGG;AACH,SAAgB,oCAAoC,CAElD,KAAc;IACd,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC;QAAE,OAAO,KAAK,CAAC;IAExC,OAAO,KAAK,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,EAAE;QAC3B,uFAAuF;QACvF,OAAO,IAAA,qCAAsB,EAAC,KAAK,CAAC,CAAC;IACvC,CAAC,CAAC,CAAC;AACL,CAAC;AATD,oFASC;AAED,SAAgB,6CAA6C,CAG3D,KAAc;IAEd,OAAO,CACL,IAAA,6CAAqB,EAAC,KAAK,CAAC;QAC5B,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,oCAAoC,CAAC,CACjE,CAAC;AACJ,CAAC;AATD,sGASC"}
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.isLocalizedSingleBlockFieldValueInNestedResponse = exports.isSingleBlockFieldValueInNestedResponse = exports.isLocalizedSingleBlockFieldValueInRequest = exports.isSingleBlockFieldValueInRequest = exports.isLocalizedSingleBlockFieldValue = exports.isSingleBlockFieldValue = exports.isItemWithOptionalMeta = exports.isItemWithOptionalIdAndMeta = exports.isItemId = void 0;
3
+ exports.isLocalizedSingleBlockFieldValueInNestedResponse = exports.isSingleBlockFieldValueInNestedResponse = exports.isLocalizedSingleBlockFieldValueInRequest = exports.isSingleBlockFieldValueInRequest = exports.isBlockObjectInRequest = exports.isLocalizedSingleBlockFieldValue = exports.isSingleBlockFieldValue = exports.isItemWithOptionalMeta = exports.isItemWithOptionalIdAndMeta = exports.isItemId = void 0;
4
4
  const id_1 = require("../utilities/id");
5
5
  const normalizedFieldValues_1 = require("../utilities/normalizedFieldValues");
6
6
  /**
@@ -55,6 +55,29 @@ function isLocalizedSingleBlockFieldValue(value) {
55
55
  Object.values(value).every(isSingleBlockFieldValue));
56
56
  }
57
57
  exports.isLocalizedSingleBlockFieldValue = isLocalizedSingleBlockFieldValue;
58
+ /**
59
+ * Shape check for a block object on the *request* side. Accepts every object
60
+ * form the CMA allows inside a request payload:
61
+ *
62
+ * 1. New block (no id, full body):
63
+ * { type: 'item', attributes, relationships: { item_type } }
64
+ * 2. Updated block, full body:
65
+ * { type: 'item', id, attributes, relationships: { item_type } }
66
+ * 3. Updated block, id-only (patch some attributes of an existing block):
67
+ * { type: 'item', id, attributes } ← no relationships
68
+ *
69
+ * Case 3 is what `buildBlockRecord` produces when the caller omits
70
+ * `item_type` — the server derives the model from the existing block's id,
71
+ * so re-specifying it in `relationships` is redundant.
72
+ */
73
+ function isBlockObjectInRequest(block) {
74
+ return (typeof block === 'object' &&
75
+ block !== null &&
76
+ 'type' in block &&
77
+ block.type === 'item' &&
78
+ 'attributes' in block);
79
+ }
80
+ exports.isBlockObjectInRequest = isBlockObjectInRequest;
58
81
  /**
59
82
  * Type guard for Single Block field values in API request format.
60
83
  * Allows block as string ID, full object with ID, or object without ID.
@@ -65,8 +88,9 @@ function isSingleBlockFieldValueInRequest(value) {
65
88
  // String ID - referencing existing block
66
89
  if (isItemId(value))
67
90
  return true;
68
- // Object (either with or without ID for updates/creation)
69
- return isItemWithOptionalIdAndMeta(value);
91
+ // Object (either with or without ID for updates/creation, including
92
+ // id-only updates without `relationships`)
93
+ return isBlockObjectInRequest(value);
70
94
  }
71
95
  exports.isSingleBlockFieldValueInRequest = isSingleBlockFieldValueInRequest;
72
96
  function isLocalizedSingleBlockFieldValueInRequest(value) {
@@ -1 +1 @@
1
- {"version":3,"file":"single_block.js","sourceRoot":"","sources":["../../../src/fieldTypes/single_block.ts"],"names":[],"mappings":";;;AACA,wCAA4C;AAK5C,8EAG4C;AAyH5C;;;;;GAKG;AAEH;;GAEG;AACH,SAAgB,QAAQ,CAAC,KAAc;IACrC,OAAO,OAAO,KAAK,KAAK,QAAQ,CAAC;AACnC,CAAC;AAFD,4BAEC;AAMD;;GAEG;AACH,SAAgB,2BAA2B,CAEzC,KAAc;IACd,OAAO,CACL,OAAO,KAAK,KAAK,QAAQ;QACzB,KAAK,KAAK,IAAI;QACd,MAAM,IAAI,KAAK;QACf,KAAK,CAAC,IAAI,KAAK,MAAM;QACrB,YAAY,IAAI,KAAK;QACrB,eAAe,IAAI,KAAK,CACzB,CAAC;AACJ,CAAC;AAXD,kEAWC;AAMD;;GAEG;AACH,SAAgB,sBAAsB,CAEpC,KAAc;IACd,OAAO,CACL,2BAA2B,CAAC,KAAK,CAAC;QAClC,IAAI,IAAI,KAAK;QACb,OAAO,KAAK,CAAC,EAAE,KAAK,QAAQ,CAC7B,CAAC;AACJ,CAAC;AARD,wDAQC;AAED;;;;GAIG;AAEH;;;GAGG;AACH,SAAgB,uBAAuB,CACrC,KAAc;IAEd,OAAO,CAAC,OAAO,KAAK,KAAK,QAAQ,IAAI,IAAA,cAAS,EAAC,KAAK,CAAC,CAAC,IAAI,KAAK,KAAK,IAAI,CAAC;AAC3E,CAAC;AAJD,0DAIC;AAED,SAAgB,gCAAgC,CAC9C,KAAc;IAEd,OAAO,CACL,IAAA,6CAAqB,EAAC,KAAK,CAAC;QAC5B,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,uBAAuB,CAAC,CACpD,CAAC;AACJ,CAAC;AAPD,4EAOC;AAED;;;GAGG;AACH,SAAgB,gCAAgC,CAE9C,KAAc;IACd,IAAI,KAAK,KAAK,IAAI;QAAE,OAAO,IAAI,CAAC;IAEhC,yCAAyC;IACzC,IAAI,QAAQ,CAAC,KAAK,CAAC;QAAE,OAAO,IAAI,CAAC;IAEjC,0DAA0D;IAC1D,OAAO,2BAA2B,CAAC,KAAK,CAAC,CAAC;AAC5C,CAAC;AAVD,4EAUC;AAED,SAAgB,yCAAyC,CAGvD,KAAc;IAEd,OAAO,CACL,IAAA,6CAAqB,EAAC,KAAK,CAAC;QAC5B,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,gCAAgC,CAAC,CAC7D,CAAC;AACJ,CAAC;AATD,8FASC;AAED;;;GAGG;AACH,SAAgB,uCAAuC,CAErD,KAAc;IACd,IAAI,KAAK,KAAK,IAAI;QAAE,OAAO,IAAI,CAAC;IAEhC,uFAAuF;IACvF,OAAO,sBAAsB,CAAC,KAAK,CAAC,CAAC;AACvC,CAAC;AAPD,0FAOC;AAED,SAAgB,gDAAgD,CAG9D,KAAc;IAEd,OAAO,CACL,IAAA,6CAAqB,EAAC,KAAK,CAAC;QAC5B,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,uCAAuC,CAAC,CACpE,CAAC;AACJ,CAAC;AATD,4GASC"}
1
+ {"version":3,"file":"single_block.js","sourceRoot":"","sources":["../../../src/fieldTypes/single_block.ts"],"names":[],"mappings":";;;AACA,wCAA4C;AAK5C,8EAG4C;AAyH5C;;;;;GAKG;AAEH;;GAEG;AACH,SAAgB,QAAQ,CAAC,KAAc;IACrC,OAAO,OAAO,KAAK,KAAK,QAAQ,CAAC;AACnC,CAAC;AAFD,4BAEC;AAMD;;GAEG;AACH,SAAgB,2BAA2B,CAEzC,KAAc;IACd,OAAO,CACL,OAAO,KAAK,KAAK,QAAQ;QACzB,KAAK,KAAK,IAAI;QACd,MAAM,IAAI,KAAK;QACf,KAAK,CAAC,IAAI,KAAK,MAAM;QACrB,YAAY,IAAI,KAAK;QACrB,eAAe,IAAI,KAAK,CACzB,CAAC;AACJ,CAAC;AAXD,kEAWC;AAMD;;GAEG;AACH,SAAgB,sBAAsB,CAEpC,KAAc;IACd,OAAO,CACL,2BAA2B,CAAC,KAAK,CAAC;QAClC,IAAI,IAAI,KAAK;QACb,OAAO,KAAK,CAAC,EAAE,KAAK,QAAQ,CAC7B,CAAC;AACJ,CAAC;AARD,wDAQC;AAED;;;;GAIG;AAEH;;;GAGG;AACH,SAAgB,uBAAuB,CACrC,KAAc;IAEd,OAAO,CAAC,OAAO,KAAK,KAAK,QAAQ,IAAI,IAAA,cAAS,EAAC,KAAK,CAAC,CAAC,IAAI,KAAK,KAAK,IAAI,CAAC;AAC3E,CAAC;AAJD,0DAIC;AAED,SAAgB,gCAAgC,CAC9C,KAAc;IAEd,OAAO,CACL,IAAA,6CAAqB,EAAC,KAAK,CAAC;QAC5B,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,uBAAuB,CAAC,CACpD,CAAC;AACJ,CAAC;AAPD,4EAOC;AAED;;;;;;;;;;;;;;GAcG;AACH,SAAgB,sBAAsB,CAAC,KAAc;IAInD,OAAO,CACL,OAAO,KAAK,KAAK,QAAQ;QACzB,KAAK,KAAK,IAAI;QACd,MAAM,IAAI,KAAK;QACf,KAAK,CAAC,IAAI,KAAK,MAAM;QACrB,YAAY,IAAI,KAAK,CACtB,CAAC;AACJ,CAAC;AAXD,wDAWC;AAED;;;GAGG;AACH,SAAgB,gCAAgC,CAE9C,KAAc;IACd,IAAI,KAAK,KAAK,IAAI;QAAE,OAAO,IAAI,CAAC;IAEhC,yCAAyC;IACzC,IAAI,QAAQ,CAAC,KAAK,CAAC;QAAE,OAAO,IAAI,CAAC;IAEjC,oEAAoE;IACpE,2CAA2C;IAC3C,OAAO,sBAAsB,CAAC,KAAK,CAAC,CAAC;AACvC,CAAC;AAXD,4EAWC;AAED,SAAgB,yCAAyC,CAGvD,KAAc;IAEd,OAAO,CACL,IAAA,6CAAqB,EAAC,KAAK,CAAC;QAC5B,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,gCAAgC,CAAC,CAC7D,CAAC;AACJ,CAAC;AATD,8FASC;AAED;;;GAGG;AACH,SAAgB,uCAAuC,CAErD,KAAc;IACd,IAAI,KAAK,KAAK,IAAI;QAAE,OAAO,IAAI,CAAC;IAEhC,uFAAuF;IACvF,OAAO,sBAAsB,CAAC,KAAK,CAAC,CAAC;AACvC,CAAC;AAPD,0FAOC;AAED,SAAgB,gDAAgD,CAG9D,KAAc;IAEd,OAAO,CACL,IAAA,6CAAqB,EAAC,KAAK,CAAC;QAC5B,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,uCAAuC,CAAC,CACpE,CAAC;AACJ,CAAC;AATD,4GASC"}
@@ -56,8 +56,8 @@ function isStructuredTextFieldValueInRequest(value) {
56
56
  // String ID
57
57
  if ((0, single_block_1.isItemId)(item))
58
58
  return true;
59
- // Object (either with or without ID)
60
- return (0, single_block_1.isItemWithOptionalIdAndMeta)(item);
59
+ // Object (new, updated, or id-only update — with or without `relationships`)
60
+ return (0, single_block_1.isBlockObjectInRequest)(item);
61
61
  });
62
62
  }
63
63
  exports.isStructuredTextFieldValueInRequest = isStructuredTextFieldValueInRequest;
@@ -1 +1 @@
1
- {"version":3,"file":"structured_text.js","sourceRoot":"","sources":["../../../src/fieldTypes/structured_text.ts"],"names":[],"mappings":";;;AAAA,iFASuC;AACvC,wCAA4C;AAE5C,8EAG4C;AAE5C,iDAMwB;AA4HxB;;;GAGG;AACH,SAAS,qBAAqB,CAC5B,IAAgB,EAChB,QAAsD;IAEtD,OAAO,IAAA,yCAAS,EAAC,IAAI,EAAE,CAAC,WAAW,EAAE,EAAE;QACrC,wEAAwE;QACxE,IAAI,IAAA,uCAAO,EAAC,WAAW,CAAC,IAAI,IAAA,6CAAa,EAAC,WAAW,CAAC,EAAE;YACtD,OAAO,QAAQ,CAAC,WAAW,CAAC,CAAC;SAC9B;QACD,qDAAqD;QACrD,OAAO,IAAI,CAAC;IACd,CAAC,CAAC,CAAC;AACL,CAAC;AAED;;;GAGG;AACH,SAAgB,0BAA0B,CACxC,KAAc;IAEd,IAAI,KAAK,KAAK,IAAI;QAAE,OAAO,IAAI,CAAC;IAEhC,IAAI,CAAC,IAAA,0CAAU,EAAmB,KAAK,CAAC,EAAE;QACxC,OAAO,KAAK,CAAC;KACd;IAED,8DAA8D;IAC9D,OAAO,qBAAqB,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC,IAAI,EAAE,EAAE;QACpD,OAAO,OAAO,IAAI,CAAC,IAAI,KAAK,QAAQ,IAAI,IAAA,cAAS,EAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC/D,CAAC,CAAC,CAAC;AACL,CAAC;AAbD,gEAaC;AAED,SAAgB,mCAAmC,CACjD,KAAc;IAEd,OAAO,CACL,IAAA,6CAAqB,EAAC,KAAK,CAAC;QAC5B,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,0BAA0B,CAAC,CACvD,CAAC;AACJ,CAAC;AAPD,kFAOC;AAED;;;GAGG;AACH,SAAgB,mCAAmC,CAIjD,KAAc;IAKd,IAAI,KAAK,KAAK,IAAI;QAAE,OAAO,IAAI,CAAC;IAEhC,IAAI,CAAC,IAAA,0CAAU,EAAU,KAAK,CAAC,EAAE;QAC/B,OAAO,KAAK,CAAC;KACd;IAED,yEAAyE;IACzE,OAAO,qBAAqB,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC,IAAI,EAAE,EAAE;QACpD,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC;QAEvB,YAAY;QACZ,IAAI,IAAA,uBAAQ,EAAC,IAAI,CAAC;YAAE,OAAO,IAAI,CAAC;QAEhC,qCAAqC;QACrC,OAAO,IAAA,0CAA2B,EAAC,IAAI,CAAC,CAAC;IAC3C,CAAC,CAAC,CAAC;AACL,CAAC;AAzBD,kFAyBC;AAED,SAAgB,4CAA4C,CAG1D,KAAc;IAEd,OAAO,CACL,IAAA,6CAAqB,EAAC,KAAK,CAAC;QAC5B,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,mCAAmC,CAAC,CAChE,CAAC;AACJ,CAAC;AATD,oGASC;AAED;;;GAGG;AACH,SAAgB,0CAA0C,CAExD,KAAc;IACd,IAAI,KAAK,KAAK,IAAI;QAAE,OAAO,IAAI,CAAC;IAEhC,IAAI,CAAC,IAAA,0CAAU,EAAU,KAAK,CAAC,EAAE;QAC/B,OAAO,KAAK,CAAC;KACd;IAED,gEAAgE;IAChE,OAAO,qBAAqB,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC,IAAI,EAAE,EAAE;QACpD,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC;QAEvB,2EAA2E;QAC3E,OAAO,IAAA,qCAAsB,EAAC,IAAI,CAAC,CAAC;IACtC,CAAC,CAAC,CAAC;AACL,CAAC;AAhBD,gGAgBC;AAED,SAAgB,mDAAmD,CAGjE,KAAc;IAEd,OAAO,CACL,IAAA,6CAAqB,EAAC,KAAK,CAAC;QAC5B,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,0CAA0C,CAAC,CACvE,CAAC;AACJ,CAAC;AATD,kHASC"}
1
+ {"version":3,"file":"structured_text.js","sourceRoot":"","sources":["../../../src/fieldTypes/structured_text.ts"],"names":[],"mappings":"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"}
@@ -90,7 +90,7 @@ class Client {
90
90
  return this.config.baseUrl || Client.defaultBaseUrl;
91
91
  }
92
92
  request(options) {
93
- return (0, rest_client_utils_1.request)(Object.assign(Object.assign(Object.assign({}, this.config), options), { logFn: this.config.logFn || console.log, userAgent: '@datocms/cma-client v5.4.4', baseUrl: this.baseUrl, preCallStack: new Error().stack, extraHeaders: Object.assign(Object.assign(Object.assign({}, (this.config.extraHeaders || {})), (this.config.environment
93
+ return (0, rest_client_utils_1.request)(Object.assign(Object.assign(Object.assign({}, this.config), options), { logFn: this.config.logFn || console.log, userAgent: '@datocms/cma-client v5.4.6', baseUrl: this.baseUrl, preCallStack: new Error().stack, extraHeaders: Object.assign(Object.assign(Object.assign({}, (this.config.extraHeaders || {})), (this.config.environment
94
94
  ? { 'X-Environment': this.config.environment }
95
95
  : {})), { 'X-API-Version': '3' }), fetchJobResult: (jobId) => {
96
96
  return this.jobResultsFetcher
@@ -27,6 +27,7 @@ exports.buildBlockRecord = void 0;
27
27
  const Utils = __importStar(require("@datocms/rest-client-utils"));
28
28
  const resources_1 = require("../generated/resources");
29
29
  function buildBlockRecord(body) {
30
+ var _a, _b, _c, _d, _e, _f;
30
31
  const data = Utils.serializeRequestBody(body, {
31
32
  type: resources_1.Item.TYPE,
32
33
  attributes: '*',
@@ -36,7 +37,15 @@ function buildBlockRecord(body) {
36
37
  // `__itemTypeId` so locally-built blocks support the same TS narrowing
37
38
  // pattern as blocks read from API responses. The field is TS-only and is
38
39
  // stripped again by the serializer when the outer request is sent.
39
- return Object.assign(Object.assign({}, data), { __itemTypeId: data.relationships.item_type.data.id });
40
+ //
41
+ // `item_type` is optional on `UpdateBlockRecordSchema` (id-only updates), so
42
+ // the ID may be absent here. Accept any source the caller provided and
43
+ // leave `__itemTypeId` unset when none is available — the property is
44
+ // declared optional, so consumers already handle the `undefined` case.
45
+ const itemTypeId = (_c = (_a = body.__itemTypeId) !== null && _a !== void 0 ? _a : (_b = body.item_type) === null || _b === void 0 ? void 0 : _b.id) !== null && _c !== void 0 ? _c : (_f = (_e = (_d = data.relationships) === null || _d === void 0 ? void 0 : _d.item_type) === null || _e === void 0 ? void 0 : _e.data) === null || _f === void 0 ? void 0 : _f.id;
46
+ if (itemTypeId === undefined)
47
+ return data;
48
+ return Object.assign(Object.assign({}, data), { __itemTypeId: itemTypeId });
40
49
  }
41
50
  exports.buildBlockRecord = buildBlockRecord;
42
51
  //# sourceMappingURL=buildBlockRecord.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"buildBlockRecord.js","sourceRoot":"","sources":["../../../src/utilities/buildBlockRecord.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,kEAAoD;AAGpD,sDAA8C;AA6B9C,SAAgB,gBAAgB,CAG9B,IAEuC;IAEvC,MAAM,IAAI,GAAG,KAAK,CAAC,oBAAoB,CAEpC,IAAI,EAAE;QACP,IAAI,EAAE,gBAAI,CAAC,IAAI;QACf,UAAU,EAAE,GAAG;QACf,aAAa,EAAE,CAAC,WAAW,CAAC;KAC7B,CAAC,CAAC,IAAI,CAAC;IAER,qEAAqE;IACrE,uEAAuE;IACvE,yEAAyE;IACzE,mEAAmE;IACnE,OAAO,gCACF,IAAI,KACP,YAAY,EAAE,IAAI,CAAC,aAAa,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,GAClB,CAAC;AACrC,CAAC;AAvBD,4CAuBC"}
1
+ {"version":3,"file":"buildBlockRecord.js","sourceRoot":"","sources":["../../../src/utilities/buildBlockRecord.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,kEAAoD;AAGpD,sDAA8C;AA6B9C,SAAgB,gBAAgB,CAG9B,IAEuC;;IAEvC,MAAM,IAAI,GAAG,KAAK,CAAC,oBAAoB,CAEpC,IAAI,EAAE;QACP,IAAI,EAAE,gBAAI,CAAC,IAAI;QACf,UAAU,EAAE,GAAG;QACf,aAAa,EAAE,CAAC,WAAW,CAAC;KAC7B,CAAC,CAAC,IAAI,CAAC;IAER,qEAAqE;IACrE,uEAAuE;IACvE,yEAAyE;IACzE,mEAAmE;IACnE,EAAE;IACF,6EAA6E;IAC7E,uEAAuE;IACvE,sEAAsE;IACtE,uEAAuE;IACvE,MAAM,UAAU,GACd,MAAA,MAAA,IAAI,CAAC,YAAY,mCACjB,MAAA,IAAI,CAAC,SAAS,0CAAE,EAAE,mCAClB,MAAA,MAAA,MAAA,IAAI,CAAC,aAAa,0CAAE,SAAS,0CAAE,IAAI,0CAAE,EAAE,CAAC;IAE1C,IAAI,UAAU,KAAK,SAAS;QAAE,OAAO,IAAI,CAAC;IAE1C,OAAO,gCACF,IAAI,KACP,YAAY,EAAE,UAAU,GACQ,CAAC;AACrC,CAAC;AAnCD,4CAmCC"}
@@ -1,6 +1,6 @@
1
1
  import { isValidId } from '../utilities/id';
2
2
  import { isLocalizedFieldValue, } from '../utilities/normalizedFieldValues';
3
- import { isItemId, isItemWithOptionalIdAndMeta, isItemWithOptionalMeta, } from './single_block';
3
+ import { isBlockObjectInRequest, isItemId, isItemWithOptionalMeta, } from './single_block';
4
4
  /**
5
5
  * =============================================================================
6
6
  * TYPE GUARDS - Runtime validation functions
@@ -31,8 +31,8 @@ export function isRichTextFieldValueInRequest(value) {
31
31
  // String ID - referencing existing block
32
32
  if (isItemId(block))
33
33
  return true;
34
- // Object (either with or without ID for updates/creation)
35
- return isItemWithOptionalIdAndMeta(block);
34
+ // Object (new, updated, or id-only update — with or without `relationships`)
35
+ return isBlockObjectInRequest(block);
36
36
  });
37
37
  }
38
38
  export function isLocalizedRichTextFieldValueInRequest(value) {
@@ -1 +1 @@
1
- {"version":3,"file":"rich_text.js","sourceRoot":"","sources":["../../../src/fieldTypes/rich_text.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAE5C,OAAO,EAEL,qBAAqB,GACtB,MAAM,oCAAoC,CAAC;AAE5C,OAAO,EAGL,QAAQ,EACR,2BAA2B,EAC3B,sBAAsB,GACvB,MAAM,gBAAgB,CAAC;AA2ExB;;;;GAIG;AAEH;;;GAGG;AACH,MAAM,UAAU,oBAAoB,CAClC,KAAc;IAEd,OAAO,CACL,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC;QACpB,KAAK,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,OAAO,KAAK,KAAK,QAAQ,IAAI,SAAS,CAAC,KAAK,CAAC,CAAC,CACtE,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,6BAA6B,CAC3C,KAAc;IAEd,OAAO,CACL,qBAAqB,CAAC,KAAK,CAAC;QAC5B,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,oBAAoB,CAAC,CACjD,CAAC;AACJ,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,6BAA6B,CAE3C,KAAc;IACd,IAAI,KAAK,KAAK,IAAI;QAAE,OAAO,IAAI,CAAC;IAEhC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC;QAAE,OAAO,KAAK,CAAC;IAExC,OAAO,KAAK,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,EAAE;QAC3B,yCAAyC;QACzC,IAAI,QAAQ,CAAC,KAAK,CAAC;YAAE,OAAO,IAAI,CAAC;QAEjC,0DAA0D;QAC1D,OAAO,2BAA2B,CAAC,KAAK,CAAC,CAAC;IAC5C,CAAC,CAAC,CAAC;AACL,CAAC;AAED,MAAM,UAAU,sCAAsC,CAGpD,KAAc;IAEd,OAAO,CACL,qBAAqB,CAAC,KAAK,CAAC;QAC5B,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,6BAA6B,CAAC,CAC1D,CAAC;AACJ,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,oCAAoC,CAElD,KAAc;IACd,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC;QAAE,OAAO,KAAK,CAAC;IAExC,OAAO,KAAK,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,EAAE;QAC3B,uFAAuF;QACvF,OAAO,sBAAsB,CAAC,KAAK,CAAC,CAAC;IACvC,CAAC,CAAC,CAAC;AACL,CAAC;AAED,MAAM,UAAU,6CAA6C,CAG3D,KAAc;IAEd,OAAO,CACL,qBAAqB,CAAC,KAAK,CAAC;QAC5B,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,oCAAoC,CAAC,CACjE,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"rich_text.js","sourceRoot":"","sources":["../../../src/fieldTypes/rich_text.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAE5C,OAAO,EAEL,qBAAqB,GACtB,MAAM,oCAAoC,CAAC;AAE5C,OAAO,EAGL,sBAAsB,EACtB,QAAQ,EACR,sBAAsB,GACvB,MAAM,gBAAgB,CAAC;AA2ExB;;;;GAIG;AAEH;;;GAGG;AACH,MAAM,UAAU,oBAAoB,CAClC,KAAc;IAEd,OAAO,CACL,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC;QACpB,KAAK,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,OAAO,KAAK,KAAK,QAAQ,IAAI,SAAS,CAAC,KAAK,CAAC,CAAC,CACtE,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,6BAA6B,CAC3C,KAAc;IAEd,OAAO,CACL,qBAAqB,CAAC,KAAK,CAAC;QAC5B,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,oBAAoB,CAAC,CACjD,CAAC;AACJ,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,6BAA6B,CAE3C,KAAc;IACd,IAAI,KAAK,KAAK,IAAI;QAAE,OAAO,IAAI,CAAC;IAEhC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC;QAAE,OAAO,KAAK,CAAC;IAExC,OAAO,KAAK,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,EAAE;QAC3B,yCAAyC;QACzC,IAAI,QAAQ,CAAC,KAAK,CAAC;YAAE,OAAO,IAAI,CAAC;QAEjC,6EAA6E;QAC7E,OAAO,sBAAsB,CAAC,KAAK,CAAC,CAAC;IACvC,CAAC,CAAC,CAAC;AACL,CAAC;AAED,MAAM,UAAU,sCAAsC,CAGpD,KAAc;IAEd,OAAO,CACL,qBAAqB,CAAC,KAAK,CAAC;QAC5B,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,6BAA6B,CAAC,CAC1D,CAAC;AACJ,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,oCAAoC,CAElD,KAAc;IACd,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC;QAAE,OAAO,KAAK,CAAC;IAExC,OAAO,KAAK,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,EAAE;QAC3B,uFAAuF;QACvF,OAAO,sBAAsB,CAAC,KAAK,CAAC,CAAC;IACvC,CAAC,CAAC,CAAC;AACL,CAAC;AAED,MAAM,UAAU,6CAA6C,CAG3D,KAAc;IAEd,OAAO,CACL,qBAAqB,CAAC,KAAK,CAAC;QAC5B,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,oCAAoC,CAAC,CACjE,CAAC;AACJ,CAAC"}
@@ -52,7 +52,7 @@ export type UpdatedBlockInRequest<D extends ItemTypeDefinition = ItemTypeDefinit
52
52
  __itemTypeId?: D['itemTypeId'];
53
53
  type: RawApiTypes.ItemType1;
54
54
  id: RawApiTypes.ItemIdentity;
55
- relationships: RawApiTypes.ItemRelationships<D>;
55
+ relationships?: RawApiTypes.ItemRelationships<D>;
56
56
  meta?: RawApiTypes.ItemMeta;
57
57
  attributes: ToItemAttributesInRequest<D>;
58
58
  };
@@ -125,6 +125,25 @@ export declare function isItemWithOptionalMeta<D extends ItemTypeDefinition = It
125
125
  */
126
126
  export declare function isSingleBlockFieldValue(value: unknown): value is SingleBlockFieldValue;
127
127
  export declare function isLocalizedSingleBlockFieldValue(value: unknown): value is LocalizedFieldValue<SingleBlockFieldValue>;
128
+ /**
129
+ * Shape check for a block object on the *request* side. Accepts every object
130
+ * form the CMA allows inside a request payload:
131
+ *
132
+ * 1. New block (no id, full body):
133
+ * { type: 'item', attributes, relationships: { item_type } }
134
+ * 2. Updated block, full body:
135
+ * { type: 'item', id, attributes, relationships: { item_type } }
136
+ * 3. Updated block, id-only (patch some attributes of an existing block):
137
+ * { type: 'item', id, attributes } ← no relationships
138
+ *
139
+ * Case 3 is what `buildBlockRecord` produces when the caller omits
140
+ * `item_type` — the server derives the model from the existing block's id,
141
+ * so re-specifying it in `relationships` is redundant.
142
+ */
143
+ export declare function isBlockObjectInRequest(block: unknown): block is {
144
+ type: RawApiTypes.ItemType1;
145
+ attributes: Record<string, unknown>;
146
+ };
128
147
  /**
129
148
  * Type guard for Single Block field values in API request format.
130
149
  * Allows block as string ID, full object with ID, or object without ID.
@@ -47,6 +47,28 @@ export function isLocalizedSingleBlockFieldValue(value) {
47
47
  return (isLocalizedFieldValue(value) &&
48
48
  Object.values(value).every(isSingleBlockFieldValue));
49
49
  }
50
+ /**
51
+ * Shape check for a block object on the *request* side. Accepts every object
52
+ * form the CMA allows inside a request payload:
53
+ *
54
+ * 1. New block (no id, full body):
55
+ * { type: 'item', attributes, relationships: { item_type } }
56
+ * 2. Updated block, full body:
57
+ * { type: 'item', id, attributes, relationships: { item_type } }
58
+ * 3. Updated block, id-only (patch some attributes of an existing block):
59
+ * { type: 'item', id, attributes } ← no relationships
60
+ *
61
+ * Case 3 is what `buildBlockRecord` produces when the caller omits
62
+ * `item_type` — the server derives the model from the existing block's id,
63
+ * so re-specifying it in `relationships` is redundant.
64
+ */
65
+ export function isBlockObjectInRequest(block) {
66
+ return (typeof block === 'object' &&
67
+ block !== null &&
68
+ 'type' in block &&
69
+ block.type === 'item' &&
70
+ 'attributes' in block);
71
+ }
50
72
  /**
51
73
  * Type guard for Single Block field values in API request format.
52
74
  * Allows block as string ID, full object with ID, or object without ID.
@@ -57,8 +79,9 @@ export function isSingleBlockFieldValueInRequest(value) {
57
79
  // String ID - referencing existing block
58
80
  if (isItemId(value))
59
81
  return true;
60
- // Object (either with or without ID for updates/creation)
61
- return isItemWithOptionalIdAndMeta(value);
82
+ // Object (either with or without ID for updates/creation, including
83
+ // id-only updates without `relationships`)
84
+ return isBlockObjectInRequest(value);
62
85
  }
63
86
  export function isLocalizedSingleBlockFieldValueInRequest(value) {
64
87
  return (isLocalizedFieldValue(value) &&
@@ -1 +1 @@
1
- {"version":3,"file":"single_block.js","sourceRoot":"","sources":["../../../src/fieldTypes/single_block.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAK5C,OAAO,EAEL,qBAAqB,GACtB,MAAM,oCAAoC,CAAC;AAyH5C;;;;;GAKG;AAEH;;GAEG;AACH,MAAM,UAAU,QAAQ,CAAC,KAAc;IACrC,OAAO,OAAO,KAAK,KAAK,QAAQ,CAAC;AACnC,CAAC;AAMD;;GAEG;AACH,MAAM,UAAU,2BAA2B,CAEzC,KAAc;IACd,OAAO,CACL,OAAO,KAAK,KAAK,QAAQ;QACzB,KAAK,KAAK,IAAI;QACd,MAAM,IAAI,KAAK;QACf,KAAK,CAAC,IAAI,KAAK,MAAM;QACrB,YAAY,IAAI,KAAK;QACrB,eAAe,IAAI,KAAK,CACzB,CAAC;AACJ,CAAC;AAMD;;GAEG;AACH,MAAM,UAAU,sBAAsB,CAEpC,KAAc;IACd,OAAO,CACL,2BAA2B,CAAC,KAAK,CAAC;QAClC,IAAI,IAAI,KAAK;QACb,OAAO,KAAK,CAAC,EAAE,KAAK,QAAQ,CAC7B,CAAC;AACJ,CAAC;AAED;;;;GAIG;AAEH;;;GAGG;AACH,MAAM,UAAU,uBAAuB,CACrC,KAAc;IAEd,OAAO,CAAC,OAAO,KAAK,KAAK,QAAQ,IAAI,SAAS,CAAC,KAAK,CAAC,CAAC,IAAI,KAAK,KAAK,IAAI,CAAC;AAC3E,CAAC;AAED,MAAM,UAAU,gCAAgC,CAC9C,KAAc;IAEd,OAAO,CACL,qBAAqB,CAAC,KAAK,CAAC;QAC5B,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,uBAAuB,CAAC,CACpD,CAAC;AACJ,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,gCAAgC,CAE9C,KAAc;IACd,IAAI,KAAK,KAAK,IAAI;QAAE,OAAO,IAAI,CAAC;IAEhC,yCAAyC;IACzC,IAAI,QAAQ,CAAC,KAAK,CAAC;QAAE,OAAO,IAAI,CAAC;IAEjC,0DAA0D;IAC1D,OAAO,2BAA2B,CAAC,KAAK,CAAC,CAAC;AAC5C,CAAC;AAED,MAAM,UAAU,yCAAyC,CAGvD,KAAc;IAEd,OAAO,CACL,qBAAqB,CAAC,KAAK,CAAC;QAC5B,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,gCAAgC,CAAC,CAC7D,CAAC;AACJ,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,uCAAuC,CAErD,KAAc;IACd,IAAI,KAAK,KAAK,IAAI;QAAE,OAAO,IAAI,CAAC;IAEhC,uFAAuF;IACvF,OAAO,sBAAsB,CAAC,KAAK,CAAC,CAAC;AACvC,CAAC;AAED,MAAM,UAAU,gDAAgD,CAG9D,KAAc;IAEd,OAAO,CACL,qBAAqB,CAAC,KAAK,CAAC;QAC5B,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,uCAAuC,CAAC,CACpE,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"single_block.js","sourceRoot":"","sources":["../../../src/fieldTypes/single_block.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAK5C,OAAO,EAEL,qBAAqB,GACtB,MAAM,oCAAoC,CAAC;AAyH5C;;;;;GAKG;AAEH;;GAEG;AACH,MAAM,UAAU,QAAQ,CAAC,KAAc;IACrC,OAAO,OAAO,KAAK,KAAK,QAAQ,CAAC;AACnC,CAAC;AAMD;;GAEG;AACH,MAAM,UAAU,2BAA2B,CAEzC,KAAc;IACd,OAAO,CACL,OAAO,KAAK,KAAK,QAAQ;QACzB,KAAK,KAAK,IAAI;QACd,MAAM,IAAI,KAAK;QACf,KAAK,CAAC,IAAI,KAAK,MAAM;QACrB,YAAY,IAAI,KAAK;QACrB,eAAe,IAAI,KAAK,CACzB,CAAC;AACJ,CAAC;AAMD;;GAEG;AACH,MAAM,UAAU,sBAAsB,CAEpC,KAAc;IACd,OAAO,CACL,2BAA2B,CAAC,KAAK,CAAC;QAClC,IAAI,IAAI,KAAK;QACb,OAAO,KAAK,CAAC,EAAE,KAAK,QAAQ,CAC7B,CAAC;AACJ,CAAC;AAED;;;;GAIG;AAEH;;;GAGG;AACH,MAAM,UAAU,uBAAuB,CACrC,KAAc;IAEd,OAAO,CAAC,OAAO,KAAK,KAAK,QAAQ,IAAI,SAAS,CAAC,KAAK,CAAC,CAAC,IAAI,KAAK,KAAK,IAAI,CAAC;AAC3E,CAAC;AAED,MAAM,UAAU,gCAAgC,CAC9C,KAAc;IAEd,OAAO,CACL,qBAAqB,CAAC,KAAK,CAAC;QAC5B,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,uBAAuB,CAAC,CACpD,CAAC;AACJ,CAAC;AAED;;;;;;;;;;;;;;GAcG;AACH,MAAM,UAAU,sBAAsB,CAAC,KAAc;IAInD,OAAO,CACL,OAAO,KAAK,KAAK,QAAQ;QACzB,KAAK,KAAK,IAAI;QACd,MAAM,IAAI,KAAK;QACf,KAAK,CAAC,IAAI,KAAK,MAAM;QACrB,YAAY,IAAI,KAAK,CACtB,CAAC;AACJ,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,gCAAgC,CAE9C,KAAc;IACd,IAAI,KAAK,KAAK,IAAI;QAAE,OAAO,IAAI,CAAC;IAEhC,yCAAyC;IACzC,IAAI,QAAQ,CAAC,KAAK,CAAC;QAAE,OAAO,IAAI,CAAC;IAEjC,oEAAoE;IACpE,2CAA2C;IAC3C,OAAO,sBAAsB,CAAC,KAAK,CAAC,CAAC;AACvC,CAAC;AAED,MAAM,UAAU,yCAAyC,CAGvD,KAAc;IAEd,OAAO,CACL,qBAAqB,CAAC,KAAK,CAAC;QAC5B,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,gCAAgC,CAAC,CAC7D,CAAC;AACJ,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,uCAAuC,CAErD,KAAc;IACd,IAAI,KAAK,KAAK,IAAI;QAAE,OAAO,IAAI,CAAC;IAEhC,uFAAuF;IACvF,OAAO,sBAAsB,CAAC,KAAK,CAAC,CAAC;AACvC,CAAC;AAED,MAAM,UAAU,gDAAgD,CAG9D,KAAc;IAEd,OAAO,CACL,qBAAqB,CAAC,KAAK,CAAC;QAC5B,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,uCAAuC,CAAC,CACpE,CAAC;AACJ,CAAC"}
@@ -1,7 +1,7 @@
1
1
  import { everyNode, isBlock, isDocument, isInlineBlock, } from 'datocms-structured-text-utils';
2
2
  import { isValidId } from '../utilities/id';
3
3
  import { isLocalizedFieldValue, } from '../utilities/normalizedFieldValues';
4
- import { isItemId, isItemWithOptionalIdAndMeta, isItemWithOptionalMeta, } from './single_block';
4
+ import { isBlockObjectInRequest, isItemId, isItemWithOptionalMeta, } from './single_block';
5
5
  /**
6
6
  * Utility function to validate all block/inlineBlock nodes in a structured text document tree.
7
7
  * Calls the provided callback for each block/inlineBlock node found and returns true only if all pass.
@@ -51,8 +51,8 @@ export function isStructuredTextFieldValueInRequest(value) {
51
51
  // String ID
52
52
  if (isItemId(item))
53
53
  return true;
54
- // Object (either with or without ID)
55
- return isItemWithOptionalIdAndMeta(item);
54
+ // Object (new, updated, or id-only update — with or without `relationships`)
55
+ return isBlockObjectInRequest(item);
56
56
  });
57
57
  }
58
58
  export function isLocalizedStructuredTextFieldValueInRequest(value) {
@@ -1 +1 @@
1
- {"version":3,"file":"structured_text.js","sourceRoot":"","sources":["../../../src/fieldTypes/structured_text.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"structured_text.js","sourceRoot":"","sources":["../../../src/fieldTypes/structured_text.ts"],"names":[],"mappings":"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"}
@@ -64,7 +64,7 @@ export class Client {
64
64
  return this.config.baseUrl || Client.defaultBaseUrl;
65
65
  }
66
66
  request(options) {
67
- return request(Object.assign(Object.assign(Object.assign({}, this.config), options), { logFn: this.config.logFn || console.log, userAgent: '@datocms/cma-client v5.4.4', baseUrl: this.baseUrl, preCallStack: new Error().stack, extraHeaders: Object.assign(Object.assign(Object.assign({}, (this.config.extraHeaders || {})), (this.config.environment
67
+ return request(Object.assign(Object.assign(Object.assign({}, this.config), options), { logFn: this.config.logFn || console.log, userAgent: '@datocms/cma-client v5.4.6', baseUrl: this.baseUrl, preCallStack: new Error().stack, extraHeaders: Object.assign(Object.assign(Object.assign({}, (this.config.extraHeaders || {})), (this.config.environment
68
68
  ? { 'X-Environment': this.config.environment }
69
69
  : {})), { 'X-API-Version': '3' }), fetchJobResult: (jobId) => {
70
70
  return this.jobResultsFetcher
@@ -1,6 +1,7 @@
1
1
  import * as Utils from '@datocms/rest-client-utils';
2
2
  import { Item } from '../generated/resources';
3
3
  export function buildBlockRecord(body) {
4
+ var _a, _b, _c, _d, _e, _f;
4
5
  const data = Utils.serializeRequestBody(body, {
5
6
  type: Item.TYPE,
6
7
  attributes: '*',
@@ -10,6 +11,14 @@ export function buildBlockRecord(body) {
10
11
  // `__itemTypeId` so locally-built blocks support the same TS narrowing
11
12
  // pattern as blocks read from API responses. The field is TS-only and is
12
13
  // stripped again by the serializer when the outer request is sent.
13
- return Object.assign(Object.assign({}, data), { __itemTypeId: data.relationships.item_type.data.id });
14
+ //
15
+ // `item_type` is optional on `UpdateBlockRecordSchema` (id-only updates), so
16
+ // the ID may be absent here. Accept any source the caller provided and
17
+ // leave `__itemTypeId` unset when none is available — the property is
18
+ // declared optional, so consumers already handle the `undefined` case.
19
+ const itemTypeId = (_c = (_a = body.__itemTypeId) !== null && _a !== void 0 ? _a : (_b = body.item_type) === null || _b === void 0 ? void 0 : _b.id) !== null && _c !== void 0 ? _c : (_f = (_e = (_d = data.relationships) === null || _d === void 0 ? void 0 : _d.item_type) === null || _e === void 0 ? void 0 : _e.data) === null || _f === void 0 ? void 0 : _f.id;
20
+ if (itemTypeId === undefined)
21
+ return data;
22
+ return Object.assign(Object.assign({}, data), { __itemTypeId: itemTypeId });
14
23
  }
15
24
  //# sourceMappingURL=buildBlockRecord.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"buildBlockRecord.js","sourceRoot":"","sources":["../../../src/utilities/buildBlockRecord.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,4BAA4B,CAAC;AAGpD,OAAO,EAAE,IAAI,EAAE,MAAM,wBAAwB,CAAC;AA6B9C,MAAM,UAAU,gBAAgB,CAG9B,IAEuC;IAEvC,MAAM,IAAI,GAAG,KAAK,CAAC,oBAAoB,CAEpC,IAAI,EAAE;QACP,IAAI,EAAE,IAAI,CAAC,IAAI;QACf,UAAU,EAAE,GAAG;QACf,aAAa,EAAE,CAAC,WAAW,CAAC;KAC7B,CAAC,CAAC,IAAI,CAAC;IAER,qEAAqE;IACrE,uEAAuE;IACvE,yEAAyE;IACzE,mEAAmE;IACnE,OAAO,gCACF,IAAI,KACP,YAAY,EAAE,IAAI,CAAC,aAAa,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,GAClB,CAAC;AACrC,CAAC"}
1
+ {"version":3,"file":"buildBlockRecord.js","sourceRoot":"","sources":["../../../src/utilities/buildBlockRecord.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,4BAA4B,CAAC;AAGpD,OAAO,EAAE,IAAI,EAAE,MAAM,wBAAwB,CAAC;AA6B9C,MAAM,UAAU,gBAAgB,CAG9B,IAEuC;;IAEvC,MAAM,IAAI,GAAG,KAAK,CAAC,oBAAoB,CAEpC,IAAI,EAAE;QACP,IAAI,EAAE,IAAI,CAAC,IAAI;QACf,UAAU,EAAE,GAAG;QACf,aAAa,EAAE,CAAC,WAAW,CAAC;KAC7B,CAAC,CAAC,IAAI,CAAC;IAER,qEAAqE;IACrE,uEAAuE;IACvE,yEAAyE;IACzE,mEAAmE;IACnE,EAAE;IACF,6EAA6E;IAC7E,uEAAuE;IACvE,sEAAsE;IACtE,uEAAuE;IACvE,MAAM,UAAU,GACd,MAAA,MAAA,IAAI,CAAC,YAAY,mCACjB,MAAA,IAAI,CAAC,SAAS,0CAAE,EAAE,mCAClB,MAAA,MAAA,MAAA,IAAI,CAAC,aAAa,0CAAE,SAAS,0CAAE,IAAI,0CAAE,EAAE,CAAC;IAE1C,IAAI,UAAU,KAAK,SAAS;QAAE,OAAO,IAAI,CAAC;IAE1C,OAAO,gCACF,IAAI,KACP,YAAY,EAAE,UAAU,GACQ,CAAC;AACrC,CAAC"}
@@ -52,7 +52,7 @@ export type UpdatedBlockInRequest<D extends ItemTypeDefinition = ItemTypeDefinit
52
52
  __itemTypeId?: D['itemTypeId'];
53
53
  type: RawApiTypes.ItemType1;
54
54
  id: RawApiTypes.ItemIdentity;
55
- relationships: RawApiTypes.ItemRelationships<D>;
55
+ relationships?: RawApiTypes.ItemRelationships<D>;
56
56
  meta?: RawApiTypes.ItemMeta;
57
57
  attributes: ToItemAttributesInRequest<D>;
58
58
  };
@@ -125,6 +125,25 @@ export declare function isItemWithOptionalMeta<D extends ItemTypeDefinition = It
125
125
  */
126
126
  export declare function isSingleBlockFieldValue(value: unknown): value is SingleBlockFieldValue;
127
127
  export declare function isLocalizedSingleBlockFieldValue(value: unknown): value is LocalizedFieldValue<SingleBlockFieldValue>;
128
+ /**
129
+ * Shape check for a block object on the *request* side. Accepts every object
130
+ * form the CMA allows inside a request payload:
131
+ *
132
+ * 1. New block (no id, full body):
133
+ * { type: 'item', attributes, relationships: { item_type } }
134
+ * 2. Updated block, full body:
135
+ * { type: 'item', id, attributes, relationships: { item_type } }
136
+ * 3. Updated block, id-only (patch some attributes of an existing block):
137
+ * { type: 'item', id, attributes } ← no relationships
138
+ *
139
+ * Case 3 is what `buildBlockRecord` produces when the caller omits
140
+ * `item_type` — the server derives the model from the existing block's id,
141
+ * so re-specifying it in `relationships` is redundant.
142
+ */
143
+ export declare function isBlockObjectInRequest(block: unknown): block is {
144
+ type: RawApiTypes.ItemType1;
145
+ attributes: Record<string, unknown>;
146
+ };
128
147
  /**
129
148
  * Type guard for Single Block field values in API request format.
130
149
  * Allows block as string ID, full object with ID, or object without ID.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@datocms/cma-client",
3
- "version": "5.4.4",
3
+ "version": "5.4.6",
4
4
  "description": "JS client for DatoCMS REST Content Management API",
5
5
  "keywords": [
6
6
  "datocms",
@@ -45,5 +45,5 @@
45
45
  "@datocms/dashboard-client": "^5.4.3",
46
46
  "@types/uuid": "^9.0.7"
47
47
  },
48
- "gitHead": "9bfdb472db5e4c48543fb9a2c3a64b95722c8d78"
48
+ "gitHead": "6463b1003aeaabc216b2d1a17a654c444f16155a"
49
49
  }
@@ -8,8 +8,8 @@ import type { RichTextEditorConfiguration } from './appearance/rich_text';
8
8
  import {
9
9
  type BlockInNestedResponse,
10
10
  type BlockInRequest,
11
+ isBlockObjectInRequest,
11
12
  isItemId,
12
- isItemWithOptionalIdAndMeta,
13
13
  isItemWithOptionalMeta,
14
14
  } from './single_block';
15
15
  import type { RichTextBlocksValidator } from './validators/rich_text_blocks';
@@ -129,8 +129,8 @@ export function isRichTextFieldValueInRequest<
129
129
  // String ID - referencing existing block
130
130
  if (isItemId(block)) return true;
131
131
 
132
- // Object (either with or without ID for updates/creation)
133
- return isItemWithOptionalIdAndMeta(block);
132
+ // Object (new, updated, or id-only update — with or without `relationships`)
133
+ return isBlockObjectInRequest(block);
134
134
  });
135
135
  }
136
136
 
@@ -68,7 +68,7 @@ export type UpdatedBlockInRequest<
68
68
  __itemTypeId?: D['itemTypeId'];
69
69
  type: RawApiTypes.ItemType1;
70
70
  id: RawApiTypes.ItemIdentity;
71
- relationships: RawApiTypes.ItemRelationships<D>;
71
+ relationships?: RawApiTypes.ItemRelationships<D>;
72
72
  meta?: RawApiTypes.ItemMeta;
73
73
  attributes: ToItemAttributesInRequest<D>;
74
74
  };
@@ -204,6 +204,34 @@ export function isLocalizedSingleBlockFieldValue(
204
204
  );
205
205
  }
206
206
 
207
+ /**
208
+ * Shape check for a block object on the *request* side. Accepts every object
209
+ * form the CMA allows inside a request payload:
210
+ *
211
+ * 1. New block (no id, full body):
212
+ * { type: 'item', attributes, relationships: { item_type } }
213
+ * 2. Updated block, full body:
214
+ * { type: 'item', id, attributes, relationships: { item_type } }
215
+ * 3. Updated block, id-only (patch some attributes of an existing block):
216
+ * { type: 'item', id, attributes } ← no relationships
217
+ *
218
+ * Case 3 is what `buildBlockRecord` produces when the caller omits
219
+ * `item_type` — the server derives the model from the existing block's id,
220
+ * so re-specifying it in `relationships` is redundant.
221
+ */
222
+ export function isBlockObjectInRequest(block: unknown): block is {
223
+ type: RawApiTypes.ItemType1;
224
+ attributes: Record<string, unknown>;
225
+ } {
226
+ return (
227
+ typeof block === 'object' &&
228
+ block !== null &&
229
+ 'type' in block &&
230
+ block.type === 'item' &&
231
+ 'attributes' in block
232
+ );
233
+ }
234
+
207
235
  /**
208
236
  * Type guard for Single Block field values in API request format.
209
237
  * Allows block as string ID, full object with ID, or object without ID.
@@ -216,8 +244,9 @@ export function isSingleBlockFieldValueInRequest<
216
244
  // String ID - referencing existing block
217
245
  if (isItemId(value)) return true;
218
246
 
219
- // Object (either with or without ID for updates/creation)
220
- return isItemWithOptionalIdAndMeta(value);
247
+ // Object (either with or without ID for updates/creation, including
248
+ // id-only updates without `relationships`)
249
+ return isBlockObjectInRequest(value);
221
250
  }
222
251
 
223
252
  export function isLocalizedSingleBlockFieldValueInRequest<
@@ -18,8 +18,8 @@ import type { StructuredTextEditorConfiguration } from './appearance/structured_
18
18
  import {
19
19
  type BlockInNestedResponse,
20
20
  type BlockInRequest,
21
+ isBlockObjectInRequest,
21
22
  isItemId,
22
- isItemWithOptionalIdAndMeta,
23
23
  isItemWithOptionalMeta,
24
24
  } from './single_block';
25
25
  import type { RequiredValidator } from './validators';
@@ -217,8 +217,8 @@ export function isStructuredTextFieldValueInRequest<
217
217
  // String ID
218
218
  if (isItemId(item)) return true;
219
219
 
220
- // Object (either with or without ID)
221
- return isItemWithOptionalIdAndMeta(item);
220
+ // Object (new, updated, or id-only update — with or without `relationships`)
221
+ return isBlockObjectInRequest(item);
222
222
  });
223
223
  }
224
224
 
@@ -151,7 +151,7 @@ export class Client {
151
151
  ...this.config,
152
152
  ...options,
153
153
  logFn: this.config.logFn || console.log,
154
- userAgent: '@datocms/cma-client v5.4.4',
154
+ userAgent: '@datocms/cma-client v5.4.6',
155
155
  baseUrl: this.baseUrl,
156
156
  preCallStack: new Error().stack,
157
157
  extraHeaders: {
@@ -49,8 +49,20 @@ export function buildBlockRecord<
49
49
  // `__itemTypeId` so locally-built blocks support the same TS narrowing
50
50
  // pattern as blocks read from API responses. The field is TS-only and is
51
51
  // stripped again by the serializer when the outer request is sent.
52
+ //
53
+ // `item_type` is optional on `UpdateBlockRecordSchema` (id-only updates), so
54
+ // the ID may be absent here. Accept any source the caller provided and
55
+ // leave `__itemTypeId` unset when none is available — the property is
56
+ // declared optional, so consumers already handle the `undefined` case.
57
+ const itemTypeId =
58
+ body.__itemTypeId ??
59
+ body.item_type?.id ??
60
+ data.relationships?.item_type?.data?.id;
61
+
62
+ if (itemTypeId === undefined) return data;
63
+
52
64
  return {
53
65
  ...data,
54
- __itemTypeId: data.relationships.item_type.data.id,
66
+ __itemTypeId: itemTypeId,
55
67
  } as NewBlockInRequest<NoInfer<D>>;
56
68
  }