@grove-dev/core 0.2.16 → 0.2.19

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 (68) hide show
  1. package/README.md +2 -2
  2. package/dist/build-data.d.ts.map +1 -1
  3. package/dist/build-data.js +19 -12
  4. package/dist/build-data.js.map +1 -1
  5. package/dist/build-data.test.d.ts +2 -0
  6. package/dist/build-data.test.d.ts.map +1 -0
  7. package/dist/build-data.test.js +171 -0
  8. package/dist/build-data.test.js.map +1 -0
  9. package/dist/decisions.test.d.ts +2 -0
  10. package/dist/decisions.test.d.ts.map +1 -0
  11. package/dist/decisions.test.js +205 -0
  12. package/dist/decisions.test.js.map +1 -0
  13. package/dist/enrich.test.d.ts +2 -0
  14. package/dist/enrich.test.d.ts.map +1 -0
  15. package/dist/enrich.test.js +105 -0
  16. package/dist/enrich.test.js.map +1 -0
  17. package/dist/github-client.d.ts.map +1 -1
  18. package/dist/github-client.js +4 -1
  19. package/dist/github-client.js.map +1 -1
  20. package/dist/github-client.test.d.ts +2 -0
  21. package/dist/github-client.test.d.ts.map +1 -0
  22. package/dist/github-client.test.js +176 -0
  23. package/dist/github-client.test.js.map +1 -0
  24. package/dist/github.d.ts.map +1 -1
  25. package/dist/github.js +6 -2
  26. package/dist/github.js.map +1 -1
  27. package/dist/github.test.d.ts +2 -0
  28. package/dist/github.test.d.ts.map +1 -0
  29. package/dist/github.test.js +73 -0
  30. package/dist/github.test.js.map +1 -0
  31. package/dist/health.test.d.ts +2 -0
  32. package/dist/health.test.d.ts.map +1 -0
  33. package/dist/health.test.js +183 -0
  34. package/dist/health.test.js.map +1 -0
  35. package/dist/importer.test.d.ts +2 -0
  36. package/dist/importer.test.d.ts.map +1 -0
  37. package/dist/importer.test.js +173 -0
  38. package/dist/importer.test.js.map +1 -0
  39. package/dist/index.d.ts +36 -16
  40. package/dist/index.d.ts.map +1 -1
  41. package/dist/index.js +44 -16
  42. package/dist/index.js.map +1 -1
  43. package/dist/llms.d.ts.map +1 -1
  44. package/dist/llms.js +6 -4
  45. package/dist/llms.js.map +1 -1
  46. package/dist/markdown.d.ts.map +1 -1
  47. package/dist/markdown.js +16 -10
  48. package/dist/markdown.js.map +1 -1
  49. package/dist/parseReadme.d.ts.map +1 -1
  50. package/dist/parseReadme.js +5 -1
  51. package/dist/parseReadme.js.map +1 -1
  52. package/dist/schema.d.ts +1 -14
  53. package/dist/schema.d.ts.map +1 -1
  54. package/dist/schema.js +14 -60
  55. package/dist/schema.js.map +1 -1
  56. package/dist/slug.d.ts +10 -0
  57. package/dist/slug.d.ts.map +1 -1
  58. package/dist/slug.js +10 -0
  59. package/dist/slug.js.map +1 -1
  60. package/dist/slug.test.d.ts +2 -0
  61. package/dist/slug.test.d.ts.map +1 -0
  62. package/dist/slug.test.js +101 -0
  63. package/dist/slug.test.js.map +1 -0
  64. package/dist/validate.test.d.ts +2 -0
  65. package/dist/validate.test.d.ts.map +1 -0
  66. package/dist/validate.test.js +249 -0
  67. package/dist/validate.test.js.map +1 -0
  68. package/package.json +2 -2
