Embedded JS template engine for Node, Deno, and the browser. Lighweight, fast, and pluggable. Written in TypeScript

Overview

eta (η)

Documentation - Chat - RunKit Demo - Playground

GitHub package.json version (master) deno module Travis All Contributors Coveralls Donate

Summary

Eta is a lightweight and blazing fast embedded JS templating engine that works inside Node, Deno, and the browser. Created by the developers of Squirrelly, it's written in TypeScript and emphasizes phenomenal performance, configurability, and low bundle size.

🌟 Features

  • 📦 0 dependencies
  • 💡 2.3KB minzipped; size restricted to <3KB forever with size-limit
  • ⚡️ Written in TypeScript
  • Deno support (+ Node and browser)
  • 🚀 Super Fast
  • 🔧 Configurable
    • Plugins, custom delimiters, caching
  • 🔨 Powerful
    • Precompilation, partials, async
    • Layout support!
    • ExpressJS support out-of-the-box
  • 🔥 Reliable
    • Better quotes/comments support
      • ex. <%= someval + "string %>" %> compiles correctly, while it fails with doT or EJS
    • Great error reporting
  • ⚡️ Exports ES Modules as well as UMD
  • 📝 Easy template syntax

Eta vs other template engines

Eta vs EJS

Eta's syntax is very similar to EJS' (most templates should work with either engine), Eta has a similar API, and Eta and EJS share the same file-handling logic. Here are the differences between Eta and EJS:

  • Eta is more lightweight. Eta weighs less than 2.5KB gzipped, while EJS is 4.4KB gzipped
  • Eta compiles and renders templates much faster than EJS. Check out these benchmarks: https://ghcdn.rawgit.org/eta-dev/eta/master/browser-tests/benchmark.html
  • Eta allows left whitespace control (with -), something that doesn't work in EJS because EJS uses - on the left side to indicate that the value shouldn't be escaped. Instead, Eta uses ~ to output a raw value
  • Eta gives you more flexibility with delimeters -- you could set them to {{ and }}, for example, while with EJS this isn't possible
  • Eta adds plugin support
  • Comments in Eta use /* ... */ which allows commenting around template tags
  • Eta parses strings correctly. Example: <%= "%>" %> works in Eta, while it breaks in EJS
  • Eta exposes Typescript types and distributes a UMD build
  • Eta supports custom tag-type indicators. Example: you could change <%= to <%*
Eta vs doT.js

Eta and doT.js both allow embedded JavaScript, and both have best-in-class performance when compared to other template engines (though Eta is slightly faster with HTML-escaped templates). Here are some of the differences between Eta and doT.js:

  • Eta allows you to control how you strip preceding and trailing whitespace after tags.
  • It's much simpler to set custom delimiters with Eta than doT -- you don't have to rewrite every configuration Regular Expression
  • Eta supports plugins
  • Eta supports async
  • Eta parses strings and multi-line comments correctly. Example: <%= "%>" %> works in Eta, while the equivalent breaks in doT
  • Eta exposes Typescript types and distributes a UMD build
  • Eta supports runtime partials and file-handling.
Eta vs Handlebars

Eta and Handlebars are very different in some ways -- Eta is an embedded template engine, while Handlebars is a logic-less template engine. Here some additional differences between Eta and Handlebars:

  • Eta is more lightweight. Eta weighs less than 2.5KB gzipped, while Handlebars is ~22KB gzipped
  • Eta compiles and renders templates much faster than Handlebars -- around 7x faster. Check out these benchmarks: https://ghcdn.rawgit.org/eta-dev/eta/master/browser-tests/benchmark.html
  • Eta allows you to set custom delimiters
  • Eta supports plugins
  • Eta exposes Typescript types and distributes a UMD build
  • Custom tag-type indicators. Example: you could change <%= to <%*
  • With Eta, you don't need to register tons of helpers to do simple tasks like check if one value equals another value
  • Note that Eta templates run as trusted code -- just like any other JavaScript you write.

    If you are running user-defined/created templates on your machine, server, site, etc., you probably should go with a tool built for that purpose, like Handlebars.
Eta vs ES6 Template Literals

Template literals are a super useful tool, especially for shortening simple string concatenation. But writing complete templates using template literals can quickly get out of hand. Here's a comparison of Eta and template literals:

  • Eta compiles templates into JavaScript functions that use string concatenation and have comparable performance with template literals
  • Eta lets you control preceding and trailing whitespace around tags
  • Eta gives you more flexibility with delimeters -- you could set them to {{ and }}, for example, or set them to ${ and } to mimic template literals
  • Eta supports plugins
  • Eta supports comments with /* ... */ syntax, just like in regular JavaScript. Template literals require you to stick a blank string after the comment: /* ... */"", which is much less readable
  • To write conditionals inside template literals, you have to use the ternary operator. Add more conditions or nested conditionals, and it quickly becomes a nightmarish mess of ? ... : ... ? ... : .... Writing conditionals in Eta is much simpler and more readable
  • Eta supports partials

Why Eta?

Simply put, Eta is super: super lightweight, super fast, super powerful, and super simple. Like with EJS, you don't have to worry about learning an entire new templating syntax. Just write JavaScript inside your templates.

Where did Eta's name come from?

"Eta" means tiny in Esperanto. Plus, it can be used as an acronym for all sorts of cool phrases: "ECMAScript Template Awesomeness", "Embedded Templating Alternative", etc....

Additionally, Eta is a letter of the Greek alphabet (it stands for all sorts of cool things in various mathematical fields, including efficiency) and is three letters long (perfect for a file extension).

Integrations

Visual Studio Code

@shadowtime2000 created eta-vscode.

ESLint

eslint-plugin-eta was created to provide an ESLint processor so you can lint your Eta templates.

CLI

An official Eta CLI exists called etajs-cli.

Webpack

Currently there is no official Webpack integration but @clshortfuse shared the loader he uses:

{
  loader: 'html-loader',
  options: {
    preprocessor(content, loaderContext) {
      return eta.render(content, {}, { filename: loaderContext.resourcePath });
    },
  },
}

📜 Docs

We know nobody reads through the long and boring documentation in the ReadMe anyway, so head over to the documentation website:

📝 https://eta.js.org

📓 Examples

Simple Template

import * as Eta from 'eta';
var myTemplate = '<p>My favorite kind of cake is: <%= it.favoriteCake %></p>'

Eta.render(myTemplate, { favoriteCake: 'Chocolate!' })
// Returns: '<p>My favorite kind of cake is: Chocolate!</p>'

Conditionals

<% if(it.somevalue === 1) { %>
Display this
<% } else { %>
Display this instead
<% } %>

Loops

<ul>
<% it.users.forEach(function(user){ %>
<li><%= user.name %></li>
<% }) %>
</ul>

Partials

<%~ include('mypartial') %>
<%~ includeFile('./footer') %>
<%~ include('users', {users: it.users}) %>

✔️ Tests

Tests can be run with npm test. Multiple tests check that parsing, rendering, and compiling return expected results, formatting follows guidelines, and code coverage is at the expected level.

Resources

To be added

Projects using eta

Contributors

Made with by @nebrelbug and all these wonderful contributors (emoji key):


Ben Gubler

💻 ?? 📖 ⚠️

Clite Tailor

🤔 💻

Ioan CHIRIAC

💻 🤔

Craig Morten

💻

Rajan Tiwari

💡

shadowtime2000

