github.com/hyperledger/burrow@v0.34.5-0.20220512172541-77f09336001d/js/src/solts/lib/caller.ts (about) 1 import * as ts from 'typescript'; 2 import { factory } from 'typescript'; 3 import { Provider } from './provider'; 4 import { 5 AsyncToken, 6 BooleanType, 7 ColonToken, 8 createCall, 9 createParameter, 10 declareConstant, 11 ExportToken, 12 MaybeUint8ArrayType, 13 PromiseType, 14 QuestionToken, 15 StringType, 16 Uint8ArrayType, 17 } from './syntax'; 18 19 export const defaultCallName = factory.createIdentifier('defaultCall'); 20 export const callerTypeName = factory.createIdentifier('Caller'); 21 22 export function createCallerFunction(provider: Provider): ts.FunctionDeclaration { 23 const output = factory.createIdentifier('Output'); 24 const client = factory.createIdentifier('client'); 25 const payload = factory.createIdentifier('payload'); 26 const returnData = factory.createIdentifier('returnData'); 27 const data = factory.createIdentifier('data'); 28 const isSim = factory.createIdentifier('isSim'); 29 const callback = factory.createIdentifier('callback'); 30 const addr = factory.createIdentifier('addr'); 31 32 return factory.createFunctionDeclaration( 33 undefined, 34 [ExportToken, AsyncToken], 35 undefined, 36 defaultCallName, 37 [factory.createTypeParameterDeclaration(output)], 38 [ 39 createParameter(client, provider.type()), 40 createParameter(addr, StringType), 41 createParameter(data, Uint8ArrayType), 42 createParameter(isSim, BooleanType), 43 createParameter( 44 callback, 45 factory.createFunctionTypeNode( 46 undefined, 47 [createParameter(returnData, MaybeUint8ArrayType)], 48 factory.createTypeReferenceNode(output, undefined), 49 ), 50 ), 51 ], 52 factory.createTypeReferenceNode(PromiseType, [factory.createTypeReferenceNode(output, undefined)]), 53 factory.createBlock( 54 [ 55 declareConstant( 56 returnData, 57 factory.createAwaitExpression( 58 factory.createConditionalExpression( 59 isSim, 60 QuestionToken, 61 provider.methods.callSim.call(client, data, addr), 62 ColonToken, 63 provider.methods.call.call(client, data, addr), 64 ), 65 ), 66 ), 67 factory.createReturnStatement(createCall(callback, [returnData])), 68 ], 69 true, 70 ), 71 ); 72 } 73 74 export const callerTypes: ts.TypeAliasDeclaration[] = [ 75 factory.createTypeAliasDeclaration( 76 undefined, 77 [ExportToken], 78 callerTypeName, 79 undefined, 80 factory.createTypeQueryNode(defaultCallName), 81 ), 82 ];