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
150 lines (114 loc) • 3.8 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 _defineProperty2() {
const data = _interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));
_defineProperty2 = function () {
return data;
};
return data;
}
function _commentJson() {
const data = require("comment-json");
_commentJson = function () {
return data;
};
return data;
}
function path() {
const data = _interopRequireWildcard(require("path"));
path = function () {
return data;
};
return data;
}
function _fsExtra() {
const data = _interopRequireDefault(require("fs-extra"));
_fsExtra = function () {
return data;
};
return data;
}
function _constants() {
const data = require("../constants");
_constants = function () {
return data;
};
return data;
}
// TODO: improve this by combine into a base class shared between this and e2e-bit-json-helper
class BitJsoncHelper {
constructor(scopes) {
(0, _defineProperty2().default)(this, "scopes", void 0);
this.scopes = scopes;
}
read(bitJsoncDir = this.scopes.localPath) {
const bitJsoncPath = composePath(bitJsoncDir);
if (_fsExtra().default.existsSync(bitJsoncPath)) {
const content = _fsExtra().default.readFileSync(bitJsoncPath).toString();
return (0, _commentJson().parse)(content);
}
return {};
}
write(bitJsonc, bitJsoncDir = this.scopes.localPath) {
const bitJsoncPath = composePath(bitJsoncDir);
const content = (0, _commentJson().stringify)(bitJsonc, null, 2);
return _fsExtra().default.writeFileSync(bitJsoncPath, content);
}
addKeyVal(bitJsoncDir = this.scopes.localPath, key, val) {
const bitJsonc = this.read(bitJsoncDir); // Using this to keep the comments
const obj = {
[key]: val
};
const updated = (0, _commentJson().assign)(bitJsonc, obj);
this.write(updated, bitJsoncDir);
}
addToVariant(bitJsoncDir = this.scopes.localPath, variant, key, val) {
var _variants$variant;
const bitJsonc = this.read(bitJsoncDir);
const variants = bitJsonc['@teambit/variants'];
const newVariant = (_variants$variant = variants[variant]) !== null && _variants$variant !== void 0 ? _variants$variant : {};
(0, _commentJson().assign)(newVariant, {
[key]: val
});
this.setVariant(bitJsoncDir, variant, newVariant);
}
/**
* Replace the entire variant config with the provided config.
* In case you only want to add new extension to variant you probably want to use addToVariant
* @param bitJsoncDir
* @param variant
* @param config
*/
setVariant(bitJsoncDir = this.scopes.localPath, variant, config) {
const bitJsonc = this.read(bitJsoncDir);
const variants = bitJsonc['@teambit/variants'];
const newVariant = config;
(0, _commentJson().assign)(variants, {
[variant]: newVariant
});
this.addKeyVal(bitJsoncDir, '@teambit/variants', variants);
}
addKeyValToWorkspace(key, val, bitJsoncDir = this.scopes.localPath) {
const bitJsonc = this.read(bitJsoncDir);
const workspace = bitJsonc['@teambit/workspace'];
(0, _commentJson().assign)(workspace, {
[key]: val
});
this.addKeyVal(bitJsoncDir, '@teambit/workspace', workspace);
}
addDefaultScope(scope = this.scopes.remote) {
this.addKeyValToWorkspace('defaultScope', scope);
}
addDefaultOwner(owner) {
this.addKeyValToWorkspace('defaultOwner', owner);
}
}
exports.default = BitJsoncHelper;
function composePath(dir) {
return path().join(dir, _constants().WORKSPACE_JSONC);
}