# js-writer

> A simple JavaScript object to string converter.

Latest version **1.3.0** (published 2017-11-12) · 0 weekly downloads

## Install

```sh
npm install js-writer
pnpm add js-writer
yarn add js-writer
bun add js-writer
```

## Health

**Score 15/100 (F)** — status: abandoned.

Positive: no vulnerabilities.

Warnings: low downloads; no types; no esm support.

Negative: abandoned; low maintenance score.

## Facts

| | |
|---|---|
| Version | 1.3.0 |
| Published | 2017-11-12 |
| First published | 2016-11-22 |
| Weekly downloads | 0 |
| TypeScript types | none |
| Module format | CommonJS |
| Dependencies | 0 |
| Known vulnerabilities | 0 |
| Install scripts | no |
| GitHub stars | 0 |
| Author | Dave Brotherstone |
| Maintainers | bruderstein |

## Links

- npm: https://www.npmjs.com/package/js-writer
- Repository: https://github.com/bruderstein/js-writer
- Homepage: https://github.com/bruderstein/js-writer#readme
- Issues: https://github.com/bruderstein/js-writer/issues
- npm.io page: https://npm.io/package/js-writer

## Recent versions

- 1.3.0 (latest) — 2017-11-12
- 1.2.0 — 2017-03-20
- 1.1.0 — 2017-01-21
- 1.0.0 — 2016-11-22

## README

# js-writer

A simple JavaScript object to string converter.

This converts a JavaScript value to a string that is interpretable JavaScript.

## Usage
```js
var jsWriter = require('js-writer');

var stringRepresentation = jsWriter({
   a: 42,
   b: 'foo',
   'big-string': `an ES6 string
with line breaks`,
   getMagic: function () { return 42; }
});

console.log(stringRepesentation);


// Output:
// {a:42,b:"foo","big-string":"an ES6 string\nwith line breaks",getMagic:function () { return 42; }}

```

## Custom handling for functions, dates and symbols

Passing a `handlers` object in the options with the (optional) keys of `date` or `function` allows
you to override the behaviour of these types. The function receives the value, and should return a 
string of the string representation required.

```js

var s = jsWriter({ f: function foo(a, b) { return a + b; } }, {
  handlers: {
    'function': function (funcValue) {
      return JSON.stringify({ type: 'function', name: funcValue.name });
    }
  }
});

// s == '{f:{"type":"function","name":"foo"}}'
```

## Differences to `JSON.stringify`

The output _is not JSON_, it is JavaScript, so object keys that do not need to be quoted aren't, and functions are outputted as interpretable functions (note that normal unbound functions use the native `.toString()` implementation, so include their source). Dates are recreated by parsing the `.toISOString()` output (this is done to aid readability, rather than using the native `.getTime()` value).

## Why?

This was developed for use with [unexpected-react](https://github.com/bruderstein/unexpected-react) in order to support snapshot testing with [jest](https://facebook.github.io/jest/) and have better matching of functions.

## Supported values

Only basic native types are supported (number including NaN, string, undefined, function, Object, Array, Date).

ES6 collection types (`Map` and `Set`) are planned, but not yet set when.

## License

[MIT License](./LICENSE)

---
_Source: https://npm.io/package/js-writer · Machine-readable twin of the npm.io package page. Health data is recomputed on every publish._
