Injecting object with null prototype into provider throw errors.
Injecting object don't throwing errors, when use with @nestjs/event-emmiter.
I understand that eventEmitter scans all modules and providers imported into AppModule
As a config file we use an ini file, and for parsing we use a simple module "ini-parser", but ini.parse return object with null prototype.
The error is very subtle. An exception was thrown when called
The fact that the problem is in the "Object null prototype", I realized only when I started to get into node_modules and use console.log there.
{
"name": "frontend-server",
"version": "0.0.1",
"description": "",
"author": "",
"private": true,
"license": "UNLICENSED",
"scripts": {
"prebuild": "rimraf dist",
"build": "nest build",
"format": "prettier --write \"src/**/*.ts\" \"test/**/*.ts\"",
"start": "nest start",
"migrate": "ts-node src/helpers/migrations/migrations.ts",
"start:dev": "nest start --watch",
"start:debug": "nest start --debug --watch",
"scripts:create-test-license": "ts-node scripts/create-test-license.ts"
},
"dependencies": {
"@nestjs/bull": "^0.5.4",
"@nestjs/common": "^8.4.3",
"@nestjs/core": "^8.4.3",
"@nestjs/event-emitter": "^1.1.0",
"@nestjs/platform-fastify": "^8.4.3",
"@nestjs/schedule": "^1.0.2",
"@nestjs/sequelize": "^8.0.0",
"@types/pg": "^8.6.5",
"bcryptjs": "^2.4.3",
"bull": "^4.8.1",
"date-fns": "^2.28.0",
"fastify-secure-session": "^3.0.0",
"ini": "^2.0.0",
},
"devDependencies": {
"@nestjs/cli": "^8.2.4",
"@nestjs/schematics": "^8.0.8",
"@nestjs/testing": "^8.4.3",
"@types/bcryptjs": "^2.4.2",
"@types/bull": "^3.15.8",
"@types/cron": "^1.7.3",
"@types/express": "^4.17.13",
"@types/ini": "^1.3.31",
"@types/jest": "^27.4.1",
"@types/lodash": "^4.14.180",
"@types/node": "^16.11.24",
"@types/nodemailer": "^6.4.4",
"@types/supertest": "^2.0.12",
"@typescript-eslint/eslint-plugin": "^5.16.0",
"@typescript-eslint/parser": "^5.16.0",
"eslint": "^8.12.0",
"eslint-config-prettier": "^8.5.0",
"eslint-plugin-prettier": "^4.0.0",
"jest": "^27.5.1",
"memfs": "^3.4.1",
"prettier": "^2.6.1",
"source-map-support": "^0.5.21",
"supertest": "^6.2.2",
"ts-jest": "^27.1.4",
"ts-loader": "^9.2.8",
"ts-node": "^10.7.0",
"tsconfig-paths": "^3.14.1",
"type-fest": "^2.12.1",
"typescript": "^4.6.3"
},
"jest": {
"moduleFileExtensions": [
"js",
"json",
"ts"
],
"rootDir": "src",
"testRegex": ".*\\.spec\\.ts$",
"transform": {
"^.+\\.(t|j)s$": "ts-jest"
},
"collectCoverageFrom": [
"**/*.(t|j)s"
],
"coverageDirectory": "../coverage",
"testEnvironment": "node",
"moduleNameMapper": {
"^src/(.*)": "<rootDir>/$1"
}
}
}
/home/almaz/omega-project-backend/frontend-server/node_modules/@nestjs/core/metadata-scanner.js:23
yield* (0, iterare_1.iterate)(Object.getOwnPropertyNames(prototype))
TypeError: Cannot convert undefined or null to object
at Function.getOwnPropertyNames (<anonymous>)
at MetadataScanner.getAllFilteredMethodNames (/home/almaz/omega-project-backend/frontend-server/node_modules/@nestjs/core/metadata-scanner.js:23:50)
at getAllFilteredMethodNames.next (<anonymous>)
at new Set (<anonymous>)
at MetadataScanner.scanFromPrototype (/home/almaz/omega-project-backend/frontend-server/node_modules/@nestjs/core/metadata-scanner.js:8:29)
at /home/almaz/omega-project-backend/frontend-server/node_modules/@nestjs/event-emitter/dist/event-subscribers.loader.js:39:34
at Array.forEach (<anonymous>)
at EventSubscribersLoader.loadEventListeners (/home/almaz/omega-project-backend/frontend-server/node_modules/@nestjs/event-emitter/dist/event-subscribers.loader.js:36:14)
at EventSubscribersLoader.onApplicationBootstrap (/home/almaz/omega-project-backend/frontend-server/node_modules/@nestjs/event-emitter/dist/event-subscribers.loader.js:25:14)
at MapIterator.iteratee (/home/almaz/omega-project-backend/frontend-server/node_modules/@nestjs/core/hooks/on-app-bootstrap.hook.js:22:43)