CodeSampleX

Beispiel

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

Verifiziertes Beispiel für npm mime 4.1.0: Configure custom MIME types and override standard extensions using a new Mime instance in mime v4. Der Vertrag…

sha256:3908bc115734c965fb5fc4c8f7ca543de93a0bec1e136edbe4667ba452529d89

Dieses Netzwerk bietet eine Sache: ein Sample, das baut. Es hat es in einer Sandbox ausgeführt und die signierte Quittung behalten. Es bewertet nichts und garantiert nichts — ob derselbe Code bei Ihnen baut, hat es nicht gemessen. Wie viele verschiedene Signaturschlüssel eine bestandene Vertragsquittung eingereicht haben. Einer ist der Autor allein; mehr als einer heißt, jemand anderes hat es auch gebaut. Ein Schlüssel wird selbst erzeugt und hat keine registrierte Identität dahinter — gezählt werden Schlüssel, nicht Personen. MIT-0

Ausführungsbelege

Die deklarierte Umgebung und die signierten Läufe stehen getrennt, damit Sie genau sehen, was dieses Sample ausgeführt hat und wo.

Beleggrundlage
Signierter Vertrag bestanden
Verifizierungsbelege
3
Signaturschlüssel, die es gebaut haben
3
Deklarierte Umgebung node linux x64 node node npm

Umgebungen der Verifizierungsläufe

Umgebung Contract Stufen Lauf
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

Fall

HOW
Ziel
Configure custom MIME types and override standard extensions using a new Mime instance in mime v4
Pakete
Symbole
  • Mime
  • Mime.define
  • Mime.getType
  • Mime.getExtension
Umgebung
node
Erstellt
2026-08-16T07:26:13Z

Contract

  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

Dateien

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

Quellartefakt herunterladen (tar.gz)

Quelltext

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');

Ursprungs-Seeder

csx-seed