From 47ba27955b6930e1342137ac0fad528105aeaa43 Mon Sep 17 00:00:00 2001 From: Francisco Moretti Date: Tue, 18 Apr 2023 08:14:08 +0100 Subject: [PATCH 1/5] created a plugin for frontmatter --- src/config/default.docunotion.config.ts | 4 + src/plugins/FronmatterTransformer.spec.ts | 153 ++++++++++++++++++++++ src/plugins/FronmatterTransformer.ts | 20 +++ src/plugins/pluginTypes.ts | 5 + src/transform.ts | 19 +-- 5 files changed, 193 insertions(+), 8 deletions(-) create mode 100644 src/plugins/FronmatterTransformer.spec.ts create mode 100644 src/plugins/FronmatterTransformer.ts diff --git a/src/config/default.docunotion.config.ts b/src/config/default.docunotion.config.ts index ee3dad4..bf63a0e 100644 --- a/src/config/default.docunotion.config.ts +++ b/src/config/default.docunotion.config.ts @@ -15,6 +15,7 @@ import { standardNumberedListTransformer } from "../plugins/NumberedListTransfor import { standardTableTransformer } from "../plugins/TableTransformer"; import { standardExternalLinkConversion } from "../plugins/externalLinks"; import { IDocuNotionConfig } from "./configuration"; +import { standardFrontmatterTransformer } from "../plugins/FronmatterTransformer"; const defaultConfig: IDocuNotionConfig = { plugins: [ @@ -35,6 +36,9 @@ const defaultConfig: IDocuNotionConfig = { standardInternalLinkConversion, standardExternalLinkConversion, + // Frontmatter transformers, add information to the page frontmatter + standardFrontmatterTransformer, + // Regexps plus javascript `import`s that operate on the Markdown output imgurGifEmbed, gifEmbed, diff --git a/src/plugins/FronmatterTransformer.spec.ts b/src/plugins/FronmatterTransformer.spec.ts new file mode 100644 index 0000000..5b92e46 --- /dev/null +++ b/src/plugins/FronmatterTransformer.spec.ts @@ -0,0 +1,153 @@ +import { GetPageResponse } from "@notionhq/client/build/src/api-endpoints"; +import { NotionPage } from "../NotionPage"; +import { standardFrontmatterTransformer } from "./FronmatterTransformer"; + +let getFrontMatter = standardFrontmatterTransformer.frontmatterTransform + ?.build as (page: NotionPage) => string; + +const sampleMetadata: GetPageResponse = { + object: "page", + id: "6e6921b9-b1f5-4614-ab3c-bf1a73358a1f", + created_time: "2023-04-11T10:17:00.000Z", + last_edited_time: "2023-04-13T20:24:00.000Z", + created_by: { + object: "user", + id: "USERID", + }, + last_edited_by: { + object: "user", + id: "USERID", + }, + cover: null, + icon: { + type: "file", + file: { + url: "https:/dummy_URL", + expiry_time: "2023-04-15T11:50:20.461Z", + }, + }, + parent: { + type: "workspace", + workspace: true, + }, + archived: false, + properties: { + title: { + id: "title", + type: "title", + title: [ + { + type: "text", + text: { + content: "Foo", + link: null, + }, + annotations: { + bold: false, + italic: false, + strikethrough: false, + underline: false, + code: false, + color: "default", + }, + plain_text: "Foo", + href: null, + }, + { + type: "text", + text: { + content: "Bar", + link: null, + }, + annotations: { + bold: false, + italic: false, + strikethrough: false, + underline: false, + code: false, + color: "default", + }, + plain_text: "Bar", + href: null, + }, + ], + }, + Keywords: { + id: "keywords", + type: "rich_text", + rich_text: [ + { + type: "text", + text: { + content: "Foo, Bar", + link: null, + }, + annotations: { + bold: false, + italic: false, + strikethrough: false, + underline: false, + code: false, + color: "default", + }, + plain_text: "Foo, Bar", + href: null, + }, + ], + }, + date_property: { + id: "a%3Cql", + type: "date", + date: { + start: "2021-10-24", + end: "2021-10-28", + time_zone: null, + }, + }, + }, + url: "https://www.notion.so/Site-docu-notion-PAGEID", +}; + +describe("getFrontMatter", () => { + let page: NotionPage; + + beforeEach(() => { + page = new NotionPage({ + layoutContext: "Test Context", + pageId: "123", + order: 1, + metadata: JSON.parse(JSON.stringify(sampleMetadata)), + foundDirectlyInOutline: true, + }); + }); + + it("should generate frontmatter with all available properties", () => { + const expectedFrontmatter = `title: FooBar\nsidebar_position: 1\nslug: /123\nkeywords: [Foo, Bar]\n`; + (page.metadata as any).properties.Keywords.rich_text[0].plain_text = + "Foo, Bar"; + + const result = getFrontMatter(page); + + expect(result).toEqual(expectedFrontmatter); + }); + + // "title: Foo-Barsidebar_position: 1slug: keywords: [Foo, Bar]" + // "title: FooBar\nsidebar_position: 1\nslug: /123\n" + it("should generate frontmatter with no keywords", () => { + const expectedFrontmatter = `title: FooBar\nsidebar_position: 1\nslug: /123\n`; + (page.metadata as any).properties.Keywords = undefined; + + const result = getFrontMatter(page); + + expect(result).toEqual(expectedFrontmatter); + }); + + it("should replace colons with dashes in the title", () => { + const expectedFrontmatter = `title: FooBaz-\nsidebar_position: 1\nslug: /123\nkeywords: [Foo, Bar]\n`; + (page.metadata as any).properties.title.title[1].plain_text = "Baz:"; + + const result = getFrontMatter(page); + + expect(result).toEqual(expectedFrontmatter); + }); +}); diff --git a/src/plugins/FronmatterTransformer.ts b/src/plugins/FronmatterTransformer.ts new file mode 100644 index 0000000..4a4965c --- /dev/null +++ b/src/plugins/FronmatterTransformer.ts @@ -0,0 +1,20 @@ +import { IPlugin } from "./pluginTypes"; +import { NotionPage } from "../NotionPage"; + +function getFrontmatter(page: NotionPage): string { + let frontmatter = ""; + frontmatter += `title: ${page.nameOrTitle.replaceAll(":", "-")}\n`; // I have not found a way to escape colons + frontmatter += `sidebar_position: ${page.order}\n`; + frontmatter += `slug: ${page.slug ?? ""}\n`; + if (page.keywords) frontmatter += `keywords: [${page.keywords}]\n`; + + return frontmatter; +} + +export const standardFrontmatterTransformer: IPlugin = { + name: "standardFrontmatterTransformer", + + frontmatterTransform: { + build: getFrontmatter, + }, +}; diff --git a/src/plugins/pluginTypes.ts b/src/plugins/pluginTypes.ts index 7c3eb5c..ca688c8 100644 --- a/src/plugins/pluginTypes.ts +++ b/src/plugins/pluginTypes.ts @@ -35,6 +35,11 @@ export type IPlugin = { // simple regex replacements on the markdown output regexMarkdownModifications?: IRegexMarkdownModification[]; + // operations on pages to define the markdown's frontmatter + frontmatterTransform?: { + build: (page: NotionPage) => string; + }; + // Allow a plugin to perform an async operation at the start of docu-notion. // Notice that the plugin itself is given, so you can add things to it. init?(plugin: IPlugin): Promise; diff --git a/src/transform.ts b/src/transform.ts index 7a8f232..42b7705 100644 --- a/src/transform.ts +++ b/src/transform.ts @@ -30,7 +30,7 @@ export async function getMarkdownForPage( logDebugFn("markdown from page", () => JSON.stringify(blocks, null, 2)); const body = await getMarkdownFromNotionBlocks(context, config, blocks); - const frontmatter = getFrontMatter(page); // todo should be a plugin + const frontmatter = getMarkdownFrontMatter(config, page); return `${frontmatter}\n${body}`; } @@ -252,14 +252,17 @@ function registerNotionToMarkdownCustomTransforms( }); } -// enhance:make this built-in plugin so that it can be overridden -function getFrontMatter(page: NotionPage): string { +function getMarkdownFrontMatter( + config: IDocuNotionConfig, + page: NotionPage +): string { let frontmatter = "---\n"; - frontmatter += `title: ${page.nameOrTitle.replaceAll(":", "-")}\n`; // I have not found a way to escape colons - frontmatter += `sidebar_position: ${page.order}\n`; - frontmatter += `slug: ${page.slug ?? ""}\n`; - if (page.keywords) frontmatter += `keywords: [${page.keywords}]\n`; - + config.plugins.forEach(plugin => { + if (plugin.frontmatterTransform) { + logDebug("transforming page with plugin", plugin.name); + frontmatter += plugin.frontmatterTransform?.build(page); + } + }); frontmatter += "---\n"; return frontmatter; } From c643f23294cddd8ff5b0bc5be05710831360f7b4 Mon Sep 17 00:00:00 2001 From: Francisco Moretti Date: Thu, 20 Apr 2023 08:27:55 +0100 Subject: [PATCH 2/5] replaced frontmatter with frontMatter in variables --- src/config/default.docunotion.config.ts | 2 +- src/plugins/FronmatterTransformer.spec.ts | 6 +++--- src/plugins/FronmatterTransformer.ts | 14 +++++++------- src/plugins/pluginTestRun.ts | 2 +- src/plugins/pluginTypes.ts | 4 ++-- src/transform.ts | 14 +++++++------- 6 files changed, 21 insertions(+), 21 deletions(-) diff --git a/src/config/default.docunotion.config.ts b/src/config/default.docunotion.config.ts index bf63a0e..66046d0 100644 --- a/src/config/default.docunotion.config.ts +++ b/src/config/default.docunotion.config.ts @@ -36,7 +36,7 @@ const defaultConfig: IDocuNotionConfig = { standardInternalLinkConversion, standardExternalLinkConversion, - // Frontmatter transformers, add information to the page frontmatter + // Frontmatter transformers, add information to the page frontMatter standardFrontmatterTransformer, // Regexps plus javascript `import`s that operate on the Markdown output diff --git a/src/plugins/FronmatterTransformer.spec.ts b/src/plugins/FronmatterTransformer.spec.ts index 5b92e46..9ebfbe0 100644 --- a/src/plugins/FronmatterTransformer.spec.ts +++ b/src/plugins/FronmatterTransformer.spec.ts @@ -2,7 +2,7 @@ import { GetPageResponse } from "@notionhq/client/build/src/api-endpoints"; import { NotionPage } from "../NotionPage"; import { standardFrontmatterTransformer } from "./FronmatterTransformer"; -let getFrontMatter = standardFrontmatterTransformer.frontmatterTransform +let getFrontMatter = standardFrontmatterTransformer.frontMatterTransform ?.build as (page: NotionPage) => string; const sampleMetadata: GetPageResponse = { @@ -121,7 +121,7 @@ describe("getFrontMatter", () => { }); }); - it("should generate frontmatter with all available properties", () => { + it("should generate frontMatter with all available properties", () => { const expectedFrontmatter = `title: FooBar\nsidebar_position: 1\nslug: /123\nkeywords: [Foo, Bar]\n`; (page.metadata as any).properties.Keywords.rich_text[0].plain_text = "Foo, Bar"; @@ -133,7 +133,7 @@ describe("getFrontMatter", () => { // "title: Foo-Barsidebar_position: 1slug: keywords: [Foo, Bar]" // "title: FooBar\nsidebar_position: 1\nslug: /123\n" - it("should generate frontmatter with no keywords", () => { + it("should generate frontMatter with no keywords", () => { const expectedFrontmatter = `title: FooBar\nsidebar_position: 1\nslug: /123\n`; (page.metadata as any).properties.Keywords = undefined; diff --git a/src/plugins/FronmatterTransformer.ts b/src/plugins/FronmatterTransformer.ts index 4a4965c..b4c7489 100644 --- a/src/plugins/FronmatterTransformer.ts +++ b/src/plugins/FronmatterTransformer.ts @@ -2,19 +2,19 @@ import { IPlugin } from "./pluginTypes"; import { NotionPage } from "../NotionPage"; function getFrontmatter(page: NotionPage): string { - let frontmatter = ""; - frontmatter += `title: ${page.nameOrTitle.replaceAll(":", "-")}\n`; // I have not found a way to escape colons - frontmatter += `sidebar_position: ${page.order}\n`; - frontmatter += `slug: ${page.slug ?? ""}\n`; - if (page.keywords) frontmatter += `keywords: [${page.keywords}]\n`; + let frontMatter = ""; + frontMatter += `title: ${page.nameOrTitle.replaceAll(":", "-")}\n`; // I have not found a way to escape colons + frontMatter += `sidebar_position: ${page.order}\n`; + frontMatter += `slug: ${page.slug ?? ""}\n`; + if (page.keywords) frontMatter += `keywords: [${page.keywords}]\n`; - return frontmatter; + return frontMatter; } export const standardFrontmatterTransformer: IPlugin = { name: "standardFrontmatterTransformer", - frontmatterTransform: { + frontMatterTransform: { build: getFrontmatter, }, }; diff --git a/src/plugins/pluginTestRun.ts b/src/plugins/pluginTestRun.ts index b19877d..d5a4a17 100644 --- a/src/plugins/pluginTestRun.ts +++ b/src/plugins/pluginTestRun.ts @@ -92,7 +92,7 @@ export async function blocksToMarkdown( return r; } -// This is used for things like testing links to other pages and frontmatter creation, +// This is used for things like testing links to other pages and frontMatter creation, // when just testing what happens to individual blocks is not enough. // after getting this, you can make changes to it, then pass it to blocksToMarkdown export function makeSamplePageObject(options: { diff --git a/src/plugins/pluginTypes.ts b/src/plugins/pluginTypes.ts index ca688c8..95d5ee1 100644 --- a/src/plugins/pluginTypes.ts +++ b/src/plugins/pluginTypes.ts @@ -35,8 +35,8 @@ export type IPlugin = { // simple regex replacements on the markdown output regexMarkdownModifications?: IRegexMarkdownModification[]; - // operations on pages to define the markdown's frontmatter - frontmatterTransform?: { + // operations on pages to define the markdown's frontMatter + frontMatterTransform?: { build: (page: NotionPage) => string; }; diff --git a/src/transform.ts b/src/transform.ts index 42b7705..996876b 100644 --- a/src/transform.ts +++ b/src/transform.ts @@ -30,8 +30,8 @@ export async function getMarkdownForPage( logDebugFn("markdown from page", () => JSON.stringify(blocks, null, 2)); const body = await getMarkdownFromNotionBlocks(context, config, blocks); - const frontmatter = getMarkdownFrontMatter(config, page); - return `${frontmatter}\n${body}`; + const frontMatter = getMarkdownFrontMatter(config, page); + return `${frontMatter}\n${body}`; } // this is split off from getMarkdownForPage so that unit tests can provide the block contents @@ -256,13 +256,13 @@ function getMarkdownFrontMatter( config: IDocuNotionConfig, page: NotionPage ): string { - let frontmatter = "---\n"; + let frontMatter = "---\n"; config.plugins.forEach(plugin => { - if (plugin.frontmatterTransform) { + if (plugin.frontMatterTransform) { logDebug("transforming page with plugin", plugin.name); - frontmatter += plugin.frontmatterTransform?.build(page); + frontMatter += plugin.frontMatterTransform?.build(page); } }); - frontmatter += "---\n"; - return frontmatter; + frontMatter += "---\n"; + return frontMatter; } From e37e09bbd3db4d1ea6f0e3ff800f25b1b12acca2 Mon Sep 17 00:00:00 2001 From: Francisco Moretti Date: Thu, 20 Apr 2023 08:28:43 +0100 Subject: [PATCH 3/5] renamed files --- src/config/default.docunotion.config.ts | 2 +- ...matterTransformer.spec.ts => FrontMatterTransformer.spec.ts} | 2 +- .../{FronmatterTransformer.ts => FrontMatterTransformer.ts} | 0 3 files changed, 2 insertions(+), 2 deletions(-) rename src/plugins/{FronmatterTransformer.spec.ts => FrontMatterTransformer.spec.ts} (98%) rename src/plugins/{FronmatterTransformer.ts => FrontMatterTransformer.ts} (100%) diff --git a/src/config/default.docunotion.config.ts b/src/config/default.docunotion.config.ts index 66046d0..33fa4ad 100644 --- a/src/config/default.docunotion.config.ts +++ b/src/config/default.docunotion.config.ts @@ -15,7 +15,7 @@ import { standardNumberedListTransformer } from "../plugins/NumberedListTransfor import { standardTableTransformer } from "../plugins/TableTransformer"; import { standardExternalLinkConversion } from "../plugins/externalLinks"; import { IDocuNotionConfig } from "./configuration"; -import { standardFrontmatterTransformer } from "../plugins/FronmatterTransformer"; +import { standardFrontmatterTransformer } from "../plugins/FrontMatterTransformer"; const defaultConfig: IDocuNotionConfig = { plugins: [ diff --git a/src/plugins/FronmatterTransformer.spec.ts b/src/plugins/FrontMatterTransformer.spec.ts similarity index 98% rename from src/plugins/FronmatterTransformer.spec.ts rename to src/plugins/FrontMatterTransformer.spec.ts index 9ebfbe0..89b1d0b 100644 --- a/src/plugins/FronmatterTransformer.spec.ts +++ b/src/plugins/FrontMatterTransformer.spec.ts @@ -1,6 +1,6 @@ import { GetPageResponse } from "@notionhq/client/build/src/api-endpoints"; import { NotionPage } from "../NotionPage"; -import { standardFrontmatterTransformer } from "./FronmatterTransformer"; +import { standardFrontmatterTransformer } from "./FrontMatterTransformer"; let getFrontMatter = standardFrontmatterTransformer.frontMatterTransform ?.build as (page: NotionPage) => string; diff --git a/src/plugins/FronmatterTransformer.ts b/src/plugins/FrontMatterTransformer.ts similarity index 100% rename from src/plugins/FronmatterTransformer.ts rename to src/plugins/FrontMatterTransformer.ts From 483f531d1059cc531e879ab585b37221d10607d5 Mon Sep 17 00:00:00 2001 From: Francisco Moretti Date: Thu, 20 Apr 2023 08:31:06 +0100 Subject: [PATCH 4/5] renamed properties of plugins --- src/plugins/FrontMatterTransformer.spec.ts | 4 ++-- src/plugins/FrontMatterTransformer.ts | 4 ++-- src/plugins/pluginTypes.ts | 4 ++-- src/transform.ts | 4 ++-- 4 files changed, 8 insertions(+), 8 deletions(-) diff --git a/src/plugins/FrontMatterTransformer.spec.ts b/src/plugins/FrontMatterTransformer.spec.ts index 89b1d0b..ca024ff 100644 --- a/src/plugins/FrontMatterTransformer.spec.ts +++ b/src/plugins/FrontMatterTransformer.spec.ts @@ -2,8 +2,8 @@ import { GetPageResponse } from "@notionhq/client/build/src/api-endpoints"; import { NotionPage } from "../NotionPage"; import { standardFrontmatterTransformer } from "./FrontMatterTransformer"; -let getFrontMatter = standardFrontmatterTransformer.frontMatterTransform - ?.build as (page: NotionPage) => string; +const getFrontMatter = standardFrontmatterTransformer.frontMatterGenerator + ?.getFrontMatter as (page: NotionPage) => string; const sampleMetadata: GetPageResponse = { object: "page", diff --git a/src/plugins/FrontMatterTransformer.ts b/src/plugins/FrontMatterTransformer.ts index b4c7489..ef85488 100644 --- a/src/plugins/FrontMatterTransformer.ts +++ b/src/plugins/FrontMatterTransformer.ts @@ -14,7 +14,7 @@ function getFrontmatter(page: NotionPage): string { export const standardFrontmatterTransformer: IPlugin = { name: "standardFrontmatterTransformer", - frontMatterTransform: { - build: getFrontmatter, + frontMatterGenerator: { + getFrontMatter: getFrontmatter, }, }; diff --git a/src/plugins/pluginTypes.ts b/src/plugins/pluginTypes.ts index 95d5ee1..e682009 100644 --- a/src/plugins/pluginTypes.ts +++ b/src/plugins/pluginTypes.ts @@ -36,8 +36,8 @@ export type IPlugin = { regexMarkdownModifications?: IRegexMarkdownModification[]; // operations on pages to define the markdown's frontMatter - frontMatterTransform?: { - build: (page: NotionPage) => string; + frontMatterGenerator?: { + getFrontMatter: (page: NotionPage) => string; }; // Allow a plugin to perform an async operation at the start of docu-notion. diff --git a/src/transform.ts b/src/transform.ts index 996876b..a92d568 100644 --- a/src/transform.ts +++ b/src/transform.ts @@ -258,9 +258,9 @@ function getMarkdownFrontMatter( ): string { let frontMatter = "---\n"; config.plugins.forEach(plugin => { - if (plugin.frontMatterTransform) { + if (plugin.frontMatterGenerator) { logDebug("transforming page with plugin", plugin.name); - frontMatter += plugin.frontMatterTransform?.build(page); + frontMatter += plugin.frontMatterGenerator?.getFrontMatter(page); } }); frontMatter += "---\n"; From ced39ff5de7b2c55dc9b5b9ad613397f001a2f95 Mon Sep 17 00:00:00 2001 From: Francisco Moretti Date: Thu, 20 Apr 2023 08:39:52 +0100 Subject: [PATCH 5/5] included IDocunotionContext in plugin --- src/plugins/FrontMatterTransformer.spec.ts | 9 +++++---- src/plugins/FrontMatterTransformer.ts | 4 ++-- src/plugins/pluginTypes.ts | 2 +- src/transform.ts | 5 +++-- 4 files changed, 11 insertions(+), 9 deletions(-) diff --git a/src/plugins/FrontMatterTransformer.spec.ts b/src/plugins/FrontMatterTransformer.spec.ts index ca024ff..ce18cf8 100644 --- a/src/plugins/FrontMatterTransformer.spec.ts +++ b/src/plugins/FrontMatterTransformer.spec.ts @@ -1,9 +1,10 @@ import { GetPageResponse } from "@notionhq/client/build/src/api-endpoints"; import { NotionPage } from "../NotionPage"; import { standardFrontmatterTransformer } from "./FrontMatterTransformer"; +import { IDocuNotionContext } from ".."; const getFrontMatter = standardFrontmatterTransformer.frontMatterGenerator - ?.getFrontMatter as (page: NotionPage) => string; + ?.getFrontMatter as (context: IDocuNotionContext, page: NotionPage) => string; const sampleMetadata: GetPageResponse = { object: "page", @@ -126,7 +127,7 @@ describe("getFrontMatter", () => { (page.metadata as any).properties.Keywords.rich_text[0].plain_text = "Foo, Bar"; - const result = getFrontMatter(page); + const result = getFrontMatter({} as IDocuNotionContext, page); expect(result).toEqual(expectedFrontmatter); }); @@ -137,7 +138,7 @@ describe("getFrontMatter", () => { const expectedFrontmatter = `title: FooBar\nsidebar_position: 1\nslug: /123\n`; (page.metadata as any).properties.Keywords = undefined; - const result = getFrontMatter(page); + const result = getFrontMatter({} as IDocuNotionContext, page); expect(result).toEqual(expectedFrontmatter); }); @@ -146,7 +147,7 @@ describe("getFrontMatter", () => { const expectedFrontmatter = `title: FooBaz-\nsidebar_position: 1\nslug: /123\nkeywords: [Foo, Bar]\n`; (page.metadata as any).properties.title.title[1].plain_text = "Baz:"; - const result = getFrontMatter(page); + const result = getFrontMatter({} as IDocuNotionContext, page); expect(result).toEqual(expectedFrontmatter); }); diff --git a/src/plugins/FrontMatterTransformer.ts b/src/plugins/FrontMatterTransformer.ts index ef85488..7c36778 100644 --- a/src/plugins/FrontMatterTransformer.ts +++ b/src/plugins/FrontMatterTransformer.ts @@ -1,7 +1,7 @@ -import { IPlugin } from "./pluginTypes"; +import { IDocuNotionContext, IPlugin } from "./pluginTypes"; import { NotionPage } from "../NotionPage"; -function getFrontmatter(page: NotionPage): string { +function getFrontmatter(context: IDocuNotionContext, page: NotionPage): string { let frontMatter = ""; frontMatter += `title: ${page.nameOrTitle.replaceAll(":", "-")}\n`; // I have not found a way to escape colons frontMatter += `sidebar_position: ${page.order}\n`; diff --git a/src/plugins/pluginTypes.ts b/src/plugins/pluginTypes.ts index e682009..86d67bd 100644 --- a/src/plugins/pluginTypes.ts +++ b/src/plugins/pluginTypes.ts @@ -37,7 +37,7 @@ export type IPlugin = { // operations on pages to define the markdown's frontMatter frontMatterGenerator?: { - getFrontMatter: (page: NotionPage) => string; + getFrontMatter: (context: IDocuNotionContext, page: NotionPage) => string; }; // Allow a plugin to perform an async operation at the start of docu-notion. diff --git a/src/transform.ts b/src/transform.ts index a92d568..bc99255 100644 --- a/src/transform.ts +++ b/src/transform.ts @@ -30,7 +30,7 @@ export async function getMarkdownForPage( logDebugFn("markdown from page", () => JSON.stringify(blocks, null, 2)); const body = await getMarkdownFromNotionBlocks(context, config, blocks); - const frontMatter = getMarkdownFrontMatter(config, page); + const frontMatter = getMarkdownFrontMatter(context, config, page); return `${frontMatter}\n${body}`; } @@ -253,6 +253,7 @@ function registerNotionToMarkdownCustomTransforms( } function getMarkdownFrontMatter( + context: IDocuNotionContext, config: IDocuNotionConfig, page: NotionPage ): string { @@ -260,7 +261,7 @@ function getMarkdownFrontMatter( config.plugins.forEach(plugin => { if (plugin.frontMatterGenerator) { logDebug("transforming page with plugin", plugin.name); - frontMatter += plugin.frontMatterGenerator?.getFrontMatter(page); + frontMatter += plugin.frontMatterGenerator?.getFrontMatter(context, page); } }); frontMatter += "---\n";