Latest Threat Research:SANDWORM_MODE: Shai-Hulud-Style npm Worm Hijacks CI Workflows and Poisons AI Toolchains.Details
Socket
Book a DemoInstallSign in
Socket

nunjucks-pre-lexer

Package Overview
Dependencies
Maintainers
1
Versions
3
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

nunjucks-pre-lexer

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

latest
npmnpm
Version
0.0.3
Version published
Maintainers
1
Created
Source

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!

Keywords

nunjucks

FAQs

Package last updated on 28 Dec 2018

Did you know?

Socket

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Install

Related posts