Fatal error when resolving {@link} expressions.
jsamr opened this issue · comments
Jules Sam. Randolph commented
Example:
/**
* A
*
* @public
*/
export type A = string;
/**
* {@link A}
*
* @public
*/
export type B = number;
Process will exit with code 1, and throw this exception:
TypeError: resolver is not a function
at getDocSectionContent (/home/jsamr/tmp/api-docs-gen/lib/processor/utils.js:445:46)
at Object.buildTypeAliasContent (/home/jsamr/tmp/api-docs-gen/lib/processor/utils.js:325:9)
at buildContents (/home/jsamr/tmp/api-docs-gen/lib/processor/toc.js:78:29)
at build (/home/jsamr/tmp/api-docs-gen/lib/processor/toc.js:29:9)
at Object.process [as processor] (/home/jsamr/tmp/api-docs-gen/lib/processor/toc.js:91:12)
at Object.generate (/home/jsamr/tmp/api-docs-gen/lib/generator.js:30:29)
at /home/jsamr/tmp/api-docs-gen/lib/cli.js:89:27
at Object.<anonymous> (/home/jsamr/tmp/api-docs-gen/lib/cli.js:92:7)
at Module._compile (internal/modules/cjs/loader.js:1251:30)
at Object.Module._extensions..js (internal/modules/cjs/loader.js:1272:10)
To reproduce, apply this patch on master (16585f9):
diff --git a/examples/packages/utilities/src/index.ts b/examples/packages/utilities/src/index.ts
index 64a02e2..6507747 100644
--- a/examples/packages/utilities/src/index.ts
+++ b/examples/packages/utilities/src/index.ts
@@ -70,3 +70,17 @@ export function isSymbol(val: unknown): val is symbol {
export function isPromise<T = any>(val: unknown): val is Promise<T> { // eslint-disable-line
return isObject(val) && isFunction(val.then) && isFunction(val.catch)
}
+
+/**
+ * A
+ *
+ * @public
+ */
+export type A = string;
+
+/**
+ * {@link A}
+ *
+ * @public
+ */
+export type B = number;
I have investigated a little. Resolver is sometimes undefined, so here is a hotfix:
diff --git a/src/processor/utils.ts b/src/processor/utils.ts
index bbc8667..e12d296 100644
--- a/src/processor/utils.ts
+++ b/src/processor/utils.ts
@@ -764,7 +764,7 @@ export function getDocSectionContent(
codeDestination,
contextItem
)
- if (result.resolvedApiItem) {
+ if (result.resolvedApiItem && resolver) {
const filepath = resolver(
style,
result.resolvedApiItem,