samchon / nestia

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

Nestia SDK not working with Monorepo or Thirdparty #923

Closed DaiLoc5698 closed 5 hours ago

DaiLoc5698 commented 5 months 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 5 months 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?

DavidVaness commented 1 month 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?

We use Nestia in a PNPM monorepo and generate the sdk as a package. Works without issues

samchon commented 5 hours 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?

We use Nestia in a PNPM monorepo and generate the sdk as a package. Works without issues

I think it is the monorepo composed with multiple NestJS sub repositories.

No way to build integrated SDK in such circumstance.

Just build multiple SDK libraries and merge them into one by yourself please.