@teambit/isolator
Version:
193 lines (188 loc) • 6.23 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = void 0;
function _capsule() {
const data = require("@teambit/capsule");
_capsule = function () {
return data;
};
return data;
}
function _filenamify() {
const data = _interopRequireDefault(require("filenamify"));
_filenamify = function () {
return data;
};
return data;
}
function _fs() {
const data = require("fs");
_fs = function () {
return data;
};
return data;
}
function _glob() {
const data = require("glob");
_glob = function () {
return data;
};
return data;
}
function _path() {
const data = _interopRequireDefault(require("path"));
_path = function () {
return data;
};
return data;
}
function _uuid() {
const data = require("uuid");
_uuid = function () {
return data;
};
return data;
}
function _container() {
const data = _interopRequireDefault(require("./container"));
_container = function () {
return data;
};
return data;
}
function _containerExec() {
const data = _interopRequireDefault(require("./container-exec"));
_containerExec = function () {
return data;
};
return data;
}
function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
function ownKeys(e, r) { var t = Object.keys(e); if (Object.getOwnPropertySymbols) { var o = Object.getOwnPropertySymbols(e); r && (o = o.filter(function (r) { return Object.getOwnPropertyDescriptor(e, r).enumerable; })), t.push.apply(t, o); } return t; }
function _objectSpread(e) { for (var r = 1; r < arguments.length; r++) { var t = null != arguments[r] ? arguments[r] : {}; r % 2 ? ownKeys(Object(t), !0).forEach(function (r) { _defineProperty(e, r, t[r]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(e, Object.getOwnPropertyDescriptors(t)) : ownKeys(Object(t)).forEach(function (r) { Object.defineProperty(e, r, Object.getOwnPropertyDescriptor(t, r)); }); } return e; }
function _defineProperty(e, r, t) { return (r = _toPropertyKey(r)) in e ? Object.defineProperty(e, r, { value: t, enumerable: !0, configurable: !0, writable: !0 }) : e[r] = t, e; }
function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == typeof i ? i : i + ""; }
function _toPrimitive(t, r) { if ("object" != typeof t || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != typeof i) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
class Capsule extends _capsule().Capsule {
constructor(
/**
* container implementation the capsule is being executed within.
*/
container,
/**
* the capsule's file system.
*/
fs,
/**
* console for controlling process streams as stdout, stdin and stderr.
*/
console = new (_capsule().Console)(),
/**
* capsule's state.
*/
state, component) {
super(container, fs, console, state);
this.container = container;
this.fs = fs;
this.console = console;
this.state = state;
this.component = component;
_defineProperty(this, "_wrkDir", void 0);
this._wrkDir = container.wrkDir;
}
/**
* @deprecated please use `this.path`
*/
get wrkDir() {
return this.path;
}
get path() {
return (0, _fs().realpathSync)(this._wrkDir);
}
start() {
return this.container.start();
}
async execNode(executable, args, exec) {
return this.typedExec({
command: ['node', executable, ...(args.args || [])],
cwd: ''
}, exec);
}
async typedExec(opts, exec = new (_containerExec().default)()) {
return this.container.exec(opts, exec);
}
outputFile(file, data, options) {
return this.container.outputFile(file, data, options);
}
removePath(dir) {
return this.container.removePath(dir);
}
symlink(src, dest) {
return this.container.symlink(src, dest);
}
// TODO: refactor this crap and simplify capsule API
async execute(cmd, options) {
// @ts-ignore AUTO-ADDED-AFTER-MIGRATION-PLEASE-FIX!
const execResults = await this.exec({
command: cmd.split(' '),
options
});
let stdout = '';
let stderr = '';
return new Promise((resolve, reject) => {
execResults.stdout.on('data', data => {
stdout += data;
});
execResults.stdout.on('error', error => {
return reject(error);
});
execResults.on('close', () => {
return resolve({
stdout,
stderr
});
});
execResults.stderr.on('error', error => {
return reject(error);
});
execResults.stderr.on('data', data => {
stderr += data;
});
});
}
/**
* @todo: fix.
* it skips the capsule fs because for some reason `capsule.fs.promises.readdir` doesn't work
* the same as `capsule.fs.readdir` and it doesn't have the capsule dir as pwd.
*
* returns the paths inside the capsule
*/
getAllFilesPaths(dir = '.', options = {}) {
const files = (0, _glob().globSync)('**', _objectSpread({
cwd: _path().default.join(this.path, dir),
nodir: true
}, options));
return files.map(file => _path().default.join(dir, file));
}
static getCapsuleDirName(component, config = {}) {
return config.name || (0, _filenamify().default)(component.id.toString(), {
replacement: '_'
});
}
static getCapsuleRootDir(component, baseDir, config = {}) {
return _path().default.join(baseDir, Capsule.getCapsuleDirName(component, config));
}
static async createFromComponent(component, baseDir, config = {}) {
// TODO: make this a static method and combine with ComponentCapsule
const capsuleDirName = Capsule.getCapsuleDirName(component, config);
const wrkDir = _path().default.join(baseDir, config.alwaysNew ? `${capsuleDirName}_${(0, _uuid().v4)()}` : capsuleDirName);
const container = new (_container().default)(wrkDir);
const capsule = new Capsule(container, container.fs, new (_capsule().Console)(), new (_capsule().State)(), component);
await capsule.start();
return capsule;
}
}
exports.default = Capsule;
//# sourceMappingURL=capsule.js.map