ai-props 2.1.3 → 2.4.0
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/.dev.vars +2 -0
- package/.turbo/turbo-build.log +1 -1
- package/CHANGELOG.md +20 -0
- package/README.md +2 -0
- package/dist/ai.d.ts.map +1 -1
- package/dist/ai.js +4 -4
- package/dist/ai.js.map +1 -1
- package/dist/cascade.d.ts +329 -0
- package/dist/cascade.d.ts.map +1 -0
- package/dist/cascade.js +522 -0
- package/dist/cascade.js.map +1 -0
- package/dist/client.d.ts +233 -0
- package/dist/client.d.ts.map +1 -0
- package/dist/client.js +191 -0
- package/dist/client.js.map +1 -0
- package/dist/durable-cascade.d.ts +280 -0
- package/dist/durable-cascade.d.ts.map +1 -0
- package/dist/durable-cascade.js +469 -0
- package/dist/durable-cascade.js.map +1 -0
- package/dist/event-bridge.d.ts +257 -0
- package/dist/event-bridge.d.ts.map +1 -0
- package/dist/event-bridge.js +317 -0
- package/dist/event-bridge.js.map +1 -0
- package/dist/generate.d.ts.map +1 -1
- package/dist/generate.js +12 -6
- package/dist/generate.js.map +1 -1
- package/dist/hoc.d.ts.map +1 -1
- package/dist/hoc.js +13 -13
- package/dist/hoc.js.map +1 -1
- package/dist/hono-jsx.d.ts +208 -0
- package/dist/hono-jsx.d.ts.map +1 -0
- package/dist/hono-jsx.js +459 -0
- package/dist/hono-jsx.js.map +1 -0
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -0
- package/dist/index.js.map +1 -1
- package/dist/mdx-types.d.ts +152 -0
- package/dist/mdx-types.d.ts.map +1 -0
- package/dist/mdx-types.js +9 -0
- package/dist/mdx-types.js.map +1 -0
- package/dist/mdx-utils.d.ts +106 -0
- package/dist/mdx-utils.d.ts.map +1 -0
- package/dist/mdx-utils.js +384 -0
- package/dist/mdx-utils.js.map +1 -0
- package/dist/mdx.d.ts +230 -0
- package/dist/mdx.d.ts.map +1 -0
- package/dist/mdx.js +820 -0
- package/dist/mdx.js.map +1 -0
- package/dist/rpc.d.ts +313 -0
- package/dist/rpc.d.ts.map +1 -0
- package/dist/rpc.js +359 -0
- package/dist/rpc.js.map +1 -0
- package/dist/streaming.d.ts +199 -0
- package/dist/streaming.d.ts.map +1 -0
- package/dist/streaming.js +402 -0
- package/dist/streaming.js.map +1 -0
- package/dist/validate.d.ts.map +1 -1
- package/dist/validate.js +11 -13
- package/dist/validate.js.map +1 -1
- package/dist/worker.d.ts +270 -0
- package/dist/worker.d.ts.map +1 -0
- package/dist/worker.js +405 -0
- package/dist/worker.js.map +1 -0
- package/package.json +39 -13
- package/src/ai.ts +12 -31
- package/src/cascade.ts +795 -0
- package/src/client.ts +440 -0
- package/src/durable-cascade.ts +743 -0
- package/src/event-bridge.ts +478 -0
- package/src/generate.ts +14 -12
- package/src/hoc.ts +15 -19
- package/src/hono-jsx.ts +675 -0
- package/src/index.ts +30 -0
- package/src/mdx-types.ts +169 -0
- package/src/mdx-utils.ts +437 -0
- package/src/mdx.ts +1008 -0
- package/src/rpc.ts +614 -0
- package/src/streaming.ts +618 -0
- package/src/validate.ts +15 -29
- package/src/worker.ts +547 -0
- package/test/cascade.test.ts +338 -0
- package/test/durable-cascade.test.ts +319 -0
- package/test/event-bridge.test.ts +351 -0
- package/test/generate.test.ts +6 -16
- package/test/mdx.test.ts +817 -0
- package/test/worker/capnweb-rpc.test.ts +1084 -0
- package/test/worker/full-flow.integration.test.ts +1463 -0
- package/test/worker/hono-jsx.test.ts +1258 -0
- package/test/worker/mdx-parsing.test.ts +1148 -0
- package/test/worker/setup.ts +56 -0
- package/test/worker.test.ts +595 -0
- package/tsconfig.json +2 -1
- package/vitest.config.js +6 -0
- package/vitest.config.ts +15 -1
- package/vitest.workers.config.ts +58 -0
- package/wrangler.jsonc +27 -0
- package/LICENSE +0 -21
- package/src/ai.js +0 -198
- package/src/cache.js +0 -182
- package/src/generate.js +0 -220
- package/src/hoc.js +0 -235
- package/src/index.js +0 -20
- package/src/types.js +0 -6
- package/src/validate.js +0 -252
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mdx-types.js","sourceRoot":"","sources":["../src/mdx-types.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG"}
|
|
@@ -0,0 +1,106 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* MDX utility functions
|
|
3
|
+
*
|
|
4
|
+
* Internal utilities for MDX parsing, component extraction, and content hashing.
|
|
5
|
+
*
|
|
6
|
+
* @packageDocumentation
|
|
7
|
+
*/
|
|
8
|
+
import type { MDXParseError } from './mdx-types.js';
|
|
9
|
+
/**
|
|
10
|
+
* Default cache TTL for MDX parsing (5 minutes)
|
|
11
|
+
*/
|
|
12
|
+
export declare const MDX_CACHE_TTL: number;
|
|
13
|
+
/**
|
|
14
|
+
* Create a content hash for cache keys
|
|
15
|
+
*
|
|
16
|
+
* Uses a simple but fast hash algorithm suitable for cache keys.
|
|
17
|
+
*
|
|
18
|
+
* @param content - Content to hash
|
|
19
|
+
* @returns Hash string
|
|
20
|
+
*/
|
|
21
|
+
export declare function hashContent(content: string): string;
|
|
22
|
+
/**
|
|
23
|
+
* Create an MDX parse error with location information
|
|
24
|
+
*
|
|
25
|
+
* @param message - Error message
|
|
26
|
+
* @param source - Source content where error occurred
|
|
27
|
+
* @param position - Position in source (optional)
|
|
28
|
+
* @returns MDXParseError
|
|
29
|
+
*/
|
|
30
|
+
export declare function createParseError(message: string, source?: string, position?: number): MDXParseError;
|
|
31
|
+
/**
|
|
32
|
+
* Parse YAML frontmatter
|
|
33
|
+
*
|
|
34
|
+
* Handles basic YAML types: strings, numbers, booleans, arrays, and nested objects.
|
|
35
|
+
*
|
|
36
|
+
* @param yaml - YAML content string
|
|
37
|
+
* @returns Parsed key-value pairs
|
|
38
|
+
* @throws Error if YAML is invalid
|
|
39
|
+
*/
|
|
40
|
+
export declare function parseYAML(yaml: string): Record<string, unknown>;
|
|
41
|
+
/**
|
|
42
|
+
* Parse a YAML value to its appropriate type
|
|
43
|
+
*
|
|
44
|
+
* @param value - YAML value string
|
|
45
|
+
* @returns Parsed value
|
|
46
|
+
* @throws Error if value is malformed
|
|
47
|
+
*/
|
|
48
|
+
export declare function parseYAMLValue(value: string): unknown;
|
|
49
|
+
/**
|
|
50
|
+
* Extract component names from MDX content
|
|
51
|
+
*
|
|
52
|
+
* Finds all PascalCase JSX component tags.
|
|
53
|
+
*
|
|
54
|
+
* @param content - MDX body content
|
|
55
|
+
* @returns Array of unique component names
|
|
56
|
+
*/
|
|
57
|
+
export declare function extractComponents(content: string): string[];
|
|
58
|
+
/**
|
|
59
|
+
* Extract props from a component tag string
|
|
60
|
+
*
|
|
61
|
+
* Parses string props, expression props, and boolean props.
|
|
62
|
+
*
|
|
63
|
+
* @param tag - Component tag content (attributes portion)
|
|
64
|
+
* @returns Props object
|
|
65
|
+
*/
|
|
66
|
+
export declare function extractPropsFromTag(tag: string): Record<string, unknown>;
|
|
67
|
+
/**
|
|
68
|
+
* Extract component props from all components in MDX content
|
|
69
|
+
*
|
|
70
|
+
* @param content - MDX body content
|
|
71
|
+
* @returns Map of component names to their props
|
|
72
|
+
*/
|
|
73
|
+
export declare function extractComponentProps(content: string): Record<string, Record<string, unknown>>;
|
|
74
|
+
/**
|
|
75
|
+
* Validate MDX syntax
|
|
76
|
+
*
|
|
77
|
+
* Checks for unclosed tags and invalid prop syntax.
|
|
78
|
+
*
|
|
79
|
+
* @param content - MDX body content
|
|
80
|
+
* @throws MDXParseError if syntax is invalid
|
|
81
|
+
*/
|
|
82
|
+
export declare function validateMDX(content: string): void;
|
|
83
|
+
/**
|
|
84
|
+
* Serialize props to JSX attribute string
|
|
85
|
+
*
|
|
86
|
+
* @param props - Props object
|
|
87
|
+
* @returns JSX attribute string
|
|
88
|
+
*/
|
|
89
|
+
export declare function serializeProps(props: Record<string, unknown>): string;
|
|
90
|
+
/**
|
|
91
|
+
* Sort object keys for consistent hashing
|
|
92
|
+
*
|
|
93
|
+
* @param obj - Object to sort
|
|
94
|
+
* @returns Object with sorted keys
|
|
95
|
+
*/
|
|
96
|
+
export declare function sortObject(obj: Record<string, unknown>): Record<string, unknown>;
|
|
97
|
+
/**
|
|
98
|
+
* Create a cache key for MDX props generation
|
|
99
|
+
*
|
|
100
|
+
* @param componentName - Component name
|
|
101
|
+
* @param schema - Component schema
|
|
102
|
+
* @param context - Frontmatter context
|
|
103
|
+
* @returns Cache key string
|
|
104
|
+
*/
|
|
105
|
+
export declare function createMDXCacheKey(componentName: string, schema: Record<string, string>, context?: Record<string, unknown>): string;
|
|
106
|
+
//# sourceMappingURL=mdx-utils.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mdx-utils.d.ts","sourceRoot":"","sources":["../src/mdx-utils.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAAa,aAAa,EAAE,MAAM,gBAAgB,CAAA;AAE9D;;GAEG;AACH,eAAO,MAAM,aAAa,QAAgB,CAAA;AAE1C;;;;;;;GAOG;AACH,wBAAgB,WAAW,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAQnD;AAED;;;;;;;GAOG;AACH,wBAAgB,gBAAgB,CAC9B,OAAO,EAAE,MAAM,EACf,MAAM,CAAC,EAAE,MAAM,EACf,QAAQ,CAAC,EAAE,MAAM,GAChB,aAAa,CAaf;AAED;;;;;;;;GAQG;AACH,wBAAgB,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CA4E/D;AAED;;;;;;GAMG;AACH,wBAAgB,cAAc,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CA0BrD;AAED;;;;;;;GAOG;AACH,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,EAAE,CAgB3D;AAED;;;;;;;GAOG;AACH,wBAAgB,mBAAmB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAmDxE;AAED;;;;;GAKG;AACH,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAwB9F;AAED;;;;;;;GAOG;AACH,wBAAgB,WAAW,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CA0EjD;AAED;;;;;GAKG;AACH,wBAAgB,cAAc,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,CASrE;AAED;;;;;GAKG;AACH,wBAAgB,UAAU,CAAC,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAUhF;AAED;;;;;;;GAOG;AACH,wBAAgB,iBAAiB,CAC/B,aAAa,EAAE,MAAM,EACrB,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EAC9B,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAChC,MAAM,CAIR"}
|
|
@@ -0,0 +1,384 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* MDX utility functions
|
|
3
|
+
*
|
|
4
|
+
* Internal utilities for MDX parsing, component extraction, and content hashing.
|
|
5
|
+
*
|
|
6
|
+
* @packageDocumentation
|
|
7
|
+
*/
|
|
8
|
+
/**
|
|
9
|
+
* Default cache TTL for MDX parsing (5 minutes)
|
|
10
|
+
*/
|
|
11
|
+
export const MDX_CACHE_TTL = 5 * 60 * 1000;
|
|
12
|
+
/**
|
|
13
|
+
* Create a content hash for cache keys
|
|
14
|
+
*
|
|
15
|
+
* Uses a simple but fast hash algorithm suitable for cache keys.
|
|
16
|
+
*
|
|
17
|
+
* @param content - Content to hash
|
|
18
|
+
* @returns Hash string
|
|
19
|
+
*/
|
|
20
|
+
export function hashContent(content) {
|
|
21
|
+
let hash = 0;
|
|
22
|
+
for (let i = 0; i < content.length; i++) {
|
|
23
|
+
const char = content.charCodeAt(i);
|
|
24
|
+
hash = (hash << 5) - hash + char;
|
|
25
|
+
hash = hash & hash; // Convert to 32-bit integer
|
|
26
|
+
}
|
|
27
|
+
return hash.toString(36);
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* Create an MDX parse error with location information
|
|
31
|
+
*
|
|
32
|
+
* @param message - Error message
|
|
33
|
+
* @param source - Source content where error occurred
|
|
34
|
+
* @param position - Position in source (optional)
|
|
35
|
+
* @returns MDXParseError
|
|
36
|
+
*/
|
|
37
|
+
export function createParseError(message, source, position) {
|
|
38
|
+
const error = new Error(message);
|
|
39
|
+
if (source !== undefined) {
|
|
40
|
+
error.source = source;
|
|
41
|
+
}
|
|
42
|
+
if (source && position !== undefined) {
|
|
43
|
+
const lines = source.slice(0, position).split('\n');
|
|
44
|
+
error.line = lines.length;
|
|
45
|
+
error.column = (lines[lines.length - 1]?.length || 0) + 1;
|
|
46
|
+
}
|
|
47
|
+
return error;
|
|
48
|
+
}
|
|
49
|
+
/**
|
|
50
|
+
* Parse YAML frontmatter
|
|
51
|
+
*
|
|
52
|
+
* Handles basic YAML types: strings, numbers, booleans, arrays, and nested objects.
|
|
53
|
+
*
|
|
54
|
+
* @param yaml - YAML content string
|
|
55
|
+
* @returns Parsed key-value pairs
|
|
56
|
+
* @throws Error if YAML is invalid
|
|
57
|
+
*/
|
|
58
|
+
export function parseYAML(yaml) {
|
|
59
|
+
const result = {};
|
|
60
|
+
const lines = yaml.trim().split('\n');
|
|
61
|
+
// Stack for tracking nested objects
|
|
62
|
+
// Each entry stores: the parent object, the parent indent level, and the current object's indent
|
|
63
|
+
const stack = [];
|
|
64
|
+
let currentObj = result;
|
|
65
|
+
let currentIndent = -1; // Use -1 for root level
|
|
66
|
+
let currentArray = null;
|
|
67
|
+
for (const line of lines) {
|
|
68
|
+
// Skip empty lines
|
|
69
|
+
if (!line.trim())
|
|
70
|
+
continue;
|
|
71
|
+
// Calculate indentation
|
|
72
|
+
const indentMatch = line.match(/^(\s*)/);
|
|
73
|
+
const indent = indentMatch && indentMatch[1] !== undefined ? indentMatch[1].length : 0;
|
|
74
|
+
// Pop stack if we've dedented (back to a parent level or sibling)
|
|
75
|
+
while (stack.length > 0 && indent <= stack[stack.length - 1].thisIndent) {
|
|
76
|
+
const popped = stack.pop();
|
|
77
|
+
currentObj = popped.parentObj;
|
|
78
|
+
currentIndent = popped.parentIndent;
|
|
79
|
+
currentArray = null;
|
|
80
|
+
}
|
|
81
|
+
// Check for array item
|
|
82
|
+
const arrayMatch = line.match(/^(\s*)-\s*(.*)$/);
|
|
83
|
+
if (arrayMatch && arrayMatch[2] !== undefined && currentArray !== null) {
|
|
84
|
+
const value = parseYAMLValue(arrayMatch[2].trim());
|
|
85
|
+
currentArray.push(value);
|
|
86
|
+
continue;
|
|
87
|
+
}
|
|
88
|
+
// Check for key-value pair (supporting special chars like $)
|
|
89
|
+
const keyMatch = line.match(/^(\s*)([\w$]+):\s*(.*)$/);
|
|
90
|
+
if (keyMatch && keyMatch[2] !== undefined && keyMatch[3] !== undefined) {
|
|
91
|
+
const key = keyMatch[2];
|
|
92
|
+
const value = keyMatch[3].trim();
|
|
93
|
+
// If the value is empty, this might be a nested object or array
|
|
94
|
+
if (value === '') {
|
|
95
|
+
// Check if this is an array or nested object by looking at the next line
|
|
96
|
+
const lineIndex = lines.indexOf(line);
|
|
97
|
+
const nextLine = lines[lineIndex + 1];
|
|
98
|
+
if (nextLine && nextLine.trim().startsWith('-')) {
|
|
99
|
+
// It's an array
|
|
100
|
+
currentArray = [];
|
|
101
|
+
currentObj[key] = currentArray;
|
|
102
|
+
}
|
|
103
|
+
else {
|
|
104
|
+
// It's a nested object
|
|
105
|
+
const nestedObj = {};
|
|
106
|
+
currentObj[key] = nestedObj;
|
|
107
|
+
stack.push({
|
|
108
|
+
parentObj: currentObj,
|
|
109
|
+
parentIndent: currentIndent,
|
|
110
|
+
thisIndent: indent,
|
|
111
|
+
});
|
|
112
|
+
currentObj = nestedObj;
|
|
113
|
+
currentIndent = indent;
|
|
114
|
+
currentArray = null;
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
else {
|
|
118
|
+
currentObj[key] = parseYAMLValue(value);
|
|
119
|
+
currentArray = null;
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
return result;
|
|
124
|
+
}
|
|
125
|
+
/**
|
|
126
|
+
* Parse a YAML value to its appropriate type
|
|
127
|
+
*
|
|
128
|
+
* @param value - YAML value string
|
|
129
|
+
* @returns Parsed value
|
|
130
|
+
* @throws Error if value is malformed
|
|
131
|
+
*/
|
|
132
|
+
export function parseYAMLValue(value) {
|
|
133
|
+
// Boolean
|
|
134
|
+
if (value === 'true')
|
|
135
|
+
return true;
|
|
136
|
+
if (value === 'false')
|
|
137
|
+
return false;
|
|
138
|
+
// Number
|
|
139
|
+
const num = Number(value);
|
|
140
|
+
if (!isNaN(num) && value !== '')
|
|
141
|
+
return num;
|
|
142
|
+
// String (remove quotes if present)
|
|
143
|
+
if ((value.startsWith('"') && value.endsWith('"')) ||
|
|
144
|
+
(value.startsWith("'") && value.endsWith("'"))) {
|
|
145
|
+
return value.slice(1, -1);
|
|
146
|
+
}
|
|
147
|
+
// Check for invalid YAML (incomplete objects/arrays)
|
|
148
|
+
if (value.startsWith('[') && !value.endsWith(']')) {
|
|
149
|
+
throw createParseError('Invalid YAML: unclosed array');
|
|
150
|
+
}
|
|
151
|
+
if (value.startsWith('{') && !value.endsWith('}')) {
|
|
152
|
+
throw createParseError('Invalid YAML: unclosed object');
|
|
153
|
+
}
|
|
154
|
+
return value;
|
|
155
|
+
}
|
|
156
|
+
/**
|
|
157
|
+
* Extract component names from MDX content
|
|
158
|
+
*
|
|
159
|
+
* Finds all PascalCase JSX component tags.
|
|
160
|
+
*
|
|
161
|
+
* @param content - MDX body content
|
|
162
|
+
* @returns Array of unique component names
|
|
163
|
+
*/
|
|
164
|
+
export function extractComponents(content) {
|
|
165
|
+
const components = new Set();
|
|
166
|
+
// Match JSX component tags (PascalCase)
|
|
167
|
+
// Self-closing: <Component />
|
|
168
|
+
// Opening: <Component>
|
|
169
|
+
const tagRegex = /<([A-Z][a-zA-Z0-9]*)(?:\s|>|\/)/g;
|
|
170
|
+
let match;
|
|
171
|
+
while ((match = tagRegex.exec(content)) !== null) {
|
|
172
|
+
if (match[1]) {
|
|
173
|
+
components.add(match[1]);
|
|
174
|
+
}
|
|
175
|
+
}
|
|
176
|
+
return Array.from(components);
|
|
177
|
+
}
|
|
178
|
+
/**
|
|
179
|
+
* Extract props from a component tag string
|
|
180
|
+
*
|
|
181
|
+
* Parses string props, expression props, and boolean props.
|
|
182
|
+
*
|
|
183
|
+
* @param tag - Component tag content (attributes portion)
|
|
184
|
+
* @returns Props object
|
|
185
|
+
*/
|
|
186
|
+
export function extractPropsFromTag(tag) {
|
|
187
|
+
const props = {};
|
|
188
|
+
// Extract string props: name="value"
|
|
189
|
+
const stringPropRegex = /(\w+)="([^"]*)"/g;
|
|
190
|
+
let match;
|
|
191
|
+
while ((match = stringPropRegex.exec(tag)) !== null) {
|
|
192
|
+
const name = match[1];
|
|
193
|
+
const value = match[2];
|
|
194
|
+
if (name !== undefined && value !== undefined) {
|
|
195
|
+
props[name] = value;
|
|
196
|
+
}
|
|
197
|
+
}
|
|
198
|
+
// Extract expression props: name={expression}
|
|
199
|
+
const exprPropRegex = /(\w+)=\{([^}]*)\}/g;
|
|
200
|
+
while ((match = exprPropRegex.exec(tag)) !== null) {
|
|
201
|
+
const name = match[1];
|
|
202
|
+
const exprValue = match[2];
|
|
203
|
+
if (name !== undefined && exprValue !== undefined) {
|
|
204
|
+
try {
|
|
205
|
+
// Try to parse as JSON
|
|
206
|
+
props[name] = JSON.parse(exprValue);
|
|
207
|
+
}
|
|
208
|
+
catch {
|
|
209
|
+
// Try to evaluate simple expressions
|
|
210
|
+
if (exprValue === 'true') {
|
|
211
|
+
props[name] = true;
|
|
212
|
+
}
|
|
213
|
+
else if (exprValue === 'false') {
|
|
214
|
+
props[name] = false;
|
|
215
|
+
}
|
|
216
|
+
else if (!isNaN(Number(exprValue))) {
|
|
217
|
+
props[name] = Number(exprValue);
|
|
218
|
+
}
|
|
219
|
+
else {
|
|
220
|
+
// Keep as expression string
|
|
221
|
+
props[name] = exprValue;
|
|
222
|
+
}
|
|
223
|
+
}
|
|
224
|
+
}
|
|
225
|
+
}
|
|
226
|
+
// Extract boolean props (word not followed by =)
|
|
227
|
+
const booleanPropRegex = /\s([a-z][a-zA-Z0-9]*)(?=\s|>|\/|$)/g;
|
|
228
|
+
while ((match = booleanPropRegex.exec(tag)) !== null) {
|
|
229
|
+
const name = match[1];
|
|
230
|
+
// Only add if not already defined
|
|
231
|
+
if (name !== undefined && !(name in props)) {
|
|
232
|
+
props[name] = true;
|
|
233
|
+
}
|
|
234
|
+
}
|
|
235
|
+
return props;
|
|
236
|
+
}
|
|
237
|
+
/**
|
|
238
|
+
* Extract component props from all components in MDX content
|
|
239
|
+
*
|
|
240
|
+
* @param content - MDX body content
|
|
241
|
+
* @returns Map of component names to their props
|
|
242
|
+
*/
|
|
243
|
+
export function extractComponentProps(content) {
|
|
244
|
+
const componentProps = {};
|
|
245
|
+
// Match full component tags (including multi-line)
|
|
246
|
+
const tagRegex = /<([A-Z][a-zA-Z0-9]*)([\s\S]*?)(?:\/>|>)/g;
|
|
247
|
+
let match;
|
|
248
|
+
while ((match = tagRegex.exec(content)) !== null) {
|
|
249
|
+
const componentName = match[1];
|
|
250
|
+
const propsStr = match[2];
|
|
251
|
+
if (componentName === undefined || propsStr === undefined)
|
|
252
|
+
continue;
|
|
253
|
+
const props = extractPropsFromTag(propsStr);
|
|
254
|
+
if (Object.keys(props).length > 0) {
|
|
255
|
+
// Merge with existing props for this component
|
|
256
|
+
componentProps[componentName] = {
|
|
257
|
+
...componentProps[componentName],
|
|
258
|
+
...props,
|
|
259
|
+
};
|
|
260
|
+
}
|
|
261
|
+
}
|
|
262
|
+
return componentProps;
|
|
263
|
+
}
|
|
264
|
+
/**
|
|
265
|
+
* Validate MDX syntax
|
|
266
|
+
*
|
|
267
|
+
* Checks for unclosed tags and invalid prop syntax.
|
|
268
|
+
*
|
|
269
|
+
* @param content - MDX body content
|
|
270
|
+
* @throws MDXParseError if syntax is invalid
|
|
271
|
+
*/
|
|
272
|
+
export function validateMDX(content) {
|
|
273
|
+
// Check for incomplete tags at the end of content
|
|
274
|
+
const tagStarts = [];
|
|
275
|
+
const tagStartRegex = /<([A-Z][a-zA-Z0-9]*)/g;
|
|
276
|
+
let match;
|
|
277
|
+
while ((match = tagStartRegex.exec(content)) !== null) {
|
|
278
|
+
const name = match[1];
|
|
279
|
+
if (name !== undefined) {
|
|
280
|
+
tagStarts.push({ name, index: match.index });
|
|
281
|
+
}
|
|
282
|
+
}
|
|
283
|
+
// For each tag start, check if there's a closing >
|
|
284
|
+
for (let i = 0; i < tagStarts.length; i++) {
|
|
285
|
+
const start = tagStarts[i];
|
|
286
|
+
if (!start)
|
|
287
|
+
continue;
|
|
288
|
+
const endBound = tagStarts[i + 1]?.index ?? content.length;
|
|
289
|
+
const tagContent = content.slice(start.index, endBound);
|
|
290
|
+
if (!tagContent.includes('>')) {
|
|
291
|
+
throw createParseError(`Invalid MDX syntax: incomplete tag <${start.name}`, content, start.index);
|
|
292
|
+
}
|
|
293
|
+
}
|
|
294
|
+
// Check for invalid prop syntax: prop=>
|
|
295
|
+
const invalidPropMatch = content.match(/\w+=\s*>/);
|
|
296
|
+
if (invalidPropMatch) {
|
|
297
|
+
const position = content.indexOf(invalidPropMatch[0]);
|
|
298
|
+
throw createParseError('Invalid MDX syntax: incomplete prop value', content, position);
|
|
299
|
+
}
|
|
300
|
+
// Validate matching open/close tags
|
|
301
|
+
const allTagsRegex = /<\/?([A-Z][a-zA-Z0-9]*)[\s\S]*?>/g;
|
|
302
|
+
const tagMatches = [];
|
|
303
|
+
while ((match = allTagsRegex.exec(content)) !== null) {
|
|
304
|
+
const full = match[0];
|
|
305
|
+
const name = match[1];
|
|
306
|
+
if (name === undefined)
|
|
307
|
+
continue;
|
|
308
|
+
if (full.startsWith('</')) {
|
|
309
|
+
tagMatches.push({ name, type: 'close', full });
|
|
310
|
+
}
|
|
311
|
+
else if (full.trimEnd().endsWith('/>')) {
|
|
312
|
+
tagMatches.push({ name, type: 'selfClose', full });
|
|
313
|
+
}
|
|
314
|
+
else {
|
|
315
|
+
tagMatches.push({ name, type: 'open', full });
|
|
316
|
+
}
|
|
317
|
+
}
|
|
318
|
+
// Count opens and closes per tag name
|
|
319
|
+
const openCount = {};
|
|
320
|
+
const closeCount = {};
|
|
321
|
+
for (const tag of tagMatches) {
|
|
322
|
+
if (tag.type === 'open') {
|
|
323
|
+
openCount[tag.name] = (openCount[tag.name] || 0) + 1;
|
|
324
|
+
}
|
|
325
|
+
else if (tag.type === 'close') {
|
|
326
|
+
closeCount[tag.name] = (closeCount[tag.name] || 0) + 1;
|
|
327
|
+
}
|
|
328
|
+
}
|
|
329
|
+
// Each open tag should have a matching close tag
|
|
330
|
+
for (const name of Object.keys(openCount)) {
|
|
331
|
+
const opens = openCount[name] || 0;
|
|
332
|
+
const closes = closeCount[name] || 0;
|
|
333
|
+
if (opens > closes) {
|
|
334
|
+
throw createParseError(`Invalid MDX syntax: unclosed <${name}> tag`, content);
|
|
335
|
+
}
|
|
336
|
+
}
|
|
337
|
+
}
|
|
338
|
+
/**
|
|
339
|
+
* Serialize props to JSX attribute string
|
|
340
|
+
*
|
|
341
|
+
* @param props - Props object
|
|
342
|
+
* @returns JSX attribute string
|
|
343
|
+
*/
|
|
344
|
+
export function serializeProps(props) {
|
|
345
|
+
return Object.entries(props)
|
|
346
|
+
.map(([k, v]) => {
|
|
347
|
+
if (typeof v === 'string') {
|
|
348
|
+
return `${k}="${v}"`;
|
|
349
|
+
}
|
|
350
|
+
return `${k}={${JSON.stringify(v)}}`;
|
|
351
|
+
})
|
|
352
|
+
.join(' ');
|
|
353
|
+
}
|
|
354
|
+
/**
|
|
355
|
+
* Sort object keys for consistent hashing
|
|
356
|
+
*
|
|
357
|
+
* @param obj - Object to sort
|
|
358
|
+
* @returns Object with sorted keys
|
|
359
|
+
*/
|
|
360
|
+
export function sortObject(obj) {
|
|
361
|
+
const sorted = {};
|
|
362
|
+
for (const key of Object.keys(obj).sort()) {
|
|
363
|
+
const value = obj[key];
|
|
364
|
+
sorted[key] =
|
|
365
|
+
value && typeof value === 'object' && !Array.isArray(value)
|
|
366
|
+
? sortObject(value)
|
|
367
|
+
: value;
|
|
368
|
+
}
|
|
369
|
+
return sorted;
|
|
370
|
+
}
|
|
371
|
+
/**
|
|
372
|
+
* Create a cache key for MDX props generation
|
|
373
|
+
*
|
|
374
|
+
* @param componentName - Component name
|
|
375
|
+
* @param schema - Component schema
|
|
376
|
+
* @param context - Frontmatter context
|
|
377
|
+
* @returns Cache key string
|
|
378
|
+
*/
|
|
379
|
+
export function createMDXCacheKey(componentName, schema, context) {
|
|
380
|
+
const schemaHash = hashContent(JSON.stringify(sortObject(schema)));
|
|
381
|
+
const contextHash = context ? hashContent(JSON.stringify(sortObject(context))) : '';
|
|
382
|
+
return `mdx:${componentName}:${schemaHash}:${contextHash}`;
|
|
383
|
+
}
|
|
384
|
+
//# sourceMappingURL=mdx-utils.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mdx-utils.js","sourceRoot":"","sources":["../src/mdx-utils.ts"],"names":[],"mappings":"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"}
|