@@ -368,12 +368,7 @@ function _extract_paths(assignments = [], param, expression, update_expression,
368
368
369
369
case 'AssignmentPattern' : {
370
370
/** @type {DestructuredAssignment['expression'] } */
371
- const fallback_expression = ( object ) =>
372
- is_expression_async ( param . right )
373
- ? b . await (
374
- b . call ( '$.value_or_fallback_async' , expression ( object ) , b . thunk ( param . right , true ) )
375
- )
376
- : b . call ( '$.value_or_fallback' , expression ( object ) , b . thunk ( param . right ) ) ;
371
+ const fallback_expression = ( object ) => build_fallback ( expression ( object ) , param . right ) ;
377
372
378
373
if ( param . left . type === 'Identifier' ) {
379
374
assignments . push ( {
@@ -549,3 +544,22 @@ export function is_expression_async(expression) {
549
544
return false ;
550
545
}
551
546
}
547
+
548
+ /**
549
+ *
550
+ * @param {ESTree.Expression } expression
551
+ * @param {ESTree.Expression } fallback
552
+ */
553
+ export function build_fallback ( expression , fallback ) {
554
+ if ( is_simple_expression ( fallback ) ) {
555
+ return b . call ( '$.fallback' , expression , fallback ) ;
556
+ }
557
+
558
+ if ( fallback . type === 'AwaitExpression' && is_simple_expression ( fallback . argument ) ) {
559
+ return b . await ( b . call ( '$.fallback' , expression , fallback . argument ) ) ;
560
+ }
561
+
562
+ return is_expression_async ( fallback )
563
+ ? b . await ( b . call ( '$.fallback' , expression , b . thunk ( fallback , true ) , b . true ) )
564
+ : b . call ( '$.fallback' , expression , b . thunk ( fallback ) , b . true ) ;
565
+ }
0 commit comments