83 lines
2.2 KiB
JavaScript
83 lines
2.2 KiB
JavaScript
#!/usr/bin/env node
|
|
/**
|
|
* Generate a manifest of LinkML schema files for the frontend
|
|
* This script scans the schemas directory and creates a JSON manifest
|
|
* that the frontend can use to dynamically load schema files.
|
|
*
|
|
* Run: node scripts/generate-schema-manifest.js
|
|
*/
|
|
|
|
const fs = require('fs');
|
|
const path = require('path');
|
|
|
|
const SCHEMAS_DIR = path.join(__dirname, '../public/schemas/20251121/linkml');
|
|
const OUTPUT_FILE = path.join(__dirname, '../public/schemas/20251121/linkml/manifest.json');
|
|
|
|
function scanDirectory(dir, category) {
|
|
const files = [];
|
|
|
|
if (!fs.existsSync(dir)) {
|
|
console.warn(`Directory not found: ${dir}`);
|
|
return files;
|
|
}
|
|
|
|
const entries = fs.readdirSync(dir);
|
|
|
|
for (const entry of entries) {
|
|
if (entry.endsWith('.yaml') && !entry.endsWith('.bak.yaml') && !entry.includes('.bak')) {
|
|
const name = entry.replace('.yaml', '');
|
|
files.push({
|
|
name,
|
|
path: `modules/${category}/${entry}`,
|
|
category
|
|
});
|
|
}
|
|
}
|
|
|
|
return files.sort((a, b) => a.name.localeCompare(b.name));
|
|
}
|
|
|
|
function generateManifest() {
|
|
const manifest = {
|
|
generated: new Date().toISOString(),
|
|
version: '1.0.0',
|
|
categories: [
|
|
{
|
|
name: 'main',
|
|
displayName: 'Main Schema',
|
|
files: [{
|
|
name: 'Heritage Custodian Ontology',
|
|
path: '01_custodian_name_modular.yaml',
|
|
category: 'main'
|
|
}]
|
|
},
|
|
{
|
|
name: 'class',
|
|
displayName: 'Classes',
|
|
files: scanDirectory(path.join(SCHEMAS_DIR, 'modules/classes'), 'classes')
|
|
},
|
|
{
|
|
name: 'enum',
|
|
displayName: 'Enumerations',
|
|
files: scanDirectory(path.join(SCHEMAS_DIR, 'modules/enums'), 'enums')
|
|
},
|
|
{
|
|
name: 'slot',
|
|
displayName: 'Slots',
|
|
files: scanDirectory(path.join(SCHEMAS_DIR, 'modules/slots'), 'slots')
|
|
}
|
|
]
|
|
};
|
|
|
|
// Write manifest
|
|
fs.writeFileSync(OUTPUT_FILE, JSON.stringify(manifest, null, 2));
|
|
|
|
// Print summary
|
|
console.log('Schema manifest generated:');
|
|
for (const cat of manifest.categories) {
|
|
console.log(` ${cat.displayName}: ${cat.files.length} files`);
|
|
}
|
|
console.log(`\nOutput: ${OUTPUT_FILE}`);
|
|
}
|
|
|
|
generateManifest();
|