summaryrefslogtreecommitdiff
path: root/packages/integrations/markdoc
diff options
context:
space:
mode:
authorGravatar Ben Holmes <hey@bholmes.dev> 2023-06-06 14:48:54 -0400
committerGravatar GitHub <noreply@github.com> 2023-06-06 14:48:54 -0400
commita11b62ee1f5d524b0ba942818525b623a6d6eb99 (patch)
treef1b010a172546f6f1180a1b8f89b4695fca8d4d7 /packages/integrations/markdoc
parent8034edd9ecf805073395ba7f68f73cd5fc4d2c73 (diff)
downloadastro-a11b62ee1f5d524b0ba942818525b623a6d6eb99.tar.gz
astro-a11b62ee1f5d524b0ba942818525b623a6d6eb99.tar.zst
astro-a11b62ee1f5d524b0ba942818525b623a6d6eb99.zip
Fix: Markdoc type errors (#7311)
* fix: config, prism, shiki exports * fix: type error for `render` property * chore: use `.ts` files in select tests for type checks * fix: type error on shiki() promise * chore: changeset
Diffstat (limited to 'packages/integrations/markdoc')
-rw-r--r--packages/integrations/markdoc/package.json28
-rw-r--r--packages/integrations/markdoc/src/config.ts26
-rw-r--r--packages/integrations/markdoc/src/heading-ids.ts13
-rw-r--r--packages/integrations/markdoc/src/index.ts8
-rw-r--r--packages/integrations/markdoc/src/load-config.ts8
-rw-r--r--packages/integrations/markdoc/test/fixtures/render-with-components/markdoc.config.ts (renamed from packages/integrations/markdoc/test/fixtures/render-with-components/markdoc.config.mjs)0
-rw-r--r--packages/integrations/markdoc/test/fixtures/render-with-config/markdoc.config.ts (renamed from packages/integrations/markdoc/test/fixtures/render-with-config/markdoc.config.mjs)0
7 files changed, 63 insertions, 20 deletions
diff --git a/packages/integrations/markdoc/package.json b/packages/integrations/markdoc/package.json
index 14fd1dbf3..9049c52b5 100644
--- a/packages/integrations/markdoc/package.json
+++ b/packages/integrations/markdoc/package.json
@@ -19,15 +19,37 @@
"bugs": "https://github.com/withastro/astro/issues",
"homepage": "https://docs.astro.build/en/guides/integrations-guide/markdoc/",
"exports": {
- "./prism": "./dist/extensions/prism.js",
- "./shiki": "./dist/extensions/shiki.js",
+ "./prism": {
+ "types": "./dist/extensions/prism.d.ts",
+ "node": "./dist/extensions/prism.js"
+ },
+ "./shiki": {
+ "types": "./dist/extensions/shiki.d.ts",
+ "node": "./dist/extensions/shiki.js"
+ },
+ "./config": {
+ "types": "./dist/config.d.ts",
+ "node": "./dist/config.js"
+ },
".": "./dist/index.js",
"./components": "./components/index.ts",
"./runtime": "./dist/runtime.js",
- "./config": "./dist/config.js",
"./experimental-assets-config": "./dist/experimental-assets-config.js",
"./package.json": "./package.json"
},
+ "typesVersions": {
+ "*": {
+ "config": [
+ "./dist/config.d.ts"
+ ],
+ "prism": [
+ "./dist/extensions/prism.d.ts"
+ ],
+ "shiki": [
+ "./dist/extensions/shiki.d.ts"
+ ]
+ }
+ },
"files": [
"components",
"dist",
diff --git a/packages/integrations/markdoc/src/config.ts b/packages/integrations/markdoc/src/config.ts
index 23ff744f7..2c2f2c677 100644
--- a/packages/integrations/markdoc/src/config.ts
+++ b/packages/integrations/markdoc/src/config.ts
@@ -1,12 +1,26 @@
-import type { ConfigType as MarkdocConfig } from '@markdoc/markdoc';
+import type { AstroInstance } from 'astro';
+import type {
+ ConfigType as MarkdocConfig,
+ Config,
+ NodeType,
+ Schema,
+ MaybePromise,
+} from '@markdoc/markdoc';
import _Markdoc from '@markdoc/markdoc';
import { heading } from './heading-ids.js';
-export type AstroMarkdocConfig<C extends Record<string, any> = Record<string, any>> =
- MarkdocConfig & {
- ctx?: C;
- extends?: ResolvedAstroMarkdocConfig[];
- };
+type Render = AstroInstance['default'] | string;
+
+export type AstroMarkdocConfig<C extends Record<string, any> = Record<string, any>> = Omit<
+ MarkdocConfig,
+ 'tags' | 'nodes'
+> &
+ Partial<{
+ tags: Record<string, Schema<Config, Render>>;
+ nodes: Partial<Record<NodeType, Schema<Config, Render>>>;
+ ctx: C;
+ extends: MaybePromise<ResolvedAstroMarkdocConfig>[];
+ }>;
export type ResolvedAstroMarkdocConfig = Omit<AstroMarkdocConfig, 'extends'>;
diff --git a/packages/integrations/markdoc/src/heading-ids.ts b/packages/integrations/markdoc/src/heading-ids.ts
index 5e54af9a7..41773250e 100644
--- a/packages/integrations/markdoc/src/heading-ids.ts
+++ b/packages/integrations/markdoc/src/heading-ids.ts
@@ -1,6 +1,9 @@
-import Markdoc, { type RenderableTreeNode, type Schema } from '@markdoc/markdoc';
+import Markdoc, {
+ type RenderableTreeNode,
+ type Schema,
+ type Config as MarkdocConfig,
+} from '@markdoc/markdoc';
import Slugger from 'github-slugger';
-import type { AstroMarkdocConfig } from './config.js';
import { getTextContent } from './runtime.js';
import { MarkdocError } from './utils.js';
@@ -19,9 +22,9 @@ function getSlug(
return slug;
}
-type HeadingIdConfig = AstroMarkdocConfig<{
- headingSlugger: Slugger;
-}>;
+type HeadingIdConfig = MarkdocConfig & {
+ ctx: { headingSlugger: Slugger };
+};
/*
Expose standalone node for users to import in their config.
diff --git a/packages/integrations/markdoc/src/index.ts b/packages/integrations/markdoc/src/index.ts
index c2d3e8734..781ae392e 100644
--- a/packages/integrations/markdoc/src/index.ts
+++ b/packages/integrations/markdoc/src/index.ts
@@ -1,5 +1,5 @@
/* eslint-disable no-console */
-import type { Node } from '@markdoc/markdoc';
+import type { Config as MarkdocConfig, Node } from '@markdoc/markdoc';
import Markdoc from '@markdoc/markdoc';
import type { AstroConfig, AstroIntegration, ContentEntryType, HookParameters } from 'astro';
import fs from 'node:fs';
@@ -85,7 +85,11 @@ export default function markdocIntegration(legacyConfig?: any): AstroIntegration
const filePath = fileURLToPath(fileUrl);
- const validationErrors = Markdoc.validate(ast, markdocConfig).filter((e) => {
+ const validationErrors = Markdoc.validate(
+ ast,
+ /* Raised generics issue with Markdoc core https://github.com/markdoc/markdoc/discussions/400 */
+ markdocConfig as MarkdocConfig
+ ).filter((e) => {
return (
// Ignore `variable-undefined` errors.
// Variables can be configured at runtime,
diff --git a/packages/integrations/markdoc/src/load-config.ts b/packages/integrations/markdoc/src/load-config.ts
index 4a8b2f9cd..e04cc441b 100644
--- a/packages/integrations/markdoc/src/load-config.ts
+++ b/packages/integrations/markdoc/src/load-config.ts
@@ -1,8 +1,8 @@
-import type { Config as MarkdocConfig } from '@markdoc/markdoc';
import type { AstroConfig } from 'astro';
import { build as esbuild } from 'esbuild';
import * as fs from 'node:fs';
import { fileURLToPath } from 'node:url';
+import type { AstroMarkdocConfig } from './config.js';
const SUPPORTED_MARKDOC_CONFIG_FILES = [
'markdoc.config.js',
@@ -12,7 +12,7 @@ const SUPPORTED_MARKDOC_CONFIG_FILES = [
];
export type MarkdocConfigResult = {
- config: MarkdocConfig;
+ config: AstroMarkdocConfig;
fileUrl: URL;
};
@@ -33,7 +33,7 @@ export async function loadMarkdocConfig(
markdocConfigUrl,
astroConfig,
});
- const config: MarkdocConfig = await loadConfigFromBundledFile(astroConfig.root, code);
+ const config: AstroMarkdocConfig = await loadConfigFromBundledFile(astroConfig.root, code);
return {
config,
@@ -93,7 +93,7 @@ async function bundleConfigFile({
* with ESM only
* @see https://github.com/vitejs/vite/blob/main/packages/vite/src/node/config.ts#L1074
*/
-async function loadConfigFromBundledFile(root: URL, code: string): Promise<MarkdocConfig> {
+async function loadConfigFromBundledFile(root: URL, code: string): Promise<AstroMarkdocConfig> {
// Write it to disk, load it with native Node ESM, then delete the file.
const tmpFileUrl = new URL(`markdoc.config.timestamp-${Date.now()}.mjs`, root);
fs.writeFileSync(tmpFileUrl, code);
diff --git a/packages/integrations/markdoc/test/fixtures/render-with-components/markdoc.config.mjs b/packages/integrations/markdoc/test/fixtures/render-with-components/markdoc.config.ts
index ada03f5f4..ada03f5f4 100644
--- a/packages/integrations/markdoc/test/fixtures/render-with-components/markdoc.config.mjs
+++ b/packages/integrations/markdoc/test/fixtures/render-with-components/markdoc.config.ts
diff --git a/packages/integrations/markdoc/test/fixtures/render-with-config/markdoc.config.mjs b/packages/integrations/markdoc/test/fixtures/render-with-config/markdoc.config.ts
index c43ee93a3..c43ee93a3 100644
--- a/packages/integrations/markdoc/test/fixtures/render-with-config/markdoc.config.mjs
+++ b/packages/integrations/markdoc/test/fixtures/render-with-config/markdoc.config.ts