Skip to content

Commit

Permalink
fix: extends interface inside namespace (#106)
Browse files Browse the repository at this point in the history
  • Loading branch information
fabien0102 committed Jan 10, 2023
1 parent c226c4f commit 958d5a5
Show file tree
Hide file tree
Showing 2 changed files with 37 additions and 1 deletion.
14 changes: 14 additions & 0 deletions src/utils/resolveModules.test.ts
Expand Up @@ -63,13 +63,21 @@ describe("resolveModules", () => {
hasPower: boolean;
weakness: Weakness;
}
export interface Clark {
hasGlasses: boolean
}
export type SupermanBis = {
fullName: Name;
name: { first: Name; last: Name };
hasPower: boolean;
weakness: Weakness;
}
export interface ExtendedSuperman extends Superman, Clark {
hasEvenMorePower: boolean;
}
}`;

expect(print(resolveModules(sourceText))).toMatchInlineSnapshot(`
Expand All @@ -85,6 +93,9 @@ describe("resolveModules", () => {
hasPower: boolean;
weakness: Weakness;
}
export interface MetropolisClark {
hasGlasses: boolean;
}
export type MetropolisSupermanBis = {
fullName: MetropolisName;
name: {
Expand All @@ -94,6 +105,9 @@ describe("resolveModules", () => {
hasPower: boolean;
weakness: Weakness;
};
export interface MetropolisExtendedSuperman extends MetropolisSuperman, MetropolisClark {
hasEvenMorePower: boolean;
}
"
`);
});
Expand Down
24 changes: 23 additions & 1 deletion src/utils/resolveModules.ts
Expand Up @@ -138,11 +138,33 @@ const moduleToPrefix = (
node.modifiers,
f.createIdentifier(pascal(moduleName) + pascal(node.name.text)),
node.typeParameters,
node.heritageClauses,
ts.visitNodes(
node.heritageClauses,
prefixInterfacesAndTypes(moduleName)
),
ts.visitNodes(node.members, prefixInterfacesAndTypes(moduleName))
);
}

if (ts.isHeritageClause(node)) {
return f.updateHeritageClause(
node,
ts.visitNodes(node.types, prefixInterfacesAndTypes(moduleName))
);
}

if (
ts.isExpressionWithTypeArguments(node) &&
ts.isIdentifier(node.expression) &&
(declarationNames.get(moduleName) || []).includes(node.expression.text)
) {
return f.updateExpressionWithTypeArguments(
node,
f.createIdentifier(pascal(moduleName) + pascal(node.expression.text)),
node.typeArguments
);
}

if (ts.isEnumDeclaration(node)) {
return f.updateEnumDeclaration(
node,
Expand Down

0 comments on commit 958d5a5

Please sign in to comment.