diff --git a/global.d.ts b/global.d.ts index d9a1ee34..0c48c098 100644 --- a/global.d.ts +++ b/global.d.ts @@ -7,6 +7,9 @@ declare type IdMap = import('./src/utils/ids.js').IdMap declare type AttrRanges = import('./src/utils/ids.js').AttrRanges declare type AttrRange = import('./src/utils/ids.js').AttrRange declare type ContentAttribute = import('./src/utils/ids.js').ContentAttribute +declare type ContentIds = import('./src/utils/ids.js').ContentIds +declare type ContentMap= import('./src/utils/ids.js').ContentMap + declare type BlockSet = import('./src/utils/BlockSet.js').BlockSet declare type UpdateDecoderV1 = import('./src/utils/UpdateDecoder.js').UpdateDecoderV1 diff --git a/package.json b/package.json index c16f6128..64a6fe8c 100644 --- a/package.json +++ b/package.json @@ -38,7 +38,7 @@ }, "files": [ "src", - "dist", + "dist/src", "tests/testHelper.js", "global.d.ts" ], diff --git a/src/index.js b/src/index.js index 65a2358d..c1f95f23 100644 --- a/src/index.js +++ b/src/index.js @@ -1,3 +1,4 @@ +/// /** eslint-env browser */ // Order matters: follows internals.js ordering to avoid circular dependency issues @@ -27,6 +28,13 @@ export { Skip } from './structs/Skip.js' export * from './utils/meta.js' +/** + * @typedef {import('./utils/ids.js').ContentIds} ContentIds + */ +/** + * @typedef {import('./utils/ids.js').ContentMap} ContentMap + */ + const glo = /** @type {any} */ (typeof globalThis !== 'undefined' ? globalThis : typeof window !== 'undefined' diff --git a/src/utils/AttributionManager.js b/src/utils/AttributionManager.js index 20f934e4..9aeac711 100644 --- a/src/utils/AttributionManager.js +++ b/src/utils/AttributionManager.js @@ -412,7 +412,7 @@ export class DiffAttributionManager extends ObservableV2 { * @param {Doc} prevDoc * @param {Doc} nextDoc * @param {Object} [options] - options for the attribution manager - * @param {import('./meta.js').ContentMap?} [options.attrs] - the attributes to apply to the diff + * @param {ContentMap?} [options.attrs] - the attributes to apply to the diff */ export const createAttributionManagerFromDiff = (prevDoc, nextDoc, options) => new DiffAttributionManager(prevDoc, nextDoc, options) diff --git a/src/utils/UndoManager.js b/src/utils/UndoManager.js index 48116199..5b94f87e 100644 --- a/src/utils/UndoManager.js +++ b/src/utils/UndoManager.js @@ -393,7 +393,7 @@ export class UndoManager extends ObservableV2 { * This is not guaranteed to work on documents with gc enabled! * * @param {Doc} ydoc - * @param {import('./meta.js').ContentIds} contentIds + * @param {ContentIds} contentIds * @param {UndoManagerOptions} opts */ export const undoContentIds = (ydoc, contentIds, opts = {}) => { diff --git a/src/utils/ids.js b/src/utils/ids.js index 7265a6a6..28a554d3 100644 --- a/src/utils/ids.js +++ b/src/utils/ids.js @@ -11,6 +11,15 @@ import { iterateStructs, findIndexSS } from './transaction-helpers.js' import { UpdateEncoderV2, IdSetEncoderV2 } from './UpdateEncoder.js' import { IdSetDecoderV2 } from './UpdateDecoder.js' +/** + * @typedef {{ inserts: IdSet, deletes: IdSet }} ContentIds + */ + +/** + * @typedef {{ inserts: IdMap, deletes: IdMap }} ContentMap + */ + + export class IdRange { /** * @param {number} clock diff --git a/src/utils/meta.js b/src/utils/meta.js index 72f76c69..dd9a3b5d 100644 --- a/src/utils/meta.js +++ b/src/utils/meta.js @@ -4,38 +4,48 @@ import * as decoding from 'lib0/decoding' -import * as ids from './ids.js' +import { + createIdSetFromIdMap, + createDeleteSetFromStructStore, + createInsertSetFromStructStore, + diffIdMap, + mergeIdMaps, + createIdSet, + mergeIdSets, + diffIdSet, + createIdMapFromIdSet, + writeIdSet, + readIdSet, + writeIdMap, + readIdMap, + intersectMaps, + intersectSets, + filterIdMap +} from './ids.js' import { IdSetEncoderV2 } from './UpdateEncoder.js' import { IdSetDecoderV2 } from './UpdateDecoder.js' -/** - * @typedef {{ inserts: IdSet, deletes: IdSet }} ContentIds - */ - -/** - * @typedef {{ inserts: IdMap, deletes: IdMap }} ContentMap - */ - /** * @param {IdSet} inserts * @param {IdSet} deletes + * @return {ContentIds} */ -export const createContentIds = (inserts = ids.createIdSet(), deletes = ids.createIdSet()) => ({ inserts, deletes }) +export const createContentIds = (inserts = createIdSet(), deletes = createIdSet()) => ({ inserts, deletes }) /** * @param {ContentMap} contentMap */ export const createContentIdsFromContentMap = contentMap => createContentIds( - ids.createIdSetFromIdMap(contentMap.inserts), - ids.createIdSetFromIdMap(contentMap.deletes) + createIdSetFromIdMap(contentMap.inserts), + createIdSetFromIdMap(contentMap.deletes) ) /** * @param {import('./Doc.js').Doc} ydoc */ export const createContentIdsFromDoc = ydoc => createContentIds( - ids.createInsertSetFromStructStore(ydoc.store, false), - ids.createDeleteSetFromStructStore(ydoc.store) + createInsertSetFromStructStore(ydoc.store, false), + createDeleteSetFromStructStore(ydoc.store) ) /** @@ -50,36 +60,37 @@ export const createContentIdsFromDocDiff = (ydocPrev, ydocNext) => * @param {ContentIds} excludeContent */ export const excludeContentIds = (content, excludeContent) => - createContentIds(ids.diffIdSet(content.inserts, excludeContent.inserts), ids.diffIdSet(content.deletes, excludeContent.deletes)) + createContentIds(diffIdSet(content.inserts, excludeContent.inserts), diffIdSet(content.deletes, excludeContent.deletes)) /** * @param {ContentMap} content * @param {ContentIds | ContentMap} excludeContent */ export const excludeContentMap = (content, excludeContent) => createContentMap( - ids.diffIdMap(content.inserts, excludeContent.inserts), - ids.diffIdMap(content.deletes, excludeContent.deletes) + diffIdMap(content.inserts, excludeContent.inserts), + diffIdMap(content.deletes, excludeContent.deletes) ) /** * @param {Array} contents */ export const mergeContentMaps = contents => createContentMap( - ids.mergeIdMaps(contents.map(c => c.inserts)), - ids.mergeIdMaps(contents.map(c => c.deletes)) + mergeIdMaps(contents.map(c => c.inserts)), + mergeIdMaps(contents.map(c => c.deletes)) ) /** * @param {Array} contents */ export const mergeContentIds = contents => createContentIds( - ids.mergeIdSets(contents.map(c => c.inserts)), - ids.mergeIdSets(contents.map(c => c.deletes)) + mergeIdSets(contents.map(c => c.inserts)), + mergeIdSets(contents.map(c => c.deletes)) ) /** * @param {IdMap} inserts * @param {IdMap} deletes + * @return {ContentMap} */ export const createContentMap = (inserts, deletes) => ({ inserts, deletes }) @@ -89,8 +100,8 @@ export const createContentMap = (inserts, deletes) => ({ inserts, deletes }) * @param {Array>} [deleteAttrs] */ export const createContentMapFromContentIds = (contentIds, insertAttrs, deleteAttrs = insertAttrs) => createContentMap( - ids.createIdMapFromIdSet(contentIds.inserts, insertAttrs), - ids.createIdMapFromIdSet(contentIds.deletes, deleteAttrs) + createIdMapFromIdSet(contentIds.inserts, insertAttrs), + createIdMapFromIdSet(contentIds.deletes, deleteAttrs) ) /** @@ -98,8 +109,8 @@ export const createContentMapFromContentIds = (contentIds, insertAttrs, deleteAt * @param {ContentIds} contentIds */ export const writeContentIds = (encoder, contentIds) => { - ids.writeIdSet(encoder, contentIds.inserts) - ids.writeIdSet(encoder, contentIds.deletes) + writeIdSet(encoder, contentIds.inserts) + writeIdSet(encoder, contentIds.deletes) } /** @@ -118,8 +129,8 @@ export const encodeContentIds = contentIds => { * @return {ContentIds} */ export const readContentIds = decoder => createContentIds( - ids.readIdSet(decoder), - ids.readIdSet(decoder) + readIdSet(decoder), + readIdSet(decoder) ) /** @@ -134,8 +145,8 @@ export const decodeContentIds = buf => readContentIds(new IdSetDecoderV2(decodin * @param {ContentMap} contentMap */ export const writeContentMap = (encoder, contentMap) => { - ids.writeIdMap(encoder, contentMap.inserts) - ids.writeIdMap(encoder, contentMap.deletes) + writeIdMap(encoder, contentMap.inserts) + writeIdMap(encoder, contentMap.deletes) } /** @@ -145,8 +156,8 @@ export const writeContentMap = (encoder, contentMap) => { * @return {ContentMap} contentMap */ export const readContentMap = (decoder) => createContentMap( - ids.readIdMap(decoder), - ids.readIdMap(decoder) + readIdMap(decoder), + readIdMap(decoder) ) /** @@ -163,8 +174,8 @@ export const encodeContentMap = contentMap => { * @param {ContentMap|ContentIds} mapB */ export const intersectContentMap = (mapA, mapB) => createContentMap( - ids.intersectMaps(mapA.inserts, mapB.inserts), - ids.intersectMaps(mapA.deletes, mapB.deletes) + intersectMaps(mapA.inserts, mapB.inserts), + intersectMaps(mapA.deletes, mapB.deletes) ) /** @@ -172,8 +183,8 @@ export const intersectContentMap = (mapA, mapB) => createContentMap( * @param {ContentIds|ContentMap} setB */ export const intersectContentIds = (setA, setB) => createContentIds( - ids.intersectSets(setA.inserts, setB.inserts), - ids.intersectSets(setA.deletes, setB.deletes) + intersectSets(setA.inserts, setB.inserts), + intersectSets(setA.deletes, setB.deletes) ) /** @@ -187,4 +198,4 @@ export const decodeContentMap = buf => readContentMap(new IdSetDecoderV2(decodin * @param {(c:Array>)=>boolean} insertPredicate * @param {(c:Array>)=>boolean} deletePredicate */ -export const filterContentMap = (contentMap, insertPredicate, deletePredicate) => createContentMap(ids.filterIdMap(contentMap.inserts, insertPredicate), ids.filterIdMap(contentMap.deletes, deletePredicate)) +export const filterContentMap = (contentMap, insertPredicate, deletePredicate) => createContentMap(filterIdMap(contentMap.inserts, insertPredicate), filterIdMap(contentMap.deletes, deletePredicate)) diff --git a/src/utils/updates.js b/src/utils/updates.js index f1c3e9df..0fb0afe2 100644 --- a/src/utils/updates.js +++ b/src/utils/updates.js @@ -232,7 +232,7 @@ export const encodeStateVectorFromUpdate = update => encodeStateVectorFromUpdate /** * @param {Uint8Array} update * @param {typeof UpdateDecoderV2 | typeof UpdateDecoderV1} [YDecoder] - * @return {import('./meta.js').ContentIds} + * @return {ContentIds} */ export const createContentIdsFromUpdateV2 = (update, YDecoder = UpdateDecoderV2) => { const updateDecoder = new YDecoder(decoding.createDecoder(update)) @@ -264,7 +264,7 @@ export const createContentIdsFromUpdateV2 = (update, YDecoder = UpdateDecoderV2) /** * @param {Uint8Array} update - * @return {import('./meta.js').ContentIds} + * @return {ContentIds} */ export const createContentIdsFromUpdate = update => createContentIdsFromUpdateV2(update, UpdateDecoderV1) @@ -523,7 +523,7 @@ export const convertUpdateFormatV2ToV1 = update => convertUpdateFormat(update, f * overlapping portion is included in the result. * * @param {Uint8Array} update - * @param {import('./meta.js').ContentIds} contentIds - Pattern specifying which content to include + * @param {ContentIds} contentIds - Pattern specifying which content to include * @param {typeof UpdateDecoderV1 | typeof UpdateDecoderV2} [YDecoder] * @param {typeof UpdateEncoderV1 | typeof UpdateEncoderV2} [YEncoder] * @return {Uint8Array} @@ -569,7 +569,7 @@ export const intersectUpdateWithContentIdsV2 = (update, contentIds, YDecoder = U * Filter an update (V1 format) to only include content specified by a ContentIds pattern. * * @param {Uint8Array} update - * @param {import('./meta.js').ContentIds} contentIds - Pattern specifying which content to include + * @param {ContentIds} contentIds - Pattern specifying which content to include * @return {Uint8Array} */ export const intersectUpdateWithContentIds = (update, contentIds) =>