@@ -8,6 +8,7 @@ import { build, buildString } from './compiler.js'
88import chainingSupported from './utilities/chainingSupported.js'
99import InvalidControlInput from './errors/InvalidControlInput.js'
1010import legacyMethods from './legacy.js'
11+ import { downgrade } from './utilities/downgrade.js'
1112
1213function isDeterministic ( method , engine , buildState ) {
1314 if ( Array . isArray ( method ) ) {
@@ -255,7 +256,7 @@ const defaultMethods = {
255256 let item
256257 for ( let i = 0 ; i < arr . length ; i ++ ) {
257258 item = executeInLoop ? engine . run ( arr [ i ] , _1 , { above : _2 } ) : arr [ i ]
258- if ( item !== null && item !== undefined ) return item
259+ if ( downgrade ( item ) !== null && item !== undefined ) return item
259260 }
260261
261262 if ( item === undefined ) return null
@@ -269,7 +270,7 @@ const defaultMethods = {
269270 let item
270271 for ( let i = 0 ; i < arr . length ; i ++ ) {
271272 item = executeInLoop ? await engine . run ( arr [ i ] , _1 , { above : _2 } ) : arr [ i ]
272- if ( item !== null && item !== undefined ) return item
273+ if ( downgrade ( item ) !== null && item !== undefined ) return item
273274 }
274275
275276 if ( item === undefined ) return null
@@ -278,8 +279,13 @@ const defaultMethods = {
278279 deterministic : ( data , buildState ) => isDeterministic ( data , buildState . engine , buildState ) ,
279280 compile : ( data , buildState ) => {
280281 if ( ! chainingSupported ) return false
281- if ( Array . isArray ( data ) && data . length ) return `(${ data . map ( ( i ) => buildString ( i , buildState ) ) . join ( ' ?? ' ) } )`
282- return `(${ buildString ( data , buildState ) } ).reduce((a,b) => a ?? b, null)`
282+ if ( Array . isArray ( data ) && data . length ) {
283+ return `(${ data . map ( ( i , x ) => {
284+ if ( Array . isArray ( i ) || ! i || typeof i !== 'object' || x === data . length - 1 ) return buildString ( i , buildState )
285+ return 'downgrade(' + buildString ( i , buildState ) + ')'
286+ } ) . join ( ' ?? ' ) } )`
287+ }
288+ return `(${ buildString ( data , buildState ) } ).reduce((a,b) => downgrade(a) ?? b, null)`
283289 } ,
284290 traverse : false
285291 } ,
0 commit comments