@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.
- package/dist/cjs/fieldTypes/rich_text.js +2 -2
- package/dist/cjs/fieldTypes/rich_text.js.map +1 -1
- package/dist/cjs/fieldTypes/single_block.js +27 -3
- package/dist/cjs/fieldTypes/single_block.js.map +1 -1
- package/dist/cjs/fieldTypes/structured_text.js +2 -2
- package/dist/cjs/fieldTypes/structured_text.js.map +1 -1
- package/dist/cjs/generated/Client.js +1 -1
- package/dist/cjs/utilities/buildBlockRecord.js +10 -1
- package/dist/cjs/utilities/buildBlockRecord.js.map +1 -1
- package/dist/esm/fieldTypes/rich_text.js +3 -3
- package/dist/esm/fieldTypes/rich_text.js.map +1 -1
- package/dist/esm/fieldTypes/single_block.d.ts +20 -1
- package/dist/esm/fieldTypes/single_block.js +25 -2
- package/dist/esm/fieldTypes/single_block.js.map +1 -1
- package/dist/esm/fieldTypes/structured_text.js +3 -3
- package/dist/esm/fieldTypes/structured_text.js.map +1 -1
- package/dist/esm/generated/Client.js +1 -1
- package/dist/esm/utilities/buildBlockRecord.js +10 -1
- package/dist/esm/utilities/buildBlockRecord.js.map +1 -1
- package/dist/types/fieldTypes/single_block.d.ts +20 -1
- package/package.json +2 -2
- package/src/fieldTypes/rich_text.ts +3 -3
- package/src/fieldTypes/single_block.ts +32 -3
- package/src/fieldTypes/structured_text.ts +3 -3
- package/src/generated/Client.ts +1 -1
- package/src/utilities/buildBlockRecord.ts +13 -1
|
@@ -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 (
|
|
40
|
-
return (0, single_block_1.
|
|
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,
|
|
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
|
-
|
|
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,
|
|
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 (
|
|
60
|
-
return (0, single_block_1.
|
|
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,
|
|
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,6EAA6E;QAC7E,OAAO,IAAA,qCAAsB,EAAC,IAAI,CAAC,CAAC;IACtC,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"}
|
|
@@ -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.
|
|
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
|
-
|
|
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
|
|
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 {
|
|
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 (
|
|
35
|
-
return
|
|
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,
|
|
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
|
|
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
|
-
|
|
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,
|
|
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 {
|
|
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 (
|
|
55
|
-
return
|
|
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":"AAAA,OAAO,EAKL,SAAS,EACT,OAAO,EACP,UAAU,EACV,aAAa,GACd,MAAM,+BAA+B,CAAC;AACvC,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAE5C,OAAO,EAEL,qBAAqB,GACtB,MAAM,oCAAoC,CAAC;AAE5C,OAAO,EAGL,QAAQ,EACR,
|
|
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.
|
|
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
|
-
|
|
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
|
|
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
|
|
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.
|
|
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": "
|
|
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 (
|
|
133
|
-
return
|
|
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
|
|
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
|
-
|
|
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 (
|
|
221
|
-
return
|
|
220
|
+
// Object (new, updated, or id-only update — with or without `relationships`)
|
|
221
|
+
return isBlockObjectInRequest(item);
|
|
222
222
|
});
|
|
223
223
|
}
|
|
224
224
|
|
package/src/generated/Client.ts
CHANGED
|
@@ -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.
|
|
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:
|
|
66
|
+
__itemTypeId: itemTypeId,
|
|
55
67
|
} as NewBlockInRequest<NoInfer<D>>;
|
|
56
68
|
}
|