nunjucks-pre-lexer
TypeScript icon, indicating that this package has built-in type declarations

0.0.3 • Public • Published

Nunjucks Pre-Lexer

A tool for identifying and fetching the data that a Nunjucks template expects.

NPM Build Status Codecov

Usage

Installation

$ npm install nunjucks-pre-lexer
const { lexer } = require('nunjucks-pre-lexer')
 
const templateStr = '{{ myObject.property }}'
 
// The schema is an object that tells the lexer
// how to get the data the template is asking for
const schema = { myObject: { property: true } }
 
const data = lexer(schema, templateStr)
// -> { myObject: { property: true } }

This is a pretty mundane example because the value of myObject.property is hardcoded; now let's see what it looks like to fetch some data from our database in the same way:

const templateStr = '{{ getPosts() }}'
const schema = {
  async getPosts() {
    // Some asynchronous operation that queries the database.
    // This can be anything at all!
    return db.Post.findAll()
  }
}
 
const data = lexer(schema, templateStr)
// -> { getPosts: () => ([{ title: 'A post' }]) }

Now, when we go to render that template (using nunjucks.render as normal), we've prepared the return value of the getPosts function - so its evaluates immediately.

Why

Two main reasons: performance, and ease of writing templates.

Performance

With this method of understanding the requirements of a template, we can really aggressively cache the template itself, while still ensuring that we're getting the freshest data when we need it.

Additionally, this lets us get the data the the template is using - and nothing more. We're letting the template define the data it needs, and then getting it.

Ease of writing templates

Asynchronous templating is a challenge - Nunjucks has shaky support, and a good, consistent usage of it requires some funky filters. This avoids any need for "intentional" asynchronicity by pre-fetching any data that the template needs.


Question? Comments? Open an issue, happy to talk through it!

Readme

Keywords

Package Sidebar

Install

npm i nunjucks-pre-lexer

Weekly Downloads

0

Version

0.0.3

License

MIT

Unpacked Size

37.5 kB

Total Files

30

Last publish

Collaborators

  • jasonetco