mirror of
https://github.com/meteor/meteor.git
synced 2026-05-02 03:01:46 -04:00
77 lines
2.0 KiB
JavaScript
77 lines
2.0 KiB
JavaScript
var fs = require('fs');
|
|
var path = require('path');
|
|
var _ = require('underscore');
|
|
|
|
var project = module.exports = {
|
|
|
|
_get_lines: function (file) {
|
|
var raw = fs.readFileSync(file, 'utf8');
|
|
var lines = raw.split(/\r*\n\r*/);
|
|
|
|
// strip blank lines at the end
|
|
while (lines.length) {
|
|
var line = lines[lines.length - 1];
|
|
if (line.match(/\S/))
|
|
break;
|
|
lines.pop();
|
|
}
|
|
|
|
return lines;
|
|
},
|
|
|
|
_get_packages_lines: function (app_dir) {
|
|
return project._get_lines(path.join(app_dir, '.meteor', 'packages'));
|
|
},
|
|
|
|
_trim_line: function (line) {
|
|
var match = line.match(/^([^#]*)#/);
|
|
if (match)
|
|
line = match[1];
|
|
line = line.replace(/^\s+|\s+$/g, ''); // leading/trailing whitespace
|
|
return line;
|
|
},
|
|
|
|
_write_packages: function (app_dir, lines) {
|
|
fs.writeFileSync(path.join(app_dir, '.meteor', 'packages'),
|
|
lines.join('\n') + '\n', 'utf8');
|
|
},
|
|
|
|
// Package names used by this project.
|
|
get_packages: function (app_dir) {
|
|
var ret = [];
|
|
|
|
_.each(project._get_packages_lines(app_dir), function (line) {
|
|
line = project._trim_line(line);
|
|
if (line !== '')
|
|
ret.push(line);
|
|
});
|
|
|
|
return ret;
|
|
},
|
|
|
|
getMeteorReleaseVersion: function (appDir) {
|
|
return project._trim_line(project._get_lines(path.join(appDir, '.meteor', 'version'))[0]);
|
|
},
|
|
|
|
add_package: function (app_dir, name) {
|
|
var lines = project._get_packages_lines(app_dir);
|
|
|
|
// detail: if the file starts with a comment, try to keep a single
|
|
// blank line after the comment (unless the user removes it)
|
|
var current = project.get_packages(app_dir);
|
|
if (!current.length && lines.length)
|
|
lines.push('');
|
|
lines.push(name);
|
|
project._write_packages(app_dir, lines);
|
|
},
|
|
|
|
remove_package: function (app_dir, name) {
|
|
// XXX assume no special regexp characters
|
|
var lines = _.reject(project._get_packages_lines(app_dir), function (line) {
|
|
return project._trim_line(line) === name;
|
|
});
|
|
project._write_packages(app_dir, lines);
|
|
}
|
|
|
|
};
|