Skip to content

Commit 75ce902

Browse files
mabaasitaddaleax
andauthored
chore(storage-mixin): remove from preferences storage COMPASS-6946 (#4600)
Co-authored-by: Anna Henningsen <[email protected]>
1 parent 7916184 commit 75ce902

File tree

9 files changed

+270
-358
lines changed

9 files changed

+270
-358
lines changed

package-lock.json

Lines changed: 18 additions & 20 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

packages/compass-preferences-model/package.json

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -47,13 +47,12 @@
4747
"@mongodb-js/compass-logging": "^1.1.6",
4848
"@mongodb-js/compass-utils": "^0.3.1",
4949
"ampersand-collection-filterable": "^0.3.0",
50-
"ampersand-model": "^8.0.1",
5150
"ampersand-rest-collection": "^6.0.0",
5251
"ampersand-state": "5.0.3",
5352
"bson": "^5.2.0",
53+
"joi": "^17.9.2",
5454
"js-yaml": "^4.1.0",
5555
"lodash": "^4.17.21",
56-
"storage-mixin": "^5.1.5",
5756
"yargs-parser": "^21.1.1"
5857
},
5958
"devDependencies": {

packages/compass-preferences-model/src/global-config.spec.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -190,7 +190,7 @@ forceConnectionOptions:
190190
global: {},
191191
cli: {},
192192
preferenceParseErrors: [
193-
`Type for option "enableMaps" mismatches: expected boolean, received string (while validating preferences from: Global config file: ${file})`,
193+
`enableMaps: "value" must be a boolean (while validating preferences from: Global config file: ${file})`,
194194
],
195195
});
196196
});

packages/compass-preferences-model/src/global-config.ts

Lines changed: 11 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -5,8 +5,9 @@ import yaml from 'js-yaml';
55
import type { Options as YargsOptions } from 'yargs-parser';
66
import yargsParser from 'yargs-parser';
77
import { kebabCase } from 'lodash';
8-
import type { AmpersandType, AllPreferences } from './preferences';
8+
import type { AllPreferences } from './preferences';
99
import { allPreferencesProps } from './preferences';
10+
import type { Types as JoiTypes } from 'joi';
1011

1112
import { createLoggerAndTelemetry } from '@mongodb-js/compass-logging';
1213
const { log, mongoLogId } = createLoggerAndTelemetry('COMPASS-PREFERENCES');
@@ -91,11 +92,11 @@ async function loadGlobalPreferences(
9192
const cliProps = Object.entries(allPreferencesProps).filter(
9293
([, definition]) => definition.cli
9394
);
94-
function getCliPropNamesByType(type: AmpersandType<any>): string[] {
95+
function getCliPropNamesByType(type: JoiTypes): string[] {
9596
return [
9697
...new Set(
9798
cliProps
98-
.filter(([, definition]) => definition.type === type)
99+
.filter(([, definition]) => definition.validator.type === type)
99100
.flatMap(([key]) => [key, kebabCase(key)])
100101
),
101102
];
@@ -170,30 +171,15 @@ function validatePreferences(
170171
// as an option value, e.g. an object into an array of key-value pairs
171172
const process = allPreferencesProps[key].customPostProcess;
172173
const value = process ? process(rawValue, error) : rawValue;
173-
// `typeof` + `isArray` is good enough for everything we need right now, but we can of course expand this check over time
174-
if (
175-
(Array.isArray(value) ? 'array' : typeof value) !==
176-
allPreferencesProps[key].type
177-
) {
178-
error(
179-
`Type for option "${key}" mismatches: expected ${
180-
allPreferencesProps[key].type
181-
}, received ${typeof value}`
182-
);
183-
continue;
184-
}
185-
if (
186-
allPreferencesProps[key].values &&
187-
!(allPreferencesProps[key].values as unknown[])?.includes(value)
188-
) {
189-
error(
190-
`Value for option "${key}" is not allowed: expected one of [${String(
191-
allPreferencesProps[key].values?.join(', ')
192-
)}], received ${String(value)}`
193-
);
174+
175+
const validationResults =
176+
allPreferencesProps[key].validator.validate(value);
177+
if (validationResults.error) {
178+
error(`${key}: ${validationResults.error.message}`);
194179
continue;
195180
}
196-
obj[key] = value as any;
181+
182+
obj[key] = validationResults.value as any;
197183
}
198184
return [obj, errors];
199185
}

0 commit comments

Comments
 (0)