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

pretty-tag

v0.1.1

Published

## example

Downloads

0

Readme

pretty-tag

example

import { tag } from 'pretty-tag';
// first
const str1 = tag`
    <div>
        <span></span>
    </div>
    `;
// equal
const str2 = `<div>
    <span></span>
</div>`;
// equal
const str3 = `<div>\n\t<span></span>\n</div>`;

// the first is more pretty

Usage

tag is a tag function. By default it will remove leading and trailing Spaces, and align the left.

  • remove leading Spaces
  • remove trailing Spaces
  • align left
  • nested

remove leading Spaces

import { tag } from 'pretty-tag';
const str = tag`
    <div></div>`;
console.log(tag);
// '<div></div>'

remove trailing Spaces

import { tag } from 'pretty-tag';
const str = tag`<div></div>
    `;
console.log(tag);
// '<div></div>'

align left

import { tag } from 'pretty-tag';
const str = tag`
      <div>
        <div></div>
      </div>
    `;
console.log(tag);

=>

<div>
  <div></div>
</div>

nested

const innerCode = tag`
    <div>
        <span>abc</span>
    </div>
    `;
const code = tag`
    <div>
        ${innerCode}
    </div>
    `;
// equal
const code2 = tag`
    <div>
        <div>
            <span>abc</span>
        </div>
    </div>
    `;

The problem

Template string is convenience, but sometimes the code is ugly with multi-line due to tab or space.
For example, if you are writing code to generate code.

function a() {
  let code = `let a={
    foo:'b'
}`;
}

Thanks to the tag function, we could implement a better version. In the tag function, we could remove the same extra spaces at the beginning of every line according to the whitespace brefore the first non-blank line.


function a(){
    let code=tag`
    let a={
        foo:'b'
    }`
}

Another Issues

It will remove whitespace every line the same as the first non-blank line. But some people may use 4-space indentation. the editor will automatically add space when press enter key. If we press tab key at the same time, the whitespace may combine space and tab, and will result in inconsistent results.

To avoid the problem, you should switch to hard tabs----always use tab indentation.

function a() {
  let code = tag`
\tlet a={
\40\40foo:'b'
\t}`;
}

=>

function a() {
  let code = tag`
let a={
\40\40foo:'b'
}`;
}

Customize

The default config is

const defaultConfig = {
  trimStart: true,
  align: true,
  trimEnd: true,
};

change default config

import { tag, setDefaultConfig } from 'pretty-tag';
const newConfig = {
  trimStart: true,
  align: false,
  trimEnd: false,
};
setDefaultConfig(config);

const str = tag`
<div></div>`;
// => '<div></div>'

Use different tags

import { Tag } from 'pretty-tag';
const tag2 = new Tag({
  trimStart: true,
  align: false,
  trimEnd: false,
});
const str = tag2`
<div></div>`;
// => '<div></div>'