@jsonjoy.com/fs-snapshot
File system snapshot - serialize and deserialize file system trees to binary (CBOR) or JSON format.
Installation
npm install @jsonjoy.com/fs-snapshot
Features
- Serialize entire file system trees into compact binary (CBOR) or JSON snapshots
- Restore file system trees from snapshots
- Supports files, directories, and symbolic links
- Both synchronous and asynchronous APIs
- Works with any Node.js-compatible
fs module
Usage
Synchronous API
import * as fs from 'fs';
import { toSnapshotSync, fromSnapshotSync } from '@jsonjoy.com/fs-snapshot';
const snapshot = toSnapshotSync({ fs, path: '/path/to/directory' });
fromSnapshotSync(snapshot, { fs, path: '/path/to/restore' });
Asynchronous API
import * as fs from 'fs';
import { toSnapshot, fromSnapshot } from '@jsonjoy.com/fs-snapshot';
const snapshot = await toSnapshot({ fs: fs.promises, path: '/path/to/directory' });
await fromSnapshot(snapshot, { fs: fs.promises, path: '/path/to/restore' });
Binary (CBOR) Snapshots
Binary snapshots are more compact and faster to serialize/deserialize:
import * as fs from 'fs';
import { toBinarySnapshotSync, fromBinarySnapshotSync } from '@jsonjoy.com/fs-snapshot';
const binary = toBinarySnapshotSync({ fs, path: '/path/to/directory' });
fromBinarySnapshotSync(binary, { fs, path: '/path/to/restore' });
JSON Snapshots
JSON snapshots are human-readable and easier to debug:
import * as fs from 'fs';
import { toJsonSnapshotSync, fromJsonSnapshotSync } from '@jsonjoy.com/fs-snapshot';
const jsonSnapshot = toJsonSnapshotSync({ fs, path: '/path/to/directory' });
fromJsonSnapshotSync(jsonSnapshot, { fs, path: '/path/to/restore' });
Snapshot Format
Snapshots are represented as tuples with the following structure:
- Folder:
[0, metadata, { entries }]
- File:
[1, metadata, Uint8Array]
- Symlink:
[2, { target: string }]
License
Apache-2.0