UNPKG

@wordpress/core-data

Version:
8 lines (7 loc) 2.54 kB
{ "version": 3, "sources": ["../../src/utils/save-crdt-doc.js"], "sourcesContent": ["import apiFetch from '@wordpress/api-fetch';\nimport { getSyncManager } from '../sync';\n\nconst SYNC_SAVE_API_PATH = '/wp-sync/v1/save';\nconst saveCRDTDocQueues = new Map();\n\nasync function serializeAndSaveCRDTDoc( objectType, objectId, room ) {\n\tconst serializedDoc = await getSyncManager()?.createPersistedCRDTDoc(\n\t\tobjectType,\n\t\tobjectId\n\t);\n\n\tif ( ! serializedDoc ) {\n\t\treturn;\n\t}\n\n\tawait apiFetch( {\n\t\tpath: SYNC_SAVE_API_PATH,\n\t\tmethod: 'POST',\n\t\tdata: {\n\t\t\troom,\n\t\t\tdoc: serializedDoc,\n\t\t},\n\t} );\n}\n\n/**\n * Persist the current CRDT document through the sync /save endpoint.\n *\n * @param {import('@wordpress/sync').ObjectType} objectType Object type.\n * @param {import('@wordpress/sync').ObjectID} objectId Object ID.\n */\nexport async function saveCRDTDoc( objectType, objectId ) {\n\tconst room = `${ objectType }:${ objectId }`;\n\n\t// Saves are chained per-room, which forms a queue.\n\t// Without a queue, two /save calls might fire close together with a risk\n\t// that the older serialized CRDT snapshot completes after the newer one and\n\t// overwrites it with stale data.\n\t// Wait for the prior request chain to complete before firing the next save.\n\tconst previousSave = saveCRDTDocQueues.get( room ) || Promise.resolve();\n\n\tconst currentSave = previousSave\n\t\t// A failed save should reject its caller, but not block later saves.\n\t\t.catch( () => {} )\n\t\t.then( () => serializeAndSaveCRDTDoc( objectType, objectId, room ) );\n\n\tsaveCRDTDocQueues.set( room, currentSave );\n\n\ttry {\n\t\tawait currentSave;\n\t} finally {\n\t\tif ( saveCRDTDocQueues.get( room ) === currentSave ) {\n\t\t\tsaveCRDTDocQueues.delete( room );\n\t\t}\n\t}\n}\n"], "mappings": ";AAAA,OAAO,cAAc;AACrB,SAAS,sBAAsB;AAE/B,IAAM,qBAAqB;AAC3B,IAAM,oBAAoB,oBAAI,IAAI;AAElC,eAAe,wBAAyB,YAAY,UAAU,MAAO;AACpE,QAAM,gBAAgB,MAAM,eAAe,GAAG;AAAA,IAC7C;AAAA,IACA;AAAA,EACD;AAEA,MAAK,CAAE,eAAgB;AACtB;AAAA,EACD;AAEA,QAAM,SAAU;AAAA,IACf,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,MAAM;AAAA,MACL;AAAA,MACA,KAAK;AAAA,IACN;AAAA,EACD,CAAE;AACH;AAQA,eAAsB,YAAa,YAAY,UAAW;AACzD,QAAM,OAAO,GAAI,UAAW,IAAK,QAAS;AAO1C,QAAM,eAAe,kBAAkB,IAAK,IAAK,KAAK,QAAQ,QAAQ;AAEtE,QAAM,cAAc,aAElB,MAAO,MAAM;AAAA,EAAC,CAAE,EAChB,KAAM,MAAM,wBAAyB,YAAY,UAAU,IAAK,CAAE;AAEpE,oBAAkB,IAAK,MAAM,WAAY;AAEzC,MAAI;AACH,UAAM;AAAA,EACP,UAAE;AACD,QAAK,kBAAkB,IAAK,IAAK,MAAM,aAAc;AACpD,wBAAkB,OAAQ,IAAK;AAAA,IAChC;AAAA,EACD;AACD;", "names": [] }