Skip to content

Commit

Permalink
Migrate to typescript@4.8 properly
Browse files Browse the repository at this point in the history
In fact, migrating Node.modifiers usage
  • Loading branch information
timocov committed Oct 2, 2022
1 parent f55b2f1 commit 173dc69
Show file tree
Hide file tree
Showing 2 changed files with 29 additions and 4 deletions.
4 changes: 2 additions & 2 deletions src/generate-output.ts
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
import * as ts from 'typescript';

import { packageVersion } from './helpers/package-version';
import { modifiersToMap, recreateRootLevelNodeWithModifiers } from './helpers/typescript';
import { getModifiers, modifiersToMap, recreateRootLevelNodeWithModifiers } from './helpers/typescript';

export interface ModuleImportsSet {
defaultImports: Set<string>;
Expand Down Expand Up @@ -142,7 +142,7 @@ function getStatementText(statement: ts.Statement, includeSortingValue: boolean,
return node;
}

const modifiersMap = modifiersToMap(node.modifiers);
const modifiersMap = modifiersToMap(getModifiers(node));

if (
ts.isEnumDeclaration(node)
Expand Down
29 changes: 27 additions & 2 deletions src/helpers/typescript.ts
Original file line number Diff line number Diff line change
Expand Up @@ -18,13 +18,15 @@ export function isNodeNamedDeclaration(node: ts.Node): node is ts.NamedDeclarati
}

export function hasNodeModifier(node: ts.Node, modifier: ts.SyntaxKind): boolean {
return Boolean(node.modifiers && node.modifiers.some((nodeModifier: NonNullable<ts.Node['modifiers']>[number]) => nodeModifier.kind === modifier));
const modifiers = getModifiers(node);
return Boolean(modifiers && modifiers.some((nodeModifier: NonNullable<ts.Node['modifiers']>[number]) => nodeModifier.kind === modifier));
}

export function getNodeName(node: ts.Node): NodeName | undefined {
const nodeName = (node as unknown as ts.NamedDeclaration).name;
if (nodeName === undefined) {
const defaultModifier = node.modifiers?.find((mod: NonNullable<ts.Node['modifiers']>[number]) => mod.kind === ts.SyntaxKind.DefaultKeyword);
const modifiers = getModifiers(node);
const defaultModifier = modifiers?.find((mod: NonNullable<ts.Node['modifiers']>[number]) => mod.kind === ts.SyntaxKind.DefaultKeyword);
if (defaultModifier !== undefined) {
return defaultModifier as NodeName;
}
Expand Down Expand Up @@ -484,3 +486,26 @@ function recreateRootLevelNodeWithModifiersImpl(node: ts.Node, modifiersMap: Mod
throw new Error(`Unknown top-level node kind (with modifiers): ${ts.SyntaxKind[node.kind]}.
If you're seeing this error, please report a bug on https://github.com/timocov/dts-bundle-generator/issues`);
}

interface TsCompatWith48 {
canHaveModifiers?(node: ts.Node): boolean;
getModifiers?(node: ts.Node): readonly ts.Modifier[] | undefined;
}

function canHaveModifiersCompat(node: ts.Node): boolean {
const compatTs = ts as TsCompatWith48;
return compatTs.canHaveModifiers !== undefined ? compatTs.canHaveModifiers(node) : true;
}

function getModifiersCompat(node: ts.Node): readonly ts.Modifier[] | undefined {
const compatTs = ts as TsCompatWith48;
return compatTs.getModifiers !== undefined ? compatTs.getModifiers(node) : node.modifiers as readonly ts.Modifier[] | undefined;
}

export function getModifiers(node: ts.Node): readonly ts.Modifier[] | undefined {
if (!canHaveModifiersCompat(node)) {
throw new Error(`Node kind=${ts.SyntaxKind[node.kind]} cannot have modifiers`);
}

return getModifiersCompat(node);
}

0 comments on commit 173dc69

Please sign in to comment.