/multiline-template

Multiline tagged templates using a pipe |, followed by a space, to signal line start, no more crazy indent hacks.

Primary LanguageJavaScriptMIT LicenseMIT

multiline-template

Multiline tagged templates using a pipe | to signal line start. No more crazy indent hacks.

Install

npm install --save multiline-template

Usage

Using Tagged Template Literals, you use the pipe | to signal where you want to line to actually start in the resulting string.

import multiline from 'multiline-template';
// or
const multiline = require('multiline-template');

const msg =  multiline`
  |first
  |second
  |third
  |fourth
`;

console.log(msg);
first
second
third
fourth

It also indents interpolated values to the provided indention level

import multiline from 'multiline-template';

const part =  multiline`
  |second
  |third
`;

const msg =  multiline`
  |first
  |  ${part}
  |fourth
`;

console.log(msg);
first
  second
  third
fourth

The line will always start where you say, no matter how much indention comes before the pipe.

import multiline from 'multiline-template';

(function () {
  (function () {

    // there is actually a lot of excess indention
    // before the pipes, but it is ignored!
    const part =  multiline`
      |second
      |third
    `;

    const msg =  multiline`
      |first
      |  ${part}
      |fourth
    `;

    console.log(msg);

  })();
})();
first
  second
  third
fourth

Credit

This was heavily inspired by Scala's multiline string pipe markers, though there are some differences e.g. how nesting works.

:shipit: