nest icon indicating copy to clipboard operation
nest copied to clipboard

AddFileTypeValidator (still) doesn't work correctly

Open jamescrowley opened this issue 6 months ago • 10 comments
trafficstars

Is there an existing issue for this?

  • [x] I have searched the existing issues

Current behavior

We've just hit the same problem as https://github.com/nestjs/nest/issues/14970 (which is closed) upgrading to the latest packages, but that issue says it's fixed - it doesn't seem to be.

If we log the error being swallowed by this try, catch:

https://github.com/nestjs/nest/blob/master/packages/common/pipes/file/file-type.validator.ts#L93-L95

thrown by the loadEsm call:

https://github.com/nestjs/nest/blob/master/packages/common/pipes/file/file-type.validator.ts#L75-L76

we get:


TypeError: A dynamic import callback was invoked without --experimental-vm-modules
        at importModuleDynamicallyCallback (node:internal/modules/esm/utils:226:11)
        at loadEsm (/Users/yyy/node_modules/load-esm/index.js:2:26)
        at FileTypeValidator.isValid (/Users/yyy/node_modules/@nestjs/common/pipes/file/file-type.validator.js:46:73)
        at ParseFilePipe.validateOrThrow (/Users/yyy/node_modules/@nestjs/common/pipes/file/parse-file.pipe.js:58:41)
        at ParseFilePipe.validate (/Users/yyy/node_modules/@nestjs/common/pipes/file/parse-file.pipe.js:53:24)
        at processTicksAndRejections (node:internal/process/task_queues:95:5)
        at async ParseFilePipe.validateFilesOrFile (/Users/yyy/node_modules/@nestjs/common/pipes/file/parse-file.pipe.js:43:13)
        at async ParseFilePipe.transform (/Users/yyy/node_modules/@nestjs/common/pipes/file/parse-file.pipe.js:34:13)
        at async resolveParamValue (/Users/yyy/node_modules/@nestjs/core/router/router-execution-context.js:148:23)
        at async Promise.all (index 1)
        at async pipesFn (/Users/yyy/node_modules/@nestjs/core/router/router-execution-context.js:151:13)
        at async /Users/yyy/node_modules/@nestjs/core/router/router-execution-context.js:37:30 {
      code: 'ERR_VM_DYNAMIC_IMPORT_CALLBACK_MISSING_FLAG'
    }

It seems to be a breaking change - I'm not yet clear if this is limited to just our jest config or would require a change to our production environment too?

Minimum reproduction code

empty

Steps to reproduce

No response

Expected behavior

Tests pass as previously.

Package

  • [ ] I don't know. Or some 3rd-party package
  • [x] @nestjs/common
  • [ ] @nestjs/core
  • [ ] @nestjs/microservices
  • [ ] @nestjs/platform-express
  • [ ] @nestjs/platform-fastify
  • [ ] @nestjs/platform-socket.io
  • [ ] @nestjs/platform-ws
  • [ ] @nestjs/testing
  • [ ] @nestjs/websockets
  • [ ] Other (see below)

Other package

No response

NestJS version

No response

Packages versions

    "@nestjs/common": "^11.1.0",
    "@nestjs/core": "^11.1.0",
    "@nestjs/platform-express": "^11.1.0",

Node.js version

20.16.0

In which operating systems have you tested?

  • [X] macOS
  • [ ] Windows
  • [ ] Linux

Other

No response

jamescrowley avatar May 02 '25 01:05 jamescrowley