|
1 | | -# fast-json-stable-stringify |
| 1 | +# quick-stable-stringify |
2 | 2 |
|
3 | | -Deterministic `JSON.stringify()` - a faster version of [@substack](https://github.com/substack)'s json-stable-strigify without [jsonify](https://github.com/substack/jsonify). |
| 3 | +Deterministic `JSON.stringify()` - a faster version of [@epoberezkin](https://github.com/epoberezkin)'s [fast-json-stable-strigify](https://github.com/epoberezkin/fast-json-stable-stringify). Built with Typescript and modern Javascript. |
4 | 4 |
|
5 | | -You can also pass in a custom comparison function. |
| 5 | +## Install |
6 | 6 |
|
7 | | -[](https://travis-ci.org/epoberezkin/fast-json-stable-stringify) |
8 | | -[](https://coveralls.io/github/epoberezkin/fast-json-stable-stringify?branch=master) |
| 7 | +With npm do: |
9 | 8 |
|
10 | | -# example |
11 | | - |
12 | | -``` js |
13 | | -var stringify = require('fast-json-stable-stringify'); |
14 | | -var obj = { c: 8, b: [{z:6,y:5,x:4},7], a: 3 }; |
15 | | -console.log(stringify(obj)); |
| 9 | +``` |
| 10 | +npm install quick-stable-stringify |
16 | 11 | ``` |
17 | 12 |
|
18 | | -output: |
| 13 | +Or install with yarn: |
19 | 14 |
|
20 | 15 | ``` |
21 | | -{"a":3,"b":[{"x":4,"y":5,"z":6},7],"c":8} |
| 16 | +yarn add quick-stable-stringify |
22 | 17 | ``` |
23 | 18 |
|
| 19 | +## Examples |
24 | 20 |
|
25 | | -# methods |
26 | | - |
27 | | -``` js |
28 | | -var stringify = require('fast-json-stable-stringify') |
| 21 | +```js |
| 22 | +var stringify = require("quick-stable-stringify"); |
| 23 | +var obj = { c: 8, b: [{ z: 6, y: 5, x: 4 }, 7], a: 3 }; |
| 24 | +console.log(stringify(obj)); |
29 | 25 | ``` |
30 | 26 |
|
31 | | -## var str = stringify(obj, opts) |
32 | | - |
33 | | -Return a deterministic stringified string `str` from the object `obj`. |
| 27 | +output: |
34 | 28 |
|
| 29 | +``` |
| 30 | +{"a":3,"b":[{"x":4,"y":5,"z":6},7],"c":8} |
| 31 | +``` |
35 | 32 |
|
36 | | -## options |
| 33 | +## Options |
37 | 34 |
|
38 | 35 | ### cmp |
39 | 36 |
|
40 | 37 | If `opts` is given, you can supply an `opts.cmp` to have a custom comparison |
41 | 38 | function for object keys. Your function `opts.cmp` is called with these |
42 | 39 | parameters: |
43 | 40 |
|
44 | | -``` js |
45 | | -opts.cmp({ key: akey, value: avalue }, { key: bkey, value: bvalue }) |
| 41 | +```js |
| 42 | +opts.cmp({ key: akey, value: avalue }, { key: bkey, value: bvalue }); |
46 | 43 | ``` |
47 | 44 |
|
48 | 45 | For example, to sort on the object key names in reverse order you could write: |
49 | 46 |
|
50 | | -``` js |
51 | | -var stringify = require('fast-json-stable-stringify'); |
| 47 | +```js |
| 48 | +var stringify = require("quick-stable-stringify"); |
52 | 49 |
|
53 | | -var obj = { c: 8, b: [{z:6,y:5,x:4},7], a: 3 }; |
| 50 | +var obj = { c: 8, b: [{ z: 6, y: 5, x: 4 }, 7], a: 3 }; |
54 | 51 | var s = stringify(obj, function (a, b) { |
55 | | - return a.key < b.key ? 1 : -1; |
| 52 | + return a.key < b.key ? 1 : -1; |
56 | 53 | }); |
57 | 54 | console.log(s); |
58 | 55 | ``` |
@@ -87,45 +84,25 @@ Pass `true` in `opts.cycles` to stringify circular property as `__cycle__` - the |
87 | 84 |
|
88 | 85 | TypeError will be thrown in case of circular object without this option. |
89 | 86 |
|
90 | | - |
91 | | -# install |
92 | | - |
93 | | -With [npm](https://npmjs.org) do: |
94 | | - |
95 | | -``` |
96 | | -npm install fast-json-stable-stringify |
97 | | -``` |
98 | | - |
99 | | - |
100 | 87 | # benchmark |
101 | 88 |
|
102 | 89 | To run benchmark (requires Node.js 6+): |
| 90 | + |
103 | 91 | ``` |
104 | 92 | node benchmark |
105 | 93 | ``` |
106 | 94 |
|
107 | 95 | Results: |
| 96 | + |
108 | 97 | ``` |
109 | | -fast-json-stable-stringify x 17,189 ops/sec ±1.43% (83 runs sampled) |
110 | | -json-stable-stringify x 13,634 ops/sec ±1.39% (85 runs sampled) |
111 | | -fast-stable-stringify x 20,212 ops/sec ±1.20% (84 runs sampled) |
112 | | -faster-stable-stringify x 15,549 ops/sec ±1.12% (84 runs sampled) |
113 | | -The fastest is fast-stable-stringify |
| 98 | +quick-stable-stringify x 25,499 ops/sec ±1.79% (82 runs sampled) |
| 99 | +fast-json-stable-stringify x 18,566 ops/sec ±0.43% (89 runs sampled) |
| 100 | +json-stable-stringify x 14,453 ops/sec ±0.62% (88 runs sampled) |
| 101 | +fast-stable-stringify x 20,763 ops/sec ±0.58% (88 runs sampled) |
| 102 | +faster-stable-stringify x 18,320 ops/sec ±0.90% (88 runs sampled) |
| 103 | +The fastest is quick-stable-stringify |
114 | 104 | ``` |
115 | 105 |
|
116 | | - |
117 | | -## Enterprise support |
118 | | - |
119 | | -fast-json-stable-stringify package is a part of [Tidelift enterprise subscription](https://tidelift.com/subscription/pkg/npm-fast-json-stable-stringify?utm_source=npm-fast-json-stable-stringify&utm_medium=referral&utm_campaign=enterprise&utm_term=repo) - it provides a centralised commercial support to open-source software users, in addition to the support provided by software maintainers. |
120 | | - |
121 | | - |
122 | | -## Security contact |
123 | | - |
124 | | -To report a security vulnerability, please use the |
125 | | -[Tidelift security contact](https://tidelift.com/security). |
126 | | -Tidelift will coordinate the fix and disclosure. Please do NOT report security vulnerability via GitHub issues. |
127 | | - |
128 | | - |
129 | 106 | # license |
130 | 107 |
|
131 | 108 | [MIT](https://github.com/epoberezkin/fast-json-stable-stringify/blob/master/LICENSE) |
0 commit comments