monaca-lib
Version:
Monaca cloud and localkit API bindings for JavaScript
167 lines (142 loc) • 3.78 kB
JavaScript
/**
* Used to write and read values from the
* project_dir/.monaca/local_properties.json
* file.
*/
var fs = require('fs'),
path = require('path'),
shell = require('shelljs'),
Q = require('q');
var hasMonacaDir = function(directory) {
var deferred = Q.defer();
fs.exists(path.join(directory, '.monaca'), function(exists) {
if (exists) {
deferred.resolve();
}
else {
createDefaultMonacaStructure(directory)
.then(function() {
deferred.resolve();
}, function(e) {
deferred.reject(e);
})
}
});
return deferred.promise;
};
var hasPropertyFile = function(directory) {
var deferred = Q.defer(),
propertyFile = path.join(directory, '.monaca', 'local_properties.json');
fs.access(propertyFile, fs.constants.F_OK, (err) => {
if (err) deferred.reject(propertyFile);
else deferred.resolve(propertyFile);
});
return deferred.promise;
};
var createDefaultMonacaStructure = function(directory) {
var deferred = Q.defer();
try {
shell.mkdir('-p', path.join(directory, '.monaca'));
deferred.resolve();
} catch (e) {
deferred.reject(e);
}
return deferred.promise;
};
var delProperty = function(directory, property) {
var deferred = Q.defer();
if (property === 'project_id') {
var propertyFile = path.join(directory, '.monaca', 'local_properties.json');
fs.unlink(propertyFile, function(err) {
if (err) {
deferred.reject(new Error("Could not delete the property: " + err));
} else {
deferred.resolve();
}
});
} else {
deferred.reject(new Error("The required property cannot be deleted because it does not exist."));
}
return deferred.promise;
};
var getProperty = function(projectDir, key) {
var deferred = Q.defer();
hasMonacaDir(projectDir).then(
function() {
hasPropertyFile(projectDir).then(
function(propertyFile) {
fs.readFile(propertyFile, function(error, data) {
if (error) {
deferred.reject(error);
}
else {
try {
var properties = JSON.parse(data.toString());
deferred.resolve(properties[key]);
}
catch (e) {
deferred.reject(e);
}
}
});
},
function() {
deferred.resolve();
}
);
},
function(e) {
deferred.reject(e);
}
);
return deferred.promise;
};
var setProperty = function(projectDir, key, value) {
var deferred = Q.defer();
hasMonacaDir(projectDir).then(
function() {
hasPropertyFile(projectDir).then(
function(propertyFile) {
fs.readFile(propertyFile, function(error, data) {
try {
var obj = JSON.parse(data.toString());
obj[key] = value;
fs.writeFile(propertyFile, JSON.stringify(obj), function(error) {
if (error) {
deferred.reject(error);
}
else {
deferred.resolve();
}
});
}
catch (e) {
deferred.reject(e);
}
});
},
function(propertyFile) {
var obj = {};
obj[key] = value;
fs.writeFile(propertyFile, JSON.stringify(obj), function(error) {
if (error) {
deferred.reject(error);
}
else {
deferred.resolve();
}
});
}
);
},
function(e) {
deferred.reject(e);
}
);
return deferred.promise;
};
module.exports = {
get: getProperty,
set: setProperty,
del: delProperty
};