What is simple-plist?
The simple-plist npm package allows for the reading, writing, and manipulation of plist (Property List) files, which are commonly used in macOS and iOS for storing serialized objects. It provides a straightforward API for handling plist data in XML and binary formats.
What are simple-plist's main functionalities?
Reading plist files
This feature allows for the synchronous reading of plist files from the filesystem. The `readFileSync` method reads the file from the given path and returns the plist data as a JavaScript object.
const plist = require('simple-plist');
const data = plist.readFileSync('/path/to/file.plist');
Writing plist files
This feature enables the synchronous writing of plist data to files. The `writeFileSync` method takes a file path and a JavaScript object, then serializes the object into plist format and writes it to the specified file.
const plist = require('simple-plist');
const data = { key: 'value' };
plist.writeFileSync('/path/to/file.plist', data);
Parsing plist data
This feature involves parsing plist data from a string. The `parse` method takes a plist-formatted string and converts it into a JavaScript object, allowing for easy manipulation and access to the data.
const plist = require('simple-plist');
const plistData = '<plist><dict><key>exampleKey</key><string>exampleValue</string></dict></plist>';
const data = plist.parse(plistData);
Other packages similar to simple-plist
plist
The 'plist' package offers similar functionality for parsing and building plist files. It supports both XML and binary plist formats. Compared to simple-plist, it might offer a more comprehensive API and additional options for customization.
bplist-parser
This package is specifically designed for parsing binary plist files. While it does not support writing plist files or handling XML plists, it's optimized for fast and efficient parsing of binary plist data, making it a good choice for applications that only need to read plist files.
simple-plist
A simple API for interacting with binary and plain text
plist data.
Installation
npm install simple-plist
yarn add simple-plist
Synchronous API
const plist = require("simple-plist");
let data;
data = plist.readFileSync("/path/to/some.plist");
plist.writeFileSync("/path/to/plaintext.plist", data);
plist.writeBinaryFileSync("/path/to/binary.plist", data);
Asynchronous API
Note: all of the async examples can optionally be converted to promises using
node's util.promisify
.
const plist = require("simple-plist");
let data;
function callback(err, contents) {
if (err) throw err;
data = contents;
}
plist.readFile("/path/to/some.plist", callback);
plist.writeFile("/path/to/plaintext.plist", data, callback);
plist.writeBinaryFile("/path/to/binary.plist", data, callback);
In Memory
plist.stringify()
const plist = require("simple-plist");
plist.stringify({ name: "Joe", answer: 42 });
plist.parse()
const plist = require("simple-plist");
const xml = `<plist>
<dict>
<key>name</key>
<string>Joe</string>
</dict>
</plist>`;
plist.parse(xml);
TypeScript Support
All functions have typescript signatures, but there are a few handy generics
that are worth pointing out. Those generics belong to parse
, readFile
,
and readFileSync
. Here's an example:
import { parse, readFile, readFileSync } from "simple-plist";
type Profile = {
name: string;
answer: number;
};
const xml = `<plist>
<dict>
<key>name</key>
<string>Joe</string>
<key>answer</key>
<integer>42</integer>
</dict>
</plist>`;
const { answer } = parse<Profile>(xml);
const { name } = readFileSync<Profile>("/path/to/profile.plist");