diff --git a/packages/core/src/page/resolvePagePermalink.ts b/packages/core/src/page/resolvePagePermalink.ts index de62e61681..6a549085f2 100644 --- a/packages/core/src/page/resolvePagePermalink.ts +++ b/packages/core/src/page/resolvePagePermalink.ts @@ -20,14 +20,23 @@ export const resolvePagePermalink = ({ pathInferred: string | null pathLocale: string }): string | null => { - // use permalink in frontmatter directly + // frontmatter.permalink has the highest priority + if (frontmatter.permalink === null) { + return null + } if (isString(frontmatter.permalink)) { return frontmatter.permalink } - // get permalink pattern - const permalinkPattern = getPermalinkPattern({ app, frontmatter }) - if (permalinkPattern === null) { + // frontmatter.permalinkPattern has higher priority than app.options.permalinkPattern + if (frontmatter.permalinkPattern === null) { + return null + } + + const permalinkPattern = + frontmatter.permalinkPattern || app.options.permalinkPattern + + if (!isString(permalinkPattern)) { return null } @@ -45,22 +54,3 @@ export const resolvePagePermalink = ({ return ensureLeadingSlash(link) } - -/** - * Get permalink pattern from frontmatter or app options - */ -const getPermalinkPattern = ({ - app, - frontmatter, -}: { - app: App - frontmatter: PageFrontmatter -}): string | null => { - if (frontmatter.permalinkPattern === null) { - return null - } - if (isString(frontmatter.permalinkPattern)) { - return frontmatter.permalinkPattern - } - return app.options.permalinkPattern -} diff --git a/packages/core/tests/page/resolvePagePermalink.spec.ts b/packages/core/tests/page/resolvePagePermalink.spec.ts index 46f8d27d70..341d98c005 100644 --- a/packages/core/tests/page/resolvePagePermalink.spec.ts +++ b/packages/core/tests/page/resolvePagePermalink.spec.ts @@ -36,6 +36,21 @@ describe('core > page > resolvePagePermalink', () => { expect(resolved).toBe('/frontmatter') }) + it('should return null', () => { + const resolved = resolvePagePermalink({ + app: appWithPermalinkPattern, + frontmatter: { + permalink: null, + }, + slug: '', + date: '', + pathInferred: '/inferred', + pathLocale: '', + }) + + expect(resolved).toBe(null) + }) + it('should use permalinkPattern in frontmatter', () => { const resolved = resolvePagePermalink({ app, diff --git a/packages/shared/src/types/page.ts b/packages/shared/src/types/page.ts index f05a83ad2c..404d00d826 100644 --- a/packages/shared/src/types/page.ts +++ b/packages/shared/src/types/page.ts @@ -62,7 +62,7 @@ export type PageFrontmatter< head?: HeadConfig[] lang?: string layout?: string - permalink?: string + permalink?: string | null permalinkPattern?: string | null routeMeta?: Record title?: string