diff --git a/package-lock.json b/package-lock.json index 0bd48fe..b9b4786 100644 --- a/package-lock.json +++ b/package-lock.json @@ -17,6 +17,7 @@ "luxon": "^3.4.4", "request": "^2.88.2", "request-promise-native": "^1.0.8", + "require-directory": "^2.1.1", "turndown": "^7.1.2", "turndown-plugin-gfm": "^1.0.2", "xml2js": "^0.6.2" @@ -1545,6 +1546,14 @@ "request": "^2.34" } }, + "node_modules/require-directory": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", + "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/resolve-from": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", diff --git a/package.json b/package.json index 506b8f7..0a5440f 100644 --- a/package.json +++ b/package.json @@ -28,6 +28,7 @@ "luxon": "^3.4.4", "request": "^2.88.2", "request-promise-native": "^1.0.8", + "require-directory": "^2.1.1", "turndown": "^7.1.2", "turndown-plugin-gfm": "^1.0.2", "xml2js": "^0.6.2" diff --git a/src/parser.js b/src/parser.js index d530e80..892a7c0 100644 --- a/src/parser.js +++ b/src/parser.js @@ -1,16 +1,13 @@ const fs = require('fs'); +const requireDirectory = require('require-directory'); const xml2js = require('xml2js'); const shared = require('./shared'); +const settings = require('./settings'); const translator = require('./translator'); -const frontmatter = { - title: require('./frontmatter/title'), - date: require('./frontmatter/date'), - categories: require('./frontmatter/categories'), - tags: require('./frontmatter/tags'), - coverImage: require('./frontmatter/coverImage'), -}; +// dynamically requires all frontmatter loaders +const frontmatterLoaders = requireDirectory(module, './frontmatter', { recurse: false }); async function parseFilePromise(config) { console.log('\nParsing...'); @@ -174,13 +171,11 @@ function mergeImagesIntoPosts(images, posts) { function populateFrontmatter(posts) { posts.forEach(post => { - post.frontmatter = { - title: frontmatter.title(post), - date: frontmatter.date(post), - categories: frontmatter.categories(post), - tags: frontmatter.tags(post), - coverImage: frontmatter.coverImage(post) - } + post.frontmatter = {}; + settings.frontmatter_fields.forEach(field => { + [key, alias] = field.split(':'); + post.frontmatter[alias || key] = frontmatterLoaders[key](post); + }); }); }