@wendongfly/myhi 1.0.2 → 1.0.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (135) hide show
  1. package/dist/index.js +22 -20
  2. package/dist/lib/xterm/LICENSE +21 -0
  3. package/dist/lib/xterm/README.md +225 -0
  4. package/dist/lib/xterm/css/xterm.css +190 -0
  5. package/dist/lib/xterm/lib/xterm.js +2 -0
  6. package/dist/lib/xterm/lib/xterm.js.map +1 -0
  7. package/dist/lib/xterm/package.json +90 -0
  8. package/dist/lib/xterm/src/browser/AccessibilityManager.ts +301 -0
  9. package/dist/lib/xterm/src/browser/Clipboard.ts +99 -0
  10. package/dist/lib/xterm/src/browser/ColorContrastCache.ts +39 -0
  11. package/dist/lib/xterm/src/browser/ColorManager.ts +268 -0
  12. package/dist/lib/xterm/src/browser/Dom.ts +10 -0
  13. package/dist/lib/xterm/src/browser/Lifecycle.ts +30 -0
  14. package/dist/lib/xterm/src/browser/Linkifier.ts +356 -0
  15. package/dist/lib/xterm/src/browser/Linkifier2.ts +397 -0
  16. package/dist/lib/xterm/src/browser/LocalizableStrings.ts +10 -0
  17. package/dist/lib/xterm/src/browser/MouseZoneManager.ts +236 -0
  18. package/dist/lib/xterm/src/browser/RenderDebouncer.ts +82 -0
  19. package/dist/lib/xterm/src/browser/ScreenDprMonitor.ts +69 -0
  20. package/dist/lib/xterm/src/browser/Terminal.ts +1447 -0
  21. package/dist/lib/xterm/src/browser/TimeBasedDebouncer.ts +86 -0
  22. package/dist/lib/xterm/src/browser/Types.d.ts +317 -0
  23. package/dist/lib/xterm/src/browser/Viewport.ts +276 -0
  24. package/dist/lib/xterm/src/browser/decorations/BufferDecorationRenderer.ts +131 -0
  25. package/dist/lib/xterm/src/browser/decorations/ColorZoneStore.ts +117 -0
  26. package/dist/lib/xterm/src/browser/decorations/OverviewRulerRenderer.ts +228 -0
  27. package/dist/lib/xterm/src/browser/input/CompositionHelper.ts +237 -0
  28. package/dist/lib/xterm/src/browser/input/Mouse.ts +64 -0
  29. package/dist/lib/xterm/src/browser/input/MoveToCell.ts +249 -0
  30. package/dist/lib/xterm/src/browser/public/Terminal.ts +298 -0
  31. package/dist/lib/xterm/src/browser/renderer/BaseRenderLayer.ts +582 -0
  32. package/dist/lib/xterm/src/browser/renderer/CursorRenderLayer.ts +378 -0
  33. package/dist/lib/xterm/src/browser/renderer/CustomGlyphs.ts +632 -0
  34. package/dist/lib/xterm/src/browser/renderer/GridCache.ts +33 -0
  35. package/dist/lib/xterm/src/browser/renderer/LinkRenderLayer.ts +84 -0
  36. package/dist/lib/xterm/src/browser/renderer/Renderer.ts +219 -0
  37. package/dist/lib/xterm/src/browser/renderer/RendererUtils.ts +26 -0
  38. package/dist/lib/xterm/src/browser/renderer/SelectionRenderLayer.ts +131 -0
  39. package/dist/lib/xterm/src/browser/renderer/TextRenderLayer.ts +344 -0
  40. package/dist/lib/xterm/src/browser/renderer/Types.d.ts +109 -0
  41. package/dist/lib/xterm/src/browser/renderer/atlas/BaseCharAtlas.ts +58 -0
  42. package/dist/lib/xterm/src/browser/renderer/atlas/CharAtlasCache.ts +95 -0
  43. package/dist/lib/xterm/src/browser/renderer/atlas/CharAtlasUtils.ts +54 -0
  44. package/dist/lib/xterm/src/browser/renderer/atlas/Constants.ts +15 -0
  45. package/dist/lib/xterm/src/browser/renderer/atlas/DynamicCharAtlas.ts +404 -0
  46. package/dist/lib/xterm/src/browser/renderer/atlas/LRUMap.ts +136 -0
  47. package/dist/lib/xterm/src/browser/renderer/atlas/Types.d.ts +29 -0
  48. package/dist/lib/xterm/src/browser/renderer/dom/DomRenderer.ts +403 -0
  49. package/dist/lib/xterm/src/browser/renderer/dom/DomRendererRowFactory.ts +344 -0
  50. package/dist/lib/xterm/src/browser/selection/SelectionModel.ts +144 -0
  51. package/dist/lib/xterm/src/browser/selection/Types.d.ts +15 -0
  52. package/dist/lib/xterm/src/browser/services/CharSizeService.ts +87 -0
  53. package/dist/lib/xterm/src/browser/services/CharacterJoinerService.ts +339 -0
  54. package/dist/lib/xterm/src/browser/services/CoreBrowserService.ts +20 -0
  55. package/dist/lib/xterm/src/browser/services/MouseService.ts +36 -0
  56. package/dist/lib/xterm/src/browser/services/RenderService.ts +237 -0
  57. package/dist/lib/xterm/src/browser/services/SelectionService.ts +1027 -0
  58. package/dist/lib/xterm/src/browser/services/Services.ts +123 -0
  59. package/dist/lib/xterm/src/browser/services/SoundService.ts +63 -0
  60. package/dist/lib/xterm/src/common/CircularList.ts +239 -0
  61. package/dist/lib/xterm/src/common/Clone.ts +23 -0
  62. package/dist/lib/xterm/src/common/Color.ts +285 -0
  63. package/dist/lib/xterm/src/common/CoreTerminal.ts +300 -0
  64. package/dist/lib/xterm/src/common/EventEmitter.ts +69 -0
  65. package/dist/lib/xterm/src/common/InputHandler.ts +3230 -0
  66. package/dist/lib/xterm/src/common/Lifecycle.ts +68 -0
  67. package/dist/lib/xterm/src/common/Platform.ts +31 -0
  68. package/dist/lib/xterm/src/common/SortedList.ts +88 -0
  69. package/dist/lib/xterm/src/common/TypedArrayUtils.ts +50 -0
  70. package/dist/lib/xterm/src/common/Types.d.ts +489 -0
  71. package/dist/lib/xterm/src/common/WindowsMode.ts +27 -0
  72. package/dist/lib/xterm/src/common/buffer/AttributeData.ts +148 -0
  73. package/dist/lib/xterm/src/common/buffer/Buffer.ts +711 -0
  74. package/dist/lib/xterm/src/common/buffer/BufferLine.ts +441 -0
  75. package/dist/lib/xterm/src/common/buffer/BufferRange.ts +13 -0
  76. package/dist/lib/xterm/src/common/buffer/BufferReflow.ts +220 -0
  77. package/dist/lib/xterm/src/common/buffer/BufferSet.ts +131 -0
  78. package/dist/lib/xterm/src/common/buffer/CellData.ts +94 -0
  79. package/dist/lib/xterm/src/common/buffer/Constants.ts +139 -0
  80. package/dist/lib/xterm/src/common/buffer/Marker.ts +37 -0
  81. package/dist/lib/xterm/src/common/buffer/Types.d.ts +64 -0
  82. package/dist/lib/xterm/src/common/data/Charsets.ts +256 -0
  83. package/dist/lib/xterm/src/common/data/EscapeSequences.ts +153 -0
  84. package/dist/lib/xterm/src/common/input/Keyboard.ts +398 -0
  85. package/dist/lib/xterm/src/common/input/TextDecoder.ts +346 -0
  86. package/dist/lib/xterm/src/common/input/UnicodeV6.ts +133 -0
  87. package/dist/lib/xterm/src/common/input/WriteBuffer.ts +229 -0
  88. package/dist/lib/xterm/src/common/input/XParseColor.ts +80 -0
  89. package/dist/lib/xterm/src/common/parser/Constants.ts +58 -0
  90. package/dist/lib/xterm/src/common/parser/DcsParser.ts +192 -0
  91. package/dist/lib/xterm/src/common/parser/EscapeSequenceParser.ts +796 -0
  92. package/dist/lib/xterm/src/common/parser/OscParser.ts +238 -0
  93. package/dist/lib/xterm/src/common/parser/Params.ts +229 -0
  94. package/dist/lib/xterm/src/common/parser/Types.d.ts +274 -0
  95. package/dist/lib/xterm/src/common/public/AddonManager.ts +56 -0
  96. package/dist/lib/xterm/src/common/public/BufferApiView.ts +35 -0
  97. package/dist/lib/xterm/src/common/public/BufferLineApiView.ts +29 -0
  98. package/dist/lib/xterm/src/common/public/BufferNamespaceApi.ts +33 -0
  99. package/dist/lib/xterm/src/common/public/ParserApi.ts +37 -0
  100. package/dist/lib/xterm/src/common/public/UnicodeApi.ts +27 -0
  101. package/dist/lib/xterm/src/common/services/BufferService.ts +185 -0
  102. package/dist/lib/xterm/src/common/services/CharsetService.ts +34 -0
  103. package/dist/lib/xterm/src/common/services/CoreMouseService.ts +309 -0
  104. package/dist/lib/xterm/src/common/services/CoreService.ts +92 -0
  105. package/dist/lib/xterm/src/common/services/DecorationService.ts +139 -0
  106. package/dist/lib/xterm/src/common/services/DirtyRowService.ts +53 -0
  107. package/dist/lib/xterm/src/common/services/InstantiationService.ts +83 -0
  108. package/dist/lib/xterm/src/common/services/LogService.ts +88 -0
  109. package/dist/lib/xterm/src/common/services/OptionsService.ts +178 -0
  110. package/dist/lib/xterm/src/common/services/ServiceRegistry.ts +49 -0
  111. package/dist/lib/xterm/src/common/services/Services.ts +323 -0
  112. package/dist/lib/xterm/src/common/services/UnicodeService.ts +82 -0
  113. package/dist/lib/xterm/src/headless/Terminal.ts +170 -0
  114. package/dist/lib/xterm/src/headless/Types.d.ts +31 -0
  115. package/dist/lib/xterm/src/headless/public/Terminal.ts +216 -0
  116. package/dist/lib/xterm/typings/xterm.d.ts +1872 -0
  117. package/dist/lib/xterm-fit/LICENSE +19 -0
  118. package/dist/lib/xterm-fit/README.md +24 -0
  119. package/dist/lib/xterm-fit/lib/xterm-addon-fit.js +2 -0
  120. package/dist/lib/xterm-fit/lib/xterm-addon-fit.js.map +1 -0
  121. package/dist/lib/xterm-fit/out/FitAddon.js +58 -0
  122. package/dist/lib/xterm-fit/out/FitAddon.js.map +1 -0
  123. package/dist/lib/xterm-fit/out-test/FitAddon.api.js.map +1 -0
  124. package/dist/lib/xterm-fit/package.json +21 -0
  125. package/dist/lib/xterm-fit/src/FitAddon.ts +86 -0
  126. package/dist/lib/xterm-fit/typings/xterm-addon-fit.d.ts +55 -0
  127. package/dist/lib/xterm-links/LICENSE +19 -0
  128. package/dist/lib/xterm-links/README.md +21 -0
  129. package/dist/lib/xterm-links/lib/xterm-addon-web-links.js +2 -0
  130. package/dist/lib/xterm-links/lib/xterm-addon-web-links.js.map +1 -0
  131. package/dist/lib/xterm-links/package.json +26 -0
  132. package/dist/lib/xterm-links/src/WebLinkProvider.ts +145 -0
  133. package/dist/lib/xterm-links/src/WebLinksAddon.ts +77 -0
  134. package/dist/lib/xterm-links/typings/xterm-addon-web-links.d.ts +58 -0
  135. package/package.json +1 -1
