/** A structured representation of a MIME type, consitent with the WHATWG MIME Sniffing specification
*
* The class is not instantiated directly, but rather via many of its static methods.
*
* The class is not instantiated directly, but rather via many of its static methods.
* If parsing e.g. "TeXt/HTML; X=a; Y=B", the result will expose the following read-only
* properties:
*
*
* - `type`: `"text"`
* - `subtype`: `"html"`
* - `essence`: `"text/html"`
* - `params`: `['x' => "a", 'y' => "B"]`
*
*
* Instances may be cast to strings to yield a normalized representation
*
*
* @see https://mimesniff.spec.whatwg.org/
*
*
* @property-read string $type The major type of the MIME type i.e. the part before the slash
* @property-read string $subtype The subtype of the MIME type i.e. the part after the slash
* @property-read string $essence The full MIME type without paramters e.g. `"text/html"`
* @property-read array $params The associative array of parameters included with the type. Keys are lowercase; values are presented in their original case, unescaped
* @property-read bool $isArchive Whether the MIME type is an archive type
* @property-read bool $isAudioVideo Whether the MIME type is an audio or video type
* @property-read bool $isFont Whether the MIME type is a font type
* @property-read bool $isHtml Whether the MIME type is HTML
* @property-read bool $isImage Whether the MIME type is an image type
* @property-read bool $isJavascript Whether the MIME type is a JavaScript type
* @property-read bool $isJson Whether the MIME type is a JSON type
* @property-read bool $isScriptable Whether the MIME type is a type which can be scripted (namely via JavaScript)
* @property-read bool $isXml Whether the MIME type is an XML type
* @property-read bool $isZipBased Whether the MIME type is a ZIP-based type