UNPKG

@teambit/isolator

Version:
193 lines (188 loc) • 6.23 kB
"use strict"; 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