From 3a9442a42f3db39b9dec0422d2d8d3df5f372df3 Mon Sep 17 00:00:00 2001 From: Antoine Cormouls Date: Wed, 23 Oct 2024 20:03:48 +0200 Subject: [PATCH] refactor: Upgrade to mime 4.0.4 (#9363) --- package-lock.json | 81 ++++++++++----------------- package.json | 2 +- src/Controllers/FilesController.js | 3 +- src/GraphQL/loaders/filesMutations.js | 4 +- src/Routers/FilesRouter.js | 4 +- 5 files changed, 36 insertions(+), 58 deletions(-) diff --git a/package-lock.json b/package-lock.json index 77910ad312..c1050391aa 100644 --- a/package-lock.json +++ b/package-lock.json @@ -36,7 +36,7 @@ "ldapjs": "3.0.7", "lodash": "4.17.21", "lru-cache": "10.4.0", - "mime": "3.0.0", + "mime": "4.0.4", "mongodb": "5.9.0", "mustache": "4.2.0", "otpauth": "9.3.4", @@ -2747,6 +2747,18 @@ "node": ">=14" } }, + "node_modules/@google-cloud/storage/node_modules/mime": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-3.0.0.tgz", + "integrity": "sha512-jSCU7/VB1loIWBZe14aEYHU/+1UMEHoaO7qxCOVJOw9GgH72VAWppxNcjU+x9a2k3GSIBXNKxXQFqRvvZ7vr3A==", + "optional": true, + "bin": { + "mime": "cli.js" + }, + "engines": { + "node": ">=10.0.0" + } + }, "node_modules/@google-cloud/storage/node_modules/uuid": { "version": "8.3.2", "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", @@ -4849,21 +4861,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/@saithodev/semantic-release-backmerge/node_modules/mime": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/mime/-/mime-4.0.4.tgz", - "integrity": "sha512-v8yqInVjhXyqP6+Kw4fV3ZzeMRqEW6FotRsKXjRS5VMTNIuXsdRoAvklpoRgSqXm6o9VNH4/C0mgedko9DdLsQ==", - "dev": true, - "funding": [ - "https://github.com/sponsors/broofa" - ], - "bin": { - "mime": "bin/cli.js" - }, - "engines": { - "node": ">=16" - } - }, "node_modules/@saithodev/semantic-release-backmerge/node_modules/mimic-fn": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-4.0.0.tgz", @@ -5364,21 +5361,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/@semantic-release/github/node_modules/mime": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/mime/-/mime-4.0.4.tgz", - "integrity": "sha512-v8yqInVjhXyqP6+Kw4fV3ZzeMRqEW6FotRsKXjRS5VMTNIuXsdRoAvklpoRgSqXm6o9VNH4/C0mgedko9DdLsQ==", - "dev": true, - "funding": [ - "https://github.com/sponsors/broofa" - ], - "bin": { - "mime": "bin/cli.js" - }, - "engines": { - "node": ">=16" - } - }, "node_modules/@semantic-release/github/node_modules/path-type": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/path-type/-/path-type-5.0.0.tgz", @@ -13303,14 +13285,17 @@ } }, "node_modules/mime": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/mime/-/mime-3.0.0.tgz", - "integrity": "sha512-jSCU7/VB1loIWBZe14aEYHU/+1UMEHoaO7qxCOVJOw9GgH72VAWppxNcjU+x9a2k3GSIBXNKxXQFqRvvZ7vr3A==", + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/mime/-/mime-4.0.4.tgz", + "integrity": "sha512-v8yqInVjhXyqP6+Kw4fV3ZzeMRqEW6FotRsKXjRS5VMTNIuXsdRoAvklpoRgSqXm6o9VNH4/C0mgedko9DdLsQ==", + "funding": [ + "https://github.com/sponsors/broofa" + ], "bin": { - "mime": "cli.js" + "mime": "bin/cli.js" }, "engines": { - "node": ">=10.0.0" + "node": ">=16" } }, "node_modules/mime-db": { @@ -23400,6 +23385,12 @@ "uuid": "^8.0.0" }, "dependencies": { + "mime": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-3.0.0.tgz", + "integrity": "sha512-jSCU7/VB1loIWBZe14aEYHU/+1UMEHoaO7qxCOVJOw9GgH72VAWppxNcjU+x9a2k3GSIBXNKxXQFqRvvZ7vr3A==", + "optional": true + }, "uuid": { "version": "8.3.2", "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", @@ -24914,12 +24905,6 @@ "integrity": "sha512-BhXM0Au22RwUneMPwSCnyhTOizdWoIEPU9sp0Aqa1PnDMR5Wv2FGXYDjuzJEIX+Eo2Rb8xuYe5jrnm5QowQFkw==", "dev": true }, - "mime": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/mime/-/mime-4.0.4.tgz", - "integrity": "sha512-v8yqInVjhXyqP6+Kw4fV3ZzeMRqEW6FotRsKXjRS5VMTNIuXsdRoAvklpoRgSqXm6o9VNH4/C0mgedko9DdLsQ==", - "dev": true - }, "mimic-fn": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-4.0.0.tgz", @@ -25259,12 +25244,6 @@ "integrity": "sha512-m6FAo/spmsW2Ab2fU35JTYwtOKa2yAwXSwgjSv1TJzh4Mh7mC3lzAOVLBprb72XsTrgkEIsl7YrFNAiDiRhIGg==", "dev": true }, - "mime": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/mime/-/mime-4.0.4.tgz", - "integrity": "sha512-v8yqInVjhXyqP6+Kw4fV3ZzeMRqEW6FotRsKXjRS5VMTNIuXsdRoAvklpoRgSqXm6o9VNH4/C0mgedko9DdLsQ==", - "dev": true - }, "path-type": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/path-type/-/path-type-5.0.0.tgz", @@ -31117,9 +31096,9 @@ } }, "mime": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/mime/-/mime-3.0.0.tgz", - "integrity": "sha512-jSCU7/VB1loIWBZe14aEYHU/+1UMEHoaO7qxCOVJOw9GgH72VAWppxNcjU+x9a2k3GSIBXNKxXQFqRvvZ7vr3A==" + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/mime/-/mime-4.0.4.tgz", + "integrity": "sha512-v8yqInVjhXyqP6+Kw4fV3ZzeMRqEW6FotRsKXjRS5VMTNIuXsdRoAvklpoRgSqXm6o9VNH4/C0mgedko9DdLsQ==" }, "mime-db": { "version": "1.52.0", diff --git a/package.json b/package.json index 5b60b1c769..6ee8596f98 100644 --- a/package.json +++ b/package.json @@ -45,7 +45,7 @@ "ldapjs": "3.0.7", "lodash": "4.17.21", "lru-cache": "10.4.0", - "mime": "3.0.0", + "mime": "4.0.4", "mongodb": "5.9.0", "mustache": "4.2.0", "otpauth": "9.3.4", diff --git a/src/Controllers/FilesController.js b/src/Controllers/FilesController.js index b6900af02c..a88c527b00 100644 --- a/src/Controllers/FilesController.js +++ b/src/Controllers/FilesController.js @@ -3,7 +3,6 @@ import { randomHexString } from '../cryptoUtils'; import AdaptableController from './AdaptableController'; import { validateFilename, FilesAdapter } from '../Adapters/Files/FilesAdapter'; import path from 'path'; -import mime from 'mime'; const Parse = require('parse').Parse; const legacyFilesRegex = new RegExp( @@ -19,7 +18,7 @@ export class FilesController extends AdaptableController { const extname = path.extname(filename); const hasExtension = extname.length > 0; - + const mime = (await import('mime')).default if (!hasExtension && contentType && mime.getExtension(contentType)) { filename = filename + '.' + mime.getExtension(contentType); } else if (hasExtension && !contentType) { diff --git a/src/GraphQL/loaders/filesMutations.js b/src/GraphQL/loaders/filesMutations.js index 212aa0b337..0a16a1c4a6 100644 --- a/src/GraphQL/loaders/filesMutations.js +++ b/src/GraphQL/loaders/filesMutations.js @@ -1,6 +1,5 @@ import { GraphQLNonNull } from 'graphql'; import { request } from 'http'; -import { getExtension } from 'mime'; import { mutationWithClientMutationId } from 'graphql-relay'; import Parse from 'parse/node'; import * as defaultGraphQLTypes from './defaultGraphQLTypes'; @@ -17,8 +16,9 @@ const handleUpload = async (upload, config) => { delete headers['host']; delete headers['content-length']; const stream = createReadStream(); + const mime = (await import('mime')).default; try { - const ext = getExtension(mimetype); + const ext = mime.getExtension(mimetype); const fullFileName = filename.endsWith(`.${ext}`) ? filename : `${filename}.${ext}`; const serverUrl = new URL(config.serverURL); const fileInfo = await new Promise((resolve, reject) => { diff --git a/src/Routers/FilesRouter.js b/src/Routers/FilesRouter.js index a13b95e5e4..13aab81548 100644 --- a/src/Routers/FilesRouter.js +++ b/src/Routers/FilesRouter.js @@ -3,7 +3,6 @@ import BodyParser from 'body-parser'; import * as Middlewares from '../middlewares'; import Parse from 'parse/node'; import Config from '../Config'; -import mime from 'mime'; import logger from '../logger'; const triggers = require('../triggers'); const http = require('http'); @@ -67,7 +66,7 @@ export class FilesRouter { return router; } - getHandler(req, res) { + async getHandler(req, res) { const config = Config.get(req.params.appId); if (!config) { res.status(403); @@ -77,6 +76,7 @@ export class FilesRouter { } const filesController = config.filesController; const filename = req.params.filename; + const mime = (await import('mime')).default; const contentType = mime.getType(filename); if (isFileStreamable(req, filesController)) { filesController.handleFileStream(config, filename, req, res, contentType).catch(() => {