@grove-dev/core 0.3.4 → 0.4.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 (50) hide show
  1. package/README.md +58 -0
  2. package/dist/audit.d.ts +43 -0
  3. package/dist/audit.d.ts.map +1 -0
  4. package/dist/audit.js +26 -0
  5. package/dist/audit.js.map +1 -0
  6. package/dist/collections.d.ts +72 -0
  7. package/dist/collections.d.ts.map +1 -0
  8. package/dist/collections.js +83 -0
  9. package/dist/collections.js.map +1 -0
  10. package/dist/collector.d.ts +10 -0
  11. package/dist/collector.d.ts.map +1 -0
  12. package/dist/collector.js +9 -0
  13. package/dist/collector.js.map +1 -0
  14. package/dist/github.d.ts +13 -0
  15. package/dist/github.d.ts.map +1 -1
  16. package/dist/github.js +50 -0
  17. package/dist/github.js.map +1 -1
  18. package/dist/index.d.ts +13 -3
  19. package/dist/index.d.ts.map +1 -1
  20. package/dist/index.js +17 -3
  21. package/dist/index.js.map +1 -1
  22. package/dist/llms.d.ts +24 -0
  23. package/dist/llms.d.ts.map +1 -1
  24. package/dist/llms.js +62 -25
  25. package/dist/llms.js.map +1 -1
  26. package/dist/page-document.d.ts +126 -0
  27. package/dist/page-document.d.ts.map +1 -0
  28. package/dist/page-document.js +201 -0
  29. package/dist/page-document.js.map +1 -0
  30. package/dist/related.d.ts +3 -0
  31. package/dist/related.d.ts.map +1 -0
  32. package/dist/related.js +18 -0
  33. package/dist/related.js.map +1 -0
  34. package/dist/robots.d.ts +6 -0
  35. package/dist/robots.d.ts.map +1 -0
  36. package/dist/robots.js +21 -0
  37. package/dist/robots.js.map +1 -0
  38. package/dist/schema.d.ts +46 -0
  39. package/dist/schema.d.ts.map +1 -1
  40. package/dist/schema.js +30 -0
  41. package/dist/schema.js.map +1 -1
  42. package/dist/site-artifacts.d.ts +0 -1
  43. package/dist/site-artifacts.d.ts.map +1 -1
  44. package/dist/site-artifacts.js +5 -35
  45. package/dist/site-artifacts.js.map +1 -1
  46. package/dist/sitemap.d.ts +7 -0
  47. package/dist/sitemap.d.ts.map +1 -1
  48. package/dist/sitemap.js +18 -0
  49. package/dist/sitemap.js.map +1 -1
  50. package/package.json +1 -1
