Skip to content

Commit

Permalink
chore!: rename to media type
Browse files Browse the repository at this point in the history
Media type rfc4288 encompasses MIME type rfc2045
  • Loading branch information
JadsonLucena committed Mar 23, 2023
1 parent 885c198 commit 5bd804b
Show file tree
Hide file tree
Showing 5 changed files with 45 additions and 47 deletions.
14 changes: 7 additions & 7 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,9 +1,9 @@
# MimeTypes
This is a comprehensive compilation of MIME types that is periodically updated through the following projects: [Apache](https://github.com/apache/httpd/blob/trunk/docs/conf/mime.types), [NGINX](https://github.com/nginx/nginx/blob/master/conf/mime.types), [IANA](https://www.iana.org/assignments/media-types/media-types.xhtml) and [Debian](https://salsa.debian.org/debian/media-types/-/blob/master/mime.types)
# MediaTypes
This is a comprehensive compilation of media types that is periodically updated through the following projects: [Apache](https://github.com/apache/httpd/blob/trunk/docs/conf/mime.types), [NGINX](https://github.com/nginx/nginx/blob/master/conf/mime.types), [IANA](https://www.iana.org/assignments/media-types/media-types.xhtml) and [Debian](https://salsa.debian.org/debian/media-types/-/blob/master/mime.types)


## What is
A file's extension has no meaning on the web. In order for the client to interpret the document correctly, the MIME type must be sent in the Content-Type header.
A file's extension has no meaning on the web. In order for the client to interpret the document correctly, the media type must be sent in the Content-Type header.


## Interfaces
Expand All @@ -16,7 +16,7 @@ constructor(

```typescript
// Getters
list(): { [mimeType: string]: string[] } // List of all MIME types with their extensions
list(): { [mediaType: string]: string[] } // List of all media types with their extensions
updateInterval(): number
```

Expand All @@ -31,12 +31,12 @@ updateInterval(
// Methods
append(
extension: string
mimeType: string | string[], // https://developer.mozilla.org/en-US/docs/Web/HTTP/Basics_of_HTTP/MIME_types#structure_of_a_mime_type
mediaType: string | string[], // https://developer.mozilla.org/en-US/docs/Web/HTTP/Basics_of_HTTP/MIME_types#structure_of_a_mime_type
)

get(
path: string // https://nodejs.org/api/path.html#pathparsepath
): string[] // MIME type list
): string[] // media type list

update(): void // database update
```
Expand All @@ -48,4 +48,4 @@ on(name: 'update', callback: (mimeType: string, extensions: string[]) => void):


## QuickStart
[![Edit MimeType.mjs](https://codesandbox.io/static/img/play-codesandbox.svg)](https://codesandbox.io/s/async-cache-6m2we0?autoresize=1&expanddevtools=1&fontsize=14&hidenavigation=1&theme=dark)
[![Edit MediaType.mjs](https://codesandbox.io/static/img/play-codesandbox.svg)](https://codesandbox.io/s/async-cache-6m2we0?autoresize=1&expanddevtools=1&fontsize=14&hidenavigation=1&theme=dark)
14 changes: 7 additions & 7 deletions package.json
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
{
"name": "@jadsonlucena/mimetypes",
"name": "@jadsonlucena/mediatypes",
"version": "0.1.0",
"description": "This is a comprehensive compilation of mime types that is periodically updated through the following projects: Apache, NGINX, IANA and Debian",
"main": "./src/MymeTypes.js",
"description": "This is a comprehensive compilation of media types that is periodically updated through the following projects: Apache, NGINX, IANA and Debian",
"main": "./src/MediaTypes.js",
"engines": {
"node": ">=18"
},
Expand All @@ -16,11 +16,11 @@
],
"repository": {
"type": "git",
"url": "git+https://github.com/JadsonLucena/MimeTypes.js.git"
"url": "git+https://github.com/JadsonLucena/MediaTypes.js.git"
},
"keywords": [
"MIME types",
"mimetypes",
"mediatypes",
"mime.types",
"mime types",
"media types",
Expand All @@ -30,7 +30,7 @@
"author": "JadsonLucena <jadsonlucena@gmail.com> (https://github.com/JadsonLucena)",
"license": "MIT",
"bugs": {
"url": "https://github.com/JadsonLucena/MimeTypes.js/issues"
"url": "https://github.com/JadsonLucena/MediaTypes.js/issues"
},
"homepage": "https://github.com/JadsonLucena/MimeTypes.js#readme"
"homepage": "https://github.com/JadsonLucena/MediaTypes.js#readme"
}
62 changes: 31 additions & 31 deletions src/MimeTypes.js → src/MediaTypes.js
Original file line number Diff line number Diff line change
Expand Up @@ -2,9 +2,9 @@ const fs = require('fs');
const { parse } = require('path');
const EventEmitter = require('events');

class MimeTypes extends EventEmitter {
class MediaTypes extends EventEmitter {

#mimeTypes;
#mediaTypes;
#versions;
#updateInterval;
#updateLoop;
Expand All @@ -26,11 +26,11 @@ class MimeTypes extends EventEmitter {

try {

this.#mimeTypes = JSON.parse(fs.readFileSync(__dirname +'/mimetypes.json').toString('utf8'));
this.#mediaTypes = JSON.parse(fs.readFileSync(__dirname +'/mimetypes.json').toString('utf8'));

} catch (err) {

this.#mimeTypes = {};
this.#mediaTypes = {};

}

Expand Down Expand Up @@ -73,25 +73,25 @@ class MimeTypes extends EventEmitter {

extension = extension.trim().toLowerCase();

if (extension in this.#mimeTypes) {
if (extension in this.#mediaTypes) {

content[extension].forEach(mimeType => {
content[extension].forEach(mediaType => {

mimeType = mimeType.trim().toLowerCase();
mediaType = mediaType.trim().toLowerCase();

if (!this.#mimeTypes[extension].includes(mimeType)) {
if (!this.#mediaTypes[extension].includes(mediaType)) {

this.#mimeTypes[extension].push(mimeType);
this.#mediaTypes[extension].push(mediaType);

list[extension] = (list[extension] || []).concat(mimeType);
list[extension] = (list[extension] || []).concat(mediaType);

}

});

} else {

list[extension] = this.#mimeTypes[extension] = content[extension];
list[extension] = this.#mediaTypes[extension] = content[extension];

}

Expand All @@ -113,17 +113,17 @@ class MimeTypes extends EventEmitter {

if (line.length > 1) {

let mimeType = line[0].trim().toLowerCase();
let mediaType = line[0].trim().toLowerCase();

if (this.#formatMediaType.test(mimeType)) {
if (this.#formatMediaType.test(mediaType)) {

line[1].split(/\s+/).forEach(extension => {

extension = extension.trim().toLowerCase()

if (this.#formatExtension.test(extension)) {

curr[extension] = (curr[extension] || []).concat(mimeType);
curr[extension] = (curr[extension] || []).concat(mediaType);

}

Expand Down Expand Up @@ -162,19 +162,19 @@ class MimeTypes extends EventEmitter {
version: res.headers.get('etag'),
content: (await res.text()).replace(/(\s*types\s*{\s*|\s*}\s*)/ig, '').split(';').filter(line => !/^#.*/.test(line) && line.trim() != '').reduce((curr, line) => {

line = line.match(/^\s*(?<mimeType>[^\s]+)\s+(?<extensions>.*)\s*$/);
line = line.match(/^\s*(?<mediaType>[^\s]+)\s+(?<extensions>.*)\s*$/);

let mimeType = line.groups.mimeType.trim().toLowerCase();
let mediaType = line.groups.mediaType.trim().toLowerCase();

if (this.#formatMediaType.test(mimeType)) {
if (this.#formatMediaType.test(mediaType)) {

line.groups.extensions.split(/\s+/).forEach(extension => {

extension = extension.trim().toLowerCase()

if (this.#formatExtension.test(extension)) {

curr[extension] = (curr[extension] || []).concat(mimeType);
curr[extension] = (curr[extension] || []).concat(mediaType);

}

Expand Down Expand Up @@ -311,7 +311,7 @@ class MimeTypes extends EventEmitter {

if (Object.keys(list).length) {

fs.writeFileSync(__dirname +'/mimetypes.json', JSON.stringify(this.#mimeTypes));
fs.writeFileSync(__dirname +'/mimetypes.json', JSON.stringify(this.#mediaTypes));
fs.writeFileSync(__dirname +'/versions.json', JSON.stringify(this.#versions));

this.emit('update', list);
Expand All @@ -325,7 +325,7 @@ class MimeTypes extends EventEmitter {
}


get list() { return this.#mimeTypes; }
get list() { return this.#mediaTypes; }
get updateInterval() { return this.#updateInterval; }
get pattern() { return this.#formatMediaType; }

Expand Down Expand Up @@ -380,13 +380,13 @@ class MimeTypes extends EventEmitter {

}

return this.#mimeTypes[extension];
return this.#mediaTypes[extension];

}

append(extension, mimeType) {
append(extension, mediaType) {

mimeType = [].concat(mimeType);
mediaType = [].concat(mediaType);

if (typeof extension != 'string') {

Expand All @@ -398,26 +398,26 @@ class MimeTypes extends EventEmitter {

}

mimeType.forEach(mimeType => {
mediaType.forEach(mediaType => {

if (typeof mimeType != 'string') {
if (typeof mediaType != 'string') {

throw new TypeError(`Unsupported mimeType: ${mimeType}`);
throw new TypeError(`Unsupported mediaType: ${mediaType}`);

} else if (!this.#formatMediaType.test(mimeType)) {
} else if (!this.#formatMediaType.test(mediaType)) {

throw new SyntaxError(`Unsupported mimeType: ${mimeType}`);
throw new SyntaxError(`Unsupported mediaType: ${mediaType}`);

}

});

let content = {};
content[extension] = mimeType;
content[extension] = mediaType;

if (this.#updateList(content)) {

fs.writeFileSync(__dirname +'/mimetypes.json', JSON.stringify(this.#mimeTypes));
fs.writeFileSync(__dirname +'/mimetypes.json', JSON.stringify(this.#mediaTypes));

}

Expand All @@ -426,4 +426,4 @@ class MimeTypes extends EventEmitter {
}


module.exports = MimeTypes;
module.exports = MediaTypes;
1 change: 0 additions & 1 deletion src/mimetypes.json

This file was deleted.

1 change: 0 additions & 1 deletion src/versions.json

This file was deleted.

0 comments on commit 5bd804b

Please sign in to comment.