UNPKG

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
"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;