Skip to content

Commit

Permalink
Revert "feat: support .md overrides for content collections"
Browse files Browse the repository at this point in the history
This reverts commit c06f83e.
  • Loading branch information
bholmesdev committed Feb 16, 2023
1 parent 5b9a1f3 commit bd0dd9d
Show file tree
Hide file tree
Showing 15 changed files with 40 additions and 94 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -2,13 +2,13 @@
title: Welcome to Markdoc 👋
---

This simple starter showcases Markdoc's features with Content Collections. All Markdoc features are supported, including this nifty built-in `{% table %}` tag:
This simple starter showcases Markdoc with Content Collections. All Markdoc features are supported, including this nifty built-in `{% table %}` tag:

{% table %}
* Feature
* Supported
---
* `.mdoc` + `.md` in Content Collections
* `.mdoc` in Content Collections
* ✅
---
* Markdoc transform configuration
Expand Down
1 change: 0 additions & 1 deletion packages/astro/src/@types/astro.ts
Original file line number Diff line number Diff line change
Expand Up @@ -978,7 +978,6 @@ export interface AstroConfig extends z.output<typeof AstroConfigSchema> {
}

export interface ContentEntryType {
name: string;
extensions: string[];
getEntryInfo(params: { fileUrl: URL; contents: string }): Promise<{
data: Record<string, unknown>;
Expand Down
1 change: 0 additions & 1 deletion packages/astro/src/content/consts.ts
Original file line number Diff line number Diff line change
Expand Up @@ -6,4 +6,3 @@ export const STYLES_PLACEHOLDER = '@@ASTRO-STYLES@@';
export const SCRIPTS_PLACEHOLDER = '@@ASTRO-SCRIPTS@@';

export const CONTENT_TYPES_FILE = 'types.d.ts';
export const MARKDOWN_CONTENT_ENTRY_TYPE_NAME = 'astro:markdown';
8 changes: 1 addition & 7 deletions packages/astro/src/content/index.ts
Original file line number Diff line number Diff line change
@@ -1,12 +1,6 @@
export { attachContentServerListeners } from './server-listeners.js';
export { createContentTypesGenerator } from './types-generator.js';
export {
contentObservable,
getContentPaths,
getDotAstroTypeReference,
hasMdContentEntryTypeOverride,
} from './utils.js';
export { getMarkdownContentEntryType } from './markdown.js';
export { contentObservable, getContentPaths, getDotAstroTypeReference } from './utils.js';
export { astroContentAssetPropagationPlugin } from './vite-plugin-content-assets.js';
export { astroContentImportPlugin } from './vite-plugin-content-imports.js';
export { astroContentVirtualModPlugin } from './vite-plugin-content-virtual-mod.js';
29 changes: 0 additions & 29 deletions packages/astro/src/content/markdown.ts

This file was deleted.

9 changes: 0 additions & 9 deletions packages/astro/src/content/template/markdown-types.d.ts

This file was deleted.

10 changes: 10 additions & 0 deletions packages/astro/src/content/template/types.d.ts
Original file line number Diff line number Diff line change
@@ -1,3 +1,13 @@
declare module 'astro:content' {
interface Render {
'.md': Promise<{
Content: import('astro').MarkdownInstance<{}>['Content'];
headings: import('astro').MarkdownHeading[];
remarkPluginFrontmatter: Record<string, any>;
}>;
}
}

declare module 'astro:content' {
export { z } from 'astro/zod';
export type CollectionEntry<C extends keyof typeof entryMap> =
Expand Down
12 changes: 1 addition & 11 deletions packages/astro/src/content/utils.ts
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ import { ErrorPayload as ViteErrorPayload, normalizePath, ViteDevServer } from '
import { z } from 'zod';
import { AstroConfig, AstroSettings } from '../@types/astro.js';
import { AstroError, AstroErrorData } from '../core/errors/index.js';
import { CONTENT_TYPES_FILE, MARKDOWN_CONTENT_ENTRY_TYPE_NAME } from './consts.js';
import { CONTENT_TYPES_FILE } from './consts.js';

export const collectionConfigParser = z.object({
schema: z.any().optional(),
Expand Down Expand Up @@ -312,7 +312,6 @@ export function contentObservable(initialCtx: ContentCtx): ContentObservable {
}

export type ContentPaths = {
templateDir: URL;
contentDir: URL;
cacheDir: URL;
typesTemplate: URL;
Expand All @@ -330,7 +329,6 @@ export function getContentPaths(
const configStats = search(fs, srcDir);
const templateDir = new URL('../../src/content/template/', import.meta.url);
return {
templateDir,
cacheDir: new URL('.astro/', root),
contentDir: new URL('./content/', srcDir),
typesTemplate: new URL('types.d.ts', templateDir),
Expand All @@ -349,11 +347,3 @@ function search(fs: typeof fsMod, srcDir: URL) {
}
return { exists: false, url: paths[0] };
}

export function hasMdContentEntryTypeOverride(settings: Pick<AstroSettings, 'contentEntryTypes'>) {
return settings.contentEntryTypes.some(
(contentEntryType) =>
contentEntryType.name !== MARKDOWN_CONTENT_ENTRY_TYPE_NAME &&
contentEntryType.extensions.includes('.md')
);
}
3 changes: 2 additions & 1 deletion packages/astro/src/core/config/settings.ts
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@ import { fileURLToPath, pathToFileURL } from 'url';
import jsxRenderer from '../../jsx/renderer.js';
import { createDefaultDevConfig } from './config.js';
import { loadTSConfig } from './tsconfig.js';
import { markdownContentEntryType } from '../../vite-plugin-markdown/content-entry-type.js';

export function createBaseSettings(config: AstroConfig): AstroSettings {
return {
Expand All @@ -15,7 +16,7 @@ export function createBaseSettings(config: AstroConfig): AstroSettings {
adapter: undefined,
injectedRoutes: [],
pageExtensions: ['.astro', '.html', ...SUPPORTED_MARKDOWN_FILE_EXTENSIONS],
contentEntryTypes: [],
contentEntryTypes: [markdownContentEntryType],
renderers: [jsxRenderer],
scripts: [],
watchFiles: [],
Expand Down
8 changes: 0 additions & 8 deletions packages/astro/src/integrations/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -12,12 +12,10 @@ import {
HookParameters,
RouteData,
} from '../@types/astro.js';
import { hasMdContentEntryTypeOverride } from '../content/utils.js';
import type { SerializedSSRManifest } from '../core/app/types';
import type { PageBuildData } from '../core/build/types';
import { mergeConfig } from '../core/config/config.js';
import { info, LogOptions } from '../core/logger/core.js';
import { getMarkdownContentEntryType } from '../content/index.js';

async function withTakingALongTimeMsg<T>({
name,
Expand Down Expand Up @@ -128,12 +126,6 @@ export async function runHookConfigSetup({
}

updatedSettings.config = updatedConfig;
if (!hasMdContentEntryTypeOverride(updatedSettings)) {
updatedSettings.contentEntryTypes.push(
await getMarkdownContentEntryType(updatedSettings.config, fs)
);
}

return updatedSettings;
}

Expand Down
16 changes: 16 additions & 0 deletions packages/astro/src/vite-plugin-markdown/content-entry-type.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
import { fileURLToPath } from 'node:url';
import { ContentEntryType } from '../@types/astro.js';
import { parseFrontmatter } from '../content/utils.js';

export const markdownContentEntryType: ContentEntryType = {
extensions: ['.md'],
async getEntryInfo({ fileUrl, contents }: { fileUrl: URL; contents: string }) {
const parsed = parseFrontmatter(contents, fileURLToPath(fileUrl));
return {
data: parsed.data,
body: parsed.content,
slug: parsed.data.slug,
rawData: parsed.matter,
};
},
};
10 changes: 0 additions & 10 deletions packages/astro/src/vite-plugin-markdown/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,6 @@ import type { Plugin } from 'vite';
import { normalizePath } from 'vite';
import type { AstroSettings } from '../@types/astro';
import { getContentPaths } from '../content/index.js';
import { hasMdContentEntryTypeOverride } from '../content/index.js';
import { AstroError, AstroErrorData, MarkdownError } from '../core/errors/index.js';
import type { LogOptions } from '../core/logger/core.js';
import { warn } from '../core/logger/core.js';
Expand Down Expand Up @@ -67,15 +66,6 @@ export default function markdown({ settings, logging }: AstroPluginOptions): Plu
async load(id) {
if (isMarkdownFile(id)) {
const { fileId, fileUrl } = getFileInfo(id, settings.config);
if (
// Integrations can override the Markdown parser for content collections.
// If an override is present, skip this file.
fileId.startsWith(getContentPaths(settings.config).contentDir.pathname) &&
hasMdContentEntryTypeOverride(settings)
) {
return;
}

const rawFile = await fs.promises.readFile(fileId, 'utf-8');
const raw = safeMatter(rawFile, id);
const renderResult = await renderMarkdown(raw.content, {
Expand Down
7 changes: 2 additions & 5 deletions packages/integrations/markdoc/src/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -6,16 +6,13 @@ import { parseFrontmatter } from './utils.js';
import { fileURLToPath } from 'node:url';
import fs from 'node:fs';

const DEFAULT_MARKDOC_EXTS = ['.mdoc', '.md'];

export default function markdoc(): AstroIntegration {
return {
name: '@astrojs/markdoc',
hooks: {
'astro:config:setup': async ({ updateConfig, config, addContentEntryType, command }: any) => {
const contentEntryType = {
name: 'astro:markdoc',
extensions: DEFAULT_MARKDOC_EXTS,
extensions: ['.mdoc'],
async getEntryInfo({ fileUrl, contents }: { fileUrl: URL; contents: string }) {
const parsed = parseFrontmatter(contents, fileURLToPath(fileUrl));
return {
Expand All @@ -37,7 +34,7 @@ export default function markdoc(): AstroIntegration {
{
name: '@astrojs/markdoc',
async transform(code, id) {
if (!DEFAULT_MARKDOC_EXTS.some((ext) => id.endsWith(ext))) return;
if (!id.endsWith('.mdoc')) return;
return `import { jsx as h } from 'astro/jsx-runtime';\nimport { Markdoc } from '@astrojs/markdoc';\nimport { Renderer } from '@astrojs/markdoc/components';\nexport const body = ${JSON.stringify(
code
)};\nexport function getParsed() { return Markdoc.parse(body); }\nexport function getTransformed(inlineConfig) { return Markdoc.transform(getParsed(), inlineConfig) }\nexport async function Content ({ config, components }) { return h(Renderer, { content: getTransformed(config), components }); }\nContent[Symbol.for('astro.needsHeadRendering')] = true;`;
Expand Down
15 changes: 6 additions & 9 deletions packages/integrations/markdoc/template/content-module-types.d.ts
Original file line number Diff line number Diff line change
Expand Up @@ -9,15 +9,12 @@ declare module 'astro:content' {
}): Record<string, any>;
};

type RenderResult = Promise<{
Content(props: {
config?: import('@astrojs/markdoc').MarkdocConfig;
components?: Record<string, ComponentRenderer>;
}): import('astro').MarkdownInstance<{}>['Content'];
}>;

interface Render {
'.md': RenderResult;
'.mdoc': RenderResult;
'.mdoc': Promise<{
Content(props: {
config?: import('@astrojs/markdoc').MarkdocConfig;
components?: Record<string, ComponentRenderer>;
}): import('astro').MarkdownInstance<{}>['Content'];
}>;
}
}
1 change: 0 additions & 1 deletion packages/integrations/mdx/src/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -35,7 +35,6 @@ export default function mdx(partialMdxOptions: Partial<MdxOptions> = {}): AstroI
command,
}: any) => {
const contentEntryType = {
name: 'astro:mdx',
extensions: ['.mdx'],
async getEntryInfo({ fileUrl, contents }: { fileUrl: URL; contents: string }) {
const parsed = parseFrontmatter(contents, fileURLToPath(fileUrl));
Expand Down

0 comments on commit bd0dd9d

Please sign in to comment.