Skip to content
Closed
Show file tree
Hide file tree
Changes from 2 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
24 changes: 13 additions & 11 deletions packages/core/src/transformers/MethodTransformer.ts
Original file line number Diff line number Diff line change
Expand Up @@ -78,20 +78,22 @@ const get_escaped_type =
const escape_promise =
(checker: ts.TypeChecker) =>
(type: ts.Type): ts.Type => {
const generic: readonly ts.Type[] = checker.getTypeArguments(
type as ts.TypeReference,
);
if (generic.length !== 1)
throw new Error(
"Error on ImportAnalyzer.analyze(): invalid promise type.",
try {
const generic: readonly ts.Type[] = checker.getTypeArguments(
type as ts.TypeReference,
);
return generic[0]!;
if (!generic?.length) return type;
return generic[0] ?? type;
Comment thread
wildduck2 marked this conversation as resolved.
} catch {
return type;
}
};

const get_name = (symbol: ts.Symbol): string =>
explore_name(symbol.getDeclarations()![0]!.parent)(
symbol.escapedName.toString(),
);
const get_name = (symbol: ts.Symbol): string => {
const parent: ts.Node | undefined = symbol.getDeclarations()?.[0]?.parent;
const name: string = symbol.escapedName?.toString() ?? "";
return parent ? explore_name(parent)(name) : name;
};

const explore_name =
(decl: ts.Node) =>
Expand Down
1 change: 1 addition & 0 deletions tests/test-sdk/.gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@ features/*/src/test/features/api/automated

features/clone*/src/api/structures
features/clone-type-create-duplicate/sdk
features/method-transformer-defensive/src/api/structures
features/configurations/src/api/bbs
features/configurations/src/api/common
features/configurations/*.swagger.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
import { INestiaConfig } from "@nestia/sdk";

export const NESTIA_CONFIG: INestiaConfig = {
input: ["src/controllers"],
output: "src/api",
clone: true,
swagger: {
output: "swagger.json",
},
};
export default NESTIA_CONFIG;
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
import { TypedRoute } from "@nestia/core";
import { Controller } from "@nestjs/common";

@Controller("import-type")
export class ImportTypeController {
@TypedRoute.Get("envelope")
public envelope(): IEnvelope<IGreeting> {
return { message: "ok", data: { greeting: "hello" } };
}

@TypedRoute.Get("alias")
public alias(): AliasEnvelope<IGreeting> {
return { message: "ok", data: { greeting: "hello" } };
}

@TypedRoute.Get<
import("./ImportTypeController").IEnvelope<
import("./ImportTypeController").IGreeting
>
>("decorator-generic")
public decoratorGeneric(): AliasEnvelope<IGreeting> {
return { message: "ok", data: { greeting: "hello" } };
}
}

export interface IEnvelope<T> {
message: string;
data: T | null;
}

export interface IGreeting {
greeting: string;
}

type AliasEnvelope<T> = IEnvelope<T>;
Original file line number Diff line number Diff line change
@@ -0,0 +1,42 @@
import { TypedRoute } from "@nestia/core";
import { Controller } from "@nestjs/common";

@Controller("inline-return")
export class InlineReturnController {
@TypedRoute.Get("anonymous")
public anonymous(): Promise<{ foo: string; bar?: number }> {
return Promise.resolve({ foo: "ok" });
}

@TypedRoute.Get("intersection")
public intersection(): Promise<IX & IY> {

Check warning on line 12 in tests/test-sdk/features/method-transformer-defensive/src/controllers/InlineReturnController.ts

View workflow job for this annotation

GitHub Actions / spell-check

"IY" should be "IT".
return Promise.resolve({ x: 1, y: "hi" });
}

@TypedRoute.Get("return-type")
public returnType(): Promise<ReturnType<typeof getItem>> {
return Promise.resolve(getItem());
}

@TypedRoute.Get("inferred")
public inferred(): Promise<InferReturn<() => IItem>> {
return Promise.resolve({ id: 1, label: "item" });
}
}

interface IX {
x: number;
}
interface IY {

Check warning on line 30 in tests/test-sdk/features/method-transformer-defensive/src/controllers/InlineReturnController.ts

View workflow job for this annotation

GitHub Actions / spell-check

"IY" should be "IT".
y: string;
}
interface IItem {
id: number;
label: string;
}

type InferReturn<T> = T extends (...args: any[]) => infer R ? R : never;

function getItem(): IItem {
return { id: 1, label: "item" };
}
10 changes: 10 additions & 0 deletions tests/test-sdk/features/method-transformer-defensive/tsconfig.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
{
"extends": "../../config/tsconfig.json",
"compilerOptions": {
"paths": {
"@api": ["./src/api"],
"@api/lib/*": ["./src/api/*"],
},
},
"include": ["src"],
}
Loading