Swagger-codegen: TypeScript code generation fails in 3.0.0 branch

Created on 6 Jan 2018  路  20Comments  路  Source: swagger-api/swagger-codegen

Description

Code genration fails with following Exception

Exception in thread "Thread-1" java.lang.RuntimeException: Could not generate model 'BrowseList'
at io.swagger.codegen.DefaultGenerator.generateModels(DefaultGenerator.java:409)
at io.swagger.codegen.DefaultGenerator.generate(DefaultGenerator.java:721)
at io.swagger.codegen.cmd.Generate.run(Generate.java:290)
at java.lang.Thread.run(java.base@9-internal/Thread.java:804)
Caused by: com.github.jknack.handlebars.HandlebarsException: /typescript-angular/modelGeneric.mustache:18:78: found: '-last', expected: 'no viable alternative at input '{{^-last''
export type {{enumName}} = {{#allowableValues}}{{#enumVars}}{{{value}}}{{^-last}} | {{/-last}}{{/enumVars}}{{/allowableValues}};

Swagger-codegen version

v 3
git commit which seems to cause trouble: eab9c72a42b65ed2b2bef2bdddf9c6bc9761f8dc

Swagger declaration file content or url

I can't see how my yaml trigger the bug

here's an excerpt

  schemas:
    BrowseList:
      type: object
      required:
        - page
        - pages
        - limit
        - total
      properties:
        page:
          type: integer
        pages:
          type: integer
        limit:
          type: integer
        total:
          type: integer
    Client:
      type: object
      required:
        - company_name
      properties:
        id:
          type: integer
        name:
          type: string
    Clients:
      type: object
      allOf:
        - $ref: '#/components/schemas/BrowseList'
        - properties:
            items:
              type: array
              items:
                $ref: '#/components/schemas/Client'

I tried to remove all enums from the yaml which made no difference

Command line used for generation

java -jar swagger-codegen-cli-3.0.0-20180106.033640-15.jar generate -i api.yaml -l typescript-angular -o ./client

Suggest a fix/enhancement

git commit which seems to cause trouble: eab9c72a42b65ed2b2bef2bdddf9c6bc9761f8dc

TypeScript Bug

Most helpful comment

use this parameter --template-engine mustache

All 20 comments

To me it seems the yaml is not the problem. I tried with a stripped down file and the problem persists:

openapi: 3.0.0
servers:
  - url: 'http://127.0.0.1:8080/api/v1'
info:
  version: 1.0.0
  title: Test
securityDefinitions:
  BearerAuth:
    type: apiKey
    in: header
    name: BearerAuth
paths:
  /users:
    get:
      responses:
        '200':
          content:
            application/json:
              schema:
                type: object
                properties:
                  value:
                    type: array
                    items:
                      $ref: '#/components/schemas/User'
components:
  schemas:
    User:
      type: object
      properties:
        id:
          type: integer
        username:
          type: string

@canadaduane thanks for reporting the issue.

cc @HugoMario

@canadaduane , right now, we're only focus on java and inflector languages, from next week we're going to start updating templates for other languages.

I think you mean @colorcube ?

@canadaduane sorry I incorrectly tagged you. Please ignore.

Any update on this? Is it a good idea to try to fix this, or is someone currently working on it?

It's always a good idea to try to fix it.

any updates on this issue ?

@LPCmedia , there is an implementation for typescript-angular on codegen 3.0.0, feel free to try it when you have a chance.

I tried the branch @HugoMario but the issue is that none of the security headers are being set.

I'm still getting the same issue with generating Java with v3.

found: '-last', expected: 'no viable alternative at input '{{^-last''
    {{{name}}}({{{value}}}){{^-last}},{{/-last}}{{#-last}};{{/-last}}

@dankling I got that error when I attempted to use swagger-codegen v3 with templates copied from https://github.com/swagger-api/swagger-codegen/tree/master/modules/swagger-codegen/src/main/resources/ instead you should use templates copied from https://github.com/swagger-api/swagger-codegen-generators/tree/master/src/main/resources

@buckett template from swagger-codegen-generators produce the same error:

Exception in thread "Thread-1" java.lang.RuntimeException: Could not generate model 'AdvBanner'
    at io.swagger.codegen.v3.DefaultGenerator.generateModels(DefaultGenerator.java:405)
    at io.swagger.codegen.v3.DefaultGenerator.generate(DefaultGenerator.java:719)
    at io.swagger.codegen.v3.cli.cmd.Generate.run(Generate.java:342)
    at java.lang.Thread.run(Thread.java:745)
Caused by: com.github.jknack.handlebars.HandlebarsException: /Users/.../typescript-angular/modelGenericEnums.mustache:6:78: found: '-last', expected: 'no viable alternative at input '{{^-last''
    export type {{enumName}} = {{#allowableValues}}{{#enumVars}}{{{value}}}{{^-last}} | {{/-last}}{{/enumVars}}{{/allowableValues}};
                                                                              ^
    at com.github.jknack.handlebars.internal.HbsErrorReporter.syntaxError(HbsErrorReporter.java:93)
    at org.antlr.v4.runtime.ProxyErrorListener.syntaxError(ProxyErrorListener.java:65)

@glebmachine
Grab the template from https://github.com/swagger-api/swagger-codegen-generators/tree/master/src/main/resources/handlebars/ instead of https://github.com/swagger-api/swagger-codegen-generators/tree/master/src/main/resources/mustache/. I ran into this same problem this morning and found that the handlebars parser doesn't like the -last notation, it prefers @last (among other things).

@bonehead06 Thanks!

use this parameter --template-engine mustache

@plathub thanks but how do you set this parameter when you use swagger-codegen-maven-plugin

hi, @straumat. the -last issue was already solve, can you try with recent releases?

Hi @HugoMario , i tried with

<groupId>io.swagger.codegen.v3</groupId>
<artifactId>swagger-codegen-maven-plugin</artifactId>
<version>3.0.13</version>

and i still have the error

"EDIT:"
resolved with

use this parameter --template-engine mustache
https://github.com/swagger-api/swagger-codegen/issues/7330#issuecomment-450925645


i still have the error

java -jar swagger-codegen-cli-3.0.23.jar generate -i psd2-api_1.3.8-2020-11-18v1.yaml --lang jaxrs-cxf --template-dir .\cxfTemplate3 --output .\generated\cxfTemplate3.0.23

"psd2-api_1.3.8-2020-11-18v1.yaml" from "https://www.berlin-group.org/nextgenpsd2-downloads"

".\cxfTemplate3" is "https://github.com/swagger-api/swagger-codegen/tree/master/modules/swagger-codegen/src/main/resources/JavaJaxRS/cxf"

Error:
Exception in thread "Thread-1" java.lang.RuntimeException: Could not generate model 'accountAccess' at io.swagger.codegen.v3.DefaultGenerator.generateModels(DefaultGenerator.java:451) at io.swagger.codegen.v3.DefaultGenerator.generate(DefaultGenerator.java:779) at io.swagger.codegen.v3.cli.cmd.Generate.run(Generate.java:378) at java.lang.Thread.run(Unknown Source) Caused by: com.github.jknack.handlebars.HandlebarsException: C:/generator/./cxfTemplate3/pojo.mustache:14:28: found: '-last', expected: 'no viable alternative at input '{{^-last'' { {{#vars}}"{{name}}"{{^-last}}, {{/-last}}{{/vars}} ^ at com.github.jknack.handlebars.internal.HbsErrorReporter.syntaxError(HbsErrorReporter.java:93) at com.github.jknack.handlebars.internal.antlr.ProxyErrorListener.syntaxError(ProxyErrorListener.java:41) at com.github.jknack.handlebars.internal.antlr.Parser.notifyErrorListeners(Parser.java:544) at com.github.jknack.handlebars.internal.antlr.DefaultErrorStrategy.reportNoViableAlternative(DefaultErrorStrategy.java:310) at com.github.jknack.handlebars.internal.HbsErrorStrategy.reportNoViableAlternative(HbsErrorStrategy.java:166) at com.github.jknack.handlebars.internal.antlr.DefaultErrorStrategy.reportError(DefaultErrorStrategy.java:136) at com.github.jknack.handlebars.internal.HbsParser.elseBlock(HbsParser.java:982) at com.github.jknack.handlebars.internal.HbsParser.block(HbsParser.java:681) at com.github.jknack.handlebars.internal.HbsParser.statement(HbsParser.java:337) at com.github.jknack.handlebars.internal.HbsParser.body(HbsParser.java:222) at com.github.jknack.handlebars.internal.HbsParser.block(HbsParser.java:673) at com.github.jknack.handlebars.internal.HbsParser.statement(HbsParser.java:337) at com.github.jknack.handlebars.internal.HbsParser.body(HbsParser.java:222) at com.github.jknack.handlebars.internal.HbsParser.block(HbsParser.java:673) at com.github.jknack.handlebars.internal.HbsParser.statement(HbsParser.java:337) at com.github.jknack.handlebars.internal.HbsParser.body(HbsParser.java:222) at com.github.jknack.handlebars.internal.HbsParser.template(HbsParser.java:165) at com.github.jknack.handlebars.internal.HbsParserFactory$1.parse(HbsParserFactory.java:86) at com.github.jknack.handlebars.cache.NullTemplateCache.get(NullTemplateCache.java:54) at com.github.jknack.handlebars.Handlebars.compile(Handlebars.java:513) at com.github.jknack.handlebars.Handlebars.compile(Handlebars.java:490) at com.github.jknack.handlebars.internal.Partial.merge(Partial.java:214) at com.github.jknack.handlebars.internal.BaseTemplate.apply(BaseTemplate.java:130) at com.github.jknack.handlebars.internal.TemplateList.merge(TemplateList.java:95) at com.github.jknack.handlebars.internal.BaseTemplate.apply(BaseTemplate.java:130) at com.github.jknack.handlebars.internal.BaseTemplate.apply(BaseTemplate.java:118) at com.github.jknack.handlebars.Options.apply(Options.java:538) at com.github.jknack.handlebars.Options.fn(Options.java:433) at com.github.jknack.handlebars.helper.UnlessHelper.apply(UnlessHelper.java:50) at com.github.jknack.handlebars.internal.Block.merge(Block.java:211) at com.github.jknack.handlebars.internal.BaseTemplate.apply(BaseTemplate.java:130) at com.github.jknack.handlebars.internal.TemplateList.merge(TemplateList.java:95) at com.github.jknack.handlebars.internal.BaseTemplate.apply(BaseTemplate.java:130) at com.github.jknack.handlebars.internal.BaseTemplate.apply(BaseTemplate.java:118) at com.github.jknack.handlebars.Options.apply(Options.java:538) at com.github.jknack.handlebars.Options.fn(Options.java:445) at com.github.jknack.handlebars.helper.WithHelper.apply(WithHelper.java:58) at com.github.jknack.handlebars.internal.Block.merge(Block.java:211) at com.github.jknack.handlebars.internal.BaseTemplate.apply(BaseTemplate.java:130) at com.github.jknack.handlebars.internal.TemplateList.merge(TemplateList.java:95) at com.github.jknack.handlebars.internal.BaseTemplate.apply(BaseTemplate.java:130) at com.github.jknack.handlebars.internal.BaseTemplate.apply(BaseTemplate.java:118) at com.github.jknack.handlebars.Options.apply(Options.java:538) at com.github.jknack.handlebars.helper.EachHelper.apply(EachHelper.java:73) at com.github.jknack.handlebars.internal.Block.merge(Block.java:211) at com.github.jknack.handlebars.internal.BaseTemplate.apply(BaseTemplate.java:130) at com.github.jknack.handlebars.internal.TemplateList.merge(TemplateList.java:95) at com.github.jknack.handlebars.internal.BaseTemplate.apply(BaseTemplate.java:130) at com.github.jknack.handlebars.internal.BaseTemplate.apply(BaseTemplate.java:118) at com.github.jknack.handlebars.internal.ForwardingTemplate.apply(ForwardingTemplate.java:72) at io.swagger.codegen.v3.templates.HandlebarTemplateEngine.getRendered(HandlebarTemplateEngine.java:26) at io.swagger.codegen.v3.DefaultGenerator.processTemplateToFile(DefaultGenerator.java:795) at io.swagger.codegen.v3.DefaultGenerator.generateModels(DefaultGenerator.java:438) ... 3 more

Was this page helpful?
0 / 5 - 0 ratings