npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2024 – Pkg Stats / Ryan Hefner

vuepress-plugin-feed

v0.1.9

Published

RSS, Atom, and JSON feeds generator plugin for VuePress 1.x

Downloads

2,535

Readme

VuePress Plugin Feed

RSS, Atom, and JSON feeds generator plugin for VuePress 1.x

Build Status npm version Greenkeeper badge MIT License

Install

$ npm install -D vuepress-plugin-feed

# or

$ yarn add -D vuepress-plugin-feed

Usage

Add vuepress-plugin-feed in your site or theme config file.

See official docs on using a plugin

// .vuepress/config.js
// or
// .vuepress/theme/index.js

// set your global feed options - override in page frontmatter `feed`
const feed_options = {
  canonical_base: 'https://webmasterish.com',
};

module.exports = {
  plugins: [
    [ 'feed', feed_options ]
  ]
}

Page frontmatter

Page frontmatter.feed is optional. It can be used to override the defaults.

Check the Page class for more details.

---

title: Page Title

feed:
  enable: true
  title: Title used in feed
  description: Description used in feed
  image: /public/image.png
  author:
    -
      name: Author
      email: [email protected]
      link: http://doamin.tld
  contributor:
    -
      name: Contributor
      email: [email protected]
      link: http://doamin.tld

---

How pages are added as feed items

A page is auto added as a feed item if one the following conditions is met:

  • frontmatter.feed.enable === true
  • frontmatter.type === 'post'
  • it resides in whatever the posts_directories are set to (the defaults are blog and _posts)

if you need to exclude a particular page that meets one of the conditions above, you can use frontmatter.feed.enable === false.

Details on how pages are filtered can be found in PLUGIN.is_feed_page().

The PLUGIN.is_feed_page() function is the default way of filtering the pages, you can override it using is_feed_page option (see Options section below).

Options

See Plugin Option API official docs

Default options

You can override default options in 2 ways:

  1. Global plugin options set in .vuepress/config.js or .vuepress/theme/index.js as described in Usage
  2. Individual page/post frontmatter as shown in Page frontmatter
const {
  title,
  description
} = context.getSiteData ? context.getSiteData() : context;

// -----------------------------------------------------------------------------

// Feed class options
// @see: https://github.com/jpmonette/feed#example

const feed_options = {

  title,
  description,
  generator: PLUGIN.homepage,

  // ---------------------------------------------------------------------------

  // the following are auto populated in PLUGIN.get_options()
  // if they are not set as options
  /*
  id,
  link,
  feedLinks,
  */

  // ---------------------------------------------------------------------------

  // ref:
  /*
  title: "Feed Title",
  description: "This is my personal feed!",
  id: "http://example.com/",
  link: "http://example.com/",
  image: "http://example.com/image.png",
  favicon: "http://example.com/favicon.ico",
  copyright: "All rights reserved 2013, John Doe",
  updated: new Date(2013, 6, 14), // optional, default = today
  generator: "awesome", // optional, default = 'Feed for Node.js'
  feedLinks: {
    json: "https://example.com/json",
    atom: "https://example.com/atom"
  },
  author: {
    name: "John Doe",
    email: "[email protected]",
    link: "https://example.com/johndoe"
  }
  */

};

// -----------------------------------------------------------------------------

const default_options = {

  // required; it can also be used as enable/disable

  canonical_base: '',

  // ---------------------------------------------------------------------------

  // Feed class options - @see: https://github.com/jpmonette/feed#example
  // optional - auto-populated based on context.getSiteData()

  feed_options,

  // ---------------------------------------------------------------------------

  // @notes:
  // property name is also the name of the jpmonette/feed package function

  feeds: {

    rss2: {
      enable    : true,
      file_name : 'rss.xml',
      head_link : {
        enable: true,
        type  : 'application/rss+xml',
        title : '%%site_title%% RSS Feed',
      }
    },

    // -------------------------------------------------------------------------

    atom1: {
      enable    : true,
      file_name : 'feed.atom',
      head_link : {
        enable: true,
        type  : 'application/atom+xml',
        title : '%%site_title%% Atom Feed',
      }
    },

    // -------------------------------------------------------------------------

    json1: {
      enable    : true,
      file_name : 'feed.json',
      head_link : {
        enable: true,
        type  : 'application/json',
        title : '%%site_title%% JSON Feed',
      }
    },

  },

  // ---------------------------------------------------------------------------

  // page/post description sources

  // order of what gets the highest priority:
  //
  // 1. frontmatter
  // 2. page excerpt
  // 3. content markdown paragraph
  // 4. content regular html <p>

  description_sources: [

    'frontmatter',
    'excerpt',

    // markdown paragraph regex
    // @todo: needs work
    //
    /^((?:(?!^#)(?!^\-|\+)(?!^[0-9]+\.)(?!^!\[.*?\]\((.*?)\))(?!^\[\[.*?\]\])(?!^\{\{.*?\}\})[^\n]|\n(?! *\n))+)(?:\n *)+\n/gim,
    //
    // this excludes blockquotes using `(?!^>)`
    ///^((?:(?!^#)(?!^\-|\+)(?!^[0-9]+\.)(?!^!\[.*?\]\((.*?)\))(?!^>)(?!^\[\[.*?\]\])(?!^\{\{.*?\}\})[^\n]|\n(?! *\n))+)(?:\n *)+\n/gim,

    // html paragraph regex
    /<p(?:.*?)>(.*?)<\/p>/i,

  ],

  // ---------------------------------------------------------------------------

  // page/post image sources

  // order of what gets the highest priority:
  //
  // 1. frontmatter
  // 2. content markdown image such as `![alt text](http://url)`
  // 3. content regular html img

  image_sources: [

    'frontmatter',

    /!\[.*?\]\((.*?)\)/i,         // markdown image regex
    /<img.*?src=['"](.*?)['"]/i,  // html image regex

  ],

  // ---------------------------------------------------------------------------

  // pages in current directories will be auto added as feed
  // unless they are disabled using their frontmatter
  // this option is used by the default is_feed_page function

  posts_directories: ['/blog/', '/_posts/'],

  // ---------------------------------------------------------------------------

  // function to check if the page is to be used in a feed item

  is_feed_page: PLUGIN.is_feed_page, // function

  // ---------------------------------------------------------------------------

  count: 20,

  // optional sorting function for the entries. 
  // Gets the array entries as the input, expects the sorted array
  // as its output.
  // e.g.:   sort:  entries => _.reverse( _.sortBy( entries, 'date' ) ),
  // Don't forget to do a `const _ = require('lodash');` to be able to use `_`!

  sort: entries => entries,

  // ---------------------------------------------------------------------------

  // supported - use in config as needed

  // category
  // contributor

};

Reference

Related Plugins

License

MIT © webmasterish