const fs = require('fs')
/**
* @module PackageJson
*/
/**
* This function reads and returns as a JSON object the package.json from a specific
* path in a sync way.
* @param {string} pathName
*/
exports.readSync = function (pathName = './') {
let packageJson = JSON.parse(fs.readFileSync(`${pathName}/package.json`, 'utf8'))
return packageJson
}
/**
* This function writes a package.json inside a specific path in a sync way.
* @param {object} packageContent
* @param {string} pathName
*/
exports.writeSync = function (packageContent, pathName = './') {
let fileData = JSON.stringify(packageContent, null, 2)
fs.writeFileSync(`${pathName}/package.json`, fileData, 'utf8')
}
/**
* This function adds a script on a package.json file from a specific
* path in a sync way.
* @param {string} scriptName
* @param {string} scriptContent
* @param {string} pathName
*/
exports.addScriptSync = function (scriptName, scriptContent, pathName = './') {
let packageJson = this.readSync(pathName)
packageJson.scripts[scriptName] = scriptContent
this.writeSync(packageJson, pathName)
}
/**
* This functions adds a main on a package.json file in a sync way.
* @param {string} main
* @param {string} pathName
*/
exports.addMainSync = function (main, pathName = './') {
let packageJson = this.readSync(pathName)
packageJson.main = main
this.writeSync(packageJson, pathName)
}
/**
* This functions adds a description on a package.json file in a sync way.
* @param {string} description
* @param {string} pathName
*/
exports.addDescriptionSync = function (description, pathName = './') {
let packageJson = this.readSync(pathName)
packageJson.description = description
this.writeSync(packageJson, pathName)
}
/**
* This functions adds repository fields on a package.json file in a sync way.
* @param {string} type
* @param {string} url
* @param {string} pathName
*/
exports.addRepositoryFieldsSync = function (type, url, pathName = './') {
let packageJson = this.readSync(pathName)
if (!packageJson.repository) {
packageJson.repository = {}
}
packageJson.repository.type = type
packageJson.repository.url = url
this.writeSync(packageJson, pathName)
}
/**
* This functions adds a license on a package.json file in a sync way.
* @param {string} license
* @param {string} pathName
*/
exports.addLicenseSync = function (license, pathName = './') {
let packageJson = this.readSync(pathName)
packageJson.license = license
this.writeSync(packageJson, pathName)
}
/**
* This function adds a engine information on a package.json file in a sync way.
* @param {string} engineName
* @param {string} engineValue
* @param {string} pathName
*/
exports.addEngineSync = function (engineName, engineValue, pathName = './') {
let packageJson = this.readSync(pathName)
if (!packageJson.engines) {
packageJson.engines = {}
}
packageJson.engines[engineName] = engineValue
this.writeSync(packageJson, pathName)
}
/**
* This functions adds a babel preset on a package.json file in a sync way.
* @param {string} preset
* @param {string} pathName
*/
exports.addBabelPresetSync = function (preset, pathName = './') {
let packageJson = this.readSync(pathName)
if (!packageJson.babel) {
packageJson.babel = {}
}
if (!packageJson.babel.presets) {
packageJson.babel.presets = []
}
packageJson.babel.presets.push(preset)
this.writeSync(packageJson, pathName)
}