UNPKG

npm-upgrade

Version:

Interactive CLI utility to easily update outdated NPM dependencies

83 lines (82 loc) 2.5 kB
"use strict"; var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault"); Object.defineProperty(exports, "__esModule", { value: true }); exports.default = void 0; var _isObjectLike2 = _interopRequireDefault(require("lodash/isObjectLike")); var _each2 = _interopRequireDefault(require("lodash/each")); var _isEmpty2 = _interopRequireDefault(require("lodash/isEmpty")); var _isEqual2 = _interopRequireDefault(require("lodash/isEqual")); var _cloneDeep2 = _interopRequireDefault(require("lodash/cloneDeep")); var _assign2 = _interopRequireDefault(require("lodash/assign")); var _path = require("path"); var _fs = require("fs"); var _del = _interopRequireDefault(require("del")); var _detectIndent = _interopRequireDefault(require("detect-indent")); var _packageUtils = require("./packageUtils"); const PROJECT_CONFIG_FILENAME = '.npm-upgrade.json'; const path = Symbol('path'); const storedData = Symbol('storedData'); const read = Symbol('read'); const getData = Symbol('getData'); class Config { constructor(opts) { const { projectRoot } = opts || {}; this[path] = (0, _path.resolve)(projectRoot || process.cwd(), PROJECT_CONFIG_FILENAME); this[storedData] = this[read](); (0, _assign2.default)(this, (0, _cloneDeep2.default)(this[storedData])); } save() { const data = this[getData](); if ((0, _isEqual2.default)(data, this[storedData])) return; try { if ((0, _isEmpty2.default)(data)) { this.remove(); } else { const { source: packageSource } = (0, _packageUtils.loadPackageJson)(); const { indent } = (0, _detectIndent.default)(packageSource); (0, _fs.writeFileSync)(this[path], JSON.stringify(data, null, indent)); } } catch (err) { err.message = `Unable to update npm-upgrade config file: ${err.message}`; throw err; } } remove() { return _del.default.sync(this[path]); } [read]() { try { return require(this[path]); } catch (err) { return {}; } } [getData]() { const data = { ...this }; return cleanDeep(data); } } exports.default = Config; function cleanDeep(obj) { (0, _each2.default)(obj, (val, key) => { if ((0, _isObjectLike2.default)(val)) { cleanDeep(val); if ((0, _isEmpty2.default)(val)) { delete obj[key]; } } else if (val === null || val === undefined) { delete obj[key]; } }); return obj; }