canopycms 0.0.25 → 0.0.26

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.
@@ -7,7 +7,7 @@
7
7
  export { defineAIContentConfig } from './types';
8
8
  export { createAIContentHandler } from './handler';
9
9
  export { generateAIContent } from './generate';
10
- export type { AIContentConfig, ExcludeConfig, BundleConfig, BundleFilter, FieldTransformFn, FieldTransforms, AIManifest, AIManifestCollection, AIManifestEntry, AIManifestBundle, AIEntry, AIEntryMeta, } from './types';
10
+ export type { AIContentConfig, ExcludeConfig, BundleConfig, BundleFilter, FieldTransformFn, FieldTransforms, ComponentProps, ComponentTransformFn, ComponentTransforms, BodyTransformFn, BodyTransforms, AIManifest, AIManifestCollection, AIManifestEntry, AIManifestBundle, AIEntry, AIEntryMeta, } from './types';
11
11
  export type { AIContentHandlerOptions } from './handler';
12
12
  export type { GenerateOptions, GenerateResult } from './generate';
13
13
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/ai/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,qBAAqB,EAAE,MAAM,SAAS,CAAA;AAC/C,OAAO,EAAE,sBAAsB,EAAE,MAAM,WAAW,CAAA;AAClD,OAAO,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAA;AAC9C,YAAY,EACV,eAAe,EACf,aAAa,EACb,YAAY,EACZ,YAAY,EACZ,gBAAgB,EAChB,eAAe,EACf,UAAU,EACV,oBAAoB,EACpB,eAAe,EACf,gBAAgB,EAChB,OAAO,EACP,WAAW,GACZ,MAAM,SAAS,CAAA;AAChB,YAAY,EAAE,uBAAuB,EAAE,MAAM,WAAW,CAAA;AACxD,YAAY,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,YAAY,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/ai/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,qBAAqB,EAAE,MAAM,SAAS,CAAA;AAC/C,OAAO,EAAE,sBAAsB,EAAE,MAAM,WAAW,CAAA;AAClD,OAAO,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAA;AAC9C,YAAY,EACV,eAAe,EACf,aAAa,EACb,YAAY,EACZ,YAAY,EACZ,gBAAgB,EAChB,eAAe,EACf,cAAc,EACd,oBAAoB,EACpB,mBAAmB,EACnB,eAAe,EACf,cAAc,EACd,UAAU,EACV,oBAAoB,EACpB,eAAe,EACf,gBAAgB,EAChB,OAAO,EACP,WAAW,GACZ,MAAM,SAAS,CAAA;AAChB,YAAY,EAAE,uBAAuB,EAAE,MAAM,WAAW,CAAA;AACxD,YAAY,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,YAAY,CAAA"}
@@ -1 +1 @@
1
- {"version":3,"file":"json-to-markdown.d.ts","sourceRoot":"","sources":["../../src/ai/json-to-markdown.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAIH,OAAO,KAAK,EAAE,OAAO,EAAE,eAAe,EAAE,MAAM,SAAS,CAAA;AAEvD;;;;;GAKG;AACH,wBAAgB,eAAe,CAAC,KAAK,EAAE,OAAO,EAAE,MAAM,CAAC,EAAE,eAAe,GAAG,MAAM,CA2BhF"}
1
+ {"version":3,"file":"json-to-markdown.d.ts","sourceRoot":"","sources":["../../src/ai/json-to-markdown.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAKH,OAAO,KAAK,EAAE,OAAO,EAAE,eAAe,EAAE,MAAM,SAAS,CAAA;AAEvD;;;;;GAKG;AACH,wBAAgB,eAAe,CAAC,KAAK,EAAE,OAAO,EAAE,MAAM,CAAC,EAAE,eAAe,GAAG,MAAM,CA2BhF"}
@@ -5,6 +5,7 @@
5
5
  * Handles all CanopyCMS field types including nested objects and blocks.
6
6
  */
7
7
  import { stripMdxImports } from './strip-mdx.js';
8
+ import { applyComponentTransforms } from './transform-components.js';
8
9
  /**
9
10
  * Convert an entry to clean markdown suitable for AI consumption.
10
11
  *
@@ -63,9 +64,16 @@ function renderMarkdownEntry(entry, config, skipFields) {
63
64
  if (parts.length > 0) {
64
65
  parts.push('');
65
66
  }
66
- // Append body — strip import/export statements for MDX entries
67
+ // Append body — pipeline: stripMdxImports componentTransforms bodyTransforms
67
68
  if (entry.body) {
68
- const body = entry.format === 'mdx' ? stripMdxImports(entry.body) : entry.body;
69
+ let body = entry.format === 'mdx' ? stripMdxImports(entry.body) : entry.body;
70
+ if (config?.componentTransforms && Object.keys(config.componentTransforms).length > 0) {
71
+ body = applyComponentTransforms(body, config.componentTransforms);
72
+ }
73
+ const bodyTransformFn = config?.bodyTransforms?.[entry.entryType];
74
+ if (bodyTransformFn) {
75
+ body = bodyTransformFn(body, entry);
76
+ }
69
77
  parts.push(body.trim());
70
78
  parts.push('');
71
79
  }
@@ -1 +1 @@
1
- {"version":3,"file":"json-to-markdown.js","sourceRoot":"","sources":["../../src/ai/json-to-markdown.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"json-to-markdown.js","sourceRoot":"","sources":["../../src/ai/json-to-markdown.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,27 @@
1
+ /**
2
+ * MDX component transform engine for AI content generation.
3
+ *
4
+ * Parses JSX components from MDX body content and applies adopter-defined
5
+ * transforms to convert them to clean markdown. Components inside fenced
6
+ * code blocks are left untouched.
7
+ *
8
+ * Uses a convergence loop: each pass transforms the innermost matching
9
+ * components, so nested components are handled naturally (inner first,
10
+ * outer on subsequent passes).
11
+ */
12
+ import type { ComponentProps, ComponentTransforms } from './types';
13
+ /**
14
+ * Parse JSX attribute string into a props object.
15
+ *
16
+ * Handles: `key="value"`, `key='value'`, `key={expr}`, and boolean `key` (→ "true").
17
+ */
18
+ export declare function parseComponentProps(attrString: string): ComponentProps;
19
+ /**
20
+ * Apply component transforms to a body string.
21
+ *
22
+ * For each registered component name, finds JSX tags in the body and calls
23
+ * the corresponding transform function. Processes via convergence loop to
24
+ * handle nesting (inner components first, outer on subsequent passes).
25
+ */
26
+ export declare function applyComponentTransforms(body: string, transforms: ComponentTransforms): string;
27
+ //# sourceMappingURL=transform-components.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"transform-components.d.ts","sourceRoot":"","sources":["../../src/ai/transform-components.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,KAAK,EAAE,cAAc,EAAE,mBAAmB,EAAE,MAAM,SAAS,CAAA;AAElE;;;;GAIG;AACH,wBAAgB,mBAAmB,CAAC,UAAU,EAAE,MAAM,GAAG,cAAc,CAiBtE;AAkDD;;;;;;GAMG;AACH,wBAAgB,wBAAwB,CAAC,IAAI,EAAE,MAAM,EAAE,UAAU,EAAE,mBAAmB,GAAG,MAAM,CAiE9F"}
@@ -0,0 +1,168 @@
1
+ /**
2
+ * MDX component transform engine for AI content generation.
3
+ *
4
+ * Parses JSX components from MDX body content and applies adopter-defined
5
+ * transforms to convert them to clean markdown. Components inside fenced
6
+ * code blocks are left untouched.
7
+ *
8
+ * Uses a convergence loop: each pass transforms the innermost matching
9
+ * components, so nested components are handled naturally (inner first,
10
+ * outer on subsequent passes).
11
+ */
12
+ /**
13
+ * Parse JSX attribute string into a props object.
14
+ *
15
+ * Handles: `key="value"`, `key='value'`, `key={expr}`, and boolean `key` (→ "true").
16
+ */
17
+ export function parseComponentProps(attrString) {
18
+ const props = {};
19
+ if (!attrString)
20
+ return props;
21
+ // Match attribute patterns: name="value", name='value', name={expr}, or bare name
22
+ // eslint-disable-next-line security/detect-unsafe-regex
23
+ const attrRegex = /(\w+)(?:\s*=\s*(?:"([^"]*)"|'([^']*)'|\{([^}]*)\}))?/g;
24
+ let match;
25
+ while ((match = attrRegex.exec(attrString)) !== null) {
26
+ const name = match[1];
27
+ // Double-quoted, single-quoted, expression, or boolean
28
+ const value = match[2] ?? match[3] ?? match[4] ?? 'true';
29
+ props[name] = value;
30
+ }
31
+ return props;
32
+ }
33
+ /**
34
+ * Mask fenced code blocks so component transforms don't touch them.
35
+ * Returns the masked string and a restore function.
36
+ */
37
+ /** Regex fragment matching JSX attribute content, skipping quoted strings containing '>'. */
38
+ const ATTR_CONTENT = `(?:[^>"']|"[^"]*"|'[^']*')*`;
39
+ const BLOCK_PREFIX = '<<CODEBLOCK';
40
+ const BLOCK_SUFFIX = '>>';
41
+ const BLOCK_RESTORE_RE = /<<CODEBLOCK(\d+)>>/g;
42
+ const INLINE_PREFIX = '<<INLINECODE';
43
+ const INLINE_SUFFIX = '>>';
44
+ const INLINE_RESTORE_RE = /<<INLINECODE(\d+)>>/g;
45
+ /**
46
+ * Mask fenced code blocks and inline code spans so component transforms
47
+ * don't touch them. Returns the masked string and a restore function.
48
+ */
49
+ function maskCodeBlocks(body) {
50
+ const blocks = [];
51
+ const inlines = [];
52
+ // 1. Mask fenced code blocks
53
+ let masked = body.replace(/^(```|~~~).*\n[\s\S]*?\n\1\s*$/gm, (block) => {
54
+ const idx = blocks.length;
55
+ blocks.push(block);
56
+ return `${BLOCK_PREFIX}${idx}${BLOCK_SUFFIX}`;
57
+ });
58
+ // 2. Mask inline code spans (double-backtick first, then single-backtick)
59
+ masked = masked.replace(/``[^`]+``|`[^`]+`/g, (span) => {
60
+ const idx = inlines.length;
61
+ inlines.push(span);
62
+ return `${INLINE_PREFIX}${idx}${INLINE_SUFFIX}`;
63
+ });
64
+ return {
65
+ masked,
66
+ restore: (s) => {
67
+ // Restore in reverse order: inline first, then blocks
68
+ s = s.replace(INLINE_RESTORE_RE, (_, i) => inlines[Number(i)]);
69
+ s = s.replace(BLOCK_RESTORE_RE, (_, i) => blocks[Number(i)]);
70
+ return s;
71
+ },
72
+ };
73
+ }
74
+ /**
75
+ * Apply component transforms to a body string.
76
+ *
77
+ * For each registered component name, finds JSX tags in the body and calls
78
+ * the corresponding transform function. Processes via convergence loop to
79
+ * handle nesting (inner components first, outer on subsequent passes).
80
+ */
81
+ export function applyComponentTransforms(body, transforms) {
82
+ const names = Object.keys(transforms);
83
+ if (names.length === 0)
84
+ return body;
85
+ // Mask code blocks to protect them from transformation
86
+ const { masked, restore } = maskCodeBlocks(body);
87
+ let result = masked;
88
+ const MAX_PASSES = 10;
89
+ for (let pass = 0; pass < MAX_PASSES; pass++) {
90
+ let changed = false;
91
+ for (const name of names) {
92
+ const transform = transforms[name];
93
+ // Match self-closing tags: <Name ... />
94
+ // eslint-disable-next-line security/detect-non-literal-regexp
95
+ const selfClosingRegex = new RegExp(`<${escapeRegex(name)}(\\s${ATTR_CONTENT}?)?\\s*/>`, 'g');
96
+ result = result.replace(selfClosingRegex, (raw, attrStr) => {
97
+ const props = parseComponentProps(attrStr?.trim() ?? '');
98
+ const replacement = transform(props, '');
99
+ if (replacement === undefined)
100
+ return raw;
101
+ changed = true;
102
+ return replacement;
103
+ });
104
+ // Match opening + closing tag pairs: <Name ...>children</Name>
105
+ // Search from an advancing offset to handle undefined (passthrough) returns
106
+ // eslint-disable-next-line security/detect-non-literal-regexp
107
+ const openRegex = new RegExp(`<${escapeRegex(name)}(\\s${ATTR_CONTENT})?>`, 'g');
108
+ let openMatch;
109
+ while ((openMatch = openRegex.exec(result)) !== null) {
110
+ const openStart = openMatch.index;
111
+ const openEnd = openStart + openMatch[0].length;
112
+ const attrStr = openMatch[1]?.trim() ?? '';
113
+ // Find matching close tag, accounting for nesting
114
+ const closeTag = `</${name}>`;
115
+ const closeIdx = findMatchingClose(result, openEnd, name, closeTag);
116
+ if (closeIdx === -1)
117
+ break; // unmatched — stop processing this component
118
+ const children = result.slice(openEnd, closeIdx);
119
+ const fullEnd = closeIdx + closeTag.length;
120
+ const props = parseComponentProps(attrStr);
121
+ const replacement = transform(props, children);
122
+ if (replacement === undefined) {
123
+ // Skip past this match — advance regex past the closing tag
124
+ openRegex.lastIndex = fullEnd;
125
+ continue;
126
+ }
127
+ result = result.slice(0, openStart) + replacement + result.slice(fullEnd);
128
+ changed = true;
129
+ // Reset regex to search from replacement position (it may be shorter/longer)
130
+ openRegex.lastIndex = openStart + replacement.length;
131
+ }
132
+ }
133
+ if (!changed)
134
+ break;
135
+ }
136
+ return restore(result);
137
+ }
138
+ /**
139
+ * Find the index of the matching closing tag, accounting for nested
140
+ * instances of the same component.
141
+ */
142
+ function findMatchingClose(body, startFrom, name, closeTag) {
143
+ let depth = 1;
144
+ const pos = startFrom;
145
+ // Regex to find either an opening or closing tag for this component
146
+ // eslint-disable-next-line security/detect-non-literal-regexp
147
+ const tagRegex = new RegExp(`<${escapeRegex(name)}(?:\\s${ATTR_CONTENT})?>|<${escapeRegex(name)}(?:\\s${ATTR_CONTENT})?\\s*/>|${escapeRegex(closeTag)}`, 'g');
148
+ tagRegex.lastIndex = pos;
149
+ let match;
150
+ while ((match = tagRegex.exec(body)) !== null) {
151
+ const tag = match[0];
152
+ if (tag === closeTag) {
153
+ depth--;
154
+ if (depth === 0)
155
+ return match.index;
156
+ }
157
+ else if (!tag.endsWith('/>')) {
158
+ // Opening tag (not self-closing)
159
+ depth++;
160
+ }
161
+ // Self-closing tags don't affect depth
162
+ }
163
+ return -1;
164
+ }
165
+ function escapeRegex(s) {
166
+ return s.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
167
+ }
168
+ //# sourceMappingURL=transform-components.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"transform-components.js","sourceRoot":"","sources":["../../src/ai/transform-components.ts"],"names":[],"mappings":"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"}
@@ -74,6 +74,52 @@ export type FieldTransformFn = (value: unknown, fieldConfig: FieldConfig) => str
74
74
  * ```
75
75
  */
76
76
  export type FieldTransforms = Record<string, Record<string, FieldTransformFn>>;
77
+ /**
78
+ * Parsed props from a JSX component tag.
79
+ * Values are always strings (parsed from attribute syntax).
80
+ * Boolean attributes (no value) are represented as `"true"`.
81
+ */
82
+ export type ComponentProps = Record<string, string>;
83
+ /**
84
+ * Transform function for a specific MDX component.
85
+ * Return `undefined` to keep the original JSX unchanged.
86
+ *
87
+ * @param props - Parsed props from the JSX tag
88
+ * @param children - Inner content between open/close tags (empty string for self-closing)
89
+ * @returns Markdown string to replace the component, or `undefined` to keep original
90
+ */
91
+ export type ComponentTransformFn = (props: ComponentProps, children: string) => string | undefined;
92
+ /**
93
+ * Component transform overrides, keyed by PascalCase component name.
94
+ * Applied to all MD/MDX entry types — component names are global to a project.
95
+ *
96
+ * @example
97
+ * ```ts
98
+ * {
99
+ * Callout: (props, children) => `> **${props.type ?? 'Note'}:** ${children}`,
100
+ * Spacer: () => '',
101
+ * ChecklistItem: (props, children) =>
102
+ * `- [ ] ${props.label ? `**${props.label}:** ` : ''}${children}`,
103
+ * }
104
+ * ```
105
+ */
106
+ export type ComponentTransforms = Record<string, ComponentTransformFn>;
107
+ /**
108
+ * Body transform function for MD/MDX entry bodies.
109
+ * Receives the body after stripMdxImports and componentTransforms have been applied.
110
+ */
111
+ export type BodyTransformFn = (body: string, entry: AIEntryMeta) => string;
112
+ /**
113
+ * Body transform overrides, keyed by entry type name.
114
+ *
115
+ * @example
116
+ * ```ts
117
+ * {
118
+ * guideline: (body) => body.replace(/\s*\|\|[^\n]+/g, ''),
119
+ * }
120
+ * ```
121
+ */
122
+ export type BodyTransforms = Record<string, BodyTransformFn>;
77
123
  /**
78
124
  * Main AI content configuration. Shared by route handler and build utility.
79
125
  */
@@ -84,6 +130,10 @@ export interface AIContentConfig {
84
130
  bundles?: BundleConfig[];
85
131
  /** Per-entry-type, per-field markdown overrides */
86
132
  fieldTransforms?: FieldTransforms;
133
+ /** Per-component MDX transforms (applied before bodyTransforms) */
134
+ componentTransforms?: ComponentTransforms;
135
+ /** Per-entry-type body transforms (applied after componentTransforms) */
136
+ bodyTransforms?: BodyTransforms;
87
137
  }
88
138
  /**
89
139
  * Identity function for type-checking AI content config.
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/ai/types.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/ai/types.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/ai/types.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AA+FH;;;GAGG;AACH,MAAM,UAAU,qBAAqB,CAAC,MAAuB;IAC3D,OAAO,MAAM,CAAA;AACf,CAAC"}
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/ai/types.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAsJH;;;GAGG;AACH,MAAM,UAAU,qBAAqB,CAAC,MAAuB;IAC3D,OAAO,MAAM,CAAA;AACf,CAAC"}
@@ -1974,6 +1974,119 @@ function stripMdxImports(body) {
1974
1974
  return result.join("\n").replace(/\n{3,}/g, "\n\n").trim();
1975
1975
  }
1976
1976
 
1977
+ // dist/ai/transform-components.js
1978
+ function parseComponentProps(attrString) {
1979
+ const props = {};
1980
+ if (!attrString)
1981
+ return props;
1982
+ const attrRegex = /(\w+)(?:\s*=\s*(?:"([^"]*)"|'([^']*)'|\{([^}]*)\}))?/g;
1983
+ let match;
1984
+ while ((match = attrRegex.exec(attrString)) !== null) {
1985
+ const name = match[1];
1986
+ const value = match[2] ?? match[3] ?? match[4] ?? "true";
1987
+ props[name] = value;
1988
+ }
1989
+ return props;
1990
+ }
1991
+ var ATTR_CONTENT = `(?:[^>"']|"[^"]*"|'[^']*')*`;
1992
+ var BLOCK_PREFIX = "<<CODEBLOCK";
1993
+ var BLOCK_SUFFIX = ">>";
1994
+ var BLOCK_RESTORE_RE = /<<CODEBLOCK(\d+)>>/g;
1995
+ var INLINE_PREFIX = "<<INLINECODE";
1996
+ var INLINE_SUFFIX = ">>";
1997
+ var INLINE_RESTORE_RE = /<<INLINECODE(\d+)>>/g;
1998
+ function maskCodeBlocks(body) {
1999
+ const blocks = [];
2000
+ const inlines = [];
2001
+ let masked = body.replace(/^(```|~~~).*\n[\s\S]*?\n\1\s*$/gm, (block) => {
2002
+ const idx = blocks.length;
2003
+ blocks.push(block);
2004
+ return `${BLOCK_PREFIX}${idx}${BLOCK_SUFFIX}`;
2005
+ });
2006
+ masked = masked.replace(/``[^`]+``|`[^`]+`/g, (span) => {
2007
+ const idx = inlines.length;
2008
+ inlines.push(span);
2009
+ return `${INLINE_PREFIX}${idx}${INLINE_SUFFIX}`;
2010
+ });
2011
+ return {
2012
+ masked,
2013
+ restore: (s) => {
2014
+ s = s.replace(INLINE_RESTORE_RE, (_, i) => inlines[Number(i)]);
2015
+ s = s.replace(BLOCK_RESTORE_RE, (_, i) => blocks[Number(i)]);
2016
+ return s;
2017
+ }
2018
+ };
2019
+ }
2020
+ function applyComponentTransforms(body, transforms) {
2021
+ const names = Object.keys(transforms);
2022
+ if (names.length === 0)
2023
+ return body;
2024
+ const { masked, restore } = maskCodeBlocks(body);
2025
+ let result = masked;
2026
+ const MAX_PASSES = 10;
2027
+ for (let pass = 0; pass < MAX_PASSES; pass++) {
2028
+ let changed = false;
2029
+ for (const name of names) {
2030
+ const transform = transforms[name];
2031
+ const selfClosingRegex = new RegExp(`<${escapeRegex(name)}(\\s${ATTR_CONTENT}?)?\\s*/>`, "g");
2032
+ result = result.replace(selfClosingRegex, (raw, attrStr) => {
2033
+ const props = parseComponentProps(attrStr?.trim() ?? "");
2034
+ const replacement = transform(props, "");
2035
+ if (replacement === void 0)
2036
+ return raw;
2037
+ changed = true;
2038
+ return replacement;
2039
+ });
2040
+ const openRegex = new RegExp(`<${escapeRegex(name)}(\\s${ATTR_CONTENT})?>`, "g");
2041
+ let openMatch;
2042
+ while ((openMatch = openRegex.exec(result)) !== null) {
2043
+ const openStart = openMatch.index;
2044
+ const openEnd = openStart + openMatch[0].length;
2045
+ const attrStr = openMatch[1]?.trim() ?? "";
2046
+ const closeTag = `</${name}>`;
2047
+ const closeIdx = findMatchingClose(result, openEnd, name, closeTag);
2048
+ if (closeIdx === -1)
2049
+ break;
2050
+ const children = result.slice(openEnd, closeIdx);
2051
+ const fullEnd = closeIdx + closeTag.length;
2052
+ const props = parseComponentProps(attrStr);
2053
+ const replacement = transform(props, children);
2054
+ if (replacement === void 0) {
2055
+ openRegex.lastIndex = fullEnd;
2056
+ continue;
2057
+ }
2058
+ result = result.slice(0, openStart) + replacement + result.slice(fullEnd);
2059
+ changed = true;
2060
+ openRegex.lastIndex = openStart + replacement.length;
2061
+ }
2062
+ }
2063
+ if (!changed)
2064
+ break;
2065
+ }
2066
+ return restore(result);
2067
+ }
2068
+ function findMatchingClose(body, startFrom, name, closeTag) {
2069
+ let depth = 1;
2070
+ const pos = startFrom;
2071
+ const tagRegex = new RegExp(`<${escapeRegex(name)}(?:\\s${ATTR_CONTENT})?>|<${escapeRegex(name)}(?:\\s${ATTR_CONTENT})?\\s*/>|${escapeRegex(closeTag)}`, "g");
2072
+ tagRegex.lastIndex = pos;
2073
+ let match;
2074
+ while ((match = tagRegex.exec(body)) !== null) {
2075
+ const tag = match[0];
2076
+ if (tag === closeTag) {
2077
+ depth--;
2078
+ if (depth === 0)
2079
+ return match.index;
2080
+ } else if (!tag.endsWith("/>")) {
2081
+ depth++;
2082
+ }
2083
+ }
2084
+ return -1;
2085
+ }
2086
+ function escapeRegex(s) {
2087
+ return s.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
2088
+ }
2089
+
1977
2090
  // dist/ai/json-to-markdown.js
1978
2091
  function entryToMarkdown(entry, config) {
1979
2092
  const parts = [];
@@ -2017,7 +2130,14 @@ function renderMarkdownEntry(entry, config, skipFields) {
2017
2130
  parts.push("");
2018
2131
  }
2019
2132
  if (entry.body) {
2020
- const body = entry.format === "mdx" ? stripMdxImports(entry.body) : entry.body;
2133
+ let body = entry.format === "mdx" ? stripMdxImports(entry.body) : entry.body;
2134
+ if (config?.componentTransforms && Object.keys(config.componentTransforms).length > 0) {
2135
+ body = applyComponentTransforms(body, config.componentTransforms);
2136
+ }
2137
+ const bodyTransformFn = config?.bodyTransforms?.[entry.entryType];
2138
+ if (bodyTransformFn) {
2139
+ body = bodyTransformFn(body, entry);
2140
+ }
2021
2141
  parts.push(body.trim());
2022
2142
  parts.push("");
2023
2143
  }
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "//": "@codemirror/language, @lezer/highlight: workaround — @mdxeditor/editor uses cm6-theme-basic-light which peer-requires these but mdxeditor doesn't declare them as dependencies",
3
3
  "name": "canopycms",
4
- "version": "0.0.25",
4
+ "version": "0.0.26",
5
5
  "description": "CanopyCMS core package: schema-driven content, branch-aware editing, and editor UI for Next.js.",
6
6
  "license": "MIT",
7
7
  "repository": {