Format your JSONata expressions using Prettier.
A Prettier plugin must first parse the source code of the target language into a traversable data structure (Usually an Abstract Syntax Tree) and then print out that data structure in a "pretty" style.
prettier-plugin-jsonata uses the JSONata parser available as part of the jsonata package.
printWidth
, tabWidth
, and useTabs
formatting options are supported.# Install locally in a project
npm install --save-dev @stedi/prettier-plugin-jsonata prettier
# Or globally
npm install -g @stedi/prettier-plugin-jsonata prettier
Once you installed prettier
and prettier-plugin-jsonata
as dev dependencies in your project,
you can format your code using Prettier CLI.
npx prettier --write ./**/*.jsonata
You can format your JSONata expressions using Prettier's own format
method like this:
import * as prettier from "prettier";
import * as prettierPlugin from "@stedi/prettier-plugin-jsonata";
const expression = "($myVar:=foo.bar[]; $reverse($myVar))";
const formattedExpression = prettier.format(expression, {
parser: prettierPlugin.AST_PARSER_NAME,
plugins: [prettierPlugin],
printWidth: 150,
tabWidth: 2,
useTabs: false,
});
console.log(formattedExpression);
Alternatively, you can use the formatJsonata
function:
import { formatJsonata } from "@stedi/prettier-plugin-jsonata/dist/lib";
async function format() {
const expression = "($myVar:=foo.bar[]; $reverse($myVar))";
const formattedExpression = await formatJsonata(expression);
console.log(formattedExpression);
}
format().catch((e) => {
console.log(e);
});
If you parse JSONata as part of your business logic and only need to print JSONata AST tree as a formatted string,
you can use serializeJsonata
function:
import jsonata from "jsonata";
import { serializeJsonata } from "@stedi/prettier-plugin-jsonata/dist/lib";
async function serialize() {
const jsonataAST = jsonata("($myVar:=foo.bar[]; $reverse($myVar))").ast();
const formattedExpression = await serializeJsonata(jsonataAST);
console.log(formattedExpression);
}
serialize().catch((e) => {
console.log(e);
});