package/dist/llms.js CHANGED
@@ -76,31 +76,68 @@ Use /llms-full.txt for record-level details. Prefer detail pages for citations.
76
76
  `;
77
77
  }
78
78
  export function buildLlmsFullTxt(input, config) {
79
- const siteUrl = (input.siteUrl ?? config.site.url ?? "").replace(/\/$/, "");
80
- const indexSlug = directorySlug(config);
81
- const visible = input.records.filter((r) => r.visibility !== "hide" && r.visibility !== "remove");
82
- const plural = pluralLabel(config);
83
- const index = visible.map(buildIndexLine).join("\n");
84
- const sections = visible
85
- .map((record) => buildDetailSection(record, siteUrl, indexSlug))
86
- .join("\n\n");
87
- return [
88
- `# ${config.site.name} — full directory`,
89
- "",
90
- `> Generated ${input.generatedAt} from ${input.records.length} records.`,
91
- `> Source: ${siteUrl}/${indexSlug} · Regenerate with \`pnpm build\`.`,
92
- "",
93
- "Each section below mirrors one record detail page.",
94
- "",
95
- "## Index",
96
- "",
97
- index,
98
- "",
99
- sections ? `## ${plural}` : "",
100
- "",
101
- sections,
102
- "",
103
- ].join("\n");
79
+ // Discriminate on input shape rather than `config` presence: a caller that
80
+ // mistakenly passes a catalog-shaped input alongside a config would otherwise
81
+ // be routed into the legacy path and crash on missing legacy fields.
82
+ if ("generatedAt" in input) {
83
+ const legacyInput = input;
84
+ const siteUrl = (legacyInput.siteUrl ?? config?.site.url ?? "").replace(/\/$/, "");
85
+ const indexSlug = config ? directorySlug(config) : "items";
86
+ const visible = legacyInput.records.filter((r) => r.visibility !== "hide" && r.visibility !== "remove");
87
+ const plural = config ? pluralLabel(config) : "Records";
88
+ const index = visible.map(buildIndexLine).join("\n");
89
+ const sections = visible
90
+ .map((record) => buildDetailSection(record, siteUrl, indexSlug))
91
+ .join("\n\n");
92
+ return [
93
+ `# ${config?.site.name ?? legacyInput.siteUrl ?? "Directory"} — full directory`,
94
+ "",
95
+ `> Generated ${legacyInput.generatedAt} from ${legacyInput.records.length} records.`,
96
+ `> Source: ${siteUrl}/${indexSlug} · Regenerate with \`pnpm build\`.`,
97
+ "",
98
+ "Each section below mirrors one record detail page.",
99
+ "",
100
+ "## Index",
101
+ "",
102
+ index,
103
+ "",
104
+ sections ? `## ${plural}` : "",
105
+ "",
106
+ sections,
107
+ "",
108
+ ].join("\n");
109
+ }
110
+ const catalogInput = input;
111
+ const lines = [];
112
+ lines.push(`# ${catalogInput.site.name} — full catalog`);
113
+ lines.push("");
114
+ lines.push(`> ${catalogInput.site.description}`);
115
+ lines.push(`Updated: ${catalogInput.updatedAt}`);
116
+ lines.push("");
117
+ lines.push(`Site: ${catalogInput.site.url}`);
118
+ lines.push("");
119
+ lines.push("## Taxonomies");
120
+ for (const taxonomy of catalogInput.taxonomies) {
121
+ lines.push(`### ${taxonomy.title}`);
122
+ lines.push("");
123
+ if (taxonomy.description)
124
+ lines.push(taxonomy.description);
125
+ lines.push(`URL: ${taxonomy.url}`);
126
+ lines.push("");
127
+ }
128
+ lines.push("## Records");
129
+ for (const record of catalogInput.records) {
130
+ lines.push(`### ${record.title}`);
131
+ lines.push("");
132
+ lines.push(record.description);
133
+ if (record.stack)
134
+ lines.push(`Stack: ${record.stack}`);
135
+ if (record.license)
136
+ lines.push(`License: ${record.license}`);
137
+ lines.push(`URL: ${record.url}`);
138
+ lines.push("");
139
+ }
140
+ return lines.join("\n");
104
141
  }
