@qodalis/angular-cli
Version:
A lightweight and flexible command-line interface (CLI) tool designed to streamline workflows and automate tasks for developers.
77 lines • 10.9 kB
JavaScript
import { Component, EventEmitter, Input, Output, ViewChild, } from '@angular/core';
import { Terminal, } from '@xterm/xterm';
import { FitAddon } from '@xterm/addon-fit';
import { WebLinksAddon } from '@xterm/addon-web-links';
import { OverlayAddon } from '../addons/overlay';
import { Unicode11Addon } from '@xterm/addon-unicode11';
import * as i0 from "@angular/core";
export class CliTerminalComponent {
constructor() {
this.onTerminalReady = new EventEmitter();
}
ngOnInit() {
this.initializeTerminal();
}
ngAfterViewInit() {
this.handleResize();
}
initializeTerminal() {
if (!this.options) {
this.options = {
allowProposedApi: true,
};
}
this.terminal = new Terminal(this.options);
this.fitAddon = new FitAddon();
this.terminal.loadAddon(this.fitAddon);
const webLinksAddon = new WebLinksAddon();
this.terminal.loadAddon(webLinksAddon);
const overlayAddon = new OverlayAddon();
this.terminal.loadAddon(overlayAddon);
// const webGlAddon = new WebglAddon();
// webGlAddon.onContextLoss((e) => {
// webGlAddon.dispose();
// });
// this.terminal.loadAddon(webGlAddon);
const unicode11Addon = new Unicode11Addon();
this.terminal.loadAddon(unicode11Addon);
this.terminal.open(this.terminalDiv.nativeElement);
this.fitAddon.fit();
this.terminal.focus();
this.onTerminalReady.emit(this.terminal);
}
handleResize() {
window.addEventListener('resize', () => {
this.fitAddon.fit();
});
this.observeContainerSize();
}
observeContainerSize() {
this.resizeObserver = new ResizeObserver(() => {
this.fitAddon.fit();
});
this.resizeObserver.observe(this.terminalDiv.nativeElement);
}
ngOnDestroy() {
if (this.resizeObserver) {
this.resizeObserver.disconnect();
}
this.terminal?.dispose();
}
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: CliTerminalComponent, deps: [], target: i0.ɵɵFactoryTarget.Component }); }
static { this.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "16.2.12", type: CliTerminalComponent, selector: "cli-terminal", inputs: { options: "options", height: "height" }, outputs: { onTerminalReady: "onTerminalReady" }, viewQueries: [{ propertyName: "terminalDiv", first: true, predicate: ["terminal"], descendants: true, static: true }], ngImport: i0, template: "<div #terminal class=\"terminal-container\" [style.height]=\"height\"></div>\n", styles: [".terminal-container{background-color:#0c0c0c;padding:4px}\n"] }); }
}
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: CliTerminalComponent, decorators: [{
type: Component,
args: [{ selector: 'cli-terminal', template: "<div #terminal class=\"terminal-container\" [style.height]=\"height\"></div>\n", styles: [".terminal-container{background-color:#0c0c0c;padding:4px}\n"] }]
}], ctorParameters: function () { return []; }, propDecorators: { options: [{
type: Input
}], height: [{
type: Input
}], onTerminalReady: [{
type: Output
}], terminalDiv: [{
type: ViewChild,
args: ['terminal', { static: true }]
}] } });
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xpLXRlcm1pbmFsLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2NsaS9zcmMvbGliL2NsaS10ZXJtaW5hbC9jbGktdGVybWluYWwuY29tcG9uZW50LnRzIiwiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY2xpL3NyYy9saWIvY2xpLXRlcm1pbmFsL2NsaS10ZXJtaW5hbC5jb21wb25lbnQuaHRtbCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBRUgsU0FBUyxFQUVULFlBQVksRUFDWixLQUFLLEVBR0wsTUFBTSxFQUNOLFNBQVMsR0FDWixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBR0gsUUFBUSxHQUNYLE1BQU0sY0FBYyxDQUFDO0FBQ3RCLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUM1QyxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDdkQsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBRWpELE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQzs7QUFheEQsTUFBTSxPQUFPLG9CQUFvQjtJQWM3QjtRQVJVLG9CQUFlLEdBQUcsSUFBSSxZQUFZLEVBQVksQ0FBQztJQVExQyxDQUFDO0lBRWhCLFFBQVE7UUFDSixJQUFJLENBQUMsa0JBQWtCLEVBQUUsQ0FBQztJQUM5QixDQUFDO0lBRUQsZUFBZTtRQUNYLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztJQUN4QixDQUFDO0lBRU8sa0JBQWtCO1FBQ3RCLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFO1lBQ2YsSUFBSSxDQUFDLE9BQU8sR0FBRztnQkFDWCxnQkFBZ0IsRUFBRSxJQUFJO2FBQ3pCLENBQUM7U0FDTDtRQUVELElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxRQUFRLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBRTNDLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxRQUFRLEVBQUUsQ0FBQztRQUMvQixJQUFJLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7UUFFdkMsTUFBTSxhQUFhLEdBQUcsSUFBSSxhQUFhLEVBQUUsQ0FBQztRQUMxQyxJQUFJLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQyxhQUFhLENBQUMsQ0FBQztRQUV2QyxNQUFNLFlBQVksR0FBRyxJQUFJLFlBQVksRUFBRSxDQUFDO1FBQ3hDLElBQUksQ0FBQyxRQUFRLENBQUMsU0FBUyxDQUFDLFlBQVksQ0FBQyxDQUFDO1FBRXRDLHVDQUF1QztRQUN2QyxvQ0FBb0M7UUFDcEMsNEJBQTRCO1FBQzVCLE1BQU07UUFDTix1Q0FBdUM7UUFFdkMsTUFBTSxjQUFjLEdBQUcsSUFBSSxjQUFjLEVBQUUsQ0FBQztRQUM1QyxJQUFJLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQyxjQUFjLENBQUMsQ0FBQztRQUV4QyxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLGFBQWEsQ0FBQyxDQUFDO1FBQ25ELElBQUksQ0FBQyxRQUFRLENBQUMsR0FBRyxFQUFFLENBQUM7UUFFcEIsSUFBSSxDQUFDLFFBQVEsQ0FBQyxLQUFLLEVBQUUsQ0FBQztRQUV0QixJQUFJLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7SUFDN0MsQ0FBQztJQUVPLFlBQVk7UUFDaEIsTUFBTSxDQUFDLGdCQUFnQixDQUFDLFFBQVEsRUFBRSxHQUFHLEVBQUU7WUFDbkMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxHQUFHLEVBQUUsQ0FBQztRQUN4QixDQUFDLENBQUMsQ0FBQztRQUVILElBQUksQ0FBQyxvQkFBb0IsRUFBRSxDQUFDO0lBQ2hDLENBQUM7SUFFTyxvQkFBb0I7UUFDeEIsSUFBSSxDQUFDLGNBQWMsR0FBRyxJQUFJLGNBQWMsQ0FBQyxHQUFHLEVBQUU7WUFDMUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxHQUFHLEVBQUUsQ0FBQztRQUN4QixDQUFDLENBQUMsQ0FBQztRQUVILElBQUksQ0FBQyxjQUFjLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsYUFBYSxDQUFDLENBQUM7SUFDaEUsQ0FBQztJQUVELFdBQVc7UUFDUCxJQUFJLElBQUksQ0FBQyxjQUFjLEVBQUU7WUFDckIsSUFBSSxDQUFDLGNBQWMsQ0FBQyxVQUFVLEVBQUUsQ0FBQztTQUNwQztRQUVELElBQUksQ0FBQyxRQUFRLEVBQUUsT0FBTyxFQUFFLENBQUM7SUFDN0IsQ0FBQzsrR0FqRlEsb0JBQW9CO21HQUFwQixvQkFBb0IsOFFDakNqQyxnRkFDQTs7NEZEZ0NhLG9CQUFvQjtrQkFMaEMsU0FBUzsrQkFDSSxjQUFjOzBFQUtmLE9BQU87c0JBQWYsS0FBSztnQkFHTixNQUFNO3NCQURMLEtBQUs7Z0JBR0ksZUFBZTtzQkFBeEIsTUFBTTtnQkFHa0MsV0FBVztzQkFBbkQsU0FBUzt1QkFBQyxVQUFVLEVBQUUsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgICBBZnRlclZpZXdJbml0LFxuICAgIENvbXBvbmVudCxcbiAgICBFbGVtZW50UmVmLFxuICAgIEV2ZW50RW1pdHRlcixcbiAgICBJbnB1dCxcbiAgICBPbkRlc3Ryb3ksXG4gICAgT25Jbml0LFxuICAgIE91dHB1dCxcbiAgICBWaWV3Q2hpbGQsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtcbiAgICBJVGVybWluYWxJbml0T25seU9wdGlvbnMsXG4gICAgSVRlcm1pbmFsT3B0aW9ucyxcbiAgICBUZXJtaW5hbCxcbn0gZnJvbSAnQHh0ZXJtL3h0ZXJtJztcbmltcG9ydCB7IEZpdEFkZG9uIH0gZnJvbSAnQHh0ZXJtL2FkZG9uLWZpdCc7XG5pbXBvcnQgeyBXZWJMaW5rc0FkZG9uIH0gZnJvbSAnQHh0ZXJtL2FkZG9uLXdlYi1saW5rcyc7XG5pbXBvcnQgeyBPdmVybGF5QWRkb24gfSBmcm9tICcuLi9hZGRvbnMvb3ZlcmxheSc7XG5pbXBvcnQgeyBXZWJnbEFkZG9uIH0gZnJvbSAnQHh0ZXJtL2FkZG9uLXdlYmdsJztcbmltcG9ydCB7IFVuaWNvZGUxMUFkZG9uIH0gZnJvbSAnQHh0ZXJtL2FkZG9uLXVuaWNvZGUxMSc7XG5cbmV4cG9ydCB0eXBlIENvbnRhaW5lclNpemUgPVxuICAgIHwgYCR7bnVtYmVyfSVgXG4gICAgfCBgJHtudW1iZXJ9dmhgXG4gICAgfCBgJHtudW1iZXJ9cHhgXG4gICAgfCBgJHtudW1iZXJ9cmVtYDtcblxuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICdjbGktdGVybWluYWwnLFxuICAgIHRlbXBsYXRlVXJsOiAnLi9jbGktdGVybWluYWwuY29tcG9uZW50Lmh0bWwnLFxuICAgIHN0eWxlVXJsczogWycuL2NsaS10ZXJtaW5hbC5jb21wb25lbnQuc2FzcyddLFxufSlcbmV4cG9ydCBjbGFzcyBDbGlUZXJtaW5hbENvbXBvbmVudCBpbXBsZW1lbnRzIE9uSW5pdCwgQWZ0ZXJWaWV3SW5pdCwgT25EZXN0cm95IHtcbiAgICBASW5wdXQoKSBvcHRpb25zITogSVRlcm1pbmFsT3B0aW9ucyAmIElUZXJtaW5hbEluaXRPbmx5T3B0aW9ucztcblxuICAgIEBJbnB1dCgpXG4gICAgaGVpZ2h0PzogQ29udGFpbmVyU2l6ZTtcblxuICAgIEBPdXRwdXQoKSBvblRlcm1pbmFsUmVhZHkgPSBuZXcgRXZlbnRFbWl0dGVyPFRlcm1pbmFsPigpO1xuXG4gICAgLy8geHRlcm0gZGVwZW5kZW5jaWVzXG4gICAgQFZpZXdDaGlsZCgndGVybWluYWwnLCB7IHN0YXRpYzogdHJ1ZSB9KSB0ZXJtaW5hbERpdiE6IEVsZW1lbnRSZWY7XG4gICAgcHJpdmF0ZSB0ZXJtaW5hbCE6IFRlcm1pbmFsO1xuICAgIHByaXZhdGUgZml0QWRkb24hOiBGaXRBZGRvbjtcbiAgICBwcml2YXRlIHJlc2l6ZU9ic2VydmVyITogUmVzaXplT2JzZXJ2ZXI7XG5cbiAgICBjb25zdHJ1Y3RvcigpIHt9XG5cbiAgICBuZ09uSW5pdCgpOiB2b2lkIHtcbiAgICAgICAgdGhpcy5pbml0aWFsaXplVGVybWluYWwoKTtcbiAgICB9XG5cbiAgICBuZ0FmdGVyVmlld0luaXQoKTogdm9pZCB7XG4gICAgICAgIHRoaXMuaGFuZGxlUmVzaXplKCk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBpbml0aWFsaXplVGVybWluYWwoKTogdm9pZCB7XG4gICAgICAgIGlmICghdGhpcy5vcHRpb25zKSB7XG4gICAgICAgICAgICB0aGlzLm9wdGlvbnMgPSB7XG4gICAgICAgICAgICAgICAgYWxsb3dQcm9wb3NlZEFwaTogdHJ1ZSxcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLnRlcm1pbmFsID0gbmV3IFRlcm1pbmFsKHRoaXMub3B0aW9ucyk7XG5cbiAgICAgICAgdGhpcy5maXRBZGRvbiA9IG5ldyBGaXRBZGRvbigpO1xuICAgICAgICB0aGlzLnRlcm1pbmFsLmxvYWRBZGRvbih0aGlzLmZpdEFkZG9uKTtcblxuICAgICAgICBjb25zdCB3ZWJMaW5rc0FkZG9uID0gbmV3IFdlYkxpbmtzQWRkb24oKTtcbiAgICAgICAgdGhpcy50ZXJtaW5hbC5sb2FkQWRkb24od2ViTGlua3NBZGRvbik7XG5cbiAgICAgICAgY29uc3Qgb3ZlcmxheUFkZG9uID0gbmV3IE92ZXJsYXlBZGRvbigpO1xuICAgICAgICB0aGlzLnRlcm1pbmFsLmxvYWRBZGRvbihvdmVybGF5QWRkb24pO1xuXG4gICAgICAgIC8vIGNvbnN0IHdlYkdsQWRkb24gPSBuZXcgV2ViZ2xBZGRvbigpO1xuICAgICAgICAvLyB3ZWJHbEFkZG9uLm9uQ29udGV4dExvc3MoKGUpID0+IHtcbiAgICAgICAgLy8gICAgIHdlYkdsQWRkb24uZGlzcG9zZSgpO1xuICAgICAgICAvLyB9KTtcbiAgICAgICAgLy8gdGhpcy50ZXJtaW5hbC5sb2FkQWRkb24od2ViR2xBZGRvbik7XG5cbiAgICAgICAgY29uc3QgdW5pY29kZTExQWRkb24gPSBuZXcgVW5pY29kZTExQWRkb24oKTtcbiAgICAgICAgdGhpcy50ZXJtaW5hbC5sb2FkQWRkb24odW5pY29kZTExQWRkb24pO1xuXG4gICAgICAgIHRoaXMudGVybWluYWwub3Blbih0aGlzLnRlcm1pbmFsRGl2Lm5hdGl2ZUVsZW1lbnQpO1xuICAgICAgICB0aGlzLmZpdEFkZG9uLmZpdCgpO1xuXG4gICAgICAgIHRoaXMudGVybWluYWwuZm9jdXMoKTtcblxuICAgICAgICB0aGlzLm9uVGVybWluYWxSZWFkeS5lbWl0KHRoaXMudGVybWluYWwpO1xuICAgIH1cblxuICAgIHByaXZhdGUgaGFuZGxlUmVzaXplKCk6IHZvaWQge1xuICAgICAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigncmVzaXplJywgKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5maXRBZGRvbi5maXQoKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgdGhpcy5vYnNlcnZlQ29udGFpbmVyU2l6ZSgpO1xuICAgIH1cblxuICAgIHByaXZhdGUgb2JzZXJ2ZUNvbnRhaW5lclNpemUoKTogdm9pZCB7XG4gICAgICAgIHRoaXMucmVzaXplT2JzZXJ2ZXIgPSBuZXcgUmVzaXplT2JzZXJ2ZXIoKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5maXRBZGRvbi5maXQoKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgdGhpcy5yZXNpemVPYnNlcnZlci5vYnNlcnZlKHRoaXMudGVybWluYWxEaXYubmF0aXZlRWxlbWVudCk7XG4gICAgfVxuXG4gICAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgICAgIGlmICh0aGlzLnJlc2l6ZU9ic2VydmVyKSB7XG4gICAgICAgICAgICB0aGlzLnJlc2l6ZU9ic2VydmVyLmRpc2Nvbm5lY3QoKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMudGVybWluYWw/LmRpc3Bvc2UoKTtcbiAgICB9XG59XG4iLCI8ZGl2ICN0ZXJtaW5hbCBjbGFzcz1cInRlcm1pbmFsLWNvbnRhaW5lclwiIFtzdHlsZS5oZWlnaHRdPVwiaGVpZ2h0XCI+PC9kaXY+XG4iXX0=