1
0
mirror of https://github.com/bitwarden/browser.git synced 2025-02-08 00:01:28 +01:00

Name parameters after direction of change

Serializers create writable representations, deserializers read those
representations and build objects
This commit is contained in:
Matt Gibson 2023-10-04 19:27:22 -04:00
parent f0b16d0baf
commit 21046fd856
No known key found for this signature in database
GPG Key ID: 0B3AF4C7D6472DD1
3 changed files with 11 additions and 11 deletions

View File

@ -103,7 +103,7 @@ class DefaultActiveUserState<T> implements ActiveUserState<T> {
return null;
}
const jsonData = await this.chosenStorageLocation.get<Jsonify<T>>(key);
const data = keyDefinition.serializer(jsonData);
const data = keyDefinition.deserializer(jsonData);
return data;
}),
tap((data) => {
@ -149,7 +149,7 @@ class DefaultActiveUserState<T> implements ActiveUserState<T> {
}
const key = userKeyBuilder(activeUser.id, this.keyDefinition);
const data = (await this.chosenStorageLocation.get(key)) as Jsonify<T>;
return this.keyDefinition.serializer(data);
return this.keyDefinition.deserializer(data);
}
createDerived<TTo>(
@ -169,7 +169,7 @@ class DefaultActiveUserState<T> implements ActiveUserState<T> {
private async seedInitial(key: string): Promise<T> {
const data = await this.chosenStorageLocation.get<Jsonify<T>>(key);
this.seededInitial = true;
return this.keyDefinition.serializer(data);
return this.keyDefinition.deserializer(data);
}
private chooseStorage(storageLocation: StorageLocation): AbstractStorageService {

View File

@ -28,7 +28,7 @@ class GlobalStateImplementation<T> implements GlobalState<T> {
this.storageKey = globalKeyBuilder(this.keyDefinition);
this.seededPromise = this.chosenLocation.get<Jsonify<T>>(this.storageKey).then((data) => {
const serializedData = this.keyDefinition.serializer(data);
const serializedData = this.keyDefinition.deserializer(data);
this.stateSubject.next(serializedData);
});
@ -45,7 +45,7 @@ class GlobalStateImplementation<T> implements GlobalState<T> {
async getFromState(): Promise<T> {
const data = await this.chosenLocation.get<Jsonify<T>>(this.storageKey);
return this.keyDefinition.serializer(data);
return this.keyDefinition.deserializer(data);
}
}

View File

@ -12,34 +12,34 @@ export class KeyDefinition<T> {
* Creates a new instance of a KeyDefinition
* @param stateDefinition The state definition for which this key belongs to.
* @param key The name of the key, this should be unique per domain
* @param serializer A function to use to safely convert your type from json to your expected type.
* @param deserializer A function to use to safely convert your type from json to your expected type.
*/
constructor(
readonly stateDefinition: StateDefinition,
readonly key: string,
readonly serializer: (jsonValue: Jsonify<T>) => T
readonly deserializer: (jsonValue: Jsonify<T>) => T
) {}
static array<T>(
stateDefinition: StateDefinition,
key: string,
serializer: (jsonValue: Jsonify<T>) => T
deserializer: (jsonValue: Jsonify<T>) => T
) {
return new KeyDefinition<T[]>(stateDefinition, key, (jsonValue) => {
// TODO: Should we handle null for them, I feel like we should discourage null for an array?
return jsonValue.map((v) => serializer(v));
return jsonValue.map((v) => deserializer(v));
});
}
static record<T>(
stateDefinition: StateDefinition,
key: string,
serializer: (jsonValue: Jsonify<T>) => T
deserializer: (jsonValue: Jsonify<T>) => T
) {
return new KeyDefinition<Record<string, T>>(stateDefinition, key, (jsonValue) => {
const output: Record<string, T> = {};
for (const key in jsonValue) {
output[key] = serializer((jsonValue as Record<string, Jsonify<T>>)[key]);
output[key] = deserializer((jsonValue as Record<string, Jsonify<T>>)[key]);
}
return output;
});