@geenius/docs 0.1.0 → 0.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (158) hide show
  1. package/CHANGELOG.md +7 -0
  2. package/README.md +53 -1
  3. package/package.json +96 -13
  4. package/packages/convex/dist/index.d.ts +503 -0
  5. package/packages/convex/dist/index.js +482 -0
  6. package/packages/convex/dist/index.js.map +1 -0
  7. package/packages/react/dist/index.d.ts +439 -0
  8. package/packages/react/dist/index.js +4954 -0
  9. package/packages/react/dist/index.js.map +1 -0
  10. package/packages/react-css/{src/styles.css → dist/index.css} +183 -223
  11. package/packages/react-css/dist/index.css.map +1 -0
  12. package/packages/react-css/dist/index.d.ts +443 -0
  13. package/packages/react-css/dist/index.js +5058 -0
  14. package/packages/react-css/dist/index.js.map +1 -0
  15. package/packages/shared/dist/index.d.ts +684 -0
  16. package/packages/shared/dist/index.js +788 -0
  17. package/packages/shared/dist/index.js.map +1 -0
  18. package/packages/solidjs/dist/index.d.ts +435 -0
  19. package/packages/solidjs/dist/index.js +4584 -0
  20. package/packages/solidjs/dist/index.js.map +1 -0
  21. package/packages/solidjs-css/{src/styles.css → dist/index.css} +183 -223
  22. package/packages/solidjs-css/dist/index.css.map +1 -0
  23. package/packages/solidjs-css/dist/index.d.ts +432 -0
  24. package/packages/solidjs-css/dist/index.js +4934 -0
  25. package/packages/solidjs-css/dist/index.js.map +1 -0
  26. package/.changeset/config.json +0 -11
  27. package/.github/CODEOWNERS +0 -1
  28. package/.github/ISSUE_TEMPLATE/bug_report.md +0 -16
  29. package/.github/ISSUE_TEMPLATE/feature_request.md +0 -11
  30. package/.github/PULL_REQUEST_TEMPLATE.md +0 -10
  31. package/.github/dependabot.yml +0 -11
  32. package/.github/workflows/ci.yml +0 -23
  33. package/.github/workflows/release.yml +0 -29
  34. package/.nvmrc +0 -1
  35. package/.project/ACCOUNT.yaml +0 -4
  36. package/.project/IDEAS.yaml +0 -7
  37. package/.project/PROJECT.yaml +0 -11
  38. package/.project/ROADMAP.yaml +0 -15
  39. package/CODE_OF_CONDUCT.md +0 -16
  40. package/CONTRIBUTING.md +0 -26
  41. package/SECURITY.md +0 -15
  42. package/SUPPORT.md +0 -8
  43. package/packages/convex/README.md +0 -1
  44. package/packages/convex/package.json +0 -12
  45. package/packages/convex/src/convex.config.ts +0 -3
  46. package/packages/convex/src/index.ts +0 -3
  47. package/packages/convex/src/mutations.ts +0 -270
  48. package/packages/convex/src/queries.ts +0 -175
  49. package/packages/convex/src/schema.ts +0 -55
  50. package/packages/react/README.md +0 -1
  51. package/packages/react/package.json +0 -36
  52. package/packages/react/src/DocsLayout.tsx +0 -116
  53. package/packages/react/src/DocsProvider.tsx +0 -93
  54. package/packages/react/src/RouterDocsContent.tsx +0 -148
  55. package/packages/react/src/RouterDocsLayout.tsx +0 -161
  56. package/packages/react/src/components/Breadcrumbs.tsx +0 -34
  57. package/packages/react/src/components/DocPage.tsx +0 -191
  58. package/packages/react/src/components/DocSearch.tsx +0 -140
  59. package/packages/react/src/components/DocSidebar.tsx +0 -86
  60. package/packages/react/src/components/DocsLayout.tsx +0 -62
  61. package/packages/react/src/components/EditButton.tsx +0 -26
  62. package/packages/react/src/components/PageNavigation.tsx +0 -45
  63. package/packages/react/src/components/TableOfContents.tsx +0 -46
  64. package/packages/react/src/components/VersionSelector.tsx +0 -60
  65. package/packages/react/src/components/index.ts +0 -9
  66. package/packages/react/src/hooks/index.ts +0 -8
  67. package/packages/react/src/hooks/useDocSearch.ts +0 -55
  68. package/packages/react/src/hooks/useDocs.ts +0 -57
  69. package/packages/react/src/hooks/useDocsAdmin.ts +0 -151
  70. package/packages/react/src/hooks/useTableOfContents.ts +0 -66
  71. package/packages/react/src/index.ts +0 -38
  72. package/packages/react/src/pages/DocSearchPage.tsx +0 -129
  73. package/packages/react/src/pages/DocViewPage.tsx +0 -158
  74. package/packages/react/src/pages/DocsAdminPage.tsx +0 -330
  75. package/packages/react/src/pages/DocsIndexPage.tsx +0 -172
  76. package/packages/react/src/pages/index.ts +0 -4
  77. package/packages/react/src/useDocs.ts +0 -58
  78. package/packages/react/tsup.config.ts +0 -12
  79. package/packages/react-css/README.md +0 -1
  80. package/packages/react-css/package.json +0 -37
  81. package/packages/react-css/src/DocsLayout.tsx +0 -117
  82. package/packages/react-css/src/DocsProvider.tsx +0 -93
  83. package/packages/react-css/src/RouterDocsContent.tsx +0 -60
  84. package/packages/react-css/src/RouterDocsLayout.tsx +0 -101
  85. package/packages/react-css/src/components/DocPage.tsx +0 -21
  86. package/packages/react-css/src/components/DocSearch.tsx +0 -55
  87. package/packages/react-css/src/components/DocSidebar.tsx +0 -56
  88. package/packages/react-css/src/components/DocsLayout.tsx +0 -28
  89. package/packages/react-css/src/components/common.tsx +0 -93
  90. package/packages/react-css/src/components/index.ts +0 -5
  91. package/packages/react-css/src/hooks/index.ts +0 -2
  92. package/packages/react-css/src/index.ts +0 -6
  93. package/packages/react-css/src/index.tsx +0 -3
  94. package/packages/react-css/src/pages/DocViewPage.tsx +0 -78
  95. package/packages/react-css/src/pages/DocsAdminPage.tsx +0 -101
  96. package/packages/react-css/src/pages/DocsIndexPage.tsx +0 -68
  97. package/packages/react-css/src/pages/index.ts +0 -3
  98. package/packages/react-css/src/useDocs.ts +0 -58
  99. package/packages/react-css/tsconfig.json +0 -19
  100. package/packages/react-css/tsup.config.ts +0 -10
  101. package/packages/shared/README.md +0 -1
  102. package/packages/shared/package.json +0 -31
  103. package/packages/shared/src/__tests__/docs.test.ts +0 -69
  104. package/packages/shared/src/config.ts +0 -80
  105. package/packages/shared/src/index.ts +0 -179
  106. package/packages/shared/src/providers/astro.ts +0 -94
  107. package/packages/shared/src/providers/fumadocs.ts +0 -116
  108. package/packages/shared/src/providers/internal.ts +0 -80
  109. package/packages/shared/src/types.ts +0 -73
  110. package/packages/shared/tsconfig.json +0 -18
  111. package/packages/shared/tsup.config.ts +0 -12
  112. package/packages/shared/vitest.config.ts +0 -4
  113. package/packages/solidjs/README.md +0 -1
  114. package/packages/solidjs/package.json +0 -33
  115. package/packages/solidjs/src/DocsLayout.tsx +0 -87
  116. package/packages/solidjs/src/DocsProvider.tsx +0 -95
  117. package/packages/solidjs/src/RouterDocsContent.tsx +0 -147
  118. package/packages/solidjs/src/RouterDocsLayout.tsx +0 -161
  119. package/packages/solidjs/src/components/Breadcrumbs.tsx +0 -27
  120. package/packages/solidjs/src/components/DocPage.tsx +0 -110
  121. package/packages/solidjs/src/components/DocSearch.tsx +0 -81
  122. package/packages/solidjs/src/components/DocSidebar.tsx +0 -92
  123. package/packages/solidjs/src/components/DocsLayout.tsx +0 -38
  124. package/packages/solidjs/src/components/EditButton.tsx +0 -15
  125. package/packages/solidjs/src/components/PageNavigation.tsx +0 -31
  126. package/packages/solidjs/src/components/TableOfContents.tsx +0 -41
  127. package/packages/solidjs/src/components/VersionSelector.tsx +0 -30
  128. package/packages/solidjs/src/components/index.ts +0 -9
  129. package/packages/solidjs/src/createDocs.ts +0 -62
  130. package/packages/solidjs/src/index.ts +0 -28
  131. package/packages/solidjs/src/pages/DocSearchPage.tsx +0 -72
  132. package/packages/solidjs/src/pages/DocViewPage.tsx +0 -80
  133. package/packages/solidjs/src/pages/DocsAdminPage.tsx +0 -123
  134. package/packages/solidjs/src/pages/DocsIndexPage.tsx +0 -85
  135. package/packages/solidjs/src/pages/index.ts +0 -4
  136. package/packages/solidjs/src/primitives/createDocSearch.ts +0 -42
  137. package/packages/solidjs/src/primitives/createDocs.ts +0 -35
  138. package/packages/solidjs/src/primitives/createDocsAdmin.ts +0 -63
  139. package/packages/solidjs/src/primitives/createTableOfContents.ts +0 -51
  140. package/packages/solidjs/src/primitives/index.ts +0 -4
  141. package/packages/solidjs/tsup.config.ts +0 -12
  142. package/packages/solidjs-css/README.md +0 -1
  143. package/packages/solidjs-css/package.json +0 -36
  144. package/packages/solidjs-css/src/DocsLayout.tsx +0 -106
  145. package/packages/solidjs-css/src/DocsProvider.tsx +0 -95
  146. package/packages/solidjs-css/src/RouterDocsContent.tsx +0 -54
  147. package/packages/solidjs-css/src/RouterDocsLayout.tsx +0 -104
  148. package/packages/solidjs-css/src/createDocs.ts +0 -62
  149. package/packages/solidjs-css/src/index.ts +0 -7
  150. package/packages/solidjs-css/src/index.tsx +0 -17
  151. package/packages/solidjs-css/src/pages/DocViewPage.tsx +0 -111
  152. package/packages/solidjs-css/src/pages/DocsAdminPage.tsx +0 -332
  153. package/packages/solidjs-css/src/pages/DocsIndexPage.tsx +0 -116
  154. package/packages/solidjs-css/src/pages/index.ts +0 -3
  155. package/packages/solidjs-css/src/primitives/index.ts +0 -1
  156. package/packages/solidjs-css/tsconfig.json +0 -20
  157. package/packages/solidjs-css/tsup.config.ts +0 -10
  158. package/pnpm-workspace.yaml +0 -2
