| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899 |
- // @ts-check
- 'use strict'
- const assert = require('check-types').assert
- /**
- * @import { RawLabel } from './types'
- */
- /**
- * @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
- * @param {number?} authorId
- * @param {Date} timestamp
- * @param {number} version
- */
- 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 {RawLabel} 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 {RawLabel}
- */
- 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}
- */
- getVersion() {
- return this.version
- }
- }
- module.exports = Label
|