I think we complicate `Style` too much here I think should be more simple like:

```js
function Style({ source, uri, type }) {
  source = source == null ? null : Object.freeze([].concat(source));
  uri = uri == null ? null : Object.freeze([].concat(uri));
  type = type == null ? "author" : type;
  if (source && !source.every(isString))
    throw new TypeError('Style.source must be a string or an array of strings.');
  if (uri && !uri.every(isLocalURL))
    throw new TypeError('Style.uri must be a local URL or an array of local URLs');
  if (type && !isTypeValid(type))
    throw new TypeError('Style.type must be "agent", "user" or "author"');

  return Object.freeze(Object.create(Style.prototype, {
    source: { value: source, enumerable: true },
    uri: { value: uri,  enumerable: true },
    type: { value: type, enumerable: true } 
  });
}
```