embark/lib/config.js

136 lines
4.9 KiB
JavaScript
Raw Normal View History

2016-08-22 03:40:05 +00:00
var fs = require('fs');
var grunt = require('grunt');
var merge = require('merge');
2016-10-29 17:50:54 +00:00
var path = require('path');
2017-01-26 11:34:00 +00:00
var Plugins = require('./plugins.js');
2016-08-22 03:40:05 +00:00
2016-09-25 01:10:47 +00:00
// TODO: add wrapper for fs so it can also work in the browser
// can work with both read and save
var Config = function(options) {
this.env = options.env;
2016-08-22 03:40:05 +00:00
this.blockchainConfig = {};
this.contractsConfig = {};
this.pipelineConfig = {};
2016-09-25 01:10:47 +00:00
this.chainTracker = {};
2016-08-22 03:40:05 +00:00
this.assetFiles = {};
this.contractsFiles = [];
this.configDir = options.configDir || 'config/';
this.chainsFile = options.chainsFile || './chains.json';
2017-01-26 11:34:00 +00:00
this.logger = options.logger;
2016-08-22 03:40:05 +00:00
};
Config.prototype.loadConfigFiles = function(options) {
this.embarkConfig = JSON.parse(fs.readFileSync(options.embarkConfig));
this.loadPipelineConfigFile();
this.loadBlockchainConfigFile();
2017-01-26 11:34:00 +00:00
this.plugins = new Plugins({plugins: this.embarkConfig.plugins, logger: this.logger});
this.plugins.loadPlugins();
2016-08-22 03:40:05 +00:00
this.loadContractsConfigFile();
2016-09-25 01:10:47 +00:00
this.loadChainTrackerFile();
2017-01-26 11:34:00 +00:00
this.loadPluginContractFiles();
2016-08-22 03:40:05 +00:00
};
Config.prototype.reloadConfig = function() {
this.loadPipelineConfigFile();
this.loadBlockchainConfigFile();
this.loadContractsConfigFile();
2016-09-25 01:10:47 +00:00
this.loadChainTrackerFile();
};
2016-08-22 03:40:05 +00:00
Config.prototype.loadBlockchainConfigFile = function() {
var defaultBlockchainConfig = JSON.parse(fs.readFileSync(this.configDir + "blockchain.json"))[this.env];
2016-08-22 03:40:05 +00:00
this.blockchainConfig = defaultBlockchainConfig;
};
Config.prototype.loadContractsConfigFile = function() {
2017-01-26 11:34:00 +00:00
var configObject = {};
var configPlugins = this.plugins.getPluginsFor('contractsConfig');
if (configPlugins.length > 0) {
configPlugins.forEach(function(plugin) {
plugin.contractsConfigs.forEach(function(pluginConfig) {
configObject = merge.recursive(configObject, pluginConfig);
});
});
}
var contractsConfig = JSON.parse(fs.readFileSync(this.configDir + "contracts.json"));
2017-01-26 11:34:00 +00:00
configObject = merge.recursive(configObject, contractsConfig);
var defaultContractsConfig = configObject['default'];
var envContractsConfig = configObject[this.env];
2016-08-22 03:40:05 +00:00
var mergedConfig = merge.recursive(defaultContractsConfig, envContractsConfig);
2017-01-26 11:34:00 +00:00
console.log(JSON.stringify(mergedConfig));
this.contractsConfig = mergedConfig;
2016-08-22 03:40:05 +00:00
};
Config.prototype.loadPipelineConfigFile = function() {
var contracts = this.embarkConfig.contracts;
this.contractsFiles = this.loadFiles(contracts);
var assets = this.embarkConfig.app;
for(var targetFile in assets) {
this.assetFiles[targetFile] = this.loadFiles(assets[targetFile]);
}
this.buildDir = this.embarkConfig.buildDir;
this.configDir = this.embarkConfig.config;
};
2016-09-25 01:10:47 +00:00
Config.prototype.loadChainTrackerFile = function() {
//var self = this;
var chainTracker;
try {
chainTracker = JSON.parse(fs.readFileSync(this.chainsFile));
2016-09-25 01:10:47 +00:00
}
catch(err) {
//self.logger.info(this.chainsFile + ' file not found, creating it...');
2016-09-25 01:10:47 +00:00
chainTracker = {};
fs.writeFileSync(this.chainsFile, '{}');
2016-09-25 01:10:47 +00:00
}
this.chainTracker = chainTracker;
};
2016-08-22 03:40:05 +00:00
Config.prototype.loadFiles = function(files) {
var originalFiles = grunt.file.expand({nonull: true}, files);
var readFiles = [];
originalFiles.filter(function(file) {
return file.indexOf('.') >= 0;
}).filter(function(file) {
if (file === 'embark.js') {
2017-01-26 11:34:00 +00:00
readFiles.push({filename: 'web3.js', content: fs.readFileSync(path.join(__dirname, "/../js/web3.js")).toString(), path: path.join(__dirname, "/../js/web3.js")});
readFiles.push({filename: 'ipfs.js', content: fs.readFileSync(path.join(__dirname, "/../js/ipfs.js")).toString(), path: path.join(__dirname, "/../js/ipfs.js")});
2017-01-07 05:03:03 +00:00
// TODO: remove duplicated files if funcitonality is the same for storage and orbit
2017-01-26 11:34:00 +00:00
readFiles.push({filename: 'ipfs-api.js', content: fs.readFileSync(path.join(__dirname, "/../js/ipfs-api.min.js")).toString(), path: path.join(__dirname, "/../js/ipfs-api.min.js")});
readFiles.push({filename: 'orbit.js', content: fs.readFileSync(path.join(__dirname, "/../js/orbit.min.js")).toString(), path: path.join(__dirname, "/../js/orbit.min.js")});
readFiles.push({filename: 'embark.js', content: fs.readFileSync(path.join(__dirname, "/../js/build/embark.bundle.js")).toString(), path: path.join(__dirname, "/../js/build/embark.bundle.js")});
readFiles.push({filename: 'embark-plugins.js', content: "", path: ""});
2016-08-22 03:40:05 +00:00
} else {
2017-01-26 11:34:00 +00:00
readFiles.push({filename: file, content: fs.readFileSync(file).toString(), path: file});
2016-08-22 03:40:05 +00:00
}
});
return readFiles;
};
2017-01-26 11:34:00 +00:00
Config.prototype.loadPluginContractFiles = function() {
var self = this;
var contractsPlugins = this.plugins.getPluginsFor('contractFiles');
if (contractsPlugins.length > 0) {
contractsPlugins.forEach(function(plugin) {
plugin.contractsFiles.forEach(function(file) {
var filename = file.replace('./','');
self.contractsFiles.push({filename: filename, content: plugin.loadPluginFile(file), path: plugin.pathToFile(file)});
});
});
}
};
2016-08-22 03:40:05 +00:00
module.exports = Config;