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  ];