@geenius/docs 0.4.0 → 0.5.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.
- package/CHANGELOG.md +12 -0
- package/README.md +77 -34
- package/package.json +16 -4
- package/packages/convex/dist/index.d.ts +45 -0
- package/packages/convex/dist/index.js.map +1 -1
- package/packages/react/dist/index.js +315 -3659
- package/packages/react/dist/index.js.map +1 -1
- package/packages/react-css/dist/index.d.ts +1 -0
- package/packages/react-css/dist/index.js +19 -3498
- package/packages/react-css/dist/index.js.map +1 -1
- package/packages/shared/dist/chunk-BR2XBF64.js +157 -0
- package/packages/shared/dist/chunk-BR2XBF64.js.map +1 -0
- package/packages/shared/dist/index.d.ts +3 -501
- package/packages/shared/dist/index.js +2 -716
- package/packages/shared/dist/index.js.map +1 -1
- package/packages/shared/dist/providers.d.ts +234 -0
- package/packages/shared/dist/providers.js +564 -0
- package/packages/shared/dist/providers.js.map +1 -0
- package/packages/shared/dist/types-n-Ryn258.d.ts +270 -0
- package/packages/solidjs/dist/index.d.ts +132 -108
- package/packages/solidjs/dist/index.js +367 -3608
- package/packages/solidjs/dist/index.js.map +1 -1
- package/packages/solidjs-css/dist/index.d.ts +31 -0
- package/packages/solidjs-css/dist/index.js +8 -3494
- package/packages/solidjs-css/dist/index.js.map +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,17 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## 0.5.0
|
|
4
|
+
|
|
5
|
+
### Minor Changes
|
|
6
|
+
|
|
7
|
+
- Bring package to A+++ golden-standard compliance with full documentation, cleanup, and structural alignment
|
|
8
|
+
|
|
9
|
+
## 0.4.1
|
|
10
|
+
|
|
11
|
+
### Patch Changes
|
|
12
|
+
|
|
13
|
+
- Add missing published runtime dependencies required by shared, React, React CSS, and SolidJS subpath bundles
|
|
14
|
+
|
|
3
15
|
## 0.4.0
|
|
4
16
|
|
|
5
17
|
### Minor Changes
|
package/README.md
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# `@geenius/docs`
|
|
2
2
|
|
|
3
|
-
Provider-driven documentation primitives for Geenius products, including
|
|
3
|
+
Provider-driven documentation primitives for Geenius products, including shared docs models, React and SolidJS UIs, vanilla CSS variants, and Convex-backed content storage.
|
|
4
4
|
|
|
5
5
|
## Install
|
|
6
6
|
|
|
@@ -8,46 +8,89 @@ Provider-driven documentation primitives for Geenius products, including navigat
|
|
|
8
8
|
pnpm add @geenius/docs
|
|
9
9
|
```
|
|
10
10
|
|
|
11
|
-
|
|
11
|
+
Add the framework peers you actually consume:
|
|
12
12
|
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
- `@geenius/docs/convex` for Convex-backed docs storage helpers
|
|
13
|
+
```bash
|
|
14
|
+
pnpm add react react-dom
|
|
15
|
+
pnpm add solid-js
|
|
16
|
+
pnpm add convex
|
|
17
|
+
```
|
|
19
18
|
|
|
20
|
-
##
|
|
19
|
+
## Import Surface
|
|
20
|
+
|
|
21
|
+
```ts
|
|
22
|
+
import { configureDocs, extractToc } from '@geenius/docs'
|
|
23
|
+
import { AstroDocsProvider, InternalDocsProvider } from '@geenius/docs/shared/providers'
|
|
24
|
+
import { DocPage, DocsLayout, useDocs } from '@geenius/docs/react'
|
|
25
|
+
import { DocPage as DocPageCss, DocsLayout as DocsLayoutCss } from '@geenius/docs/react-css'
|
|
26
|
+
import { DocPage as SolidDocPage, createDocs } from '@geenius/docs/solidjs'
|
|
27
|
+
import { DocPage as SolidCssDocPage, createDocs as createCssDocs } from '@geenius/docs/solidjs-css'
|
|
28
|
+
import { docsTables, getFullTree, listSections } from '@geenius/docs/convex'
|
|
29
|
+
```
|
|
30
|
+
|
|
31
|
+
## Usage
|
|
21
32
|
|
|
22
33
|
```tsx
|
|
23
34
|
import type { DocPage as DocsPage } from '@geenius/docs'
|
|
24
|
-
import { DocPage } from '@geenius/docs/react'
|
|
25
|
-
|
|
26
|
-
const
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
}
|
|
35
|
+
import { DocPage, DocsLayout, useDocs } from '@geenius/docs/react'
|
|
36
|
+
|
|
37
|
+
const tree = [
|
|
38
|
+
{
|
|
39
|
+
id: 'getting-started',
|
|
40
|
+
title: 'Getting Started',
|
|
41
|
+
slug: 'getting-started',
|
|
42
|
+
order: 0,
|
|
43
|
+
access: 'public',
|
|
44
|
+
pageCount: 1,
|
|
45
|
+
pages: [
|
|
46
|
+
{
|
|
47
|
+
id: 'intro',
|
|
48
|
+
title: 'Introduction',
|
|
49
|
+
slug: 'introduction',
|
|
50
|
+
content: '# Introduction\n\nWelcome to Geenius Docs.',
|
|
51
|
+
sectionId: 'getting-started',
|
|
52
|
+
order: 0,
|
|
53
|
+
author: { name: 'Mehdi Nabhani' },
|
|
54
|
+
access: 'public',
|
|
55
|
+
tags: ['overview'],
|
|
56
|
+
status: 'published',
|
|
57
|
+
createdAt: '2026-04-12T09:00:00.000Z',
|
|
58
|
+
updatedAt: '2026-04-12T09:00:00.000Z',
|
|
59
|
+
wordCount: 120,
|
|
60
|
+
readingTime: 1,
|
|
61
|
+
viewCount: 42,
|
|
62
|
+
} satisfies DocsPage,
|
|
63
|
+
],
|
|
64
|
+
},
|
|
65
|
+
]
|
|
43
66
|
|
|
44
|
-
export function
|
|
45
|
-
|
|
67
|
+
export function DocsExample(): React.JSX.Element {
|
|
68
|
+
const docs = useDocs(tree, { siteName: 'Geenius Docs' })
|
|
69
|
+
|
|
70
|
+
return (
|
|
71
|
+
<DocsLayout
|
|
72
|
+
sections={docs.sections}
|
|
73
|
+
currentPageId={docs.currentPage?.id}
|
|
74
|
+
onNavigate={(page) => docs.setPage(page)}
|
|
75
|
+
>
|
|
76
|
+
<DocPage page={docs.flatPages[0]} />
|
|
77
|
+
</DocsLayout>
|
|
78
|
+
)
|
|
46
79
|
}
|
|
47
80
|
```
|
|
48
81
|
|
|
49
|
-
##
|
|
82
|
+
## Storybook Review Apps
|
|
83
|
+
|
|
84
|
+
- [React review app](./apps/storybook-react)
|
|
85
|
+
- [SolidJS review app](./apps/storybook-solidjs)
|
|
86
|
+
|
|
87
|
+
Run them locally with:
|
|
88
|
+
|
|
89
|
+
```bash
|
|
90
|
+
pnpm storybook:react
|
|
91
|
+
pnpm storybook:solidjs
|
|
92
|
+
```
|
|
93
|
+
|
|
94
|
+
## License
|
|
50
95
|
|
|
51
|
-
|
|
52
|
-
- `pnpm storybook:solidjs` runs the SolidJS storybook app
|
|
53
|
-
- Storybook apps live under `apps/` and are development-only; they are not part of the published contract
|
|
96
|
+
MIT
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@geenius/docs",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.5.0",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"description": "Geenius Docs — Provider-based documentation primitives and Storybook review apps for React, SolidJS, and Convex.",
|
|
6
6
|
"author": "Mehdi Nabhani",
|
|
@@ -33,7 +33,12 @@
|
|
|
33
33
|
"CHANGELOG.md"
|
|
34
34
|
],
|
|
35
35
|
"dependencies": {
|
|
36
|
-
"
|
|
36
|
+
"clsx": "^2.1.1",
|
|
37
|
+
"gray-matter": "^4.0.3",
|
|
38
|
+
"react-markdown": "^10.1.0",
|
|
39
|
+
"remark-gfm": "^4.0.1",
|
|
40
|
+
"solid-markdown": "^2.1.1",
|
|
41
|
+
"@geenius/motion": "0.4.0",
|
|
37
42
|
"@geenius/tools": "0.3.0"
|
|
38
43
|
},
|
|
39
44
|
"peerDependencies": {
|
|
@@ -58,7 +63,7 @@
|
|
|
58
63
|
},
|
|
59
64
|
"devDependencies": {
|
|
60
65
|
"@arethetypeswrong/cli": "^0.18.2",
|
|
61
|
-
"@biomejs/biome": "^2.
|
|
66
|
+
"@biomejs/biome": "^2.4.11",
|
|
62
67
|
"@changesets/cli": "^2.30.0",
|
|
63
68
|
"publint": "^0.3.18",
|
|
64
69
|
"typescript": "~6.0.2",
|
|
@@ -76,6 +81,10 @@
|
|
|
76
81
|
"types": "./packages/shared/dist/index.d.ts",
|
|
77
82
|
"import": "./packages/shared/dist/index.js"
|
|
78
83
|
},
|
|
84
|
+
"./shared/providers": {
|
|
85
|
+
"types": "./packages/shared/dist/providers.d.ts",
|
|
86
|
+
"import": "./packages/shared/dist/providers.js"
|
|
87
|
+
},
|
|
79
88
|
"./react": {
|
|
80
89
|
"types": "./packages/react/dist/index.d.ts",
|
|
81
90
|
"import": "./packages/react/dist/index.js"
|
|
@@ -102,6 +111,9 @@
|
|
|
102
111
|
"shared": [
|
|
103
112
|
"./packages/shared/dist/index.d.ts"
|
|
104
113
|
],
|
|
114
|
+
"shared/providers": [
|
|
115
|
+
"./packages/shared/dist/providers.d.ts"
|
|
116
|
+
],
|
|
105
117
|
"react": [
|
|
106
118
|
"./packages/react/dist/index.d.ts"
|
|
107
119
|
],
|
|
@@ -127,7 +139,7 @@
|
|
|
127
139
|
"scripts": {
|
|
128
140
|
"changeset": "changeset",
|
|
129
141
|
"build": "pnpm --filter ./packages/shared build && pnpm -r --filter './packages/*' --filter '!./packages/shared' build",
|
|
130
|
-
"lint": "pnpm exec biome check . && pnpm --filter ./packages/shared type-check && pnpm -r --filter './packages/*' --filter '!./packages/shared' type-check",
|
|
142
|
+
"lint": "pnpm exec biome check package.json vitest.config.ts __tests__ packages && pnpm --filter ./packages/shared type-check && pnpm -r --filter './packages/*' --filter '!./packages/shared' type-check",
|
|
131
143
|
"type-check": "pnpm --filter ./packages/shared type-check && pnpm -r --filter './packages/*' --filter '!./packages/shared' type-check",
|
|
132
144
|
"test:unit": "pnpm -r --filter './packages/*' test && vitest run __tests__/parity.test.ts",
|
|
133
145
|
"test:exports": "vitest run __tests__/exports.test.ts --passWithNoTests",
|
|
@@ -139,6 +139,11 @@ declare const movePage: convex_server.RegisteredMutation<"public", {
|
|
|
139
139
|
* package. The validators mirror the schema so consumers never fall back to
|
|
140
140
|
* `v.any()` for docs sections, pages, or tree payloads.
|
|
141
141
|
*/
|
|
142
|
+
/**
|
|
143
|
+
* Lists docs sections, optionally filtered by access level.
|
|
144
|
+
*
|
|
145
|
+
* @returns A sorted array of section records matching the requested access scope.
|
|
146
|
+
*/
|
|
142
147
|
declare const listSections: convex_server.RegisteredQuery<"public", {
|
|
143
148
|
access?: "public" | "team" | "admin" | undefined;
|
|
144
149
|
}, Promise<{
|
|
@@ -153,6 +158,11 @@ declare const listSections: convex_server.RegisteredQuery<"public", {
|
|
|
153
158
|
access: "public" | "team" | "admin";
|
|
154
159
|
createdAt: number;
|
|
155
160
|
}[]>>;
|
|
161
|
+
/**
|
|
162
|
+
* Resolves a single docs section by its identifier.
|
|
163
|
+
*
|
|
164
|
+
* @returns The matching section record, or `null` when the section is missing.
|
|
165
|
+
*/
|
|
156
166
|
declare const getSection: convex_server.RegisteredQuery<"public", {
|
|
157
167
|
sectionId: convex_values.GenericId<"doc_sections">;
|
|
158
168
|
}, Promise<{
|
|
@@ -167,6 +177,11 @@ declare const getSection: convex_server.RegisteredQuery<"public", {
|
|
|
167
177
|
access: "public" | "team" | "admin";
|
|
168
178
|
createdAt: number;
|
|
169
179
|
} | null>>;
|
|
180
|
+
/**
|
|
181
|
+
* Lists docs pages that belong to one section.
|
|
182
|
+
*
|
|
183
|
+
* @returns A sorted array of pages for the requested section and optional status.
|
|
184
|
+
*/
|
|
170
185
|
declare const listPagesBySection: convex_server.RegisteredQuery<"public", {
|
|
171
186
|
status?: "draft" | "published" | "archived" | undefined;
|
|
172
187
|
sectionId: convex_values.GenericId<"doc_sections">;
|
|
@@ -197,6 +212,11 @@ declare const listPagesBySection: convex_server.RegisteredQuery<"public", {
|
|
|
197
212
|
readingTime: number;
|
|
198
213
|
viewCount: number;
|
|
199
214
|
}[]>>;
|
|
215
|
+
/**
|
|
216
|
+
* Resolves a docs page by section identifier and slug.
|
|
217
|
+
*
|
|
218
|
+
* @returns The matching page record, or `null` when no page matches the slug.
|
|
219
|
+
*/
|
|
200
220
|
declare const getPage: convex_server.RegisteredQuery<"public", {
|
|
201
221
|
slug: string;
|
|
202
222
|
sectionId: convex_values.GenericId<"doc_sections">;
|
|
@@ -227,6 +247,11 @@ declare const getPage: convex_server.RegisteredQuery<"public", {
|
|
|
227
247
|
readingTime: number;
|
|
228
248
|
viewCount: number;
|
|
229
249
|
} | null>>;
|
|
250
|
+
/**
|
|
251
|
+
* Resolves a docs page by its unique identifier.
|
|
252
|
+
*
|
|
253
|
+
* @returns The matching page record, or `null` when the page is missing.
|
|
254
|
+
*/
|
|
230
255
|
declare const getPageById: convex_server.RegisteredQuery<"public", {
|
|
231
256
|
pageId: convex_values.GenericId<"doc_pages">;
|
|
232
257
|
}, Promise<{
|
|
@@ -256,6 +281,11 @@ declare const getPageById: convex_server.RegisteredQuery<"public", {
|
|
|
256
281
|
readingTime: number;
|
|
257
282
|
viewCount: number;
|
|
258
283
|
} | null>>;
|
|
284
|
+
/**
|
|
285
|
+
* Searches published docs pages by title, content, and tags.
|
|
286
|
+
*
|
|
287
|
+
* @returns A ranked list of matching page records limited to the first 20 hits.
|
|
288
|
+
*/
|
|
259
289
|
declare const searchPages: convex_server.RegisteredQuery<"public", {
|
|
260
290
|
access?: "public" | "team" | "admin" | undefined;
|
|
261
291
|
query: string;
|
|
@@ -286,6 +316,11 @@ declare const searchPages: convex_server.RegisteredQuery<"public", {
|
|
|
286
316
|
readingTime: number;
|
|
287
317
|
viewCount: number;
|
|
288
318
|
}[]>>;
|
|
319
|
+
/**
|
|
320
|
+
* Builds the full docs tree with published pages attached to each section.
|
|
321
|
+
*
|
|
322
|
+
* @returns A sorted section tree ready for docs navigation and page shells.
|
|
323
|
+
*/
|
|
289
324
|
declare const getFullTree: convex_server.RegisteredQuery<"public", {
|
|
290
325
|
access?: "public" | "team" | "admin" | undefined;
|
|
291
326
|
}, Promise<{
|
|
@@ -330,6 +365,11 @@ declare const getFullTree: convex_server.RegisteredQuery<"public", {
|
|
|
330
365
|
access: "public" | "team" | "admin";
|
|
331
366
|
createdAt: number;
|
|
332
367
|
}[]>>;
|
|
368
|
+
/**
|
|
369
|
+
* Lists recently updated published docs pages.
|
|
370
|
+
*
|
|
371
|
+
* @returns A descending list of recently updated pages capped by the requested limit.
|
|
372
|
+
*/
|
|
333
373
|
declare const getRecentPages: convex_server.RegisteredQuery<"public", {
|
|
334
374
|
access?: "public" | "team" | "admin" | undefined;
|
|
335
375
|
limit?: number | undefined;
|
|
@@ -361,6 +401,11 @@ declare const getRecentPages: convex_server.RegisteredQuery<"public", {
|
|
|
361
401
|
readingTime: number;
|
|
362
402
|
viewCount: number;
|
|
363
403
|
}[]>>;
|
|
404
|
+
/**
|
|
405
|
+
* Lists versioned pages that share the same slug.
|
|
406
|
+
*
|
|
407
|
+
* @returns A descending array of versioned page records for the requested slug.
|
|
408
|
+
*/
|
|
364
409
|
declare const getPageVersions: convex_server.RegisteredQuery<"public", {
|
|
365
410
|
slug: string;
|
|
366
411
|
}, Promise<{
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/convex.config.ts","../src/_generated/server.js","../src/mutations.ts","../src/queries.ts","../src/schema.ts"],"names":["v"],"mappings":"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","file":"index.js","sourcesContent":["/**\n * @module docsConvexConfig\n * @package @geenius/docs-convex\n * @description Declares the Convex component identity for the docs package so\n * consuming apps can register the component under the canonical docs name.\n */\n\nimport { defineComponent } from 'convex/server'\n\n/**\n * Convex component definition for the docs package.\n */\nconst component = defineComponent('docs')\n\nexport default component\n","/* eslint-disable */\n/**\n * THIS CODE IS AUTOMATICALLY GENERATED by @geenius/db codegen.\n *\n * Template version: 1.34-r2\n * Generated at: 2026-04-13\n * Convex SDK: ^1.34.0\n *\n * DO NOT EDIT THIS FILE MANUALLY.\n * To regenerate, run: geenius-convex-codegen\n * @module\n */\n\nimport {\n actionGeneric,\n httpActionGeneric,\n queryGeneric,\n mutationGeneric,\n internalActionGeneric,\n internalMutationGeneric,\n internalQueryGeneric,\n} from \"convex/server\";\n\nexport const query = queryGeneric;\nexport const internalQuery = internalQueryGeneric;\nexport const mutation = mutationGeneric;\nexport const internalMutation = internalMutationGeneric;\nexport const action = actionGeneric;\nexport const internalAction = internalActionGeneric;\nexport const httpAction = httpActionGeneric;\n","/**\n * @module docsConvexMutations\n * @package @geenius/docs-convex\n * @description Declares the typed Convex mutation surface for creating,\n * updating, reordering, publishing, and deleting docs sections and pages.\n */\n\nimport { v } from 'convex/values'\nimport { mutation } from './_generated/server.js'\n\n/**\n * Creates a docs section record.\n */\nexport const createSection = mutation({\n args: {\n title: v.string(),\n slug: v.string(),\n parentId: v.optional(v.id('doc_sections')),\n order: v.number(),\n icon: v.optional(v.string()),\n description: v.optional(v.string()),\n access: v.union(v.literal('public'), v.literal('team'), v.literal('admin')),\n },\n returns: v.id('doc_sections'),\n handler: async (ctx, args) => {\n return await ctx.db.insert('doc_sections', {\n ...args,\n createdAt: Date.now(),\n })\n },\n})\n\n/**\n * Updates mutable fields on a docs section.\n */\nexport const updateSection = mutation({\n args: {\n sectionId: v.id('doc_sections'),\n title: v.optional(v.string()),\n slug: v.optional(v.string()),\n order: v.optional(v.number()),\n icon: v.optional(v.string()),\n description: v.optional(v.string()),\n access: v.optional(\n v.union(v.literal('public'), v.literal('team'), v.literal('admin'))\n ),\n },\n returns: v.null(),\n handler: async (ctx, args) => {\n const { sectionId, ...updates } = args\n const clean = Object.fromEntries(\n Object.entries(updates).filter(([, val]) => val !== undefined)\n )\n await ctx.db.patch(sectionId, clean)\n return null\n },\n})\n\n/**\n * Deletes a docs section and its dependent pages and search index entries.\n */\nexport const deleteSection = mutation({\n args: { sectionId: v.id('doc_sections') },\n returns: v.null(),\n handler: async (ctx, args) => {\n const pages = await ctx.db\n .query('doc_pages')\n .withIndex('by_sectionId', (q) => q.eq('sectionId', args.sectionId))\n .collect()\n\n for (const page of pages) {\n const indexEntries = await ctx.db\n .query('doc_search_index')\n .withIndex('by_pageId', (q) => q.eq('pageId', page._id))\n .collect()\n for (const entry of indexEntries) {\n await ctx.db.delete(entry._id)\n }\n await ctx.db.delete(page._id)\n }\n\n await ctx.db.delete(args.sectionId)\n return null\n },\n})\n\n/**\n * Reorders sections according to the provided id sequence.\n */\nexport const reorderSections = mutation({\n args: { sectionIds: v.array(v.id('doc_sections')) },\n returns: v.null(),\n handler: async (ctx, args) => {\n for (let i = 0; i < args.sectionIds.length; i++) {\n await ctx.db.patch(args.sectionIds[i], { order: i })\n }\n return null\n },\n})\n\n/**\n * Creates a docs page and derives reading-time metadata from its content.\n */\nexport const createPage = mutation({\n args: {\n title: v.string(),\n slug: v.string(),\n content: v.string(),\n sectionId: v.id('doc_sections'),\n access: v.union(v.literal('public'), v.literal('team'), v.literal('admin')),\n tags: v.optional(v.array(v.string())),\n version: v.optional(v.string()),\n status: v.optional(\n v.union(v.literal('draft'), v.literal('published'), v.literal('archived'))\n ),\n author: v.optional(\n v.object({ name: v.string(), avatar: v.optional(v.string()) })\n ),\n excerpt: v.optional(v.string()),\n order: v.optional(v.number()),\n },\n returns: v.id('doc_pages'),\n handler: async (ctx, args) => {\n const now = Date.now()\n const stripped = args.content\n .replace(/```[\\s\\S]*?```/g, '')\n .replace(/[#*_~>|-]/g, '')\n .trim()\n const words = stripped.split(/\\s+/).filter(Boolean)\n const wordCount = words.length\n const readingTime = Math.max(1, Math.ceil(wordCount / 225))\n\n return await ctx.db.insert('doc_pages', {\n title: args.title,\n slug: args.slug,\n content: args.content,\n excerpt: args.excerpt,\n sectionId: args.sectionId,\n order: args.order ?? 0,\n author: args.author ?? { name: \"Anonymous\" },\n version: args.version,\n access: args.access,\n tags: args.tags ?? [],\n status: args.status ?? 'draft',\n createdAt: now,\n updatedAt: now,\n wordCount,\n readingTime,\n viewCount: 0,\n })\n },\n})\n\n/**\n * Updates an existing docs page and recalculates derived metadata when needed.\n */\nexport const updatePage = mutation({\n args: {\n pageId: v.id('doc_pages'),\n title: v.optional(v.string()),\n slug: v.optional(v.string()),\n content: v.optional(v.string()),\n excerpt: v.optional(v.string()),\n sectionId: v.optional(v.id('doc_sections')),\n order: v.optional(v.number()),\n access: v.optional(\n v.union(v.literal('public'), v.literal('team'), v.literal('admin'))\n ),\n tags: v.optional(v.array(v.string())),\n version: v.optional(v.string()),\n status: v.optional(\n v.union(v.literal('draft'), v.literal('published'), v.literal('archived'))\n ),\n lastEditedBy: v.optional(\n v.object({ name: v.string(), editedAt: v.string() })\n ),\n },\n returns: v.null(),\n handler: async (ctx, args) => {\n const { pageId, ...updates } = args\n const clean: Record<string, unknown> = Object.fromEntries(\n Object.entries(updates).filter(([, val]) => val !== undefined)\n )\n\n if (typeof clean.content === 'string') {\n const stripped = clean.content\n .replace(/```[\\s\\S]*?```/g, '')\n .replace(/[#*_~>|-]/g, '')\n .trim()\n const words = stripped.split(/\\s+/).filter(Boolean)\n clean.wordCount = words.length\n clean.readingTime = Math.max(1, Math.ceil(words.length / 225))\n }\n\n clean.updatedAt = Date.now()\n await ctx.db.patch(pageId, clean)\n return null\n },\n})\n\n/**\n * Publishes a docs page.\n */\nexport const publishPage = mutation({\n args: { pageId: v.id('doc_pages') },\n returns: v.null(),\n handler: async (ctx, args) => {\n await ctx.db.patch(args.pageId, {\n status: 'published',\n updatedAt: Date.now(),\n })\n return null\n },\n})\n\n/**\n * Archives a docs page.\n */\nexport const archivePage = mutation({\n args: { pageId: v.id('doc_pages') },\n returns: v.null(),\n handler: async (ctx, args) => {\n await ctx.db.patch(args.pageId, {\n status: 'archived',\n updatedAt: Date.now(),\n })\n return null\n },\n})\n\n/**\n * Deletes a docs page and its search index entries.\n */\nexport const deletePage = mutation({\n args: { pageId: v.id('doc_pages') },\n returns: v.null(),\n handler: async (ctx, args) => {\n const indexEntries = await ctx.db\n .query('doc_search_index')\n .withIndex('by_pageId', (q) => q.eq('pageId', args.pageId))\n .collect()\n for (const entry of indexEntries) {\n await ctx.db.delete(entry._id)\n }\n await ctx.db.delete(args.pageId)\n return null\n },\n})\n\n/**\n * Reorders pages within a section according to the provided id sequence.\n */\nexport const reorderPages = mutation({\n args: { pageIds: v.array(v.id('doc_pages')) },\n returns: v.null(),\n handler: async (ctx, args) => {\n for (let i = 0; i < args.pageIds.length; i++) {\n await ctx.db.patch(args.pageIds[i], { order: i })\n }\n return null\n },\n})\n\n/**\n * Increments the view count for a docs page.\n */\nexport const incrementViewCount = mutation({\n args: { pageId: v.id('doc_pages') },\n returns: v.null(),\n handler: async (ctx, args) => {\n const page = await ctx.db.get(args.pageId)\n if (page) {\n await ctx.db.patch(args.pageId, { viewCount: (page.viewCount ?? 0) + 1 })\n }\n return null\n },\n})\n\n/**\n * Moves a docs page into a new section and order slot.\n */\nexport const movePage = mutation({\n args: {\n pageId: v.id('doc_pages'),\n newSectionId: v.id('doc_sections'),\n newOrder: v.number(),\n },\n returns: v.null(),\n handler: async (ctx, args) => {\n await ctx.db.patch(args.pageId, {\n sectionId: args.newSectionId,\n order: args.newOrder,\n updatedAt: Date.now(),\n })\n return null\n },\n})\n","/**\n * @module docsConvexQueries\n * @package @geenius/docs-convex\n * @description Declares the typed Convex query surface used by the docs\n * package. The validators mirror the schema so consumers never fall back to\n * `v.any()` for docs sections, pages, or tree payloads.\n */\n\nimport { v } from \"convex/values\";\nimport { query } from \"./_generated/server.js\";\n\nconst docAccessValidator = v.union(\n v.literal(\"public\"),\n v.literal(\"team\"),\n v.literal(\"admin\"),\n);\n\nconst docStatusValidator = v.union(\n v.literal(\"draft\"),\n v.literal(\"published\"),\n v.literal(\"archived\"),\n);\n\nconst docAuthorValidator = v.object({\n name: v.string(),\n avatar: v.optional(v.string()),\n});\n\nconst docRevisionValidator = v.object({\n name: v.string(),\n editedAt: v.string(),\n});\n\nconst docSectionValidator = v.object({\n _id: v.id(\"doc_sections\"),\n _creationTime: v.number(),\n title: v.string(),\n slug: v.string(),\n parentId: v.optional(v.id(\"doc_sections\")),\n order: v.number(),\n icon: v.optional(v.string()),\n description: v.optional(v.string()),\n access: docAccessValidator,\n createdAt: v.number(),\n});\n\nconst docPageValidator = v.object({\n _id: v.id(\"doc_pages\"),\n _creationTime: v.number(),\n title: v.string(),\n slug: v.string(),\n content: v.string(),\n excerpt: v.optional(v.string()),\n sectionId: v.id(\"doc_sections\"),\n order: v.number(),\n author: docAuthorValidator,\n lastEditedBy: v.optional(docRevisionValidator),\n version: v.optional(v.string()),\n access: docAccessValidator,\n tags: v.array(v.string()),\n status: docStatusValidator,\n createdAt: v.number(),\n updatedAt: v.number(),\n wordCount: v.number(),\n readingTime: v.number(),\n viewCount: v.number(),\n});\n\nconst hydratedPageValidator = v.object({\n _id: v.id(\"doc_pages\"),\n _creationTime: v.number(),\n id: v.id(\"doc_pages\"),\n title: v.string(),\n slug: v.string(),\n content: v.string(),\n excerpt: v.optional(v.string()),\n sectionId: v.id(\"doc_sections\"),\n order: v.number(),\n author: docAuthorValidator,\n lastEditedBy: v.optional(docRevisionValidator),\n version: v.optional(v.string()),\n access: docAccessValidator,\n tags: v.array(v.string()),\n status: docStatusValidator,\n createdAt: v.number(),\n updatedAt: v.number(),\n wordCount: v.number(),\n readingTime: v.number(),\n viewCount: v.number(),\n});\n\nconst sectionTreeItemValidator = v.object({\n _id: v.id(\"doc_sections\"),\n _creationTime: v.number(),\n id: v.id(\"doc_sections\"),\n title: v.string(),\n slug: v.string(),\n parentId: v.optional(v.id(\"doc_sections\")),\n order: v.number(),\n icon: v.optional(v.string()),\n description: v.optional(v.string()),\n access: docAccessValidator,\n createdAt: v.number(),\n pages: v.array(hydratedPageValidator),\n pageCount: v.number(),\n});\n\nexport const listSections = query({\n args: { access: v.optional(docAccessValidator) },\n returns: v.array(docSectionValidator),\n handler: async (ctx, args) => {\n let sections = await ctx.db\n .query(\"doc_sections\")\n .withIndex(\"by_order\")\n .collect();\n\n if (args.access) {\n sections = sections.filter((s) => s.access === args.access);\n }\n\n return sections.sort((a, b) => a.order - b.order);\n },\n});\n\nexport const getSection = query({\n args: { sectionId: v.id(\"doc_sections\") },\n returns: v.union(v.null(), docSectionValidator),\n handler: async (ctx, args) => {\n return await ctx.db.get(args.sectionId);\n },\n});\n\nexport const listPagesBySection = query({\n args: {\n sectionId: v.id(\"doc_sections\"),\n status: v.optional(docStatusValidator),\n },\n returns: v.array(docPageValidator),\n handler: async (ctx, args) => {\n let pages = await ctx.db\n .query(\"doc_pages\")\n .withIndex(\"by_sectionId\", (q) => q.eq(\"sectionId\", args.sectionId))\n .collect();\n\n if (args.status) {\n pages = pages.filter((p) => p.status === args.status);\n }\n\n return pages.sort((a, b) => a.order - b.order);\n },\n});\n\nexport const getPage = query({\n args: {\n sectionId: v.id(\"doc_sections\"),\n slug: v.string(),\n },\n returns: v.union(v.null(), docPageValidator),\n handler: async (ctx, args) => {\n const pages = await ctx.db\n .query(\"doc_pages\")\n .withIndex(\"by_sectionId\", (q) => q.eq(\"sectionId\", args.sectionId))\n .collect();\n\n return pages.find((p) => p.slug === args.slug) ?? null;\n },\n});\n\nexport const getPageById = query({\n args: { pageId: v.id(\"doc_pages\") },\n returns: v.union(v.null(), docPageValidator),\n handler: async (ctx, args) => {\n return await ctx.db.get(args.pageId);\n },\n});\n\nexport const searchPages = query({\n args: {\n query: v.string(),\n access: v.optional(docAccessValidator),\n },\n returns: v.array(docPageValidator),\n handler: async (ctx, args) => {\n const q = args.query.toLowerCase();\n if (!q) return [];\n\n let pages = await ctx.db.query(\"doc_pages\").collect();\n\n if (args.access) {\n pages = pages.filter((p) => p.access === args.access);\n }\n\n const results = pages\n .filter(\n (p) =>\n p.title.toLowerCase().includes(q) ||\n p.content.toLowerCase().includes(q) ||\n p.tags.some((t: string) => t.toLowerCase().includes(q))\n )\n .slice(0, 20);\n\n return results;\n },\n});\n\nexport const getFullTree = query({\n args: { access: v.optional(docAccessValidator) },\n returns: v.array(sectionTreeItemValidator),\n handler: async (ctx, args) => {\n let sections = await ctx.db\n .query(\"doc_sections\")\n .withIndex(\"by_order\")\n .collect();\n\n if (args.access) {\n sections = sections.filter((s) => s.access === args.access);\n }\n\n sections.sort((a, b) => a.order - b.order);\n\n const tree = [];\n for (const section of sections) {\n const pages = await ctx.db\n .query(\"doc_pages\")\n .withIndex(\"by_sectionId\", (q) => q.eq(\"sectionId\", section._id))\n .collect();\n\n const publishedPages = pages\n .filter((p) => p.status === \"published\")\n .sort((a, b) => a.order - b.order);\n\n tree.push({\n ...section,\n id: section._id,\n pages: publishedPages.map((p) => ({ ...p, id: p._id })),\n pageCount: publishedPages.length,\n });\n }\n\n return tree;\n },\n});\n\nexport const getRecentPages = query({\n args: {\n limit: v.optional(v.number()),\n access: v.optional(docAccessValidator),\n },\n returns: v.array(hydratedPageValidator),\n handler: async (ctx, args) => {\n let pages = await ctx.db.query(\"doc_pages\").collect();\n\n pages = pages.filter((p) => p.status === \"published\");\n\n if (args.access) {\n pages = pages.filter((p) => p.access === args.access);\n }\n\n pages.sort((a, b) => b.updatedAt - a.updatedAt);\n\n return pages.slice(0, args.limit ?? 10).map((p) => ({ ...p, id: p._id }));\n },\n});\n\nexport const getPageVersions = query({\n args: { slug: v.string() },\n returns: v.array(hydratedPageValidator),\n handler: async (ctx, args) => {\n const pages = await ctx.db\n .query(\"doc_pages\")\n .withIndex(\"by_slug\", (q) => q.eq(\"slug\", args.slug))\n .collect();\n\n return pages\n .filter((p) => p.version)\n .sort((a, b) => (b.version ?? \"\").localeCompare(a.version ?? \"\"))\n .map((p) => ({ ...p, id: p._id }));\n },\n});\n","/**\n * @module docsConvexSchema\n * @package @geenius/docs-convex\n * @description Declares the docs Convex schema and exports the reusable\n * tables object so consuming apps can merge it into larger schemas.\n */\n\nimport { defineSchema, defineTable } from 'convex/server'\nimport { v } from 'convex/values'\n\n/**\n * Reusable Convex tables for the docs package.\n */\nexport const docsTables = {\n doc_sections: defineTable({\n title: v.string(),\n slug: v.string(),\n parentId: v.optional(v.id('doc_sections')),\n order: v.number(),\n icon: v.optional(v.string()),\n description: v.optional(v.string()),\n access: v.union(v.literal('public'), v.literal('team'), v.literal('admin')),\n createdAt: v.number(),\n })\n .index('by_slug', ['slug'])\n .index('by_parentId', ['parentId'])\n .index('by_order', ['order']),\n\n doc_pages: defineTable({\n title: v.string(),\n slug: v.string(),\n content: v.string(),\n excerpt: v.optional(v.string()),\n sectionId: v.id('doc_sections'),\n order: v.number(),\n author: v.object({ name: v.string(), avatar: v.optional(v.string()) }),\n lastEditedBy: v.optional(\n v.object({ name: v.string(), editedAt: v.string() })\n ),\n version: v.optional(v.string()),\n access: v.union(v.literal('public'), v.literal('team'), v.literal('admin')),\n tags: v.array(v.string()),\n status: v.union(\n v.literal('draft'),\n v.literal('published'),\n v.literal('archived')\n ),\n createdAt: v.number(),\n updatedAt: v.number(),\n wordCount: v.number(),\n readingTime: v.number(),\n viewCount: v.number(),\n })\n .index('by_sectionId', ['sectionId'])\n .index('by_slug', ['slug'])\n .index('by_status', ['status'])\n .index('by_access', ['access']),\n\n doc_search_index: defineTable({\n pageId: v.id('doc_pages'),\n sectionId: v.id('doc_sections'),\n tokens: v.array(v.string()),\n updatedAt: v.number(),\n }).index('by_pageId', ['pageId']),\n}\n\n/**\n * Canonical docs schema composed from the package tables.\n */\nconst docsSchema = defineSchema(docsTables)\n\nexport default docsSchema\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/convex.config.ts","../src/_generated/server.js","../src/mutations.ts","../src/queries.ts","../src/schema.ts"],"names":["v"],"mappings":"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","file":"index.js","sourcesContent":["/**\n * @module docsConvexConfig\n * @package @geenius/docs-convex\n * @description Declares the Convex component identity for the docs package so\n * consuming apps can register the component under the canonical docs name.\n */\n\nimport { defineComponent } from 'convex/server'\n\n/**\n * Convex component definition for the docs package.\n */\nconst component = defineComponent('docs')\n\n/**\n * Default Convex component registration exported by the docs package.\n */\nexport default component\n","/**\n * THIS CODE IS AUTOMATICALLY GENERATED by @geenius/docs codegen.\n *\n * Template version: 1.34-r3\n * Generated at: 2026-04-13\n * Convex SDK: ^1.34.0\n *\n * DO NOT EDIT THIS FILE MANUALLY.\n * To regenerate, run: pnpm codegen\n * @module\n */\n\nimport {\n actionGeneric,\n httpActionGeneric,\n internalActionGeneric,\n internalMutationGeneric,\n internalQueryGeneric,\n mutationGeneric,\n queryGeneric,\n} from \"convex/server\";\n\nexport const query = queryGeneric;\nexport const internalQuery = internalQueryGeneric;\nexport const mutation = mutationGeneric;\nexport const internalMutation = internalMutationGeneric;\nexport const action = actionGeneric;\nexport const internalAction = internalActionGeneric;\nexport const httpAction = httpActionGeneric;\n","/**\n * @module docsConvexMutations\n * @package @geenius/docs-convex\n * @description Declares the typed Convex mutation surface for creating,\n * updating, reordering, publishing, and deleting docs sections and pages.\n */\n\nimport { v } from 'convex/values'\nimport { mutation } from './_generated/server.js'\n\n/**\n * Creates a docs section record.\n */\nexport const createSection = mutation({\n args: {\n title: v.string(),\n slug: v.string(),\n parentId: v.optional(v.id('doc_sections')),\n order: v.number(),\n icon: v.optional(v.string()),\n description: v.optional(v.string()),\n access: v.union(v.literal('public'), v.literal('team'), v.literal('admin')),\n },\n returns: v.id('doc_sections'),\n handler: async (ctx, args) => {\n return await ctx.db.insert('doc_sections', {\n ...args,\n createdAt: Date.now(),\n })\n },\n})\n\n/**\n * Updates mutable fields on a docs section.\n */\nexport const updateSection = mutation({\n args: {\n sectionId: v.id('doc_sections'),\n title: v.optional(v.string()),\n slug: v.optional(v.string()),\n order: v.optional(v.number()),\n icon: v.optional(v.string()),\n description: v.optional(v.string()),\n access: v.optional(\n v.union(v.literal('public'), v.literal('team'), v.literal('admin'))\n ),\n },\n returns: v.null(),\n handler: async (ctx, args) => {\n const { sectionId, ...updates } = args\n const clean = Object.fromEntries(\n Object.entries(updates).filter(([, val]) => val !== undefined)\n )\n await ctx.db.patch(sectionId, clean)\n return null\n },\n})\n\n/**\n * Deletes a docs section and its dependent pages and search index entries.\n */\nexport const deleteSection = mutation({\n args: { sectionId: v.id('doc_sections') },\n returns: v.null(),\n handler: async (ctx, args) => {\n const pages = await ctx.db\n .query('doc_pages')\n .withIndex('by_sectionId', (q) => q.eq('sectionId', args.sectionId))\n .collect()\n\n for (const page of pages) {\n const indexEntries = await ctx.db\n .query('doc_search_index')\n .withIndex('by_pageId', (q) => q.eq('pageId', page._id))\n .collect()\n for (const entry of indexEntries) {\n await ctx.db.delete(entry._id)\n }\n await ctx.db.delete(page._id)\n }\n\n await ctx.db.delete(args.sectionId)\n return null\n },\n})\n\n/**\n * Reorders sections according to the provided id sequence.\n */\nexport const reorderSections = mutation({\n args: { sectionIds: v.array(v.id('doc_sections')) },\n returns: v.null(),\n handler: async (ctx, args) => {\n for (let i = 0; i < args.sectionIds.length; i++) {\n await ctx.db.patch(args.sectionIds[i], { order: i })\n }\n return null\n },\n})\n\n/**\n * Creates a docs page and derives reading-time metadata from its content.\n */\nexport const createPage = mutation({\n args: {\n title: v.string(),\n slug: v.string(),\n content: v.string(),\n sectionId: v.id('doc_sections'),\n access: v.union(v.literal('public'), v.literal('team'), v.literal('admin')),\n tags: v.optional(v.array(v.string())),\n version: v.optional(v.string()),\n status: v.optional(\n v.union(v.literal('draft'), v.literal('published'), v.literal('archived'))\n ),\n author: v.optional(\n v.object({ name: v.string(), avatar: v.optional(v.string()) })\n ),\n excerpt: v.optional(v.string()),\n order: v.optional(v.number()),\n },\n returns: v.id('doc_pages'),\n handler: async (ctx, args) => {\n const now = Date.now()\n const stripped = args.content\n .replace(/```[\\s\\S]*?```/g, '')\n .replace(/[#*_~>|-]/g, '')\n .trim()\n const words = stripped.split(/\\s+/).filter(Boolean)\n const wordCount = words.length\n const readingTime = Math.max(1, Math.ceil(wordCount / 225))\n\n return await ctx.db.insert('doc_pages', {\n title: args.title,\n slug: args.slug,\n content: args.content,\n excerpt: args.excerpt,\n sectionId: args.sectionId,\n order: args.order ?? 0,\n author: args.author ?? { name: \"Anonymous\" },\n version: args.version,\n access: args.access,\n tags: args.tags ?? [],\n status: args.status ?? 'draft',\n createdAt: now,\n updatedAt: now,\n wordCount,\n readingTime,\n viewCount: 0,\n })\n },\n})\n\n/**\n * Updates an existing docs page and recalculates derived metadata when needed.\n */\nexport const updatePage = mutation({\n args: {\n pageId: v.id('doc_pages'),\n title: v.optional(v.string()),\n slug: v.optional(v.string()),\n content: v.optional(v.string()),\n excerpt: v.optional(v.string()),\n sectionId: v.optional(v.id('doc_sections')),\n order: v.optional(v.number()),\n access: v.optional(\n v.union(v.literal('public'), v.literal('team'), v.literal('admin'))\n ),\n tags: v.optional(v.array(v.string())),\n version: v.optional(v.string()),\n status: v.optional(\n v.union(v.literal('draft'), v.literal('published'), v.literal('archived'))\n ),\n lastEditedBy: v.optional(\n v.object({ name: v.string(), editedAt: v.string() })\n ),\n },\n returns: v.null(),\n handler: async (ctx, args) => {\n const { pageId, ...updates } = args\n const clean: Record<string, unknown> = Object.fromEntries(\n Object.entries(updates).filter(([, val]) => val !== undefined)\n )\n\n if (typeof clean.content === 'string') {\n const stripped = clean.content\n .replace(/```[\\s\\S]*?```/g, '')\n .replace(/[#*_~>|-]/g, '')\n .trim()\n const words = stripped.split(/\\s+/).filter(Boolean)\n clean.wordCount = words.length\n clean.readingTime = Math.max(1, Math.ceil(words.length / 225))\n }\n\n clean.updatedAt = Date.now()\n await ctx.db.patch(pageId, clean)\n return null\n },\n})\n\n/**\n * Publishes a docs page.\n */\nexport const publishPage = mutation({\n args: { pageId: v.id('doc_pages') },\n returns: v.null(),\n handler: async (ctx, args) => {\n await ctx.db.patch(args.pageId, {\n status: 'published',\n updatedAt: Date.now(),\n })\n return null\n },\n})\n\n/**\n * Archives a docs page.\n */\nexport const archivePage = mutation({\n args: { pageId: v.id('doc_pages') },\n returns: v.null(),\n handler: async (ctx, args) => {\n await ctx.db.patch(args.pageId, {\n status: 'archived',\n updatedAt: Date.now(),\n })\n return null\n },\n})\n\n/**\n * Deletes a docs page and its search index entries.\n */\nexport const deletePage = mutation({\n args: { pageId: v.id('doc_pages') },\n returns: v.null(),\n handler: async (ctx, args) => {\n const indexEntries = await ctx.db\n .query('doc_search_index')\n .withIndex('by_pageId', (q) => q.eq('pageId', args.pageId))\n .collect()\n for (const entry of indexEntries) {\n await ctx.db.delete(entry._id)\n }\n await ctx.db.delete(args.pageId)\n return null\n },\n})\n\n/**\n * Reorders pages within a section according to the provided id sequence.\n */\nexport const reorderPages = mutation({\n args: { pageIds: v.array(v.id('doc_pages')) },\n returns: v.null(),\n handler: async (ctx, args) => {\n for (let i = 0; i < args.pageIds.length; i++) {\n await ctx.db.patch(args.pageIds[i], { order: i })\n }\n return null\n },\n})\n\n/**\n * Increments the view count for a docs page.\n */\nexport const incrementViewCount = mutation({\n args: { pageId: v.id('doc_pages') },\n returns: v.null(),\n handler: async (ctx, args) => {\n const page = await ctx.db.get(args.pageId)\n if (page) {\n await ctx.db.patch(args.pageId, { viewCount: (page.viewCount ?? 0) + 1 })\n }\n return null\n },\n})\n\n/**\n * Moves a docs page into a new section and order slot.\n */\nexport const movePage = mutation({\n args: {\n pageId: v.id('doc_pages'),\n newSectionId: v.id('doc_sections'),\n newOrder: v.number(),\n },\n returns: v.null(),\n handler: async (ctx, args) => {\n await ctx.db.patch(args.pageId, {\n sectionId: args.newSectionId,\n order: args.newOrder,\n updatedAt: Date.now(),\n })\n return null\n },\n})\n","/**\n * @module docsConvexQueries\n * @package @geenius/docs-convex\n * @description Declares the typed Convex query surface used by the docs\n * package. The validators mirror the schema so consumers never fall back to\n * `v.any()` for docs sections, pages, or tree payloads.\n */\n\nimport { v } from \"convex/values\";\nimport { query } from \"./_generated/server.js\";\n\nconst docAccessValidator = v.union(\n v.literal(\"public\"),\n v.literal(\"team\"),\n v.literal(\"admin\"),\n);\n\nconst docStatusValidator = v.union(\n v.literal(\"draft\"),\n v.literal(\"published\"),\n v.literal(\"archived\"),\n);\n\nconst docAuthorValidator = v.object({\n name: v.string(),\n avatar: v.optional(v.string()),\n});\n\nconst docRevisionValidator = v.object({\n name: v.string(),\n editedAt: v.string(),\n});\n\nconst docSectionValidator = v.object({\n _id: v.id(\"doc_sections\"),\n _creationTime: v.number(),\n title: v.string(),\n slug: v.string(),\n parentId: v.optional(v.id(\"doc_sections\")),\n order: v.number(),\n icon: v.optional(v.string()),\n description: v.optional(v.string()),\n access: docAccessValidator,\n createdAt: v.number(),\n});\n\nconst docPageValidator = v.object({\n _id: v.id(\"doc_pages\"),\n _creationTime: v.number(),\n title: v.string(),\n slug: v.string(),\n content: v.string(),\n excerpt: v.optional(v.string()),\n sectionId: v.id(\"doc_sections\"),\n order: v.number(),\n author: docAuthorValidator,\n lastEditedBy: v.optional(docRevisionValidator),\n version: v.optional(v.string()),\n access: docAccessValidator,\n tags: v.array(v.string()),\n status: docStatusValidator,\n createdAt: v.number(),\n updatedAt: v.number(),\n wordCount: v.number(),\n readingTime: v.number(),\n viewCount: v.number(),\n});\n\nconst hydratedPageValidator = v.object({\n _id: v.id(\"doc_pages\"),\n _creationTime: v.number(),\n id: v.id(\"doc_pages\"),\n title: v.string(),\n slug: v.string(),\n content: v.string(),\n excerpt: v.optional(v.string()),\n sectionId: v.id(\"doc_sections\"),\n order: v.number(),\n author: docAuthorValidator,\n lastEditedBy: v.optional(docRevisionValidator),\n version: v.optional(v.string()),\n access: docAccessValidator,\n tags: v.array(v.string()),\n status: docStatusValidator,\n createdAt: v.number(),\n updatedAt: v.number(),\n wordCount: v.number(),\n readingTime: v.number(),\n viewCount: v.number(),\n});\n\nconst sectionTreeItemValidator = v.object({\n _id: v.id(\"doc_sections\"),\n _creationTime: v.number(),\n id: v.id(\"doc_sections\"),\n title: v.string(),\n slug: v.string(),\n parentId: v.optional(v.id(\"doc_sections\")),\n order: v.number(),\n icon: v.optional(v.string()),\n description: v.optional(v.string()),\n access: docAccessValidator,\n createdAt: v.number(),\n pages: v.array(hydratedPageValidator),\n pageCount: v.number(),\n});\n\n/**\n * Lists docs sections, optionally filtered by access level.\n *\n * @returns A sorted array of section records matching the requested access scope.\n */\nexport const listSections = query({\n args: { access: v.optional(docAccessValidator) },\n returns: v.array(docSectionValidator),\n handler: async (ctx, args) => {\n let sections = await ctx.db\n .query(\"doc_sections\")\n .withIndex(\"by_order\")\n .collect();\n\n if (args.access) {\n sections = sections.filter((s) => s.access === args.access);\n }\n\n return sections.sort((a, b) => a.order - b.order);\n },\n});\n\n/**\n * Resolves a single docs section by its identifier.\n *\n * @returns The matching section record, or `null` when the section is missing.\n */\nexport const getSection = query({\n args: { sectionId: v.id(\"doc_sections\") },\n returns: v.union(v.null(), docSectionValidator),\n handler: async (ctx, args) => {\n return await ctx.db.get(args.sectionId);\n },\n});\n\n/**\n * Lists docs pages that belong to one section.\n *\n * @returns A sorted array of pages for the requested section and optional status.\n */\nexport const listPagesBySection = query({\n args: {\n sectionId: v.id(\"doc_sections\"),\n status: v.optional(docStatusValidator),\n },\n returns: v.array(docPageValidator),\n handler: async (ctx, args) => {\n let pages = await ctx.db\n .query(\"doc_pages\")\n .withIndex(\"by_sectionId\", (q) => q.eq(\"sectionId\", args.sectionId))\n .collect();\n\n if (args.status) {\n pages = pages.filter((p) => p.status === args.status);\n }\n\n return pages.sort((a, b) => a.order - b.order);\n },\n});\n\n/**\n * Resolves a docs page by section identifier and slug.\n *\n * @returns The matching page record, or `null` when no page matches the slug.\n */\nexport const getPage = query({\n args: {\n sectionId: v.id(\"doc_sections\"),\n slug: v.string(),\n },\n returns: v.union(v.null(), docPageValidator),\n handler: async (ctx, args) => {\n const pages = await ctx.db\n .query(\"doc_pages\")\n .withIndex(\"by_sectionId\", (q) => q.eq(\"sectionId\", args.sectionId))\n .collect();\n\n return pages.find((p) => p.slug === args.slug) ?? null;\n },\n});\n\n/**\n * Resolves a docs page by its unique identifier.\n *\n * @returns The matching page record, or `null` when the page is missing.\n */\nexport const getPageById = query({\n args: { pageId: v.id(\"doc_pages\") },\n returns: v.union(v.null(), docPageValidator),\n handler: async (ctx, args) => {\n return await ctx.db.get(args.pageId);\n },\n});\n\n/**\n * Searches published docs pages by title, content, and tags.\n *\n * @returns A ranked list of matching page records limited to the first 20 hits.\n */\nexport const searchPages = query({\n args: {\n query: v.string(),\n access: v.optional(docAccessValidator),\n },\n returns: v.array(docPageValidator),\n handler: async (ctx, args) => {\n const q = args.query.toLowerCase();\n if (!q) return [];\n\n let pages = await ctx.db.query(\"doc_pages\").collect();\n\n if (args.access) {\n pages = pages.filter((p) => p.access === args.access);\n }\n\n const results = pages\n .filter(\n (p) =>\n p.title.toLowerCase().includes(q) ||\n p.content.toLowerCase().includes(q) ||\n p.tags.some((t: string) => t.toLowerCase().includes(q))\n )\n .slice(0, 20);\n\n return results;\n },\n});\n\n/**\n * Builds the full docs tree with published pages attached to each section.\n *\n * @returns A sorted section tree ready for docs navigation and page shells.\n */\nexport const getFullTree = query({\n args: { access: v.optional(docAccessValidator) },\n returns: v.array(sectionTreeItemValidator),\n handler: async (ctx, args) => {\n let sections = await ctx.db\n .query(\"doc_sections\")\n .withIndex(\"by_order\")\n .collect();\n\n if (args.access) {\n sections = sections.filter((s) => s.access === args.access);\n }\n\n sections.sort((a, b) => a.order - b.order);\n\n const tree = [];\n for (const section of sections) {\n const pages = await ctx.db\n .query(\"doc_pages\")\n .withIndex(\"by_sectionId\", (q) => q.eq(\"sectionId\", section._id))\n .collect();\n\n const publishedPages = pages\n .filter((p) => p.status === \"published\")\n .sort((a, b) => a.order - b.order);\n\n tree.push({\n ...section,\n id: section._id,\n pages: publishedPages.map((p) => ({ ...p, id: p._id })),\n pageCount: publishedPages.length,\n });\n }\n\n return tree;\n },\n});\n\n/**\n * Lists recently updated published docs pages.\n *\n * @returns A descending list of recently updated pages capped by the requested limit.\n */\nexport const getRecentPages = query({\n args: {\n limit: v.optional(v.number()),\n access: v.optional(docAccessValidator),\n },\n returns: v.array(hydratedPageValidator),\n handler: async (ctx, args) => {\n let pages = await ctx.db.query(\"doc_pages\").collect();\n\n pages = pages.filter((p) => p.status === \"published\");\n\n if (args.access) {\n pages = pages.filter((p) => p.access === args.access);\n }\n\n pages.sort((a, b) => b.updatedAt - a.updatedAt);\n\n return pages.slice(0, args.limit ?? 10).map((p) => ({ ...p, id: p._id }));\n },\n});\n\n/**\n * Lists versioned pages that share the same slug.\n *\n * @returns A descending array of versioned page records for the requested slug.\n */\nexport const getPageVersions = query({\n args: { slug: v.string() },\n returns: v.array(hydratedPageValidator),\n handler: async (ctx, args) => {\n const pages = await ctx.db\n .query(\"doc_pages\")\n .withIndex(\"by_slug\", (q) => q.eq(\"slug\", args.slug))\n .collect();\n\n return pages\n .filter((p) => p.version)\n .sort((a, b) => (b.version ?? \"\").localeCompare(a.version ?? \"\"))\n .map((p) => ({ ...p, id: p._id }));\n },\n});\n","/**\n * @module docsConvexSchema\n * @package @geenius/docs-convex\n * @description Declares the docs Convex schema and exports the reusable\n * tables object so consuming apps can merge it into larger schemas.\n */\n\nimport { defineSchema, defineTable } from 'convex/server'\nimport { v } from 'convex/values'\n\n/**\n * Reusable Convex tables for the docs package.\n */\nexport const docsTables = {\n doc_sections: defineTable({\n title: v.string(),\n slug: v.string(),\n parentId: v.optional(v.id('doc_sections')),\n order: v.number(),\n icon: v.optional(v.string()),\n description: v.optional(v.string()),\n access: v.union(v.literal('public'), v.literal('team'), v.literal('admin')),\n createdAt: v.number(),\n })\n .index('by_slug', ['slug'])\n .index('by_parentId', ['parentId'])\n .index('by_order', ['order']),\n\n doc_pages: defineTable({\n title: v.string(),\n slug: v.string(),\n content: v.string(),\n excerpt: v.optional(v.string()),\n sectionId: v.id('doc_sections'),\n order: v.number(),\n author: v.object({ name: v.string(), avatar: v.optional(v.string()) }),\n lastEditedBy: v.optional(\n v.object({ name: v.string(), editedAt: v.string() })\n ),\n version: v.optional(v.string()),\n access: v.union(v.literal('public'), v.literal('team'), v.literal('admin')),\n tags: v.array(v.string()),\n status: v.union(\n v.literal('draft'),\n v.literal('published'),\n v.literal('archived')\n ),\n createdAt: v.number(),\n updatedAt: v.number(),\n wordCount: v.number(),\n readingTime: v.number(),\n viewCount: v.number(),\n })\n .index('by_sectionId', ['sectionId'])\n .index('by_slug', ['slug'])\n .index('by_status', ['status'])\n .index('by_access', ['access']),\n\n doc_search_index: defineTable({\n pageId: v.id('doc_pages'),\n sectionId: v.id('doc_sections'),\n tokens: v.array(v.string()),\n updatedAt: v.number(),\n }).index('by_pageId', ['pageId']),\n}\n\n/**\n * Canonical docs schema composed from the package tables.\n */\nconst docsSchema = defineSchema(docsTables)\n\n/**\n * Default Convex schema exported for consumers that mount the full docs tables.\n */\nexport default docsSchema\n"]}
|