enhance-string-template
TypeScript icon, indicating that this package has built-in type declarations

1.2.0 • Public • Published

enhance-string-template

enhanced string template parser,allow customized plugin to process template.

Usage

Basic

import parse, { compile, defaultOptions } from "enhance-string-template";

// '/root/path/to'
parse("<rootDir>/path/to", { rootDir: "/root" });
// 'hi jim'
parse("hi <0>", ["jim"]);
// using the '\\' to escape
parse("\\<rootDir>/path/to", { rootDir: "/root" });
// use custom default options
defaultOptions.compile.pairs = {
  start: "{",
  end: "}",
};
parse("{rootDir}/path/to", { rootDir: "/root" });

// compile
let tempate = compile("hello {{name}}", {
  pairs: {
    start: "{{",
    end: "}}",
  },
});
// 'hello world'
tempate({ name: "world" });

Enhanced compiler

import {
  createEnhanceCompiler,
  PipePlugin,
  SlicePlugin,
  GlobalPlugins,
} from "enhance-string-template";

GlobalPlugins.add(PipePlugin);
// use the plugin's name 'pipe' to resigter the PipePlugin when you add to GlobalPlugins
var enhanceCompiler = createEnhanceCompiler(
  ["pipe" /* same as PipePlugin.name */, SlicePlugin],
  {
    pairs: {
      start: "{",
      end: "}",
    },
  }
);
// Now, you can use the functionality of the plugins
let template = enhanceCompiler("{key|upper}:{hash:3}");

// 'HASH:123'
template({
  key: "hash",
  upper(s: string) {
    return s.toUpperCase();
  },
  hash: "1234567",
});

// you can remove the regsitered plugin by remove function
enhanceCompiler.remove(["pipe", "slice"]);

Built-in plugins

List of plain object plugins

  • SlicePlugin
  • PipePlugin
  • DotPropPlugin

List of class plugins

  • VariableProviderPlugin

Customize Plugin

import { Plugin, createEnhanceCompiler } from "enhance-string-template";

let MyPlugin: Plugin = {
  name: "my-plugin",
  transformBlock(block) {
    let nums = block.raw.split("+");

    if (nums.length > 1) {
      // Tell the compiler to use 'my-plugin' when parse the result
      block.hits.push("my-plugin");
      block.nums = nums.map((n) => n.trim());
    }
  },
  value(values, block) {
    let numVars = block.nums.map((_, i) => "num_" + i);
    let ret = "return " + numVars.join("+");
    let fn = new Function(...numVars.concat(ret));

    return fn.apply(
      null,
      block.nums.map((n) => values[n])
    );
  },
};
let myCompiler = createEnhanceCompiler([MyPlugin]);

let template = myCompiler("result: <a+b+c>");
// 'result: 6'
template({ a: 1, b: 2, c: 3 });

Package Sidebar

Install

npm i enhance-string-template

Weekly Downloads

4

Version

1.2.0

License

MIT

Unpacked Size

21.8 kB

Total Files

5

Last publish

Collaborators

  • yanghi