operations.ts 1.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243
  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 isEditOperation = (op: Operation): op is EditOperation =>
  17. isInsertOperation(op) || isDeleteOperation(op)
  18. export const isInsertChange = (
  19. change: Change<EditOperation>
  20. ): change is Change<InsertOperation> => isInsertOperation(change.op)
  21. export const isCommentChange = (
  22. change: Change<CommentOperation>
  23. ): change is Change<CommentOperation> => isCommentOperation(change.op)
  24. export const isDeleteChange = (
  25. change: Change<EditOperation>
  26. ): change is Change<DeleteOperation> => isDeleteOperation(change.op)
  27. export const visibleTextLength = (op: AnyOperation) => {
  28. if (isCommentOperation(op)) {
  29. return op.c.length
  30. }
  31. if (isInsertOperation(op)) {
  32. return op.i.length
  33. }
  34. return 0
  35. }