diff options
author | 2023-06-06 14:48:54 -0400 | |
---|---|---|
committer | 2023-06-06 14:48:54 -0400 | |
commit | a11b62ee1f5d524b0ba942818525b623a6d6eb99 (patch) | |
tree | f1b010a172546f6f1180a1b8f89b4695fca8d4d7 /packages/integrations/markdoc | |
parent | 8034edd9ecf805073395ba7f68f73cd5fc4d2c73 (diff) | |
download | astro-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.json | 28 | ||||
-rw-r--r-- | packages/integrations/markdoc/src/config.ts | 26 | ||||
-rw-r--r-- | packages/integrations/markdoc/src/heading-ids.ts | 13 | ||||
-rw-r--r-- | packages/integrations/markdoc/src/index.ts | 8 | ||||
-rw-r--r-- | packages/integrations/markdoc/src/load-config.ts | 8 | ||||
-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 |