docs: function register(tagOrClass, options) {
    assertType(tagOrClass, ['string', Function], false, 'Invalid tag or class specified');
  
    let tag;
    let o = {};
  
    if (tagOrClass instanceof Function) {
      tag = tagOrClass.tag;
      o = {
        prototype: tagOrClass.prototype,
        extends: tagOrClass.extends
      };
    }
    else {
      assertType(options, ['object', 'function'], false, `Second param must be a class or an object literal containing at least the 'prototype' key`);
  
      tag = tagOrClass;
  
      if (typeof options === 'object') {
        assertType(options['prototype'], 'function', true, 'Invalid prototype class provided: ' + options['prototype']);
        assertType(options['class'], 'function', true, 'Invalid class provided: ' + options['class']);
        assert(!options['extends'] || typeof options['extends'] ===  'string', true, 'Invalid value specified for options.extends: ' + options['extends']);
      }
  
      if (typeof options === 'function') {
        o = options
      }
      else {
        if (options['class'])
          o['prototype'] = options['class'].prototype;
        else if (options['prototype'])
          o['prototype'] = options['prototype'];
  
        if (options['extends']) o['extends'] = options['extends'];
      }
    }
  
    if (tag.indexOf('-') < 0) tag += '-element';
    tag = tag.toLowerCase();
  
    if (!getElementRegistry()[tag]) getElementRegistry()[tag] = document.registerElement(tag, o);
  
    return getElementRegistry()[tag];
  }