Gathering detailed insights and metrics for fs-updater
Gathering detailed insights and metrics for fs-updater
Gathering detailed insights and metrics for fs-updater
Gathering detailed insights and metrics for fs-updater
@pnpm/meta-updater
Keeps meta files up-to-date in a monorepo
fs-extra
fs-extra contains methods that aren't included in the vanilla Node.js fs package. Such as recursive mkdir, copy, and remove.
electron-updater
Cross platform updater for electron applications
graceful-fs
A drop-in replacement for fs, making various improvements.
npm install fs-updater
84.3
Supply Chain
97.5
Quality
72.8
Maintenance
100
Vulnerability
98.6
License
Module System
Min. Node Version
Typescript Support
Node Version
NPM Version
1 Stars
15 Commits
9 Forks
5 Watching
6 Branches
3 Contributors
Updated on 23 Feb 2018
JavaScript (100%)
Cumulative downloads
Total Downloads
Last day
-31.1%
18,496
Compared to previous day
Last week
-13.4%
112,086
Compared to previous week
Last month
16.9%
536,950
Compared to previous month
Last year
21.2%
7,766,859
Compared to previous year
4
Repeatedly write an in-memory directory tree to disk, with incremental updating.
This package requires Node version 6.0.0 or newer.
1npm install --save fs-updater
1let FSUpdater = require("fs-updater"); 2let { File, Directory, DirectoryIndex } = FSUpdater; 3 4// output_dir must either be an empty directory or not exist at all 5let fsUpdater = new FSUpdater('./output_dir')
Let's create the following directory structure, where ->
indicates a symlink
(or a copy on Windows):
output_dir
├── file -> /path/to/some/file
├── dir1/ -> /path/to/some/dir
└── dir2/
└── another_file -> /path/to/another/file
1let dir = new DirectoryIndex([ 2 ['file', new File('/path/to/some/file')], 3 ['dir1', new Directory('/path/to/some/dir')], 4 ['dir2', new DirectoryIndex([ 5 ['another_file', new File('/path/to/another/file')] 6 ])] 7]); 8 9// Write it to ./output_dir 10fsUpdater.update(dir);
Now let's create an updated similar directory structure:
.
├── file -> /path/to/some/file
└── dir1/ -> /path/to/some/dir
1dir = new DirectoryIndex([ 2 ['file', new File('/path/to/some/file')], 3 ['dir1', new Directory('/path/to/some/dir')] 4]); 5 6// Now update output_dir incrementally 7fsUpdater.update(dir);
It is recommended that you rebuild all your File
, Directory
and
DirectoryIndex
objects from scratch each time you call fsUpdater.update
. If
you re-use objects, the following rules apply:
First, do not mutate the objects that you pass into FSUpdater
, or their
sub-objects. That is, after calling fsUpdater.update(dir)
, you must no longer
call dir.set(...)
.
Second, you may re-use unchanged File
, Directory
and DirectoryIndex
objects only if you know that the file contents they point to recursively
have not changed. This is typically only the case if they point into directories
that you control, and if those directories in turn contain no symlinks to
outside directories under the user's control.
For example, this is always OK:
1let file = new String('/the/file');
2fsUpdater.update(new DirectoryIndex([
3 ['file', file]
4]);
5
6// Create new File object with identical path
7file = new String('/the/file');
8fsUpdater.update(new DirectoryIndex([
9 ['file', file]
10]);
But this is only OK if the contents of /the/file
have not changed between
calls to .update
:
1let file = new String('/the/file');
2fsUpdater.update(new DirectoryIndex([
3 ['file', file]
4]);
5
6// Re-use the File object
7fsUpdater.update(new DirectoryIndex([
8 ['file', file]
9]);
FSUpdater
: An object used to repeatedly update an output directory.
new FSUpdater(outputPath, options)
: Create a new FSUpdater
object. The
outputPath
must be an empty directory or absent.
It is important that the FSUpdater
has exclusive access to the
outputPath
directory. FSUpdater.prototype.update
calls
rimraf, which can be dangerous in the
presence of symlinks if unexpected changes have been made to the
outputPath
directory.
options.canSymlink
(boolean): If true, use symlinks; if false, copy
files and use junctions. If null
(default), auto-detect.
FSUpdater.prototype.update(directory)
: Update the outputPath
directory
to mirror the contents of the directory
object, which is either a
DirectoryIndex
(an in-memory directory) or a Directory
(a directory on
disk).
Important note: You may re-use File
objects contained in the
DirectoryIndex
between repeated calls to .update()
only if the file
contents have not changed. Similarly, you may re-use DirectoryIndex
and
Directory
objects only if no changes have been made to the directory or
any files or subdirectories recursively, including those reachable through
symlinks.
FSUpdater.DirectoryIndex
: A subclass of
Map
representing an in-memory directory; see the documentation there.
DirectoryIndex
objects map file names (string
primitives, without paths)
to DirectoryIndex
, Directory
or File
objects.
FSUpdater.Directory
: A directory on disk. Think of this as an in-memory
symlink to a directory.
new Directory(path)
: Create a new Directory
object pointing to
the directory at path
.
Directory.prototype.valueOf()
: Return the path
.
Directory.prototype.getIndexSync()
: Read the physical directory and return a
DirectoryIndex
. The DirectoryIndex
object is cached between repeated
calls to getIndexSync()
.
FSUpdater.File
: Represents a file on disk. Think of this as an in-memory
symlink.
new File(path)
: Create a new File
object pointing to the file at path
.
File.prototype.valueOf()
: Return the path
.
FSUpdater.makeFSObject(path)
: Return a File
or Directory
object,
depending on the file type on disk. This function follows symlinks.
Clone this repo and run the tests like so:
npm install
npm test
Issues and pull requests are welcome. If you change code, be sure to re-run
npm test
. Oftentimes it's useful to add or update tests as well.
No vulnerabilities found.
Reason
no binaries found in the repo
Reason
license file detected
Details
Reason
Found 0/15 approved changesets -- score normalized to 0
Reason
no SAST tool detected
Details
Reason
0 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 0
Reason
no effort to earn an OpenSSF best practices badge detected
Reason
security policy file not detected
Details
Reason
project is not fuzzed
Details
Reason
branch protection not enabled on development/release branches
Details
Reason
17 existing vulnerabilities detected
Details
Score
Last Scanned on 2024-11-25
The Open Source Security Foundation is a cross-industry collaboration to improve the security of open source software (OSS). The Scorecard provides security health metrics for open source projects.
Learn More