resource-types/toml.js

"use strict";
/**
 * @module resource-types/toml
 */
import { getProperty, setProperty } from "dot-prop";
import fs from "fs";
import toml from "@iarna/toml";

/**
 * Set version value in the TOML resource's property (defined in dot-notation).
 *
 * @param {String} version - version value to set
 * @param {Object} resource - resource configuration
 * @param {String} resource.path - path to the TOML file
 * @param {String} resource.params.property - property in dot-notation
 * @param {Object} opts - optional settings
 * @param {Boolean} [opts.dryRun] - when true, TOML file won't be modified
 * @param {Function} cb - standard cb(err, result) callback
 */
function setVersion(version, resource, opts, cb) {
  const property = resource.params.property;
  const data = toml.parse(fs.readFileSync(resource.path, "UTF-8"));
  setProperty(data, property, version);
  if (!opts.dryRun) {
    fs.writeFile(resource.path, toml.stringify(data, null, 2), cb);
  } else {
    cb();
  }
}

/**
 * Get version value from the TOML resource's property (defined in
 * dot-notation).
 *
 * @param {Object} resource - resource configuration
 * @param {String} resource.path - path to the TOML file
 * @param {String} resource.params.property - property in dot-notation
 * @param {Function} cb - standard cb(err, result) callback, result is the
 *   version value
 */
function getVersion(resource, cb) {
  const property = resource.params.property;

  function readCb(err, result) {
    let version;
    if (!err) {
      const data = toml.parse(result);
      version = getProperty(data, property);
    }
    cb(err, version);
  }
  fs.readFile(resource.path, "UTF-8", readCb);
}

const exports = {
  setReleaseVersion: setVersion,
  setPostReleaseVersion: setVersion,
  getVersion: getVersion,
};

export { exports as default };