aboutsummaryrefslogtreecommitdiff
path: root/src/utils/glyph_hash.js
blob: 3758601dd9d43031b36fb65d9725118cb3aedb60 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
const internals = {
  kDehyphenRegex: /[-]/g,
  kSplitterRegex: /.{1,8}/g,
  kGlyphs: [
    '☽',
    '☆',
    '♢',
    '♡',
    '╱',
    '╲',
    '╳',
    '〰',
    '▷',
    '⏊',
    '〒',
    '▢',
    '◯',
    '⏃',
    '⏀',
    '⏆'
  ],
  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;
  return {
    glyph: internals.kGlyphs[glyphIndex],
    color: `#${uuidFragment.substring(2, 8)}`
  };
};

// Return an array of glyphs based on a UUIDv4
export const getGlyphHash = function (uuid) {

  const dehyphenedUuid = uuid.replace(/[-]/g, '');

  if (dehyphenedUuid.length !== 32) {
    throw new internals.unexpectedUUIDLength();
  }

  const hashFragments = dehyphenedUuid.match(internals.kSplitterRegex);
  return hashFragments.map(getGlyphHashFragment);
};