💻 🤔 ⚠️

Hamza Hamidi

📖

Calum Knott

🤔

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

Credits

  • Async support and file handling were added based on code from EJS, which is licensed under the Apache-2.0 license. Code was modified and refactored to some extent.
  • Syntax and some parts of compilation are heavily based off EJS, Nunjucks, and doT.
Comments
  • Capture data and send to a partial?

    Capture data and send to a partial?

    If I had a template 'somepage.html' then I'd like to point to a 'layout' (which is a template itself with header, footer etc that renders out a passed body somewhere) and then pass/inject a body into it. Like how e.g. Jekyll works. Something along the lines of:

    <% var body = %> lots of HTML <% ; %> <%~ E.include('layout', {body: body}) %>

    Is that possible?

    opened by willemmulder 21
  • VSCode extension for Eta

    VSCode extension for Eta

    A common request from Eta users is VSCode syntax highlighting. We should create a VSCode extension with syntax highlighting for Eta templates! (Bonus: include snippets and/or formatting)

    Theoretically, we should be able to fork https://github.com/Digitalbrainstem/ejs-grammar. It has about 200K users and seems to have quite a few features.

    We could instead try to create a Language Server, which might be more powerful at the possible cost of being more complex to create. Here's one fairly minimal example: https://github.com/ebebbington/drash-markup-language.

    Resources

    • https://github.com/Digitalbrainstem/ejs-grammar (this is the most popular VSCode extension for EJS)
    • https://code.visualstudio.com/api/language-extensions/syntax-highlight-guide
    • https://github-lightshow.herokuapp.com/ (interactively test language grammars)
    • EJS TextMate bundle
    integration 
    opened by nebrelbug 13
  • Official Command Line Tool

    Official Command Line Tool

    Is your feature request related to a problem? Please describe. There is no official CLI for eta.

    Describe the solution you'd like A CLI preferably written in Typescript using yargs. It should be able to facilitate testing to make sure it is working properly.

    Describe alternatives you've considered Not having a CLI.

    Additional context I could work on this, I just want to see what people think.

    integration 
    opened by shadowtime2000 12
  • Create linter for Eta templates

    Create linter for Eta templates

    We should create a linter for Eta templates, similar to https://github.com/RyanZim/EJS-Lint. This would be very useful for checking the validity of Eta templates -- Eta, like EJS, uses new Function() to generate compiled template functions, and new Function() doesn't throw detailed syntax errors.

    EJS-Lint replaces everything outside a scriptlet tag with whitespace (to retain line & column numbers) and then runs the resulting (hopefully) valid JS through node-syntax-error to check for errors.

    We probably want to do something similar to this, but use a modified version of Eta's parser to handle multi-line comments and strings correctly.

    Ideally the linter would be available as an Eta plugin using the processTemplate hook and as a command-line tool.

    integration 
    opened by nebrelbug 12
  • How to render a template from a file/folder?

    How to render a template from a file/folder?

    Hi, I'm new to eta, and I'm looking at the documentation.

    My goal is to render templates in NodeJS from a 'templates' folder that would contain a set of templates, e.g. 'main.html' and 'footer.html'.

    I do see something about templates here https://eta.js.org/docs/api/configuration but it is not clear in the docs where to actually pass those config options, and there is also no example on how to render a template from a file.

    Could you add that to the docs? Thanks!

    opened by willemmulder 11
  • fix(deno): support Deno 1.4.0 strict type checks

    fix(deno): support Deno 1.4.0 strict type checks

    Fixes #19

    Please note that this removes backcompat with TypeScript versions prior to 3.8 (REF: https://www.typescriptlang.org/docs/handbook/release-notes/typescript-3-8.html), please flag if that is an issue!

    opened by asos-craigmorten 8
  • import a function from a js file

    import a function from a js file

    Hi there, Hope you are fine and great!

    I was wondering whether it is possible to use import statement in eta or not! As an example, I can mention: <% import f1 from './to/path/f1.js' %>.

    I gave it a try in the template engine and faced the following error coming up: Cannot use import statement outside a module

    It would be awesome to also use this feature of javascript in the template engine, or even use the require of Nodejs. Thanks!

    opened by ghost 7
  • Interpolation of an unset value prints

    Interpolation of an unset value prints "undefined"

    Hello. While trying to implement value prefilling for my inputs I encountered many "undefined" values for unset variables.

    Steps to reproduce:

    1. Go to interactive examples https://eta.js.org/docs/examples/interactive
    2. Change Eta.render('Hi <%= it.name %>', {name: 'Person'}) to Eta.render('Hi <%= it.name %>', {})
    3. Press Run button. Result is "Hi undefined".

    It is very inconvenient to use something like <%= it.name || "" %> for each interpolation especially for input prefilling. So I think showing "" instead of "undefined" is more correct. EJS thinks the same way and renders "Hi " if I modify this example for it. However if it is intended and there is another way to interpolate undefined values as "" please add it to the documentation.

    opened by AntonNech 7
  • Benchmarks should precompile templates

    Benchmarks should precompile templates

    Is compilation a useful metric when thinking about the big picture? Most/all of these templating engines allow precompiling templates. Compiling and reusing the compiled result is best practice, well-documented, and results in better performance for all of the other engines.

    It's great that eta has achieved such great compilation performance, but once you realize how these benchmarks work (compiling each time through the loop), it makes the benchmarks not that useful—kinda waters them down. I think most of the time you care about render performance. How and when you compile the template is a detail I think most can sort out, in order to get good render performance.

    It'd be great to precompile for all of the templating engines for these benchmarks to align them with real-world usage, or at minimum include that as a supplementary benchmark to what you have now.

    opened by benasher44 6
  • How to import browser version, or use rendering without `fs` calls, etc.

    How to import browser version, or use rendering without `fs` calls, etc.

    Describe the bug When using the default import, I receive an error

    ReferenceError: Can't find variable: fs

    I am basically trying to use "in memory" rendering, I don't have access to any fs type methods, I am just attempting to render from template variables (I don't need to use layouts, etc.)

    To Reproduce Steps to reproduce the behavior:

    import * as eta from 'eta' use code in browser

    Package & Environment Details

    • Environment: All browsers
    • Version: ex. 1.12.3

    Additional context I am building my plugin using rollup

    opened by mikeerickson 5
  • Syntactic Sugar : renderAsync

    Syntactic Sugar : renderAsync

    Is your feature request related to a problem? Please describe. async:true feels a little clunky, when added as an additional parameter for Eta.render()

    let result = await Eta.render(
      '<%= it.name %>: <%= await it.asyncFunc() %>',
      { name: 'Ada Lovelace', asyncFunc: asyncFunc },
      { async: true }
    )
    

    Describe the solution you'd like Could we have an additional function Eta.renderAsync()

    let result = await Eta.renderAsync(
      '<%= it.name %>: <%= await it.asyncFunc() %>',
      { name: 'Ada Lovelace', asyncFunc: asyncFunc }
    )
    

    I think this would improve legibility.

    enhancement 
    opened by calumk 5
  • Nit: change eslint file type

    Nit: change eslint file type

    .eslintrc.cjs was causing the following eslint error:

    Parsing error: "parserOptions.project" has been set for @typescript-eslint/parser. The extension for the file (.cjs) is non-standard. You should add "parserOptions.extraFileExtensions" to your config.

    Since Eta doesn't use CJS internally, instead of doing that, I simply changed the config type to .json, which I prefer for configs like this one.

    opened by gurgunday 0
  • Improve return types for `render`, `renderAsync`, `renderFile` and `renderFileAsync`

    Improve return types for `render`, `renderAsync`, `renderFile` and `renderFileAsync`

    Hey, I really like eta and I have been using it for a few projects already. I would love to contribute to this project. ❤

    As already explained in this issue, the types of the render functions can be improved by overloading them. There are essentially three branches and every branch defines their respective return type:

    export default function render(
        template: string | TemplateFunction,
        data: object,
        config?: PartialConfig,
        cb?: CallbackFn
    ): string | Promise<string> | void {
        if (options.async) {
            if (cb) {
                // user provides callback function
                // return type is void
            } else {
                // user sets async option
                // return type is Promise<string>
            }
        } else {
            // return type is string
        }
    }
    

    The idea would be to define one function overload per return type so that the function can be consumed easily, without the need of any type assertion. The implementation signature is provided as well in order to prevent breaking changes.

    I appreciate any feedback, ideas and suggestions.

    This PR resolves https://github.com/eta-dev/eta/issues/189.

    opened by nhaef 5
  • fix typescript node16 and nodenext

    fix typescript node16 and nodenext

    Fixes module resolution node16 and nodenext of typescript. Changes:

    • adds exports.types to package.json
    • adds file format .js to imports and exports where needed
    opened by MeowningMaster 0
  • Fix types specification in package.json

    Fix types specification in package.json

    TypeScript with "moduleResolution": "node16" can only find *.d.ts files if types field is specified in exports field (see https://www.typescriptlang.org/docs/handbook/esm-node.html#packagejson-exports-imports-and-self-referencing).

    opened by jakubmazanec 1
  • Cloudflare Pages is bundling node instead of browser version

    Cloudflare Pages is bundling node instead of browser version

    I'm trying to get it working in my SvelteKit with Cloudflare Pages adapter, though it's trying to bundle the node version. I was playing around with Vite resolve.alias like

    eta: "eta/dist/browser/eta.es.min",
    eta: "eta/dist/browser/eta.es.min.js",
    eta: "./node_modules/eta/dist/browser/eta.es.min"
    

    but sadly no "luck" so far, any tips?

    opened by CanRau 1
  • Improve `render` functions return types

    Improve `render` functions return types

    Hey, thanks a lot for this library!

    Is your feature request related to a problem? Please describe. When using the lib with typescript, calling render will return the union string | Promise<string> | void whatever the call arguments are. This is painful as using the library results always results in an unnecessary cast:

    const rendered = Eta.render(template, {}) as string
    

    From what I see in the code, the same problem applies to renderAsync, renderFile and renderFileAsync

    Describe the solution you'd like It should be possible to overload the function types to allow better-returned types

    opened by art049 1
Releases(v1.12.3)
  • v1.12.3(Jul 12, 2021)

    Basically updates this to use the latest Deno version, thanks to @talentlessguy for implementing that.

    • chore: deno fmt on deno dist 8faf5ab
    • Merge pull request #128 from eta-dev/dependabot/npm_and_yarn/color-string-1.5.5 b6ad95c
    • chore(deps): bump color-string from 1.5.3 to 1.5.5 c07388e
    • Merge pull request #127 from shadowtime2000/update-hosted-git-info c56a390
    • chore: update hosted-git-info 81433c3
    • Merge branch 'master' of https://github.com/eta-dev/eta 80fc526
    • Merge pull request #124 from eta-dev/dependabot/npm_and_yarn/postcss-7.0.36 2078f4a
    • chore(deps): bump postcss from 7.0.32 to 7.0.36 0cbf8e6
    • Merge pull request #117 from talentlessguy/master 6218f01
    • Merge pull request #120 from eta-dev/dependabot/npm_and_yarn/ws-6.2.2 753176a
    • Merge pull request #121 from eta-dev/dependabot/npm_and_yarn/trim-newlines-3.0.1 0960b0c
    • chore(deps): bump trim-newlines from 3.0.0 to 3.0.1 754c3df
    • chore: update yarn.lock 95ec6a5
    • chore: run denoify 3aa2433
    • Merge branch 'master' of https://github.com/eta-dev/eta 51bb59b
    • chore: bump std ac88ff2
    • chore(deps): bump ws from 6.2.1 to 6.2.2 ad648ff
    • Revert "chore: bump deno std" 0c4f5a8
    • Revert "chore: remove deno_dist" 6dc1af7
    • chore: remove deno_dist 18bd212
    • chore: bump deno std 7918097
    • chore: bump deno std c137cf8

    https://github.com/eta-dev/eta/compare/v1.12.2...v1.12.3

    Source code(tar.gz)
    Source code(zip)
  • v1.12.2(Jun 13, 2021)

    • chore: new updatE? e0829dc
    • Merge pull request #119 from eta-dev/dependabot/npm_and_yarn/browserslist-4.16.6 0db3ea3
    • chore(deps): bump browserslist from 4.14.0 to 4.16.6 af97dcf
    • Merge pull request #118 from eta-dev/update-y18n f2486dc
    • chore: update y18n i think 81d3e39
    • Merge pull request #108 from eta-dev/dependabot/npm_and_yarn/handlebars-4.7.7 0aba95b
    • Merge pull request #109 from eta-dev/dependabot/npm_and_yarn/hosted-git-info-2.8.9 5fa1f7e
    • Merge pull request #104 from eta-dev/dependabot/npm_and_yarn/ssri-6.0.2 79c0749
    • Merge pull request #110 from eta-dev/dependabot/npm_and_yarn/lodash-4.17.21 493dfe8
    • chore(deps): bump lodash from 4.17.20 to 4.17.21 c33657a
    • chore(deps): bump hosted-git-info from 2.8.8 to 2.8.9 16e1761
    • chore(deps): bump handlebars from 4.7.6 to 4.7.7 d929ffb
    • chore(deps): bump ssri from 6.0.1 to 6.0.2 6c80432
    • Merge pull request #103 from eta-dev/revert-thingy fe7af36
    • revert: browser es modules thing a1c131e
    • Merge pull request #97 from eta-dev/dependabot/npm_and_yarn/elliptic-6.5.4 fac6ff9
    • chore(deps): bump elliptic from 6.5.3 to 6.5.4 5b93fc5
    • Merge pull request #94 from js2me/patch-1 7102b66
    • Update README.md 4b80275
    • Update README.md abea13d
    • Update README.md 9e75392
    • Merge pull request #80 from eta-dev/not-use-unstable-i-guess 7ab53b2
    • ci: dont run deno tests unstable dcb3750
    • refactor: only import exists from deno std so it doesnt give unstable warning 8b03e13
    • Merge pull request #74 from eta-dev/dependabot/npm_and_yarn/node-notifier-8.0.1 685a5e0
    • chore(deps): bump node-notifier from 8.0.0 to 8.0.1 7b7a1a4
    • Merge pull request #69 from eta-dev/chore-deno-fmt e0fd2d7
    • chore: deno fmt 1a3416e
    • Merge pull request #68 from eta-dev/chore-deno-build e73346f
    • chore: deno build 5edda61
    • Merge pull request #67 from shadowtime2000/master e68e0a5
    • docs: jsdoc for renderfileasync 87fa30c
    • docs: docs jsdoc for renderasync aeac178
    • Merge pull request #65 from eta-dev/es-browser d6ca393
    • build: allow browser es modules 85433b8
    • Merge pull request #63 from eta-dev/dependabot/npm_and_yarn/ini-1.3.8 2db0ab2
    • chore(deps): bump ini from 1.3.5 to 1.3.8 fa98ab3

    https://github.com/eta-dev/eta/compare/v1.12.1...v1.12.2

    This is a long awaited release that removes usage for unstable APIs in the Deno build. There is a level of unstability though that would exist when using this in newer versions of Deno, but watch out for next patch releases to make it compatible with newer Deno versions.

    Source code(tar.gz)
    Source code(zip)
  • v1.12.1(Dec 5, 2020)

    TL;DR

    Patched renderFileAsync to match type definitions, reduced bundle size by 0.1KB with usage of widely supported ternary operators.

    Commits

    • Merge pull request #60 from eta-dev/update-docs b8022f0
    • chore: rebuild deno d50c77d
    • docs: add vscode extension to integrations [skip CI] 0a4c2ce
    • Merge pull request #59 from eta-dev/fix-bug 8664110
    • chore: deno fmt efa17db
    • chore: rebuild deno_dist 4c1052d
    • chore: prettier 93eeb08
    • docs: clarified on why spread operator makes it larger 3bcad3d
    • fix: fix async overriding 8ba587d
    • Merge pull request #58 from eta-dev/more-es6 529a4af
    • refactor: refactor to get whole file path c7bba26
    • test: refactor let into const 94a19e1
    • test: refactor getName: getName to getName ba45514
    • refactor: remove basically unused var result 771a17a
    • chore: formatted 1303773
    • refactor: make current type immutable in parsing c0deae3
    • refactor: make ctor immutable 3a0cd3f
    • revert: refactor to get whole file path 317513b
    • chore: formatted b576e7c
    • refactor: refactor to get whole file path 74904fc
    • refactor: make handle cache a littler cleaner b9a6119
    • refactor: some more let and consts where applicable 53ae7a2
    • refactor: use let instead of var where applicable 82a83b1
    • refactor: use const instead of var where applicable 0c9410f
    • Merge pull request #57 from eta-dev/dependabot/npm_and_yarn/highlight.js-10.4.1 884c984
    • chore(deps): bump highlight.js from 10.1.2 to 10.4.1 5485e5c
    • Merge branch 'master' of https://github.com/eta-dev/eta dc5380a
    • Merge pull request #55 from eta-dev/all-contributors/add-shadowtime2000 3284e68
    • docs: update .all-contributorsrc [skip ci] 52df892
    • docs: update README.md [skip ci] 19b1bfe

    https://github.com/eta-dev/eta/compare/v1.12.0...v1.12.1

    Source code(tar.gz)
    Source code(zip)
  • v1.12.0(Nov 29, 2020)

    TL;DR

    • renderAsync and renderFileAsync functions #49

    Commits

    • Merge pull request #54 from eta-dev/build-deno 75944e6
    • chore: deno fmt 145c127
    • chore: rebuild with denoify efd3e7f
    • Merge pull request #53 from eta-dev/update-denoify f8950a7
    • chore: update denoify b60350d
    • Merge pull request #52 from eta-dev/add-exports-to-browse 34955eb
    • docs: added notice for why i am using object assign 614df27
    • refactor: use object.assign a8fc369
    • feat: export render async from index 821f9ca
    • feat: add renderasync to browser 02b6e4c
    • fix: export from mod.ts 8dc90f3
    • Merge pull request #50 from shadowtime2000/render-async e4a16b5
    • feat: render file async function 559b02d
    • Merge pull request #51 from eta-dev/all-contributors/add-calumk a51e374
    • docs: update .all-contributorsrc [skip ci] 922bc30
    • docs: update README.md [skip ci] f4d7c71
    • refactor: use const instead of let a12665b
    • feat: render async function 487bf6c
    • Merge pull request #47 from shadowtime2000/master b1e34bd
    • docs(integrations): added a list of integrations e52d7e2
    • Merge pull request #45 from shadowtime2000/use-shareable-config c6cf0cf
    • refactor: extend eta-dev eslint config 9f49516
    • Rebuild 65391c3
    • Merge pull request #37 from eta-dev/all-contributors/add-hamzahamidi 2631011
    • docs: update .all-contributorsrc [skip ci] f88ad6e
    • docs: update README.md [skip ci] f19c4ed
    • Merge pull request #36 from shadowtime2000/master f15ac38
    • fix: move rollup plugins to dev deps 89b0cad
    • Merge branch 'master' of https://github.com/eta-dev/eta into master 215a693
    • fix(rollup.config.ts): use more supported plugins under namespace @rollup 9f69ee9
    • Merge pull request #35 from hamzahamidi/patch-1 1affb7d
    • doc: clarify import syntax af71591
    • Merge pull request #34 from eta-dev/all-contributors/add-shadowtime2000 87672de
    • docs: update .all-contributorsrc [skip ci] e2502b6
    • docs: update README.md [skip ci] b8f9106
    • Merge pull request #32 from shadowtime2000/master 99e9f92
    • chore: formatted c792cb6
    • chore: attempted build cc47951
    • refactor: added return types to functions ba6c9ec

    https://github.com/eta-dev/eta/compare/v1.11.0...v1.12.0

    Source code(tar.gz)
    Source code(zip)
  • v1.11.0(Sep 21, 2020)

    TL;DR

    • Support for a default filter: see https://github.com/eta-dev/eta/issues/28#issuecomment-696163854
    • Support for passing parameters to layouts

    Commits

    • Rebuild 040003a
    • Merge branch 'master' of github.com:eta-dev/eta into master ccb18ca
    • Change order of data merge for layouts f14b609
    • Reformat 2b27782
    • Add support for layout parameters ccac9f7
    • Added filter option to config 7aea7e0
    • Merge pull request #30 from eta-dev/all-contributors/add-trojanh 5478ed4
    • docs: update .all-contributorsrc [skip ci] d19c7fe
    • docs: update README.md [skip ci] 41056a1

    https://github.com/eta-dev/eta/compare/v1.10.1...v1.11.0

    Source code(tar.gz)
    Source code(zip)
  • v1.10.1(Sep 20, 2020)

    TL;DR

    • Fixed ES6 build after @talentlessguy pointed out in #26 that it was broken
    • @trojanh added an example of using custom tags to examples/basic.js

    Commits

    • Rename basic.ts to basic.js. Change basic.js to use ES6 imports bda22fd
    • Merge pull request #29 from trojanh/patch-1 acf2977
    • Merge pull request #27 from eta-dev/esm-fix bf1b5ad
    • Add custom tag example 8d3030d
    • Rename .eslintrc.js to .eslintrc.cjs 0efe553
    • Rename eta.cjs.js to eta.cjs 7031022
    • Fix usage of fs and path inside ES build c78d52b

    https://github.com/eta-dev/eta/compare/v1.10.0...v1.10.1

    Source code(tar.gz)
    Source code(zip)
  • v1.10.0(Sep 18, 2020)

    TL;DR

    • One new plugin hook, processTemplate, for processing template strings before they are parsed (PR)

    We realize that there have been quite a few releases lately, and we promise we'll slow down soon :wink:.

    Commits

    • Add note about layouts to README 53e4efe
    • Merge pull request #25 from eta-dev/process-template-plugin 81cd44c
    • Add note about layouts to README and package.json 0c96cd0
    • Add processTemplate plugin hook 370be52
    • Merge pull request #24 from eta-dev/readme-image c4557cb
    • Update README.md 9230af1
    • Update README.md 3a23ffa
    • Update README.md ad86554
    • Update README.md 5188902
    • Add README image 401cb9d

    https://github.com/eta-dev/eta/compare/v1.9.0...v1.10.0

    Source code(tar.gz)
    Source code(zip)
  • v1.9.0(Sep 17, 2020)

    TL;DR

    • Layouts support! :rocket: :fire: :sparkles: (see below)
    • Added types field to package.json
    • Fixed benchmark page

    Layouts

    You should just be able to write

    <% layout("./my-layout.eta") %>
    

    Anywhere in your template file! my-layout.eta will be rendered with Object.assign(it,{body:body}), where body is the current template file.

    Note: if you are using Eta in the browser, you can also use layouts. In that case, call layout with the name of a template that has already been defined

    Read here for more info about the release.

    Commits

    • Merge pull request #23 from eta-dev/layout-support 0856e6e
    • Rename l (inner template variable for layouts) to __l e111032
    • Update benchmarks page to include Squirrelly 1126440
    • Add tests for layouts without includeFile b3ada67
    • Format 0301578
    • Add support for layouts :sparkles: 5c2fda2
    • Rebuild b42a56d
    • Add 'types' field' ce57b16

    https://github.com/eta-dev/eta/compare/v1.8.0...v1.9.0

    Source code(tar.gz)
    Source code(zip)
  • v1.8.0(Sep 16, 2020)

    TL;DR

    The main feature in this change is the addition of filepath caching, added in #21.

    Preliminary results show this having a GIANT performance benefit when caching is enabled!

    (Using autocannon -c 100)

    | Server | Cache disabled | Cache enabled: before PR | Cache enabled: after PR | |---------|-------------------------------------------------------------|-------------------------------------------------------------|-------------------------------------------------------------| | Oak | 20k requests in 10.07s
    13 MB read
    49ms avg. latency | 48k requests in 10.07s
    30.9 MB read
    20ms avg. latency | 159k requests in 10.11s
    101 MB read
    6ms avg. latency | | Alosaur | 23k requests in 10.06s
    6.28 MB read
    42ms avg. latency | 61k requests in 10.07s
    16.6 MB read
    16ms avg. latency | 210k requests in 10.08s
    56.6 MB read
    5ms avg. latency | | Opine | 12k requests in 11.06s
    9.36 MB read
    88ms avg. latency | 28k requests in 10.07s
    21 MB read
    35ms avg. latency | 54k requests in 10.08s
    40.9 MB read
    18ms avg. latency |

    Note that these servers weren't running the same templates, so don't use these results to compare the servers

    The new version of Eta performs drastically better with the new PR! Alosaur, for example, served 3.3 times more data! :fire: :fire: :fire:

    Commits

    • Merge pull request #21 from eta-dev/path-caching 88a65e0
    • Add testing for filepath caching 70bb7e5
    • Add explanatory comment about caching aec8d91
    • Add return types fa40fc3
    • Merge pull request #22 from eta-dev/all-contributors/add-asos-craigmorten e551376
    • docs: update .all-contributorsrc [skip ci] f89db22
    • docs: update README.md [skip ci] 70e3a7b
    • Add explanatory comment 7262027
    • Initial filepath caching implementation cd5a436
    • Format interface 0636a73
    • Add filepathCache to config, sort EtaConfig interface b2b71f9

    https://github.com/eta-dev/eta/compare/v1.7.0...v1.8.0

    Source code(tar.gz)
    Source code(zip)
  • v1.7.0(Sep 15, 2020)

    TL;DR

    • Some minor formatting changes (removal of trailing commas)
    • To be compatible w/ Deno 1.4.0, we now use explicit import type and export type syntax. Fixed with a PR by @asos-craigmorten
      • Note: there is a chance this may cause breaking changes if you are using TypeScript versions older than 3.8

    Commits

    • Update release command ff25c8d
    • Merge pull request #20 from asos-craigmorten/fix/support-deno-1.4.0 7690d06
    • Rebuild a4c28ee
    • Remove unnecessary comment f10eddb
    • fix(deno): support Deno 1.4.0 strict type checks de96f9b
    • Removed 'prettier' field from package.json which was overriding .prettierrc and creating trailing commas 416d966

    https://github.com/eta-dev/eta/compare/v1.6.2...v1.7.0

    Source code(tar.gz)
    Source code(zip)
  • v1.6.2(Sep 12, 2020)

    TL;DR

    User-facing changes

    • Eta now supports the "exports" field in package.json, meaning it should work with Skypack, Pika CDN, etc. (see https://github.com/pikapkg/skypack-cdn/issues/47).
    • We turned on TypeScript declaration maps, to hopefully make IntelliSense and source code browsing easier

    Developer changes

    • After a lot of experimenting with release scripts, we decided that manual releases through np are best for now.
    • We added the /dist folder to .gitignore. It is generated on locally before every build, and before release.

    Commits

    • Update dev dependencies 198a84b
    • Add 'exports' field to package.json 6294739
    • Update version 7bf5fe3
    • Rebuild 23b7bf8
    • Use manual release instead of script f012233
    • Fix Travis CI script so it builds before testing 45cad11
    • Update release script 9111771
    • Add np as a dev dependency e680239
    • Release script fixes 4e817a6
    • Resolve node_modules with __dirname eaefbfc
    • Update path to node_modules 8794e1e
    • Simplify release script 28edaf0
    • Update tools/release.ts to work correctly with interactive io 4a2cf0c
    • Remove dist, deno_dist from master branch 7f4c4b4
    • Add dist, deno_dist to .gitignore b98598e
    • Merge branch 'declaration-maps' into master ef5da68
    • Create release script allowing for tracking of the dist/ and deno_dist/ directories in a separate branch 6603050
    • Enable TypeScript declaration maps 4796a9e

    https://github.com/eta-dev/eta/compare/v1.6.0...v1.6.2

    Source code(tar.gz)
    Source code(zip)
  • v1.6.1(Sep 12, 2020)

    TL;DR

    This version adds TypeScript declaration files. Additionally, it contains some developer improvements to the release script.

    Commits

    • Build distribution files f77f0c5
    • Update release script 9111771
    • Add np as a dev dependency e680239
    • Release script fixes 4e817a6
    • Resolve node_modules with __dirname eaefbfc
    • Update path to node_modules 8794e1e
    • Simplify release script 28edaf0
    • Update tools/release.ts to work correctly with interactive io 4a2cf0c
    • Remove dist, deno_dist from master branch 7f4c4b4
    • Add dist, deno_dist to .gitignore b98598e
    • Merge branch 'declaration-maps' into master ef5da68
    • Create release script allowing for tracking of the dist/ and deno_dist/ directories in a separate branch 6603050
    • Enable TypeScript declaration maps 4796a9e

    https://github.com/eta-dev/eta/compare/v1.6.0...v1.6.1

    Source code(tar.gz)
    Source code(zip)
  • v1.6.0(Sep 11, 2020)

    TL;DR

    The main change in this commit is the ability to write partials like <%~ include(...) %> or <%~ includeFile(...) %> in their templates in addition to <%~ E.include(...) %> or <%~ E.includeFile(...) %> :tada: :tada: :tada:

    This new change should increase template readability and make transitioning to Eta seem less overwhelming. This release also includes some dev-dependency updates and the removal of some unneeded dev-dependencies.

    Commits

    • Merge pull request #18 from eta-dev/dependabot/npm_and_yarn/node-fetch-2.6.1 b46aab7
    • Update package.json, remove unneeded dev dependencies c4aad16
    • Bump node-fetch from 2.6.0 to 2.6.1 7ab1ef0
    • Merge pull request #17 from eta-dev/simple-include e381db1
    • Update tests to include case with include,includeFile undefined a3fa9c0
    • Update tests, documentation to use simplified version of include & includeFile c72a067
    • Alias E.include, E.includeFile as include, includeFile bfbcd14

    https://github.com/eta-dev/eta/compare/v1.5.0...v1.6.0

    Source code(tar.gz)
    Source code(zip)
  • v1.5.0(Sep 9, 2020)

    TL;DR

    The main enhancement this feature brings is the ability to include partials with an absolute path! This is a feature that EJS users have been requesting for a while, but we got it first :wink: :tada:.

    When Eta is looking for a template with an absolute path, it will first look in config.views, then fall back to config.root (which is, by default, "/"). The main advantage of this approach is that it means most users will not have to manually set config.root (which can cause confusing problems).

    Summary of other changes:

    • If Eta can't find a template file, the error it throws now includes a list of filepaths it checked
    • Removed unnecessary includeHelper.bind(config) and includeFileHelper.bind(config) statements
    • More tests
    • README formatting updates
    • Wrap the readFile function in a try {} catch {} block, so if you pass an incorrect path to renderFile the error will look nicer

    Commits

    • Test that getConfig returns a clone of config when called w/ no arguments 5c4f20c
    • Merge pull request #16 from eta-dev/fix-helper-bind 3860018
    • Remove .bind() calls that didn't do anything d2d179f
    • Fix README alignment issues 8568932
    • Merge branch 'master' of github.com:eta-dev/eta into master 733b150
    • Merge pull request #15 from eta-dev/fix-abs-root 0d3501d
    • Rebuild after file-handling changes 85ea879
    • Edit error message tests to reflect current errors bb417a5
    • First search options.views for absolute paths, then fallback to root. Create a list of searched paths 243a998
    • Wrap readFile in a try-catch cabd4b3
    • Move buildRegEx function to test/err.spec.ts f7b84cf
    • Change div around badges to p so it centers correctly on NPM 0a41b7c
    • Remove deno doc badge; deno doc doesn't support bracketed exports, so it's basically useless for Eta 37bb224

    https://github.com/eta-dev/eta/compare/v1.4.0...v1.5.0

    Source code(tar.gz)
    Source code(zip)
  • v1.4.0(Sep 6, 2020)

    TL;DR

    The most significant feature of this release is a new configure() function that modifies Eta's base ("global") configuration. It's called like Eta.configure({tags: ["{{", "}}"]}).

    Another significant change was the decision to rename defaultConfig to config. The name defaultConfig was originally chosen when I had plans to make Eta support multiple "environments", like Nunjucks. Eventually I decided this would cause unneeded complexity, but I didn't change the name. This change should not be breaking; we re-export config as defaultConfig for backwards compatibility. In the future, use of defaultConfig will be discouraged and we'll update the docs to reflect that.

    Finally, we included a fix to renderFile.

    Notable changes (recap)

    • Create new configure() function
    • Rename defaultConfig to config
    • Prevent renderFile from erroring if the data argument is undefined or null; issue originally filed in Squirrelly by @futurelucas4502, see https://github.com/squirrellyjs/squirrelly/pull/201.

    Commits

    • Merge pull request #13 from eta-dev/simple-config dce660b
    • Format 60d5805
    • Make defaultConfig an alias of config instead of the opposite daa8b76
    • Sort package.json scripts 18deacb
    • Add new config utilities to browser.ts 01241a4
    • Merge branch 'master' into simple-config 88749fd
    • Replace params named env w/ params named config 0f24916
    • Add eta.configure() command, alias defaultConfig to config e51e02e
    • Update README to have centered title 3754716
    • Avoid error if data is undefined or null f9417df
    • Add style to h1 so it centers 62afaa0

    https://github.com/eta-dev/eta/compare/v1.3.0...v1.4.0

    Source code(tar.gz)
    Source code(zip)
  • v1.3.0(Sep 4, 2020)

    TL;DR

    This release brings quite a few exciting updates; most notably, Deno support! :tada: :tada: It also brings a partial rewrite of Eta's file handling, many more JSDoc comments (hurrah for Intellisense!), increased testing and test coverage, and size analysis.

    Notable Changes

    • Deno support
    • eta.renderFile can now accept a relative file path, as long as the views option is set
    • Eta correctly handles when the views option is a string
    • Improved JSDoc annotation
    • Size analysis and control with size-limit
    • Updated dependencies
    • More tests, higher test coverage
    • :bug: [BUGFIX]: included partials can now correctly reference files relative to them

    Commits

    • Update README badges 2002c17
    • Deno support! 2f7fc48
    • Rebuild c41ca47
    • Remove emoji 2f9226d
    • Note about size-limit restriction a45be5b
    • Merge branch 'master' into deno-support c96d8f5
    • Update GitHub Actions to install Deno ac4910b
    • Update GitHub Action to install Deno 25be6d6
    • Merge branch 'master' into deno-support ecab3d0
    • Restrict size with size-limit 0da5e10
    • Restrict size with ai/size-limit c5b9948
    • Remove obsolete comment f47c0bc
    • Add Deno and Yarn to Travis cache aa6d257
    • Update funding links ab87ff6
    • README updates e2ddb5f
    • Delete old distribution.md file 2ed6f86
    • Update contributor profile link f991b01
    • Node throws different SyntaxError messages based on the version; I turned the error message tests into RegEx's a898234
    • Rebuild after file handling refactoring, better annotations 4f532b4
    • Allow renderFile path to be relative, allow views option to be string, move loadFile to file-handlers.ts, refactor file handling, better JSDoc 30101c5
    • Better JSDoc annotations, rearrange conditional 98c60dc
    • Move loadFile from file-utils.ts to file-handlers.ts cd71f9a
    • Better JSDoc annotations 3dcec02
    • Write multiple tests checking for errors, correct callback behavior, file location 4818251
    • Add Eta file with invalid syntax 45052b9
    • Up coverage threshold 6e30eb8
    • Update renderFile so it can take explicit config argument 36bd4c8
    • Fix: udpate includeFile so it correctly passes through filename 462f2c8
    • Remove render.deno.ts -- it was unnecessary 367b5f5
    • Update .travis.yml to work with Deno 8d6ebfb
    • Deno must run w/ filesystem access 0b354f0
    • File helper tests 4c55fce
    • A few more tests 3219e0a
    • Move deno tests into subfolder 59877a7
    • Fix tests to run with --unstable 798c8c9
    • Update rules 492d2a3
    • Use exported methods from ./file-methods 920bf65
    • Add missing .ts extensions 0c312d6
    • Rebuild 2fb89dc
    • Rebuild 279c9cb
    • Remove unnecessary separate file-utils.deno.ts 3fec950
    • Use prettier instead of prettier-standard a77d261
    • Add deno_dist to .prettierignore 9553b77
    • Format with prettier 84545d1
    • Add .ts extension bd4e655
    • Use deno test to test *.deno.spec.ts files 56f3fdd
    • Add release script to package.json db94016
    • Remove @denoify-ignore comment from mod.ts 9d8508c
    • Update dev dependencies 6222283
    • Add denoify-ignore comment 8d2f79f
    • Update formatting 3da842f
    • Add typedoc.json file db7babb
    • Remove unnecessary notConfig param from copyProps 441371c
    • Separate Deno, other logic b38f7fa
    • Update to use separate polyfills file 6a9b723
    • Update to use polyfills a942388
    • Rebuild 291f345
    • Reformat using deno fmt bb4e1a7
    • Rebuild 7cf9df0
    • Add underscore in front of unused variables cff9cfd
    • Add comment, format f532bcf
    • Remove irrelevant comment 9924db9
    • Add deno build 926283c
    • Add missing space 35ddd0b
    • Fixed outDir field in tsconfig.json 8e00a7f
    • Use newlines instead of semicolons for improved readability. Adds ~3 bytes to bundle size... I think it's worth it ;) fecdabc
    • Remove unnecessary semicolon b03d079
    • Use built-in Partial type f2cebee
    • Rebuild after ESLint cleanup 7bd855a
    • Fix ESLint errors, remove unused imports, remove dead code, add TODOs cbcce72
    • Removed outdated TODO comments 059dec2
    • Removed unnecessary call to tsc compiler c466801

    https://github.com/eta-dev/eta/compare/v1.2.2...v1.3.0

    Source code(tar.gz)
    Source code(zip)
  • v1.2.2(Jul 4, 2020)

    TL;DR

    I added Docusaurus v2 to the list of projects using Eta. Since this gives Eta a certain amount of credibility, I decided it deserved to be published quickly.

    Commits

    • Add Docusaurus v2 to list of projects that use Eta 1a538f0

    https://github.com/eta-dev/eta/compare/v1.2.1...v1.2.2

    Source code(tar.gz)
    Source code(zip)
  • v1.2.1(Jul 4, 2020)

    TL;DR

    No code changes, just slight edits to the README. I removed one badge (the David-DM one) which often crashes or is out of date.

    Commits

    • Update README: link Squirrelly, Eta name 4373ebe
    • Removed Dev Dependencies badge 4bfe365

    https://github.com/eta-dev/eta/compare/v1.2.0...v1.2.1

    Source code(tar.gz)
    Source code(zip)
  • v1.2.0(Jun 21, 2020)

    TL;DR

    This version adds support for multiple-character prefixes (ex. --), using a parsing method already in use by Squirrelly. It also removes the necessity to RegEx-escape delimiters or prefixes.

    Other changes increase code coverage, fix a compiler issue with newer versions of TypeScript, and update dependencies.

    Commits

    • Double-boolean-cast String.prototype..., import from index for increased coverage, rebuild 4684090
    • yarn upgrade-interactive (update dev dependencies) c0b1206
    • Rebuilt 565bcc8
    • Merge branch 'master' into regex-escape-and-multi-char-prefixes b18d85e
    • Update broken links to benchmarks 49dbcc9
    • Fix support for multi-char prefixes 7141cc7
    • RegExp-escape tags and prefixes, and allow multi-char prefixes 58d8a4d
    • Add lodash.template to benchmarks ab0106e

    https://github.com/eta-dev/eta/compare/v1.1.1...v1.2.0

    Source code(tar.gz)
    Source code(zip)
  • v1.1.1(Apr 28, 2020)

    TL;DR

    This version adds support for the rmWhitespace option that exists in EJS. Hopefully this will ease migration from EJS to Eta.

    Commits

    • Rebuilt 0b9eed4
    • Add rmWhitespace option for EJS compatibility 57e2a77

    https://github.com/eta-dev/eta/compare/v1.1.0...v1.1.1

    Source code(tar.gz)
    Source code(zip)
  • v1.1.0(Apr 27, 2020)

    TL;DR

    Eta now HTML-escapes > as well as <. Though many other template engines avoid doing so, it should provide extra assurance in some edge cases (such as interpolations within an HTML tag). Based on benchmarks, Eta retains its status as the fastest template engine.

    Commits

    • HTML-escape closing '>' as well as opening -- for a few edge cases 99aedf2

    https://github.com/eta-dev/eta/compare/v1.0.3...v1.1.0

    Source code(tar.gz)
    Source code(zip)
  • v1.0.3(Apr 16, 2020)

    TL;DR

    I updated the README to add sections comparing Eta to other template engines, and fixed a few formatting issues.

    Commits

    • Add trailing quote dc9f474
    • Include comparisons with other template engines c053b83
    • Merge branch 'master' of https://github.com/eta-dev/eta 06f77ac
    • Add language to code blocks ab38630

    https://github.com/eta-dev/eta/compare/v1.0.2...v1.0.3

    Source code(tar.gz)
    Source code(zip)
  • v1.0.2(Apr 10, 2020)

    BREAKING CHANGES

    Eta no longer supports using @include and includeFile because our implementation added bundle size and complexity and was inflexible (ex. await @include did not work).

    I decided not to release a new breaking version, since to my knowledge no projects are using Eta yet. If you do need to transition, change <% @include(...) to <%~ E.include(...) %> (think E for "Eta"), and the same for includeFile.

    Commits

    • Move away from using @ for partials 0c00222
    • Move away from using @ for partials 48a0c80

    https://github.com/eta-dev/eta/compare/v1.0.1...v1.0.2

    Source code(tar.gz)
    Source code(zip)
  • v1.0.1(Apr 4, 2020)

    TL;DR

    • Updated README to point to correct links (and updated Travis and Coveralls)
    • Updated README content

    Commits

    • One last README update 7c03c9e
    • Update README to contain correct links ed20c11

    https://github.com/eta-dev/eta/compare/v1.0.0...v1.0.1

    Source code(tar.gz)
    Source code(zip)
  • v1.0.0(Apr 4, 2020)

    TL;DR

    • First Stable Release!! :tada:
    • Updated tests for more test coverage
    • Switched to using @ to prefix include, includeFile

    Commits

    • Increase code coverage 16abf48
    • Update utils tests 70c0483
    • Update dev dependencies ca4cf28
    • Rebuild (remove trailing commas) d1aa173
    • Switch to using @ for include, includeFile 6d5b449

    https://github.com/eta-dev/eta/compare/v1.0.0-beta.4...v1.0.0

    Source code(tar.gz)
    Source code(zip)
  • v1.0.0-beta.4(Apr 1, 2020)

    TL;DR

    • Hotfix fixes a bug where Eta wouldn't throw with unclosed tags, and then would throw but at the incorrect index.

    Commits

    • Rebuild 42765dc
    • Bugfix: throw with unclosed tags, + at the correct index be31717

    https://github.com/eta-dev/eta/compare/v1.0.0-beta.3...v1.0.0-beta.4

    Source code(tar.gz)
    Source code(zip)
  • v1.0.0-beta.3(Mar 31, 2020)

    TL;DR

    • New parsing algorithm has better string and comment support and will error with unclosed strings or multi-line comments
    • Minor performance improvements
    • Updated README, now that https://eta.js.org is live

    Commits

    • Add website, badge 9a2eb5f
    • Add homepage to package.json 98e40b4
    • Update benchmarks page 55b82f6
    • Rebuilt aa71eab
    • Update tests - add errors for unclosed strings, comments e62792a
    • Update example 2e7df7a
    • Remove unnecessary addition 7de3101
    • More accurate parsing of strings and comments 78c256c
    • Working on optimization 5ab9061
    • Experimenting w/ different parse methods 9429ca5

    https://github.com/eta-dev/eta/compare/v1.0.0-beta.2...v1.0.0-beta.3

    Source code(tar.gz)
    Source code(zip)
  • v1.0.0-beta.2(Mar 27, 2020)

    TL;DR

    Eta moved to an organization in order to ensure confidence in Eta and continued maintenance of the project

    Commits

    • Update eta repo b51fdaa

    https://github.com/eta-dev/eta/compare/v1.0.0-beta.1...v1.0.0-beta.2

    Source code(tar.gz)
    Source code(zip)
  • v1.0.0-beta.1(Mar 26, 2020)

    TL;DR

    • Updated parsing algorithm so it throws with unclosed tags
    • Updated benchmark
    • Updated dependencies
    • Some other stuff :joy:

    Commits

    • Update benchmark 64b04c0
    • Update dependencies, remove old parse drafts 1defecc
    • parse.ts now throws with unclosed tags 4ffd86a
    • Update dependencies ff42d2e
    • Rename Sqrl to Eta (code migration) a052af6
    • Update README 6213cbd
    • Merge branch 'master' of https://github.com/nebrelbug/eta Merging 233417d
    • Merge pull request #1 from nebrelbug/dependabot/npm_and_yarn/acorn-6.4.1 0ab9679
    • Bump acorn from 6.4.0 to 6.4.1 ba6a916

    https://github.com/nebrelbug/eta/compare/v1.0.0-beta.0...v1.0.0-beta.1

    Source code(tar.gz)
    Source code(zip)
  • v1.0.0-beta.0(Mar 26, 2020)

    Introducing Eta!

    Eta is Squirrelly's tiny embedded cousin. It serves as a faster, more configurable, and more lightweight alternative to EJS.

    Commits

    • Update README c18af35
    • Updating README f2a94c7
    • Updating README 1d606d6
    • Rebuilt b098ece
    • Remove unnecessary escape characters 8b9bcea
    • Finish basic tests, fix bug w/ newline after statements cedd8a3
    • Rebuilt with most recent changes 2d5dae5
    • Modifying code to fit Eta a13b7bc
    • Explicit async, plugins work. 8b2432b
    • Update benchmarks page, README a93cd9b

    https://github.com/nebrelbug/eta/compare/v8.0.0-beta.8...v1.0.0-beta.0

    Source code(tar.gz)
    Source code(zip)
Owner
Eta
Embedded JS template engine for Node, Deno, and the browser.
Eta
eXtensible Template Engine lib for node and the browser

xtemplate High Speed, eXtensible Template Engine lib on browser and nodejs. support async control, inheritance, include, logic expression, custom func

xtemplate 553 Nov 21, 2022
1KB lightweight, fast & powerful JavaScript templating engine with zero dependencies. Compatible with server-side environments like node.js, module loaders like RequireJS and all web browsers.

JavaScript Templates Contents Demo Description Usage Client-side Server-side Requirements API tmpl() function Templates cache Output encoding Local he

Sebastian Tschan 1.7k Jan 3, 2023
Pug – robust, elegant, feature rich template engine for Node.js

Pug Full documentation is at pugjs.org Pug is a high-performance template engine heavily influenced by Haml and implemented with JavaScript for Node.j

Pug 21.1k Dec 30, 2022
Embedded CoffeeScript templates

Eco: Embedded CoffeeScript templates Eco lets you embed CoffeeScript logic in your markup. It's like EJS and ERB, but with CoffeeScript inside the <%

Sam Stephenson 1.7k Dec 17, 2022
Embedded JavaScript templates -- http://ejs.co

Embedded JavaScript templates Installation $ npm install ejs Features Control flow with <% %> Escaped output with <%= %> (escape function configurable

Matthew Eernisse 6.8k Dec 30, 2022
Embedded CoffeeScript templates

Eco: Embedded CoffeeScript templates Eco lets you embed CoffeeScript logic in your markup. It's like EJS and ERB, but with CoffeeScript inside the <%

Sam Stephenson 1.7k Jan 2, 2023
Variation-template - Variation is a PSD template that is covered into a web template using HTML5, CSS3, Bootstrapv4.6, JavaScript.

Variation Template Design Variation is a PSD website template. In this project this template is designed with HTML. Deployment This site is deployed a

Bipronath Saha 1 Jan 1, 2022
The fastest + concise javascript template engine for nodejs and browsers. Partials, custom delimiters and more.

doT Created in search of the fastest and concise JavaScript templating function with emphasis on performance under V8 and nodejs. It shows great perfo

Laura Doktorova 4.9k Dec 31, 2022
Take a swig of the best template engine for JavaScript.

NOT MAINTAINED Fork and use at your own risk. Swig Swig is an awesome, Django/Jinja-like template engine for node.js. Features Available for node.js a

Paul Armstrong 3.1k Jan 4, 2023
Browser In The Browser (BITB) Templates

BITB Browser templates for Browser In The Browser (BITB) attack. More information: https://mrd0x.com/browser-in-the-browser-phishing-attack/ Usage Eac

mrd0x 2.5k Jan 5, 2023
A powerful templating engine with inheritance, asynchronous control, and more (jinja2 inspired)

Nunjucks Nunjucks is a full featured templating engine for javascript. It is heavily inspired by jinja2. View the docs here. Installation npm install

Mozilla 8k Dec 30, 2022
Highly opinionated project template for Serverless Framework that follows and applies hexagonal architecture principle to serverless world. Prepared with easy testing in mind.

serverless-hexagonal-template Highly opinionated project template for Serverless Framework that applies hexagonal architecture principles to the serve

Paweł Zubkiewicz 126 Dec 26, 2022
Examples of how to re-create the WordPress Template Hierarchy using headless clients and WPGraphQL

WPGraphQL Template Hierarchy Debugger This is a project to demonstrate how to re-create the WordPress template hierarchy with Headless WordPress using

Jason Bahl 17 Oct 29, 2022
A template to be used for creating js/scss projects and deploy them to github pages

A template to be used for creating js/scss projects and deploy them to github pages

Cariera în IT 15 Oct 30, 2022
Script Template Fivem in Type Script

fivem-ts ?? A Typescript Template for FiveM ?? This is a basic template for creating a FiveM resource using Typescript. It includes webpack config fil

Vinícius Pereira 3 Jun 11, 2021
A K6 Multi Scenario template applying some best practices along some examples

K6-Multi-Scenario-Template It is a performance testing template that shows how to use K6 to implement a Multi Scenario template applying some best pra

Swiss Life OSS 33 Nov 27, 2022
Tailwind & Next Mentorship Template

This is a Next.js project bootstrapped with create-next-app. Getting Started First, run the development server: npm run dev # or yarn dev Open http://

Nauval 21 May 22, 2022
Template to create reactjs component library which will help you to create your dream library.

reactjs-library-template Template to create reactjs component library which will help you to create your dream library. How to use Commands to setup e

Nishant Tomar 1 Dec 25, 2021
Low tech template for a reduced carbon impact :seedling:

Enverse minimalist front-end template ?? ?? For all else, use Astro.build ?? Recomended package manager: pnpm Preact + Typescript + Vite How to use: F

null 2 Jan 10, 2022