contentbase 0.4.0 → 0.4.1

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 (322) hide show
  1. package/dist/adapters/node-fs.d.ts +17 -0
  2. package/dist/adapters/node-fs.d.ts.map +1 -0
  3. package/dist/adapters/node-fs.js +71 -0
  4. package/dist/adapters/node-fs.js.map +1 -0
  5. package/dist/ast-query.d.ts +44 -0
  6. package/dist/ast-query.d.ts.map +1 -0
  7. package/dist/ast-query.js +95 -0
  8. package/dist/ast-query.js.map +1 -0
  9. package/dist/base-model.d.ts +8 -0
  10. package/dist/base-model.d.ts.map +1 -0
  11. package/dist/base-model.js +12 -0
  12. package/dist/base-model.js.map +1 -0
  13. package/dist/cli/commands/action.d.ts +2 -0
  14. package/dist/cli/commands/action.d.ts.map +1 -0
  15. package/dist/cli/commands/action.js +73 -0
  16. package/dist/cli/commands/action.js.map +1 -0
  17. package/dist/cli/commands/api/endpoints/actions.d.ts +13 -0
  18. package/dist/cli/commands/api/endpoints/actions.d.ts.map +1 -0
  19. package/dist/cli/commands/api/endpoints/actions.js +28 -0
  20. package/dist/cli/commands/api/endpoints/actions.js.map +1 -0
  21. package/dist/cli/commands/api/endpoints/doc.d.ts +5 -0
  22. package/dist/cli/commands/api/endpoints/doc.d.ts.map +1 -0
  23. package/dist/cli/commands/api/endpoints/doc.js +186 -0
  24. package/dist/cli/commands/api/endpoints/doc.js.map +1 -0
  25. package/dist/cli/commands/api/endpoints/docs-index.d.ts +8 -0
  26. package/dist/cli/commands/api/endpoints/docs-index.d.ts.map +1 -0
  27. package/dist/cli/commands/api/endpoints/docs-index.js +23 -0
  28. package/dist/cli/commands/api/endpoints/docs-index.js.map +1 -0
  29. package/dist/cli/commands/api/endpoints/document.d.ts +47 -0
  30. package/dist/cli/commands/api/endpoints/document.d.ts.map +1 -0
  31. package/dist/cli/commands/api/endpoints/document.js +146 -0
  32. package/dist/cli/commands/api/endpoints/document.js.map +1 -0
  33. package/dist/cli/commands/api/endpoints/documents.d.ts +35 -0
  34. package/dist/cli/commands/api/endpoints/documents.d.ts.map +1 -0
  35. package/dist/cli/commands/api/endpoints/documents.js +56 -0
  36. package/dist/cli/commands/api/endpoints/documents.js.map +1 -0
  37. package/dist/cli/commands/api/endpoints/index.d.ts +22 -0
  38. package/dist/cli/commands/api/endpoints/index.d.ts.map +1 -0
  39. package/dist/cli/commands/api/endpoints/index.js +38 -0
  40. package/dist/cli/commands/api/endpoints/index.js.map +1 -0
  41. package/dist/cli/commands/api/endpoints/inspect.d.ts +10 -0
  42. package/dist/cli/commands/api/endpoints/inspect.d.ts.map +1 -0
  43. package/dist/cli/commands/api/endpoints/inspect.js +15 -0
  44. package/dist/cli/commands/api/endpoints/inspect.js.map +1 -0
  45. package/dist/cli/commands/api/endpoints/models.d.ts +5 -0
  46. package/dist/cli/commands/api/endpoints/models.d.ts.map +1 -0
  47. package/dist/cli/commands/api/endpoints/models.js +9 -0
  48. package/dist/cli/commands/api/endpoints/models.js.map +1 -0
  49. package/dist/cli/commands/api/endpoints/query.d.ts +40 -0
  50. package/dist/cli/commands/api/endpoints/query.d.ts.map +1 -0
  51. package/dist/cli/commands/api/endpoints/query.js +106 -0
  52. package/dist/cli/commands/api/endpoints/query.js.map +1 -0
  53. package/dist/cli/commands/api/endpoints/root.d.ts +5 -0
  54. package/dist/cli/commands/api/endpoints/root.d.ts.map +1 -0
  55. package/dist/cli/commands/api/endpoints/root.js +7 -0
  56. package/dist/cli/commands/api/endpoints/root.js.map +1 -0
  57. package/dist/cli/commands/api/endpoints/search-reindex.d.ts +10 -0
  58. package/dist/cli/commands/api/endpoints/search-reindex.d.ts.map +1 -0
  59. package/dist/cli/commands/api/endpoints/search-reindex.js +38 -0
  60. package/dist/cli/commands/api/endpoints/search-reindex.js.map +1 -0
  61. package/dist/cli/commands/api/endpoints/search-status.d.ts +7 -0
  62. package/dist/cli/commands/api/endpoints/search-status.d.ts.map +1 -0
  63. package/dist/cli/commands/api/endpoints/search-status.js +33 -0
  64. package/dist/cli/commands/api/endpoints/search-status.js.map +1 -0
  65. package/dist/cli/commands/api/endpoints/search.d.ts +24 -0
  66. package/dist/cli/commands/api/endpoints/search.d.ts.map +1 -0
  67. package/dist/cli/commands/api/endpoints/search.js +61 -0
  68. package/dist/cli/commands/api/endpoints/search.js.map +1 -0
  69. package/dist/cli/commands/api/endpoints/semantic-search.d.ts +28 -0
  70. package/dist/cli/commands/api/endpoints/semantic-search.d.ts.map +1 -0
  71. package/dist/cli/commands/api/endpoints/semantic-search.js +76 -0
  72. package/dist/cli/commands/api/endpoints/semantic-search.js.map +1 -0
  73. package/dist/cli/commands/api/endpoints/text-search.d.ts +17 -0
  74. package/dist/cli/commands/api/endpoints/text-search.d.ts.map +1 -0
  75. package/dist/cli/commands/api/endpoints/text-search.js +55 -0
  76. package/dist/cli/commands/api/endpoints/text-search.js.map +1 -0
  77. package/dist/cli/commands/api/endpoints/validate.d.ts +12 -0
  78. package/dist/cli/commands/api/endpoints/validate.d.ts.map +1 -0
  79. package/dist/cli/commands/api/endpoints/validate.js +27 -0
  80. package/dist/cli/commands/api/endpoints/validate.js.map +1 -0
  81. package/dist/cli/commands/api/helpers.d.ts +8 -0
  82. package/dist/cli/commands/api/helpers.d.ts.map +1 -0
  83. package/dist/cli/commands/api/helpers.js +89 -0
  84. package/dist/cli/commands/api/helpers.js.map +1 -0
  85. package/dist/cli/commands/console.d.ts +2 -0
  86. package/dist/cli/commands/console.d.ts.map +1 -0
  87. package/dist/cli/commands/console.js +117 -0
  88. package/dist/cli/commands/console.js.map +1 -0
  89. package/dist/cli/commands/create.d.ts +2 -0
  90. package/dist/cli/commands/create.d.ts.map +1 -0
  91. package/dist/cli/commands/create.js +185 -0
  92. package/dist/cli/commands/create.js.map +1 -0
  93. package/dist/cli/commands/embed.d.ts +2 -0
  94. package/dist/cli/commands/embed.d.ts.map +1 -0
  95. package/dist/cli/commands/embed.js +231 -0
  96. package/dist/cli/commands/embed.js.map +1 -0
  97. package/dist/cli/commands/export.d.ts +2 -0
  98. package/dist/cli/commands/export.d.ts.map +1 -0
  99. package/dist/cli/commands/export.js +55 -0
  100. package/dist/cli/commands/export.js.map +1 -0
  101. package/dist/cli/commands/extract.d.ts +2 -0
  102. package/dist/cli/commands/extract.d.ts.map +1 -0
  103. package/dist/cli/commands/extract.js +149 -0
  104. package/dist/cli/commands/extract.js.map +1 -0
  105. package/dist/cli/commands/help.d.ts +2 -0
  106. package/dist/cli/commands/help.d.ts.map +1 -0
  107. package/dist/cli/commands/help.js +58 -0
  108. package/dist/cli/commands/help.js.map +1 -0
  109. package/dist/cli/commands/index.d.ts +18 -0
  110. package/dist/cli/commands/index.d.ts.map +1 -0
  111. package/dist/cli/commands/index.js +19 -0
  112. package/dist/cli/commands/index.js.map +1 -0
  113. package/dist/cli/commands/init.d.ts +2 -0
  114. package/dist/cli/commands/init.d.ts.map +1 -0
  115. package/dist/cli/commands/init.js +82 -0
  116. package/dist/cli/commands/init.js.map +1 -0
  117. package/dist/cli/commands/inspect.d.ts +2 -0
  118. package/dist/cli/commands/inspect.d.ts.map +1 -0
  119. package/dist/cli/commands/inspect.js +53 -0
  120. package/dist/cli/commands/inspect.js.map +1 -0
  121. package/dist/cli/commands/mcp.d.ts +2 -0
  122. package/dist/cli/commands/mcp.d.ts.map +1 -0
  123. package/dist/cli/commands/mcp.js +92 -0
  124. package/dist/cli/commands/mcp.js.map +1 -0
  125. package/dist/cli/commands/search.d.ts +2 -0
  126. package/dist/cli/commands/search.d.ts.map +1 -0
  127. package/dist/cli/commands/search.js +212 -0
  128. package/dist/cli/commands/search.js.map +1 -0
  129. package/dist/cli/commands/serve.d.ts +2 -0
  130. package/dist/cli/commands/serve.d.ts.map +1 -0
  131. package/dist/cli/commands/serve.js +298 -0
  132. package/dist/cli/commands/serve.js.map +1 -0
  133. package/dist/cli/commands/summary.d.ts +2 -0
  134. package/dist/cli/commands/summary.d.ts.map +1 -0
  135. package/dist/cli/commands/summary.js +58 -0
  136. package/dist/cli/commands/summary.js.map +1 -0
  137. package/dist/cli/commands/teach.d.ts +2 -0
  138. package/dist/cli/commands/teach.d.ts.map +1 -0
  139. package/dist/cli/commands/teach.js +80 -0
  140. package/dist/cli/commands/teach.js.map +1 -0
  141. package/dist/cli/commands/text-search.d.ts +2 -0
  142. package/dist/cli/commands/text-search.d.ts.map +1 -0
  143. package/dist/cli/commands/text-search.js +125 -0
  144. package/dist/cli/commands/text-search.js.map +1 -0
  145. package/dist/cli/commands/update.d.ts +2 -0
  146. package/dist/cli/commands/update.d.ts.map +1 -0
  147. package/dist/cli/commands/update.js +167 -0
  148. package/dist/cli/commands/update.js.map +1 -0
  149. package/dist/cli/commands/validate.d.ts +2 -0
  150. package/dist/cli/commands/validate.d.ts.map +1 -0
  151. package/dist/cli/commands/validate.js +129 -0
  152. package/dist/cli/commands/validate.js.map +1 -0
  153. package/dist/cli/index.d.ts +3 -0
  154. package/dist/cli/index.d.ts.map +1 -0
  155. package/dist/cli/index.js +84 -0
  156. package/dist/cli/index.js.map +1 -0
  157. package/dist/cli/load-collection.d.ts +7 -0
  158. package/dist/cli/load-collection.d.ts.map +1 -0
  159. package/dist/cli/load-collection.js +201 -0
  160. package/dist/cli/load-collection.js.map +1 -0
  161. package/dist/cli/registry.d.ts +17 -0
  162. package/dist/cli/registry.d.ts.map +1 -0
  163. package/dist/cli/registry.js +16 -0
  164. package/dist/cli/registry.js.map +1 -0
  165. package/dist/cnotes +0 -0
  166. package/dist/collection.d.ts +145 -0
  167. package/dist/collection.d.ts.map +1 -0
  168. package/dist/collection.js +684 -0
  169. package/dist/collection.js.map +1 -0
  170. package/dist/define-model.d.ts +45 -0
  171. package/dist/define-model.d.ts.map +1 -0
  172. package/dist/define-model.js +106 -0
  173. package/dist/define-model.js.map +1 -0
  174. package/dist/document.d.ts +119 -0
  175. package/dist/document.d.ts.map +1 -0
  176. package/dist/document.js +418 -0
  177. package/dist/document.js.map +1 -0
  178. package/dist/extract-sections.d.ts +46 -0
  179. package/dist/extract-sections.d.ts.map +1 -0
  180. package/dist/extract-sections.js +153 -0
  181. package/dist/extract-sections.js.map +1 -0
  182. package/dist/index.d.ts +28 -0
  183. package/dist/index.d.ts.map +1 -0
  184. package/dist/index.js +31 -0
  185. package/dist/index.js.map +1 -0
  186. package/dist/mcp/helpers.d.ts +14 -0
  187. package/dist/mcp/helpers.d.ts.map +1 -0
  188. package/dist/mcp/helpers.js +7 -0
  189. package/dist/mcp/helpers.js.map +1 -0
  190. package/dist/mcp/model-info.d.ts +2 -0
  191. package/dist/mcp/model-info.d.ts.map +1 -0
  192. package/dist/mcp/model-info.js +94 -0
  193. package/dist/mcp/model-info.js.map +1 -0
  194. package/dist/mcp/prompts.d.ts +2 -0
  195. package/dist/mcp/prompts.d.ts.map +1 -0
  196. package/dist/mcp/prompts.js +180 -0
  197. package/dist/mcp/prompts.js.map +1 -0
  198. package/dist/mcp/readme.d.ts +2 -0
  199. package/dist/mcp/readme.d.ts.map +1 -0
  200. package/dist/mcp/readme.js +71 -0
  201. package/dist/mcp/readme.js.map +1 -0
  202. package/dist/mcp/resources.d.ts +2 -0
  203. package/dist/mcp/resources.d.ts.map +1 -0
  204. package/dist/mcp/resources.js +85 -0
  205. package/dist/mcp/resources.js.map +1 -0
  206. package/dist/mcp/server.d.ts +18 -0
  207. package/dist/mcp/server.d.ts.map +1 -0
  208. package/dist/mcp/server.js +83 -0
  209. package/dist/mcp/server.js.map +1 -0
  210. package/dist/mcp/tools/mutation.d.ts +2 -0
  211. package/dist/mcp/tools/mutation.d.ts.map +1 -0
  212. package/dist/mcp/tools/mutation.js +155 -0
  213. package/dist/mcp/tools/mutation.js.map +1 -0
  214. package/dist/mcp/tools/query.d.ts +2 -0
  215. package/dist/mcp/tools/query.d.ts.map +1 -0
  216. package/dist/mcp/tools/query.js +130 -0
  217. package/dist/mcp/tools/query.js.map +1 -0
  218. package/dist/mcp/tools/search.d.ts +2 -0
  219. package/dist/mcp/tools/search.d.ts.map +1 -0
  220. package/dist/mcp/tools/search.js +168 -0
  221. package/dist/mcp/tools/search.js.map +1 -0
  222. package/dist/model-instance.d.ts +11 -0
  223. package/dist/model-instance.d.ts.map +1 -0
  224. package/dist/model-instance.js +208 -0
  225. package/dist/model-instance.js.map +1 -0
  226. package/dist/node-shortcuts.d.ts +25 -0
  227. package/dist/node-shortcuts.d.ts.map +1 -0
  228. package/dist/node-shortcuts.js +67 -0
  229. package/dist/node-shortcuts.js.map +1 -0
  230. package/dist/parse.d.ts +45 -0
  231. package/dist/parse.d.ts.map +1 -0
  232. package/dist/parse.js +98 -0
  233. package/dist/parse.js.map +1 -0
  234. package/dist/query/collection-query.d.ts +39 -0
  235. package/dist/query/collection-query.d.ts.map +1 -0
  236. package/dist/query/collection-query.js +184 -0
  237. package/dist/query/collection-query.js.map +1 -0
  238. package/dist/query/index.d.ts +8 -0
  239. package/dist/query/index.d.ts.map +1 -0
  240. package/dist/query/index.js +5 -0
  241. package/dist/query/index.js.map +1 -0
  242. package/dist/query/operators.d.ts +3 -0
  243. package/dist/query/operators.d.ts.map +1 -0
  244. package/dist/query/operators.js +18 -0
  245. package/dist/query/operators.js.map +1 -0
  246. package/dist/query/query-builder.d.ts +34 -0
  247. package/dist/query/query-builder.d.ts.map +1 -0
  248. package/dist/query/query-builder.js +84 -0
  249. package/dist/query/query-builder.js.map +1 -0
  250. package/dist/query/query-dsl.d.ts +36 -0
  251. package/dist/query/query-dsl.d.ts.map +1 -0
  252. package/dist/query/query-dsl.js +195 -0
  253. package/dist/query/query-dsl.js.map +1 -0
  254. package/dist/relationships/belongs-to.d.ts +9 -0
  255. package/dist/relationships/belongs-to.d.ts.map +1 -0
  256. package/dist/relationships/belongs-to.js +34 -0
  257. package/dist/relationships/belongs-to.js.map +1 -0
  258. package/dist/relationships/has-many.d.ts +23 -0
  259. package/dist/relationships/has-many.d.ts.map +1 -0
  260. package/dist/relationships/has-many.js +136 -0
  261. package/dist/relationships/has-many.js.map +1 -0
  262. package/dist/relationships/index.d.ts +26 -0
  263. package/dist/relationships/index.d.ts.map +1 -0
  264. package/dist/relationships/index.js +32 -0
  265. package/dist/relationships/index.js.map +1 -0
  266. package/dist/relationships/types.d.ts +2 -0
  267. package/dist/relationships/types.d.ts.map +1 -0
  268. package/dist/relationships/types.js +2 -0
  269. package/dist/relationships/types.js.map +1 -0
  270. package/dist/search/document-inputs.d.ts +30 -0
  271. package/dist/search/document-inputs.d.ts.map +1 -0
  272. package/dist/search/document-inputs.js +52 -0
  273. package/dist/search/document-inputs.js.map +1 -0
  274. package/dist/search/luca-semantic-search.d.ts +27 -0
  275. package/dist/search/luca-semantic-search.d.ts.map +1 -0
  276. package/dist/search/luca-semantic-search.js +56 -0
  277. package/dist/search/luca-semantic-search.js.map +1 -0
  278. package/dist/section.d.ts +21 -0
  279. package/dist/section.d.ts.map +1 -0
  280. package/dist/section.js +21 -0
  281. package/dist/section.js.map +1 -0
  282. package/dist/types.d.ts +185 -0
  283. package/dist/types.d.ts.map +1 -0
  284. package/dist/types.js +2 -0
  285. package/dist/types.js.map +1 -0
  286. package/dist/utils/index.d.ts +9 -0
  287. package/dist/utils/index.d.ts.map +1 -0
  288. package/dist/utils/index.js +8 -0
  289. package/dist/utils/index.js.map +1 -0
  290. package/dist/utils/inflect.d.ts +6 -0
  291. package/dist/utils/inflect.d.ts.map +1 -0
  292. package/dist/utils/inflect.js +75 -0
  293. package/dist/utils/inflect.js.map +1 -0
  294. package/dist/utils/match-pattern.d.ts +25 -0
  295. package/dist/utils/match-pattern.d.ts.map +1 -0
  296. package/dist/utils/match-pattern.js +52 -0
  297. package/dist/utils/match-pattern.js.map +1 -0
  298. package/dist/utils/normalize-headings.d.ts +8 -0
  299. package/dist/utils/normalize-headings.d.ts.map +1 -0
  300. package/dist/utils/normalize-headings.js +19 -0
  301. package/dist/utils/normalize-headings.js.map +1 -0
  302. package/dist/utils/parse-table.d.ts +7 -0
  303. package/dist/utils/parse-table.d.ts.map +1 -0
  304. package/dist/utils/parse-table.js +17 -0
  305. package/dist/utils/parse-table.js.map +1 -0
  306. package/dist/utils/read-directory.d.ts +5 -0
  307. package/dist/utils/read-directory.d.ts.map +1 -0
  308. package/dist/utils/read-directory.js +29 -0
  309. package/dist/utils/read-directory.js.map +1 -0
  310. package/dist/utils/stringify-ast.d.ts +6 -0
  311. package/dist/utils/stringify-ast.d.ts.map +1 -0
  312. package/dist/utils/stringify-ast.js +8 -0
  313. package/dist/utils/stringify-ast.js.map +1 -0
  314. package/dist/utils/strip-markdown.d.ts +11 -0
  315. package/dist/utils/strip-markdown.d.ts.map +1 -0
  316. package/dist/utils/strip-markdown.js +48 -0
  317. package/dist/utils/strip-markdown.js.map +1 -0
  318. package/dist/validator.d.ts +10 -0
  319. package/dist/validator.d.ts.map +1 -0
  320. package/dist/validator.js +55 -0
  321. package/dist/validator.js.map +1 -0
  322. package/package.json +1 -1
