navy
Version:
Quick and powerful development environments using Docker and Docker Compose
83 lines (66 loc) • 2.68 kB
JavaScript
;
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.deleteState = deleteState;
exports.getState = getState;
exports.pathToNavy = pathToNavy;
exports.pathToNavyRoot = pathToNavyRoot;
exports.pathToNavys = pathToNavys;
exports.pathToState = pathToState;
exports.saveState = saveState;
var _path = _interopRequireDefault(require("path"));
var _invariant = _interopRequireDefault(require("invariant"));
var _bluebird = _interopRequireDefault(require("bluebird"));
var _fs = _interopRequireDefault(require("../util/fs"));
const debug = require('debug')('navy:state');
const mkdirp = _bluebird.default.promisify(require('mkdirp'));
const rimraf = _bluebird.default.promisify(require('rimraf'));
function pathToNavyRoot() {
const home = process.env.HOME;
(0, _invariant.default)(home, "NO_HOME_DIRECTORY: No home directory available");
return _path.default.join(home, '.navy');
}
function pathToNavys() {
return _path.default.join(pathToNavyRoot(), 'navies');
}
function pathToNavy(normalisedEnvName) {
return _path.default.join(pathToNavys(), normalisedEnvName);
}
function pathToState(normalisedEnvName) {
return _path.default.join(pathToNavy(normalisedEnvName), 'state.json');
}
/* eslint-disable no-use-before-define */
async function getState(normalisedEnvName) {
/* eslint-enable no-use-before-define */
try {
const statePath = pathToState(normalisedEnvName);
const file = (await _fs.default.readFileAsync(statePath)).toString();
debug('Got raw state for env ' + normalisedEnvName, statePath, file);
return JSON.parse(file);
} catch (ex) {
return null;
}
}
async function saveState(normalisedEnvName, state) {
const statePath = pathToState(normalisedEnvName);
await mkdirp(_path.default.dirname(statePath));
debug('Writing state for env ' + normalisedEnvName, statePath, state);
await _fs.default.writeFileAsync(statePath, JSON.stringify(state, null, 2));
}
async function deleteState(normalisedEnvName) {
debug('Deleting state for env ' + normalisedEnvName);
await rimraf(_path.default.dirname(pathToState(normalisedEnvName)));
}
/**
* A "state" object of the current services, and other internal Navy state.
* This can be used to hang "state" off services which can then be used by middleware at runtime to modify the
* runtime configuration.
*
* Accessing internal properties on state (properties other than "services") is not supported and backwards
* compatibility is not guaranteed.
*
* @public
* @property {object} services An object hash of the state of each service
*/