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

x-file

v0.2.0

Published

Constructor for virtual file objects

Downloads

19

Readme

x-file

NPM version Build status

This is a constructor for virtual file objects. It's intended for use in incremental build systems, where files in a destination directory get granularly created/edited/deleted depending on decisions made in the build process. An x-file instance is essentially a record of what that decision is for a single build action on one file.

Instantiate it with a path and some contents:

var File = require('x-file');

var file = new File('some/imaginary/file.txt', 'hello');

The .path property can be a string or null.

A file's .contents property must be one of three types:

  • a Buffer – simply, the contents you intend to be written to disk (at the end of the build process)
  • false – to be interpreted as an instruction to delete this file from whatever destination directory
  • null – contents not decided yet, or an explicit instruction not to write/delete anything at the given path.

It constructs an object with .path and .contents properties. But it also has a dynamic .text property for the common case of modifying the contents as a UTF-8 string over and over.

The .text and .contents properties automatically stay in sync, and they do this lazily in order to reduce work. If you make several changes to the .text during a build process, the .contents will only be updated when you next attempt to read it.

It also has an .ext property that you can read and write, and .path will automatically reflect it.

usage

var File = require('x-file');

var file = new File('some/imaginary/file.txt', 'hello');

file.contents.toString(); // "hello"
file.ext; // ".txt";

file.text += ' world';
file.contents.toString(); // "hello world"

file.contents = new Buffer('bye');
file.text; // "bye"
file.length; // 3

file.ext = '.foo';
file.path; // "some/imaginary/file.foo"

Note that calling .write() or .fill() to edit the buffer in place will not be reflected in .text, because it won't trigger the .contents setter. If you need to work around this, you can set file.contents = file.contents after editing the buffer in place, to trigger the setter.

properties

  • .contents - may be a Buffer, false or null. Recommended interpretation of values:
    • a buffer means that when this file is 'output' somehow (e.g. saved to disk), this buffer is what should be written.
    • false means that this file object is really a 'to be deleted' instruction; i.e. if the final stage of this build system requires
    • null
    • the recommended interpretation is that null means contents are undecided, or that they should not be changed (compared to some previous build).
  • .text – the parallel to .contents. May be a string, false or null. This property is automatically kept in sync with .contents.

licence

MIT