UNPKG

3.05 kBJavaScriptView Raw
1var path = require('path');
2var fs = require('fs');
3var _ = require('lodash');
4var log = require('./log');
5
6require('simple-errors');
7
8// Default router contains a single instance of the webpage
9// middleware with the default options.
10var defaultRouter = [
11 {
12 module: 'webpage'
13 }
14];
15
16// Write the _virtualApp config section to package.json. If file doesn't exist
17// create a new package.json from scratch.
18module.exports.update = function(appDir, app, callback) {
19 // If there isn't a package.json file, create one. Otherwise modify it adding the aerobatic section.
20 var packageJsonPath = path.join(appDir, 'package.json');
21 fs.exists(packageJsonPath, function(exists) {
22 if (!exists) {
23 log.info("Writing file %s", packageJsonPath);
24 fs.writeFile(packageJsonPath, JSON.stringify({
25 name: app.name,
26 version: "0.0.1",
27 _virtualApp: {
28 appId: app.appId,
29 router: defaultRouter
30 }
31 }, null, 2), callback);
32 }
33 else {
34 // If the package.json file already exits, modify it by adding a _virtualApp section
35 log.debug("Updating file %s", packageJsonPath);
36 fs.readFile(packageJsonPath, function(err, json) {
37 if (err) return callback(err);
38
39 var packageJson;
40 try {
41 packageJson = JSON.parse(json);
42 }
43 catch (e) {
44 return callback(Error.create("package.json is invalid"));
45 }
46
47 packageJson.name = app.name;
48 if (!packageJson.version)
49 packageJson.version = "1.0.0";
50
51 if (_.isObject(packageJson._virtualApp) === false)
52 packageJson._virtualApp = {};
53
54 packageJson._virtualApp.appId = app.appId;
55 if (_.isArray(packageJson._virtualApp.router) === false)
56 packageJson._virtualApp.router = defaultRouter;
57
58 fs.writeFile(packageJsonPath, JSON.stringify(packageJson, null, 2),
59 callback);
60 });
61 }
62 });
63};
64
65module.exports.load = function(program, callback) {
66 var packageJsonPath = path.join(program.cwd, 'package.json');
67
68 fs.exists(packageJsonPath, function(exists) {
69 if (!exists)
70 return callback(new Error("File " + packageJsonPath + " does not exist. Run 'npm init' to create it followed by '4front init'."));
71
72 fs.readFile(packageJsonPath, function(err, contents) {
73 if (err) return callback(err);
74
75 var json;
76 try {
77 json = JSON.parse(contents);
78 }
79 catch (e) {
80 return callback("File " + packageJsonPath + " is not valid JSON");
81 }
82
83 if (!json._virtualApp)
84 return callback("Missing _virtualApp section in package.json file. Try running '4front init'.");
85
86 var config = json._virtualApp;
87
88 // Allow the appId to be overridden via a command argument
89 if (program.appId)
90 config.appId = program.appId;
91
92 if (!config.appId)
93 return callback(new Error("Missing appId in _virtualApp section of package.json. Try running '4front init'."));
94
95 // Copy certain NPM standard attributes to the _aerobatic section.
96 _.extend(config, {
97 version: json.version,
98 scripts: json.scripts || {}
99 });
100
101 callback(null, config);
102 });
103 });
104};