All free skills / Other majors
whatwg-mimetype 5.x
Use whatwg-mimetype ^5.0.0 to parse, inspect, mutate, serialize, classify, and compute MIME types from resource bytes.
- For
whatwg-mimetype@5.0.0- Verified
- 2026-09-08, 6 examples executed
- Skill package
@modootoday/pmcp-whatwg-mimetype@5.0.0
Use this skill for free
No PMCP login or subscription is required. Download the original instructions, or install the content-only archive with your project's package manager.
Download SKILL.md · Download package archive
npm install --save-dev https://pmcp.build/skills/whatwg-mimetype/5/package.tgz
PMCP discovers the installed package's instructions. Connect your runtime after installation.
Archive integrity
sha512-/YjlQwobklL8rGiMkJNZSRp/Ihb63Q+5hUdiiJ73Zu/XGCQEQ4HXw/dl96l5QMOznp6RslFsSNsLnayzmtqZzQ==Complete instructions
Verified against whatwg-mimetype@5.0.0 on 2026-09-08. 6 of 6 examples executed.
whatwg-mimetype
Scope and version
This skill targets whatwg-mimetype ^5.0.0, which requires Node.js >=20.
The package root exports exactly the named APIs MIMEType and computedMIMEType.
In v5, MIMEType is a named export rather than the older default-export shape. Raw parsing and serialization APIs from older versions were removed.
Parsing and serialization
Constructing a MIME type parses the string and throws an Error if parsing fails. MIMEType.parse(string) performs the same kind of parsing but returns null on failure.
A parsed instance exposes:
- mutable
type - mutable
subtype - getter-only
essence, which istype/subtype - mutable
parameters toString()for serialization
Parsing and serialization normalize the type, subtype, and parameter names according to the MIME type rules. Parameter values are not generally lowercased: for example, a parameter value of D remains D, while a quoted value such as "utf-8" is serialized without unnecessary quotes.
import assert from "node:assert/strict";
import { MIMEType } from "whatwg-mimetype";
const mimeType = new MIMEType('Text/HTML;Charset="utf-8"');
assert.equal(mimeType.toString(), "text/html;charset=utf-8");
assert.equal(mimeType.type, "text");
assert.equal(mimeType.subtype, "html");
assert.equal(mimeType.essence, "text/html");
assert.equal(mimeType.parameters.get("charset"), "utf-8");
assert.equal(MIMEType.parse("not a MIME type"), null);
assert.throws(() => new MIMEType("not a MIME type"), Error);
Do not use the v4-style default import. Use the v5 named import:
import assert from "node:assert/strict";
import { MIMEType } from "whatwg-mimetype";
const mimeType = new MIMEType("text/plain");
mimeType.type = "application";
mimeType.subtype = "json";
assert.equal(mimeType.essence, "application/json");
assert.equal(mimeType.toString(), "application/json");
type and subtype are validated when changed. essence is getter-only; update type or subtype instead of assigning to essence.
Parameters
mimeType.parameters is a MIME-specific Map-like object, not a package-root MIMETypeParameters export. Parameter names are handled case-insensitively and normalized to lowercase. Parameter values preserve their parsed spelling. It supports the documented get, set, and iteration usage.
import assert from "node:assert/strict";
import { MIMEType } from "whatwg-mimetype";
const mimeType = new MIMEType("x/x;a=b;c=D;E=\"F\"");
const entries = [...mimeType.parameters];
assert.deepEqual(entries, [
["a", "b"],
["c", "D"],
["e", "F"],
]);
mimeType.parameters.set("Q", "X");
assert.equal(mimeType.parameters.get("q"), "X");
assert.equal(mimeType.toString(), "x/x;a=b;c=D;e=F;q=X");
Classification helpers
MIMEType provides isHTML(), isXML(), and isJavaScript({ prohibitParameters }). These helpers are documented as speculative and may change in a future major; avoid treating them as a permanently stable compatibility contract.
import assert from "node:assert/strict";
import { MIMEType } from "whatwg-mimetype";
const html = new MIMEType('Text/HTML;Charset="utf-8"');
assert.equal(html.isHTML(), true);
assert.equal(html.isXML(), false);
const xml = new MIMEType("application/xml");
assert.equal(xml.isXML(), true);
const javascript = new MIMEType("text/javascript");
assert.equal(javascript.isJavaScript({ prohibitParameters: false }), true);
Computing a MIME type from bytes
computedMIMEType(resource, options) is a plain library API. resource must be a Uint8Array; the result is a MIMEType.
Supported options are contentTypeHeader, providedType, noSniff (default false), and isSupported (default () => true). The function can sniff resource bytes. A PNG signature is computed as image/png without a header. An image/gif content-type header does not override that PNG result, while a text/html header does produce text/html in the documented example.
import assert from "node:assert/strict";
import { computedMIMEType, MIMEType } from "whatwg-mimetype";
const pngBytes = new Uint8Array([
0x89, 0x50, 0x4e, 0x47,
0x0d, 0x0a, 0x1a, 0x0a,
]);
assert.equal(computedMIMEType(pngBytes).essence, "image/png");
assert.equal(
computedMIMEType(pngBytes, { contentTypeHeader: "image/gif" }).essence,
"image/png",
);
assert.equal(
computedMIMEType(pngBytes, { contentTypeHeader: "text/html" }).essence,
"text/html",
);
assert.ok(computedMIMEType(pngBytes) instanceof MIMEType);
The options are passed to the computation as an options object; do not pass a string as the second argument.
import assert from "node:assert/strict";
import { computedMIMEType, MIMEType } from "whatwg-mimetype";
const resource = new Uint8Array();
const result = computedMIMEType(resource, {
contentTypeHeader: "text/plain",
providedType: "text/plain",
noSniff: false,
isSupported: () => true,
});
assert.ok(result instanceof MIMEType);
What this skill does not cover
This skill does not cover MIME sniffing cases beyond the documented PNG examples, the detailed validation rules for every possible type or parameter value, or the exact behavior of each computedMIMEType option combination. It also does not cover removed v4 raw parsing/serialization APIs, package development scripts, or any runner, CLI, build step, or framework integration; the package exposes a plain programmatic API instead.