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
229 lines (172 loc) • 7.24 kB
JavaScript
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 _ramda() {
const data = _interopRequireDefault(require("ramda"));
_ramda = function () {
return data;
};
return data;
}
function _pMapSeries() {
const data = _interopRequireDefault(require("p-map-series"));
_pMapSeries = function () {
return data;
};
return data;
}
function _removedComponents() {
const data = _interopRequireDefault(require("../removed-components"));
_removedComponents = function () {
return data;
};
return data;
}
function _logger() {
const data = _interopRequireDefault(require("../../logger/logger"));
_logger = function () {
return data;
};
return data;
}
function _bitId() {
const data = require("../../bit-id");
_bitId = function () {
return data;
};
return data;
}
function _constants() {
const data = require("../../constants");
_constants = function () {
return data;
};
return data;
}
function _models() {
const data = require("../models");
_models = function () {
return data;
};
return data;
}
class RemoveModelComponents {
constructor(scope, bitIds, force, removeSameOrigin, consumer) {
(0, _defineProperty2().default)(this, "scope", void 0);
(0, _defineProperty2().default)(this, "bitIds", void 0);
(0, _defineProperty2().default)(this, "force", void 0);
(0, _defineProperty2().default)(this, "removeSameOrigin", false);
(0, _defineProperty2().default)(this, "consumer", void 0);
this.scope = scope;
this.bitIds = bitIds;
this.force = force;
this.removeSameOrigin = removeSameOrigin;
this.consumer = consumer;
}
remove() {
var _this = this;
return (0, _bluebird().coroutine)(function* () {
const {
missingComponents,
foundComponents
} = yield _this.scope.filterFoundAndMissingComponents(_this.bitIds);
const dependentBits = yield _this.scope.findDependentBits(foundComponents);
if (_ramda().default.isEmpty(dependentBits) || _this.force) {
// do not run this in parallel (promise.all), otherwise, it may throw an error when
// trying to delete the same file at the same time (happens when removing a component with
// a dependency and the dependency itself)
const removedComponents = yield (0, _pMapSeries().default)(foundComponents, bitId => _this._removeSingle(bitId));
yield _this.scope.objects.persist(); // @ts-ignore AUTO-ADDED-AFTER-MIGRATION-PLEASE-FIX!
const ids = new (_bitId().BitIds)(...removedComponents.map(x => x.bitId)); // @ts-ignore AUTO-ADDED-AFTER-MIGRATION-PLEASE-FIX!
const removedDependencies = new (_bitId().BitIds)(..._ramda().default.flatten(removedComponents.map(x => x.removedDependencies)));
return new (_removedComponents().default)({
removedComponentIds: ids,
missingComponents,
removedDependencies
});
} // some of the components have dependents, don't remove them
return new (_removedComponents().default)({
missingComponents,
dependentBits
});
})();
}
/**
* removeSingle - remove single component
* @param {BitId} bitId - list of remote component ids to delete
* @param {boolean} removeSameOrigin - remove component dependencies from same origin
*/
_removeSingle(bitId) {
var _this2 = this;
return (0, _bluebird().coroutine)(function* () {
_logger().default.debug(`scope.removeSingle ${bitId.toString()}, remove dependencies: ${_this2.removeSameOrigin.toString()}`); // @ts-ignore AUTO-ADDED-AFTER-MIGRATION-PLEASE-FIX!
const component = (yield _this2.scope.getModelComponentIfExist(bitId)).toComponentVersion(); // @ts-ignore AUTO-ADDED-AFTER-MIGRATION-PLEASE-FIX!
const consumerComponentToRemove = yield component.toConsumer(_this2.scope.objects);
const componentList = yield _this2.scope.listIncludesSymlinks();
const dependentBits = yield _this2.scope.findDependentBits(consumerComponentToRemove.flattenedDependencies, bitId.version !== _constants().LATEST_BIT_VERSION);
const removedDependencies = yield _this2._removeComponentsDependencies(dependentBits, componentList, consumerComponentToRemove, bitId);
yield _this2._removeComponent(bitId, componentList);
const version = Object.keys(component.component.versions).length <= 1 ? _constants().LATEST_BIT_VERSION : bitId.version;
return {
bitId: bitId.changeVersion(version),
removedDependencies
};
})();
}
_removeComponentsDependencies(dependentBits, componentList, consumerComponentToRemove, bitId) {
var _this3 = this;
return (0, _bluebird().coroutine)(function* () {
const removedComponents = consumerComponentToRemove.flattenedDependencies.map( /*#__PURE__*/function () {
var _ref = (0, _bluebird().coroutine)(function* (dependencyId) {
const dependentsIds = dependentBits[dependencyId.toStringWithoutVersion()];
const relevantDependents = _ramda().default.reject(dependent => dependent.isEqual(bitId) || dependent.scope !== dependencyId.scope, dependentsIds);
let isNested = true;
if (_this3.consumer) {
const componentMap = _this3.consumer.bitMap.getComponentIfExist(dependencyId);
if (componentMap && componentMap.origin !== _constants().COMPONENT_ORIGINS.NESTED) {
isNested = false;
}
}
if (_ramda().default.isEmpty(relevantDependents) && !_this3.bitIds.searchWithoutVersion(dependencyId) && ( // don't delete dependency if it is already deleted as an individual
dependencyId.scope !== bitId.scope || _this3.removeSameOrigin) && isNested) {
yield _this3._removeComponent(dependencyId, componentList);
return dependencyId;
}
return null;
});
return function (_x) {
return _ref.apply(this, arguments);
};
}());
let removedDependencies = yield Promise.all(removedComponents);
removedDependencies = removedDependencies.filter(x => !_ramda().default.isNil(x)); // @ts-ignore AUTO-ADDED-AFTER-MIGRATION-PLEASE-FIX!
return _bitId().BitIds.fromArray(removedDependencies);
})();
}
_removeComponent(id, componentList) {
var _this4 = this;
return (0, _bluebird().coroutine)(function* () {
const symlink = componentList.filter(component => component instanceof _models().Symlink && id.isEqualWithoutScopeAndVersion(component.toBitId()));
yield _this4.scope.sources.removeComponentById(id);
if (!_ramda().default.isEmpty(symlink)) _this4.scope.objects.removeObject(symlink[0].hash());
})();
}
}
exports.default = RemoveModelComponents;
;