From c1c81df4dee56c11ebcca8eabf262735d222338c Mon Sep 17 00:00:00 2001 From: "J. Ryan Stinnett" Date: Wed, 8 May 2019 17:41:06 +0100 Subject: [PATCH] Intern `rel_type` for relations In anticipation of relations being quite frequently used, we should intern strings of common fields, such as `rel_type`. --- src/models/event.js | 25 ++++++++++++++++++------- 1 file changed, 18 insertions(+), 7 deletions(-) diff --git a/src/models/event.js b/src/models/event.js index 40fc03529..3ef2cdb87 100644 --- a/src/models/event.js +++ b/src/models/event.js @@ -50,6 +50,12 @@ module.exports.EventStatus = { }; const interns = {}; +function intern(str) { + if (!interns[str]) { + interns[str] = str; + } + return interns[str]; +} /** * Construct a Matrix Event object @@ -87,20 +93,25 @@ module.exports.MatrixEvent = function MatrixEvent( if (!event[prop]) { return; } - if (!interns[event[prop]]) { - interns[event[prop]] = event[prop]; - } - event[prop] = interns[event[prop]]; + event[prop] = intern(event[prop]); }); ["membership", "avatar_url", "displayname"].forEach((prop) => { if (!event.content || !event.content[prop]) { return; } - if (!interns[event.content[prop]]) { - interns[event.content[prop]] = event.content[prop]; + event.content[prop] = intern(event.content[prop]); + }); + + ["rel_type"].forEach((prop) => { + if ( + !event.content || + !event.content["m.relates_to"] || + !event.content["m.relates_to"][prop] + ) { + return; } - event.content[prop] = interns[event.content[prop]]; + event.content["m.relates_to"][prop] = intern(event.content["m.relates_to"][prop]); }); this.event = event || {};