public static replaceBaseClass()

in src/transforms/deprecated-remover.ts [416:450]


  public static replaceBaseClass(
    typeChecker: ts.TypeChecker,
    node: ts.ClassDeclaration,
    baseClass: ts.ClassDeclaration | string,
  ) {
    return new Transformation(typeChecker, node, (declaration) => {
      if (!ts.isClassDeclaration(declaration)) {
        throw new JsiiError(`Expected a ClassDeclaration, found a ${ts.SyntaxKind[declaration.kind]}`);
      }
      const { typeExpression: newBaseClass, syntheticImport } = Transformation.typeReference(
        baseClass,
        declaration,
        typeChecker,
      );
      const existingClause = declaration.heritageClauses?.find(
        (clause) => clause.token === ts.SyntaxKind.ExtendsKeyword,
      );
      return {
        node: ts.factory.updateClassDeclaration(
          declaration,
          declaration.modifiers,
          declaration.name,
          declaration.typeParameters,
          [
            ...(declaration.heritageClauses ?? []).filter((clause) => clause !== existingClause),
            existingClause
              ? ts.factory.updateHeritageClause(existingClause, [newBaseClass])
              : ts.factory.createHeritageClause(ts.SyntaxKind.ExtendsKeyword, [newBaseClass]),
          ],
          declaration.members,
        ),
        syntheticImports: syntheticImport && [syntheticImport],
      };
    });
  }