core/manifest_entry.js

const { Context } = require('./context');
const dateFormat = require('dateformat');
const { PersistentObject } = require('./persistent_object');
const { Util } = require('./util');

/**
 * ManifestEntry objects record info about files that were bagged or
 * otherwise packaged in a DART Job. DART records ManifestEntry records
 * for payload files, but not for tag files.
 *
 * Note that if a job was run several times, a file can have several manifest
 * entries, each with a timestamp indicating when it was packaged.
 *
 */
class ManifestEntry extends PersistentObject {
    /**
     * Creates a new ManifestEntry
     *
     * @param {object} opts - Object containing properties to set.
     *
     * @param {string} opts.id - A UUID in hex-string format. This is
     * the object's unique identifier.
     *
     * @param {boolean} opts.userCanDelete - Indicates whether user is
     * allowed to delete this record.
     *
     * @param {string} opts.jobId - The id (UUID) of the job that packaged the
     * files in this manifest.
     *
     * @param {string} opts.origPath - The original path of the file, before it
     * was bagged or otherwise packaged. This is usually an absolute path
     * from the local filesystem or from an attached network share.
     *
     * @param {string} opts.pathInBag - The relative path of the file within the
     * bag or package. For bagged files, this will begin with 'data/'.
     *
     * @param {string} opts.algorithm - The algorithm used to produce the checksums
     * in this manifest. For example, 'md5', 'sha256', etc.
     *
     * @param {string} opts.digest - The digest/checksum of the file.
     */
    constructor(opts = {}) {
        opts.required = ['jobId', 'origPath', 'pathInBag', 'algorithm', 'digest'];
        super(opts);

        /**
          * The id (UUID) of the job that packaged the files in this manifest.
          *
          * @type {string}
          */
        this.jobId = opts.jobId || null;

        /**
          * The original path of the file, before it was bagged or otherwise
          * packaged. This is usually an absolute path from the local filesystem
          * or from an attached network share.
          *
          * @type {string}
          */
        this.origPath = opts.origPath || "";

        /**
          * The relative path of the file within the bag or package. For bagged
          * files, this will begin with 'data/'.
          *
          * @type {string}
          */
        this.pathInBag = opts.pathInBag || "";

        /**
          * The algorithm used to produce the checksums in this manifest.
          * For example, 'md5', 'sha256', etc.
          *
          * @type {string}
          */
        this.algorithm = opts.algorithm || "";

        /**
          * The digest/checksum of the file.
          *
          * @type {string}
          */
        this.digest = opts.digest || "";

        /**
          * The date and time this manifest was created, in ISO datetime
          * format. If a job was run multiple times, it can have multiple
          * manifests, each with its own timestamp. The timestamp value
          * shows when the job finished packaging the files. The packaging
          * process would have started before this timestamp, and if the job
          * included an upload step, the job itself would have completed
          * after this timestamp.
          *
          * @type {string}
          */
        this.timestamp = dateFormat(Date.now(), 'isoUtcDateTime');
    }

    /**
     * validate returns true or false, indicating whether this object
     * contains complete and valid data. If it returns false, check
     * the errors property for specific errors.
     *
     * @returns {boolean}
     */
    validate() {
        return super.validate();
    }

}

Object.assign(ManifestEntry, PersistentObject);

module.exports.ManifestEntry = ManifestEntry;