diff --git a/src/index.js b/src/index.js index c402b968..eb0f5fa0 100644 --- a/src/index.js +++ b/src/index.js @@ -118,13 +118,11 @@ export { getPathTo, Attributions, filterIdMap, - undoContentIds, - createContentIds, - createContentMap, - createContentIdsFromContentMap, - createContentMapFromContentIds + undoContentIds } from './internals.js' +export * from './utils/meta.js' + const glo = /** @type {any} */ (typeof globalThis !== 'undefined' ? globalThis : typeof window !== 'undefined' diff --git a/src/utils/IdSet.js b/src/utils/IdSet.js index 39930cfe..8b42c6b5 100644 --- a/src/utils/IdSet.js +++ b/src/utils/IdSet.js @@ -443,6 +443,8 @@ export const _insertIntoIdSet = (dest, src) => { export const insertIntoIdSet = _insertIntoIdSet /** + * @todo rename to excludeIdSet | excludeIdMap + * * Remove all ranges from `exclude` from `ds`. The result is a fresh IdSet containing all ranges from `idSet` that are not * in `exclude`. * diff --git a/src/utils/UndoManager.js b/src/utils/UndoManager.js index d2aa15b8..85a18d04 100644 --- a/src/utils/UndoManager.js +++ b/src/utils/UndoManager.js @@ -393,7 +393,7 @@ export class UndoManager extends ObservableV2 { /** * @experimental - * + * * This is not guaranteed to work on documents with gc enabled! * * @param {Doc} ydoc diff --git a/src/utils/meta.js b/src/utils/meta.js index 28e4e954..420183c0 100644 --- a/src/utils/meta.js +++ b/src/utils/meta.js @@ -28,6 +28,28 @@ export const createContentIdsFromContentMap = contentMap => createContentIds( idmap.createIdSetFromIdMap(contentMap.deletes) ) +/** + * @param {import('./Doc.js').Doc} ydoc + */ +export const createContentIdsFromDoc = ydoc => createContentIds( + idset.createInsertSetFromStructStore(ydoc.store, false), + idset.createDeleteSetFromStructStore(ydoc.store) +) + +/** + * @param {import('./Doc.js').Doc} ydocPrev + * @param {import('./Doc.js').Doc} ydocNext + */ +export const createContentIdsFromDocDiff = (ydocPrev, ydocNext) => + excludeContentIds(createContentIdsFromDoc(ydocPrev), createContentIdsFromDoc(ydocNext)) + +/** + * @param {ContentIds} content + * @param {ContentIds} excludeContent + */ +export const excludeContentIds = (content, excludeContent) => + createContentIds(idset.diffIdSet(content.inserts, excludeContent.inserts), idset.diffIdSet(content.deletes, excludeContent.deletes)) + /** * @param {import('./IdMap.js').IdMap} inserts * @param {import('./IdMap.js').IdMap} deletes diff --git a/tests/y-text.tests.js b/tests/y-text.tests.js index 10df582b..2f1e09aa 100644 --- a/tests/y-text.tests.js +++ b/tests/y-text.tests.js @@ -2164,7 +2164,7 @@ const qChanges = [ */ const checkResult = result => { for (let i = 1; i < result.testObjects.length; i++) { - t.info('length of text = ' + result.users[i - 1].get('text').length) + // t.info('length of text = ' + result.users[i - 1].get('text').length) const p1 = result.users[i - 1].get('text').toDeltaDeep().children const p2 = result.users[i].get('text').toDeltaDeep().children t.compare(p1, p2)