@grove-dev/core 0.5.3 → 0.6.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 (54) hide show
  1. package/assets/fonts/Inter-Regular.ttf +0 -0
  2. package/assets/fonts/Inter-SemiBold.ttf +0 -0
  3. package/assets/fonts/LICENSE-Inter.txt +92 -0
  4. package/dist/audit.d.ts.map +1 -1
  5. package/dist/audit.js +6 -0
  6. package/dist/audit.js.map +1 -1
  7. package/dist/build-data.d.ts.map +1 -1
  8. package/dist/build-data.js +2 -0
  9. package/dist/build-data.js.map +1 -1
  10. package/dist/collections-io.d.ts +12 -0
  11. package/dist/collections-io.d.ts.map +1 -0
  12. package/dist/collections-io.js +39 -0
  13. package/dist/collections-io.js.map +1 -0
  14. package/dist/directory-format.d.ts +10 -0
  15. package/dist/directory-format.d.ts.map +1 -1
  16. package/dist/directory-format.js +20 -0
  17. package/dist/directory-format.js.map +1 -1
  18. package/dist/directory-search.d.ts +45 -3
  19. package/dist/directory-search.d.ts.map +1 -1
  20. package/dist/directory-search.js +74 -8
  21. package/dist/directory-search.js.map +1 -1
  22. package/dist/host.d.ts +2 -0
  23. package/dist/host.d.ts.map +1 -0
  24. package/dist/host.js +15 -0
  25. package/dist/host.js.map +1 -0
  26. package/dist/index.d.ts +5 -1
  27. package/dist/index.d.ts.map +1 -1
  28. package/dist/index.js +9 -1
  29. package/dist/index.js.map +1 -1
  30. package/dist/og-image.d.ts +85 -0
  31. package/dist/og-image.d.ts.map +1 -0
  32. package/dist/og-image.js +316 -0
  33. package/dist/og-image.js.map +1 -0
  34. package/dist/page-document.d.ts +11 -0
  35. package/dist/page-document.d.ts.map +1 -1
  36. package/dist/page-document.js +23 -32
  37. package/dist/page-document.js.map +1 -1
  38. package/dist/prepare.d.ts +2 -0
  39. package/dist/prepare.d.ts.map +1 -1
  40. package/dist/prepare.js +106 -2
  41. package/dist/prepare.js.map +1 -1
  42. package/dist/schema.d.ts +4 -0
  43. package/dist/schema.d.ts.map +1 -1
  44. package/dist/schema.js +17 -1
  45. package/dist/schema.js.map +1 -1
  46. package/dist/site-artifacts.d.ts.map +1 -1
  47. package/dist/site-artifacts.js +5 -12
  48. package/dist/site-artifacts.js.map +1 -1
  49. package/dist/sitemap.d.ts +24 -0
  50. package/dist/sitemap.d.ts.map +1 -1
  51. package/dist/sitemap.js +82 -5
  52. package/dist/sitemap.js.map +1 -1
  53. package/package.json +4 -1
  54. package/LICENSE +0 -21
package/dist/sitemap.d.ts CHANGED
@@ -15,6 +15,26 @@ export interface SitemapInput {
15
15
  addedAt?: string | null;
16
16
  }>;
17
17
  indexSlug?: string;
18
+ /** Collections to list under /collections/. Entries with `index: false`
19
+ * are noindex pages and are excluded. Passing the array (even empty)
20
+ * also emits the /collections/ index URL. */
21
+ collections?: Array<{
22
+ slug: string;
23
+ index?: boolean;
24
+ lastReviewedAt?: string;
25
+ }>;
26
+ /** Taxonomy route ids (matching the scaffold's getStaticPaths params).
27
+ * Emits /categories/, /stacks/ indexes plus each detail URL.
28
+ * Licenses have detail pages only (the scaffold has no licenses index). */
29
+ taxonomies?: {
30
+ categories?: string[];
31
+ stacks?: string[];
32
+ licenses?: string[];
33
+ };
34
+ /** Additional indexable static routes (site-relative, e.g. "about/").
35
+ * Defaults to the scaffold's about + contributors pages. Noindex
36
+ * routes (submit, 404, empty) must never be listed here. */
37
+ staticPaths?: string[];
18
38
  }
