Skip to content

Commit b08bd52

Browse files
committed
(#533) Extend provider registry with checks for providers, disable loading of default clipboard provider via env var
1 parent 63131d8 commit b08bd52

File tree

2 files changed

+101
-11
lines changed

2 files changed

+101
-11
lines changed

Diff for: lib/constants.ts

+4
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
export const DISABLE_DEFAULT_PROVIDERS_ENV_VAR =
2+
"NUT_JS_DISABLE_DEFAULT_PROVIDERS";
3+
export const DISABLE_DEFAULT_CLIPBOARD_PROVIDER_ENV_VAR =
4+
"NUT_JS_DISABLE_DEFAULT_CLIPBOARD_PROVIDER";

Diff for: lib/provider/provider-registry.class.ts

+97-11
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,6 @@ import { MouseProviderInterface } from "./mouse-provider.interface";
55
import { ScreenProviderInterface } from "./screen-provider.interface";
66
import { WindowProviderInterface } from "./window-provider.interface";
77

8-
import Clipboard from "./native/clipboardy-clipboard.class";
98
import Mouse from "./native/libnut-mouse.class";
109
import Keyboard from "./native/libnut-keyboard.class";
1110
import Screen from "./native/libnut-screen.class";
@@ -23,56 +22,86 @@ import { TextFinderInterface } from "./text-finder.interface";
2322
import { WindowFinderInterface } from "./window-finder.interface";
2423
import { ColorFinderInterface } from "./color-finder.interface";
2524
import ColorFinderImpl from "./color/color-finder.class";
25+
import {
26+
DISABLE_DEFAULT_CLIPBOARD_PROVIDER_ENV_VAR,
27+
DISABLE_DEFAULT_PROVIDERS_ENV_VAR,
28+
} from "../constants";
2629

2730
export interface ProviderRegistry {
31+
hasClipboard(): boolean;
32+
2833
getClipboard(): ClipboardProviderInterface;
2934

3035
registerClipboardProvider(value: ClipboardProviderInterface): void;
3136

37+
hasKeyboard(): boolean;
38+
3239
getKeyboard(): KeyboardProviderInterface;
3340

3441
registerKeyboardProvider(value: KeyboardProviderInterface): void;
3542

43+
hasMouse(): boolean;
44+
3645
getMouse(): MouseProviderInterface;
3746

3847
registerMouseProvider(value: MouseProviderInterface): void;
3948

49+
hasScreen(): boolean;
50+
4051
getScreen(): ScreenProviderInterface;
4152

4253
registerScreenProvider(value: ScreenProviderInterface): void;
4354

55+
hasWindow(): boolean;
56+
4457
getWindow(): WindowProviderInterface;
4558

4659
registerWindowProvider(value: WindowProviderInterface): void;
4760

61+
hasImageFinder(): boolean;
62+
4863
getImageFinder(): ImageFinderInterface;
4964

5065
registerImageFinder(value: ImageFinderInterface): void;
5166

67+
hasImageReader(): boolean;
68+
5269
getImageReader(): ImageReader;
5370

5471
registerImageReader(value: ImageReader): void;
5572

73+
hasImageWriter(): boolean;
74+
5675
getImageWriter(): ImageWriter;
5776

5877
registerImageWriter(value: ImageWriter): void;
5978

79+
hasImageProcessor(): boolean;
80+
6081
getImageProcessor(): ImageProcessor;
6182

6283
registerImageProcessor(value: ImageProcessor): void;
6384

85+
hasLogProvider(): boolean;
86+
6487
getLogProvider(): LogProviderInterface;
6588

6689
registerLogProvider(value: LogProviderInterface): void;
6790

91+
hasTextFinder(): boolean;
92+
6893
getTextFinder(): TextFinderInterface;
6994

7095
registerTextFinder(value: TextFinderInterface): void;
7196

97+
hasWindowFinder(): boolean;
98+
7299
getWindowFinder(): WindowFinderInterface;
73100

74101
registerWindowFinder(value: WindowFinderInterface): void;
75102

103+
hasColorFinder(): boolean;
104+
76105
getColorFinder(): ColorFinderInterface;
77106

78107
registerColorFinder(value: ColorFinderInterface): void;
@@ -93,6 +122,10 @@ class DefaultProviderRegistry implements ProviderRegistry {
93122
private _windowFinder?: WindowFinderInterface;
94123
private _colorFinder?: ColorFinderInterface;
95124

125+
hasClipboard(): boolean {
126+
return this._clipboard != null;
127+
}
128+
96129
getClipboard = (): ClipboardProviderInterface => {
97130
if (this._clipboard) {
98131
return this._clipboard;
@@ -107,6 +140,10 @@ class DefaultProviderRegistry implements ProviderRegistry {
107140
this.getLogProvider().trace("Registered new clipboard provider", value);
108141
};
109142

143+
hasImageFinder(): boolean {
144+
return this._imageFinder != null;
145+
}
146+
110147
getImageFinder = (): ImageFinderInterface => {
111148
if (this._imageFinder) {
112149
return this._imageFinder;
@@ -121,6 +158,10 @@ class DefaultProviderRegistry implements ProviderRegistry {
121158
this.getLogProvider().trace("Registered new image finder", value);
122159
};
123160

161+
hasKeyboard(): boolean {
162+
return this._keyboard != null;
163+
}
164+
124165
getKeyboard = (): KeyboardProviderInterface => {
125166
if (this._keyboard) {
126167
return this._keyboard;
@@ -135,6 +176,10 @@ class DefaultProviderRegistry implements ProviderRegistry {
135176
this.getLogProvider().trace("Registered new keyboard provider", value);
136177
};
137178

179+
hasMouse(): boolean {
180+
return this._mouse != null;
181+
}
182+
138183
getMouse = (): MouseProviderInterface => {
139184
if (this._mouse) {
140185
return this._mouse;
@@ -149,6 +194,10 @@ class DefaultProviderRegistry implements ProviderRegistry {
149194
this.getLogProvider().trace("Registered new mouse provider", value);
150195
};
151196

197+
hasScreen(): boolean {
198+
return this._screen != null;
199+
}
200+
152201
getScreen = (): ScreenProviderInterface => {
153202
if (this._screen) {
154203
return this._screen;
@@ -163,6 +212,10 @@ class DefaultProviderRegistry implements ProviderRegistry {
163212
this.getLogProvider().trace("Registered new screen provider", value);
164213
};
165214

215+
hasWindow(): boolean {
216+
return this._window != null;
217+
}
218+
166219
getWindow = (): WindowProviderInterface => {
167220
if (this._window) {
168221
return this._window;
@@ -177,6 +230,10 @@ class DefaultProviderRegistry implements ProviderRegistry {
177230
this.getLogProvider().trace("Registered new window provider", value);
178231
};
179232

233+
hasTextFinder(): boolean {
234+
return this._textFinder != null;
235+
}
236+
180237
getTextFinder = (): TextFinderInterface => {
181238
if (this._textFinder) {
182239
return this._textFinder;
@@ -191,6 +248,10 @@ class DefaultProviderRegistry implements ProviderRegistry {
191248
this.getLogProvider().trace("Registered new TextFinder provider", value);
192249
};
193250

251+
hasWindowFinder(): boolean {
252+
return this._windowFinder != null;
253+
}
254+
194255
getWindowFinder = (): WindowFinderInterface => {
195256
if (this._windowFinder) {
196257
return this._windowFinder;
@@ -205,6 +266,10 @@ class DefaultProviderRegistry implements ProviderRegistry {
205266
this.getLogProvider().trace("Registered new WindowFinder provider", value);
206267
};
207268

269+
hasImageReader(): boolean {
270+
return this._imageReader != null;
271+
}
272+
208273
getImageReader = (): ImageReader => {
209274
if (this._imageReader) {
210275
return this._imageReader;
@@ -219,6 +284,10 @@ class DefaultProviderRegistry implements ProviderRegistry {
219284
this.getLogProvider().trace("Registered new image reader", value);
220285
};
221286

287+
hasImageWriter(): boolean {
288+
return this._imageWriter != null;
289+
}
290+
222291
getImageWriter = (): ImageWriter => {
223292
if (this._imageWriter) {
224293
return this._imageWriter;
@@ -233,6 +302,10 @@ class DefaultProviderRegistry implements ProviderRegistry {
233302
this.getLogProvider().trace("Registered new image writer", value);
234303
};
235304

305+
hasImageProcessor(): boolean {
306+
return this._imageProcessor != null;
307+
}
308+
236309
getImageProcessor = (): ImageProcessor => {
237310
if (this._imageProcessor) {
238311
return this._imageProcessor;
@@ -247,6 +320,10 @@ class DefaultProviderRegistry implements ProviderRegistry {
247320
this.getLogProvider().trace("Registered new image processor", value);
248321
};
249322

323+
hasLogProvider(): boolean {
324+
return this._logProvider != null;
325+
}
326+
250327
getLogProvider = (): LogProviderInterface => {
251328
if (this._logProvider) {
252329
return this._logProvider;
@@ -261,6 +338,10 @@ class DefaultProviderRegistry implements ProviderRegistry {
261338
this.getLogProvider().trace("Registered new log provider", value);
262339
};
263340

341+
hasColorFinder(): boolean {
342+
return this._colorFinder != null;
343+
}
344+
264345
getColorFinder = (): ColorFinderInterface => {
265346
if (this._colorFinder) {
266347
return this._colorFinder;
@@ -278,15 +359,20 @@ class DefaultProviderRegistry implements ProviderRegistry {
278359

279360
const providerRegistry = new DefaultProviderRegistry();
280361

281-
providerRegistry.registerClipboardProvider(new Clipboard());
282-
providerRegistry.registerKeyboardProvider(new Keyboard());
283-
providerRegistry.registerMouseProvider(new Mouse());
284-
providerRegistry.registerScreenProvider(new Screen());
285-
providerRegistry.registerWindowProvider(new Window());
286-
providerRegistry.registerImageWriter(new ImageWriterImpl());
287-
providerRegistry.registerImageReader(new ImageReaderImpl());
288-
providerRegistry.registerImageProcessor(new ImageProcessorImpl());
289-
providerRegistry.registerLogProvider(new NoopLogProvider());
290-
providerRegistry.registerColorFinder(new ColorFinderImpl());
362+
if (!process.env[DISABLE_DEFAULT_PROVIDERS_ENV_VAR]) {
363+
if (!process.env[DISABLE_DEFAULT_CLIPBOARD_PROVIDER_ENV_VAR]) {
364+
const Clipboard = require("@nut-tree/default-clipboard-provider").default;
365+
providerRegistry.registerClipboardProvider(new Clipboard());
366+
}
367+
providerRegistry.registerKeyboardProvider(new Keyboard());
368+
providerRegistry.registerMouseProvider(new Mouse());
369+
providerRegistry.registerScreenProvider(new Screen());
370+
providerRegistry.registerWindowProvider(new Window());
371+
providerRegistry.registerColorFinder(new ColorFinderImpl());
372+
providerRegistry.registerImageWriter(new ImageWriterImpl());
373+
providerRegistry.registerImageReader(new ImageReaderImpl());
374+
providerRegistry.registerImageProcessor(new ImageProcessorImpl());
375+
providerRegistry.registerLogProvider(new NoopLogProvider());
376+
}
291377

292378
export default providerRegistry;

0 commit comments

Comments
 (0)