@@ -148,7 +148,7 @@ describe('VariableResolver function block inputs', () => {
148148 )
149149
150150 expect ( result . resolvedInputs . code ) . toBe (
151- 'const base64 = await sim.files.readBase64(globalThis["__blockRef_0"]);\nreturn base64'
151+ 'const base64 = ( await sim.files.readBase64(globalThis["__blockRef_0"]) );\nreturn base64'
152152 )
153153 expect ( result . displayInputs . code ) . toBe ( 'const base64 = <Producer.file.base64>;\nreturn base64' )
154154 expect ( result . contextVariables . __blockRef_0 ) . toMatchObject ( {
@@ -158,6 +158,21 @@ describe('VariableResolver function block inputs', () => {
158158 expect ( result . contextVariables . __blockRef_0 ) . not . toHaveProperty ( 'base64' )
159159 } )
160160
161+ it ( 'wraps lazy JavaScript file base64 reads before member access' , async ( ) => {
162+ const { block, ctx, resolver } = createResolver ( 'javascript' )
163+
164+ const result = await resolver . resolveInputsForFunctionBlock (
165+ ctx ,
166+ 'function' ,
167+ { code : 'return <Producer.file.base64>.length' } ,
168+ block
169+ )
170+
171+ expect ( result . resolvedInputs . code ) . toBe (
172+ 'return (await sim.files.readBase64(globalThis["__blockRef_0"])).length'
173+ )
174+ } )
175+
161176 it ( 'uses existing inline base64 for keyless files instead of lazy storage reads' , async ( ) => {
162177 const { block, ctx, resolver } = createResolver ( 'javascript' )
163178 const state = new ExecutionState ( )
@@ -231,7 +246,7 @@ describe('VariableResolver function block inputs', () => {
231246 )
232247
233248 expect ( result . resolvedInputs . code ) . toBe (
234- 'return await sim.values.read(globalThis["__blockRef_0"])'
249+ 'return ( await sim.values.read(globalThis["__blockRef_0"]) )'
235250 )
236251 expect ( result . contextVariables . __blockRef_0 ) . toMatchObject ( {
237252 __simLargeValueRef : true ,
0 commit comments