npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2024 – Pkg Stats / Ryan Hefner

@aduh95/toml-prettifier

v1.1.1

Published

Opinionated TOML code formatter

Downloads

25

Readme

TOML Prettifier

Opinionated TOML code formatter written in JavaScript.

Usage

Reading a TOML file using Node.js and overwrite it with the prettified version:

import { createReadStream, createWriteStream, promises as fs } from "fs";
import { join } from "path";
import { tmpdir } from "os";
import { createInterface as readLines } from "readline";

import TOMLPrettifier from "@aduh95/toml-prettifier";

/**
 * Prettifies a TOML file.
 * @param {string | URL | Buffer} inputFilePath
 */
export async function prettifyTOMLFile(inputFilePath) {
  // Read the input file line by line.
  const reader = readLines({
    input: createReadStream(inputFilePath),
    crlfDelay: Infinity,
  });
  // Create a temporary file to write the prettified TOML.
  const { handle, path: tmpFile } = await fs.mkstemp(join(tmpdir(), "pretty-"));
  const writer = createWriteStream(tmpFile, { fd: handle.fd });

  // Pass the input to TOMLPrettifier.
  for await (const line of TOMLPrettifier(reader)) {
    // Write the output to the temp file.
    writer.write(line + "\n");
  }
  // Close the temp file once filled up.
  await handle.close();

  // Replace the input file by the temp file.
  await fs.rename(tmpFile, inputFilePath);
}

Web and Deno usage

The API is the same, although you must init the @aduh95/toml package manually before using it. This uses a WASM module that must be initiate asynchronously and is used to prettify arrays and inline tables.

import TOMLPrettifier from "@aduh95/toml-prettifier";
import initTOMLWasm from "@aduh95/toml";

await initTOMLWasm();

Rules

There are no available configuration for the formatting.

  • Keys: unquote the keys when possible.
  • Multiline basic strings: wrapped to 80 char, and indented one level below the opening and closing char sequence.
  • Multiline literal strings: No transformations are made.
  • Comments:
    • They respect indentation.
    • One or several #s represent the start of a comment, followed by one space unless the comment is empty.
  • Arrays: If an array can fit on one line, it will be reformated to one line, otherwise each element will be on a new line, with a trailing comma.
  • Inline tables: keys are alphabetically ordered.
  • Empty lines: conserved, but any space is removed.