@czj-git/dsh-plugin-hub 0.1.0 → 0.2.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.en.md +93 -6
- package/README.md +93 -6
- package/dist/api.d.ts +4 -199
- package/dist/api.d.ts.map +1 -0
- package/dist/api.js +5 -90
- package/dist/api.js.map +1 -0
- package/dist/client/PluginHubSettings.d.ts +19 -0
- package/dist/client/PluginHubSettings.d.ts.map +1 -0
- package/dist/client/PluginHubSettings.js +172 -0
- package/dist/client/PluginHubSettings.js.map +1 -0
- package/dist/client/api.d.ts +18 -0
- package/dist/client/api.d.ts.map +1 -0
- package/dist/client/api.js +59 -0
- package/dist/client/api.js.map +1 -0
- package/dist/client/index.d.ts +15 -0
- package/dist/client/index.d.ts.map +1 -0
- package/dist/client/index.js +43 -0
- package/dist/client/index.js.map +1 -0
- package/dist/client/locales.d.ts +54 -0
- package/dist/client/locales.d.ts.map +1 -0
- package/dist/client/locales.js +100 -0
- package/dist/client/locales.js.map +1 -0
- package/dist/client.js +833 -0
- package/dist/client.js.map +7 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +9 -0
- package/dist/index.js.map +1 -0
- package/dist/render.d.ts.map +1 -0
- package/dist/render.js.map +1 -0
- package/dist/schemas.d.ts +285 -0
- package/dist/schemas.d.ts.map +1 -0
- package/dist/schemas.js +85 -0
- package/dist/schemas.js.map +1 -0
- package/dist/shared.d.ts +32 -0
- package/dist/shared.d.ts.map +1 -0
- package/dist/shared.js +26 -0
- package/dist/shared.js.map +1 -0
- package/dist/tool-schema.d.ts.map +1 -0
- package/dist/tool-schema.js.map +1 -0
- package/dist/web-route.d.ts +19 -0
- package/dist/web-route.d.ts.map +1 -0
- package/dist/web-route.js +115 -0
- package/dist/web-route.js.map +1 -0
- package/package.json +50 -5
|
@@ -0,0 +1,172 @@
|
|
|
1
|
+
import { jsx as _jsx, jsxs as _jsxs, Fragment as _Fragment } from "react/jsx-runtime";
|
|
2
|
+
import { useEffect, useMemo, useRef, useState, } from 'react';
|
|
3
|
+
import { pluginHubCategories, } from '../shared.js';
|
|
4
|
+
const RANKING_SORTS = ['growth', 'stars', 'newest', 'active'];
|
|
5
|
+
const PAGE_SIZE = 12;
|
|
6
|
+
function Icon({ children, ...props }) {
|
|
7
|
+
return (_jsx("svg", { viewBox: "0 0 24 24", fill: "none", stroke: "currentColor", strokeWidth: "1.8", strokeLinecap: "round", strokeLinejoin: "round", ...props, children: children }));
|
|
8
|
+
}
|
|
9
|
+
function SearchIcon() {
|
|
10
|
+
return _jsxs(Icon, { "aria-hidden": "true", children: [_jsx("circle", { cx: "11", cy: "11", r: "6.5" }), _jsx("path", { d: "m16 16 4 4" })] });
|
|
11
|
+
}
|
|
12
|
+
function StarIcon() {
|
|
13
|
+
return _jsx(Icon, { "aria-hidden": "true", children: _jsx("path", { d: "m12 3 2.7 5.5 6 .9-4.35 4.25 1.03 6L12 16.8l-5.38 2.83 1.03-6L3.3 9.4l6-.9L12 3Z" }) });
|
|
14
|
+
}
|
|
15
|
+
function EyeIcon() {
|
|
16
|
+
return _jsxs(Icon, { "aria-hidden": "true", children: [_jsx("path", { d: "M2.5 12s3.3-5 9.5-5 9.5 5 9.5 5-3.3 5-9.5 5-9.5-5-9.5-5Z" }), _jsx("circle", { cx: "12", cy: "12", r: "2.2" })] });
|
|
17
|
+
}
|
|
18
|
+
function CheckIcon() {
|
|
19
|
+
return _jsxs(Icon, { "aria-hidden": "true", children: [_jsx("circle", { cx: "12", cy: "12", r: "8.5" }), _jsx("path", { d: "m8.5 12 2.2 2.2 4.8-5" })] });
|
|
20
|
+
}
|
|
21
|
+
function CopyIcon() {
|
|
22
|
+
return _jsxs(Icon, { "aria-hidden": "true", children: [_jsx("rect", { x: "8", y: "8", width: "10", height: "10", rx: "2" }), _jsx("path", { d: "M16 8V6a2 2 0 0 0-2-2H6a2 2 0 0 0-2 2v8a2 2 0 0 0 2 2h2" })] });
|
|
23
|
+
}
|
|
24
|
+
function ExternalIcon() {
|
|
25
|
+
return _jsxs(Icon, { "aria-hidden": "true", children: [_jsx("path", { d: "M14 5h5v5M19 5l-8 8" }), _jsx("path", { d: "M18 13v5a1 1 0 0 1-1 1H6a1 1 0 0 1-1-1V7a1 1 0 0 1 1-1h5" })] });
|
|
26
|
+
}
|
|
27
|
+
function HubMark() {
|
|
28
|
+
return (_jsxs("svg", { className: "dph-mark", viewBox: "0 0 40 40", "aria-hidden": "true", children: [_jsx("rect", { width: "40", height: "40", rx: "11", fill: "currentColor" }), _jsx("path", { d: "M11 10.5h7.6c7 0 11.4 3.6 11.4 9.5s-4.4 9.5-11.4 9.5H11v-19Z", fill: "none", stroke: "var(--dsw-alias-bg-layer-2, #fff)", strokeWidth: "3.2" }), _jsx("circle", { cx: "11", cy: "11", r: "2.2", fill: "#6b7cff" }), _jsx("circle", { cx: "11", cy: "29", r: "2.2", fill: "#6b7cff" })] }));
|
|
29
|
+
}
|
|
30
|
+
function categoryLabel(t, category) {
|
|
31
|
+
return t(`category.${category}`);
|
|
32
|
+
}
|
|
33
|
+
function rankingLabel(t, sort) {
|
|
34
|
+
const key = {
|
|
35
|
+
growth: 'rankingGrowth',
|
|
36
|
+
stars: 'rankingStars',
|
|
37
|
+
newest: 'rankingNewest',
|
|
38
|
+
active: 'rankingActive',
|
|
39
|
+
};
|
|
40
|
+
return t(key[sort]);
|
|
41
|
+
}
|
|
42
|
+
function formatNumber(value, locale) {
|
|
43
|
+
return new Intl.NumberFormat(locale === 'zh' ? 'zh-CN' : 'en', {
|
|
44
|
+
notation: 'compact',
|
|
45
|
+
maximumFractionDigits: 1,
|
|
46
|
+
}).format(value);
|
|
47
|
+
}
|
|
48
|
+
function formatDate(value, locale) {
|
|
49
|
+
const date = new Date(value);
|
|
50
|
+
if (Number.isNaN(date.getTime()))
|
|
51
|
+
return '—';
|
|
52
|
+
return new Intl.DateTimeFormat(locale === 'zh' ? 'zh-CN' : 'en', {
|
|
53
|
+
month: 'short',
|
|
54
|
+
day: 'numeric',
|
|
55
|
+
year: date.getFullYear() === new Date().getFullYear() ? undefined : 'numeric',
|
|
56
|
+
}).format(date);
|
|
57
|
+
}
|
|
58
|
+
function PluginAvatar({ plugin }) {
|
|
59
|
+
const [failed, setFailed] = useState(false);
|
|
60
|
+
if (failed)
|
|
61
|
+
return _jsx("span", { className: "dph-avatar dph-avatar-fallback", children: plugin.name.slice(0, 1).toUpperCase() });
|
|
62
|
+
return (_jsx("img", { className: "dph-avatar", src: `https://github.com/${encodeURIComponent(plugin.owner)}.png?size=96`, alt: "", loading: "lazy", onError: () => { setFailed(true); } }));
|
|
63
|
+
}
|
|
64
|
+
function Meta({ icon, children }) {
|
|
65
|
+
return _jsxs("span", { className: "dph-meta", children: [icon, children] });
|
|
66
|
+
}
|
|
67
|
+
function PluginCard({ plugin, locale, t, copyState, onCopy, }) {
|
|
68
|
+
const copyText = copyState === 'copied' ? t('copied') : copyState === 'error' ? t('copyFailed') : t('copyCommand');
|
|
69
|
+
return (_jsxs("li", { className: "dph-plugin-card", children: [_jsxs("div", { className: "dph-card-head", children: [_jsx(PluginAvatar, { plugin: plugin }), _jsxs("div", { className: "dph-card-identity", children: [_jsx("a", { href: plugin.links.detail, target: "_blank", rel: "noreferrer", className: "dph-plugin-name", children: plugin.name }), _jsxs("span", { className: "dph-owner", children: ["@", plugin.owner] })] }), _jsxs("button", { type: "button", className: "dph-copy-button", "data-state": copyState, onClick: () => { onCopy(plugin); }, title: plugin.package.installCommand, children: [_jsx(CopyIcon, {}), _jsx("span", { children: copyText })] })] }), _jsx("p", { className: "dph-description", children: plugin.description }), _jsxs("div", { className: "dph-card-tags", children: [_jsx("span", { className: "dph-category-tag", children: categoryLabel(t, plugin.category) }), _jsxs("span", { className: "dph-verified", children: [_jsx(CheckIcon, {}), t('verified')] })] }), _jsxs("div", { className: "dph-card-footer", children: [_jsxs("span", { className: "dph-card-metrics", children: [_jsx(Meta, { icon: _jsx(StarIcon, {}), children: formatNumber(plugin.metrics.stars, locale) }), _jsx(Meta, { icon: _jsx(EyeIcon, {}), children: formatNumber(plugin.metrics.views, locale) })] }), _jsxs("span", { className: "dph-language", children: [plugin.package.source.toUpperCase(), " \u00B7 ", plugin.language || '—'] }), _jsx("a", { href: plugin.links.detail, target: "_blank", rel: "noreferrer", className: "dph-detail-link", "aria-label": `${t('details')}: ${plugin.name}`, children: _jsx(ExternalIcon, {}) })] })] }));
|
|
70
|
+
}
|
|
71
|
+
function rankingMetric(plugin, sort, locale, t) {
|
|
72
|
+
if (sort === 'growth') {
|
|
73
|
+
const delta = plugin.metrics.starsDelta1d;
|
|
74
|
+
return {
|
|
75
|
+
label: t('metricGrowth'),
|
|
76
|
+
value: delta === null ? t('baselinePending') : `${delta > 0 ? '+' : ''}${formatNumber(delta, locale)}`,
|
|
77
|
+
};
|
|
78
|
+
}
|
|
79
|
+
if (sort === 'newest')
|
|
80
|
+
return { label: t('metricNewest'), value: formatDate(plugin.timestamps.listedAt, locale) };
|
|
81
|
+
if (sort === 'active')
|
|
82
|
+
return { label: t('metricActive'), value: formatDate(plugin.timestamps.lastPushedAt, locale) };
|
|
83
|
+
return { label: t('metricStars'), value: formatNumber(plugin.metrics.stars, locale) };
|
|
84
|
+
}
|
|
85
|
+
function RankingList({ result, sort, locale, t }) {
|
|
86
|
+
const offset = (result.pagination.page - 1) * result.pagination.perPage;
|
|
87
|
+
return (_jsx("ol", { className: "dph-ranking-list", start: offset + 1, children: result.items.map((plugin, index) => {
|
|
88
|
+
const metric = rankingMetric(plugin, sort, locale, t);
|
|
89
|
+
return (_jsxs("li", { className: "dph-ranking-row", children: [_jsx("span", { className: "dph-rank", children: String(offset + index + 1).padStart(2, '0') }), _jsx(PluginAvatar, { plugin: plugin }), _jsxs("div", { className: "dph-rank-content", children: [_jsxs("div", { className: "dph-rank-title", children: [_jsx("a", { href: plugin.links.detail, target: "_blank", rel: "noreferrer", children: plugin.name }), _jsxs("span", { children: ["@", plugin.owner] })] }), _jsx("p", { children: plugin.description }), _jsxs("div", { className: "dph-rank-tags", children: [_jsx("span", { children: categoryLabel(t, plugin.category) }), _jsxs("span", { className: "dph-verified", children: [_jsx(CheckIcon, {}), t('verified')] })] })] }), _jsxs("div", { className: "dph-rank-metric", children: [_jsx("span", { children: metric.label }), _jsx("strong", { children: metric.value })] }), _jsx("a", { href: plugin.links.detail, target: "_blank", rel: "noreferrer", className: "dph-rank-link", "aria-label": `${t('details')}: ${plugin.name}`, children: _jsx(ExternalIcon, {}) })] }, plugin.id));
|
|
90
|
+
}) }));
|
|
91
|
+
}
|
|
92
|
+
function Pagination({ result, page, setPage, t }) {
|
|
93
|
+
if (result.pagination.totalPages <= 1)
|
|
94
|
+
return null;
|
|
95
|
+
return (_jsxs("nav", { className: "dph-pagination", "aria-label": t('page'), children: [_jsx("button", { type: "button", disabled: page <= 1, onClick: () => { setPage(page - 1); }, children: t('previous') }), _jsxs("span", { children: [t('page'), " ", page, " / ", result.pagination.totalPages] }), _jsx("button", { type: "button", disabled: page >= result.pagination.totalPages, onClick: () => { setPage(page + 1); }, children: t('next') })] }));
|
|
96
|
+
}
|
|
97
|
+
async function copyText(value) {
|
|
98
|
+
if (navigator.clipboard?.writeText !== undefined) {
|
|
99
|
+
await navigator.clipboard.writeText(value);
|
|
100
|
+
return;
|
|
101
|
+
}
|
|
102
|
+
const textarea = document.createElement('textarea');
|
|
103
|
+
textarea.value = value;
|
|
104
|
+
textarea.style.position = 'fixed';
|
|
105
|
+
textarea.style.opacity = '0';
|
|
106
|
+
document.body.appendChild(textarea);
|
|
107
|
+
textarea.select();
|
|
108
|
+
const copied = document.execCommand('copy');
|
|
109
|
+
textarea.remove();
|
|
110
|
+
if (!copied)
|
|
111
|
+
throw new Error('Copy command was rejected');
|
|
112
|
+
}
|
|
113
|
+
/** Independent Settings page containing marketplace and rankings tabs. */
|
|
114
|
+
export function PluginHubSettings({ useLocale, websiteUrl, search, t }) {
|
|
115
|
+
const locale = useLocale(snapshot => snapshot.active);
|
|
116
|
+
const [tab, setTab] = useState('marketplace');
|
|
117
|
+
const [query, setQuery] = useState('');
|
|
118
|
+
const [category, setCategory] = useState('all');
|
|
119
|
+
const [rankingSort, setRankingSort] = useState('stars');
|
|
120
|
+
const [page, setPage] = useState(1);
|
|
121
|
+
const [request, setRequest] = useState(0);
|
|
122
|
+
const [state, setState] = useState({ status: 'loading' });
|
|
123
|
+
const [copyStatus, setCopyStatus] = useState(null);
|
|
124
|
+
const copyTimer = useRef(undefined);
|
|
125
|
+
useEffect(() => () => { if (copyTimer.current !== undefined)
|
|
126
|
+
window.clearTimeout(copyTimer.current); }, []);
|
|
127
|
+
useEffect(() => {
|
|
128
|
+
const controller = new AbortController();
|
|
129
|
+
let current = true;
|
|
130
|
+
setState({ status: 'loading' });
|
|
131
|
+
const timer = window.setTimeout(() => {
|
|
132
|
+
const normalizedQuery = query.trim().replace(/\s+/g, ' ');
|
|
133
|
+
const input = {
|
|
134
|
+
locale,
|
|
135
|
+
...(category === 'all' ? {} : { category }),
|
|
136
|
+
sort: tab === 'marketplace' ? (normalizedQuery ? 'relevance' : 'stars') : rankingSort,
|
|
137
|
+
...(tab === 'marketplace' && normalizedQuery ? { query: normalizedQuery } : {}),
|
|
138
|
+
page,
|
|
139
|
+
perPage: PAGE_SIZE,
|
|
140
|
+
};
|
|
141
|
+
void search(input, controller.signal).then(result => { if (current)
|
|
142
|
+
setState({ status: 'ready', result }); }, error => {
|
|
143
|
+
if (current && !(error instanceof DOMException && error.name === 'AbortError'))
|
|
144
|
+
setState({ status: 'error' });
|
|
145
|
+
});
|
|
146
|
+
}, tab === 'marketplace' && query.trim() ? 280 : 0);
|
|
147
|
+
return () => {
|
|
148
|
+
current = false;
|
|
149
|
+
window.clearTimeout(timer);
|
|
150
|
+
controller.abort();
|
|
151
|
+
};
|
|
152
|
+
}, [category, locale, page, query, rankingSort, request, search, tab]);
|
|
153
|
+
const result = state.status === 'ready' ? state.result : undefined;
|
|
154
|
+
const categoryOptions = useMemo(() => pluginHubCategories.map(value => ({ value, label: categoryLabel(t, value) })), [t]);
|
|
155
|
+
const changeTab = (next) => {
|
|
156
|
+
setTab(next);
|
|
157
|
+
setPage(1);
|
|
158
|
+
};
|
|
159
|
+
const changeCategory = (next) => {
|
|
160
|
+
setCategory(next);
|
|
161
|
+
setPage(1);
|
|
162
|
+
};
|
|
163
|
+
const handleCopy = (plugin) => {
|
|
164
|
+
if (copyTimer.current !== undefined)
|
|
165
|
+
window.clearTimeout(copyTimer.current);
|
|
166
|
+
void copyText(plugin.package.installCommand).then(() => { setCopyStatus({ id: plugin.id, state: 'copied' }); }, () => { setCopyStatus({ id: plugin.id, state: 'error' }); }).finally(() => {
|
|
167
|
+
copyTimer.current = window.setTimeout(() => { setCopyStatus(null); }, 1800);
|
|
168
|
+
});
|
|
169
|
+
};
|
|
170
|
+
return (_jsxs("section", { className: "dph-section", children: [_jsxs("header", { className: "dph-header", children: [_jsx(HubMark, {}), _jsxs("div", { className: "dph-heading", children: [_jsx("h2", { children: t('title') }), _jsx("p", { children: t('subtitle') })] }), _jsxs("a", { className: "dph-website-link", href: websiteUrl, target: "_blank", rel: "noreferrer", children: [_jsx(ExternalIcon, {}), t('openWebsite')] })] }), _jsxs("div", { className: "dph-primary-tabs", role: "tablist", children: [_jsx("button", { type: "button", role: "tab", "aria-selected": tab === 'marketplace', className: tab === 'marketplace' ? 'dph-active' : '', onClick: () => { changeTab('marketplace'); }, children: t('marketplaceTab') }), _jsx("button", { type: "button", role: "tab", "aria-selected": tab === 'rankings', className: tab === 'rankings' ? 'dph-active' : '', onClick: () => { changeTab('rankings'); }, children: t('rankingsTab') })] }), tab === 'marketplace' ? (_jsxs("div", { className: "dph-market-controls", children: [_jsxs("label", { className: "dph-search", children: [_jsx(SearchIcon, {}), _jsx("span", { className: "dph-visually-hidden", children: t('searchLabel') }), _jsx("input", { type: "search", value: query, placeholder: t('searchPlaceholder'), "aria-label": t('searchLabel'), onChange: (event) => { setQuery(event.currentTarget.value); setPage(1); } })] }), _jsxs("div", { className: "dph-category-tabs", role: "group", "aria-label": t('categoryFilter'), children: [_jsx("button", { type: "button", className: category === 'all' ? 'dph-active' : '', onClick: () => { changeCategory('all'); }, children: t('allCategories') }), categoryOptions.map(option => (_jsx("button", { type: "button", className: category === option.value ? 'dph-active' : '', onClick: () => { changeCategory(option.value); }, children: option.label }, option.value)))] })] })) : (_jsxs("div", { className: "dph-ranking-controls", children: [_jsx("div", { className: "dph-ranking-sorts", role: "tablist", children: RANKING_SORTS.map(sort => (_jsx("button", { type: "button", role: "tab", "aria-selected": rankingSort === sort, className: rankingSort === sort ? 'dph-active' : '', onClick: () => { setRankingSort(sort); setPage(1); }, children: rankingLabel(t, sort) }, sort))) }), _jsxs("label", { className: "dph-category-select", children: [_jsx("span", { className: "dph-visually-hidden", children: t('categorySelect') }), _jsxs("select", { value: category, onChange: (event) => { changeCategory(event.currentTarget.value); }, children: [_jsx("option", { value: "all", children: t('allCategories') }), categoryOptions.map(option => _jsx("option", { value: option.value, children: option.label }, option.value))] })] })] })), _jsxs("div", { className: "dph-content", "aria-live": "polite", "aria-busy": state.status === 'loading', children: [state.status === 'loading' ? _jsxs("div", { className: "dph-status", children: [_jsx("span", { className: "dph-spinner" }), t('loading')] }) : null, state.status === 'error' ? (_jsxs("div", { className: "dph-status dph-status-error", children: [_jsx("p", { role: "alert", children: t('error') }), _jsx("button", { type: "button", onClick: () => { setRequest(value => value + 1); }, children: t('retry') })] })) : null, result !== undefined && result.items.length === 0 ? _jsx("div", { className: "dph-status", children: t('empty') }) : null, result !== undefined && result.items.length > 0 ? (_jsxs(_Fragment, { children: [_jsxs("div", { className: "dph-result-head", children: [_jsx("strong", { children: result.pagination.total }), " ", t('catalogCount'), tab === 'rankings' ? _jsxs("span", { children: [t('metricsUpdated'), " ", formatDate(result.meta.dataUpdatedAt, locale)] }) : null] }), tab === 'marketplace' ? (_jsx("ul", { className: "dph-plugin-grid", children: result.items.map(plugin => (_jsx(PluginCard, { plugin: plugin, locale: locale, t: t, copyState: copyStatus?.id === plugin.id ? copyStatus.state : 'idle', onCopy: handleCopy }, plugin.id))) })) : _jsx(RankingList, { result: result, sort: rankingSort, locale: locale, t: t }), _jsx(Pagination, { result: result, page: page, setPage: setPage, t: t })] })) : null] })] }));
|
|
171
|
+
}
|
|
172
|
+
//# sourceMappingURL=PluginHubSettings.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"PluginHubSettings.js","sourceRoot":"","sources":["../../src/client/PluginHubSettings.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
/** Browser transport for the plugin's same-origin Host proxy. */
|
|
2
|
+
import { type PluginHubSearchResult } from '../schemas.js';
|
|
3
|
+
import { type PluginHubSearchInput } from '../shared.js';
|
|
4
|
+
/**
|
|
5
|
+
* Build one local Settings request URL.
|
|
6
|
+
* @param input - Search filters and pagination.
|
|
7
|
+
* @param origin - Browser origin or test origin.
|
|
8
|
+
* @returns Same-origin route URL.
|
|
9
|
+
*/
|
|
10
|
+
export declare function localSearchUrl(input: PluginHubSearchInput, origin: string): URL;
|
|
11
|
+
/**
|
|
12
|
+
* Read catalog data through the installed plugin Host.
|
|
13
|
+
* @param input - Search filters and pagination.
|
|
14
|
+
* @param signal - Component cancellation signal.
|
|
15
|
+
* @returns Fully validated result.
|
|
16
|
+
*/
|
|
17
|
+
export declare function searchLocalPluginHub(input: PluginHubSearchInput, signal: AbortSignal): Promise<PluginHubSearchResult>;
|
|
18
|
+
//# sourceMappingURL=api.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"api.d.ts","sourceRoot":"","sources":["../../src/client/api.ts"],"names":[],"mappings":"AAAA,iEAAiE;AAEjE,OAAO,EAAqD,KAAK,qBAAqB,EAAE,MAAM,eAAe,CAAA;AAC7G,OAAO,EAA2B,KAAK,oBAAoB,EAAE,MAAM,cAAc,CAAA;AAEjF;;;;;GAKG;AACH,wBAAgB,cAAc,CAAC,KAAK,EAAE,oBAAoB,EAAE,MAAM,EAAE,MAAM,GAAG,GAAG,CAY/E;AAED;;;;;GAKG;AACH,wBAAsB,oBAAoB,CACxC,KAAK,EAAE,oBAAoB,EAC3B,MAAM,EAAE,WAAW,GAClB,OAAO,CAAC,qBAAqB,CAAC,CAmBhC"}
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
/** Browser transport for the plugin's same-origin Host proxy. */
|
|
2
|
+
import { pluginHubErrorSchema, pluginHubSearchResultSchema } from '../schemas.js';
|
|
3
|
+
import { PLUGIN_HUB_SEARCH_ROUTE } from '../shared.js';
|
|
4
|
+
/**
|
|
5
|
+
* Build one local Settings request URL.
|
|
6
|
+
* @param input - Search filters and pagination.
|
|
7
|
+
* @param origin - Browser origin or test origin.
|
|
8
|
+
* @returns Same-origin route URL.
|
|
9
|
+
*/
|
|
10
|
+
export function localSearchUrl(input, origin) {
|
|
11
|
+
const url = new URL(PLUGIN_HUB_SEARCH_ROUTE, origin);
|
|
12
|
+
const query = input.query?.trim().replace(/\s+/g, ' ') ?? '';
|
|
13
|
+
if (query)
|
|
14
|
+
url.searchParams.set('q', query);
|
|
15
|
+
if (input.locale)
|
|
16
|
+
url.searchParams.set('locale', input.locale);
|
|
17
|
+
if (input.category)
|
|
18
|
+
url.searchParams.set('category', input.category);
|
|
19
|
+
if (input.type)
|
|
20
|
+
url.searchParams.set('type', input.type);
|
|
21
|
+
if (input.source)
|
|
22
|
+
url.searchParams.set('source', input.source);
|
|
23
|
+
if (input.sort)
|
|
24
|
+
url.searchParams.set('sort', input.sort);
|
|
25
|
+
if (input.page !== undefined)
|
|
26
|
+
url.searchParams.set('page', String(input.page));
|
|
27
|
+
if (input.perPage !== undefined)
|
|
28
|
+
url.searchParams.set('per_page', String(input.perPage));
|
|
29
|
+
return url;
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* Read catalog data through the installed plugin Host.
|
|
33
|
+
* @param input - Search filters and pagination.
|
|
34
|
+
* @param signal - Component cancellation signal.
|
|
35
|
+
* @returns Fully validated result.
|
|
36
|
+
*/
|
|
37
|
+
export async function searchLocalPluginHub(input, signal) {
|
|
38
|
+
const response = await fetch(localSearchUrl(input, window.location.origin), {
|
|
39
|
+
method: 'GET',
|
|
40
|
+
headers: { Accept: 'application/json' },
|
|
41
|
+
signal,
|
|
42
|
+
});
|
|
43
|
+
let payload;
|
|
44
|
+
try {
|
|
45
|
+
payload = await response.json();
|
|
46
|
+
}
|
|
47
|
+
catch (error) {
|
|
48
|
+
throw new Error('Plugin Hub returned non-JSON data.', { cause: error });
|
|
49
|
+
}
|
|
50
|
+
if (!response.ok) {
|
|
51
|
+
const parsed = pluginHubErrorSchema.safeParse(payload);
|
|
52
|
+
throw new Error(parsed.success ? parsed.data.error.message : `Plugin Hub request failed with HTTP ${response.status}.`);
|
|
53
|
+
}
|
|
54
|
+
const parsed = pluginHubSearchResultSchema.safeParse(payload);
|
|
55
|
+
if (!parsed.success)
|
|
56
|
+
throw new Error('Plugin Hub returned an unsupported response.', { cause: parsed.error });
|
|
57
|
+
return parsed.data;
|
|
58
|
+
}
|
|
59
|
+
//# sourceMappingURL=api.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"api.js","sourceRoot":"","sources":["../../src/client/api.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
/** Browser half: independent DSH Plugin Hub page in Harness Settings. */
|
|
2
|
+
import type { ClientContext } from '@deepseek-ai/dsh-client-runtime/client';
|
|
3
|
+
import { type PluginHubLocaleKey } from './locales.js';
|
|
4
|
+
declare module '@deepseek-ai/dsh-client-ui-slots' {
|
|
5
|
+
interface LocaleNamespaceMap {
|
|
6
|
+
/** DSH Plugin Hub marketplace and ranking page copy. */
|
|
7
|
+
'dsh.pluginHub': PluginHubLocaleKey;
|
|
8
|
+
}
|
|
9
|
+
}
|
|
10
|
+
/** Services required by the Settings registration. */
|
|
11
|
+
export declare const inject: string[];
|
|
12
|
+
/** Register the localized independent Settings page. */
|
|
13
|
+
export declare function apply(ctx: ClientContext): void;
|
|
14
|
+
export { PluginHubSettings } from './PluginHubSettings.js';
|
|
15
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/client/index.ts"],"names":[],"mappings":"AAAA,yEAAyE;AAEzE,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,wCAAwC,CAAA;AAM3E,OAAO,EAAU,KAAK,kBAAkB,EAAE,MAAM,cAAc,CAAA;AAI9D,OAAO,QAAQ,kCAAkC,CAAC;IAChD,UAAU,kBAAkB;QAC1B,wDAAwD;QACxD,eAAe,EAAE,kBAAkB,CAAA;KACpC;CACF;AAKD,sDAAsD;AACtD,eAAO,MAAM,MAAM,UAAsB,CAAA;AAazC,wDAAwD;AACxD,wBAAgB,KAAK,CAAC,GAAG,EAAE,aAAa,GAAG,IAAI,CAoB9C;AAED,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAA"}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
/** Browser half: independent DSH Plugin Hub page in Harness Settings. */
|
|
2
|
+
import { PLUGIN_HUB_WEBSITE_URL } from '../shared.js';
|
|
3
|
+
import { searchLocalPluginHub } from './api.js';
|
|
4
|
+
import { en, zh } from './locales.js';
|
|
5
|
+
import { PluginHubSettings } from './PluginHubSettings.js';
|
|
6
|
+
import styles from './styles.css';
|
|
7
|
+
const NS = 'dsh.pluginHub';
|
|
8
|
+
const STYLE_ID = '@czj-git/dsh-plugin-hub/settings.css';
|
|
9
|
+
/** Services required by the Settings registration. */
|
|
10
|
+
export const inject = ['slots', 'locale'];
|
|
11
|
+
function installStyles() {
|
|
12
|
+
const existing = document.querySelector(`style[data-plugin-css="${STYLE_ID}"]`);
|
|
13
|
+
if (existing !== null)
|
|
14
|
+
return () => { };
|
|
15
|
+
const tag = document.createElement('style');
|
|
16
|
+
tag.dataset.plugin = '@czj-git/dsh-plugin-hub';
|
|
17
|
+
tag.dataset.pluginCss = STYLE_ID;
|
|
18
|
+
tag.textContent = styles;
|
|
19
|
+
document.head.appendChild(tag);
|
|
20
|
+
return () => { tag.remove(); };
|
|
21
|
+
}
|
|
22
|
+
/** Register the localized independent Settings page. */
|
|
23
|
+
export function apply(ctx) {
|
|
24
|
+
ctx.effect(installStyles, 'dsh-plugin-hub: Settings styles');
|
|
25
|
+
ctx.effect(() => ctx.locale.register(NS, { zh, en }), 'dsh-plugin-hub: Settings dictionaries');
|
|
26
|
+
const t = ctx.locale.bind(NS);
|
|
27
|
+
const search = (input, signal) => searchLocalPluginHub(input, signal);
|
|
28
|
+
const injected = () => ({
|
|
29
|
+
hooks: { locale: ctx.locale },
|
|
30
|
+
websiteUrl: PLUGIN_HUB_WEBSITE_URL,
|
|
31
|
+
search,
|
|
32
|
+
});
|
|
33
|
+
ctx.slots.inject('settings.section', () => ctx.slots.register({
|
|
34
|
+
name: 'settings.section',
|
|
35
|
+
id: 'dsh-plugin-hub',
|
|
36
|
+
order: 40,
|
|
37
|
+
label: () => t('nav'),
|
|
38
|
+
locale: NS,
|
|
39
|
+
inject: injected,
|
|
40
|
+
}, PluginHubSettings));
|
|
41
|
+
}
|
|
42
|
+
export { PluginHubSettings } from './PluginHubSettings.js';
|
|
43
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/client/index.ts"],"names":[],"mappings":"AAAA,yEAAyE;AAMzE,OAAO,EAAE,sBAAsB,EAAE,MAAM,cAAc,CAAA;AACrD,OAAO,EAAE,oBAAoB,EAAE,MAAM,UAAU,CAAA;AAC/C,OAAO,EAAE,EAAE,EAAE,EAAE,EAA2B,MAAM,cAAc,CAAA;AAC9D,OAAO,EAAE,iBAAiB,EAAkC,MAAM,wBAAwB,CAAA;AAC1F,OAAO,MAAM,MAAM,cAAc,CAAA;AASjC,MAAM,EAAE,GAAG,eAAe,CAAA;AAC1B,MAAM,QAAQ,GAAG,sCAAsC,CAAA;AAEvD,sDAAsD;AACtD,MAAM,CAAC,MAAM,MAAM,GAAG,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAA;AAEzC,SAAS,aAAa;IACpB,MAAM,QAAQ,GAAG,QAAQ,CAAC,aAAa,CAAmB,0BAA0B,QAAQ,IAAI,CAAC,CAAA;IACjG,IAAI,QAAQ,KAAK,IAAI;QAAE,OAAO,GAAG,EAAE,GAAE,CAAC,CAAA;IACtC,MAAM,GAAG,GAAG,QAAQ,CAAC,aAAa,CAAC,OAAO,CAAC,CAAA;IAC3C,GAAG,CAAC,OAAO,CAAC,MAAM,GAAG,yBAAyB,CAAA;IAC9C,GAAG,CAAC,OAAO,CAAC,SAAS,GAAG,QAAQ,CAAA;IAChC,GAAG,CAAC,WAAW,GAAG,MAAM,CAAA;IACxB,QAAQ,CAAC,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,CAAA;IAC9B,OAAO,GAAG,EAAE,GAAG,GAAG,CAAC,MAAM,EAAE,CAAA,CAAC,CAAC,CAAA;AAC/B,CAAC;AAED,wDAAwD;AACxD,MAAM,UAAU,KAAK,CAAC,GAAkB;IACtC,GAAG,CAAC,MAAM,CAAC,aAAa,EAAE,iCAAiC,CAAC,CAAA;IAC5D,GAAG,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,uCAAuC,CAAC,CAAA;IAE9F,MAAM,CAAC,GAAG,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;IAC7B,MAAM,MAAM,GAAwC,CAAC,KAAK,EAAE,MAAM,EAAE,EAAE,CAAC,oBAAoB,CAAC,KAAK,EAAE,MAAM,CAAC,CAAA;IAC1G,MAAM,QAAQ,GAAG,GAA8B,EAAE,CAAC,CAAC;QACjD,KAAK,EAAE,EAAE,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE;QAC7B,UAAU,EAAE,sBAAsB;QAClC,MAAM;KACP,CAAC,CAAA;IAEF,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,kBAAkB,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,KAAK,CAAC,QAAQ,CAAC;QAC5D,IAAI,EAAE,kBAAkB;QACxB,EAAE,EAAE,gBAAgB;QACpB,KAAK,EAAE,EAAE;QACT,KAAK,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC;QACrB,MAAM,EAAE,EAAE;QACV,MAAM,EAAE,QAAQ;KACjB,EAAE,iBAAiB,CAAC,CAAC,CAAA;AACxB,CAAC;AAED,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAA"}
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
/** Bilingual Settings page copy. */
|
|
2
|
+
/** Simplified Chinese dictionary and key source of truth. */
|
|
3
|
+
export declare const zh: {
|
|
4
|
+
readonly nav: "插件中心";
|
|
5
|
+
readonly title: "DSH Plugin Hub";
|
|
6
|
+
readonly subtitle: "搜索社区插件、浏览排行榜,找到适合工作流的扩展。";
|
|
7
|
+
readonly openWebsite: "打开网站";
|
|
8
|
+
readonly marketplaceTab: "插件市场";
|
|
9
|
+
readonly rankingsTab: "排行榜";
|
|
10
|
+
readonly searchLabel: "搜索插件";
|
|
11
|
+
readonly searchPlaceholder: "搜索插件、作者或功能";
|
|
12
|
+
readonly allCategories: "全部";
|
|
13
|
+
readonly catalogCount: "个插件";
|
|
14
|
+
readonly loading: "正在加载插件…";
|
|
15
|
+
readonly error: "暂时无法读取插件市场。";
|
|
16
|
+
readonly retry: "重试";
|
|
17
|
+
readonly empty: "当前筛选条件下没有插件。";
|
|
18
|
+
readonly copyCommand: "复制命令";
|
|
19
|
+
readonly copied: "已复制";
|
|
20
|
+
readonly copyFailed: "复制失败";
|
|
21
|
+
readonly details: "查看详情";
|
|
22
|
+
readonly stars: "Stars";
|
|
23
|
+
readonly views: "浏览";
|
|
24
|
+
readonly source: "来源";
|
|
25
|
+
readonly verified: "已验证";
|
|
26
|
+
readonly previous: "上一页";
|
|
27
|
+
readonly next: "下一页";
|
|
28
|
+
readonly page: "页";
|
|
29
|
+
readonly rankingGrowth: "日增长";
|
|
30
|
+
readonly rankingStars: "Star 总榜";
|
|
31
|
+
readonly rankingNewest: "最新上架";
|
|
32
|
+
readonly rankingActive: "最近活跃";
|
|
33
|
+
readonly metricsUpdated: "数据更新于";
|
|
34
|
+
readonly metricGrowth: "较上次快照";
|
|
35
|
+
readonly metricStars: "GitHub Stars";
|
|
36
|
+
readonly metricNewest: "上架时间";
|
|
37
|
+
readonly metricActive: "最近推送";
|
|
38
|
+
readonly baselinePending: "待生成";
|
|
39
|
+
readonly categoryFilter: "插件分类";
|
|
40
|
+
readonly categorySelect: "排行榜分类";
|
|
41
|
+
readonly 'category.agent-workflow': "Agent 与工作流";
|
|
42
|
+
readonly 'category.coding-tools': "编程与工具";
|
|
43
|
+
readonly 'category.models-data': "模型与数据";
|
|
44
|
+
readonly 'category.ui-experience': "界面与体验";
|
|
45
|
+
readonly 'category.integrations': "连接与集成";
|
|
46
|
+
readonly 'category.security-governance': "安全与治理";
|
|
47
|
+
readonly 'category.multimodal-creative': "多模态与创作";
|
|
48
|
+
readonly 'category.observability-cost': "监控与用量";
|
|
49
|
+
readonly 'category.other': "其他";
|
|
50
|
+
};
|
|
51
|
+
/** English dictionary checked against the Chinese key set. */
|
|
52
|
+
export declare const en: Record<keyof typeof zh, string>;
|
|
53
|
+
export type PluginHubLocaleKey = keyof typeof zh;
|
|
54
|
+
//# sourceMappingURL=locales.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"locales.d.ts","sourceRoot":"","sources":["../../src/client/locales.ts"],"names":[],"mappings":"AAAA,oCAAoC;AAEpC,6DAA6D;AAC7D,eAAO,MAAM,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA+CL,CAAA;AAEV,8DAA8D;AAC9D,eAAO,MAAM,EAAE,EAAE,MAAM,CAAC,MAAM,OAAO,EAAE,EAAE,MAAM,CA+C9C,CAAA;AAED,MAAM,MAAM,kBAAkB,GAAG,MAAM,OAAO,EAAE,CAAA"}
|
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
/** Bilingual Settings page copy. */
|
|
2
|
+
/** Simplified Chinese dictionary and key source of truth. */
|
|
3
|
+
export const zh = {
|
|
4
|
+
nav: '插件中心',
|
|
5
|
+
title: 'DSH Plugin Hub',
|
|
6
|
+
subtitle: '搜索社区插件、浏览排行榜,找到适合工作流的扩展。',
|
|
7
|
+
openWebsite: '打开网站',
|
|
8
|
+
marketplaceTab: '插件市场',
|
|
9
|
+
rankingsTab: '排行榜',
|
|
10
|
+
searchLabel: '搜索插件',
|
|
11
|
+
searchPlaceholder: '搜索插件、作者或功能',
|
|
12
|
+
allCategories: '全部',
|
|
13
|
+
catalogCount: '个插件',
|
|
14
|
+
loading: '正在加载插件…',
|
|
15
|
+
error: '暂时无法读取插件市场。',
|
|
16
|
+
retry: '重试',
|
|
17
|
+
empty: '当前筛选条件下没有插件。',
|
|
18
|
+
copyCommand: '复制命令',
|
|
19
|
+
copied: '已复制',
|
|
20
|
+
copyFailed: '复制失败',
|
|
21
|
+
details: '查看详情',
|
|
22
|
+
stars: 'Stars',
|
|
23
|
+
views: '浏览',
|
|
24
|
+
source: '来源',
|
|
25
|
+
verified: '已验证',
|
|
26
|
+
previous: '上一页',
|
|
27
|
+
next: '下一页',
|
|
28
|
+
page: '页',
|
|
29
|
+
rankingGrowth: '日增长',
|
|
30
|
+
rankingStars: 'Star 总榜',
|
|
31
|
+
rankingNewest: '最新上架',
|
|
32
|
+
rankingActive: '最近活跃',
|
|
33
|
+
metricsUpdated: '数据更新于',
|
|
34
|
+
metricGrowth: '较上次快照',
|
|
35
|
+
metricStars: 'GitHub Stars',
|
|
36
|
+
metricNewest: '上架时间',
|
|
37
|
+
metricActive: '最近推送',
|
|
38
|
+
baselinePending: '待生成',
|
|
39
|
+
categoryFilter: '插件分类',
|
|
40
|
+
categorySelect: '排行榜分类',
|
|
41
|
+
'category.agent-workflow': 'Agent 与工作流',
|
|
42
|
+
'category.coding-tools': '编程与工具',
|
|
43
|
+
'category.models-data': '模型与数据',
|
|
44
|
+
'category.ui-experience': '界面与体验',
|
|
45
|
+
'category.integrations': '连接与集成',
|
|
46
|
+
'category.security-governance': '安全与治理',
|
|
47
|
+
'category.multimodal-creative': '多模态与创作',
|
|
48
|
+
'category.observability-cost': '监控与用量',
|
|
49
|
+
'category.other': '其他',
|
|
50
|
+
};
|
|
51
|
+
/** English dictionary checked against the Chinese key set. */
|
|
52
|
+
export const en = {
|
|
53
|
+
nav: 'Plugin Hub',
|
|
54
|
+
title: 'DSH Plugin Hub',
|
|
55
|
+
subtitle: 'Search community plugins and explore rankings for your workflow.',
|
|
56
|
+
openWebsite: 'Open website',
|
|
57
|
+
marketplaceTab: 'Plugin marketplace',
|
|
58
|
+
rankingsTab: 'Rankings',
|
|
59
|
+
searchLabel: 'Search plugins',
|
|
60
|
+
searchPlaceholder: 'Search plugins, authors, or features',
|
|
61
|
+
allCategories: 'All',
|
|
62
|
+
catalogCount: 'plugins',
|
|
63
|
+
loading: 'Loading plugins…',
|
|
64
|
+
error: 'The plugin marketplace is temporarily unavailable.',
|
|
65
|
+
retry: 'Retry',
|
|
66
|
+
empty: 'No plugins match these filters.',
|
|
67
|
+
copyCommand: 'Copy command',
|
|
68
|
+
copied: 'Copied',
|
|
69
|
+
copyFailed: 'Copy failed',
|
|
70
|
+
details: 'View details',
|
|
71
|
+
stars: 'Stars',
|
|
72
|
+
views: 'Views',
|
|
73
|
+
source: 'Source',
|
|
74
|
+
verified: 'Verified',
|
|
75
|
+
previous: 'Previous',
|
|
76
|
+
next: 'Next',
|
|
77
|
+
page: 'Page',
|
|
78
|
+
rankingGrowth: 'Daily growth',
|
|
79
|
+
rankingStars: 'Top stars',
|
|
80
|
+
rankingNewest: 'Newly listed',
|
|
81
|
+
rankingActive: 'Recently active',
|
|
82
|
+
metricsUpdated: 'Metrics updated',
|
|
83
|
+
metricGrowth: 'Since last snapshot',
|
|
84
|
+
metricStars: 'GitHub stars',
|
|
85
|
+
metricNewest: 'Listed',
|
|
86
|
+
metricActive: 'Last pushed',
|
|
87
|
+
baselinePending: 'Pending',
|
|
88
|
+
categoryFilter: 'Plugin category',
|
|
89
|
+
categorySelect: 'Ranking category',
|
|
90
|
+
'category.agent-workflow': 'Agent & Workflow',
|
|
91
|
+
'category.coding-tools': 'Coding Tools',
|
|
92
|
+
'category.models-data': 'Models & Data',
|
|
93
|
+
'category.ui-experience': 'UI & Experience',
|
|
94
|
+
'category.integrations': 'Integrations',
|
|
95
|
+
'category.security-governance': 'Security',
|
|
96
|
+
'category.multimodal-creative': 'Multimodal',
|
|
97
|
+
'category.observability-cost': 'Monitoring',
|
|
98
|
+
'category.other': 'Other',
|
|
99
|
+
};
|
|
100
|
+
//# sourceMappingURL=locales.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"locales.js","sourceRoot":"","sources":["../../src/client/locales.ts"],"names":[],"mappings":"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"}
|