A simple API for interacting with binary and plain text plist data.
# via npm
npm install simple-plist
# via yarn
yarn add simple-plistStarting with version 1.4.0, you can also import simple-plist into your
deno applications through esm.sh.
importplistfrom"https://esm.sh/simple-plist@1.4.0";import*asplistfrom"simple-plist";letdata;// readdata=plist.readFileSync("/path/to/some.plist");// write xmlplist.writeFileSync("/path/to/plaintext.plist",data);// write binaryplist.writeBinaryFileSync("/path/to/binary.plist",data);Note: all of the async examples can optionally be converted to promises using node's
util.promisify.
import*asplistfrom"simple-plist";letdata;functioncallback(err,contents){if(err)throwerr;data=contents;}// readplist.readFile("/path/to/some.plist",callback);// write xmlplist.writeFile("/path/to/plaintext.plist",data,callback);// write binaryplist.writeBinaryFile("/path/to/binary.plist",data,callback);constplist=require("simple-plist");// Convert an object to a plist xml stringplist.stringify({name: "Joe",answer: 42});/*<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"><plist version="1.0"> <dict> <key>name</key> <string>Joe</string> <key>answer</key> <integer>42</integer> </dict></plist>*/import*asplistfrom"simple-plist";constxml=`<plist> <dict> <key>name</key> <string>Joe</string> </dict></plist>`;plist.parse(xml);// { "name": "Joe" }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";typeProfile={name: string;answer: number;};constxml=`<plist> <dict> <key>name</key> <string>Joe</string> <key>answer</key> <integer>42</integer> </dict></plist>`;// typed string parsingconst{ answer }=parse<Profile>(xml);// answer = 42;// typed file loadingconst{ name }=readFileSync<Profile>("/path/to/profile.plist");