@@ -11,6 +11,7 @@ import {
11
11
import asyncIterators from './async_iterators.js'
12
12
import { coerceArray } from './utilities/coerceArray.js'
13
13
import { countArguments } from './utilities/countArguments.js'
14
+ import { downgrade , precoerceNumber } from './utilities/downgrade.js'
14
15
15
16
/**
16
17
* Provides a simple way to compile logic into a function that can be run.
@@ -87,7 +88,7 @@ export function isDeterministic (method, engine, buildState) {
87
88
if ( lower === undefined ) return true
88
89
if ( ! engine . methods [ func ] ) throw new Error ( `Method '${ func } ' was not found in the Logic Engine.` )
89
90
90
- if ( engine . methods [ func ] . traverse === false ) {
91
+ if ( engine . methods [ func ] . lazy ) {
91
92
return typeof engine . methods [ func ] . deterministic === 'function'
92
93
? engine . methods [ func ] . deterministic ( lower , buildState )
93
94
: engine . methods [ func ] . deterministic
@@ -118,7 +119,7 @@ function isDeepSync (method, engine) {
118
119
const lower = method [ func ]
119
120
if ( ! isSync ( engine . methods [ func ] ) ) return false
120
121
121
- if ( engine . methods [ func ] . traverse === false ) {
122
+ if ( engine . methods [ func ] . lazy ) {
122
123
if ( typeof engine . methods [ func ] [ Sync ] === 'function' && engine . methods [ func ] [ Sync ] ( method , { engine } ) ) return true
123
124
return false
124
125
}
@@ -193,7 +194,7 @@ function buildString (method, buildState = {}) {
193
194
}
194
195
195
196
let lower = method [ func ]
196
- if ( ! lower || typeof lower !== 'object' ) lower = [ lower ]
197
+ if ( ( ! lower || typeof lower !== 'object' ) && ( ! engine . methods [ func ] . lazy ) ) lower = [ lower ]
197
198
198
199
if ( engine . methods [ func ] && engine . methods [ func ] . compile ) {
199
200
let str = engine . methods [ func ] . compile ( lower , buildState )
@@ -219,7 +220,7 @@ function buildString (method, buildState = {}) {
219
220
const argCount = countArguments ( asyncDetected ? engine . methods [ func ] . asyncMethod : engine . methods [ func ] . method )
220
221
const argumentsNeeded = argumentsDict [ argCount - 1 ] || argumentsDict [ 2 ]
221
222
222
- if ( engine . methods [ func ] && ( typeof engine . methods [ func ] . traverse === 'undefined' ? true : engine . methods [ func ] . traverse ) ) {
223
+ if ( engine . methods [ func ] && ! engine . methods [ func ] . lazy ) {
223
224
return makeAsync ( `engine.methods["${ func } "]${ asyncDetected ? '.asyncMethod' : '.method' } (${ coerce } (` + buildString ( lower , buildState ) + ')' + argumentsNeeded + ')' )
224
225
} else {
225
226
notTraversed . push ( lower )
@@ -307,12 +308,12 @@ function processBuiltString (method, str, buildState) {
307
308
str = str . replace ( `__%%%${ x } %%%__` , item )
308
309
} )
309
310
310
- const final = `(values, methods, notTraversed, asyncIterators, engine, above, coerceArray) => ${ buildState . asyncDetected ? 'async' : '' } (context ${ buildState . extraArguments ? ',' + buildState . extraArguments : '' } ) => { let prev; const result = ${ str } ; return result }`
311
+ const final = `(values, methods, notTraversed, asyncIterators, engine, above, coerceArray, downgrade, precoerceNumber ) => ${ buildState . asyncDetected ? 'async' : '' } (context ${ buildState . extraArguments ? ',' + buildState . extraArguments : '' } ) => { ${ str . includes ( 'prev' ) ? ' let prev;' : '' } const result = ${ str } ; return result }`
311
312
// console.log(str)
312
313
// console.log(final)
313
314
// eslint-disable-next-line no-eval
314
315
return Object . assign (
315
- ( typeof globalThis !== 'undefined' ? globalThis : global ) . eval ( final ) ( values , methods , notTraversed , asyncIterators , engine , above , coerceArray ) , {
316
+ ( typeof globalThis !== 'undefined' ? globalThis : global ) . eval ( final ) ( values , methods , notTraversed , asyncIterators , engine , above , coerceArray , downgrade , precoerceNumber ) , {
316
317
[ Sync ] : ! buildState . asyncDetected ,
317
318
aboveDetected : typeof str === 'string' && str . includes ( ', above' )
318
319
} )
0 commit comments