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

sf

v0.2.0

Published

String formatting library for node.js

Downloads

8,868

Readme

sf

Build Status

String formatting library for node.js.

Installation

$ npm install sf

Quick Examples

var sf = require("sf");

sf("{who} has a {what}", { who: 'dog', what: 'tail' });
// returns: dog has a tail

sf("{0} has a {1}", 'dog', 'tail');
// returns: dog has a tail

sf("{0:#,##0.00}", 2123.1);
// returns: 2,123.10

sf("{0,15:#,##0.00}", 2123.1);
// returns:        2,123.10

sf("{a.b}", { a: { b: 'test' }});
// returns: test

sf("{a.z.c}", { a: { b: 'test' }});
// throws an error

sf("{a.?z.?c}", { a: { b: 'test' }});
// returns:

sf("{a[0]}", { a: [ 'foo', 'bar' ]});
// returns: foo

sf("{a[-1]}", { a: [ 'foo', 'bar' ]});
// returns: bar

sf.log("{who} has a {what}", { who: 'dog', what: 'tail' });
// outputs to standard out: dog has a tail

sf("{0:^d 'Days,' h:mm:ss.fff}", new sf.TimeSpan(8173818181));
// returns: 94 Days, 14:30:18.181

Format Specifiers

The format is similar to C#'s string.format. The text inside the curly braces is {indexOrName[,alignment][:formatString]}. If alignment is positive the text is right aligned. If alignment is negative it will be left aligned.

Object

| Specifier | Name | |-----------|------------------------------| | json | JSON.stringify | | inspect | util.inspect |

Numbers

| Specifier | Name | Example | Output | |-----------|------------------------------|------------------|----------------| | 0 | Zero placeholder | {0:00.0000} | 02.1200 | | # | Digit placeholder | {0:#,###} | 1,234 | | x | Lowercase hex | {0:x4} | 01fc | | X | Uppercase hex | {0:X4} | 01FC |

Dates

| Specifier | Name | Example | |-----------|---------------------------------|---------------------------------| | sd | Short date | 10/12/2002 | | D | Long date | December 10, 2002 | | t | Short time | 10:11 PM | | T | Long time | 10:11:29 PM | | fdt | Full date & time | December 10, 2002 10:11 PM | | F | Full date & time (long) | December 10, 2002 10:11:29 PM | | g | Default date & time | 10/12/2002 10:11 PM | | G | Default date & time (long) | 10/12/2002 10:11:29 PM | | md | Month day pattern | December 10 | | r | RFC1123 date string | Tue, 10 Dec 2002 22:11:29 +0500 | | s | Sortable date string | 2002-12-10T22:11:29 | | d | Date single digit | 1 | | dd | Date leading zero | 01 | | ddd | Short day name | Mon | | dddd | Long day name | Monday | | f | Fraction of second (1 digit) | 1 | | ff | Fraction of second (2 digit) | 24 | | fff | Fraction of second (3 digit) | 345 | | h | Hour 12-hour format 1 digit | 5 | | hh | Hour 12-hour format 2 digits | 05 | | H | Hour 24-hour format 1 digit | 5 | | HH | Hour 24-hour format 2 digits | 05 | | mm | Minutes 2 digits | 23 | | M | Month single digit | 2 | | MM | Month leading zero | 02 | | MMM | Month short name | Feb | | MMMM | Month long name | February | | ss | Seconds 2 digits | 54 | | tt | AM/PM | AM | | yy | Year 2 digits | 12 | | yyyy | Year 4 digits | 2012 | | zz | Time zone offset | 05 | | +zz | Time zone offset leading + | +05 | | zzz | Time zone offset full | 05:00 | | zzzz | Time zone offset full | 0500 | | +zzzz | Time zone offset full leading + | +0500 |

sf.TimeSpan

| Specifier | Name | Example | |-----------|---------------------|------------------------| | y | Years | 2 | | M | Months | 6 | | d | Days | 8 | | h | Hours | 10 | | m | Minutes | 15 | | s | Seconds | 5 | | f | Fraction of Seconds | 9 |

If you prefix the specifier with '^' you will get the total number of that value. For example '^s' will output the total number of seconds in the time span. Where as 's' will only output the number of seconds in a minute.

If you repeat characters the value will be prefixed with zeros.

sf.indent(str, options)

Helper function to word wrap and indent a string.

Arguments

  • str - The string to indent and wrap.
  • options
  • prefix - The prefix to appear at the beginning of each new line.
  • wordwrap - The maximum length of each line.

Helper Functions

  • sf.log(formatString [, args...]);
  • sf.info(formatString [, args...]);
  • sf.warn(formatString [, args...]);
  • sf.error(formatString [, args...]);