@braidlabs/console 0.3.0 → 0.5.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 +34 -10
- package/package.json +10 -4
- package/src/app/auth.d.ts +46 -0
- package/src/app/auth.js +80 -0
- package/src/app/auth.js.map +1 -0
- package/src/app/console-app.d.ts +8 -6
- package/src/app/console-app.js +96 -20
- package/src/app/console-app.js.map +1 -1
- package/src/app/main.js +25 -2
- package/src/app/main.js.map +1 -1
- package/src/app/routes.d.ts +14 -0
- package/src/app/routes.js +23 -0
- package/src/app/routes.js.map +1 -0
- package/src/index.d.ts +15 -2
- package/src/index.js +10 -2
- package/src/index.js.map +1 -1
- package/src/lib/client.d.ts +61 -2
- package/src/lib/client.js +60 -2
- package/src/lib/client.js.map +1 -1
- package/src/lib/draft.d.ts +1 -1
- package/src/lib/draft.js +2 -2
- package/src/lib/draft.js.map +1 -1
- package/src/lib/empty-state.d.ts +15 -0
- package/src/lib/empty-state.js +38 -0
- package/src/lib/empty-state.js.map +1 -0
- package/src/lib/history-panel.d.ts +19 -0
- package/src/lib/history-panel.js +109 -0
- package/src/lib/history-panel.js.map +1 -0
- package/src/lib/ownership.d.ts +15 -0
- package/src/lib/ownership.js +21 -0
- package/src/lib/ownership.js.map +1 -0
- package/src/lib/query.d.ts +47 -0
- package/src/lib/query.js +121 -0
- package/src/lib/query.js.map +1 -0
- package/src/lib/registry-console.d.ts +13 -2
- package/src/lib/registry-console.js +15 -11
- package/src/lib/registry-console.js.map +1 -1
- package/src/lib/registry-editor.d.ts +3 -1
- package/src/lib/registry-editor.js +50 -17
- package/src/lib/registry-editor.js.map +1 -1
- package/src/lib/shell-codegen.d.ts +28 -0
- package/src/lib/shell-codegen.js +316 -0
- package/src/lib/shell-codegen.js.map +1 -0
- package/src/lib/shells-panel.d.ts +43 -0
- package/src/lib/shells-panel.js +307 -0
- package/src/lib/shells-panel.js.map +1 -0
- package/src/lib/styles.d.ts +1 -1
- package/src/lib/styles.js +72 -4
- package/src/lib/styles.js.map +1 -1
- package/src/lib/tag-chip.d.ts +8 -0
- package/src/lib/tag-chip.js +12 -0
- package/src/lib/tag-chip.js.map +1 -0
- package/src/lib/tags.d.ts +10 -0
- package/src/lib/tags.js +53 -0
- package/src/lib/tags.js.map +1 -0
- package/src/lib/topology-graph.d.ts +5 -2
- package/src/lib/topology-graph.js +17 -8
- package/src/lib/topology-graph.js.map +1 -1
- package/src/lib/topology.d.ts +18 -3
- package/src/lib/topology.js +42 -3
- package/src/lib/topology.js.map +1 -1
package/src/lib/query.js
ADDED
|
@@ -0,0 +1,121 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* A small query language over shells and fragments.
|
|
3
|
+
*
|
|
4
|
+
* ```
|
|
5
|
+
* tag:finance -is:gated route:/billing/123 "customer reviews"
|
|
6
|
+
* ```
|
|
7
|
+
*
|
|
8
|
+
* Terms are ANDed; `-` negates one; quotes keep spaces in a value. Anything that is not a known
|
|
9
|
+
* `key:value` is free text, matched as one phrase across everything a row shows — which is exactly
|
|
10
|
+
* what the old filter box did, so a query with no keys behaves as it always has.
|
|
11
|
+
*/
|
|
12
|
+
export const QUERY_KEYS = ['tag', 'type', 'framework', 'route', 'adapter', 'is'];
|
|
13
|
+
const TOKEN = /(-?)(?:([a-zA-Z]+):)?(?:"([^"]*)"|(\S+))/g;
|
|
14
|
+
const DANGLING_KEY = new RegExp(`(^|\\s)-?(?:${QUERY_KEYS.join('|')}):(?=\\s|$)`, 'gi');
|
|
15
|
+
export function parseQuery(raw) {
|
|
16
|
+
const terms = [];
|
|
17
|
+
const text = [];
|
|
18
|
+
const exclude = [];
|
|
19
|
+
// `tag:` with nothing after it is a query being typed, not a filter that matches nothing.
|
|
20
|
+
const input = raw.replace(DANGLING_KEY, '$1');
|
|
21
|
+
let structured = input !== raw;
|
|
22
|
+
for (const match of input.matchAll(TOKEN)) {
|
|
23
|
+
const [raw, minus, key, quoted, bare] = match;
|
|
24
|
+
const value = quoted ?? bare ?? '';
|
|
25
|
+
const known = key && QUERY_KEYS.includes(key.toLowerCase());
|
|
26
|
+
if (known) {
|
|
27
|
+
structured = true;
|
|
28
|
+
terms.push({ key: key.toLowerCase(), value, negate: minus === '-' });
|
|
29
|
+
}
|
|
30
|
+
else if (minus === '-' && !key && value) {
|
|
31
|
+
structured = true;
|
|
32
|
+
exclude.push(value.toLowerCase());
|
|
33
|
+
}
|
|
34
|
+
else {
|
|
35
|
+
if (quoted !== undefined)
|
|
36
|
+
structured = true;
|
|
37
|
+
text.push(key ? raw.replace(/^-/, '') : value);
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
// With no structure at all, keep the query's own spacing: the old filter matched the trimmed
|
|
41
|
+
// query as typed, and "unchanged" should mean unchanged.
|
|
42
|
+
const phrase = structured ? text.join(' ') : input.trim();
|
|
43
|
+
return { terms, text: phrase.toLowerCase(), exclude };
|
|
44
|
+
}
|
|
45
|
+
export function matchQuery(item, query) {
|
|
46
|
+
const fields = item.fields.map((field) => field.toLowerCase());
|
|
47
|
+
if (query.text && !fields.some((field) => field.includes(query.text)))
|
|
48
|
+
return false;
|
|
49
|
+
if (query.exclude.some((word) => fields.some((field) => field.includes(word))))
|
|
50
|
+
return false;
|
|
51
|
+
return query.terms.every((term) => matchTerm(item, term) !== term.negate);
|
|
52
|
+
}
|
|
53
|
+
function matchTerm(item, { key, value }) {
|
|
54
|
+
const needle = value.toLowerCase();
|
|
55
|
+
switch (key) {
|
|
56
|
+
case 'tag':
|
|
57
|
+
return item.tags.some((tag) => tag.toLowerCase() === needle);
|
|
58
|
+
case 'type':
|
|
59
|
+
return item.type === needle;
|
|
60
|
+
case 'framework':
|
|
61
|
+
return item.framework?.toLowerCase() === needle;
|
|
62
|
+
case 'adapter':
|
|
63
|
+
return item.adapter?.toLowerCase() === needle;
|
|
64
|
+
case 'route':
|
|
65
|
+
return item.routes.some((pattern) => routeMatches(pattern, value));
|
|
66
|
+
case 'is':
|
|
67
|
+
if (needle === 'gated')
|
|
68
|
+
return item.gated === true;
|
|
69
|
+
if (needle === 'unrouted')
|
|
70
|
+
return item.routes.length === 0;
|
|
71
|
+
return false;
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
/**
|
|
75
|
+
* `route:` matches a pattern written the same way, or a concrete path the pattern would serve —
|
|
76
|
+
* `route:/billing/123` finds what pierces `/billing/*`, which is the question an operator with a
|
|
77
|
+
* URL in hand is asking.
|
|
78
|
+
*/
|
|
79
|
+
function routeMatches(pattern, value) {
|
|
80
|
+
if (pattern.toLowerCase() === value.toLowerCase())
|
|
81
|
+
return true;
|
|
82
|
+
if (typeof URLPattern === 'undefined' || !value.startsWith('/'))
|
|
83
|
+
return false;
|
|
84
|
+
try {
|
|
85
|
+
return new URLPattern({ pathname: pattern }).test({ pathname: value });
|
|
86
|
+
}
|
|
87
|
+
catch {
|
|
88
|
+
return false;
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
export function fragmentItem(entry) {
|
|
92
|
+
return {
|
|
93
|
+
type: 'fragment',
|
|
94
|
+
id: entry.id,
|
|
95
|
+
tags: entry.tags ?? [],
|
|
96
|
+
routes: entry.pierce ?? [],
|
|
97
|
+
adapter: entry.adapter,
|
|
98
|
+
gated: !entry.loadable,
|
|
99
|
+
fields: [entry.id, entry.title, entry.description, entry.adapter, ...(entry.tags ?? []), ...(entry.pierce ?? [])].filter((field) => Boolean(field)),
|
|
100
|
+
};
|
|
101
|
+
}
|
|
102
|
+
export function shellItem(shell) {
|
|
103
|
+
const routes = shell.routes.map((route) => route.path);
|
|
104
|
+
const slotted = shell.routes.flatMap((route) => Object.values(route.slots ?? {}));
|
|
105
|
+
return {
|
|
106
|
+
type: 'shell',
|
|
107
|
+
id: shell.id,
|
|
108
|
+
tags: shell.tags ?? [],
|
|
109
|
+
routes,
|
|
110
|
+
framework: shell.framework,
|
|
111
|
+
fields: [shell.id, shell.title, shell.description, shell.framework, ...(shell.tags ?? []), ...routes, ...slotted].filter((field) => Boolean(field)),
|
|
112
|
+
};
|
|
113
|
+
}
|
|
114
|
+
/** Filters anything with a {@link SearchItem} view by a query string. */
|
|
115
|
+
export function filterBy(items, query, view) {
|
|
116
|
+
const parsed = parseQuery(query);
|
|
117
|
+
if (!parsed.text && parsed.terms.length === 0 && parsed.exclude.length === 0)
|
|
118
|
+
return [...items];
|
|
119
|
+
return items.filter((item) => matchQuery(view(item), parsed));
|
|
120
|
+
}
|
|
121
|
+
//# sourceMappingURL=query.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"query.js","sourceRoot":"","sources":["../../../../../libs/braid-console/src/lib/query.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import type { DiscoveryEntry } from '@braidlabs/gateway';
|
|
2
|
+
import type { ShellManifest } from '@braidlabs/registry';
|
|
2
3
|
import { type ConsoleApi, type RegistryListing } from './client.js';
|
|
3
4
|
export interface RegistryConsoleProps {
|
|
4
5
|
/** How to reach the gateway. Defaults to this origin's `/__braid/registry`. */
|
|
@@ -29,6 +30,11 @@ export interface RegistryConsoleProps {
|
|
|
29
30
|
* of tabs disagreeing about which one is selected.
|
|
30
31
|
*/
|
|
31
32
|
view?: ConsoleView;
|
|
33
|
+
/**
|
|
34
|
+
* Shells to draw on the topology, from the pinned snapshot. The discovery listing this console
|
|
35
|
+
* reads knows only fragments, so a host with the write API passes them in.
|
|
36
|
+
*/
|
|
37
|
+
shells?: readonly ShellManifest[];
|
|
32
38
|
}
|
|
33
39
|
export type ConsoleView = 'fragments' | 'topology';
|
|
34
40
|
/**
|
|
@@ -41,6 +47,11 @@ export type ConsoleView = 'fragments' | 'topology';
|
|
|
41
47
|
* What it deliberately does not do: own the URL, own a session, or style anything outside itself.
|
|
42
48
|
* See `styles.ts` for the second, and `ConsoleApi` for the first two.
|
|
43
49
|
*/
|
|
44
|
-
export declare function RegistryConsole({ api, theme, className, onLoaded, chrome, view }: RegistryConsoleProps): import("react").JSX.Element;
|
|
45
|
-
/**
|
|
50
|
+
export declare function RegistryConsole({ api, theme, className, onLoaded, chrome, view, shells }: RegistryConsoleProps): import("react").JSX.Element;
|
|
51
|
+
/** The query that filters by one tag, quoted when the tag has spaces. */
|
|
52
|
+
export declare function tagQuery(tag: string): string;
|
|
53
|
+
/**
|
|
54
|
+
* Matches across everything visible in a row, so the filter finds what the eye can see — plus the
|
|
55
|
+
* `key:value` terms of the query language (see `query.ts`), e.g. `tag:finance -is:gated`.
|
|
56
|
+
*/
|
|
46
57
|
export declare function filterEntries(entries: readonly DiscoveryEntry[], query: string): DiscoveryEntry[];
|
|
@@ -5,6 +5,8 @@ import { ensureStyles } from './styles.js';
|
|
|
5
5
|
import { buildTopology } from './topology.js';
|
|
6
6
|
import { TopologyGraph } from './topology-graph.js';
|
|
7
7
|
import { IntegrationPanel } from './integration-panel.js';
|
|
8
|
+
import { filterBy, fragmentItem } from './query.js';
|
|
9
|
+
import { TagChip } from './tag-chip.js';
|
|
8
10
|
/**
|
|
9
11
|
* A read-only view of what a gateway has registered.
|
|
10
12
|
*
|
|
@@ -15,7 +17,7 @@ import { IntegrationPanel } from './integration-panel.js';
|
|
|
15
17
|
* What it deliberately does not do: own the URL, own a session, or style anything outside itself.
|
|
16
18
|
* See `styles.ts` for the second, and `ConsoleApi` for the first two.
|
|
17
19
|
*/
|
|
18
|
-
export function RegistryConsole({ api, theme, className, onLoaded, chrome = true, view }) {
|
|
20
|
+
export function RegistryConsole({ api, theme, className, onLoaded, chrome = true, view, shells }) {
|
|
19
21
|
const [state, setState] = useState({ status: 'loading' });
|
|
20
22
|
const [query, setQuery] = useState('');
|
|
21
23
|
const [ownTab, setOwnTab] = useState('fragments');
|
|
@@ -56,7 +58,7 @@ export function RegistryConsole({ api, theme, className, onLoaded, chrome = true
|
|
|
56
58
|
// that ignored the filter would contradict the table sitting one tab away from it.
|
|
57
59
|
const topology = useMemo(() => buildTopology(visible), [visible]);
|
|
58
60
|
const reload = useCallback(() => setReloadToken((token) => token + 1), []);
|
|
59
|
-
return (_jsx("div", { className: `braid-console${className ? ` ${className}` : ''}`, ...(theme ? { 'data-theme': theme } : {}), children: state.status === 'error' ? (_jsx(ErrorPanel, { error: state.error, onRetry: reload })) : (_jsxs("div", { className: "braid-console__shell", children: [chrome && (_jsxs("div", { className: "braid-console__titlebar", children: [_jsx("h2", { className: "braid-console__producttitle", children: "Fragment registry" }), _jsxs("span", { className: "braid-console__breadcrumb", children: [_jsx("span", { "aria-hidden": "true", children: "\u00B7" }), _jsx("code", { children: api?.baseUrl || 'this origin' }), state.status === 'ready' && _jsxs("span", { children: ["protocol ", state.listing.protocolVersion] })] })] })), _jsxs("div", { className: "braid-console__commandbar", children: [view === undefined && (_jsxs("div", { className: "braid-console__tabs", role: "tablist", "aria-label": "Registry views", children: [_jsxs("button", { type: "button", role: "tab", className: "braid-console__tab", "aria-selected": tab === 'fragments', onClick: () => setOwnTab('fragments'), children: ["Fragments", _jsx("span", { className: "braid-console__tabcount", children: visible.length })] }), _jsxs("button", { type: "button", role: "tab", className: "braid-console__tab", "aria-selected": tab === 'topology', onClick: () => setOwnTab('topology'), children: ["Topology", _jsx("span", { className: "braid-console__tabcount", children: topology.routes.length })] })] })), _jsx("span", { className: "braid-console__spacer" }), _jsxs("button", { type: "button", className: "braid-console__command", onClick: reload, disabled: state.status === 'loading', children: [_jsx("span", { className: "braid-console__commandicon", "aria-hidden": "true", children: "\u27F3" }), state.status === 'loading' ? 'Refreshing…' : 'Refresh'] }), _jsx("span", { className: "braid-console__commandsep", "aria-hidden": "true" }), _jsx("input", { className: "braid-console__search", type: "search", value: query, placeholder: "Filter
|
|
61
|
+
return (_jsx("div", { className: `braid-console${className ? ` ${className}` : ''}`, ...(theme ? { 'data-theme': theme } : {}), children: state.status === 'error' ? (_jsx(ErrorPanel, { error: state.error, onRetry: reload })) : (_jsxs("div", { className: "braid-console__shell", children: [chrome && (_jsxs("div", { className: "braid-console__titlebar", children: [_jsx("h2", { className: "braid-console__producttitle", children: "Fragment registry" }), _jsxs("span", { className: "braid-console__breadcrumb", children: [_jsx("span", { "aria-hidden": "true", children: "\u00B7" }), _jsx("code", { children: api?.baseUrl || 'this origin' }), state.status === 'ready' && _jsxs("span", { children: ["protocol ", state.listing.protocolVersion] })] })] })), _jsxs("div", { className: "braid-console__commandbar", children: [view === undefined && (_jsxs("div", { className: "braid-console__tabs", role: "tablist", "aria-label": "Registry views", children: [_jsxs("button", { type: "button", role: "tab", className: "braid-console__tab", "aria-selected": tab === 'fragments', onClick: () => setOwnTab('fragments'), children: ["Fragments", _jsx("span", { className: "braid-console__tabcount", children: visible.length })] }), _jsxs("button", { type: "button", role: "tab", className: "braid-console__tab", "aria-selected": tab === 'topology', onClick: () => setOwnTab('topology'), children: ["Topology", _jsx("span", { className: "braid-console__tabcount", children: topology.routes.length })] })] })), _jsx("span", { className: "braid-console__spacer" }), _jsxs("button", { type: "button", className: "braid-console__command", onClick: reload, disabled: state.status === 'loading', children: [_jsx("span", { className: "braid-console__commandicon", "aria-hidden": "true", children: "\u27F3" }), state.status === 'loading' ? 'Refreshing…' : 'Refresh'] }), _jsx("span", { className: "braid-console__commandsep", "aria-hidden": "true" }), _jsx("input", { className: "braid-console__search", type: "search", value: query, placeholder: "Filter \u2014 text, or tag:finance is:gated route:/billing/*", "aria-label": "Filter fragments", onChange: (event) => setQuery(event.target.value) })] }), state.status === 'ready' && _jsx(StatStrip, { listing: state.listing, entries: visible, topology: topology }), state.status === 'ready' && state.listing.unfiltered && (_jsxs("p", { className: "braid-console__notice", role: "status", children: [_jsx("span", { "aria-hidden": "true", children: "\u25C6" }), _jsxs("span", { children: ["This gateway is in ", _jsx("strong", { children: "development mode" }), ", so the listing skips access filtering and may include endpoints. A production gateway shows only what the caller may list."] })] })), state.status === 'loading' ? (_jsx("p", { className: "braid-console__empty", children: "Loading the registry\u2026" })) : visible.length === 0 ? (_jsx("p", { className: "braid-console__empty", children: entries.length === 0 ? 'No fragments are registered.' : `Nothing matches “${query}”.` })) : tab === 'fragments' ? (_jsx(FragmentTable, { entries: visible, onEmbed: setEmbedding, onTag: (tag) => setQuery(tagQuery(tag)) })) : (_jsx(TopologyGraph, { entries: visible, ...(shells ? { shells } : {}), onEmbed: setEmbedding })), embedding && _jsx(IntegrationPanel, { entry: embedding, onClose: () => setEmbedding(null) })] })) }));
|
|
60
62
|
}
|
|
61
63
|
/**
|
|
62
64
|
* The four numbers worth reading before scrolling.
|
|
@@ -70,19 +72,21 @@ function StatStrip({ listing, entries, topology, }) {
|
|
|
70
72
|
const gated = entries.filter((entry) => !entry.loadable).length;
|
|
71
73
|
return (_jsxs("div", { className: "braid-console__stats", children: [_jsxs("div", { className: "braid-console__stat", children: [_jsx("span", { className: "braid-console__statvalue", children: listing.total }), _jsx("span", { className: "braid-console__statlabel", children: "Fragments registered" })] }), _jsxs("div", { className: "braid-console__stat", children: [_jsx("span", { className: "braid-console__statvalue", children: topology.routes.length }), _jsx("span", { className: "braid-console__statlabel", children: "Route patterns" })] }), _jsxs("div", { className: `braid-console__stat${shared > 0 ? ' braid-console__stat--warn' : ''}`, children: [_jsx("span", { className: "braid-console__statvalue", children: shared }), _jsx("span", { className: "braid-console__statlabel", children: "Shared routes" })] }), _jsxs("div", { className: "braid-console__stat", children: [_jsx("span", { className: "braid-console__statvalue", children: gated }), _jsx("span", { className: "braid-console__statlabel", children: "Gated for you" })] })] }));
|
|
72
74
|
}
|
|
73
|
-
function FragmentTable({ entries, onEmbed }) {
|
|
74
|
-
return (_jsxs("table", { className: "braid-console__table", children: [_jsx("thead", { children: _jsxs("tr", { children: [_jsx("th", { scope: "col", children: "Fragment" }), _jsx("th", { scope: "col", children: "Adapter" }), _jsx("th", { scope: "col", children: "Pierces" }), _jsx("th", { scope: "col", children: "Mount" }), _jsx("th", { scope: "col", children: "Access" }), _jsx("th", { scope: "col", children: _jsx("span", { className: "braid-console__sronly", children: "Actions" }) })] }) }), _jsx("tbody", { children: entries.map((entry) => (_jsxs("tr", { children: [_jsxs("td", { children: [_jsx("div", { className: "braid-console__id", children: entry.id }), entry.title !== entry.id && _jsx("div", { className: "braid-console__desc", children: entry.title }), entry.description && _jsx("div", { className: "braid-console__desc", children: entry.description }), entry.tags?.map((tag) => (_jsx(
|
|
75
|
+
function FragmentTable({ entries, onEmbed, onTag, }) {
|
|
76
|
+
return (_jsxs("table", { className: "braid-console__table", children: [_jsx("thead", { children: _jsxs("tr", { children: [_jsx("th", { scope: "col", children: "Fragment" }), _jsx("th", { scope: "col", children: "Adapter" }), _jsx("th", { scope: "col", children: "Pierces" }), _jsx("th", { scope: "col", children: "Mount" }), _jsx("th", { scope: "col", children: "Access" }), _jsx("th", { scope: "col", children: _jsx("span", { className: "braid-console__sronly", children: "Actions" }) })] }) }), _jsx("tbody", { children: entries.map((entry) => (_jsxs("tr", { children: [_jsxs("td", { children: [_jsx("div", { className: "braid-console__id", children: entry.id }), entry.title !== entry.id && _jsx("div", { className: "braid-console__desc", children: entry.title }), entry.description && _jsx("div", { className: "braid-console__desc", children: entry.description }), entry.tags?.map((tag) => (_jsx(TagChip, { tag: tag, onSelect: onTag }, tag)))] }), _jsx("td", { className: "braid-console__mono", children: entry.adapter }), _jsx("td", { children: _jsx("div", { className: "braid-console__patterns", children: entry.pierce?.length ? (entry.pierce.map((pattern) => (_jsx("span", { className: "braid-console__mono", children: pattern }, pattern)))) : (_jsx("span", { className: "braid-console__mono", children: "\u2014" })) }) }), _jsx("td", { className: "braid-console__mono", children: entry.mount }), _jsx("td", { children: _jsx("span", { className: `braid-console__badge braid-console__badge--${entry.loadable ? 'loadable' : 'gated'}`, title: entry.loadable ? 'You may load this fragment' : 'Listed, but you may not load it', children: entry.loadable ? 'loadable' : 'gated' }) }), _jsx("td", { children: _jsx("button", { type: "button", className: "braid-console__ghost", onClick: () => onEmbed(entry), "aria-label": `Show code to embed ${entry.id}`, children: "Embed" }) })] }, entry.id))) })] }));
|
|
75
77
|
}
|
|
76
78
|
function ErrorPanel({ error, onRetry }) {
|
|
77
79
|
return (_jsxs("div", { className: "braid-console__error", role: "alert", children: [_jsx("h3", { children: "Could not read the registry" }), _jsx("p", { children: error.message }), _jsx("button", { className: "braid-console__retry", type: "button", onClick: onRetry, children: "Try again" })] }));
|
|
78
80
|
}
|
|
79
|
-
/**
|
|
81
|
+
/** The query that filters by one tag, quoted when the tag has spaces. */
|
|
82
|
+
export function tagQuery(tag) {
|
|
83
|
+
return /\s/.test(tag) ? `tag:"${tag}"` : `tag:${tag}`;
|
|
84
|
+
}
|
|
85
|
+
/**
|
|
86
|
+
* Matches across everything visible in a row, so the filter finds what the eye can see — plus the
|
|
87
|
+
* `key:value` terms of the query language (see `query.ts`), e.g. `tag:finance -is:gated`.
|
|
88
|
+
*/
|
|
80
89
|
export function filterEntries(entries, query) {
|
|
81
|
-
|
|
82
|
-
if (!needle)
|
|
83
|
-
return [...entries];
|
|
84
|
-
return entries.filter((entry) => [entry.id, entry.title, entry.description, entry.adapter, ...(entry.tags ?? []), ...(entry.pierce ?? [])]
|
|
85
|
-
.filter(Boolean)
|
|
86
|
-
.some((field) => String(field).toLowerCase().includes(needle)));
|
|
90
|
+
return filterBy(entries, query, fragmentItem);
|
|
87
91
|
}
|
|
88
92
|
//# sourceMappingURL=registry-console.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"registry-console.js","sourceRoot":"","sources":["../../../../../libs/braid-console/src/lib/registry-console.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,WAAW,EAAE,SAAS,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"registry-console.js","sourceRoot":"","sources":["../../../../../libs/braid-console/src/lib/registry-console.tsx"],"names":[],"mappings":"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"}
|
|
@@ -15,6 +15,8 @@ export interface RegistryEditorProps {
|
|
|
15
15
|
*/
|
|
16
16
|
principals?: NamedPrincipal[];
|
|
17
17
|
onPrincipalsChange?: (principals: NamedPrincipal[]) => void;
|
|
18
|
+
/** Told whether there are unpublished edits, for a host that warns before leaving the page. */
|
|
19
|
+
onDirtyChange?: (dirty: boolean) => void;
|
|
18
20
|
}
|
|
19
21
|
/**
|
|
20
22
|
* Edit the registry and publish it as a new immutable snapshot.
|
|
@@ -23,4 +25,4 @@ export interface RegistryEditorProps {
|
|
|
23
25
|
* Publishing never mutates the snapshot being edited; it mints a new one and moves a pointer, so
|
|
24
26
|
* the previous configuration remains exactly as it was and rollback is re-pinning it.
|
|
25
27
|
*/
|
|
26
|
-
export declare function RegistryEditor({ api, theme, className, onPublished, principals, onPrincipalsChange, }: RegistryEditorProps): import("react").JSX.Element;
|
|
28
|
+
export declare function RegistryEditor({ api, theme, className, onPublished, principals, onPrincipalsChange, onDirtyChange, }: RegistryEditorProps): import("react").JSX.Element;
|
|
@@ -1,10 +1,11 @@
|
|
|
1
1
|
import { jsx as _jsx, Fragment as _Fragment, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
|
-
import { useCallback, useEffect, useMemo, useState } from 'react';
|
|
2
|
+
import { useCallback, useEffect, useMemo, useRef, useState } from 'react';
|
|
3
3
|
import { AccessPanel } from './access-panel.js';
|
|
4
|
-
import { fetchHead, publishSnapshot, RegistryApiError, } from './client.js';
|
|
4
|
+
import { fetchHead, fetchPermissions, publishSnapshot, RegistryApiError, } from './client.js';
|
|
5
5
|
import { accessMatrix, ANONYMOUS } from '@braidlabs/registry';
|
|
6
6
|
import { addFragment, createDraft, draftStatus, formatList, parseList, removeFragment, resetDraft, updateFragment, } from './draft.js';
|
|
7
7
|
import { ensureStyles } from './styles.js';
|
|
8
|
+
import { canChange, startingTags } from './ownership.js';
|
|
8
9
|
/**
|
|
9
10
|
* Edit the registry and publish it as a new immutable snapshot.
|
|
10
11
|
*
|
|
@@ -12,13 +13,18 @@ import { ensureStyles } from './styles.js';
|
|
|
12
13
|
* Publishing never mutates the snapshot being edited; it mints a new one and moves a pointer, so
|
|
13
14
|
* the previous configuration remains exactly as it was and rollback is re-pinning it.
|
|
14
15
|
*/
|
|
15
|
-
export function RegistryEditor({ api, theme, className, onPublished, principals, onPrincipalsChange, }) {
|
|
16
|
+
export function RegistryEditor({ api, theme, className, onPublished, principals, onPrincipalsChange, onDirtyChange, }) {
|
|
16
17
|
const [draft, setDraft] = useState(() => createDraft([]));
|
|
17
18
|
const [phase, setPhase] = useState({ status: 'loading' });
|
|
18
19
|
const [expanded, setExpanded] = useState(null);
|
|
19
20
|
const [showDiff, setShowDiff] = useState(false);
|
|
20
21
|
const [showAccess, setShowAccess] = useState(false);
|
|
21
22
|
const [ownPrincipals, setOwnPrincipals] = useState([]);
|
|
23
|
+
/** Per-tag ownership from /permissions; null when the registry has none, or did not say. */
|
|
24
|
+
const [owned, setOwned] = useState(null);
|
|
25
|
+
/** Whether a publish may also pin. Unknown reads as yes: the server refuses what it refuses. */
|
|
26
|
+
const [canPin, setCanPin] = useState(true);
|
|
27
|
+
const [loadToken, setLoadToken] = useState(0);
|
|
22
28
|
// Controlled when the host supplies them, uncontrolled otherwise — the same shape as any input.
|
|
23
29
|
const testPrincipals = principals ?? ownPrincipals;
|
|
24
30
|
const setPrincipals = (next) => (onPrincipalsChange ?? setOwnPrincipals)(next);
|
|
@@ -30,6 +36,14 @@ export function RegistryEditor({ api, theme, className, onPublished, principals,
|
|
|
30
36
|
const controller = new AbortController();
|
|
31
37
|
let current = true;
|
|
32
38
|
setPhase({ status: 'loading' });
|
|
39
|
+
// Ownership only narrows what the editor offers; if it cannot be read, offer everything and let
|
|
40
|
+
// the server refuse what it refuses.
|
|
41
|
+
fetchPermissions(api, controller.signal).then((permissions) => {
|
|
42
|
+
if (!current)
|
|
43
|
+
return;
|
|
44
|
+
setOwned(permissions.tags ?? null);
|
|
45
|
+
setCanPin(permissions.pin !== false);
|
|
46
|
+
}, () => undefined);
|
|
33
47
|
fetchHead(api, controller.signal).then((head) => {
|
|
34
48
|
if (!current)
|
|
35
49
|
return;
|
|
@@ -45,18 +59,31 @@ export function RegistryEditor({ api, theme, className, onPublished, principals,
|
|
|
45
59
|
controller.abort();
|
|
46
60
|
};
|
|
47
61
|
// apiKey stands in for the api object, which is usually a fresh literal each render
|
|
48
|
-
}, [apiKey]);
|
|
62
|
+
}, [apiKey, loadToken]);
|
|
49
63
|
const status = useMemo(() => draftStatus(draft), [draft]);
|
|
64
|
+
// Through a ref, so a host passing an inline callback hears only real changes, not one per render.
|
|
65
|
+
const dirtyListener = useRef(onDirtyChange);
|
|
66
|
+
dirtyListener.current = onDirtyChange;
|
|
67
|
+
useEffect(() => {
|
|
68
|
+
dirtyListener.current?.(!status.clean);
|
|
69
|
+
}, [status.clean]);
|
|
70
|
+
// Once unmounted the editor holds no draft, so there is nothing left for the host to warn about.
|
|
71
|
+
useEffect(() => () => dirtyListener.current?.(false), []);
|
|
50
72
|
// Computed whether or not the panel is open: an access loss is a finding, and a finding hidden
|
|
51
73
|
// behind a toggle nobody pressed is not a finding.
|
|
52
74
|
const accessLosses = useMemo(() => accessMatrix(draft.manifests, [ANONYMOUS, ...testPrincipals], draft.base).losses.length, [draft.manifests, draft.base, testPrincipals]);
|
|
53
75
|
const publish = useCallback(async () => {
|
|
54
76
|
setPhase({ status: 'publishing' });
|
|
55
77
|
try {
|
|
56
|
-
|
|
78
|
+
// baseId makes the server refuse (409) a publish that would replace a HEAD someone else moved
|
|
79
|
+
// since this draft started — otherwise it would silently revert their change. A caller who
|
|
80
|
+
// may not pin publishes a candidate, which leaves HEAD for someone who may.
|
|
81
|
+
const outcome = await publishSnapshot(api ?? {}, { manifests: draft.manifests, baseId: draft.baseId, pin: canPin });
|
|
57
82
|
// Re-base on what was actually published, so the diff resets and a second publish of the
|
|
58
|
-
// same content is correctly reported as no change.
|
|
59
|
-
|
|
83
|
+
// same content is correctly reported as no change. A proposal or a candidate does not move
|
|
84
|
+
// HEAD, so the draft stays based on it.
|
|
85
|
+
if (outcome.pinned)
|
|
86
|
+
setDraft(createDraft(draft.manifests, outcome.snapshot.id));
|
|
60
87
|
setPhase({ status: 'published', outcome });
|
|
61
88
|
onPublished?.(outcome);
|
|
62
89
|
}
|
|
@@ -67,21 +94,24 @@ export function RegistryEditor({ api, theme, className, onPublished, principals,
|
|
|
67
94
|
error: asError(error),
|
|
68
95
|
findings: apiError?.findings ?? [],
|
|
69
96
|
notes: apiError?.descriptorNotes ?? [],
|
|
97
|
+
conflict: apiError?.status === 409,
|
|
70
98
|
});
|
|
71
99
|
}
|
|
72
|
-
}, [api, draft.manifests, onPublished]);
|
|
100
|
+
}, [api, draft.manifests, draft.baseId, canPin, onPublished]);
|
|
73
101
|
if (phase.status === 'loading') {
|
|
74
102
|
return (_jsx("div", { className: rootClass(className), ...themeAttr(theme), children: _jsx("p", { className: "braid-console__empty", children: "Loading the pinned registry\u2026" }) }));
|
|
75
103
|
}
|
|
76
|
-
return (_jsxs("div", { className: rootClass(className), ...themeAttr(theme), children: [_jsxs("div", { className: "braid-console__header", children: [_jsx("h2", { className: "braid-console__title", children: "Edit registry" }), _jsx("span", { className: "braid-console__count", children: draft.baseId ? (_jsxs(_Fragment, { children: ["from ", _jsx("code", { className: "braid-console__mono", children: draft.baseId })] })) : ('nothing published yet') }), _jsx("span", { className: "braid-console__spacer" }), _jsx("button", { className: "braid-console__retry", type: "button", onClick: () => setDraft(addFragment(draft)), children: "Add fragment" })] }), phase.status === 'error' && _jsx(ErrorPanel, { phase: phase }), phase.status === 'published' && _jsx(PublishedPanel, { outcome: phase.outcome }), draft.manifests.length === 0 ? (_jsx("p", { className: "braid-console__empty", children: "No fragments. Add one to get started." })) : (_jsx("ul", { className: "braid-console__list", children: draft.manifests.map((manifest, index) => (_jsx(FragmentRow, { manifest: manifest, findings: status.findings.filter((finding) => finding.fragmentIds.includes(manifest.id)), expanded: expanded === index,
|
|
104
|
+
return (_jsxs("div", { className: rootClass(className), ...themeAttr(theme), children: [_jsxs("div", { className: "braid-console__header", children: [_jsx("h2", { className: "braid-console__title", children: "Edit registry" }), _jsx("span", { className: "braid-console__count", children: draft.baseId ? (_jsxs(_Fragment, { children: ["from ", _jsx("code", { className: "braid-console__mono", children: draft.baseId })] })) : ('nothing published yet') }), _jsx("span", { className: "braid-console__spacer" }), _jsx("button", { className: "braid-console__retry", type: "button", onClick: () => setDraft(addFragment(draft, startingTags(owned))), children: "Add fragment" })] }), phase.status === 'error' && _jsx(ErrorPanel, { phase: phase, onReload: () => setLoadToken((token) => token + 1) }), phase.status === 'published' && _jsx(PublishedPanel, { outcome: phase.outcome }), draft.manifests.length === 0 ? (_jsx("p", { className: "braid-console__empty", children: "No fragments. Add one to get started." })) : (_jsx("ul", { className: "braid-console__list", children: draft.manifests.map((manifest, index) => (_jsx(FragmentRow, { manifest: manifest, findings: status.findings.filter((finding) => finding.fragmentIds.includes(manifest.id)), expanded: expanded === index,
|
|
105
|
+
// Judged by the tags it was published with, so retagging cannot unlock it mid-edit.
|
|
106
|
+
editable: canChange((draft.base.find((base) => base.id === manifest.id) ?? manifest).tags, owned), onToggle: () => setExpanded(expanded === index ? null : index), onChange: (patch) => setDraft(updateFragment(draft, index, patch)), onRemove: () => {
|
|
77
107
|
setDraft(removeFragment(draft, index));
|
|
78
108
|
setExpanded(null);
|
|
79
|
-
} }, index))) })), showDiff && _jsx(DiffPanel, { changes: status.diff }), showAccess && (_jsx(AccessPanel, { manifests: draft.manifests, base: draft.base, principals: testPrincipals, onPrincipalsChange: setPrincipals })), _jsx(PublishBar, { status: status, phase: phase, showDiff: showDiff, onToggleDiff: () => setShowDiff(!showDiff), showAccess: showAccess, onToggleAccess: () => setShowAccess(!showAccess), accessLosses: accessLosses, onReset: () => setDraft(resetDraft(draft)), onPublish: publish })] }));
|
|
109
|
+
} }, index))) })), showDiff && _jsx(DiffPanel, { changes: status.diff }), showAccess && (_jsx(AccessPanel, { manifests: draft.manifests, base: draft.base, principals: testPrincipals, onPrincipalsChange: setPrincipals })), _jsx(PublishBar, { status: status, phase: phase, showDiff: showDiff, onToggleDiff: () => setShowDiff(!showDiff), showAccess: showAccess, onToggleAccess: () => setShowAccess(!showAccess), accessLosses: accessLosses, onReset: () => setDraft(resetDraft(draft)), onPublish: publish, canPin: canPin })] }));
|
|
80
110
|
}
|
|
81
|
-
function FragmentRow({ manifest, findings, expanded, onToggle, onChange, onRemove, }) {
|
|
111
|
+
function FragmentRow({ manifest, findings, expanded, editable, onToggle, onChange, onRemove, }) {
|
|
82
112
|
const errors = findings.filter((finding) => finding.severity === 'error');
|
|
83
113
|
const fieldsId = `braid-fields-${manifest.id || 'new'}`;
|
|
84
|
-
return (_jsxs("li", { className: `braid-console__card${expanded ? ' is-open' : ''}`, children: [_jsxs("div", { className: "braid-console__cardhead", children: [_jsxs("button", { className: "braid-console__disclose", type: "button", onClick: onToggle, "aria-expanded": expanded, "aria-controls": fieldsId, children: [_jsx("span", { className: "braid-console__caret", "aria-hidden": "true", children: "\u25B8" }), _jsx("span", { className: "braid-console__id", children: manifest.id || '(no id)' })] }), _jsx("span", { className: "braid-console__mono", children: String(manifest.endpoint || '(no endpoint)') }), !expanded && manifest.pierce?.length ? (_jsxs("span", { className: "braid-console__cardmeta", children: ["pierces ", _jsx("span", { className: "braid-console__mono", children: formatList(manifest.pierce) })] })) : null, _jsx("span", { className: "braid-console__spacer" }), errors.length > 0 && (_jsxs("span", { className: "braid-console__badge braid-console__badge--error", children: [errors.length, " error"] })), _jsx("button", { className: "braid-console__ghost", type: "button", onClick: onToggle, "aria-expanded": expanded, "aria-controls": fieldsId, children: expanded ? 'Done' : 'Edit' }), _jsx("button", { className: "braid-console__ghost", type: "button", onClick: onRemove, "aria-label": `Remove ${manifest.id}`, children: "Remove" })] }), findings.length > 0 && (_jsx("ul", { className: "braid-console__findings", children: findings.map((finding, index) => (_jsxs("li", { className: `braid-console__finding braid-console__finding--${finding.severity}`, children: [finding.message, finding.hint && _jsxs("span", { className: "braid-console__desc", children: [" ", finding.hint] })] }, index))) })), expanded && _jsx(FragmentFields, { manifest: manifest, onChange: onChange, id: fieldsId })] }));
|
|
114
|
+
return (_jsxs("li", { className: `braid-console__card${expanded ? ' is-open' : ''}`, children: [_jsxs("div", { className: "braid-console__cardhead", children: [_jsxs("button", { className: "braid-console__disclose", type: "button", onClick: onToggle, "aria-expanded": expanded, "aria-controls": fieldsId, children: [_jsx("span", { className: "braid-console__caret", "aria-hidden": "true", children: "\u25B8" }), _jsx("span", { className: "braid-console__id", children: manifest.id || '(no id)' })] }), _jsx("span", { className: "braid-console__mono", children: String(manifest.endpoint || '(no endpoint)') }), !expanded && manifest.pierce?.length ? (_jsxs("span", { className: "braid-console__cardmeta", children: ["pierces ", _jsx("span", { className: "braid-console__mono", children: formatList(manifest.pierce) })] })) : null, _jsx("span", { className: "braid-console__spacer" }), errors.length > 0 && (_jsxs("span", { className: "braid-console__badge braid-console__badge--error", children: [errors.length, " error"] })), editable ? (_jsxs(_Fragment, { children: [_jsx("button", { className: "braid-console__ghost", type: "button", onClick: onToggle, "aria-expanded": expanded, "aria-controls": fieldsId, children: expanded ? 'Done' : 'Edit' }), _jsx("button", { className: "braid-console__ghost", type: "button", onClick: onRemove, "aria-label": `Remove ${manifest.id}`, children: "Remove" })] })) : (_jsx("span", { className: "braid-console__desc", title: "Owned by another team's tags", children: "read-only" }))] }), findings.length > 0 && (_jsx("ul", { className: "braid-console__findings", children: findings.map((finding, index) => (_jsxs("li", { className: `braid-console__finding braid-console__finding--${finding.severity}`, children: [finding.message, finding.hint && _jsxs("span", { className: "braid-console__desc", children: [" ", finding.hint] })] }, index))) })), expanded && editable && _jsx(FragmentFields, { manifest: manifest, onChange: onChange, id: fieldsId })] }));
|
|
85
115
|
}
|
|
86
116
|
function FragmentFields({ manifest, onChange, id, }) {
|
|
87
117
|
const endpointIsFunction = typeof manifest.endpoint === 'function';
|
|
@@ -96,20 +126,23 @@ function DiffPanel({ changes }) {
|
|
|
96
126
|
}
|
|
97
127
|
return (_jsxs("div", { className: "braid-console__diff", children: [changes.added.map((manifest) => (_jsxs("div", { className: "braid-console__diffline braid-console__diffline--add", children: ["+ ", manifest.id] }, `+${manifest.id}`))), changes.removed.map((manifest) => (_jsxs("div", { className: "braid-console__diffline braid-console__diffline--remove", children: ["\u2212 ", manifest.id] }, `-${manifest.id}`))), changes.changed.map(({ id, changes: fields }) => (_jsxs("div", { className: "braid-console__diffline", children: [_jsxs("div", { children: ["~ ", id] }), fields.map((change) => (_jsxs("div", { className: "braid-console__diffield", children: [_jsx("span", { className: "braid-console__mono", children: change.field }), ' ', _jsx("span", { className: `braid-console__owner braid-console__owner--${change.owner}`, children: change.owner }), _jsxs("div", { className: "braid-console__mono", children: [short(change.before), " \u2192 ", short(change.after)] })] }, change.field)))] }, `~${id}`)))] }));
|
|
98
128
|
}
|
|
99
|
-
function PublishBar({ status, phase, showDiff, onToggleDiff, showAccess, onToggleAccess, accessLosses, onReset, onPublish, }) {
|
|
129
|
+
function PublishBar({ status, phase, showDiff, onToggleDiff, showAccess, onToggleAccess, accessLosses, onReset, onPublish, canPin, }) {
|
|
100
130
|
const errors = status.findings.filter((finding) => finding.severity === 'error').length;
|
|
101
131
|
const warnings = status.findings.length - errors;
|
|
102
132
|
return (_jsxs("div", { className: "braid-console__bar", children: [_jsx("span", { className: errors > 0 ? 'braid-console__barstate--error' : 'braid-console__barstate', children: errors > 0
|
|
103
133
|
? `${errors} error${errors === 1 ? '' : 's'} — cannot publish`
|
|
104
134
|
: status.clean
|
|
105
135
|
? 'No changes'
|
|
106
|
-
: `Ready${warnings > 0 ? ` — ${warnings} warning${warnings === 1 ? '' : 's'}` : ''}` }), _jsx("span", { className: "braid-console__spacer" }), accessLosses > 0 && (_jsxs("span", { className: "braid-console__barstate--error", children: [accessLosses, " access loss", accessLosses === 1 ? '' : 'es'] })), _jsx("button", { className: "braid-console__ghost", type: "button", onClick: onToggleAccess, children: showAccess ? 'Hide access' : 'Show access' }), _jsx("button", { className: "braid-console__ghost", type: "button", onClick: onToggleDiff, children: showDiff ? 'Hide changes' : 'Show changes' }), _jsx("button", { className: "braid-console__ghost", type: "button", onClick: onReset, disabled: status.clean, children: "Discard" }), _jsx("button", { className: "braid-console__primary", type: "button", onClick: onPublish, disabled: status.blocked || status.clean || phase.status === 'publishing', children: phase.status === 'publishing' ? 'Publishing…' : 'Publish' })] }));
|
|
136
|
+
: `Ready${warnings > 0 ? ` — ${warnings} warning${warnings === 1 ? '' : 's'}` : ''}` }), _jsx("span", { className: "braid-console__spacer" }), accessLosses > 0 && (_jsxs("span", { className: "braid-console__barstate--error", children: [accessLosses, " access loss", accessLosses === 1 ? '' : 'es'] })), _jsx("button", { className: "braid-console__ghost", type: "button", onClick: onToggleAccess, children: showAccess ? 'Hide access' : 'Show access' }), _jsx("button", { className: "braid-console__ghost", type: "button", onClick: onToggleDiff, children: showDiff ? 'Hide changes' : 'Show changes' }), _jsx("button", { className: "braid-console__ghost", type: "button", onClick: onReset, disabled: status.clean, children: "Discard" }), _jsx("button", { className: "braid-console__primary", type: "button", onClick: onPublish, disabled: status.blocked || status.clean || phase.status === 'publishing', ...(canPin ? {} : { title: 'Your role may publish but not pin; a publisher pins the candidate.' }), children: phase.status === 'publishing' ? 'Publishing…' : canPin ? 'Publish' : 'Publish as candidate' })] }));
|
|
107
137
|
}
|
|
108
138
|
function PublishedPanel({ outcome }) {
|
|
109
|
-
|
|
139
|
+
if (outcome.pullRequest) {
|
|
140
|
+
return (_jsxs("div", { className: "braid-console__notice braid-console__notice--ok", role: "status", children: [_jsx("span", { "aria-hidden": "true", children: "\u2713" }), _jsxs("span", { children: ["Proposed as", ' ', _jsxs("a", { href: outcome.pullRequest.url, target: "_blank", rel: "noreferrer", children: ["pull request #", outcome.pullRequest.number] }), ". It is published when the pull request is merged."] })] }));
|
|
141
|
+
}
|
|
142
|
+
return (_jsxs("div", { className: "braid-console__notice braid-console__notice--ok", role: "status", children: [_jsx("span", { "aria-hidden": "true", children: "\u2713" }), _jsxs("span", { children: ["Published ", _jsx("code", { className: "braid-console__mono", children: outcome.snapshot.id }), " \u2014", ' ', outcome.snapshot.fragmentCount, " fragment", outcome.snapshot.fragmentCount === 1 ? '' : 's', outcome.pinned ? ', now pinned.' : ', not pinned.', ' ', outcome.pinned && 'A gateway following HEAD serves it within its refresh interval, or on restart without one.'] })] }));
|
|
110
143
|
}
|
|
111
|
-
function ErrorPanel({ phase }) {
|
|
112
|
-
return (_jsxs("div", { className: "braid-console__error", role: "alert", children: [_jsx("h3", { children:
|
|
144
|
+
function ErrorPanel({ phase, onReload }) {
|
|
145
|
+
return (_jsxs("div", { className: "braid-console__error", role: "alert", children: [_jsx("h3", { children: phase.conflict ? 'Someone published since you started' : 'Could not publish' }), _jsx("p", { children: phase.error.message }), phase.conflict && (_jsx("button", { type: "button", className: "braid-console__retry", onClick: onReload, children: "Reload pinned (discards this draft)" })), phase.findings.length > 0 && (_jsx("ul", { className: "braid-console__findings", children: phase.findings.map((finding, index) => (_jsx("li", { children: finding.message }, index))) })), phase.notes.length > 0 && (_jsx("ul", { className: "braid-console__findings", children: phase.notes.map((note, index) => (_jsx("li", { children: note.message }, index))) }))] }));
|
|
113
146
|
}
|
|
114
147
|
function withRoles(manifest, key, roles) {
|
|
115
148
|
const access = { ...(manifest.access ?? {}) };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"registry-editor.js","sourceRoot":"","sources":["../../../../../libs/braid-console/src/lib/registry-editor.tsx"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"registry-editor.js","sourceRoot":"","sources":["../../../../../libs/braid-console/src/lib/registry-editor.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import type { FragmentManifest } from '@braidlabs/gateway';
|
|
2
|
+
import { type ShellFramework, type ShellManifest } from '@braidlabs/registry';
|
|
3
|
+
/**
|
|
4
|
+
* The host code a shell describes, for each framework a shell can be.
|
|
5
|
+
*
|
|
6
|
+
* In this release a shell's `framework` decides which code you get, not which runtime renders it:
|
|
7
|
+
* the gateway still serves whatever HTML its downstream app returns. The output is therefore the
|
|
8
|
+
* complete, paste-ready integration — layout CSS, one slot per area, the document head, and for
|
|
9
|
+
* Angular SSR the gateway in front of the server — so the definition and the running app cannot
|
|
10
|
+
* disagree about where a fragment sits.
|
|
11
|
+
*
|
|
12
|
+
* **Every value is escaped for where it lands**: HTML text, an HTML attribute, a JS string, or an
|
|
13
|
+
* Angular template inside a template literal. Shell fields are operator input published to a
|
|
14
|
+
* registry, and generated code that a reviewer pastes is exactly where an injection would hide.
|
|
15
|
+
*/
|
|
16
|
+
export interface GeneratedFile {
|
|
17
|
+
name: string;
|
|
18
|
+
language: 'tsx' | 'typescript' | 'html' | 'css';
|
|
19
|
+
code: string;
|
|
20
|
+
}
|
|
21
|
+
export declare const SHELL_TARGETS: {
|
|
22
|
+
id: ShellFramework;
|
|
23
|
+
label: string;
|
|
24
|
+
}[];
|
|
25
|
+
export declare function shellCode(shell: ShellManifest, fragments: readonly FragmentManifest[], target: ShellFramework): GeneratedFile[];
|
|
26
|
+
/** URLPattern pathname → Angular route path: no leading slash, and a trailing `*` becomes `**`. */
|
|
27
|
+
export declare function angularPath(path: string): string;
|
|
28
|
+
export declare function escapeHtml(value: string): string;
|