@atlaskit/editor-synced-block-provider 3.30.6 → 3.31.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (47) hide show
  1. package/CHANGELOG.md +13 -0
  2. package/dist/cjs/clients/block-service/blockService.js +98 -1
  3. package/dist/cjs/clients/block-service/blockSubscription.js +48 -3
  4. package/dist/cjs/index.js +12 -33
  5. package/dist/cjs/providers/block-service/blockServiceAPI.js +509 -185
  6. package/dist/cjs/providers/syncBlockProvider.js +36 -4
  7. package/dist/es2019/clients/block-service/blockService.js +88 -0
  8. package/dist/es2019/clients/block-service/blockSubscription.js +62 -2
  9. package/dist/es2019/index.js +2 -6
  10. package/dist/es2019/providers/block-service/blockServiceAPI.js +172 -23
  11. package/dist/es2019/providers/syncBlockProvider.js +26 -0
  12. package/dist/esm/clients/block-service/blockService.js +97 -0
  13. package/dist/esm/clients/block-service/blockSubscription.js +47 -2
  14. package/dist/esm/index.js +2 -6
  15. package/dist/esm/providers/block-service/blockServiceAPI.js +513 -189
  16. package/dist/esm/providers/syncBlockProvider.js +36 -4
  17. package/dist/types/clients/block-service/blockService.d.ts +36 -0
  18. package/dist/types/clients/block-service/blockSubscription.d.ts +26 -1
  19. package/dist/types/index.d.ts +2 -6
  20. package/dist/types/providers/block-service/blockServiceAPI.d.ts +15 -7
  21. package/dist/types/providers/types.d.ts +6 -0
  22. package/dist/types-ts4.5/clients/block-service/blockService.d.ts +36 -0
  23. package/dist/types-ts4.5/clients/block-service/blockSubscription.d.ts +26 -1
  24. package/dist/types-ts4.5/index.d.ts +2 -6
  25. package/dist/types-ts4.5/providers/block-service/blockServiceAPI.d.ts +15 -7
  26. package/dist/types-ts4.5/providers/types.d.ts +6 -0
  27. package/package.json +1 -2
  28. package/dist/cjs/clients/block-service/sharedSubscriptionUtils.js +0 -82
  29. package/dist/cjs/utils/__generated__/relaySubscriptionUtilsSubscription.graphql.js +0 -94
  30. package/dist/cjs/utils/relayResponseConverter.js +0 -76
  31. package/dist/cjs/utils/relaySubscriptionUtils.js +0 -130
  32. package/dist/es2019/clients/block-service/sharedSubscriptionUtils.js +0 -91
  33. package/dist/es2019/utils/__generated__/relaySubscriptionUtilsSubscription.graphql.js +0 -88
  34. package/dist/es2019/utils/relayResponseConverter.js +0 -69
  35. package/dist/es2019/utils/relaySubscriptionUtils.js +0 -125
  36. package/dist/esm/clients/block-service/sharedSubscriptionUtils.js +0 -76
  37. package/dist/esm/utils/__generated__/relaySubscriptionUtilsSubscription.graphql.js +0 -88
  38. package/dist/esm/utils/relayResponseConverter.js +0 -69
  39. package/dist/esm/utils/relaySubscriptionUtils.js +0 -123
  40. package/dist/types/clients/block-service/sharedSubscriptionUtils.d.ts +0 -61
  41. package/dist/types/utils/__generated__/relaySubscriptionUtilsSubscription.graphql.d.ts +0 -31
  42. package/dist/types/utils/relayResponseConverter.d.ts +0 -47
  43. package/dist/types/utils/relaySubscriptionUtils.d.ts +0 -61
  44. package/dist/types-ts4.5/clients/block-service/sharedSubscriptionUtils.d.ts +0 -61
  45. package/dist/types-ts4.5/utils/__generated__/relaySubscriptionUtilsSubscription.graphql.d.ts +0 -31
  46. package/dist/types-ts4.5/utils/relayResponseConverter.d.ts +0 -47
  47. package/dist/types-ts4.5/utils/relaySubscriptionUtils.d.ts +0 -61
