Skip to content
This repository has been archived by the owner on Aug 16, 2023. It is now read-only.
/ mustache-async.js Public archive

Logic-less {{mustache}} templates with async view function Support

License

Notifications You must be signed in to change notification settings

Soluto/mustache-async.js

Repository files navigation

DEPRECATED

This repository is no longer maintained and has been archived. Feel free to browse the code, but please migrate to other solutions.

mustache-async.js - Logic-less {{mustache}} templates with async view function Support

Build Status Known Vulnerabilities

mustache-async.js is a fork of the mustache.js template system, with async view function support. If you don't need to use async functions to generate substitution values, you should simply use mustache.js which supports older browsers and older JS versions.

Mustache is a logic-less template syntax. It can be used for HTML, config files, source code - anything. It works by expanding tags in a template using values provided in a hash or object. Visit the manpage for the templating syntax.

Usage

mustache-async.js supports regular functions, async functions and Promises. Example:

const view = {
    firstName: 'Art',
    lastName: 'Vandelay',
    fullName: function() {
        return this.firstName + ' ' + this.lastName;
    },
    profession: async () => new Promise(resolve => setTimeout(() => resolve('Architect'), 10))
}
const template = 'My name is {{fullName}}, I am an {{profession}}';
console.log(await Mustache.render(template, view));
//My name is Art Vandelay, I am an Architect

In this example, the Mustache.render function takes two parameters: 1) the mustache template and 2) a view object that contains the data and code needed to render the template.

Install

You can get Mustache via npm.

$ npm install mustache-async --save

Contributing

mustache-async.js is a new project, any contribution are welcome! Visit the issues page

API

Following is an rtype signature of the most commonly used functions.

Mustache.render(
  template            : String,
  view                : Object,
  partials?           : Object,
  tags = ['{{', '}}'] : Tags,
) => String

Mustache.parse(
  template              : String,
  tags = ['{{', '}}']   : Tags,
) => Token[]

interface Token [String, String, Number, Number, Token[]?, Number?]

interface Tags [String, String]

More info and API reference on mustache.js github page