@@ -24,6 +24,8 @@ exports.default = function (_ref) {
2424
2525 var extendTemplate = expression ( '\n function extendId(types, name) {\n const isAny = (type) => {\n if (type === tcombId.Any) {\n return true;\n }\n if (tcombId.isType(type) && type.meta.kind === \'maybe\') {\n return isAny(type.meta.type)\n }\n return false;\n }\n return tcombId.interface.extend(types.filter(type => !isAny(type)), name)\n }\n ' ) ;
2626
27+ var argumentsTemplate = expression ( 'arguments[index] !== undefined ? arguments[index] : defaults' ) ;
28+
2729 //
2830 // combinators
2931 //
@@ -367,12 +369,28 @@ exports.default = function (_ref) {
367369 return node ;
368370 }
369371
370- function getParam ( isArrow , param , i ) {
372+ function getParamId ( isArrow , param , i , defaults ) {
373+ if ( t . isObjectPattern ( param ) ) {
374+ if ( isArrow ) {
375+ return stripDefaults ( param ) ;
376+ }
377+ if ( typeof defaults !== 'undefined' ) {
378+ return argumentsTemplate ( { index : t . identifier ( i ) , defaults : defaults } ) ;
379+ }
380+ return t . memberExpression ( t . identifier ( 'arguments' ) , t . identifier ( i ) , true ) ;
381+ }
382+ if ( t . isRestElement ( param ) ) {
383+ return param . argument ;
384+ }
385+ return param ;
386+ }
387+
388+ function getParam ( isArrow , param , i , defaults ) {
371389 if ( t . isAssignmentPattern ( param ) && param . left . typeAnnotation ) {
372- return getParam ( isArrow , param . left , i ) ;
390+ return getParam ( isArrow , param . left , i , param . right ) ;
373391 }
374392 if ( param . typeAnnotation ) {
375- var id = t . isObjectPattern ( param ) ? isArrow ? stripDefaults ( param ) : t . memberExpression ( t . identifier ( 'arguments' ) , t . identifier ( i ) , true ) : t . isRestElement ( param ) ? param . argument : param ;
393+ var id = getParamId ( isArrow , param , i , defaults ) ;
376394
377395 return {
378396 id : id ,
0 commit comments