c9-core/b9/lib/js/generate_settings.js

100 wiersze
3.1 KiB
JavaScript

#!/usr/bin/env node
"use strict";
var DEFAULT_SETTINGS = "deploy";
var ALWAYS_INCLUDE_SETTINGS = ["node", "mode", "manifest", "domains", "primaryDomain", "primaryBaseUrl", "baseUrlPattern"];
var fs = require("fs");
var optimist = require("optimist");
var loadManifest = require("c9/manifest").load;
var reJSON = require("c9/json-with-re");
module.exports = generateSettings;
if (!module.parent) {
main(process.argv.slice(2), function(err) {
if (err) {
console.error(err);
console.error("Stacktrace: ", err.stack);
process.exit(1);
}
});
}
function main(argv, callback) {
var options = optimist(argv)
.usage("Usage: $0 [CONFIG_NAME] [--help]")
.alias("s", "settings")
.default("settings", DEFAULT_SETTINGS)
.describe("settings", "Settings file to use")
.default("source", __dirname + "/../../..")
.describe("source", "Source directory")
.describe("targetFile", "Target package.json")
.boolean("help")
.describe("help", "Show command line options.");
argv = options.argv;
if (argv.help) {
options.showHelp();
return callback();
}
if (argv._.length != 1) {
options.showHelp();
return callback();
}
var config = argv._[0];
var settingsName = argv.settings;
var source = argv.source;
generateSettings(source, config, settingsName, function(err, contents) {
if (err) return callback(err);
if (argv.targetFile)
fs.writeFileSync(argv.targetFile, contents);
else
console.log(contents);
});
}
function generateSettings(source, config, settingsName, callback) {
// Check if build already exists.
var manifest = loadManifest(source);
manifest.hostname = "[%type%]-[%provider%]-[%region%]-[%index%]-[%env%]";
var oldSettings;
try {
oldSettings = require(source + "/settings/" + settingsName)(manifest);
} catch (e) {
return callback(e);
}
var buildConfig = require(source + "/configs/" + config).buildConfig({mode: settingsName});
if (buildConfig.settingsInclude == "*") {
newSettings = oldSettings;
}
else {
buildConfig.settingsInclude = buildConfig.settingsInclude.concat(ALWAYS_INCLUDE_SETTINGS);
var newSettings =
buildConfig.settingsInclude.reduce(function(settings, name) {
settings[name] = oldSettings[name];
return settings;
}, {});
}
newSettings.node = oldSettings.node;
var contents =
"var hostname = require('c9/hostname');\n" +
"var reJSON = require('c9/json-with-re');\n" +
"var fill = require('simple-template').fill;\n" +
"module.exports = function() {\n" +
" var options = hostname.parse(hostname.get());\n" +
" options.root = __dirname + '/..';\n" +
" var template = " + reJSON.stringify(newSettings, 2).replace(new RegExp(source, "g"), "[%root%]") + ";\n" +
" return reJSON.parse(fill(JSON.stringify(template), options));\n" +
"};";
callback(null, contents);
}