overleaf/libraries/overleaf-editor-core/lib/label.js
Eric Mc Sween d54bcc4aa9 Merge pull request #14418 from overleaf/em-history-lib-es6-classes
Move overleaf-editor-core code to ES6 classes

GitOrigin-RevId: f9b50579aec0cef9d9e6aefcfcb3e380fae4b6f4
2023-08-23 08:05:34 +00:00

91 lines
1.8 KiB
JavaScript

'use strict'
const assert = require('check-types').assert
/**
* @classdesc
* A user-configurable label that can be attached to a specific change. Labels
* are not versioned, and they are not stored alongside the Changes in Chunks.
* They are instead intended to provide external markers into the history of the
* project.
*/
class Label {
/**
* @constructor
* @param {string} text
*/
constructor(text, authorId, timestamp, version) {
assert.string(text, 'bad text')
assert.maybe.integer(authorId, 'bad author id')
assert.date(timestamp, 'bad timestamp')
assert.integer(version, 'bad version')
this.text = text
this.authorId = authorId
this.timestamp = timestamp
this.version = version
}
/**
* Create a Label from its raw form.
*
* @param {Object} raw
* @return {Label}
*/
static fromRaw(raw) {
return new Label(
raw.text,
raw.authorId,
new Date(raw.timestamp),
raw.version
)
}
/**
* Convert the Label to raw form for transmission.
*
* @return {Object}
*/
toRaw() {
return {
text: this.text,
authorId: this.authorId,
timestamp: this.timestamp.toISOString(),
version: this.version,
}
}
/**
* @return {string}
*/
getText() {
return this.text
}
/**
* The ID of the author, if any. Note that we now require all saved versions to
* have an author, but this was not always the case, so we have to allow nulls
* here for historical reasons.
*
* @return {number | null | undefined}
*/
getAuthorId() {
return this.authorId
}
/**
* @return {Date}
*/
getTimestamp() {
return this.timestamp
}
/**
* @return {number | undefined}
*/
getVersion() {
return this.version
}
}
module.exports = Label