@grove-dev/core 0.6.1 → 0.8.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 +100 -23
- package/dist/audit.d.ts +8 -3
- package/dist/audit.d.ts.map +1 -1
- package/dist/audit.js +29 -8
- package/dist/audit.js.map +1 -1
- package/dist/awesome-readme.d.ts.map +1 -1
- package/dist/awesome-readme.js +31 -31
- package/dist/awesome-readme.js.map +1 -1
- package/dist/build-data.d.ts +1 -1
- package/dist/build-data.d.ts.map +1 -1
- package/dist/build-data.js +132 -74
- package/dist/build-data.js.map +1 -1
- package/dist/collections-io.d.ts +1 -1
- package/dist/collections-io.js +8 -8
- package/dist/collections-io.js.map +1 -1
- package/dist/collections.d.ts +2 -2
- package/dist/collections.d.ts.map +1 -1
- package/dist/collections.js +8 -9
- package/dist/collections.js.map +1 -1
- package/dist/collector.d.ts +1 -1
- package/dist/collector.d.ts.map +1 -1
- package/dist/collector.js +2 -2
- package/dist/collector.js.map +1 -1
- package/dist/config.d.ts +1 -1
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +4 -4
- package/dist/config.js.map +1 -1
- package/dist/content-body.d.ts.map +1 -1
- package/dist/content-body.js +22 -22
- package/dist/content-body.js.map +1 -1
- package/dist/contributors.d.ts.map +1 -1
- package/dist/contributors.js +22 -23
- package/dist/contributors.js.map +1 -1
- package/dist/decisions.d.ts +1 -1
- package/dist/decisions.d.ts.map +1 -1
- package/dist/decisions.js +18 -20
- package/dist/decisions.js.map +1 -1
- package/dist/directory-client.d.ts +6 -4
- package/dist/directory-client.d.ts.map +1 -1
- package/dist/directory-client.js +9 -4
- package/dist/directory-client.js.map +1 -1
- package/dist/directory-facets.d.ts +1 -1
- package/dist/directory-facets.d.ts.map +1 -1
- package/dist/directory-facets.js +35 -17
- package/dist/directory-facets.js.map +1 -1
- package/dist/directory-filter-keys.d.ts +53 -0
- package/dist/directory-filter-keys.d.ts.map +1 -0
- package/dist/directory-filter-keys.js +66 -0
- package/dist/directory-filter-keys.js.map +1 -0
- package/dist/directory-format.d.ts.map +1 -1
- package/dist/directory-format.js +15 -15
- package/dist/directory-format.js.map +1 -1
- package/dist/directory-lenses.d.ts +1 -1
- package/dist/directory-lenses.d.ts.map +1 -1
- package/dist/directory-lenses.js +66 -61
- package/dist/directory-lenses.js.map +1 -1
- package/dist/directory-repo.js +2 -2
- package/dist/directory-scores.d.ts.map +1 -1
- package/dist/directory-scores.js +25 -25
- package/dist/directory-scores.js.map +1 -1
- package/dist/directory-search.d.ts +4 -4
- package/dist/directory-search.d.ts.map +1 -1
- package/dist/directory-search.js +99 -107
- package/dist/directory-search.js.map +1 -1
- package/dist/directory-taxonomy.d.ts +1 -1
- package/dist/directory-taxonomy.d.ts.map +1 -1
- package/dist/directory-taxonomy.js +2 -2
- package/dist/directory-taxonomy.js.map +1 -1
- package/dist/enrich.d.ts.map +1 -1
- package/dist/enrich.js +15 -12
- package/dist/enrich.js.map +1 -1
- package/dist/github-client.js +6 -6
- package/dist/github.d.ts +9 -1
- package/dist/github.d.ts.map +1 -1
- package/dist/github.js +26 -14
- package/dist/github.js.map +1 -1
- package/dist/health.d.ts +1 -1
- package/dist/health.js +44 -44
- package/dist/host.js +2 -2
- package/dist/importer.d.ts +2 -2
- package/dist/importer.d.ts.map +1 -1
- package/dist/importer.js +1 -1
- package/dist/importer.js.map +1 -1
- package/dist/index.d.ts +66 -63
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +86 -75
- package/dist/index.js.map +1 -1
- package/dist/io.js +8 -8
- package/dist/llms.d.ts +1 -1
- package/dist/llms.d.ts.map +1 -1
- package/dist/llms.js +69 -65
- package/dist/llms.js.map +1 -1
- package/dist/markdown.d.ts.map +1 -1
- package/dist/markdown.js.map +1 -1
- package/dist/og-image.d.ts +8 -8
- package/dist/og-image.d.ts.map +1 -1
- package/dist/og-image.js +91 -84
- package/dist/og-image.js.map +1 -1
- package/dist/page-document.d.ts +8 -8
- package/dist/page-document.d.ts.map +1 -1
- package/dist/page-document.js +48 -54
- package/dist/page-document.js.map +1 -1
- package/dist/parseReadme.d.ts.map +1 -1
- package/dist/parseReadme.js +9 -11
- package/dist/parseReadme.js.map +1 -1
- package/dist/prepare.d.ts +5 -5
- package/dist/prepare.d.ts.map +1 -1
- package/dist/prepare.js +46 -35
- package/dist/prepare.js.map +1 -1
- package/dist/related.d.ts +1 -1
- package/dist/schema.d.ts +21 -21
- package/dist/schema.d.ts.map +1 -1
- package/dist/schema.js +134 -141
- package/dist/schema.js.map +1 -1
- package/dist/site-artifacts.js +1 -1
- package/dist/sitemap.d.ts +2 -2
- package/dist/sitemap.d.ts.map +1 -1
- package/dist/sitemap.js +39 -39
- package/dist/sitemap.js.map +1 -1
- package/dist/slug.js +4 -4
- package/dist/sync-icons.js +15 -15
- package/dist/taxonomy-inference.d.ts +27 -0
- package/dist/taxonomy-inference.d.ts.map +1 -0
- package/dist/taxonomy-inference.js +38 -0
- package/dist/taxonomy-inference.js.map +1 -0
- package/dist/validate.d.ts +3 -3
- package/dist/validate.d.ts.map +1 -1
- package/dist/validate.js +56 -58
- package/dist/validate.js.map +1 -1
- package/dist/yaml.d.ts +47 -0
- package/dist/yaml.d.ts.map +1 -0
- package/dist/yaml.js +56 -0
- package/dist/yaml.js.map +1 -0
- package/package.json +1 -1
package/dist/content-body.js
CHANGED
|
@@ -40,9 +40,9 @@
|
|
|
40
40
|
* "what does this file do?" confusion that already exists between
|
|
41
41
|
* `parseReadme.ts` and `markdown.ts`.
|
|
42
42
|
*/
|
|
43
|
-
import { existsSync, readFileSync } from
|
|
44
|
-
import { resolve } from
|
|
45
|
-
import { uniqueSlug } from
|
|
43
|
+
import { existsSync, readFileSync } from 'node:fs';
|
|
44
|
+
import { resolve } from 'node:path';
|
|
45
|
+
import { uniqueSlug } from './slug.js';
|
|
46
46
|
// ── Path resolution ──────────────────────────────────────────────────
|
|
47
47
|
/**
|
|
48
48
|
* Default candidate roots tried in order when resolving a content
|
|
@@ -62,7 +62,7 @@ function defaultCandidates(contentPath) {
|
|
|
62
62
|
return [
|
|
63
63
|
resolve(contentPath),
|
|
64
64
|
resolve(process.cwd(), contentPath),
|
|
65
|
-
resolve(process.cwd(),
|
|
65
|
+
resolve(process.cwd(), 'apps', 'example', contentPath),
|
|
66
66
|
];
|
|
67
67
|
}
|
|
68
68
|
/**
|
|
@@ -91,12 +91,12 @@ export function resolveContentPath(contentPath, candidates) {
|
|
|
91
91
|
*/
|
|
92
92
|
export function stripFrontmatter(text) {
|
|
93
93
|
const lines = text.split(/\r?\n/);
|
|
94
|
-
if (lines[0]?.trim() !==
|
|
94
|
+
if (lines[0]?.trim() !== '---')
|
|
95
95
|
return text;
|
|
96
|
-
const close = lines.slice(1, 200).findIndex((l) => l.trim() ===
|
|
96
|
+
const close = lines.slice(1, 200).findIndex((l) => l.trim() === '---');
|
|
97
97
|
if (close < 0)
|
|
98
98
|
return text;
|
|
99
|
-
return lines.slice(close + 2).join(
|
|
99
|
+
return lines.slice(close + 2).join('\n');
|
|
100
100
|
}
|
|
101
101
|
/**
|
|
102
102
|
* Read a record's content file from disk and split it into
|
|
@@ -108,19 +108,19 @@ export function readContentFile(contentPath, candidates) {
|
|
|
108
108
|
return null;
|
|
109
109
|
let raw;
|
|
110
110
|
try {
|
|
111
|
-
raw = readFileSync(found,
|
|
111
|
+
raw = readFileSync(found, 'utf8');
|
|
112
112
|
}
|
|
113
113
|
catch {
|
|
114
114
|
return null;
|
|
115
115
|
}
|
|
116
116
|
const lines = raw.split(/\r?\n/);
|
|
117
|
-
let frontmatter =
|
|
117
|
+
let frontmatter = '';
|
|
118
118
|
let body = raw;
|
|
119
|
-
if (lines[0]?.trim() ===
|
|
120
|
-
const close = lines.slice(1, 200).findIndex((l) => l.trim() ===
|
|
119
|
+
if (lines[0]?.trim() === '---') {
|
|
120
|
+
const close = lines.slice(1, 200).findIndex((l) => l.trim() === '---');
|
|
121
121
|
if (close >= 0) {
|
|
122
|
-
frontmatter = lines.slice(1, close + 1).join(
|
|
123
|
-
body = lines.slice(close + 2).join(
|
|
122
|
+
frontmatter = lines.slice(1, close + 1).join('\n');
|
|
123
|
+
body = lines.slice(close + 2).join('\n');
|
|
124
124
|
}
|
|
125
125
|
}
|
|
126
126
|
return { body, frontmatter, path: found };
|
|
@@ -149,11 +149,11 @@ export function readContentFile(contentPath, candidates) {
|
|
|
149
149
|
export function headingSlug(text) {
|
|
150
150
|
return text
|
|
151
151
|
.toLowerCase()
|
|
152
|
-
.replace(/[‘’]/g,
|
|
153
|
-
.replace(/[^a-z0-9\s-]/g,
|
|
154
|
-
.replace(/\s+/g,
|
|
155
|
-
.replace(/-+/g,
|
|
156
|
-
.replace(/^-|-$/g,
|
|
152
|
+
.replace(/[‘’]/g, '')
|
|
153
|
+
.replace(/[^a-z0-9\s-]/g, '')
|
|
154
|
+
.replace(/\s+/g, '-')
|
|
155
|
+
.replace(/-+/g, '-')
|
|
156
|
+
.replace(/^-|-$/g, '');
|
|
157
157
|
}
|
|
158
158
|
/**
|
|
159
159
|
* Pull a flat list of `{ text, id, depth }` out of a Markdown body,
|
|
@@ -170,11 +170,11 @@ export function extractToc(body, options = {}) {
|
|
|
170
170
|
// becomes a phantom TOC entry — the markdown renderer won't emit a
|
|
171
171
|
// heading (or an id) for it, which would leave a dead anchor link.
|
|
172
172
|
let inFence = false;
|
|
173
|
-
let fenceMarker =
|
|
173
|
+
let fenceMarker = '';
|
|
174
174
|
for (const line of lines) {
|
|
175
175
|
const fence = line.match(/^\s*(```+|~~~+)/);
|
|
176
176
|
if (fence?.[1]) {
|
|
177
|
-
const marker = fence[1][0] ===
|
|
177
|
+
const marker = fence[1][0] === '`' ? '```' : '~~~';
|
|
178
178
|
if (!inFence) {
|
|
179
179
|
inFence = true;
|
|
180
180
|
fenceMarker = marker;
|
|
@@ -192,10 +192,10 @@ export function extractToc(body, options = {}) {
|
|
|
192
192
|
const depth = m[1].length;
|
|
193
193
|
if (depth > maxDepth)
|
|
194
194
|
continue;
|
|
195
|
-
const text = m[2].replace(/[`*_~\[\]()]/g,
|
|
195
|
+
const text = m[2].replace(/[`*_~\[\]()]/g, '').trim();
|
|
196
196
|
if (!text)
|
|
197
197
|
continue;
|
|
198
|
-
const id = uniqueSlug(headingSlug(text) ||
|
|
198
|
+
const id = uniqueSlug(headingSlug(text) || 'section', seen);
|
|
199
199
|
out.push({ text, id, depth });
|
|
200
200
|
}
|
|
201
201
|
return out;
|
package/dist/content-body.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"content-body.js","sourceRoot":"","sources":["../src/content-body.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAyCG;AAEH,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACnD,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AAEvC,wEAAwE;AAExE;;;;;;;;;;;;;GAaG;AACH,SAAS,iBAAiB,CAAC,WAAmB;IAC5C,OAAO;QACL,OAAO,CAAC,WAAW,CAAC;QACpB,OAAO,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,WAAW,CAAC;QACnC,OAAO,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,MAAM,EAAE,SAAS,EAAE,WAAW,CAAC;KACvD,CAAC;AACJ,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,kBAAkB,
|
|
1
|
+
{"version":3,"file":"content-body.js","sourceRoot":"","sources":["../src/content-body.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"contributors.d.ts","sourceRoot":"","sources":["../src/contributors.ts"],"names":[],"mappings":"AAGA,MAAM,WAAW,WAAW;IAC1B,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,aAAa,EAAE,MAAM,CAAC;CACvB;AAED,MAAM,WAAW,uBAAuB;IACtC,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,qEAAqE;IACrE,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,OAAO,KAAK,CAAC;IACzB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,qBAAqB;IACpC,UAAU,EAAE,MAAM,CAAC;IACnB,aAAa,EAAE,MAAM,CAAC;IACtB,YAAY,EAAE,MAAM,CAAC;IACrB,YAAY,EAAE,MAAM,CAAC;IACrB,MAAM,EAAE,MAAM,CAAC;CAChB;AAiBD,wBAAsB,gBAAgB,CACpC,OAAO,GAAE,uBAA4B,GACpC,OAAO,CAAC,qBAAqB,CAAC,
|
|
1
|
+
{"version":3,"file":"contributors.d.ts","sourceRoot":"","sources":["../src/contributors.ts"],"names":[],"mappings":"AAGA,MAAM,WAAW,WAAW;IAC1B,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,aAAa,EAAE,MAAM,CAAC;CACvB;AAED,MAAM,WAAW,uBAAuB;IACtC,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,qEAAqE;IACrE,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,OAAO,KAAK,CAAC;IACzB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,qBAAqB;IACpC,UAAU,EAAE,MAAM,CAAC;IACnB,aAAa,EAAE,MAAM,CAAC;IACtB,YAAY,EAAE,MAAM,CAAC;IACrB,YAAY,EAAE,MAAM,CAAC;IACrB,MAAM,EAAE,MAAM,CAAC;CAChB;AAiBD,wBAAsB,gBAAgB,CACpC,OAAO,GAAE,uBAA4B,GACpC,OAAO,CAAC,qBAAqB,CAAC,CAgIhC"}
|
package/dist/contributors.js
CHANGED
|
@@ -1,39 +1,39 @@
|
|
|
1
|
-
import { mkdir, readFile, writeFile } from
|
|
2
|
-
import { dirname, resolve } from
|
|
1
|
+
import { mkdir, readFile, writeFile } from 'node:fs/promises';
|
|
2
|
+
import { dirname, resolve } from 'node:path';
|
|
3
3
|
function ownerRepo(record) {
|
|
4
4
|
const github = record.github;
|
|
5
5
|
const fullName = github?.fullName;
|
|
6
|
-
if (fullName?.includes(
|
|
7
|
-
const [owner, repo] = fullName.split(
|
|
6
|
+
if (fullName?.includes('/')) {
|
|
7
|
+
const [owner, repo] = fullName.split('/', 2);
|
|
8
8
|
if (owner && repo)
|
|
9
9
|
return { owner, repo };
|
|
10
10
|
}
|
|
11
11
|
const links = record.links;
|
|
12
|
-
const repoUrl = String(record.repoUrl ?? links?.github ??
|
|
12
|
+
const repoUrl = String(record.repoUrl ?? links?.github ?? '');
|
|
13
13
|
const match = /github\.com\/([^/]+)\/([^/?#]+)/i.exec(repoUrl);
|
|
14
14
|
const owner = match?.[1];
|
|
15
15
|
const repo = match?.[2];
|
|
16
|
-
return owner && repo ? { owner, repo: repo.replace(/\.git$/,
|
|
16
|
+
return owner && repo ? { owner, repo: repo.replace(/\.git$/, '') } : null;
|
|
17
17
|
}
|
|
18
18
|
export async function syncContributors(options = {}) {
|
|
19
19
|
const cwd = options.cwd ?? process.cwd();
|
|
20
|
-
const generatedDir = options.generatedDir ??
|
|
21
|
-
const indexPath = resolve(cwd, generatedDir,
|
|
22
|
-
const outputPath = resolve(cwd, generatedDir,
|
|
23
|
-
const repoStatsPath = resolve(cwd, generatedDir,
|
|
24
|
-
const siteConfigPath = resolve(cwd, generatedDir,
|
|
25
|
-
const siteConfig = JSON.parse(await readFile(siteConfigPath,
|
|
26
|
-
const repoUrl = options.repoUrl ?? siteConfig.repoUrl ??
|
|
20
|
+
const generatedDir = options.generatedDir ?? 'data/generated';
|
|
21
|
+
const indexPath = resolve(cwd, generatedDir, 'records.index.json');
|
|
22
|
+
const outputPath = resolve(cwd, generatedDir, 'contributors.json');
|
|
23
|
+
const repoStatsPath = resolve(cwd, generatedDir, 'repo-stats.json');
|
|
24
|
+
const siteConfigPath = resolve(cwd, generatedDir, 'site-config.json');
|
|
25
|
+
const siteConfig = JSON.parse(await readFile(siteConfigPath, 'utf8'));
|
|
26
|
+
const repoUrl = options.repoUrl ?? siteConfig.repoUrl ?? '';
|
|
27
27
|
const ref = ownerRepo({ repoUrl });
|
|
28
28
|
if (!ref) {
|
|
29
29
|
throw new Error(`Cannot sync community metadata: ${indexPath} has no valid site repository URL.`);
|
|
30
30
|
}
|
|
31
31
|
const fetchImpl = options.fetchImpl ?? fetch;
|
|
32
|
-
const token = options.token ?? process.env.GH_TOKEN ?? process.env.GITHUB_TOKEN ??
|
|
32
|
+
const token = options.token ?? process.env.GH_TOKEN ?? process.env.GITHUB_TOKEN ?? '';
|
|
33
33
|
const headers = {
|
|
34
|
-
Accept:
|
|
35
|
-
|
|
36
|
-
|
|
34
|
+
Accept: 'application/vnd.github+json',
|
|
35
|
+
'User-Agent': 'grove-sync-contributors',
|
|
36
|
+
'X-GitHub-Api-Version': '2022-11-28',
|
|
37
37
|
...(token ? { Authorization: `Bearer ${token}` } : {}),
|
|
38
38
|
};
|
|
39
39
|
const byUsername = new Map();
|
|
@@ -57,7 +57,7 @@ export async function syncContributors(options = {}) {
|
|
|
57
57
|
// consumer sites and visually present as project members.
|
|
58
58
|
// Filter them here so the cached `data/generated/contributors.json`
|
|
59
59
|
// never lists automation as humans.
|
|
60
|
-
if (entry.login.endsWith(
|
|
60
|
+
if (entry.login.endsWith('[bot]'))
|
|
61
61
|
continue;
|
|
62
62
|
byUsername.set(entry.login, {
|
|
63
63
|
username: entry.login,
|
|
@@ -74,15 +74,14 @@ export async function syncContributors(options = {}) {
|
|
|
74
74
|
failed += 1;
|
|
75
75
|
}
|
|
76
76
|
const repository = repositoryResponse.ok
|
|
77
|
-
? await repositoryResponse.json()
|
|
77
|
+
? (await repositoryResponse.json())
|
|
78
78
|
: {};
|
|
79
|
-
const contributors = [...byUsername.values()].sort((a, b) => b.contributions - a.contributions ||
|
|
80
|
-
a.username.localeCompare(b.username));
|
|
79
|
+
const contributors = [...byUsername.values()].sort((a, b) => b.contributions - a.contributions || a.username.localeCompare(b.username));
|
|
81
80
|
await mkdir(dirname(outputPath), { recursive: true });
|
|
82
81
|
await writeFile(outputPath, JSON.stringify({
|
|
83
82
|
generatedAt: options.generatedAt ?? new Date().toISOString(),
|
|
84
83
|
contributors,
|
|
85
|
-
}, null, 2),
|
|
84
|
+
}, null, 2), 'utf8');
|
|
86
85
|
await writeFile(repoStatsPath, JSON.stringify({
|
|
87
86
|
repoUrl: `https://github.com/${ref.owner}/${ref.repo}`,
|
|
88
87
|
stars: repository.stargazers_count ?? 0,
|
|
@@ -92,7 +91,7 @@ export async function syncContributors(options = {}) {
|
|
|
92
91
|
contributors: contributors.length,
|
|
93
92
|
defaultBranch: repository.default_branch,
|
|
94
93
|
pushedAt: repository.pushed_at,
|
|
95
|
-
}, null, 2),
|
|
94
|
+
}, null, 2), 'utf8');
|
|
96
95
|
return {
|
|
97
96
|
outputPath,
|
|
98
97
|
repoStatsPath,
|
package/dist/contributors.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"contributors.js","sourceRoot":"","sources":["../src/contributors.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAC9D,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AA2B7C,SAAS,SAAS,CAAC,MAA+B;IAChD,MAAM,MAAM,GAAG,MAAM,CAAC,MAA2C,CAAC;IAClE,MAAM,QAAQ,GAAG,MAAM,EAAE,QAAQ,CAAC;IAClC,IAAI,QAAQ,EAAE,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;QAC5B,MAAM,CAAC,KAAK,EAAE,IAAI,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;QAC7C,IAAI,KAAK,IAAI,IAAI;YAAE,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC;IAC5C,CAAC;IACD,MAAM,KAAK,GAAG,MAAM,CAAC,KAAwC,CAAC;IAC9D,MAAM,OAAO,GAAG,MAAM,CAAC,MAAM,CAAC,OAAO,IAAI,KAAK,EAAE,MAAM,IAAI,EAAE,CAAC,CAAC;IAC9D,MAAM,KAAK,GAAG,kCAAkC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IAC/D,MAAM,KAAK,GAAG,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC;IACzB,MAAM,IAAI,GAAG,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC;IACxB,OAAO,KAAK,IAAI,IAAI,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;AAC5E,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,gBAAgB,CACpC,UAAmC,EAAE;IAErC,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,IAAI,OAAO,CAAC,GAAG,EAAE,CAAC;IACzC,MAAM,YAAY,GAAG,OAAO,CAAC,YAAY,IAAI,gBAAgB,CAAC;IAC9D,MAAM,SAAS,GAAG,OAAO,CAAC,GAAG,EAAE,YAAY,EAAE,oBAAoB,CAAC,CAAC;IACnE,MAAM,UAAU,GAAG,OAAO,CAAC,GAAG,EAAE,YAAY,EAAE,mBAAmB,CAAC,CAAC;IACnE,MAAM,aAAa,GAAG,OAAO,CAAC,GAAG,EAAE,YAAY,EAAE,iBAAiB,CAAC,CAAC;IACpE,MAAM,cAAc,GAAG,OAAO,CAAC,GAAG,EAAE,YAAY,EAAE,kBAAkB,CAAC,CAAC;IACtE,MAAM,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAC,CAEnE,CAAC;IACF,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO,IAAI,UAAU,CAAC,OAAO,IAAI,EAAE,CAAC;IAC5D,MAAM,GAAG,GAAG,SAAS,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC;IACnC,IAAI,CAAC,GAAG,EAAE,CAAC;QACT,MAAM,IAAI,KAAK,CACb,mCAAmC,SAAS,oCAAoC,CACjF,CAAC;IACJ,CAAC;IACD,MAAM,SAAS,GAAG,OAAO,CAAC,SAAS,IAAI,KAAK,CAAC;IAC7C,MAAM,KAAK,
|
|
1
|
+
{"version":3,"file":"contributors.js","sourceRoot":"","sources":["../src/contributors.ts"],"names":[],"mappings":"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"}
|
package/dist/decisions.d.ts
CHANGED
package/dist/decisions.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"decisions.d.ts","sourceRoot":"","sources":["../src/decisions.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"decisions.d.ts","sourceRoot":"","sources":["../src/decisions.ts"],"names":[],"mappings":"AAIA,OAAO,EAAiB,KAAK,WAAW,EAAE,KAAK,QAAQ,EAAqB,MAAM,aAAa,CAAC;AAEhG,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,EAAE,MAAM,CAAC;IACZ,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,KAAK,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,aAAa;IAC5B,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,eAAe,EAAE,MAAM,CAAC;IACxB,UAAU,EAAE,gBAAgB,EAAE,CAAC;CAChC;AAuBD,uEAAuE;AACvE,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,QAAQ,EAAE,GAAG,QAAQ,EAAE,CAOrE;AAED;;;;;;GAMG;AACH,wBAAsB,YAAY,CAChC,GAAG,SAAgB,EACnB,MAAM,CAAC,EAAE,WAAW,GACnB,OAAO,CAAC;IAAE,MAAM,EAAE,aAAa,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,CAAC,CAmClD"}
|
package/dist/decisions.js
CHANGED
|
@@ -1,21 +1,19 @@
|
|
|
1
|
-
import { mkdir, readdir, readFile, writeFile } from
|
|
2
|
-
import { basename, join, resolve } from
|
|
3
|
-
import { parse as parseYaml } from
|
|
4
|
-
import {
|
|
5
|
-
import {
|
|
1
|
+
import { mkdir, readdir, readFile, writeFile } from 'node:fs/promises';
|
|
2
|
+
import { basename, join, resolve } from 'node:path';
|
|
3
|
+
import { parse as parseYaml } from 'yaml';
|
|
4
|
+
import { loadConfig } from './config.js';
|
|
5
|
+
import { blueprintKind, recordsFileSchema } from './schema.js';
|
|
6
6
|
function toCandidate(record) {
|
|
7
|
-
const name = record.kind ===
|
|
8
|
-
const url = record.links?.github ?? record.links?.website ?? record.links?.source ??
|
|
9
|
-
const health = record
|
|
10
|
-
|
|
11
|
-
const gh = record
|
|
12
|
-
.github?.repository;
|
|
7
|
+
const name = record.kind === 'resource' ? record.title : record.name;
|
|
8
|
+
const url = record.links?.github ?? record.links?.website ?? record.links?.source ?? '';
|
|
9
|
+
const health = record.health;
|
|
10
|
+
const gh = record.github?.repository;
|
|
13
11
|
return {
|
|
14
12
|
slug: record.slug,
|
|
15
13
|
name,
|
|
16
14
|
url,
|
|
17
|
-
status: health?.status ??
|
|
18
|
-
tier: health?.tier ??
|
|
15
|
+
status: health?.status ?? 'unknown',
|
|
16
|
+
tier: health?.tier ?? 'experimental',
|
|
19
17
|
staleReason: health?.staleReason ?? null,
|
|
20
18
|
lastCommitAt: gh?.pushed_at ?? null,
|
|
21
19
|
stars: gh?.stargazers_count ?? 0,
|
|
@@ -27,7 +25,7 @@ export function pickCleanupCandidates(records) {
|
|
|
27
25
|
const health = r.health;
|
|
28
26
|
if (health?.cleanupCandidate)
|
|
29
27
|
return true;
|
|
30
|
-
if (health?.status ===
|
|
28
|
+
if (health?.status === 'unknown' || health?.status === 'needs_review')
|
|
31
29
|
return true;
|
|
32
30
|
return false;
|
|
33
31
|
});
|
|
@@ -46,12 +44,12 @@ export async function cleanupStale(cwd = process.cwd(), config) {
|
|
|
46
44
|
await mkdir(outDir, { recursive: true });
|
|
47
45
|
const expectedKind = blueprintKind[cfg.blueprint];
|
|
48
46
|
const entries = await readdir(recordsDir).catch(() => []);
|
|
49
|
-
const files = entries.filter((f) => f.endsWith(
|
|
47
|
+
const files = entries.filter((f) => f.endsWith('.yml')).sort();
|
|
50
48
|
const records = [];
|
|
51
49
|
for (const file of files) {
|
|
52
|
-
const fileSlug = basename(file,
|
|
53
|
-
const text = await readFile(join(recordsDir, file),
|
|
54
|
-
const raw = (parseYaml(text, { schema:
|
|
50
|
+
const fileSlug = basename(file, '.yml');
|
|
51
|
+
const text = await readFile(join(recordsDir, file), 'utf8');
|
|
52
|
+
const raw = (parseYaml(text, { schema: 'core' }) ?? {});
|
|
55
53
|
if (!raw.kind)
|
|
56
54
|
raw.kind = expectedKind;
|
|
57
55
|
try {
|
|
@@ -70,8 +68,8 @@ export async function cleanupStale(cwd = process.cwd(), config) {
|
|
|
70
68
|
totalCandidates: candidates.length,
|
|
71
69
|
candidates,
|
|
72
70
|
};
|
|
73
|
-
const path = join(outDir,
|
|
74
|
-
await writeFile(path, JSON.stringify(report, null, 2),
|
|
71
|
+
const path = join(outDir, 'cleanup-report.json');
|
|
72
|
+
await writeFile(path, JSON.stringify(report, null, 2), 'utf8');
|
|
75
73
|
return { report, path };
|
|
76
74
|
}
|
|
77
75
|
//# sourceMappingURL=decisions.js.map
|
package/dist/decisions.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"decisions.js","sourceRoot":"","sources":["../src/decisions.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AACvE,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpD,OAAO,EAAE,KAAK,IAAI,SAAS,EAAE,MAAM,MAAM,CAAC;AAC1C,OAAO,
|
|
1
|
+
{"version":3,"file":"decisions.js","sourceRoot":"","sources":["../src/decisions.ts"],"names":[],"mappings":"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"}
|
|
@@ -5,8 +5,10 @@
|
|
|
5
5
|
* validation, and generation so client controllers can reuse Grove's
|
|
6
6
|
* canonical filter, sort, and lens rules without Node-only dependencies.
|
|
7
7
|
*/
|
|
8
|
-
export * from
|
|
9
|
-
export * from
|
|
10
|
-
export
|
|
11
|
-
export
|
|
8
|
+
export * from './directory-display.js';
|
|
9
|
+
export * from './directory-facets.js';
|
|
10
|
+
export type { DirectoryFilterGroupKey, DirectoryFilterLabel, DirectoryFilterParamKey, DirectoryTaxonomyKind, } from './directory-filter-keys.js';
|
|
11
|
+
export { DIRECTORY_FILTER_KEYS, DIRECTORY_FILTER_LABELS, DIRECTORY_TAXONOMY_KINDS, FACET_DIMENSION_FOR_KEY, isDirectoryFilterGroupKey, } from './directory-filter-keys.js';
|
|
12
|
+
export * from './directory-lenses.js';
|
|
13
|
+
export * from './directory-search.js';
|
|
12
14
|
//# sourceMappingURL=directory-client.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"directory-client.d.ts","sourceRoot":"","sources":["../src/directory-client.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,cAAc,wBAAwB,CAAC;AACvC,cAAc,uBAAuB,CAAC;AACtC,cAAc,uBAAuB,CAAC;AACtC,cAAc,uBAAuB,CAAC"}
|
|
1
|
+
{"version":3,"file":"directory-client.d.ts","sourceRoot":"","sources":["../src/directory-client.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,cAAc,wBAAwB,CAAC;AACvC,cAAc,uBAAuB,CAAC;AACtC,YAAY,EACV,uBAAuB,EACvB,oBAAoB,EACpB,uBAAuB,EACvB,qBAAqB,GACtB,MAAM,4BAA4B,CAAC;AAKpC,OAAO,EACL,qBAAqB,EACrB,uBAAuB,EACvB,wBAAwB,EACxB,uBAAuB,EACvB,yBAAyB,GAC1B,MAAM,4BAA4B,CAAC;AACpC,cAAc,uBAAuB,CAAC;AACtC,cAAc,uBAAuB,CAAC"}
|
package/dist/directory-client.js
CHANGED
|
@@ -5,8 +5,13 @@
|
|
|
5
5
|
* validation, and generation so client controllers can reuse Grove's
|
|
6
6
|
* canonical filter, sort, and lens rules without Node-only dependencies.
|
|
7
7
|
*/
|
|
8
|
-
export * from
|
|
9
|
-
export * from
|
|
10
|
-
|
|
11
|
-
|
|
8
|
+
export * from './directory-display.js';
|
|
9
|
+
export * from './directory-facets.js';
|
|
10
|
+
// Filter-key mapping is a pure data table (no IO, no schema deps).
|
|
11
|
+
// Re-exported here so client controllers like DirectoryIndexClient
|
|
12
|
+
// can import the same single source the server uses, instead of
|
|
13
|
+
// duplicating the keys/labels/kinds inline.
|
|
14
|
+
export { DIRECTORY_FILTER_KEYS, DIRECTORY_FILTER_LABELS, DIRECTORY_TAXONOMY_KINDS, FACET_DIMENSION_FOR_KEY, isDirectoryFilterGroupKey, } from './directory-filter-keys.js';
|
|
15
|
+
export * from './directory-lenses.js';
|
|
16
|
+
export * from './directory-search.js';
|
|
12
17
|
//# sourceMappingURL=directory-client.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"directory-client.js","sourceRoot":"","sources":["../src/directory-client.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,cAAc,wBAAwB,CAAC;AACvC,cAAc,uBAAuB,CAAC;
|
|
1
|
+
{"version":3,"file":"directory-client.js","sourceRoot":"","sources":["../src/directory-client.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,cAAc,wBAAwB,CAAC;AACvC,cAAc,uBAAuB,CAAC;AAOtC,mEAAmE;AACnE,mEAAmE;AACnE,gEAAgE;AAChE,4CAA4C;AAC5C,OAAO,EACL,qBAAqB,EACrB,uBAAuB,EACvB,wBAAwB,EACxB,uBAAuB,EACvB,yBAAyB,GAC1B,MAAM,4BAA4B,CAAC;AACpC,cAAc,uBAAuB,CAAC;AACtC,cAAc,uBAAuB,CAAC"}
|
|
@@ -12,7 +12,7 @@
|
|
|
12
12
|
export declare const FACET_IDS: readonly ["category", "stack", "platform", "tags", "license"];
|
|
13
13
|
export type FacetId = (typeof FACET_IDS)[number];
|
|
14
14
|
/** Keys of the `buildFacets()` result / `IndexFilters` dimensions. */
|
|
15
|
-
export type FacetDimension =
|
|
15
|
+
export type FacetDimension = 'categories' | 'stacks' | 'platforms' | 'tags' | 'licenses';
|
|
16
16
|
export interface FacetDef {
|
|
17
17
|
id: FacetId;
|
|
18
18
|
/** Key into `buildFacets()` output and `IndexFilters`. */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"directory-facets.d.ts","sourceRoot":"","sources":["../src/directory-facets.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,0EAA0E;AAC1E,eAAO,MAAM,SAAS,+DAAgE,CAAC;AACvF,MAAM,MAAM,OAAO,GAAG,CAAC,OAAO,SAAS,CAAC,CAAC,MAAM,CAAC,CAAC;AAEjD,sEAAsE;AACtE,MAAM,MAAM,cAAc,GAAG,YAAY,GAAG,QAAQ,GAAG,WAAW,GAAG,MAAM,GAAG,UAAU,CAAC;AAEzF,MAAM,WAAW,QAAQ;IACvB,EAAE,EAAE,OAAO,CAAC;IACZ,0DAA0D;IAC1D,SAAS,EAAE,cAAc,CAAC;IAC1B,kCAAkC;IAClC,KAAK,EAAE,MAAM,CAAC;IACd,4DAA4D;IAC5D,QAAQ,EAAE,MAAM,CAAC;IACjB,iEAAiE;IACjE,MAAM,EAAE,OAAO,CAAC;CACjB;AAED,eAAO,MAAM,UAAU,EAAE,MAAM,CAAC,OAAO,EAAE,QAAQ,
|
|
1
|
+
{"version":3,"file":"directory-facets.d.ts","sourceRoot":"","sources":["../src/directory-facets.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,0EAA0E;AAC1E,eAAO,MAAM,SAAS,+DAAgE,CAAC;AACvF,MAAM,MAAM,OAAO,GAAG,CAAC,OAAO,SAAS,CAAC,CAAC,MAAM,CAAC,CAAC;AAEjD,sEAAsE;AACtE,MAAM,MAAM,cAAc,GAAG,YAAY,GAAG,QAAQ,GAAG,WAAW,GAAG,MAAM,GAAG,UAAU,CAAC;AAEzF,MAAM,WAAW,QAAQ;IACvB,EAAE,EAAE,OAAO,CAAC;IACZ,0DAA0D;IAC1D,SAAS,EAAE,cAAc,CAAC;IAC1B,kCAAkC;IAClC,KAAK,EAAE,MAAM,CAAC;IACd,4DAA4D;IAC5D,QAAQ,EAAE,MAAM,CAAC;IACjB,iEAAiE;IACjE,MAAM,EAAE,OAAO,CAAC;CACjB;AAED,eAAO,MAAM,UAAU,EAAE,MAAM,CAAC,OAAO,EAAE,QAAQ,CAwBhD,CAAC;AAEF,gEAAgE;AAChE,eAAO,MAAM,cAAc,EAAE,SAAS,OAAO,EAAyB,CAAC;AAevE;;;;;GAKG;AACH,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,GAAG,SAAS,CAEnE;AAED;;;;;GAKG;AACH,wBAAgB,mBAAmB,CAAC,MAAM,CAAC,EAAE,SAAS,MAAM,EAAE,GAAG,QAAQ,EAAE,CAW1E"}
|
package/dist/directory-facets.js
CHANGED
|
@@ -9,27 +9,45 @@
|
|
|
9
9
|
* can't drift into parallel alias tables.
|
|
10
10
|
*/
|
|
11
11
|
/** Canonical facet ids accepted by `browse.facets` (validated by zod). */
|
|
12
|
-
export const FACET_IDS = [
|
|
12
|
+
export const FACET_IDS = ['category', 'stack', 'platform', 'tags', 'license'];
|
|
13
13
|
export const FACET_DEFS = {
|
|
14
|
-
category: {
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
14
|
+
category: {
|
|
15
|
+
id: 'category',
|
|
16
|
+
dimension: 'categories',
|
|
17
|
+
label: 'Category',
|
|
18
|
+
urlParam: 'category',
|
|
19
|
+
single: false,
|
|
20
|
+
},
|
|
21
|
+
stack: { id: 'stack', dimension: 'stacks', label: 'Stack', urlParam: 'stack', single: false },
|
|
22
|
+
platform: {
|
|
23
|
+
id: 'platform',
|
|
24
|
+
dimension: 'platforms',
|
|
25
|
+
label: 'Platform',
|
|
26
|
+
urlParam: 'platform',
|
|
27
|
+
single: false,
|
|
28
|
+
},
|
|
29
|
+
tags: { id: 'tags', dimension: 'tags', label: 'Tag', urlParam: 'tag', single: false },
|
|
30
|
+
license: {
|
|
31
|
+
id: 'license',
|
|
32
|
+
dimension: 'licenses',
|
|
33
|
+
label: 'License',
|
|
34
|
+
urlParam: 'license',
|
|
35
|
+
single: true,
|
|
36
|
+
},
|
|
19
37
|
};
|
|
20
38
|
/** Default facet set when `browse.facets` is not configured. */
|
|
21
|
-
export const DEFAULT_FACETS = [
|
|
39
|
+
export const DEFAULT_FACETS = ['category', 'tags'];
|
|
22
40
|
const FACET_ALIASES = {
|
|
23
|
-
category:
|
|
24
|
-
categories:
|
|
25
|
-
stack:
|
|
26
|
-
stacks:
|
|
27
|
-
platform:
|
|
28
|
-
platforms:
|
|
29
|
-
tag:
|
|
30
|
-
tags:
|
|
31
|
-
license:
|
|
32
|
-
licenses:
|
|
41
|
+
category: 'category',
|
|
42
|
+
categories: 'category',
|
|
43
|
+
stack: 'stack',
|
|
44
|
+
stacks: 'stack',
|
|
45
|
+
platform: 'platform',
|
|
46
|
+
platforms: 'platform',
|
|
47
|
+
tag: 'tags',
|
|
48
|
+
tags: 'tags',
|
|
49
|
+
license: 'license',
|
|
50
|
+
licenses: 'license',
|
|
33
51
|
};
|
|
34
52
|
/**
|
|
35
53
|
* Normalize a facet spelling to its canonical id. The config schema
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"directory-facets.js","sourceRoot":"","sources":["../src/directory-facets.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,0EAA0E;AAC1E,MAAM,CAAC,MAAM,SAAS,GAAG,CAAC,UAAU,EAAE,OAAO,EAAE,UAAU,EAAE,MAAM,EAAE,SAAS,CAAU,CAAC;AAkBvF,MAAM,CAAC,MAAM,UAAU,GAA8B;IACnD,QAAQ,EAAE,EAAE,EAAE,
|
|
1
|
+
{"version":3,"file":"directory-facets.js","sourceRoot":"","sources":["../src/directory-facets.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,0EAA0E;AAC1E,MAAM,CAAC,MAAM,SAAS,GAAG,CAAC,UAAU,EAAE,OAAO,EAAE,UAAU,EAAE,MAAM,EAAE,SAAS,CAAU,CAAC;AAkBvF,MAAM,CAAC,MAAM,UAAU,GAA8B;IACnD,QAAQ,EAAE;QACR,EAAE,EAAE,UAAU;QACd,SAAS,EAAE,YAAY;QACvB,KAAK,EAAE,UAAU;QACjB,QAAQ,EAAE,UAAU;QACpB,MAAM,EAAE,KAAK;KACd;IACD,KAAK,EAAE,EAAE,EAAE,EAAE,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE;IAC7F,QAAQ,EAAE;QACR,EAAE,EAAE,UAAU;QACd,SAAS,EAAE,WAAW;QACtB,KAAK,EAAE,UAAU;QACjB,QAAQ,EAAE,UAAU;QACpB,MAAM,EAAE,KAAK;KACd;IACD,IAAI,EAAE,EAAE,EAAE,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE;IACrF,OAAO,EAAE;QACP,EAAE,EAAE,SAAS;QACb,SAAS,EAAE,UAAU;QACrB,KAAK,EAAE,SAAS;QAChB,QAAQ,EAAE,SAAS;QACnB,MAAM,EAAE,IAAI;KACb;CACF,CAAC;AAEF,gEAAgE;AAChE,MAAM,CAAC,MAAM,cAAc,GAAuB,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC;AAEvE,MAAM,aAAa,GAA4B;IAC7C,QAAQ,EAAE,UAAU;IACpB,UAAU,EAAE,UAAU;IACtB,KAAK,EAAE,OAAO;IACd,MAAM,EAAE,OAAO;IACf,QAAQ,EAAE,UAAU;IACpB,SAAS,EAAE,UAAU;IACrB,GAAG,EAAE,MAAM;IACX,IAAI,EAAE,MAAM;IACZ,OAAO,EAAE,SAAS;IAClB,QAAQ,EAAE,SAAS;CACpB,CAAC;AAEF;;;;;GAKG;AACH,MAAM,UAAU,gBAAgB,CAAC,KAAa;IAC5C,OAAO,aAAa,CAAC,KAAK,CAAC,CAAC;AAC9B,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,mBAAmB,CAAC,MAA0B;IAC5D,MAAM,IAAI,GAAG,IAAI,GAAG,EAAW,CAAC;IAChC,MAAM,IAAI,GAAe,EAAE,CAAC;IAC5B,KAAK,MAAM,GAAG,IAAI,MAAM,IAAI,cAAc,EAAE,CAAC;QAC3C,MAAM,EAAE,GAAG,gBAAgB,CAAC,GAAG,CAAC,CAAC;QACjC,IAAI,EAAE,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC;YACxB,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;YACb,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC,CAAC;QAC5B,CAAC;IACH,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC"}
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Single source of truth for the directory filter-key mapping.
|
|
3
|
+
*
|
|
4
|
+
* The browse-page controller (`DirectoryIndexClient.astro`), the
|
|
5
|
+
* refine panel (`RefinePanel.astro`), and the view-model builder
|
|
6
|
+
* (`server/directory.ts`) all need to know that the facet group
|
|
7
|
+
* with `data-filter-group-key="stacks"` writes its selections to
|
|
8
|
+
* the `stack` URL param, belongs to the `stacks` taxonomy kind,
|
|
9
|
+
* and displays with the "Stack" label. Pre-v1 these were three
|
|
10
|
+
* inline copies; this module is the one the v1 registry migration
|
|
11
|
+
* relies on so consumer-installed UI never drifts out of sync
|
|
12
|
+
* with the server's URL and taxonomy understanding.
|
|
13
|
+
*
|
|
14
|
+
* Per §22 of `apps/docs/v1-architecture.md`, this is pure-domain
|
|
15
|
+
* data. It can be imported by both server view-models and the
|
|
16
|
+
* client-side controller without creating a forbidden dependency
|
|
17
|
+
* from UI to engine internals.
|
|
18
|
+
*/
|
|
19
|
+
/** Group key written into `data-filter-group-key` on a facet group. */
|
|
20
|
+
export type DirectoryFilterGroupKey = 'stacks' | 'platforms' | 'categories' | 'tags' | 'licenses';
|
|
21
|
+
/**
|
|
22
|
+
* The URL search-param key the group writes its selected values to.
|
|
23
|
+
* Singular because each value is one record's id, not a multi.
|
|
24
|
+
*/
|
|
25
|
+
export type DirectoryFilterParamKey = 'stack' | 'platform' | 'category' | 'tag' | 'license';
|
|
26
|
+
/**
|
|
27
|
+
* The taxonomy kind the group belongs to. `tags` maps to the
|
|
28
|
+
* `topics` taxonomy kind (per the schema in `schema.ts`).
|
|
29
|
+
*/
|
|
30
|
+
export type DirectoryTaxonomyKind = 'stacks' | 'platforms' | 'categories' | 'topics' | 'licenses';
|
|
31
|
+
/** Singular, human-readable label rendered in chip/option UIs. */
|
|
32
|
+
export type DirectoryFilterLabel = 'Stack' | 'Platform' | 'Category' | 'Tag' | 'License';
|
|
33
|
+
/**
|
|
34
|
+
* Group key → URL param key. Single definition; consumed by every
|
|
35
|
+
* filter-aware surface.
|
|
36
|
+
*/
|
|
37
|
+
export declare const DIRECTORY_FILTER_KEYS: Readonly<Record<DirectoryFilterGroupKey, DirectoryFilterParamKey>>;
|
|
38
|
+
/**
|
|
39
|
+
* Group key → taxonomy kind the group's options are sourced from.
|
|
40
|
+
*/
|
|
41
|
+
export declare const DIRECTORY_TAXONOMY_KINDS: Readonly<Record<DirectoryFilterGroupKey, DirectoryTaxonomyKind>>;
|
|
42
|
+
/** Group key → display label for chips, trigger buttons, headings. */
|
|
43
|
+
export declare const DIRECTORY_FILTER_LABELS: Readonly<Record<DirectoryFilterGroupKey, DirectoryFilterLabel>>;
|
|
44
|
+
/**
|
|
45
|
+
* Reverse map. Given a URL param key, returns the set of group
|
|
46
|
+
* keys that map to it. Most params are 1:1; this is exposed so
|
|
47
|
+
* server helpers can answer "which group does this param belong
|
|
48
|
+
* to?" without re-implementing the table.
|
|
49
|
+
*/
|
|
50
|
+
export declare const FACET_DIMENSION_FOR_KEY: Readonly<Record<DirectoryFilterParamKey, DirectoryFilterGroupKey>>;
|
|
51
|
+
/** Type guard. */
|
|
52
|
+
export declare function isDirectoryFilterGroupKey(value: string): value is DirectoryFilterGroupKey;
|
|
53
|
+
//# sourceMappingURL=directory-filter-keys.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"directory-filter-keys.d.ts","sourceRoot":"","sources":["../src/directory-filter-keys.ts"],"names":[],"mappings":"AACA;;;;;;;;;;;;;;;;;GAiBG;AAEH,uEAAuE;AACvE,MAAM,MAAM,uBAAuB,GAAG,QAAQ,GAAG,WAAW,GAAG,YAAY,GAAG,MAAM,GAAG,UAAU,CAAC;AAElG;;;GAGG;AACH,MAAM,MAAM,uBAAuB,GAAG,OAAO,GAAG,UAAU,GAAG,UAAU,GAAG,KAAK,GAAG,SAAS,CAAC;AAE5F;;;GAGG;AACH,MAAM,MAAM,qBAAqB,GAAG,QAAQ,GAAG,WAAW,GAAG,YAAY,GAAG,QAAQ,GAAG,UAAU,CAAC;AAElG,kEAAkE;AAClE,MAAM,MAAM,oBAAoB,GAAG,OAAO,GAAG,UAAU,GAAG,UAAU,GAAG,KAAK,GAAG,SAAS,CAAC;AAEzF;;;GAGG;AACH,eAAO,MAAM,qBAAqB,EAAE,QAAQ,CAC1C,MAAM,CAAC,uBAAuB,EAAE,uBAAuB,CAAC,CAOxD,CAAC;AAEH;;GAEG;AACH,eAAO,MAAM,wBAAwB,EAAE,QAAQ,CAC7C,MAAM,CAAC,uBAAuB,EAAE,qBAAqB,CAAC,CAOtD,CAAC;AAEH,sEAAsE;AACtE,eAAO,MAAM,uBAAuB,EAAE,QAAQ,CAC5C,MAAM,CAAC,uBAAuB,EAAE,oBAAoB,CAAC,CAOrD,CAAC;AAEH;;;;;GAKG;AACH,eAAO,MAAM,uBAAuB,EAAE,QAAQ,CAC5C,MAAM,CAAC,uBAAuB,EAAE,uBAAuB,CAAC,CAOxD,CAAC;AAEH,kBAAkB;AAClB,wBAAgB,yBAAyB,CAAC,KAAK,EAAE,MAAM,GAAG,KAAK,IAAI,uBAAuB,CAEzF"}
|