package/CHANGELOG.md CHANGED
@@ -1,5 +1,18 @@
1
1
  # @atlaskit/editor-synced-block-provider
2
2
 
3
+ ## 3.31.0
4
+
5
+ ### Minor Changes
6
+
7
+ - [`6590226f4f11a`](https://bitbucket.org/atlassian/atlassian-frontend-monorepo/commits/6590226f4f11a) -
8
+ EDITOR-2914 implement bulk update for synced blocks
9
+
10
+ ### Patch Changes
11
+
12
+ - [`f4633c591d70f`](https://bitbucket.org/atlassian/atlassian-frontend-monorepo/commits/f4633c591d70f) -
13
+ Revert 610719f because the query stopped sending
14
+ - Updated dependencies
15
+
3
16
  ## 3.30.6
4
17
 
5
18
  ### Patch Changes
@@ -4,7 +4,7 @@ var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefau
4
4
  Object.defineProperty(exports, "__esModule", {
5
5
  value: true
6
6
  });
7
- exports.updateSyncedBlock = exports.updateReferenceSyncedBlockOnDocument = exports.isBlockContentResponse = exports.getSyncedBlockContent = exports.getReferenceSyncedBlocksByBlockAri = exports.getReferenceSyncedBlocks = exports.deleteSyncedBlock = exports.createSyncedBlock = exports.batchRetrieveSyncedBlocks = exports.BlockError = void 0;
7
+ exports.updateSyncedBlocks = exports.updateSyncedBlock = exports.updateReferenceSyncedBlockOnDocument = exports.isBlockContentResponse = exports.getSyncedBlockContent = exports.getReferenceSyncedBlocksByBlockAri = exports.getReferenceSyncedBlocks = exports.deleteSyncedBlock = exports.createSyncedBlock = exports.batchRetrieveSyncedBlocks = exports.BlockError = void 0;
8
8
  var _regenerator = _interopRequireDefault(require("@babel/runtime/regenerator"));
9
9
  var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/createClass"));
10
10
  var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/classCallCheck"));
@@ -129,6 +129,7 @@ var UPDATE_DOCUMENT_REFERENCES_OPERATION_NAME = 'EDITOR_SYNCED_BLOCK_UPDATE_DOCU
129
129
  var BATCH_RETRIEVE_BLOCKS_OPERATION_NAME = 'EDITOR_SYNCED_BLOCK_BATCH_RETRIEVE_BLOCKS';
130
130
  var GET_BLOCK_REFERENCES_OPERATION_NAME = 'EDITOR_SYNCED_BLOCK_GET_REFERENCES';
131
131
  var GET_BLOCK_OPERATION_NAME = 'EDITOR_SYNCED_BLOCK_GET_BLOCK';
132
+ var BATCH_UPDATE_BLOCKS_OPERATION_NAME = 'EDITOR_SYNCED_BLOCK_BATCH_UPDATE_BLOCKS';
132
133
  var buildGetDocumentReferenceBlocksQuery = function buildGetDocumentReferenceBlocksQuery(documentAri) {
133
134
  return "query ".concat(GET_DOCUMENT_REFERENCE_BLOCKS_OPERATION_NAME, " {\n\tblockService_getDocumentReferenceBlocks(documentAri: ").concat((0, _platformFeatureFlags.fg)('platform_synced_block_patch_4') ? JSON.stringify(documentAri) : "\"".concat(documentAri, "\""), ") {\n\t\tblocks {\n\t\t\tblockAri\n\t\t\tblockInstanceId\n\t\t\tcontent\n\t\t\tcontentUpdatedAt\n\t\t\tcreatedAt\n\t\t\tcreatedBy\n\t\t\tproduct\n\t\t\tsourceAri\n\t\t\tstatus\n\t\t\tversion\n\t\t}\n\t\terrors {\n\t\t\tblockAri\n\t\t\tcode\n\t\t\treason\n\t\t}\n\t}\n}");
134
135
  };
@@ -201,6 +202,19 @@ var buildBatchRetrieveBlocksQuery = function buildBatchRetrieveBlocksQuery(block
201
202
  var buildGetBlockReferencesQuery = function buildGetBlockReferencesQuery(blockAri) {
202
203
  return "query ".concat(GET_BLOCK_REFERENCES_OPERATION_NAME, " {\n\tblockService_getReferences(blockAri: ").concat(JSON.stringify(blockAri), ") {\n\t\treferences {\n\t\t\tblockAri\n\t\t\tblockInstanceId\n\t\t\tcreatedAt\n\t\t\tcreatedBy\n\t\t\tdocumentAri\n\t\t}\n\t\terrors {\n\t\t\tblockAri\n\t\t\tcode\n\t\t\treason\n\t\t}\n\t}\n}");
203
204
  };
205
+ var buildBatchUpdateBlocksMutation = function buildBatchUpdateBlocksMutation(blocks) {
206
+ var blocksArray = blocks.map(function (block) {
207
+ var inputParts = ["blockAri: ".concat(JSON.stringify(block.blockAri)), "content: ".concat(JSON.stringify(block.content))];
208
+ if (block.stepVersion !== undefined) {
209
+ inputParts.push("stepVersion: ".concat(block.stepVersion));
210
+ }
211
+ if (block.status !== undefined) {
212
+ inputParts.push("status: ".concat(JSON.stringify(block.status)));
213
+ }
214
+ return "{ ".concat(inputParts.join(', '), " }");
215
+ }).join(', ');
216
+ return "mutation ".concat(BATCH_UPDATE_BLOCKS_OPERATION_NAME, " {\n\tblockService_batchUpdateBlocks(input: { blocks: [").concat(blocksArray, "] }) {\n\t\tsuccess {\n\t\t\tblockAri\n\t\t\tblockInstanceId\n\t\t\tcontent\n\t\t\tcontentUpdatedAt\n\t\t\tcreatedAt\n\t\t\tcreatedBy\n\t\t\tdeletionReason\n\t\t\tproduct\n\t\t\tsourceAri\n\t\t\tstatus\n\t\t\tversion\n\t\t}\n\t\terror {\n\t\t\tblockAri\n\t\t\tcode\n\t\t\treason\n\t\t}\n\t}\n}");
217
+ };
204
218
  var BlockError = exports.BlockError = /*#__PURE__*/function (_Error) {
205
219
  function BlockError(status) {
206
220
  var _this;
@@ -618,4 +632,87 @@ var getReferenceSyncedBlocksByBlockAri = exports.getReferenceSyncedBlocksByBlock
618
632
  return function getReferenceSyncedBlocksByBlockAri(_x8) {
619
633
  return _ref13.apply(this, arguments);
620
634
  };
635
+ }();
636
+
637
+ /**
638
+ * Batch updates multiple synced blocks.
639
+ *
640
+ * Calls the Block Service GraphQL API: `blockService_batchUpdateBlocks`
641
+ *
642
+ * @param blocks - Array of block updates to apply
643
+ * @returns A promise containing arrays of successfully updated blocks and any errors encountered
644
+ *
645
+ * @example
646
+ * ```typescript
647
+ * const result = await updateSyncedBlocks({
648
+ * blocks: [
649
+ * {
650
+ * blockAri: 'ari:cloud:blocks:site-123:synced-block/uuid-456',
651
+ * content: '{"type":"doc","version":1,"content":[]}',
652
+ * status: 'active',
653
+ * stepVersion: 42
654
+ * }
655
+ * ]
656
+ * });
657
+ * ```
658
+ */
659
+ var updateSyncedBlocks = exports.updateSyncedBlocks = /*#__PURE__*/function () {
660
+ var _ref15 = (0, _asyncToGenerator2.default)( /*#__PURE__*/_regenerator.default.mark(function _callee9(_ref14) {
661
+ var _result$data8;
662
+ var blocks, bodyData, url, response, result, graphqlResponse;
663
+ return _regenerator.default.wrap(function _callee9$(_context9) {
664
+ while (1) switch (_context9.prev = _context9.next) {
665
+ case 0:
666
+ blocks = _ref14.blocks;
667
+ bodyData = {
668
+ query: buildBatchUpdateBlocksMutation(blocks),
669
+ operationName: BATCH_UPDATE_BLOCKS_OPERATION_NAME
670
+ };
671
+ url = (0, _platformFeatureFlags.fg)('platform_synced_block_patch_3') ? "".concat(GRAPHQL_ENDPOINT, "?operation=editorSyncedBlockBatchUpdateBlocks") : GRAPHQL_ENDPOINT;
672
+ _context9.next = 5;
673
+ return (0, _retry.fetchWithRetry)(url, {
674
+ method: 'POST',
675
+ headers: COMMON_HEADERS,
676
+ body: JSON.stringify(bodyData)
677
+ });
678
+ case 5:
679
+ response = _context9.sent;
680
+ if (response.ok) {
681
+ _context9.next = 8;
682
+ break;
683
+ }
684
+ throw new BlockError(response.status);
685
+ case 8:
686
+ _context9.next = 10;
687
+ return response.json();
688
+ case 10:
689
+ result = _context9.sent;
690
+ if (!(result.errors && result.errors.length > 0)) {
691
+ _context9.next = 13;
692
+ break;
693
+ }
694
+ throw new Error(result.errors.map(function (e) {
695
+ return e.message;
696
+ }).join(', '));
697
+ case 13:
698
+ if ((_result$data8 = result.data) !== null && _result$data8 !== void 0 && _result$data8.blockService_batchUpdateBlocks) {
699
+ _context9.next = 15;
700
+ break;
701
+ }
702
+ throw new Error('No data returned from GraphQL mutation');
703
+ case 15:
704
+ graphqlResponse = result.data.blockService_batchUpdateBlocks;
705
+ return _context9.abrupt("return", {
706
+ success: graphqlResponse.success,
707
+ error: graphqlResponse.error
708
+ });
709
+ case 17:
710
+ case "end":
711
+ return _context9.stop();
712
+ }
713
+ }, _callee9);
714
+ }));
715
+ return function updateSyncedBlocks(_x9) {
716
+ return _ref15.apply(this, arguments);
717
+ };
621
718
  }();
@@ -6,7 +6,7 @@ Object.defineProperty(exports, "__esModule", {
6
6
  exports.subscribeToBlockUpdates = void 0;
7
7
  var _graphqlWs = require("graphql-ws");
8
8
  var _coreUtils = require("@atlaskit/editor-common/core-utils");
9
- var _sharedSubscriptionUtils = require("./sharedSubscriptionUtils");
9
+ var _utils = require("../../utils/utils");
10
10
  var GRAPHQL_WS_ENDPOINT = '/gateway/api/graphql/subscriptions';
11
11
  var blockServiceClient = null;
12
12
  var getBlockServiceClient = function getBlockServiceClient() {
@@ -25,6 +25,51 @@ var getBlockServiceClient = function getBlockServiceClient() {
25
25
  }
26
26
  return blockServiceClient;
27
27
  };
28
+ var SUBSCRIPTION_QUERY = "\nsubscription EDITOR_SYNCED_BLOCK_ON_BLOCK_UPDATED($resourceId: ID!) {\n\tblockService_onBlockUpdated(resourceId: $resourceId) {\n\t\tblockAri\n\t\tblockInstanceId\n\t\tcontent\n\t\tcontentUpdatedAt\n\t\tcreatedAt\n\t\tcreatedBy\n\t\tdeletionReason\n\t\tproduct\n\t\tsourceAri\n\t\tstatus\n\t}\n}\n";
29
+ /**
30
+ * Extracts the resourceId from a block ARI.
31
+ * Block ARI format: ari:cloud:blocks:<cloudId>:synced-block/<resourceId>
32
+ * @param blockAri - The block ARI string
33
+ * @returns The resourceId portion of the ARI
34
+ */
35
+ var extractResourceIdFromBlockAri = function extractResourceIdFromBlockAri(blockAri) {
36
+ // eslint-disable-next-line require-unicode-regexp
37
+ var match = blockAri.match(/ari:cloud:blocks:[^:]+:synced-block\/(.+)$/);
38
+ return (match === null || match === void 0 ? void 0 : match[1]) || null;
39
+ };
40
+
41
+ /**
42
+ * Parses the subscription payload into a standardized format.
43
+ * @param payload - The raw subscription payload
44
+ * @returns Parsed block data or null if parsing fails
45
+ */
46
+ var parseSubscriptionPayload = function parseSubscriptionPayload(payload) {
47
+ try {
48
+ var resourceId = extractResourceIdFromBlockAri(payload.blockAri);
49
+ if (!resourceId) {
50
+ return null;
51
+ }
52
+ var createdAt;
53
+ if (payload.createdAt !== undefined && payload.createdAt !== null) {
54
+ createdAt = new Date(payload.createdAt).toISOString();
55
+ }
56
+ return {
57
+ blockAri: payload.blockAri,
58
+ blockInstanceId: payload.blockInstanceId,
59
+ content: JSON.parse(payload.content),
60
+ contentUpdatedAt: (0, _utils.convertContentUpdatedAt)(payload.contentUpdatedAt),
61
+ createdAt: createdAt,
62
+ createdBy: payload.createdBy,
63
+ product: payload.product,
64
+ resourceId: resourceId,
65
+ sourceAri: payload.sourceAri,
66
+ status: payload.status
67
+ };
68
+ } catch (_unused) {
69
+ return null;
70
+ }
71
+ };
72
+
28
73
  /**
29
74
  * Creates a GraphQL subscription to block updates using the shared graphql-ws client.
30
75
  *
@@ -40,7 +85,7 @@ var subscribeToBlockUpdates = exports.subscribeToBlockUpdates = function subscri
40
85
  return function () {};
41
86
  }
42
87
  var unsubscribe = client.subscribe({
43
- query: _sharedSubscriptionUtils.BLOCK_SERVICE_SUBSCRIPTION_QUERY,
88
+ query: SUBSCRIPTION_QUERY,
44
89
  variables: {
45
90
  resourceId: blockAri
46
91
  },
@@ -49,7 +94,7 @@ var subscribeToBlockUpdates = exports.subscribeToBlockUpdates = function subscri
49
94
  next: function next(value) {
50
95
  var _value$data;
51
96
  if ((_value$data = value.data) !== null && _value$data !== void 0 && _value$data.blockService_onBlockUpdated) {
52
- var parsed = (0, _sharedSubscriptionUtils.parseSubscriptionPayload)(value.data.blockService_onBlockUpdated);
97
+ var parsed = parseSubscriptionPayload(value.data.blockService_onBlockUpdated);
53
98
  if (parsed !== null) {
54
99
  onData(parsed);
55
100
  } else {
package/dist/cjs/index.js CHANGED
@@ -3,12 +3,6 @@
3
3
  Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
- Object.defineProperty(exports, "BLOCK_SERVICE_SUBSCRIPTION_QUERY", {
7
- enumerable: true,
8
- get: function get() {
9
- return _sharedSubscriptionUtils.BLOCK_SERVICE_SUBSCRIPTION_QUERY;
10
- }
11
- });
12
6
  Object.defineProperty(exports, "BlockError", {
13
7
  enumerable: true,
14
8
  get: function get() {
@@ -63,12 +57,6 @@ Object.defineProperty(exports, "convertPMNodesToSyncBlockNodes", {
63
57
  return _utils.convertPMNodesToSyncBlockNodes;
64
58
  }
65
59
  });
66
- Object.defineProperty(exports, "convertRelayResponseToSyncBlockInstance", {
67
- enumerable: true,
68
- get: function get() {
69
- return _relayResponseConverter.convertRelayResponseToSyncBlockInstance;
70
- }
71
- });
72
60
  Object.defineProperty(exports, "convertSyncBlockJSONNodeToSyncBlockNode", {
73
61
  enumerable: true,
74
62
  get: function get() {
@@ -87,18 +75,6 @@ Object.defineProperty(exports, "convertToSyncBlockData", {
87
75
  return _blockServiceAPI.convertToSyncBlockData;
88
76
  }
89
77
  });
90
- Object.defineProperty(exports, "createRelayBlockSubscription", {
91
- enumerable: true,
92
- get: function get() {
93
- return _relaySubscriptionUtils.createRelayBlockSubscription;
94
- }
95
- });
96
- Object.defineProperty(exports, "createRelaySubscriptionFunction", {
97
- enumerable: true,
98
- get: function get() {
99
- return _relaySubscriptionUtils.createRelaySubscriptionFunction;
100
- }
101
- });
102
78
  Object.defineProperty(exports, "createResourceIdForReference", {
103
79
  enumerable: true,
104
80
  get: function get() {
@@ -207,12 +183,6 @@ Object.defineProperty(exports, "parseResourceId", {
207
183
  return _resourceId.parseResourceId;
208
184
  }
209
185
  });
210
- Object.defineProperty(exports, "parseSubscriptionPayload", {
211
- enumerable: true,
212
- get: function get() {
213
- return _sharedSubscriptionUtils.parseSubscriptionPayload;
214
- }
215
- });
216
186
  Object.defineProperty(exports, "rebaseTransaction", {
217
187
  enumerable: true,
218
188
  get: function get() {
@@ -231,6 +201,12 @@ Object.defineProperty(exports, "syncBlockInMemorySessionCache", {
231
201
  return _syncBlockInMemorySessionCache.syncBlockInMemorySessionCache;
232
202
  }
233
203
  });
204
+ Object.defineProperty(exports, "updateSyncedBlocks", {
205
+ enumerable: true,
206
+ get: function get() {
207
+ return _blockService.updateSyncedBlocks;
208
+ }
209
+ });
234
210
  Object.defineProperty(exports, "useFetchSyncBlockData", {
235
211
  enumerable: true,
236
212
  get: function get() {
@@ -273,6 +249,12 @@ Object.defineProperty(exports, "useMemoizedSyncedBlockProvider", {
273
249
  return _syncBlockProvider.useMemoizedSyncedBlockProvider;
274
250
  }
275
251
  });
252
+ Object.defineProperty(exports, "writeDataBatch", {
253
+ enumerable: true,
254
+ get: function get() {
255
+ return _blockServiceAPI.writeDataBatch;
256
+ }
257
+ });
276
258
  var _rebaseTransaction = require("./common/rebase-transaction");
277
259
  var _types = require("./common/types");
278
260
  var _useFetchSyncBlockData = require("./hooks/useFetchSyncBlockData");
@@ -289,9 +271,6 @@ var _syncBlockProvider = require("./providers/syncBlockProvider");
289
271
  var _referenceSyncBlockStoreManager = require("./store-manager/referenceSyncBlockStoreManager");
290
272
  var _syncBlockInMemorySessionCache = require("./store-manager/syncBlockInMemorySessionCache");
291
273
  var _syncBlockStoreManager = require("./store-manager/syncBlockStoreManager");
292
- var _sharedSubscriptionUtils = require("./clients/block-service/sharedSubscriptionUtils");
293
- var _relayResponseConverter = require("./utils/relayResponseConverter");
294
- var _relaySubscriptionUtils = require("./utils/relaySubscriptionUtils");
295
274
  var _resolveSyncBlockInstance = require("./utils/resolveSyncBlockInstance");
296
275
  var _resourceId = require("./utils/resourceId");
297
276
  var _utils = require("./utils/utils");