Nefarious Pomegranate Magnate

    liquid

    5.1.1 • Public • Published

    Liquid with Node.js

    This is a port of the original Liquid template engine from Ruby to Node.js. It uses Promises to support non-blocking/asynchronous variables, filters, and blocks.

    Features

    • Supports asynchronous variables, tags, functions and filters (helpers)
    • Supports whitespace control
    • Allows custom tags and filters to be added
    • Supports full liquid syntax
    • Based on original Ruby code
    • High test coverage

    What does it look like?

    <ul id="products">
      {% for product in products %}
        <li>
          <h2>{{ product.name }}</h2>
          Only {{ product.price | price }}
     
          {{ product.description | prettyprint | paragraph }}
        </li>
      {% endfor %}
    </ul>

    Installation

    npm install liquid

    Usage

    Liquid supports a very simple API based around the Liquid.Engine class. For standard use you can just pass it the content of a file and call render with an object.

    const Liquid = require('liquid')
    const engine = new Liquid.Engine()
     
    engine
      .parse('hi {{name}}')
      .then(template => template.render({ name: 'tobi' }))
      .then(result => console.log(result))
     
    // or
     
    engine
      .parseAndRender('hi {{name}}', { name: 'tobi' })
      .then(result => console.log(result))

    Usage with Connect and Express

    app.get((req, res, next) => {
      engine
        .parseAndRender('hi {{name}}', { name: 'tobi' })
        .nodeify((err, result) => {
          if (err) {
            res.end('ERROR: ' + err)
          } else {
            res.end(result)
          }
        })
    })

    Registering new filters

    engine.registerFilters({
      myFilter: input => {
        return String(input).toUpperCase()
      }
    })

    Registering new tags

    Take a look at the existing tags to see how to implement them.

    class MyTag extends Liquid.Tag {
      render () {
        return 'hello world'
      }
    }
     
    engine.registerTag('MyTag', MyTag)

    Tests

    npm test

    Similar libraries

    • harttle/liquidjs (liquidjs on npm) is another actively maintained Liquid parser and render for Node.js
    • darthapo's Liquid.js is liquid ported to JavaScript to be run within the browser. It doesn't handle asynchrony.
    • tchype's Liquid.js is liquid-node wrapped to run in a browser.

    License

    MIT

    Contributors ✨

    Thanks goes to these wonderful people (emoji key):


    Marcel Jackwerth

    💻 📖

    Tony C. Heupel

    💻

    Chen Yangjian

    💻

    Henri Bergius

    💻

    Sam Tiffin

    💻

    Kris Ciccarello

    💻

    Cory Reed

    💻 💡 📖

    Sebastian Seilund

    💻

    Rob Loach

    💻

    Sarah Schneider

    💻

    Zeke Sikelianos

    💻 📖 🚧

    This project follows the all-contributors specification. Contributions of any kind welcome!

    Install

    npm i liquid

    DownloadsWeekly Downloads

    2,682

    Version

    5.1.1

    License

    MIT

    Unpacked Size

    128 kB

    Total Files

    64

    Last publish

    Collaborators

    • hornairs
    • zeke