| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283 |
- // @ts-check
- 'use strict'
- const _ = require('lodash')
- /**
- * @import File from "./file"
- * @import Snapshot from "./snapshot"
- * @import { RawV2DocVersions } from "./types"
- */
- class V2DocVersions {
- /**
- * @param {RawV2DocVersions} data
- */
- constructor(data) {
- this.data = data || {}
- }
- /**
- * @param {RawV2DocVersions?} [raw]
- * @return {V2DocVersions|undefined}
- */
- static fromRaw(raw) {
- if (!raw) return undefined
- return new V2DocVersions(raw)
- }
- /**
- * @return {RawV2DocVersions|null}
- */
- toRaw() {
- if (!this.data) return null
- const raw = _.clone(this.data)
- return raw
- }
- /**
- * Clone this object.
- *
- * @return {V2DocVersions|undefined} a new object of the same type
- */
- clone() {
- return V2DocVersions.fromRaw(this.toRaw())
- }
- /**
- * @param {Snapshot} snapshot
- */
- applyTo(snapshot) {
- // Only update the snapshot versions if we have new versions
- if (!_.size(this.data)) return
- // Create v2DocVersions in snapshot if it does not exist
- // otherwise update snapshot v2docversions
- if (!snapshot.v2DocVersions) {
- snapshot.v2DocVersions = this.clone()
- } else {
- _.assign(snapshot.v2DocVersions.data, this.data)
- }
- }
- /**
- * Move or remove a doc.
- * Must be called after FileMap#moveFile, which validates the paths.
- * @param {string} pathname
- * @param {string} newPathname
- */
- moveFile(pathname, newPathname) {
- for (const [id, v] of Object.entries(this.data)) {
- if (v.pathname !== pathname) continue
- if (newPathname === '') {
- delete this.data[id]
- } else {
- v.pathname = newPathname
- }
- break
- }
- }
- }
- module.exports = V2DocVersions
|