Code writer for JavaScript and TypeScript code.
With Deno:
deno add jsr:@david/code-block-writer
Or with Node:
npm install --save code-block-writer
// import CodeBlockWriter from "code-block-writer"; // for npm
import CodeBlockWriter from "@david/code-block-writer";
const writer = new CodeBlockWriter({
// optional options
newLine: "\r\n", // default: "\n"
indentNumberOfSpaces: 2, // default: 4
useTabs: false, // default: false
useSingleQuote: true // default: false
});
writer.write("class MyClass extends OtherClass").block(() => {
writer.writeLine(`@MyDecorator(1, 2)`);
writer.write(`myMethod(myParam: any)`).block(() => {
writer.write("return this.post(").quote("myArgument").write(");");
});
});
console.log(writer.toString());
Outputs (using "\r\n" for newlines):
class MyClass extends OtherClass {
@MyDecorator(1, 2)
myMethod(myParam: any) {
return this.post('myArgument');
}
}
-
block(block?: () => void)
- Indents all the code written within and surrounds it in braces. -
inlineBlock(block?: () => void)
- Same as block, but doesn't add a space before the first brace and doesn't add a newline at the end. -
getLength()
- Get the current number of characters. -
writeLine(text: string)
- Writes some text and adds a newline. -
newLine()
- Writes a newline. -
newLineIfLastNot()
- Writes a newline if what was written last wasn't a newline. -
blankLine()
- Writes a blank line. Does not allow consecutive blank lines. -
blankLineIfLastNot()
- Writes a blank line if what was written last wasn't a blank line. -
quote()
- Writes a quote character. -
quote(text: string)
- Writes text surrounded in quotes. -
indent(times?: number)
- Indents the current line. Optionally indents multiple times when providing a number. -
indent(block?: () => void)
- Indents a block of code. -
space(times?: number)
- Writes a space. Optionally writes multiple spaces when providing a number. -
spaceIfLastNot()
- Writes a space if the last was not a space. -
tab(times?: number)
- Writes a tab. Optionally writes multiple tabs when providing a number. -
tabIfLastNot()
- Writes a tab if the last was not a tab. -
write(text: string)
- Writes some text. -
conditionalNewLine(condition: boolean)
- Writes a newline if the condition is matched. -
conditionalBlankLine(condition: boolean)
- Writes a blank line if the condition is matched. -
conditionalWrite(condition: boolean, text: string)
- Writes if the condition is matched. -
conditionalWrite(condition: boolean, textFunc: () => string)
- Writes if the condition is matched. -
conditionalWriteLine(condition: boolean, text: string)
- Writes some text and adds a newline if the condition is matched. -
conditionalWriteLine(condition: boolean, textFunc: () => string)
- Writes some text and adds a newline if the condition is matched. -
setIndentationLevel(indentationLevel: number)
- Sets the current indentation level. -
setIndentationLevel(whitespaceText: string)
- Sets the current indentation level based on the provided whitespace text. -
withIndentationLevel(indentationLevel: number, action: () => void)
- Sets the indentation level within the provided action. -
withIndentationLevel(whitespaceText: string, action: () => void)
- Sets the indentation level based on the provided whitespace text within the action. -
getIndentationLevel()
- Gets the current indentation level. -
queueIndentationLevel(indentationLevel: number)
- Queues an indentation level to be used once a new line is written. -
queueIndentationLevel(whitespaceText: string)
- Queues an indentation level to be used once a new line is written based on the provided whitespace text. -
hangingIndent(action: () => void)
- Writes the code within the action with hanging indentation. -
hangingIndentUnlessBlock(action: () => void)
- Writes the code within the action with hanging indentation unless a block is written going from the first line to the second. -
closeComment()
- Writes text to exit a comment if in a comment. -
unsafeInsert(pos: number, text: string)
- Inserts text into the writer. This will not update the writer's state. Read more in its jsdoc. -
isInComment()
- Gets if the writer is currently in a comment. -
isAtStartOfFirstLineOfBlock()
- Gets if the writer is currently at the start of the first line of the text, block, or indentation block. -
isOnFirstLineOfBlock()
- Gets if the writer is currently on the first line of the text, block, or indentation block. -
isInString()
- Gets if the writer is currently in a string. -
isLastNewLine()
- Gets if the writer last wrote a newline. -
isLastBlankLine()
- Gets if the writer last wrote a blank line. -
isLastSpace()
- Gets if the writer last wrote a space. -
isLastTab()
- Gets if the writer last wrote a tab. -
getLastChar()
- Gets the last character written. -
endsWith(text: string)
- Gets if the writer ends with the provided text. -
iterateLastChars<T>(action: (char: string, index: number) => T | undefined): T | undefined
- Iterates over the writer's characters in reverse order, stopping once a non-null or undefined value is returned and returns that value. -
iterateLastCharCodes<T>(action: (charCode: number, index: number) => T | undefined): T | undefined
- A slightly faster version ofiterateLastChars
that doesn't allocate a string per character. -
getOptions()
- Gets the writer options. -
toString()
- Gets the string.
- Does not indent within strings.
- Escapes newlines within double and single quotes created with
.quote(text)
.
See CodeBlockWriterSharp.