@geenius/docs 0.4.1 → 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 CHANGED
@@ -1,5 +1,11 @@
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
+
3
9
  ## 0.4.1
4
10
 
5
11
  ### Patch Changes
package/README.md CHANGED
@@ -1,6 +1,6 @@
1
1
  # `@geenius/docs`
2
2
 
3
- Provider-driven documentation primitives for Geenius products, including navigation, search, MDX rendering, and admin-oriented docs tooling.
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
- ## Supported Imports
11
+ Add the framework peers you actually consume:
12
12
 
13
- - `@geenius/docs` or `@geenius/docs/shared` for shared page, section, and search types plus provider contracts
14
- - `@geenius/docs/react` for React hooks, components, and page-level shells
15
- - `@geenius/docs/react-css` for the React CSS-styled surface
16
- - `@geenius/docs/solidjs` for SolidJS primitives, components, and pages
17
- - `@geenius/docs/solidjs-css` for the SolidJS CSS-styled surface
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
- ## Quick Start
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 page: DocsPage = {
27
- id: 'intro',
28
- title: 'Introduction',
29
- slug: 'introduction',
30
- content: '# Introduction\n\nWelcome to the docs.',
31
- sectionId: 'getting-started',
32
- order: 1,
33
- author: { name: 'Antigravity HQ' },
34
- access: 'public',
35
- tags: ['overview'],
36
- status: 'published',
37
- createdAt: '2026-04-12T09:00:00.000Z',
38
- updatedAt: '2026-04-12T09:00:00.000Z',
39
- wordCount: 120,
40
- readingTime: 1,
41
- viewCount: 42,
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 IntroDoc() {
45
- return <DocPage page={page} />
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
- ## Local Development
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
- - `pnpm storybook:react` runs the React storybook app
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.4.1",
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",
@@ -38,7 +38,7 @@
38
38
  "react-markdown": "^10.1.0",
39
39
  "remark-gfm": "^4.0.1",
40
40
  "solid-markdown": "^2.1.1",
41
- "@geenius/motion": "0.2.0",
41
+ "@geenius/motion": "0.4.0",
42
42
  "@geenius/tools": "0.3.0"
43
43
  },
44
44
  "peerDependencies": {
@@ -63,7 +63,7 @@
63
63
  },
64
64
  "devDependencies": {
65
65
  "@arethetypeswrong/cli": "^0.18.2",
66
- "@biomejs/biome": "^2.0.6",
66
+ "@biomejs/biome": "^2.4.11",
67
67
  "@changesets/cli": "^2.30.0",
68
68
  "publint": "^0.3.18",
69
69
  "typescript": "~6.0.2",
@@ -81,6 +81,10 @@
81
81
  "types": "./packages/shared/dist/index.d.ts",
82
82
  "import": "./packages/shared/dist/index.js"
83
83
  },
84
+ "./shared/providers": {
85
+ "types": "./packages/shared/dist/providers.d.ts",
86
+ "import": "./packages/shared/dist/providers.js"
87
+ },
84
88
  "./react": {
85
89
  "types": "./packages/react/dist/index.d.ts",
86
90
  "import": "./packages/react/dist/index.js"
@@ -107,6 +111,9 @@
107
111
  "shared": [
108
112
  "./packages/shared/dist/index.d.ts"
109
113
  ],
114
+ "shared/providers": [
115
+ "./packages/shared/dist/providers.d.ts"
116
+ ],
110
117
  "react": [
111
118
  "./packages/react/dist/index.d.ts"
112
119
  ],
@@ -132,7 +139,7 @@
132
139
  "scripts": {
133
140
  "changeset": "changeset",
134
141
  "build": "pnpm --filter ./packages/shared build && pnpm -r --filter './packages/*' --filter '!./packages/shared' build",
135
- "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",
136
143
  "type-check": "pnpm --filter ./packages/shared type-check && pnpm -r --filter './packages/*' --filter '!./packages/shared' type-check",
137
144
  "test:unit": "pnpm -r --filter './packages/*' test && vitest run __tests__/parity.test.ts",
138
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":";;;;AAYA,IAAM,SAAA,GAAY,gBAAgB,MAAM,CAAA;AAExC,IAAO,qBAAA,GAAQ;ACSR,IAAM,KAAA,GAAQ,YAAA;AAEd,IAAM,QAAA,GAAW,eAAA;;;ACZjB,IAAM,gBAAgB,QAAA,CAAS;AAAA,EACpC,IAAA,EAAM;AAAA,IACJ,KAAA,EAAO,EAAE,MAAA,EAAO;AAAA,IAChB,IAAA,EAAM,EAAE,MAAA,EAAO;AAAA,IACf,UAAU,CAAA,CAAE,QAAA,CAAS,CAAA,CAAE,EAAA,CAAG,cAAc,CAAC,CAAA;AAAA,IACzC,KAAA,EAAO,EAAE,MAAA,EAAO;AAAA,IAChB,IAAA,EAAM,CAAA,CAAE,QAAA,CAAS,CAAA,CAAE,QAAQ,CAAA;AAAA,IAC3B,WAAA,EAAa,CAAA,CAAE,QAAA,CAAS,CAAA,CAAE,QAAQ,CAAA;AAAA,IAClC,MAAA,EAAQ,CAAA,CAAE,KAAA,CAAM,CAAA,CAAE,QAAQ,QAAQ,CAAA,EAAG,CAAA,CAAE,OAAA,CAAQ,MAAM,CAAA,EAAG,CAAA,CAAE,OAAA,CAAQ,OAAO,CAAC;AAAA,GAC5E;AAAA,EACA,OAAA,EAAS,CAAA,CAAE,EAAA,CAAG,cAAc,CAAA;AAAA,EAC5B,OAAA,EAAS,OAAO,GAAA,EAAK,IAAA,KAAS;AAC5B,IAAA,OAAO,MAAM,GAAA,CAAI,EAAA,CAAG,MAAA,CAAO,cAAA,EAAgB;AAAA,MACzC,GAAG,IAAA;AAAA,MACH,SAAA,EAAW,KAAK,GAAA;AAAI,KACrB,CAAA;AAAA,EACH;AACF,CAAC;AAKM,IAAM,gBAAgB,QAAA,CAAS;AAAA,EACpC,IAAA,EAAM;AAAA,IACJ,SAAA,EAAW,CAAA,CAAE,EAAA,CAAG,cAAc,CAAA;AAAA,IAC9B,KAAA,EAAO,CAAA,CAAE,QAAA,CAAS,CAAA,CAAE,QAAQ,CAAA;AAAA,IAC5B,IAAA,EAAM,CAAA,CAAE,QAAA,CAAS,CAAA,CAAE,QAAQ,CAAA;AAAA,IAC3B,KAAA,EAAO,CAAA,CAAE,QAAA,CAAS,CAAA,CAAE,QAAQ,CAAA;AAAA,IAC5B,IAAA,EAAM,CAAA,CAAE,QAAA,CAAS,CAAA,CAAE,QAAQ,CAAA;AAAA,IAC3B,WAAA,EAAa,CAAA,CAAE,QAAA,CAAS,CAAA,CAAE,QAAQ,CAAA;AAAA,IAClC,QAAQ,CAAA,CAAE,QAAA;AAAA,MACR,CAAA,CAAE,KAAA,CAAM,CAAA,CAAE,OAAA,CAAQ,QAAQ,CAAA,EAAG,CAAA,CAAE,OAAA,CAAQ,MAAM,CAAA,EAAG,CAAA,CAAE,OAAA,CAAQ,OAAO,CAAC;AAAA;AACpE,GACF;AAAA,EACA,OAAA,EAAS,EAAE,IAAA,EAAK;AAAA,EAChB,OAAA,EAAS,OAAO,GAAA,EAAK,IAAA,KAAS;AAC5B,IAAA,MAAM,EAAE,SAAA,EAAW,GAAG,OAAA,EAAQ,GAAI,IAAA;AAClC,IAAA,MAAM,QAAQ,MAAA,CAAO,WAAA;AAAA,MACnB,MAAA,CAAO,OAAA,CAAQ,OAAO,CAAA,CAAE,MAAA,CAAO,CAAC,GAAG,GAAG,CAAA,KAAM,GAAA,KAAQ,MAAS;AAAA,KAC/D;AACA,IAAA,MAAM,GAAA,CAAI,EAAA,CAAG,KAAA,CAAM,SAAA,EAAW,KAAK,CAAA;AACnC,IAAA,OAAO,IAAA;AAAA,EACT;AACF,CAAC;AAKM,IAAM,gBAAgB,QAAA,CAAS;AAAA,EACpC,MAAM,EAAE,SAAA,EAAW,CAAA,CAAE,EAAA,CAAG,cAAc,CAAA,EAAE;AAAA,EACxC,OAAA,EAAS,EAAE,IAAA,EAAK;AAAA,EAChB,OAAA,EAAS,OAAO,GAAA,EAAK,IAAA,KAAS;AAC5B,IAAA,MAAM,QAAQ,MAAM,GAAA,CAAI,GACrB,KAAA,CAAM,WAAW,EACjB,SAAA,CAAU,cAAA,EAAgB,CAAC,CAAA,KAAM,EAAE,EAAA,CAAG,WAAA,EAAa,KAAK,SAAS,CAAC,EAClE,OAAA,EAAQ;AAEX,IAAA,KAAA,MAAW,QAAQ,KAAA,EAAO;AACxB,MAAA,MAAM,eAAe,MAAM,GAAA,CAAI,GAC5B,KAAA,CAAM,kBAAkB,EACxB,SAAA,CAAU,WAAA,EAAa,CAAC,CAAA,KAAM,EAAE,EAAA,CAAG,QAAA,EAAU,KAAK,GAAG,CAAC,EACtD,OAAA,EAAQ;AACX,MAAA,KAAA,MAAW,SAAS,YAAA,EAAc;AAChC,QAAA,MAAM,GAAA,CAAI,EAAA,CAAG,MAAA,CAAO,KAAA,CAAM,GAAG,CAAA;AAAA,MAC/B;AACA,MAAA,MAAM,GAAA,CAAI,EAAA,CAAG,MAAA,CAAO,IAAA,CAAK,GAAG,CAAA;AAAA,IAC9B;AAEA,IAAA,MAAM,GAAA,CAAI,EAAA,CAAG,MAAA,CAAO,IAAA,CAAK,SAAS,CAAA;AAClC,IAAA,OAAO,IAAA;AAAA,EACT;AACF,CAAC;AAKM,IAAM,kBAAkB,QAAA,CAAS;AAAA,EACtC,IAAA,EAAM,EAAE,UAAA,EAAY,CAAA,CAAE,MAAM,CAAA,CAAE,EAAA,CAAG,cAAc,CAAC,CAAA,EAAE;AAAA,EAClD,OAAA,EAAS,EAAE,IAAA,EAAK;AAAA,EAChB,OAAA,EAAS,OAAO,GAAA,EAAK,IAAA,KAAS;AAC5B,IAAA,KAAA,IAAS,IAAI,CAAA,EAAG,CAAA,GAAI,IAAA,CAAK,UAAA,CAAW,QAAQ,CAAA,EAAA,EAAK;AAC/C,MAAA,MAAM,GAAA,CAAI,EAAA,CAAG,KAAA,CAAM,IAAA,CAAK,UAAA,CAAW,CAAC,CAAA,EAAG,EAAE,KAAA,EAAO,CAAA,EAAG,CAAA;AAAA,IACrD;AACA,IAAA,OAAO,IAAA;AAAA,EACT;AACF,CAAC;AAKM,IAAM,aAAa,QAAA,CAAS;AAAA,EACjC,IAAA,EAAM;AAAA,IACJ,KAAA,EAAO,EAAE,MAAA,EAAO;AAAA,IAChB,IAAA,EAAM,EAAE,MAAA,EAAO;AAAA,IACf,OAAA,EAAS,EAAE,MAAA,EAAO;AAAA,IAClB,SAAA,EAAW,CAAA,CAAE,EAAA,CAAG,cAAc,CAAA;AAAA,IAC9B,MAAA,EAAQ,CAAA,CAAE,KAAA,CAAM,CAAA,CAAE,QAAQ,QAAQ,CAAA,EAAG,CAAA,CAAE,OAAA,CAAQ,MAAM,CAAA,EAAG,CAAA,CAAE,OAAA,CAAQ,OAAO,CAAC,CAAA;AAAA,IAC1E,IAAA,EAAM,EAAE,QAAA,CAAS,CAAA,CAAE,MAAM,CAAA,CAAE,MAAA,EAAQ,CAAC,CAAA;AAAA,IACpC,OAAA,EAAS,CAAA,CAAE,QAAA,CAAS,CAAA,CAAE,QAAQ,CAAA;AAAA,IAC9B,QAAQ,CAAA,CAAE,QAAA;AAAA,MACR,CAAA,CAAE,KAAA,CAAM,CAAA,CAAE,OAAA,CAAQ,OAAO,CAAA,EAAG,CAAA,CAAE,OAAA,CAAQ,WAAW,CAAA,EAAG,CAAA,CAAE,OAAA,CAAQ,UAAU,CAAC;AAAA,KAC3E;AAAA,IACA,QAAQ,CAAA,CAAE,QAAA;AAAA,MACR,CAAA,CAAE,MAAA,CAAO,EAAE,IAAA,EAAM,EAAE,MAAA,EAAO,EAAG,MAAA,EAAQ,CAAA,CAAE,QAAA,CAAS,CAAA,CAAE,MAAA,EAAQ,GAAG;AAAA,KAC/D;AAAA,IACA,OAAA,EAAS,CAAA,CAAE,QAAA,CAAS,CAAA,CAAE,QAAQ,CAAA;AAAA,IAC9B,KAAA,EAAO,CAAA,CAAE,QAAA,CAAS,CAAA,CAAE,QAAQ;AAAA,GAC9B;AAAA,EACA,OAAA,EAAS,CAAA,CAAE,EAAA,CAAG,WAAW,CAAA;AAAA,EACzB,OAAA,EAAS,OAAO,GAAA,EAAK,IAAA,KAAS;AAC5B,IAAA,MAAM,GAAA,GAAM,KAAK,GAAA,EAAI;AACrB,IAAA,MAAM,QAAA,GAAW,IAAA,CAAK,OAAA,CACnB,OAAA,CAAQ,iBAAA,EAAmB,EAAE,CAAA,CAC7B,OAAA,CAAQ,YAAA,EAAc,EAAE,CAAA,CACxB,IAAA,EAAK;AACR,IAAA,MAAM,QAAQ,QAAA,CAAS,KAAA,CAAM,KAAK,CAAA,CAAE,OAAO,OAAO,CAAA;AAClD,IAAA,MAAM,YAAY,KAAA,CAAM,MAAA;AACxB,IAAA,MAAM,WAAA,GAAc,KAAK,GAAA,CAAI,CAAA,EAAG,KAAK,IAAA,CAAK,SAAA,GAAY,GAAG,CAAC,CAAA;AAE1D,IAAA,OAAO,MAAM,GAAA,CAAI,EAAA,CAAG,MAAA,CAAO,WAAA,EAAa;AAAA,MACtC,OAAO,IAAA,CAAK,KAAA;AAAA,MACZ,MAAM,IAAA,CAAK,IAAA;AAAA,MACX,SAAS,IAAA,CAAK,OAAA;AAAA,MACd,SAAS,IAAA,CAAK,OAAA;AAAA,MACd,WAAW,IAAA,CAAK,SAAA;AAAA,MAChB,KAAA,EAAO,KAAK,KAAA,IAAS,CAAA;AAAA,MACrB,MAAA,EAAQ,IAAA,CAAK,MAAA,IAAU,EAAE,MAAM,WAAA,EAAY;AAAA,MAC3C,SAAS,IAAA,CAAK,OAAA;AAAA,MACd,QAAQ,IAAA,CAAK,MAAA;AAAA,MACb,IAAA,EAAM,IAAA,CAAK,IAAA,IAAQ,EAAC;AAAA,MACpB,MAAA,EAAQ,KAAK,MAAA,IAAU,OAAA;AAAA,MACvB,SAAA,EAAW,GAAA;AAAA,MACX,SAAA,EAAW,GAAA;AAAA,MACX,SAAA;AAAA,MACA,WAAA;AAAA,MACA,SAAA,EAAW;AAAA,KACZ,CAAA;AAAA,EACH;AACF,CAAC;AAKM,IAAM,aAAa,QAAA,CAAS;AAAA,EACjC,IAAA,EAAM;AAAA,IACJ,MAAA,EAAQ,CAAA,CAAE,EAAA,CAAG,WAAW,CAAA;AAAA,IACxB,KAAA,EAAO,CAAA,CAAE,QAAA,CAAS,CAAA,CAAE,QAAQ,CAAA;AAAA,IAC5B,IAAA,EAAM,CAAA,CAAE,QAAA,CAAS,CAAA,CAAE,QAAQ,CAAA;AAAA,IAC3B,OAAA,EAAS,CAAA,CAAE,QAAA,CAAS,CAAA,CAAE,QAAQ,CAAA;AAAA,IAC9B,OAAA,EAAS,CAAA,CAAE,QAAA,CAAS,CAAA,CAAE,QAAQ,CAAA;AAAA,IAC9B,WAAW,CAAA,CAAE,QAAA,CAAS,CAAA,CAAE,EAAA,CAAG,cAAc,CAAC,CAAA;AAAA,IAC1C,KAAA,EAAO,CAAA,CAAE,QAAA,CAAS,CAAA,CAAE,QAAQ,CAAA;AAAA,IAC5B,QAAQ,CAAA,CAAE,QAAA;AAAA,MACR,CAAA,CAAE,KAAA,CAAM,CAAA,CAAE,OAAA,CAAQ,QAAQ,CAAA,EAAG,CAAA,CAAE,OAAA,CAAQ,MAAM,CAAA,EAAG,CAAA,CAAE,OAAA,CAAQ,OAAO,CAAC;AAAA,KACpE;AAAA,IACA,IAAA,EAAM,EAAE,QAAA,CAAS,CAAA,CAAE,MAAM,CAAA,CAAE,MAAA,EAAQ,CAAC,CAAA;AAAA,IACpC,OAAA,EAAS,CAAA,CAAE,QAAA,CAAS,CAAA,CAAE,QAAQ,CAAA;AAAA,IAC9B,QAAQ,CAAA,CAAE,QAAA;AAAA,MACR,CAAA,CAAE,KAAA,CAAM,CAAA,CAAE,OAAA,CAAQ,OAAO,CAAA,EAAG,CAAA,CAAE,OAAA,CAAQ,WAAW,CAAA,EAAG,CAAA,CAAE,OAAA,CAAQ,UAAU,CAAC;AAAA,KAC3E;AAAA,IACA,cAAc,CAAA,CAAE,QAAA;AAAA,MACd,CAAA,CAAE,MAAA,CAAO,EAAE,IAAA,EAAM,CAAA,CAAE,MAAA,EAAO,EAAG,QAAA,EAAU,CAAA,CAAE,MAAA,EAAO,EAAG;AAAA;AACrD,GACF;AAAA,EACA,OAAA,EAAS,EAAE,IAAA,EAAK;AAAA,EAChB,OAAA,EAAS,OAAO,GAAA,EAAK,IAAA,KAAS;AAC5B,IAAA,MAAM,EAAE,MAAA,EAAQ,GAAG,OAAA,EAAQ,GAAI,IAAA;AAC/B,IAAA,MAAM,QAAiC,MAAA,CAAO,WAAA;AAAA,MAC5C,MAAA,CAAO,OAAA,CAAQ,OAAO,CAAA,CAAE,MAAA,CAAO,CAAC,GAAG,GAAG,CAAA,KAAM,GAAA,KAAQ,MAAS;AAAA,KAC/D;AAEA,IAAA,IAAI,OAAO,KAAA,CAAM,OAAA,KAAY,QAAA,EAAU;AACrC,MAAA,MAAM,QAAA,GAAW,KAAA,CAAM,OAAA,CACpB,OAAA,CAAQ,iBAAA,EAAmB,EAAE,CAAA,CAC7B,OAAA,CAAQ,YAAA,EAAc,EAAE,CAAA,CACxB,IAAA,EAAK;AACR,MAAA,MAAM,QAAQ,QAAA,CAAS,KAAA,CAAM,KAAK,CAAA,CAAE,OAAO,OAAO,CAAA;AAClD,MAAA,KAAA,CAAM,YAAY,KAAA,CAAM,MAAA;AACxB,MAAA,KAAA,CAAM,WAAA,GAAc,KAAK,GAAA,CAAI,CAAA,EAAG,KAAK,IAAA,CAAK,KAAA,CAAM,MAAA,GAAS,GAAG,CAAC,CAAA;AAAA,IAC/D;AAEA,IAAA,KAAA,CAAM,SAAA,GAAY,KAAK,GAAA,EAAI;AAC3B,IAAA,MAAM,GAAA,CAAI,EAAA,CAAG,KAAA,CAAM,MAAA,EAAQ,KAAK,CAAA;AAChC,IAAA,OAAO,IAAA;AAAA,EACT;AACF,CAAC;AAKM,IAAM,cAAc,QAAA,CAAS;AAAA,EAClC,MAAM,EAAE,MAAA,EAAQ,CAAA,CAAE,EAAA,CAAG,WAAW,CAAA,EAAE;AAAA,EAClC,OAAA,EAAS,EAAE,IAAA,EAAK;AAAA,EAChB,OAAA,EAAS,OAAO,GAAA,EAAK,IAAA,KAAS;AAC5B,IAAA,MAAM,GAAA,CAAI,EAAA,CAAG,KAAA,CAAM,IAAA,CAAK,MAAA,EAAQ;AAAA,MAC9B,MAAA,EAAQ,WAAA;AAAA,MACR,SAAA,EAAW,KAAK,GAAA;AAAI,KACrB,CAAA;AACD,IAAA,OAAO,IAAA;AAAA,EACT;AACF,CAAC;AAKM,IAAM,cAAc,QAAA,CAAS;AAAA,EAClC,MAAM,EAAE,MAAA,EAAQ,CAAA,CAAE,EAAA,CAAG,WAAW,CAAA,EAAE;AAAA,EAClC,OAAA,EAAS,EAAE,IAAA,EAAK;AAAA,EAChB,OAAA,EAAS,OAAO,GAAA,EAAK,IAAA,KAAS;AAC5B,IAAA,MAAM,GAAA,CAAI,EAAA,CAAG,KAAA,CAAM,IAAA,CAAK,MAAA,EAAQ;AAAA,MAC9B,MAAA,EAAQ,UAAA;AAAA,MACR,SAAA,EAAW,KAAK,GAAA;AAAI,KACrB,CAAA;AACD,IAAA,OAAO,IAAA;AAAA,EACT;AACF,CAAC;AAKM,IAAM,aAAa,QAAA,CAAS;AAAA,EACjC,MAAM,EAAE,MAAA,EAAQ,CAAA,CAAE,EAAA,CAAG,WAAW,CAAA,EAAE;AAAA,EAClC,OAAA,EAAS,EAAE,IAAA,EAAK;AAAA,EAChB,OAAA,EAAS,OAAO,GAAA,EAAK,IAAA,KAAS;AAC5B,IAAA,MAAM,eAAe,MAAM,GAAA,CAAI,GAC5B,KAAA,CAAM,kBAAkB,EACxB,SAAA,CAAU,WAAA,EAAa,CAAC,CAAA,KAAM,EAAE,EAAA,CAAG,QAAA,EAAU,KAAK,MAAM,CAAC,EACzD,OAAA,EAAQ;AACX,IAAA,KAAA,MAAW,SAAS,YAAA,EAAc;AAChC,MAAA,MAAM,GAAA,CAAI,EAAA,CAAG,MAAA,CAAO,KAAA,CAAM,GAAG,CAAA;AAAA,IAC/B;AACA,IAAA,MAAM,GAAA,CAAI,EAAA,CAAG,MAAA,CAAO,IAAA,CAAK,MAAM,CAAA;AAC/B,IAAA,OAAO,IAAA;AAAA,EACT;AACF,CAAC;AAKM,IAAM,eAAe,QAAA,CAAS;AAAA,EACnC,IAAA,EAAM,EAAE,OAAA,EAAS,CAAA,CAAE,MAAM,CAAA,CAAE,EAAA,CAAG,WAAW,CAAC,CAAA,EAAE;AAAA,EAC5C,OAAA,EAAS,EAAE,IAAA,EAAK;AAAA,EAChB,OAAA,EAAS,OAAO,GAAA,EAAK,IAAA,KAAS;AAC5B,IAAA,KAAA,IAAS,IAAI,CAAA,EAAG,CAAA,GAAI,IAAA,CAAK,OAAA,CAAQ,QAAQ,CAAA,EAAA,EAAK;AAC5C,MAAA,MAAM,GAAA,CAAI,EAAA,CAAG,KAAA,CAAM,IAAA,CAAK,OAAA,CAAQ,CAAC,CAAA,EAAG,EAAE,KAAA,EAAO,CAAA,EAAG,CAAA;AAAA,IAClD;AACA,IAAA,OAAO,IAAA;AAAA,EACT;AACF,CAAC;AAKM,IAAM,qBAAqB,QAAA,CAAS;AAAA,EACzC,MAAM,EAAE,MAAA,EAAQ,CAAA,CAAE,EAAA,CAAG,WAAW,CAAA,EAAE;AAAA,EAClC,OAAA,EAAS,EAAE,IAAA,EAAK;AAAA,EAChB,OAAA,EAAS,OAAO,GAAA,EAAK,IAAA,KAAS;AAC5B,IAAA,MAAM,OAAO,MAAM,GAAA,CAAI,EAAA,CAAG,GAAA,CAAI,KAAK,MAAM,CAAA;AACzC,IAAA,IAAI,IAAA,EAAM;AACR,MAAA,MAAM,GAAA,CAAI,EAAA,CAAG,KAAA,CAAM,IAAA,CAAK,MAAA,EAAQ,EAAE,SAAA,EAAA,CAAY,IAAA,CAAK,SAAA,IAAa,CAAA,IAAK,CAAA,EAAG,CAAA;AAAA,IAC1E;AACA,IAAA,OAAO,IAAA;AAAA,EACT;AACF,CAAC;AAKM,IAAM,WAAW,QAAA,CAAS;AAAA,EAC/B,IAAA,EAAM;AAAA,IACJ,MAAA,EAAQ,CAAA,CAAE,EAAA,CAAG,WAAW,CAAA;AAAA,IACxB,YAAA,EAAc,CAAA,CAAE,EAAA,CAAG,cAAc,CAAA;AAAA,IACjC,QAAA,EAAU,EAAE,MAAA;AAAO,GACrB;AAAA,EACA,OAAA,EAAS,EAAE,IAAA,EAAK;AAAA,EAChB,OAAA,EAAS,OAAO,GAAA,EAAK,IAAA,KAAS;AAC5B,IAAA,MAAM,GAAA,CAAI,EAAA,CAAG,KAAA,CAAM,IAAA,CAAK,MAAA,EAAQ;AAAA,MAC9B,WAAW,IAAA,CAAK,YAAA;AAAA,MAChB,OAAO,IAAA,CAAK,QAAA;AAAA,MACZ,SAAA,EAAW,KAAK,GAAA;AAAI,KACrB,CAAA;AACD,IAAA,OAAO,IAAA;AAAA,EACT;AACF,CAAC;AC7RD,IAAM,qBAAqBA,CAAAA,CAAE,KAAA;AAAA,EAC3BA,CAAAA,CAAE,QAAQ,QAAQ,CAAA;AAAA,EAClBA,CAAAA,CAAE,QAAQ,MAAM,CAAA;AAAA,EAChBA,CAAAA,CAAE,QAAQ,OAAO;AACnB,CAAA;AAEA,IAAM,qBAAqBA,CAAAA,CAAE,KAAA;AAAA,EAC3BA,CAAAA,CAAE,QAAQ,OAAO,CAAA;AAAA,EACjBA,CAAAA,CAAE,QAAQ,WAAW,CAAA;AAAA,EACrBA,CAAAA,CAAE,QAAQ,UAAU;AACtB,CAAA;AAEA,IAAM,kBAAA,GAAqBA,EAAE,MAAA,CAAO;AAAA,EAClC,IAAA,EAAMA,EAAE,MAAA,EAAO;AAAA,EACf,MAAA,EAAQA,CAAAA,CAAE,QAAA,CAASA,CAAAA,CAAE,QAAQ;AAC/B,CAAC,CAAA;AAED,IAAM,oBAAA,GAAuBA,EAAE,MAAA,CAAO;AAAA,EACpC,IAAA,EAAMA,EAAE,MAAA,EAAO;AAAA,EACf,QAAA,EAAUA,EAAE,MAAA;AACd,CAAC,CAAA;AAED,IAAM,mBAAA,GAAsBA,EAAE,MAAA,CAAO;AAAA,EACnC,GAAA,EAAKA,CAAAA,CAAE,EAAA,CAAG,cAAc,CAAA;AAAA,EACxB,aAAA,EAAeA,EAAE,MAAA,EAAO;AAAA,EACxB,KAAA,EAAOA,EAAE,MAAA,EAAO;AAAA,EAChB,IAAA,EAAMA,EAAE,MAAA,EAAO;AAAA,EACf,UAAUA,CAAAA,CAAE,QAAA,CAASA,CAAAA,CAAE,EAAA,CAAG,cAAc,CAAC,CAAA;AAAA,EACzC,KAAA,EAAOA,EAAE,MAAA,EAAO;AAAA,EAChB,IAAA,EAAMA,CAAAA,CAAE,QAAA,CAASA,CAAAA,CAAE,QAAQ,CAAA;AAAA,EAC3B,WAAA,EAAaA,CAAAA,CAAE,QAAA,CAASA,CAAAA,CAAE,QAAQ,CAAA;AAAA,EAClC,MAAA,EAAQ,kBAAA;AAAA,EACR,SAAA,EAAWA,EAAE,MAAA;AACf,CAAC,CAAA;AAED,IAAM,gBAAA,GAAmBA,EAAE,MAAA,CAAO;AAAA,EAChC,GAAA,EAAKA,CAAAA,CAAE,EAAA,CAAG,WAAW,CAAA;AAAA,EACrB,aAAA,EAAeA,EAAE,MAAA,EAAO;AAAA,EACxB,KAAA,EAAOA,EAAE,MAAA,EAAO;AAAA,EAChB,IAAA,EAAMA,EAAE,MAAA,EAAO;AAAA,EACf,OAAA,EAASA,EAAE,MAAA,EAAO;AAAA,EAClB,OAAA,EAASA,CAAAA,CAAE,QAAA,CAASA,CAAAA,CAAE,QAAQ,CAAA;AAAA,EAC9B,SAAA,EAAWA,CAAAA,CAAE,EAAA,CAAG,cAAc,CAAA;AAAA,EAC9B,KAAA,EAAOA,EAAE,MAAA,EAAO;AAAA,EAChB,MAAA,EAAQ,kBAAA;AAAA,EACR,YAAA,EAAcA,CAAAA,CAAE,QAAA,CAAS,oBAAoB,CAAA;AAAA,EAC7C,OAAA,EAASA,CAAAA,CAAE,QAAA,CAASA,CAAAA,CAAE,QAAQ,CAAA;AAAA,EAC9B,MAAA,EAAQ,kBAAA;AAAA,EACR,IAAA,EAAMA,CAAAA,CAAE,KAAA,CAAMA,CAAAA,CAAE,QAAQ,CAAA;AAAA,EACxB,MAAA,EAAQ,kBAAA;AAAA,EACR,SAAA,EAAWA,EAAE,MAAA,EAAO;AAAA,EACpB,SAAA,EAAWA,EAAE,MAAA,EAAO;AAAA,EACpB,SAAA,EAAWA,EAAE,MAAA,EAAO;AAAA,EACpB,WAAA,EAAaA,EAAE,MAAA,EAAO;AAAA,EACtB,SAAA,EAAWA,EAAE,MAAA;AACf,CAAC,CAAA;AAED,IAAM,qBAAA,GAAwBA,EAAE,MAAA,CAAO;AAAA,EACrC,GAAA,EAAKA,CAAAA,CAAE,EAAA,CAAG,WAAW,CAAA;AAAA,EACrB,aAAA,EAAeA,EAAE,MAAA,EAAO;AAAA,EACxB,EAAA,EAAIA,CAAAA,CAAE,EAAA,CAAG,WAAW,CAAA;AAAA,EACpB,KAAA,EAAOA,EAAE,MAAA,EAAO;AAAA,EAChB,IAAA,EAAMA,EAAE,MAAA,EAAO;AAAA,EACf,OAAA,EAASA,EAAE,MAAA,EAAO;AAAA,EAClB,OAAA,EAASA,CAAAA,CAAE,QAAA,CAASA,CAAAA,CAAE,QAAQ,CAAA;AAAA,EAC9B,SAAA,EAAWA,CAAAA,CAAE,EAAA,CAAG,cAAc,CAAA;AAAA,EAC9B,KAAA,EAAOA,EAAE,MAAA,EAAO;AAAA,EAChB,MAAA,EAAQ,kBAAA;AAAA,EACR,YAAA,EAAcA,CAAAA,CAAE,QAAA,CAAS,oBAAoB,CAAA;AAAA,EAC7C,OAAA,EAASA,CAAAA,CAAE,QAAA,CAASA,CAAAA,CAAE,QAAQ,CAAA;AAAA,EAC9B,MAAA,EAAQ,kBAAA;AAAA,EACR,IAAA,EAAMA,CAAAA,CAAE,KAAA,CAAMA,CAAAA,CAAE,QAAQ,CAAA;AAAA,EACxB,MAAA,EAAQ,kBAAA;AAAA,EACR,SAAA,EAAWA,EAAE,MAAA,EAAO;AAAA,EACpB,SAAA,EAAWA,EAAE,MAAA,EAAO;AAAA,EACpB,SAAA,EAAWA,EAAE,MAAA,EAAO;AAAA,EACpB,WAAA,EAAaA,EAAE,MAAA,EAAO;AAAA,EACtB,SAAA,EAAWA,EAAE,MAAA;AACf,CAAC,CAAA;AAED,IAAM,wBAAA,GAA2BA,EAAE,MAAA,CAAO;AAAA,EACxC,GAAA,EAAKA,CAAAA,CAAE,EAAA,CAAG,cAAc,CAAA;AAAA,EACxB,aAAA,EAAeA,EAAE,MAAA,EAAO;AAAA,EACxB,EAAA,EAAIA,CAAAA,CAAE,EAAA,CAAG,cAAc,CAAA;AAAA,EACvB,KAAA,EAAOA,EAAE,MAAA,EAAO;AAAA,EAChB,IAAA,EAAMA,EAAE,MAAA,EAAO;AAAA,EACf,UAAUA,CAAAA,CAAE,QAAA,CAASA,CAAAA,CAAE,EAAA,CAAG,cAAc,CAAC,CAAA;AAAA,EACzC,KAAA,EAAOA,EAAE,MAAA,EAAO;AAAA,EAChB,IAAA,EAAMA,CAAAA,CAAE,QAAA,CAASA,CAAAA,CAAE,QAAQ,CAAA;AAAA,EAC3B,WAAA,EAAaA,CAAAA,CAAE,QAAA,CAASA,CAAAA,CAAE,QAAQ,CAAA;AAAA,EAClC,MAAA,EAAQ,kBAAA;AAAA,EACR,SAAA,EAAWA,EAAE,MAAA,EAAO;AAAA,EACpB,KAAA,EAAOA,CAAAA,CAAE,KAAA,CAAM,qBAAqB,CAAA;AAAA,EACpC,SAAA,EAAWA,EAAE,MAAA;AACf,CAAC,CAAA;AAEM,IAAM,eAAe,KAAA,CAAM;AAAA,EAChC,MAAM,EAAE,MAAA,EAAQA,CAAAA,CAAE,QAAA,CAAS,kBAAkB,CAAA,EAAE;AAAA,EAC/C,OAAA,EAASA,CAAAA,CAAE,KAAA,CAAM,mBAAmB,CAAA;AAAA,EACpC,OAAA,EAAS,OAAO,GAAA,EAAK,IAAA,KAAS;AAC5B,IAAA,IAAI,QAAA,GAAW,MAAM,GAAA,CAAI,EAAA,CACtB,KAAA,CAAM,cAAc,CAAA,CACpB,SAAA,CAAU,UAAU,CAAA,CACpB,OAAA,EAAQ;AAEX,IAAA,IAAI,KAAK,MAAA,EAAQ;AACf,MAAA,QAAA,GAAW,SAAS,MAAA,CAAO,CAAC,MAAM,CAAA,CAAE,MAAA,KAAW,KAAK,MAAM,CAAA;AAAA,IAC5D;AAEA,IAAA,OAAO,QAAA,CAAS,KAAK,CAAC,CAAA,EAAG,MAAM,CAAA,CAAE,KAAA,GAAQ,EAAE,KAAK,CAAA;AAAA,EAClD;AACF,CAAC;AAEM,IAAM,aAAa,KAAA,CAAM;AAAA,EAC9B,MAAM,EAAE,SAAA,EAAWA,CAAAA,CAAE,EAAA,CAAG,cAAc,CAAA,EAAE;AAAA,EACxC,SAASA,CAAAA,CAAE,KAAA,CAAMA,CAAAA,CAAE,IAAA,IAAQ,mBAAmB,CAAA;AAAA,EAC9C,OAAA,EAAS,OAAO,GAAA,EAAK,IAAA,KAAS;AAC5B,IAAA,OAAO,MAAM,GAAA,CAAI,EAAA,CAAG,GAAA,CAAI,KAAK,SAAS,CAAA;AAAA,EACxC;AACF,CAAC;AAEM,IAAM,qBAAqB,KAAA,CAAM;AAAA,EACtC,IAAA,EAAM;AAAA,IACJ,SAAA,EAAWA,CAAAA,CAAE,EAAA,CAAG,cAAc,CAAA;AAAA,IAC9B,MAAA,EAAQA,CAAAA,CAAE,QAAA,CAAS,kBAAkB;AAAA,GACvC;AAAA,EACA,OAAA,EAASA,CAAAA,CAAE,KAAA,CAAM,gBAAgB,CAAA;AAAA,EACjC,OAAA,EAAS,OAAO,GAAA,EAAK,IAAA,KAAS;AAC5B,IAAA,IAAI,QAAQ,MAAM,GAAA,CAAI,GACnB,KAAA,CAAM,WAAW,EACjB,SAAA,CAAU,cAAA,EAAgB,CAAC,CAAA,KAAM,EAAE,EAAA,CAAG,WAAA,EAAa,KAAK,SAAS,CAAC,EAClE,OAAA,EAAQ;AAEX,IAAA,IAAI,KAAK,MAAA,EAAQ;AACf,MAAA,KAAA,GAAQ,MAAM,MAAA,CAAO,CAAC,MAAM,CAAA,CAAE,MAAA,KAAW,KAAK,MAAM,CAAA;AAAA,IACtD;AAEA,IAAA,OAAO,KAAA,CAAM,KAAK,CAAC,CAAA,EAAG,MAAM,CAAA,CAAE,KAAA,GAAQ,EAAE,KAAK,CAAA;AAAA,EAC/C;AACF,CAAC;AAEM,IAAM,UAAU,KAAA,CAAM;AAAA,EAC3B,IAAA,EAAM;AAAA,IACJ,SAAA,EAAWA,CAAAA,CAAE,EAAA,CAAG,cAAc,CAAA;AAAA,IAC9B,IAAA,EAAMA,EAAE,MAAA;AAAO,GACjB;AAAA,EACA,SAASA,CAAAA,CAAE,KAAA,CAAMA,CAAAA,CAAE,IAAA,IAAQ,gBAAgB,CAAA;AAAA,EAC3C,OAAA,EAAS,OAAO,GAAA,EAAK,IAAA,KAAS;AAC5B,IAAA,MAAM,QAAQ,MAAM,GAAA,CAAI,GACrB,KAAA,CAAM,WAAW,EACjB,SAAA,CAAU,cAAA,EAAgB,CAAC,CAAA,KAAM,EAAE,EAAA,CAAG,WAAA,EAAa,KAAK,SAAS,CAAC,EAClE,OAAA,EAAQ;AAEX,IAAA,OAAO,KAAA,CAAM,KAAK,CAAC,CAAA,KAAM,EAAE,IAAA,KAAS,IAAA,CAAK,IAAI,CAAA,IAAK,IAAA;AAAA,EACpD;AACF,CAAC;AAEM,IAAM,cAAc,KAAA,CAAM;AAAA,EAC/B,MAAM,EAAE,MAAA,EAAQA,CAAAA,CAAE,EAAA,CAAG,WAAW,CAAA,EAAE;AAAA,EAClC,SAASA,CAAAA,CAAE,KAAA,CAAMA,CAAAA,CAAE,IAAA,IAAQ,gBAAgB,CAAA;AAAA,EAC3C,OAAA,EAAS,OAAO,GAAA,EAAK,IAAA,KAAS;AAC5B,IAAA,OAAO,MAAM,GAAA,CAAI,EAAA,CAAG,GAAA,CAAI,KAAK,MAAM,CAAA;AAAA,EACrC;AACF,CAAC;AAEM,IAAM,cAAc,KAAA,CAAM;AAAA,EAC/B,IAAA,EAAM;AAAA,IACJ,KAAA,EAAOA,EAAE,MAAA,EAAO;AAAA,IAChB,MAAA,EAAQA,CAAAA,CAAE,QAAA,CAAS,kBAAkB;AAAA,GACvC;AAAA,EACA,OAAA,EAASA,CAAAA,CAAE,KAAA,CAAM,gBAAgB,CAAA;AAAA,EACjC,OAAA,EAAS,OAAO,GAAA,EAAK,IAAA,KAAS;AAC5B,IAAA,MAAM,CAAA,GAAI,IAAA,CAAK,KAAA,CAAM,WAAA,EAAY;AACjC,IAAA,IAAI,CAAC,CAAA,EAAG,OAAO,EAAC;AAEhB,IAAA,IAAI,QAAQ,MAAM,GAAA,CAAI,GAAG,KAAA,CAAM,WAAW,EAAE,OAAA,EAAQ;AAEpD,IAAA,IAAI,KAAK,MAAA,EAAQ;AACf,MAAA,KAAA,GAAQ,MAAM,MAAA,CAAO,CAAC,MAAM,CAAA,CAAE,MAAA,KAAW,KAAK,MAAM,CAAA;AAAA,IACtD;AAEA,IAAA,MAAM,UAAU,KAAA,CACb,MAAA;AAAA,MACC,CAAC,CAAA,KACC,CAAA,CAAE,KAAA,CAAM,WAAA,EAAY,CAAE,QAAA,CAAS,CAAC,CAAA,IAChC,CAAA,CAAE,OAAA,CAAQ,WAAA,EAAY,CAAE,SAAS,CAAC,CAAA,IAClC,CAAA,CAAE,IAAA,CAAK,IAAA,CAAK,CAAC,CAAA,KAAc,CAAA,CAAE,WAAA,EAAY,CAAE,QAAA,CAAS,CAAC,CAAC;AAAA,KAC1D,CACC,KAAA,CAAM,CAAA,EAAG,EAAE,CAAA;AAEd,IAAA,OAAO,OAAA;AAAA,EACT;AACF,CAAC;AAEM,IAAM,cAAc,KAAA,CAAM;AAAA,EAC/B,MAAM,EAAE,MAAA,EAAQA,CAAAA,CAAE,QAAA,CAAS,kBAAkB,CAAA,EAAE;AAAA,EAC/C,OAAA,EAASA,CAAAA,CAAE,KAAA,CAAM,wBAAwB,CAAA;AAAA,EACzC,OAAA,EAAS,OAAO,GAAA,EAAK,IAAA,KAAS;AAC5B,IAAA,IAAI,QAAA,GAAW,MAAM,GAAA,CAAI,EAAA,CACtB,KAAA,CAAM,cAAc,CAAA,CACpB,SAAA,CAAU,UAAU,CAAA,CACpB,OAAA,EAAQ;AAEX,IAAA,IAAI,KAAK,MAAA,EAAQ;AACf,MAAA,QAAA,GAAW,SAAS,MAAA,CAAO,CAAC,MAAM,CAAA,CAAE,MAAA,KAAW,KAAK,MAAM,CAAA;AAAA,IAC5D;AAEA,IAAA,QAAA,CAAS,KAAK,CAAC,CAAA,EAAG,MAAM,CAAA,CAAE,KAAA,GAAQ,EAAE,KAAK,CAAA;AAEzC,IAAA,MAAM,OAAO,EAAC;AACd,IAAA,KAAA,MAAW,WAAW,QAAA,EAAU;AAC9B,MAAA,MAAM,QAAQ,MAAM,GAAA,CAAI,GACrB,KAAA,CAAM,WAAW,EACjB,SAAA,CAAU,cAAA,EAAgB,CAAC,CAAA,KAAM,EAAE,EAAA,CAAG,WAAA,EAAa,QAAQ,GAAG,CAAC,EAC/D,OAAA,EAAQ;AAEX,MAAA,MAAM,iBAAiB,KAAA,CACpB,MAAA,CAAO,CAAC,CAAA,KAAM,EAAE,MAAA,KAAW,WAAW,CAAA,CACtC,IAAA,CAAK,CAAC,CAAA,EAAG,CAAA,KAAM,CAAA,CAAE,KAAA,GAAQ,EAAE,KAAK,CAAA;AAEnC,MAAA,IAAA,CAAK,IAAA,CAAK;AAAA,QACR,GAAG,OAAA;AAAA,QACH,IAAI,OAAA,CAAQ,GAAA;AAAA,QACZ,KAAA,EAAO,cAAA,CAAe,GAAA,CAAI,CAAC,CAAA,MAAO,EAAE,GAAG,CAAA,EAAG,EAAA,EAAI,CAAA,CAAE,GAAA,EAAI,CAAE,CAAA;AAAA,QACtD,WAAW,cAAA,CAAe;AAAA,OAC3B,CAAA;AAAA,IACH;AAEA,IAAA,OAAO,IAAA;AAAA,EACT;AACF,CAAC;AAEM,IAAM,iBAAiB,KAAA,CAAM;AAAA,EAClC,IAAA,EAAM;AAAA,IACJ,KAAA,EAAOA,CAAAA,CAAE,QAAA,CAASA,CAAAA,CAAE,QAAQ,CAAA;AAAA,IAC5B,MAAA,EAAQA,CAAAA,CAAE,QAAA,CAAS,kBAAkB;AAAA,GACvC;AAAA,EACA,OAAA,EAASA,CAAAA,CAAE,KAAA,CAAM,qBAAqB,CAAA;AAAA,EACtC,OAAA,EAAS,OAAO,GAAA,EAAK,IAAA,KAAS;AAC5B,IAAA,IAAI,QAAQ,MAAM,GAAA,CAAI,GAAG,KAAA,CAAM,WAAW,EAAE,OAAA,EAAQ;AAEpD,IAAA,KAAA,GAAQ,MAAM,MAAA,CAAO,CAAC,CAAA,KAAM,CAAA,CAAE,WAAW,WAAW,CAAA;AAEpD,IAAA,IAAI,KAAK,MAAA,EAAQ;AACf,MAAA,KAAA,GAAQ,MAAM,MAAA,CAAO,CAAC,MAAM,CAAA,CAAE,MAAA,KAAW,KAAK,MAAM,CAAA;AAAA,IACtD;AAEA,IAAA,KAAA,CAAM,KAAK,CAAC,CAAA,EAAG,MAAM,CAAA,CAAE,SAAA,GAAY,EAAE,SAAS,CAAA;AAE9C,IAAA,OAAO,MAAM,KAAA,CAAM,CAAA,EAAG,IAAA,CAAK,KAAA,IAAS,EAAE,CAAA,CAAE,GAAA,CAAI,CAAC,CAAA,MAAO,EAAE,GAAG,CAAA,EAAG,EAAA,EAAI,CAAA,CAAE,KAAI,CAAE,CAAA;AAAA,EAC1E;AACF,CAAC;AAEM,IAAM,kBAAkB,KAAA,CAAM;AAAA,EACnC,IAAA,EAAM,EAAE,IAAA,EAAMA,CAAAA,CAAE,QAAO,EAAE;AAAA,EACzB,OAAA,EAASA,CAAAA,CAAE,KAAA,CAAM,qBAAqB,CAAA;AAAA,EACtC,OAAA,EAAS,OAAO,GAAA,EAAK,IAAA,KAAS;AAC5B,IAAA,MAAM,QAAQ,MAAM,GAAA,CAAI,GACrB,KAAA,CAAM,WAAW,EACjB,SAAA,CAAU,SAAA,EAAW,CAAC,CAAA,KAAM,EAAE,EAAA,CAAG,MAAA,EAAQ,KAAK,IAAI,CAAC,EACnD,OAAA,EAAQ;AAEX,IAAA,OAAO,KAAA,CACJ,MAAA,CAAO,CAAC,CAAA,KAAM,CAAA,CAAE,OAAO,CAAA,CACvB,IAAA,CAAK,CAAC,CAAA,EAAG,CAAA,KAAA,CAAO,CAAA,CAAE,OAAA,IAAW,EAAA,EAAI,aAAA,CAAc,CAAA,CAAE,OAAA,IAAW,EAAE,CAAC,CAAA,CAC/D,GAAA,CAAI,CAAC,CAAA,MAAO,EAAE,GAAG,CAAA,EAAG,EAAA,EAAI,CAAA,CAAE,KAAI,CAAE,CAAA;AAAA,EACrC;AACF,CAAC;ACzQM,IAAM,UAAA,GAAa;AAAA,EACxB,cAAc,WAAA,CAAY;AAAA,IACxB,KAAA,EAAOA,EAAE,MAAA,EAAO;AAAA,IAChB,IAAA,EAAMA,EAAE,MAAA,EAAO;AAAA,IACf,UAAUA,CAAAA,CAAE,QAAA,CAASA,CAAAA,CAAE,EAAA,CAAG,cAAc,CAAC,CAAA;AAAA,IACzC,KAAA,EAAOA,EAAE,MAAA,EAAO;AAAA,IAChB,IAAA,EAAMA,CAAAA,CAAE,QAAA,CAASA,CAAAA,CAAE,QAAQ,CAAA;AAAA,IAC3B,WAAA,EAAaA,CAAAA,CAAE,QAAA,CAASA,CAAAA,CAAE,QAAQ,CAAA;AAAA,IAClC,MAAA,EAAQA,CAAAA,CAAE,KAAA,CAAMA,CAAAA,CAAE,QAAQ,QAAQ,CAAA,EAAGA,CAAAA,CAAE,OAAA,CAAQ,MAAM,CAAA,EAAGA,CAAAA,CAAE,OAAA,CAAQ,OAAO,CAAC,CAAA;AAAA,IAC1E,SAAA,EAAWA,EAAE,MAAA;AAAO,GACrB,CAAA,CACE,KAAA,CAAM,WAAW,CAAC,MAAM,CAAC,CAAA,CACzB,KAAA,CAAM,aAAA,EAAe,CAAC,UAAU,CAAC,CAAA,CACjC,MAAM,UAAA,EAAY,CAAC,OAAO,CAAC,CAAA;AAAA,EAE9B,WAAW,WAAA,CAAY;AAAA,IACrB,KAAA,EAAOA,EAAE,MAAA,EAAO;AAAA,IAChB,IAAA,EAAMA,EAAE,MAAA,EAAO;AAAA,IACf,OAAA,EAASA,EAAE,MAAA,EAAO;AAAA,IAClB,OAAA,EAASA,CAAAA,CAAE,QAAA,CAASA,CAAAA,CAAE,QAAQ,CAAA;AAAA,IAC9B,SAAA,EAAWA,CAAAA,CAAE,EAAA,CAAG,cAAc,CAAA;AAAA,IAC9B,KAAA,EAAOA,EAAE,MAAA,EAAO;AAAA,IAChB,MAAA,EAAQA,CAAAA,CAAE,MAAA,CAAO,EAAE,MAAMA,CAAAA,CAAE,MAAA,EAAO,EAAG,MAAA,EAAQA,EAAE,QAAA,CAASA,CAAAA,CAAE,MAAA,EAAQ,GAAG,CAAA;AAAA,IACrE,cAAcA,CAAAA,CAAE,QAAA;AAAA,MACdA,CAAAA,CAAE,MAAA,CAAO,EAAE,IAAA,EAAMA,CAAAA,CAAE,MAAA,EAAO,EAAG,QAAA,EAAUA,CAAAA,CAAE,MAAA,EAAO,EAAG;AAAA,KACrD;AAAA,IACA,OAAA,EAASA,CAAAA,CAAE,QAAA,CAASA,CAAAA,CAAE,QAAQ,CAAA;AAAA,IAC9B,MAAA,EAAQA,CAAAA,CAAE,KAAA,CAAMA,CAAAA,CAAE,QAAQ,QAAQ,CAAA,EAAGA,CAAAA,CAAE,OAAA,CAAQ,MAAM,CAAA,EAAGA,CAAAA,CAAE,OAAA,CAAQ,OAAO,CAAC,CAAA;AAAA,IAC1E,IAAA,EAAMA,CAAAA,CAAE,KAAA,CAAMA,CAAAA,CAAE,QAAQ,CAAA;AAAA,IACxB,QAAQA,CAAAA,CAAE,KAAA;AAAA,MACRA,CAAAA,CAAE,QAAQ,OAAO,CAAA;AAAA,MACjBA,CAAAA,CAAE,QAAQ,WAAW,CAAA;AAAA,MACrBA,CAAAA,CAAE,QAAQ,UAAU;AAAA,KACtB;AAAA,IACA,SAAA,EAAWA,EAAE,MAAA,EAAO;AAAA,IACpB,SAAA,EAAWA,EAAE,MAAA,EAAO;AAAA,IACpB,SAAA,EAAWA,EAAE,MAAA,EAAO;AAAA,IACpB,WAAA,EAAaA,EAAE,MAAA,EAAO;AAAA,IACtB,SAAA,EAAWA,EAAE,MAAA;AAAO,GACrB,CAAA,CACE,KAAA,CAAM,cAAA,EAAgB,CAAC,WAAW,CAAC,CAAA,CACnC,KAAA,CAAM,SAAA,EAAW,CAAC,MAAM,CAAC,CAAA,CACzB,KAAA,CAAM,WAAA,EAAa,CAAC,QAAQ,CAAC,EAC7B,KAAA,CAAM,WAAA,EAAa,CAAC,QAAQ,CAAC,CAAA;AAAA,EAEhC,kBAAkB,WAAA,CAAY;AAAA,IAC5B,MAAA,EAAQA,CAAAA,CAAE,EAAA,CAAG,WAAW,CAAA;AAAA,IACxB,SAAA,EAAWA,CAAAA,CAAE,EAAA,CAAG,cAAc,CAAA;AAAA,IAC9B,MAAA,EAAQA,CAAAA,CAAE,KAAA,CAAMA,CAAAA,CAAE,QAAQ,CAAA;AAAA,IAC1B,SAAA,EAAWA,EAAE,MAAA;AAAO,GACrB,CAAA,CAAE,KAAA,CAAM,WAAA,EAAa,CAAC,QAAQ,CAAC;AAClC;AAKmB,aAAa,UAAU","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"]}