Skip to content
A JavaScript parser for `lodash.template`.
TypeScript
Branch: master
Clone or download
Latest commit 911c137 Oct 30, 2019
Permalink
Type Name Latest commit message Commit time
Failed to load latest commit information.
src fix: fix type Oct 30, 2019
test feat: export `tokens` that is MicroTemplate Oct 30, 2019
.gitignore initial commit Oct 25, 2019
.travis.yml initial commit Oct 25, 2019
LICENSE initial commit Oct 25, 2019
README.md Add motivation Oct 25, 2019
package.json 1.1.1 Oct 30, 2019
tsconfig.json initial commit Oct 25, 2019
yarn.lock initial commit Oct 25, 2019

README.md

lodash-template-js-parser Build Status

A JavaScript parser/splitter for lodash.template

Features

  • It separate JavaScript Code and Template String from lodash.template content
    • Preserve same position of JavaScript code as possible

Lodash template -> JavaScript Code and Template Content.

It help to implement lint tools for JavaScript code in lodash template.

This idea and implementation is based on ota-meshi/eslint-plugin-lodash-template.

Motivation

ota-meshi/eslint-plugin-lodash-template focus on linting by ESLint, so It includes many features.

I want to get simple parser/splitter for lodash template. lodash-template-js-parser just includes a parser for lodash template, So lodash-template-js-parser does not includes JavaScript Parser like espree, babel/parser.

Install

Install with npm:

npm install lodash-template-js-parser

Usage

export interface parseTemplateOptions {
    templateSettings?: {
        escape?: [string, string];
        evaluate?: [string, string];
        interpolate?: [string, string];
    };
}
/**
 * Parse the template and return { script, template } object.
 * @param code The template to parse.
 * @param parserOptions The parser options.
 * @returns The parsing result object.
 */
export declare function parseTemplate(template: string, parserOptions: parseTemplateOptions): {
    script: string;
    template: string;
};

Example:

import { parseTemplate } from "lodash-template-js-parser";
const content = `
const age = 18;
<% if (age < 18) { %>
    <li><%= name %> (age: <%= age %>)</li>
<% } else { %>
    <li>over the age limit!</li>
<% }%>
`;
const { script, template } = parseTemplate(content, {
    templateSettings: {
        interpolate: ["#{", "}"]
    }
});
assert.strictEqual(script, `
               
   if (age < 18) {   
            name ;            age ;   
   } else {   
                                
   }  
`);
assert.strictEqual(template, `
const age = 18;
                     
    <li>            (age:           )</li>
              
    <li>over the age limit!</li>
      
`);

Changelog

See Releases page.

Running tests

Install devDependencies and Run npm test:

npm test

Contributing

Pull requests and stars are always welcome.

For bugs and feature requests, please create an issue.

  1. Fork it!
  2. Create your feature branch: git checkout -b my-new-feature
  3. Commit your changes: git commit -am 'Add some feature'
  4. Push to the branch: git push origin my-new-feature
  5. Submit a pull request :D

Author

License

MIT © azu

This project is based on eslint-plugin-lodash-template.

MIT License
Copyright (c) 2018 Yosuke Ota
You can’t perform that action at this time.