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.
- package/dist/adapters/node-fs.d.ts +17 -0
- package/dist/adapters/node-fs.d.ts.map +1 -0
- package/dist/adapters/node-fs.js +71 -0
- package/dist/adapters/node-fs.js.map +1 -0
- package/dist/ast-query.d.ts +44 -0
- package/dist/ast-query.d.ts.map +1 -0
- package/dist/ast-query.js +95 -0
- package/dist/ast-query.js.map +1 -0
- package/dist/base-model.d.ts +8 -0
- package/dist/base-model.d.ts.map +1 -0
- package/dist/base-model.js +12 -0
- package/dist/base-model.js.map +1 -0
- package/dist/cli/commands/action.d.ts +2 -0
- package/dist/cli/commands/action.d.ts.map +1 -0
- package/dist/cli/commands/action.js +73 -0
- package/dist/cli/commands/action.js.map +1 -0
- package/dist/cli/commands/api/endpoints/actions.d.ts +13 -0
- package/dist/cli/commands/api/endpoints/actions.d.ts.map +1 -0
- package/dist/cli/commands/api/endpoints/actions.js +28 -0
- package/dist/cli/commands/api/endpoints/actions.js.map +1 -0
- package/dist/cli/commands/api/endpoints/doc.d.ts +5 -0
- package/dist/cli/commands/api/endpoints/doc.d.ts.map +1 -0
- package/dist/cli/commands/api/endpoints/doc.js +186 -0
- package/dist/cli/commands/api/endpoints/doc.js.map +1 -0
- package/dist/cli/commands/api/endpoints/docs-index.d.ts +8 -0
- package/dist/cli/commands/api/endpoints/docs-index.d.ts.map +1 -0
- package/dist/cli/commands/api/endpoints/docs-index.js +23 -0
- package/dist/cli/commands/api/endpoints/docs-index.js.map +1 -0
- package/dist/cli/commands/api/endpoints/document.d.ts +47 -0
- package/dist/cli/commands/api/endpoints/document.d.ts.map +1 -0
- package/dist/cli/commands/api/endpoints/document.js +146 -0
- package/dist/cli/commands/api/endpoints/document.js.map +1 -0
- package/dist/cli/commands/api/endpoints/documents.d.ts +35 -0
- package/dist/cli/commands/api/endpoints/documents.d.ts.map +1 -0
- package/dist/cli/commands/api/endpoints/documents.js +56 -0
- package/dist/cli/commands/api/endpoints/documents.js.map +1 -0
- package/dist/cli/commands/api/endpoints/index.d.ts +22 -0
- package/dist/cli/commands/api/endpoints/index.d.ts.map +1 -0
- package/dist/cli/commands/api/endpoints/index.js +38 -0
- package/dist/cli/commands/api/endpoints/index.js.map +1 -0
- package/dist/cli/commands/api/endpoints/inspect.d.ts +10 -0
- package/dist/cli/commands/api/endpoints/inspect.d.ts.map +1 -0
- package/dist/cli/commands/api/endpoints/inspect.js +15 -0
- package/dist/cli/commands/api/endpoints/inspect.js.map +1 -0
- package/dist/cli/commands/api/endpoints/models.d.ts +5 -0
- package/dist/cli/commands/api/endpoints/models.d.ts.map +1 -0
- package/dist/cli/commands/api/endpoints/models.js +9 -0
- package/dist/cli/commands/api/endpoints/models.js.map +1 -0
- package/dist/cli/commands/api/endpoints/query.d.ts +40 -0
- package/dist/cli/commands/api/endpoints/query.d.ts.map +1 -0
- package/dist/cli/commands/api/endpoints/query.js +106 -0
- package/dist/cli/commands/api/endpoints/query.js.map +1 -0
- package/dist/cli/commands/api/endpoints/root.d.ts +5 -0
- package/dist/cli/commands/api/endpoints/root.d.ts.map +1 -0
- package/dist/cli/commands/api/endpoints/root.js +7 -0
- package/dist/cli/commands/api/endpoints/root.js.map +1 -0
- package/dist/cli/commands/api/endpoints/search-reindex.d.ts +10 -0
- package/dist/cli/commands/api/endpoints/search-reindex.d.ts.map +1 -0
- package/dist/cli/commands/api/endpoints/search-reindex.js +38 -0
- package/dist/cli/commands/api/endpoints/search-reindex.js.map +1 -0
- package/dist/cli/commands/api/endpoints/search-status.d.ts +7 -0
- package/dist/cli/commands/api/endpoints/search-status.d.ts.map +1 -0
- package/dist/cli/commands/api/endpoints/search-status.js +33 -0
- package/dist/cli/commands/api/endpoints/search-status.js.map +1 -0
- package/dist/cli/commands/api/endpoints/search.d.ts +24 -0
- package/dist/cli/commands/api/endpoints/search.d.ts.map +1 -0
- package/dist/cli/commands/api/endpoints/search.js +61 -0
- package/dist/cli/commands/api/endpoints/search.js.map +1 -0
- package/dist/cli/commands/api/endpoints/semantic-search.d.ts +28 -0
- package/dist/cli/commands/api/endpoints/semantic-search.d.ts.map +1 -0
- package/dist/cli/commands/api/endpoints/semantic-search.js +76 -0
- package/dist/cli/commands/api/endpoints/semantic-search.js.map +1 -0
- package/dist/cli/commands/api/endpoints/text-search.d.ts +17 -0
- package/dist/cli/commands/api/endpoints/text-search.d.ts.map +1 -0
- package/dist/cli/commands/api/endpoints/text-search.js +55 -0
- package/dist/cli/commands/api/endpoints/text-search.js.map +1 -0
- package/dist/cli/commands/api/endpoints/validate.d.ts +12 -0
- package/dist/cli/commands/api/endpoints/validate.d.ts.map +1 -0
- package/dist/cli/commands/api/endpoints/validate.js +27 -0
- package/dist/cli/commands/api/endpoints/validate.js.map +1 -0
- package/dist/cli/commands/api/helpers.d.ts +8 -0
- package/dist/cli/commands/api/helpers.d.ts.map +1 -0
- package/dist/cli/commands/api/helpers.js +89 -0
- package/dist/cli/commands/api/helpers.js.map +1 -0
- package/dist/cli/commands/console.d.ts +2 -0
- package/dist/cli/commands/console.d.ts.map +1 -0
- package/dist/cli/commands/console.js +117 -0
- package/dist/cli/commands/console.js.map +1 -0
- package/dist/cli/commands/create.d.ts +2 -0
- package/dist/cli/commands/create.d.ts.map +1 -0
- package/dist/cli/commands/create.js +185 -0
- package/dist/cli/commands/create.js.map +1 -0
- package/dist/cli/commands/embed.d.ts +2 -0
- package/dist/cli/commands/embed.d.ts.map +1 -0
- package/dist/cli/commands/embed.js +231 -0
- package/dist/cli/commands/embed.js.map +1 -0
- package/dist/cli/commands/export.d.ts +2 -0
- package/dist/cli/commands/export.d.ts.map +1 -0
- package/dist/cli/commands/export.js +55 -0
- package/dist/cli/commands/export.js.map +1 -0
- package/dist/cli/commands/extract.d.ts +2 -0
- package/dist/cli/commands/extract.d.ts.map +1 -0
- package/dist/cli/commands/extract.js +149 -0
- package/dist/cli/commands/extract.js.map +1 -0
- package/dist/cli/commands/help.d.ts +2 -0
- package/dist/cli/commands/help.d.ts.map +1 -0
- package/dist/cli/commands/help.js +58 -0
- package/dist/cli/commands/help.js.map +1 -0
- package/dist/cli/commands/index.d.ts +18 -0
- package/dist/cli/commands/index.d.ts.map +1 -0
- package/dist/cli/commands/index.js +19 -0
- package/dist/cli/commands/index.js.map +1 -0
- package/dist/cli/commands/init.d.ts +2 -0
- package/dist/cli/commands/init.d.ts.map +1 -0
- package/dist/cli/commands/init.js +82 -0
- package/dist/cli/commands/init.js.map +1 -0
- package/dist/cli/commands/inspect.d.ts +2 -0
- package/dist/cli/commands/inspect.d.ts.map +1 -0
- package/dist/cli/commands/inspect.js +53 -0
- package/dist/cli/commands/inspect.js.map +1 -0
- package/dist/cli/commands/mcp.d.ts +2 -0
- package/dist/cli/commands/mcp.d.ts.map +1 -0
- package/dist/cli/commands/mcp.js +92 -0
- package/dist/cli/commands/mcp.js.map +1 -0
- package/dist/cli/commands/search.d.ts +2 -0
- package/dist/cli/commands/search.d.ts.map +1 -0
- package/dist/cli/commands/search.js +212 -0
- package/dist/cli/commands/search.js.map +1 -0
- package/dist/cli/commands/serve.d.ts +2 -0
- package/dist/cli/commands/serve.d.ts.map +1 -0
- package/dist/cli/commands/serve.js +298 -0
- package/dist/cli/commands/serve.js.map +1 -0
- package/dist/cli/commands/summary.d.ts +2 -0
- package/dist/cli/commands/summary.d.ts.map +1 -0
- package/dist/cli/commands/summary.js +58 -0
- package/dist/cli/commands/summary.js.map +1 -0
- package/dist/cli/commands/teach.d.ts +2 -0
- package/dist/cli/commands/teach.d.ts.map +1 -0
- package/dist/cli/commands/teach.js +80 -0
- package/dist/cli/commands/teach.js.map +1 -0
- package/dist/cli/commands/text-search.d.ts +2 -0
- package/dist/cli/commands/text-search.d.ts.map +1 -0
- package/dist/cli/commands/text-search.js +125 -0
- package/dist/cli/commands/text-search.js.map +1 -0
- package/dist/cli/commands/update.d.ts +2 -0
- package/dist/cli/commands/update.d.ts.map +1 -0
- package/dist/cli/commands/update.js +167 -0
- package/dist/cli/commands/update.js.map +1 -0
- package/dist/cli/commands/validate.d.ts +2 -0
- package/dist/cli/commands/validate.d.ts.map +1 -0
- package/dist/cli/commands/validate.js +129 -0
- package/dist/cli/commands/validate.js.map +1 -0
- package/dist/cli/index.d.ts +3 -0
- package/dist/cli/index.d.ts.map +1 -0
- package/dist/cli/index.js +84 -0
- package/dist/cli/index.js.map +1 -0
- package/dist/cli/load-collection.d.ts +7 -0
- package/dist/cli/load-collection.d.ts.map +1 -0
- package/dist/cli/load-collection.js +201 -0
- package/dist/cli/load-collection.js.map +1 -0
- package/dist/cli/registry.d.ts +17 -0
- package/dist/cli/registry.d.ts.map +1 -0
- package/dist/cli/registry.js +16 -0
- package/dist/cli/registry.js.map +1 -0
- package/dist/cnotes +0 -0
- package/dist/collection.d.ts +145 -0
- package/dist/collection.d.ts.map +1 -0
- package/dist/collection.js +684 -0
- package/dist/collection.js.map +1 -0
- package/dist/define-model.d.ts +45 -0
- package/dist/define-model.d.ts.map +1 -0
- package/dist/define-model.js +106 -0
- package/dist/define-model.js.map +1 -0
- package/dist/document.d.ts +123 -0
- package/dist/document.d.ts.map +1 -0
- package/dist/document.js +434 -0
- package/dist/document.js.map +1 -0
- package/dist/extract-sections.d.ts +46 -0
- package/dist/extract-sections.d.ts.map +1 -0
- package/dist/extract-sections.js +153 -0
- package/dist/extract-sections.js.map +1 -0
- package/dist/index.d.ts +28 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +31 -0
- package/dist/index.js.map +1 -0
- package/dist/mcp/helpers.d.ts +14 -0
- package/dist/mcp/helpers.d.ts.map +1 -0
- package/dist/mcp/helpers.js +7 -0
- package/dist/mcp/helpers.js.map +1 -0
- package/dist/mcp/model-info.d.ts +2 -0
- package/dist/mcp/model-info.d.ts.map +1 -0
- package/dist/mcp/model-info.js +94 -0
- package/dist/mcp/model-info.js.map +1 -0
- package/dist/mcp/prompts.d.ts +2 -0
- package/dist/mcp/prompts.d.ts.map +1 -0
- package/dist/mcp/prompts.js +180 -0
- package/dist/mcp/prompts.js.map +1 -0
- package/dist/mcp/readme.d.ts +2 -0
- package/dist/mcp/readme.d.ts.map +1 -0
- package/dist/mcp/readme.js +71 -0
- package/dist/mcp/readme.js.map +1 -0
- package/dist/mcp/resources.d.ts +2 -0
- package/dist/mcp/resources.d.ts.map +1 -0
- package/dist/mcp/resources.js +85 -0
- package/dist/mcp/resources.js.map +1 -0
- package/dist/mcp/server.d.ts +18 -0
- package/dist/mcp/server.d.ts.map +1 -0
- package/dist/mcp/server.js +83 -0
- package/dist/mcp/server.js.map +1 -0
- package/dist/mcp/tools/mutation.d.ts +2 -0
- package/dist/mcp/tools/mutation.d.ts.map +1 -0
- package/dist/mcp/tools/mutation.js +155 -0
- package/dist/mcp/tools/mutation.js.map +1 -0
- package/dist/mcp/tools/query.d.ts +2 -0
- package/dist/mcp/tools/query.d.ts.map +1 -0
- package/dist/mcp/tools/query.js +130 -0
- package/dist/mcp/tools/query.js.map +1 -0
- package/dist/mcp/tools/search.d.ts +2 -0
- package/dist/mcp/tools/search.d.ts.map +1 -0
- package/dist/mcp/tools/search.js +168 -0
- package/dist/mcp/tools/search.js.map +1 -0
- package/dist/model-instance.d.ts +11 -0
- package/dist/model-instance.d.ts.map +1 -0
- package/dist/model-instance.js +208 -0
- package/dist/model-instance.js.map +1 -0
- package/dist/node-shortcuts.d.ts +25 -0
- package/dist/node-shortcuts.d.ts.map +1 -0
- package/dist/node-shortcuts.js +67 -0
- package/dist/node-shortcuts.js.map +1 -0
- package/dist/parse.d.ts +45 -0
- package/dist/parse.d.ts.map +1 -0
- package/dist/parse.js +98 -0
- package/dist/parse.js.map +1 -0
- package/dist/query/collection-query.d.ts +39 -0
- package/dist/query/collection-query.d.ts.map +1 -0
- package/dist/query/collection-query.js +184 -0
- package/dist/query/collection-query.js.map +1 -0
- package/dist/query/index.d.ts +8 -0
- package/dist/query/index.d.ts.map +1 -0
- package/dist/query/index.js +5 -0
- package/dist/query/index.js.map +1 -0
- package/dist/query/operators.d.ts +3 -0
- package/dist/query/operators.d.ts.map +1 -0
- package/dist/query/operators.js +18 -0
- package/dist/query/operators.js.map +1 -0
- package/dist/query/query-builder.d.ts +34 -0
- package/dist/query/query-builder.d.ts.map +1 -0
- package/dist/query/query-builder.js +84 -0
- package/dist/query/query-builder.js.map +1 -0
- package/dist/query/query-dsl.d.ts +36 -0
- package/dist/query/query-dsl.d.ts.map +1 -0
- package/dist/query/query-dsl.js +195 -0
- package/dist/query/query-dsl.js.map +1 -0
- package/dist/relationships/belongs-to.d.ts +9 -0
- package/dist/relationships/belongs-to.d.ts.map +1 -0
- package/dist/relationships/belongs-to.js +34 -0
- package/dist/relationships/belongs-to.js.map +1 -0
- package/dist/relationships/has-many.d.ts +23 -0
- package/dist/relationships/has-many.d.ts.map +1 -0
- package/dist/relationships/has-many.js +136 -0
- package/dist/relationships/has-many.js.map +1 -0
- package/dist/relationships/index.d.ts +26 -0
- package/dist/relationships/index.d.ts.map +1 -0
- package/dist/relationships/index.js +32 -0
- package/dist/relationships/index.js.map +1 -0
- package/dist/relationships/types.d.ts +2 -0
- package/dist/relationships/types.d.ts.map +1 -0
- package/dist/relationships/types.js +2 -0
- package/dist/relationships/types.js.map +1 -0
- package/dist/search/document-inputs.d.ts +30 -0
- package/dist/search/document-inputs.d.ts.map +1 -0
- package/dist/search/document-inputs.js +52 -0
- package/dist/search/document-inputs.js.map +1 -0
- package/dist/search/luca-semantic-search.d.ts +27 -0
- package/dist/search/luca-semantic-search.d.ts.map +1 -0
- package/dist/search/luca-semantic-search.js +56 -0
- package/dist/search/luca-semantic-search.js.map +1 -0
- package/dist/section.d.ts +21 -0
- package/dist/section.d.ts.map +1 -0
- package/dist/section.js +21 -0
- package/dist/section.js.map +1 -0
- package/dist/types.d.ts +185 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +2 -0
- package/dist/types.js.map +1 -0
- package/dist/utils/index.d.ts +9 -0
- package/dist/utils/index.d.ts.map +1 -0
- package/dist/utils/index.js +8 -0
- package/dist/utils/index.js.map +1 -0
- package/dist/utils/inflect.d.ts +6 -0
- package/dist/utils/inflect.d.ts.map +1 -0
- package/dist/utils/inflect.js +75 -0
- package/dist/utils/inflect.js.map +1 -0
- package/dist/utils/match-pattern.d.ts +25 -0
- package/dist/utils/match-pattern.d.ts.map +1 -0
- package/dist/utils/match-pattern.js +52 -0
- package/dist/utils/match-pattern.js.map +1 -0
- package/dist/utils/normalize-headings.d.ts +8 -0
- package/dist/utils/normalize-headings.d.ts.map +1 -0
- package/dist/utils/normalize-headings.js +19 -0
- package/dist/utils/normalize-headings.js.map +1 -0
- package/dist/utils/parse-table.d.ts +7 -0
- package/dist/utils/parse-table.d.ts.map +1 -0
- package/dist/utils/parse-table.js +17 -0
- package/dist/utils/parse-table.js.map +1 -0
- package/dist/utils/read-directory.d.ts +5 -0
- package/dist/utils/read-directory.d.ts.map +1 -0
- package/dist/utils/read-directory.js +29 -0
- package/dist/utils/read-directory.js.map +1 -0
- package/dist/utils/stringify-ast.d.ts +6 -0
- package/dist/utils/stringify-ast.d.ts.map +1 -0
- package/dist/utils/stringify-ast.js +8 -0
- package/dist/utils/stringify-ast.js.map +1 -0
- package/dist/utils/strip-markdown.d.ts +11 -0
- package/dist/utils/strip-markdown.d.ts.map +1 -0
- package/dist/utils/strip-markdown.js +48 -0
- package/dist/utils/strip-markdown.js.map +1 -0
- package/dist/validator.d.ts +10 -0
- package/dist/validator.d.ts.map +1 -0
- package/dist/validator.js +55 -0
- package/dist/validator.js.map +1 -0
- package/package.json +3 -3
- package/src/document.ts +26 -8
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import type { ModelDefinition, ValidationResult } from "./types";
|
|
2
|
+
import type { Document } from "./document";
|
|
3
|
+
/**
|
|
4
|
+
* Standalone validator that checks a document against a model definition's
|
|
5
|
+
* Zod schemas (both meta and section schemas).
|
|
6
|
+
*
|
|
7
|
+
* Can be used directly for validation without creating a full model instance.
|
|
8
|
+
*/
|
|
9
|
+
export declare function validateDocument(document: Document, definition: ModelDefinition): ValidationResult;
|
|
10
|
+
//# sourceMappingURL=validator.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"validator.d.ts","sourceRoot":"","sources":["../src/validator.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EACV,eAAe,EAEf,gBAAgB,EACjB,MAAM,SAAS,CAAC;AACjB,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAG3C;;;;;GAKG;AACH,wBAAgB,gBAAgB,CAC9B,QAAQ,EAAE,QAAQ,EAClB,UAAU,EAAE,eAAe,GAC1B,gBAAgB,CAkDlB"}
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
import { matchPatterns } from "./utils/match-pattern";
|
|
2
|
+
/**
|
|
3
|
+
* Standalone validator that checks a document against a model definition's
|
|
4
|
+
* Zod schemas (both meta and section schemas).
|
|
5
|
+
*
|
|
6
|
+
* Can be used directly for validation without creating a full model instance.
|
|
7
|
+
*/
|
|
8
|
+
export function validateDocument(document, definition) {
|
|
9
|
+
const errors = [];
|
|
10
|
+
// Validate meta
|
|
11
|
+
const patternMeta = definition.pattern
|
|
12
|
+
? matchPatterns(definition.pattern, document.id) ?? {}
|
|
13
|
+
: {};
|
|
14
|
+
const rawMeta = { ...(definition.defaults ?? {}), ...patternMeta, ...document.meta };
|
|
15
|
+
const metaResult = definition.meta.safeParse(rawMeta);
|
|
16
|
+
if (!metaResult.success) {
|
|
17
|
+
errors.push(...metaResult.error.issues);
|
|
18
|
+
}
|
|
19
|
+
// Validate title: require H1 heading unless titleOptional or meta.title exists
|
|
20
|
+
if (!definition.titleOptional) {
|
|
21
|
+
const hasMetaTitle = !!document.meta.title;
|
|
22
|
+
const hasH1 = !!document.astQuery.select("heading");
|
|
23
|
+
if (!hasMetaTitle && !hasH1) {
|
|
24
|
+
errors.push({
|
|
25
|
+
code: "custom",
|
|
26
|
+
path: ["title"],
|
|
27
|
+
message: `Document "${document.id}" is missing a title. Add an H1 heading or set meta.title.`,
|
|
28
|
+
});
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
// Validate sections
|
|
32
|
+
if (definition.sections) {
|
|
33
|
+
for (const [key, sd] of Object.entries(definition.sections)) {
|
|
34
|
+
const sectionDef = sd;
|
|
35
|
+
if (sectionDef.schema) {
|
|
36
|
+
const sectionQuery = document.querySection(sectionDef.heading);
|
|
37
|
+
const sectionData = sectionDef.extract(sectionQuery);
|
|
38
|
+
const sResult = sectionDef.schema.safeParse(sectionData);
|
|
39
|
+
if (!sResult.success) {
|
|
40
|
+
for (const issue of sResult.error.issues) {
|
|
41
|
+
errors.push({
|
|
42
|
+
...issue,
|
|
43
|
+
path: ["sections", key, ...issue.path],
|
|
44
|
+
});
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
return {
|
|
51
|
+
valid: errors.length === 0,
|
|
52
|
+
errors,
|
|
53
|
+
};
|
|
54
|
+
}
|
|
55
|
+
//# sourceMappingURL=validator.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"validator.js","sourceRoot":"","sources":["../src/validator.ts"],"names":[],"mappings":"AAOA,OAAO,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AAEtD;;;;;GAKG;AACH,MAAM,UAAU,gBAAgB,CAC9B,QAAkB,EAClB,UAA2B;IAE3B,MAAM,MAAM,GAAiB,EAAE,CAAC;IAEhC,gBAAgB;IAChB,MAAM,WAAW,GAAG,UAAU,CAAC,OAAO;QACpC,CAAC,CAAC,aAAa,CAAC,UAAU,CAAC,OAAO,EAAE,QAAQ,CAAC,EAAE,CAAC,IAAI,EAAE;QACtD,CAAC,CAAC,EAAE,CAAC;IACP,MAAM,OAAO,GAAG,EAAE,GAAG,CAAC,UAAU,CAAC,QAAQ,IAAI,EAAE,CAAC,EAAE,GAAG,WAAW,EAAE,GAAG,QAAQ,CAAC,IAAI,EAAE,CAAC;IACrF,MAAM,UAAU,GAAG,UAAU,CAAC,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;IACtD,IAAI,CAAC,UAAU,CAAC,OAAO,EAAE,CAAC;QACxB,MAAM,CAAC,IAAI,CAAC,GAAG,UAAU,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;IAC1C,CAAC;IAED,+EAA+E;IAC/E,IAAI,CAAC,UAAU,CAAC,aAAa,EAAE,CAAC;QAC9B,MAAM,YAAY,GAAG,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC;QAC3C,MAAM,KAAK,GAAG,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;QACpD,IAAI,CAAC,YAAY,IAAI,CAAC,KAAK,EAAE,CAAC;YAC5B,MAAM,CAAC,IAAI,CAAC;gBACV,IAAI,EAAE,QAAQ;gBACd,IAAI,EAAE,CAAC,OAAO,CAAC;gBACf,OAAO,EAAE,aAAa,QAAQ,CAAC,EAAE,4DAA4D;aAC9F,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IAED,oBAAoB;IACpB,IAAI,UAAU,CAAC,QAAQ,EAAE,CAAC;QACxB,KAAK,MAAM,CAAC,GAAG,EAAE,EAAE,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;YAC5D,MAAM,UAAU,GAAG,EAAgC,CAAC;YACpD,IAAI,UAAU,CAAC,MAAM,EAAE,CAAC;gBACtB,MAAM,YAAY,GAAG,QAAQ,CAAC,YAAY,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;gBAC/D,MAAM,WAAW,GAAG,UAAU,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC;gBACrD,MAAM,OAAO,GAAG,UAAU,CAAC,MAAM,CAAC,SAAS,CAAC,WAAW,CAAC,CAAC;gBACzD,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC;oBACrB,KAAK,MAAM,KAAK,IAAI,OAAO,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC;wBACzC,MAAM,CAAC,IAAI,CAAC;4BACV,GAAG,KAAK;4BACR,IAAI,EAAE,CAAC,UAAU,EAAE,GAAG,EAAE,GAAG,KAAK,CAAC,IAAI,CAAC;yBACvC,CAAC,CAAC;oBACL,CAAC;gBACH,CAAC;YACH,CAAC;QACH,CAAC;IACH,CAAC;IAED,OAAO;QACL,KAAK,EAAE,MAAM,CAAC,MAAM,KAAK,CAAC;QAC1B,MAAM;KACP,CAAC;AACJ,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "contentbase",
|
|
3
|
-
"version": "0.4.
|
|
3
|
+
"version": "0.4.2",
|
|
4
4
|
"repository": "https://github.com/soederpop/contentbase",
|
|
5
5
|
"website": "https://contentbase.soederpop.com",
|
|
6
6
|
"type": "module",
|
|
@@ -11,8 +11,8 @@
|
|
|
11
11
|
"contentbase": "./src/cli/index.ts"
|
|
12
12
|
},
|
|
13
13
|
"scripts": {
|
|
14
|
-
"test": "
|
|
15
|
-
"test:watch": "
|
|
14
|
+
"test": "bun test",
|
|
15
|
+
"test:watch": "bun test --watch",
|
|
16
16
|
"build": "find dist -name '*.d.ts' -o -name '*.d.ts.map' -o -name '*.js' -o -name '*.js.map' | xargs rm -f 2>/dev/null; tsc",
|
|
17
17
|
"typecheck": "tsc --noEmit",
|
|
18
18
|
"examples": "bun run scripts/examples/run-all.ts",
|
package/src/document.ts
CHANGED
|
@@ -17,24 +17,34 @@ import type { Root, Content, RootContent, Heading } from "mdast";
|
|
|
17
17
|
import type { Collection } from "./collection";
|
|
18
18
|
|
|
19
19
|
export interface DocumentOptions {
|
|
20
|
-
id
|
|
20
|
+
/** Document id. Optional for standalone documents — derived from `path` or defaults to "untitled". */
|
|
21
|
+
id?: string;
|
|
21
22
|
content: string;
|
|
22
23
|
meta?: Record<string, unknown>;
|
|
23
|
-
collection
|
|
24
|
+
/** Owning collection. Omit (or pass null) to create a standalone in-memory document. */
|
|
25
|
+
collection?: Collection | null;
|
|
26
|
+
/** Explicit file path. Used as-is by the `path` getter for standalone documents. */
|
|
27
|
+
path?: string;
|
|
24
28
|
ast?: Root;
|
|
25
29
|
}
|
|
26
30
|
|
|
27
31
|
export class Document {
|
|
28
32
|
readonly id: string;
|
|
29
|
-
readonly collection: Collection;
|
|
33
|
+
readonly collection: Collection | null;
|
|
30
34
|
|
|
31
35
|
#content: string;
|
|
32
36
|
#meta: Record<string, unknown>;
|
|
33
37
|
#ast: Root | null;
|
|
38
|
+
#path: string | null;
|
|
34
39
|
|
|
35
40
|
constructor(options: DocumentOptions) {
|
|
36
|
-
this.id =
|
|
37
|
-
|
|
41
|
+
this.id =
|
|
42
|
+
options.id ??
|
|
43
|
+
(options.path
|
|
44
|
+
? options.path.replace(/\.mdx?$/, "").split("/").filter(Boolean).pop()!
|
|
45
|
+
: "untitled");
|
|
46
|
+
this.collection = options.collection ?? null;
|
|
47
|
+
this.#path = options.path ?? null;
|
|
38
48
|
this.#content = options.content;
|
|
39
49
|
this.#meta = options.meta ?? {};
|
|
40
50
|
this.#ast = options.ast ?? null;
|
|
@@ -68,15 +78,15 @@ export class Document {
|
|
|
68
78
|
}
|
|
69
79
|
|
|
70
80
|
get createdAt(): Date | undefined {
|
|
71
|
-
return this.collection
|
|
81
|
+
return this.collection?.items.get(this.id)?.createdAt;
|
|
72
82
|
}
|
|
73
83
|
|
|
74
84
|
get updatedAt(): Date | undefined {
|
|
75
|
-
return this.collection
|
|
85
|
+
return this.collection?.items.get(this.id)?.updatedAt;
|
|
76
86
|
}
|
|
77
87
|
|
|
78
88
|
get size(): number | undefined {
|
|
79
|
-
return this.collection
|
|
89
|
+
return this.collection?.items.get(this.id)?.size;
|
|
80
90
|
}
|
|
81
91
|
|
|
82
92
|
get rawContent(): string {
|
|
@@ -88,6 +98,8 @@ export class Document {
|
|
|
88
98
|
}
|
|
89
99
|
|
|
90
100
|
get path(): string {
|
|
101
|
+
if (this.#path) return this.#path;
|
|
102
|
+
if (!this.collection) return `${this.id}.md`;
|
|
91
103
|
return this.collection.resolve(this.id) + ".md";
|
|
92
104
|
}
|
|
93
105
|
|
|
@@ -512,6 +524,9 @@ export class Document {
|
|
|
512
524
|
async save(
|
|
513
525
|
options: { normalize?: boolean; extension?: string } = {}
|
|
514
526
|
): Promise<this> {
|
|
527
|
+
if (!this.collection) {
|
|
528
|
+
throw new Error("Cannot save a standalone document — it has no collection");
|
|
529
|
+
}
|
|
515
530
|
if (options.normalize !== false) {
|
|
516
531
|
this.normalizeHeadings();
|
|
517
532
|
}
|
|
@@ -523,6 +538,9 @@ export class Document {
|
|
|
523
538
|
}
|
|
524
539
|
|
|
525
540
|
async reload(): Promise<this> {
|
|
541
|
+
if (!this.collection) {
|
|
542
|
+
throw new Error("Cannot reload a standalone document — it has no collection");
|
|
543
|
+
}
|
|
526
544
|
const item = await this.collection.readItem(this.id);
|
|
527
545
|
this.#content = item.content;
|
|
528
546
|
this.#meta = item.meta;
|