A Metalsmith plugin that allows you to easily validate file metadata, checking existence, type, and regex pattern.
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-validate

A Metalsmith plugin that allows you to validate file metadata. You can check existence, type, and regex pattern. Neat.

Features

  • works on files matching pattern
  • can specify default for when key unspecified
  • can test for existence or for lack thereof
  • can validate against type or array of types using check-types
  • can match against pattern as RegExp, string, or callback(value) returning boolean

Installation

$ npm install metalsmith-validate

Usage

Validate all files

Pass hash of file metadata keys and rules.

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

metalsmith.use(validate({
  title: {
  	exists: true,
  	type: 'String'
  },
  date: {
  	exists: true,
  	pattern: /^[0-9]{4}-(0[1-9]|1[0-2])-(0[1-9]|[1-2][0-9]|3[0-1])$/
  },
  tag: {
  	default: 'news'
  },
  draft: {
  	exists: false
  }
}));

Validate pattern-matching files

Pass array of hashes with file-matching pattern and metadata validation hash:

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

metalsmith.use(validate([
	{
		pattern: 'post/*',
		metadata: {
			title: true, // shorthand for title: { exists: true }
			date: true,
			invalid: false
		}
	},
	{
		// pattern defaults to '**/*'
		metadata: {
			template: {
				default: function (file, data) {
					return file + '.jade';
				},
				pattern: function (value) {
					return value.match(/\.jade$/);
				}
			}
		}
	}
));

Notice, both default and pattern accept callbacks. Also note the file-matching pattern is specified as a path after the metalsmith .source path (e.g. 'post/' and not 'src/post/').

CLI Usage

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

{
  "plugins": {
    "metalsmith-validate": [
      {
        "pattern": "page/*",
        "metadata": {
        	"title": {
        		"exists": true,
        		"type": "String"
        	}
        }
      }
    ]
  }
}

License

MIT