index.js 1.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556
  1. 'use strict'
  2. const assert = require('check-types').assert
  3. // Dependencies are loaded at the bottom of the file to mitigate circular
  4. // dependency
  5. let RestoreOrigin = null
  6. /**
  7. * An Origin records where a {@link Change} came from. The Origin class handles
  8. * simple tag origins, like "it came from rich text mode", or "it came from
  9. * uploading files". Its subclasses record more detailed data for Changes such
  10. * as restoring a version.
  11. */
  12. class Origin {
  13. /**
  14. * @param {string} kind
  15. */
  16. constructor(kind) {
  17. assert.string(kind, 'Origin: bad kind')
  18. this.kind = kind
  19. }
  20. /**
  21. * Create an Origin from its raw form.
  22. *
  23. * @param {Object} [raw]
  24. * @return {Origin | null}
  25. */
  26. static fromRaw(raw) {
  27. if (!raw) return null
  28. if (raw.kind === RestoreOrigin.KIND) return RestoreOrigin.fromRaw(raw)
  29. return new Origin(raw.kind)
  30. }
  31. /**
  32. * Convert the Origin to raw form for storage or transmission.
  33. *
  34. * @return {Object}
  35. */
  36. toRaw() {
  37. return { kind: this.kind }
  38. }
  39. /**
  40. * @return {string}
  41. */
  42. getKind() {
  43. return this.kind
  44. }
  45. }
  46. module.exports = Origin
  47. RestoreOrigin = require('./restore_origin')