fastify-cli icon indicating copy to clipboard operation
fastify-cli copied to clipboard

generate-swagger doesn't work with typescript code

Open smaant opened this issue 1 year ago • 6 comments

Prerequisites

  • [X] I have written a descriptive issue title
  • [X] I have searched existing issues to ensure the bug has not already been reported

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
  1. Run npm install

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

  3. In the src/app.ts add:

+ import swagger from '@fastify/swagger';

// [skipped]

const app: FastifyPluginAsync<AppOptions> = async (
    fastify,
    opts
): Promise<void> => {
  // Place here your custom code!
+  fastify.register(swagger, {});

// [skipped remaining]
  1. Try generating swagger:
$ fastify generate-swagger src/app.ts
  1. 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

smaant avatar Mar 27 '23 03:03 smaant

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

mcollina avatar Mar 27 '23 08:03 mcollina

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...

yazaldefilimone avatar May 01 '23 20:05 yazaldefilimone

Go for it!

mcollina avatar May 02 '23 18:05 mcollina

any updates here?

aehtatsirk avatar Jul 21 '23 12:07 aehtatsirk

@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

yazaldefilimone avatar Jul 21 '23 16:07 yazaldefilimone

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.

segevfiner avatar Sep 10 '23 23:09 segevfiner