UNPKG

@wordpress/core-data

Version:
8 lines (7 loc) 3.79 kB
{ "version": 3, "sources": ["../src/sync.ts"], "sourcesContent": ["import {\n\tprivateApis as syncPrivateApis,\n\ttype SyncManager,\n} from '@wordpress/sync';\nimport { unlock } from './lock-unlock';\n\nconst {\n\tConnectionErrorCode,\n\tcreateSyncManager,\n\tDelta,\n\tCRDT_DOC_META_PERSISTENCE_KEY,\n\tCRDT_RECORD_MAP_KEY,\n\tLOCAL_EDITOR_ORIGIN,\n\tLOCAL_UNDO_IGNORED_ORIGIN,\n\tretrySyncConnection,\n} = unlock( syncPrivateApis );\n\nexport {\n\tConnectionErrorCode,\n\tDelta,\n\tCRDT_DOC_META_PERSISTENCE_KEY,\n\tCRDT_RECORD_MAP_KEY,\n\tLOCAL_EDITOR_ORIGIN,\n\tLOCAL_UNDO_IGNORED_ORIGIN,\n\tretrySyncConnection,\n};\n\n/**\n * Key under which an autosave records the CRDT snapshot describing its\n * content. Used both as the REST autosave request parameter and as the key in\n * the local (sessionStorage) autosave backup.\n *\n * This string must match CRDT_SNAPSHOT_PARAM in\n * Gutenberg_REST_Autosaves_Controller on the PHP side.\n */\nexport const CRDT_AUTOSAVE_SNAPSHOT_KEY = 'crdt_snapshot';\n\nlet syncManager: SyncManager;\n\nexport function getSyncManager(): SyncManager | undefined {\n\tif ( syncManager ) {\n\t\treturn syncManager;\n\t}\n\n\tsyncManager = createSyncManager();\n\n\treturn syncManager;\n}\n\n/**\n * Return whether a sync manager has already been created. Use this when you\n * only want to interact with an existing sync manager (e.g. to tear it down),\n * without `getSyncManager()` bootstrapping one if none exists.\n */\nexport function hasSyncManager(): boolean {\n\treturn Boolean( syncManager );\n}\n\n/**\n * Encode a synced entity's current CRDT state as a snapshot. Returns undefined\n * when the entity is not being synced.\n *\n * @param {string} kind Entity kind.\n * @param {string} name Entity name.\n * @param {string|number} recordId Record ID.\n * @return {string|undefined} Base64-encoded snapshot.\n */\nexport function getEntitySnapshot(\n\tkind: string,\n\tname: string,\n\trecordId: string | number\n): string | undefined {\n\tif ( ! hasSyncManager() ) {\n\t\treturn undefined;\n\t}\n\n\treturn getSyncManager()?.getEntitySnapshot(\n\t\t`${ kind }/${ name }`,\n\t\t`${ recordId }`\n\t);\n}\n\n/**\n * Determine whether a synced entity's CRDT document contains everything the\n * given snapshot describes. Returns false when the entity is not being synced\n * or the snapshot cannot be decoded, so callers fail open.\n *\n * @param {string} kind Entity kind.\n * @param {string} name Entity name.\n * @param {string|number} recordId Record ID.\n * @param {string} encodedSnapshot Base64-encoded snapshot.\n * @return {boolean} Whether the document contains the snapshotted state.\n */\nexport function entityContainsSnapshot(\n\tkind: string,\n\tname: string,\n\trecordId: string | number,\n\tencodedSnapshot: string\n): boolean {\n\tif ( ! hasSyncManager() ) {\n\t\treturn false;\n\t}\n\n\treturn (\n\t\tgetSyncManager()?.entityContainsSnapshot(\n\t\t\t`${ kind }/${ name }`,\n\t\t\t`${ recordId }`,\n\t\t\tencodedSnapshot\n\t\t) ?? false\n\t);\n}\n"], "mappings": ";AAAA;AAAA,EACC,eAAe;AAAA,OAET;AACP,SAAS,cAAc;AAEvB,IAAM;AAAA,EACL;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACD,IAAI,OAAQ,eAAgB;AAoBrB,IAAM,6BAA6B;AAE1C,IAAI;AAEG,SAAS,iBAA0C;AACzD,MAAK,aAAc;AAClB,WAAO;AAAA,EACR;AAEA,gBAAc,kBAAkB;AAEhC,SAAO;AACR;AAOO,SAAS,iBAA0B;AACzC,SAAO,QAAS,WAAY;AAC7B;AAWO,SAAS,kBACf,MACA,MACA,UACqB;AACrB,MAAK,CAAE,eAAe,GAAI;AACzB,WAAO;AAAA,EACR;AAEA,SAAO,eAAe,GAAG;AAAA,IACxB,GAAI,IAAK,IAAK,IAAK;AAAA,IACnB,GAAI,QAAS;AAAA,EACd;AACD;AAaO,SAAS,uBACf,MACA,MACA,UACA,iBACU;AACV,MAAK,CAAE,eAAe,GAAI;AACzB,WAAO;AAAA,EACR;AAEA,SACC,eAAe,GAAG;AAAA,IACjB,GAAI,IAAK,IAAK,IAAK;AAAA,IACnB,GAAI,QAAS;AAAA,IACb;AAAA,EACD,KAAK;AAEP;", "names": [] }