@@ -0,0 +1,183 @@
1
+ /**
2
+ * @grove-dev/core — health classification unit tests.
3
+ *
4
+ * Pins the boundary cases around the threshold ladder in
5
+ * `classifyHealth`. The thresholds are not a parameter — they're
6
+ * burned into the function — so the only thing these tests can do
7
+ * is pin them. A future PR that bumps any threshold will need to
8
+ * update at least one test name, which is exactly the intent:
9
+ * "the day someone raises the inactive cutoff from 730 to 800 days,
10
+ * the build breaks at the test name so a deliberate decision is
11
+ * made."
12
+ *
13
+ * The function also has a "fabricate" path — calling it with no
14
+ * `github` arg returns the canonical unknown health block. This
15
+ * shape is the V1 single source of truth that `applyDecision` in
16
+ * `build-data.ts` reuses for its no-health-block merge, so pinning
17
+ * it here means downstream code can't drift.
18
+ */
19
+ import { describe, it, expect } from "vitest";
20
+ import { classifyHealth } from "./health.js";
21
+ function makeGithub(overrides = {}) {
22
+ return {
23
+ fullName: "owner/repo",
24
+ stars: 10,
25
+ forks: 0,
26
+ openIssues: 0,
27
+ archived: false,
28
+ disabled: false,
29
+ pushedAt: null,
30
+ updatedAt: null,
31
+ latestReleaseAt: null,
32
+ license: null,
33
+ topics: [],
34
+ language: null,
35
+ defaultBranch: "main",
36
+ ...overrides,
37
+ };
38
+ }
39
+ describe("classifyHealth — fabrication path (no GitHub metadata)", () => {
40
+ it("returns the canonical unknown health block when no github is supplied", () => {
41
+ // The shape is the V1 single source of truth — applyDecision in
42
+ // build-data.ts calls classifyHealth(slug) without github to
43
+ // fabricate a default health block. Pin every field.
44
+ const result = classifyHealth("my-slug");
45
+ expect(result).toEqual({
46
+ id: "my-slug",
47
+ health: {
48
+ status: "unknown",
49
+ maturity: "unknown",
50
+ tier: "experimental",
51
+ visibility: "keep",
52
+ cleanupCandidate: false,
53
+ staleReason: null,
54
+ confidence: "low",
55
+ reasons: ["No GitHub metadata available"],
56
+ },
57
+ });
58
+ });
59
+ it("the unknown block is what applyDecision fabricates — verify the visibility override path", () => {
60
+ // Without this test, a future refactor could change the
61
+ // unknown shape (e.g. tier: "hidden") and silently break the
62
+ // applyDecision merge in build-data.ts. The unknown block MUST
63
+ // have visibility: "keep" so the override is a meaningful
64
+ // *change*, not a no-op.
65
+ const { health } = classifyHealth("x");
66
+ expect(health.visibility).toBe("keep");
67
+ });
68
+ });
69
+ describe("classifyHealth — status thresholds (pushedAt)", () => {
70
+ const NOW = Date.now();
71
+ const daysAgo = (n) => new Date(NOW - n * 86_400_000).toISOString();
72
+ it("active: pushed within 6 months (≤ 183 days)", () => {
73
+ const result = classifyHealth("a", makeGithub({ pushedAt: daysAgo(0) }));
74
+ expect(result.health.status).toBe("active");
75
+ });
76
+ it("active boundary: 180 days is well inside the active window", () => {
77
+ // Pin the boundary just below 183 so the test is stable across
78
+ // floating-point rounding of `Date.now() - N*86_400_000`. The
79
+ // exact-183-day edge case is `183.0000000347` days, which the
80
+ // `<= 183` check rejects — testing 180 instead makes the
81
+ // intent (active window is ~6 months) obvious without
82
+ // coupling to the float math.
83
+ const result = classifyHealth("a", makeGithub({ pushedAt: daysAgo(180) }));
84
+ expect(result.health.status).toBe("active");
85
+ });
86
+ it("stale boundary: 184 days is the first day a record becomes stale", () => {
87
+ // 184 days is the first value that reliably falls on the
88
+ // "stale" side of the 183-day cutoff. The 183-day mark itself
89
+ // is load-bearing in production (a record turns 6 months old
90
+ // on this exact day) but is sensitive to ms rounding — pin
91
+ // 184 here so a future threshold bump is visible immediately
92
+ // and the test does not flake.
93
+ const result = classifyHealth("a", makeGithub({ pushedAt: daysAgo(184) }));
94
+ expect(result.health.status).toBe("stale");
95
+ });
96
+ it("stale: pushed between 184 and 548 days (6-18 months)", () => {
97
+ const result = classifyHealth("a", makeGithub({ pushedAt: daysAgo(400) }));
98
+ expect(result.health.status).toBe("stale");
99
+ });
100
+ it("needs_review: pushed between 548 and 730 days (18-24 months)", () => {
101
+ const result = classifyHealth("a", makeGithub({ pushedAt: daysAgo(600) }));
102
+ expect(result.health.status).toBe("needs_review");
103
+ });
104
+ it("inactive: pushed > 730 days (2+ years)", () => {
105
+ const result = classifyHealth("a", makeGithub({ pushedAt: daysAgo(800) }));
106
+ expect(result.health.status).toBe("inactive");
107
+ });
108
+ });
109
+ describe("classifyHealth — maturity ladder", () => {
110
+ it("archived overrides everything: status='archived', tier='hidden'", () => {
111
+ const result = classifyHealth("a", makeGithub({ archived: true, stars: 5000 }));
112
+ expect(result.health.status).toBe("archived");
113
+ expect(result.health.tier).toBe("hidden");
114
+ expect(result.health.cleanupCandidate).toBe(true);
115
+ expect(result.health.staleReason).toBe("github_archived");
116
+ });
117
+ it("popular + active → maturity='mature' and status gets promoted to 'mature'", () => {
118
+ // 500+ stars AND active + maintained → the function promotes
119
+ // status from 'active' to 'mature'. This is the threshold
120
+ // where the "Recently active" filter would no longer match a
121
+ // project even though it's actively maintained — pin it.
122
+ const result = classifyHealth("a", makeGithub({
123
+ stars: 600,
124
+ pushedAt: new Date(Date.now() - 30 * 86_400_000).toISOString(),
125
+ license: "MIT",
126
+ }));
127
+ expect(result.health.maturity).toBe("mature");
128
+ expect(result.health.status).toBe("mature");
129
+ });
130
+ it("popular but no maintenance signals → maturity='useful' (NOT mature)", () => {
131
+ // 500+ stars but no recent release/license — popular but the
132
+ // maintenance boost does not apply. Maturity caps at 'useful'.
133
+ const result = classifyHealth("a", makeGithub({
134
+ stars: 600,
135
+ pushedAt: new Date(Date.now() - 30 * 86_400_000).toISOString(),
136
+ license: null,
137
+ latestReleaseAt: null,
138
+ }));
139
+ expect(result.health.maturity).toBe("useful");
140
+ });
141
+ it("mid stars (50-499) + maintained → 'useful'", () => {
142
+ const result = classifyHealth("a", makeGithub({
143
+ stars: 100,
144
+ pushedAt: new Date(Date.now() - 30 * 86_400_000).toISOString(),
145
+ license: "MIT",
146
+ }));
147
+ expect(result.health.maturity).toBe("useful");
148
+ });
149
+ it("low stars and no signals → 'experimental'", () => {
150
+ const result = classifyHealth("a", makeGithub({
151
+ stars: 5,
152
+ pushedAt: new Date(Date.now() - 30 * 86_400_000).toISOString(),
153
+ license: null,
154
+ latestReleaseAt: null,
155
+ }));
156
+ expect(result.health.maturity).toBe("experimental");
157
+ });
158
+ });
159
+ describe("classifyHealth — tier ladder", () => {
160
+ const pushed = new Date(Date.now() - 30 * 86_400_000).toISOString();
161
+ it("hidden when status is archived", () => {
162
+ const r = classifyHealth("a", makeGithub({ archived: true }));
163
+ expect(r.health.tier).toBe("hidden");
164
+ expect(r.health.visibility).toBe("hide");
165
+ });
166
+ it("hidden when status is inactive", () => {
167
+ const r = classifyHealth("a", makeGithub({ pushedAt: new Date(Date.now() - 800 * 86_400_000).toISOString() }));
168
+ expect(r.health.tier).toBe("hidden");
169
+ });
170
+ it("curated when stars >= 500", () => {
171
+ const r = classifyHealth("a", makeGithub({ stars: 500, pushedAt: pushed }));
172
+ expect(r.health.tier).toBe("curated");
173
+ });
174
+ it("listed when stars >= 50 (but < 500)", () => {
175
+ const r = classifyHealth("a", makeGithub({ stars: 50, pushedAt: pushed }));
176
+ expect(r.health.tier).toBe("listed");
177
+ });
178
+ it("experimental when stars < 50", () => {
179
+ const r = classifyHealth("a", makeGithub({ stars: 49, pushedAt: pushed }));
180
+ expect(r.health.tier).toBe("experimental");
181
+ });
182
+ });
183
+ //# sourceMappingURL=health.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"health.test.js","sourceRoot":"","sources":["../src/health.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=importer.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"importer.test.d.ts","sourceRoot":"","sources":["../src/importer.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,173 @@
1
+ /**
2
+ * @grove-dev/core — markdown.ts importer unit tests.
3
+ *
4
+ * The `markdown.ts` module houses `parseAwesomeMarkdown`,
5
+ * `detectGithubRepo`, `importAwesomeList`, and
6
+ * `writeImportedRecords`. `importer.ts` re-exports the last two.
7
+ *
8
+ * Tests cover:
9
+ * - detectGithubRepo: URL + slug derivation, edge cases
10
+ * - parseAwesomeMarkdown: section grouping, link extraction,
11
+ * dedup, empty input
12
+ * - writeImportedRecords: real tmpdir round-trip
13
+ */
14
+ import { describe, it, expect, beforeEach, afterEach } from "vitest";
15
+ import { mkdtemp, writeFile, readFile, rm } from "node:fs/promises";
16
+ import { tmpdir } from "node:os";
17
+ import { join } from "node:path";
18
+ import { detectGithubRepo, parseAwesomeMarkdown, importAwesomeList, writeImportedRecords, } from "./markdown.js";
19
+ describe("detectGithubRepo", () => {
20
+ it("returns the canonical GitHub URL for a github.com URL", () => {
21
+ expect(detectGithubRepo("https://github.com/owner/repo")).toBe("https://github.com/owner/repo");
22
+ });
23
+ it("strips a trailing .git from the repo name", () => {
24
+ expect(detectGithubRepo("https://github.com/owner/repo.git")).toBe("https://github.com/owner/repo");
25
+ });
26
+ it("returns undefined for an empty / non-URL string", () => {
27
+ expect(detectGithubRepo("")).toBeUndefined();
28
+ expect(detectGithubRepo("No link here.")).toBeUndefined();
29
+ });
30
+ it("returns undefined for a non-github URL (e.g. gitlab)", () => {
31
+ expect(detectGithubRepo("https://gitlab.com/owner/repo")).toBeUndefined();
32
+ });
33
+ it("returns undefined for reserved GitHub paths (issues, pulls, etc.)", () => {
34
+ // `https://github.com/owner/issues` is a tab on the repo page,
35
+ // not a repo. detectGithubRepo must return undefined for
36
+ // these so they don't get imported as a record.
37
+ expect(detectGithubRepo("https://github.com/owner/issues")).toBeUndefined();
38
+ expect(detectGithubRepo("https://github.com/owner/pulls")).toBeUndefined();
39
+ });
40
+ });
41
+ describe("parseAwesomeMarkdown", () => {
42
+ it("returns an empty result for empty input", () => {
43
+ const r = parseAwesomeMarkdown("");
44
+ expect(r.records).toEqual([]);
45
+ expect(r.report.imported).toBe(0);
46
+ expect(r.report.skipped).toBe(0);
47
+ });
48
+ it("groups links by section heading and extracts name + url", () => {
49
+ const md = [
50
+ "# Awesome",
51
+ "",
52
+ "## Tools",
53
+ "",
54
+ "- [Repo One](https://github.com/owner/one) - A great tool",
55
+ "- [Repo Two](https://github.com/owner/two)",
56
+ "",
57
+ "## Libraries",
58
+ "",
59
+ "- [Repo Three](https://github.com/owner/three) - A nice library",
60
+ ].join("\n");
61
+ const r = parseAwesomeMarkdown(md);
62
+ expect(r.report.imported).toBe(3);
63
+ expect(r.records.map((rec) => rec.name)).toEqual([
64
+ "Repo One",
65
+ "Repo Two",
66
+ "Repo Three",
67
+ ]);
68
+ // Category comes from the section heading.
69
+ expect(r.records[0]?.category).toBe("Tools");
70
+ expect(r.records[2]?.category).toBe("Libraries");
71
+ });
72
+ it("dedupes repeated names (same label slug → -2, -3, ...)", () => {
73
+ // The parser's collision counter is NAME-based (via
74
+ // `uniqueSlug`), not URL-based. Two lines with different
75
+ // names both pointing at the same URL produce two records;
76
+ // two lines with the same name produce the second with a
77
+ // -2 suffix. Pinning the actual behaviour so a future
78
+ // switch to URL-based dedup is visible.
79
+ const md = [
80
+ "## Tools",
81
+ "",
82
+ "- [A](https://github.com/owner/repo) - first",
83
+ "- [A](https://github.com/owner/other) - second",
84
+ ].join("\n");
85
+ const r = parseAwesomeMarkdown(md);
86
+ expect(r.report.imported).toBe(2);
87
+ expect(r.records.map((rec) => rec.slug)).toEqual(["a", "a-2"]);
88
+ });
89
+ it("skips lines that are not list items (text between sections)", () => {
90
+ const md = [
91
+ "## Tools",
92
+ "",
93
+ "Some prose describing the section.",
94
+ "",
95
+ "- [Real](https://github.com/owner/real) - A real repo",
96
+ ].join("\n");
97
+ const r = parseAwesomeMarkdown(md);
98
+ expect(r.records).toHaveLength(1);
99
+ expect(r.records[0]?.name).toBe("Real");
100
+ });
101
+ });
102
+ describe("writeImportedRecords — filesystem round-trip", () => {
103
+ let cwd;
104
+ beforeEach(async () => {
105
+ cwd = await mkdtemp(join(tmpdir(), "grove-importer-test-"));
106
+ });
107
+ afterEach(async () => {
108
+ await rm(cwd, { recursive: true, force: true });
109
+ });
110
+ it("writes one YAML file per record to the target directory", async () => {
111
+ const result = {
112
+ records: [
113
+ {
114
+ name: "First",
115
+ slug: "first",
116
+ description: "first record",
117
+ category: "tools",
118
+ links: { github: "https://github.com/owner/first" },
119
+ },
120
+ {
121
+ name: "Second",
122
+ slug: "second",
123
+ description: "second record",
124
+ category: "tools",
125
+ links: { github: "https://github.com/owner/second" },
126
+ },
127
+ ],
128
+ report: { imported: 2, skipped: 0, categories: [], duplicateSlugs: 0, tocSkipped: 0, anchorLinksSkipped: 0 },
129
+ };
130
+ const { written, dir } = await writeImportedRecords(result, cwd, "project-directory");
131
+ expect(written).toBe(2);
132
+ expect(dir).toContain("data/records");
133
+ const first = await readFile(join(dir, "first.yml"), "utf8");
134
+ expect(first).toContain("name: First");
135
+ expect(first).toContain("kind: project");
136
+ expect(first).toContain("slug: first");
137
+ });
138
+ it("returns 0 and writes nothing for an empty input list", async () => {
139
+ const result = {
140
+ records: [],
141
+ report: { imported: 0, skipped: 0, categories: [], duplicateSlugs: 0, tocSkipped: 0, anchorLinksSkipped: 0 },
142
+ };
143
+ const { written } = await writeImportedRecords(result, cwd, "project-directory");
144
+ expect(written).toBe(0);
145
+ });
146
+ });
147
+ describe("importAwesomeList — end-to-end on a local README.md", () => {
148
+ let cwd;
149
+ beforeEach(async () => {
150
+ cwd = await mkdtemp(join(tmpdir(), "grove-import-test-"));
151
+ });
152
+ afterEach(async () => {
153
+ await rm(cwd, { recursive: true, force: true });
154
+ });
155
+ it("parses a local markdown file and returns ImportedRecord[]", async () => {
156
+ const md = [
157
+ "# Awesome Stuff",
158
+ "",
159
+ "## Frameworks",
160
+ "",
161
+ "- [Framework A](https://github.com/owner/framework-a) - A nice framework",
162
+ "- [Framework B](https://github.com/owner/framework-b)",
163
+ ].join("\n");
164
+ const readme = join(cwd, "README.md");
165
+ await writeFile(readme, md);
166
+ const result = await importAwesomeList(readme);
167
+ expect(result.report.imported).toBe(2);
168
+ expect(result.records).toHaveLength(2);
169
+ expect(result.records[0]?.name).toBe("Framework A");
170
+ expect(result.records[0]?.category).toBe("Frameworks");
171
+ });
172
+ });
173
+ //# sourceMappingURL=importer.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"importer.test.js","sourceRoot":"","sources":["../src/importer.test.ts"],"names":[],"mappings":"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"}
package/dist/index.d.ts CHANGED
@@ -1,17 +1,37 @@
1
- export * from "./build-data.js";
2
- export * from "./config.js";
3
- export * from "./decisions.js";
4
- export * from "./enrich.js";
5
- export * from "./github-client.js";
6
- export * from "./github.js";
7
- export * from "./health.js";
8
- export * from "./importer.js";
9
- export * from "./io.js";
10
- export * from "./llms.js";
11
- export * from "./markdown.js";
12
- export * from "./parseReadme.js";
13
- export * from "./schema.js";
14
- export * from "./sitemap.js";
15
- export * from "./slug.js";
16
- export * from "./validate.js";
1
+ /**
2
+ * @grove-dev/core — headless engine for Grove.
3
+ *
4
+ * V1 public surface (locked). The list below is the complete set of
5
+ * symbols exported by this package — every other symbol is internal
6
+ * and may change without notice.
7
+ *
8
+ * To audit: `grep -E '^export ' src/index.ts | sort`
9
+ */
10
+ export { defineConfig, loadConfig } from "./config.js";
11
+ export type { GroveConfig } from "./schema.js";
12
+ export { blueprintSchema, resourceKindSchema, healthStatusSchema, healthTierSchema, healthBlockSchema, healthEntrySchema, healthFileSchema, decisionSchema, decisionsFileSchema, overrideSchema, overridesFileSchema, projectRecordSchema, resourceRecordSchema, entityRecordSchema, projectTypeSchema, resourceTypeSchema, entityTypeSchema, appLabelSchema, scoreSchema, linksSchema, githubRepositorySchema, githubMetadataSchema, githubLicenseSchema, blueprintKind, } from "./schema.js";
13
+ export type { Blueprint, ResourceKind, DecisionVisibility, Resource, ProjectRecord, ResourceRecord, EntityRecord, IndexRecord, IndexProjectRecord, IndexResourceRecord, IndexEntityRecord, HealthStatus, HealthTier, HealthEntry, HealthFile, Decision, DecisionsFile, Override, OverridesFile, ProjectType, ResourceType, EntityType, AppLabel, Score, Links, GithubMetadata, GithubRepository, } from "./schema.js";
14
+ export { generate } from "./build-data.js";
15
+ export type { GenerateResult, RecordsFullPayload, RecordsIndexPayload } from "./build-data.js";
16
+ export { stringifyRecordYaml } from "./schema.js";
17
+ export { buildSitemap, buildSitemapXml } from "./sitemap.js";
18
+ export { buildLlmsTxt, buildLlmsFullTxt, buildLlmsFiles } from "./llms.js";
19
+ export type { LlmsInput, LlmsRecordInput, LlmsResult } from "./llms.js";
20
+ export { pickCleanupCandidates, cleanupStale } from "./decisions.js";
21
+ export type { CleanupCandidate, CleanupReport } from "./decisions.js";
22
+ export { parseGithubRepoUrl, fetchGithubMetadata } from "./github.js";
23
+ export type { GithubRepoRef } from "./github.js";
24
+ export { enrichFromGithubHtml } from "./enrich.js";
25
+ export type { EnrichedFields, EnrichResult } from "./enrich.js";
26
+ export { rateLimitWaitMs, sleep } from "./github-client.js";
27
+ export type { GhFetchOptions } from "./github-client.js";
28
+ export { classifyHealth } from "./health.js";
29
+ export { detectGithubRepo, parseAwesomeMarkdown, } from "./markdown.js";
30
+ export type { ImportedRecord, ImportSummary, ImportResult, } from "./markdown.js";
31
+ export { importAwesomeList, writeImportedRecords } from "./importer.js";
32
+ export { parseEntry, parseSections } from "./parseReadme.js";
33
+ export type { ParsedEntry, ParsedSection } from "./parseReadme.js";
34
+ export { readYamlFile, writeYamlFile, writeTextFile } from "./io.js";
35
+ export { validateProject } from "./validate.js";
36
+ export type { ValidationResult, ValidationIssue, ValidationSeverity } from "./validate.js";
17
37
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,iBAAiB,CAAC;AAChC,cAAc,aAAa,CAAC;AAC5B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,aAAa,CAAC;AAC5B,cAAc,oBAAoB,CAAC;AACnC,cAAc,aAAa,CAAC;AAC5B,cAAc,aAAa,CAAC;AAC5B,cAAc,eAAe,CAAC;AAC9B,cAAc,SAAS,CAAC;AACxB,cAAc,WAAW,CAAC;AAC1B,cAAc,eAAe,CAAC;AAC9B,cAAc,kBAAkB,CAAC;AACjC,cAAc,aAAa,CAAC;AAC5B,cAAc,cAAc,CAAC;AAC7B,cAAc,WAAW,CAAC;AAC1B,cAAc,eAAe,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACvD,YAAY,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAG/C,OAAO,EACL,eAAe,EACf,kBAAkB,EAClB,kBAAkB,EAClB,gBAAgB,EAChB,iBAAiB,EACjB,iBAAiB,EACjB,gBAAgB,EAChB,cAAc,EACd,mBAAmB,EACnB,cAAc,EACd,mBAAmB,EACnB,mBAAmB,EACnB,oBAAoB,EACpB,kBAAkB,EAClB,iBAAiB,EACjB,kBAAkB,EAClB,gBAAgB,EAChB,cAAc,EACd,WAAW,EACX,WAAW,EACX,sBAAsB,EACtB,oBAAoB,EACpB,mBAAmB,EACnB,aAAa,GACd,MAAM,aAAa,CAAC;AAGrB,YAAY,EACV,SAAS,EACT,YAAY,EACZ,kBAAkB,EAClB,QAAQ,EACR,aAAa,EACb,cAAc,EACd,YAAY,EACZ,WAAW,EACX,kBAAkB,EAClB,mBAAmB,EACnB,iBAAiB,EACjB,YAAY,EACZ,UAAU,EACV,WAAW,EACX,UAAU,EACV,QAAQ,EACR,aAAa,EACb,QAAQ,EACR,aAAa,EACb,WAAW,EACX,YAAY,EACZ,UAAU,EACV,QAAQ,EACR,KAAK,EACL,KAAK,EACL,cAAc,EACd,gBAAgB,GACjB,MAAM,aAAa,CAAC;AAGrB,OAAO,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AAC3C,YAAY,EAAE,cAAc,EAAE,kBAAkB,EAAE,mBAAmB,EAAE,MAAM,iBAAiB,CAAC;AAG/F,OAAO,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AAGlD,OAAO,EAAE,YAAY,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAG7D,OAAO,EAAE,YAAY,EAAE,gBAAgB,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;AAC3E,YAAY,EAAE,SAAS,EAAE,eAAe,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AAGxE,OAAO,EAAE,qBAAqB,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AACrE,YAAY,EAAE,gBAAgB,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAGtE,OAAO,EAAE,kBAAkB,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AACtE,YAAY,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAGjD,OAAO,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAC;AACnD,YAAY,EAAE,cAAc,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAGhE,OAAO,EAAE,eAAe,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAC;AAC5D,YAAY,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AAGzD,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAG7C,OAAO,EACL,gBAAgB,EAChB,oBAAoB,GACrB,MAAM,eAAe,CAAC;AACvB,YAAY,EACV,cAAc,EACd,aAAa,EACb,YAAY,GACb,MAAM,eAAe,CAAC;AACvB,OAAO,EAAE,iBAAiB,EAAE,oBAAoB,EAAE,MAAM,eAAe,CAAC;AACxE,OAAO,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAC7D,YAAY,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAGnE,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAQrE,OAAO,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAChD,YAAY,EAAE,gBAAgB,EAAE,eAAe,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAC"}
package/dist/index.js CHANGED
@@ -1,17 +1,45 @@
1
- export * from "./build-data.js";
2
- export * from "./config.js";
3
- export * from "./decisions.js";
4
- export * from "./enrich.js";
5
- export * from "./github-client.js";
6
- export * from "./github.js";
7
- export * from "./health.js";
8
- export * from "./importer.js";
9
- export * from "./io.js";
10
- export * from "./llms.js";
11
- export * from "./markdown.js";
12
- export * from "./parseReadme.js";
13
- export * from "./schema.js";
14
- export * from "./sitemap.js";
15
- export * from "./slug.js";
16
- export * from "./validate.js";
1
+ /**
2
+ * @grove-dev/core — headless engine for Grove.
3
+ *
4
+ * V1 public surface (locked). The list below is the complete set of
5
+ * symbols exported by this package — every other symbol is internal
6
+ * and may change without notice.
7
+ *
8
+ * To audit: `grep -E '^export ' src/index.ts | sort`
9
+ */
10
+ // ── Config ────────────────────────────────────────────────────────────
11
+ export { defineConfig, loadConfig } from "./config.js";
12
+ // ── Schemas (Zod) ─────────────────────────────────────────────────────
13
+ export { blueprintSchema, resourceKindSchema, healthStatusSchema, healthTierSchema, healthBlockSchema, healthEntrySchema, healthFileSchema, decisionSchema, decisionsFileSchema, overrideSchema, overridesFileSchema, projectRecordSchema, resourceRecordSchema, entityRecordSchema, projectTypeSchema, resourceTypeSchema, entityTypeSchema, appLabelSchema, scoreSchema, linksSchema, githubRepositorySchema, githubMetadataSchema, githubLicenseSchema, blueprintKind, } from "./schema.js";
14
+ // ── Build pipeline (library form of `grove generate`) ────────────────
15
+ export { generate } from "./build-data.js";
16
+ // ── Record YAML helpers (used by `grove import` and the generator) ──
17
+ export { stringifyRecordYaml } from "./schema.js";
18
+ // ── Sitemap (library form of `grove sitemap`) ────────────────────────
19
+ export { buildSitemap, buildSitemapXml } from "./sitemap.js";
20
+ // ── llms.txt (library form of `grove llms`) ───────────────────────────
21
+ export { buildLlmsTxt, buildLlmsFullTxt, buildLlmsFiles } from "./llms.js";
22
+ // ── Cleanup (library form of `grove cleanup stale`) ──────────────────
23
+ export { pickCleanupCandidates, cleanupStale } from "./decisions.js";
24
+ // ── GitHub: parsing + REST metadata ──────────────────────────────────
25
+ export { parseGithubRepoUrl, fetchGithubMetadata } from "./github.js";
26
+ // ── GitHub: HTML enrichment (token-free fallback) ────────────────────
27
+ export { enrichFromGithubHtml } from "./enrich.js";
28
+ // ── GitHub: client helpers (V1 public subset) ────────────────────────
29
+ export { rateLimitWaitMs, sleep } from "./github-client.js";
30
+ // ── Health: classification ────────────────────────────────────────────
31
+ export { classifyHealth } from "./health.js";
32
+ // ── Importers / parsers ──────────────────────────────────────────────
33
+ export { detectGithubRepo, parseAwesomeMarkdown, } from "./markdown.js";
34
+ export { importAwesomeList, writeImportedRecords } from "./importer.js";
35
+ export { parseEntry, parseSections } from "./parseReadme.js";
36
+ // ── IO helpers ────────────────────────────────────────────────────────
37
+ export { readYamlFile, writeYamlFile, writeTextFile } from "./io.js";
38
+ // ── Validation ────────────────────────────────────────────────────────
39
+ // `validateProject` is the library form of `grove validate`. It is
40
+ // kept in the V1 surface because the CLI's `validate` command needs
41
+ // the structured issue output (codes + messages) that `generate`'s
42
+ // throw path does not produce. This is the only V0-era name that
43
+ // survives — every other removed name from V0 is gone.
44
+ export { validateProject } from "./validate.js";
17
45
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,iBAAiB,CAAC;AAChC,cAAc,aAAa,CAAC;AAC5B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,aAAa,CAAC;AAC5B,cAAc,oBAAoB,CAAC;AACnC,cAAc,aAAa,CAAC;AAC5B,cAAc,aAAa,CAAC;AAC5B,cAAc,eAAe,CAAC;AAC9B,cAAc,SAAS,CAAC;AACxB,cAAc,WAAW,CAAC;AAC1B,cAAc,eAAe,CAAC;AAC9B,cAAc,kBAAkB,CAAC;AACjC,cAAc,aAAa,CAAC;AAC5B,cAAc,cAAc,CAAC;AAC7B,cAAc,WAAW,CAAC;AAC1B,cAAc,eAAe,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AACH,yEAAyE;AACzE,OAAO,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAGvD,yEAAyE;AACzE,OAAO,EACL,eAAe,EACf,kBAAkB,EAClB,kBAAkB,EAClB,gBAAgB,EAChB,iBAAiB,EACjB,iBAAiB,EACjB,gBAAgB,EAChB,cAAc,EACd,mBAAmB,EACnB,cAAc,EACd,mBAAmB,EACnB,mBAAmB,EACnB,oBAAoB,EACpB,kBAAkB,EAClB,iBAAiB,EACjB,kBAAkB,EAClB,gBAAgB,EAChB,cAAc,EACd,WAAW,EACX,WAAW,EACX,sBAAsB,EACtB,oBAAoB,EACpB,mBAAmB,EACnB,aAAa,GACd,MAAM,aAAa,CAAC;AAiCrB,wEAAwE;AACxE,OAAO,EAAE,QAAQ,EAAE,MAAM,iBAAiB,CAAC;AAG3C,uEAAuE;AACvE,OAAO,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AAElD,wEAAwE;AACxE,OAAO,EAAE,YAAY,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAE7D,yEAAyE;AACzE,OAAO,EAAE,YAAY,EAAE,gBAAgB,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;AAG3E,wEAAwE;AACxE,OAAO,EAAE,qBAAqB,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAGrE,wEAAwE;AACxE,OAAO,EAAE,kBAAkB,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AAGtE,wEAAwE;AACxE,OAAO,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAC;AAGnD,wEAAwE;AACxE,OAAO,EAAE,eAAe,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAC;AAG5D,yEAAyE;AACzE,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAE7C,wEAAwE;AACxE,OAAO,EACL,gBAAgB,EAChB,oBAAoB,GACrB,MAAM,eAAe,CAAC;AAMvB,OAAO,EAAE,iBAAiB,EAAE,oBAAoB,EAAE,MAAM,eAAe,CAAC;AACxE,OAAO,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAG7D,yEAAyE;AACzE,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AAErE,yEAAyE;AACzE,mEAAmE;AACnE,oEAAoE;AACpE,mEAAmE;AACnE,iEAAiE;AACjE,uDAAuD;AACvD,OAAO,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"llms.d.ts","sourceRoot":"","sources":["../src/llms.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,WAAW,EAAc,MAAM,aAAa,CAAC;AAE3D,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,YAAY,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CACzB;AAED,MAAM,WAAW,SAAS;IACxB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,eAAe,EAAE,CAAC;CAC5B;AAED,MAAM,WAAW,UAAU;IACzB,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;CACjB;AA4DD,wBAAgB,YAAY,CAAC,KAAK,EAAE,SAAS,EAAE,MAAM,EAAE,WAAW,GAAG,MAAM,CAkB1E;AAED,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,SAAS,EAAE,MAAM,EAAE,WAAW,GAAG,MAAM,CA4B9E;AAED,wBAAsB,cAAc,CAClC,KAAK,EAAE,SAAS,EAChB,GAAG,SAAgB,EACnB,MAAM,CAAC,EAAE,WAAW,GACnB,OAAO,CAAC,UAAU,CAAC,CAerB"}
1
+ {"version":3,"file":"llms.d.ts","sourceRoot":"","sources":["../src/llms.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,WAAW,EAAc,MAAM,aAAa,CAAC;AAG3D,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,YAAY,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;CACzB;AAED,MAAM,WAAW,SAAS;IACxB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,eAAe,EAAE,CAAC;CAC5B;AAED,MAAM,WAAW,UAAU;IACzB,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;CACjB;AA6DD,wBAAgB,YAAY,CAAC,KAAK,EAAE,SAAS,EAAE,MAAM,EAAE,WAAW,GAAG,MAAM,CAkB1E;AAED,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,SAAS,EAAE,MAAM,EAAE,WAAW,GAAG,MAAM,CA4B9E;AAED,wBAAsB,cAAc,CAClC,KAAK,EAAE,SAAS,EAChB,GAAG,SAAgB,EACnB,MAAM,CAAC,EAAE,WAAW,GACnB,OAAO,CAAC,UAAU,CAAC,CAerB"}
package/dist/llms.js CHANGED
@@ -1,6 +1,7 @@
1
1
  import { mkdir, writeFile } from "node:fs/promises";
2
2
  import { join, resolve } from "node:path";
3
3
  import { loadConfig } from "./config.js";
4
+ import { slugify } from "./slug.js";
4
5
  const BLUEPRINT_INDEX = {
5
6
  "project-directory": "projects",
6
7
  "resource-hub": "resources",
@@ -12,10 +13,11 @@ const BLUEPRINT_PLURAL = {
12
13
  "ecosystem-map": "Entities",
13
14
  };
14
15
  function slug(value) {
15
- return String(value)
16
- .toLowerCase()
17
- .replace(/[^a-z0-9]+/g, "-")
18
- .replace(/^-+|-+$/g, "");
16
+ // Delegate to the package's single public slugifier. llms.txt anchor
17
+ // links only need the base form (no collision counter), and the
18
+ // public `slugify` matches the GitHub-flavored anchor format the
19
+ // downstream Markdown renderer expects.
20
+ return slugify(String(value));
19
21
  }
20
22
  function truncate(value, max) {
21
23
  return value.replace(/\s+/g, " ").slice(0, max);
package/dist/llms.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"llms.js","sourceRoot":"","sources":["../src/llms.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"llms.js","sourceRoot":"","sources":["../src/llms.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"markdown.d.ts","sourceRoot":"","sources":["../src/markdown.ts"],"names":[],"mappings":"AAGA,OAAO,EAAiB,KAAK,SAAS,EAAsB,MAAM,aAAa,CAAC;AAEhF,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE;QAAE,MAAM,CAAC,EAAE,MAAM,CAAC;QAAC,OAAO,CAAC,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;CAC/D;AAED,MAAM,WAAW,aAAa;IAC5B,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,MAAM,EAAE,CAAC;IACrB,cAAc,EAAE,MAAM,CAAC;IACvB,UAAU,EAAE,MAAM,CAAC;IACnB,kBAAkB,EAAE,MAAM,CAAC;CAC5B;AAED,MAAM,WAAW,YAAY;IAC3B,OAAO,EAAE,cAAc,EAAE,CAAC;IAC1B,MAAM,EAAE,aAAa,CAAC;CACvB;AA0BD,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAMhE;AA2CD,wBAAgB,oBAAoB,CAClC,IAAI,EAAE,MAAM,EACZ,OAAO,GAAE;IAAE,IAAI,CAAC,EAAE,MAAM,CAAC;IAAC,SAAS,CAAC,EAAE,MAAM,CAAA;CAAO,GAClD,YAAY,CAyGd;AAED,wBAAsB,iBAAiB,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,CAAC,CAuB5E;AAED;;;;GAIG;AACH,wBAAsB,oBAAoB,CACxC,MAAM,EAAE,YAAY,EACpB,GAAG,SAAgB,EACnB,SAAS,GAAE,SAA+B,GACzC,OAAO,CAAC;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,GAAG,EAAE,MAAM,CAAA;CAAE,CAAC,CA+B3C"}
1
+ {"version":3,"file":"markdown.d.ts","sourceRoot":"","sources":["../src/markdown.ts"],"names":[],"mappings":"AAGA,OAAO,EAAiB,KAAK,SAAS,EAAsB,MAAM,aAAa,CAAC;AAGhF,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE;QAAE,MAAM,CAAC,EAAE,MAAM,CAAC;QAAC,OAAO,CAAC,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;CAC/D;AAED,MAAM,WAAW,aAAa;IAC5B,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,MAAM,EAAE,CAAC;IACrB,cAAc,EAAE,MAAM,CAAC;IACvB,UAAU,EAAE,MAAM,CAAC;IACnB,kBAAkB,EAAE,MAAM,CAAC;CAC5B;AAED,MAAM,WAAW,YAAY;IAC3B,OAAO,EAAE,cAAc,EAAE,CAAC;IAC1B,MAAM,EAAE,aAAa,CAAC;CACvB;AA0BD,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAShE;AA2CD,wBAAgB,oBAAoB,CAClC,IAAI,EAAE,MAAM,EACZ,OAAO,GAAE;IAAE,IAAI,CAAC,EAAE,MAAM,CAAC;IAAC,SAAS,CAAC,EAAE,MAAM,CAAA;CAAO,GAClD,YAAY,CAyGd;AAED,wBAAsB,iBAAiB,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,YAAY,CAAC,CAuB5E;AAED;;;;GAIG;AACH,wBAAsB,oBAAoB,CACxC,MAAM,EAAE,YAAY,EACpB,GAAG,SAAgB,EACnB,SAAS,GAAE,SAA+B,GACzC,OAAO,CAAC;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,GAAG,EAAE,MAAM,CAAA;CAAE,CAAC,CA+B3C"}