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;
+ 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);
};