All files / src/utils createJsonEditor.js

81.25% Statements 26/32
50% Branches 7/14
81.82% Functions 9/11
81.48% Lines 22/27

Press n or j to go to the next uncovered block, b, p or k for the previous block.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62          24x 24x             81x 87x   87x 87x 87x     31x 31x 31x 31x     5x 5x     51x 51x 51x 51x                                       3x 3x 3x 3x 3x      
import {join} from 'path';
import {existsSync} from 'fs-extra';
import BasicEditor from './BasicEditor';
import {parse} from './common';
 
const {assign} = Object;
const INDENT_SPACES = 4;
/**
 * Create and edit a JSON file with a fluent API
 * @param {string} filename Name of file to edit
 * @param {object} [contents={}] Contents of file
 * @return {JsonEditor} JsonEditor class (extends {@link BasicEditor})
 */
export const createJsonEditor = (filename, contents = {}) => class JsonEditor extends BasicEditor {
    contents = contents;
    constructor(cwd = process.cwd()) {
        super();
        const path = join(cwd, filename);
        assign(this, {path});
    }
    create() {
        const self = this;
        const {contents, fs, path, queue} = self;
        existsSync(path) || queue.add(() => fs.writeJSON(path, contents, null, INDENT_SPACES));
        return self;
    }
    read() {
        const {fs, path} = this;
        return fs.readJSON(path) || '';
    }
    extend(contents) {
        const self = this;
        const {fs, path, queue} = self;
        queue.add(() => fs.extendJSON(path, contents, null, INDENT_SPACES));
        return self;
    }
    /**
     * Check if package.json manifest file has dependencies (dependencies or devDependencies)
     * @param  {...string} modules npm module names
     * @return {Boolean} Has at least one dependency (true) or none (false)
     */
    hasSome(...modules) {
        const {keys} = Object;
        const pkg = this.read();
        const {dependencies, devDependencies} = parse(pkg);
        const installed = [...keys(dependencies ? dependencies : {}), ...keys(devDependencies ? devDependencies : {})];
        return modules.some(module => installed.includes(module));
    }
    /**
     * Check if package.json manifest file has dependencies (dependencies or devDependencies)
     * @param  {...string} modules npm module names
     * @return {Boolean} Has all dependencies (true) or not all (false)
     */
    hasAll(...modules) {
        const {keys} = Object;
        const pkg = this.read();
        const {dependencies, devDependencies} = parse(pkg);
        const installed = [...keys(dependencies ? dependencies : {}), ...keys(devDependencies ? devDependencies : {})];
        return modules.every(module => installed.includes(module));
    }
};
export default createJsonEditor;