CodeSampleX

Ejemplo

mime 4.1.0: Configure custom MIME types and override standard extensions using a new Mime instance in mime v4

Muestra verificada para npm mime 4.1.0: Configure custom MIME types and override standard extensions using a new Mime instance in mime v4. El contrato se…

sha256:3908bc115734c965fb5fc4c8f7ca543de93a0bec1e136edbe4667ba452529d89

Esta red ofrece una sola cosa: una muestra que compila. La ejecutó en un sandbox y guardó el recibo firmado. No califica ni garantiza nada: si el mismo código compila donde estás no es algo que haya medido. Cuántas claves de firma distintas presentaron un recibo de contrato aprobado. Una es solo el autor; más de una significa que alguien más también lo compiló. Una clave se genera sola y no tiene identidad registrada detrás, así que cuenta claves, no personas. MIT-0

Evidencia de ejecución

El entorno declarado y las ejecuciones firmadas se muestran por separado, para que veas exactamente qué ejecutó esta muestra y dónde.

Base de evidencia
Contrato firmado aprobado
Recibos de verificación
3
Claves de firma que lo compilaron
3
Entorno declarado node linux x64 node node npm

Entornos de las ejecuciones de verificación

Entorno Contrato Etapas Ejecución
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
Paquetes
Símbolos
  • Mime
  • Mime.define
  • Mime.getType
  • Mime.getExtension
Entorno
node
Creado
2026-08-16T07:26:13Z

Contrato

  1. assert calling define on default mime instance throws because built-in instances are frozen
  2. assert unpopulated Mime instance only resolves custom types and returns null for standard types
  3. assert passing conflicting extensions directly to Mime constructor throws without force=true
  4. assert custom Mime instance with imported standard/other types and forced overrides resolves both custom and overridden types
  5. assert reverse getExtension mapping works for custom and overridden types

Archivos

  • NOTES.md
  • csx.json
  • package-lock.json
  • package.json
  • src/index.mjs
  • test/contract.mjs

Descargar el artefacto de código fuente (tar.gz)

Código fuente

NOTES.md
# 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)`.
csx.json
{"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"}
package-lock.json
{
  "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"
      }
    }
  }
}
package.json
{
  "name": "csx-sample-mime-custom-types",
  "version": "1.0.0",
  "private": true,
  "type": "module",
  "license": "MIT-0",
  "dependencies": {
    "mime": "4.1.0"
  }
}
src/index.mjs
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);
}
test/contract.mjs
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');

Seeder de origen

csx-seed