UNPKG

navy

Version:

Quick and powerful development environments using Docker and Docker Compose

83 lines (66 loc) 2.68 kB
"use strict"; 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 */