YAML Property Assurance Script Enhancements
YAML Property Assurance Script Enhancements
Core Improvements
1. UUID Integration
- Added automatic
site_uuid
generation for markdown files - Implemented UUID v4 for unique site identification
- Preserves existing UUIDs, only generates for missing entries
javascript
const required = {
properties: ['site_uuid'],
generateIfMissing: {
site_uuid: () => uuidv4()
}
}
2. Configuration Centralization
- Introduced
USER_OPTIONS
configuration object - Separated concerns into logical groupings:
- Directory paths and exclusions
- YAML property requirements
- File generation settings
- Formatting preferences
javascript
const USER_OPTIONS = {
directories: { /* ... */ },
frontmatter: { /* ... */ },
reporting: { /* ... */ }
};
3. Property Management
- Enhanced YAML property handling:
- Configurable required properties list
- Automatic value generation for missing properties
- Property name formatting standardization
javascript
frontmatter: {
required: {
properties: ['site_uuid'],
generateIfMissing: {
site_uuid: () => uuidv4()
}
},
propertyFormatting: {
convertHyphensToUnderscores: true,
ensureArrayForTags: true
}
}
Technical Improvements
1. Directory Structure
- Moved script to
build-scripts/
directory - Implemented configurable directory paths
- Added exclusion patterns for URL checks
javascript
directories: {
content: path.join(process.cwd(), 'src/content/tooling'),
fixes: path.join(process.cwd(), 'scripts/fixes-needed'),
excludeUrlCheck: ['Explainers']
}
2. Error Reporting
- Consolidated issue reporting
- Dynamic file generation based on issue type
- Improved error tracking and statistics
javascript
reporting: {
issueFiles: {
lowercaseTags: 'Lowercase-Tags.md',
missingUrls: 'Missing-URLs.md'
}
}
3. Code Organization
- Modularized functionality into logical sections
- Improved code readability with clear section markers
- Enhanced maintainability through configuration centralization
Impact
- Consistency: Ensures uniform YAML frontmatter across all markdown files
- Identification: Automatic UUID generation for content tracking
- Maintenance: Reduced code duplication and improved configurability
- Reliability: Better error handling and reporting
- Flexibility: Easy configuration updates through
USER_OPTIONS
Usage Notes
The script now handles:
- Automatic UUID generation for new content
- Standardized property naming (hyphens to underscores)
- Tag formatting and validation
- URL presence verification (with configurable exclusions)
- Comprehensive issue reporting
Technical Details
Dependencies
javascript
const { v4: uuidv4 } = require('uuid');
Key Functions
- Property Generation:
javascript
if (!parsedFile.data[prop] && USER_OPTIONS.frontmatter.required.generateIfMissing[prop]) {
const generatedValue = USER_OPTIONS.frontmatter.required.generateIfMissing[prop]();
modifiedFrontmatter = `${prop}: "${generatedValue}"\n${modifiedFrontmatter}`;
}
Configuration
All configurable options are now centralized in
USER_OPTIONS
:- Directory paths
- Required properties
- Formatting rules
- Issue reporting paths
Migration Notes
No breaking changes introduced. The script maintains backward compatibility while adding new functionality:
- Existing UUIDs are preserved
- Current formatting is maintained unless explicitly configured
- Issue reporting continues to work as before
Engineers can modify the
USER_OPTIONS
object to adjust:- Required properties
- Directory paths
- Formatting rules
- Issue reporting configuration