particle-commands
Version:
Library of UX-neutral commands that provide key functionality for developer tools
232 lines (202 loc) • 6.92 kB
JavaScript
'use strict';
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.extended = exports.simple = exports.legacy = undefined;
var _slicedToArray = function () { function sliceIterator(arr, i) { var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"]) _i["return"](); } finally { if (_d) throw _e; } } return _arr; } return function (arr, i) { if (Array.isArray(arr)) { return arr; } else if (Symbol.iterator in Object(arr)) { return sliceIterator(arr, i); } else { throw new TypeError("Invalid attempt to destructure non-iterable instance"); } }; }();
var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
var _es6Promisify = require('es6-promisify');
var _es6Promisify2 = _interopRequireDefault(_es6Promisify);
var _fs = require('fs');
var _fs2 = _interopRequireDefault(_fs);
var _path = require('path');
var _path2 = _interopRequireDefault(_path);
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
var legacy = 'legacy';
var simple = 'simple';
var extended = 'extended';
function buildPromisefs() {
var fs = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : _fs2.default;
var promisefs = {};
['readFile', 'writeFile', 'appendFile', 'stat'].forEach(function (fn) {
return promisefs[fn] = (0, _es6Promisify2.default)(fs[fn]);
});
return promisefs;
}
var ProjectProperties = function () {
_createClass(ProjectProperties, null, [{
key: 'buildFs',
value: function buildFs() {
var fs = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : _fs2.default;
return buildPromisefs(fs);
}
}]);
function ProjectProperties(dir) {
var _ref = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {},
_ref$filename = _ref.filename,
filename = _ref$filename === undefined ? 'project.properties' : _ref$filename,
_ref$fs = _ref.fs,
fs = _ref$fs === undefined ? buildPromisefs() : _ref$fs;
_classCallCheck(this, ProjectProperties);
this.dir = dir;
this.fs = fs;
this.filename = filename;
this.groups = {};
this.fields = {};
}
_createClass(ProjectProperties, [{
key: 'name',
value: function name() {
return _path2.default.join(this.dir, this.filename);
}
}, {
key: 'load',
value: function load() {
var _this = this;
return this.fs.readFile(this.name(), 'utf8').then(function (data) {
return _this.parse(data);
});
}
}, {
key: 'parse',
value: function parse(data) {
var _this2 = this;
this.fields = data.split('\n').reduce(function (obj, line) {
var _line$split = line.split('='),
_line$split2 = _slicedToArray(_line$split, 2),
field = _line$split2[0],
value = _line$split2[1];
if (field && value !== undefined) {
field = field.trim();
value = value.trim();
obj[field] = value;
var groups = field.split('.');
_this2.addGroups(_this2.groups, groups, value);
}
return obj;
}, {});
}
}, {
key: 'addGroups',
value: function addGroups(target, groups, value) {
var key = groups[0].trim();
if (key) {
if (groups.length === 1) {
target[key] = value;
} else {
var next = target[key] = target[key] || {};
groups.shift();
this.addGroups(next, groups, value);
}
}
}
}, {
key: 'save',
value: function save() {
var data = this.serialize();
return this.fs.writeFile(this.name(), data, 'utf8');
}
}, {
key: 'writeAssetOtaDir',
value: function writeAssetOtaDir() {
var _this3 = this;
// // Add a commented line for assetOtaDir if it doesn't exist
this.load().then(function () {
var val = _this3.getField('#assetOtaDir');
if (!val) {
_this3.setField('#assetOtaDir', 'assets');
return _this3.save();
}
});
}
}, {
key: 'serialize',
value: function serialize() {
var _this4 = this;
return Object.keys(this.fields).map(function (field) {
return field + '=' + _this4.fields[field];
}).join('\n') + '\n';
}
}, {
key: 'exists',
value: function exists() {
var stat = this.fs.stat(this.name());
return stat.then(function (stats) {
return stats.isFile();
}).catch(function (err) {
if (err.code !== 'ENOENT') {
throw err;
}
return false;
});
}
}, {
key: 'sourceDirExists',
value: function sourceDirExists() {
var stat = this.fs.stat(_path2.default.join(this.dir, 'src'));
return stat.then(function (stats) {
return stats.isDirectory();
}, function () {
return false;
});
}
}, {
key: 'projectLayout',
value: function projectLayout() {
var _this5 = this;
return this.exists().then(function (exists) {
if (exists) {
return _this5.sourceDirExists().then(function (exists) {
return exists ? extended : simple;
});
} else {
return legacy;
}
});
}
}, {
key: 'addDependency',
value: function addDependency(name, version) {
this.fields[this.dependencyField(name)] = version;
}
}, {
key: 'dependencyField',
value: function dependencyField(name) {
return 'dependencies.' + name;
}
/**
* Determines the location of the library that is installed into this project.
* @param {booleabn} vendored should be true
* @param {string} libName the library name
* @returns {string} the path where the library can be vendored to
*/
}, {
key: 'libraryDirectory',
value: function libraryDirectory(vendored, libName) {
return _path2.default.join(this.dir, 'lib', libName);
}
}, {
key: 'dependencies',
value: function dependencies() {
return this.groups.dependencies || {};
}
}, {
key: 'setField',
value: function setField(name, value) {
var prev = this.getField(name);
this.fields[name] = value;
return prev !== value;
}
}, {
key: 'getField',
value: function getField(name) {
return this.fields[name];
}
}]);
return ProjectProperties;
}();
exports.default = ProjectProperties;
exports.legacy = legacy;
exports.simple = simple;
exports.extended = extended;