@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.
Files changed (134) hide show
  1. package/README.md +100 -23
  2. package/dist/audit.d.ts +8 -3
  3. package/dist/audit.d.ts.map +1 -1
  4. package/dist/audit.js +29 -8
  5. package/dist/audit.js.map +1 -1
  6. package/dist/awesome-readme.d.ts.map +1 -1
  7. package/dist/awesome-readme.js +31 -31
  8. package/dist/awesome-readme.js.map +1 -1
  9. package/dist/build-data.d.ts +1 -1
  10. package/dist/build-data.d.ts.map +1 -1
  11. package/dist/build-data.js +132 -74
  12. package/dist/build-data.js.map +1 -1
  13. package/dist/collections-io.d.ts +1 -1
  14. package/dist/collections-io.js +8 -8
  15. package/dist/collections-io.js.map +1 -1
  16. package/dist/collections.d.ts +2 -2
  17. package/dist/collections.d.ts.map +1 -1
  18. package/dist/collections.js +8 -9
  19. package/dist/collections.js.map +1 -1
  20. package/dist/collector.d.ts +1 -1
  21. package/dist/collector.d.ts.map +1 -1
  22. package/dist/collector.js +2 -2
  23. package/dist/collector.js.map +1 -1
  24. package/dist/config.d.ts +1 -1
  25. package/dist/config.d.ts.map +1 -1
  26. package/dist/config.js +4 -4
  27. package/dist/config.js.map +1 -1
  28. package/dist/content-body.d.ts.map +1 -1
  29. package/dist/content-body.js +22 -22
  30. package/dist/content-body.js.map +1 -1
  31. package/dist/contributors.d.ts.map +1 -1
  32. package/dist/contributors.js +22 -23
  33. package/dist/contributors.js.map +1 -1
  34. package/dist/decisions.d.ts +1 -1
  35. package/dist/decisions.d.ts.map +1 -1
  36. package/dist/decisions.js +18 -20
  37. package/dist/decisions.js.map +1 -1
  38. package/dist/directory-client.d.ts +6 -4
  39. package/dist/directory-client.d.ts.map +1 -1
  40. package/dist/directory-client.js +9 -4
  41. package/dist/directory-client.js.map +1 -1
  42. package/dist/directory-facets.d.ts +1 -1
  43. package/dist/directory-facets.d.ts.map +1 -1
  44. package/dist/directory-facets.js +35 -17
  45. package/dist/directory-facets.js.map +1 -1
  46. package/dist/directory-filter-keys.d.ts +53 -0
  47. package/dist/directory-filter-keys.d.ts.map +1 -0
  48. package/dist/directory-filter-keys.js +66 -0
  49. package/dist/directory-filter-keys.js.map +1 -0
  50. package/dist/directory-format.d.ts.map +1 -1
  51. package/dist/directory-format.js +15 -15
  52. package/dist/directory-format.js.map +1 -1
  53. package/dist/directory-lenses.d.ts +1 -1
  54. package/dist/directory-lenses.d.ts.map +1 -1
  55. package/dist/directory-lenses.js +66 -61
  56. package/dist/directory-lenses.js.map +1 -1
  57. package/dist/directory-repo.js +2 -2
  58. package/dist/directory-scores.d.ts.map +1 -1
  59. package/dist/directory-scores.js +25 -25
  60. package/dist/directory-scores.js.map +1 -1
  61. package/dist/directory-search.d.ts +4 -4
  62. package/dist/directory-search.d.ts.map +1 -1
  63. package/dist/directory-search.js +99 -107
  64. package/dist/directory-search.js.map +1 -1
  65. package/dist/directory-taxonomy.d.ts +1 -1
  66. package/dist/directory-taxonomy.d.ts.map +1 -1
  67. package/dist/directory-taxonomy.js +2 -2
  68. package/dist/directory-taxonomy.js.map +1 -1
  69. package/dist/enrich.d.ts.map +1 -1
  70. package/dist/enrich.js +15 -12
  71. package/dist/enrich.js.map +1 -1
  72. package/dist/github-client.js +6 -6
  73. package/dist/github.d.ts +9 -1
  74. package/dist/github.d.ts.map +1 -1
  75. package/dist/github.js +26 -14
  76. package/dist/github.js.map +1 -1
  77. package/dist/health.d.ts +1 -1
  78. package/dist/health.js +44 -44
  79. package/dist/host.js +2 -2
  80. package/dist/importer.d.ts +2 -2
  81. package/dist/importer.d.ts.map +1 -1
  82. package/dist/importer.js +1 -1
  83. package/dist/importer.js.map +1 -1
  84. package/dist/index.d.ts +66 -63
  85. package/dist/index.d.ts.map +1 -1
  86. package/dist/index.js +86 -75
  87. package/dist/index.js.map +1 -1
  88. package/dist/io.js +8 -8
  89. package/dist/llms.d.ts +1 -1
  90. package/dist/llms.d.ts.map +1 -1
  91. package/dist/llms.js +69 -65
  92. package/dist/llms.js.map +1 -1
  93. package/dist/markdown.d.ts.map +1 -1
  94. package/dist/markdown.js.map +1 -1
  95. package/dist/og-image.d.ts +8 -8
  96. package/dist/og-image.d.ts.map +1 -1
  97. package/dist/og-image.js +91 -84
  98. package/dist/og-image.js.map +1 -1
  99. package/dist/page-document.d.ts +8 -8
  100. package/dist/page-document.d.ts.map +1 -1
  101. package/dist/page-document.js +48 -54
  102. package/dist/page-document.js.map +1 -1
  103. package/dist/parseReadme.d.ts.map +1 -1
  104. package/dist/parseReadme.js +9 -11
  105. package/dist/parseReadme.js.map +1 -1
  106. package/dist/prepare.d.ts +5 -5
  107. package/dist/prepare.d.ts.map +1 -1
  108. package/dist/prepare.js +46 -35
  109. package/dist/prepare.js.map +1 -1
  110. package/dist/related.d.ts +1 -1
  111. package/dist/schema.d.ts +21 -21
  112. package/dist/schema.d.ts.map +1 -1
  113. package/dist/schema.js +134 -141
  114. package/dist/schema.js.map +1 -1
  115. package/dist/site-artifacts.js +1 -1
  116. package/dist/sitemap.d.ts +2 -2
  117. package/dist/sitemap.d.ts.map +1 -1
  118. package/dist/sitemap.js +39 -39
  119. package/dist/sitemap.js.map +1 -1
  120. package/dist/slug.js +4 -4
  121. package/dist/sync-icons.js +15 -15
  122. package/dist/taxonomy-inference.d.ts +27 -0
  123. package/dist/taxonomy-inference.d.ts.map +1 -0
  124. package/dist/taxonomy-inference.js +38 -0
  125. package/dist/taxonomy-inference.js.map +1 -0
  126. package/dist/validate.d.ts +3 -3
  127. package/dist/validate.d.ts.map +1 -1
  128. package/dist/validate.js +56 -58
  129. package/dist/validate.js.map +1 -1
  130. package/dist/yaml.d.ts +47 -0
  131. package/dist/yaml.d.ts.map +1 -0
  132. package/dist/yaml.js +56 -0
  133. package/dist/yaml.js.map +1 -0
  134. package/package.json +1 -1
