index.js 1.5 KB

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