-
-
Notifications
You must be signed in to change notification settings - Fork 2.6k
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
fix(markdoc): use astro components defined with
extends
- Loading branch information
Showing
11 changed files
with
176 additions
and
2 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,5 @@ | ||
--- | ||
'@astrojs/markdoc': patch | ||
--- | ||
|
||
Fixes an issue preventing to use Astro components as Markdoc tags and nodes when configured using the `extends` property. |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
7 changes: 7 additions & 0 deletions
7
packages/integrations/markdoc/test/fixtures/render-with-extends-components/astro.config.mjs
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,7 @@ | ||
import markdoc from '@astrojs/markdoc'; | ||
import { defineConfig } from 'astro/config'; | ||
|
||
// https://astro.build/config | ||
export default defineConfig({ | ||
integrations: [markdoc()], | ||
}); |
31 changes: 31 additions & 0 deletions
31
packages/integrations/markdoc/test/fixtures/render-with-extends-components/markdoc.config.ts
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,31 @@ | ||
import { component, defineMarkdocConfig } from '@astrojs/markdoc/config'; | ||
|
||
export default defineMarkdocConfig({ | ||
extends: [preset()], | ||
}); | ||
|
||
function preset() { | ||
return { | ||
nodes: { | ||
fence: { | ||
render: component('./src/components/Code.astro'), | ||
attributes: { | ||
language: { type: String }, | ||
content: { type: String }, | ||
}, | ||
}, | ||
}, | ||
tags: { | ||
'marquee-element': { | ||
render: component('./src/components/CustomMarquee.astro'), | ||
attributes: { | ||
direction: { | ||
type: String, | ||
default: 'left', | ||
matches: ['left', 'right', 'up', 'down'], | ||
}, | ||
}, | ||
}, | ||
}, | ||
} | ||
} |
9 changes: 9 additions & 0 deletions
9
packages/integrations/markdoc/test/fixtures/render-with-extends-components/package.json
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,9 @@ | ||
{ | ||
"name": "@test/markdoc-render-with-extends-components", | ||
"version": "0.0.0", | ||
"private": true, | ||
"dependencies": { | ||
"@astrojs/markdoc": "workspace:*", | ||
"astro": "workspace:*" | ||
} | ||
} |
12 changes: 12 additions & 0 deletions
12
...tegrations/markdoc/test/fixtures/render-with-extends-components/src/components/Code.astro
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,12 @@ | ||
--- | ||
import { Code } from 'astro/components'; | ||
type Props = { | ||
content: string; | ||
language: string; | ||
} | ||
const { content, language } = Astro.props as Props; | ||
--- | ||
|
||
<Code lang={language} code={content} /> |
1 change: 1 addition & 0 deletions
1
...s/markdoc/test/fixtures/render-with-extends-components/src/components/CustomMarquee.astro
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1 @@ | ||
<marquee data-custom-marquee {...Astro.props}><slot /></marquee> |
17 changes: 17 additions & 0 deletions
17
...arkdoc/test/fixtures/render-with-extends-components/src/content/blog/with-components.mdoc
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,17 @@ | ||
--- | ||
title: Post with components | ||
--- | ||
|
||
## Post with components | ||
|
||
This uses a custom marquee component with a shortcode: | ||
|
||
{% marquee-element direction="right" %} | ||
I'm a marquee too! | ||
{% /marquee-element %} | ||
|
||
And a code component for code blocks: | ||
|
||
```js | ||
const isRenderedWithShiki = true; | ||
``` |
19 changes: 19 additions & 0 deletions
19
...s/integrations/markdoc/test/fixtures/render-with-extends-components/src/pages/index.astro
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,19 @@ | ||
--- | ||
import { getEntryBySlug } from "astro:content"; | ||
const post = await getEntryBySlug('blog', 'with-components'); | ||
const { Content } = await post.render(); | ||
--- | ||
|
||
<!DOCTYPE html> | ||
<html lang="en"> | ||
<head> | ||
<meta charset="UTF-8"> | ||
<meta http-equiv="X-UA-Compatible" content="IE=edge"> | ||
<meta name="viewport" content="width=device-width, initial-scale=1.0"> | ||
<title>Content</title> | ||
</head> | ||
<body> | ||
<Content /> | ||
</body> | ||
</html> |
64 changes: 64 additions & 0 deletions
64
packages/integrations/markdoc/test/render-extends-components.test.js
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,64 @@ | ||
import assert from 'node:assert/strict'; | ||
import { after, before, describe, it } from 'node:test'; | ||
import { parseHTML } from 'linkedom'; | ||
import { loadFixture } from '../../../astro/test/test-utils.js'; | ||
|
||
const root = new URL('./fixtures/render-with-extends-components/', import.meta.url); | ||
|
||
describe('Markdoc - render components defined in `extends`', () => { | ||
let fixture; | ||
|
||
before(async () => { | ||
fixture = await loadFixture({ | ||
root, | ||
}); | ||
}); | ||
|
||
describe('dev', () => { | ||
let devServer; | ||
|
||
before(async () => { | ||
devServer = await fixture.startDevServer(); | ||
}); | ||
|
||
after(async () => { | ||
await devServer.stop(); | ||
}); | ||
|
||
it('renders content - with components', async () => { | ||
const res = await fixture.fetch('/'); | ||
const html = await res.text(); | ||
|
||
renderComponentsChecks(html); | ||
}); | ||
}); | ||
|
||
describe('build', () => { | ||
before(async () => { | ||
await fixture.build(); | ||
}); | ||
|
||
it('renders content - with components', async () => { | ||
const html = await fixture.readFile('/index.html'); | ||
|
||
renderComponentsChecks(html); | ||
}); | ||
}); | ||
}); | ||
|
||
/** @param {string} html */ | ||
function renderComponentsChecks(html) { | ||
const { document } = parseHTML(html); | ||
const h2 = document.querySelector('h2'); | ||
assert.equal(h2.textContent, 'Post with components'); | ||
|
||
// Renders custom shortcode component | ||
const marquee = document.querySelector('marquee'); | ||
assert.notEqual(marquee, null); | ||
assert.equal(marquee.hasAttribute('data-custom-marquee'), true); | ||
|
||
// Renders Astro Code component | ||
const pre = document.querySelector('pre'); | ||
assert.notEqual(pre, null); | ||
assert.equal(pre.className, 'astro-code github-dark'); | ||
} |
Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.
Oops, something went wrong.