UNPKG

@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
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=