]> git.r.bdr.sh - rbdr/forum/blobdiff - src/utils/glyph_hash.js
Add pact test for forums store
[rbdr/forum] / src / utils / glyph_hash.js
index cbbf9883ea65ba262cf9abbeb7726660dedbd0d8..3758601dd9d43031b36fb65d9725118cb3aedb60 100644 (file)
@@ -1,4 +1,5 @@
 const internals = {
+  kDehyphenRegex: /[-]/g,
   kSplitterRegex: /.{1,8}/g,
   kGlyphs: [
     '☽',
@@ -17,22 +18,32 @@ const internals = {
     '⏃',
     '⏀',
     '⏆'
-  ]
+  ],
+  unexpectedUUIDLength: class UnexpectedUUIDLength extends Error {
+    name = 'UnexpectedUUIDLength';
+    message = 'The provided string was not a valid UUIDv4, please provide a 32 character long string'
+  }
 };
 
 // Return a glyph with color based on a 4 byte fragment of a UUIDv4
 const getGlyphHashFragment = function (uuidFragment) {
 
-  const glyphIndex = parseInt(uuidFragment.substring(0,2), 16) % 16;
+  const glyphIndex = parseInt(uuidFragment.substring(0, 2), 16) % 16;
   return {
     glyph: internals.kGlyphs[glyphIndex],
-    color: `#${uuidFragment.substring(2,8)}`
+    color: `#${uuidFragment.substring(2, 8)}`
   };
 };
 
 // Return an array of glyphs based on a UUIDv4
 export const getGlyphHash = function (uuid) {
 
-  const hashFragments = uuid.replace(/[-]/g,'').match(internals.kSplitterRegex);
+  const dehyphenedUuid = uuid.replace(/[-]/g, '');
+
+  if (dehyphenedUuid.length !== 32) {
+    throw new internals.unexpectedUUIDLength();
+  }
+
+  const hashFragments = dehyphenedUuid.match(internals.kSplitterRegex);
   return hashFragments.map(getGlyphHashFragment);
 };