wtf
This commit is contained in:
parent
9cd6a6657b
commit
cfbcf1db7f
5 changed files with 24 additions and 8 deletions
|
@ -30,7 +30,7 @@ type RawContentEvent = { name: ChokidarEvent; entry: string };
|
|||
type ContentEvent = { name: ChokidarEvent; entry: URL };
|
||||
|
||||
type DataEntryMetadata = Record<string, never>;
|
||||
type ContentEntryMetadata = { slug: string };
|
||||
type ContentEntryMetadata = { slug: string, path: string };
|
||||
type CollectionEntryMap = {
|
||||
[collection: string]:
|
||||
| {
|
||||
|
@ -276,7 +276,7 @@ export async function createContentTypesGenerator({
|
|||
if (!(entryKey in collectionEntryMap[collectionKey].entries)) {
|
||||
collectionEntryMap[collectionKey] = {
|
||||
type: 'content',
|
||||
entries: { ...collectionInfo.entries, [entryKey]: { slug: addedSlug } },
|
||||
entries: { ...collectionInfo.entries, [entryKey]: { slug: addedSlug, path: event.entry.toString() } },
|
||||
};
|
||||
}
|
||||
return { shouldGenerateTypes: true };
|
||||
|
@ -453,7 +453,15 @@ async function writeContentFiles({
|
|||
)}] }`;
|
||||
|
||||
const slugType = JSON.stringify(entryMetadata.slug);
|
||||
contentTypesStr += `${entryKey}: {\n id: ${entryKey};\n slug: ${slugType};\n body: string;\n collection: ${collectionKey};\n data: ${dataType}\n} & ${renderType};\n`;
|
||||
contentTypesStr += [
|
||||
`${entryKey}: {`,
|
||||
` id: ${entryKey};`,
|
||||
` slug: ${slugType};`,
|
||||
` path: ${JSON.stringify(entryMetadata.path)};`,
|
||||
` body: string;`,
|
||||
` collection: ${collectionKey};`,
|
||||
` data: ${dataType}`,
|
||||
`} & ${renderType};`].join("\n");
|
||||
}
|
||||
contentTypesStr += `};\n`;
|
||||
break;
|
||||
|
|
|
@ -123,7 +123,7 @@ export default function mdx(partialMdxOptions: Partial<MdxOptions> = {}): AstroI
|
|||
|
||||
const vfile = new VFile({ value: pageContent, path: id });
|
||||
// Ensure `data.astro` is available to all remark plugins
|
||||
setVfileFrontmatter(vfile, frontmatter);
|
||||
setVfileFrontmatter(vfile, frontmatter, { filePath: id });
|
||||
|
||||
try {
|
||||
const compiled = await processor.process(vfile);
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
import type { VFileData as Data, VFile } from 'vfile';
|
||||
import type { MarkdownAstroData } from './types.js';
|
||||
import type { MarkdownAstroData, MarkdownProcessorRenderOptions } from './types.js';
|
||||
|
||||
function isValidAstroData(obj: unknown): obj is MarkdownAstroData {
|
||||
if (typeof obj === 'object' && obj !== null && obj.hasOwnProperty('frontmatter')) {
|
||||
|
@ -27,10 +27,15 @@ export function safelyGetAstroData(vfileData: Data): MarkdownAstroData | Invalid
|
|||
return astro;
|
||||
}
|
||||
|
||||
export function setVfileFrontmatter(vfile: VFile, frontmatter: Record<string, any>) {
|
||||
export function setVfileFrontmatter(
|
||||
vfile: VFile,
|
||||
frontmatter: Record<string, any>,
|
||||
renderOpts: MarkdownProcessorRenderOptions | undefined
|
||||
) {
|
||||
vfile.data ??= {};
|
||||
vfile.data.astro ??= {};
|
||||
(vfile.data.astro as any).frontmatter = frontmatter;
|
||||
(vfile.data.astro as any).filePath = renderOpts?.filePath;
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
|
@ -124,8 +124,9 @@ export async function createMarkdownProcessor(
|
|||
|
||||
return {
|
||||
async render(content, renderOpts) {
|
||||
const vfile = new VFile({ value: content, path: renderOpts?.fileURL });
|
||||
setVfileFrontmatter(vfile, renderOpts?.frontmatter ?? {});
|
||||
console.log('RENDER OPTS', renderOpts);
|
||||
const vfile = new VFile({ value: content, path: renderOpts?.filePath });
|
||||
setVfileFrontmatter(vfile, renderOpts?.frontmatter ?? {}, renderOpts);
|
||||
|
||||
const result: MarkdownVFile = await parser.process(vfile).catch((err) => {
|
||||
// Ensure that the error message contains the input filename
|
||||
|
@ -170,6 +171,7 @@ export async function renderMarkdown(
|
|||
|
||||
const result = await processor.render(content, {
|
||||
fileURL: opts.fileURL,
|
||||
filePath: opts.filePath,
|
||||
frontmatter: opts.frontmatter,
|
||||
});
|
||||
|
||||
|
|
|
@ -68,6 +68,7 @@ export interface MarkdownProcessor {
|
|||
export interface MarkdownProcessorRenderOptions {
|
||||
/** @internal */
|
||||
fileURL?: URL;
|
||||
filePath?: string;
|
||||
/** Used for frontmatter injection plugins */
|
||||
frontmatter?: Record<string, any>;
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue