Bugfixes:
isValidJsxIdentifier, isValidPropertyAccess, isValidPropertyName: fix unicode character width handlingFeatures:
isValidJsxIdentifier added an optional parameter to specify the target ECMAScript versionBugfixes:
isValidJsxIdentifier now handles astral plane charactersFeatures:
getIteratorYieldResultFromIteratorResult to extract the yielded type from IteratorResult<TYield, TReturn, TNext>Features:
isValidIdentifier, isValidPropertyName, isValidPropertyAccess, isValidNumericLiteral added an optional parameter to specify the target ECMAScript versionBugfixes:
isValidPropertyName, isValidPropertyAccess now handle astral plane charactersBugfixes:
findImports: fixed crash on nested namespacesFeatures:
getInstanceTypeOfClassLikeDeclaration and getConstructorTypeOfClassLikeDeclarationAccessKind.Delete to getAccessKind: getAccessKind(node) & AccessKind.Modification can now be used to restore the old behavior of isReassignmentTarget(node)Features:
getAccessKind determines whether an expression is read from, written to or bothgetPropertyOfType for unambiguous property names to partially work around https://github.com/microsoft/TypeScript/issues/31565Bugfixes:
isReassignmentTarget no longer returns true for DeleteExpression as it doesn't assign a value to the operandFeatures:
getLateBoundPropertyNamesOfPropertyName returns all statically analyzable names of a property, method, ...getSingleLateBoundPropertyNameOfPropertyName returns the literal name of a property, method, ... if statically analyzableBugfixes:
Features:
isNumericOrStringLikeLiteral, isTupleTypeReferenceintersectionTypeParts as counterpart to unionTypePartssomeTypePart to execute a callback for each union or intersection constituent until the callback returns truegetPropertyOfType looks up a property by its escaped nameisPropertyReadonlyInType determines whether a property in a given type cannot be written tosymbolHasReadonlyDeclaration determines if a Symbol has any readonly or constant declarationisNumericPropertyName determines whether a property name would match an index signatureisBindableObjectDefinePropertyCall returns true for statically analyzable forms of Object.defineProperty(o, 'p', {value, writable})isReadonlyAssignmentDeclaration determines whether an Object.defineProperty call is known to result in a readonly propertygetLateBoundPropertyNames returns all known property names of an expressiongetPropertyNameFromType extracts the property name of literal typesisWellKnownSymbolLiterally to recognize expressions in the form of Symbol.<name>getPropertyNameOfWellKnownSymbol returns the escaped name for a well known symbol literalunwrapParentheses returns the first child expression that is not a ParenthesizedExpressionFeatures:
isCompilerOptionEnabled: incremental is implicitly enabled by compositeBugfixes:
collectVariableUsage/getUsageDomain: no longer treat as const as type usageBugfixes:
canHaveJsdocparseJsdocOfNodeFeatures:
isNullLiteral and isBooleanLiteralFeatures:
isConstAssertion and isInConstContextFeatures:
isBlockScopedDeclarationStatementisInSingleStatementContextFeatures:
getCheckJsDirective utility to parse // @ts-check and // @ts-nocheck pragmasBugfixes:
const enum. They are now declared as regular enums instead.Bugfixes:
isThenableType allows Node instead of Expression as parameterisBlockScopeBoundary and isScopeBoundary consider WithStatement as scope boundaryFeatures:
isBigIntLiteralisLiteralType recognises BigIntgetPropertyName adds special handling for BigIntFeatures:
commentText to get the actual text content of a comment excluding the characters needed to start and end the commentBugfixes:
findImports: fixed handling of ImportEqualsDeclarationFeatures:
isCompilerOptionEnabled: recognizes strictBindCallApplygetTokenAtPosition: optionally includes JSDoc during lookupBugfixes:
isCompilerOptionEnabled: correctly implements logic for allowSyntheticDefaultImportsfindImportLikeNodes: correctly finds imports in namespacesfindImportLikeNodes / findImports: finds import types in JSDoc of JS filesFeatures:
findImportLikeNodes that works similar to findImports but returns the import statement or expression instead of the module specifier and doesn't filter non-string module specifiersFeatures:
isKeywordKind and isValidJsxIdentifier:warning: Breaking Changes:
typescript@<2.8.0getIdentifierText, isJsxFramgment, ImportOptionsisModifierFlagSet, findImports and getControlFlowEnd'tsutils/util/util', import directly from 'tsutils/util/control-flow' or 'tsutils/util'isFunctionScopeBoundary and isBlockScopeBoundary now return a enum member of ScopeBoundary instead of a booleanisFunctionScopeBoundary no longer returns a truthy value for InterfaceDeclaration, TypeAliasDeclarationFeatures:
isTypeScopeBoundary returning ScopeBoundary.Type or ScopeBoundary.ConditionalTypeScopeBoundarySelector whose members can be used to determine if a declaration belongs to a given ScopeBoundary by using bitwise ANDBugfixes:
collectVariableUsage now correctly handles infer T nested inside function signatures or mapped typesisCompilerOptionEnabled correctly handles skipDefaultLibCHeck and suppressImplicitAnyIndexErrorsFeatures:
isCompilerOptionEnabledTypeguards are now split into multiple submodules for each version of TypeScript (starting with 2.8.0).
That means you can now import directly from "tsutils/typeguard/2.8" to get compatible declaraton files for TypeScript@2.8.
For more information please read the relevant section in README.md.
Features:
isTupleType, isOptionalTypeNode, isRestTypeNode, isSyntheticExpression (currently available from "tsutils/typeguard/3.0")isStrictCompilerOptionEnabledAvoid crash caused by removed function in typescript@3.0.0.
Added support for TypeScript@3.0.0 nightly builds.
Features:
getIIFE utilityBugfixes:
forEachComment and forEachTokenWithTrivia no longer duplicate comments around missing nodesBugfixes:
hasSideEffects with tagged template literal without substitution: tag`template`Features:
isLiteralTypeNodetype T = import('foo')) to findImports via ImportKind.ImportTypeBugfixes:
collectVariableUsage: fixed name lookup in function signatures to match runtime behavior. Note that this is not completely fixed in TypeScript, yet. See: Microsoft/TypeScript#22825 and Microsoft/TypeScript#22769Features:
isStatementInAmbientContext and isAmbientModuleBlockFeatures:
isConditionalTypeNode, isInferTypeNode, isConditionalType, isInstantiableType, isSubstitutionTypeFeatures:
isForInOrOfStatementBugfixes:
<MyComponent<string>/*comment*/></MyComponent><div><br/>/*no comment*/</div>Bugfixes:
collectVariableUsage: handle ConditionalTypes and infer T, which will be introduced in TypeScript@2.8.0 and are already available in nightly buildsisLiteralType no longer returns true for ts.TypeFlags.BooleanLiteral as this is not a ts.LiteralTypeBugfixes:
endsControlFlow:
Features:
isFalsyType utilityBugfixes:
typescript@2.8.0-devBugfixes:
isReassignmentTarget: handle type assertions and non-null assertionBugfixes:
forEachDeclaredVariable uses a more precise type for the callback parameter to make it useable again with typescript@2.7.1Features:
isUniqueESSymbolType typeguardFeatures:
isThenableType utilityunionTypeParts utilityBugfixes:
forEachComment, getCommentAtPosition and isPositionInComment: skip shebang (#! something) to not miss following comments at the start of the fileFeatures:
WrappedAst interface that models the type of a wrapped SourceFile more accurategetWrappedNodeAtPosition utiltiy that takes a NodeWrap and returns the most deeply nested NodeWrap that contains the given positionFeatures:
getControlFlowEnd accepts BlockLike as argumentBugfixes:
getControlFlowEnd and endsControlFlow: correctly handle nested LabeledStatementsendsControlFlow removed erroneous special case when an IterationStatement is passed as argument whose parent is a LabeledStatement.
Deprecations:
getControlFlowEnd that contains the label parameter. This parameter is no longer used and should no longer be passed to the function.Bugfixes:
getControlFlowEnd and endsControlFlow (#22)
try are filtered out if there is a catch clausecatch only end control flow if try AND catch definitely end control flowFeatures:
kind property to NodeWrapgetControlFlowEnd to public APIFeatures:
isDecorator and isCallLikeExpression typeguardsFeatures:
convertAst utility to produce a flattened and wrapped version of the ASTFeatures:
isDeleteExpressiongetLineBreakStyleBugfixes:
isJsxFragmentFeatures:
JsxFragment introduced in typescript@2.6.2Bugfixes:
endsControlFlow
break and continue with labelsisValidIdentifier and isValidNumericLiteral handle irregular whitespacefindImports searches in ambient modules inside regular .ts files (not only .d.ts)canHaveJsDoc is now a typeguardBugfixes:
forEachTokenWithTrivia
API-Changes:
ImportOptions if favor of the new ImportKind enumBugfixes:
parseJsDocOfNode: set correct pos, end and parent properties. Also affects getJsDoc of EndOfFileTokenBugfixes:
collectVariableUsage: correctly consider catch binding as block scoped declaration inside catch blockBugfixes:
getJsDoc now correctly returns JsDoc for EndOfFileTokenFeatures:
parseJsDocOfNodeFeatures:
findImports to find all kinds of imports in a source fileFeatures:
isMappedTypeNodecanHaveJsDoc and getJsDocBugfixes:
collectVariableUsage: handle global augmentation like other module augmentationsBugfixes:
typescript@2.5.1 with optional catch bindingcollectVariableUsage fixed a bug where method decorator had method's parameters in scopegetIdentifierText to unescape identifiers across typescript versionsBugfixes:
isReassignmentTarget don't return true for right side of assignmentFeatures:
isReassignmentTarget utilityBugfixes:
getDeclarationDomain now returns undefined for Parameter in IndexSignaturecollectVariableUsage ignores Parameter in IndexSignatureBugfixes:
collectVariableUsage:
export {};isExpressionValueUsed: handle destructuring in for...ofFeatures:
getModifier utilityDeclarationDomain.Import to distinguish imports from other declarationsBugfixes:
collectVariableUsage ignore jump labels as in break label;Bugfixes:
isFunctionWithBody handles constructor overload correctly.Features:
isExpressionValueUsed to check whether the result of an expression is actually used.getDeclarationDomain to determine if a given declaration introduces a new symbol in the value or type domain.collectVariableUses is now usable
: typeof foo is handled for parameters and function return typeexport {Foo as Bar} inside ambient namespaces and modulesBugfixes:
getLineRanges: contentLength now contains the correct line length when there are multiple consecutive line break charactersgetTokenAtPosition: don't match tokens that end at the specified position (because that's already outside of their range)isModfierFlagSet, use the new isModifierFlagSet insteadFeatures:
isJsDocgetUsageDomain and collectVariableUsage)Bugfixes:
forEachComment no longer omits some comments when callback returns a truthy valueisPositionInComment fixed false positive inside JSXTextFeatures:
getCommentAtPositionBugfixes:
SideEffectOptions.JsxElement to be a power of 2Features:
getTokenAtPosition and isPositionInCommentFeatures:
isExpressionhasSideEffects, getDeclarationOfBindingElementBreaking Changes:
typescript@<2.1.0isNumericliteral, use isNumericLiteral instead (notice the uppercase L)isEnumLiteralType which will cause compile errors with typescript@2.4.0require('tsutils/src/typeguard') will be brokenFeatures:
require('tsutils/typeguard'))Bugfixes:
isObjectFlagSet now uses the correct objectFlags propertyBugfixes:
getNextToken no longer omits EndOfFileToken when there is no trivia before EOF. That means the only inputs where getNextToken returns undefined are SourceFile and EndOfFileTokenFeatures:
isNodeFlagSet, isTypeFlagSet, isSymbolFlagSet,isObjectFlagSet, isModifierFlagSetFeatures:
isJsxAttributes, isIntersectionTypeNode, isTypeOperatorNode, isTypePredicateNode, isTypeQueryNode, isUnionTypeNodeBugfixes:
isFunctionScopeBoundary now handles Interfaces, TypeAliases, FunctionSignatures, etcFeatures:
isThisParameter, isSameLine and isFunctionWithBodyFeatures:
isValidPropertyAccess, isValidNumericLiteral and isValidPropertyNameFeatures:
isValidIdentifierFeatures:
contentLength property to the result of getLineRangesBugfixes:
canHaveLeadingTrivia:
hasOwnThisReference: now includes accessors on object literalsFeatures:
Bugfixes:
hasOwnThisReference:
Bugfixes:
isNumericLiteralFeatures:
Bugfixes:
Features:
Features: