From 908bf36fa0f8fba21d383191b82fabf21802a86f Mon Sep 17 00:00:00 2001 From: David Mehren Date: Sun, 31 May 2020 21:43:14 +0200 Subject: [PATCH] Make authorships show up again It turns out our shiny new typed ES2015 `Map`s are not serializable to JSON. :( Luckily, we only use strings as keys and can write a function that converts them to serializable objects! Signed-off-by: David Mehren --- src/lib/realtime.ts | 5 +++-- src/lib/utils.ts | 10 ++++++++++ 2 files changed, 13 insertions(+), 2 deletions(-) diff --git a/src/lib/realtime.ts b/src/lib/realtime.ts index edacde520..f5eff89b1 100644 --- a/src/lib/realtime.ts +++ b/src/lib/realtime.ts @@ -13,6 +13,7 @@ import { Author, Note, Revision, User } from './models' import { NoteAuthorship } from './models/note' import { PhotoProfile } from './models/user' import { EditorSocketIOServer } from './ot/editor-socketio-server' +import { mapToObject } from './utils' export type SocketWithNoteId = Socket & { noteId: string } @@ -77,7 +78,7 @@ function emitCheck (note: NoteSession): void { updatetime: note.updatetime, lastchangeuser: note.lastchangeuser, lastchangeuserprofile: note.lastchangeuserprofile, - authors: note.authors, + authors: mapToObject(note.authors), authorship: note.authorship } realtime.io.to(note.id).emit('check', out) @@ -380,7 +381,7 @@ function emitRefresh (socket: SocketWithNoteId): void { ownerprofile: note.ownerprofile, lastchangeuser: note.lastchangeuser, lastchangeuserprofile: note.lastchangeuserprofile, - authors: note.authors, + authors: mapToObject(note.authors), authorship: note.authorship, permission: note.permission, createtime: note.createtime, diff --git a/src/lib/utils.ts b/src/lib/utils.ts index a4223666c..8509a1cef 100644 --- a/src/lib/utils.ts +++ b/src/lib/utils.ts @@ -4,6 +4,16 @@ import { logger } from './logger' import { Revision } from './models' import { realtime } from './realtime' +/* +Converts a map from string to something into a plain JS object for transmitting via a websocket + */ +export function mapToObject (map: Map): object { + return Array.from(map).reduce((obj, [key, value]) => { + obj[key] = value + return obj + }, {}) +} + export function getImageMimeType (imagePath: string): string | undefined { const fileExtension = /[^.]+$/.exec(imagePath) switch (fileExtension?.[0]) {