operations.ts 997 B

123456789101112131415161718192021222324252627282930313233343536373839
  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 isDeleteChange = (
  22. change: Change<EditOperation>
  23. ): change is Change<DeleteOperation> => isDeleteOperation(change.op)
  24. export const visibleTextLength = (op: AnyOperation) => {
  25. if (isCommentOperation(op)) {
  26. return op.c.length
  27. }
  28. if (isInsertOperation(op)) {
  29. return op.i.length
  30. }
  31. return 0
  32. }