From 358885665e65b3b5a9ade4e31cb0696e84f9f1af Mon Sep 17 00:00:00 2001 From: Elizabeth Manrique Date: Thu, 2 May 2024 19:42:22 -0500 Subject: [PATCH 1/5] reuse function to generate keys --- src/createPrefetch.mts | 63 ++++++++++++------- src/createUseQuery.mts | 2 +- tests/__snapshots__/createSource.test.ts.snap | 10 +-- tests/__snapshots__/generate.test.ts.snap | 10 +-- 4 files changed, 52 insertions(+), 33 deletions(-) diff --git a/src/createPrefetch.mts b/src/createPrefetch.mts index 71266a2..948e374 100644 --- a/src/createPrefetch.mts +++ b/src/createPrefetch.mts @@ -4,12 +4,15 @@ import { BuildCommonTypeName, extractPropertiesFromObjectParam, getNameFromMethod, + queryKeyConstraint, + queryKeyGenericType, } from "./common.mjs"; import { type MethodDescription } from "./common.mjs"; import { createQueryKeyFromMethod, getRequestParamFromMethod, hookNameFromMethod, + getQueryKeyFnName, } from "./createUseQuery.mjs"; import { addJSDocToNode } from "./util.mjs"; @@ -42,7 +45,16 @@ function createPrefetchHook({ undefined, ts.factory.createArrowFunction( undefined, - undefined, + ts.factory.createNodeArray([ + ts.factory.createTypeParameterDeclaration( + undefined, + "TQueryKey", + queryKeyConstraint, + ts.factory.createArrayTypeNode( + ts.factory.createKeywordTypeNode(ts.SyntaxKind.UnknownKeyword) + ) + ), + ]), [ ts.factory.createParameterDeclaration( undefined, @@ -54,6 +66,13 @@ function createPrefetchHook({ ) ), ...requestParams, + ts.factory.createParameterDeclaration( + undefined, + undefined, + ts.factory.createIdentifier("queryKey"), + ts.factory.createToken(ts.SyntaxKind.QuestionToken), + queryKeyGenericType + ), ], undefined, ts.factory.createToken(ts.SyntaxKind.EqualsGreaterThanToken), @@ -64,28 +83,28 @@ function createPrefetchHook({ ts.factory.createObjectLiteralExpression([ ts.factory.createPropertyAssignment( ts.factory.createIdentifier("queryKey"), - ts.factory.createArrayLiteralExpression( - [ - BuildCommonTypeName(queryKey), - method.getParameters().length - ? ts.factory.createArrayLiteralExpression([ - ts.factory.createObjectLiteralExpression( - method - .getParameters() - .map((param) => - extractPropertiesFromObjectParam(param).map( - (p) => - ts.factory.createShorthandPropertyAssignment( - ts.factory.createIdentifier(p.name) - ) - ) + ts.factory.createCallExpression( + BuildCommonTypeName(getQueryKeyFnName(queryKey)), + undefined, + + method.getParameters().length + ? [ + ts.factory.createObjectLiteralExpression( + method + .getParameters() + .map((param) => + extractPropertiesFromObjectParam(param).map( + (p) => + ts.factory.createShorthandPropertyAssignment( + ts.factory.createIdentifier(p.name) + ) ) - .flat() - ), - ]) - : ts.factory.createArrayLiteralExpression([]), - ], - false + ) + .flat() + ), + ts.factory.createIdentifier("queryKey"), + ] + : [] ) ), ts.factory.createPropertyAssignment( diff --git a/src/createUseQuery.mts b/src/createUseQuery.mts index 34554a3..13f8e0b 100644 --- a/src/createUseQuery.mts +++ b/src/createUseQuery.mts @@ -466,7 +466,7 @@ export const createUseQuery = ({ }; }; -function getQueryKeyFnName(queryKey: string) { +export function getQueryKeyFnName(queryKey: string) { return `${capitalizeFirstLetter(queryKey)}Fn`; } diff --git a/tests/__snapshots__/createSource.test.ts.snap b/tests/__snapshots__/createSource.test.ts.snap index c482300..9bd59a2 100644 --- a/tests/__snapshots__/createSource.test.ts.snap +++ b/tests/__snapshots__/createSource.test.ts.snap @@ -180,17 +180,17 @@ import { Pet, NewPet, Error, $OpenApiTs } from "../requests/types.gen"; * @returns Error unexpected error * @throws ApiError */ -export const prefetchUseDefaultServiceFindPets = (queryClient: QueryClient, { limit, tags }: { +export const prefetchUseDefaultServiceFindPets = = unknown[]>(queryClient: QueryClient, { limit, tags }: { limit?: number; tags?: string[]; -} = {}) => queryClient.prefetchQuery({ queryKey: [Common.useDefaultServiceFindPetsKey, [{ limit, tags }]], queryFn: () => DefaultService.findPets({ limit, tags }) }); +} = {}, queryKey?: TQueryKey) => queryClient.prefetchQuery({ queryKey: Common.UseDefaultServiceFindPetsKeyFn({ limit, tags }, queryKey), queryFn: () => DefaultService.findPets({ limit, tags }) }); /** * @deprecated * This path is not fully defined. * @returns unknown unexpected error * @throws ApiError */ -export const prefetchUseDefaultServiceGetNotDefined = (queryClient: QueryClient) => queryClient.prefetchQuery({ queryKey: [Common.useDefaultServiceGetNotDefinedKey, []], queryFn: () => DefaultService.getNotDefined() }); +export const prefetchUseDefaultServiceGetNotDefined = = unknown[]>(queryClient: QueryClient, queryKey?: TQueryKey) => queryClient.prefetchQuery({ queryKey: Common.UseDefaultServiceGetNotDefinedKeyFn(), queryFn: () => DefaultService.getNotDefined() }); /** * Returns a user based on a single ID, if the user does not have access to the pet * @param data The data for the request. @@ -199,8 +199,8 @@ export const prefetchUseDefaultServiceGetNotDefined = (queryClient: QueryClient) * @returns Error unexpected error * @throws ApiError */ -export const prefetchUseDefaultServiceFindPetById = (queryClient: QueryClient, { id }: { +export const prefetchUseDefaultServiceFindPetById = = unknown[]>(queryClient: QueryClient, { id }: { id: number; -}) => queryClient.prefetchQuery({ queryKey: [Common.useDefaultServiceFindPetByIdKey, [{ id }]], queryFn: () => DefaultService.findPetById({ id }) }); +}, queryKey?: TQueryKey) => queryClient.prefetchQuery({ queryKey: Common.UseDefaultServiceFindPetByIdKeyFn({ id }, queryKey), queryFn: () => DefaultService.findPetById({ id }) }); " `; diff --git a/tests/__snapshots__/generate.test.ts.snap b/tests/__snapshots__/generate.test.ts.snap index d08bee3..e42f11d 100644 --- a/tests/__snapshots__/generate.test.ts.snap +++ b/tests/__snapshots__/generate.test.ts.snap @@ -54,17 +54,17 @@ import * as Common from "./common"; * @returns Error unexpected error * @throws ApiError */ -export const prefetchUseDefaultServiceFindPets = (queryClient: QueryClient, { limit, tags }: { +export const prefetchUseDefaultServiceFindPets = = unknown[]>(queryClient: QueryClient, { limit, tags }: { limit?: number; tags?: string[]; -} = {}) => queryClient.prefetchQuery({ queryKey: [Common.useDefaultServiceFindPetsKey, [{ limit, tags }]], queryFn: () => DefaultService.findPets({ limit, tags }) }); +} = {}, queryKey?: TQueryKey) => queryClient.prefetchQuery({ queryKey: Common.UseDefaultServiceFindPetsKeyFn({ limit, tags }, queryKey), queryFn: () => DefaultService.findPets({ limit, tags }) }); /** * @deprecated * This path is not fully defined. * @returns unknown unexpected error * @throws ApiError */ -export const prefetchUseDefaultServiceGetNotDefined = (queryClient: QueryClient) => queryClient.prefetchQuery({ queryKey: [Common.useDefaultServiceGetNotDefinedKey, []], queryFn: () => DefaultService.getNotDefined() }); +export const prefetchUseDefaultServiceGetNotDefined = = unknown[]>(queryClient: QueryClient, queryKey?: TQueryKey) => queryClient.prefetchQuery({ queryKey: Common.UseDefaultServiceGetNotDefinedKeyFn(), queryFn: () => DefaultService.getNotDefined() }); /** * Returns a user based on a single ID, if the user does not have access to the pet * @param data The data for the request. @@ -73,9 +73,9 @@ export const prefetchUseDefaultServiceGetNotDefined = (queryClient: QueryClient) * @returns Error unexpected error * @throws ApiError */ -export const prefetchUseDefaultServiceFindPetById = (queryClient: QueryClient, { id }: { +export const prefetchUseDefaultServiceFindPetById = = unknown[]>(queryClient: QueryClient, { id }: { id: number; -}) => queryClient.prefetchQuery({ queryKey: [Common.useDefaultServiceFindPetByIdKey, [{ id }]], queryFn: () => DefaultService.findPetById({ id }) }); +}, queryKey?: TQueryKey) => queryClient.prefetchQuery({ queryKey: Common.UseDefaultServiceFindPetByIdKeyFn({ id }, queryKey), queryFn: () => DefaultService.findPetById({ id }) }); " `; From 9b0af8b3b23e3776dee26be1a8c90f933960346c Mon Sep 17 00:00:00 2001 From: Urata Daiki <7nohe@users.noreply.github.com> Date: Sun, 26 May 2024 10:17:32 +0900 Subject: [PATCH 2/5] chore: Remove queryKey parameter from prefetch queries --- src/createPrefetch.mts | 65 +++++++------------ tests/__snapshots__/createSource.test.ts.snap | 10 +-- tests/__snapshots__/generate.test.ts.snap | 10 +-- 3 files changed, 33 insertions(+), 52 deletions(-) diff --git a/src/createPrefetch.mts b/src/createPrefetch.mts index 789fd06..51488de 100644 --- a/src/createPrefetch.mts +++ b/src/createPrefetch.mts @@ -47,18 +47,7 @@ function createPrefetchHook({ undefined, ts.factory.createArrowFunction( undefined, - ts.factory.createNodeArray([ - ts.factory.createTypeParameterDeclaration( - undefined, - "TQueryKey", - queryKeyConstraint, - ts.factory.createArrayTypeNode( - ts.factory.createKeywordTypeNode( - ts.SyntaxKind.UnknownKeyword, - ), - ), - ), - ]), + undefined, [ ts.factory.createParameterDeclaration( undefined, @@ -66,17 +55,10 @@ function createPrefetchHook({ "queryClient", undefined, ts.factory.createTypeReferenceNode( - ts.factory.createIdentifier("QueryClient"), - ), + ts.factory.createIdentifier("QueryClient") + ) ), ...requestParams, - ts.factory.createParameterDeclaration( - undefined, - undefined, - ts.factory.createIdentifier("queryKey"), - ts.factory.createToken(ts.SyntaxKind.QuestionToken), - queryKeyGenericType, - ), ], undefined, ts.factory.createToken(ts.SyntaxKind.EqualsGreaterThanToken), @@ -100,15 +82,14 @@ function createPrefetchHook({ extractPropertiesFromObjectParam(param).map( (p) => ts.factory.createShorthandPropertyAssignment( - ts.factory.createIdentifier(p.name), - ), - ), - ), + ts.factory.createIdentifier(p.name) + ) + ) + ) ), - ts.factory.createIdentifier("queryKey"), ] - : [], - ), + : [] + ) ), ts.factory.createPropertyAssignment( ts.factory.createIdentifier("queryFn"), @@ -118,12 +99,12 @@ function createPrefetchHook({ [], undefined, ts.factory.createToken( - ts.SyntaxKind.EqualsGreaterThanToken, + ts.SyntaxKind.EqualsGreaterThanToken ), ts.factory.createCallExpression( ts.factory.createPropertyAccessExpression( ts.factory.createIdentifier(className), - ts.factory.createIdentifier(methodName), + ts.factory.createIdentifier(methodName) ), undefined, method.getParameters().length @@ -135,24 +116,24 @@ function createPrefetchHook({ extractPropertiesFromObjectParam(param).map( (p) => ts.factory.createShorthandPropertyAssignment( - ts.factory.createIdentifier(p.name), - ), - ), - ), + ts.factory.createIdentifier(p.name) + ) + ) + ) ), ] - : undefined, - ), - ), + : undefined + ) + ) ), ]), - ], - ), - ), + ] + ) + ) ), ], - ts.NodeFlags.Const, - ), + ts.NodeFlags.Const + ) ); return hookExport; } diff --git a/tests/__snapshots__/createSource.test.ts.snap b/tests/__snapshots__/createSource.test.ts.snap index 0cdab8b..165b3b4 100644 --- a/tests/__snapshots__/createSource.test.ts.snap +++ b/tests/__snapshots__/createSource.test.ts.snap @@ -180,17 +180,17 @@ import { Pet, NewPet, Error, FindPetsData, FindPetsResponse, AddPetData, AddPetR * @returns Error unexpected error * @throws ApiError */ -export const prefetchUseDefaultServiceFindPets = = unknown[]>(queryClient: QueryClient, { limit, tags }: { +export const prefetchUseDefaultServiceFindPets = (queryClient: QueryClient, { limit, tags }: { limit?: number; tags?: string[]; -} = {}, queryKey?: TQueryKey) => queryClient.prefetchQuery({ queryKey: Common.UseDefaultServiceFindPetsKeyFn({ limit, tags }, queryKey), queryFn: () => DefaultService.findPets({ limit, tags }) }); +} = {}) => queryClient.prefetchQuery({ queryKey: Common.UseDefaultServiceFindPetsKeyFn({ limit, tags }), queryFn: () => DefaultService.findPets({ limit, tags }) }); /** * @deprecated * This path is not fully defined. * @returns unknown unexpected error * @throws ApiError */ -export const prefetchUseDefaultServiceGetNotDefined = = unknown[]>(queryClient: QueryClient, queryKey?: TQueryKey) => queryClient.prefetchQuery({ queryKey: Common.UseDefaultServiceGetNotDefinedKeyFn(), queryFn: () => DefaultService.getNotDefined() }); +export const prefetchUseDefaultServiceGetNotDefined = (queryClient: QueryClient) => queryClient.prefetchQuery({ queryKey: Common.UseDefaultServiceGetNotDefinedKeyFn(), queryFn: () => DefaultService.getNotDefined() }); /** * Returns a user based on a single ID, if the user does not have access to the pet * @param data The data for the request. @@ -199,8 +199,8 @@ export const prefetchUseDefaultServiceGetNotDefined = = unknown[]>(queryClient: QueryClient, { id }: { +export const prefetchUseDefaultServiceFindPetById = (queryClient: QueryClient, { id }: { id: number; -}, queryKey?: TQueryKey) => queryClient.prefetchQuery({ queryKey: Common.UseDefaultServiceFindPetByIdKeyFn({ id }, queryKey), queryFn: () => DefaultService.findPetById({ id }) }); +}) => queryClient.prefetchQuery({ queryKey: Common.UseDefaultServiceFindPetByIdKeyFn({ id }), queryFn: () => DefaultService.findPetById({ id }) }); " `; diff --git a/tests/__snapshots__/generate.test.ts.snap b/tests/__snapshots__/generate.test.ts.snap index 2a7aed9..53ace37 100644 --- a/tests/__snapshots__/generate.test.ts.snap +++ b/tests/__snapshots__/generate.test.ts.snap @@ -55,17 +55,17 @@ import * as Common from "./common"; * @returns Error unexpected error * @throws ApiError */ -export const prefetchUseDefaultServiceFindPets = = unknown[]>(queryClient: QueryClient, { limit, tags }: { +export const prefetchUseDefaultServiceFindPets = (queryClient: QueryClient, { limit, tags }: { limit?: number; tags?: string[]; -} = {}, queryKey?: TQueryKey) => queryClient.prefetchQuery({ queryKey: Common.UseDefaultServiceFindPetsKeyFn({ limit, tags }, queryKey), queryFn: () => DefaultService.findPets({ limit, tags }) }); +} = {}) => queryClient.prefetchQuery({ queryKey: Common.UseDefaultServiceFindPetsKeyFn({ limit, tags }), queryFn: () => DefaultService.findPets({ limit, tags }) }); /** * @deprecated * This path is not fully defined. * @returns unknown unexpected error * @throws ApiError */ -export const prefetchUseDefaultServiceGetNotDefined = = unknown[]>(queryClient: QueryClient, queryKey?: TQueryKey) => queryClient.prefetchQuery({ queryKey: Common.UseDefaultServiceGetNotDefinedKeyFn(), queryFn: () => DefaultService.getNotDefined() }); +export const prefetchUseDefaultServiceGetNotDefined = (queryClient: QueryClient) => queryClient.prefetchQuery({ queryKey: Common.UseDefaultServiceGetNotDefinedKeyFn(), queryFn: () => DefaultService.getNotDefined() }); /** * Returns a user based on a single ID, if the user does not have access to the pet * @param data The data for the request. @@ -74,9 +74,9 @@ export const prefetchUseDefaultServiceGetNotDefined = = unknown[]>(queryClient: QueryClient, { id }: { +export const prefetchUseDefaultServiceFindPetById = (queryClient: QueryClient, { id }: { id: number; -}, queryKey?: TQueryKey) => queryClient.prefetchQuery({ queryKey: Common.UseDefaultServiceFindPetByIdKeyFn({ id }, queryKey), queryFn: () => DefaultService.findPetById({ id }) }); +}) => queryClient.prefetchQuery({ queryKey: Common.UseDefaultServiceFindPetByIdKeyFn({ id }), queryFn: () => DefaultService.findPetById({ id }) }); " `; From 7e6d53d6cd3a3dc46d248c4a993270740d7afe9b Mon Sep 17 00:00:00 2001 From: Urata Daiki <7nohe@users.noreply.github.com> Date: Sun, 26 May 2024 10:19:46 +0900 Subject: [PATCH 3/5] chore: Format code --- src/createPrefetch.mts | 44 +++++++++++++++++++++--------------------- 1 file changed, 22 insertions(+), 22 deletions(-) diff --git a/src/createPrefetch.mts b/src/createPrefetch.mts index 51488de..0d4e0ed 100644 --- a/src/createPrefetch.mts +++ b/src/createPrefetch.mts @@ -55,8 +55,8 @@ function createPrefetchHook({ "queryClient", undefined, ts.factory.createTypeReferenceNode( - ts.factory.createIdentifier("QueryClient") - ) + ts.factory.createIdentifier("QueryClient"), + ), ), ...requestParams, ], @@ -82,14 +82,14 @@ function createPrefetchHook({ extractPropertiesFromObjectParam(param).map( (p) => ts.factory.createShorthandPropertyAssignment( - ts.factory.createIdentifier(p.name) - ) - ) - ) + ts.factory.createIdentifier(p.name), + ), + ), + ), ), ] - : [] - ) + : [], + ), ), ts.factory.createPropertyAssignment( ts.factory.createIdentifier("queryFn"), @@ -99,12 +99,12 @@ function createPrefetchHook({ [], undefined, ts.factory.createToken( - ts.SyntaxKind.EqualsGreaterThanToken + ts.SyntaxKind.EqualsGreaterThanToken, ), ts.factory.createCallExpression( ts.factory.createPropertyAccessExpression( ts.factory.createIdentifier(className), - ts.factory.createIdentifier(methodName) + ts.factory.createIdentifier(methodName), ), undefined, method.getParameters().length @@ -116,24 +116,24 @@ function createPrefetchHook({ extractPropertiesFromObjectParam(param).map( (p) => ts.factory.createShorthandPropertyAssignment( - ts.factory.createIdentifier(p.name) - ) - ) - ) + ts.factory.createIdentifier(p.name), + ), + ), + ), ), ] - : undefined - ) - ) + : undefined, + ), + ), ), ]), - ] - ) - ) + ], + ), + ), ), ], - ts.NodeFlags.Const - ) + ts.NodeFlags.Const, + ), ); return hookExport; } From b46eff7164f50204fe7e3bda4de4a89d280b9274 Mon Sep 17 00:00:00 2001 From: Urata Daiki <7nohe@users.noreply.github.com> Date: Sun, 26 May 2024 10:21:45 +0900 Subject: [PATCH 4/5] chore: Remove unused imports --- src/createPrefetch.mts | 46 ++++++++++++++++++++---------------------- 1 file changed, 22 insertions(+), 24 deletions(-) diff --git a/src/createPrefetch.mts b/src/createPrefetch.mts index 0d4e0ed..9b01c16 100644 --- a/src/createPrefetch.mts +++ b/src/createPrefetch.mts @@ -4,8 +4,6 @@ import { BuildCommonTypeName, extractPropertiesFromObjectParam, getNameFromMethod, - queryKeyConstraint, - queryKeyGenericType, } from "./common.mjs"; import type { MethodDescription } from "./common.mjs"; import { @@ -55,8 +53,8 @@ function createPrefetchHook({ "queryClient", undefined, ts.factory.createTypeReferenceNode( - ts.factory.createIdentifier("QueryClient"), - ), + ts.factory.createIdentifier("QueryClient") + ) ), ...requestParams, ], @@ -82,14 +80,14 @@ function createPrefetchHook({ extractPropertiesFromObjectParam(param).map( (p) => ts.factory.createShorthandPropertyAssignment( - ts.factory.createIdentifier(p.name), - ), - ), - ), + ts.factory.createIdentifier(p.name) + ) + ) + ) ), ] - : [], - ), + : [] + ) ), ts.factory.createPropertyAssignment( ts.factory.createIdentifier("queryFn"), @@ -99,12 +97,12 @@ function createPrefetchHook({ [], undefined, ts.factory.createToken( - ts.SyntaxKind.EqualsGreaterThanToken, + ts.SyntaxKind.EqualsGreaterThanToken ), ts.factory.createCallExpression( ts.factory.createPropertyAccessExpression( ts.factory.createIdentifier(className), - ts.factory.createIdentifier(methodName), + ts.factory.createIdentifier(methodName) ), undefined, method.getParameters().length @@ -116,24 +114,24 @@ function createPrefetchHook({ extractPropertiesFromObjectParam(param).map( (p) => ts.factory.createShorthandPropertyAssignment( - ts.factory.createIdentifier(p.name), - ), - ), - ), + ts.factory.createIdentifier(p.name) + ) + ) + ) ), ] - : undefined, - ), - ), + : undefined + ) + ) ), ]), - ], - ), - ), + ] + ) + ) ), ], - ts.NodeFlags.Const, - ), + ts.NodeFlags.Const + ) ); return hookExport; } From 58668d2b0fa40e9e18a8c781297967e70b814583 Mon Sep 17 00:00:00 2001 From: Urata Daiki <7nohe@users.noreply.github.com> Date: Sun, 26 May 2024 10:24:59 +0900 Subject: [PATCH 5/5] chore: Format code --- src/createPrefetch.mts | 44 +++++++++++++++++++++--------------------- 1 file changed, 22 insertions(+), 22 deletions(-) diff --git a/src/createPrefetch.mts b/src/createPrefetch.mts index 9b01c16..d098289 100644 --- a/src/createPrefetch.mts +++ b/src/createPrefetch.mts @@ -53,8 +53,8 @@ function createPrefetchHook({ "queryClient", undefined, ts.factory.createTypeReferenceNode( - ts.factory.createIdentifier("QueryClient") - ) + ts.factory.createIdentifier("QueryClient"), + ), ), ...requestParams, ], @@ -80,14 +80,14 @@ function createPrefetchHook({ extractPropertiesFromObjectParam(param).map( (p) => ts.factory.createShorthandPropertyAssignment( - ts.factory.createIdentifier(p.name) - ) - ) - ) + ts.factory.createIdentifier(p.name), + ), + ), + ), ), ] - : [] - ) + : [], + ), ), ts.factory.createPropertyAssignment( ts.factory.createIdentifier("queryFn"), @@ -97,12 +97,12 @@ function createPrefetchHook({ [], undefined, ts.factory.createToken( - ts.SyntaxKind.EqualsGreaterThanToken + ts.SyntaxKind.EqualsGreaterThanToken, ), ts.factory.createCallExpression( ts.factory.createPropertyAccessExpression( ts.factory.createIdentifier(className), - ts.factory.createIdentifier(methodName) + ts.factory.createIdentifier(methodName), ), undefined, method.getParameters().length @@ -114,24 +114,24 @@ function createPrefetchHook({ extractPropertiesFromObjectParam(param).map( (p) => ts.factory.createShorthandPropertyAssignment( - ts.factory.createIdentifier(p.name) - ) - ) - ) + ts.factory.createIdentifier(p.name), + ), + ), + ), ), ] - : undefined - ) - ) + : undefined, + ), + ), ), ]), - ] - ) - ) + ], + ), + ), ), ], - ts.NodeFlags.Const - ) + ts.NodeFlags.Const, + ), ); return hookExport; }