1.2.1 • Published 9 months ago
@eatonfyi/serializers v1.2.1
Serializers
A set of handy-if-janky wrappers for parsing and stringifying various serialization formats.
Caveats
- This package hides most details of each format, and allow arbitrary stuff to be thrown at a generic serializer interface.
- None of these implementations are meant to be used with large quantities of data; if you're parsing a hundred megs of JSON or a million line CSV, for the love of god, don't use this. It's a convenience wrapper, not an optimization.
The Rogues' Gallery
Each of the serializers adheres to a basic interface: A constructor accepts serializer-specific options, a stringify()
function does what it says on the tin, and a parse()
function does the opposite. Some serializers also support a validate()
function if they're capable of checking validity before actually serializing.
base64
is silly simple, but served as a nice demo while I was testing FS-Jetpack integration.csv
andtsv
, via csv-parse and csv-stringify. They're configured to assume header columns exist, parse the records to an array of objects, and be forgiving of missing/extra columns from line to line.ejson
, a JSON variant used by MongoDB that can roundtrip dates, regexes, and buffers, via the ejson project.frontmatter
in markdown files, in either JSON or YAML format, via the grey-matter project.ini
, the old reliable, via the ini project.json
,json5
, andnsjson
, via the json5 project. A convenience reviver that parses JSON-serialized dates is also provided. Justnew NdJson({ reviver: JsonDateReviver })
and Bob's your unkle.php
. Yeah, various PHP-based CMSs like Wordpress and Drupal have a tendency to jam internal configuration data into DB tables using PHP's serialize/deserialize functions. The code to decihper these little bundles of joy descends from php-js; I updated it with additional type-checking typing and error handling.plist
, the XML doctype Apple uses to store tons of MacOS config files, via the plist project.toml
, GitHub founder Tom Preston-Warner's personal config file language, via the @iarna/toml project.yaml
, the venerable config storage format that shows up everywhere, via the yaml project.
Using them with FS Jetpack
Most of these are exposed as parse/stringify pairs that can be passed into my fork of fs-jetpack, where they'll transparently do their thing when reading and writing files with a specified extension. Again, this is absolutely not the most efficient way to handle large piles of data, but for small to middlin' ones it's extremely handy.
import jetpack from '@eatonfyi/fs-jetpack';
import { Yaml } from '@eatonfyi/serializers;
jetpack.setSerializer('.yaml', new Yaml());
const config = jetpack.read('./my-config.yaml', 'auto');
console.log(config); // Actual parsed data, not the raw string. Yay.