summaryrefslogtreecommitdiffhomepage
path: root/gui
diff options
context:
space:
mode:
authorOskar Nyberg <oskar@mullvad.net>2020-09-07 10:36:09 +0200
committerOskar Nyberg <oskar@mullvad.net>2020-09-09 19:54:39 +0200
commit2398580398f268ff4e7cf13f4e867eb64fdb2f92 (patch)
treedf384a2ce944b199349f09719ab6478fc5a40983 /gui
parentc840a15588db413c6cc4d39cce70fe6962f89a56 (diff)
downloadmullvadvpn-2398580398f268ff4e7cf13f4e867eb64fdb2f92.tar.xz
mullvadvpn-2398580398f268ff4e7cf13f4e867eb64fdb2f92.zip
Remove dependency on validated
Diffstat (limited to 'gui')
-rw-r--r--gui/package-lock.json34
-rw-r--r--gui/package.json3
-rw-r--r--gui/src/main/gui-settings.ts30
-rw-r--r--gui/types/validated/index.d.ts111
4 files changed, 21 insertions, 157 deletions
diff --git a/gui/package-lock.json b/gui/package-lock.json
index 60c8521d53..b71ffb2401 100644
--- a/gui/package-lock.json
+++ b/gui/package-lock.json
@@ -3160,11 +3160,6 @@
"integrity": "sha512-rINUZXOkcBmoHWEyu7JdHu5JMzkGRoMX4ov9830WNgxf5UYxcBUO0QTKAqeJ5EZfSdlrcJYkC8WwfVW7JYi4yg==",
"dev": true
},
- "custom-error-instance": {
- "version": "2.1.1",
- "resolved": "https://registry.npmjs.org/custom-error-instance/-/custom-error-instance-2.1.1.tgz",
- "integrity": "sha1-PPY5FIemYppiR+sMoM4ACBt+Nho="
- },
"d": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/d/-/d-1.0.1.tgz",
@@ -7278,11 +7273,6 @@
"integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=",
"dev": true
},
- "indent-string": {
- "version": "3.2.0",
- "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-3.2.0.tgz",
- "integrity": "sha1-Sl/W0nzDMvN+VBmlBNu4NxBckok="
- },
"indexof": {
"version": "0.0.1",
"resolved": "https://registry.npmjs.org/indexof/-/indexof-0.0.1.tgz",
@@ -8152,11 +8142,6 @@
"flush-write-stream": "^1.0.2"
}
},
- "levenshtein-edit-distance": {
- "version": "2.0.3",
- "resolved": "https://registry.npmjs.org/levenshtein-edit-distance/-/levenshtein-edit-distance-2.0.3.tgz",
- "integrity": "sha512-m/SHpXjfKnArO8E9/o5Fd5+N4TLHU/72+zk4s7OpowBGmZK5MqAsuQ0xuYDftIyXyfqU99dmeMfpujWxo8FIJg=="
- },
"levn": {
"version": "0.3.0",
"resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz",
@@ -13072,25 +13057,6 @@
"spdx-expression-parse": "^3.0.0"
}
},
- "validated": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/validated/-/validated-2.0.1.tgz",
- "integrity": "sha512-3Aj72BVIxo2psvV97U6Z+a/1YFqz9Oid6Vk/73ur8QOzBQNOqIu4w/0DD86C/2itguQOQ7tWFsYb44TqvRSftg==",
- "requires": {
- "commander": "^2.19.0",
- "custom-error-instance": "^2.1.1",
- "indent-string": "^3.2.0",
- "invariant": "^2.2.4",
- "levenshtein-edit-distance": "^2.0.2"
- },
- "dependencies": {
- "commander": {
- "version": "2.19.0",
- "resolved": "https://registry.npmjs.org/commander/-/commander-2.19.0.tgz",
- "integrity": "sha512-6tvAOO+D6OENvRAh524Dh9jcfKTYDQAqvqezbCW82xj5X0pSrcpxtvRKHLG0yBY6SD7PSDrJaj+0AiOcKVd1Xg=="
- }
- }
- },
"value-equal": {
"version": "0.4.0",
"resolved": "https://registry.npmjs.org/value-equal/-/value-equal-0.4.0.tgz",
diff --git a/gui/package.json b/gui/package.json
index b8c67223ff..c4a1538cd6 100644
--- a/gui/package.json
+++ b/gui/package.json
@@ -33,8 +33,7 @@
"redux": "^4.0.5",
"sprintf-js": "^1.1.2",
"styled-components": "^5.1.0",
- "uuid": "^3.0.1",
- "validated": "^2.0.1"
+ "uuid": "^3.0.1"
},
"optionalDependencies": {
"nseventmonitor": "^0.0.18"
diff --git a/gui/src/main/gui-settings.ts b/gui/src/main/gui-settings.ts
index c860bfe490..d1d620ba54 100644
--- a/gui/src/main/gui-settings.ts
+++ b/gui/src/main/gui-settings.ts
@@ -2,17 +2,15 @@ import { app } from 'electron';
import log from 'electron-log';
import * as fs from 'fs';
import * as path from 'path';
-import { validate } from 'validated/object';
-import { boolean, partialObject, string } from 'validated/schema';
import { IGuiSettingsState, SYSTEM_PREFERRED_LOCALE_KEY } from '../shared/gui-settings-state';
-const settingsSchema = partialObject({
- preferredLocale: string,
- autoConnect: boolean,
- enableSystemNotifications: boolean,
- monochromaticIcon: boolean,
- startMinimized: boolean,
-});
+const settingsSchema = {
+ preferredLocale: 'string',
+ autoConnect: 'boolean',
+ enableSystemNotifications: 'boolean',
+ monochromaticIcon: 'boolean',
+ startMinimized: 'boolean',
+};
const defaultSettings: IGuiSettingsState = {
preferredLocale: SYSTEM_PREFERRED_LOCALE_KEY,
@@ -79,7 +77,7 @@ export default class GuiSettings {
this.stateValue = {
...defaultSettings,
- ...(validate(settingsSchema, rawJson) as Partial<IGuiSettingsState>),
+ ...this.validateSettings(rawJson),
};
} catch (error) {
log.error(`Failed to read GUI settings file: ${error}`);
@@ -96,6 +94,18 @@ export default class GuiSettings {
}
}
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
+ private validateSettings(settings: any) {
+ Object.entries(settingsSchema).forEach(([key, expectedType]) => {
+ const actualType = typeof settings[key];
+ if (key in settings && actualType !== expectedType) {
+ throw new Error(`Expected ${key} to be of type ${expectedType} but was ${actualType}`);
+ }
+ });
+
+ return settings as Partial<IGuiSettingsState>;
+ }
+
private filePath() {
return path.join(app.getPath('userData'), 'gui_settings.json');
}
diff --git a/gui/types/validated/index.d.ts b/gui/types/validated/index.d.ts
deleted file mode 100644
index 9a51433103..0000000000
--- a/gui/types/validated/index.d.ts
+++ /dev/null
@@ -1,111 +0,0 @@
-// Type definitions for validated 2.0.1
-// Project: https://github.com/andreypopp/validated
-// Definitions by: Andrej Mihajlov <https://github.com/pronebird>
-// TypeScript Version: 3.3.3
-
-declare module 'validated/schema' {
- type Context = {};
- export interface ValidateResult<T> {
- context: Context;
- value: T;
- }
-
- // Cyclic refs issue when unnesting arrays with complex types
- // https://github.com/Microsoft/TypeScript/issues/14174
- type ExtractNodeType<T> = T extends Node<infer S>
- ? S extends { [name: string]: Node<infer _> }
- ? { [K in keyof S]: ExtractNodeType<S[K]> }
- : S extends Array<infer U>
- ? U[] // Array<ExtractNodeType<U>>
- : S
- : T;
-
- export class Node<T> {
- validate(context: Context): ValidateResult<ExtractNodeType<Node<T>>>;
- }
-
- type NodeDict = { [name: string]: Node<unknown> };
-
- // eslint-disable-next-line @typescript-eslint/ban-types
- export function object<T, S extends NodeDict>(values: S, defaults?: Object): Node<S>;
- // eslint-disable-next-line @typescript-eslint/ban-types
- export function partialObject<T, S extends NodeDict>(values: S, defaults?: Object): Node<S>;
- export function maybe<T>(valueNode: Node<T>): Node<T | undefined | null>;
- export const string: Node<string>;
- export const number: Node<number>;
- export const boolean: Node<boolean>;
- export function enumeration<T>(...values: Array<T>): Node<T>;
- export function arrayOf<T>(node: Node<T>): Node<Array<T>>;
-
- export function oneOf<A, B>(a: Node<A>, b: Node<B>): Node<A | B>;
-
- export function oneOf<A, B, C>(a: Node<A>, b: Node<B>, c: Node<C>): Node<A | B | C>;
-
- export function oneOf<A, B, C, D>(
- a: Node<A>,
- b: Node<B>,
- c: Node<C>,
- d: Node<D>,
- ): Node<A | B | C | D>;
-
- export function oneOf<A, B, C, D, E>(
- a: Node<A>,
- b: Node<B>,
- c: Node<C>,
- d: Node<D>,
- e: Node<E>,
- ): Node<A | B | C | D | E | F | G | H>;
-
- export function oneOf<A, B, C, D, E, F>(
- a: Node<A>,
- b: Node<B>,
- c: Node<C>,
- d: Node<D>,
- e: Node<E>,
- f: Node<F>,
- ): Node<A | B | C | D | E | F>;
-
- export function oneOf<A, B, C, D, E, F, G>(
- a: Node<A>,
- b: Node<B>,
- c: Node<C>,
- d: Node<D>,
- e: Node<E>,
- f: Node<F>,
- g: Node<G>,
- ): Node<A | B | C | D | E | F | G>;
-
- export function oneOf<A, B, C, D, E, F, G, H>(
- a: Node<A>,
- b: Node<B>,
- c: Node<C>,
- d: Node<D>,
- e: Node<E>,
- f: Node<F>,
- g: Node<G>,
- h: Node<H>,
- ): Node<A | B | C | D | E | F | G | H>;
-
- export function oneOf<A, B, C, D, E, F, G, H, I>(
- a: Node<A>,
- b: Node<B>,
- c: Node<C>,
- d: Node<D>,
- e: Node<E>,
- f: Node<F>,
- g: Node<G>,
- h: Node<H>,
- i: Node<I>,
- ): Node<A | B | C | D | E | F | G | H | I>;
-}
-
-declare module 'validated/object' {
- import { Node, ValidateResult } from 'validated/schema';
-
- type ExtractValidateResult<T> = ReturnType<T> extends ValidateResult<infer V> ? V : never;
-
- export function validate<T>(
- object: Node<T>,
- value: unknown,
- ): ExtractValidateResult<typeof object.validate>;
-}