Skip to content

Issue with the class hierarchy where the base class is from the web platform API #2486

Closed

Description

@DmitrySharabin

Search terms

Class Hierarchy

Question

First of all, thank you so much for this wonderful library! It helps us a lot in documenting the API of our library. ❤️

We have a class in the library that extends the EventTarget class from the web platform API. That means that EventTarget is not defined in our library.

export default class Backend extends EventTarget {...}
SCR-20240122-svky

When I try to view the entire class hierarchy, I can't see any expected (backend) classes.

SCR-20240122-svqh

However, if I remove the EventTarget class, I can see the correct class hierarchy.

SCR-20240122-svuu

I can't eliminate EventTarget for obvious reasons to get the desired class hierarchy. Is there a way to ask TypeDoc to ignore the classes defined in other places and generate the correct class hierarchy, e.g., by stopping on the classes it doesn't know? Or is there a way to “teach” TypeDoc to handle the EventTarget class (or any platform-specific class) correctly? Or is there anything I'm doing wrong?

If it might help, our project is written in vanilla JS. And here is our typedoc.json file.

{
	"name": "Madata API",
	"compilerOptions": {
		"allowJs": true,
		"skipLibCheck": true,
	},
	"plugin": [
		"typedoc-plugin-merge-modules",
	],
	"mergeModulesRenameDefaults": true,
	"mergeModulesMergeMode": "module",
	"entryPoints": [
		"src/*.js",
		"backends/index.js",
		"formats/index.js",
	],
	"exclude": [
		"src/node-shims.js",
	],
	"excludeReferences": true,
	"navigation": {
		"includeCategories": true,
		"includeFolders": false,
	},
	"readme": "API.md",
	"out": "api",
	"customCss": "api.css",
}

I would be grateful for any help!

Regards,
Dmitry

Activity

  1. Gerrit0 commented on Jan 26, 2024

    @Gerrit0
    Collaborator

    That's a bug, the "full hierarchy" page is supposed to ignore base classes in your docs which don't exist so those classes still appear

  2. DmitrySharabin commented on Jan 26, 2024

    @DmitrySharabin
    Author

    Thank you, @Gerrit0, for clearing this out. Eagerly waiting for the fix. 🙏

  3. added a commit that references this issue on Feb 10, 2024
    2318949
  4. DmitrySharabin commented on Feb 10, 2024

    @DmitrySharabin
    Author

    @Gerrit0 I'm sorry, but it looks like the issue isn't fixed yet. Moreover, I see any instead of the previously correct base class (EventTarget). And the correct hierarchy isn't built.

    Before the fix (correct)

    SCR-20240122-svky

    After the fix (wrong)

    SCR-20240210-qkbr

    Would you mind re-opening this issue, please?

  5. Gerrit0 commented on Feb 10, 2024

    @Gerrit0
    Collaborator

    Going to need a reproduction, I can't infer where the problem is from that.

  6. DmitrySharabin commented on Feb 10, 2024

    @DmitrySharabin
    Author

    Going to need a reproduction, I can't infer where the problem is from that.

    I would love to do it. Do you have any instructions on how to build a reproduction so that it's helpful? Will it be enough if I provide you a link on StackBlitz or something similar reproducing the bug?

  7. Gerrit0 commented on Feb 10, 2024

    @Gerrit0
    Collaborator

    StackBlitz works, a repo I can clone and just npm i then npm run docs is great too

  8. DmitrySharabin commented on Feb 10, 2024

    @DmitrySharabin
    Author

    I rechecked our docs and found out why the hierarchy wasn't correct. The problem was on our side — we had the outdated package-lock.json file. And our docs were generated with the old version of TypeDoc. Sorry about that!

    Unfortunately, there is an issue with the wrong name of the base (not included in the documentation) class — now, it's called any.

    SCR-20240210-qkbr

    It would be nice to have this class's real name taken from the definition.

    I hope this repo with the minimal reproduction helps: https://github.com/DmitrySharabin/typedoc-hierarchy-reproduction.

    a repo I can clone and just npm i then npm run docs is great too

    Did it this 👆 way. 😄

  9. Gerrit0 commented on Feb 11, 2024

    @Gerrit0
    Collaborator

    TypeDoc uses the type in order to figure out what EventTarget is. In a TS file extends EventTarget would be an error, because EventTarget isn't defined by either npm install @types/node or by including the DOM in your lib:

    diff --git a/tsconfig.json b/tsconfig.json
    index 2ae115a..0577b11 100644
    --- a/tsconfig.json
    +++ b/tsconfig.json
    @@ -2,7 +2,7 @@
            "compilerOptions": {
                    "allowJs": true,
                    "skipLibCheck": true,
    -               "lib": ["ESNext"],
    +               "lib": ["ESNext", "DOM"],
                    "outDir": "./dist"
            },
            "include": ["src"],

    Undefined types appearing as "any" in the docs is a design limitation. I've considered ways to avoid it, but making those changes require hacks that I really don't want to introduce.

  10. DmitrySharabin commented on Feb 11, 2024

    @DmitrySharabin
    Author

    TypeDoc uses the type in order to figure out what EventTarget is. In a TS file extends EventTarget would be an error, because EventTarget isn't defined by either npm install @types/node or by including the DOM in your lib:

    Fair.

    "lib": ["ESNext", "DOM"]

    Thank you so much, @Gerrit0! The change you proposed fixes the issue I face. 🥳

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    questionQuestion about functionality

    Type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions