# Changelog Notable changes to `ast-types`, newest first. Entries under **Unreleased** describe what is on `master` but not yet published to npm. ## v0.16.3 (2026-08-30) ### Syntax support Register fields that current parsers (Babel, and Oxc as normalized by recast's proposed Oxc integration) emit but ast-types did not define, so visitors traverse the subtrees and deep checks accept the nodes: - `TaggedTemplateExpression.typeParameters` and `TSTypeQuery.typeParameters`, for TypeScript instantiation expressions (`f` as a value, `typeof f`). - `JSXOpeningElement.typeParameters`, for explicit JSX type arguments (` />`). - `ArrayPattern.typeAnnotation` and `AssignmentPattern.typeAnnotation` (shared Flow/TS definitions). - `ArrayPattern.optional`, `ObjectPattern.optional` and `AssignmentPattern.optional`. - `ClassDeclaration.decorators` and `ClassExpression.decorators`. - `TSImportType.options`, for import attributes in `import(...)` types. - `VariableDeclaration.kind` now allows `"using"` and `"await using"` (explicit resource management). Each addition is covered by tests that parse the actual syntax with `@babel/parser` and deep-assert the resulting `Program`, plus builder tests for node shapes `@babel/parser` cannot produce directly. ## v0.16.2 (2026-08-30) ### Syntax support - `CallExpression`, `NewExpression` and `OptionalCallExpression` now carry `typeParameters` (TypeScript type arguments such as `f()`), and the visitor traverses them. Contributed by Lenz Weber-Tronic in #954; fixes #343 and facebook/jscodeshift#389. - Support `export type * from "mod"` and `export type * as ns from "mod"` (TypeScript 5.0). `ExportAllDeclaration` and `ExportNamedDeclaration` gain an `exportKind` field (`"value" | "type"`, default `"value"`), mirroring `ImportDeclaration.importKind`. - `ExportNamedDeclaration.specifiers` now accepts `ExportNamespaceSpecifier`, `ExportDefaultSpecifier` and `ExportBatchSpecifier`, matching Babel's representation of `export * as ns from "mod"`. - `ExportNamespaceSpecifier.exported` may be a string `Literal`, per ES2022 arbitrary module namespace names (`export * as "ns" from "mod"`). - `ExportNamedDeclaration.declaration` now defaults to `null`, so Babel ASTs that omit the property for specifier-only exports validate. ### Fixes - `lib/main.d.ts` no longer imports `Type`, `NodePath` and `builders` under the same names as the values it declares, which TypeScript 5.4 and later reject under `isolatedModules` (TS2865). The fix uses only plain aliased imports, so no currently supported TypeScript version loses support. As a side effect, `Type` and `NodePath` imported from the package are now usable as generic types (`Type`, `NodePath`). Fixes #948; builds on #950 by @snowystinger. - The test suite now type-checks a small consumer of the published declarations with TypeScript 4.4 (the oldest supported version), the pinned TypeScript, and TypeScript 5.x, all under `isolatedModules`, so declaration-file regressions fail in CI. ### Type changes to be aware of Runtime behavior and builder signatures are unchanged; the changes above only widen what is accepted. Two generated TypeScript types are wider than before, which can affect downstream code that narrowed on the old type: - Code that reads `specifier.local` on every element of `ExportNamedDeclaration.specifiers` needs a `namedTypes.ExportSpecifier.check(specifier)` guard. - Code that reads `exported.name` on an `ExportNamespaceSpecifier` needs to check for `Identifier` first. ### Testing and infrastructure - Bump `@babel/parser` (dev dependency) from 7.20.5 to 7.29.8, which also updates the Babel fixture corpus the tests validate against. - Honor `sourceType` from Babel fixture `options.json` files, and fix a null dereference when comparing expected parse errors. - Update test-only dependencies: `glob` 10, `rimraf` 5, `mocha` 11, `ts-node`, `@types/mocha`, `@types/esprima`. Enable `skipLibCheck` so `tsc` no longer type-checks `node_modules` declarations. - Modernize the GitHub Actions workflow: Node.js 18, 20, 22 and 24, `npm ci`, and a check that `src/gen/` is up to date with `src/def/`. - Publish from GitHub Actions using npm trusted publishing, triggered by publishing a GitHub release whose tag is the package version prefixed with `v`. Releases carry npm provenance attestations, and no npm token is stored in the repository. A release marked as a pre-release publishes under the `next` dist-tag, and an ordinary release under `latest`. ## v0.16.1 and earlier See the `v*` git tags and the commit history between them.