Dynamic Frontmatter
Dynamic markdown frontmatter fields
Streamline content editing, while reducing potential for human error.
These steps add a dynamic lastModified markdown frontmatter field.
Install Run on Save (I used pucelle's. It worked, so didn't try other, simlarly named extensions) and Markdown All In One VS Code extensions.
Create script, @/update-frontmatter.js:
//<--------@/update-frontmatter.ts--------------------------------------------->
const fs = require('fs');
const path = require('path');
const filePath = process.argv[2];
const currentDate = new Date().toISOString().split('T')[0];
fs.readFile(filePath, 'utf8', (err, data) => {
if (err) {
console.error(err);
return;
}
const updatedData = data.replace(/lastModified: '.*'/, `lastModified: '${currentDate}'`);
fs.writeFile(filePath, updatedData, 'utf8', (err) => {
if (err) {
console.error(err);
return;
}
console.log(`Updated lastModified date to ${currentDate} in ${filePath}`);
});
});
//<--------@/update-frontmatter.ts--------------------------------------------->
Create a task, @/.vscode/tasks.json, to run the script on save:
{
"version": "2.0.0",
"tasks": [
{
"label": "Update Frontmatter",
"type": "shell",
"command": "node",
"args": [
"${workspaceFolder}/update-frontmatter.js",
"${file}"
],
"problemMatcher": [],
"isBackground": true
}
]
}
Add to @/.vscode/settings.json:
"editor.codeActionsOnSave": {
"source.fixAll": true
},
"files.autoSave": "onWindowChange",
"files.autoSaveDelay": 1000,
"files.associations": {
"*.md": "markdown"
},
"files.watcherExclude": {
"**/.git/objects/**": true,
"**/.git/subtree-cache/**": true,
"**/node_modules/**": true
},
"files.trimTrailingWhitespace": true,
"files.insertFinalNewline": true,
"files.trimFinalNewlines": true,
"files.autoGuessEncoding": true,
"files.defaultLanguage": "markdown",
"files.exclude": {
"**/.git": true,
"**/.DS_Store": true,
"**/node_modules": true
},
"runOnSave.commands": [
{
"match": "\\.md$",
"command": "node ${workspaceFolder}/update-frontmatter.js ${file}"
}
],