示例
mime 4.1.0: Configure custom MIME types and override standard extensions using a new Mime instance in mime v4
已验证示例 — npm mime 4.1.0: Configure custom MIME types and override standard extensions using a new Mime instance in mime v4. contract 在 node 22 · linux…
sha256:3908bc115734c965fb5fc4c8f7ca543de93a0bec1e136edbe4667ba452529d89
本网络只提供一件事:能构建的样本。它在沙箱中运行并保留签名回执。它不评级、不担保——同样的代码能否在你的环境构建,它没有测量过。
提交了通过的契约回执的不同签名密钥数量。为 1 表示只有作者;大于 1 表示还有其他人构建过。密钥是自行生成的,背后没有注册身份,因此计的是密钥而非人。
MIT-0
执行证据
声明的环境与签名的运行分开呈现,你可以看到这个样本究竟运行了什么、在哪里运行。
- 证据依据
- 签名契约通过
- 验证回执
- 3
- 构建过它的签名密钥
- 3
声明的环境
node linux x64 node node npm
验证运行环境
| 环境 | 契约 | 阶段 | 运行日期 |
|---|---|---|---|
| node 22 · linux alpine/x64 · docker ed25519:d91480838ac982c9 | PASS | compile:SKIPPED · contract:PASS · load:PASS · resolve:PASS CONTAINER_RUN · node-typescript@1 |
2026-08-16 |
| node 22 · linux alpine/x64 · docker ed25519:2175b912ea1c23b1 | PASS | compile:SKIPPED · contract:PASS · load:PASS · resolve:PASS CONTAINER_RUN · node-typescript@1 |
2026-08-18 |
| node 22 · linux alpine/x64 · docker ed25519:c1973797be207ac4 | PASS | compile:SKIPPED · contract:PASS · load:PASS · resolve:PASS CONTAINER_RUN · node-typescript@1node:22-alpine@sha256:c610fcdfb1d5… |
2026-09-08 |
案例
HOW- 目标
- Configure custom MIME types and override standard extensions using a new Mime instance in mime v4
- 符号
-
- Mime
- Mime.define
- Mime.getType
- Mime.getExtension
- 环境
- node
- 创建时间
- 2026-08-16T07:26:13Z
契约
- assert calling define on default mime instance throws because built-in instances are frozen
- assert unpopulated Mime instance only resolves custom types and returns null for standard types
- assert passing conflicting extensions directly to Mime constructor throws without force=true
- assert custom Mime instance with imported standard/other types and forced overrides resolves both custom and overridden types
- assert reverse getExtension mapping works for custom and overridden types
文件
- NOTES.md
- csx.json
- package-lock.json
- package.json
- src/index.mjs
- test/contract.mjs
源代码
# Notes on `mime` v4 Custom Types and Overrides
## `search_known_solution` Result
`search_known_solution` returned existing sample `sha256:de68283133f08ef6991ed21eb301b843d23fb5fa70dc448438763a111403d62c` ("Look up a MIME type from a filename with mime v4"), which demonstrates default export `mime.getType()` and `mime.getExtension()`. This sample explores a different trap: configuring custom MIME types, constructor isolation, and extension overrides in `mime` v4.
## What a naive model would write instead
A naive model would call `mime.define({ 'text/x-custom': ['custom'] })` directly on the default import or instantiate `new Mime(standardTypes, { 'text/x-custom': ['txt'] })` assuming built-in instances are mutable and constructor arguments automatically overwrite collisions.
## How the wrong version fails
It fails loudly at runtime with `Error: define() not allowed for built-in Mime objects` when calling `mime.define()`, or `Error: "..." conflicts with "...". Pass \`force=true\` to override this definition.` when passing conflicting extensions directly to `new Mime(...)` without calling `instance.define(map, true)`.
{"case":{"caseId":"case:sha256:09193379b091385e886126e67a4bd4fa1a1b0f436c5143e2f241de27b2105912","contract":["assert calling define on default mime instance throws because built-in instances are frozen","assert unpopulated Mime instance only resolves custom types and returns null for standard types","assert passing conflicting extensions directly to Mime constructor throws without force=true","assert custom Mime instance with imported standard/other types and forced overrides resolves both custom and overridden types","assert reverse getExtension mapping works for custom and overridden types"],"goal":"Configure custom MIME types and override standard extensions using a new Mime instance in mime v4","kind":"HOW","packages":["pkg:npm/mime@4.1.0"],"schemaVersion":1,"symbols":["Mime","Mime.define","Mime.getType","Mime.getExtension"]},"contractCommand":["node","test/contract.mjs"],"environment":{"arch":"x64","ecosystem":"npm","executionContext":"node","language":"node","os":"linux","packageManager":"npm","runtime":"node","schemaVersion":1},"license":"MIT-0","packages":["pkg:npm/mime@4.1.0"],"schemaVersion":1,"symbols":["Mime","Mime.define","Mime.getType","Mime.getExtension"],"verifierAdapter":"node-typescript@1"}
{
"name": "csx-sample-mime-custom-types",
"version": "1.0.0",
"lockfileVersion": 3,
"requires": true,
"packages": {
"": {
"name": "csx-sample-mime-custom-types",
"version": "1.0.0",
"license": "MIT-0",
"dependencies": {
"mime": "4.1.0"
}
},
"node_modules/mime": {
"version": "4.1.0",
"resolved": "https://registry.npmjs.org/mime/-/mime-4.1.0.tgz",
"integrity": "sha512-X5ju04+cAzsojXKes0B/S4tcYtFAJ6tTMuSPBEn9CPGlrWr8Fiw7qYeLT0XyH80HSoAoqWCaz+MWKh22P7G1cw==",
"funding": [
"https://github.com/sponsors/broofa"
],
"license": "MIT",
"bin": {
"mime": "bin/cli.js"
},
"engines": {
"node": ">=16"
}
}
}
}
{
"name": "csx-sample-mime-custom-types",
"version": "1.0.0",
"private": true,
"type": "module",
"license": "MIT-0",
"dependencies": {
"mime": "4.1.0"
}
}
import defaultMime, { Mime } from 'mime';
import standardTypes from 'mime/types/standard.js';
import otherTypes from 'mime/types/other.js';
// In mime v4, the default export is frozen via _freeze(). Calling defaultMime.define() throws:
// Error: define() not allowed for built-in Mime objects. See https://github.com/broofa/mime/blob/main/README.md#custom-mime-instances
export function mutateDefaultMime(typeMap) {
defaultMime.define(typeMap);
}
// In mime v4, new Mime() instances do NOT implicitly inherit built-in types.
// An instance created without standard/other types only recognizes its explicitly passed entries.
export function createIsolatedMime(customTypes) {
return new Mime(customTypes);
}
// Overrides for already-registered extensions cannot be passed directly into new Mime(standardTypes, overrides)
// because constructor define calls do not set force=true and will throw on conflicts.
// Overriding an existing extension requires calling instance.define(overrides, true).
export function createCustomMime({ customTypes = {}, overrides = {} } = {}) {
const instance = new Mime(standardTypes, otherTypes, customTypes);
if (Object.keys(overrides).length > 0) {
instance.define(overrides, true);
}
return instance;
}
export function tryConflictingConstructor(conflictingTypes) {
return new Mime(standardTypes, conflictingTypes);
}
import { strict as assert } from 'node:assert';
import {
mutateDefaultMime,
createIsolatedMime,
createCustomMime,
tryConflictingConstructor,
} from '../src/index.mjs';
// 1. Default mime instance is frozen: define() throws in v4
assert.throws(
() => mutateDefaultMime({ 'application/x-custom-doc': ['custdoc'] }),
/define\(\) not allowed for built-in Mime objects/
);
// 2. Custom Mime instances without standard types only resolve custom entries
const isolated = createIsolatedMime({ 'application/x-custom-doc': ['custdoc'] });
assert.equal(isolated.getType('report.custdoc'), 'application/x-custom-doc');
assert.equal(isolated.getType('index.html'), null);
assert.equal(isolated.getType('data.json'), null);
// 3. Passing conflicting extension mappings to Mime constructor throws without force=true
assert.throws(
() => tryConflictingConstructor({ 'text/x-custom-plain': ['txt'] }),
/conflicts with "text\/plain -> txt"\. Pass `force=true` to override this definition\./
);
// 4. Overriding with define(map, true) on custom instance works alongside standard and other types
const customMime = createCustomMime({
customTypes: { 'application/x-custom-doc': ['custdoc'] },
overrides: { 'text/x-custom-plain': ['txt'] },
});
assert.equal(customMime.getType('report.custdoc'), 'application/x-custom-doc');
assert.equal(customMime.getType('notes.txt'), 'text/x-custom-plain');
assert.equal(customMime.getType('data.json'), 'application/json');
assert.equal(customMime.getType('archive.7z'), 'application/x-7z-compressed');
assert.equal(customMime.getType('mystery.zzz'), null);
assert.equal(customMime.getExtension('text/x-custom-plain'), 'txt');
assert.equal(customMime.getExtension('application/x-custom-doc'), 'custdoc');
assert.equal(customMime.getExtension('application/json'), 'json');
console.log('CONTRACT PASS: mime v4 custom Mime instances, dictionary imports, and forced overrides verified');