in src/assembler.ts [354:395]
private _dereference(
ref: string | spec.NamedTypeReference,
referencingNode: ts.Node | undefined,
): spec.Type | undefined {
if (typeof ref !== 'string') {
ref = ref.fqn;
}
const [assm] = ref.split('.');
let type;
if (assm === this.projectInfo.name) {
type = this._types.get(ref);
} else {
const assembly = this.projectInfo.dependencyClosure.find((dep) => dep.name === assm);
type = assembly?.types?.[ref];
// since we are exposing a type of this assembly in this module's public API,
// we expect it to appear as a peer dependency instead of a normal dependency.
if (assembly) {
if (!(assembly.name in this.projectInfo.peerDependencies)) {
this._diagnostics.push(
JsiiDiagnostic.JSII_0005_MISSING_PEER_DEPENDENCY.create(
referencingNode!, // Cheating here for now, until the referencingNode can be made required
assembly.name,
ref,
),
);
}
}
}
if (!type) {
this._diagnostics.push(
JsiiDiagnostic.JSII_9002_UNRESOLVEABLE_TYPE.create(
referencingNode!, // Cheating here for now, until the referencingNode can be made required
ref,
),
);
}
return type;
}