From a60f4be34acc20c9ec3a0111f02f8d9d1f874cbb Mon Sep 17 00:00:00 2001 From: Angelo Ashmore Date: Mon, 6 Dec 2021 12:18:14 -1000 Subject: [PATCH] fix: support documents without `slugs` in `documentToLinkField` --- src/documentToLinkField.ts | 7 ++++++- test/documentToLinkField.test.ts | 22 ++++++++++++++++++++++ 2 files changed, 28 insertions(+), 1 deletion(-) diff --git a/src/documentToLinkField.ts b/src/documentToLinkField.ts index 4dcb383..f809f5e 100644 --- a/src/documentToLinkField.ts +++ b/src/documentToLinkField.ts @@ -4,6 +4,9 @@ import { PrismicDocument, } from "@prismicio/types"; +type SetOptional = Omit & + Partial>; + /** * Converts a document into a link field, this is useful when crawling the API * for document links @@ -14,7 +17,9 @@ import { * @returns The equivalent link field to use with `asLink()` * @internal */ -export const documentToLinkField = ( +export const documentToLinkField = < + TDocument extends SetOptional, +>( prismicDocument: TDocument, ): FilledLinkToDocumentField< TDocument["type"], diff --git a/test/documentToLinkField.test.ts b/test/documentToLinkField.test.ts index 5bbbf4e..2016255 100644 --- a/test/documentToLinkField.test.ts +++ b/test/documentToLinkField.test.ts @@ -65,3 +65,25 @@ test("returns equivalent link field from given document with non-empty data", (t data: { foo: "bar" }, }); }); + +// This test checks support for Gatsby users. The `slugs` field is not +// queriable in Gatsby since it is deprecated. +// Deprecation info: https://community.prismic.io/t/what-are-slugs/6493 +test("supports documents without slugs field", (t) => { + const document = { + ...documentFixture.empty, + url: null, + slugs: undefined, + }; + + t.deepEqual(documentToLinkField(document), { + link_type: LinkType.Document, + id: "XvoFFREAAM0WGBng", + uid: "test", + type: "page", + tags: [], + lang: "en-us", + url: undefined, + slug: undefined, + }); +});