deepkit-framework icon indicating copy to clipboard operation
deepkit-framework copied to clipboard

[Bug] DI Initialization Fails when the Name of a Type from a Library is duplicated with DOM

Open Char2sGu opened this issue 3 years ago • 0 comments

Reproduce

import { App } from '@deepkit/app';
import { Element } from 'cheerio';

class Service {
  parse(ele: Element): void {}
}

new App({
  providers: [Service],
}).run();

Here Element can be Node, Document or anything from cheerio with a duplicated name with DOM.

Error: Could not resolve function of object Service via () => Element: ReferenceError: Element is not defined
    at resolveFunction (/home/.../demo/node_modules/@deepkit/type/src/reflection/processor.ts:1677:15)
    at Processor.loop (/home/.../demo/node_modules/@deepkit/type/src/reflection/processor.ts:561:47)
    at Processor.runProgram (/home/.../demo/node_modules/@deepkit/type/src/reflection/processor.ts:379:25)
    at Processor.run (/home/.../demo/node_modules/@deepkit/type/src/reflection/processor.ts:367:21)
    at Processor.reflect (/home/.../demo/node_modules/@deepkit/type/src/reflection/processor.ts:357:27)
    at resolveRuntimeType (/home/.../demo/node_modules/@deepkit/type/src/reflection/processor.ts:130:34)
    at Function.from (/home/.../demo/node_modules/@deepkit/type/src/reflection/reflection.ts:1211:114)
    at Injector.createFactory (/home/.../demo/node_modules/@deepkit/injector/src/injector.ts:464:49)
    at Injector.buildProvider (/home/.../demo/node_modules/@deepkit/injector/src/injector.ts:363:28)
    at Injector.build (/home/.../demo/node_modules/@deepkit/injector/src/injector.ts:291:37)

Workaround

import { App } from '@deepkit/app';
import * as cheerio from 'cheerio';

interface Element extends cheerio.Element {}

class Service {
  parse(ele: Element): void {}
}

new App({
  providers: [Service],
}).run();

Char2sGu avatar Apr 18 '22 03:04 Char2sGu