# `mime_types`

The `mime_types` library provides convenience predicates for mapping file extensions, file names, and URL-like resources to MIME media types and content encodings.

The current implementation ships with a built-in registry containing a practical set of common standard mappings plus a smaller set of de-facto common mappings. Additional mappings can be loaded at runtime from `mime.types`-style files.

Lookup is lenient by default. The convenience predicates also accept a boolean `Strict` argument to restrict lookup to strict runtime overlays plus the built-in standard registry.

The library uses the `os` library `decompose_file_name/4` predicate to split paths, and recognizes common compound suffixes such as `.tgz` and `.svgz`.

## API documentation

Open the ../../apis/library_index.html#mime_types link in a web browser.

## Loading

To load all entities in this library, load the `loader.lgt` file:

    | ?- logtalk_load(mime_types(loader)).

## Testing

To test this library predicates, load the `tester.lgt` file:

    | ?- logtalk_load(mime_types(tester)).

## Usage

Guess the MIME type and content encoding for a file name:

    | ?- mime_types::guess_file_type('archive.tgz', Type, Encoding).
    Type = 'application/x-tar',
    Encoding = gzip
    yes

Lookup a preferred extension for a MIME type:

    | ?- mime_types::guess_extension('application/json', Extension).
    Extension = '.json'
    yes

Read a `mime.types`-style file without mutating the runtime registry:

    | ?- mime_types::read_mime_types('mime.types', Pairs).

Load additional runtime mappings from a `mime.types`-style file:

    | ?- mime_types::load('mime.types').