@@ -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 "node:fs";
44
- import { resolve } from "node:path";
45
- import { uniqueSlug } from "./slug.js";
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(), "apps", "example", contentPath),
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("\n");
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, "utf8");
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("\n");
123
- body = lines.slice(close + 2).join("\n");
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, "").trim();
195
+ const text = m[2].replace(/[`*_~\[\]()]/g, '').trim();
196
196
  if (!text)
197
197
  continue;
198
- const id = uniqueSlug(headingSlug(text) || "section", seen);
198
+ const id = uniqueSlug(headingSlug(text) || 'section', seen);
199
199
  out.push({ text, id, depth });
200
200
  }
201
201
  return out;
@@ -1 +1 @@
1
- {"version":3,"file":"content-body.js","sourceRoot":"","sources":["../src/content-body.ts"],"names":[],"mappings":"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"}
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,CAkIhC"}
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"}
@@ -1,39 +1,39 @@
1
- import { mkdir, readFile, writeFile } from "node:fs/promises";
2
- import { dirname, resolve } from "node:path";
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("/", 2);
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$/, "") } : null;
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 ?? "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 ?? "";
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: "application/vnd.github+json",
35
- "User-Agent": "grove-sync-contributors",
36
- "X-GitHub-Api-Version": "2022-11-28",
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("[bot]"))
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), "utf8");
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), "utf8");
94
+ }, null, 2), 'utf8');
96
95
  return {
97
96
  outputPath,
98
97
  repoStatsPath,
@@ -1 +1 @@
1
- {"version":3,"file":"contributors.js","sourceRoot":"","sources":["../src/contributors.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"contributors.js","sourceRoot":"","sources":["../src/contributors.ts"],"names":[],"mappings":"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"}
@@ -1,4 +1,4 @@
1
- import { type GroveConfig, type Resource } from "./schema.js";
1
+ import { type GroveConfig, type Resource } from './schema.js';
2
2
  export interface CleanupCandidate {
3
3
  slug: string;
4
4
  name: string;
@@ -1 +1 @@
1
- {"version":3,"file":"decisions.d.ts","sourceRoot":"","sources":["../src/decisions.ts"],"names":[],"mappings":"AAGA,OAAO,EAGL,KAAK,WAAW,EAChB,KAAK,QAAQ,EACd,MAAM,aAAa,CAAC;AAGrB,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;AAsBD,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"}
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 "node:fs/promises";
2
- import { basename, join, resolve } from "node:path";
3
- import { parse as parseYaml } from "yaml";
4
- import { blueprintKind, recordsFileSchema, } from "./schema.js";
5
- import { loadConfig } from "./config.js";
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 === "resource" ? record.title : record.name;
8
- const url = record.links?.github ?? record.links?.website ?? record.links?.source ?? "";
9
- const health = record
10
- .health;
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 ?? "unknown",
18
- tier: health?.tier ?? "experimental",
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 === "unknown" || health?.status === "needs_review")
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(".yml")).sort();
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, ".yml");
53
- const text = await readFile(join(recordsDir, file), "utf8");
54
- const raw = (parseYaml(text, { schema: "core" }) ?? {});
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, "cleanup-report.json");
74
- await writeFile(path, JSON.stringify(report, null, 2), "utf8");
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
@@ -1 +1 @@
1
- {"version":3,"file":"decisions.js","sourceRoot":"","sources":["../src/decisions.ts"],"names":[],"mappings":"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"}
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 "./directory-display.js";
9
- export * from "./directory-facets.js";
10
- export * from "./directory-lenses.js";
11
- export * from "./directory-search.js";
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"}
@@ -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 "./directory-display.js";
9
- export * from "./directory-facets.js";
10
- export * from "./directory-lenses.js";
11
- export * from "./directory-search.js";
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;AACtC,cAAc,uBAAuB,CAAC;AACtC,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 = "categories" | "stacks" | "platforms" | "tags" | "licenses";
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,CAMhD,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"}
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"}
@@ -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 = ["category", "stack", "platform", "tags", "license"];
12
+ export const FACET_IDS = ['category', 'stack', 'platform', 'tags', 'license'];
13
13
  export const FACET_DEFS = {
14
- category: { id: "category", dimension: "categories", label: "Category", urlParam: "category", single: false },
15
- stack: { id: "stack", dimension: "stacks", label: "Stack", urlParam: "stack", single: false },
16
- platform: { id: "platform", dimension: "platforms", label: "Platform", urlParam: "platform", single: false },
17
- tags: { id: "tags", dimension: "tags", label: "Tag", urlParam: "tag", single: false },
18
- license: { id: "license", dimension: "licenses", label: "License", urlParam: "license", single: true },
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 = ["category", "tags"];
39
+ export const DEFAULT_FACETS = ['category', 'tags'];
22
40
  const FACET_ALIASES = {
23
- category: "category",
24
- categories: "category",
25
- stack: "stack",
26
- stacks: "stack",
27
- platform: "platform",
28
- platforms: "platform",
29
- tag: "tags",
30
- tags: "tags",
31
- license: "license",
32
- licenses: "license",
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,EAAE,UAAU,EAAE,SAAS,EAAE,YAAY,EAAE,KAAK,EAAE,UAAU,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,EAAE,KAAK,EAAE;IAC7G,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,EAAE,EAAE,EAAE,UAAU,EAAE,SAAS,EAAE,WAAW,EAAE,KAAK,EAAE,UAAU,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,EAAE,KAAK,EAAE;IAC5G,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,EAAE,EAAE,EAAE,SAAS,EAAE,SAAS,EAAE,UAAU,EAAE,KAAK,EAAE,SAAS,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,EAAE,IAAI,EAAE;CACvG,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"}
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"}