@@ -0,0 +1,482 @@
1
+ import { defineComponent, defineTable, defineSchema, mutationGeneric, queryGeneric } from 'convex/server';
2
+ import { v } from 'convex/values';
3
+
4
+ // src/convex.config.ts
5
+ var component = defineComponent("docs");
6
+ var convex_config_default = component;
7
+ var query = queryGeneric;
8
+ var mutation = mutationGeneric;
9
+
10
+ // src/mutations.ts
11
+ var createSection = mutation({
12
+ args: {
13
+ title: v.string(),
14
+ slug: v.string(),
15
+ parentId: v.optional(v.id("doc_sections")),
16
+ order: v.number(),
17
+ icon: v.optional(v.string()),
18
+ description: v.optional(v.string()),
19
+ access: v.union(v.literal("public"), v.literal("team"), v.literal("admin"))
20
+ },
21
+ returns: v.id("doc_sections"),
22
+ handler: async (ctx, args) => {
23
+ return await ctx.db.insert("doc_sections", {
24
+ ...args,
25
+ createdAt: Date.now()
26
+ });
27
+ }
28
+ });
29
+ var updateSection = mutation({
30
+ args: {
31
+ sectionId: v.id("doc_sections"),
32
+ title: v.optional(v.string()),
33
+ slug: v.optional(v.string()),
34
+ order: v.optional(v.number()),
35
+ icon: v.optional(v.string()),
36
+ description: v.optional(v.string()),
37
+ access: v.optional(
38
+ v.union(v.literal("public"), v.literal("team"), v.literal("admin"))
39
+ )
40
+ },
41
+ returns: v.null(),
42
+ handler: async (ctx, args) => {
43
+ const { sectionId, ...updates } = args;
44
+ const clean = Object.fromEntries(
45
+ Object.entries(updates).filter(([, val]) => val !== void 0)
46
+ );
47
+ await ctx.db.patch(sectionId, clean);
48
+ return null;
49
+ }
50
+ });
51
+ var deleteSection = mutation({
52
+ args: { sectionId: v.id("doc_sections") },
53
+ returns: v.null(),
54
+ handler: async (ctx, args) => {
55
+ const pages = await ctx.db.query("doc_pages").withIndex("by_sectionId", (q) => q.eq("sectionId", args.sectionId)).collect();
56
+ for (const page of pages) {
57
+ const indexEntries = await ctx.db.query("doc_search_index").withIndex("by_pageId", (q) => q.eq("pageId", page._id)).collect();
58
+ for (const entry of indexEntries) {
59
+ await ctx.db.delete(entry._id);
60
+ }
61
+ await ctx.db.delete(page._id);
62
+ }
63
+ await ctx.db.delete(args.sectionId);
64
+ return null;
65
+ }
66
+ });
67
+ var reorderSections = mutation({
68
+ args: { sectionIds: v.array(v.id("doc_sections")) },
69
+ returns: v.null(),
70
+ handler: async (ctx, args) => {
71
+ for (let i = 0; i < args.sectionIds.length; i++) {
72
+ await ctx.db.patch(args.sectionIds[i], { order: i });
73
+ }
74
+ return null;
75
+ }
76
+ });
77
+ var createPage = mutation({
78
+ args: {
79
+ title: v.string(),
80
+ slug: v.string(),
81
+ content: v.string(),
82
+ sectionId: v.id("doc_sections"),
83
+ access: v.union(v.literal("public"), v.literal("team"), v.literal("admin")),
84
+ tags: v.optional(v.array(v.string())),
85
+ version: v.optional(v.string()),
86
+ status: v.optional(
87
+ v.union(v.literal("draft"), v.literal("published"), v.literal("archived"))
88
+ ),
89
+ author: v.optional(
90
+ v.object({ name: v.string(), avatar: v.optional(v.string()) })
91
+ ),
92
+ excerpt: v.optional(v.string()),
93
+ order: v.optional(v.number())
94
+ },
95
+ returns: v.id("doc_pages"),
96
+ handler: async (ctx, args) => {
97
+ const now = Date.now();
98
+ const stripped = args.content.replace(/```[\s\S]*?```/g, "").replace(/[#*_~>|-]/g, "").trim();
99
+ const words = stripped.split(/\s+/).filter(Boolean);
100
+ const wordCount = words.length;
101
+ const readingTime = Math.max(1, Math.ceil(wordCount / 225));
102
+ return await ctx.db.insert("doc_pages", {
103
+ title: args.title,
104
+ slug: args.slug,
105
+ content: args.content,
106
+ excerpt: args.excerpt,
107
+ sectionId: args.sectionId,
108
+ order: args.order ?? 0,
109
+ author: args.author ?? { name: "Anonymous" },
110
+ version: args.version,
111
+ access: args.access,
112
+ tags: args.tags ?? [],
113
+ status: args.status ?? "draft",
114
+ createdAt: now,
115
+ updatedAt: now,
116
+ wordCount,
117
+ readingTime,
118
+ viewCount: 0
119
+ });
120
+ }
121
+ });
122
+ var updatePage = mutation({
123
+ args: {
124
+ pageId: v.id("doc_pages"),
125
+ title: v.optional(v.string()),
126
+ slug: v.optional(v.string()),
127
+ content: v.optional(v.string()),
128
+ excerpt: v.optional(v.string()),
129
+ sectionId: v.optional(v.id("doc_sections")),
130
+ order: v.optional(v.number()),
131
+ access: v.optional(
132
+ v.union(v.literal("public"), v.literal("team"), v.literal("admin"))
133
+ ),
134
+ tags: v.optional(v.array(v.string())),
135
+ version: v.optional(v.string()),
136
+ status: v.optional(
137
+ v.union(v.literal("draft"), v.literal("published"), v.literal("archived"))
138
+ ),
139
+ lastEditedBy: v.optional(
140
+ v.object({ name: v.string(), editedAt: v.string() })
141
+ )
142
+ },
143
+ returns: v.null(),
144
+ handler: async (ctx, args) => {
145
+ const { pageId, ...updates } = args;
146
+ const clean = Object.fromEntries(
147
+ Object.entries(updates).filter(([, val]) => val !== void 0)
148
+ );
149
+ if (typeof clean.content === "string") {
150
+ const stripped = clean.content.replace(/```[\s\S]*?```/g, "").replace(/[#*_~>|-]/g, "").trim();
151
+ const words = stripped.split(/\s+/).filter(Boolean);
152
+ clean.wordCount = words.length;
153
+ clean.readingTime = Math.max(1, Math.ceil(words.length / 225));
154
+ }
155
+ clean.updatedAt = Date.now();
156
+ await ctx.db.patch(pageId, clean);
157
+ return null;
158
+ }
159
+ });
160
+ var publishPage = mutation({
161
+ args: { pageId: v.id("doc_pages") },
162
+ returns: v.null(),
163
+ handler: async (ctx, args) => {
164
+ await ctx.db.patch(args.pageId, {
165
+ status: "published",
166
+ updatedAt: Date.now()
167
+ });
168
+ return null;
169
+ }
170
+ });
171
+ var archivePage = mutation({
172
+ args: { pageId: v.id("doc_pages") },
173
+ returns: v.null(),
174
+ handler: async (ctx, args) => {
175
+ await ctx.db.patch(args.pageId, {
176
+ status: "archived",
177
+ updatedAt: Date.now()
178
+ });
179
+ return null;
180
+ }
181
+ });
182
+ var deletePage = mutation({
183
+ args: { pageId: v.id("doc_pages") },
184
+ returns: v.null(),
185
+ handler: async (ctx, args) => {
186
+ const indexEntries = await ctx.db.query("doc_search_index").withIndex("by_pageId", (q) => q.eq("pageId", args.pageId)).collect();
187
+ for (const entry of indexEntries) {
188
+ await ctx.db.delete(entry._id);
189
+ }
190
+ await ctx.db.delete(args.pageId);
191
+ return null;
192
+ }
193
+ });
194
+ var reorderPages = mutation({
195
+ args: { pageIds: v.array(v.id("doc_pages")) },
196
+ returns: v.null(),
197
+ handler: async (ctx, args) => {
198
+ for (let i = 0; i < args.pageIds.length; i++) {
199
+ await ctx.db.patch(args.pageIds[i], { order: i });
200
+ }
201
+ return null;
202
+ }
203
+ });
204
+ var incrementViewCount = mutation({
205
+ args: { pageId: v.id("doc_pages") },
206
+ returns: v.null(),
207
+ handler: async (ctx, args) => {
208
+ const page = await ctx.db.get(args.pageId);
209
+ if (page) {
210
+ await ctx.db.patch(args.pageId, { viewCount: (page.viewCount ?? 0) + 1 });
211
+ }
212
+ return null;
213
+ }
214
+ });
215
+ var movePage = mutation({
216
+ args: {
217
+ pageId: v.id("doc_pages"),
218
+ newSectionId: v.id("doc_sections"),
219
+ newOrder: v.number()
220
+ },
221
+ returns: v.null(),
222
+ handler: async (ctx, args) => {
223
+ await ctx.db.patch(args.pageId, {
224
+ sectionId: args.newSectionId,
225
+ order: args.newOrder,
226
+ updatedAt: Date.now()
227
+ });
228
+ return null;
229
+ }
230
+ });
231
+ var docAccessValidator = v.union(
232
+ v.literal("public"),
233
+ v.literal("team"),
234
+ v.literal("admin")
235
+ );
236
+ var docStatusValidator = v.union(
237
+ v.literal("draft"),
238
+ v.literal("published"),
239
+ v.literal("archived")
240
+ );
241
+ var docAuthorValidator = v.object({
242
+ name: v.string(),
243
+ avatar: v.optional(v.string())
244
+ });
245
+ var docRevisionValidator = v.object({
246
+ name: v.string(),
247
+ editedAt: v.string()
248
+ });
249
+ var docSectionValidator = v.object({
250
+ _id: v.id("doc_sections"),
251
+ _creationTime: v.number(),
252
+ title: v.string(),
253
+ slug: v.string(),
254
+ parentId: v.optional(v.id("doc_sections")),
255
+ order: v.number(),
256
+ icon: v.optional(v.string()),
257
+ description: v.optional(v.string()),
258
+ access: docAccessValidator,
259
+ createdAt: v.number()
260
+ });
261
+ var docPageValidator = v.object({
262
+ _id: v.id("doc_pages"),
263
+ _creationTime: v.number(),
264
+ title: v.string(),
265
+ slug: v.string(),
266
+ content: v.string(),
267
+ excerpt: v.optional(v.string()),
268
+ sectionId: v.id("doc_sections"),
269
+ order: v.number(),
270
+ author: docAuthorValidator,
271
+ lastEditedBy: v.optional(docRevisionValidator),
272
+ version: v.optional(v.string()),
273
+ access: docAccessValidator,
274
+ tags: v.array(v.string()),
275
+ status: docStatusValidator,
276
+ createdAt: v.number(),
277
+ updatedAt: v.number(),
278
+ wordCount: v.number(),
279
+ readingTime: v.number(),
280
+ viewCount: v.number()
281
+ });
282
+ var hydratedPageValidator = v.object({
283
+ _id: v.id("doc_pages"),
284
+ _creationTime: v.number(),
285
+ id: v.id("doc_pages"),
286
+ title: v.string(),
287
+ slug: v.string(),
288
+ content: v.string(),
289
+ excerpt: v.optional(v.string()),
290
+ sectionId: v.id("doc_sections"),
291
+ order: v.number(),
292
+ author: docAuthorValidator,
293
+ lastEditedBy: v.optional(docRevisionValidator),
294
+ version: v.optional(v.string()),
295
+ access: docAccessValidator,
296
+ tags: v.array(v.string()),
297
+ status: docStatusValidator,
298
+ createdAt: v.number(),
299
+ updatedAt: v.number(),
300
+ wordCount: v.number(),
301
+ readingTime: v.number(),
302
+ viewCount: v.number()
303
+ });
304
+ var sectionTreeItemValidator = v.object({
305
+ _id: v.id("doc_sections"),
306
+ _creationTime: v.number(),
307
+ id: v.id("doc_sections"),
308
+ title: v.string(),
309
+ slug: v.string(),
310
+ parentId: v.optional(v.id("doc_sections")),
311
+ order: v.number(),
312
+ icon: v.optional(v.string()),
313
+ description: v.optional(v.string()),
314
+ access: docAccessValidator,
315
+ createdAt: v.number(),
316
+ pages: v.array(hydratedPageValidator),
317
+ pageCount: v.number()
318
+ });
319
+ var listSections = query({
320
+ args: { access: v.optional(docAccessValidator) },
321
+ returns: v.array(docSectionValidator),
322
+ handler: async (ctx, args) => {
323
+ let sections = await ctx.db.query("doc_sections").withIndex("by_order").collect();
324
+ if (args.access) {
325
+ sections = sections.filter((s) => s.access === args.access);
326
+ }
327
+ return sections.sort((a, b) => a.order - b.order);
328
+ }
329
+ });
330
+ var getSection = query({
331
+ args: { sectionId: v.id("doc_sections") },
332
+ returns: v.union(v.null(), docSectionValidator),
333
+ handler: async (ctx, args) => {
334
+ return await ctx.db.get(args.sectionId);
335
+ }
336
+ });
337
+ var listPagesBySection = query({
338
+ args: {
339
+ sectionId: v.id("doc_sections"),
340
+ status: v.optional(docStatusValidator)
341
+ },
342
+ returns: v.array(docPageValidator),
343
+ handler: async (ctx, args) => {
344
+ let pages = await ctx.db.query("doc_pages").withIndex("by_sectionId", (q) => q.eq("sectionId", args.sectionId)).collect();
345
+ if (args.status) {
346
+ pages = pages.filter((p) => p.status === args.status);
347
+ }
348
+ return pages.sort((a, b) => a.order - b.order);
349
+ }
350
+ });
351
+ var getPage = query({
352
+ args: {
353
+ sectionId: v.id("doc_sections"),
354
+ slug: v.string()
355
+ },
356
+ returns: v.union(v.null(), docPageValidator),
357
+ handler: async (ctx, args) => {
358
+ const pages = await ctx.db.query("doc_pages").withIndex("by_sectionId", (q) => q.eq("sectionId", args.sectionId)).collect();
359
+ return pages.find((p) => p.slug === args.slug) ?? null;
360
+ }
361
+ });
362
+ var getPageById = query({
363
+ args: { pageId: v.id("doc_pages") },
364
+ returns: v.union(v.null(), docPageValidator),
365
+ handler: async (ctx, args) => {
366
+ return await ctx.db.get(args.pageId);
367
+ }
368
+ });
369
+ var searchPages = query({
370
+ args: {
371
+ query: v.string(),
372
+ access: v.optional(docAccessValidator)
373
+ },
374
+ returns: v.array(docPageValidator),
375
+ handler: async (ctx, args) => {
376
+ const q = args.query.toLowerCase();
377
+ if (!q) return [];
378
+ let pages = await ctx.db.query("doc_pages").collect();
379
+ if (args.access) {
380
+ pages = pages.filter((p) => p.access === args.access);
381
+ }
382
+ const results = pages.filter(
383
+ (p) => p.title.toLowerCase().includes(q) || p.content.toLowerCase().includes(q) || p.tags.some((t) => t.toLowerCase().includes(q))
384
+ ).slice(0, 20);
385
+ return results;
386
+ }
387
+ });
388
+ var getFullTree = query({
389
+ args: { access: v.optional(docAccessValidator) },
390
+ returns: v.array(sectionTreeItemValidator),
391
+ handler: async (ctx, args) => {
392
+ let sections = await ctx.db.query("doc_sections").withIndex("by_order").collect();
393
+ if (args.access) {
394
+ sections = sections.filter((s) => s.access === args.access);
395
+ }
396
+ sections.sort((a, b) => a.order - b.order);
397
+ const tree = [];
398
+ for (const section of sections) {
399
+ const pages = await ctx.db.query("doc_pages").withIndex("by_sectionId", (q) => q.eq("sectionId", section._id)).collect();
400
+ const publishedPages = pages.filter((p) => p.status === "published").sort((a, b) => a.order - b.order);
401
+ tree.push({
402
+ ...section,
403
+ id: section._id,
404
+ pages: publishedPages.map((p) => ({ ...p, id: p._id })),
405
+ pageCount: publishedPages.length
406
+ });
407
+ }
408
+ return tree;
409
+ }
410
+ });
411
+ var getRecentPages = query({
412
+ args: {
413
+ limit: v.optional(v.number()),
414
+ access: v.optional(docAccessValidator)
415
+ },
416
+ returns: v.array(hydratedPageValidator),
417
+ handler: async (ctx, args) => {
418
+ let pages = await ctx.db.query("doc_pages").collect();
419
+ pages = pages.filter((p) => p.status === "published");
420
+ if (args.access) {
421
+ pages = pages.filter((p) => p.access === args.access);
422
+ }
423
+ pages.sort((a, b) => b.updatedAt - a.updatedAt);
424
+ return pages.slice(0, args.limit ?? 10).map((p) => ({ ...p, id: p._id }));
425
+ }
426
+ });
427
+ var getPageVersions = query({
428
+ args: { slug: v.string() },
429
+ returns: v.array(hydratedPageValidator),
430
+ handler: async (ctx, args) => {
431
+ const pages = await ctx.db.query("doc_pages").withIndex("by_slug", (q) => q.eq("slug", args.slug)).collect();
432
+ return pages.filter((p) => p.version).sort((a, b) => (b.version ?? "").localeCompare(a.version ?? "")).map((p) => ({ ...p, id: p._id }));
433
+ }
434
+ });
435
+ var docsTables = {
436
+ doc_sections: defineTable({
437
+ title: v.string(),
438
+ slug: v.string(),
439
+ parentId: v.optional(v.id("doc_sections")),
440
+ order: v.number(),
441
+ icon: v.optional(v.string()),
442
+ description: v.optional(v.string()),
443
+ access: v.union(v.literal("public"), v.literal("team"), v.literal("admin")),
444
+ createdAt: v.number()
445
+ }).index("by_slug", ["slug"]).index("by_parentId", ["parentId"]).index("by_order", ["order"]),
446
+ doc_pages: defineTable({
447
+ title: v.string(),
448
+ slug: v.string(),
449
+ content: v.string(),
450
+ excerpt: v.optional(v.string()),
451
+ sectionId: v.id("doc_sections"),
452
+ order: v.number(),
453
+ author: v.object({ name: v.string(), avatar: v.optional(v.string()) }),
454
+ lastEditedBy: v.optional(
455
+ v.object({ name: v.string(), editedAt: v.string() })
456
+ ),
457
+ version: v.optional(v.string()),
458
+ access: v.union(v.literal("public"), v.literal("team"), v.literal("admin")),
459
+ tags: v.array(v.string()),
460
+ status: v.union(
461
+ v.literal("draft"),
462
+ v.literal("published"),
463
+ v.literal("archived")
464
+ ),
465
+ createdAt: v.number(),
466
+ updatedAt: v.number(),
467
+ wordCount: v.number(),
468
+ readingTime: v.number(),
469
+ viewCount: v.number()
470
+ }).index("by_sectionId", ["sectionId"]).index("by_slug", ["slug"]).index("by_status", ["status"]).index("by_access", ["access"]),
471
+ doc_search_index: defineTable({
472
+ pageId: v.id("doc_pages"),
473
+ sectionId: v.id("doc_sections"),
474
+ tokens: v.array(v.string()),
475
+ updatedAt: v.number()
476
+ }).index("by_pageId", ["pageId"])
477
+ };
478
+ defineSchema(docsTables);
479
+
480
+ export { archivePage, convex_config_default as componentDefinition, createPage, createSection, deletePage, deleteSection, docsTables, getFullTree, getPage, getPageById, getPageVersions, getRecentPages, getSection, incrementViewCount, listPagesBySection, listSections, movePage, publishPage, reorderPages, reorderSections, searchPages, updatePage, updateSection };
481
+ //# sourceMappingURL=index.js.map
482
+ //# sourceMappingURL=index.js.map
@@ -0,0 +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"]}