From 3d69eaa31627e1f0cb14578eb71706b87a479a86 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Nicol=C3=B2=20Ribaudo?= Date: Thu, 27 Jan 2022 23:24:15 +0100 Subject: [PATCH] Add `TSSatisfiesExpression` to types and generator --- .../src/generators/typescript.ts | 14 +- .../babel-generator/src/node/parentheses.ts | 11 +- .../fixtures/typescript/satisfies/input.js | 4 + .../fixtures/typescript/satisfies/output.js | 6 + .../src/path/generated/asserts.ts | 3 + .../src/path/generated/validators.ts | 4 + .../src/asserts/generated/index.ts | 6 + .../src/ast-types/generated/index.ts | 163 ++++++++++++++++++ .../src/builders/generated/index.ts | 12 ++ .../src/builders/generated/uppercase.js | 1 + packages/babel-types/src/definitions/core.ts | 6 + .../babel-types/src/definitions/typescript.ts | 7 +- .../src/validators/generated/index.ts | 21 +++ 13 files changed, 249 insertions(+), 9 deletions(-) create mode 100644 packages/babel-generator/test/fixtures/typescript/satisfies/input.js create mode 100644 packages/babel-generator/test/fixtures/typescript/satisfies/output.js diff --git a/packages/babel-generator/src/generators/typescript.ts b/packages/babel-generator/src/generators/typescript.ts index 42c2654c9cb3..adb76596d53c 100644 --- a/packages/babel-generator/src/generators/typescript.ts +++ b/packages/babel-generator/src/generators/typescript.ts @@ -521,15 +521,23 @@ export function TSTypeAliasDeclaration( this.token(";"); } -export function TSAsExpression(this: Printer, node: t.TSAsExpression) { - const { expression, typeAnnotation } = node; +function TSTypeExpression( + this: Printer, + node: t.TSAsExpression | t.TSSatisfiesExpression, +) { + const { type, expression, typeAnnotation } = node; this.print(expression, node); this.space(); - this.word("as"); + this.word(type === "TSAsExpression" ? "as" : "satisfies"); this.space(); this.print(typeAnnotation, node); } +export { + TSTypeExpression as TSAsExpression, + TSTypeExpression as TSSatisfiesExpression, +}; + export function TSTypeAssertion(this: Printer, node: t.TSTypeAssertion) { const { typeAnnotation, expression } = node; this.token("<"); diff --git a/packages/babel-generator/src/node/parentheses.ts b/packages/babel-generator/src/node/parentheses.ts index 4cf704caf481..2e269d8355a6 100644 --- a/packages/babel-generator/src/node/parentheses.ts +++ b/packages/babel-generator/src/node/parentheses.ts @@ -49,6 +49,7 @@ import { isVariableDeclarator, isWhileStatement, isYieldExpression, + isTSSatisfiesExpression, } from "@babel/types"; import type * as t from "@babel/types"; const PRECEDENCE = { @@ -225,9 +226,10 @@ export function TSAsExpression() { return true; } -export function TSTypeAssertion() { - return true; -} +export { + TSAsExpression as TSSatisfiesExpression, + TSAsExpression as TSTypeAssertion, +}; export function TSUnionType(node: t.TSUnionType, parent: t.Node): boolean { return ( @@ -368,7 +370,8 @@ export function ConditionalExpression( isConditionalExpression(parent, { test: node }) || isAwaitExpression(parent) || isTSTypeAssertion(parent) || - isTSAsExpression(parent) + isTSAsExpression(parent) || + isTSSatisfiesExpression(parent) ) { return true; } diff --git a/packages/babel-generator/test/fixtures/typescript/satisfies/input.js b/packages/babel-generator/test/fixtures/typescript/satisfies/input.js new file mode 100644 index 000000000000..676f9f25adfc --- /dev/null +++ b/packages/babel-generator/test/fixtures/typescript/satisfies/input.js @@ -0,0 +1,4 @@ +x satisfies T; +x < y satisfies boolean; // (x < y) satisfies boolean; +x === 1 satisfies number; // x === (1 satisfies number); +x satisfies any satisfies T; diff --git a/packages/babel-generator/test/fixtures/typescript/satisfies/output.js b/packages/babel-generator/test/fixtures/typescript/satisfies/output.js new file mode 100644 index 000000000000..9dc8213a8212 --- /dev/null +++ b/packages/babel-generator/test/fixtures/typescript/satisfies/output.js @@ -0,0 +1,6 @@ +(x satisfies T); +(x < y satisfies boolean); // (x < y) satisfies boolean; + +x === (1 satisfies number); // x === (1 satisfies number); + +((x satisfies any) satisfies T); \ No newline at end of file diff --git a/packages/babel-traverse/src/path/generated/asserts.ts b/packages/babel-traverse/src/path/generated/asserts.ts index fa863227ec9a..a468856b6e42 100644 --- a/packages/babel-traverse/src/path/generated/asserts.ts +++ b/packages/babel-traverse/src/path/generated/asserts.ts @@ -577,6 +577,9 @@ export interface NodePathAssetions { opts?: object, ): asserts this is NodePath; assertTSRestType(opts?: object): asserts this is NodePath; + assertTSSatisfiesExpression( + opts?: object, + ): asserts this is NodePath; assertTSStringKeyword( opts?: object, ): asserts this is NodePath; diff --git a/packages/babel-traverse/src/path/generated/validators.ts b/packages/babel-traverse/src/path/generated/validators.ts index 908e5db8f355..7c3d14d4f2e4 100644 --- a/packages/babel-traverse/src/path/generated/validators.ts +++ b/packages/babel-traverse/src/path/generated/validators.ts @@ -995,6 +995,10 @@ interface BaseNodePathValidators { this: NodePath, opts?: object, ): this is NodePath; + isTSSatisfiesExpression( + this: NodePath, + opts?: object, + ): this is NodePath; isTSStringKeyword( this: NodePath, opts?: object, diff --git a/packages/babel-types/src/asserts/generated/index.ts b/packages/babel-types/src/asserts/generated/index.ts index b3cece7f340d..a643e8a14bfb 100644 --- a/packages/babel-types/src/asserts/generated/index.ts +++ b/packages/babel-types/src/asserts/generated/index.ts @@ -1412,6 +1412,12 @@ export function assertTSAsExpression( ): asserts node is t.TSAsExpression { assert("TSAsExpression", node, opts); } +export function assertTSSatisfiesExpression( + node: object | null | undefined, + opts?: object | null, +): asserts node is t.TSSatisfiesExpression { + assert("TSSatisfiesExpression", node, opts); +} export function assertTSTypeAssertion( node: object | null | undefined, opts?: object | null, diff --git a/packages/babel-types/src/ast-types/generated/index.ts b/packages/babel-types/src/ast-types/generated/index.ts index 5b77c64d0714..9a5ce6c7b3a8 100644 --- a/packages/babel-types/src/ast-types/generated/index.ts +++ b/packages/babel-types/src/ast-types/generated/index.ts @@ -253,6 +253,7 @@ export type Node = | TSPropertySignature | TSQualifiedName | TSRestType + | TSSatisfiesExpression | TSStringKeyword | TSSymbolKeyword | TSThisType @@ -719,6 +720,7 @@ export interface AssignmentPattern extends BaseNode { | ArrayPattern | MemberExpression | TSAsExpression + | TSSatisfiesExpression | TSTypeAssertion | TSNonNullExpression; right: Expression; @@ -1976,6 +1978,12 @@ export interface TSAsExpression extends BaseNode { typeAnnotation: TSType; } +export interface TSSatisfiesExpression extends BaseNode { + type: "TSSatisfiesExpression"; + expression: Expression; + typeAnnotation: TSType; +} + export interface TSTypeAssertion extends BaseNode { type: "TSTypeAssertion"; typeAnnotation: TSType; @@ -2206,6 +2214,7 @@ export type Expression = | PipelinePrimaryTopicReference | TSInstantiationExpression | TSAsExpression + | TSSatisfiesExpression | TSTypeAssertion | TSNonNullExpression; export type Binary = BinaryExpression | LogicalExpression; @@ -2382,6 +2391,7 @@ export type PatternLike = | ArrayPattern | ObjectPattern | TSAsExpression + | TSSatisfiesExpression | TSTypeAssertion | TSNonNullExpression; export type LVal = @@ -2393,6 +2403,7 @@ export type LVal = | ObjectPattern | TSParameterProperty | TSAsExpression + | TSSatisfiesExpression | TSTypeAssertion | TSNonNullExpression; export type TSEntityName = Identifier | TSQualifiedName; @@ -2654,6 +2665,7 @@ export type TypeScript = | TSTypeAliasDeclaration | TSInstantiationExpression | TSAsExpression + | TSSatisfiesExpression | TSTypeAssertion | TSEnumDeclaration | TSEnumMember @@ -2864,6 +2876,7 @@ export interface ParentMaps { | TSMethodSignature | TSNonNullExpression | TSPropertySignature + | TSSatisfiesExpression | TSTypeAssertion | TaggedTemplateExpression | TemplateLiteral @@ -2970,6 +2983,7 @@ export interface ParentMaps { | TSMethodSignature | TSNonNullExpression | TSPropertySignature + | TSSatisfiesExpression | TSTypeAssertion | TaggedTemplateExpression | TemplateLiteral @@ -3033,6 +3047,7 @@ export interface ParentMaps { | TSMethodSignature | TSNonNullExpression | TSPropertySignature + | TSSatisfiesExpression | TSTypeAssertion | TaggedTemplateExpression | TemplateLiteral @@ -3113,6 +3128,7 @@ export interface ParentMaps { | TSMethodSignature | TSNonNullExpression | TSPropertySignature + | TSSatisfiesExpression | TSTypeAssertion | TaggedTemplateExpression | TemplateLiteral @@ -3177,6 +3193,7 @@ export interface ParentMaps { | TSMethodSignature | TSNonNullExpression | TSPropertySignature + | TSSatisfiesExpression | TSTypeAssertion | TaggedTemplateExpression | TemplateLiteral @@ -3240,6 +3257,7 @@ export interface ParentMaps { | TSMethodSignature | TSNonNullExpression | TSPropertySignature + | TSSatisfiesExpression | TSTypeAssertion | TaggedTemplateExpression | TemplateLiteral @@ -3303,6 +3321,7 @@ export interface ParentMaps { | TSMethodSignature | TSNonNullExpression | TSPropertySignature + | TSSatisfiesExpression | TSTypeAssertion | TaggedTemplateExpression | TemplateLiteral @@ -3392,6 +3411,7 @@ export interface ParentMaps { | TSMethodSignature | TSNonNullExpression | TSPropertySignature + | TSSatisfiesExpression | TSTypeAssertion | TaggedTemplateExpression | TemplateLiteral @@ -3519,6 +3539,7 @@ export interface ParentMaps { | TSMethodSignature | TSNonNullExpression | TSPropertySignature + | TSSatisfiesExpression | TSTypeAssertion | TaggedTemplateExpression | TemplateLiteral @@ -3601,6 +3622,7 @@ export interface ParentMaps { | TSMethodSignature | TSNonNullExpression | TSPropertySignature + | TSSatisfiesExpression | TSTypeAssertion | TaggedTemplateExpression | TemplateLiteral @@ -3678,6 +3700,7 @@ export interface ParentMaps { | TSMethodSignature | TSNonNullExpression | TSPropertySignature + | TSSatisfiesExpression | TSTypeAssertion | TaggedTemplateExpression | TemplateLiteral @@ -3769,6 +3792,7 @@ export interface ParentMaps { | TSMethodSignature | TSNonNullExpression | TSPropertySignature + | TSSatisfiesExpression | TSTypeAssertion | TaggedTemplateExpression | TemplateLiteral @@ -4028,6 +4052,7 @@ export interface ParentMaps { | TSMethodSignature | TSNonNullExpression | TSPropertySignature + | TSSatisfiesExpression | TSTypeAssertion | TaggedTemplateExpression | TemplateLiteral @@ -4340,6 +4365,7 @@ export interface ParentMaps { | TSMethodSignature | TSNonNullExpression | TSPropertySignature + | TSSatisfiesExpression | TSTypeAssertion | TaggedTemplateExpression | TemplateLiteral @@ -4513,6 +4539,7 @@ export interface ParentMaps { | TSParameterProperty | TSPropertySignature | TSQualifiedName + | TSSatisfiesExpression | TSTypeAliasDeclaration | TSTypeAssertion | TSTypePredicate @@ -4595,6 +4622,7 @@ export interface ParentMaps { | TSMethodSignature | TSNonNullExpression | TSPropertySignature + | TSSatisfiesExpression | TSTypeAssertion | TaggedTemplateExpression | TemplateLiteral @@ -4794,6 +4822,7 @@ export interface ParentMaps { | TSMethodSignature | TSNonNullExpression | TSPropertySignature + | TSSatisfiesExpression | TSTypeAssertion | TaggedTemplateExpression | TemplateLiteral @@ -4862,6 +4891,7 @@ export interface ParentMaps { | TSMethodSignature | TSNonNullExpression | TSPropertySignature + | TSSatisfiesExpression | TSTypeAssertion | TaggedTemplateExpression | TemplateLiteral @@ -4961,6 +4991,7 @@ export interface ParentMaps { | TSMethodSignature | TSNonNullExpression | TSPropertySignature + | TSSatisfiesExpression | TSTypeAssertion | TaggedTemplateExpression | TemplateLiteral @@ -5026,6 +5057,7 @@ export interface ParentMaps { | TSMethodSignature | TSNonNullExpression | TSPropertySignature + | TSSatisfiesExpression | TSTypeAssertion | TaggedTemplateExpression | TemplateLiteral @@ -5089,6 +5121,7 @@ export interface ParentMaps { | TSMethodSignature | TSNonNullExpression | TSPropertySignature + | TSSatisfiesExpression | TSTypeAssertion | TaggedTemplateExpression | TemplateLiteral @@ -5177,6 +5210,7 @@ export interface ParentMaps { | TSMethodSignature | TSNonNullExpression | TSPropertySignature + | TSSatisfiesExpression | TSTypeAssertion | TaggedTemplateExpression | TemplateLiteral @@ -5240,6 +5274,7 @@ export interface ParentMaps { | TSMethodSignature | TSNonNullExpression | TSPropertySignature + | TSSatisfiesExpression | TSTypeAssertion | TaggedTemplateExpression | TemplateLiteral @@ -5322,6 +5357,7 @@ export interface ParentMaps { | TSMethodSignature | TSNonNullExpression | TSPropertySignature + | TSSatisfiesExpression | TSTypeAssertion | TaggedTemplateExpression | TemplateLiteral @@ -5488,6 +5524,7 @@ export interface ParentMaps { | TSMethodSignature | TSNonNullExpression | TSPropertySignature + | TSSatisfiesExpression | TSTypeAssertion | TaggedTemplateExpression | TemplateLiteral @@ -5551,6 +5588,7 @@ export interface ParentMaps { | TSMethodSignature | TSNonNullExpression | TSPropertySignature + | TSSatisfiesExpression | TSTypeAssertion | TaggedTemplateExpression | TemplateLiteral @@ -5700,6 +5738,7 @@ export interface ParentMaps { | TSMethodSignature | TSNonNullExpression | TSPropertySignature + | TSSatisfiesExpression | TSTypeAssertion | TaggedTemplateExpression | TemplateLiteral @@ -5788,6 +5827,7 @@ export interface ParentMaps { | TSMethodSignature | TSNonNullExpression | TSPropertySignature + | TSSatisfiesExpression | TSTypeAssertion | TaggedTemplateExpression | TemplateLiteral @@ -5851,6 +5891,7 @@ export interface ParentMaps { | TSMethodSignature | TSNonNullExpression | TSPropertySignature + | TSSatisfiesExpression | TSTypeAssertion | TaggedTemplateExpression | TemplateLiteral @@ -5914,6 +5955,7 @@ export interface ParentMaps { | TSMethodSignature | TSNonNullExpression | TSPropertySignature + | TSSatisfiesExpression | TSTypeAssertion | TaggedTemplateExpression | TemplateLiteral @@ -5977,6 +6019,7 @@ export interface ParentMaps { | TSMethodSignature | TSNonNullExpression | TSPropertySignature + | TSSatisfiesExpression | TSTypeAssertion | TaggedTemplateExpression | TemplateLiteral @@ -6040,6 +6083,7 @@ export interface ParentMaps { | TSMethodSignature | TSNonNullExpression | TSPropertySignature + | TSSatisfiesExpression | TSTypeAssertion | TaggedTemplateExpression | TemplateLiteral @@ -6118,6 +6162,7 @@ export interface ParentMaps { | TSMethodSignature | TSNonNullExpression | TSPropertySignature + | TSSatisfiesExpression | TSTypeAssertion | TaggedTemplateExpression | TemplateLiteral @@ -6181,6 +6226,7 @@ export interface ParentMaps { | TSMethodSignature | TSNonNullExpression | TSPropertySignature + | TSSatisfiesExpression | TSTypeAssertion | TaggedTemplateExpression | TemplateLiteral @@ -6282,6 +6328,7 @@ export interface ParentMaps { | TSMethodSignature | TSNonNullExpression | TSPropertySignature + | TSSatisfiesExpression | TSTypeAssertion | TaggedTemplateExpression | TemplateLiteral @@ -6371,6 +6418,7 @@ export interface ParentMaps { | TSModuleDeclaration | TSNonNullExpression | TSPropertySignature + | TSSatisfiesExpression | TSTypeAssertion | TaggedTemplateExpression | TemplateLiteral @@ -6484,6 +6532,7 @@ export interface ParentMaps { | TSMethodSignature | TSNonNullExpression | TSPropertySignature + | TSSatisfiesExpression | TSTypeAssertion | TaggedTemplateExpression | TemplateLiteral @@ -6547,6 +6596,7 @@ export interface ParentMaps { | TSOptionalType | TSParenthesizedType | TSRestType + | TSSatisfiesExpression | TSTupleType | TSTypeAliasDeclaration | TSTypeAnnotation @@ -6567,6 +6617,7 @@ export interface ParentMaps { | TSOptionalType | TSParenthesizedType | TSRestType + | TSSatisfiesExpression | TSTupleType | TSTypeAliasDeclaration | TSTypeAnnotation @@ -6629,6 +6680,7 @@ export interface ParentMaps { | TSMethodSignature | TSNonNullExpression | TSPropertySignature + | TSSatisfiesExpression | TSTypeAssertion | TaggedTemplateExpression | TemplateLiteral @@ -6652,6 +6704,7 @@ export interface ParentMaps { | TSOptionalType | TSParenthesizedType | TSRestType + | TSSatisfiesExpression | TSTupleType | TSTypeAliasDeclaration | TSTypeAnnotation @@ -6672,6 +6725,7 @@ export interface ParentMaps { | TSOptionalType | TSParenthesizedType | TSRestType + | TSSatisfiesExpression | TSTupleType | TSTypeAliasDeclaration | TSTypeAnnotation @@ -6693,6 +6747,7 @@ export interface ParentMaps { | TSOptionalType | TSParenthesizedType | TSRestType + | TSSatisfiesExpression | TSTupleType | TSTypeAliasDeclaration | TSTypeAnnotation @@ -6714,6 +6769,7 @@ export interface ParentMaps { | TSOptionalType | TSParenthesizedType | TSRestType + | TSSatisfiesExpression | TSTupleType | TSTypeAliasDeclaration | TSTypeAnnotation @@ -6784,6 +6840,7 @@ export interface ParentMaps { | TSOptionalType | TSParenthesizedType | TSRestType + | TSSatisfiesExpression | TSTupleType | TSTypeAliasDeclaration | TSTypeAnnotation @@ -6805,6 +6862,7 @@ export interface ParentMaps { | TSOptionalType | TSParenthesizedType | TSRestType + | TSSatisfiesExpression | TSTupleType | TSTypeAliasDeclaration | TSTypeAnnotation @@ -6839,6 +6897,7 @@ export interface ParentMaps { | TSOptionalType | TSParenthesizedType | TSRestType + | TSSatisfiesExpression | TSTupleType | TSTypeAliasDeclaration | TSTypeAnnotation @@ -6861,6 +6920,7 @@ export interface ParentMaps { | TSOptionalType | TSParenthesizedType | TSRestType + | TSSatisfiesExpression | TSTupleType | TSTypeAliasDeclaration | TSTypeAnnotation @@ -6881,6 +6941,7 @@ export interface ParentMaps { | TSOptionalType | TSParenthesizedType | TSRestType + | TSSatisfiesExpression | TSTupleType | TSTypeAliasDeclaration | TSTypeAnnotation @@ -6941,6 +7002,7 @@ export interface ParentMaps { | TSMethodSignature | TSNonNullExpression | TSPropertySignature + | TSSatisfiesExpression | TSTypeAssertion | TaggedTemplateExpression | TemplateLiteral @@ -6980,6 +7042,7 @@ export interface ParentMaps { | TSOptionalType | TSParenthesizedType | TSRestType + | TSSatisfiesExpression | TSTupleType | TSTypeAliasDeclaration | TSTypeAnnotation @@ -7000,6 +7063,7 @@ export interface ParentMaps { | TSOptionalType | TSParenthesizedType | TSRestType + | TSSatisfiesExpression | TSTupleType | TSTypeAliasDeclaration | TSTypeAnnotation @@ -7020,6 +7084,7 @@ export interface ParentMaps { | TSOptionalType | TSParenthesizedType | TSRestType + | TSSatisfiesExpression | TSTupleType | TSTypeAliasDeclaration | TSTypeAnnotation @@ -7040,6 +7105,7 @@ export interface ParentMaps { | TSOptionalType | TSParenthesizedType | TSRestType + | TSSatisfiesExpression | TSTupleType | TSTypeAliasDeclaration | TSTypeAnnotation @@ -7093,6 +7159,7 @@ export interface ParentMaps { | TSOptionalType | TSParenthesizedType | TSRestType + | TSSatisfiesExpression | TSTupleType | TSTypeAliasDeclaration | TSTypeAnnotation @@ -7155,6 +7222,7 @@ export interface ParentMaps { | TSMethodSignature | TSNonNullExpression | TSPropertySignature + | TSSatisfiesExpression | TSTypeAssertion | TaggedTemplateExpression | TemplateLiteral @@ -7178,6 +7246,7 @@ export interface ParentMaps { | TSOptionalType | TSParenthesizedType | TSRestType + | TSSatisfiesExpression | TSTupleType | TSTypeAliasDeclaration | TSTypeAnnotation @@ -7198,6 +7267,7 @@ export interface ParentMaps { | TSOptionalType | TSParenthesizedType | TSRestType + | TSSatisfiesExpression | TSTupleType | TSTypeAliasDeclaration | TSTypeAnnotation @@ -7218,6 +7288,7 @@ export interface ParentMaps { | TSOptionalType | TSParenthesizedType | TSRestType + | TSSatisfiesExpression | TSTupleType | TSTypeAliasDeclaration | TSTypeAnnotation @@ -7238,6 +7309,7 @@ export interface ParentMaps { | TSOptionalType | TSParenthesizedType | TSRestType + | TSSatisfiesExpression | TSTupleType | TSTypeAliasDeclaration | TSTypeAnnotation @@ -7268,6 +7340,7 @@ export interface ParentMaps { | TSOptionalType | TSParenthesizedType | TSRestType + | TSSatisfiesExpression | TSTupleType | TSTypeAliasDeclaration | TSTypeAnnotation @@ -7296,6 +7369,7 @@ export interface ParentMaps { | TSOptionalType | TSParenthesizedType | TSRestType + | TSSatisfiesExpression | TSTupleType | TSTypeAliasDeclaration | TSTypeAnnotation @@ -7305,6 +7379,72 @@ export interface ParentMaps { | TSTypeParameterInstantiation | TSUnionType | TemplateLiteral; + TSSatisfiesExpression: + | ArrayExpression + | ArrayPattern + | ArrowFunctionExpression + | AssignmentExpression + | AssignmentPattern + | AwaitExpression + | BinaryExpression + | BindExpression + | CallExpression + | ClassAccessorProperty + | ClassDeclaration + | ClassExpression + | ClassMethod + | ClassPrivateProperty + | ClassProperty + | ConditionalExpression + | Decorator + | DoWhileStatement + | ExportDefaultDeclaration + | ExpressionStatement + | ForInStatement + | ForOfStatement + | ForStatement + | IfStatement + | JSXExpressionContainer + | JSXSpreadAttribute + | JSXSpreadChild + | LogicalExpression + | MemberExpression + | NewExpression + | ObjectMethod + | ObjectProperty + | OptionalCallExpression + | OptionalMemberExpression + | ParenthesizedExpression + | PipelineBareFunction + | PipelineTopicExpression + | RestElement + | ReturnStatement + | SequenceExpression + | SpreadElement + | SwitchCase + | SwitchStatement + | TSAsExpression + | TSDeclareMethod + | TSEnumDeclaration + | TSEnumMember + | TSExportAssignment + | TSInstantiationExpression + | TSMethodSignature + | TSNonNullExpression + | TSPropertySignature + | TSSatisfiesExpression + | TSTypeAssertion + | TaggedTemplateExpression + | TemplateLiteral + | ThrowStatement + | TupleExpression + | TypeCastExpression + | UnaryExpression + | UpdateExpression + | VariableDeclarator + | WhileStatement + | WithStatement + | YieldExpression; TSStringKeyword: | TSArrayType | TSAsExpression @@ -7316,6 +7456,7 @@ export interface ParentMaps { | TSOptionalType | TSParenthesizedType | TSRestType + | TSSatisfiesExpression | TSTupleType | TSTypeAliasDeclaration | TSTypeAnnotation @@ -7336,6 +7477,7 @@ export interface ParentMaps { | TSOptionalType | TSParenthesizedType | TSRestType + | TSSatisfiesExpression | TSTupleType | TSTypeAliasDeclaration | TSTypeAnnotation @@ -7356,6 +7498,7 @@ export interface ParentMaps { | TSOptionalType | TSParenthesizedType | TSRestType + | TSSatisfiesExpression | TSTupleType | TSTypeAliasDeclaration | TSTypeAnnotation @@ -7377,6 +7520,7 @@ export interface ParentMaps { | TSOptionalType | TSParenthesizedType | TSRestType + | TSSatisfiesExpression | TSTupleType | TSTypeAliasDeclaration | TSTypeAnnotation @@ -7479,6 +7623,7 @@ export interface ParentMaps { | TSMethodSignature | TSNonNullExpression | TSPropertySignature + | TSSatisfiesExpression | TSTypeAssertion | TaggedTemplateExpression | TemplateLiteral @@ -7502,6 +7647,7 @@ export interface ParentMaps { | TSOptionalType | TSParenthesizedType | TSRestType + | TSSatisfiesExpression | TSTupleType | TSTypeAliasDeclaration | TSTypeAnnotation @@ -7522,6 +7668,7 @@ export interface ParentMaps { | TSOptionalType | TSParenthesizedType | TSRestType + | TSSatisfiesExpression | TSTupleType | TSTypeAliasDeclaration | TSTypeAnnotation @@ -7574,6 +7721,7 @@ export interface ParentMaps { | TSOptionalType | TSParenthesizedType | TSRestType + | TSSatisfiesExpression | TSTupleType | TSTypeAliasDeclaration | TSTypeAnnotation @@ -7594,6 +7742,7 @@ export interface ParentMaps { | TSOptionalType | TSParenthesizedType | TSRestType + | TSSatisfiesExpression | TSTupleType | TSTypeAliasDeclaration | TSTypeAnnotation @@ -7614,6 +7763,7 @@ export interface ParentMaps { | TSOptionalType | TSParenthesizedType | TSRestType + | TSSatisfiesExpression | TSTupleType | TSTypeAliasDeclaration | TSTypeAnnotation @@ -7634,6 +7784,7 @@ export interface ParentMaps { | TSOptionalType | TSParenthesizedType | TSRestType + | TSSatisfiesExpression | TSTupleType | TSTypeAliasDeclaration | TSTypeAnnotation @@ -7654,6 +7805,7 @@ export interface ParentMaps { | TSOptionalType | TSParenthesizedType | TSRestType + | TSSatisfiesExpression | TSTupleType | TSTypeAliasDeclaration | TSTypeAnnotation @@ -7674,6 +7826,7 @@ export interface ParentMaps { | TSOptionalType | TSParenthesizedType | TSRestType + | TSSatisfiesExpression | TSTupleType | TSTypeAliasDeclaration | TSTypeAnnotation @@ -7694,6 +7847,7 @@ export interface ParentMaps { | TSOptionalType | TSParenthesizedType | TSRestType + | TSSatisfiesExpression | TSTupleType | TSTypeAliasDeclaration | TSTypeAnnotation @@ -7754,6 +7908,7 @@ export interface ParentMaps { | TSMethodSignature | TSNonNullExpression | TSPropertySignature + | TSSatisfiesExpression | TSTypeAssertion | TaggedTemplateExpression | TemplateLiteral @@ -7819,6 +7974,7 @@ export interface ParentMaps { | TSMethodSignature | TSNonNullExpression | TSPropertySignature + | TSSatisfiesExpression | TSTypeAssertion | TaggedTemplateExpression | TemplateLiteral @@ -7882,6 +8038,7 @@ export interface ParentMaps { | TSMethodSignature | TSNonNullExpression | TSPropertySignature + | TSSatisfiesExpression | TSTypeAssertion | TaggedTemplateExpression | TemplateLiteral @@ -7984,6 +8141,7 @@ export interface ParentMaps { | TSMethodSignature | TSNonNullExpression | TSPropertySignature + | TSSatisfiesExpression | TSTypeAssertion | TaggedTemplateExpression | TemplateLiteral @@ -8061,6 +8219,7 @@ export interface ParentMaps { | TSMethodSignature | TSNonNullExpression | TSPropertySignature + | TSSatisfiesExpression | TSTypeAssertion | TaggedTemplateExpression | TemplateLiteral @@ -8188,6 +8347,7 @@ export interface ParentMaps { | TSMethodSignature | TSNonNullExpression | TSPropertySignature + | TSSatisfiesExpression | TSTypeAssertion | TaggedTemplateExpression | TemplateLiteral @@ -8313,6 +8473,7 @@ export interface ParentMaps { | TSMethodSignature | TSNonNullExpression | TSPropertySignature + | TSSatisfiesExpression | TSTypeAssertion | TaggedTemplateExpression | TemplateLiteral @@ -8401,6 +8562,7 @@ export interface ParentMaps { | TSMethodSignature | TSNonNullExpression | TSPropertySignature + | TSSatisfiesExpression | TSTypeAssertion | TaggedTemplateExpression | TemplateLiteral @@ -8543,6 +8705,7 @@ export interface ParentMaps { | TSMethodSignature | TSNonNullExpression | TSPropertySignature + | TSSatisfiesExpression | TSTypeAssertion | TaggedTemplateExpression | TemplateLiteral diff --git a/packages/babel-types/src/builders/generated/index.ts b/packages/babel-types/src/builders/generated/index.ts index acfef5336e0b..a9d696d864e7 100644 --- a/packages/babel-types/src/builders/generated/index.ts +++ b/packages/babel-types/src/builders/generated/index.ts @@ -554,6 +554,7 @@ export function assignmentPattern( | t.ArrayPattern | t.MemberExpression | t.TSAsExpression + | t.TSSatisfiesExpression | t.TSTypeAssertion | t.TSNonNullExpression, right: t.Expression, @@ -2351,6 +2352,17 @@ export function tsAsExpression( }); } export { tsAsExpression as tSAsExpression }; +export function tsSatisfiesExpression( + expression: t.Expression, + typeAnnotation: t.TSType, +): t.TSSatisfiesExpression { + return validateNode({ + type: "TSSatisfiesExpression", + expression, + typeAnnotation, + }); +} +export { tsSatisfiesExpression as tSSatisfiesExpression }; export function tsTypeAssertion( typeAnnotation: t.TSType, expression: t.Expression, diff --git a/packages/babel-types/src/builders/generated/uppercase.js b/packages/babel-types/src/builders/generated/uppercase.js index 23952d0c3530..24bdea27f963 100644 --- a/packages/babel-types/src/builders/generated/uppercase.js +++ b/packages/babel-types/src/builders/generated/uppercase.js @@ -242,6 +242,7 @@ export { tsTypeAliasDeclaration as TSTypeAliasDeclaration, tsInstantiationExpression as TSInstantiationExpression, tsAsExpression as TSAsExpression, + tsSatisfiesExpression as TSSatisfiesExpression, tsTypeAssertion as TSTypeAssertion, tsEnumDeclaration as TSEnumDeclaration, tsEnumMember as TSEnumMember, diff --git a/packages/babel-types/src/definitions/core.ts b/packages/babel-types/src/definitions/core.ts index 66213c683c68..3ded783e57dc 100644 --- a/packages/babel-types/src/definitions/core.ts +++ b/packages/babel-types/src/definitions/core.ts @@ -70,6 +70,7 @@ defineType("AssignmentExpression", { "ArrayPattern", "ObjectPattern", "TSAsExpression", + "TSSatisfiesExpression", "TSTypeAssertion", "TSNonNullExpression", ), @@ -328,6 +329,7 @@ defineType("ForInStatement", { "ArrayPattern", "ObjectPattern", "TSAsExpression", + "TSSatisfiesExpression", "TSTypeAssertion", "TSNonNullExpression", ), @@ -930,6 +932,7 @@ defineType("ObjectProperty", { "Identifier", "Pattern", "TSAsExpression", + "TSSatisfiesExpression", "TSNonNullExpression", "TSTypeAssertion", ); @@ -960,6 +963,7 @@ defineType("RestElement", { "ObjectPattern", "MemberExpression", "TSAsExpression", + "TSSatisfiesExpression", "TSTypeAssertion", "TSNonNullExpression", ), @@ -1244,6 +1248,7 @@ defineType("AssignmentPattern", { "ArrayPattern", "MemberExpression", "TSAsExpression", + "TSSatisfiesExpression", "TSTypeAssertion", "TSNonNullExpression", ), @@ -1653,6 +1658,7 @@ defineType("ForOfStatement", { "ArrayPattern", "ObjectPattern", "TSAsExpression", + "TSSatisfiesExpression", "TSTypeAssertion", "TSNonNullExpression", ); diff --git a/packages/babel-types/src/definitions/typescript.ts b/packages/babel-types/src/definitions/typescript.ts index 750e47430d42..698f28246317 100644 --- a/packages/babel-types/src/definitions/typescript.ts +++ b/packages/babel-types/src/definitions/typescript.ts @@ -463,14 +463,17 @@ defineType("TSInstantiationExpression", { }, }); -defineType("TSAsExpression", { +const TSTypeExpression = { aliases: ["Expression", "LVal", "PatternLike"], visitor: ["expression", "typeAnnotation"], fields: { expression: validateType("Expression"), typeAnnotation: validateType("TSType"), }, -}); +}; + +defineType("TSAsExpression", TSTypeExpression); +defineType("TSSatisfiesExpression", TSTypeExpression); defineType("TSTypeAssertion", { aliases: ["Expression", "LVal", "PatternLike"], diff --git a/packages/babel-types/src/validators/generated/index.ts b/packages/babel-types/src/validators/generated/index.ts index f07920696c65..2cb91c7bac2a 100644 --- a/packages/babel-types/src/validators/generated/index.ts +++ b/packages/babel-types/src/validators/generated/index.ts @@ -3966,6 +3966,23 @@ export function isTSAsExpression( return false; } +export function isTSSatisfiesExpression( + node: object | null | undefined, + opts?: object | null, +): node is t.TSSatisfiesExpression { + if (!node) return false; + + const nodeType = (node as t.Node).type; + if (nodeType === "TSSatisfiesExpression") { + if (typeof opts === "undefined") { + return true; + } else { + return shallowEqual(node, opts); + } + } + + return false; +} export function isTSTypeAssertion( node: object | null | undefined, opts?: object | null, @@ -4387,6 +4404,7 @@ export function isExpression( "PipelinePrimaryTopicReference" === nodeType || "TSInstantiationExpression" === nodeType || "TSAsExpression" === nodeType || + "TSSatisfiesExpression" === nodeType || "TSTypeAssertion" === nodeType || "TSNonNullExpression" === nodeType || (nodeType === "Placeholder" && @@ -4889,6 +4907,7 @@ export function isPatternLike( "ArrayPattern" === nodeType || "ObjectPattern" === nodeType || "TSAsExpression" === nodeType || + "TSSatisfiesExpression" === nodeType || "TSTypeAssertion" === nodeType || "TSNonNullExpression" === nodeType || (nodeType === "Placeholder" && @@ -4920,6 +4939,7 @@ export function isLVal( "ObjectPattern" === nodeType || "TSParameterProperty" === nodeType || "TSAsExpression" === nodeType || + "TSSatisfiesExpression" === nodeType || "TSTypeAssertion" === nodeType || "TSNonNullExpression" === nodeType || (nodeType === "Placeholder" && @@ -5626,6 +5646,7 @@ export function isTypeScript( "TSTypeAliasDeclaration" === nodeType || "TSInstantiationExpression" === nodeType || "TSAsExpression" === nodeType || + "TSSatisfiesExpression" === nodeType || "TSTypeAssertion" === nodeType || "TSEnumDeclaration" === nodeType || "TSEnumMember" === nodeType ||