1.1.0 • Published 3 years ago

reindent-template-literals v1.1.0

Weekly downloads
-
License
UNLICENSED
Repository
gitlab
Last release
3 years ago

Reindent template literals

Do you have some indentation issues in your source code due to template literals?

describe('something', () => {
  it('works', () => {
    const expectedResult = `\
┌───────────────────┐
│ The answer is: 42 │
└───────────────────┘`

    assert.deepStrictEqual(ComputeFor7point5MillionYears(), expectedResult)
  })
})

reindent-template-literals can help you with this: the following snippet will act exactly the same as the previous one:

describe('something', () => {
  it('works', () => {
    const expectedResult = reindent`
      ┌───────────────────┐
      │ The answer is: 42 │
      └───────────────────┘
      `

    assert.deepStrictEqual(ComputeFor7point5MillionYears(), expectedResult)
  })
})

Table of Content

Description and examples

The reindent method take the indent of the first line and will remove that indent from the entire template. If the first and/or last line are empty, they are ignored.

In the following example, notice how the whole reindented string does not break the indentation of the source code compared to a regular template literal.

Note how the first line of the regular template literal must be escaped to be ignored. This is not the case when using reindent.

Note also the blank line at the end: the expected string actually ends with a blank line. reindent make that final blank line explicit.

  const reindented = reindent(`
    Feature: reindent template strings
      Scenario: Scenario #1
        Given ...
        When ...
        Then ...

  `)

  const expected = `\
Feature: reindent template strings
  Scenario: Scenario #1
    Given ...
    When ...
    Then ...
`

  assert.strictEqual(reindented, expected)

reindent-template-literals comes with a reindent method, but also with a tag function. Template literals will be interpolated with both. See Usage for more details.

Installation

npm install reindent-template-literals

Usage

Two ways are available: as a function, or as a tag function.

It is up to you to choose between the function and the tag function. The later may look nicer, but it reimplements the template interpolation so it may be less efficient.

With Typescript or ES-Modules

As a tag function:

import { reindentTag as reindent } from 'reindent-template-literals'

console.log(reindent`
  ┌────────────────────────┐
  │ The answer is: ${ 42 } │
  └────────────────────────┘
`)

As a function:

import { reindent } from 'reindent-template-literals'

console.log(
  reindent(`
    ┌────────────────────────┐
    │ The answer is: ${ 42 } │
    └────────────────────────┘
  `)
)

Using CommonJS

As a tag function:

const { reindentTag: reindent } = require('reindent-template-literals')

console.log(reindent`
  ┌────────────────────────┐
  │ The answer is: ${ 42 } │
  └────────────────────────┘
`)

As a function:

const { reindent } = require('reindent-template-literals')

console.log(
  reindent(`
    ┌────────────────────────┐
    │ The answer is: ${ 42 } │
    └────────────────────────┘
  `)
)
1.1.0

3 years ago

1.0.0

3 years ago