A template literal tag for dedenting Fluent code
npm install @fluent/dedent@fluent/dedent provides a template literal tag to dedent Fluent code. It's
part of [Project Fluent][].
Fluent Syntax is indentation-sensitive, and @fluent/dedent offers a
convenient way to include Fluent snippets in source code keeping the current
level of indentation and without compromising the readability.
[project fluent]: https://projectfluent.org
@fluent/dedent can be used both on the client-side and the server-side. You can
install it from the npm registry or use it as a standalone script (as theFluentDedent global).
npm install @fluent/dedent
@fluent/dedent's default export is meant to be used as a template literal
tag. By convention, the tag is often called ftl.
``javascript
import ftl from "@fluent/dedent";
let messages = ftl
hello = Hello, world!
welcome = Welcome, {$userName}!
;`
The position of the closing backtick defines how much indent will be removed
from each line of the content. If the indentation is not sufficient in any of
the non-blank lines of the content, a RangeError is thrown.
`javascript
import ftl from "@fluent/dedent";
let messages = ftl
hello = Hello, world!
welcome = Welcome, {$userName}!
;
// → RangeError("Insufficient indentation in line 2.")
`
Content must start on a new line and must end on a line of its own. The
closing delimiter must appear on a new line. The first and the last line of
the input will be removed from the output. If any of them contains
non-whitespace characters, a RangeError is thrown.
`javascript
import ftl from "@fluent/dedent";
let message1 = "hello = Hello, world!";
let message2 = ftl
hello = Hello, world!
;
assert(message1 === message2);
`
If you wish to include the leading or trailing line breaks in the output, put
extra blank lines in the input.
`javascript
import ftl from "@fluent/dedent";
let message = ftl
hello = Hello, world!
;
assert(message === "\nhello = Hello, world!\n");
``