@mdxui/terminal 2.0.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/README.md +571 -0
- package/dist/ansi-css-Sk5mWtdK.d.ts +119 -0
- package/dist/ansi-css-V6JIHGsM.d.ts +119 -0
- package/dist/ansi-css-_3eSEU9d.d.ts +119 -0
- package/dist/chunk-3EFDH7PK.js +5235 -0
- package/dist/chunk-3RG5ZIWI.js +10 -0
- package/dist/chunk-3X5IR6WE.js +884 -0
- package/dist/chunk-4FV5ZDCE.js +5236 -0
- package/dist/chunk-4OVMSF2J.js +243 -0
- package/dist/chunk-63FEETIS.js +4048 -0
- package/dist/chunk-B43KP7XJ.js +884 -0
- package/dist/chunk-BMTJXWUV.js +655 -0
- package/dist/chunk-C3SVH4N7.js +882 -0
- package/dist/chunk-EVWR7Y47.js +874 -0
- package/dist/chunk-F6A5VWUC.js +1285 -0
- package/dist/chunk-FD7KW7GE.js +882 -0
- package/dist/chunk-GBQ6UD6I.js +655 -0
- package/dist/chunk-GMDD3M6U.js +5227 -0
- package/dist/chunk-JBHRXOXM.js +1058 -0
- package/dist/chunk-JFOO3EYO.js +1182 -0
- package/dist/chunk-JQ5H3WXL.js +1291 -0
- package/dist/chunk-JQD5NASE.js +234 -0
- package/dist/chunk-KRHJP5R7.js +592 -0
- package/dist/chunk-KWF6WVJE.js +962 -0
- package/dist/chunk-LHYQVN3H.js +1038 -0
- package/dist/chunk-M3TLQLGC.js +1032 -0
- package/dist/chunk-MVW4Q5OP.js +240 -0
- package/dist/chunk-NXCZSWLU.js +1294 -0
- package/dist/chunk-O25TNRO6.js +607 -0
- package/dist/chunk-PNECDA2I.js +884 -0
- package/dist/chunk-QIHWRLJR.js +962 -0
- package/dist/chunk-QW5YMQ7K.js +882 -0
- package/dist/chunk-R5U7XKVJ.js +16 -0
- package/dist/chunk-RP2MVQLR.js +962 -0
- package/dist/chunk-TP6RXGXA.js +1087 -0
- package/dist/chunk-TQQSTITZ.js +655 -0
- package/dist/chunk-X24GWXQV.js +1281 -0
- package/dist/components/index.d.ts +802 -0
- package/dist/components/index.js +149 -0
- package/dist/data/index.d.ts +2554 -0
- package/dist/data/index.js +51 -0
- package/dist/forms/index.d.ts +1596 -0
- package/dist/forms/index.js +464 -0
- package/dist/index-CQRFZntR.d.ts +867 -0
- package/dist/index.d.ts +579 -0
- package/dist/index.js +786 -0
- package/dist/interactive-D0JkWosD.d.ts +217 -0
- package/dist/keyboard/index.d.ts +2 -0
- package/dist/keyboard/index.js +43 -0
- package/dist/renderers/index.d.ts +546 -0
- package/dist/renderers/index.js +2157 -0
- package/dist/storybook/index.d.ts +396 -0
- package/dist/storybook/index.js +641 -0
- package/dist/theme/index.d.ts +1339 -0
- package/dist/theme/index.js +123 -0
- package/dist/types-Bxu5PAgA.d.ts +710 -0
- package/dist/types-CIlop5Ji.d.ts +701 -0
- package/dist/types-Ca8p_p5X.d.ts +710 -0
- package/package.json +90 -0
- package/src/__tests__/components/data/card.test.ts +458 -0
- package/src/__tests__/components/data/list.test.ts +473 -0
- package/src/__tests__/components/data/metrics.test.ts +541 -0
- package/src/__tests__/components/data/table.test.ts +448 -0
- package/src/__tests__/components/input/field.test.ts +555 -0
- package/src/__tests__/components/input/form.test.ts +870 -0
- package/src/__tests__/components/input/search.test.ts +1238 -0
- package/src/__tests__/components/input/select.test.ts +658 -0
- package/src/__tests__/components/navigation/breadcrumb.test.ts +923 -0
- package/src/__tests__/components/navigation/command-palette.test.ts +1095 -0
- package/src/__tests__/components/navigation/sidebar.test.ts +1018 -0
- package/src/__tests__/components/navigation/tabs.test.ts +995 -0
- package/src/__tests__/components.test.tsx +1197 -0
- package/src/__tests__/core/compiler.test.ts +986 -0
- package/src/__tests__/core/parser.test.ts +785 -0
- package/src/__tests__/core/tier-switcher.test.ts +1103 -0
- package/src/__tests__/core/types.test.ts +1398 -0
- package/src/__tests__/data/collections.test.ts +1337 -0
- package/src/__tests__/data/db.test.ts +1265 -0
- package/src/__tests__/data/reactive.test.ts +1010 -0
- package/src/__tests__/data/sync.test.ts +1614 -0
- package/src/__tests__/errors.test.ts +660 -0
- package/src/__tests__/forms/integration.test.ts +444 -0
- package/src/__tests__/integration.test.ts +905 -0
- package/src/__tests__/keyboard.test.ts +1791 -0
- package/src/__tests__/renderer.test.ts +489 -0
- package/src/__tests__/renderers/ansi-css.test.ts +948 -0
- package/src/__tests__/renderers/ansi.test.ts +1366 -0
- package/src/__tests__/renderers/ascii.test.ts +1360 -0
- package/src/__tests__/renderers/interactive.test.ts +2353 -0
- package/src/__tests__/renderers/markdown.test.ts +1483 -0
- package/src/__tests__/renderers/text.test.ts +1369 -0
- package/src/__tests__/renderers/unicode.test.ts +1307 -0
- package/src/__tests__/theme.test.ts +639 -0
- package/src/__tests__/utils/assertions.ts +685 -0
- package/src/__tests__/utils/index.ts +115 -0
- package/src/__tests__/utils/test-renderer.ts +381 -0
- package/src/__tests__/utils/utils.test.ts +560 -0
- package/src/components/containers/card.ts +56 -0
- package/src/components/containers/dialog.ts +53 -0
- package/src/components/containers/index.ts +9 -0
- package/src/components/containers/panel.ts +59 -0
- package/src/components/feedback/badge.ts +40 -0
- package/src/components/feedback/index.ts +8 -0
- package/src/components/feedback/spinner.ts +23 -0
- package/src/components/helpers.ts +81 -0
- package/src/components/index.ts +153 -0
- package/src/components/layout/breadcrumb.ts +31 -0
- package/src/components/layout/index.ts +10 -0
- package/src/components/layout/list.ts +29 -0
- package/src/components/layout/sidebar.ts +79 -0
- package/src/components/layout/table.ts +62 -0
- package/src/components/primitives/box.ts +95 -0
- package/src/components/primitives/button.ts +54 -0
- package/src/components/primitives/index.ts +11 -0
- package/src/components/primitives/input.ts +88 -0
- package/src/components/primitives/select.ts +97 -0
- package/src/components/primitives/text.ts +60 -0
- package/src/components/render.ts +155 -0
- package/src/components/templates/app.ts +43 -0
- package/src/components/templates/index.ts +8 -0
- package/src/components/templates/site.ts +54 -0
- package/src/components/types.ts +777 -0
- package/src/core/compiler.ts +718 -0
- package/src/core/parser.ts +127 -0
- package/src/core/tier-switcher.ts +607 -0
- package/src/core/types.ts +672 -0
- package/src/data/collection.ts +316 -0
- package/src/data/collections.ts +50 -0
- package/src/data/context.tsx +174 -0
- package/src/data/db.ts +127 -0
- package/src/data/hooks.ts +532 -0
- package/src/data/index.ts +138 -0
- package/src/data/reactive.ts +1225 -0
- package/src/data/saas-collections.ts +375 -0
- package/src/data/sync.ts +1213 -0
- package/src/data/types.ts +660 -0
- package/src/forms/converters.ts +512 -0
- package/src/forms/index.ts +133 -0
- package/src/forms/schemas.ts +403 -0
- package/src/forms/types.ts +476 -0
- package/src/index.ts +542 -0
- package/src/keyboard/focus.ts +748 -0
- package/src/keyboard/index.ts +96 -0
- package/src/keyboard/integration.ts +371 -0
- package/src/keyboard/manager.ts +377 -0
- package/src/keyboard/presets.ts +90 -0
- package/src/renderers/ansi-css.ts +576 -0
- package/src/renderers/ansi.ts +802 -0
- package/src/renderers/ascii.ts +680 -0
- package/src/renderers/breadcrumb.ts +480 -0
- package/src/renderers/command-palette.ts +802 -0
- package/src/renderers/components/field.ts +210 -0
- package/src/renderers/components/form.ts +327 -0
- package/src/renderers/components/index.ts +21 -0
- package/src/renderers/components/search.ts +449 -0
- package/src/renderers/components/select.ts +222 -0
- package/src/renderers/index.ts +101 -0
- package/src/renderers/interactive/component-handlers.ts +622 -0
- package/src/renderers/interactive/cursor-manager.ts +147 -0
- package/src/renderers/interactive/focus-manager.ts +279 -0
- package/src/renderers/interactive/index.ts +661 -0
- package/src/renderers/interactive/input-handler.ts +164 -0
- package/src/renderers/interactive/keyboard-handler.ts +212 -0
- package/src/renderers/interactive/mouse-handler.ts +167 -0
- package/src/renderers/interactive/state-manager.ts +109 -0
- package/src/renderers/interactive/types.ts +338 -0
- package/src/renderers/interactive-string.ts +299 -0
- package/src/renderers/interactive.ts +59 -0
- package/src/renderers/markdown.ts +950 -0
- package/src/renderers/sidebar.ts +549 -0
- package/src/renderers/tabs.ts +682 -0
- package/src/renderers/text.ts +791 -0
- package/src/renderers/unicode.ts +917 -0
- package/src/renderers/utils.ts +942 -0
- package/src/router/adapters.ts +383 -0
- package/src/router/types.ts +140 -0
- package/src/router/utils.ts +452 -0
- package/src/schemas.ts +205 -0
- package/src/storybook/index.ts +91 -0
- package/src/storybook/interactive-decorator.tsx +659 -0
- package/src/storybook/keyboard-simulator.ts +501 -0
- package/src/theme/ansi-codes.ts +80 -0
- package/src/theme/box-drawing.ts +132 -0
- package/src/theme/color-convert.ts +254 -0
- package/src/theme/color-support.ts +321 -0
- package/src/theme/index.ts +134 -0
- package/src/theme/strip-ansi.ts +50 -0
- package/src/theme/tailwind-map.ts +469 -0
- package/src/theme/text-styles.ts +206 -0
- package/src/theme/theme-system.ts +568 -0
- package/src/types.ts +103 -0
|
@@ -0,0 +1,127 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @mdxui/terminal JSON Parser
|
|
3
|
+
*
|
|
4
|
+
* Converts JSON strings and objects into validated UINode structures.
|
|
5
|
+
* Supports both JSON string parsing and pre-parsed object validation.
|
|
6
|
+
*/
|
|
7
|
+
import { UINodeSchema, type UINode } from './types'
|
|
8
|
+
|
|
9
|
+
/**
|
|
10
|
+
* Custom error class for parsing errors.
|
|
11
|
+
* Provides helpful error messages for JSON parsing and UINode validation failures.
|
|
12
|
+
*/
|
|
13
|
+
export class ParseError extends Error {
|
|
14
|
+
constructor(message: string) {
|
|
15
|
+
super(message)
|
|
16
|
+
this.name = 'ParseError'
|
|
17
|
+
// Maintain proper prototype chain for instanceof checks
|
|
18
|
+
Object.setPrototypeOf(this, ParseError.prototype)
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
/**
|
|
23
|
+
* Parse a JSON string or JavaScript object into a validated UINode.
|
|
24
|
+
*
|
|
25
|
+
* @param input - JSON string or pre-parsed JavaScript object
|
|
26
|
+
* @returns Validated UINode
|
|
27
|
+
* @throws ParseError if the input is invalid JSON or doesn't match UINode structure
|
|
28
|
+
*
|
|
29
|
+
* @example
|
|
30
|
+
* ```tsx
|
|
31
|
+
* // Parse JSON string
|
|
32
|
+
* const node = parseUINode('{"type":"text","props":{"content":"Hello"}}')
|
|
33
|
+
*
|
|
34
|
+
* // Parse pre-parsed object
|
|
35
|
+
* const node = parseUINode({ type: 'text', props: { content: 'Hello' } })
|
|
36
|
+
* ```
|
|
37
|
+
*/
|
|
38
|
+
export function parseUINode(input: string | unknown): UINode {
|
|
39
|
+
let parsed: unknown
|
|
40
|
+
|
|
41
|
+
// Handle string input - parse as JSON
|
|
42
|
+
if (typeof input === 'string') {
|
|
43
|
+
// Empty string check
|
|
44
|
+
if (input.trim() === '') {
|
|
45
|
+
throw new ParseError('Invalid JSON: empty string')
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
try {
|
|
49
|
+
parsed = JSON.parse(input)
|
|
50
|
+
} catch (error) {
|
|
51
|
+
throw new ParseError(
|
|
52
|
+
`Invalid JSON: ${error instanceof Error ? error.message : 'parse error'}`
|
|
53
|
+
)
|
|
54
|
+
}
|
|
55
|
+
} else {
|
|
56
|
+
// Use the input directly if it's not a string
|
|
57
|
+
parsed = input
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
// Validate that we have an object (not null, not array, not primitive)
|
|
61
|
+
if (parsed === null) {
|
|
62
|
+
throw new ParseError('Invalid UINode: expected object, got null')
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
if (Array.isArray(parsed)) {
|
|
66
|
+
throw new ParseError('Invalid UINode: expected object, got array')
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
if (typeof parsed !== 'object') {
|
|
70
|
+
throw new ParseError(`Invalid UINode: expected object, got ${typeof parsed}`)
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
// Validate against UINodeSchema
|
|
74
|
+
const result = UINodeSchema.safeParse(parsed)
|
|
75
|
+
|
|
76
|
+
if (!result.success) {
|
|
77
|
+
// Extract meaningful error message from Zod error
|
|
78
|
+
const issues = result.error.issues
|
|
79
|
+
const errorMessages = issues.map((issue) => {
|
|
80
|
+
const path = issue.path.length > 0 ? ` at path "${issue.path.join('.')}"` : ''
|
|
81
|
+
return `${issue.message}${path}`
|
|
82
|
+
})
|
|
83
|
+
|
|
84
|
+
// Check for specific field errors to provide better messages
|
|
85
|
+
const hasTypeError = issues.some(
|
|
86
|
+
(issue) =>
|
|
87
|
+
issue.path.includes('type') ||
|
|
88
|
+
(issue.path.length === 0 && issue.code === 'invalid_type')
|
|
89
|
+
)
|
|
90
|
+
const hasMissingType = issues.some(
|
|
91
|
+
(issue) =>
|
|
92
|
+
issue.code === 'invalid_type' &&
|
|
93
|
+
issue.path.length === 1 &&
|
|
94
|
+
issue.path[0] === 'type'
|
|
95
|
+
)
|
|
96
|
+
|
|
97
|
+
if (hasMissingType || (!('type' in (parsed as object)))) {
|
|
98
|
+
// Check if type field is missing
|
|
99
|
+
if (!('type' in (parsed as object))) {
|
|
100
|
+
throw new ParseError('Invalid UINode: missing required field "type"')
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
throw new ParseError(`Invalid UINode: ${errorMessages.join('; ')}`)
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
return result.data
|
|
108
|
+
}
|
|
109
|
+
|
|
110
|
+
/**
|
|
111
|
+
* Parse a JSON string into a validated UINode.
|
|
112
|
+
*
|
|
113
|
+
* This is a convenience function that only accepts JSON strings.
|
|
114
|
+
* For parsing pre-parsed objects, use parseUINode directly.
|
|
115
|
+
*
|
|
116
|
+
* @param json - JSON string representation of a UINode
|
|
117
|
+
* @returns Validated UINode
|
|
118
|
+
* @throws ParseError if the JSON is invalid or doesn't match UINode structure
|
|
119
|
+
*
|
|
120
|
+
* @example
|
|
121
|
+
* ```tsx
|
|
122
|
+
* const node = parseUINodeFromJSON('{"type":"text","props":{"content":"Hello"}}')
|
|
123
|
+
* ```
|
|
124
|
+
*/
|
|
125
|
+
export function parseUINodeFromJSON(json: string): UINode {
|
|
126
|
+
return parseUINode(json)
|
|
127
|
+
}
|