index.js 1.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960
  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. let RestoreFileOrigin = null
  7. /**
  8. * An Origin records where a {@link Change} came from. The Origin class handles
  9. * simple tag origins, like "it came from rich text mode", or "it came from
  10. * uploading files". Its subclasses record more detailed data for Changes such
  11. * as restoring a version.
  12. */
  13. class Origin {
  14. /**
  15. * @param {string} kind
  16. */
  17. constructor(kind) {
  18. assert.string(kind, 'Origin: bad kind')
  19. this.kind = kind
  20. }
  21. /**
  22. * Create an Origin from its raw form.
  23. *
  24. * @param {Object} [raw]
  25. * @return {Origin | null}
  26. */
  27. static fromRaw(raw) {
  28. if (!raw) return null
  29. if (raw.kind === RestoreOrigin.KIND) return RestoreOrigin.fromRaw(raw)
  30. if (raw.kind === RestoreFileOrigin.KIND)
  31. return RestoreFileOrigin.fromRaw(raw)
  32. return new Origin(raw.kind)
  33. }
  34. /**
  35. * Convert the Origin to raw form for storage or transmission.
  36. *
  37. * @return {Object}
  38. */
  39. toRaw() {
  40. return { kind: this.kind }
  41. }
  42. /**
  43. * @return {string}
  44. */
  45. getKind() {
  46. return this.kind
  47. }
  48. }
  49. module.exports = Origin
  50. RestoreOrigin = require('./restore_origin')
  51. RestoreFileOrigin = require('./restore_file_origin')