bit-bin
Version:
<a href="https://opensource.org/licenses/Apache-2.0"><img alt="apache" src="https://img.shields.io/badge/License-Apache%202.0-blue.svg"></a> <a href="https://github.com/teambit/bit/blob/master/CONTRIBUTING.md"><img alt="prs" src="https://img.shields.io/b
416 lines (318 loc) • 10.4 kB
JavaScript
"use strict";
var _interopRequireWildcard = require("@babel/runtime/helpers/interopRequireWildcard");
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = void 0;
function _bluebird() {
const data = require("bluebird");
_bluebird = function () {
return data;
};
return data;
}
function _defineProperty2() {
const data = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
_defineProperty2 = function () {
return data;
};
return data;
}
function path() {
const data = _interopRequireWildcard(require("path"));
path = function () {
return data;
};
return data;
}
function _ramda() {
const data = _interopRequireDefault(require("ramda"));
_ramda = function () {
return data;
};
return data;
}
function RA() {
const data = _interopRequireWildcard(require("ramda-adjunct"));
RA = function () {
return data;
};
return data;
}
function _fsExtra() {
const data = _interopRequireDefault(require("fs-extra"));
_fsExtra = function () {
return data;
};
return data;
}
function _bitId() {
const data = require("../../bit-id");
_bitId = function () {
return data;
};
return data;
}
function _utils() {
const data = require("../../utils");
_utils = function () {
return data;
};
return data;
}
function _constants() {
const data = require("../../constants");
_constants = function () {
return data;
};
return data;
}
function _logger() {
const data = _interopRequireDefault(require("../../logger/logger"));
_logger = function () {
return data;
};
return data;
}
function _jsonFile() {
const data = _interopRequireDefault(require("../component/sources/json-file"));
_jsonFile = function () {
return data;
};
return data;
}
function _packageJsonFile() {
const data = _interopRequireDefault(require("../component/package-json-file"));
_packageJsonFile = function () {
return data;
};
return data;
}
function _dataToPersist() {
const data = _interopRequireDefault(require("../component/sources/data-to-persist"));
_dataToPersist = function () {
return data;
};
return data;
}
function _extensionData() {
const data = require("./extension-data");
_extensionData = function () {
return data;
};
return data;
}
/**
* There are two Bit Config: WorkspaceConfig and ComponentConfig, both inherit this class.
* The config data can be written in package.json inside "bit" property. And, can be written in
* bit.json file. Also, it might be written in both, in which case, if there is any conflict, the
* bit.json wins.
*/
class AbstractConfig {
// @ts-ignore AUTO-ADDED-AFTER-MIGRATION-PLEASE-FIX!
// @ts-ignore AUTO-ADDED-AFTER-MIGRATION-PLEASE-FIX!
// @ts-ignore AUTO-ADDED-AFTER-MIGRATION-PLEASE-FIX!
// @ts-ignore AUTO-ADDED-AFTER-MIGRATION-PLEASE-FIX!
// @ts-ignore AUTO-ADDED-AFTER-MIGRATION-PLEASE-FIX!
constructor(props) {
(0, _defineProperty2().default)(this, "path", void 0);
(0, _defineProperty2().default)(this, "_compiler", void 0);
(0, _defineProperty2().default)(this, "_tester", void 0);
(0, _defineProperty2().default)(this, "dependencies", void 0);
(0, _defineProperty2().default)(this, "devDependencies", void 0);
(0, _defineProperty2().default)(this, "compilerDependencies", void 0);
(0, _defineProperty2().default)(this, "testerDependencies", void 0);
(0, _defineProperty2().default)(this, "lang", void 0);
(0, _defineProperty2().default)(this, "bindingPrefix", void 0);
(0, _defineProperty2().default)(this, "extensions", void 0);
(0, _defineProperty2().default)(this, "writeToPackageJson", false);
(0, _defineProperty2().default)(this, "writeToBitJson", false);
this._compiler = props.compiler || {};
this._tester = props.tester || {};
this.lang = props.lang || _constants().DEFAULT_LANGUAGE;
this.bindingPrefix = props.bindingPrefix || _constants().DEFAULT_BINDINGS_PREFIX;
this.extensions = props.extensions || new (_extensionData().ExtensionDataList)();
}
get compiler() {
const compilerObj = AbstractConfig.transformEnvToObject(this._compiler);
if (_ramda().default.isEmpty(compilerObj)) return undefined;
return compilerObj;
}
setCompiler(compiler) {
this._compiler = AbstractConfig.transformEnvToObject(compiler);
}
get tester() {
const testerObj = AbstractConfig.transformEnvToObject(this._tester);
if (_ramda().default.isEmpty(testerObj)) return undefined;
return testerObj;
}
setTester(tester) {
this._tester = AbstractConfig.transformEnvToObject(tester);
}
addDependencies(bitIds) {
const idObjects = _ramda().default.mergeAll(bitIds.map(bitId => bitId.toObject()));
this.dependencies = _ramda().default.merge(this.dependencies, idObjects);
return this;
}
addDependency(bitId) {
this.dependencies = _ramda().default.merge(this.dependencies, bitId.toObject());
return this;
}
hasCompiler() {
return !!this.compiler && this._compiler !== _constants().NO_PLUGIN_TYPE && !_ramda().default.isEmpty(this.compiler);
}
hasTester() {
return !!this.tester && this._tester !== _constants().NO_PLUGIN_TYPE && !_ramda().default.isEmpty(this.tester);
}
getEnvsByType(type) {
if (type === _constants().COMPILER_ENV_TYPE) {
return this.compiler;
}
return this.tester;
}
/**
* if there is only one env (compiler/tester) and it doesn't have any special configuration, only
* the name, convert it to a string.
*/
static convertEnvToStringIfPossible(envObj) {
if (!envObj) return undefined;
if (Object.keys(envObj).length !== 1) return envObj; // it has more than one id
const envId = Object.keys(envObj)[0];
if (RA().isNilOrEmpty(envObj[envId].rawConfig) && RA().isNilOrEmpty(envObj[envId].options)) {
return envId;
}
return envObj;
}
getDependencies() {
return _bitId().BitIds.fromObject(this.dependencies);
}
toPlainObject() {
var _this$extensions;
const isPropDefaultOrNull = (val, key) => {
if (!val) return false;
if (key === 'lang') return val !== _constants().DEFAULT_LANGUAGE;
if (key === 'bindingPrefix') return val !== _constants().DEFAULT_BINDINGS_PREFIX;
if (key === 'extensions') return !_ramda().default.equals(val, _constants().DEFAULT_EXTENSIONS);
return true;
};
return (0, _utils().filterObject)({
lang: this.lang,
bindingPrefix: this.bindingPrefix,
env: {
compiler: AbstractConfig.convertEnvToStringIfPossible(this.compiler),
tester: AbstractConfig.convertEnvToStringIfPossible(this.tester)
},
dependencies: this.dependencies,
extensions: (_this$extensions = this.extensions) === null || _this$extensions === void 0 ? void 0 : _this$extensions.toObject()
}, isPropDefaultOrNull);
}
write({
workspaceDir,
componentDir
}) {
var _this = this;
return (0, _bluebird().coroutine)(function* () {
const jsonFiles = yield _this.prepareToWrite({
workspaceDir,
componentDir
});
const dataToPersist = new (_dataToPersist().default)();
dataToPersist.addManyFiles(jsonFiles);
dataToPersist.addBasePath(workspaceDir); // @ts-ignore AUTO-ADDED-AFTER-MIGRATION-PLEASE-FIX!
return dataToPersist.persistAllToFS();
})();
}
prepareToWrite({
workspaceDir,
componentDir = '.'
}) {
var _this2 = this;
return (0, _bluebird().coroutine)(function* () {
const files = yield _this2.toVinyl({
workspaceDir,
componentDir
});
return files;
})();
}
toVinyl({
workspaceDir,
componentDir = '.'
}) {
var _this3 = this;
return (0, _bluebird().coroutine)(function* () {
const plainObject = _this3.toPlainObject();
const jsonFiles = [];
if (_this3.writeToPackageJson) {
const packageJsonFile = yield _packageJsonFile().default.load(workspaceDir, componentDir);
packageJsonFile.addOrUpdateProperty('bit', plainObject);
jsonFiles.push(packageJsonFile.toVinylFile());
}
if (_this3.writeToBitJson) {
const bitJsonPath = AbstractConfig.composeBitJsonPath(componentDir);
const params = {
base: componentDir,
override: true,
path: bitJsonPath,
content: plainObject
};
const bitJsonFile = _jsonFile().default.load(params);
jsonFiles.push(bitJsonFile);
}
return jsonFiles;
})();
}
static composeBitJsonPath(bitPath) {
return path().join(bitPath, _constants().BIT_JSON);
}
static composePackageJsonPath(bitPath) {
return path().join(bitPath, _constants().PACKAGE_JSON);
}
static pathHasBitJson(bitPath) {
var _this4 = this;
return (0, _bluebird().coroutine)(function* () {
return _fsExtra().default.pathExists(_this4.composeBitJsonPath(bitPath));
})();
}
static pathHasPackageJson(bitPath) {
var _this5 = this;
return (0, _bluebird().coroutine)(function* () {
return _fsExtra().default.pathExists(_this5.composePackageJsonPath(bitPath));
})();
}
static loadJsonFileIfExist(jsonFilePath) {
return (0, _bluebird().coroutine)(function* () {
try {
const file = yield _fsExtra().default.readJson(jsonFilePath);
return file;
} catch (e) {
if (e.code === 'ENOENT') return null;
throw e;
}
})();
}
static removeIfExist(bitPath) {
var _this6 = this;
return (0, _bluebird().coroutine)(function* () {
const dirToRemove = _this6.composeBitJsonPath(bitPath);
const exists = yield _fsExtra().default.pathExists(dirToRemove);
if (exists) {
_logger().default.info(`abstract-config, deleting ${dirToRemove}`);
yield _fsExtra().default.remove(dirToRemove);
return true;
}
return false;
})();
}
static transformEnvToObject(env) {
if (typeof env === 'string') {
if (env === _constants().NO_PLUGIN_TYPE) return {}; // @ts-ignore AUTO-ADDED-AFTER-MIGRATION-PLEASE-FIX!
return {
[env]: {}
};
} // @ts-ignore AUTO-ADDED-AFTER-MIGRATION-PLEASE-FIX!
return env;
}
}
exports.default = AbstractConfig;