@studiocms/markdoc 0.1.0-beta.26 → 0.1.0-beta.28

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -1,5 +1,7 @@
1
1
  # @StudioCMS/MarkDoc Plugin
2
2
 
3
+ [![codecov](https://codecov.io/github/withstudiocms/studiocms/graph/badge.svg?token=RN8LT1O5E2&component=studiocms_markdoc)](https://codecov.io/github/withstudiocms/studiocms)
4
+
3
5
  Add MarkDoc support to StudioCMS
4
6
 
5
7
  ## Usage
@@ -0,0 +1,11 @@
1
+ /**
2
+ * The Markdoc renderer configuration for StudioCMS.
3
+ *
4
+ * This renderer is responsible for handling Markdoc content within StudioCMS,
5
+ * utilizing shared configuration options for sanitization and rendering.
6
+ */
7
+ declare const renderer: {
8
+ name: string;
9
+ renderer: typeof import("../lib/render").renderMarkDoc;
10
+ };
11
+ export default renderer;
@@ -0,0 +1,9 @@
1
+ import renderMarkDoc from "studiocms:markdoc/renderer";
2
+ const renderer = {
3
+ name: "@studiocms/markdoc",
4
+ renderer: renderMarkDoc
5
+ };
6
+ var render_default = renderer;
7
+ export {
8
+ render_default as default
9
+ };
package/dist/index.d.ts CHANGED
@@ -4,7 +4,17 @@
4
4
  * directives must be first at the top of the file and can only be preceded by this comment.
5
5
  */
6
6
  /// <reference types="./virtual.d.ts" preserve="true" />
7
+ import type { AstroIntegration } from 'astro';
7
8
  import { type StudioCMSPlugin } from 'studiocms/plugins';
8
9
  import type { MarkDocPluginOptions } from './types.js';
10
+ /**
11
+ * Creates an internal Astro integration for MarkDoc rendering.
12
+ * This is used for testing and internal purposes.
13
+ *
14
+ * @param {string} packageIdentifier - The package identifier for the integration.
15
+ * @param {MarkDocPluginOptions} [options] - Optional configuration options for the MarkDoc plugin.
16
+ * @returns {AstroIntegration} The configured Astro integration.
17
+ */
18
+ export declare function internalMarkDocIntegration(packageIdentifier: string, options?: MarkDocPluginOptions): AstroIntegration;
9
19
  export declare function studiocmsMarkDoc(options?: MarkDocPluginOptions): StudioCMSPlugin;
10
20
  export default studiocmsMarkDoc;
package/dist/index.js CHANGED
@@ -1,12 +1,41 @@
1
1
  import { addVirtualImports, createResolver } from "astro-integration-kit";
2
2
  import { definePlugin } from "studiocms/plugins";
3
3
  import { shared } from "./lib/shared.js";
4
+ function internalMarkDocIntegration(packageIdentifier, options) {
5
+ const { resolve } = createResolver(import.meta.url);
6
+ const internalRenderer = resolve("./lib/render.js");
7
+ const resolvedOptions = {
8
+ type: options?.type || "html",
9
+ argParse: options?.argParse,
10
+ transformConfig: options?.transformConfig
11
+ };
12
+ return {
13
+ name: packageIdentifier,
14
+ hooks: {
15
+ "astro:config:setup": (params) => {
16
+ addVirtualImports(params, {
17
+ name: packageIdentifier,
18
+ imports: {
19
+ "studiocms:markdoc/renderer": `
20
+ import { renderMarkDoc as _render } from '${internalRenderer}';
21
+
22
+ export const renderMarkDoc = _render;
23
+ export default renderMarkDoc;
24
+ `
25
+ }
26
+ });
27
+ },
28
+ "astro:config:done": () => {
29
+ shared.markDocConfig = resolvedOptions;
30
+ }
31
+ }
32
+ };
33
+ }
4
34
  function studiocmsMarkDoc(options) {
5
35
  const { resolve } = createResolver(import.meta.url);
6
36
  const packageIdentifier = "@studiocms/markdoc";
7
- const renderer = resolve("./components/MarkDocRenderer.astro");
37
+ const renderer = resolve("./components/render.js");
8
38
  const editor = resolve("./components/editor.astro");
9
- const internalRenderer = resolve("./lib/render.js");
10
39
  const resolvedOptions = {
11
40
  type: options?.type || "html",
12
41
  argParse: options?.argParse,
@@ -19,26 +48,7 @@ function studiocmsMarkDoc(options) {
19
48
  requires: ["@studiocms/md"],
20
49
  hooks: {
21
50
  "studiocms:astro:config": ({ addIntegrations }) => {
22
- addIntegrations({
23
- name: packageIdentifier,
24
- hooks: {
25
- "astro:config:setup": (params) => {
26
- addVirtualImports(params, {
27
- name: packageIdentifier,
28
- imports: {
29
- "studiocms:markdoc/renderer": `
30
- import { renderMarkDoc as _render } from '${internalRenderer}';
31
- export const renderMarkDoc = _render;
32
- export default renderMarkDoc;
33
- `
34
- }
35
- });
36
- },
37
- "astro:config:done": () => {
38
- shared.markDocConfig = resolvedOptions;
39
- }
40
- }
41
- });
51
+ addIntegrations(internalMarkDocIntegration(packageIdentifier, resolvedOptions));
42
52
  },
43
53
  "studiocms:config:setup": ({ setRendering }) => {
44
54
  setRendering({
@@ -59,5 +69,6 @@ function studiocmsMarkDoc(options) {
59
69
  var index_default = studiocmsMarkDoc;
60
70
  export {
61
71
  index_default as default,
72
+ internalMarkDocIntegration,
62
73
  studiocmsMarkDoc
63
74
  };
@@ -1,6 +1,5 @@
1
1
  import Markdoc from "@markdoc/markdoc";
2
2
  import { shared } from "./shared.js";
3
- const { argParse, transformConfig, type } = shared.markDocConfig;
4
3
  const renderHTML = {
5
4
  name: "html",
6
5
  render: async (content) => {
@@ -14,27 +13,17 @@ const renderReactStatic = {
14
13
  }
15
14
  };
16
15
  async function renderMarkDoc(content) {
16
+ const { argParse, transformConfig, type } = shared.markDocConfig;
17
17
  const ast = Markdoc.parse(content, argParse);
18
18
  const MarkDocContent = Markdoc.transform(ast, transformConfig);
19
19
  switch (type) {
20
- case "html": {
21
- const data = await renderHTML.render(MarkDocContent);
22
- return data;
23
- }
24
20
  case "react-static": {
25
21
  const data = await renderReactStatic.render(MarkDocContent);
26
22
  return data;
27
23
  }
28
24
  default: {
29
- if (!type) {
30
- throw new Error("Error in MarkDoc config, renderer not found.");
31
- }
32
- try {
33
- const data = await type.render(MarkDocContent);
34
- return data;
35
- } catch {
36
- throw new Error(`Error in MarkDoc renderer, Unable to render with ${type.name}`);
37
- }
25
+ const data = await renderHTML.render(MarkDocContent);
26
+ return data;
38
27
  }
39
28
  }
40
29
  }
@@ -5,7 +5,7 @@ export declare const symbol: symbol;
5
5
  * initialized as a new object with a `markDocConfig` property.
6
6
  *
7
7
  * @remarks
8
- * The `@ts-ignore` comments are used to suppress TypeScript errors related to the use of
8
+ * The `@ts-expect-error` comments are used to suppress TypeScript errors related to the use of
9
9
  * the global scope and assignment within expressions. The `biome-ignore` comment is used
10
10
  * to suppress linting errors for the same reason.
11
11
  */
@@ -1,8 +1,7 @@
1
1
  const symbol = Symbol.for("@studiocms/markdoc");
2
2
  const shared = (
3
- // @ts-ignore
4
- globalThis[symbol] || // @ts-ignore
5
- // biome-ignore lint/suspicious/noAssignInExpressions: This is a valid use case for assignment in expressions.
3
+ // @ts-expect-error
4
+ globalThis[symbol] || // @ts-expect-error
6
5
  (globalThis[symbol] = {
7
6
  markDocConfig: {}
8
7
  })
package/dist/types.d.ts CHANGED
@@ -4,7 +4,7 @@ export interface MarkDocRenderer {
4
4
  render: (content: RenderableTreeNode) => Promise<string>;
5
5
  }
6
6
  export interface MarkDocPluginOptions {
7
- type?: 'html' | 'react-static' | MarkDocRenderer;
7
+ type?: 'html' | 'react-static';
8
8
  argParse?: ParserArgs | undefined;
9
9
  transformConfig?: ConfigType | undefined;
10
10
  }
package/dist/virtual.d.ts CHANGED
@@ -4,5 +4,5 @@ declare module 'studiocms:markdoc/renderer' {
4
4
  }
5
5
 
6
6
  declare module 'virtual:studiocms/plugins/renderers' {
7
- export const studiocms_markdoc: typeof import('./components/MarkDocRenderer.astro').default;
7
+ export const studiocms_markdoc: typeof import('./components/render.js').default;
8
8
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@studiocms/markdoc",
3
- "version": "0.1.0-beta.26",
3
+ "version": "0.1.0-beta.28",
4
4
  "description": "Add MarkDoc Support to your StudioCMS project with ease!",
5
5
  "author": {
6
6
  "name": "withstudiocms",
@@ -51,40 +51,31 @@
51
51
  "./v/types": {
52
52
  "types": "./dist/virtual.d.ts",
53
53
  "default": "./dist/virtual.d.js"
54
- },
55
- "./react": {
56
- "types": "./dist/react-renderer/renderReact.d.ts",
57
- "default": "./dist/react-renderer/renderReact.js"
58
54
  }
59
55
  },
60
56
  "type": "module",
61
57
  "dependencies": {
62
58
  "@markdoc/markdoc": "^0.5.4",
63
- "astro-integration-kit": "^0.19.0",
64
- "react": "^19.1.1",
65
- "react-dom": "^19.1.1"
59
+ "astro-integration-kit": "^0.19.1",
60
+ "react": "^19.2.0",
61
+ "react-dom": "^19.2.0"
66
62
  },
67
63
  "devDependencies": {
68
64
  "@types/node": "^22.0.0",
69
- "@types/react": "^19.1.12",
70
- "@types/react-dom": "^19.1.9"
65
+ "@types/react": "^19.2.2",
66
+ "@types/react-dom": "^19.2.2"
71
67
  },
72
68
  "peerDependencies": {
73
- "@astrojs/react": "^4.3.0",
74
69
  "astro": "^5.12.9",
75
- "effect": "^3.17.13",
70
+ "effect": "^3.18.4",
76
71
  "vite": "^6.3.4",
77
- "@studiocms/md": "0.1.0-beta.26",
78
- "studiocms": "0.1.0-beta.26"
79
- },
80
- "peerDependenciesMeta": {
81
- "@astrojs/react": {
82
- "optional": true
83
- }
72
+ "@studiocms/md": "0.1.0-beta.28",
73
+ "studiocms": "0.1.0-beta.28"
84
74
  },
85
75
  "scripts": {
86
76
  "build": "buildkit build 'src/**/*.{ts,astro,css,json,png,d.ts}'",
87
77
  "dev": "buildkit dev 'src/**/*.{ts,astro,css,json,png,d.ts}'",
78
+ "test": "vitest",
88
79
  "typecheck": "tspc -p tsconfig.tspc.json"
89
80
  }
90
81
  }
@@ -1,15 +0,0 @@
1
- ---
2
- import renderMarkDoc from 'studiocms:markdoc/renderer';
3
- import type { PluginPageTypeRendererProps } from 'studiocms/types';
4
-
5
- interface Props extends PluginPageTypeRendererProps {}
6
-
7
- // Get default content
8
- const { defaultContent } = Astro.props.data;
9
-
10
- // Get content to render
11
- const contentToRender = defaultContent?.content || '# Error: No content found';
12
-
13
- const renderedContent = await renderMarkDoc(contentToRender);
14
- ---
15
- <Fragment set:html={renderedContent} />
@@ -1,8 +0,0 @@
1
- import type React from 'react';
2
- /**
3
- * React component for rendering generated MarkDoc React content within StudioCMS using the Astro Container API
4
- */
5
- export declare function MarkDocReactRenderer({ children }: {
6
- children: React.ReactNode;
7
- }): React.JSX.Element;
8
- export default MarkDocReactRenderer;
@@ -1,13 +0,0 @@
1
- ---
2
- import React from 'react';
3
- import { MarkDocReactRenderer } from './MarkDocReactRenderer.jsx';
4
-
5
- interface Props {
6
- content: React.ReactNode;
7
- }
8
-
9
- const { content } = Astro.props;
10
- ---
11
- <MarkDocReactRenderer client:load>
12
- {content}
13
- </MarkDocReactRenderer>
@@ -1,10 +0,0 @@
1
- import type { MarkDocRenderer } from '../types.js';
2
- /**
3
- * MarkDoc React Components
4
- *
5
- * The React components to use for rendering the content
6
- *
7
- * @type {Object} - The React components to use for rendering the content
8
- */
9
- export type markdocReactComponents = {} | undefined;
10
- export declare const renderReact: (components?: markdocReactComponents) => MarkDocRenderer;
@@ -1,30 +0,0 @@
1
- import reactRenderer from "@astrojs/react/server.js";
2
- import Markdoc from "@markdoc/markdoc";
3
- import { experimental_AstroContainer } from "astro/container";
4
- import * as React from "react";
5
- import ReactWrapper from "./ReactWrapper.astro";
6
- const renderReact = (components) => ({
7
- name: "react",
8
- render: async (content) => {
9
- const container = await experimental_AstroContainer.create();
10
- container.addServerRenderer({
11
- name: "@astrojs/react",
12
- renderer: reactRenderer
13
- });
14
- container.addClientRenderer({
15
- name: "@astrojs/react",
16
- entrypoint: "@astrojs/react/client.js"
17
- });
18
- const renderedContent = await container.renderToString(ReactWrapper, {
19
- props: {
20
- content: Markdoc.renderers.react(content, React, {
21
- components
22
- })
23
- }
24
- });
25
- return renderedContent;
26
- }
27
- });
28
- export {
29
- renderReact
30
- };