105
142
  export async function buildLlmsFiles(input, cwd = process.cwd(), config) {
106
143
  const cfg = config ?? (await loadConfig(cwd));
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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"}
@@ -0,0 +1,126 @@
1
+ /**
2
+ * PageDocument — the unified page-level contract for every page in a Grove
3
+ * project. A `PageDocument` declares the page's identity, its rendered
4
+ * metadata (title, description, OG, Twitter), the JSON-LD nodes it wants
5
+ * emitted, and its discovery profile (sitemap, llms, related links).
6
+ *
7
+ * Everything the framework renders in `<head>` (title, description,
8
+ * canonical, OG, Twitter, JSON-LD) is derived from this single model.
9
+ * `definePageDocument` is the canonical constructor — it validates the
10
+ * invariants (title present, OG URL matches canonical, etc.) so callers
11
+ * can't accidentally construct a malformed document.
12
+ *
13
+ * The JSON-LD registry (`siteSchema`, `collectionSchema`, `recordSchema`,
14
+ * `contentSchema`, `buildJsonLd`) is a small blueprint layer: each schema
15
+ * function takes a typed input and returns the JSON-LD node graph that
16
+ * `GroveDocumentHead` will serialize into `<script type="application/ld+json">`.
17
+ *
18
+ * `validateJsonLd` is the validator that runs over a node graph and
19
+ * reports well-formedness issues (missing @context, relative URLs, duplicate
20
+ * @ids, invalid dates). It is designed to be wired into the build pipeline
21
+ * so a malformed page fails fast.
22
+ */
23
+ export type DocumentPageType = "home" | "directory" | "collection" | "record" | "content" | "empty" | "404";
24
+ export interface OpenGraphMetadata {
25
+ title: string;
26
+ description: string;
27
+ url: string;
28
+ image: string;
29
+ type: "website" | "article";
30
+ siteName?: string;
31
+ }
32
+ export interface TwitterMetadata {
33
+ card: "summary" | "summary_large_image";
34
+ site?: string;
35
+ creator?: string;
36
+ }
37
+ export interface PageMetadata {
38
+ title: string;
39
+ description: string;
40
+ robots: string;
41
+ openGraph: OpenGraphMetadata;
42
+ twitter: TwitterMetadata;
43
+ }
44
+ export interface LinkedDocument {
45
+ url: string;
46
+ title: string;
47
+ description?: string;
48
+ }
49
+ export interface JsonLdNode {
50
+ "@context": "https://schema.org";
51
+ "@type": string | string[];
52
+ "@id"?: string;
53
+ [key: string]: unknown;
54
+ }
55
+ export interface PageDiscovery {
56
+ includeInSitemap: boolean;
57
+ includeInLlms: boolean;
58
+ relatedLinks: LinkedDocument[];
59
+ }
60
+ export interface PageIdentity {
61
+ type: DocumentPageType;
62
+ canonical: URL;
63
+ language: string;
64
+ hreflang?: string[];
65
+ }
66
+ export interface PageDocument {
67
+ identity: PageIdentity;
68
+ metadata: PageMetadata;
69
+ structuredData: JsonLdNode[];
70
+ discovery: PageDiscovery;
71
+ }
72
+ export declare function definePageDocument(input: PageDocument): PageDocument;
73
+ export interface Crumb {
74
+ url: string;
75
+ name: string;
76
+ }
77
+ export interface SiteInput {
78
+ url: string;
79
+ name: string;
80
+ description?: string;
81
+ orgName: string;
82
+ orgUrl: string;
83
+ orgLogo?: string;
84
+ }
85
+ export declare function siteSchema(input: SiteInput): JsonLdNode[];
86
+ export interface CollectionInput {
87
+ url: string;
88
+ name: string;
89
+ description: string;
90
+ items: Array<{
91
+ url: string;
92
+ name: string;
93
+ }>;
94
+ crumbs: Crumb[];
95
+ }
96
+ export declare function collectionSchema(input: CollectionInput): JsonLdNode[];
97
+ export interface RecordInput {
98
+ url: string;
99
+ name: string;
100
+ description: string;
101
+ kind: "application" | "article";
102
+ repoUrl?: string;
103
+ license?: string;
104
+ crumbs: Crumb[];
105
+ }
106
+ export declare function recordSchema(input: RecordInput): JsonLdNode[];
107
+ export interface ContentInput {
108
+ url: string;
109
+ headline: string;
110
+ description: string;
111
+ author: string;
112
+ datePublished?: string;
113
+ crumbs: Crumb[];
114
+ }
115
+ export declare function contentSchema(input: ContentInput): JsonLdNode[];
116
+ export declare function buildJsonLd(input: SiteInput): JsonLdNode[];
117
+ export declare function buildJsonLd(input: CollectionInput): JsonLdNode[];
118
+ export declare function buildJsonLd(input: RecordInput): JsonLdNode[];
119
+ export declare function buildJsonLd(input: ContentInput): JsonLdNode[];
120
+ export interface JsonLdValidationIssue {
121
+ code: "missing-context" | "missing-type" | "relative-url" | "duplicate-id" | "invalid-date";
122
+ field?: string;
123
+ message: string;
124
+ }
125
+ export declare function validateJsonLd(nodes: JsonLdNode[]): JsonLdValidationIssue[];
126
+ //# sourceMappingURL=page-document.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"page-document.d.ts","sourceRoot":"","sources":["../src/page-document.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,201 @@
1
+ /**
2
+ * PageDocument — the unified page-level contract for every page in a Grove
3
+ * project. A `PageDocument` declares the page's identity, its rendered
4
+ * metadata (title, description, OG, Twitter), the JSON-LD nodes it wants
5
+ * emitted, and its discovery profile (sitemap, llms, related links).
6
+ *
7
+ * Everything the framework renders in `<head>` (title, description,
8
+ * canonical, OG, Twitter, JSON-LD) is derived from this single model.
9
+ * `definePageDocument` is the canonical constructor — it validates the
10
+ * invariants (title present, OG URL matches canonical, etc.) so callers
11
+ * can't accidentally construct a malformed document.
12
+ *
13
+ * The JSON-LD registry (`siteSchema`, `collectionSchema`, `recordSchema`,
14
+ * `contentSchema`, `buildJsonLd`) is a small blueprint layer: each schema
15
+ * function takes a typed input and returns the JSON-LD node graph that
16
+ * `GroveDocumentHead` will serialize into `<script type="application/ld+json">`.
17
+ *
18
+ * `validateJsonLd` is the validator that runs over a node graph and
19
+ * reports well-formedness issues (missing @context, relative URLs, duplicate
20
+ * @ids, invalid dates). It is designed to be wired into the build pipeline
21
+ * so a malformed page fails fast.
22
+ */
23
+ export function definePageDocument(input) {
24
+ if (!input.metadata.title.trim()) {
25
+ throw new Error("PageDocument: title is required");
26
+ }
27
+ if (!input.metadata.description.trim()) {
28
+ throw new Error("PageDocument: description is required");
29
+ }
30
+ if (input.metadata.title === input.metadata.description) {
31
+ throw new Error("PageDocument: title and description must differ");
32
+ }
33
+ if (input.metadata.openGraph.url !== input.identity.canonical.toString()) {
34
+ throw new Error("PageDocument: openGraph.url must equal identity.canonical");
35
+ }
36
+ return input;
37
+ }
38
+ export function siteSchema(input) {
39
+ return [
40
+ {
41
+ "@context": "https://schema.org",
42
+ "@type": ["WebSite", "Organization"],
43
+ "@id": `${input.url}#site`,
44
+ url: input.url,
45
+ name: input.name,
46
+ ...(input.description ? { description: input.description } : {}),
47
+ publisher: {
48
+ "@type": "Organization",
49
+ "@id": `${input.orgUrl}#org`,
50
+ name: input.orgName,
51
+ url: input.orgUrl,
52
+ ...(input.orgLogo ? { logo: input.orgLogo } : {}),
53
+ },
54
+ },
55
+ ];
56
+ }
57
+ export function collectionSchema(input) {
58
+ if (input.crumbs.length < 2) {
59
+ throw new Error("collectionSchema: breadcrumbs must contain at least 2 items");
60
+ }
61
+ const page = {
62
+ "@context": "https://schema.org",
63
+ "@type": ["CollectionPage", "WebPage"],
64
+ "@id": `${input.url}#page`,
65
+ url: input.url,
66
+ name: input.name,
67
+ description: input.description,
68
+ };
69
+ const list = {
70
+ "@context": "https://schema.org",
71
+ "@type": "ItemList",
72
+ numberOfItems: input.items.length,
73
+ itemListElement: input.items.map((item, i) => ({
74
+ "@type": "ListItem",
75
+ position: i + 1,
76
+ url: item.url,
77
+ name: item.name,
78
+ })),
79
+ };
80
+ const crum = {
81
+ "@context": "https://schema.org",
82
+ "@type": "BreadcrumbList",
83
+ itemListElement: input.crumbs.map((c, i) => ({
84
+ "@type": "ListItem",
85
+ position: i + 1,
86
+ name: c.name,
87
+ item: c.url,
88
+ })),
89
+ };
90
+ return [page, list, crum];
91
+ }
92
+ export function recordSchema(input) {
93
+ const isApp = input.kind === "application";
94
+ const main = {
95
+ "@context": "https://schema.org",
96
+ "@type": isApp
97
+ ? ["SoftwareApplication", "SoftwareSourceCode"]
98
+ : ["CreativeWork", "WebPage"],
99
+ "@id": `${input.url}#record`,
100
+ url: input.url,
101
+ name: input.name,
102
+ description: input.description,
103
+ ...(isApp && input.repoUrl ? { codeRepository: input.repoUrl } : {}),
104
+ ...(input.license ? { license: input.license } : {}),
105
+ };
106
+ const crum = {
107
+ "@context": "https://schema.org",
108
+ "@type": "BreadcrumbList",
109
+ itemListElement: input.crumbs.map((c, i) => ({
110
+ "@type": "ListItem",
111
+ position: i + 1,
112
+ name: c.name,
113
+ item: c.url,
114
+ })),
115
+ };
116
+ return [main, crum];
117
+ }
118
+ export function contentSchema(input) {
119
+ return [
120
+ {
121
+ "@context": "https://schema.org",
122
+ "@type": ["Article", "WebPage"],
123
+ "@id": `${input.url}#article`,
124
+ url: input.url,
125
+ headline: input.headline,
126
+ description: input.description,
127
+ author: { "@type": "Organization", name: input.author },
128
+ ...(input.datePublished ? { datePublished: input.datePublished } : {}),
129
+ },
130
+ {
131
+ "@context": "https://schema.org",
132
+ "@type": "BreadcrumbList",
133
+ itemListElement: input.crumbs.map((c, i) => ({
134
+ "@type": "ListItem",
135
+ position: i + 1,
136
+ name: c.name,
137
+ item: c.url,
138
+ })),
139
+ },
140
+ ];
141
+ }
142
+ export function buildJsonLd(input) {
143
+ if ("orgName" in input)
144
+ return siteSchema(input);
145
+ if ("items" in input)
146
+ return collectionSchema(input);
147
+ if ("kind" in input)
148
+ return recordSchema(input);
149
+ if ("headline" in input)
150
+ return contentSchema(input);
151
+ throw new Error("buildJsonLd: unknown schema input");
152
+ }
153
+ const URL_FIELDS = new Set(["url", "codeRepository", "logo", "image", "sameAs"]);
154
+ export function validateJsonLd(nodes) {
155
+ const issues = [];
156
+ const seen = new Set();
157
+ for (const node of nodes) {
158
+ if (node["@context"] !== "https://schema.org") {
159
+ issues.push({
160
+ code: "missing-context",
161
+ message: "@context must be https://schema.org",
162
+ });
163
+ }
164
+ if (!node["@type"]) {
165
+ issues.push({ code: "missing-type", message: "@type is required" });
166
+ }
167
+ if (node["@id"]) {
168
+ if (seen.has(node["@id"])) {
169
+ issues.push({
170
+ code: "duplicate-id",
171
+ message: `Duplicate @id: ${node["@id"]}`,
172
+ });
173
+ }
174
+ seen.add(node["@id"]);
175
+ }
176
+ for (const [field, value] of Object.entries(node)) {
177
+ if (field.startsWith("@"))
178
+ continue;
179
+ if (URL_FIELDS.has(field) &&
180
+ typeof value === "string" &&
181
+ !/^https?:\/\//.test(value)) {
182
+ issues.push({
183
+ code: "relative-url",
184
+ field,
185
+ message: `${field} must be absolute: ${value}`,
186
+ });
187
+ }
188
+ if (field === "datePublished" &&
189
+ typeof value === "string" &&
190
+ isNaN(Date.parse(value))) {
191
+ issues.push({
192
+ code: "invalid-date",
193
+ field,
194
+ message: `datePublished invalid: ${value}`,
195
+ });
196
+ }
197
+ }
198
+ }
199
+ return issues;
200
+ }
201
+ //# sourceMappingURL=page-document.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"page-document.js","sourceRoot":"","sources":["../src/page-document.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import type { Collection } from "./collections.js";
2
+ export declare function findRelated(target: Collection, all: Collection[], limit: number): Collection[];
3
+ //# sourceMappingURL=related.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"related.d.ts","sourceRoot":"","sources":["../src/related.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAmB,MAAM,kBAAkB,CAAC;AAEpE,wBAAgB,WAAW,CAAC,MAAM,EAAE,UAAU,EAAE,GAAG,EAAE,UAAU,EAAE,EAAE,KAAK,EAAE,MAAM,GAAG,UAAU,EAAE,CAS9F"}
@@ -0,0 +1,18 @@
1
+ export function findRelated(target, all, limit) {
2
+ const targetKeys = queryKeys(target.query);
3
+ return all
4
+ .filter((c) => c.slug !== target.slug)
5
+ .map((c) => ({ c, overlap: queryKeys(c.query).filter((k) => targetKeys.includes(k)).length }))
6
+ .filter((r) => r.overlap > 0)
7
+ .sort((a, b) => b.overlap - a.overlap)
8
+ .slice(0, limit)
9
+ .map((r) => r.c);
10
+ }
11
+ function queryKeys(q) {
12
+ return [
13
+ ...(q.stacks ?? []).map((v) => `stack:${v}`),
14
+ ...(q.platforms ?? []).map((v) => `platform:${v}`),
15
+ ...(q.categories ?? []).map((v) => `category:${v}`),
16
+ ];
17
+ }
18
+ //# sourceMappingURL=related.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"related.js","sourceRoot":"","sources":["../src/related.ts"],"names":[],"mappings":"AAEA,MAAM,UAAU,WAAW,CAAC,MAAkB,EAAE,GAAiB,EAAE,KAAa;IAC9E,MAAM,UAAU,GAAG,SAAS,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IAC3C,OAAO,GAAG;SACP,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,MAAM,CAAC,IAAI,CAAC;SACrC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,OAAO,EAAE,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC;SAC7F,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,GAAG,CAAC,CAAC;SAC5B,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,GAAG,CAAC,CAAC,OAAO,CAAC;SACrC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC;SACf,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AACrB,CAAC;AAED,SAAS,SAAS,CAAC,CAAkB;IACnC,OAAO;QACL,GAAG,CAAC,CAAC,CAAC,MAAM,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,SAAS,CAAC,EAAE,CAAC;QAC5C,GAAG,CAAC,CAAC,CAAC,SAAS,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,YAAY,CAAC,EAAE,CAAC;QAClD,GAAG,CAAC,CAAC,CAAC,UAAU,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,YAAY,CAAC,EAAE,CAAC;KACpD,CAAC;AACJ,CAAC"}
@@ -0,0 +1,6 @@
1
+ export declare function buildRobotsTxt(input: {
2
+ siteUrl: string;
3
+ disallow?: string[];
4
+ }): string;
5
+ export declare function isIndexableFilterPath(path: string): boolean;
6
+ //# sourceMappingURL=robots.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"robots.d.ts","sourceRoot":"","sources":["../src/robots.ts"],"names":[],"mappings":"AAMA,wBAAgB,cAAc,CAAC,KAAK,EAAE;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAA;CAAE,GAAG,MAAM,CAWtF;AAED,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAE3D"}
package/dist/robots.js ADDED
@@ -0,0 +1,21 @@
1
+ const FILTER_PATTERNS = [
2
+ /^\/browse\?/,
3
+ /^\/search\?/,
4
+ /^\/apps\?/,
5
+ ];
6
+ export function buildRobotsTxt(input) {
7
+ const site = input.siteUrl.endsWith("/") ? input.siteUrl : `${input.siteUrl}/`;
8
+ const disallow = (input.disallow ?? []).map((p) => `Disallow: ${p}`).join("\n");
9
+ return [
10
+ "User-agent: *",
11
+ "Allow: /",
12
+ disallow,
13
+ "",
14
+ `Sitemap: ${site}sitemap-index.xml`,
15
+ "",
16
+ ].filter((line) => line !== "").join("\n");
17
+ }
18
+ export function isIndexableFilterPath(path) {
19
+ return !FILTER_PATTERNS.some((p) => p.test(path));
20
+ }
21
+ //# sourceMappingURL=robots.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"robots.js","sourceRoot":"","sources":["../src/robots.ts"],"names":[],"mappings":"AAAA,MAAM,eAAe,GAAG;IACtB,aAAa;IACb,aAAa;IACb,WAAW;CACZ,CAAC;AAEF,MAAM,UAAU,cAAc,CAAC,KAA+C;IAC5E,MAAM,IAAI,GAAG,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,OAAO,GAAG,CAAC;IAC/E,MAAM,QAAQ,GAAG,CAAC,KAAK,CAAC,QAAQ,IAAI,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,aAAa,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAChF,OAAO;QACL,eAAe;QACf,UAAU;QACV,QAAQ;QACR,EAAE;QACF,YAAY,IAAI,mBAAmB;QACnC,EAAE;KACH,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,KAAK,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC7C,CAAC;AAED,MAAM,UAAU,qBAAqB,CAAC,IAAY;IAChD,OAAO,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;AACpD,CAAC"}