@@ -0,0 +1,83 @@
1
+ /**
2
+ * Copyright (c) 2019 The xterm.js authors. All rights reserved.
3
+ * @license MIT
4
+ *
5
+ * This was heavily inspired from microsoft/vscode's dependency injection system (MIT).
6
+ */
7
+ /*---------------------------------------------------------------------------------------------
8
+ * Copyright (c) Microsoft Corporation. All rights reserved.
9
+ * Licensed under the MIT License. See License.txt in the project root for license information.
10
+ *--------------------------------------------------------------------------------------------*/
11
+
12
+ import { IInstantiationService, IServiceIdentifier } from 'common/services/Services';
13
+ import { getServiceDependencies } from 'common/services/ServiceRegistry';
14
+
15
+ export class ServiceCollection {
16
+
17
+ private _entries = new Map<IServiceIdentifier<any>, any>();
18
+
19
+ constructor(...entries: [IServiceIdentifier<any>, any][]) {
20
+ for (const [id, service] of entries) {
21
+ this.set(id, service);
22
+ }
23
+ }
24
+
25
+ public set<T>(id: IServiceIdentifier<T>, instance: T): T {
26
+ const result = this._entries.get(id);
27
+ this._entries.set(id, instance);
28
+ return result;
29
+ }
30
+
31
+ public forEach(callback: (id: IServiceIdentifier<any>, instance: any) => any): void {
32
+ this._entries.forEach((value, key) => callback(key, value));
33
+ }
34
+
35
+ public has(id: IServiceIdentifier<any>): boolean {
36
+ return this._entries.has(id);
37
+ }
38
+
39
+ public get<T>(id: IServiceIdentifier<T>): T | undefined {
40
+ return this._entries.get(id);
41
+ }
42
+ }
43
+
44
+ export class InstantiationService implements IInstantiationService {
45
+ public serviceBrand: undefined;
46
+
47
+ private readonly _services: ServiceCollection = new ServiceCollection();
48
+
49
+ constructor() {
50
+ this._services.set(IInstantiationService, this);
51
+ }
52
+
53
+ public setService<T>(id: IServiceIdentifier<T>, instance: T): void {
54
+ this._services.set(id, instance);
55
+ }
56
+
57
+ public getService<T>(id: IServiceIdentifier<T>): T | undefined {
58
+ return this._services.get(id);
59
+ }
60
+
61
+ public createInstance<T>(ctor: any, ...args: any[]): T {
62
+ const serviceDependencies = getServiceDependencies(ctor).sort((a, b) => a.index - b.index);
63
+
64
+ const serviceArgs: any[] = [];
65
+ for (const dependency of serviceDependencies) {
66
+ const service = this._services.get(dependency.id);
67
+ if (!service) {
68
+ throw new Error(`[createInstance] ${ctor.name} depends on UNKNOWN service ${dependency.id}.`);
69
+ }
70
+ serviceArgs.push(service);
71
+ }
72
+
73
+ const firstServiceArgPos = serviceDependencies.length > 0 ? serviceDependencies[0].index : args.length;
74
+
75
+ // check for argument mismatches, adjust static args if needed
76
+ if (args.length !== firstServiceArgPos) {
77
+ throw new Error(`[createInstance] First service dependency of ${ctor.name} at position ${firstServiceArgPos + 1} conflicts with ${args.length} static arguments`);
78
+ }
79
+
80
+ // now create the instance
81
+ return new ctor(...[...args, ...serviceArgs]);
82
+ }
83
+ }
@@ -0,0 +1,88 @@
1
+ /**
2
+ * Copyright (c) 2019 The xterm.js authors. All rights reserved.
3
+ * @license MIT
4
+ */
5
+
6
+ import { ILogService, IOptionsService, LogLevelEnum } from 'common/services/Services';
7
+
8
+ type LogType = (message?: any, ...optionalParams: any[]) => void;
9
+
10
+ interface IConsole {
11
+ log: LogType;
12
+ error: LogType;
13
+ info: LogType;
14
+ trace: LogType;
15
+ warn: LogType;
16
+ }
17
+
18
+ // console is available on both node.js and browser contexts but the common
19
+ // module doesn't depend on them so we need to explicitly declare it.
20
+ declare const console: IConsole;
21
+
22
+ const optionsKeyToLogLevel: { [key: string]: LogLevelEnum } = {
23
+ debug: LogLevelEnum.DEBUG,
24
+ info: LogLevelEnum.INFO,
25
+ warn: LogLevelEnum.WARN,
26
+ error: LogLevelEnum.ERROR,
27
+ off: LogLevelEnum.OFF
28
+ };
29
+
30
+ const LOG_PREFIX = 'xterm.js: ';
31
+
32
+ export class LogService implements ILogService {
33
+ public serviceBrand: any;
34
+
35
+ public logLevel: LogLevelEnum = LogLevelEnum.OFF;
36
+
37
+ constructor(
38
+ @IOptionsService private readonly _optionsService: IOptionsService
39
+ ) {
40
+ this._updateLogLevel();
41
+ this._optionsService.onOptionChange(key => {
42
+ if (key === 'logLevel') {
43
+ this._updateLogLevel();
44
+ }
45
+ });
46
+ }
47
+
48
+ private _updateLogLevel(): void {
49
+ this.logLevel = optionsKeyToLogLevel[this._optionsService.rawOptions.logLevel];
50
+ }
51
+
52
+ private _evalLazyOptionalParams(optionalParams: any[]): void {
53
+ for (let i = 0; i < optionalParams.length; i++) {
54
+ if (typeof optionalParams[i] === 'function') {
55
+ optionalParams[i] = optionalParams[i]();
56
+ }
57
+ }
58
+ }
59
+
60
+ private _log(type: LogType, message: string, optionalParams: any[]): void {
61
+ this._evalLazyOptionalParams(optionalParams);
62
+ type.call(console, LOG_PREFIX + message, ...optionalParams);
63
+ }
64
+
65
+ public debug(message: string, ...optionalParams: any[]): void {
66
+ if (this.logLevel <= LogLevelEnum.DEBUG) {
67
+ this._log(console.log, message, optionalParams);
68
+ }
69
+ }
70
+
71
+ public info(message: string, ...optionalParams: any[]): void {
72
+ if (this.logLevel <= LogLevelEnum.INFO) {
73
+ this._log(console.info, message, optionalParams);
74
+ }
75
+ }
76
+
77
+ public warn(message: string, ...optionalParams: any[]): void {
78
+ if (this.logLevel <= LogLevelEnum.WARN) {
79
+ this._log(console.warn, message, optionalParams);
80
+ }
81
+ }
82
+
83
+ public error(message: string, ...optionalParams: any[]): void {
84
+ if (this.logLevel <= LogLevelEnum.ERROR) {
85
+ this._log(console.error, message, optionalParams);
86
+ }
87
+ }
88
+ }
@@ -0,0 +1,178 @@
1
+ /**
2
+ * Copyright (c) 2019 The xterm.js authors. All rights reserved.
3
+ * @license MIT
4
+ */
5
+
6
+ import { IOptionsService, ITerminalOptions, FontWeight } from 'common/services/Services';
7
+ import { EventEmitter, IEvent } from 'common/EventEmitter';
8
+ import { isMac } from 'common/Platform';
9
+
10
+ // Source: https://freesound.org/people/altemark/sounds/45759/
11
+ // This sound is released under the Creative Commons Attribution 3.0 Unported
12
+ // (CC BY 3.0) license. It was created by 'altemark'. No modifications have been
13
+ // made, apart from the conversion to base64.
14
+ export const DEFAULT_BELL_SOUND = 'data:audio/mp3;base64,SUQzBAAAAAAAI1RTU0UAAAAPAAADTGF2ZjU4LjMyLjEwNAAAAAAAAAAAAAAA//tQxAADB8AhSmxhIIEVCSiJrDCQBTcu3UrAIwUdkRgQbFAZC1CQEwTJ9mjRvBA4UOLD8nKVOWfh+UlK3z/177OXrfOdKl7pyn3Xf//WreyTRUoAWgBgkOAGbZHBgG1OF6zM82DWbZaUmMBptgQhGjsyYqc9ae9XFz280948NMBWInljyzsNRFLPWdnZGWrddDsjK1unuSrVN9jJsK8KuQtQCtMBjCEtImISdNKJOopIpBFpNSMbIHCSRpRR5iakjTiyzLhchUUBwCgyKiweBv/7UsQbg8isVNoMPMjAAAA0gAAABEVFGmgqK////9bP/6XCykxBTUUzLjEwMKqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqq';
15
+
16
+ export const DEFAULT_OPTIONS: Readonly<ITerminalOptions> = {
17
+ cols: 80,
18
+ rows: 24,
19
+ cursorBlink: false,
20
+ cursorStyle: 'block',
21
+ cursorWidth: 1,
22
+ customGlyphs: true,
23
+ bellSound: DEFAULT_BELL_SOUND,
24
+ bellStyle: 'none',
25
+ drawBoldTextInBrightColors: true,
26
+ fastScrollModifier: 'alt',
27
+ fastScrollSensitivity: 5,
28
+ fontFamily: 'courier-new, courier, monospace',
29
+ fontSize: 15,
30
+ fontWeight: 'normal',
31
+ fontWeightBold: 'bold',
32
+ lineHeight: 1.0,
33
+ linkTooltipHoverDuration: 500,
34
+ letterSpacing: 0,
35
+ logLevel: 'info',
36
+ scrollback: 1000,
37
+ scrollSensitivity: 1,
38
+ screenReaderMode: false,
39
+ macOptionIsMeta: false,
40
+ macOptionClickForcesSelection: false,
41
+ minimumContrastRatio: 1,
42
+ disableStdin: false,
43
+ allowProposedApi: true,
44
+ allowTransparency: false,
45
+ tabStopWidth: 8,
46
+ theme: {},
47
+ rightClickSelectsWord: isMac,
48
+ rendererType: 'canvas',
49
+ windowOptions: {},
50
+ windowsMode: false,
51
+ wordSeparator: ' ()[]{}\',"`',
52
+ altClickMovesCursor: true,
53
+ convertEol: false,
54
+ termName: 'xterm',
55
+ cancelEvents: false,
56
+ overviewRulerWidth: undefined
57
+ };
58
+
59
+ const FONT_WEIGHT_OPTIONS: Extract<FontWeight, string>[] = ['normal', 'bold', '100', '200', '300', '400', '500', '600', '700', '800', '900'];
60
+
61
+ export class OptionsService implements IOptionsService {
62
+ public serviceBrand: any;
63
+
64
+ public readonly rawOptions: ITerminalOptions;
65
+ public options: ITerminalOptions;
66
+
67
+ private _onOptionChange = new EventEmitter<string>();
68
+ public get onOptionChange(): IEvent<string> { return this._onOptionChange.event; }
69
+
70
+ constructor(options: Partial<ITerminalOptions>) {
71
+ // set the default value of each option
72
+ const defaultOptions = { ...DEFAULT_OPTIONS };
73
+ for (const key in options) {
74
+ if (key in defaultOptions) {
75
+ try {
76
+ const newValue = options[key];
77
+ defaultOptions[key] = this._sanitizeAndValidateOption(key, newValue);
78
+ } catch (e) {
79
+ console.error(e);
80
+ }
81
+ }
82
+ }
83
+
84
+ // set up getters and setters for each option
85
+ this.rawOptions = defaultOptions;
86
+ this.options = { ... defaultOptions };
87
+ this._setupOptions();
88
+ }
89
+
90
+ private _setupOptions(): void {
91
+ const getter = (propName: string): any => {
92
+ if (!(propName in DEFAULT_OPTIONS)) {
93
+ throw new Error(`No option with key "${propName}"`);
94
+ }
95
+ return this.rawOptions[propName];
96
+ };
97
+
98
+ const setter = (propName: string, value: any): void => {
99
+ if (!(propName in DEFAULT_OPTIONS)) {
100
+ throw new Error(`No option with key "${propName}"`);
101
+ }
102
+
103
+ value = this._sanitizeAndValidateOption(propName, value);
104
+ // Don't fire an option change event if they didn't change
105
+ if (this.rawOptions[propName] !== value) {
106
+ this.rawOptions[propName] = value;
107
+ this._onOptionChange.fire(propName);
108
+ }
109
+ };
110
+
111
+ for (const propName in this.rawOptions) {
112
+ const desc = {
113
+ get: getter.bind(this, propName),
114
+ set: setter.bind(this, propName)
115
+ };
116
+ Object.defineProperty(this.options, propName, desc);
117
+ }
118
+ }
119
+
120
+ public setOption(key: string, value: any): void {
121
+ this.options[key] = value;
122
+ }
123
+
124
+ private _sanitizeAndValidateOption(key: string, value: any): any {
125
+ switch (key) {
126
+ case 'bellStyle':
127
+ case 'cursorStyle':
128
+ case 'rendererType':
129
+ case 'wordSeparator':
130
+ if (!value) {
131
+ value = DEFAULT_OPTIONS[key];
132
+ }
133
+ break;
134
+ case 'fontWeight':
135
+ case 'fontWeightBold':
136
+ if (typeof value === 'number' && 1 <= value && value <= 1000) {
137
+ // already valid numeric value
138
+ break;
139
+ }
140
+ value = FONT_WEIGHT_OPTIONS.includes(value) ? value : DEFAULT_OPTIONS[key];
141
+ break;
142
+ case 'cursorWidth':
143
+ value = Math.floor(value);
144
+ // Fall through for bounds check
145
+ case 'lineHeight':
146
+ case 'tabStopWidth':
147
+ if (value < 1) {
148
+ throw new Error(`${key} cannot be less than 1, value: ${value}`);
149
+ }
150
+ break;
151
+ case 'minimumContrastRatio':
152
+ value = Math.max(1, Math.min(21, Math.round(value * 10) / 10));
153
+ break;
154
+ case 'scrollback':
155
+ value = Math.min(value, 4294967295);
156
+ if (value < 0) {
157
+ throw new Error(`${key} cannot be less than 0, value: ${value}`);
158
+ }
159
+ break;
160
+ case 'fastScrollSensitivity':
161
+ case 'scrollSensitivity':
162
+ if (value <= 0) {
163
+ throw new Error(`${key} cannot be less than or equal to 0, value: ${value}`);
164
+ }
165
+ case 'rows':
166
+ case 'cols':
167
+ if (!value && value !== 0) {
168
+ throw new Error(`${key} must be numeric, value: ${value}`);
169
+ }
170
+ break;
171
+ }
172
+ return value;
173
+ }
174
+
175
+ public getOption(key: string): any {
176
+ return this.options[key];
177
+ }
178
+ }
@@ -0,0 +1,49 @@
1
+ /**
2
+ * Copyright (c) 2019 The xterm.js authors. All rights reserved.
3
+ * @license MIT
4
+ *
5
+ * This was heavily inspired from microsoft/vscode's dependency injection system (MIT).
6
+ */
7
+ /*---------------------------------------------------------------------------------------------
8
+ * Copyright (c) Microsoft Corporation. All rights reserved.
9
+ * Licensed under the MIT License. See License.txt in the project root for license information.
10
+ *--------------------------------------------------------------------------------------------*/
11
+
12
+ import { IServiceIdentifier } from 'common/services/Services';
13
+
14
+ const DI_TARGET = 'di$target';
15
+ const DI_DEPENDENCIES = 'di$dependencies';
16
+
17
+ export const serviceRegistry: Map<string, IServiceIdentifier<any>> = new Map();
18
+
19
+ export function getServiceDependencies(ctor: any): { id: IServiceIdentifier<any>, index: number, optional: boolean }[] {
20
+ return ctor[DI_DEPENDENCIES] || [];
21
+ }
22
+
23
+ export function createDecorator<T>(id: string): IServiceIdentifier<T> {
24
+ if (serviceRegistry.has(id)) {
25
+ return serviceRegistry.get(id)!;
26
+ }
27
+
28
+ const decorator: any = function (target: Function, key: string, index: number): any {
29
+ if (arguments.length !== 3) {
30
+ throw new Error('@IServiceName-decorator can only be used to decorate a parameter');
31
+ }
32
+
33
+ storeServiceDependency(decorator, target, index);
34
+ };
35
+
36
+ decorator.toString = () => id;
37
+
38
+ serviceRegistry.set(id, decorator);
39
+ return decorator;
40
+ }
41
+
42
+ function storeServiceDependency(id: Function, target: Function, index: number): void {
43
+ if ((target as any)[DI_TARGET] === target) {
44
+ (target as any)[DI_DEPENDENCIES].push({ id, index });
45
+ } else {
46
+ (target as any)[DI_DEPENDENCIES] = [{ id, index }];
47
+ (target as any)[DI_TARGET] = target;
48
+ }
49
+ }