nestia icon indicating copy to clipboard operation
nestia copied to clipboard

Nestia SDK not working with Monorepo or Thirdparty

Open DaiLoc5698 opened this issue 1 year ago • 2 comments

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/@[email protected]_@[email protected]_@[email protected]_@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!

DaiLoc5698 avatar Jun 19 '24 13:06 DaiLoc5698

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?

samchon avatar Jun 20 '24 03:06 samchon

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

DavidVaness avatar Oct 08 '24 09:10 DavidVaness

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.

samchon avatar Dec 02 '24 18:12 samchon