@@ -8,6 +8,7 @@ import { build, buildString } from './compiler.js'
8
8
import chainingSupported from './utilities/chainingSupported.js'
9
9
import InvalidControlInput from './errors/InvalidControlInput.js'
10
10
import legacyMethods from './legacy.js'
11
+ import { downgrade } from './utilities/downgrade.js'
11
12
12
13
function isDeterministic ( method , engine , buildState ) {
13
14
if ( Array . isArray ( method ) ) {
@@ -255,7 +256,7 @@ const defaultMethods = {
255
256
let item
256
257
for ( let i = 0 ; i < arr . length ; i ++ ) {
257
258
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
259
260
}
260
261
261
262
if ( item === undefined ) return null
@@ -269,7 +270,7 @@ const defaultMethods = {
269
270
let item
270
271
for ( let i = 0 ; i < arr . length ; i ++ ) {
271
272
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
273
274
}
274
275
275
276
if ( item === undefined ) return null
@@ -278,8 +279,13 @@ const defaultMethods = {
278
279
deterministic : ( data , buildState ) => isDeterministic ( data , buildState . engine , buildState ) ,
279
280
compile : ( data , buildState ) => {
280
281
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)`
283
289
} ,
284
290
traverse : false
285
291
} ,
0 commit comments