serialize-as-code
Version:
Serialize any Javascript object as its source code
74 lines (58 loc) • 2.92 kB
Markdown
[![GitHub license][license-image]][license-url]
[![npm package][npm-image]][npm-url]
[![Travis][build-image]][build-url]
[![Coverage Status][coveralls-image]][coveralls-url]
This serializer is intended for serializing ANY Javascript objects into
its source code representation. It is cyclomatic-save extension and alternative
to e.g. `JSON.stringify`. It can even be used to perform deep comparisions
for most cases. ATTENTION: There is no functionality to parse the string back
to the provided object. (one-direction-flow)
- `TypeScript` support included
- ~ 1 kB (gzipped) (see [bundlephobia](https://bundlephobia.com/result?p=serialize-as-code))
```
yarn add serialize-as-code
yarn add --dev serialize-as-code
```
You may import the named import `Serializer` and call run with ANY object.
It prints the object as its source code. So you should be able to copy-paste
the printed result and most deep comparisons should work.
```js
import { Serializer } from 'serialize-as-code';
// Arrays or Objects
console.log(Serializer.run({foo: 'bar'})); // prints: {foo: 'bar'}
console.log(Serializer.run([1, 2])); // prints: [1, 2]
// Symbols (not suppoerted on JSON.stringify)
console.log(Serializer.run(Symbol.for('my-key')));
// prints: Symbol.for('my-key')
// JSX (but react is not needed and their is no dependency)
console.log(Serializer.run(<Fragment key="foo"><div>Test that</div></Fragment>));
// prints: <Fragment key="foo"><div>Test that</div></Fragment>
```
If you try to serialize cyclomatic structures, you will see within the result
were they were detected.
You have the possibility to apply ANY custom serialization just on top.
```js
import { Serializer } from 'serialize-as-code';
const someObjectToMatch = { foo: 'foo' };
const CustomSerializer = (o: any): string | void => {
if (o === someObjectToMatch) return 'FOO';
// return undefined to proceed with regular serialization
};
const YourSerializer = Serializer.create(CustomSerializer);
console.log({ canBe: 'nested', here: someObjectToMatch });
// prints: {canBe: 'nested', here: FOO}
```
[]: https://img.shields.io/badge/license-MIT-blue.svg
[]: https://github.com/fdc-viktor-luft/form4react/blob/master/LICENSE
[]: https://img.shields.io/travis/fdc-viktor-luft/serialize-as-code/master.svg?style=flat-square
[]: https://app.travis-ci.com/github/fdc-viktor-luft/serialize-as-code
[]: https://img.shields.io/npm/v/serialize-as-code.svg?style=flat-square
[]: https://www.npmjs.org/package/serialize-as-code
[]: https://coveralls.io/repos/github/fdc-viktor-luft/serialize-as-code/badge.svg?branch=master
[]: https://coveralls.io/github/fdc-viktor-luft/serialize-as-code?branch=master