import * as plugins from './npmextra.plugins.js'; import * as paths from './npmextra.paths.js'; /** * Npmextra class allows easy configuration of tools */ export class Npmextra { cwd: string; lookupPath: string; npmextraJsonExists: boolean; npmextraJsonData: any; /** * creates instance of Npmextra */ constructor(cwdArg?: string) { if (cwdArg) { this.cwd = cwdArg; } else { this.cwd = paths.cwd; } this.checkLookupPath(); this.checkNpmextraJsonExists(); this.checkNpmextraJsonData(); } /** * merges the supplied options with the ones from npmextra.json */ dataFor(toolnameArg: string, defaultOptionsArg: any): IToolConfig { let npmextraToolOptions; if (this.npmextraJsonData[toolnameArg]) { npmextraToolOptions = this.npmextraJsonData[toolnameArg]; } else { npmextraToolOptions = {}; } let mergedOptions = { ...defaultOptionsArg, ...npmextraToolOptions, }; return mergedOptions; } /** * checks if the JSON exists */ private checkNpmextraJsonExists() { this.npmextraJsonExists = plugins.smartfile.fs.fileExistsSync(this.lookupPath); } /** * gets lookupPath */ private checkLookupPath() { if (this.cwd) { this.lookupPath = plugins.path.join(this.cwd, 'npmextra.json'); } else { this.lookupPath = paths.configFile; } } /** * get npmextraJsonData */ private checkNpmextraJsonData() { if (this.npmextraJsonExists) { this.npmextraJsonData = plugins.smartfile.fs.toObjectSync(this.lookupPath); } else { this.npmextraJsonData = {}; } } }