@@ -0,0 +1,185 @@
1
+ import type { z } from "zod";
2
+ import type { AstQuery } from "./ast-query";
3
+ /** The raw item stored in Collection.items before a Document is created */
4
+ export interface CollectionItem {
5
+ raw: string;
6
+ content: string;
7
+ meta: Record<string, unknown>;
8
+ path: string;
9
+ createdAt: Date;
10
+ updatedAt: Date;
11
+ size: number;
12
+ }
13
+ /** File metadata returned by stat and listFiles */
14
+ export interface FileStat {
15
+ createdAt: Date;
16
+ updatedAt: Date;
17
+ size: number;
18
+ }
19
+ /** A file entry returned from listFiles — key plus pre-fetched stat */
20
+ export interface FileEntry {
21
+ key: string;
22
+ stat: FileStat;
23
+ }
24
+ /**
25
+ * Abstracts file system operations so Collections can run on top of
26
+ * any storage backend (local disk, Cloudflare R2, S3, etc.).
27
+ *
28
+ * Implement this interface and pass it as `adapter` in CollectionOptions.
29
+ */
30
+ export interface StorageAdapter {
31
+ /** List all file keys under rootPath whose names match the extension pattern.
32
+ * Returns key + pre-fetched stat so load() avoids per-file round-trips. */
33
+ listFiles(rootPath: string, match: RegExp): Promise<FileEntry[]>;
34
+ /** Read file content as a UTF-8 string */
35
+ readFile(key: string): Promise<string>;
36
+ /** Fetch metadata for a single key */
37
+ stat(key: string): Promise<FileStat>;
38
+ /** Write content to key, creating any parent directories/prefixes as needed */
39
+ writeFile(key: string, content: string): Promise<void>;
40
+ /** Delete the file at key (silently succeeds if the key does not exist) */
41
+ deleteFile(key: string): Promise<void>;
42
+ /** Join a root and path segments into a full key (e.g. path.resolve for local FS) */
43
+ join(root: string, ...parts: string[]): string;
44
+ /** Strip the root prefix from a full key to get a relative key */
45
+ relative(root: string, key: string): string;
46
+ /** Return the file extension including the leading dot (e.g. ".md") */
47
+ extname(key: string): string;
48
+ }
49
+ /** Options when constructing a Collection */
50
+ export interface CollectionOptions {
51
+ rootPath: string;
52
+ extensions?: string[];
53
+ name?: string;
54
+ /** When true (default), load() looks for a models.{ts,js,mjs} in rootPath and auto-registers exported model definitions. */
55
+ autoDiscover?: boolean;
56
+ /** Optional custom module loader for models.ts discovery. When provided, used instead of native import(). Enables VM-based loading in compiled binaries where node_modules aren't available. */
57
+ moduleLoader?: (filePath: string) => Record<string, any> | Promise<Record<string, any>>;
58
+ /**
59
+ * Storage adapter for file system operations.
60
+ * Defaults to NodeStorageAdapter (local disk via fs/promises).
61
+ * Swap in a custom adapter to use Cloudflare R2, S3, or any other backend.
62
+ */
63
+ adapter?: StorageAdapter;
64
+ }
65
+ /**
66
+ * A section definition declares how to extract structured data from
67
+ * a heading-based section of a document.
68
+ */
69
+ export interface SectionDefinition<T = unknown> {
70
+ /** The heading text to find in the document */
71
+ heading: string;
72
+ /** Alternative heading texts to try if the primary heading is not found */
73
+ alternatives?: string[];
74
+ /** Extract structured data from the section's AST query */
75
+ extract: (query: AstQuery) => T;
76
+ /** Optional Zod schema to validate the extracted value */
77
+ schema?: z.ZodType<T>;
78
+ }
79
+ export interface HasManyDefinition<TTarget extends ModelDefinition<any, any, any, any, any> = any> {
80
+ type: "hasMany";
81
+ target: () => TTarget;
82
+ /** Extract children from sub-headings under this heading in the parent document */
83
+ heading?: string;
84
+ /** Find children by querying for target documents where meta[foreignKey] matches this document's slug */
85
+ foreignKey?: string;
86
+ meta?: (self: any) => Record<string, unknown>;
87
+ id?: (slug: string) => string;
88
+ }
89
+ export interface BelongsToDefinition<TTarget extends ModelDefinition<any, any, any, any, any> = any> {
90
+ type: "belongsTo";
91
+ target: () => TTarget;
92
+ foreignKey: (doc: DocumentRef) => string;
93
+ }
94
+ export type RelationshipDefinition<TTarget extends ModelDefinition<any, any, any, any, any> = any> = HasManyDefinition<TTarget> | BelongsToDefinition<TTarget>;
95
+ /** A minimal document reference for relationship foreign key functions */
96
+ export interface DocumentRef {
97
+ id: string;
98
+ meta: Record<string, unknown>;
99
+ }
100
+ /**
101
+ * ModelDefinition is the static config object produced by defineModel().
102
+ * It carries all type parameters needed to fully type a model instance.
103
+ *
104
+ * TName - string literal type for the model name
105
+ * TMeta - the Zod schema type for frontmatter metadata
106
+ * TSections - record of section definitions
107
+ * TRelationships - record of relationship definitions
108
+ * TComputed - record of computed property functions
109
+ */
110
+ export interface ModelDefinition<TName extends string = string, TMeta extends z.ZodType = z.ZodType, TSections extends Record<string, SectionDefinition<any>> = Record<string, never>, TRelationships extends Record<string, RelationshipDefinition<any>> = Record<string, never>, TComputed extends Record<string, (self: any) => any> = Record<string, never>> {
111
+ readonly name: TName;
112
+ prefix: string;
113
+ meta: TMeta;
114
+ sections: TSections;
115
+ relationships: TRelationships;
116
+ computed: TComputed;
117
+ /** Human-readable description of this model, auto-generated if not provided */
118
+ description: string;
119
+ /** Named scopes — reusable query presets */
120
+ scopes: Record<string, (query: any) => any>;
121
+ match?: (doc: DocumentRef) => boolean;
122
+ defaults?: Partial<z.input<TMeta>>;
123
+ pattern?: string | string[];
124
+ /** Glob patterns or RegExp to exclude matching pathIds from queries, listings, and TOC */
125
+ exclude?: (string | RegExp)[];
126
+ /** When true, documents are not required to have an H1 title */
127
+ titleOptional?: boolean;
128
+ /** The inferred Zod schema for convenience (same as meta) */
129
+ schema: TMeta;
130
+ }
131
+ /**
132
+ * InferModelInstance takes a ModelDefinition and produces the shape
133
+ * of the runtime model instance.
134
+ */
135
+ export type InferModelInstance<TDef extends ModelDefinition<any, any, any, any, any>> = TDef extends ModelDefinition<infer _TName, infer TMeta, infer TSections, infer TRelationships, infer TComputed> ? {
136
+ readonly id: string;
137
+ readonly title: string;
138
+ readonly slug: string;
139
+ readonly document: import("./document.js").Document;
140
+ readonly collection: import("./collection.js").Collection;
141
+ readonly createdAt: Date | undefined;
142
+ readonly updatedAt: Date | undefined;
143
+ readonly size: number | undefined;
144
+ readonly meta: z.infer<TMeta>;
145
+ readonly sections: {
146
+ readonly [K in keyof TSections]: TSections[K] extends SectionDefinition<infer U> ? U : never;
147
+ };
148
+ readonly relationships: {
149
+ [K in keyof TRelationships]: TRelationships[K] extends HasManyDefinition<infer TTarget> ? HasManyAccessor<TTarget> : TRelationships[K] extends BelongsToDefinition<infer TTarget> ? BelongsToAccessor<TTarget> : never;
150
+ };
151
+ readonly computed: {
152
+ readonly [K in keyof TComputed]: TComputed[K] extends (self: any) => infer R ? R : never;
153
+ };
154
+ validate(): Promise<ValidationResult>;
155
+ readonly errors: Map<string, import("zod").ZodIssue>;
156
+ readonly hasErrors: boolean;
157
+ toJSON(options?: SerializeOptions): Record<string, unknown>;
158
+ runAction(name: string, options?: Record<string, unknown>): Promise<unknown>;
159
+ save(options?: SaveOptions): Promise<void>;
160
+ } : never;
161
+ export interface HasManyAccessor<TTarget extends ModelDefinition<any, any, any, any, any>> {
162
+ fetchAll(): InferModelInstance<TTarget>[];
163
+ first(): InferModelInstance<TTarget> | undefined;
164
+ last(): InferModelInstance<TTarget> | undefined;
165
+ create(): Promise<InferModelInstance<TTarget>[]>;
166
+ }
167
+ export interface BelongsToAccessor<TTarget extends ModelDefinition<any, any, any, any, any>> {
168
+ fetch(): InferModelInstance<TTarget>;
169
+ }
170
+ export interface ValidationResult {
171
+ valid: boolean;
172
+ errors: import("zod").ZodIssue[];
173
+ }
174
+ export interface SerializeOptions {
175
+ related?: string[];
176
+ sections?: string[];
177
+ computed?: string[];
178
+ }
179
+ export interface SaveOptions {
180
+ normalize?: boolean;
181
+ extension?: string;
182
+ }
183
+ /** Factory function type used to break circular dependency between model-instance and relationships */
184
+ export type ModelInstanceFactory = (doc: import("./document.js").Document, definition: ModelDefinition<any, any, any, any, any>, collection: import("./collection.js").Collection) => any;
185
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
package/dist/types.js ADDED
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":""}
@@ -0,0 +1,9 @@
1
+ export { pluralize, singularize, kebabCase, camelCase, upperFirst, } from "./inflect";
2
+ export { stringifyAst } from "./stringify-ast";
3
+ export { parseTable } from "./parse-table";
4
+ export { normalizeHeadings } from "./normalize-headings";
5
+ export { readDirectory } from "./read-directory";
6
+ export { matchPattern, matchPatterns } from "./match-pattern";
7
+ export { stripMarkdown } from "./strip-markdown";
8
+ export type { StripMarkdownOptions } from "./strip-markdown";
9
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/utils/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,SAAS,EACT,WAAW,EACX,SAAS,EACT,SAAS,EACT,UAAU,GACX,MAAM,WAAW,CAAC;AACnB,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAC/C,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAC3C,OAAO,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AACzD,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AACjD,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAC9D,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AACjD,YAAY,EAAE,oBAAoB,EAAE,MAAM,kBAAkB,CAAC"}
@@ -0,0 +1,8 @@
1
+ export { pluralize, singularize, kebabCase, camelCase, upperFirst, } from "./inflect";
2
+ export { stringifyAst } from "./stringify-ast";
3
+ export { parseTable } from "./parse-table";
4
+ export { normalizeHeadings } from "./normalize-headings";
5
+ export { readDirectory } from "./read-directory";
6
+ export { matchPattern, matchPatterns } from "./match-pattern";
7
+ export { stripMarkdown } from "./strip-markdown";
8
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/utils/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,SAAS,EACT,WAAW,EACX,SAAS,EACT,SAAS,EACT,UAAU,GACX,MAAM,WAAW,CAAC;AACnB,OAAO,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAC;AAC/C,OAAO,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAC3C,OAAO,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AACzD,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AACjD,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAC9D,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC"}
@@ -0,0 +1,6 @@
1
+ export declare function pluralize(word: string): string;
2
+ export declare function singularize(word: string): string;
3
+ export declare function kebabCase(str: string): string;
4
+ export declare function camelCase(str: string): string;
5
+ export declare function upperFirst(str: string): string;
6
+ //# sourceMappingURL=inflect.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"inflect.d.ts","sourceRoot":"","sources":["../../src/utils/inflect.ts"],"names":[],"mappings":"AA4BA,wBAAgB,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAa9C;AAED,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAoBhD;AAED,wBAAgB,SAAS,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAM7C;AAED,wBAAgB,SAAS,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAI7C;AAED,wBAAgB,UAAU,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAE9C"}
@@ -0,0 +1,75 @@
1
+ const IRREGULAR = {
2
+ person: "people",
3
+ child: "children",
4
+ man: "men",
5
+ woman: "women",
6
+ mouse: "mice",
7
+ goose: "geese",
8
+ ox: "oxen",
9
+ datum: "data",
10
+ index: "indices",
11
+ matrix: "matrices",
12
+ vertex: "vertices",
13
+ };
14
+ const UNCOUNTABLE = new Set([
15
+ "sheep",
16
+ "fish",
17
+ "deer",
18
+ "series",
19
+ "species",
20
+ "money",
21
+ "rice",
22
+ "information",
23
+ "equipment",
24
+ "media",
25
+ "data",
26
+ ]);
27
+ export function pluralize(word) {
28
+ const lower = word.toLowerCase();
29
+ if (UNCOUNTABLE.has(lower))
30
+ return word;
31
+ if (IRREGULAR[lower]) {
32
+ return word[0] + IRREGULAR[lower].slice(1);
33
+ }
34
+ if (/s$/i.test(word))
35
+ return word;
36
+ if (/([^aeiou])y$/i.test(word))
37
+ return word.replace(/y$/i, "ies");
38
+ if (/(x|ch|ss|sh)$/i.test(word))
39
+ return word + "es";
40
+ return word + "s";
41
+ }
42
+ export function singularize(word) {
43
+ const lower = word.toLowerCase();
44
+ if (UNCOUNTABLE.has(lower))
45
+ return word;
46
+ const irregularEntry = Object.entries(IRREGULAR).find(([, v]) => v === lower);
47
+ if (irregularEntry) {
48
+ return word[0] + irregularEntry[0].slice(1);
49
+ }
50
+ if (word.endsWith("ies"))
51
+ return word.slice(0, -3) + "y";
52
+ if (/ses$/i.test(word) || /xes$/i.test(word) || /ches$/i.test(word) || /shes$/i.test(word)) {
53
+ return word.slice(0, -2);
54
+ }
55
+ if (word.endsWith("s") && !word.endsWith("ss")) {
56
+ return word.slice(0, -1);
57
+ }
58
+ return word;
59
+ }
60
+ export function kebabCase(str) {
61
+ return str
62
+ .replace(/([a-z])([A-Z])/g, "$1-$2")
63
+ .replace(/[\s_]+/g, "-")
64
+ .replace(/[^\w-]/g, "")
65
+ .toLowerCase();
66
+ }
67
+ export function camelCase(str) {
68
+ return str
69
+ .replace(/[-_\s]+(.)?/g, (_, c) => (c ? c.toUpperCase() : ""))
70
+ .replace(/^[A-Z]/, (c) => c.toLowerCase());
71
+ }
72
+ export function upperFirst(str) {
73
+ return str.charAt(0).toUpperCase() + str.slice(1);
74
+ }
75
+ //# sourceMappingURL=inflect.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"inflect.js","sourceRoot":"","sources":["../../src/utils/inflect.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,25 @@
1
+ /**
2
+ * Express-style path pattern matching for extracting named parameters
3
+ * from document pathIds.
4
+ *
5
+ * Patterns use `:param` syntax for named segments and literal segments
6
+ * for exact matching. Segment counts must match exactly.
7
+ *
8
+ * Examples:
9
+ * matchPattern("plans/:project/:slug", "plans/acme/launch")
10
+ * // => { project: "acme", slug: "launch" }
11
+ *
12
+ * matchPattern("plans/:project/:slug", "stories/acme/launch")
13
+ * // => null (literal mismatch)
14
+ */
15
+ /**
16
+ * Match a single pattern against a pathId.
17
+ * Returns extracted params on match, null on mismatch.
18
+ */
19
+ export declare function matchPattern(pattern: string, pathId: string): Record<string, string> | null;
20
+ /**
21
+ * Try multiple patterns against a pathId, returning the first match.
22
+ * Accepts a single pattern string or an array of patterns.
23
+ */
24
+ export declare function matchPatterns(patterns: string | string[], pathId: string): Record<string, string> | null;
25
+ //# sourceMappingURL=match-pattern.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"match-pattern.d.ts","sourceRoot":"","sources":["../../src/utils/match-pattern.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH;;;GAGG;AACH,wBAAgB,YAAY,CAC1B,OAAO,EAAE,MAAM,EACf,MAAM,EAAE,MAAM,GACb,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,IAAI,CAsB/B;AAED;;;GAGG;AACH,wBAAgB,aAAa,CAC3B,QAAQ,EAAE,MAAM,GAAG,MAAM,EAAE,EAC3B,MAAM,EAAE,MAAM,GACb,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,IAAI,CAW/B"}
@@ -0,0 +1,52 @@
1
+ /**
2
+ * Express-style path pattern matching for extracting named parameters
3
+ * from document pathIds.
4
+ *
5
+ * Patterns use `:param` syntax for named segments and literal segments
6
+ * for exact matching. Segment counts must match exactly.
7
+ *
8
+ * Examples:
9
+ * matchPattern("plans/:project/:slug", "plans/acme/launch")
10
+ * // => { project: "acme", slug: "launch" }
11
+ *
12
+ * matchPattern("plans/:project/:slug", "stories/acme/launch")
13
+ * // => null (literal mismatch)
14
+ */
15
+ /**
16
+ * Match a single pattern against a pathId.
17
+ * Returns extracted params on match, null on mismatch.
18
+ */
19
+ export function matchPattern(pattern, pathId) {
20
+ const patternParts = pattern.split("/").filter(Boolean);
21
+ const pathParts = pathId.split("/").filter(Boolean);
22
+ if (patternParts.length !== pathParts.length) {
23
+ return null;
24
+ }
25
+ const params = {};
26
+ for (let i = 0; i < patternParts.length; i++) {
27
+ const pat = patternParts[i];
28
+ const val = pathParts[i];
29
+ if (pat.startsWith(":")) {
30
+ params[pat.slice(1)] = val;
31
+ }
32
+ else if (pat !== val) {
33
+ return null;
34
+ }
35
+ }
36
+ return params;
37
+ }
38
+ /**
39
+ * Try multiple patterns against a pathId, returning the first match.
40
+ * Accepts a single pattern string or an array of patterns.
41
+ */
42
+ export function matchPatterns(patterns, pathId) {
43
+ const list = Array.isArray(patterns) ? patterns : [patterns];
44
+ for (const pattern of list) {
45
+ const result = matchPattern(pattern, pathId);
46
+ if (result !== null) {
47
+ return result;
48
+ }
49
+ }
50
+ return null;
51
+ }
52
+ //# sourceMappingURL=match-pattern.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"match-pattern.js","sourceRoot":"","sources":["../../src/utils/match-pattern.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH;;;GAGG;AACH,MAAM,UAAU,YAAY,CAC1B,OAAe,EACf,MAAc;IAEd,MAAM,YAAY,GAAG,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IACxD,MAAM,SAAS,GAAG,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IAEpD,IAAI,YAAY,CAAC,MAAM,KAAK,SAAS,CAAC,MAAM,EAAE,CAAC;QAC7C,OAAO,IAAI,CAAC;IACd,CAAC;IAED,MAAM,MAAM,GAA2B,EAAE,CAAC;IAE1C,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,YAAY,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QAC7C,MAAM,GAAG,GAAG,YAAY,CAAC,CAAC,CAAE,CAAC;QAC7B,MAAM,GAAG,GAAG,SAAS,CAAC,CAAC,CAAE,CAAC;QAE1B,IAAI,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;YACxB,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC;QAC7B,CAAC;aAAM,IAAI,GAAG,KAAK,GAAG,EAAE,CAAC;YACvB,OAAO,IAAI,CAAC;QACd,CAAC;IACH,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,aAAa,CAC3B,QAA2B,EAC3B,MAAc;IAEd,MAAM,IAAI,GAAG,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC;IAE7D,KAAK,MAAM,OAAO,IAAI,IAAI,EAAE,CAAC;QAC3B,MAAM,MAAM,GAAG,YAAY,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;QAC7C,IAAI,MAAM,KAAK,IAAI,EAAE,CAAC;YACpB,OAAO,MAAM,CAAC;QAChB,CAAC;IACH,CAAC;IAED,OAAO,IAAI,CAAC;AACd,CAAC"}
@@ -0,0 +1,8 @@
1
+ import type { Root } from "mdast";
2
+ /**
3
+ * Normalize heading depths so the minimum heading is depth 1.
4
+ * If the shallowest heading is h2, all headings are shifted up by 1.
5
+ * Mutates the AST in place and returns it.
6
+ */
7
+ export declare function normalizeHeadings(ast: Root): Root;
8
+ //# sourceMappingURL=normalize-headings.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"normalize-headings.d.ts","sourceRoot":"","sources":["../../src/utils/normalize-headings.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAW,MAAM,OAAO,CAAC;AAE3C;;;;GAIG;AACH,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,IAAI,GAAG,IAAI,CAuBjD"}
@@ -0,0 +1,19 @@
1
+ /**
2
+ * Normalize heading depths so the minimum heading is depth 1.
3
+ * If the shallowest heading is h2, all headings are shifted up by 1.
4
+ * Mutates the AST in place and returns it.
5
+ */
6
+ export function normalizeHeadings(ast) {
7
+ const headings = ast.children.filter((n) => n.type === "heading");
8
+ if (headings.length === 0)
9
+ return ast;
10
+ const minDepth = Math.min(...headings.map((h) => h.depth));
11
+ const diff = 1 - minDepth;
12
+ if (diff !== 0) {
13
+ for (const heading of headings) {
14
+ heading.depth = Math.max(1, Math.min(6, heading.depth + diff));
15
+ }
16
+ }
17
+ return ast;
18
+ }
19
+ //# sourceMappingURL=normalize-headings.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"normalize-headings.js","sourceRoot":"","sources":["../../src/utils/normalize-headings.ts"],"names":[],"mappings":"AAEA;;;;GAIG;AACH,MAAM,UAAU,iBAAiB,CAAC,GAAS;IACzC,MAAM,QAAQ,GAAG,GAAG,CAAC,QAAQ,CAAC,MAAM,CAClC,CAAC,CAAC,EAAgB,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,SAAS,CAC1C,CAAC;IAEF,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,GAAG,CAAC;IAEtC,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC;IAC3D,MAAM,IAAI,GAAG,CAAC,GAAG,QAAQ,CAAC;IAE1B,IAAI,IAAI,KAAK,CAAC,EAAE,CAAC;QACf,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE,CAAC;YAC/B,OAAO,CAAC,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,OAAO,CAAC,KAAK,GAAG,IAAI,CAAC,CAMxD,CAAC;QACR,CAAC;IACH,CAAC;IAED,OAAO,GAAG,CAAC;AACb,CAAC"}
@@ -0,0 +1,7 @@
1
+ import type { Content } from "mdast";
2
+ /**
3
+ * Parse a markdown table AST node into an array of row objects.
4
+ * Each row is an object whose keys are the column header texts.
5
+ */
6
+ export declare function parseTable(tableNode: Content): Record<string, string>[];
7
+ //# sourceMappingURL=parse-table.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"parse-table.d.ts","sourceRoot":"","sources":["../../src/utils/parse-table.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,OAAO,CAAC;AAErC;;;GAGG;AACH,wBAAgB,UAAU,CACxB,SAAS,EAAE,OAAO,GACjB,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE,CAoB1B"}
@@ -0,0 +1,17 @@
1
+ import { toString } from "mdast-util-to-string";
2
+ /**
3
+ * Parse a markdown table AST node into an array of row objects.
4
+ * Each row is an object whose keys are the column header texts.
5
+ */
6
+ export function parseTable(tableNode) {
7
+ const rows = tableNode.children?.filter((n) => n.type === "tableRow");
8
+ if (!rows || rows.length < 2)
9
+ return [];
10
+ const [headingsRow, ...dataRows] = rows;
11
+ const headings = headingsRow.children.map((c) => toString(c));
12
+ return dataRows.map((row) => Object.fromEntries(row.children.map((cell, index) => [
13
+ headings[index] ?? `col${index}`,
14
+ toString(cell),
15
+ ])));
16
+ }
17
+ //# sourceMappingURL=parse-table.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"parse-table.js","sourceRoot":"","sources":["../../src/utils/parse-table.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AAGhD;;;GAGG;AACH,MAAM,UAAU,UAAU,CACxB,SAAkB;IAElB,MAAM,IAAI,GAAI,SAAiB,CAAC,QAAQ,EAAE,MAAM,CAC9C,CAAC,CAAM,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,UAAU,CAClC,CAAC;IAEF,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC;QAAE,OAAO,EAAE,CAAC;IAExC,MAAM,CAAC,WAAW,EAAE,GAAG,QAAQ,CAAC,GAAG,IAAI,CAAC;IACxC,MAAM,QAAQ,GAAa,WAAW,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAM,EAAE,EAAE,CAC7D,QAAQ,CAAC,CAAC,CAAC,CACZ,CAAC;IAEF,OAAO,QAAQ,CAAC,GAAG,CAAC,CAAC,GAAQ,EAAE,EAAE,CAC/B,MAAM,CAAC,WAAW,CAChB,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,IAAS,EAAE,KAAa,EAAE,EAAE,CAAC;QAC7C,QAAQ,CAAC,KAAK,CAAC,IAAI,MAAM,KAAK,EAAE;QAChC,QAAQ,CAAC,IAAI,CAAC;KACf,CAAC,CACH,CACF,CAAC;AACJ,CAAC"}
@@ -0,0 +1,5 @@
1
+ /**
2
+ * Recursively read a directory and return file paths matching a regex.
3
+ */
4
+ export declare function readDirectory(dirPath: string, match?: RegExp, recursive?: boolean): Promise<string[]>;
5
+ //# sourceMappingURL=read-directory.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"read-directory.d.ts","sourceRoot":"","sources":["../../src/utils/read-directory.ts"],"names":[],"mappings":"AAGA;;GAEG;AACH,wBAAsB,aAAa,CACjC,OAAO,EAAE,MAAM,EACf,KAAK,GAAE,MAAmB,EAC1B,SAAS,GAAE,OAAc,GACxB,OAAO,CAAC,MAAM,EAAE,CAAC,CAwBnB"}
@@ -0,0 +1,29 @@
1
+ import fs from "fs/promises";
2
+ import path from "path";
3
+ /**
4
+ * Recursively read a directory and return file paths matching a regex.
5
+ */
6
+ export async function readDirectory(dirPath, match = /\.mdx?$/i, recursive = true) {
7
+ let paths = [];
8
+ let entries;
9
+ try {
10
+ entries = await fs.readdir(dirPath);
11
+ }
12
+ catch {
13
+ return paths;
14
+ }
15
+ for (const entry of entries) {
16
+ if (entry.startsWith("."))
17
+ continue;
18
+ const filePath = path.join(dirPath, entry);
19
+ const stat = await fs.stat(filePath);
20
+ if (stat.isDirectory() && recursive) {
21
+ paths = paths.concat(await readDirectory(filePath, match, recursive));
22
+ }
23
+ else if (stat.isFile() && match.test(filePath)) {
24
+ paths.push(filePath);
25
+ }
26
+ }
27
+ return paths;
28
+ }
29
+ //# sourceMappingURL=read-directory.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"read-directory.js","sourceRoot":"","sources":["../../src/utils/read-directory.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,aAAa,CAAC;AAC7B,OAAO,IAAI,MAAM,MAAM,CAAC;AAExB;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,aAAa,CACjC,OAAe,EACf,QAAgB,UAAU,EAC1B,YAAqB,IAAI;IAEzB,IAAI,KAAK,GAAa,EAAE,CAAC;IAEzB,IAAI,OAAiB,CAAC;IACtB,IAAI,CAAC;QACH,OAAO,GAAG,MAAM,EAAE,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;IACtC,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;IAED,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;QAC5B,IAAI,KAAK,CAAC,UAAU,CAAC,GAAG,CAAC;YAAE,SAAS;QAEpC,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;QAC3C,MAAM,IAAI,GAAG,MAAM,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QAErC,IAAI,IAAI,CAAC,WAAW,EAAE,IAAI,SAAS,EAAE,CAAC;YACpC,KAAK,GAAG,KAAK,CAAC,MAAM,CAAC,MAAM,aAAa,CAAC,QAAQ,EAAE,KAAK,EAAE,SAAS,CAAC,CAAC,CAAC;QACxE,CAAC;aAAM,IAAI,IAAI,CAAC,MAAM,EAAE,IAAI,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC;YACjD,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QACvB,CAAC;IACH,CAAC;IAED,OAAO,KAAK,CAAC;AACf,CAAC"}
@@ -0,0 +1,6 @@
1
+ import type { Root } from "mdast";
2
+ /**
3
+ * Convert an MDAST tree back to a markdown string.
4
+ */
5
+ export declare function stringifyAst(ast: Root): string;
6
+ //# sourceMappingURL=stringify-ast.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"stringify-ast.d.ts","sourceRoot":"","sources":["../../src/utils/stringify-ast.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,OAAO,CAAC;AAElC;;GAEG;AACH,wBAAgB,YAAY,CAAC,GAAG,EAAE,IAAI,GAAG,MAAM,CAE9C"}
@@ -0,0 +1,8 @@
1
+ import { toMarkdown } from "mdast-util-to-markdown";
2
+ /**
3
+ * Convert an MDAST tree back to a markdown string.
4
+ */
5
+ export function stringifyAst(ast) {
6
+ return toMarkdown(ast);
7
+ }
8
+ //# sourceMappingURL=stringify-ast.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"stringify-ast.js","sourceRoot":"","sources":["../../src/utils/stringify-ast.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AAGpD;;GAEG;AACH,MAAM,UAAU,YAAY,CAAC,GAAS;IACpC,OAAO,UAAU,CAAC,GAAG,CAAC,CAAC;AACzB,CAAC"}
@@ -0,0 +1,11 @@
1
+ import type { Root } from "mdast";
2
+ export interface StripMarkdownOptions {
3
+ preserveLists?: boolean;
4
+ }
5
+ /**
6
+ * Strip markdown syntax from an MDAST, returning plain text.
7
+ * Headings, paragraphs, code blocks, blockquotes, etc. become plain text.
8
+ * With preserveLists: true, list items retain their bullet/number formatting.
9
+ */
10
+ export declare function stripMarkdown(ast: Root, options?: StripMarkdownOptions): string;
11
+ //# sourceMappingURL=strip-markdown.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"strip-markdown.d.ts","sourceRoot":"","sources":["../../src/utils/strip-markdown.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,IAAI,EAAqB,MAAM,OAAO,CAAC;AAErD,MAAM,WAAW,oBAAoB;IACnC,aAAa,CAAC,EAAE,OAAO,CAAC;CACzB;AAED;;;;GAIG;AACH,wBAAgB,aAAa,CAC3B,GAAG,EAAE,IAAI,EACT,OAAO,GAAE,oBAAyB,GACjC,MAAM,CAYR"}
@@ -0,0 +1,48 @@
1
+ import { toString } from "mdast-util-to-string";
2
+ /**
3
+ * Strip markdown syntax from an MDAST, returning plain text.
4
+ * Headings, paragraphs, code blocks, blockquotes, etc. become plain text.
5
+ * With preserveLists: true, list items retain their bullet/number formatting.
6
+ */
7
+ export function stripMarkdown(ast, options = {}) {
8
+ const { preserveLists = false } = options;
9
+ return ast.children
10
+ .map((node) => {
11
+ if (preserveLists && (node.type === "list")) {
12
+ return renderList(node, 0).trimEnd();
13
+ }
14
+ return toString(node);
15
+ })
16
+ .filter(Boolean)
17
+ .join("\n\n");
18
+ }
19
+ function renderList(list, depth) {
20
+ const indent = " ".repeat(depth);
21
+ let index = list.start ?? 1;
22
+ return list.children
23
+ .map((item) => {
24
+ const bullet = list.ordered ? `${index++}.` : "-";
25
+ const lines = [];
26
+ let firstContent = true;
27
+ for (const child of item.children) {
28
+ if (child.type === "list") {
29
+ lines.push(renderList(child, depth + 1));
30
+ }
31
+ else {
32
+ const text = toString(child);
33
+ if (!text)
34
+ continue;
35
+ if (firstContent) {
36
+ lines.push(`${indent}${bullet} ${text}`);
37
+ firstContent = false;
38
+ }
39
+ else {
40
+ lines.push(`${indent} ${text}`);
41
+ }
42
+ }
43
+ }
44
+ return lines.join("\n");
45
+ })
46
+ .join("\n");
47
+ }
48
+ //# sourceMappingURL=strip-markdown.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"strip-markdown.js","sourceRoot":"","sources":["../../src/utils/strip-markdown.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AAQhD;;;;GAIG;AACH,MAAM,UAAU,aAAa,CAC3B,GAAS,EACT,UAAgC,EAAE;IAElC,MAAM,EAAE,aAAa,GAAG,KAAK,EAAE,GAAG,OAAO,CAAC;IAE1C,OAAO,GAAG,CAAC,QAAQ;SAChB,GAAG,CAAC,CAAC,IAAiB,EAAE,EAAE;QACzB,IAAI,aAAa,IAAI,CAAC,IAAI,CAAC,IAAI,KAAK,MAAM,CAAC,EAAE,CAAC;YAC5C,OAAO,UAAU,CAAC,IAAY,EAAE,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC;QAC/C,CAAC;QACD,OAAO,QAAQ,CAAC,IAAI,CAAC,CAAC;IACxB,CAAC,CAAC;SACD,MAAM,CAAC,OAAO,CAAC;SACf,IAAI,CAAC,MAAM,CAAC,CAAC;AAClB,CAAC;AAED,SAAS,UAAU,CAAC,IAAU,EAAE,KAAa;IAC3C,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IAClC,IAAI,KAAK,GAAG,IAAI,CAAC,KAAK,IAAI,CAAC,CAAC;IAE5B,OAAO,IAAI,CAAC,QAAQ;SACjB,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE;QACZ,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,KAAK,EAAE,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC;QAClD,MAAM,KAAK,GAAa,EAAE,CAAC;QAE3B,IAAI,YAAY,GAAG,IAAI,CAAC;QACxB,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;YAClC,IAAI,KAAK,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC;gBAC1B,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,KAAa,EAAE,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC;YACnD,CAAC;iBAAM,CAAC;gBACN,MAAM,IAAI,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC;gBAC7B,IAAI,CAAC,IAAI;oBAAE,SAAS;gBACpB,IAAI,YAAY,EAAE,CAAC;oBACjB,KAAK,CAAC,IAAI,CAAC,GAAG,MAAM,GAAG,MAAM,IAAI,IAAI,EAAE,CAAC,CAAC;oBACzC,YAAY,GAAG,KAAK,CAAC;gBACvB,CAAC;qBAAM,CAAC;oBACN,KAAK,CAAC,IAAI,CAAC,GAAG,MAAM,KAAK,IAAI,EAAE,CAAC,CAAC;gBACnC,CAAC;YACH,CAAC;QACH,CAAC;QAED,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC1B,CAAC,CAAC;SACD,IAAI,CAAC,IAAI,CAAC,CAAC;AAChB,CAAC"}