typedoc: Cross-package references in monorepository not working

Search terms

monorepository entrypointStrategy packages reference

Expected Behavior

Cross-package references should “work” when generating documentation for several packages in a monorepository (using yarn workspaces), with an entrypointStrategy set to packages.

Actual Behavior

Cross-package references yield a warning:

A, defined at packages/a/lib/index.d.ts:3, is referenced by @typedoc-packages-missing-export/b.B.__type.a but not included in the documentation.

And the resulting documentation does not have hyperlinks for such references.

Steps to reproduce the bug

Here is an example repository to reproduce the bug: https://github.com/nlepage/typedoc-packages-missing-export

Environment

  • Typedoc version: 0.22.10
  • TypeScript version: 4.5.4
  • Node.js version: 14.17.0
  • OS: Linux

About this issue

  • Original URL
  • State: closed
  • Created 2 years ago
  • Comments: 20 (8 by maintainers)

Commits related to this issue

Most upvoted comments

Hey @Gerrit0

I made a plugin to solve the problem: nlepage/typedoc-plugin-resolve-crossmodule-references. Not sure about all of it, but it works fine for the basic cases. Here is an example of generated documentation where types from a module a reference a type B from a module b. It is published on npm.

I’m not sure if it can help with project references as I’m not familiar with these.

Let me know if it is something you would like to integrate in TypeDoc itself. It needs only one new dependency (plus a transitive one): convert-source-map.

v0.24.0 made a ton of changes, including a fix for this. Types are now serialized with their location rather than relying on object identity, and therefore can be resolved even across packages

typedoc-plugin-resolve-crossmodule-references is now archived and deprecated on npm, thanks for all your hard work @Gerrit0 !

@Tschakki I’ll have a look, could you open an issue on the plugin’s repository thanks https://github.com/nlepage/typedoc-plugin-resolve-crossmodule-references

@nlepage Are there any prerequisite I need to know or settings made to get your plugin working? I just installed and tried but unfortunately it did not work for me 😦

@phihochzwei I published a new release of the plugin, let me know if it works for you.

I think that’s definitely a promising path forward! I’m probably not going to have time this weekend to look at it in as much detail as it deserves, but it’s something I’m absolutely interested in pursuing. I’d like to avoid the extra resolution step if possible, (by storing reference targets by file/location?)

This happens for the same reason it happens with project references. TypeDoc creates a new program for each monorepo, and symbols between programs are completely separate… but references are resolved by symbol equality.

I think this could be resolved by changing symbols so that they are compared by source location (with mapping… so declarationMap would have to be turned on), but haven’t gotten around to trying to make that work yet.