A Metalsmith plugin that adds support for draft, private, and future-dated posts.
JavaScript Makefile
Switch branches/tags
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Permalink
Failed to load latest commit information.
lib
test
.gitignore
History.md
Makefile
Readme.md
package.json

Readme.md

metalsmith-publish

A Metalsmith plugin that adds support for draft, private, and future-dated posts. Enables you to do multiple builds for production and development. Gives you a callback so you can automate rebuilding metalsmith with a cron job or node script when future-dated posts become published.

Features

  • works via publish metadata
  • building draft, private, and future-dated posts enabled independently
  • callback serving future-dated posts so you can automate rebuild

Installation

$ npm install metalsmith-publish

Usage

Draft

Set post publish state via metadata:

---
title: My Article
publish: draft
---

Include in build via config:

var publish = require('metalsmith-publish');

metalsmith.use(publish({
  draft: true
}));

Private

Set post publish state via metadata:

---
title: My Article
publish: private
---

Include in build via config:

var publish = require('metalsmith-publish');

metalsmith.use(publish({
  private: true
}));

Unlisted

Removes the collection metadata, useful for publishing internally wihtout adding it to your posts lists or RSS feeds.

---
title: My Article
publish: unlisted
collection: blog
---

Include in build via config:

var publish = require('metalsmith-publish');

metalsmith.use(publish({
  unlisted: true
}));

Future-dated

Set post publish state via metadata:

---
title: My Article
publish: 2021-12-21
---

Include in build via config:

var publish = require('metalsmith-publish');

metalsmith.use(publish({
  future: true
}));

Specify field to use for date when publish unspecified (default: 'date'):

var publish = require('metalsmith-publish');

metalsmith.use(publish({
  futureMeta: 'date'
}));

Or pass callback to automate rebuild:

metalsmith.use(publish({
  futureFn: function (futureFiles, metalsmith, done) {
    Object.keys(futureFiles).forEach(function (file) {
      console.log('rebuild ' + file + ' @ ' new Date(futureFiles[file].publish).toTime());
    });
    done();
  }
}));

CLI Usage

All of the same options apply, just add them to the "plugins" key in your metalsmith.json configuration:

{
  "plugins": {
    "metalsmith-publish": {
      "articles": {
        "draft": false,
        "private": false,
        "future": false,
        "futureFn": "console.log('Callback script passed (futureFiles, metalsmith, done). E.g. futureFiles = ' + Object.keys(futureFiles).join(', ')); done();"
      }
    }
  }
}

License

MIT