diff options
| author | Oskar Nyberg <oskar@mullvad.net> | 2020-09-07 10:36:09 +0200 |
|---|---|---|
| committer | Oskar Nyberg <oskar@mullvad.net> | 2020-09-09 19:54:39 +0200 |
| commit | 2398580398f268ff4e7cf13f4e867eb64fdb2f92 (patch) | |
| tree | df384a2ce944b199349f09719ab6478fc5a40983 /gui | |
| parent | c840a15588db413c6cc4d39cce70fe6962f89a56 (diff) | |
| download | mullvadvpn-2398580398f268ff4e7cf13f4e867eb64fdb2f92.tar.xz mullvadvpn-2398580398f268ff4e7cf13f4e867eb64fdb2f92.zip | |
Remove dependency on validated
Diffstat (limited to 'gui')
| -rw-r--r-- | gui/package-lock.json | 34 | ||||
| -rw-r--r-- | gui/package.json | 3 | ||||
| -rw-r--r-- | gui/src/main/gui-settings.ts | 30 | ||||
| -rw-r--r-- | gui/types/validated/index.d.ts | 111 |
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>; -} |
