samchon / nestia

NestJS Helper Libraries + TypeScript OpenAPI generator
https://nestia.io/
MIT License
1.71k stars 87 forks source link

Nestia SDK not working with Monorepo or Thirdparty #923

Open DaiLoc5698 opened 2 weeks ago

DaiLoc5698 commented 2 weeks ago

Question

Hello!

I am encountering an issue with the Nestia SDK in my project setup. Here are the details:

Problem Description I am working on a Monorepo with multiple packages. I am facing an issue when reusing packages within my repo or when integrating external library packages. Specifically, the SDK fails to generate code for certain modules.

Code Snippets Here is a snippet of my AppModule:

import { Module } from '@nestjs/common';

// this in my repo
import { AuthModule } from '@fzap/auth-module';

import { CategoryModule } from './fandom/category.module';
import { FandomModule } from './fandom/fandom.module';
import { AccountModule } from './account/account.module';

// this from another library
import { NotificationModule } from '@dailoc.lq/notification-module';

@Module({
  imports: [
    AccountModule.forRoot({ dataSourceName: 'default' }),
    CategoryModule,
    FandomModule,
    NotificationModule.forRoot(),
    AuthModule
  ],
})
export class AppModule { }

Here is my configuration:

import type sdk from "@nestia/sdk";
import { NestFactory } from "@nestjs/core";
import { AppModule } from "./src/app.module";

const NESTIA_CONFIG: sdk.INestiaConfig = {
  input: () => NestFactory.create(AppModule),
  output: "src/api",
  distribute: "packages/api",
  primitive: false,
  simulate: true,
  assert: true
};
export default NESTIA_CONFIG;

Issue Details In this setup, the SDK fails to generate code for two specific modules: AuthModule (an internal package in the repo) and NotificationModule (an external library).

Upon investigation, I found the issue arises from the following code snippet in the NestiaSdkApplication.ts file:

const file: ts.SourceFile | undefined = program.getSourceFile(c.file);

// c.file => /user_path/.../fzap/node_modules/.pnpm/@dailoc.lq+notification-module@0.0.1_@nestjs+common@10.3.8_@nestjs+core@10.3.8_@nestjs+typeor_7ldrefmg7aejqjdg6hdcg25qvq/node_modules/@dailoc.lq/notification-module/dist/module/email/email-template/email-template.controller.js

It appears that the getSourceFile function is unable to retrieve the specified file, which prevents the SDK from generating the necessary code for these modules.

Could you please investigate this issue and provide guidance on how to resolve it? Any insights or potential fixes would be greatly appreciated.

Thank you!

samchon commented 2 weeks ago

Currently, to make monorepo SDK generation working, you should generate SDK library per each package.

If you want to make it advance, can you give me a reproducible repo?