--- /dev/null
+/**
+ * Copyright (c) 2019 The xterm.js authors. All rights reserved.
+ * @license MIT
+ */
+
+import { IEvent } from 'common/EventEmitter';
+import { IBuffer, IBufferSet } from 'common/buffer/Types';
+import { IDecPrivateModes, ICoreMouseEvent, CoreMouseEncoding, ICoreMouseProtocol, CoreMouseEventType } from 'common/Types';
+import { createDecorator } from 'common/services/ServiceRegistry';
+
+export const IBufferService = createDecorator<IBufferService>('BufferService');
+export interface IBufferService {
+ serviceBrand: any;
+
+ readonly cols: number;
+ readonly rows: number;
+ readonly buffer: IBuffer;
+ readonly buffers: IBufferSet;
+
+ // TODO: Move resize event here
+
+ resize(cols: number, rows: number): void;
+ reset(): void;
+}
+
+export const ICoreMouseService = createDecorator<ICoreMouseService>('CoreMouseService');
+export interface ICoreMouseService {
+ activeProtocol: string;
+ activeEncoding: string;
+ addProtocol(name: string, protocol: ICoreMouseProtocol): void;
+ addEncoding(name: string, encoding: CoreMouseEncoding): void;
+ reset(): void;
+
+ /**
+ * Triggers a mouse event to be sent.
+ *
+ * Returns true if the event passed all protocol restrictions and a report
+ * was sent, otherwise false. The return value may be used to decide whether
+ * the default event action in the bowser component should be omitted.
+ *
+ * Note: The method will change values of the given event object
+ * to fullfill protocol and encoding restrictions.
+ */
+ triggerMouseEvent(event: ICoreMouseEvent): boolean;
+
+ /**
+ * Event to announce changes in mouse tracking.
+ */
+ onProtocolChange: IEvent<CoreMouseEventType>;
+
+ /**
+ * Human readable version of mouse events.
+ */
+ explainEvents(events: CoreMouseEventType): {[event: string]: boolean};
+}
+
+export const ICoreService = createDecorator<ICoreService>('CoreService');
+export interface ICoreService {
+ serviceBrand: any;
+
+ readonly decPrivateModes: IDecPrivateModes;
+
+ readonly onData: IEvent<string>;
+ readonly onUserInput: IEvent<void>;
+
+ reset(): void;
+
+ /**
+ * Triggers the onData event in the public API.
+ * @param data The data that is being emitted.
+ * @param wasFromUser Whether the data originated from the user (as opposed to
+ * resulting from parsing incoming data). When true this will also:
+ * - Scroll to the bottom of the buffer.s
+ * - Fire the `onUserInput` event (so selection can be cleared).
+ */
+ triggerDataEvent(data: string, wasUserInput?: boolean): void;
+}
+
+export const IDirtyRowService = createDecorator<IDirtyRowService>('DirtyRowService');
+export interface IDirtyRowService {
+ serviceBrand: any;
+
+ readonly start: number;
+ readonly end: number;
+
+ clearRange(): void;
+ markDirty(y: number): void;
+ markRangeDirty(y1: number, y2: number): void;
+ markAllDirty(): void;
+}
+
+export interface IServiceIdentifier<T> {
+ (...args: any[]): void;
+ type: T;
+}
+
+export interface IConstructorSignature0<T> {
+ new(...services: { serviceBrand: any; }[]): T;
+}
+
+export interface IConstructorSignature1<A1, T> {
+ new(first: A1, ...services: { serviceBrand: any; }[]): T;
+}
+
+export interface IConstructorSignature2<A1, A2, T> {
+ new(first: A1, second: A2, ...services: { serviceBrand: any; }[]): T;
+}
+
+export interface IConstructorSignature3<A1, A2, A3, T> {
+ new(first: A1, second: A2, third: A3, ...services: { serviceBrand: any; }[]): T;
+}
+
+export interface IConstructorSignature4<A1, A2, A3, A4, T> {
+ new(first: A1, second: A2, third: A3, fourth: A4, ...services: { serviceBrand: any; }[]): T;
+}
+
+export interface IConstructorSignature5<A1, A2, A3, A4, A5, T> {
+ new(first: A1, second: A2, third: A3, fourth: A4, fifth: A5, ...services: { serviceBrand: any; }[]): T;
+}
+
+export interface IConstructorSignature6<A1, A2, A3, A4, A5, A6, T> {
+ new(first: A1, second: A2, third: A3, fourth: A4, fifth: A5, sixth: A6, ...services: { serviceBrand: any; }[]): T;
+}
+
+export interface IConstructorSignature7<A1, A2, A3, A4, A5, A6, A7, T> {
+ new(first: A1, second: A2, third: A3, fourth: A4, fifth: A5, sixth: A6, seventh: A7, ...services: { serviceBrand: any; }[]): T;
+}
+
+export interface IConstructorSignature8<A1, A2, A3, A4, A5, A6, A7, A8, T> {
+ new(first: A1, second: A2, third: A3, fourth: A4, fifth: A5, sixth: A6, seventh: A7, eigth: A8, ...services: { serviceBrand: any; }[]): T;
+}
+
+export const IInstantiationService = createDecorator<IInstantiationService>('InstantiationService');
+export interface IInstantiationService {
+ setService<T>(id: IServiceIdentifier<T>, instance: T): void;
+
+ createInstance<T>(ctor: IConstructorSignature0<T>): T;
+ createInstance<A1, T>(ctor: IConstructorSignature1<A1, T>, first: A1): T;
+ createInstance<A1, A2, T>(ctor: IConstructorSignature2<A1, A2, T>, first: A1, second: A2): T;
+ createInstance<A1, A2, A3, T>(ctor: IConstructorSignature3<A1, A2, A3, T>, first: A1, second: A2, third: A3): T;
+ createInstance<A1, A2, A3, A4, T>(ctor: IConstructorSignature4<A1, A2, A3, A4, T>, first: A1, second: A2, third: A3, fourth: A4): T;
+ createInstance<A1, A2, A3, A4, A5, T>(ctor: IConstructorSignature5<A1, A2, A3, A4, A5, T>, first: A1, second: A2, third: A3, fourth: A4, fifth: A5): T;
+ createInstance<A1, A2, A3, A4, A5, A6, T>(ctor: IConstructorSignature6<A1, A2, A3, A4, A5, A6, T>, first: A1, second: A2, third: A3, fourth: A4, fifth: A5, sixth: A6): T;
+ createInstance<A1, A2, A3, A4, A5, A6, A7, T>(ctor: IConstructorSignature7<A1, A2, A3, A4, A5, A6, A7, T>, first: A1, second: A2, third: A3, fourth: A4, fifth: A5, sixth: A6, seventh: A7): T;
+ createInstance<A1, A2, A3, A4, A5, A6, A7, A8, T>(ctor: IConstructorSignature8<A1, A2, A3, A4, A5, A6, A7, A8, T>, first: A1, second: A2, third: A3, fourth: A4, fifth: A5, sixth: A6, seventh: A7, eigth: A8): T;
+}
+
+export const ILogService = createDecorator<ILogService>('LogService');
+export interface ILogService {
+ serviceBrand: any;
+
+ debug(message: any, ...optionalParams: any[]): void;
+ info(message: any, ...optionalParams: any[]): void;
+ warn(message: any, ...optionalParams: any[]): void;
+ error(message: any, ...optionalParams: any[]): void;
+}
+
+export const IOptionsService = createDecorator<IOptionsService>('OptionsService');
+export interface IOptionsService {
+ serviceBrand: any;
+
+ readonly options: ITerminalOptions;
+
+ readonly onOptionChange: IEvent<string>;
+
+ setOption<T>(key: string, value: T): void;
+ getOption<T>(key: string): T | undefined;
+}
+
+export type FontWeight = 'normal' | 'bold' | '100' | '200' | '300' | '400' | '500' | '600' | '700' | '800' | '900';
+export type LogLevel = 'debug' | 'info' | 'warn' | 'error' | 'off';
+export type RendererType = 'dom' | 'canvas';
+
+export interface IPartialTerminalOptions {
+ allowTransparency?: boolean;
+ bellSound?: string;
+ bellStyle?: 'none' /*| 'visual'*/ | 'sound' /*| 'both'*/;
+ cols?: number;
+ cursorBlink?: boolean;
+ cursorStyle?: 'block' | 'underline' | 'bar';
+ disableStdin?: boolean;
+ drawBoldTextInBrightColors?: boolean;
+ fastScrollModifier?: 'alt' | 'ctrl' | 'shift';
+ fastScrollSensitivity?: number;
+ fontSize?: number;
+ fontFamily?: string;
+ fontWeight?: FontWeight;
+ fontWeightBold?: FontWeight;
+ letterSpacing?: number;
+ lineHeight?: number;
+ logLevel?: LogLevel;
+ macOptionIsMeta?: boolean;
+ macOptionClickForcesSelection?: boolean;
+ rendererType?: RendererType;
+ rightClickSelectsWord?: boolean;
+ rows?: number;
+ screenReaderMode?: boolean;
+ scrollback?: number;
+ scrollSensitivity?: number;
+ tabStopWidth?: number;
+ theme?: ITheme;
+ windowsMode?: boolean;
+ wordSeparator?: string;
+}
+
+export interface ITerminalOptions {
+ allowTransparency: boolean;
+ bellSound: string;
+ bellStyle: 'none' /*| 'visual'*/ | 'sound' /*| 'both'*/;
+ cols: number;
+ cursorBlink: boolean;
+ cursorStyle: 'block' | 'underline' | 'bar';
+ disableStdin: boolean;
+ drawBoldTextInBrightColors: boolean;
+ fastScrollModifier: 'alt' | 'ctrl' | 'shift' | undefined;
+ fastScrollSensitivity: number;
+ fontSize: number;
+ fontFamily: string;
+ fontWeight: FontWeight;
+ fontWeightBold: FontWeight;
+ letterSpacing: number;
+ lineHeight: number;
+ logLevel: LogLevel;
+ macOptionIsMeta: boolean;
+ macOptionClickForcesSelection: boolean;
+ rendererType: RendererType;
+ rightClickSelectsWord: boolean;
+ rows: number;
+ screenReaderMode: boolean;
+ scrollback: number;
+ scrollSensitivity: number;
+ tabStopWidth: number;
+ theme: ITheme;
+ windowsMode: boolean;
+ wordSeparator: string;
+
+ [key: string]: any;
+ cancelEvents: boolean;
+ convertEol: boolean;
+ screenKeys: boolean;
+ termName: string;
+ useFlowControl: boolean;
+}
+
+export interface ITheme {
+ foreground?: string;
+ background?: string;
+ cursor?: string;
+ cursorAccent?: string;
+ selection?: string;
+ black?: string;
+ red?: string;
+ green?: string;
+ yellow?: string;
+ blue?: string;
+ magenta?: string;
+ cyan?: string;
+ white?: string;
+ brightBlack?: string;
+ brightRed?: string;
+ brightGreen?: string;
+ brightYellow?: string;
+ brightBlue?: string;
+ brightMagenta?: string;
+ brightCyan?: string;
+ brightWhite?: string;
+}