postProcess - speced/respec GitHub Wiki
Type: Array<(config: Object, document: Document, utils: Object) => void | Promise<void>>
Default: []
An array of functions that run after ReSpec has finished all processing. Use this to add custom sections, validate the final output, or modify generated markup.
async function addImplStatus(config, document) {
const res = await fetch("https://api.example.org/impl-status.json");
const status = await res.json();
// Add a badge to each section that has implementation data
for (const [id, data] of Object.entries(status)) {
const section = document.getElementById(id);
if (!section) continue;
const badge = document.createElement("span");
badge.className = "impl-badge";
badge.textContent = `${data.implementations} implementations`;
section.querySelector("h2, h3")?.append(" ", badge);
}
}
var respecConfig = {
postProcess: [addImplStatus],
};function validateSpec(config, document) {
// Check that all normative sections have at least one dfn or algorithm
const normativeSections = document.querySelectorAll(
"section:not(.informative):not(.appendix)"
);
for (const section of normativeSections) {
if (!section.querySelector("dfn, ol.algorithm")) {
console.warn("Section with no dfn or algorithm:", section.id);
}
}
}
var respecConfig = {
postProcess: [validateSpec],
};Each function receives three arguments:
| Argument | Type | Description |
|---|---|---|
config |
Object |
The respecConfig object plus ReSpec internal state |
document |
Document |
The fully processed ReSpec document |
utils |
Object |
ReSpec utility functions |
- Functions run in order, awaiting async functions before proceeding
- At this point: headings are numbered, ToC is built, dfn panels are generated, xrefs are resolved, boilerplate is inserted. You are working with the final output.
- Changes appear in both the live preview and the saved HTML export
- To be notified when ALL processing is complete (including postProcess), use
document.respec.ready - For pre-processing before ReSpec starts, see
preProcess