UNPKG

particle-commands

Version:

Library of UX-neutral commands that provide key functionality for developer tools

232 lines (202 loc) 6.92 kB
'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;