@grove-dev/astro 0.2.6 → 0.2.13
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/dist/lib/display.d.ts +11 -17
- package/dist/lib/display.d.ts.map +1 -1
- package/dist/lib/display.js +43 -43
- package/dist/lib/display.js.map +1 -1
- package/dist/lib/format.d.ts +6 -7
- package/dist/lib/format.d.ts.map +1 -1
- package/dist/lib/format.js +11 -12
- package/dist/lib/format.js.map +1 -1
- package/dist/lib/lenses.d.ts +35 -73
- package/dist/lib/lenses.d.ts.map +1 -1
- package/dist/lib/lenses.js +144 -126
- package/dist/lib/lenses.js.map +1 -1
- package/dist/lib/repo.d.ts +11 -22
- package/dist/lib/repo.d.ts.map +1 -1
- package/dist/lib/repo.js +12 -25
- package/dist/lib/repo.js.map +1 -1
- package/dist/lib/scores.d.ts +15 -16
- package/dist/lib/scores.d.ts.map +1 -1
- package/dist/lib/scores.js +4 -11
- package/dist/lib/scores.js.map +1 -1
- package/dist/lib/search.d.ts +47 -129
- package/dist/lib/search.d.ts.map +1 -1
- package/dist/lib/search.js +195 -180
- package/dist/lib/search.js.map +1 -1
- package/dist/lib/taxonomy-counts.d.ts +7 -21
- package/dist/lib/taxonomy-counts.d.ts.map +1 -1
- package/dist/lib/taxonomy-counts.js +12 -31
- package/dist/lib/taxonomy-counts.js.map +1 -1
- package/package.json +4 -4
- package/src/components/AppsIndexRow.astro +55 -184
- package/src/components/AppsPagination.astro +45 -108
- package/src/components/CategoryGrid.astro +43 -31
- package/src/components/ContributorsGrid.astro +3 -3
- package/src/components/CurationGrid.astro +41 -0
- package/src/components/ExploreByStack.astro +6 -0
- package/src/components/FilterGroupMenu.astro +49 -0
- package/src/components/FilterOptions.astro +44 -0
- package/src/components/Hero.astro +198 -147
- package/src/components/Icon.astro +10 -3
- package/src/components/ItemCard.astro +266 -248
- package/src/components/RecordSection.astro +68 -33
- package/src/components/RefinePanel.astro +115 -141
- package/src/components/StackGrid.astro +32 -24
- package/src/components/WhyThisExists.astro +32 -32
- package/src/layouts/BaseLayout.astro +104 -49
- package/src/layouts/Container.astro +5 -44
- package/src/layouts/Footer.astro +31 -20
- package/src/layouts/Header.astro +40 -19
- package/src/layouts/SectionHeader.astro +27 -43
- package/src/layouts/Seo.astro +38 -56
- package/src/layouts/ThemeToggle.astro +35 -48
- package/src/lib/display.ts +46 -53
- package/src/lib/format.ts +11 -12
- package/src/lib/lenses.ts +151 -172
- package/src/lib/repo.ts +16 -28
- package/src/lib/scores.ts +15 -19
- package/src/lib/search.ts +222 -290
- package/src/lib/taxonomy-counts.ts +12 -46
- package/src/styles.css +207 -1
- package/templates/default/.github/ISSUE_TEMPLATE/bug_report.md +33 -0
- package/templates/default/.github/ISSUE_TEMPLATE/feature_request.md +20 -0
- package/templates/default/.github/ISSUE_TEMPLATE/record_submission.md +48 -0
- package/templates/default/.github/pull_request_template.md +27 -0
- package/templates/default/.github/workflows/build.yml +55 -0
- package/templates/default/.github/workflows/cleanup-stale-records.yml +48 -0
- package/templates/default/.github/workflows/daily-refresh.yml +53 -0
- package/templates/default/.github/workflows/sync-contributors.yml +53 -0
- package/templates/default/.github/workflows/sync-github-metadata.yml +58 -0
- package/templates/default/.github/workflows/validate-data.yml +35 -0
- package/templates/default/data/records/coolify.yml +46 -0
- package/templates/default/data/records/gitea.yml +46 -0
- package/templates/default/data/records/hoppscotch.yml +47 -0
- package/templates/default/data/records/inventree.yml +47 -0
- package/templates/default/data/records/label-studio.yml +46 -0
- package/templates/default/data/records/logseq.yml +48 -0
- package/templates/default/data/records/private-gpt.yml +47 -0
- package/templates/default/data/records/wakapi.yml +44 -0
- package/templates/default/data/taxonomy/categories.yml +47 -0
- package/templates/default/data/taxonomy/distribution-channels.yml +43 -0
- package/templates/default/data/taxonomy/platforms.yml +27 -0
- package/templates/default/data/taxonomy/stacks.yml +41 -0
- package/templates/default/grove.config.ts +1 -1
- package/templates/default/package.json +5 -4
- package/templates/default/public/icons/stacks/bun.svg +1 -0
- package/templates/default/public/icons/stacks/clojure.svg +1 -0
- package/templates/default/public/icons/stacks/clojurescript.svg +1 -0
- package/templates/default/public/icons/stacks/deno.svg +1 -0
- package/templates/default/public/icons/stacks/django.svg +1 -0
- package/templates/default/public/icons/stacks/docker.svg +1 -0
- package/templates/default/public/icons/stacks/go.svg +1 -0
- package/templates/default/public/icons/stacks/llm.svg +1 -0
- package/templates/default/public/icons/stacks/node.js.svg +1 -0
- package/templates/default/public/icons/stacks/sveltekit.svg +1 -0
- package/templates/default/public/icons/stacks/vue.svg +1 -0
- package/templates/default/public/llms-full.txt +197 -5
- package/templates/default/public/llms.txt +107 -6
- package/templates/default/public/sitemap.xml +63 -0
- package/templates/default/scripts/build-llms.mjs +123 -0
- package/templates/default/scripts/build-records-json.mjs +27 -0
- package/templates/default/scripts/build-sitemap.mjs +20 -0
- package/templates/default/scripts/cleanup-stale-records.mjs +20 -0
- package/templates/default/scripts/enrich-github-metadata.mjs +99 -0
- package/templates/default/scripts/fetch-icons.mjs +137 -0
- package/templates/default/scripts/migrate-legacy-to-schema-v1.mjs +86 -0
- package/templates/default/scripts/parse-legacy-readme.mjs +59 -0
- package/templates/default/scripts/refresh-records-activity.mjs +24 -0
- package/templates/default/scripts/repair-license-format.mjs +72 -0
- package/templates/default/scripts/report-cleanup-candidates.mjs +21 -0
- package/templates/default/scripts/seed-from-github.mjs +62 -0
- package/templates/default/scripts/sync-contributors.mjs +145 -0
- package/templates/default/scripts/sync-github-metadata.mjs +28 -0
- package/templates/default/scripts/validate-records.mjs +27 -0
- package/templates/default/src/data/records.ts +134 -51
- package/templates/default/src/pages/404.astro +64 -0
- package/templates/default/src/pages/{projects/[slug].astro → [slug]/[itemSlug].astro} +236 -66
- package/templates/default/src/pages/[slug]/index.astro +476 -0
- package/templates/default/src/pages/about.astro +165 -82
- package/templates/default/src/pages/apps/[itemSlug].astro +301 -0
- package/templates/default/src/pages/apps/index.astro +146 -0
- package/templates/default/src/pages/contributors.astro +184 -0
- package/templates/default/src/pages/index.astro +119 -162
- package/templates/default/src/pages/submit.astro +276 -114
- package/templates/default/wrangler.jsonc +28 -0
- package/LICENSE +0 -21
- package/templates/default/data/generated/apps.json +0 -1
- package/templates/default/data/generated/records.full.json +0 -8
- package/templates/default/data/generated/records.index.json +0 -7
- package/templates/default/data/generated/records.json +0 -8
- package/templates/default/data/generated/repo-stats.json +0 -1
- package/templates/default/data/generated/site-config.json +0 -31
- package/templates/default/src/components/layout/BaseLayout.astro +0 -47
- package/templates/default/src/components/layout/Container.astro +0 -18
- package/templates/default/src/components/layout/Footer.astro +0 -27
- package/templates/default/src/components/layout/Header.astro +0 -43
- package/templates/default/src/lib/markdown.ts +0 -171
- package/templates/default/src/pages/projects/index.astro +0 -193
package/dist/lib/search.js
CHANGED
|
@@ -1,19 +1,4 @@
|
|
|
1
|
-
|
|
2
|
-
* URL-driven search/filter/sort state for the directory list page.
|
|
3
|
-
*
|
|
4
|
-
* Multi-value fields use repeated keys: `?stack=Flutter&stack=RN`.
|
|
5
|
-
* Single-value fields (q, sort, page, lens) are scalar. Empty
|
|
6
|
-
* / undefined fields mean "no filter on this dimension".
|
|
7
|
-
*
|
|
8
|
-
* The functions here are generic over a record-like shape that
|
|
9
|
-
* carries the index payload (see `toIndexRecord` in
|
|
10
|
-
* `@grove-dev/core`). The list page only needs `name`, `slug`,
|
|
11
|
-
* `description`, `category`, `tags`, `stack`, `stacks`, `platforms`,
|
|
12
|
-
* `repoUrl`, `logoUrl`, `health`, `curation`, and `github.{stars,
|
|
13
|
-
* pushedAt}` — all of which are present in the index projection.
|
|
14
|
-
*/
|
|
15
|
-
import { labelDisplay, statusDisplay } from "./display.js";
|
|
16
|
-
import { applyLens, lensFromSearchParams } from "./lenses.js";
|
|
1
|
+
import { labelDisplay, lensDisplay, statusDisplay } from "./display.js";
|
|
17
2
|
/** Available sort orders, in UI order. */
|
|
18
3
|
export const SORT_OPTIONS = [
|
|
19
4
|
{ value: "recently-updated", label: "Recently updated" },
|
|
@@ -24,11 +9,7 @@ export const SORT_OPTIONS = [
|
|
|
24
9
|
];
|
|
25
10
|
const DEFAULT_SORT = "recently-updated";
|
|
26
11
|
const DEFAULT_PAGE = 1;
|
|
27
|
-
|
|
28
|
-
* How many records per page. Constant for now; future versions may
|
|
29
|
-
* vary per blueprint.
|
|
30
|
-
*/
|
|
31
|
-
export const PAGE_SIZE = 24;
|
|
12
|
+
const DEFAULT_PAGE_SIZE = 20;
|
|
32
13
|
const KEYS = {
|
|
33
14
|
q: "q",
|
|
34
15
|
stacks: "stack",
|
|
@@ -41,10 +22,9 @@ const KEYS = {
|
|
|
41
22
|
sort: "sort",
|
|
42
23
|
page: "page",
|
|
43
24
|
};
|
|
44
|
-
// ── Search param round-tripping ──────────────────────────────────
|
|
45
25
|
/**
|
|
46
|
-
* Read filters from a URLSearchParams (or anything URLSearchParams-
|
|
47
|
-
*
|
|
26
|
+
* Read filters from a URLSearchParams (or anything URLSearchParams-shaped,
|
|
27
|
+
* e.g. the result of `new URL(req.url).searchParams`).
|
|
48
28
|
*/
|
|
49
29
|
export function filtersFromSearchParams(sp) {
|
|
50
30
|
const rawSort = sp.get(KEYS.sort);
|
|
@@ -62,19 +42,16 @@ export function filtersFromSearchParams(sp) {
|
|
|
62
42
|
categories: sp.getAll(KEYS.categories).filter(Boolean),
|
|
63
43
|
labels: sp.getAll(KEYS.labels).filter(Boolean),
|
|
64
44
|
licenses: sp.getAll(KEYS.licenses).filter(Boolean),
|
|
65
|
-
statuses: sp
|
|
66
|
-
|
|
67
|
-
.flatMap((s) => s.split(","))
|
|
68
|
-
.filter(Boolean),
|
|
69
|
-
lens: lensFromSearchParams(sp) || undefined,
|
|
45
|
+
statuses: sp.getAll(KEYS.statuses).flatMap((s) => s.split(",")).filter(Boolean),
|
|
46
|
+
lens: sp.get(KEYS.lens) ?? undefined,
|
|
70
47
|
sort,
|
|
71
48
|
page,
|
|
72
49
|
};
|
|
73
50
|
}
|
|
74
51
|
/**
|
|
75
|
-
* Serialize a filters object back to URLSearchParams.
|
|
76
|
-
* empty values are dropped. Defaults (sort, page 1
|
|
77
|
-
* to keep URLs short and canonical.
|
|
52
|
+
* Serialize a filters object back to URLSearchParams.
|
|
53
|
+
* Undefined / empty values are dropped. Defaults (sort, page 1, comfortable
|
|
54
|
+
* density) are also dropped to keep URLs short and canonical.
|
|
78
55
|
*/
|
|
79
56
|
export function searchParamsFromFilters(f) {
|
|
80
57
|
const sp = new URLSearchParams();
|
|
@@ -100,11 +77,7 @@ export function searchParamsFromFilters(f) {
|
|
|
100
77
|
sp.set(KEYS.page, String(f.page));
|
|
101
78
|
return sp;
|
|
102
79
|
}
|
|
103
|
-
|
|
104
|
-
/**
|
|
105
|
-
* True if any filter is active (i.e. the result list isn't "all
|
|
106
|
-
* records, default sort").
|
|
107
|
-
*/
|
|
80
|
+
/** True if any filter is active (i.e. the result list isn't "all items"). */
|
|
108
81
|
export function hasAnyFilter(f) {
|
|
109
82
|
if (f.q && f.q.trim())
|
|
110
83
|
return true;
|
|
@@ -117,15 +90,87 @@ export function hasAnyFilter(f) {
|
|
|
117
90
|
(f.licenses?.length ?? 0) +
|
|
118
91
|
(f.statuses?.length ?? 0));
|
|
119
92
|
}
|
|
93
|
+
/** How many items per page. Constant for now; future versions may vary. */
|
|
94
|
+
export const PAGE_SIZE = DEFAULT_PAGE_SIZE;
|
|
95
|
+
/**
|
|
96
|
+
* Sort items in-place-free: returns a new array. Stable for ties.
|
|
97
|
+
* Apps missing the sort key (e.g. no stars) sink to the bottom rather
|
|
98
|
+
* than vanishing.
|
|
99
|
+
*/
|
|
100
|
+
function recordName(record) {
|
|
101
|
+
return record.kind === "resource" ? record.title : record.name;
|
|
102
|
+
}
|
|
103
|
+
function projectStars(record) {
|
|
104
|
+
return record.kind === "project" ? record.github?.stars ?? 0 : 0;
|
|
105
|
+
}
|
|
106
|
+
function recordUpdatedAt(record) {
|
|
107
|
+
if (record.kind === "project")
|
|
108
|
+
return record.github?.pushedAt ?? null;
|
|
109
|
+
if (record.kind === "resource")
|
|
110
|
+
return record.publishedAt ?? null;
|
|
111
|
+
return null;
|
|
112
|
+
}
|
|
113
|
+
function recordAddedAt(record) {
|
|
114
|
+
return record.curation?.reviewedAt ?? null;
|
|
115
|
+
}
|
|
116
|
+
export function applySort(items, sort) {
|
|
117
|
+
const arr = items.slice();
|
|
118
|
+
const ts = (s) => (s ? new Date(s).valueOf() : 0);
|
|
119
|
+
switch (sort) {
|
|
120
|
+
case "most-starred":
|
|
121
|
+
arr.sort((a, b) => projectStars(b) - projectStars(a));
|
|
122
|
+
break;
|
|
123
|
+
case "recently-updated":
|
|
124
|
+
arr.sort((a, b) => ts(recordUpdatedAt(b)) - ts(recordUpdatedAt(a)));
|
|
125
|
+
break;
|
|
126
|
+
case "recently-added":
|
|
127
|
+
arr.sort((a, b) => ts(recordAddedAt(b)) - ts(recordAddedAt(a)));
|
|
128
|
+
break;
|
|
129
|
+
case "best-overall": {
|
|
130
|
+
const reviewed = (a) => (a.curation?.reviewed ? 1 : 0);
|
|
131
|
+
const visible = (a) => (a.visibility === "keep" ? 1 : 0);
|
|
132
|
+
arr.sort((a, b) => {
|
|
133
|
+
const reviewedDelta = reviewed(b) - reviewed(a);
|
|
134
|
+
if (reviewedDelta !== 0)
|
|
135
|
+
return reviewedDelta;
|
|
136
|
+
const visibleDelta = visible(b) - visible(a);
|
|
137
|
+
if (visibleDelta !== 0)
|
|
138
|
+
return visibleDelta;
|
|
139
|
+
return projectStars(b) - projectStars(a);
|
|
140
|
+
});
|
|
141
|
+
break;
|
|
142
|
+
}
|
|
143
|
+
case "alphabetical":
|
|
144
|
+
arr.sort((a, b) => recordName(a).localeCompare(recordName(b)));
|
|
145
|
+
break;
|
|
146
|
+
}
|
|
147
|
+
return arr;
|
|
148
|
+
}
|
|
149
|
+
/** Slice an array for a given page (1-based). */
|
|
150
|
+
export function paginate(items, page, pageSize = PAGE_SIZE) {
|
|
151
|
+
const start = (page - 1) * pageSize;
|
|
152
|
+
return items.slice(start, start + pageSize);
|
|
153
|
+
}
|
|
154
|
+
/** Total number of pages given an item count. Always >= 1. */
|
|
155
|
+
export function totalPages(itemCount, pageSize = PAGE_SIZE) {
|
|
156
|
+
return Math.max(1, Math.ceil(itemCount / pageSize));
|
|
157
|
+
}
|
|
158
|
+
/** Resolve the effective sort from a filters object, applying default. */
|
|
159
|
+
export function effectiveSort(f) {
|
|
160
|
+
return f.sort ?? DEFAULT_SORT;
|
|
161
|
+
}
|
|
162
|
+
/** Resolve the effective page from a filters object, applying default. */
|
|
163
|
+
export function effectivePage(f) {
|
|
164
|
+
return f.page ?? DEFAULT_PAGE;
|
|
165
|
+
}
|
|
120
166
|
/**
|
|
121
|
-
* Return the subset of
|
|
122
|
-
*
|
|
167
|
+
* Return the subset of items that match all active filters (AND across
|
|
168
|
+
* dimensions, OR within a dimension).
|
|
123
169
|
*
|
|
124
170
|
* `q` is a case-insensitive substring search across name, owner,
|
|
125
|
-
* description, category
|
|
126
|
-
* Other dimensions are exact match.
|
|
171
|
+
* description, and category. Other dimensions are exact match.
|
|
127
172
|
*/
|
|
128
|
-
export function
|
|
173
|
+
export function filterItems(items, f) {
|
|
129
174
|
const q = f.q?.trim().toLowerCase();
|
|
130
175
|
const stacks = f.stacks?.length ? new Set(f.stacks) : null;
|
|
131
176
|
const platforms = f.platforms?.length ? new Set(f.platforms) : null;
|
|
@@ -133,21 +178,42 @@ export function filterApps(records, f) {
|
|
|
133
178
|
const labels = f.labels?.length ? new Set(f.labels) : null;
|
|
134
179
|
const licenses = f.licenses?.length ? new Set(f.licenses) : null;
|
|
135
180
|
const statuses = f.statuses?.length ? new Set(f.statuses) : null;
|
|
136
|
-
return
|
|
181
|
+
return items.filter((a) => {
|
|
182
|
+
// Text search — match name, owner, description, category, stack,
|
|
183
|
+
// stacks, platforms, tags, backend, architecture, stateManagement,
|
|
184
|
+
// bestFor, whyListed, license, status.
|
|
137
185
|
if (q) {
|
|
138
|
-
const
|
|
139
|
-
|
|
186
|
+
const repoUrl = a.kind === "project" ? a.repoUrl : a.links.github ?? "";
|
|
187
|
+
const ownerMatch = /github\.com\/([^/]+)\//.exec(repoUrl ?? "")?.[1]?.toLowerCase() ?? "";
|
|
188
|
+
const projectFields = a.kind === "project"
|
|
189
|
+
? [
|
|
190
|
+
a.stack,
|
|
191
|
+
...a.stacks,
|
|
192
|
+
...a.platforms,
|
|
193
|
+
a.projectType,
|
|
194
|
+
a.difficulty ?? "",
|
|
195
|
+
a.codebaseSize ?? "",
|
|
196
|
+
...a.bestFor,
|
|
197
|
+
...a.whyListed,
|
|
198
|
+
a.github?.license ?? "",
|
|
199
|
+
a.health?.status ? statusDisplay(a.health.status) : "",
|
|
200
|
+
]
|
|
201
|
+
: [];
|
|
202
|
+
const resourceFields = a.kind === "resource"
|
|
203
|
+
? [a.type, a.topic, a.author ?? ""]
|
|
204
|
+
: [];
|
|
205
|
+
const entityFields = a.kind === "entity"
|
|
206
|
+
? [a.type, a.location ?? "", a.parent ?? ""]
|
|
207
|
+
: [];
|
|
140
208
|
const haystack = [
|
|
141
|
-
|
|
209
|
+
recordName(a),
|
|
142
210
|
ownerMatch,
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
...
|
|
147
|
-
...
|
|
148
|
-
...
|
|
149
|
-
r.github?.license ?? "",
|
|
150
|
-
r.health?.status ? statusDisplay(r.health.status) : "",
|
|
211
|
+
a.description,
|
|
212
|
+
a.category,
|
|
213
|
+
...a.tags,
|
|
214
|
+
...projectFields,
|
|
215
|
+
...resourceFields,
|
|
216
|
+
...entityFields,
|
|
151
217
|
]
|
|
152
218
|
.join(" ")
|
|
153
219
|
.toLowerCase();
|
|
@@ -155,122 +221,48 @@ export function filterApps(records, f) {
|
|
|
155
221
|
return false;
|
|
156
222
|
}
|
|
157
223
|
if (stacks) {
|
|
158
|
-
|
|
224
|
+
if (a.kind !== "project")
|
|
225
|
+
return false;
|
|
226
|
+
const allStacks = [a.stack, ...a.stacks].filter((stack) => Boolean(stack));
|
|
159
227
|
if (!allStacks.some((s) => stacks.has(s)))
|
|
160
228
|
return false;
|
|
161
229
|
}
|
|
162
230
|
if (platforms) {
|
|
163
|
-
if (
|
|
231
|
+
if (a.kind !== "project")
|
|
232
|
+
return false;
|
|
233
|
+
if (!a.platforms.some((p) => platforms.has(p)))
|
|
164
234
|
return false;
|
|
165
235
|
}
|
|
166
236
|
if (categories) {
|
|
167
|
-
if (!
|
|
237
|
+
if (!categories.has(a.category))
|
|
168
238
|
return false;
|
|
169
239
|
}
|
|
170
240
|
if (labels) {
|
|
171
|
-
if (!
|
|
241
|
+
if (!a.curation?.labels?.some((l) => labels.has(l)))
|
|
172
242
|
return false;
|
|
173
243
|
}
|
|
174
244
|
if (licenses) {
|
|
175
|
-
|
|
245
|
+
if (a.kind !== "project")
|
|
246
|
+
return false;
|
|
247
|
+
const license = a.github?.license;
|
|
176
248
|
if (!license || !licenses.has(license))
|
|
177
249
|
return false;
|
|
178
250
|
}
|
|
179
251
|
if (statuses) {
|
|
180
|
-
|
|
252
|
+
if (a.kind !== "project")
|
|
253
|
+
return false;
|
|
254
|
+
const status = a.health?.status;
|
|
181
255
|
if (!status || !statuses.has(status))
|
|
182
256
|
return false;
|
|
183
257
|
}
|
|
258
|
+
if (f.lens) {
|
|
259
|
+
if (!a.curation?.lenses?.includes(f.lens))
|
|
260
|
+
return false;
|
|
261
|
+
}
|
|
184
262
|
return true;
|
|
185
263
|
});
|
|
186
264
|
}
|
|
187
|
-
|
|
188
|
-
/**
|
|
189
|
-
* Apply lens → filter → sort pipeline. Lens is applied first because
|
|
190
|
-
* it's a single-select "view" that may be broader or narrower than
|
|
191
|
-
* the regular filter dimensions.
|
|
192
|
-
*/
|
|
193
|
-
export function pipeline(records, filters) {
|
|
194
|
-
const afterLens = applyLens(records, filters.lens ?? "");
|
|
195
|
-
const afterFilter = filterApps(afterLens, filters);
|
|
196
|
-
return applySort(afterFilter, effectiveSort(filters));
|
|
197
|
-
}
|
|
198
|
-
/**
|
|
199
|
-
* Sort records in-place-free: returns a new array. Stable for ties.
|
|
200
|
-
* Records missing the sort key (e.g. no stars) sink to the bottom
|
|
201
|
-
* rather than vanishing.
|
|
202
|
-
*/
|
|
203
|
-
export function applySort(records, sort) {
|
|
204
|
-
const arr = records.slice();
|
|
205
|
-
const ts = (s) => (s ? new Date(s).valueOf() : 0);
|
|
206
|
-
switch (sort) {
|
|
207
|
-
case "most-starred":
|
|
208
|
-
arr.sort((a, b) => (b.github?.stars ?? 0) - (a.github?.stars ?? 0));
|
|
209
|
-
break;
|
|
210
|
-
case "recently-updated":
|
|
211
|
-
arr.sort((a, b) => ts(b.github?.pushedAt) - ts(a.github?.pushedAt));
|
|
212
|
-
break;
|
|
213
|
-
case "recently-added":
|
|
214
|
-
// Index payload doesn't have a dedicated "addedAt" yet — fall
|
|
215
|
-
// back to `pushedAt` so the sort still works. Once we add an
|
|
216
|
-
// explicit addedAt field, swap the key here.
|
|
217
|
-
arr.sort((a, b) => ts(b.github?.pushedAt) - ts(a.github?.pushedAt));
|
|
218
|
-
break;
|
|
219
|
-
case "best-overall": {
|
|
220
|
-
// Composite: scores.overall → scores.maturity → scores.activity →
|
|
221
|
-
// active status → license present → stars. Avoids ranking by
|
|
222
|
-
// stars alone.
|
|
223
|
-
const score = (x, k) => (typeof x.scores?.[k] === "number" ? x.scores[k] : 0);
|
|
224
|
-
const active = (x) => (x.health?.status === "active" ? 1 : 0);
|
|
225
|
-
const licensed = (x) => (x.github?.license ? 1 : 0);
|
|
226
|
-
arr.sort((a, b) => {
|
|
227
|
-
const sOverall = score(b, "overall") - score(a, "overall");
|
|
228
|
-
if (sOverall !== 0)
|
|
229
|
-
return sOverall;
|
|
230
|
-
const sMaturity = score(b, "maturity") - score(a, "maturity");
|
|
231
|
-
if (sMaturity !== 0)
|
|
232
|
-
return sMaturity;
|
|
233
|
-
const sActivity = score(b, "activity") - score(a, "activity");
|
|
234
|
-
if (sActivity !== 0)
|
|
235
|
-
return sActivity;
|
|
236
|
-
const sActive = active(b) - active(a);
|
|
237
|
-
if (sActive !== 0)
|
|
238
|
-
return sActive;
|
|
239
|
-
const sLicensed = licensed(b) - licensed(a);
|
|
240
|
-
if (sLicensed !== 0)
|
|
241
|
-
return sLicensed;
|
|
242
|
-
return (b.github?.stars ?? 0) - (a.github?.stars ?? 0);
|
|
243
|
-
});
|
|
244
|
-
break;
|
|
245
|
-
}
|
|
246
|
-
case "alphabetical":
|
|
247
|
-
arr.sort((a, b) => a.name.localeCompare(b.name));
|
|
248
|
-
break;
|
|
249
|
-
}
|
|
250
|
-
return arr;
|
|
251
|
-
}
|
|
252
|
-
/** Slice an array for a given page (1-based). */
|
|
253
|
-
export function paginate(items, page, pageSize = PAGE_SIZE) {
|
|
254
|
-
const start = (page - 1) * pageSize;
|
|
255
|
-
return items.slice(start, start + pageSize);
|
|
256
|
-
}
|
|
257
|
-
/** Total number of pages given an item count. Always >= 1. */
|
|
258
|
-
export function totalPages(itemCount, pageSize = PAGE_SIZE) {
|
|
259
|
-
return Math.max(1, Math.ceil(itemCount / pageSize));
|
|
260
|
-
}
|
|
261
|
-
/** Resolve the effective sort from a filters object, applying default. */
|
|
262
|
-
export function effectiveSort(f) {
|
|
263
|
-
return f.sort ?? DEFAULT_SORT;
|
|
264
|
-
}
|
|
265
|
-
/** Resolve the effective page from a filters object, applying default. */
|
|
266
|
-
export function effectivePage(f) {
|
|
267
|
-
return f.page ?? DEFAULT_PAGE;
|
|
268
|
-
}
|
|
269
|
-
// ── Facets ───────────────────────────────────────────────────────
|
|
270
|
-
/**
|
|
271
|
-
* Return a flat list of active-filter chips for display + removal.
|
|
272
|
-
* Used by the "x" button on each chip in the UI.
|
|
273
|
-
*/
|
|
265
|
+
/** Build a flat list of "active filter" chips for display + removal. */
|
|
274
266
|
export function activeFilterChips(f) {
|
|
275
267
|
const out = [];
|
|
276
268
|
if (f.q && f.q.trim()) {
|
|
@@ -292,31 +284,50 @@ export function activeFilterChips(f) {
|
|
|
292
284
|
out.push({ key: "licenses", value: v, label: `License: ${v}` });
|
|
293
285
|
}
|
|
294
286
|
if (f.lens) {
|
|
295
|
-
|
|
296
|
-
// (no need to import from `lenses.ts` to render a chip label).
|
|
297
|
-
const LENS_CHIP_LABELS = {
|
|
298
|
-
all: "All",
|
|
299
|
-
hot: "Trending",
|
|
300
|
-
new: "Recently added",
|
|
301
|
-
mature: "Established",
|
|
302
|
-
featured: "Featured",
|
|
303
|
-
"needs-review": "Needs review",
|
|
304
|
-
};
|
|
305
|
-
out.push({ key: "lens", value: f.lens, label: LENS_CHIP_LABELS[f.lens] ?? f.lens });
|
|
287
|
+
out.push({ key: "lens", value: f.lens, label: lensDisplay(f.lens) });
|
|
306
288
|
}
|
|
289
|
+
// Status: collapse the "stale,quiet" composite into a single chip.
|
|
307
290
|
if (f.statuses && f.statuses.length) {
|
|
308
|
-
|
|
309
|
-
|
|
291
|
+
const joined = f.statuses.join(",");
|
|
292
|
+
if (joined === "stale,quiet") {
|
|
293
|
+
out.push({ key: "statuses", value: "stale,quiet", label: statusDisplay("needs-maintainer") });
|
|
294
|
+
}
|
|
295
|
+
else {
|
|
296
|
+
for (const v of f.statuses) {
|
|
297
|
+
out.push({ key: "statuses", value: v, label: statusDisplay(v) });
|
|
298
|
+
}
|
|
310
299
|
}
|
|
311
300
|
}
|
|
312
301
|
return out;
|
|
313
302
|
}
|
|
314
303
|
/**
|
|
315
|
-
*
|
|
316
|
-
*
|
|
317
|
-
*
|
|
304
|
+
* Return a new filters object with one (key, value) removed.
|
|
305
|
+
* - key="q" → clears the search string
|
|
306
|
+
* - multi-value keys → removes the single matching value
|
|
307
|
+
* Used by the "x" button on each active filter chip.
|
|
308
|
+
* Also resets page to 1 so the user doesn't get stranded on a high page
|
|
309
|
+
* that no longer has results.
|
|
318
310
|
*/
|
|
319
|
-
export function
|
|
311
|
+
export function removeFilter(f, key, value) {
|
|
312
|
+
let next;
|
|
313
|
+
if (key === "q") {
|
|
314
|
+
next = { ...f, q: undefined };
|
|
315
|
+
}
|
|
316
|
+
else {
|
|
317
|
+
const current = f[key];
|
|
318
|
+
if (!current)
|
|
319
|
+
return f;
|
|
320
|
+
const filtered = current.filter((v) => v !== value);
|
|
321
|
+
next = { ...f, [key]: filtered.length ? filtered : undefined };
|
|
322
|
+
}
|
|
323
|
+
next.page = 1;
|
|
324
|
+
return next;
|
|
325
|
+
}
|
|
326
|
+
/**
|
|
327
|
+
* Build the full list of facet values from the items array, preserving
|
|
328
|
+
* a sensible order (frequency desc, then alphabetical for ties).
|
|
329
|
+
*/
|
|
330
|
+
export function buildFacets(items) {
|
|
320
331
|
const counts = {
|
|
321
332
|
stack: new Map(),
|
|
322
333
|
platform: new Map(),
|
|
@@ -324,24 +335,20 @@ export function buildFacets(records) {
|
|
|
324
335
|
label: new Map(),
|
|
325
336
|
license: new Map(),
|
|
326
337
|
};
|
|
327
|
-
for (const
|
|
328
|
-
|
|
329
|
-
|
|
330
|
-
|
|
331
|
-
|
|
332
|
-
|
|
333
|
-
|
|
338
|
+
for (const a of items) {
|
|
339
|
+
if (a.kind === "project") {
|
|
340
|
+
const allStacks = new Set([a.stack, ...a.stacks].filter((stack) => Boolean(stack)));
|
|
341
|
+
for (const s of allStacks)
|
|
342
|
+
counts.stack.set(s, (counts.stack.get(s) ?? 0) + 1);
|
|
343
|
+
for (const p of a.platforms)
|
|
344
|
+
counts.platform.set(p, (counts.platform.get(p) ?? 0) + 1);
|
|
345
|
+
const license = a.github?.license;
|
|
346
|
+
if (license)
|
|
347
|
+
counts.license.set(license, (counts.license.get(license) ?? 0) + 1);
|
|
334
348
|
}
|
|
335
|
-
|
|
336
|
-
|
|
337
|
-
}
|
|
338
|
-
for (const l of r.curation?.labels ?? []) {
|
|
349
|
+
counts.category.set(a.category, (counts.category.get(a.category) ?? 0) + 1);
|
|
350
|
+
for (const l of a.curation?.labels ?? [])
|
|
339
351
|
counts.label.set(l, (counts.label.get(l) ?? 0) + 1);
|
|
340
|
-
}
|
|
341
|
-
const license = r.github?.license;
|
|
342
|
-
if (license) {
|
|
343
|
-
counts.license.set(license, (counts.license.get(license) ?? 0) + 1);
|
|
344
|
-
}
|
|
345
352
|
}
|
|
346
353
|
const sortByCountThenName = (m) => [...m.entries()]
|
|
347
354
|
.sort((a, b) => b[1] - a[1] || a[0].localeCompare(b[0]))
|
|
@@ -354,4 +361,12 @@ export function buildFacets(records) {
|
|
|
354
361
|
licenses: sortByCountThenName(counts.license),
|
|
355
362
|
};
|
|
356
363
|
}
|
|
364
|
+
// ── V1-published API aliases ─────────────────────────────────────────
|
|
365
|
+
// The published `@grove-dev/astro@0.2.10` package exports these
|
|
366
|
+
// under different names (`filterApps` for the filter function and
|
|
367
|
+
// `AppsFilters` for the filter-state type). Re-export them under
|
|
368
|
+
// the V1 names so templates can use either spelling, and so the
|
|
369
|
+
// template's `apps/index.astro` (built against the published API)
|
|
370
|
+
// also works against the local workspace source.
|
|
371
|
+
export const filterApps = filterItems;
|
|
357
372
|
//# sourceMappingURL=search.js.map
|
package/dist/lib/search.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"search.js","sourceRoot":"","sources":["../../src/lib/search.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"search.js","sourceRoot":"","sources":["../../src/lib/search.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,25 +1,11 @@
|
|
|
1
|
-
|
|
2
|
-
* Build-time helpers that compute taxonomy counts from an array of
|
|
3
|
-
* records. Generic over any object that carries the index-payload
|
|
4
|
-
* fields the UI cares about (`category`, `stack` / `stacks`,
|
|
5
|
-
* `curation.labels`). No filesystem / data import — consumers pass
|
|
6
|
-
* the records explicitly so this stays testable.
|
|
7
|
-
*
|
|
8
|
-
* All functions are synchronous and cheap — they're called from
|
|
9
|
-
* Astro page frontmatter at build time, never on the client.
|
|
10
|
-
*/
|
|
11
|
-
export interface Taxonomable {
|
|
1
|
+
type TaxonomyRecord = {
|
|
12
2
|
category?: string;
|
|
13
3
|
stack?: string;
|
|
14
4
|
stacks?: string[];
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
export
|
|
21
|
-
/** Number of records per primary stack (combines `stack` and `stacks`). */
|
|
22
|
-
export declare function countByStack<T extends Taxonomable>(records: T[]): Map<string, number>;
|
|
23
|
-
/** Number of records per curated label (curation.labels). */
|
|
24
|
-
export declare function countByLabel<T extends Taxonomable>(records: T[]): Map<string, number>;
|
|
5
|
+
};
|
|
6
|
+
/** Number of items in the directory, per category name. */
|
|
7
|
+
export declare function countByCategory(items?: TaxonomyRecord[]): Map<string, number>;
|
|
8
|
+
/** Number of items in the directory, per primary stack. */
|
|
9
|
+
export declare function countByStack(items?: TaxonomyRecord[]): Map<string, number>;
|
|
10
|
+
export {};
|
|
25
11
|
//# sourceMappingURL=taxonomy-counts.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"taxonomy-counts.d.ts","sourceRoot":"","sources":["../../src/lib/taxonomy-counts.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"taxonomy-counts.d.ts","sourceRoot":"","sources":["../../src/lib/taxonomy-counts.ts"],"names":[],"mappings":"AAAA,KAAK,cAAc,GAAG;IACpB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;CACnB,CAAC;AAEF,2DAA2D;AAC3D,wBAAgB,eAAe,CAAC,KAAK,GAAE,cAAc,EAAO,GAAG,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAOjF;AAED,2DAA2D;AAC3D,wBAAgB,YAAY,CAAC,KAAK,GAAE,cAAc,EAAO,GAAG,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAQ9E"}
|
|
@@ -1,40 +1,21 @@
|
|
|
1
|
-
/**
|
|
2
|
-
|
|
3
|
-
* records. Generic over any object that carries the index-payload
|
|
4
|
-
* fields the UI cares about (`category`, `stack` / `stacks`,
|
|
5
|
-
* `curation.labels`). No filesystem / data import — consumers pass
|
|
6
|
-
* the records explicitly so this stays testable.
|
|
7
|
-
*
|
|
8
|
-
* All functions are synchronous and cheap — they're called from
|
|
9
|
-
* Astro page frontmatter at build time, never on the client.
|
|
10
|
-
*/
|
|
11
|
-
/** Number of records per category name. */
|
|
12
|
-
export function countByCategory(records) {
|
|
1
|
+
/** Number of items in the directory, per category name. */
|
|
2
|
+
export function countByCategory(items = []) {
|
|
13
3
|
const m = new Map();
|
|
14
|
-
for (const
|
|
15
|
-
const k =
|
|
4
|
+
for (const a of items) {
|
|
5
|
+
const k = a.category || "Other";
|
|
16
6
|
m.set(k, (m.get(k) ?? 0) + 1);
|
|
17
7
|
}
|
|
18
8
|
return m;
|
|
19
9
|
}
|
|
20
|
-
/** Number of
|
|
21
|
-
export function countByStack(
|
|
10
|
+
/** Number of items in the directory, per primary stack. */
|
|
11
|
+
export function countByStack(items = []) {
|
|
22
12
|
const m = new Map();
|
|
23
|
-
for (const
|
|
24
|
-
const
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
return m;
|
|
30
|
-
}
|
|
31
|
-
/** Number of records per curated label (curation.labels). */
|
|
32
|
-
export function countByLabel(records) {
|
|
33
|
-
const m = new Map();
|
|
34
|
-
for (const r of records) {
|
|
35
|
-
for (const l of r.curation?.labels ?? []) {
|
|
36
|
-
m.set(l, (m.get(l) ?? 0) + 1);
|
|
37
|
-
}
|
|
13
|
+
for (const a of items) {
|
|
14
|
+
const stacks = new Set([a.stack, ...(a.stacks ?? [])].filter(Boolean));
|
|
15
|
+
if (stacks.size === 0)
|
|
16
|
+
stacks.add("Other");
|
|
17
|
+
for (const stack of stacks)
|
|
18
|
+
m.set(stack, (m.get(stack) ?? 0) + 1);
|
|
38
19
|
}
|
|
39
20
|
return m;
|
|
40
21
|
}
|