contentbase 0.4.0 → 0.4.2

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 (323) 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 +123 -0
  175. package/dist/document.d.ts.map +1 -0
  176. package/dist/document.js +434 -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 +3 -3
  323. package/src/document.ts +26 -8
@@ -0,0 +1,201 @@
1
+ import fs from "fs/promises";
2
+ import path from "path";
3
+ import { existsSync } from "fs";
4
+ import { Collection } from "../collection";
5
+ import { defineModel } from "../define-model";
6
+ import { singularize, upperFirst } from "../utils/inflect";
7
+ import * as contentbaseExports from "../index";
8
+ /**
9
+ * Search for a file with the given basename and common extensions.
10
+ */
11
+ async function findFile(dir, basename) {
12
+ for (const ext of ["ts", "js", "mjs"]) {
13
+ const candidate = path.resolve(dir, `${basename}.${ext}`);
14
+ try {
15
+ await fs.stat(candidate);
16
+ return candidate;
17
+ }
18
+ catch {
19
+ // Not found, try next
20
+ }
21
+ }
22
+ return undefined;
23
+ }
24
+ /**
25
+ * Duck-type check: does this value look like a ModelDefinition?
26
+ */
27
+ function isModelDefinition(value) {
28
+ return (typeof value === "object" &&
29
+ value !== null &&
30
+ typeof value.name === "string" &&
31
+ typeof value.prefix === "string" &&
32
+ "meta" in value);
33
+ }
34
+ /**
35
+ * Check if a directory (up to 2 levels deep) contains .md or .mdx files.
36
+ */
37
+ async function directoryContainsMarkdown(dirPath) {
38
+ try {
39
+ const entries = await fs.readdir(dirPath, { withFileTypes: true });
40
+ for (const entry of entries) {
41
+ if (entry.isFile() &&
42
+ (entry.name.endsWith(".md") || entry.name.endsWith(".mdx"))) {
43
+ return true;
44
+ }
45
+ if (entry.isDirectory()) {
46
+ const subEntries = await fs.readdir(path.join(dirPath, entry.name), { withFileTypes: true });
47
+ for (const sub of subEntries) {
48
+ if (sub.isFile() &&
49
+ (sub.name.endsWith(".md") || sub.name.endsWith(".mdx"))) {
50
+ return true;
51
+ }
52
+ }
53
+ }
54
+ }
55
+ }
56
+ catch {
57
+ // Directory unreadable
58
+ }
59
+ return false;
60
+ }
61
+ /**
62
+ * Tier 3: Auto-discover models from top-level subdirectories containing markdown.
63
+ */
64
+ async function autoDiscoverModels(collection) {
65
+ const rootPath = collection.rootPath;
66
+ let registered = 0;
67
+ try {
68
+ const entries = await fs.readdir(rootPath, { withFileTypes: true });
69
+ for (const entry of entries) {
70
+ if (!entry.isDirectory())
71
+ continue;
72
+ const dirPath = path.join(rootPath, entry.name);
73
+ if (await directoryContainsMarkdown(dirPath)) {
74
+ const folderName = entry.name;
75
+ const modelName = upperFirst(singularize(folderName));
76
+ const model = defineModel(modelName, { prefix: folderName });
77
+ collection.register(model);
78
+ registered++;
79
+ }
80
+ }
81
+ }
82
+ catch {
83
+ // Root path unreadable
84
+ }
85
+ return registered;
86
+ }
87
+ /** Seed the luca VM with contentbase and common deps so models.ts can resolve imports */
88
+ function seedContentbaseModules(container) {
89
+ const vm = container.feature('vm');
90
+ // Seed luca modules first
91
+ const helpers = container.feature('helpers');
92
+ if (helpers?.seedVirtualModules) {
93
+ helpers.seedVirtualModules();
94
+ }
95
+ vm.defineModule('contentbase', contentbaseExports);
96
+ try {
97
+ vm.defineModule('js-yaml', require('js-yaml'));
98
+ }
99
+ catch { }
100
+ try {
101
+ vm.defineModule('mdast-util-to-string', require('mdast-util-to-string'));
102
+ }
103
+ catch { }
104
+ }
105
+ /** Build a VM-backed module loader using the luca container */
106
+ function createVmModuleLoader(container) {
107
+ let seeded = false;
108
+ return (filePath) => {
109
+ if (!seeded) {
110
+ seedContentbaseModules(container);
111
+ seeded = true;
112
+ }
113
+ return container.feature('vm').loadModule(filePath);
114
+ };
115
+ }
116
+ export async function loadCollection(options) {
117
+ let { contentFolder, modulePath } = options;
118
+ let container = options.container;
119
+ let rootPath;
120
+ const cwd = process.cwd();
121
+ // If no container was passed, try to grab the luca singleton.
122
+ // This works when running inside the cnotes CLI (which imports luca/node).
123
+ if (!container) {
124
+ try {
125
+ const luca = await import('luca/node');
126
+ container = luca.default;
127
+ }
128
+ catch {
129
+ // Not running in a luca context — that's fine, native imports will be used
130
+ }
131
+ }
132
+ if (contentFolder) {
133
+ // Resolve relative to cwd
134
+ rootPath = path.resolve(cwd, contentFolder);
135
+ }
136
+ else {
137
+ // Check package.json for configured content folder
138
+ const pkgPath = path.resolve(cwd, "package.json");
139
+ try {
140
+ const manifest = JSON.parse(await fs.readFile(pkgPath, "utf8"));
141
+ if (manifest.contentbase?.contentFolder) {
142
+ rootPath = path.resolve(cwd, manifest.contentbase.contentFolder);
143
+ }
144
+ }
145
+ catch {
146
+ // No package.json found
147
+ }
148
+ // Default to ./docs
149
+ rootPath = rootPath ?? path.resolve(cwd, "docs");
150
+ }
151
+ // Determine if we need a VM-based loader (no contentbase in node_modules)
152
+ const needsVmLoader = container?.feature && !existsSync(path.resolve(cwd, "node_modules", "contentbase"));
153
+ const moduleLoader = needsVmLoader ? createVmModuleLoader(container) : undefined;
154
+ // Helper to import a module file, falling back to VM when needed
155
+ const importModule = async (filePath) => {
156
+ if (moduleLoader) {
157
+ return moduleLoader(filePath);
158
+ }
159
+ return import(filePath);
160
+ };
161
+ // Tier 1: index.ts — full collection with models already registered
162
+ if (!modulePath) {
163
+ modulePath = await findFile(rootPath, "index");
164
+ }
165
+ if (modulePath) {
166
+ const mod = await importModule(modulePath);
167
+ const collection = mod.collection ?? mod.default;
168
+ if (!(collection instanceof Collection)) {
169
+ throw new Error("Module must export a Collection as 'collection' or default export.");
170
+ }
171
+ await collection.load();
172
+ return collection;
173
+ }
174
+ // Tier 2: models.ts — import model definitions and auto-register
175
+ const modelsPath = await findFile(rootPath, "models");
176
+ if (modelsPath) {
177
+ const mod = await importModule(modelsPath);
178
+ const collection = new Collection({ rootPath, moduleLoader });
179
+ let registered = 0;
180
+ for (const [, value] of Object.entries(mod)) {
181
+ if (isModelDefinition(value)) {
182
+ collection.register(value);
183
+ registered++;
184
+ }
185
+ }
186
+ await collection.load();
187
+ return collection;
188
+ }
189
+ // Tier 3: Auto-discover models from folder structure
190
+ const collection = new Collection({ rootPath, moduleLoader });
191
+ const discovered = await autoDiscoverModels(collection);
192
+ if (discovered > 0) {
193
+ console.warn(`[contentbase] Auto-discovered ${discovered} model(s) from folder structure. These models have no schema validation. Create a models.ts or index.ts for proper type definitions.`);
194
+ }
195
+ else {
196
+ console.warn(`[contentbase] No models or markdown files found in ${rootPath}. Run 'cnotes init' to set up a project.`);
197
+ }
198
+ await collection.load();
199
+ return collection;
200
+ }
201
+ //# sourceMappingURL=load-collection.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"load-collection.js","sourceRoot":"","sources":["../../src/cli/load-collection.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,17 @@
1
+ import type { z } from 'zod';
2
+ export interface CommandDefinition {
3
+ description: string;
4
+ usage?: string;
5
+ help?: string;
6
+ argsSchema?: z.ZodType<any>;
7
+ handler: (options: any, context: {
8
+ container: any;
9
+ }) => Promise<void>;
10
+ }
11
+ export declare const commands: {
12
+ register(name: string, definition: CommandDefinition): void;
13
+ has(name: string): boolean;
14
+ get(name: string): CommandDefinition | undefined;
15
+ readonly available: string[];
16
+ };
17
+ //# sourceMappingURL=registry.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../../src/cli/registry.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AAE5B,MAAM,WAAW,iBAAiB;IAChC,WAAW,EAAE,MAAM,CAAA;IACnB,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,UAAU,CAAC,EAAE,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,CAAA;IAC3B,OAAO,EAAE,CAAC,OAAO,EAAE,GAAG,EAAE,OAAO,EAAE;QAAE,SAAS,EAAE,GAAG,CAAA;KAAE,KAAK,OAAO,CAAC,IAAI,CAAC,CAAA;CACtE;AAID,eAAO,MAAM,QAAQ;mBACJ,MAAM,cAAc,iBAAiB;cAI1C,MAAM,GAAG,OAAO;cAIhB,MAAM,GAAG,iBAAiB,GAAG,SAAS;wBAI/B,MAAM,EAAE;CAG1B,CAAA"}
@@ -0,0 +1,16 @@
1
+ const registry = new Map();
2
+ export const commands = {
3
+ register(name, definition) {
4
+ registry.set(name, definition);
5
+ },
6
+ has(name) {
7
+ return registry.has(name);
8
+ },
9
+ get(name) {
10
+ return registry.get(name);
11
+ },
12
+ get available() {
13
+ return Array.from(registry.keys());
14
+ },
15
+ };
16
+ //# sourceMappingURL=registry.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"registry.js","sourceRoot":"","sources":["../../src/cli/registry.ts"],"names":[],"mappings":"AAUA,MAAM,QAAQ,GAAG,IAAI,GAAG,EAA6B,CAAA;AAErD,MAAM,CAAC,MAAM,QAAQ,GAAG;IACtB,QAAQ,CAAC,IAAY,EAAE,UAA6B;QAClD,QAAQ,CAAC,GAAG,CAAC,IAAI,EAAE,UAAU,CAAC,CAAA;IAChC,CAAC;IAED,GAAG,CAAC,IAAY;QACd,OAAO,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,CAAA;IAC3B,CAAC;IAED,GAAG,CAAC,IAAY;QACd,OAAO,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,CAAA;IAC3B,CAAC;IAED,IAAI,SAAS;QACX,OAAO,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC,CAAA;IACpC,CAAC;CACF,CAAA"}
package/dist/cnotes ADDED
Binary file
@@ -0,0 +1,145 @@
1
+ import { Document } from "./document";
2
+ import { CollectionQuery } from "./query/collection-query";
3
+ import type { ModelDefinition, CollectionItem, CollectionOptions, InferModelInstance } from "./types";
4
+ export interface FieldInfo {
5
+ name: string;
6
+ type: string;
7
+ required: boolean;
8
+ defaultValue?: unknown;
9
+ description?: string;
10
+ }
11
+ export declare function introspectMetaSchema(schema: any): FieldInfo[];
12
+ export declare class Collection {
13
+ #private;
14
+ readonly rootPath: string;
15
+ readonly name: string;
16
+ readonly extensions: string[];
17
+ constructor(options: CollectionOptions);
18
+ /**
19
+ * Register a model definition with this collection.
20
+ * Accepts the output of defineModel().
21
+ */
22
+ register<TDef extends ModelDefinition<any, any, any, any, any>>(definition: TDef): this;
23
+ /** Get a model definition by name */
24
+ getModelDefinition(name: string): ModelDefinition<any, any, any, any, any> | undefined;
25
+ get modelDefinitions(): ModelDefinition<any, any, any, any, any>[];
26
+ get loaded(): boolean;
27
+ get items(): Map<string, CollectionItem>;
28
+ get documents(): Map<string, Document>;
29
+ get available(): string[];
30
+ /**
31
+ * Match available pathIds against one or more glob patterns.
32
+ */
33
+ matchPaths(patterns: string | string[]): string[];
34
+ /**
35
+ * Recursively load all markdown files from rootPath.
36
+ * Parses frontmatter with gray-matter, stores content and metadata.
37
+ */
38
+ load(options?: {
39
+ refresh?: boolean;
40
+ }): Promise<this>;
41
+ /**
42
+ * Get or create a Document for the given pathId.
43
+ * Documents are cached: calling document("foo") twice returns the same instance.
44
+ */
45
+ document(pathId: string): Document;
46
+ /**
47
+ * Creates a new Document tied to this collection without it
48
+ * existing in the items map. Used for in-memory documents
49
+ * (e.g., extracted from hasMany relationships).
50
+ */
51
+ createDocument(attrs: {
52
+ id: string;
53
+ content?: string;
54
+ meta?: Record<string, unknown>;
55
+ ast?: import("mdast").Root;
56
+ }): Document;
57
+ /**
58
+ * Get a typed model instance for a document.
59
+ * The definition parameter carries the type information.
60
+ */
61
+ getModel<TDef extends ModelDefinition<any, any, any, any, any>>(pathId: string, definition: TDef): InferModelInstance<TDef>;
62
+ /**
63
+ * Determine which model definition matches a document,
64
+ * using match functions or prefix matching.
65
+ */
66
+ findModelDefinition(pathId: string): ModelDefinition<any, any, any, any, any> | undefined;
67
+ /**
68
+ * Create a typed query for model instances.
69
+ */
70
+ query<TDef extends ModelDefinition<any, any, any, any, any>>(definition: TDef): CollectionQuery<TDef>;
71
+ saveItem(pathId: string, options: {
72
+ content: string;
73
+ extension?: string;
74
+ }): Promise<CollectionItem>;
75
+ deleteItem(pathId: string): Promise<this>;
76
+ readItem(pathId: string, extension?: string): Promise<CollectionItem>;
77
+ action(name: string, fn: (collection: Collection, ...args: any[]) => any): this;
78
+ get actions(): Map<string, Function>;
79
+ get availableActions(): string[];
80
+ runAction(name: string, ...args: any[]): Promise<any>;
81
+ use(plugin: (collection: Collection, options?: any) => void, options?: any): this;
82
+ resolve(...args: string[]): string;
83
+ getPathId(key: string): string;
84
+ /**
85
+ * Generate a markdown table of contents with links to each document.
86
+ * Links use relative paths that work for GitHub navigation.
87
+ *
88
+ * If models are registered, items are grouped under model name headings.
89
+ * Items that don't match any model appear under an "Other" group.
90
+ *
91
+ * @example
92
+ * ```ts
93
+ * const toc = collection.tableOfContents({ title: "Project Docs" });
94
+ * // # Project Docs
95
+ * //
96
+ * // ## Epics
97
+ * //
98
+ * // - [Authentication](./epics/authentication.mdx)
99
+ * // - [Searching And Browsing](./epics/searching-and-browsing.mdx)
100
+ * //
101
+ * // ## Stories
102
+ * //
103
+ * // - [A User should be able to register.](./stories/authentication/a-user-should-be-able-to-register.mdx)
104
+ * ```
105
+ */
106
+ tableOfContents(options?: {
107
+ title?: string;
108
+ basePath?: string;
109
+ }): string;
110
+ /**
111
+ * Renders an ASCII file tree of all documents in the collection.
112
+ *
113
+ * @example
114
+ * ```
115
+ * const tree = collection.renderFileTree();
116
+ * // epics/
117
+ * // authentication.mdx
118
+ * // searching-and-browsing.mdx
119
+ * // stories/
120
+ * // authentication/
121
+ * // a-user-should-be-able-to-register.mdx
122
+ * ```
123
+ */
124
+ renderFileTree(): string;
125
+ /**
126
+ * Generate a plain-text summary of the collection and its models.
127
+ * Returns the same output as `cnotes inspect`.
128
+ */
129
+ generateModelSummary(options?: {
130
+ includeIds?: boolean;
131
+ }): string;
132
+ /**
133
+ * Write README.md to the collection root.
134
+ * Preserves the `## Overview` section if it already exists.
135
+ * The generated summary is placed in the `## Summary` section.
136
+ */
137
+ saveModelSummary(options?: {
138
+ includeIds?: boolean;
139
+ }): Promise<string>;
140
+ toJSON(options?: {
141
+ content?: boolean;
142
+ }): Record<string, unknown>;
143
+ export(options?: Record<string, unknown>): Promise<Record<string, unknown>>;
144
+ }
145
+ //# sourceMappingURL=collection.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"collection.d.ts","sourceRoot":"","sources":["../src/collection.ts"],"names":[],"mappings":"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"}