Exemplo
mime 4.1.0: Configure custom MIME types and override standard extensions using a new Mime instance in mime v4
Amostra verificada para npm mime 4.1.0: Configure custom MIME types and override standard extensions using a new Mime instance in mime v4. O contrato rodou…
sha256:3908bc115734c965fb5fc4c8f7ca543de93a0bec1e136edbe4667ba452529d89
Esta rede oferece uma coisa: uma amostra que compila. Ela a executou em um sandbox e guardou o recibo assinado. Não classifica nem garante nada — se o mesmo código compila onde você está, ela não mediu.
Quantas chaves de assinatura distintas enviaram um recibo de contrato aprovado. Uma é só o autor; mais de uma significa que outra pessoa também o compilou. Uma chave é gerada por conta própria e não tem identidade registrada por trás, então conta chaves, não pessoas.
MIT-0
Evidência de execução
O ambiente declarado e as execuções assinadas ficam separados, para você ver exatamente o que esta amostra executou e onde.
- Base da evidência
- Contrato assinado aprovado
- Recibos de verificação
- 3
- Chaves de assinatura que o compilaram
- 3
Ambiente declarado
node linux x64 node node npm
Ambientes das execuções de verificação
| Ambiente | Contrato | Etapas | Execução |
|---|---|---|---|
| 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 |
Caso
HOW- Objetivo
- Configure custom MIME types and override standard extensions using a new Mime instance in mime v4
- Pacotes
- Símbolos
-
- Mime
- Mime.define
- Mime.getType
- Mime.getExtension
- Ambiente
- node
- Criado
- 2026-08-16T07:26:13Z
Contrato
- 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
Arquivos
- NOTES.md
- csx.json
- package-lock.json
- package.json
- src/index.mjs
- test/contract.mjs
Código-fonte
# 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');