19
39
  export interface SitemapResult {
20
40
  path: string;
@@ -24,6 +44,10 @@ export declare function buildSitemapXml(entries: SitemapEntry[]): string;
24
44
  /**
25
45
  * Build a sitemap from generated records data + Grove config.
26
46
  * Writes to public/sitemap.xml.
47
+ *
48
+ * Every loc ends with a trailing slash to match the canonical URLs the
49
+ * pages emit (`build.format: 'directory'`) — a loc that disagrees with
50
+ * the page's own canonical makes search engines pick one arbitrarily.
27
51
  */
28
52
  export declare function buildSitemap(input: SitemapInput, cwd?: string, config?: GroveConfig): Promise<SitemapResult>;
29
53
  export interface SitemapSection {
@@ -1 +1 @@
1
- {"version":3,"file":"sitemap.d.ts","sourceRoot":"","sources":["../src/sitemap.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,WAAW,EAAc,MAAM,aAAa,CAAC;AAE3D,MAAM,WAAW,YAAY;IAC3B,GAAG,EAAE,MAAM,CAAC;IACZ,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,UAAU,CAAC,EAAE,QAAQ,GAAG,QAAQ,GAAG,OAAO,GAAG,QAAQ,GAAG,SAAS,GAAG,QAAQ,GAAG,OAAO,CAAC;IACvF,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,YAAY;IAC3B,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,WAAW,EAAE,MAAM,CAAC;IACpB,KAAK,EAAE,KAAK,CAAC;QACX,IAAI,EAAE,MAAM,CAAC;QACb,UAAU,CAAC,EAAE,MAAM,CAAC;QACpB,YAAY,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;QAC7B,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;KACzB,CAAC,CAAC;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;CAClB;AAqBD,wBAAgB,eAAe,CAAC,OAAO,EAAE,YAAY,EAAE,GAAG,MAAM,CAO/D;AAYD;;;GAGG;AACH,wBAAsB,YAAY,CAChC,KAAK,EAAE,YAAY,EACnB,GAAG,SAAgB,EACnB,MAAM,CAAC,EAAE,WAAW,GACnB,OAAO,CAAC,aAAa,CAAC,CAoCxB;AAED,MAAM,WAAW,cAAc;IAC7B,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,WAAW,EAAE,MAAM,EAAE,CAAC;IACtB,UAAU,EAAE,MAAM,EAAE,CAAC;CACtB;AAED,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,cAAc,GAAG,MAAM,CAiBnF"}
1
+ {"version":3,"file":"sitemap.d.ts","sourceRoot":"","sources":["../src/sitemap.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,WAAW,EAAc,MAAM,aAAa,CAAC;AAG3D,MAAM,WAAW,YAAY;IAC3B,GAAG,EAAE,MAAM,CAAC;IACZ,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,UAAU,CAAC,EAAE,QAAQ,GAAG,QAAQ,GAAG,OAAO,GAAG,QAAQ,GAAG,SAAS,GAAG,QAAQ,GAAG,OAAO,CAAC;IACvF,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,YAAY;IAC3B,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,WAAW,EAAE,MAAM,CAAC;IACpB,KAAK,EAAE,KAAK,CAAC;QACX,IAAI,EAAE,MAAM,CAAC;QACb,UAAU,CAAC,EAAE,MAAM,CAAC;QACpB,YAAY,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;QAC7B,OAAO,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;KACzB,CAAC,CAAC;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB;;kDAE8C;IAC9C,WAAW,CAAC,EAAE,KAAK,CAAC;QAClB,IAAI,EAAE,MAAM,CAAC;QACb,KAAK,CAAC,EAAE,OAAO,CAAC;QAChB,cAAc,CAAC,EAAE,MAAM,CAAC;KACzB,CAAC,CAAC;IACH;;gFAE4E;IAC5E,UAAU,CAAC,EAAE;QACX,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC;QACtB,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;QAClB,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;KACrB,CAAC;IACF;;iEAE6D;IAC7D,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC;CACxB;AAED,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;CAClB;AAqBD,wBAAgB,eAAe,CAAC,OAAO,EAAE,YAAY,EAAE,GAAG,MAAM,CAO/D;AAYD;;;;;;;GAOG;AACH,wBAAsB,YAAY,CAChC,KAAK,EAAE,YAAY,EACnB,GAAG,SAAgB,EACnB,MAAM,CAAC,EAAE,WAAW,GACnB,OAAO,CAAC,aAAa,CAAC,CAkHxB;AAED,MAAM,WAAW,cAAc;IAC7B,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,WAAW,EAAE,MAAM,EAAE,CAAC;IACtB,UAAU,EAAE,MAAM,EAAE,CAAC;CACtB;AAED,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,cAAc,GAAG,MAAM,CAiBnF"}
package/dist/sitemap.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 { totalPages } from "./directory-search.js";
4
5
  function escapeXml(value) {
5
6
  return value
6
7
  .replace(/&/g, "&amp;")
@@ -39,6 +40,10 @@ function directorySlug(config) {
39
40
  /**
40
41
  * Build a sitemap from generated records data + Grove config.
41
42
  * Writes to public/sitemap.xml.
43
+ *
44
+ * Every loc ends with a trailing slash to match the canonical URLs the
45
+ * pages emit (`build.format: 'directory'`) — a loc that disagrees with
46
+ * the page's own canonical makes search engines pick one arbitrarily.
42
47
  */
43
48
  export async function buildSitemap(input, cwd = process.cwd(), config) {
44
49
  const cfg = config ?? (await loadConfig(cwd));
@@ -52,22 +57,94 @@ export async function buildSitemap(input, cwd = process.cwd(), config) {
52
57
  priority: 1.0,
53
58
  });
54
59
  entries.push({
55
- loc: `${siteUrl}/${indexSlug}`,
60
+ loc: `${siteUrl}/${indexSlug}/`,
56
61
  lastmod: input.generatedAt,
57
62
  changefreq: "daily",
58
63
  priority: 0.9,
59
64
  });
60
- for (const item of input.items) {
61
- if (item.visibility === "hide" || item.visibility === "remove")
62
- continue;
65
+ const listed = input.items.filter((item) => item.visibility !== "hide" && item.visibility !== "remove");
66
+ // Browse pages 2..n. They are prerendered documents, and on a large
67
+ // directory they are the path a crawler takes to every record that
68
+ // is not on page 1 — leaving them out is the one thing that would
69
+ // make paginating them pointless.
70
+ for (let page = 2; page <= totalPages(listed.length); page += 1) {
71
+ entries.push({
72
+ loc: `${siteUrl}/${indexSlug}/page/${page}/`,
73
+ lastmod: input.generatedAt,
74
+ changefreq: "daily",
75
+ priority: 0.6,
76
+ });
77
+ }
78
+ for (const item of listed) {
63
79
  const lastmod = item.lastCommitAt ?? item.addedAt ?? input.generatedAt;
64
80
  entries.push({
65
- loc: `${siteUrl}/${indexSlug}/${item.slug}`,
81
+ loc: `${siteUrl}/${indexSlug}/${item.slug}/`,
66
82
  lastmod,
67
83
  changefreq: "weekly",
68
84
  priority: 0.7,
69
85
  });
70
86
  }
87
+ // Collections — the priority curated surface. Only indexable ones;
88
+ // a collection with `seo.index: false` renders with noindex and must
89
+ // not be advertised here.
90
+ if (input.collections) {
91
+ entries.push({
92
+ loc: `${siteUrl}/collections/`,
93
+ lastmod: input.generatedAt,
94
+ changefreq: "weekly",
95
+ priority: 0.8,
96
+ });
97
+ for (const collection of input.collections) {
98
+ if (collection.index === false)
99
+ continue;
100
+ entries.push({
101
+ loc: `${siteUrl}/collections/${collection.slug}/`,
102
+ lastmod: collection.lastReviewedAt ?? input.generatedAt,
103
+ changefreq: "weekly",
104
+ priority: 0.8,
105
+ });
106
+ }
107
+ }
108
+ // Taxonomy landing pages. Categories and stacks have index pages in
109
+ // the scaffold; licenses only have detail pages.
110
+ const tax = input.taxonomies;
111
+ if (tax) {
112
+ for (const facet of ["categories", "stacks"]) {
113
+ const ids = tax[facet];
114
+ if (!ids?.length)
115
+ continue;
116
+ entries.push({
117
+ loc: `${siteUrl}/${facet}/`,
118
+ lastmod: input.generatedAt,
119
+ changefreq: "weekly",
120
+ priority: 0.6,
121
+ });
122
+ for (const id of ids) {
123
+ entries.push({
124
+ loc: `${siteUrl}/${facet}/${id}/`,
125
+ lastmod: input.generatedAt,
126
+ changefreq: "weekly",
127
+ priority: 0.6,
128
+ });
129
+ }
130
+ }
131
+ for (const id of tax.licenses ?? []) {
132
+ entries.push({
133
+ loc: `${siteUrl}/licenses/${id}/`,
134
+ lastmod: input.generatedAt,
135
+ changefreq: "monthly",
136
+ priority: 0.5,
137
+ });
138
+ }
139
+ }
140
+ for (const path of input.staticPaths ?? ["about/", "contributors/"]) {
141
+ entries.push({
142
+ loc: `${siteUrl}/${path.replace(/^\//, "")}`,
143
+ lastmod: input.generatedAt,
144
+ changefreq: "monthly",
145
+ priority: 0.4,
146
+ });
147
+ }
71
148
  const xml = buildSitemapXml(entries);
72
149
  const publicDir = resolve(cwd, cfg.paths.publicDir);
73
150
  await mkdir(publicDir, { recursive: true });
@@ -1 +1 @@
1
- {"version":3,"file":"sitemap.js","sourceRoot":"","sources":["../src/sitemap.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"sitemap.js","sourceRoot":"","sources":["../src/sitemap.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@grove-dev/core",
3
- "version": "0.5.3",
3
+ "version": "0.6.0",
4
4
  "type": "module",
5
5
  "description": "Headless engine for Grove: resource schema, config, importers, validators, taxonomy, sitemap, llms.txt, and the data build pipeline.",
6
6
  "license": "MIT",
@@ -42,10 +42,13 @@
42
42
  },
43
43
  "files": [
44
44
  "dist",
45
+ "assets",
45
46
  "README.md"
46
47
  ],
47
48
  "dependencies": {
49
+ "@resvg/resvg-js": "^2.6.2",
48
50
  "jiti": "^2.6.1",
51
+ "satori": "^0.29.0",
49
52
  "yaml": "^2.9.0",
50
53
  "zod": "^4.4.3"
51
54
  },
package/LICENSE DELETED
@@ -1,21 +0,0 @@
1
- MIT License
2
-
3
- Copyright (c) 2026 Turtuvshin Byambaa
4
-
5
- Permission is hereby granted, free of charge, to any person obtaining a copy
6
- of this software and associated documentation files (the "Software"), to deal
7
- in the Software without restriction, including without limitation the rights
8
- to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
- copies of the Software, and to permit persons to whom the Software is
10
- furnished to do so, subject to the following conditions:
11
-
12
- The above copyright notice and this permission notice shall be included in all
13
- copies or substantial portions of the Software.
14
-
15
- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
- IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
- FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
- AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
- LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
- OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
- SOFTWARE.