@terzitech/reqtext
Version:
Reqtext is a Git-native, CLI first requirements and documentation framework meant to bring requirement management directly into your workflow. Human -and AI- readable.
48 lines (42 loc) • 1.72 kB
JavaScript
import { getData, setData } from '../services/dataHandler.js';
import fhr from '@terzitech/flathier';
/**
* Uses the flathier library's custom extension and unique ID logic.
* @returns {Promise<void>}
*/
async function cleanHandler() {
// Load items from SoT using dataHandler
let items = await getData();
// Recalculate outlines as a fail save
items = await fhr.computeOutlines(items);
let changed = false;
// Use hardcoded extension for reqtext
const ext = 'reqt_ID';
const updatedItems = await Promise.all(items.map(async item => {
let updated = { ...item };
// Ensure reqt_ID field exists and is valid
if (!('reqt_ID' in updated) || !updated.reqt_ID || typeof updated.reqt_ID !== 'string' || updated.reqt_ID === 'GENERATE_WITH_CLEAN' || updated.reqt_ID === 'PLACEHOLDER') {
updated.reqt_ID = await fhr.generateUniqueId();
changed = true;
}
// Find all keys that match the ext _ID pattern
for (const key of Object.keys(updated)) {
const keyUpper = key.toUpperCase();
if (
(keyUpper === ext || keyUpper.endsWith(`_${ext}`)) &&
(!updated[key] || typeof updated[key] !== 'string' || updated[key] === 'GENERATE_WITH_CLEAN' || updated[key] === 'PLACEHOLDER')
) {
updated[key] = await fhr.generateUniqueId();
changed = true;
}
}
return updated;
}));
if (changed) {
await setData(updatedItems); // Save updated items using dataHandler
console.log(`\u2705 Clean complete: All items have valid ${ext}_ID fields.`); // ✅
} else {
console.log(`\u2705 Clean complete: No changes were necessary. All items already have valid ${ext}_ID fields.`); // ✅
}
}
export default cleanHandler;