Skip to content

Commit

Permalink
feat(core): allow null permalink in frontmatter to disable permalink (#…
Browse files Browse the repository at this point in the history
…1547)

Co-authored-by: Xinyu Liu <meteor.lxy@foxmail.com>
  • Loading branch information
Mister-Hope and meteorlxy committed Apr 21, 2024
1 parent d584ee3 commit becebb2
Show file tree
Hide file tree
Showing 3 changed files with 29 additions and 24 deletions.
36 changes: 13 additions & 23 deletions packages/core/src/page/resolvePagePermalink.ts
Expand Up @@ -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
}

Expand All @@ -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
}
15 changes: 15 additions & 0 deletions packages/core/tests/page/resolvePagePermalink.spec.ts
Expand Up @@ -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,
Expand Down
2 changes: 1 addition & 1 deletion packages/shared/src/types/page.ts
Expand Up @@ -62,7 +62,7 @@ export type PageFrontmatter<
head?: HeadConfig[]
lang?: string
layout?: string
permalink?: string
permalink?: string | null
permalinkPattern?: string | null
routeMeta?: Record<string, unknown>
title?: string
Expand Down

0 comments on commit becebb2

Please sign in to comment.