JSPM

mrjt

1.0.0
  • ESM via JSPM
  • ES Module Entrypoint
  • Export Map
  • Keywords
  • License
  • Repository URL
  • TypeScript Types
  • README
  • Created
  • Published
  • Downloads 5
  • Score
    100M100P100Q23227F
  • License MIT

Beardless customizable template engine, Mr. Jt for Node.js and Web browsers.

Package Exports

  • mrjt

This package does not declare an exports field, so the exports above have been automatically detected and optimized by JSPM instead. If any package subpath is missing, it is recommended to post an issue to the original package (mrjt) to support the "exports" field. If that is not possible, create a JSPM override to customize the exports field for this package.

Readme

Mr. Jt 🎩

Meet beardless customizable template engine, Mr. Jt for Node.js and Web browsers.

Build status release-src npm License

Build history

jt.use('', ' $Hello %p% {{world}} ')
    .as({ p: 'amazing'})
    .reset().as({ p: 'crazy'})
    // ... +$Hello, +{{world}}
jt.use('s1', 'Today is a {( a < b )} good {/} bad {;} day!')
    .sa(jtif, { a: 5, b: 7})
    .value()

Why Jt ?

Extremely small, fast, and damn customizable. Okay, Let's see what's going on:

Speed 🚀

Only native lower-level implementation. Even for conditional statements, like:

{( d > 5 )} yes {/} no {;}

Which do not uses regex, or eval(), or new Function(), ... Feel the speed.

Size 📦

Extra small size. Just about o-n-e kilobyte of fully workable core engine:

  • ~ 1.02 KB for Core of ES6 gzipped;
  • ~ 1.09 KB for Core of ES3 gzipped;

Same things for custom handlers.

Configurable 🔧

You can configure, add, or change anything!

Jt was designed to be loyal to your preferences on the fly. Maybe for this:

jt.use('s1', 'Good {{p}}, $p -p- !')
    .as({ p: 'Jt' })
    .as({ p: 'Mr.' }, {op: '$'})
    .as({ p: 'morning' }, '{{}}')
    .val(),

Or for this:

// {( true )} yes {/} no {;} -> {if( true )} yes {else} no {endif}
    
jt.use('legacy', '{if( true )} yes {else} no {endif}!')
.sa(new JtIfHandler([ '{}' ],
{
    if: 'if',
    else: 'else',
    fi: 'endif',
}))
.val() // yes !

Or for something more ...

Extensible via Pluginable handlers 🗃

Sure! Add or change any features for the layers, still on the fly.

Do you need something special? No problem, just implement IJtHandler to cover your awesome things. It easy.

Comfy but strong 🌇

Changeable layers through common chain will make you happy.

You can control everything just in a few steps:

jt.use('hello', 'Hello you from $tip, dear $name.')
    .as({ tip: 'Jt', name: 'John' }); // Hello you from Jt, dear John.

// ...

jt.use('hello')
    .as(-1, true)
    .as({ name: 'Denis' }) // Hello you from Jt, dear Denis.
    .reset()
    .as({ tip: 'Moscow' })
    .eject((v) => t.is(v, 'Hello you from Moscow, dear $name.'))
    ...
    .as({ name: '{( r > 100 )}friend{/}visitor{;}' })
    .sa(jtif, { r: actual }) // // Hello you from Moscow, dear friend.
    ...
    .val();
🐧

Stability 🗠

Clean API and its tests will take care of your peace of mind.

Compatibility 🗸

Nothing special, we just provide separate ES3+/ES6+ support in Node.js and Web browsers environment. Choose more suitable package for your case.

No dependencies to something 👐

Developed from scratch without dependencies to something from our end-product.

Open and Free 🍰

Open Source project; MIT License, Yes! Enjoy!

License

Licensed under the MIT License (MIT)

Copyright (c) 2019  Denis Kuzmin < entry.reg@gmail.com > GitHub/3F

[ ☕ Donate ]

API

Download

Build & Tests

npm install
gulp build --conf debug

Available tests can be raised by command:

npm test

We're waiting for your awesome contributions!