Skip to content

Commit f6ec3d6

Browse files
committed
Add optimization to and/or that was previously making me hesitant to switch to compatible: true
1 parent 1c77b90 commit f6ec3d6

File tree

1 file changed

+18
-2
lines changed

1 file changed

+18
-2
lines changed

defaultMethods.js

Lines changed: 18 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -277,7 +277,15 @@ const defaultMethods = {
277277
},
278278
deterministic: (data, buildState) => isDeterministic(data, buildState.engine, buildState),
279279
compile: (data, buildState) => {
280-
if (!buildState.engine.truthy[OriginalImpl]) return false
280+
if (!buildState.engine.truthy[OriginalImpl]) {
281+
let res = buildState.compile``
282+
if (Array.isArray(data) && data.length) {
283+
for (let i = 0; i < data.length; i++) res = buildState.compile`${res} engine.truthy(prev = ${data[i]}) ? prev : `
284+
res = buildState.compile`${res} prev`
285+
return res
286+
}
287+
return false
288+
}
281289
if (Array.isArray(data) && data.length) return `(${data.map((i) => buildString(i, buildState)).join(' || ')})`
282290
return `(${buildString(data, buildState)}).reduce((a,b) => a||b, false)`
283291
},
@@ -314,7 +322,15 @@ const defaultMethods = {
314322
traverse: false,
315323
deterministic: (data, buildState) => isDeterministic(data, buildState.engine, buildState),
316324
compile: (data, buildState) => {
317-
if (!buildState.engine.truthy[OriginalImpl]) return false
325+
if (!buildState.engine.truthy[OriginalImpl]) {
326+
let res = buildState.compile``
327+
if (Array.isArray(data) && data.length) {
328+
for (let i = 0; i < data.length; i++) res = buildState.compile`${res} !engine.truthy(prev = ${data[i]}) ? prev : `
329+
res = buildState.compile`${res} prev`
330+
return res
331+
}
332+
return false
333+
}
318334
if (Array.isArray(data) && data.length) return `(${data.map((i) => buildString(i, buildState)).join(' && ')})`
319335
return `(${buildString(data, buildState)}).reduce((a,b) => a&&b, true)`
320336
}

0 commit comments

Comments
 (0)