procsi 0.2.6
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/LICENSE +665 -0
- package/README.md +587 -0
- package/dist/cli/commands/clear.d.ts +3 -0
- package/dist/cli/commands/clear.d.ts.map +1 -0
- package/dist/cli/commands/clear.js +30 -0
- package/dist/cli/commands/clear.js.map +1 -0
- package/dist/cli/commands/daemon.d.ts +3 -0
- package/dist/cli/commands/daemon.d.ts.map +1 -0
- package/dist/cli/commands/daemon.js +59 -0
- package/dist/cli/commands/daemon.js.map +1 -0
- package/dist/cli/commands/debug-dump.d.ts +27 -0
- package/dist/cli/commands/debug-dump.d.ts.map +1 -0
- package/dist/cli/commands/debug-dump.js +102 -0
- package/dist/cli/commands/debug-dump.js.map +1 -0
- package/dist/cli/commands/helpers.d.ts +18 -0
- package/dist/cli/commands/helpers.d.ts.map +1 -0
- package/dist/cli/commands/helpers.js +34 -0
- package/dist/cli/commands/helpers.js.map +1 -0
- package/dist/cli/commands/init.d.ts +9 -0
- package/dist/cli/commands/init.d.ts.map +1 -0
- package/dist/cli/commands/init.js +28 -0
- package/dist/cli/commands/init.js.map +1 -0
- package/dist/cli/commands/intercept.d.ts +9 -0
- package/dist/cli/commands/intercept.d.ts.map +1 -0
- package/dist/cli/commands/intercept.js +121 -0
- package/dist/cli/commands/intercept.js.map +1 -0
- package/dist/cli/commands/interceptors.d.ts +3 -0
- package/dist/cli/commands/interceptors.d.ts.map +1 -0
- package/dist/cli/commands/interceptors.js +163 -0
- package/dist/cli/commands/interceptors.js.map +1 -0
- package/dist/cli/commands/mcp.d.ts +3 -0
- package/dist/cli/commands/mcp.d.ts.map +1 -0
- package/dist/cli/commands/mcp.js +24 -0
- package/dist/cli/commands/mcp.js.map +1 -0
- package/dist/cli/commands/off.d.ts +8 -0
- package/dist/cli/commands/off.d.ts.map +1 -0
- package/dist/cli/commands/off.js +34 -0
- package/dist/cli/commands/off.js.map +1 -0
- package/dist/cli/commands/on.d.ts +9 -0
- package/dist/cli/commands/on.d.ts.map +1 -0
- package/dist/cli/commands/on.js +121 -0
- package/dist/cli/commands/on.js.map +1 -0
- package/dist/cli/commands/project.d.ts +3 -0
- package/dist/cli/commands/project.d.ts.map +1 -0
- package/dist/cli/commands/project.js +15 -0
- package/dist/cli/commands/project.js.map +1 -0
- package/dist/cli/commands/restart.d.ts +3 -0
- package/dist/cli/commands/restart.d.ts.map +1 -0
- package/dist/cli/commands/restart.js +35 -0
- package/dist/cli/commands/restart.js.map +1 -0
- package/dist/cli/commands/status.d.ts +3 -0
- package/dist/cli/commands/status.d.ts.map +1 -0
- package/dist/cli/commands/status.js +66 -0
- package/dist/cli/commands/status.js.map +1 -0
- package/dist/cli/commands/stop.d.ts +3 -0
- package/dist/cli/commands/stop.d.ts.map +1 -0
- package/dist/cli/commands/stop.js +24 -0
- package/dist/cli/commands/stop.js.map +1 -0
- package/dist/cli/commands/tui.d.ts +3 -0
- package/dist/cli/commands/tui.d.ts.map +1 -0
- package/dist/cli/commands/tui.js +36 -0
- package/dist/cli/commands/tui.js.map +1 -0
- package/dist/cli/commands/vars.d.ts +36 -0
- package/dist/cli/commands/vars.d.ts.map +1 -0
- package/dist/cli/commands/vars.js +207 -0
- package/dist/cli/commands/vars.js.map +1 -0
- package/dist/cli/index.d.ts +3 -0
- package/dist/cli/index.d.ts.map +1 -0
- package/dist/cli/index.js +37 -0
- package/dist/cli/index.js.map +1 -0
- package/dist/cli/tui/App.d.ts +15 -0
- package/dist/cli/tui/App.d.ts.map +1 -0
- package/dist/cli/tui/App.js +544 -0
- package/dist/cli/tui/App.js.map +1 -0
- package/dist/cli/tui/components/AccordionContent.d.ts +28 -0
- package/dist/cli/tui/components/AccordionContent.d.ts.map +1 -0
- package/dist/cli/tui/components/AccordionContent.js +87 -0
- package/dist/cli/tui/components/AccordionContent.js.map +1 -0
- package/dist/cli/tui/components/AccordionPanel.d.ts +38 -0
- package/dist/cli/tui/components/AccordionPanel.d.ts.map +1 -0
- package/dist/cli/tui/components/AccordionPanel.js +110 -0
- package/dist/cli/tui/components/AccordionPanel.js.map +1 -0
- package/dist/cli/tui/components/AccordionSection.d.ts +32 -0
- package/dist/cli/tui/components/AccordionSection.d.ts.map +1 -0
- package/dist/cli/tui/components/AccordionSection.js +41 -0
- package/dist/cli/tui/components/AccordionSection.js.map +1 -0
- package/dist/cli/tui/components/BodyView.d.ts +14 -0
- package/dist/cli/tui/components/BodyView.d.ts.map +1 -0
- package/dist/cli/tui/components/BodyView.js +39 -0
- package/dist/cli/tui/components/BodyView.js.map +1 -0
- package/dist/cli/tui/components/ExportModal.d.ts +34 -0
- package/dist/cli/tui/components/ExportModal.d.ts.map +1 -0
- package/dist/cli/tui/components/ExportModal.js +109 -0
- package/dist/cli/tui/components/ExportModal.js.map +1 -0
- package/dist/cli/tui/components/FilterBar.d.ts +21 -0
- package/dist/cli/tui/components/FilterBar.d.ts.map +1 -0
- package/dist/cli/tui/components/FilterBar.js +155 -0
- package/dist/cli/tui/components/FilterBar.js.map +1 -0
- package/dist/cli/tui/components/HeadersView.d.ts +13 -0
- package/dist/cli/tui/components/HeadersView.d.ts.map +1 -0
- package/dist/cli/tui/components/HeadersView.js +8 -0
- package/dist/cli/tui/components/HeadersView.js.map +1 -0
- package/dist/cli/tui/components/HelpModal.d.ts +13 -0
- package/dist/cli/tui/components/HelpModal.d.ts.map +1 -0
- package/dist/cli/tui/components/HelpModal.js +78 -0
- package/dist/cli/tui/components/HelpModal.js.map +1 -0
- package/dist/cli/tui/components/HintContent.d.ts +25 -0
- package/dist/cli/tui/components/HintContent.d.ts.map +1 -0
- package/dist/cli/tui/components/HintContent.js +44 -0
- package/dist/cli/tui/components/HintContent.js.map +1 -0
- package/dist/cli/tui/components/InfoModal.d.ts +15 -0
- package/dist/cli/tui/components/InfoModal.d.ts.map +1 -0
- package/dist/cli/tui/components/InfoModal.js +17 -0
- package/dist/cli/tui/components/InfoModal.js.map +1 -0
- package/dist/cli/tui/components/JsonExplorerModal.d.ts +24 -0
- package/dist/cli/tui/components/JsonExplorerModal.d.ts.map +1 -0
- package/dist/cli/tui/components/JsonExplorerModal.js +311 -0
- package/dist/cli/tui/components/JsonExplorerModal.js.map +1 -0
- package/dist/cli/tui/components/Modal.d.ts +26 -0
- package/dist/cli/tui/components/Modal.d.ts.map +1 -0
- package/dist/cli/tui/components/Modal.js +15 -0
- package/dist/cli/tui/components/Modal.js.map +1 -0
- package/dist/cli/tui/components/Panel.d.ts +19 -0
- package/dist/cli/tui/components/Panel.d.ts.map +1 -0
- package/dist/cli/tui/components/Panel.js +37 -0
- package/dist/cli/tui/components/Panel.js.map +1 -0
- package/dist/cli/tui/components/RequestDetails.d.ts +16 -0
- package/dist/cli/tui/components/RequestDetails.d.ts.map +1 -0
- package/dist/cli/tui/components/RequestDetails.js +23 -0
- package/dist/cli/tui/components/RequestDetails.js.map +1 -0
- package/dist/cli/tui/components/RequestList.d.ts +21 -0
- package/dist/cli/tui/components/RequestList.d.ts.map +1 -0
- package/dist/cli/tui/components/RequestList.js +30 -0
- package/dist/cli/tui/components/RequestList.js.map +1 -0
- package/dist/cli/tui/components/RequestListItem.d.ts +36 -0
- package/dist/cli/tui/components/RequestListItem.d.ts.map +1 -0
- package/dist/cli/tui/components/RequestListItem.js +130 -0
- package/dist/cli/tui/components/RequestListItem.js.map +1 -0
- package/dist/cli/tui/components/SaveModal.d.ts +30 -0
- package/dist/cli/tui/components/SaveModal.d.ts.map +1 -0
- package/dist/cli/tui/components/SaveModal.js +95 -0
- package/dist/cli/tui/components/SaveModal.js.map +1 -0
- package/dist/cli/tui/components/StatusBar.d.ts +39 -0
- package/dist/cli/tui/components/StatusBar.d.ts.map +1 -0
- package/dist/cli/tui/components/StatusBar.js +53 -0
- package/dist/cli/tui/components/StatusBar.js.map +1 -0
- package/dist/cli/tui/components/TextViewerModal.d.ts +19 -0
- package/dist/cli/tui/components/TextViewerModal.d.ts.map +1 -0
- package/dist/cli/tui/components/TextViewerModal.js +227 -0
- package/dist/cli/tui/components/TextViewerModal.js.map +1 -0
- package/dist/cli/tui/hooks/useBodyExport.d.ts +26 -0
- package/dist/cli/tui/hooks/useBodyExport.d.ts.map +1 -0
- package/dist/cli/tui/hooks/useBodyExport.js +173 -0
- package/dist/cli/tui/hooks/useBodyExport.js.map +1 -0
- package/dist/cli/tui/hooks/useExport.d.ts +29 -0
- package/dist/cli/tui/hooks/useExport.d.ts.map +1 -0
- package/dist/cli/tui/hooks/useExport.js +64 -0
- package/dist/cli/tui/hooks/useExport.js.map +1 -0
- package/dist/cli/tui/hooks/useRequests.d.ts +26 -0
- package/dist/cli/tui/hooks/useRequests.d.ts.map +1 -0
- package/dist/cli/tui/hooks/useRequests.js +131 -0
- package/dist/cli/tui/hooks/useRequests.js.map +1 -0
- package/dist/cli/tui/hooks/useSaveBinary.d.ts +26 -0
- package/dist/cli/tui/hooks/useSaveBinary.d.ts.map +1 -0
- package/dist/cli/tui/hooks/useSaveBinary.js +165 -0
- package/dist/cli/tui/hooks/useSaveBinary.js.map +1 -0
- package/dist/cli/tui/hooks/useSpinner.d.ts +5 -0
- package/dist/cli/tui/hooks/useSpinner.d.ts.map +1 -0
- package/dist/cli/tui/hooks/useSpinner.js +25 -0
- package/dist/cli/tui/hooks/useSpinner.js.map +1 -0
- package/dist/cli/tui/hooks/useStdoutDimensions.d.ts +11 -0
- package/dist/cli/tui/hooks/useStdoutDimensions.d.ts.map +1 -0
- package/dist/cli/tui/hooks/useStdoutDimensions.js +29 -0
- package/dist/cli/tui/hooks/useStdoutDimensions.js.map +1 -0
- package/dist/cli/tui/utils/binary.d.ts +24 -0
- package/dist/cli/tui/utils/binary.d.ts.map +1 -0
- package/dist/cli/tui/utils/binary.js +152 -0
- package/dist/cli/tui/utils/binary.js.map +1 -0
- package/dist/cli/tui/utils/clipboard.d.ts +9 -0
- package/dist/cli/tui/utils/clipboard.d.ts.map +1 -0
- package/dist/cli/tui/utils/clipboard.js +58 -0
- package/dist/cli/tui/utils/clipboard.js.map +1 -0
- package/dist/cli/tui/utils/content-type.d.ts +8 -0
- package/dist/cli/tui/utils/content-type.d.ts.map +1 -0
- package/dist/cli/tui/utils/content-type.js +10 -0
- package/dist/cli/tui/utils/content-type.js.map +1 -0
- package/dist/cli/tui/utils/curl.d.ts +9 -0
- package/dist/cli/tui/utils/curl.d.ts.map +1 -0
- package/dist/cli/tui/utils/curl.js +54 -0
- package/dist/cli/tui/utils/curl.js.map +1 -0
- package/dist/cli/tui/utils/filters.d.ts +6 -0
- package/dist/cli/tui/utils/filters.d.ts.map +1 -0
- package/dist/cli/tui/utils/filters.js +13 -0
- package/dist/cli/tui/utils/filters.js.map +1 -0
- package/dist/cli/tui/utils/formatters.d.ts +49 -0
- package/dist/cli/tui/utils/formatters.d.ts.map +1 -0
- package/dist/cli/tui/utils/formatters.js +200 -0
- package/dist/cli/tui/utils/formatters.js.map +1 -0
- package/dist/cli/tui/utils/har.d.ts +75 -0
- package/dist/cli/tui/utils/har.d.ts.map +1 -0
- package/dist/cli/tui/utils/har.js +117 -0
- package/dist/cli/tui/utils/har.js.map +1 -0
- package/dist/cli/tui/utils/json-tree.d.ts +69 -0
- package/dist/cli/tui/utils/json-tree.d.ts.map +1 -0
- package/dist/cli/tui/utils/json-tree.js +339 -0
- package/dist/cli/tui/utils/json-tree.js.map +1 -0
- package/dist/cli/tui/utils/open-external.d.ts +17 -0
- package/dist/cli/tui/utils/open-external.d.ts.map +1 -0
- package/dist/cli/tui/utils/open-external.js +57 -0
- package/dist/cli/tui/utils/open-external.js.map +1 -0
- package/dist/cli/tui/utils/syntax-highlight.d.ts +16 -0
- package/dist/cli/tui/utils/syntax-highlight.d.ts.map +1 -0
- package/dist/cli/tui/utils/syntax-highlight.js +64 -0
- package/dist/cli/tui/utils/syntax-highlight.js.map +1 -0
- package/dist/daemon/control.d.ts +21 -0
- package/dist/daemon/control.d.ts.map +1 -0
- package/dist/daemon/control.js +311 -0
- package/dist/daemon/control.js.map +1 -0
- package/dist/daemon/htpx-client.d.ts +8 -0
- package/dist/daemon/htpx-client.d.ts.map +1 -0
- package/dist/daemon/htpx-client.js +25 -0
- package/dist/daemon/htpx-client.js.map +1 -0
- package/dist/daemon/index.d.ts +3 -0
- package/dist/daemon/index.d.ts.map +1 -0
- package/dist/daemon/index.js +178 -0
- package/dist/daemon/index.js.map +1 -0
- package/dist/daemon/interceptor-loader.d.ts +30 -0
- package/dist/daemon/interceptor-loader.d.ts.map +1 -0
- package/dist/daemon/interceptor-loader.js +249 -0
- package/dist/daemon/interceptor-loader.js.map +1 -0
- package/dist/daemon/interceptor-runner.d.ts +39 -0
- package/dist/daemon/interceptor-runner.d.ts.map +1 -0
- package/dist/daemon/interceptor-runner.js +312 -0
- package/dist/daemon/interceptor-runner.js.map +1 -0
- package/dist/daemon/procsi-client.d.ts +8 -0
- package/dist/daemon/procsi-client.d.ts.map +1 -0
- package/dist/daemon/procsi-client.js +25 -0
- package/dist/daemon/procsi-client.js.map +1 -0
- package/dist/daemon/proxy.d.ts +34 -0
- package/dist/daemon/proxy.d.ts.map +1 -0
- package/dist/daemon/proxy.js +213 -0
- package/dist/daemon/proxy.js.map +1 -0
- package/dist/daemon/storage.d.ts +130 -0
- package/dist/daemon/storage.d.ts.map +1 -0
- package/dist/daemon/storage.js +761 -0
- package/dist/daemon/storage.js.map +1 -0
- package/dist/interceptors.d.ts +2 -0
- package/dist/interceptors.d.ts.map +1 -0
- package/dist/interceptors.js +2 -0
- package/dist/interceptors.js.map +1 -0
- package/dist/mcp/server.d.ts +110 -0
- package/dist/mcp/server.d.ts.map +1 -0
- package/dist/mcp/server.js +806 -0
- package/dist/mcp/server.js.map +1 -0
- package/dist/overrides/node.d.ts +30 -0
- package/dist/overrides/node.d.ts.map +1 -0
- package/dist/overrides/node.js +66 -0
- package/dist/overrides/node.js.map +1 -0
- package/dist/shared/config.d.ts +21 -0
- package/dist/shared/config.d.ts.map +1 -0
- package/dist/shared/config.js +83 -0
- package/dist/shared/config.js.map +1 -0
- package/dist/shared/content-type.d.ts +64 -0
- package/dist/shared/content-type.d.ts.map +1 -0
- package/dist/shared/content-type.js +145 -0
- package/dist/shared/content-type.js.map +1 -0
- package/dist/shared/control-client.d.ts +144 -0
- package/dist/shared/control-client.d.ts.map +1 -0
- package/dist/shared/control-client.js +272 -0
- package/dist/shared/control-client.js.map +1 -0
- package/dist/shared/daemon.d.ts +33 -0
- package/dist/shared/daemon.d.ts.map +1 -0
- package/dist/shared/daemon.js +231 -0
- package/dist/shared/daemon.js.map +1 -0
- package/dist/shared/logger.d.ts +47 -0
- package/dist/shared/logger.d.ts.map +1 -0
- package/dist/shared/logger.js +200 -0
- package/dist/shared/logger.js.map +1 -0
- package/dist/shared/project.d.ts +76 -0
- package/dist/shared/project.d.ts.map +1 -0
- package/dist/shared/project.js +185 -0
- package/dist/shared/project.js.map +1 -0
- package/dist/shared/proxy-info.d.ts +10 -0
- package/dist/shared/proxy-info.d.ts.map +1 -0
- package/dist/shared/proxy-info.js +15 -0
- package/dist/shared/proxy-info.js.map +1 -0
- package/dist/shared/types.d.ts +128 -0
- package/dist/shared/types.d.ts.map +1 -0
- package/dist/shared/types.js +5 -0
- package/dist/shared/types.js.map +1 -0
- package/dist/shared/version.d.ts +5 -0
- package/dist/shared/version.d.ts.map +1 -0
- package/dist/shared/version.js +21 -0
- package/dist/shared/version.js.map +1 -0
- package/package.json +113 -0
- package/skills/procsi/SKILL.md +228 -0
|
@@ -0,0 +1,339 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Pure functions for building and navigating a collapsible JSON tree.
|
|
3
|
+
* Used by JsonExplorerModal to render an interactive tree view.
|
|
4
|
+
*/
|
|
5
|
+
const ROOT_PATH = "root";
|
|
6
|
+
/**
|
|
7
|
+
* Format a primitive value for display.
|
|
8
|
+
*/
|
|
9
|
+
function formatPrimitive(value) {
|
|
10
|
+
if (value === null)
|
|
11
|
+
return "null";
|
|
12
|
+
if (value === undefined)
|
|
13
|
+
return "undefined";
|
|
14
|
+
if (typeof value === "string")
|
|
15
|
+
return `"${value}"`;
|
|
16
|
+
if (typeof value === "boolean")
|
|
17
|
+
return String(value);
|
|
18
|
+
if (typeof value === "number")
|
|
19
|
+
return String(value);
|
|
20
|
+
return String(value);
|
|
21
|
+
}
|
|
22
|
+
/**
|
|
23
|
+
* Determine the type classification of a value.
|
|
24
|
+
*/
|
|
25
|
+
function classifyValue(value) {
|
|
26
|
+
if (Array.isArray(value))
|
|
27
|
+
return "array";
|
|
28
|
+
if (value !== null && typeof value === "object")
|
|
29
|
+
return "object";
|
|
30
|
+
return "primitive";
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* Build a container summary string, e.g. "{3 keys}" or "[5 items]".
|
|
34
|
+
*/
|
|
35
|
+
function containerSummary(value) {
|
|
36
|
+
if (Array.isArray(value)) {
|
|
37
|
+
const len = value.length;
|
|
38
|
+
return `[${len} ${len === 1 ? "item" : "items"}]`;
|
|
39
|
+
}
|
|
40
|
+
if (value !== null && typeof value === "object") {
|
|
41
|
+
const len = Object.keys(value).length;
|
|
42
|
+
return `{${len} ${len === 1 ? "key" : "keys"}}`;
|
|
43
|
+
}
|
|
44
|
+
return "";
|
|
45
|
+
}
|
|
46
|
+
/**
|
|
47
|
+
* Build a child path from a parent path and a key.
|
|
48
|
+
*/
|
|
49
|
+
function childPath(parentPath, key, isArrayIndex) {
|
|
50
|
+
if (isArrayIndex)
|
|
51
|
+
return `${parentPath}[${key}]`;
|
|
52
|
+
// Dotted keys or keys with special chars get bracket notation
|
|
53
|
+
if (/[.[\]\s]/.test(key) || key === "") {
|
|
54
|
+
return `${parentPath}["${key}"]`;
|
|
55
|
+
}
|
|
56
|
+
return `${parentPath}.${key}`;
|
|
57
|
+
}
|
|
58
|
+
/**
|
|
59
|
+
* Build a flat array of visible tree nodes by recursively walking the JSON data.
|
|
60
|
+
* Children of collapsed nodes are skipped.
|
|
61
|
+
*/
|
|
62
|
+
export function buildVisibleNodes(data, expandedPaths) {
|
|
63
|
+
const nodes = [];
|
|
64
|
+
function walk(value, path, key, depth) {
|
|
65
|
+
const type = classifyValue(value);
|
|
66
|
+
const expandable = type !== "primitive";
|
|
67
|
+
const displayValue = expandable ? containerSummary(value) : formatPrimitive(value);
|
|
68
|
+
nodes.push({ path, key, depth, type, value: displayValue, expandable });
|
|
69
|
+
if (!expandable || !expandedPaths.has(path))
|
|
70
|
+
return;
|
|
71
|
+
if (Array.isArray(value)) {
|
|
72
|
+
for (let i = 0; i < value.length; i++) {
|
|
73
|
+
const cp = childPath(path, String(i), true);
|
|
74
|
+
walk(value[i], cp, `[${i}]`, depth + 1);
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
else if (value !== null && typeof value === "object") {
|
|
78
|
+
const entries = Object.entries(value);
|
|
79
|
+
for (const [k, v] of entries) {
|
|
80
|
+
const cp = childPath(path, k, false);
|
|
81
|
+
walk(v, cp, k, depth + 1);
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
walk(data, ROOT_PATH, "(root)", 0);
|
|
86
|
+
return nodes;
|
|
87
|
+
}
|
|
88
|
+
/**
|
|
89
|
+
* Toggle a node's expansion state. Returns a new Set.
|
|
90
|
+
*/
|
|
91
|
+
export function toggleNode(expandedPaths, path) {
|
|
92
|
+
const next = new Set(expandedPaths);
|
|
93
|
+
if (next.has(path)) {
|
|
94
|
+
next.delete(path);
|
|
95
|
+
}
|
|
96
|
+
else {
|
|
97
|
+
next.add(path);
|
|
98
|
+
}
|
|
99
|
+
return next;
|
|
100
|
+
}
|
|
101
|
+
/**
|
|
102
|
+
* Compute default expansion: root + all depth-1 nodes.
|
|
103
|
+
*/
|
|
104
|
+
export function defaultExpansion(data) {
|
|
105
|
+
const paths = new Set();
|
|
106
|
+
const type = classifyValue(data);
|
|
107
|
+
if (type === "primitive")
|
|
108
|
+
return paths;
|
|
109
|
+
paths.add(ROOT_PATH);
|
|
110
|
+
if (Array.isArray(data)) {
|
|
111
|
+
for (let i = 0; i < data.length; i++) {
|
|
112
|
+
const cp = childPath(ROOT_PATH, String(i), true);
|
|
113
|
+
if (classifyValue(data[i]) !== "primitive") {
|
|
114
|
+
paths.add(cp);
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
else if (data !== null && typeof data === "object") {
|
|
119
|
+
for (const [k, v] of Object.entries(data)) {
|
|
120
|
+
const cp = childPath(ROOT_PATH, k, false);
|
|
121
|
+
if (classifyValue(v) !== "primitive") {
|
|
122
|
+
paths.add(cp);
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
return paths;
|
|
127
|
+
}
|
|
128
|
+
/**
|
|
129
|
+
* Expand all container nodes in the data.
|
|
130
|
+
*/
|
|
131
|
+
export function expandAll(data) {
|
|
132
|
+
const paths = new Set();
|
|
133
|
+
function walk(value, path) {
|
|
134
|
+
const type = classifyValue(value);
|
|
135
|
+
if (type === "primitive")
|
|
136
|
+
return;
|
|
137
|
+
paths.add(path);
|
|
138
|
+
if (Array.isArray(value)) {
|
|
139
|
+
for (let i = 0; i < value.length; i++) {
|
|
140
|
+
walk(value[i], childPath(path, String(i), true));
|
|
141
|
+
}
|
|
142
|
+
}
|
|
143
|
+
else if (value !== null && typeof value === "object") {
|
|
144
|
+
for (const [k, v] of Object.entries(value)) {
|
|
145
|
+
walk(v, childPath(path, k, false));
|
|
146
|
+
}
|
|
147
|
+
}
|
|
148
|
+
}
|
|
149
|
+
walk(data, ROOT_PATH);
|
|
150
|
+
return paths;
|
|
151
|
+
}
|
|
152
|
+
/**
|
|
153
|
+
* Collapse everything.
|
|
154
|
+
*/
|
|
155
|
+
export function collapseAll() {
|
|
156
|
+
return new Set();
|
|
157
|
+
}
|
|
158
|
+
/**
|
|
159
|
+
* Find the parent path of a given path.
|
|
160
|
+
* Returns null for the root path.
|
|
161
|
+
*/
|
|
162
|
+
export function parentPath(path) {
|
|
163
|
+
if (path === ROOT_PATH)
|
|
164
|
+
return null;
|
|
165
|
+
// Handle bracket notation: root.foo[0] → root.foo
|
|
166
|
+
// Handle dot notation: root.foo.bar → root.foo
|
|
167
|
+
const bracketMatch = path.match(/^(.+)\[\d+\]$/);
|
|
168
|
+
if (bracketMatch?.[1])
|
|
169
|
+
return bracketMatch[1];
|
|
170
|
+
const quotedBracketMatch = path.match(/^(.+)\["[^"]*"\]$/);
|
|
171
|
+
if (quotedBracketMatch?.[1])
|
|
172
|
+
return quotedBracketMatch[1];
|
|
173
|
+
const lastDot = path.lastIndexOf(".");
|
|
174
|
+
if (lastDot === -1)
|
|
175
|
+
return null;
|
|
176
|
+
return path.substring(0, lastDot);
|
|
177
|
+
}
|
|
178
|
+
/**
|
|
179
|
+
* Filter nodes by dotted path prefix.
|
|
180
|
+
* Returns matching paths and the set of paths that should be expanded to reveal them.
|
|
181
|
+
* Returns null if filter text is empty.
|
|
182
|
+
*
|
|
183
|
+
* Supports:
|
|
184
|
+
* - Dotted paths: "data.users"
|
|
185
|
+
* - Array indices: "data.users[0]"
|
|
186
|
+
* - Case-insensitive matching
|
|
187
|
+
*/
|
|
188
|
+
export function filterByPath(data, filterText) {
|
|
189
|
+
const trimmed = filterText.trim();
|
|
190
|
+
if (trimmed === "")
|
|
191
|
+
return null;
|
|
192
|
+
const matchingPaths = new Set();
|
|
193
|
+
const expandedPaths = new Set();
|
|
194
|
+
// Normalise the filter to match against path segments
|
|
195
|
+
const filterLower = trimmed.toLowerCase();
|
|
196
|
+
function walk(value, path) {
|
|
197
|
+
// Build a "display path" without the root prefix for user-facing matching
|
|
198
|
+
const displayPath = path === ROOT_PATH ? "" : path.replace(/^root\.?/, "");
|
|
199
|
+
const displayPathLower = displayPath.toLowerCase();
|
|
200
|
+
// Match if the display path starts with the filter, or the filter starts with the display path
|
|
201
|
+
// (the latter allows partial input to highlight ancestors)
|
|
202
|
+
const isMatch = displayPathLower.startsWith(filterLower) || filterLower.startsWith(displayPathLower);
|
|
203
|
+
if (isMatch && displayPath !== "") {
|
|
204
|
+
matchingPaths.add(path);
|
|
205
|
+
// Auto-expand all ancestors to reveal the match
|
|
206
|
+
let ancestor = parentPath(path);
|
|
207
|
+
while (ancestor !== null) {
|
|
208
|
+
expandedPaths.add(ancestor);
|
|
209
|
+
ancestor = parentPath(ancestor);
|
|
210
|
+
}
|
|
211
|
+
// If the filter is an exact prefix of this path, expand this node too
|
|
212
|
+
if (filterLower.startsWith(displayPathLower)) {
|
|
213
|
+
expandedPaths.add(path);
|
|
214
|
+
}
|
|
215
|
+
}
|
|
216
|
+
// Continue walking children
|
|
217
|
+
const type = classifyValue(value);
|
|
218
|
+
if (type === "primitive")
|
|
219
|
+
return;
|
|
220
|
+
if (Array.isArray(value)) {
|
|
221
|
+
for (let i = 0; i < value.length; i++) {
|
|
222
|
+
walk(value[i], childPath(path, String(i), true));
|
|
223
|
+
}
|
|
224
|
+
}
|
|
225
|
+
else if (value !== null && typeof value === "object") {
|
|
226
|
+
for (const [k, v] of Object.entries(value)) {
|
|
227
|
+
walk(v, childPath(path, k, false));
|
|
228
|
+
}
|
|
229
|
+
}
|
|
230
|
+
}
|
|
231
|
+
walk(data, ROOT_PATH);
|
|
232
|
+
return { matchingPaths, expandedPaths };
|
|
233
|
+
}
|
|
234
|
+
/**
|
|
235
|
+
* Resolve a tree node path to the actual value in the data.
|
|
236
|
+
*/
|
|
237
|
+
export function getValueAtPath(data, path) {
|
|
238
|
+
if (path === ROOT_PATH)
|
|
239
|
+
return data;
|
|
240
|
+
// Parse the path segments after "root."
|
|
241
|
+
const withoutRoot = path.replace(/^root\.?/, "");
|
|
242
|
+
if (withoutRoot === "")
|
|
243
|
+
return data;
|
|
244
|
+
// Tokenise: handles both dot notation and bracket notation
|
|
245
|
+
const segments = [];
|
|
246
|
+
let i = 0;
|
|
247
|
+
while (i < withoutRoot.length) {
|
|
248
|
+
if (withoutRoot[i] === "[") {
|
|
249
|
+
// Bracket notation
|
|
250
|
+
const closeIdx = withoutRoot.indexOf("]", i);
|
|
251
|
+
if (closeIdx === -1)
|
|
252
|
+
break;
|
|
253
|
+
let segment = withoutRoot.substring(i + 1, closeIdx);
|
|
254
|
+
// Remove quotes from ["key"] notation
|
|
255
|
+
if (segment.startsWith('"') && segment.endsWith('"')) {
|
|
256
|
+
segment = segment.substring(1, segment.length - 1);
|
|
257
|
+
}
|
|
258
|
+
segments.push(segment);
|
|
259
|
+
i = closeIdx + 1;
|
|
260
|
+
// Skip trailing dot
|
|
261
|
+
if (i < withoutRoot.length && withoutRoot[i] === ".")
|
|
262
|
+
i++;
|
|
263
|
+
}
|
|
264
|
+
else {
|
|
265
|
+
// Dot notation
|
|
266
|
+
let dotIdx = withoutRoot.indexOf(".", i);
|
|
267
|
+
const bracketIdx = withoutRoot.indexOf("[", i);
|
|
268
|
+
if (dotIdx === -1)
|
|
269
|
+
dotIdx = withoutRoot.length;
|
|
270
|
+
if (bracketIdx !== -1 && bracketIdx < dotIdx) {
|
|
271
|
+
segments.push(withoutRoot.substring(i, bracketIdx));
|
|
272
|
+
i = bracketIdx;
|
|
273
|
+
}
|
|
274
|
+
else {
|
|
275
|
+
segments.push(withoutRoot.substring(i, dotIdx));
|
|
276
|
+
i = dotIdx + 1;
|
|
277
|
+
}
|
|
278
|
+
}
|
|
279
|
+
}
|
|
280
|
+
let current = data;
|
|
281
|
+
for (const segment of segments) {
|
|
282
|
+
if (current === null || current === undefined)
|
|
283
|
+
return undefined;
|
|
284
|
+
if (Array.isArray(current)) {
|
|
285
|
+
const idx = parseInt(segment, 10);
|
|
286
|
+
if (isNaN(idx))
|
|
287
|
+
return undefined;
|
|
288
|
+
current = current[idx];
|
|
289
|
+
}
|
|
290
|
+
else if (typeof current === "object") {
|
|
291
|
+
current = current[segment];
|
|
292
|
+
}
|
|
293
|
+
else {
|
|
294
|
+
return undefined;
|
|
295
|
+
}
|
|
296
|
+
}
|
|
297
|
+
return current;
|
|
298
|
+
}
|
|
299
|
+
/**
|
|
300
|
+
* Build a breadcrumb trail from a node path.
|
|
301
|
+
* e.g. "root.data.users[0].name" → ["(root)", "data", "users", "[0]", "name"]
|
|
302
|
+
*/
|
|
303
|
+
export function buildBreadcrumb(path) {
|
|
304
|
+
if (path === ROOT_PATH)
|
|
305
|
+
return ["(root)"];
|
|
306
|
+
const parts = ["(root)"];
|
|
307
|
+
const withoutRoot = path.replace(/^root\.?/, "");
|
|
308
|
+
if (withoutRoot === "")
|
|
309
|
+
return parts;
|
|
310
|
+
let i = 0;
|
|
311
|
+
while (i < withoutRoot.length) {
|
|
312
|
+
if (withoutRoot[i] === "[") {
|
|
313
|
+
const closeIdx = withoutRoot.indexOf("]", i);
|
|
314
|
+
if (closeIdx === -1)
|
|
315
|
+
break;
|
|
316
|
+
const segment = withoutRoot.substring(i, closeIdx + 1);
|
|
317
|
+
parts.push(segment);
|
|
318
|
+
i = closeIdx + 1;
|
|
319
|
+
if (i < withoutRoot.length && withoutRoot[i] === ".")
|
|
320
|
+
i++;
|
|
321
|
+
}
|
|
322
|
+
else {
|
|
323
|
+
let dotIdx = withoutRoot.indexOf(".", i);
|
|
324
|
+
const bracketIdx = withoutRoot.indexOf("[", i);
|
|
325
|
+
if (dotIdx === -1)
|
|
326
|
+
dotIdx = withoutRoot.length;
|
|
327
|
+
if (bracketIdx !== -1 && bracketIdx < dotIdx) {
|
|
328
|
+
parts.push(withoutRoot.substring(i, bracketIdx));
|
|
329
|
+
i = bracketIdx;
|
|
330
|
+
}
|
|
331
|
+
else {
|
|
332
|
+
parts.push(withoutRoot.substring(i, dotIdx));
|
|
333
|
+
i = dotIdx + 1;
|
|
334
|
+
}
|
|
335
|
+
}
|
|
336
|
+
}
|
|
337
|
+
return parts;
|
|
338
|
+
}
|
|
339
|
+
//# sourceMappingURL=json-tree.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"json-tree.js","sourceRoot":"","sources":["../../../../src/cli/tui/utils/json-tree.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Open files in the platform's default external application.
|
|
3
|
+
*
|
|
4
|
+
* Writes body to a temp file then opens it with the OS default handler.
|
|
5
|
+
*/
|
|
6
|
+
interface OpenResult {
|
|
7
|
+
success: boolean;
|
|
8
|
+
message: string;
|
|
9
|
+
filePath?: string;
|
|
10
|
+
}
|
|
11
|
+
/**
|
|
12
|
+
* Write body to a temp file and open it with the platform's default application.
|
|
13
|
+
* The spawned process is detached so it doesn't block the TUI.
|
|
14
|
+
*/
|
|
15
|
+
export declare function openInExternalApp(body: Buffer, filename: string): Promise<OpenResult>;
|
|
16
|
+
export {};
|
|
17
|
+
//# sourceMappingURL=open-external.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"open-external.d.ts","sourceRoot":"","sources":["../../../../src/cli/tui/utils/open-external.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AASH,UAAU,UAAU;IAClB,OAAO,EAAE,OAAO,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAiBD;;;GAGG;AACH,wBAAsB,iBAAiB,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,CAAC,CA8B3F"}
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Open files in the platform's default external application.
|
|
3
|
+
*
|
|
4
|
+
* Writes body to a temp file then opens it with the OS default handler.
|
|
5
|
+
*/
|
|
6
|
+
import * as fs from "node:fs";
|
|
7
|
+
import * as path from "node:path";
|
|
8
|
+
import * as os from "node:os";
|
|
9
|
+
import { spawn } from "node:child_process";
|
|
10
|
+
const TEMP_DIR_NAME = "procsi-exports";
|
|
11
|
+
/**
|
|
12
|
+
* Get the platform-specific command for opening files with the default app.
|
|
13
|
+
*/
|
|
14
|
+
function getOpenCommand() {
|
|
15
|
+
const platform = process.platform;
|
|
16
|
+
if (platform === "darwin") {
|
|
17
|
+
return { command: "open", args: [] };
|
|
18
|
+
}
|
|
19
|
+
else if (platform === "win32") {
|
|
20
|
+
return { command: "cmd", args: ["/c", "start", ""] };
|
|
21
|
+
}
|
|
22
|
+
else {
|
|
23
|
+
return { command: "xdg-open", args: [] };
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* Write body to a temp file and open it with the platform's default application.
|
|
28
|
+
* The spawned process is detached so it doesn't block the TUI.
|
|
29
|
+
*/
|
|
30
|
+
export async function openInExternalApp(body, filename) {
|
|
31
|
+
try {
|
|
32
|
+
const tempDir = path.join(os.tmpdir(), TEMP_DIR_NAME);
|
|
33
|
+
if (!fs.existsSync(tempDir)) {
|
|
34
|
+
fs.mkdirSync(tempDir, { recursive: true });
|
|
35
|
+
}
|
|
36
|
+
const filePath = path.join(tempDir, filename);
|
|
37
|
+
fs.writeFileSync(filePath, body);
|
|
38
|
+
const { command, args } = getOpenCommand();
|
|
39
|
+
const child = spawn(command, [...args, filePath], {
|
|
40
|
+
detached: true,
|
|
41
|
+
stdio: "ignore",
|
|
42
|
+
});
|
|
43
|
+
child.unref();
|
|
44
|
+
return {
|
|
45
|
+
success: true,
|
|
46
|
+
message: `Opened in external app: ${filename}`,
|
|
47
|
+
filePath,
|
|
48
|
+
};
|
|
49
|
+
}
|
|
50
|
+
catch (err) {
|
|
51
|
+
return {
|
|
52
|
+
success: false,
|
|
53
|
+
message: err instanceof Error ? err.message : "Failed to open externally",
|
|
54
|
+
};
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
//# sourceMappingURL=open-external.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"open-external.js","sourceRoot":"","sources":["../../../../src/cli/tui/utils/open-external.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,MAAM,SAAS,CAAC;AAC9B,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAClC,OAAO,KAAK,EAAE,MAAM,SAAS,CAAC;AAC9B,OAAO,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAC;AAE3C,MAAM,aAAa,GAAG,gBAAgB,CAAC;AAQvC;;GAEG;AACH,SAAS,cAAc;IACrB,MAAM,QAAQ,GAAG,OAAO,CAAC,QAAQ,CAAC;IAElC,IAAI,QAAQ,KAAK,QAAQ,EAAE,CAAC;QAC1B,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC;IACvC,CAAC;SAAM,IAAI,QAAQ,KAAK,OAAO,EAAE,CAAC;QAChC,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,OAAO,EAAE,EAAE,CAAC,EAAE,CAAC;IACvD,CAAC;SAAM,CAAC;QACN,OAAO,EAAE,OAAO,EAAE,UAAU,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC;IAC3C,CAAC;AACH,CAAC;AAED;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,iBAAiB,CAAC,IAAY,EAAE,QAAgB;IACpE,IAAI,CAAC;QACH,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,MAAM,EAAE,EAAE,aAAa,CAAC,CAAC;QAEtD,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC;YAC5B,EAAE,CAAC,SAAS,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QAC7C,CAAC;QAED,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;QAC9C,EAAE,CAAC,aAAa,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;QAEjC,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,GAAG,cAAc,EAAE,CAAC;QAE3C,MAAM,KAAK,GAAG,KAAK,CAAC,OAAO,EAAE,CAAC,GAAG,IAAI,EAAE,QAAQ,CAAC,EAAE;YAChD,QAAQ,EAAE,IAAI;YACd,KAAK,EAAE,QAAQ;SAChB,CAAC,CAAC;QACH,KAAK,CAAC,KAAK,EAAE,CAAC;QAEd,OAAO;YACL,OAAO,EAAE,IAAI;YACb,OAAO,EAAE,2BAA2B,QAAQ,EAAE;YAC9C,QAAQ;SACT,CAAC;IACJ,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,OAAO;YACL,OAAO,EAAE,KAAK;YACd,OAAO,EAAE,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,2BAA2B;SAC1E,CAAC;IACJ,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Syntax highlighting for HTTP body content using cli-highlight.
|
|
3
|
+
*
|
|
4
|
+
* Maps content-type shorthands (as produced by shortContentType) to
|
|
5
|
+
* highlight.js language identifiers, then applies terminal ANSI colouring.
|
|
6
|
+
*/
|
|
7
|
+
/**
|
|
8
|
+
* Apply syntax highlighting to a code string based on its content type.
|
|
9
|
+
*
|
|
10
|
+
* Returns the original string unchanged when:
|
|
11
|
+
* - The content type cannot be mapped to a supported language
|
|
12
|
+
* - The input is empty
|
|
13
|
+
* - highlight.js throws (e.g. on malformed input)
|
|
14
|
+
*/
|
|
15
|
+
export declare function highlightCode(code: string, contentType: string | undefined): string;
|
|
16
|
+
//# sourceMappingURL=syntax-highlight.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"syntax-highlight.d.ts","sourceRoot":"","sources":["../../../../src/cli/tui/utils/syntax-highlight.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAyCH;;;;;;;GAOG;AACH,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,SAAS,GAAG,MAAM,CAYnF"}
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Syntax highlighting for HTTP body content using cli-highlight.
|
|
3
|
+
*
|
|
4
|
+
* Maps content-type shorthands (as produced by shortContentType) to
|
|
5
|
+
* highlight.js language identifiers, then applies terminal ANSI colouring.
|
|
6
|
+
*/
|
|
7
|
+
import { highlight, supportsLanguage } from "cli-highlight";
|
|
8
|
+
import { shortContentType } from "./formatters.js";
|
|
9
|
+
/**
|
|
10
|
+
* Mapping from shortContentType output to highlight.js language names.
|
|
11
|
+
* Only content types that have a meaningful syntax to highlight are included.
|
|
12
|
+
*/
|
|
13
|
+
const CONTENT_TYPE_TO_LANGUAGE = {
|
|
14
|
+
json: "json",
|
|
15
|
+
xml: "xml",
|
|
16
|
+
html: "html",
|
|
17
|
+
javascript: "javascript",
|
|
18
|
+
css: "css",
|
|
19
|
+
// Less common but still useful mappings
|
|
20
|
+
"xhtml+xml": "xml",
|
|
21
|
+
"svg+xml": "xml",
|
|
22
|
+
"rss+xml": "xml",
|
|
23
|
+
"atom+xml": "xml",
|
|
24
|
+
"mathml+xml": "xml",
|
|
25
|
+
"x-javascript": "javascript",
|
|
26
|
+
ecmascript: "javascript",
|
|
27
|
+
};
|
|
28
|
+
/**
|
|
29
|
+
* Resolve a raw content-type header value to a highlight.js language name.
|
|
30
|
+
* Returns undefined when no suitable language mapping exists.
|
|
31
|
+
*/
|
|
32
|
+
function resolveLanguage(contentType) {
|
|
33
|
+
const short = shortContentType(contentType);
|
|
34
|
+
if (!short)
|
|
35
|
+
return undefined;
|
|
36
|
+
const language = CONTENT_TYPE_TO_LANGUAGE[short];
|
|
37
|
+
if (language && supportsLanguage(language)) {
|
|
38
|
+
return language;
|
|
39
|
+
}
|
|
40
|
+
return undefined;
|
|
41
|
+
}
|
|
42
|
+
/**
|
|
43
|
+
* Apply syntax highlighting to a code string based on its content type.
|
|
44
|
+
*
|
|
45
|
+
* Returns the original string unchanged when:
|
|
46
|
+
* - The content type cannot be mapped to a supported language
|
|
47
|
+
* - The input is empty
|
|
48
|
+
* - highlight.js throws (e.g. on malformed input)
|
|
49
|
+
*/
|
|
50
|
+
export function highlightCode(code, contentType) {
|
|
51
|
+
if (!code)
|
|
52
|
+
return code;
|
|
53
|
+
const language = resolveLanguage(contentType);
|
|
54
|
+
if (!language)
|
|
55
|
+
return code;
|
|
56
|
+
try {
|
|
57
|
+
return highlight(code, { language, ignoreIllegals: true });
|
|
58
|
+
}
|
|
59
|
+
catch {
|
|
60
|
+
// highlight.js can throw on particularly malformed input
|
|
61
|
+
return code;
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
//# sourceMappingURL=syntax-highlight.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"syntax-highlight.js","sourceRoot":"","sources":["../../../../src/cli/tui/utils/syntax-highlight.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,SAAS,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;AAC5D,OAAO,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AAEnD;;;GAGG;AACH,MAAM,wBAAwB,GAA2B;IACvD,IAAI,EAAE,MAAM;IACZ,GAAG,EAAE,KAAK;IACV,IAAI,EAAE,MAAM;IACZ,UAAU,EAAE,YAAY;IACxB,GAAG,EAAE,KAAK;IACV,wCAAwC;IACxC,WAAW,EAAE,KAAK;IAClB,SAAS,EAAE,KAAK;IAChB,SAAS,EAAE,KAAK;IAChB,UAAU,EAAE,KAAK;IACjB,YAAY,EAAE,KAAK;IACnB,cAAc,EAAE,YAAY;IAC5B,UAAU,EAAE,YAAY;CACzB,CAAC;AAEF;;;GAGG;AACH,SAAS,eAAe,CAAC,WAA+B;IACtD,MAAM,KAAK,GAAG,gBAAgB,CAAC,WAAW,CAAC,CAAC;IAC5C,IAAI,CAAC,KAAK;QAAE,OAAO,SAAS,CAAC;IAE7B,MAAM,QAAQ,GAAG,wBAAwB,CAAC,KAAK,CAAC,CAAC;IACjD,IAAI,QAAQ,IAAI,gBAAgB,CAAC,QAAQ,CAAC,EAAE,CAAC;QAC3C,OAAO,QAAQ,CAAC;IAClB,CAAC;IAED,OAAO,SAAS,CAAC;AACnB,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,aAAa,CAAC,IAAY,EAAE,WAA+B;IACzE,IAAI,CAAC,IAAI;QAAE,OAAO,IAAI,CAAC;IAEvB,MAAM,QAAQ,GAAG,eAAe,CAAC,WAAW,CAAC,CAAC;IAC9C,IAAI,CAAC,QAAQ;QAAE,OAAO,IAAI,CAAC;IAE3B,IAAI,CAAC;QACH,OAAO,SAAS,CAAC,IAAI,EAAE,EAAE,QAAQ,EAAE,cAAc,EAAE,IAAI,EAAE,CAAC,CAAC;IAC7D,CAAC;IAAC,MAAM,CAAC;QACP,yDAAyD;QACzD,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import type { RequestRepository } from "./storage.js";
|
|
2
|
+
import type { InterceptorLoader } from "./interceptor-loader.js";
|
|
3
|
+
import { type LogLevel } from "../shared/logger.js";
|
|
4
|
+
export { ControlClient } from "../shared/control-client.js";
|
|
5
|
+
export interface ControlServerOptions {
|
|
6
|
+
socketPath: string;
|
|
7
|
+
storage: RequestRepository;
|
|
8
|
+
proxyPort: number;
|
|
9
|
+
version: string;
|
|
10
|
+
projectRoot?: string;
|
|
11
|
+
logLevel?: LogLevel;
|
|
12
|
+
interceptorLoader?: InterceptorLoader;
|
|
13
|
+
}
|
|
14
|
+
export interface ControlServer {
|
|
15
|
+
close: () => Promise<void>;
|
|
16
|
+
}
|
|
17
|
+
/**
|
|
18
|
+
* Create a Unix socket control server for daemon communication.
|
|
19
|
+
*/
|
|
20
|
+
export declare function createControlServer(options: ControlServerOptions): ControlServer;
|
|
21
|
+
//# sourceMappingURL=control.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"control.d.ts","sourceRoot":"","sources":["../../src/daemon/control.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAC;AACtD,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AAejE,OAAO,EAAgB,KAAK,QAAQ,EAAe,MAAM,qBAAqB,CAAC;AAE/E,OAAO,EAAE,aAAa,EAAE,MAAM,6BAA6B,CAAC;AAE5D,MAAM,WAAW,oBAAoB;IACnC,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,iBAAiB,CAAC;IAC3B,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,EAAE,QAAQ,CAAC;IACpB,iBAAiB,CAAC,EAAE,iBAAiB,CAAC;CACvC;AAED,MAAM,WAAW,aAAa;IAC5B,KAAK,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;CAC5B;AAwHD;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,oBAAoB,GAAG,aAAa,CAkOhF"}
|