978c471deb7a0e74ba88187bcd511c451f0fc7370f59271bbf106a772a5a3a5070c8a43e4adb6c7f7e346758a0a4b89c63e81fe4e2322ca7ecff81d32ec1e7 665 B

1234567891011121314151617181920212223242526
  1. import AttributeMap from './AttributeMap';
  2. interface Op {
  3. // only one property out of {insert, delete, retain} will be present
  4. insert?: string | Record<string, unknown>;
  5. delete?: number;
  6. retain?: number | Record<string, unknown>;
  7. attributes?: AttributeMap;
  8. }
  9. namespace Op {
  10. export function length(op: Op): number {
  11. if (typeof op.delete === 'number') {
  12. return op.delete;
  13. } else if (typeof op.retain === 'number') {
  14. return op.retain;
  15. } else if (typeof op.retain === 'object' && op.retain !== null) {
  16. return 1;
  17. } else {
  18. return typeof op.insert === 'string' ? op.insert.length : 1;
  19. }
  20. }
  21. }
  22. export default Op;