@vibe-agent-toolkit/resources 0.1.2 → 0.1.3
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/README.md +255 -0
- package/dist/frontmatter-validator.d.ts +40 -0
- package/dist/frontmatter-validator.d.ts.map +1 -0
- package/dist/frontmatter-validator.js +82 -0
- package/dist/frontmatter-validator.js.map +1 -0
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -0
- package/dist/index.js.map +1 -1
- package/dist/link-parser.d.ts +2 -0
- package/dist/link-parser.d.ts.map +1 -1
- package/dist/link-parser.js +41 -0
- package/dist/link-parser.js.map +1 -1
- package/dist/resource-registry.d.ts +17 -2
- package/dist/resource-registry.d.ts.map +1 -1
- package/dist/resource-registry.js +33 -2
- package/dist/resource-registry.js.map +1 -1
- package/dist/schemas/resource-metadata.d.ts +7 -1
- package/dist/schemas/resource-metadata.d.ts.map +1 -1
- package/dist/schemas/resource-metadata.js +5 -1
- package/dist/schemas/resource-metadata.js.map +1 -1
- package/dist/schemas/validation-result.d.ts +9 -0
- package/dist/schemas/validation-result.d.ts.map +1 -1
- package/dist/schemas/validation-result.js +9 -0
- package/dist/schemas/validation-result.js.map +1 -1
- package/dist/types.d.ts +1 -0
- package/dist/types.d.ts.map +1 -1
- package/package.json +5 -2
- package/src/frontmatter-validator.ts +95 -0
- package/src/index.ts +3 -0
- package/src/link-parser.ts +50 -0
- package/src/resource-registry.ts +47 -2
- package/src/schemas/resource-metadata.ts +5 -1
- package/src/schemas/validation-result.ts +9 -0
- package/src/types.ts +8 -0
package/README.md
CHANGED
|
@@ -6,6 +6,7 @@ Markdown resource parsing, validation, and link integrity checking for AI agent
|
|
|
6
6
|
|
|
7
7
|
- **Parse markdown files** - Extract links, headings, and metadata using unified/remark
|
|
8
8
|
- **Validate link integrity** - Check local file links, anchor links, and detect broken references
|
|
9
|
+
- **Frontmatter support** - Parse YAML frontmatter, optionally validate against JSON Schemas
|
|
9
10
|
- **Track resource collections** - Manage multiple markdown files with automatic ID generation
|
|
10
11
|
- **Resolve cross-references** - Link resources together and track dependencies
|
|
11
12
|
- **Query capabilities** - Find resources by path, ID, or glob patterns with lazy evaluation
|
|
@@ -570,6 +571,260 @@ type ValidationSeverity = 'error' | 'warning' | 'info';
|
|
|
570
571
|
- `warning` - Non-critical issue that should be addressed (e.g., questionable link format)
|
|
571
572
|
- `info` - Informational message (e.g., external URL not validated)
|
|
572
573
|
|
|
574
|
+
## Frontmatter Support
|
|
575
|
+
|
|
576
|
+
The resources package parses YAML frontmatter from markdown files and stores it in `ResourceMetadata.frontmatter`. You can optionally validate frontmatter against JSON Schemas.
|
|
577
|
+
|
|
578
|
+
### Basic Frontmatter Parsing
|
|
579
|
+
|
|
580
|
+
Frontmatter is automatically parsed when resources are added:
|
|
581
|
+
|
|
582
|
+
```typescript
|
|
583
|
+
import { ResourceRegistry } from '@vibe-agent-toolkit/resources';
|
|
584
|
+
|
|
585
|
+
const registry = new ResourceRegistry();
|
|
586
|
+
await registry.addResource('./docs/guide.md');
|
|
587
|
+
|
|
588
|
+
const resource = registry.getResource('./docs/guide.md');
|
|
589
|
+
console.log('Frontmatter:', resource.frontmatter);
|
|
590
|
+
// { title: 'User Guide', category: 'tutorial', tags: ['api', 'getting-started'] }
|
|
591
|
+
```
|
|
592
|
+
|
|
593
|
+
**Supported format**: YAML frontmatter between `---` delimiters at the start of the file:
|
|
594
|
+
|
|
595
|
+
```markdown
|
|
596
|
+
---
|
|
597
|
+
title: User Guide
|
|
598
|
+
category: tutorial
|
|
599
|
+
tags:
|
|
600
|
+
- api
|
|
601
|
+
- getting-started
|
|
602
|
+
---
|
|
603
|
+
|
|
604
|
+
# Content starts here
|
|
605
|
+
```
|
|
606
|
+
|
|
607
|
+
### Frontmatter Validation
|
|
608
|
+
|
|
609
|
+
Validate frontmatter against JSON Schema to enforce required fields and data types:
|
|
610
|
+
|
|
611
|
+
```typescript
|
|
612
|
+
import { FrontmatterValidator } from '@vibe-agent-toolkit/resources';
|
|
613
|
+
|
|
614
|
+
// Create validator with JSON Schema
|
|
615
|
+
const validator = new FrontmatterValidator({
|
|
616
|
+
type: 'object',
|
|
617
|
+
required: ['title', 'description'],
|
|
618
|
+
properties: {
|
|
619
|
+
title: { type: 'string', minLength: 1 },
|
|
620
|
+
description: { type: 'string' },
|
|
621
|
+
category: { enum: ['guide', 'reference', 'tutorial', 'api'] },
|
|
622
|
+
tags: { type: 'array', items: { type: 'string' } }
|
|
623
|
+
}
|
|
624
|
+
});
|
|
625
|
+
|
|
626
|
+
// Validate a resource
|
|
627
|
+
const resource = registry.getResource('./docs/guide.md');
|
|
628
|
+
const result = validator.validate(resource);
|
|
629
|
+
|
|
630
|
+
if (!result.valid) {
|
|
631
|
+
console.error('Validation errors:', result.errors);
|
|
632
|
+
}
|
|
633
|
+
```
|
|
634
|
+
|
|
635
|
+
### Schema Design Patterns
|
|
636
|
+
|
|
637
|
+
#### Pattern 1: Required Fields, Allow Extras
|
|
638
|
+
|
|
639
|
+
Most projects have files (README.md, etc.) without frontmatter. Use `required` for must-have fields but allow custom fields:
|
|
640
|
+
|
|
641
|
+
```json
|
|
642
|
+
{
|
|
643
|
+
"type": "object",
|
|
644
|
+
"required": ["title", "description"],
|
|
645
|
+
"additionalProperties": true,
|
|
646
|
+
"properties": {
|
|
647
|
+
"title": { "type": "string", "minLength": 1 },
|
|
648
|
+
"description": { "type": "string" },
|
|
649
|
+
"category": { "enum": ["guide", "reference", "tutorial", "api"] }
|
|
650
|
+
}
|
|
651
|
+
}
|
|
652
|
+
```
|
|
653
|
+
|
|
654
|
+
**Behavior**:
|
|
655
|
+
- Files without frontmatter: **Error** (missing required fields)
|
|
656
|
+
- Files with partial frontmatter: **Error** (missing required fields)
|
|
657
|
+
- Files with complete frontmatter: **Valid**
|
|
658
|
+
- Extra fields allowed: **Yes**
|
|
659
|
+
|
|
660
|
+
#### Pattern 2: Optional Fields Only
|
|
661
|
+
|
|
662
|
+
For projects where frontmatter is optional:
|
|
663
|
+
|
|
664
|
+
```json
|
|
665
|
+
{
|
|
666
|
+
"type": "object",
|
|
667
|
+
"additionalProperties": true,
|
|
668
|
+
"properties": {
|
|
669
|
+
"title": { "type": "string" },
|
|
670
|
+
"description": { "type": "string" },
|
|
671
|
+
"category": { "enum": ["guide", "reference", "tutorial", "api"] }
|
|
672
|
+
}
|
|
673
|
+
}
|
|
674
|
+
```
|
|
675
|
+
|
|
676
|
+
**Behavior**:
|
|
677
|
+
- Files without frontmatter: **Valid** (all fields optional)
|
|
678
|
+
- Files with frontmatter: **Validated** (fields must match schema types)
|
|
679
|
+
- Extra fields allowed: **Yes**
|
|
680
|
+
|
|
681
|
+
#### Pattern 3: Strict Schema
|
|
682
|
+
|
|
683
|
+
For knowledge bases where all metadata is required:
|
|
684
|
+
|
|
685
|
+
```json
|
|
686
|
+
{
|
|
687
|
+
"type": "object",
|
|
688
|
+
"required": ["title", "description", "category", "keywords"],
|
|
689
|
+
"additionalProperties": false,
|
|
690
|
+
"properties": {
|
|
691
|
+
"title": { "type": "string", "minLength": 1 },
|
|
692
|
+
"description": { "type": "string" },
|
|
693
|
+
"category": { "enum": ["guide", "reference", "tutorial", "api"] },
|
|
694
|
+
"keywords": { "type": "array", "items": { "type": "string" } },
|
|
695
|
+
"source_url": { "type": "string", "format": "uri" }
|
|
696
|
+
}
|
|
697
|
+
}
|
|
698
|
+
```
|
|
699
|
+
|
|
700
|
+
**Behavior**:
|
|
701
|
+
- Files without frontmatter: **Error** (missing required fields)
|
|
702
|
+
- Extra fields: **Error** (`additionalProperties: false`)
|
|
703
|
+
- All fields must match types: **Yes**
|
|
704
|
+
|
|
705
|
+
### CLI Usage
|
|
706
|
+
|
|
707
|
+
The `vat resources validate` command supports frontmatter validation:
|
|
708
|
+
|
|
709
|
+
```bash
|
|
710
|
+
# Parse frontmatter, report YAML errors only
|
|
711
|
+
vat resources validate docs/
|
|
712
|
+
|
|
713
|
+
# Validate against JSON Schema
|
|
714
|
+
vat resources validate docs/ --frontmatter-schema schema.json
|
|
715
|
+
|
|
716
|
+
# Example output with schema validation
|
|
717
|
+
vat resources validate docs/ --frontmatter-schema schema.json
|
|
718
|
+
# Resources validated: 42
|
|
719
|
+
# Links validated: 156
|
|
720
|
+
# Frontmatter errors:
|
|
721
|
+
# docs/guide.md: Missing required property 'description'
|
|
722
|
+
# docs/api.md: Property 'category' must be one of: guide, reference, tutorial, api
|
|
723
|
+
```
|
|
724
|
+
|
|
725
|
+
### Validation Result
|
|
726
|
+
|
|
727
|
+
Frontmatter validation results are included in `ValidationResult`:
|
|
728
|
+
|
|
729
|
+
```typescript
|
|
730
|
+
interface ValidationResult {
|
|
731
|
+
// ... existing fields
|
|
732
|
+
frontmatterValidation?: {
|
|
733
|
+
valid: boolean;
|
|
734
|
+
errors: Array<{
|
|
735
|
+
resourcePath: string;
|
|
736
|
+
message: string;
|
|
737
|
+
field?: string;
|
|
738
|
+
}>;
|
|
739
|
+
};
|
|
740
|
+
}
|
|
741
|
+
```
|
|
742
|
+
|
|
743
|
+
### Example Schemas
|
|
744
|
+
|
|
745
|
+
#### Knowledge Base Schema
|
|
746
|
+
|
|
747
|
+
```json
|
|
748
|
+
{
|
|
749
|
+
"type": "object",
|
|
750
|
+
"required": ["title", "description"],
|
|
751
|
+
"additionalProperties": true,
|
|
752
|
+
"properties": {
|
|
753
|
+
"title": { "type": "string", "minLength": 1 },
|
|
754
|
+
"description": { "type": "string" },
|
|
755
|
+
"category": { "enum": ["guide", "reference", "tutorial", "api"] },
|
|
756
|
+
"keywords": { "type": "array", "items": { "type": "string" } },
|
|
757
|
+
"source_url": { "type": "string", "format": "uri" },
|
|
758
|
+
"author": { "type": "string" },
|
|
759
|
+
"last_updated": { "type": "string", "format": "date" }
|
|
760
|
+
}
|
|
761
|
+
}
|
|
762
|
+
```
|
|
763
|
+
|
|
764
|
+
#### Blog Post Schema
|
|
765
|
+
|
|
766
|
+
```json
|
|
767
|
+
{
|
|
768
|
+
"type": "object",
|
|
769
|
+
"required": ["title", "date", "author"],
|
|
770
|
+
"additionalProperties": false,
|
|
771
|
+
"properties": {
|
|
772
|
+
"title": { "type": "string", "minLength": 1 },
|
|
773
|
+
"date": { "type": "string", "format": "date" },
|
|
774
|
+
"author": { "type": "string" },
|
|
775
|
+
"tags": { "type": "array", "items": { "type": "string" } },
|
|
776
|
+
"excerpt": { "type": "string" },
|
|
777
|
+
"featured": { "type": "boolean" }
|
|
778
|
+
}
|
|
779
|
+
}
|
|
780
|
+
```
|
|
781
|
+
|
|
782
|
+
#### API Documentation Schema
|
|
783
|
+
|
|
784
|
+
```json
|
|
785
|
+
{
|
|
786
|
+
"type": "object",
|
|
787
|
+
"required": ["title", "api_version"],
|
|
788
|
+
"additionalProperties": true,
|
|
789
|
+
"properties": {
|
|
790
|
+
"title": { "type": "string", "minLength": 1 },
|
|
791
|
+
"api_version": { "type": "string", "pattern": "^\\d+\\.\\d+\\.\\d+$" },
|
|
792
|
+
"endpoint": { "type": "string" },
|
|
793
|
+
"method": { "enum": ["GET", "POST", "PUT", "PATCH", "DELETE"] },
|
|
794
|
+
"deprecated": { "type": "boolean" }
|
|
795
|
+
}
|
|
796
|
+
}
|
|
797
|
+
```
|
|
798
|
+
|
|
799
|
+
### Error Handling
|
|
800
|
+
|
|
801
|
+
```typescript
|
|
802
|
+
const validator = new FrontmatterValidator(schema);
|
|
803
|
+
|
|
804
|
+
for (const resource of registry.getAllResources()) {
|
|
805
|
+
const result = validator.validate(resource);
|
|
806
|
+
|
|
807
|
+
if (!result.valid) {
|
|
808
|
+
console.error(`\n${resource.filePath}:`);
|
|
809
|
+
for (const error of result.errors) {
|
|
810
|
+
console.error(` - ${error.message}`);
|
|
811
|
+
if (error.field) {
|
|
812
|
+
console.error(` Field: ${error.field}`);
|
|
813
|
+
}
|
|
814
|
+
}
|
|
815
|
+
}
|
|
816
|
+
}
|
|
817
|
+
```
|
|
818
|
+
|
|
819
|
+
### Common Validation Errors
|
|
820
|
+
|
|
821
|
+
- **Missing required property**: Field specified in `required` array is missing
|
|
822
|
+
- **Invalid type**: Field value doesn't match the type (e.g., number instead of string)
|
|
823
|
+
- **Invalid enum value**: Field value is not in the allowed enum values
|
|
824
|
+
- **Invalid format**: String doesn't match the format constraint (e.g., "uri", "date")
|
|
825
|
+
- **Additional property not allowed**: Extra field present when `additionalProperties: false`
|
|
826
|
+
- **YAML parsing error**: Invalid YAML syntax in frontmatter
|
|
827
|
+
|
|
573
828
|
## Schemas
|
|
574
829
|
|
|
575
830
|
All types are backed by Zod schemas for runtime validation. You can import schemas for advanced use cases:
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Frontmatter validation using JSON Schema.
|
|
3
|
+
*
|
|
4
|
+
* IMPORTANT: This module uses AJV specifically for validating arbitrary
|
|
5
|
+
* user-provided JSON Schemas against frontmatter data. For all TypeScript
|
|
6
|
+
* validation and internal schemas, use Zod instead.
|
|
7
|
+
*
|
|
8
|
+
* Why AJV here?
|
|
9
|
+
* - Users provide standard JSON Schema files for frontmatter validation
|
|
10
|
+
* - AJV is the industry standard JSON Schema validator
|
|
11
|
+
* - Zod is for TypeScript type safety + runtime validation
|
|
12
|
+
*
|
|
13
|
+
* This is the ONLY place in the codebase that should use AJV.
|
|
14
|
+
*/
|
|
15
|
+
import type { ValidationIssue } from './schemas/validation-result.js';
|
|
16
|
+
/**
|
|
17
|
+
* Validate frontmatter against a JSON Schema.
|
|
18
|
+
*
|
|
19
|
+
* Behavior:
|
|
20
|
+
* - Missing frontmatter: Error only if schema has required fields
|
|
21
|
+
* - Extra fields: Allowed by default (unless schema sets additionalProperties: false)
|
|
22
|
+
* - Type mismatches: Always reported as errors
|
|
23
|
+
*
|
|
24
|
+
* @param frontmatter - Parsed frontmatter object (or undefined if no frontmatter)
|
|
25
|
+
* @param schema - JSON Schema object
|
|
26
|
+
* @param resourcePath - File path for error reporting
|
|
27
|
+
* @returns Array of validation issues (empty if valid)
|
|
28
|
+
*
|
|
29
|
+
* @example
|
|
30
|
+
* ```typescript
|
|
31
|
+
* const schema = {
|
|
32
|
+
* type: 'object',
|
|
33
|
+
* required: ['title'],
|
|
34
|
+
* properties: { title: { type: 'string' } }
|
|
35
|
+
* };
|
|
36
|
+
* const issues = validateFrontmatter(frontmatter, schema, '/docs/guide.md');
|
|
37
|
+
* ```
|
|
38
|
+
*/
|
|
39
|
+
export declare function validateFrontmatter(frontmatter: Record<string, unknown> | undefined, schema: object, resourcePath: string): ValidationIssue[];
|
|
40
|
+
//# sourceMappingURL=frontmatter-validator.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"frontmatter-validator.d.ts","sourceRoot":"","sources":["../src/frontmatter-validator.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAIH,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,gCAAgC,CAAC;AAEtE;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,wBAAgB,mBAAmB,CACjC,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS,EAChD,MAAM,EAAE,MAAM,EACd,YAAY,EAAE,MAAM,GACnB,eAAe,EAAE,CAgDnB"}
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Frontmatter validation using JSON Schema.
|
|
3
|
+
*
|
|
4
|
+
* IMPORTANT: This module uses AJV specifically for validating arbitrary
|
|
5
|
+
* user-provided JSON Schemas against frontmatter data. For all TypeScript
|
|
6
|
+
* validation and internal schemas, use Zod instead.
|
|
7
|
+
*
|
|
8
|
+
* Why AJV here?
|
|
9
|
+
* - Users provide standard JSON Schema files for frontmatter validation
|
|
10
|
+
* - AJV is the industry standard JSON Schema validator
|
|
11
|
+
* - Zod is for TypeScript type safety + runtime validation
|
|
12
|
+
*
|
|
13
|
+
* This is the ONLY place in the codebase that should use AJV.
|
|
14
|
+
*/
|
|
15
|
+
import { Ajv } from 'ajv';
|
|
16
|
+
/**
|
|
17
|
+
* Validate frontmatter against a JSON Schema.
|
|
18
|
+
*
|
|
19
|
+
* Behavior:
|
|
20
|
+
* - Missing frontmatter: Error only if schema has required fields
|
|
21
|
+
* - Extra fields: Allowed by default (unless schema sets additionalProperties: false)
|
|
22
|
+
* - Type mismatches: Always reported as errors
|
|
23
|
+
*
|
|
24
|
+
* @param frontmatter - Parsed frontmatter object (or undefined if no frontmatter)
|
|
25
|
+
* @param schema - JSON Schema object
|
|
26
|
+
* @param resourcePath - File path for error reporting
|
|
27
|
+
* @returns Array of validation issues (empty if valid)
|
|
28
|
+
*
|
|
29
|
+
* @example
|
|
30
|
+
* ```typescript
|
|
31
|
+
* const schema = {
|
|
32
|
+
* type: 'object',
|
|
33
|
+
* required: ['title'],
|
|
34
|
+
* properties: { title: { type: 'string' } }
|
|
35
|
+
* };
|
|
36
|
+
* const issues = validateFrontmatter(frontmatter, schema, '/docs/guide.md');
|
|
37
|
+
* ```
|
|
38
|
+
*/
|
|
39
|
+
export function validateFrontmatter(frontmatter, schema, resourcePath) {
|
|
40
|
+
const issues = [];
|
|
41
|
+
// Configure AJV with permissive settings
|
|
42
|
+
const ajv = new Ajv({
|
|
43
|
+
strict: false, // Allow non-strict schemas
|
|
44
|
+
allErrors: true, // Report all errors, not just first
|
|
45
|
+
allowUnionTypes: true, // Support JSON Schema draft features
|
|
46
|
+
});
|
|
47
|
+
const validate = ajv.compile(schema);
|
|
48
|
+
// Case 1: No frontmatter present
|
|
49
|
+
if (!frontmatter) {
|
|
50
|
+
// Check if schema requires any fields
|
|
51
|
+
const schemaRequires = schema.required;
|
|
52
|
+
if (schemaRequires && schemaRequires.length > 0) {
|
|
53
|
+
issues.push({
|
|
54
|
+
severity: 'error',
|
|
55
|
+
resourcePath,
|
|
56
|
+
line: 1,
|
|
57
|
+
type: 'frontmatter_missing',
|
|
58
|
+
link: '',
|
|
59
|
+
message: `Missing required frontmatter (schema requires: ${schemaRequires.join(', ')})`,
|
|
60
|
+
});
|
|
61
|
+
}
|
|
62
|
+
return issues;
|
|
63
|
+
}
|
|
64
|
+
// Case 2: Frontmatter present, validate against schema
|
|
65
|
+
const valid = validate(frontmatter);
|
|
66
|
+
if (!valid && validate.errors) {
|
|
67
|
+
for (const error of validate.errors) {
|
|
68
|
+
const field = error.instancePath.replace(/^\//, '') ?? 'root';
|
|
69
|
+
const message = error.message ?? 'validation failed';
|
|
70
|
+
issues.push({
|
|
71
|
+
severity: 'error',
|
|
72
|
+
resourcePath,
|
|
73
|
+
line: 1,
|
|
74
|
+
type: 'frontmatter_schema_error',
|
|
75
|
+
link: '',
|
|
76
|
+
message: `Frontmatter validation: ${field} ${message}`,
|
|
77
|
+
});
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
return issues;
|
|
81
|
+
}
|
|
82
|
+
//# sourceMappingURL=frontmatter-validator.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"frontmatter-validator.js","sourceRoot":"","sources":["../src/frontmatter-validator.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,OAAO,EAAE,GAAG,EAAE,MAAM,KAAK,CAAC;AAI1B;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,MAAM,UAAU,mBAAmB,CACjC,WAAgD,EAChD,MAAc,EACd,YAAoB;IAEpB,MAAM,MAAM,GAAsB,EAAE,CAAC;IAErC,yCAAyC;IACzC,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC;QAClB,MAAM,EAAE,KAAK,EAAY,2BAA2B;QACpD,SAAS,EAAE,IAAI,EAAU,oCAAoC;QAC7D,eAAe,EAAE,IAAI,EAAI,qCAAqC;KAC/D,CAAC,CAAC;IAEH,MAAM,QAAQ,GAAG,GAAG,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;IAErC,iCAAiC;IACjC,IAAI,CAAC,WAAW,EAAE,CAAC;QACjB,sCAAsC;QACtC,MAAM,cAAc,GAAI,MAAkC,CAAC,QAAQ,CAAC;QACpE,IAAI,cAAc,IAAI,cAAc,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAChD,MAAM,CAAC,IAAI,CAAC;gBACV,QAAQ,EAAE,OAAO;gBACjB,YAAY;gBACZ,IAAI,EAAE,CAAC;gBACP,IAAI,EAAE,qBAAqB;gBAC3B,IAAI,EAAE,EAAE;gBACR,OAAO,EAAE,kDAAkD,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG;aACxF,CAAC,CAAC;QACL,CAAC;QACD,OAAO,MAAM,CAAC;IAChB,CAAC;IAED,uDAAuD;IACvD,MAAM,KAAK,GAAG,QAAQ,CAAC,WAAW,CAAC,CAAC;IAEpC,IAAI,CAAC,KAAK,IAAI,QAAQ,CAAC,MAAM,EAAE,CAAC;QAC9B,KAAK,MAAM,KAAK,IAAI,QAAQ,CAAC,MAAM,EAAE,CAAC;YACpC,MAAM,KAAK,GAAG,KAAK,CAAC,YAAY,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,IAAI,MAAM,CAAC;YAC9D,MAAM,OAAO,GAAG,KAAK,CAAC,OAAO,IAAI,mBAAmB,CAAC;YACrD,MAAM,CAAC,IAAI,CAAC;gBACV,QAAQ,EAAE,OAAO;gBACjB,YAAY;gBACZ,IAAI,EAAE,CAAC;gBACP,IAAI,EAAE,0BAA0B;gBAChC,IAAI,EAAE,EAAE;gBACR,OAAO,EAAE,2BAA2B,KAAK,IAAI,OAAO,EAAE;aACvD,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC"}
|
package/dist/index.d.ts
CHANGED
|
@@ -33,4 +33,5 @@ export type { LinkType, HeadingNode, ResourceLink, ResourceMetadata, ValidationS
|
|
|
33
33
|
export { LinkTypeSchema, HeadingNodeSchema, ResourceLinkSchema, ResourceMetadataSchema, } from './schemas/resource-metadata.js';
|
|
34
34
|
export { ValidationSeveritySchema, ValidationIssueSchema, ValidationResultSchema, } from './schemas/validation-result.js';
|
|
35
35
|
export { parseMarkdown, type ParseResult } from './link-parser.js';
|
|
36
|
+
export { validateFrontmatter } from './frontmatter-validator.js';
|
|
36
37
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AAGH,OAAO,EACL,gBAAgB,EAChB,KAAK,YAAY,EACjB,KAAK,uBAAuB,EAC5B,KAAK,aAAa,GACnB,MAAM,wBAAwB,CAAC;AAGhC,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAGpD,OAAO,EAAE,kBAAkB,EAAE,MAAM,0BAA0B,CAAC;AAG9D,YAAY,EAAE,2BAA2B,EAAE,MAAM,oCAAoC,CAAC;AAGtF,YAAY,EACV,QAAQ,EACR,WAAW,EACX,YAAY,EACZ,gBAAgB,EAChB,kBAAkB,EAClB,eAAe,EACf,gBAAgB,GACjB,MAAM,YAAY,CAAC;AAGpB,OAAO,EACL,cAAc,EACd,iBAAiB,EACjB,kBAAkB,EAClB,sBAAsB,GACvB,MAAM,gCAAgC,CAAC;AAExC,OAAO,EACL,wBAAwB,EACxB,qBAAqB,EACrB,sBAAsB,GACvB,MAAM,gCAAgC,CAAC;AAGxC,OAAO,EAAE,aAAa,EAAE,KAAK,WAAW,EAAE,MAAM,kBAAkB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AAGH,OAAO,EACL,gBAAgB,EAChB,KAAK,YAAY,EACjB,KAAK,uBAAuB,EAC5B,KAAK,aAAa,GACnB,MAAM,wBAAwB,CAAC;AAGhC,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAGpD,OAAO,EAAE,kBAAkB,EAAE,MAAM,0BAA0B,CAAC;AAG9D,YAAY,EAAE,2BAA2B,EAAE,MAAM,oCAAoC,CAAC;AAGtF,YAAY,EACV,QAAQ,EACR,WAAW,EACX,YAAY,EACZ,gBAAgB,EAChB,kBAAkB,EAClB,eAAe,EACf,gBAAgB,GACjB,MAAM,YAAY,CAAC;AAGpB,OAAO,EACL,cAAc,EACd,iBAAiB,EACjB,kBAAkB,EAClB,sBAAsB,GACvB,MAAM,gCAAgC,CAAC;AAExC,OAAO,EACL,wBAAwB,EACxB,qBAAqB,EACrB,sBAAsB,GACvB,MAAM,gCAAgC,CAAC;AAGxC,OAAO,EAAE,aAAa,EAAE,KAAK,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAGnE,OAAO,EAAE,mBAAmB,EAAE,MAAM,4BAA4B,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -36,6 +36,8 @@ export { LinkTypeSchema, HeadingNodeSchema, ResourceLinkSchema, ResourceMetadata
|
|
|
36
36
|
export { ValidationSeveritySchema, ValidationIssueSchema, ValidationResultSchema, } from './schemas/validation-result.js';
|
|
37
37
|
// Export parser interface for advanced use cases
|
|
38
38
|
export { parseMarkdown } from './link-parser.js';
|
|
39
|
+
// Export frontmatter validation
|
|
40
|
+
export { validateFrontmatter } from './frontmatter-validator.js';
|
|
39
41
|
// Note: link-parser and link-validator internals are NOT exported
|
|
40
42
|
// They are implementation details. Users should use ResourceRegistry API.
|
|
41
43
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AAEH,qCAAqC;AACrC,OAAO,EACL,gBAAgB,GAIjB,MAAM,wBAAwB,CAAC;AAEhC,yDAAyD;AACzD,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAEpD,oFAAoF;AACpF,OAAO,EAAE,kBAAkB,EAAE,MAAM,0BAA0B,CAAC;AAgB9D,qFAAqF;AACrF,OAAO,EACL,cAAc,EACd,iBAAiB,EACjB,kBAAkB,EAClB,sBAAsB,GACvB,MAAM,gCAAgC,CAAC;AAExC,OAAO,EACL,wBAAwB,EACxB,qBAAqB,EACrB,sBAAsB,GACvB,MAAM,gCAAgC,CAAC;AAExC,iDAAiD;AACjD,OAAO,EAAE,aAAa,EAAoB,MAAM,kBAAkB,CAAC;AAEnE,kEAAkE;AAClE,0EAA0E"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AAEH,qCAAqC;AACrC,OAAO,EACL,gBAAgB,GAIjB,MAAM,wBAAwB,CAAC;AAEhC,yDAAyD;AACzD,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAEpD,oFAAoF;AACpF,OAAO,EAAE,kBAAkB,EAAE,MAAM,0BAA0B,CAAC;AAgB9D,qFAAqF;AACrF,OAAO,EACL,cAAc,EACd,iBAAiB,EACjB,kBAAkB,EAClB,sBAAsB,GACvB,MAAM,gCAAgC,CAAC;AAExC,OAAO,EACL,wBAAwB,EACxB,qBAAqB,EACrB,sBAAsB,GACvB,MAAM,gCAAgC,CAAC;AAExC,iDAAiD;AACjD,OAAO,EAAE,aAAa,EAAoB,MAAM,kBAAkB,CAAC;AAEnE,gCAAgC;AAChC,OAAO,EAAE,mBAAmB,EAAE,MAAM,4BAA4B,CAAC;AAEjE,kEAAkE;AAClE,0EAA0E"}
|
package/dist/link-parser.d.ts
CHANGED
|
@@ -15,6 +15,8 @@ import type { HeadingNode, ResourceLink } from './types.js';
|
|
|
15
15
|
export interface ParseResult {
|
|
16
16
|
links: ResourceLink[];
|
|
17
17
|
headings: HeadingNode[];
|
|
18
|
+
frontmatter?: Record<string, unknown>;
|
|
19
|
+
frontmatterError?: string;
|
|
18
20
|
content: string;
|
|
19
21
|
sizeBytes: number;
|
|
20
22
|
estimatedTokenCount: number;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"link-parser.d.ts","sourceRoot":"","sources":["../src/link-parser.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;
|
|
1
|
+
{"version":3,"file":"link-parser.d.ts","sourceRoot":"","sources":["../src/link-parser.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAYH,OAAO,KAAK,EAAE,WAAW,EAAY,YAAY,EAAE,MAAM,YAAY,CAAC;AAEtE;;GAEG;AACH,MAAM,WAAW,WAAW;IAC1B,KAAK,EAAE,YAAY,EAAE,CAAC;IACtB,QAAQ,EAAE,WAAW,EAAE,CAAC;IACxB,WAAW,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACtC,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,mBAAmB,EAAE,MAAM,CAAC;CAC7B;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAsB,aAAa,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC,CAwC1E"}
|
package/dist/link-parser.js
CHANGED
|
@@ -9,6 +9,7 @@
|
|
|
9
9
|
* Uses unified/remark for robust markdown parsing with GFM support.
|
|
10
10
|
*/
|
|
11
11
|
import { readFile, stat } from 'node:fs/promises';
|
|
12
|
+
import * as yaml from 'js-yaml';
|
|
12
13
|
import remarkFrontmatter from 'remark-frontmatter';
|
|
13
14
|
import remarkGfm from 'remark-gfm';
|
|
14
15
|
import remarkParse from 'remark-parse';
|
|
@@ -48,9 +49,15 @@ export async function parseMarkdown(filePath) {
|
|
|
48
49
|
const links = extractLinks(tree);
|
|
49
50
|
// Extract headings with tree structure
|
|
50
51
|
const headings = extractHeadings(tree);
|
|
52
|
+
// Extract frontmatter
|
|
53
|
+
const { frontmatter, error: frontmatterError } = extractFrontmatter(tree);
|
|
54
|
+
// With exactOptionalPropertyTypes: true, we must conditionally include the property
|
|
55
|
+
// rather than assigning undefined to it
|
|
51
56
|
return {
|
|
52
57
|
links,
|
|
53
58
|
headings,
|
|
59
|
+
...(frontmatter !== undefined && { frontmatter }),
|
|
60
|
+
...(frontmatterError !== undefined && { frontmatterError }),
|
|
54
61
|
content,
|
|
55
62
|
sizeBytes,
|
|
56
63
|
estimatedTokenCount,
|
|
@@ -324,4 +331,38 @@ function cleanupEmptyChildren(headings) {
|
|
|
324
331
|
}
|
|
325
332
|
}
|
|
326
333
|
}
|
|
334
|
+
/**
|
|
335
|
+
* Extract and parse frontmatter from the markdown AST.
|
|
336
|
+
*
|
|
337
|
+
* Uses remark-frontmatter which creates 'yaml' nodes for frontmatter blocks.
|
|
338
|
+
* Parses YAML content and returns as plain object.
|
|
339
|
+
*
|
|
340
|
+
* @param tree - Markdown AST from unified/remark
|
|
341
|
+
* @returns Object with parsed frontmatter and any error message
|
|
342
|
+
*/
|
|
343
|
+
function extractFrontmatter(tree) {
|
|
344
|
+
let frontmatterData;
|
|
345
|
+
let errorMessage;
|
|
346
|
+
visit(tree, 'yaml', (node) => {
|
|
347
|
+
if (node.value.trim() === '') {
|
|
348
|
+
// Empty frontmatter block
|
|
349
|
+
return;
|
|
350
|
+
}
|
|
351
|
+
try {
|
|
352
|
+
const parsed = yaml.load(node.value);
|
|
353
|
+
if (typeof parsed === 'object' && parsed !== null && !Array.isArray(parsed)) {
|
|
354
|
+
frontmatterData = parsed;
|
|
355
|
+
}
|
|
356
|
+
}
|
|
357
|
+
catch (error) {
|
|
358
|
+
// Capture YAML parsing error for validation reporting
|
|
359
|
+
errorMessage = error instanceof Error ? error.message : String(error);
|
|
360
|
+
}
|
|
361
|
+
});
|
|
362
|
+
// With exactOptionalPropertyTypes: true, we must conditionally include properties
|
|
363
|
+
return {
|
|
364
|
+
...(frontmatterData !== undefined && { frontmatter: frontmatterData }),
|
|
365
|
+
...(errorMessage !== undefined && { error: errorMessage }),
|
|
366
|
+
};
|
|
367
|
+
}
|
|
327
368
|
//# sourceMappingURL=link-parser.js.map
|
package/dist/link-parser.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"link-parser.js","sourceRoot":"","sources":["../src/link-parser.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAC;
|
|
1
|
+
{"version":3,"file":"link-parser.js","sourceRoot":"","sources":["../src/link-parser.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAC;AAElD,OAAO,KAAK,IAAI,MAAM,SAAS,CAAC;AAEhC,OAAO,iBAAiB,MAAM,oBAAoB,CAAC;AACnD,OAAO,SAAS,MAAM,YAAY,CAAC;AACnC,OAAO,WAAW,MAAM,cAAc,CAAC;AACvC,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAClC,OAAO,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAC;AAiBzC;;;;;;;;;;;;;GAaG;AACH,MAAM,CAAC,KAAK,UAAU,aAAa,CAAC,QAAgB;IAClD,8BAA8B;IAC9B,MAAM,CAAC,OAAO,EAAE,KAAK,CAAC,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC;QACzC,+GAA+G;QAC/G,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC;QAC3B,+GAA+G;QAC/G,IAAI,CAAC,QAAQ,CAAC;KACf,CAAC,CAAC;IAEH,MAAM,SAAS,GAAG,KAAK,CAAC,IAAI,CAAC;IAC7B,MAAM,mBAAmB,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;IAE1D,qCAAqC;IACrC,MAAM,SAAS,GAAG,OAAO,EAAE;SACxB,GAAG,CAAC,WAAW,CAAC;SAChB,GAAG,CAAC,SAAS,CAAC;SACd,GAAG,CAAC,iBAAiB,CAAC,CAAC;IAE1B,MAAM,IAAI,GAAG,SAAS,CAAC,KAAK,CAAC,OAAO,CAAS,CAAC;IAE9C,gBAAgB;IAChB,MAAM,KAAK,GAAG,YAAY,CAAC,IAAI,CAAC,CAAC;IAEjC,uCAAuC;IACvC,MAAM,QAAQ,GAAG,eAAe,CAAC,IAAI,CAAC,CAAC;IAEvC,sBAAsB;IACtB,MAAM,EAAE,WAAW,EAAE,KAAK,EAAE,gBAAgB,EAAE,GAAG,kBAAkB,CAAC,IAAI,CAAC,CAAC;IAE1E,oFAAoF;IACpF,wCAAwC;IACxC,OAAO;QACL,KAAK;QACL,QAAQ;QACR,GAAG,CAAC,WAAW,KAAK,SAAS,IAAI,EAAE,WAAW,EAAE,CAAC;QACjD,GAAG,CAAC,gBAAgB,KAAK,SAAS,IAAI,EAAE,gBAAgB,EAAE,CAAC;QAC3D,OAAO;QACP,SAAS;QACT,mBAAmB;KACpB,CAAC;AACJ,CAAC;AAED;;;;;;;;;;GAUG;AACH,SAAS,YAAY,CAAC,IAAU;IAC9B,MAAM,KAAK,GAAmB,EAAE,CAAC;IAEjC,iDAAiD;IACjD,KAAK,CAAC,IAAI,EAAE,MAAM,EAAE,CAAC,IAAU,EAAE,EAAE;QACjC,MAAM,IAAI,GAAiB;YACzB,IAAI,EAAE,eAAe,CAAC,IAAI,CAAC;YAC3B,IAAI,EAAE,IAAI,CAAC,GAAG;YACd,IAAI,EAAE,YAAY,CAAC,IAAI,CAAC,GAAG,CAAC;YAC5B,IAAI,EAAE,IAAI,CAAC,QAAQ,EAAE,KAAK,CAAC,IAAI;SAChC,CAAC;QACF,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACnB,CAAC,CAAC,CAAC;IAEH,oDAAoD;IACpD,KAAK,CAAC,IAAI,EAAE,eAAe,EAAE,CAAC,IAAmB,EAAE,EAAE;QACnD,2DAA2D;QAC3D,qEAAqE;QACrE,iDAAiD;QACjD,MAAM,IAAI,GAAG,IAAI,CAAC,UAAU,CAAC;QAC7B,MAAM,IAAI,GAAiB;YACzB,IAAI,EAAE,eAAe,CAAC,IAAI,CAAC;YAC3B,IAAI;YACJ,IAAI,EAAE,SAAS,EAAE,6CAA6C;YAC9D,IAAI,EAAE,IAAI,CAAC,QAAQ,EAAE,KAAK,CAAC,IAAI;SAChC,CAAC;QACF,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACnB,CAAC,CAAC,CAAC;IAEH,OAAO,KAAK,CAAC;AACf,CAAC;AAED;;;;;GAKG;AACH,SAAS,eAAe,CAAC,IAA0B;IACjD,OAAO,uBAAuB,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;AAChD,CAAC;AAED;;;;;;;;;;;;;;GAcG;AACH,SAAS,YAAY,CAAC,IAAY;IAChC,IAAI,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,IAAI,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;QAC9D,OAAO,UAAU,CAAC;IACpB,CAAC;IACD,IAAI,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC;QAC/B,OAAO,OAAO,CAAC;IACjB,CAAC;IACD,IAAI,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;QACzB,OAAO,QAAQ,CAAC;IAClB,CAAC;IACD,gDAAgD;IAChD,IAAI,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;QACvB,OAAO,YAAY,CAAC;IACtB,CAAC;IACD,mCAAmC;IACnC,IAAI,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;QACzB,OAAO,YAAY,CAAC;IACtB,CAAC;IACD,mFAAmF;IACnF,IAAI,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,IAAI,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;QAC5E,OAAO,YAAY,CAAC;IACtB,CAAC;IACD,kEAAkE;IAClE,MAAM,SAAS,GAAG,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC;IACxC,MAAM,OAAO,GAAG,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC;IACtC,IAAI,OAAO,KAAK,CAAC,CAAC,IAAI,OAAO,GAAG,SAAS,EAAE,CAAC;QAC1C,OAAO,YAAY,CAAC;IACtB,CAAC;IACD,OAAO,SAAS,CAAC;AACnB,CAAC;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAoCG;AACH,SAAS,eAAe,CAAC,IAAU;IACjC,MAAM,YAAY,GAAkB,EAAE,CAAC;IAEvC,qDAAqD;IACrD,KAAK,CAAC,IAAI,EAAE,SAAS,EAAE,CAAC,IAAa,EAAE,EAAE;QACvC,MAAM,IAAI,GAAG,kBAAkB,CAAC,IAAI,CAAC,CAAC;QACtC,MAAM,OAAO,GAAgB;YAC3B,KAAK,EAAE,IAAI,CAAC,KAAK;YACjB,IAAI;YACJ,IAAI,EAAE,YAAY,CAAC,IAAI,CAAC;YACxB,IAAI,EAAE,IAAI,CAAC,QAAQ,EAAE,KAAK,CAAC,IAAI;SAChC,CAAC;QACF,YAAY,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IAC7B,CAAC,CAAC,CAAC;IAEH,kDAAkD;IAClD,OAAO,gBAAgB,CAAC,YAAY,CAAC,CAAC;AACxC,CAAC;AAED;;;;;GAKG;AACH,SAAS,kBAAkB,CAAC,IAAa;IACvC,OAAO,uBAAuB,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;AAChD,CAAC;AAED;;;;;;;GAOG;AACH,SAAS,uBAAuB,CAC9B,QAA8D;IAE9D,IAAI,CAAC,QAAQ,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACvC,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,OAAO,QAAQ;SACZ,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE;QACb,IAAI,KAAK,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC;YAC1B,OAAO,KAAK,CAAC,KAAe,CAAC;QAC/B,CAAC;QACD,sDAAsD;QACtD,IAAI,OAAO,IAAI,KAAK,EAAE,CAAC;YACrB,OAAO,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;QAC7B,CAAC;QACD,OAAO,EAAE,CAAC;IACZ,CAAC,CAAC;SACD,IAAI,CAAC,EAAE,CAAC,CAAC;AACd,CAAC;AAED;;;;;;;;;;;;;;;;;;GAkBG;AACH,SAAS,YAAY,CAAC,IAAY;IAChC,OAAO,IAAI;SACR,WAAW,EAAE;SACb,IAAI,EAAE;SACN,UAAU,CAAC,WAAW,EAAE,EAAE,CAAC,CAAC,uBAAuB;SACnD,UAAU,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,8BAA8B;SACtD,UAAU,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC,CAAC,4BAA4B;AACzD,CAAC;AAED;;;;;;;;;;GAUG;AACH,SAAS,gBAAgB,CAAC,YAA2B;IACnD,IAAI,YAAY,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC9B,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,MAAM,KAAK,GAAkB,EAAE,CAAC;IAChC,MAAM,KAAK,GAAkB,EAAE,CAAC;IAEhC,KAAK,MAAM,OAAO,IAAI,YAAY,EAAE,CAAC;QACnC,4BAA4B;QAC5B,MAAM,mBAAmB,GAAgB;YACvC,GAAG,OAAO;YACV,QAAQ,EAAE,EAAE;SACb,CAAC;QAEF,kEAAkE;QAClE,OAAO,KAAK,CAAC,MAAM,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,KAAK,IAAI,CAAC,CAAC,IAAI,OAAO,CAAC,KAAK,EAAE,CAAC;YACvE,KAAK,CAAC,GAAG,EAAE,CAAC;QACd,CAAC;QAED,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACvB,+BAA+B;YAC/B,KAAK,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAC;QAClC,CAAC;aAAM,CAAC;YACN,mCAAmC;YACnC,MAAM,MAAM,GAAG,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;YAC5B,IAAI,MAAM,EAAE,CAAC;gBACX,MAAM,CAAC,QAAQ,KAAK,EAAE,CAAC;gBACvB,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAC;YAC5C,CAAC;QACH,CAAC;QAED,kCAAkC;QAClC,KAAK,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAC;IAClC,CAAC;IAED,wDAAwD;IACxD,oBAAoB,CAAC,KAAK,CAAC,CAAC;IAE5B,OAAO,KAAK,CAAC;AACf,CAAC;AAED;;;;GAIG;AACH,SAAS,oBAAoB,CAAC,QAAuB;IACnD,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE,CAAC;QAC/B,IAAI,OAAO,CAAC,QAAQ,EAAE,MAAM,KAAK,CAAC,EAAE,CAAC;YACnC,OAAO,CAAC,QAAQ,GAAG,SAAS,CAAC;QAC/B,CAAC;aAAM,IAAI,OAAO,CAAC,QAAQ,IAAI,OAAO,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC3D,oBAAoB,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;QACzC,CAAC;IACH,CAAC;AACH,CAAC;AAED;;;;;;;;GAQG;AACH,SAAS,kBAAkB,CAAC,IAAU;IAIpC,IAAI,eAAoD,CAAC;IACzD,IAAI,YAAgC,CAAC;IAErC,KAAK,CAAC,IAAI,EAAE,MAAM,EAAE,CAAC,IAAuB,EAAE,EAAE;QAC9C,IAAI,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC;YAC7B,0BAA0B;YAC1B,OAAO;QACT,CAAC;QAED,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YACrC,IAAI,OAAO,MAAM,KAAK,QAAQ,IAAI,MAAM,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;gBAC5E,eAAe,GAAG,MAAiC,CAAC;YACtD,CAAC;QACH,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,sDAAsD;YACtD,YAAY,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QACxE,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,kFAAkF;IAClF,OAAO;QACL,GAAG,CAAC,eAAe,KAAK,SAAS,IAAI,EAAE,WAAW,EAAE,eAAe,EAAE,CAAC;QACtE,GAAG,CAAC,YAAY,KAAK,SAAS,IAAI,EAAE,KAAK,EAAE,YAAY,EAAE,CAAC;KAC3D,CAAC;AACJ,CAAC"}
|
|
@@ -33,6 +33,13 @@ export interface ResourceRegistryOptions {
|
|
|
33
33
|
/** Validate resources when they are added (default: false) */
|
|
34
34
|
validateOnAdd?: boolean;
|
|
35
35
|
}
|
|
36
|
+
/**
|
|
37
|
+
* Options for validate method.
|
|
38
|
+
*/
|
|
39
|
+
export interface ValidateOptions {
|
|
40
|
+
/** Optional JSON Schema to validate frontmatter against */
|
|
41
|
+
frontmatterSchema?: object;
|
|
42
|
+
}
|
|
36
43
|
/**
|
|
37
44
|
* Statistics about resources in the registry.
|
|
38
45
|
*/
|
|
@@ -183,7 +190,7 @@ export declare class ResourceRegistry implements ResourceCollectionInterface {
|
|
|
183
190
|
*/
|
|
184
191
|
crawl(options: CrawlOptions): Promise<ResourceMetadata[]>;
|
|
185
192
|
/**
|
|
186
|
-
* Validate all links in all resources in the registry.
|
|
193
|
+
* Validate all links and optionally frontmatter in all resources in the registry.
|
|
187
194
|
*
|
|
188
195
|
* Checks:
|
|
189
196
|
* - local_file links: file exists, anchor valid if present
|
|
@@ -191,12 +198,20 @@ export declare class ResourceRegistry implements ResourceCollectionInterface {
|
|
|
191
198
|
* - external links: returns info (not errors)
|
|
192
199
|
* - email links: valid by default
|
|
193
200
|
* - unknown links: returns warning
|
|
201
|
+
* - frontmatter: validates against JSON Schema if provided
|
|
194
202
|
*
|
|
203
|
+
* @param options - Validation options (optional)
|
|
195
204
|
* @returns Validation result with all issues and statistics
|
|
196
205
|
*
|
|
197
206
|
* @example
|
|
198
207
|
* ```typescript
|
|
208
|
+
* // Validate links only
|
|
199
209
|
* const result = await registry.validate();
|
|
210
|
+
*
|
|
211
|
+
* // Validate links and frontmatter
|
|
212
|
+
* const schema = { type: 'object', required: ['title'] };
|
|
213
|
+
* const result = await registry.validate({ frontmatterSchema: schema });
|
|
214
|
+
*
|
|
200
215
|
* console.log(`Passed: ${result.passed}`);
|
|
201
216
|
* console.log(`Errors: ${result.errorCount}`);
|
|
202
217
|
* console.log(`Warnings: ${result.warningCount}`);
|
|
@@ -206,7 +221,7 @@ export declare class ResourceRegistry implements ResourceCollectionInterface {
|
|
|
206
221
|
* }
|
|
207
222
|
* ```
|
|
208
223
|
*/
|
|
209
|
-
validate(): Promise<ValidationResult>;
|
|
224
|
+
validate(options?: ValidateOptions): Promise<ValidationResult>;
|
|
210
225
|
/**
|
|
211
226
|
* Resolve links between resources in the registry.
|
|
212
227
|
*
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"resource-registry.d.ts","sourceRoot":"","sources":["../src/resource-registry.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;
|
|
1
|
+
{"version":3,"file":"resource-registry.d.ts","sourceRoot":"","sources":["../src/resource-registry.ts"],"names":[],"mappings":"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"}
|
|
@@ -10,6 +10,7 @@
|
|
|
10
10
|
import path from 'node:path';
|
|
11
11
|
import { crawlDirectory } from '@vibe-agent-toolkit/utils';
|
|
12
12
|
import { calculateChecksum } from './checksum.js';
|
|
13
|
+
import { validateFrontmatter } from './frontmatter-validator.js';
|
|
13
14
|
import { parseMarkdown } from './link-parser.js';
|
|
14
15
|
import { validateLink } from './link-validator.js';
|
|
15
16
|
import { matchesGlobPattern, splitHrefAnchor } from './utils.js';
|
|
@@ -166,6 +167,8 @@ export class ResourceRegistry {
|
|
|
166
167
|
filePath: absolutePath,
|
|
167
168
|
links: parseResult.links,
|
|
168
169
|
headings: parseResult.headings,
|
|
170
|
+
...(parseResult.frontmatter !== undefined && { frontmatter: parseResult.frontmatter }),
|
|
171
|
+
...(parseResult.frontmatterError !== undefined && { frontmatterError: parseResult.frontmatterError }),
|
|
169
172
|
sizeBytes: parseResult.sizeBytes,
|
|
170
173
|
estimatedTokenCount: parseResult.estimatedTokenCount,
|
|
171
174
|
modifiedAt: stats.mtime,
|
|
@@ -235,7 +238,7 @@ export class ResourceRegistry {
|
|
|
235
238
|
return await this.addResources(files);
|
|
236
239
|
}
|
|
237
240
|
/**
|
|
238
|
-
* Validate all links in all resources in the registry.
|
|
241
|
+
* Validate all links and optionally frontmatter in all resources in the registry.
|
|
239
242
|
*
|
|
240
243
|
* Checks:
|
|
241
244
|
* - local_file links: file exists, anchor valid if present
|
|
@@ -243,12 +246,20 @@ export class ResourceRegistry {
|
|
|
243
246
|
* - external links: returns info (not errors)
|
|
244
247
|
* - email links: valid by default
|
|
245
248
|
* - unknown links: returns warning
|
|
249
|
+
* - frontmatter: validates against JSON Schema if provided
|
|
246
250
|
*
|
|
251
|
+
* @param options - Validation options (optional)
|
|
247
252
|
* @returns Validation result with all issues and statistics
|
|
248
253
|
*
|
|
249
254
|
* @example
|
|
250
255
|
* ```typescript
|
|
256
|
+
* // Validate links only
|
|
251
257
|
* const result = await registry.validate();
|
|
258
|
+
*
|
|
259
|
+
* // Validate links and frontmatter
|
|
260
|
+
* const schema = { type: 'object', required: ['title'] };
|
|
261
|
+
* const result = await registry.validate({ frontmatterSchema: schema });
|
|
262
|
+
*
|
|
252
263
|
* console.log(`Passed: ${result.passed}`);
|
|
253
264
|
* console.log(`Errors: ${result.errorCount}`);
|
|
254
265
|
* console.log(`Warnings: ${result.warningCount}`);
|
|
@@ -258,12 +269,25 @@ export class ResourceRegistry {
|
|
|
258
269
|
* }
|
|
259
270
|
* ```
|
|
260
271
|
*/
|
|
261
|
-
async validate() {
|
|
272
|
+
async validate(options) {
|
|
262
273
|
const startTime = Date.now();
|
|
263
274
|
// Build headings map for validation
|
|
264
275
|
const headingsByFile = this.buildHeadingsByFileMap();
|
|
265
276
|
// Collect all validation issues
|
|
266
277
|
const issues = [];
|
|
278
|
+
// Check for YAML parsing errors first
|
|
279
|
+
for (const resource of this.resourcesByPath.values()) {
|
|
280
|
+
if (resource.frontmatterError) {
|
|
281
|
+
issues.push({
|
|
282
|
+
severity: 'error',
|
|
283
|
+
resourcePath: resource.filePath,
|
|
284
|
+
line: 1,
|
|
285
|
+
type: 'frontmatter_invalid_yaml',
|
|
286
|
+
link: '',
|
|
287
|
+
message: `Invalid YAML syntax in frontmatter: ${resource.frontmatterError}`,
|
|
288
|
+
});
|
|
289
|
+
}
|
|
290
|
+
}
|
|
267
291
|
// Validate each link in each resource
|
|
268
292
|
for (const resource of this.resourcesByPath.values()) {
|
|
269
293
|
for (const link of resource.links) {
|
|
@@ -273,6 +297,13 @@ export class ResourceRegistry {
|
|
|
273
297
|
}
|
|
274
298
|
}
|
|
275
299
|
}
|
|
300
|
+
// Frontmatter validation (if schema provided)
|
|
301
|
+
if (options?.frontmatterSchema) {
|
|
302
|
+
for (const resource of this.resourcesByPath.values()) {
|
|
303
|
+
const frontmatterIssues = validateFrontmatter(resource.frontmatter, options.frontmatterSchema, resource.filePath);
|
|
304
|
+
issues.push(...frontmatterIssues);
|
|
305
|
+
}
|
|
306
|
+
}
|
|
276
307
|
// Count issues by severity
|
|
277
308
|
const errorCount = issues.filter((i) => i.severity === 'error').length;
|
|
278
309
|
const warningCount = issues.filter((i) => i.severity === 'warning').length;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"resource-registry.js","sourceRoot":"","sources":["../src/resource-registry.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"resource-registry.js","sourceRoot":"","sources":["../src/resource-registry.ts"],"names":[],"mappings":"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"}
|
|
@@ -66,7 +66,7 @@ export type ResourceLink = z.infer<typeof ResourceLinkSchema>;
|
|
|
66
66
|
* Complete metadata for a markdown resource.
|
|
67
67
|
*
|
|
68
68
|
* Includes all parsed information about the resource: its links, headings structure,
|
|
69
|
-
* file stats, and identifiers.
|
|
69
|
+
* file stats, and identifiers. Supports YAML frontmatter parsing.
|
|
70
70
|
*/
|
|
71
71
|
export declare const ResourceMetadataSchema: z.ZodObject<{
|
|
72
72
|
id: z.ZodString;
|
|
@@ -97,6 +97,8 @@ export declare const ResourceMetadataSchema: z.ZodObject<{
|
|
|
97
97
|
resolvedId?: string | undefined;
|
|
98
98
|
}>, "many">;
|
|
99
99
|
headings: z.ZodArray<z.ZodType<HeadingNode, z.ZodTypeDef, HeadingNode>, "many">;
|
|
100
|
+
frontmatter: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
|
|
101
|
+
frontmatterError: z.ZodOptional<z.ZodString>;
|
|
100
102
|
sizeBytes: z.ZodNumber;
|
|
101
103
|
estimatedTokenCount: z.ZodNumber;
|
|
102
104
|
modifiedAt: z.ZodDate;
|
|
@@ -118,6 +120,8 @@ export declare const ResourceMetadataSchema: z.ZodObject<{
|
|
|
118
120
|
estimatedTokenCount: number;
|
|
119
121
|
modifiedAt: Date;
|
|
120
122
|
checksum: string & z.BRAND<"SHA256">;
|
|
123
|
+
frontmatter?: Record<string, unknown> | undefined;
|
|
124
|
+
frontmatterError?: string | undefined;
|
|
121
125
|
}, {
|
|
122
126
|
id: string;
|
|
123
127
|
filePath: string;
|
|
@@ -135,6 +139,8 @@ export declare const ResourceMetadataSchema: z.ZodObject<{
|
|
|
135
139
|
estimatedTokenCount: number;
|
|
136
140
|
modifiedAt: Date;
|
|
137
141
|
checksum: string;
|
|
142
|
+
frontmatter?: Record<string, unknown> | undefined;
|
|
143
|
+
frontmatterError?: string | undefined;
|
|
138
144
|
}>;
|
|
139
145
|
export type ResourceMetadata = z.infer<typeof ResourceMetadataSchema>;
|
|
140
146
|
//# sourceMappingURL=resource-metadata.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"resource-metadata.d.ts","sourceRoot":"","sources":["../../src/schemas/resource-metadata.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAIxB;;;;;;;;GAQG;AACH,eAAO,MAAM,cAAc,qEAM4B,CAAC;AAExD,MAAM,MAAM,QAAQ,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,cAAc,CAAC,CAAC;AAEtD;;;;;GAKG;AACH,MAAM,MAAM,WAAW,GAAG;IACxB,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC1B,QAAQ,CAAC,EAAE,WAAW,EAAE,GAAG,SAAS,CAAC;CACtC,CAAC;AAEF;;;;;GAKG;AACH,eAAO,MAAM,iBAAiB,EAAE,CAAC,CAAC,OAAO,CAAC,WAAW,CAQpD,CAAC;AAEF;;;;;GAKG;AACH,eAAO,MAAM,kBAAkB;;;;;;;;;;;;;;;;;;;;;;;;EAQiB,CAAC;AAEjD,MAAM,MAAM,YAAY,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,kBAAkB,CAAC,CAAC;AAE9D;;;;;GAKG;AACH,eAAO,MAAM,sBAAsB
|
|
1
|
+
{"version":3,"file":"resource-metadata.d.ts","sourceRoot":"","sources":["../../src/schemas/resource-metadata.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAIxB;;;;;;;;GAQG;AACH,eAAO,MAAM,cAAc,qEAM4B,CAAC;AAExD,MAAM,MAAM,QAAQ,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,cAAc,CAAC,CAAC;AAEtD;;;;;GAKG;AACH,MAAM,MAAM,WAAW,GAAG;IACxB,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC1B,QAAQ,CAAC,EAAE,WAAW,EAAE,GAAG,SAAS,CAAC;CACtC,CAAC;AAEF;;;;;GAKG;AACH,eAAO,MAAM,iBAAiB,EAAE,CAAC,CAAC,OAAO,CAAC,WAAW,CAQpD,CAAC;AAEF;;;;;GAKG;AACH,eAAO,MAAM,kBAAkB;;;;;;;;;;;;;;;;;;;;;;;;EAQiB,CAAC;AAEjD,MAAM,MAAM,YAAY,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,kBAAkB,CAAC,CAAC;AAE9D;;;;;GAKG;AACH,eAAO,MAAM,sBAAsB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAaqB,CAAC;AAEzD,MAAM,MAAM,gBAAgB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,sBAAsB,CAAC,CAAC"}
|
|
@@ -48,13 +48,17 @@ export const ResourceLinkSchema = z.object({
|
|
|
48
48
|
* Complete metadata for a markdown resource.
|
|
49
49
|
*
|
|
50
50
|
* Includes all parsed information about the resource: its links, headings structure,
|
|
51
|
-
* file stats, and identifiers.
|
|
51
|
+
* file stats, and identifiers. Supports YAML frontmatter parsing.
|
|
52
52
|
*/
|
|
53
53
|
export const ResourceMetadataSchema = z.object({
|
|
54
54
|
id: z.string().describe('Unique identifier (inferred from filePath or overridden by frontmatter)'),
|
|
55
55
|
filePath: z.string().describe('Absolute path to the resource file'),
|
|
56
56
|
links: z.array(ResourceLinkSchema).describe('All links found in the resource'),
|
|
57
57
|
headings: z.array(HeadingNodeSchema).describe('Document table of contents (top-level headings only; children are nested)'),
|
|
58
|
+
frontmatter: z.record(z.string(), z.unknown()).optional()
|
|
59
|
+
.describe('Parsed YAML frontmatter (if present in markdown file)'),
|
|
60
|
+
frontmatterError: z.string().optional()
|
|
61
|
+
.describe('YAML parsing error message (if frontmatter contains invalid YAML syntax)'),
|
|
58
62
|
sizeBytes: z.number().int().nonnegative().describe('File size in bytes'),
|
|
59
63
|
estimatedTokenCount: z.number().int().nonnegative().describe('Estimated token count for LLM context (roughly 1 token per 4 chars)'),
|
|
60
64
|
modifiedAt: z.date().describe('Last modified timestamp'),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"resource-metadata.js","sourceRoot":"","sources":["../../src/schemas/resource-metadata.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"resource-metadata.js","sourceRoot":"","sources":["../../src/schemas/resource-metadata.ts"],"names":[],"mappings":"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"}
|
|
@@ -11,6 +11,15 @@ export type ValidationSeverity = z.infer<typeof ValidationSeveritySchema>;
|
|
|
11
11
|
/**
|
|
12
12
|
* A single validation issue found during link validation.
|
|
13
13
|
*
|
|
14
|
+
* Issue types:
|
|
15
|
+
* - broken_file: Local file link points to non-existent file
|
|
16
|
+
* - broken_anchor: Anchor link points to non-existent heading
|
|
17
|
+
* - external_url: External URL (informational, not validated)
|
|
18
|
+
* - unknown_link: Unknown link type
|
|
19
|
+
* - frontmatter_missing: Schema requires frontmatter, file has none
|
|
20
|
+
* - frontmatter_invalid_yaml: YAML syntax error in frontmatter
|
|
21
|
+
* - frontmatter_schema_error: Frontmatter fails JSON Schema validation
|
|
22
|
+
*
|
|
14
23
|
* Includes details about what went wrong, where it occurred, and optionally
|
|
15
24
|
* how to fix it.
|
|
16
25
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"validation-result.d.ts","sourceRoot":"","sources":["../../src/schemas/validation-result.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB;;;;;;GAMG;AACH,eAAO,MAAM,wBAAwB,yCAIc,CAAC;AAEpD,MAAM,MAAM,kBAAkB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,wBAAwB,CAAC,CAAC;AAE1E
|
|
1
|
+
{"version":3,"file":"validation-result.d.ts","sourceRoot":"","sources":["../../src/schemas/validation-result.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB;;;;;;GAMG;AACH,eAAO,MAAM,wBAAwB,yCAIc,CAAC;AAEpD,MAAM,MAAM,kBAAkB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,wBAAwB,CAAC,CAAC;AAE1E;;;;;;;;;;;;;;GAcG;AACH,eAAO,MAAM,qBAAqB;;;;;;;;;;;;;;;;;;;;;;;;EAQmC,CAAC;AAEtE,MAAM,MAAM,eAAe,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,qBAAqB,CAAC,CAAC;AAEpE;;;;;GAKG;AACH,eAAO,MAAM,sBAAsB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAWsC,CAAC;AAE1E,MAAM,MAAM,gBAAgB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,sBAAsB,CAAC,CAAC"}
|
|
@@ -14,6 +14,15 @@ export const ValidationSeveritySchema = z.enum([
|
|
|
14
14
|
/**
|
|
15
15
|
* A single validation issue found during link validation.
|
|
16
16
|
*
|
|
17
|
+
* Issue types:
|
|
18
|
+
* - broken_file: Local file link points to non-existent file
|
|
19
|
+
* - broken_anchor: Anchor link points to non-existent heading
|
|
20
|
+
* - external_url: External URL (informational, not validated)
|
|
21
|
+
* - unknown_link: Unknown link type
|
|
22
|
+
* - frontmatter_missing: Schema requires frontmatter, file has none
|
|
23
|
+
* - frontmatter_invalid_yaml: YAML syntax error in frontmatter
|
|
24
|
+
* - frontmatter_schema_error: Frontmatter fails JSON Schema validation
|
|
25
|
+
*
|
|
17
26
|
* Includes details about what went wrong, where it occurred, and optionally
|
|
18
27
|
* how to fix it.
|
|
19
28
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"validation-result.js","sourceRoot":"","sources":["../../src/schemas/validation-result.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB;;;;;;GAMG;AACH,MAAM,CAAC,MAAM,wBAAwB,GAAG,CAAC,CAAC,IAAI,CAAC;IAC7C,OAAO;IACP,SAAS;IACT,MAAM;CACP,CAAC,CAAC,QAAQ,CAAC,sCAAsC,CAAC,CAAC;AAIpD
|
|
1
|
+
{"version":3,"file":"validation-result.js","sourceRoot":"","sources":["../../src/schemas/validation-result.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB;;;;;;GAMG;AACH,MAAM,CAAC,MAAM,wBAAwB,GAAG,CAAC,CAAC,IAAI,CAAC;IAC7C,OAAO;IACP,SAAS;IACT,MAAM;CACP,CAAC,CAAC,QAAQ,CAAC,sCAAsC,CAAC,CAAC;AAIpD;;;;;;;;;;;;;;GAcG;AACH,MAAM,CAAC,MAAM,qBAAqB,GAAG,CAAC,CAAC,MAAM,CAAC;IAC5C,QAAQ,EAAE,wBAAwB,CAAC,QAAQ,CAAC,sBAAsB,CAAC;IACnE,YAAY,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,oDAAoD,CAAC;IACvF,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,oCAAoC,CAAC;IAC3F,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,8EAA8E,CAAC;IACzG,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,sBAAsB,CAAC;IACjD,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,yCAAyC,CAAC;IACvE,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,0CAA0C,CAAC;CACvF,CAAC,CAAC,QAAQ,CAAC,wDAAwD,CAAC,CAAC;AAItE;;;;;GAKG;AACH,MAAM,CAAC,MAAM,sBAAsB,GAAG,CAAC,CAAC,MAAM,CAAC;IAC7C,cAAc,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,qCAAqC,CAAC;IAC9F,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,kDAAkD,CAAC;IACvG,WAAW,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,WAAW,EAAE,CAAC,CAAC,QAAQ,CAAC,kEAAkE,CAAC;IAC9I,MAAM,EAAE,CAAC,CAAC,KAAK,CAAC,qBAAqB,CAAC,CAAC,QAAQ,CAAC,6BAA6B,CAAC;IAC9E,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,8BAA8B,CAAC;IACnF,YAAY,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,gCAAgC,CAAC;IACvF,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,6BAA6B,CAAC;IACjF,MAAM,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,CAAC,iDAAiD,CAAC;IAC/E,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,qCAAqC,CAAC;IACpF,SAAS,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,QAAQ,CAAC,+BAA+B,CAAC;CAC9D,CAAC,CAAC,QAAQ,CAAC,4DAA4D,CAAC,CAAC"}
|
package/dist/types.d.ts
CHANGED
|
@@ -14,4 +14,5 @@ export type { SHA256 } from './schemas/checksum.js';
|
|
|
14
14
|
export { SHA256Schema } from './schemas/checksum.js';
|
|
15
15
|
export type { LinkType, HeadingNode, ResourceLink, ResourceMetadata, } from './schemas/resource-metadata.js';
|
|
16
16
|
export type { ValidationSeverity, ValidationIssue, ValidationResult, } from './schemas/validation-result.js';
|
|
17
|
+
export type { CrawlOptions, ResourceRegistryOptions, ValidateOptions, RegistryStats, } from './resource-registry.js';
|
|
17
18
|
//# sourceMappingURL=types.d.ts.map
|
package/dist/types.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAGH,YAAY,EAAE,MAAM,EAAE,MAAM,uBAAuB,CAAC;AACpD,OAAO,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AAGrD,YAAY,EACV,QAAQ,EACR,WAAW,EACX,YAAY,EACZ,gBAAgB,GACjB,MAAM,gCAAgC,CAAC;AAGxC,YAAY,EACV,kBAAkB,EAClB,eAAe,EACf,gBAAgB,GACjB,MAAM,gCAAgC,CAAC"}
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAGH,YAAY,EAAE,MAAM,EAAE,MAAM,uBAAuB,CAAC;AACpD,OAAO,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AAGrD,YAAY,EACV,QAAQ,EACR,WAAW,EACX,YAAY,EACZ,gBAAgB,GACjB,MAAM,gCAAgC,CAAC;AAGxC,YAAY,EACV,kBAAkB,EAClB,eAAe,EACf,gBAAgB,GACjB,MAAM,gCAAgC,CAAC;AAGxC,YAAY,EACV,YAAY,EACZ,uBAAuB,EACvB,eAAe,EACf,aAAa,GACd,MAAM,wBAAwB,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@vibe-agent-toolkit/resources",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.3",
|
|
4
4
|
"description": "Markdown resource parsing, validation, and link integrity checking",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "./dist/index.js",
|
|
@@ -33,7 +33,9 @@
|
|
|
33
33
|
"author": "Jeff Dutton",
|
|
34
34
|
"license": "MIT",
|
|
35
35
|
"dependencies": {
|
|
36
|
-
"@vibe-agent-toolkit/utils": "0.1.
|
|
36
|
+
"@vibe-agent-toolkit/utils": "0.1.3",
|
|
37
|
+
"ajv": "^8.17.1",
|
|
38
|
+
"js-yaml": "^4.1.1",
|
|
37
39
|
"picomatch": "^4.0.3",
|
|
38
40
|
"remark-frontmatter": "^5.0.0",
|
|
39
41
|
"remark-gfm": "^4.0.0",
|
|
@@ -43,6 +45,7 @@
|
|
|
43
45
|
"zod": "^3.24.1"
|
|
44
46
|
},
|
|
45
47
|
"devDependencies": {
|
|
48
|
+
"@types/js-yaml": "^4.0.9",
|
|
46
49
|
"@types/mdast": "^4.0.4",
|
|
47
50
|
"@types/node": "^22.10.5",
|
|
48
51
|
"@types/picomatch": "^4.0.2",
|
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Frontmatter validation using JSON Schema.
|
|
3
|
+
*
|
|
4
|
+
* IMPORTANT: This module uses AJV specifically for validating arbitrary
|
|
5
|
+
* user-provided JSON Schemas against frontmatter data. For all TypeScript
|
|
6
|
+
* validation and internal schemas, use Zod instead.
|
|
7
|
+
*
|
|
8
|
+
* Why AJV here?
|
|
9
|
+
* - Users provide standard JSON Schema files for frontmatter validation
|
|
10
|
+
* - AJV is the industry standard JSON Schema validator
|
|
11
|
+
* - Zod is for TypeScript type safety + runtime validation
|
|
12
|
+
*
|
|
13
|
+
* This is the ONLY place in the codebase that should use AJV.
|
|
14
|
+
*/
|
|
15
|
+
|
|
16
|
+
import { Ajv } from 'ajv';
|
|
17
|
+
|
|
18
|
+
import type { ValidationIssue } from './schemas/validation-result.js';
|
|
19
|
+
|
|
20
|
+
/**
|
|
21
|
+
* Validate frontmatter against a JSON Schema.
|
|
22
|
+
*
|
|
23
|
+
* Behavior:
|
|
24
|
+
* - Missing frontmatter: Error only if schema has required fields
|
|
25
|
+
* - Extra fields: Allowed by default (unless schema sets additionalProperties: false)
|
|
26
|
+
* - Type mismatches: Always reported as errors
|
|
27
|
+
*
|
|
28
|
+
* @param frontmatter - Parsed frontmatter object (or undefined if no frontmatter)
|
|
29
|
+
* @param schema - JSON Schema object
|
|
30
|
+
* @param resourcePath - File path for error reporting
|
|
31
|
+
* @returns Array of validation issues (empty if valid)
|
|
32
|
+
*
|
|
33
|
+
* @example
|
|
34
|
+
* ```typescript
|
|
35
|
+
* const schema = {
|
|
36
|
+
* type: 'object',
|
|
37
|
+
* required: ['title'],
|
|
38
|
+
* properties: { title: { type: 'string' } }
|
|
39
|
+
* };
|
|
40
|
+
* const issues = validateFrontmatter(frontmatter, schema, '/docs/guide.md');
|
|
41
|
+
* ```
|
|
42
|
+
*/
|
|
43
|
+
export function validateFrontmatter(
|
|
44
|
+
frontmatter: Record<string, unknown> | undefined,
|
|
45
|
+
schema: object,
|
|
46
|
+
resourcePath: string
|
|
47
|
+
): ValidationIssue[] {
|
|
48
|
+
const issues: ValidationIssue[] = [];
|
|
49
|
+
|
|
50
|
+
// Configure AJV with permissive settings
|
|
51
|
+
const ajv = new Ajv({
|
|
52
|
+
strict: false, // Allow non-strict schemas
|
|
53
|
+
allErrors: true, // Report all errors, not just first
|
|
54
|
+
allowUnionTypes: true, // Support JSON Schema draft features
|
|
55
|
+
});
|
|
56
|
+
|
|
57
|
+
const validate = ajv.compile(schema);
|
|
58
|
+
|
|
59
|
+
// Case 1: No frontmatter present
|
|
60
|
+
if (!frontmatter) {
|
|
61
|
+
// Check if schema requires any fields
|
|
62
|
+
const schemaRequires = (schema as { required?: string[] }).required;
|
|
63
|
+
if (schemaRequires && schemaRequires.length > 0) {
|
|
64
|
+
issues.push({
|
|
65
|
+
severity: 'error',
|
|
66
|
+
resourcePath,
|
|
67
|
+
line: 1,
|
|
68
|
+
type: 'frontmatter_missing',
|
|
69
|
+
link: '',
|
|
70
|
+
message: `Missing required frontmatter (schema requires: ${schemaRequires.join(', ')})`,
|
|
71
|
+
});
|
|
72
|
+
}
|
|
73
|
+
return issues;
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
// Case 2: Frontmatter present, validate against schema
|
|
77
|
+
const valid = validate(frontmatter);
|
|
78
|
+
|
|
79
|
+
if (!valid && validate.errors) {
|
|
80
|
+
for (const error of validate.errors) {
|
|
81
|
+
const field = error.instancePath.replace(/^\//, '') ?? 'root';
|
|
82
|
+
const message = error.message ?? 'validation failed';
|
|
83
|
+
issues.push({
|
|
84
|
+
severity: 'error',
|
|
85
|
+
resourcePath,
|
|
86
|
+
line: 1,
|
|
87
|
+
type: 'frontmatter_schema_error',
|
|
88
|
+
link: '',
|
|
89
|
+
message: `Frontmatter validation: ${field} ${message}`,
|
|
90
|
+
});
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
return issues;
|
|
95
|
+
}
|
package/src/index.ts
CHANGED
|
@@ -71,5 +71,8 @@ export {
|
|
|
71
71
|
// Export parser interface for advanced use cases
|
|
72
72
|
export { parseMarkdown, type ParseResult } from './link-parser.js';
|
|
73
73
|
|
|
74
|
+
// Export frontmatter validation
|
|
75
|
+
export { validateFrontmatter } from './frontmatter-validator.js';
|
|
76
|
+
|
|
74
77
|
// Note: link-parser and link-validator internals are NOT exported
|
|
75
78
|
// They are implementation details. Users should use ResourceRegistry API.
|
package/src/link-parser.ts
CHANGED
|
@@ -11,6 +11,7 @@
|
|
|
11
11
|
|
|
12
12
|
import { readFile, stat } from 'node:fs/promises';
|
|
13
13
|
|
|
14
|
+
import * as yaml from 'js-yaml';
|
|
14
15
|
import type { Heading, Link, LinkReference, Root } from 'mdast';
|
|
15
16
|
import remarkFrontmatter from 'remark-frontmatter';
|
|
16
17
|
import remarkGfm from 'remark-gfm';
|
|
@@ -26,6 +27,8 @@ import type { HeadingNode, LinkType, ResourceLink } from './types.js';
|
|
|
26
27
|
export interface ParseResult {
|
|
27
28
|
links: ResourceLink[];
|
|
28
29
|
headings: HeadingNode[];
|
|
30
|
+
frontmatter?: Record<string, unknown>;
|
|
31
|
+
frontmatterError?: string;
|
|
29
32
|
content: string;
|
|
30
33
|
sizeBytes: number;
|
|
31
34
|
estimatedTokenCount: number;
|
|
@@ -71,9 +74,16 @@ export async function parseMarkdown(filePath: string): Promise<ParseResult> {
|
|
|
71
74
|
// Extract headings with tree structure
|
|
72
75
|
const headings = extractHeadings(tree);
|
|
73
76
|
|
|
77
|
+
// Extract frontmatter
|
|
78
|
+
const { frontmatter, error: frontmatterError } = extractFrontmatter(tree);
|
|
79
|
+
|
|
80
|
+
// With exactOptionalPropertyTypes: true, we must conditionally include the property
|
|
81
|
+
// rather than assigning undefined to it
|
|
74
82
|
return {
|
|
75
83
|
links,
|
|
76
84
|
headings,
|
|
85
|
+
...(frontmatter !== undefined && { frontmatter }),
|
|
86
|
+
...(frontmatterError !== undefined && { frontmatterError }),
|
|
77
87
|
content,
|
|
78
88
|
sizeBytes,
|
|
79
89
|
estimatedTokenCount,
|
|
@@ -369,3 +379,43 @@ function cleanupEmptyChildren(headings: HeadingNode[]): void {
|
|
|
369
379
|
}
|
|
370
380
|
}
|
|
371
381
|
}
|
|
382
|
+
|
|
383
|
+
/**
|
|
384
|
+
* Extract and parse frontmatter from the markdown AST.
|
|
385
|
+
*
|
|
386
|
+
* Uses remark-frontmatter which creates 'yaml' nodes for frontmatter blocks.
|
|
387
|
+
* Parses YAML content and returns as plain object.
|
|
388
|
+
*
|
|
389
|
+
* @param tree - Markdown AST from unified/remark
|
|
390
|
+
* @returns Object with parsed frontmatter and any error message
|
|
391
|
+
*/
|
|
392
|
+
function extractFrontmatter(tree: Root): {
|
|
393
|
+
frontmatter?: Record<string, unknown>;
|
|
394
|
+
error?: string;
|
|
395
|
+
} {
|
|
396
|
+
let frontmatterData: Record<string, unknown> | undefined;
|
|
397
|
+
let errorMessage: string | undefined;
|
|
398
|
+
|
|
399
|
+
visit(tree, 'yaml', (node: { value: string }) => {
|
|
400
|
+
if (node.value.trim() === '') {
|
|
401
|
+
// Empty frontmatter block
|
|
402
|
+
return;
|
|
403
|
+
}
|
|
404
|
+
|
|
405
|
+
try {
|
|
406
|
+
const parsed = yaml.load(node.value);
|
|
407
|
+
if (typeof parsed === 'object' && parsed !== null && !Array.isArray(parsed)) {
|
|
408
|
+
frontmatterData = parsed as Record<string, unknown>;
|
|
409
|
+
}
|
|
410
|
+
} catch (error) {
|
|
411
|
+
// Capture YAML parsing error for validation reporting
|
|
412
|
+
errorMessage = error instanceof Error ? error.message : String(error);
|
|
413
|
+
}
|
|
414
|
+
});
|
|
415
|
+
|
|
416
|
+
// With exactOptionalPropertyTypes: true, we must conditionally include properties
|
|
417
|
+
return {
|
|
418
|
+
...(frontmatterData !== undefined && { frontmatter: frontmatterData }),
|
|
419
|
+
...(errorMessage !== undefined && { error: errorMessage }),
|
|
420
|
+
};
|
|
421
|
+
}
|
package/src/resource-registry.ts
CHANGED
|
@@ -13,6 +13,7 @@ import path from 'node:path';
|
|
|
13
13
|
import { crawlDirectory, type CrawlOptions as UtilsCrawlOptions } from '@vibe-agent-toolkit/utils';
|
|
14
14
|
|
|
15
15
|
import { calculateChecksum } from './checksum.js';
|
|
16
|
+
import { validateFrontmatter } from './frontmatter-validator.js';
|
|
16
17
|
import { parseMarkdown } from './link-parser.js';
|
|
17
18
|
import { validateLink } from './link-validator.js';
|
|
18
19
|
import type { ResourceCollectionInterface } from './resource-collection-interface.js';
|
|
@@ -45,6 +46,14 @@ export interface ResourceRegistryOptions {
|
|
|
45
46
|
validateOnAdd?: boolean;
|
|
46
47
|
}
|
|
47
48
|
|
|
49
|
+
/**
|
|
50
|
+
* Options for validate method.
|
|
51
|
+
*/
|
|
52
|
+
export interface ValidateOptions {
|
|
53
|
+
/** Optional JSON Schema to validate frontmatter against */
|
|
54
|
+
frontmatterSchema?: object;
|
|
55
|
+
}
|
|
56
|
+
|
|
48
57
|
/**
|
|
49
58
|
* Statistics about resources in the registry.
|
|
50
59
|
*/
|
|
@@ -230,6 +239,8 @@ export class ResourceRegistry implements ResourceCollectionInterface {
|
|
|
230
239
|
filePath: absolutePath,
|
|
231
240
|
links: parseResult.links,
|
|
232
241
|
headings: parseResult.headings,
|
|
242
|
+
...(parseResult.frontmatter !== undefined && { frontmatter: parseResult.frontmatter }),
|
|
243
|
+
...(parseResult.frontmatterError !== undefined && { frontmatterError: parseResult.frontmatterError }),
|
|
233
244
|
sizeBytes: parseResult.sizeBytes,
|
|
234
245
|
estimatedTokenCount: parseResult.estimatedTokenCount,
|
|
235
246
|
modifiedAt: stats.mtime,
|
|
@@ -313,7 +324,7 @@ export class ResourceRegistry implements ResourceCollectionInterface {
|
|
|
313
324
|
}
|
|
314
325
|
|
|
315
326
|
/**
|
|
316
|
-
* Validate all links in all resources in the registry.
|
|
327
|
+
* Validate all links and optionally frontmatter in all resources in the registry.
|
|
317
328
|
*
|
|
318
329
|
* Checks:
|
|
319
330
|
* - local_file links: file exists, anchor valid if present
|
|
@@ -321,12 +332,20 @@ export class ResourceRegistry implements ResourceCollectionInterface {
|
|
|
321
332
|
* - external links: returns info (not errors)
|
|
322
333
|
* - email links: valid by default
|
|
323
334
|
* - unknown links: returns warning
|
|
335
|
+
* - frontmatter: validates against JSON Schema if provided
|
|
324
336
|
*
|
|
337
|
+
* @param options - Validation options (optional)
|
|
325
338
|
* @returns Validation result with all issues and statistics
|
|
326
339
|
*
|
|
327
340
|
* @example
|
|
328
341
|
* ```typescript
|
|
342
|
+
* // Validate links only
|
|
329
343
|
* const result = await registry.validate();
|
|
344
|
+
*
|
|
345
|
+
* // Validate links and frontmatter
|
|
346
|
+
* const schema = { type: 'object', required: ['title'] };
|
|
347
|
+
* const result = await registry.validate({ frontmatterSchema: schema });
|
|
348
|
+
*
|
|
330
349
|
* console.log(`Passed: ${result.passed}`);
|
|
331
350
|
* console.log(`Errors: ${result.errorCount}`);
|
|
332
351
|
* console.log(`Warnings: ${result.warningCount}`);
|
|
@@ -336,7 +355,7 @@ export class ResourceRegistry implements ResourceCollectionInterface {
|
|
|
336
355
|
* }
|
|
337
356
|
* ```
|
|
338
357
|
*/
|
|
339
|
-
async validate(): Promise<ValidationResult> {
|
|
358
|
+
async validate(options?: ValidateOptions): Promise<ValidationResult> {
|
|
340
359
|
const startTime = Date.now();
|
|
341
360
|
|
|
342
361
|
// Build headings map for validation
|
|
@@ -345,6 +364,20 @@ export class ResourceRegistry implements ResourceCollectionInterface {
|
|
|
345
364
|
// Collect all validation issues
|
|
346
365
|
const issues: ValidationIssue[] = [];
|
|
347
366
|
|
|
367
|
+
// Check for YAML parsing errors first
|
|
368
|
+
for (const resource of this.resourcesByPath.values()) {
|
|
369
|
+
if (resource.frontmatterError) {
|
|
370
|
+
issues.push({
|
|
371
|
+
severity: 'error',
|
|
372
|
+
resourcePath: resource.filePath,
|
|
373
|
+
line: 1,
|
|
374
|
+
type: 'frontmatter_invalid_yaml',
|
|
375
|
+
link: '',
|
|
376
|
+
message: `Invalid YAML syntax in frontmatter: ${resource.frontmatterError}`,
|
|
377
|
+
});
|
|
378
|
+
}
|
|
379
|
+
}
|
|
380
|
+
|
|
348
381
|
// Validate each link in each resource
|
|
349
382
|
for (const resource of this.resourcesByPath.values()) {
|
|
350
383
|
for (const link of resource.links) {
|
|
@@ -355,6 +388,18 @@ export class ResourceRegistry implements ResourceCollectionInterface {
|
|
|
355
388
|
}
|
|
356
389
|
}
|
|
357
390
|
|
|
391
|
+
// Frontmatter validation (if schema provided)
|
|
392
|
+
if (options?.frontmatterSchema) {
|
|
393
|
+
for (const resource of this.resourcesByPath.values()) {
|
|
394
|
+
const frontmatterIssues = validateFrontmatter(
|
|
395
|
+
resource.frontmatter,
|
|
396
|
+
options.frontmatterSchema,
|
|
397
|
+
resource.filePath
|
|
398
|
+
);
|
|
399
|
+
issues.push(...frontmatterIssues);
|
|
400
|
+
}
|
|
401
|
+
}
|
|
402
|
+
|
|
358
403
|
// Count issues by severity
|
|
359
404
|
const errorCount = issues.filter((i) => i.severity === 'error').length;
|
|
360
405
|
const warningCount = issues.filter((i) => i.severity === 'warning').length;
|
|
@@ -73,13 +73,17 @@ export type ResourceLink = z.infer<typeof ResourceLinkSchema>;
|
|
|
73
73
|
* Complete metadata for a markdown resource.
|
|
74
74
|
*
|
|
75
75
|
* Includes all parsed information about the resource: its links, headings structure,
|
|
76
|
-
* file stats, and identifiers.
|
|
76
|
+
* file stats, and identifiers. Supports YAML frontmatter parsing.
|
|
77
77
|
*/
|
|
78
78
|
export const ResourceMetadataSchema = z.object({
|
|
79
79
|
id: z.string().describe('Unique identifier (inferred from filePath or overridden by frontmatter)'),
|
|
80
80
|
filePath: z.string().describe('Absolute path to the resource file'),
|
|
81
81
|
links: z.array(ResourceLinkSchema).describe('All links found in the resource'),
|
|
82
82
|
headings: z.array(HeadingNodeSchema).describe('Document table of contents (top-level headings only; children are nested)'),
|
|
83
|
+
frontmatter: z.record(z.string(), z.unknown()).optional()
|
|
84
|
+
.describe('Parsed YAML frontmatter (if present in markdown file)'),
|
|
85
|
+
frontmatterError: z.string().optional()
|
|
86
|
+
.describe('YAML parsing error message (if frontmatter contains invalid YAML syntax)'),
|
|
83
87
|
sizeBytes: z.number().int().nonnegative().describe('File size in bytes'),
|
|
84
88
|
estimatedTokenCount: z.number().int().nonnegative().describe('Estimated token count for LLM context (roughly 1 token per 4 chars)'),
|
|
85
89
|
modifiedAt: z.date().describe('Last modified timestamp'),
|
|
@@ -18,6 +18,15 @@ export type ValidationSeverity = z.infer<typeof ValidationSeveritySchema>;
|
|
|
18
18
|
/**
|
|
19
19
|
* A single validation issue found during link validation.
|
|
20
20
|
*
|
|
21
|
+
* Issue types:
|
|
22
|
+
* - broken_file: Local file link points to non-existent file
|
|
23
|
+
* - broken_anchor: Anchor link points to non-existent heading
|
|
24
|
+
* - external_url: External URL (informational, not validated)
|
|
25
|
+
* - unknown_link: Unknown link type
|
|
26
|
+
* - frontmatter_missing: Schema requires frontmatter, file has none
|
|
27
|
+
* - frontmatter_invalid_yaml: YAML syntax error in frontmatter
|
|
28
|
+
* - frontmatter_schema_error: Frontmatter fails JSON Schema validation
|
|
29
|
+
*
|
|
21
30
|
* Includes details about what went wrong, where it occurred, and optionally
|
|
22
31
|
* how to fix it.
|
|
23
32
|
*/
|
package/src/types.ts
CHANGED
|
@@ -29,3 +29,11 @@ export type {
|
|
|
29
29
|
ValidationIssue,
|
|
30
30
|
ValidationResult,
|
|
31
31
|
} from './schemas/validation-result.js';
|
|
32
|
+
|
|
33
|
+
// Resource registry types
|
|
34
|
+
export type {
|
|
35
|
+
CrawlOptions,
|
|
36
|
+
ResourceRegistryOptions,
|
|
37
|
+
ValidateOptions,
|
|
38
|
+
RegistryStats,
|
|
39
|
+
} from './resource-registry.js';
|