diff --git a/.idea/runConfigurations/_template__of_JavaScriptTestRunnerJest.xml b/.idea/runConfigurations/_template__of_JavaScriptTestRunnerJest.xml
new file mode 100644
index 000000000..2ece9ce5c
--- /dev/null
+++ b/.idea/runConfigurations/_template__of_JavaScriptTestRunnerJest.xml
@@ -0,0 +1,9 @@
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.vscode/settings.json b/.vscode/settings.json
index 135c29599..124fa3e68 100644
--- a/.vscode/settings.json
+++ b/.vscode/settings.json
@@ -41,5 +41,6 @@
"source.fixAll.eslint": "explicit"
}
},
- "files.insertFinalNewline": true
+ "files.insertFinalNewline": true,
+ "jestrunner.jestCommand": "pnpm exec cross-env NODE_OPTIONS=\"--experimental-vm-modules --no-deprecation\" node 'node_modules/jest/bin/jest.js'"
}
diff --git a/jest.config.js b/jest.config.js
index 6b07c6f93..6863ebfbf 100644
--- a/jest.config.js
+++ b/jest.config.js
@@ -1,24 +1,7 @@
-/**
- * Ignores all ESM packages that make Jest mad.
- *
- * "Jest encountered an unexpected token"
- *
- * Direct packages:
- * - file-type
- */
-const esModules = [
- // file-type and all dependencies: https://github.com/sindresorhus/file-type
- 'file-type',
- 'strtok3',
- 'readable-web-to-node-stream',
- 'token-types',
- 'peek-readable',
-].join('|')
-
-/** @type {import('jest').Config} */
-const baseJestConfig = {
+/** @type {import('jest').Config} */ const baseJestConfig = {
extensionsToTreatAsEsm: ['.ts', '.tsx'],
- setupFilesAfterEnv: ['/test/jest.setup.ts'],
+ setupFiles: ['/test/jest.setup.env.js'],
+ setupFilesAfterEnv: ['/test/jest.setup.js'],
moduleNameMapper: {
'\\.(css|scss)$': '/test/helpers/mocks/emptyModule.js',
'\\.(jpg|jpeg|png|gif|eot|otf|webp|svg|ttf|woff|woff2|mp4|webm|wav|mp3|m4a|aac|oga)$':
@@ -31,10 +14,6 @@ const baseJestConfig = {
transform: {
'^.+\\.(t|j)sx?$': ['@swc/jest'],
},
- transformIgnorePatterns: [
- `/node_modules/(?!.pnpm)(?!(${esModules})/)`,
- `/node_modules/.pnpm/(?!(${esModules.replace(/\//g, '\\+')})@)`,
- ],
verbose: true,
}
diff --git a/packages/create-payload-app/jest.config.js b/packages/create-payload-app/jest.config.js
index a8b434a87..a73df5e61 100644
--- a/packages/create-payload-app/jest.config.js
+++ b/packages/create-payload-app/jest.config.js
@@ -13,7 +13,7 @@
/** @type {import('jest').Config} */
const customJestConfig = {
extensionsToTreatAsEsm: ['.ts', '.tsx'],
- // setupFilesAfterEnv: ['/jest.setup.ts'],
+ // setupFilesAfterEnv: ['/jest.setup.js'],
moduleNameMapper: {
'\\.(css|scss)$': '/helpers/mocks/emptyModule.js',
'\\.(jpg|jpeg|png|gif|eot|otf|webp|svg|ttf|woff|woff2|mp4|webm|wav|mp3|m4a|aac|oga)$':
diff --git a/packages/next/package.json b/packages/next/package.json
index 3ad3b0aaf..badd3c9b0 100644
--- a/packages/next/package.json
+++ b/packages/next/package.json
@@ -47,7 +47,7 @@
"@payloadcms/translations": "workspace:*",
"@payloadcms/ui": "workspace:*",
"busboy": "^1.6.0",
- "file-type": "19.0.0 || 19.0.0-rc-f994737d14-20240522",
+ "file-type": "17.1.6",
"graphql-http": "^1.22.0",
"graphql-playground-html": "1.6.30",
"http-status": "1.6.2",
diff --git a/packages/payload/package.json b/packages/payload/package.json
index 86c5b7abc..a0f2c3580 100644
--- a/packages/payload/package.json
+++ b/packages/payload/package.json
@@ -89,7 +89,7 @@
"console-table-printer": "2.11.2",
"dataloader": "2.2.2",
"deepmerge": "4.3.1",
- "file-type": "16.5.4",
+ "file-type": "17.1.6",
"find-up": "7.0.0",
"get-tsconfig": "^4.7.2",
"http-status": "1.6.2",
diff --git a/packages/payload/src/uploads/generateFileData.ts b/packages/payload/src/uploads/generateFileData.ts
index 461761461..1d8a9c5ce 100644
--- a/packages/payload/src/uploads/generateFileData.ts
+++ b/packages/payload/src/uploads/generateFileData.ts
@@ -1,7 +1,6 @@
import type { OutputInfo, Sharp, SharpOptions } from 'sharp'
-import fileType from 'file-type'
-const { fromBuffer } = fileType
+import { fileTypeFromBuffer } from 'file-type'
import fs from 'fs'
import mkdirp from 'mkdirp'
import sanitize from 'sanitize-filename'
@@ -161,7 +160,7 @@ export const generateFileData = async ({
if (sharpFile) {
const metadata = await sharpFile.metadata()
fileBuffer = await sharpFile.toBuffer({ resolveWithObject: true })
- ;({ ext, mime } = await fromBuffer(fileBuffer.data)) // This is getting an incorrect gif height back.
+ ;({ ext, mime } = await fileTypeFromBuffer(fileBuffer.data)) // This is getting an incorrect gif height back.
fileData.width = fileBuffer.info.width
fileData.height = fileBuffer.info.height
fileData.filesize = fileBuffer.info.size
diff --git a/packages/payload/src/uploads/getFileByPath.ts b/packages/payload/src/uploads/getFileByPath.ts
index 5a7c044d1..2bb498c9d 100644
--- a/packages/payload/src/uploads/getFileByPath.ts
+++ b/packages/payload/src/uploads/getFileByPath.ts
@@ -1,7 +1,6 @@
-import fileType from 'file-type'
+import { fileTypeFromFile } from 'file-type'
import fs from 'fs'
import path from 'path'
-const { fromFile } = fileType
import type { PayloadRequestWithData } from '../types/index.js'
@@ -12,7 +11,7 @@ const mimeTypeEstimate = {
export const getFileByPath = async (filePath: string): Promise => {
if (typeof filePath === 'string') {
const data = fs.readFileSync(filePath)
- const mimetype = fromFile(filePath)
+ const mimetype = fileTypeFromFile(filePath)
const { size } = fs.statSync(filePath)
const name = path.basename(filePath)
diff --git a/packages/payload/src/uploads/imageResizer.ts b/packages/payload/src/uploads/imageResizer.ts
index bab0e166e..f17a26350 100644
--- a/packages/payload/src/uploads/imageResizer.ts
+++ b/packages/payload/src/uploads/imageResizer.ts
@@ -1,8 +1,6 @@
import type { OutputInfo, Sharp, SharpOptions } from 'sharp'
-import fileType from 'file-type'
-const { fromBuffer } = fileType
-
+import { fileTypeFromBuffer } from 'file-type'
import fs from 'fs'
import sanitize from 'sanitize-filename'
@@ -343,7 +341,7 @@ export async function resizeAndTransformImageSizes({
req.payloadUploadSizes[imageResizeConfig.name] = bufferData
}
- const mimeInfo = await fromBuffer(bufferData)
+ const mimeInfo = await fileTypeFromBuffer(bufferData)
const imageNameWithDimensions = createImageName(
sanitizedImage.name,
diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml
index 1dcd281ff..aa71f5779 100644
--- a/pnpm-lock.yaml
+++ b/pnpm-lock.yaml
@@ -571,8 +571,8 @@ importers:
specifier: ^1.6.0
version: 1.6.0
file-type:
- specifier: 19.0.0 || 19.0.0-rc-f994737d14-20240522
- version: 19.0.0
+ specifier: 17.1.6
+ version: 17.1.6
graphql:
specifier: ^16.8.1
version: 16.8.1
@@ -701,8 +701,8 @@ importers:
specifier: 4.3.1
version: 4.3.1
file-type:
- specifier: 16.5.4
- version: 16.5.4
+ specifier: 17.1.6
+ version: 17.1.6
find-up:
specifier: 7.0.0
version: 7.0.0
@@ -10762,15 +10762,6 @@ packages:
dependencies:
flat-cache: 3.2.0
- /file-type@16.5.4:
- resolution: {integrity: sha512-/yFHK0aGjFEgDJjEKP0pWCplsPFPhwyfwevf/pVxiN0tmE4L9LmwWxWukdJSHdoCli4VgQLehjJtwQBnqmsKcw==}
- engines: {node: '>=10'}
- dependencies:
- readable-web-to-node-stream: 3.0.2
- strtok3: 6.3.0
- token-types: 4.2.1
- dev: false
-
/file-type@17.1.6:
resolution: {integrity: sha512-hlDw5Ev+9e883s0pwUsuuYNu4tD7GgpUnOvykjv1Gya0ZIjuKumthDRua90VUn6/nlRKAjcxLUnHNTIUWwWIiw==}
engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
@@ -10778,16 +10769,6 @@ packages:
readable-web-to-node-stream: 3.0.2
strtok3: 7.0.0
token-types: 5.0.1
- dev: true
-
- /file-type@19.0.0:
- resolution: {integrity: sha512-s7cxa7/leUWLiXO78DVVfBVse+milos9FitauDLG1pI7lNaJ2+5lzPnr2N24ym+84HVwJL6hVuGfgVE+ALvU8Q==}
- engines: {node: '>=18'}
- dependencies:
- readable-web-to-node-stream: 3.0.2
- strtok3: 7.0.0
- token-types: 5.0.1
- dev: false
/filename-reserved-regex@3.0.0:
resolution: {integrity: sha512-hn4cQfU6GOT/7cFHXBqeBg2TbrMBgdD0kcjLhvSQYYwm3s4B6cjvBfb7nBALJLAXqmU5xajSa7X2NnUud/VCdw==}
@@ -14029,11 +14010,6 @@ packages:
resolution: {integrity: sha512-YYEs+eauIjDH5nUEGi18EohWE0nV2QbGTqmxQcqgZ/0g+laPCQmuIqq7EBLVi9uim9zMgfJv0QBZEnQ3uHw/Tw==}
dev: false
- /peek-readable@4.1.0:
- resolution: {integrity: sha512-ZI3LnwUv5nOGbQzD9c2iDG6toheuXSZP5esSHBjopsXH4dg19soufvpUGA3uohi5anFtGb2lhAVdHzH6R/Evvg==}
- engines: {node: '>=8'}
- dev: false
-
/peek-readable@5.0.0:
resolution: {integrity: sha512-YtCKvLUOvwtMGmrniQPdO7MwPjgkFBtFIrmfSbYmYuq3tKDV/mcfAhBth1+C3ru7uXIZasc/pHnb+YDYNkkj4A==}
engines: {node: '>=14.16'}
@@ -16404,14 +16380,6 @@ packages:
/strnum@1.0.5:
resolution: {integrity: sha512-J8bbNyKKXl5qYcR36TIO8W3mVGVHrmmxsd5PAItGkmyzwJvybiw2IVq5nqd0i4LSNSkB/sx9VHllbfFdr9k1JA==}
- /strtok3@6.3.0:
- resolution: {integrity: sha512-fZtbhtvI9I48xDSywd/somNqgUHl2L2cstmXCCif0itOf96jeW18MBSyrLuNicYQVkvpOxkZtkzujiTJ9LW5Jw==}
- engines: {node: '>=10'}
- dependencies:
- '@tokenizer/token': 0.3.0
- peek-readable: 4.1.0
- dev: false
-
/strtok3@7.0.0:
resolution: {integrity: sha512-pQ+V+nYQdC5H3Q7qBZAz/MO6lwGhoC2gOAjuouGf/VO0m7vQRh8QNMl2Uf6SwAtzZ9bOw3UIeBukEGNJl5dtXQ==}
engines: {node: '>=14.16'}
@@ -16755,14 +16723,6 @@ packages:
engines: {node: '>=0.6'}
dev: false
- /token-types@4.2.1:
- resolution: {integrity: sha512-6udB24Q737UD/SDsKAHI9FCRP7Bqc9D/MQUV02ORQg5iskjtLJlZJNdN4kKtcdtwCeWIwIHDGaUsTsCCAa8sFQ==}
- engines: {node: '>=10'}
- dependencies:
- '@tokenizer/token': 0.3.0
- ieee754: 1.2.1
- dev: false
-
/token-types@5.0.1:
resolution: {integrity: sha512-Y2fmSnZjQdDb9W4w4r1tswlMHylzWIeOKpx0aZH9BgGtACHhrk3OkT52AzwcuqTRBZtvvnTjDBh8eynMulu8Vg==}
engines: {node: '>=14.16'}
diff --git a/test/helpers/startMemoryDB.ts b/test/helpers/startMemoryDB.ts
index d5f64f707..e0dbe9d99 100644
--- a/test/helpers/startMemoryDB.ts
+++ b/test/helpers/startMemoryDB.ts
@@ -7,6 +7,7 @@ export default async () => {
process.env.PAYLOAD_DROP_DATABASE = 'true'
process.env.NODE_OPTIONS = '--no-deprecation'
process.env.DISABLE_PAYLOAD_HMR = 'true'
+ process.env.NODE_OPTIONS = '--experimental-vm-modules --no-deprecation'
if (
(!process.env.PAYLOAD_DATABASE || process.env.PAYLOAD_DATABASE === 'mongodb') &&
diff --git a/test/jest.config.js b/test/jest.config.js
index 7f4c5ea14..21311ed8f 100644
--- a/test/jest.config.js
+++ b/test/jest.config.js
@@ -9,10 +9,8 @@ const dirname = path.dirname(filename)
const customJestConfig = {
...jestBaseConfig,
testMatch: ['/**/*int.spec.ts'],
- setupFilesAfterEnv: [
- //path.resolve(dirname, './helpers/startMemoryDB.ts'),
- '/jest.setup.ts',
- ],
+ setupFiles: ['/jest.setup.env.js'],
+ setupFilesAfterEnv: ['/jest.setup.js'],
globalSetup: path.resolve(dirname, './helpers/startMemoryDB.ts'),
moduleNameMapper: {
'\\.(css|scss)$': '/helpers/mocks/emptyModule.js',
diff --git a/test/jest.setup.env.js b/test/jest.setup.env.js
new file mode 100644
index 000000000..3489e8c6d
--- /dev/null
+++ b/test/jest.setup.env.js
@@ -0,0 +1 @@
+process.env.NODE_OPTIONS = '--experimental-vm-modules --no-deprecation'
diff --git a/test/jest.setup.ts b/test/jest.setup.js
similarity index 66%
rename from test/jest.setup.ts
rename to test/jest.setup.js
index bc20d2f8e..e8d18ed9b 100644
--- a/test/jest.setup.ts
+++ b/test/jest.setup.js
@@ -2,3 +2,5 @@ process.env.PAYLOAD_DISABLE_ADMIN = 'true'
process.env.PAYLOAD_DROP_DATABASE = 'true'
process.env.PAYLOAD_PUBLIC_CLOUD_STORAGE_ADAPTER = 's3'
+
+process.env.NODE_OPTIONS = '--experimental-vm-modules --no-deprecation'