From b86e3d0cf4f382e351d187a6fd19a6321096e0af Mon Sep 17 00:00:00 2001 From: Sindre Gulseth Date: Tue, 20 Aug 2024 12:10:25 +0200 Subject: [PATCH] fix(typegen): find queries imported with defineQuery from next-sanity (#7391) --- .../__tests__/findQueriesInSource.test.ts | 25 +++++++++++++++++++ .../src/typescript/findQueriesInSource.ts | 4 ++- 2 files changed, 28 insertions(+), 1 deletion(-) diff --git a/packages/@sanity/codegen/src/typescript/__tests__/findQueriesInSource.test.ts b/packages/@sanity/codegen/src/typescript/__tests__/findQueriesInSource.test.ts index f146044bb73..bd77c2f3047 100644 --- a/packages/@sanity/codegen/src/typescript/__tests__/findQueriesInSource.test.ts +++ b/packages/@sanity/codegen/src/typescript/__tests__/findQueriesInSource.test.ts @@ -363,4 +363,29 @@ describe('findQueries with defineQuery', () => { const queries = findQueriesInSource(source, __filename, undefined) expect(queries.length).toBe(0) }) + + test('can import from next-sanity', () => { + const source = ` + import { defineQuery } from "next-sanity"; + const postQuery = defineQuery("*[_type == 'author']"); + const res = sanity.fetch(postQuery); + ` + + const queries = findQueriesInSource(source, 'test.ts') + expect(queries.length).toBe(1) + const queryResult = queries[0] + + expect(queryResult?.result).toEqual("*[_type == 'author']") + }) + + test('wont import from other package names', () => { + const source = ` + import { defineQuery } from "other"; + const postQuery = defineQuery("*[_type == 'author']"); + const res = sanity.fetch(postQuery); + ` + + const queries = findQueriesInSource(source, 'test.ts') + expect(queries.length).toBe(0) + }) }) diff --git a/packages/@sanity/codegen/src/typescript/findQueriesInSource.ts b/packages/@sanity/codegen/src/typescript/findQueriesInSource.ts index b7648c0ad75..784b2d47370 100644 --- a/packages/@sanity/codegen/src/typescript/findQueriesInSource.ts +++ b/packages/@sanity/codegen/src/typescript/findQueriesInSource.ts @@ -13,6 +13,7 @@ const require = createRequire(__filename) const groqTagName = 'groq' const defineQueryFunctionName = 'defineQuery' const groqModuleName = 'groq' +const nextSanityModuleName = 'next-sanity' const ignoreValue = '@sanity-typegen-ignore' @@ -52,7 +53,8 @@ export function findQueriesInSource( // Look for strings wrapped in a defineQuery function call const isDefineQueryCall = babelTypes.isCallExpression(init) && - isImportFrom(groqModuleName, defineQueryFunctionName, scope, init.callee) + (isImportFrom(groqModuleName, defineQueryFunctionName, scope, init.callee) || + isImportFrom(nextSanityModuleName, defineQueryFunctionName, scope, init.callee)) if (babelTypes.isIdentifier(node.id) && (isGroqTemplateTag || isDefineQueryCall)) { // If we find a comment leading the decleration which macthes with ignoreValue we don't add