Erro de parser Esprima.ParserException

Boa noite!

Tenho a seguinte função em um script de entrada:

function run(bills) {
    let bills = JSON.parse(bills);
    formatedBills = formatBills(bills);
    return JSON.stringify({
        bills: bills.FaturasPendentes,
        count: bills.FaturasPendentes.length,
        text: bills.FaturasPendentes.length > 1 ? "faturas" : "fatura",
        isOverdueMoreThanLimit: isOverdueMoreThanLimit(formatedBills),
        billDueSoon: getDueSoonBill(formatedBills),
        billOverdue: getOverdueBill(formatedBills)
    });
}

o input bills é um JSON que vem de um requisição HTTP. O retorno dessa requisição é algo assim:

{
  "CodigoPessoa": 1111,
  "FaturasPendentes": [
    {
      "codfatura": 333333,
      "contas": "Conta: 222222 - Descrição: Ref.: Serviço ABC - Valor: 119.900000000000006",
      "contratos": "Contrato: 4444 - Plano: Premium - Adesão: 2020-07-30 - Tipo: 11",
      "data_vencimento": "15/11/2020",
      "descricao": "Faturamento 11/2020",
      "valor_total": 119.9
    }
  ],
  "Nome": "JOÃO DA SILVA",
  "status": "OK"
}

a função formatBills basicamente formata 4 campos dos objetos de FaturasPendentes desse JSON.

Até ontem a função estava funcionando sem problemas, porém hoje sem nenhuma mudança passou a apresentar o seguinte erro no debugger:

error: "Esprima.ParserException: Line 6: Unexpected token :
 at Esprima.JavaScriptParser.ThrowUnexpectedToken(Token token, String message)
 at Esprima.JavaScriptParser.ConsumeSemicolon()
 at Esprima.JavaScriptParser.ParseLabelledStatement()
 at Esprima.JavaScriptParser.ParseStatement()
 at Esprima.JavaScriptParser.ParseLabelledStatement()
 at Esprima.JavaScriptParser.ParseStatement()
 at Esprima.JavaScriptParser.ParseStatementListItem()
 at Esprima.JavaScriptParser.ParseFunctionSourceElements()
 at Esprima.JavaScriptParser.ParseAssignmentExpression()
 at Esprima.JavaScriptParser.IsolateCoverGrammar[T](Func`1 parseFunction)
 at Esprima.JavaScriptParser.ParseArguments()
 at Esprima.JavaScriptParser.ParseLeftHandSideExpressionAllowCall()
 at Esprima.JavaScriptParser.InheritCoverGrammar[T](Func`1 parseFunction)
 at Esprima.JavaScriptParser.ParseUpdateExpression()
 at Esprima.JavaScriptParser.ParseUnaryExpression()
 at Esprima.JavaScriptParser.InheritCoverGrammar[T](Func`1 parseFunction)
 at Esprima.JavaScriptParser.ParseExponentiationExpression()
 at Esprima.JavaScriptParser.InheritCoverGrammar[T](Func`1 parseFunction)
 at Esprima.JavaScriptParser.ParseBinaryExpression()
 at Esprima.JavaScriptParser.InheritCoverGrammar[T](Func`1 parseFunction)
 at Esprima.JavaScriptParser.ParseConditionalExpression()
 at Esprima.JavaScriptParser.ParseAssignmentExpression()
 at Esprima.JavaScriptParser.IsolateCoverGrammar[T](Func`1 parseFunction)
 at Esprima.JavaScriptParser.ParseExpression()
 at Esprima.JavaScriptParser.ParseReturnStatement()
 at Esprima.JavaScriptParser.ParseStatement()
 at Esprima.JavaScriptParser.ParseStatementListItem()
 at Esprima.JavaScriptParser.ParseFunctionSourceElements()
 at Esprima.JavaScriptParser.ParseFunctionDeclaration(Boolean identifierIsOptional)
 at Esprima.JavaScriptParser.ParseStatementListItem()
 at Esprima.JavaScriptParser.ParseScript(Boolean strict)
 at Jint.Engine.Execute(String source, ParserOptions parserOptions)
 at Jint.Engine.Execute(String source)
 at Take.Blip.Builder.Actions.ExecuteScript.ExecuteScriptAction.ExecuteAsync(IContext context, ExecuteScriptSettings settings, CancellationToken cancellationToken)
 at Takenet.Iris.Application.TemplateHosting.Templates.Builder.MetricsActionDecorator.ExecuteAsync(IContext context, JObject settings, CancellationToken cancellationToken) in C:\\TeamCity\\BuildAgent\\work\\945b69af0f6ee302\\src\\Applications\\Takenet.Iris.Application.TemplateHosting\\Templates\\Builder\\MetricsActionDecorator.cs:line 66
 at Takenet.Iris.Application.TemplateHosting.Templates.Builder.TracedActionDecorator.ExecuteAsync(IContext context, JObject settings, CancellationToken cancellationToken) in C:\\TeamCity\\BuildAgent\\work\\945b69af0f6ee302\\src\\Applications\\Takenet.Iris.Application.TemplateHosting\\Templates\\Builder\\TracedActionDecorator.cs:line 33
 at Take.Blip.Builder.FlowManager.ProcessActionsAsync(LazyInput lazyInput, IContext context, Action[] actions, ICollection`1 actionTraces, CancellationToken cancellationToken)"

Tentei mudar a função para isso:

function run(bills) {
    let bills = JSON.parse(bills);
    formatedBills = formatBills(bills);
    return JSON.stringify(formatedBills);
}

isso:

function run(bills) {
    let bills = JSON.parse(bills);
    return JSON.stringify(bills);
}

e até isso:

function run(bills) {
    return bills;
}

e todas apresentam o mesmo erro, mesmo não havendo nenhum tratamento.

Alguém já passou por algo parecido ou tem alguma ideia do que pode ser?

Obrigado!

[edit]: formatação do erro para substituir “\r\n” por quebras de linhas e melhorar a exibição.

Olá @Victor_Furtado_Leite como vai?

Cara, eu nunca vi esse erro. Você conseguiu avançar neste caso?

Oi Bruno! Estou bem e você?

Infelizmente não :frowning:

Pelo que entendi parece ser um erro interno do interpretador de JS do Blip, mas não faço ideia de como poderia debugar isso. Sabe dizer se pelo menos tem alguma forma de obter mais detalhes desse erro?

Estou passando por um problema parecido, não é exatamente o mesmo mas envolve o interpretador de JS do Blip, estou tentando fazer um try catch, o script deveria tentar realizar o JSON.parse mas se for uma string que não possui um JSON válido ele não cai no catch, simplesmente interrompe a execução parece,

Olá @Adriano_tsi !

Seu catch está sem argumento? Peguei esse problema uma vez e foi solucionado adicionando.

Ex:

try
{

}
catch
{

}

Foi solucionado passando argumento na exceção:

try
{

}
catch (e)
{

}

2 Curtidas

Opa @Arthur_Batista acabei esquecendo de postar por aqui, mas resolvi meu problema basicamente era isso mesmo e também em alguns casos quando o return estava sem JSON.stringfy, no fim era erro meu mesmo :sweat_smile:

2 Curtidas

Bom demais então. :smiley:

2 Curtidas