fastify / fastify-cli

Run a Fastify application with one command!
MIT License
658 stars 167 forks source link

generate-swagger doesn't work with typescript code #608

Open smaant opened 1 year ago

smaant commented 1 year ago

Prerequisites

Fastify version

4.15.0

Plugin version

No response

Node.js version

v19.7.0

Operating system

macOS

Operating system version (i.e. 20.04, 11.3, 10)

Monterey (12.5.1)

Description

I'm trying to generate swagger using fastify-cli for a Typescript project and getting an error SyntaxError: Cannot use import statement outside a module.

Steps to Reproduce

  1. Create a new Fastify project from template:

    $ fastify generate --lang=ts test-project
  2. Run npm install

  3. Add @fastify/swagger - npm install @fastify/swagger

  4. In the src/app.ts add:

    
    + import swagger from '@fastify/swagger';

// [skipped]

const app: FastifyPluginAsync = async ( fastify, opts ): Promise => { // Place here your custom code!

// [skipped remaining]


6. Try generating swagger:

$ fastify generate-swagger src/app.ts


7. Observe the error

import { join } from 'path'; ^^^^^^

SyntaxError: Cannot use import statement outside a module at internalCompileFunction (node:internal/vm:73:18) at wrapSafe (node:internal/modules/cjs/loader:1195:20) at Module._compile (node:internal/modules/cjs/loader:1239:27) at Module._extensions..js (node:internal/modules/cjs/loader:1329:10) at Module.load (node:internal/modules/cjs/loader:1133:32) at Module._load (node:internal/modules/cjs/loader:972:12) at Module.require (node:internal/modules/cjs/loader:1157:19) at require (node:internal/modules/helpers:119:18) at requireServerPluginFromPath (/Users/anton/.nvm/versions/node/v19.7.0/lib/node_modules/fastify-cli/util.js:79:20) at async runFastify (/Users/anton/.nvm/versions/node/v19.7.0/lib/node_modules/fastify-cli/generate-swagger.js:60:12)



### Expected Behavior

_No response_
mcollina commented 1 year ago

Thanks for reporting! Would you like to send a Pull Request to address this issue? Remember to add unit tests.

yazaldefilimone commented 1 year ago

Thanks for reporting! Would you like to send a Pull Request to address this issue? Remember to add unit tests.

I would like try it...

mcollina commented 1 year ago

Go for it!

aehtatsirk commented 1 year ago

any updates here?

yazaldefilimone commented 1 year ago

@mcollina @aehtatsirk @smaant I am very sorry for the delay, I ended up feeling discouraged and sad for not knowing how to do it at the time, but after receiving the email for this comment, I put my brain to work and solved this #641 I hope I helped

segevfiner commented 1 year ago

Personally. I just called generate-swagger with the compiled js file. Like how you use fastify start with the compiled JS file. fastify-cli itself has no native TypeScript support so needs a separate build step. It will need to integrate ts-node or preferably tsx, which has far less problems than ts-node for this, which is a separate feature IMHO.