@farming-labs/tanstack-start 0.0.33

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.
@@ -0,0 +1,40 @@
1
+ /**
2
+ * Content loading utilities for TanStack Start docs.
3
+ *
4
+ * Scans the filesystem for `.md` / `.mdx` content files,
5
+ * extracts frontmatter, and builds a navigation tree compatible
6
+ * with @farming-labs/docs DocsConfig.
7
+ */
8
+ import type { OrderingItem } from "@farming-labs/docs";
9
+ export interface PageNode {
10
+ type: "page";
11
+ name: string;
12
+ url: string;
13
+ icon?: string;
14
+ description?: string;
15
+ }
16
+ export interface FolderNode {
17
+ type: "folder";
18
+ name: string;
19
+ icon?: string;
20
+ index?: PageNode;
21
+ children: NavNode[];
22
+ }
23
+ export type NavNode = PageNode | FolderNode;
24
+ export interface NavTree {
25
+ name: string;
26
+ children: NavNode[];
27
+ }
28
+ export interface ContentPage {
29
+ slug: string;
30
+ url: string;
31
+ title: string;
32
+ description?: string;
33
+ icon?: string;
34
+ content: string;
35
+ rawContent: string;
36
+ }
37
+ export declare function loadDocsContent(contentDir: string, entry?: string): ContentPage[];
38
+ export declare function loadDocsNavTree(contentDir: string, entry?: string, ordering?: "alphabetical" | "numeric" | OrderingItem[]): NavTree;
39
+ export declare function flattenNavTree(tree: NavTree): PageNode[];
40
+ //# sourceMappingURL=content.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"content.d.ts","sourceRoot":"","sources":["../src/content.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAKH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAEvD,MAAM,WAAW,QAAQ;IACvB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,QAAQ,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,QAAQ,CAAC;IACjB,QAAQ,EAAE,OAAO,EAAE,CAAC;CACrB;AAED,MAAM,MAAM,OAAO,GAAG,QAAQ,GAAG,UAAU,CAAC;AAE5C,MAAM,WAAW,OAAO;IACtB,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,OAAO,EAAE,CAAC;CACrB;AAED,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,wBAAgB,eAAe,CAAC,UAAU,EAAE,MAAM,EAAE,KAAK,GAAE,MAAe,GAAG,WAAW,EAAE,CA8CzF;AAED,wBAAgB,eAAe,CAC7B,UAAU,EAAE,MAAM,EAClB,KAAK,GAAE,MAAe,EACtB,QAAQ,CAAC,EAAE,cAAc,GAAG,SAAS,GAAG,YAAY,EAAE,GACrD,OAAO,CAkBT;AA+GD,wBAAgB,cAAc,CAAC,IAAI,EAAE,OAAO,GAAG,QAAQ,EAAE,CAgBxD"}
@@ -0,0 +1,189 @@
1
+ /**
2
+ * Content loading utilities for TanStack Start docs.
3
+ *
4
+ * Scans the filesystem for `.md` / `.mdx` content files,
5
+ * extracts frontmatter, and builds a navigation tree compatible
6
+ * with @farming-labs/docs DocsConfig.
7
+ */
8
+ import fs from "node:fs";
9
+ import path from "node:path";
10
+ import matter from "gray-matter";
11
+ export function loadDocsContent(contentDir, entry = "docs") {
12
+ const pages = [];
13
+ const absDir = path.resolve(contentDir);
14
+ function scan(dir, slugParts) {
15
+ if (!fs.existsSync(dir))
16
+ return;
17
+ const entries = fs.readdirSync(dir).sort();
18
+ for (const name of entries) {
19
+ const full = path.join(dir, name);
20
+ const stat = fs.statSync(full);
21
+ if (stat.isDirectory()) {
22
+ scan(full, [...slugParts, name]);
23
+ continue;
24
+ }
25
+ if (!name.endsWith(".md") && !name.endsWith(".mdx"))
26
+ continue;
27
+ const raw = fs.readFileSync(full, "utf-8");
28
+ const { data, content } = matter(raw);
29
+ const baseName = name.replace(/\.(md|mdx)$/, "");
30
+ const isIndex = baseName === "index" || baseName === "page";
31
+ const slug = isIndex ? slugParts.join("/") : [...slugParts, baseName].join("/");
32
+ const url = slug ? `/${entry}/${slug}` : `/${entry}`;
33
+ const title = data.title ??
34
+ baseName.replace(/-/g, " ").replace(/\b\w/g, (char) => char.toUpperCase());
35
+ pages.push({
36
+ slug,
37
+ url,
38
+ title,
39
+ description: data.description,
40
+ icon: data.icon,
41
+ content: stripMarkdown(content),
42
+ rawContent: content,
43
+ });
44
+ }
45
+ }
46
+ scan(absDir, []);
47
+ return pages;
48
+ }
49
+ export function loadDocsNavTree(contentDir, entry = "docs", ordering) {
50
+ const absDir = path.resolve(contentDir);
51
+ const children = [];
52
+ const indexPath = findIndex(absDir);
53
+ if (indexPath) {
54
+ const { data } = matter(fs.readFileSync(indexPath, "utf-8"));
55
+ children.push({
56
+ type: "page",
57
+ name: data.title ?? "Documentation",
58
+ url: `/${entry}`,
59
+ icon: data.icon,
60
+ });
61
+ }
62
+ const rootSlugOrder = Array.isArray(ordering) ? ordering : undefined;
63
+ children.push(...scanDir(absDir, [], entry, ordering, rootSlugOrder));
64
+ return { name: "Docs", children };
65
+ }
66
+ function buildNavNode(dir, name, slugParts, entry, ordering, childSlugOrder) {
67
+ const full = path.join(dir, name);
68
+ if (!fs.statSync(full).isDirectory())
69
+ return null;
70
+ const indexPath = findIndex(full);
71
+ if (!indexPath)
72
+ return null;
73
+ const { data } = matter(fs.readFileSync(indexPath, "utf-8"));
74
+ const slug = [...slugParts, name];
75
+ const url = `/${entry}/${slug.join("/")}`;
76
+ const displayName = data.title ??
77
+ name.replace(/-/g, " ").replace(/\b\w/g, (char) => char.toUpperCase());
78
+ const icon = data.icon;
79
+ const childDirs = fs.readdirSync(full).filter((childName) => {
80
+ const childPath = path.join(full, childName);
81
+ return fs.statSync(childPath).isDirectory() && findIndex(childPath) !== null;
82
+ });
83
+ if (childDirs.length > 0) {
84
+ return {
85
+ type: "folder",
86
+ name: displayName,
87
+ icon,
88
+ index: { type: "page", name: displayName, url, icon },
89
+ children: scanDir(full, slug, entry, ordering, childSlugOrder),
90
+ };
91
+ }
92
+ return { type: "page", name: displayName, url, icon };
93
+ }
94
+ function scanDir(dir, slugParts, entry, ordering, slugOrder) {
95
+ if (!fs.existsSync(dir))
96
+ return [];
97
+ const entries = fs.readdirSync(dir).sort();
98
+ if (slugOrder) {
99
+ const nodes = [];
100
+ const slugMap = new Set(slugOrder.map((item) => item.slug));
101
+ for (const item of slugOrder) {
102
+ if (!entries.includes(item.slug))
103
+ continue;
104
+ const node = buildNavNode(dir, item.slug, slugParts, entry, ordering, item.children);
105
+ if (node)
106
+ nodes.push(node);
107
+ }
108
+ for (const name of entries) {
109
+ if (slugMap.has(name))
110
+ continue;
111
+ const node = buildNavNode(dir, name, slugParts, entry, ordering);
112
+ if (node)
113
+ nodes.push(node);
114
+ }
115
+ return nodes;
116
+ }
117
+ if (ordering === "numeric") {
118
+ const nodes = [];
119
+ for (const name of entries) {
120
+ const full = path.join(dir, name);
121
+ if (!fs.statSync(full).isDirectory())
122
+ continue;
123
+ const indexPath = findIndex(full);
124
+ if (!indexPath)
125
+ continue;
126
+ const { data } = matter(fs.readFileSync(indexPath, "utf-8"));
127
+ const order = typeof data.order === "number" ? data.order : Infinity;
128
+ const node = buildNavNode(dir, name, slugParts, entry, ordering);
129
+ if (node)
130
+ nodes.push({ order, node });
131
+ }
132
+ nodes.sort((a, b) => {
133
+ if (a.order === b.order)
134
+ return 0;
135
+ return a.order - b.order;
136
+ });
137
+ return nodes.map((item) => item.node);
138
+ }
139
+ const nodes = [];
140
+ for (const name of entries) {
141
+ const node = buildNavNode(dir, name, slugParts, entry, ordering);
142
+ if (node)
143
+ nodes.push(node);
144
+ }
145
+ return nodes;
146
+ }
147
+ function findIndex(dir) {
148
+ for (const name of ["page.md", "page.mdx", "index.md", "index.mdx"]) {
149
+ const filePath = path.join(dir, name);
150
+ if (fs.existsSync(filePath))
151
+ return filePath;
152
+ }
153
+ return null;
154
+ }
155
+ export function flattenNavTree(tree) {
156
+ const pages = [];
157
+ function walk(nodes) {
158
+ for (const node of nodes) {
159
+ if (node.type === "page") {
160
+ pages.push(node);
161
+ }
162
+ else if (node.type === "folder") {
163
+ if (node.index)
164
+ pages.push(node.index);
165
+ walk(node.children);
166
+ }
167
+ }
168
+ }
169
+ walk(tree.children);
170
+ return pages;
171
+ }
172
+ function stripMarkdown(content) {
173
+ return content
174
+ .replace(/^(import|export)\s.*$/gm, "")
175
+ .replace(/<[^>]+\/>/g, "")
176
+ .replace(/<\/?[A-Z][^>]*>/g, "")
177
+ .replace(/<\/?[a-z][^>]*>/g, "")
178
+ .replace(/!\[([^\]]*)\]\([^)]+\)/g, "$1")
179
+ .replace(/\[([^\]]+)\]\([^)]+\)/g, "$1")
180
+ .replace(/^#{1,6}\s+/gm, "")
181
+ .replace(/(\*{1,3}|_{1,3})(.*?)\1/g, "$2")
182
+ .replace(/```[\s\S]*?```/g, "")
183
+ .replace(/`([^`]+)`/g, "$1")
184
+ .replace(/^>\s+/gm, "")
185
+ .replace(/^[-*_]{3,}\s*$/gm, "")
186
+ .replace(/\n{3,}/g, "\n\n")
187
+ .trim();
188
+ }
189
+ //# sourceMappingURL=content.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"content.js","sourceRoot":"","sources":["../src/content.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,12 @@
1
+ /**
2
+ * @farming-labs/tanstack-start
3
+ *
4
+ * TanStack Start adapter for the @farming-labs/docs framework.
5
+ * Provides content loading, navigation tree building, search,
6
+ * and server-side helpers for TanStack Start-based documentation sites.
7
+ */
8
+ export { loadDocsContent, loadDocsNavTree, flattenNavTree, type NavNode, type NavTree, type PageNode, type FolderNode, } from "./content.js";
9
+ export { createDocsServer, type DocsServer, type DocsServerLoadResult } from "./server.js";
10
+ export { TanstackDocsPage } from "./react.js";
11
+ export { docsMdx } from "./vite.js";
12
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EACL,eAAe,EACf,eAAe,EACf,cAAc,EACd,KAAK,OAAO,EACZ,KAAK,OAAO,EACZ,KAAK,QAAQ,EACb,KAAK,UAAU,GAChB,MAAM,cAAc,CAAC;AACtB,OAAO,EAAE,gBAAgB,EAAE,KAAK,UAAU,EAAE,KAAK,oBAAoB,EAAE,MAAM,aAAa,CAAC;AAC3F,OAAO,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAC9C,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC"}
package/dist/index.js ADDED
@@ -0,0 +1,12 @@
1
+ /**
2
+ * @farming-labs/tanstack-start
3
+ *
4
+ * TanStack Start adapter for the @farming-labs/docs framework.
5
+ * Provides content loading, navigation tree building, search,
6
+ * and server-side helpers for TanStack Start-based documentation sites.
7
+ */
8
+ export { loadDocsContent, loadDocsNavTree, flattenNavTree, } from "./content.js";
9
+ export { createDocsServer } from "./server.js";
10
+ export { TanstackDocsPage } from "./react.js";
11
+ export { docsMdx } from "./vite.js";
12
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EACL,eAAe,EACf,eAAe,EACf,cAAc,GAKf,MAAM,cAAc,CAAC;AACtB,OAAO,EAAE,gBAAgB,EAA8C,MAAM,aAAa,CAAC;AAC3F,OAAO,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAC9C,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC"}
@@ -0,0 +1,7 @@
1
+ import type { DocsConfig } from "@farming-labs/docs";
2
+ import type { DocsServerLoadResult } from "./server.js";
3
+ export declare function TanstackDocsPage({ config, data, }: {
4
+ config: DocsConfig;
5
+ data: DocsServerLoadResult;
6
+ }): import("react/jsx-runtime").JSX.Element;
7
+ //# sourceMappingURL=react.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"react.d.ts","sourceRoot":"","sources":["../src/react.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAGrD,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAC;AAmBxD,wBAAgB,gBAAgB,CAAC,EAC/B,MAAM,EACN,IAAI,GACL,EAAE;IACD,MAAM,EAAE,UAAU,CAAC;IACnB,IAAI,EAAE,oBAAoB,CAAC;CAC5B,2CA+BA"}
package/dist/react.js ADDED
@@ -0,0 +1,22 @@
1
+ import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
+ import { TanstackDocsLayout } from "@farming-labs/theme/tanstack";
3
+ import { getMDXComponents } from "@farming-labs/theme/mdx";
4
+ const rawDocModules = import.meta.glob("/**/*.{md,mdx}", {
5
+ eager: true,
6
+ });
7
+ function normalizeDocsKey(key) {
8
+ const posixKey = key.replace(/\\/g, "/");
9
+ return posixKey.startsWith("/") ? posixKey : `/${posixKey.replace(/^\.?\//, "")}`;
10
+ }
11
+ const docModules = Object.fromEntries(Object.entries(rawDocModules).map(([key, value]) => [normalizeDocsKey(key), value]));
12
+ export function TanstackDocsPage({ config, data, }) {
13
+ const module = docModules[data.sourcePath];
14
+ const Content = module?.default ?? null;
15
+ if (!Content) {
16
+ return (_jsx(TanstackDocsLayout, { config: config, tree: data.tree, locale: data.locale, children: _jsxs("article", { style: { padding: "2rem" }, children: [_jsx("h1", { children: "Page module missing" }), _jsxs("p", { children: ["Expected a compiled MDX module at `", data.sourcePath, "`."] })] }) }));
17
+ }
18
+ return (_jsx(TanstackDocsLayout, { config: config, tree: data.tree, locale: data.locale, description: data.description, lastModified: data.lastModified, editOnGithubUrl: data.editOnGithub, children: _jsx(Content, { components: getMDXComponents(config.components, {
19
+ onCopyClick: config.onCopyClick,
20
+ }) }) }));
21
+ }
22
+ //# sourceMappingURL=react.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"react.js","sourceRoot":"","sources":["../src/react.tsx"],"names":[],"mappings":";AAEA,OAAO,EAAE,kBAAkB,EAAE,MAAM,8BAA8B,CAAC;AAClE,OAAO,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAO3D,MAAM,aAAa,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,gBAAgB,EAAE;IACvD,KAAK,EAAE,IAAI;CACZ,CAAC,CAAC;AAEH,SAAS,gBAAgB,CAAC,GAAW;IACnC,MAAM,QAAQ,GAAG,GAAG,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;IACzC,OAAO,QAAQ,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,QAAQ,CAAC,OAAO,CAAC,QAAQ,EAAE,EAAE,CAAC,EAAE,CAAC;AACpF,CAAC;AAED,MAAM,UAAU,GAAG,MAAM,CAAC,WAAW,CACnC,MAAM,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC,CAAC,gBAAgB,CAAC,GAAG,CAAC,EAAE,KAAK,CAAC,CAAC,CACpF,CAAC;AAEF,MAAM,UAAU,gBAAgB,CAAC,EAC/B,MAAM,EACN,IAAI,GAIL;IACC,MAAM,MAAM,GAAG,UAAU,CAAC,IAAI,CAAC,UAAU,CAA0B,CAAC;IACpE,MAAM,OAAO,GAAG,MAAM,EAAE,OAAO,IAAI,IAAI,CAAC;IAExC,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,OAAO,CACL,KAAC,kBAAkB,IAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,YACtE,mBAAS,KAAK,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE,aACjC,+CAA4B,EAC5B,+DAAuC,IAAI,CAAC,UAAU,UAAO,IACrD,GACS,CACtB,CAAC;IACJ,CAAC;IAED,OAAO,CACL,KAAC,kBAAkB,IACjB,MAAM,EAAE,MAAM,EACd,IAAI,EAAE,IAAI,CAAC,IAAI,EACf,MAAM,EAAE,IAAI,CAAC,MAAM,EACnB,WAAW,EAAE,IAAI,CAAC,WAAW,EAC7B,YAAY,EAAE,IAAI,CAAC,YAAY,EAC/B,eAAe,EAAE,IAAI,CAAC,YAAY,YAElC,KAAC,OAAO,IACN,UAAU,EAAE,gBAAgB,CAAC,MAAM,CAAC,UAAqC,EAAE;gBACzE,WAAW,EAAE,MAAM,CAAC,WAAW;aAChC,CAAC,GACF,GACiB,CACtB,CAAC;AACJ,CAAC"}
@@ -0,0 +1,31 @@
1
+ import { loadDocsNavTree } from "./content.js";
2
+ import type { PageNode } from "./content.js";
3
+ export interface DocsServerLoadResult {
4
+ tree: ReturnType<typeof loadDocsNavTree>;
5
+ flatPages: PageNode[];
6
+ title: string;
7
+ description?: string;
8
+ rawContent: string;
9
+ sourcePath: string;
10
+ entry?: string;
11
+ locale?: string;
12
+ slug?: string;
13
+ previousPage: PageNode | null;
14
+ nextPage: PageNode | null;
15
+ editOnGithub?: string;
16
+ lastModified: string;
17
+ }
18
+ export interface DocsServer {
19
+ load: (input: {
20
+ pathname: string;
21
+ locale?: string;
22
+ }) => Promise<DocsServerLoadResult>;
23
+ GET: (context: {
24
+ request: Request;
25
+ }) => Response;
26
+ POST: (context: {
27
+ request: Request;
28
+ }) => Promise<Response>;
29
+ }
30
+ export declare function createDocsServer(config: Record<string, any>): DocsServer;
31
+ //# sourceMappingURL=server.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,eAAe,EAAmC,MAAM,cAAc,CAAC;AAChF,OAAO,KAAK,EAAE,QAAQ,EAAiC,MAAM,cAAc,CAAC;AA+D5E,MAAM,WAAW,oBAAoB;IACnC,IAAI,EAAE,UAAU,CAAC,OAAO,eAAe,CAAC,CAAC;IACzC,SAAS,EAAE,QAAQ,EAAE,CAAC;IACtB,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,YAAY,EAAE,QAAQ,GAAG,IAAI,CAAC;IAC9B,QAAQ,EAAE,QAAQ,GAAG,IAAI,CAAC;IAC1B,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,YAAY,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,CAAC,KAAK,EAAE;QAAE,QAAQ,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,CAAA;KAAE,KAAK,OAAO,CAAC,oBAAoB,CAAC,CAAC;IACtF,GAAG,EAAE,CAAC,OAAO,EAAE;QAAE,OAAO,EAAE,OAAO,CAAA;KAAE,KAAK,QAAQ,CAAC;IACjD,IAAI,EAAE,CAAC,OAAO,EAAE;QAAE,OAAO,EAAE,OAAO,CAAA;KAAE,KAAK,OAAO,CAAC,QAAQ,CAAC,CAAC;CAC5D;AAgTD,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,UAAU,CAybxE"}
package/dist/server.js ADDED
@@ -0,0 +1,638 @@
1
+ import fs from "node:fs";
2
+ import path from "node:path";
3
+ import matter from "gray-matter";
4
+ import { resolveDocsI18n, resolveDocsLocale, resolveDocsPath } from "@farming-labs/docs";
5
+ import { loadDocsNavTree, loadDocsContent, flattenNavTree } from "./content.js";
6
+ function resolveAIModelAndProvider(aiConfig, requestedModelId) {
7
+ const raw = aiConfig.model;
8
+ const modelList = (typeof raw === "object" && raw?.models) || [];
9
+ let modelId = requestedModelId;
10
+ if (!modelId) {
11
+ if (typeof raw === "string")
12
+ modelId = raw;
13
+ else if (typeof raw === "object")
14
+ modelId = raw.defaultModel ?? raw.models?.[0]?.id;
15
+ if (!modelId)
16
+ modelId = "gpt-4o-mini";
17
+ }
18
+ const entry = modelList.find((model) => model.id === modelId);
19
+ const providerKey = entry?.provider;
20
+ const providerConfig = providerKey && aiConfig.providers?.[providerKey];
21
+ const baseUrl = ((providerConfig && providerConfig.baseUrl) ||
22
+ aiConfig.baseUrl ||
23
+ "https://api.openai.com/v1").replace(/\/$/, "");
24
+ const apiKey = (providerConfig && providerConfig.apiKey) || aiConfig.apiKey || process.env?.OPENAI_API_KEY;
25
+ return { model: modelId, baseUrl, apiKey };
26
+ }
27
+ function resolvePreloadedContent(value) {
28
+ if (!value || typeof value !== "object")
29
+ return null;
30
+ const entries = Object.entries(value);
31
+ const normalized = {};
32
+ for (const [key, entryValue] of entries) {
33
+ if (typeof entryValue === "string") {
34
+ normalized[key] = entryValue;
35
+ continue;
36
+ }
37
+ if (entryValue &&
38
+ typeof entryValue === "object" &&
39
+ typeof entryValue.default === "string") {
40
+ normalized[key] = entryValue.default;
41
+ continue;
42
+ }
43
+ return null;
44
+ }
45
+ return normalized;
46
+ }
47
+ function stripMarkdownText(content) {
48
+ return content
49
+ .replace(/^(import|export)\s.*$/gm, "")
50
+ .replace(/<[^>]+\/>/g, "")
51
+ .replace(/<\/?[A-Z][^>]*>/g, "")
52
+ .replace(/<\/?[a-z][^>]*>/g, "")
53
+ .replace(/!\[([^\]]*)\]\([^)]+\)/g, "$1")
54
+ .replace(/\[([^\]]+)\]\([^)]+\)/g, "$1")
55
+ .replace(/^#{1,6}\s+/gm, "")
56
+ .replace(/(\*{1,3}|_{1,3})(.*?)\1/g, "$2")
57
+ .replace(/```[\s\S]*?```/g, "")
58
+ .replace(/`([^`]+)`/g, "$1")
59
+ .replace(/^>\s+/gm, "")
60
+ .replace(/^[-*_]{3,}\s*$/gm, "")
61
+ .replace(/\n{3,}/g, "\n\n")
62
+ .trim();
63
+ }
64
+ function normalizePathSegment(value) {
65
+ return value.replace(/^\/+|\/+$/g, "");
66
+ }
67
+ function joinPathParts(...parts) {
68
+ return parts
69
+ .map((part) => normalizePathSegment(part))
70
+ .filter(Boolean)
71
+ .join("/");
72
+ }
73
+ function toPosixPath(value) {
74
+ return value.replace(/\\/g, "/");
75
+ }
76
+ function buildDirPrefix(contentDir, rootDir) {
77
+ const rel = path.isAbsolute(contentDir)
78
+ ? toPosixPath(path.relative(rootDir, contentDir))
79
+ : toPosixPath(contentDir);
80
+ const normalized = normalizePathSegment(rel);
81
+ return normalized ? `/${normalized}/` : "/";
82
+ }
83
+ function toSourcePath(contentDir, relPath, rootDir) {
84
+ const base = path.isAbsolute(contentDir)
85
+ ? toPosixPath(path.relative(rootDir, contentDir))
86
+ : toPosixPath(contentDir);
87
+ return `/${joinPathParts(base, toPosixPath(relPath))}`;
88
+ }
89
+ function navTreeFromMap(contentMap, dirPrefix, entry, ordering) {
90
+ const dirs = [];
91
+ for (const key of Object.keys(contentMap)) {
92
+ if (!key.startsWith(dirPrefix))
93
+ continue;
94
+ const rel = key.slice(dirPrefix.length);
95
+ const segments = rel.split("/");
96
+ const fileName = segments.pop();
97
+ const base = fileName.replace(/\.(md|mdx)$/, "");
98
+ if (base !== "page" && base !== "index")
99
+ continue;
100
+ const { data } = matter(contentMap[key]);
101
+ const dirParts = segments;
102
+ const slug = dirParts.join("/");
103
+ const url = slug ? `/${entry}/${slug}` : `/${entry}`;
104
+ const fallbackTitle = dirParts.length > 0
105
+ ? dirParts[dirParts.length - 1]
106
+ .replace(/-/g, " ")
107
+ .replace(/\b\w/g, (char) => char.toUpperCase())
108
+ : "Documentation";
109
+ dirs.push({
110
+ parts: dirParts,
111
+ title: data.title ?? fallbackTitle,
112
+ url,
113
+ icon: data.icon,
114
+ order: typeof data.order === "number" ? data.order : Infinity,
115
+ });
116
+ }
117
+ dirs.sort((a, b) => {
118
+ if (a.parts.length !== b.parts.length)
119
+ return a.parts.length - b.parts.length;
120
+ return a.parts.join("/").localeCompare(b.parts.join("/"));
121
+ });
122
+ const children = [];
123
+ const rootInfo = dirs.find((dir) => dir.parts.length === 0);
124
+ if (rootInfo) {
125
+ children.push({
126
+ type: "page",
127
+ name: rootInfo.title,
128
+ url: rootInfo.url,
129
+ icon: rootInfo.icon,
130
+ });
131
+ }
132
+ function findSlugOrder(parentParts) {
133
+ if (!Array.isArray(ordering))
134
+ return undefined;
135
+ let items = ordering;
136
+ for (const part of parentParts) {
137
+ const found = items.find((item) => item.slug === part);
138
+ if (!found?.children)
139
+ return undefined;
140
+ items = found.children;
141
+ }
142
+ return items;
143
+ }
144
+ function buildLevel(parentParts) {
145
+ const depth = parentParts.length;
146
+ const directChildren = dirs.filter((dir) => {
147
+ if (dir.parts.length !== depth + 1)
148
+ return false;
149
+ for (let index = 0; index < depth; index++) {
150
+ if (dir.parts[index] !== parentParts[index])
151
+ return false;
152
+ }
153
+ return true;
154
+ });
155
+ const slugOrder = findSlugOrder(parentParts);
156
+ if (slugOrder) {
157
+ const slugMap = new Set(slugOrder.map((item) => item.slug));
158
+ const ordered = [];
159
+ for (const item of slugOrder) {
160
+ const match = directChildren.find((child) => child.parts[depth] === item.slug);
161
+ if (match)
162
+ ordered.push(match);
163
+ }
164
+ for (const child of directChildren) {
165
+ if (!slugMap.has(child.parts[depth]))
166
+ ordered.push(child);
167
+ }
168
+ return ordered.map((child) => {
169
+ const hasGrandChildren = dirs.some((dir) => {
170
+ if (dir.parts.length <= child.parts.length)
171
+ return false;
172
+ return child.parts.every((part, index) => dir.parts[index] === part);
173
+ });
174
+ if (hasGrandChildren) {
175
+ return {
176
+ type: "folder",
177
+ name: child.title,
178
+ icon: child.icon,
179
+ index: { type: "page", name: child.title, url: child.url, icon: child.icon },
180
+ children: buildLevel(child.parts),
181
+ };
182
+ }
183
+ return {
184
+ type: "page",
185
+ name: child.title,
186
+ url: child.url,
187
+ icon: child.icon,
188
+ };
189
+ });
190
+ }
191
+ if (ordering === "numeric") {
192
+ directChildren.sort((a, b) => a.order - b.order);
193
+ }
194
+ return directChildren.map((child) => {
195
+ const hasGrandChildren = dirs.some((dir) => {
196
+ if (dir.parts.length <= child.parts.length)
197
+ return false;
198
+ return child.parts.every((part, index) => dir.parts[index] === part);
199
+ });
200
+ if (hasGrandChildren) {
201
+ return {
202
+ type: "folder",
203
+ name: child.title,
204
+ icon: child.icon,
205
+ index: { type: "page", name: child.title, url: child.url, icon: child.icon },
206
+ children: buildLevel(child.parts),
207
+ };
208
+ }
209
+ return {
210
+ type: "page",
211
+ name: child.title,
212
+ url: child.url,
213
+ icon: child.icon,
214
+ };
215
+ });
216
+ }
217
+ children.push(...buildLevel([]));
218
+ return { name: "Docs", children };
219
+ }
220
+ function searchIndexFromMap(contentMap, dirPrefix, entry) {
221
+ const pages = [];
222
+ for (const key of Object.keys(contentMap)) {
223
+ if (!key.startsWith(dirPrefix))
224
+ continue;
225
+ const rel = key.slice(dirPrefix.length);
226
+ const segments = rel.split("/");
227
+ const fileName = segments.pop();
228
+ const base = fileName.replace(/\.(md|mdx)$/, "");
229
+ if (base !== "page" && base !== "index")
230
+ continue;
231
+ const raw = contentMap[key];
232
+ const { data, content } = matter(raw);
233
+ const slug = segments.join("/");
234
+ const url = slug ? `/${entry}/${slug}` : `/${entry}`;
235
+ const fallbackTitle = segments.length > 0
236
+ ? segments[segments.length - 1]
237
+ .replace(/-/g, " ")
238
+ .replace(/\b\w/g, (char) => char.toUpperCase())
239
+ : "Documentation";
240
+ pages.push({
241
+ slug,
242
+ url,
243
+ title: data.title ?? fallbackTitle,
244
+ description: data.description,
245
+ icon: data.icon,
246
+ content: stripMarkdownText(content),
247
+ rawContent: content,
248
+ });
249
+ }
250
+ return pages;
251
+ }
252
+ function findPageInMap(contentMap, dirPrefix, slug) {
253
+ const candidates = slug
254
+ ? [
255
+ `${dirPrefix}${slug}/page.md`,
256
+ `${dirPrefix}${slug}/page.mdx`,
257
+ `${dirPrefix}${slug}/index.md`,
258
+ `${dirPrefix}${slug}/index.mdx`,
259
+ ]
260
+ : [
261
+ `${dirPrefix}page.md`,
262
+ `${dirPrefix}page.mdx`,
263
+ `${dirPrefix}index.md`,
264
+ `${dirPrefix}index.mdx`,
265
+ ];
266
+ for (const key of candidates) {
267
+ const raw = contentMap[key];
268
+ if (raw) {
269
+ return {
270
+ raw,
271
+ relPath: key.slice(dirPrefix.length),
272
+ };
273
+ }
274
+ }
275
+ return null;
276
+ }
277
+ export function createDocsServer(config) {
278
+ const entry = config.entry ?? "docs";
279
+ const ordering = config.ordering;
280
+ const contentDirBase = config.contentDir ?? entry;
281
+ const rootDir = path.resolve(config.rootDir ?? process.cwd());
282
+ const preloaded = resolvePreloadedContent(config._preloadedContent);
283
+ const i18n = resolveDocsI18n(config.i18n);
284
+ const githubRaw = config.github;
285
+ const githubRepo = typeof githubRaw === "string"
286
+ ? githubRaw.replace(/\/$/, "")
287
+ : githubRaw?.url.replace(/\/$/, "");
288
+ const githubBranch = typeof githubRaw === "object" ? (githubRaw.branch ?? "main") : "main";
289
+ const githubContentPath = typeof githubRaw === "object" ? githubRaw.directory?.replace(/^\/|\/$/g, "") : undefined;
290
+ const aiConfig = { enabled: false, ...config.ai };
291
+ if (config.apiKey && !aiConfig.apiKey) {
292
+ aiConfig.apiKey = config.apiKey;
293
+ }
294
+ function normalizePathname(pathname) {
295
+ const trimmed = pathname.replace(/\/+$/, "");
296
+ return trimmed || "/";
297
+ }
298
+ function resolveContentDirRel(locale) {
299
+ if (!locale)
300
+ return contentDirBase;
301
+ if (path.isAbsolute(contentDirBase))
302
+ return path.join(contentDirBase, locale);
303
+ return joinPathParts(contentDirBase, locale);
304
+ }
305
+ function resolveContextFromPath(pathname, locale) {
306
+ const match = resolveDocsPath(normalizePathname(pathname), entry);
307
+ const contentDirRel = resolveContentDirRel(locale);
308
+ return {
309
+ ...match,
310
+ locale,
311
+ contentDirRel,
312
+ contentDirAbs: path.isAbsolute(contentDirRel)
313
+ ? contentDirRel
314
+ : path.resolve(rootDir, contentDirRel),
315
+ dirPrefix: buildDirPrefix(contentDirRel, rootDir),
316
+ };
317
+ }
318
+ function resolveLocaleFromRequest(request) {
319
+ if (!i18n)
320
+ return undefined;
321
+ const url = new URL(request.url);
322
+ const direct = resolveDocsLocale(url.searchParams, i18n);
323
+ if (direct)
324
+ return direct;
325
+ const referrer = request.headers.get("referer") ?? request.headers.get("referrer");
326
+ if (referrer) {
327
+ try {
328
+ const refUrl = new URL(referrer);
329
+ const fromRef = resolveDocsLocale(refUrl.searchParams, i18n);
330
+ if (fromRef)
331
+ return fromRef;
332
+ }
333
+ catch {
334
+ // ignore malformed referrer URLs
335
+ }
336
+ }
337
+ return i18n.defaultLocale;
338
+ }
339
+ function resolveContextFromRequest(request) {
340
+ const locale = resolveLocaleFromRequest(request);
341
+ const url = new URL(request.url);
342
+ const pathnameParam = url.searchParams.get("pathname");
343
+ const referrer = request.headers.get("referer") ?? request.headers.get("referrer");
344
+ let refPath;
345
+ if (referrer) {
346
+ try {
347
+ refPath = new URL(referrer).pathname;
348
+ }
349
+ catch {
350
+ refPath = undefined;
351
+ }
352
+ }
353
+ const pathname = pathnameParam ?? refPath ?? `/${entry}`;
354
+ return resolveContextFromPath(pathname, locale);
355
+ }
356
+ async function load({ pathname, locale }) {
357
+ const resolvedLocale = (i18n && locale && i18n.locales.includes(locale) ? locale : undefined) ?? i18n?.defaultLocale;
358
+ const ctx = resolveContextFromPath(pathname, resolvedLocale);
359
+ const tree = preloaded
360
+ ? navTreeFromMap(preloaded, ctx.dirPrefix, entry, ordering)
361
+ : loadDocsNavTree(ctx.contentDirAbs, entry, ordering);
362
+ const flatPages = flattenNavTree(tree);
363
+ const slug = ctx.slug;
364
+ const isIndex = slug === "";
365
+ let raw;
366
+ let relPath;
367
+ let lastModified;
368
+ if (preloaded) {
369
+ const result = findPageInMap(preloaded, ctx.dirPrefix, slug);
370
+ if (!result) {
371
+ const error = new Error(`Page not found: /${entry}/${slug}`);
372
+ error.status = 404;
373
+ throw error;
374
+ }
375
+ raw = result.raw;
376
+ relPath = result.relPath;
377
+ lastModified = new Date().toLocaleDateString("en-US", {
378
+ year: "numeric",
379
+ month: "long",
380
+ day: "numeric",
381
+ });
382
+ }
383
+ else {
384
+ let filePath = null;
385
+ relPath = "";
386
+ if (isIndex) {
387
+ for (const name of ["page.md", "page.mdx", "index.md", "index.mdx"]) {
388
+ const candidate = path.join(ctx.contentDirAbs, name);
389
+ if (fs.existsSync(candidate)) {
390
+ filePath = candidate;
391
+ relPath = name;
392
+ break;
393
+ }
394
+ }
395
+ }
396
+ else {
397
+ const candidates = [
398
+ path.join(ctx.contentDirAbs, slug, "page.md"),
399
+ path.join(ctx.contentDirAbs, slug, "page.mdx"),
400
+ path.join(ctx.contentDirAbs, slug, "index.md"),
401
+ path.join(ctx.contentDirAbs, slug, "index.mdx"),
402
+ ];
403
+ for (const candidate of candidates) {
404
+ if (fs.existsSync(candidate)) {
405
+ filePath = candidate;
406
+ relPath = path.relative(ctx.contentDirAbs, candidate);
407
+ break;
408
+ }
409
+ }
410
+ }
411
+ if (!filePath) {
412
+ const error = new Error(`Page not found: /${entry}/${slug}`);
413
+ error.status = 404;
414
+ throw error;
415
+ }
416
+ raw = fs.readFileSync(filePath, "utf-8");
417
+ const stat = fs.statSync(filePath);
418
+ lastModified = stat.mtime.toLocaleDateString("en-US", {
419
+ year: "numeric",
420
+ month: "long",
421
+ day: "numeric",
422
+ });
423
+ }
424
+ const { data, content } = matter(raw);
425
+ const currentUrl = isIndex ? `/${entry}` : `/${entry}/${slug}`;
426
+ const currentIndex = flatPages.findIndex((page) => page.url === currentUrl);
427
+ const previousPage = currentIndex > 0 ? flatPages[currentIndex - 1] : null;
428
+ const nextPage = currentIndex < flatPages.length - 1 ? flatPages[currentIndex + 1] : null;
429
+ let editOnGithub;
430
+ if (githubRepo && githubContentPath) {
431
+ const trimmed = githubContentPath.replace(/\/+$/, "");
432
+ const localePrefix = ctx.locale ? `${ctx.locale}/` : "";
433
+ editOnGithub = `${githubRepo}/blob/${githubBranch}/${trimmed}/${localePrefix}${toPosixPath(relPath)}`;
434
+ }
435
+ const fallbackTitle = isIndex
436
+ ? "Documentation"
437
+ : (slug.split("/").pop()?.replace(/-/g, " ") ?? "Documentation");
438
+ return {
439
+ tree,
440
+ flatPages,
441
+ title: data.title ?? fallbackTitle,
442
+ description: data.description,
443
+ rawContent: content,
444
+ sourcePath: toSourcePath(ctx.contentDirRel, relPath, rootDir),
445
+ entry,
446
+ locale: ctx.locale,
447
+ ...(isIndex ? {} : { slug }),
448
+ previousPage,
449
+ nextPage,
450
+ editOnGithub,
451
+ lastModified,
452
+ };
453
+ }
454
+ const searchIndexByEntry = new Map();
455
+ function getSearchIndex(ctx) {
456
+ const key = ctx.locale ?? "__default__";
457
+ const cached = searchIndexByEntry.get(key);
458
+ if (cached)
459
+ return cached;
460
+ const index = preloaded
461
+ ? searchIndexFromMap(preloaded, ctx.dirPrefix, entry)
462
+ : loadDocsContent(ctx.contentDirAbs, entry);
463
+ searchIndexByEntry.set(key, index);
464
+ return index;
465
+ }
466
+ function searchByQuery(query, ctx) {
467
+ const index = getSearchIndex(ctx);
468
+ return index
469
+ .map((page) => {
470
+ const titleMatch = page.title.toLowerCase().includes(query) ? 10 : 0;
471
+ const words = query.split(/\s+/);
472
+ const contentMatch = words.reduce((score, word) => {
473
+ return score + (page.content.toLowerCase().includes(word) ? 1 : 0);
474
+ }, 0);
475
+ return { ...page, score: titleMatch + contentMatch };
476
+ })
477
+ .filter((result) => result.score > 0)
478
+ .sort((a, b) => b.score - a.score);
479
+ }
480
+ const llmsSiteTitle = typeof config.nav === "object" && typeof config.nav?.title === "string"
481
+ ? config.nav.title
482
+ : "Documentation";
483
+ const llmsTxtConfig = config.llmsTxt;
484
+ const llmsBaseUrl = typeof llmsTxtConfig === "object" ? (llmsTxtConfig.baseUrl ?? "") : "";
485
+ const llmsTitle = typeof llmsTxtConfig === "object" ? (llmsTxtConfig.siteTitle ?? llmsSiteTitle) : llmsSiteTitle;
486
+ const llmsDesc = typeof llmsTxtConfig === "object" ? llmsTxtConfig.siteDescription : undefined;
487
+ const llmsCache = new Map();
488
+ function getLlmsContent(ctx) {
489
+ const key = ctx.locale ?? "__default__";
490
+ const cached = llmsCache.get(key);
491
+ if (cached)
492
+ return cached;
493
+ const pages = getSearchIndex(ctx);
494
+ let llmsTxt = `# ${llmsTitle}\n\n`;
495
+ let llmsFullTxt = `# ${llmsTitle}\n\n`;
496
+ if (llmsDesc) {
497
+ llmsTxt += `> ${llmsDesc}\n\n`;
498
+ llmsFullTxt += `> ${llmsDesc}\n\n`;
499
+ }
500
+ llmsTxt += "## Pages\n\n";
501
+ for (const page of pages) {
502
+ llmsTxt += `- [${page.title}](${llmsBaseUrl}${page.url})`;
503
+ if (page.description)
504
+ llmsTxt += `: ${page.description}`;
505
+ llmsTxt += "\n";
506
+ llmsFullTxt += `## ${page.title}\n\n`;
507
+ llmsFullTxt += `URL: ${llmsBaseUrl}${page.url}\n\n`;
508
+ if (page.description)
509
+ llmsFullTxt += `${page.description}\n\n`;
510
+ llmsFullTxt += `${page.content}\n\n---\n\n`;
511
+ }
512
+ const next = { llmsTxt, llmsFullTxt };
513
+ llmsCache.set(key, next);
514
+ return next;
515
+ }
516
+ function GET(event) {
517
+ const ctx = resolveContextFromRequest(event.request);
518
+ const url = new URL(event.request.url);
519
+ const format = url.searchParams.get("format");
520
+ if (format === "llms" || format === "llms-full") {
521
+ const llmsContent = getLlmsContent(ctx);
522
+ return new Response(format === "llms-full" ? llmsContent.llmsFullTxt : llmsContent.llmsTxt, {
523
+ headers: {
524
+ "Content-Type": "text/plain; charset=utf-8",
525
+ "Cache-Control": "public, max-age=3600",
526
+ },
527
+ });
528
+ }
529
+ const query = url.searchParams.get("query")?.toLowerCase().trim();
530
+ if (!query) {
531
+ return new Response(JSON.stringify([]), {
532
+ headers: { "Content-Type": "application/json" },
533
+ });
534
+ }
535
+ const results = searchByQuery(query, ctx)
536
+ .slice(0, 10)
537
+ .map(({ title, url: pageUrl, description }) => ({
538
+ content: title,
539
+ url: pageUrl,
540
+ description,
541
+ }));
542
+ return new Response(JSON.stringify(results), {
543
+ headers: { "Content-Type": "application/json" },
544
+ });
545
+ }
546
+ const projectName = typeof config.nav?.title === "string" ? config.nav.title : null;
547
+ const packageName = aiConfig.packageName;
548
+ const docsUrl = aiConfig.docsUrl;
549
+ function buildDefaultSystemPrompt() {
550
+ const lines = [
551
+ `You are a helpful documentation assistant${projectName ? ` for ${projectName}` : ""}.`,
552
+ "Answer questions based on the provided documentation context.",
553
+ "Be concise and accurate. If the answer is not in the context, say so honestly.",
554
+ "Use markdown formatting for code examples and links.",
555
+ ];
556
+ if (packageName) {
557
+ lines.push(`When showing import examples, always use "${packageName}" as the package name.`);
558
+ }
559
+ if (docsUrl) {
560
+ lines.push(`When linking to documentation pages, use "${docsUrl}" as the base URL (e.g. ${docsUrl}/docs/get-started).`);
561
+ }
562
+ return lines.join(" ");
563
+ }
564
+ const DEFAULT_SYSTEM_PROMPT = buildDefaultSystemPrompt();
565
+ async function POST(event) {
566
+ if (!aiConfig.enabled) {
567
+ return new Response(JSON.stringify({
568
+ error: "AI is not enabled. Set `ai: { enabled: true }` in your docs config to enable it.",
569
+ }), { status: 404, headers: { "Content-Type": "application/json" } });
570
+ }
571
+ const resolvedKey = aiConfig.apiKey ?? process.env?.OPENAI_API_KEY;
572
+ if (!resolvedKey) {
573
+ return new Response(JSON.stringify({
574
+ error: "AI is enabled but no API key was found. Set `apiKey` in your docs config `ai` section or add OPENAI_API_KEY to your environment.",
575
+ }), { status: 500, headers: { "Content-Type": "application/json" } });
576
+ }
577
+ const ctx = resolveContextFromRequest(event.request);
578
+ let body;
579
+ try {
580
+ body = await event.request.json();
581
+ }
582
+ catch {
583
+ return new Response(JSON.stringify({ error: "Invalid JSON body. Expected { messages: [...] }" }), { status: 400, headers: { "Content-Type": "application/json" } });
584
+ }
585
+ const messages = body.messages;
586
+ if (!Array.isArray(messages) || messages.length === 0) {
587
+ return new Response(JSON.stringify({ error: "messages array is required and must not be empty." }), { status: 400, headers: { "Content-Type": "application/json" } });
588
+ }
589
+ const lastUserMessage = [...messages].reverse().find((message) => message.role === "user");
590
+ if (!lastUserMessage) {
591
+ return new Response(JSON.stringify({ error: "At least one user message is required." }), {
592
+ status: 400,
593
+ headers: { "Content-Type": "application/json" },
594
+ });
595
+ }
596
+ const maxResults = aiConfig.maxResults ?? 5;
597
+ const scored = searchByQuery(lastUserMessage.content.toLowerCase(), ctx).slice(0, maxResults);
598
+ const contextParts = scored.map((doc) => `## ${doc.title}\nURL: ${doc.url}\n${doc.description ? `Description: ${doc.description}\n` : ""}\n${doc.content}`);
599
+ const context = contextParts.join("\n\n---\n\n");
600
+ const systemPrompt = aiConfig.systemPrompt ?? DEFAULT_SYSTEM_PROMPT;
601
+ const systemMessage = {
602
+ role: "system",
603
+ content: context
604
+ ? `${systemPrompt}\n\n---\n\nDocumentation context:\n\n${context}`
605
+ : systemPrompt,
606
+ };
607
+ const llmMessages = [
608
+ systemMessage,
609
+ ...messages.filter((message) => message.role !== "system"),
610
+ ];
611
+ const requestedModel = typeof body.model === "string" && body.model.trim().length > 0
612
+ ? body.model.trim()
613
+ : undefined;
614
+ const resolved = resolveAIModelAndProvider(aiConfig, requestedModel);
615
+ const finalKey = resolved.apiKey ?? resolvedKey;
616
+ const llmResponse = await fetch(`${resolved.baseUrl}/chat/completions`, {
617
+ method: "POST",
618
+ headers: {
619
+ "Content-Type": "application/json",
620
+ Authorization: `Bearer ${finalKey}`,
621
+ },
622
+ body: JSON.stringify({ model: resolved.model, stream: true, messages: llmMessages }),
623
+ });
624
+ if (!llmResponse.ok) {
625
+ const errText = await llmResponse.text().catch(() => "Unknown error");
626
+ return new Response(JSON.stringify({ error: `LLM API error (${llmResponse.status}): ${errText}` }), { status: 502, headers: { "Content-Type": "application/json" } });
627
+ }
628
+ return new Response(llmResponse.body, {
629
+ headers: {
630
+ "Content-Type": "text/event-stream",
631
+ "Cache-Control": "no-cache",
632
+ Connection: "keep-alive",
633
+ },
634
+ });
635
+ }
636
+ return { load, GET, POST };
637
+ }
638
+ //# sourceMappingURL=server.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"server.js","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"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"}
package/dist/vite.d.ts ADDED
@@ -0,0 +1,3 @@
1
+ import type { PluginOption } from "vite";
2
+ export declare function docsMdx(): PluginOption;
3
+ //# sourceMappingURL=vite.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"vite.d.ts","sourceRoot":"","sources":["../src/vite.ts"],"names":[],"mappings":"AAOA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,MAAM,CAAC;AAEzC,wBAAgB,OAAO,IAAI,YAAY,CActC"}
package/dist/vite.js ADDED
@@ -0,0 +1,23 @@
1
+ import mdx from "@mdx-js/rollup";
2
+ import remarkFrontmatter from "remark-frontmatter";
3
+ import remarkGfm from "remark-gfm";
4
+ import remarkMdxFrontmatter from "remark-mdx-frontmatter";
5
+ import { remarkHeading } from "fumadocs-core/mdx-plugins/remark-heading";
6
+ import { rehypeToc } from "fumadocs-core/mdx-plugins/rehype-toc";
7
+ import { rehypeCode } from "fumadocs-core/mdx-plugins/rehype-code";
8
+ export function docsMdx() {
9
+ return mdx({
10
+ include: /\.(md|mdx)$/,
11
+ remarkPlugins: [
12
+ remarkGfm,
13
+ remarkFrontmatter,
14
+ [remarkMdxFrontmatter, { name: "metadata" }],
15
+ remarkHeading,
16
+ ],
17
+ rehypePlugins: [
18
+ rehypeToc,
19
+ [rehypeCode, { themes: { dark: "github-dark", light: "github-light" } }],
20
+ ],
21
+ });
22
+ }
23
+ //# sourceMappingURL=vite.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"vite.js","sourceRoot":"","sources":["../src/vite.ts"],"names":[],"mappings":"AAAA,OAAO,GAAG,MAAM,gBAAgB,CAAC;AACjC,OAAO,iBAAiB,MAAM,oBAAoB,CAAC;AACnD,OAAO,SAAS,MAAM,YAAY,CAAC;AACnC,OAAO,oBAAoB,MAAM,wBAAwB,CAAC;AAC1D,OAAO,EAAE,aAAa,EAAE,MAAM,0CAA0C,CAAC;AACzE,OAAO,EAAE,SAAS,EAAE,MAAM,sCAAsC,CAAC;AACjE,OAAO,EAAE,UAAU,EAAE,MAAM,uCAAuC,CAAC;AAGnE,MAAM,UAAU,OAAO;IACrB,OAAO,GAAG,CAAC;QACT,OAAO,EAAE,aAAa;QACtB,aAAa,EAAE;YACb,SAAS;YACT,iBAAiB;YACjB,CAAC,oBAAoB,EAAE,EAAE,IAAI,EAAE,UAAU,EAAE,CAAC;YAC5C,aAAa;SACd;QACD,aAAa,EAAE;YACb,SAAS;YACT,CAAC,UAAU,EAAE,EAAE,MAAM,EAAE,EAAE,IAAI,EAAE,aAAa,EAAE,KAAK,EAAE,cAAc,EAAE,EAAE,CAAC;SACzE;KACF,CAAC,CAAC;AACL,CAAC"}
package/package.json ADDED
@@ -0,0 +1,73 @@
1
+ {
2
+ "name": "@farming-labs/tanstack-start",
3
+ "version": "0.0.33",
4
+ "description": "TanStack Start adapter for @farming-labs/docs — content loading, search, and AI utilities",
5
+ "keywords": [
6
+ "docs",
7
+ "documentation",
8
+ "tanstack",
9
+ "tanstack-start"
10
+ ],
11
+ "license": "MIT",
12
+ "author": "Farming Labs",
13
+ "files": [
14
+ "dist"
15
+ ],
16
+ "type": "module",
17
+ "main": "./dist/index.js",
18
+ "types": "./dist/index.d.ts",
19
+ "exports": {
20
+ ".": {
21
+ "types": "./dist/index.d.ts",
22
+ "import": "./dist/index.js",
23
+ "default": "./dist/index.js"
24
+ },
25
+ "./react": {
26
+ "types": "./dist/react.d.ts",
27
+ "import": "./dist/react.js",
28
+ "default": "./dist/react.js"
29
+ },
30
+ "./content": {
31
+ "types": "./dist/content.d.ts",
32
+ "import": "./dist/content.js",
33
+ "default": "./dist/content.js"
34
+ },
35
+ "./server": {
36
+ "types": "./dist/server.d.ts",
37
+ "import": "./dist/server.js",
38
+ "default": "./dist/server.js"
39
+ },
40
+ "./vite": {
41
+ "types": "./dist/vite.d.ts",
42
+ "import": "./dist/vite.js",
43
+ "default": "./dist/vite.js"
44
+ }
45
+ },
46
+ "dependencies": {
47
+ "@mdx-js/rollup": "^3.1.1",
48
+ "fumadocs-core": "^16.6.1",
49
+ "gray-matter": "^4.0.3",
50
+ "remark-frontmatter": "^5.0.0",
51
+ "remark-gfm": "^4.0.1",
52
+ "remark-mdx-frontmatter": "^5.2.0"
53
+ },
54
+ "devDependencies": {
55
+ "@types/react": "^19.2.2",
56
+ "@types/node": "^22.10.0",
57
+ "react": "^19.2.0",
58
+ "vite": "^7.0.0",
59
+ "typescript": "^5.9.3",
60
+ "@farming-labs/docs": "0.0.34",
61
+ "@farming-labs/theme": "0.0.34"
62
+ },
63
+ "peerDependencies": {
64
+ "@farming-labs/docs": "*",
65
+ "@farming-labs/theme": "*",
66
+ "react": "^19.0.0"
67
+ },
68
+ "scripts": {
69
+ "build": "tsc",
70
+ "dev": "tsc --watch",
71
+ "typecheck": "tsc --noEmit"
72
+ }
73
+ }