@wordpress/sync
Version:
60 lines • 2.12 kB
TypeScript
/**
* WordPress dependencies
*/
import type { UndoManager as WPUndoManager } from '@wordpress/undo-manager';
/**
* External dependencies
*/
import type * as Y from 'yjs';
/**
* Internal dependencies
*/
import type { WORDPRESS_META_KEY_FOR_CRDT_DOC_PERSISTENCE } from './config';
declare global {
interface Window {
__experimentalCollaborativeEditingSecret?: string;
wp?: {
ajax?: {
settings?: {
url?: string;
};
};
};
}
}
export type CRDTDoc = Y.Doc;
export type EntityID = string;
export type ObjectID = string;
export type ObjectType = string;
export type Origin = any;
export interface ObjectData extends Record<string, unknown> {
meta?: ObjectMeta;
}
export interface ObjectMeta extends Record<string, unknown> {
[WORDPRESS_META_KEY_FOR_CRDT_DOC_PERSISTENCE]?: string;
}
export interface ProviderCreatorResult {
destroy: () => void;
}
export type ProviderCreator = (objectType: ObjectType, objectId: ObjectID, ydoc: Y.Doc) => Promise<ProviderCreatorResult>;
export interface RecordHandlers {
editRecord: (data: Partial<ObjectData>) => void;
getEditedRecord: () => Promise<ObjectData>;
saveRecord: () => Promise<void>;
}
export interface SyncConfig {
applyChangesToCRDTDoc: (ydoc: Y.Doc, changes: Partial<ObjectData>) => void;
getChangesFromCRDTDoc: (ydoc: Y.Doc, editedRecord: ObjectData) => ObjectData;
supports?: Record<string, true>;
}
export interface SyncManager {
createMeta: (objectType: ObjectType, objectId: ObjectID) => Record<string, string>;
load: (syncConfig: SyncConfig, objectType: ObjectType, objectId: ObjectID, record: ObjectData, handlers: RecordHandlers) => Promise<void>;
undoManager: SyncUndoManager;
unload: (objectType: ObjectType, objectId: ObjectID) => void;
update: (objectType: ObjectType, objectId: ObjectID, changes: Partial<ObjectData>, origin: string) => void;
}
export interface SyncUndoManager extends WPUndoManager<ObjectData> {
addToScope: (ymap: Y.Map<any>) => void;
}
//# sourceMappingURL=types.d.ts.map