https://github.com/linusu/fs-xattr
🔖 Node.js module for manipulating extended attributes
https://github.com/linusu/fs-xattr
Last synced: about 1 year ago
JSON representation
🔖 Node.js module for manipulating extended attributes
- Host: GitHub
- URL: https://github.com/linusu/fs-xattr
- Owner: LinusU
- License: mit
- Created: 2013-12-29T13:48:07.000Z (over 12 years ago)
- Default Branch: master
- Last Pushed: 2021-10-04T12:26:40.000Z (over 4 years ago)
- Last Synced: 2024-04-29T00:43:27.849Z (about 2 years ago)
- Language: C
- Homepage:
- Size: 138 KB
- Stars: 63
- Watchers: 4
- Forks: 16
- Open Issues: 5
-
Metadata Files:
- Readme: readme.md
- License: LICENSE
Awesome Lists containing this project
README
# fs-xattr
Node.js module for manipulating extended attributes.
There are already some libraries for this, why use `fs-xattr`?
- Very useful errors
- No limits on value size
- Clean and easy api
- Proper asynchronous implementation
## Installation
```sh
npm install --save fs-xattr
```
## Usage
```javascript
import { getAttribute, setAttribute } from 'fs-xattr'
await setAttribute('index.js', 'user.linusu.test', 'Hello, World!')
console.log(await getAttribute('index.js', 'user.linusu.test'))
//=> Hello, World!
```
## API
### `getAttribute(path, attr)`
- `path` (`string`, required)
- `attr` (`string`, required)
- returns `Promise` - a `Promise` that will resolve with the value of the attribute.
Get extended attribute `attr` from file at `path`.
### `getAttributeSync(path, attr)`
- `path` (`string`, required)
- `attr` (`string`, required)
- returns `Buffer`
Synchronous version of `getAttribute`.
### `setAttribute(path, attr, value)`
- `path` (`string`, required)
- `attr` (`string`, required)
- `value` (`Buffer` or `string`, required)
- returns `Promise` - a `Promise` that will resolve when the value has been set.
Set extended attribute `attr` to `value` on file at `path`.
### `setAttributeSync(path, attr, value)`
- `path` (`string`, required)
- `attr` (`string`, required)
- `value` (`Buffer` or `string`, required)
Synchronous version of `setAttribute`.
### `removeAttribute(path, attr)`
- `path` (`string`, required)
- `attr` (`string`, required)
- returns `Promise` - a `Promise` that will resolve when the value has been removed.
Remove extended attribute `attr` on file at `path`.
### `removeAttributeSync(path, attr)`
- `path` (`string`, required)
- `attr` (`string`, required)
Synchronous version of `removeAttribute`.
### `listAttributes(path)`
- `path` (`string`, required)
- returns `Promise>` - a `Promise` that will resolve with an array of strings, e.g. `['user.linusu.test', 'com.apple.FinderInfo']`.
List all attributes on file at `path`.
### `listAttributesSync(path)`
- `path` (`string`, required)
- returns `Array`
Synchronous version of `listAttributes`.
## Namespaces
For the large majority of Linux filesystem there are currently 4 supported namespaces (`user`, `trusted`, `security`, and `system`) you can use. Some other systems, like FreeBSD have only 2 (`user` and `system`).
Be sure to use a namespace that is appropriate for your supported platforms. You can read more about this in [the "Extended File Attributes" Wikipedia article](https://en.wikipedia.org/wiki/Extended_file_attributes#Implementations).
Using a namespace like `com.linusu.test` would work on macOS, but would give you the following error on Debian Linux:
> Error \[ENOTSUP]: The file system does not support extended attributes or has the feature disabled.