@gold.au/pancake
Version:
Pancake is an utility to make working with npm modules for the frontend sweet and seamlessly.
147 lines (120 loc) • 5.31 kB
JavaScript
/***************************************************************************************************************************************************************
*
* Checking peerDependencies for conflicts
* This tool was built to make working with npm and the front end easy and seamless.
*
* @repo - https://github.com/designsystemau/pancake
* @author - Dominik Wilkowski
* @license - https://raw.githubusercontent.com/designsystemau/pancake/master/LICENSE (MIT)
*
**************************************************************************************************************************************************************/
; //--------------------------------------------------------------------------------------------------------------------------------------------------------------
// Dependencies
//--------------------------------------------------------------------------------------------------------------------------------------------------------------
var Path = require('path'); //--------------------------------------------------------------------------------------------------------------------------------------------------------------
// Using this file to export the reusable items
//--------------------------------------------------------------------------------------------------------------------------------------------------------------
var _require = require('./files'),
GetFolders = _require.GetFolders,
CreateDir = _require.CreateDir,
WriteFile = _require.WriteFile,
ReadFile = _require.ReadFile,
CopyFile = _require.CopyFile;
var _require2 = require('./helpers'),
ExitHandler = _require2.ExitHandler,
CheckNPM = _require2.CheckNPM,
Cwd = _require2.Cwd,
Size = _require2.Size,
Spawning = _require2.Spawning;
var _require3 = require('./logging'),
Log = _require3.Log,
Style = _require3.Style,
Loading = _require3.Loading;
var _require4 = require('./parse-arguments'),
ParseArgs = _require4.ParseArgs;
var _require5 = require('./conflicts'),
CheckModules = _require5.CheckModules;
var _require6 = require('./modules'),
GetModules = _require6.GetModules;
var _require7 = require('./settings'),
Settings = _require7.Settings;
var Semver = require('./semver-5-3-0');
module.exports = {
//here, take a sword; for you may need it
ExitHandler: ExitHandler,
CheckNPM: CheckNPM,
Cwd: Cwd,
Size: Size,
Spawning: Spawning,
Log: Log,
Style: Style,
Loading: Loading,
ParseArgs: ParseArgs,
CheckModules: CheckModules,
GetModules: GetModules,
Settings: Settings,
GetFolders: GetFolders,
CreateDir: CreateDir,
WriteFile: WriteFile,
ReadFile: ReadFile,
CopyFile: CopyFile,
Semver: Semver
}; //--------------------------------------------------------------------------------------------------------------------------------------------------------------
// Get batter object
//--------------------------------------------------------------------------------------------------------------------------------------------------------------
/**
* Running all the important bits to get us the data we need to run Pancake programmatically
*
* @param {array} argv - The arguments passed to node
*
* @return {Promise object} - The data object of the pancake modules
*/
module.exports.Batter = function () {
var argv = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : process.argv;
var pkg = require(Path.normalize("".concat(__dirname, "/../package.json"))); // Check npm version
var npmVersion = CheckNPM(); //npm 3 and higher is required as below will install dependencies inside each module folder
if (!npmVersion) {
Log.error("Pancake only works with npm 3 and later.");
Log.space();
process.exit(1);
} // Get global settings
var SETTINGS = Settings.GetGlobal(); // Parsing cli arguments
var ARGS = ParseArgs(SETTINGS, argv); //arg overwrites
SETTINGS.npmOrg = ARGS.org;
SETTINGS.plugins = ARGS.plugins;
SETTINGS.ignorePlugins = ARGS.ignorePlugins; // Finding the current working directory
var pkgPath = Cwd(ARGS.cwd); // Get local settings
var SETTINGSlocal = Settings.GetLocal(pkgPath); // Get all modules data
return new Promise(function (resolve, reject) {
GetModules(pkgPath, SETTINGS.npmOrg)["catch"](function (error) {
reject("Reading all package.json files bumped into an error: ".concat(error));
reject(error);
}).then(function (allModules) {
//once we got all the content from all package.json files
Log.verbose("Gathered all modules:\n".concat(Style.yellow(JSON.stringify(allModules))));
if (allModules.length > 0) {
var conflicts = CheckModules(allModules); //check for conflicts
if (conflicts.conflicts) {
reject(conflicts);
} else {
resolve({
version: pkg.version,
modules: allModules,
settings: SETTINGSlocal,
globalSettings: SETTINGS,
cwd: pkgPath
});
}
} else {
resolve({
version: pkg.version,
modules: allModules,
settings: SETTINGSlocal,
globalSettings: SETTINGS,
cwd: pkgPath
});
}
});
});
};