operations.ts 1016 B

12345678910111213141516171819202122232425262728293031323334353637383940
  1. import {
  2. AnyOperation,
  3. Change,
  4. CommentOperation,
  5. DeleteOperation,
  6. EditOperation,
  7. InsertOperation,
  8. Operation,
  9. } from '../../../types/change'
  10. export const isInsertOperation = (op: Operation): op is InsertOperation =>
  11. 'i' in op
  12. export const isCommentOperation = (op: Operation): op is CommentOperation =>
  13. 'c' in op
  14. export const isDeleteOperation = (op: Operation): op is DeleteOperation =>
  15. 'd' in op
  16. export const isInsertChange = (
  17. change: Change<EditOperation>
  18. ): change is Change<InsertOperation> => isInsertOperation(change.op)
  19. export const isCommentChange = (
  20. change: Change<CommentOperation>
  21. ): change is Change<CommentOperation> => isCommentOperation(change.op)
  22. export const isDeleteChange = (
  23. change: Change<EditOperation>
  24. ): change is Change<DeleteOperation> => isDeleteOperation(change.op)
  25. export const visibleTextLength = (op: AnyOperation) => {
  26. if (isCommentOperation(op)) {
  27. return op.c.length
  28. }
  29. if (isInsertOperation(op)) {
  30. return op.i.length
  31. }
  32. return 0
  33. }