summaryrefslogtreecommitdiff
path: root/packages/integrations/markdoc/src/config.ts
diff options
context:
space:
mode:
Diffstat (limited to 'packages/integrations/markdoc/src/config.ts')
-rw-r--r--packages/integrations/markdoc/src/config.ts53
1 files changed, 53 insertions, 0 deletions
diff --git a/packages/integrations/markdoc/src/config.ts b/packages/integrations/markdoc/src/config.ts
new file mode 100644
index 000000000..c62bfebab
--- /dev/null
+++ b/packages/integrations/markdoc/src/config.ts
@@ -0,0 +1,53 @@
+import { isRelativePath } from '@astrojs/internal-helpers/path';
+import type {
+ Config,
+ ConfigType as MarkdocConfig,
+ MaybePromise,
+ NodeType,
+ Schema,
+} from '@markdoc/markdoc';
+import _Markdoc from '@markdoc/markdoc';
+import type { AstroInstance } from 'astro';
+import { heading } from './heading-ids.js';
+import { componentConfigSymbol } from './utils.js';
+
+export type Render = ComponentConfig | AstroInstance['default'] | string;
+export type ComponentConfig = {
+ type: 'package' | 'local';
+ path: string;
+ namedExport?: string;
+ [componentConfigSymbol]: true;
+};
+
+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'>;
+
+export const Markdoc = _Markdoc;
+export const nodes = { ...Markdoc.nodes, heading };
+
+export function defineMarkdocConfig(config: AstroMarkdocConfig): AstroMarkdocConfig {
+ return config;
+}
+
+export function component(pathnameOrPkgName: string, namedExport?: string): ComponentConfig {
+ return {
+ type: isNpmPackageName(pathnameOrPkgName) ? 'package' : 'local',
+ path: pathnameOrPkgName,
+ namedExport,
+ [componentConfigSymbol]: true,
+ };
+}
+
+function isNpmPackageName(pathname: string) {
+ return !isRelativePath(pathname) && !pathname.startsWith('/');
+}