index.js 1.2 KB

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