1 |
|
2 |
|
3 | # Sort Object
|
4 |
|
5 |
|
6 |
|
7 |
|
8 |
|
9 | <span class="badge-githubworkflow"><a href="https://github.com/bevry/sortobject/actions?query=workflow%3Abevry" title="View the status of this project's GitHub Workflow: bevry"><img src="https://github.com/bevry/sortobject/workflows/bevry/badge.svg" alt="Status of the GitHub Workflow: bevry" /></a></span>
|
10 | <span class="badge-npmversion"><a href="https://npmjs.org/package/sortobject" title="View this project on NPM"><img src="https://img.shields.io/npm/v/sortobject.svg" alt="NPM version" /></a></span>
|
11 | <span class="badge-npmdownloads"><a href="https://npmjs.org/package/sortobject" title="View this project on NPM"><img src="https://img.shields.io/npm/dm/sortobject.svg" alt="NPM downloads" /></a></span>
|
12 | <br class="badge-separator" />
|
13 | <span class="badge-githubsponsors"><a href="https://github.com/sponsors/balupton" title="Donate to this project using GitHub Sponsors"><img src="https://img.shields.io/badge/github-donate-yellow.svg" alt="GitHub Sponsors donate button" /></a></span>
|
14 | <span class="badge-thanksdev"><a href="https://thanks.dev/u/gh/bevry" title="Donate to this project using ThanksDev"><img src="https://img.shields.io/badge/thanksdev-donate-yellow.svg" alt="ThanksDev donate button" /></a></span>
|
15 | <span class="badge-patreon"><a href="https://patreon.com/bevry" title="Donate to this project using Patreon"><img src="https://img.shields.io/badge/patreon-donate-yellow.svg" alt="Patreon donate button" /></a></span>
|
16 | <span class="badge-liberapay"><a href="https://liberapay.com/bevry" title="Donate to this project using Liberapay"><img src="https://img.shields.io/badge/liberapay-donate-yellow.svg" alt="Liberapay donate button" /></a></span>
|
17 | <span class="badge-buymeacoffee"><a href="https://buymeacoffee.com/balupton" title="Donate to this project using Buy Me A Coffee"><img src="https://img.shields.io/badge/buy%20me%20a%20coffee-donate-yellow.svg" alt="Buy Me A Coffee donate button" /></a></span>
|
18 | <span class="badge-opencollective"><a href="https://opencollective.com/bevry" title="Donate to this project using Open Collective"><img src="https://img.shields.io/badge/open%20collective-donate-yellow.svg" alt="Open Collective donate button" /></a></span>
|
19 | <span class="badge-crypto"><a href="https://bevry.me/crypto" title="Donate to this project using Cryptocurrency"><img src="https://img.shields.io/badge/crypto-donate-yellow.svg" alt="crypto donate button" /></a></span>
|
20 | <span class="badge-paypal"><a href="https://bevry.me/paypal" title="Donate to this project using Paypal"><img src="https://img.shields.io/badge/paypal-donate-yellow.svg" alt="PayPal donate button" /></a></span>
|
21 | <br class="badge-separator" />
|
22 | <span class="badge-discord"><a href="https://discord.gg/nQuXddV7VP" title="Join this project's community on Discord"><img src="https://img.shields.io/discord/1147436445783560193?logo=discord&label=discord" alt="Discord server badge" /></a></span>
|
23 | <span class="badge-twitch"><a href="https://www.twitch.tv/balupton" title="Join this project's community on Twitch"><img src="https://img.shields.io/twitch/status/balupton?logo=twitch" alt="Twitch community badge" /></a></span>
|
24 |
|
25 |
|
26 |
|
27 |
|
28 |
|
29 | Returns a copy of an object, sorted deeply by its keys, without mangling any arrays inside of it
|
30 |
|
31 |
|
32 |
|
33 |
|
34 | ## Usage
|
35 |
|
36 | [Complete API Documentation.](http://master.sortobject.bevry.surge.sh/docs/)
|
37 |
|
38 | ```javascript
|
39 | import sortObject from 'sortobject'
|
40 | const fixture = {
|
41 | c: true,
|
42 | a: true,
|
43 | b: null,
|
44 | d: [
|
45 | {
|
46 | c: true,
|
47 | a: true,
|
48 | b: null,
|
49 | },
|
50 | {
|
51 | c: true,
|
52 | a: true,
|
53 | b: null,
|
54 | d: [
|
55 | {
|
56 | c: true,
|
57 | a: true,
|
58 | b: null,
|
59 | },
|
60 | ],
|
61 | },
|
62 | ],
|
63 | }
|
64 | const actual = sortObject(fixture)
|
65 | console.log(JSON.stringify(actual, null, 4)) /* {
|
66 | "a": true,
|
67 | "b": null,
|
68 | "c": true,
|
69 | "d": [
|
70 | {
|
71 | "a": true,
|
72 | "b": null,
|
73 | "c": true
|
74 | },
|
75 | {
|
76 | "a": true,
|
77 | "b": null,
|
78 | "c": true,
|
79 | "d": [
|
80 | {
|
81 | "a": true,
|
82 | "b": null,
|
83 | "c": true
|
84 | }
|
85 | ]
|
86 | }
|
87 | ]
|
88 | } */
|
89 | ```
|
90 |
|
91 |
|
92 |
|
93 | ## Install
|
94 |
|
95 | ### [npm](https://npmjs.com "npm is a package manager for javascript")
|
96 |
|
97 | - Install: `npm install --save sortobject`
|
98 | - Import: `import pkg from ('sortobject')`
|
99 | - Require: `const pkg = require('sortobject').default`
|
100 |
|
101 | ### [Deno](https://deno.land "Deno is a secure runtime for JavaScript and TypeScript, it is an alternative for Node.js")
|
102 |
|
103 | ``` typescript
|
104 | import pkg from 'https://unpkg.com/sortobject@^5.6.0/edition-deno/index.ts'
|
105 | ```
|
106 | ### [Skypack](https://www.skypack.dev "Skypack is a JavaScript Delivery Network for modern web apps")
|
107 |
|
108 | ``` html
|
109 | <script type="module">
|
110 | import pkg from '//cdn.skypack.dev/sortobject@^5.6.0'
|
111 | </script>
|
112 | ```
|
113 | ### [unpkg](https://unpkg.com "unpkg is a fast, global content delivery network for everything on npm")
|
114 |
|
115 | ``` html
|
116 | <script type="module">
|
117 | import pkg from '//unpkg.com/sortobject@^5.6.0'
|
118 | </script>
|
119 | ```
|
120 | ### [jspm](https://jspm.io "Native ES Modules CDN")
|
121 |
|
122 | ``` html
|
123 | <script type="module">
|
124 | import pkg from '//dev.jspm.io/sortobject@5.6.0'
|
125 | </script>
|
126 | ```
|
127 | ### [Editions](https://editions.bevry.me "Editions are the best way to produce and consume packages you care about.")
|
128 |
|
129 | This package is published with the following editions:
|
130 | - `sortobject/source/index.ts` is [TypeScript](https://www.typescriptlang.org/ "TypeScript is a typed superset of JavaScript that compiles to plain JavaScript.") source code with [Import](https://babeljs.io/docs/learn-es2015/#modules "ECMAScript Modules") for modules
|
131 | - `sortobject/edition-browsers/index.js` is [TypeScript](https://www.typescriptlang.org/ "TypeScript is a typed superset of JavaScript that compiles to plain JavaScript.") compiled against [ES2022](https://en.wikipedia.org/wiki/ES2022 "ECMAScript 2022") for web browsers with [Import](https://babeljs.io/docs/learn-es2015/#modules "ECMAScript Modules") for modules
|
132 | - `sortobject` aliases `sortobject/edition-es2022/index.js`
|
133 | - `sortobject/edition-es2022/index.js` is [TypeScript](https://www.typescriptlang.org/ "TypeScript is a typed superset of JavaScript that compiles to plain JavaScript.") compiled against [ES2022](https://en.wikipedia.org/wiki/ES2022 "ECMAScript 2022") for [Node.js](https://nodejs.org "Node.js is a JavaScript runtime built on Chrome's V8 JavaScript engine") 4 || 6 || 8 || 10 || 12 || 14 || 16 || 18 || 20 || 21 with [Require](https://nodejs.org/dist/latest-v5.x/docs/api/modules.html "Node/CJS Modules") for modules
|
134 | - `sortobject/edition-es2022-esm/index.js` is [TypeScript](https://www.typescriptlang.org/ "TypeScript is a typed superset of JavaScript that compiles to plain JavaScript.") compiled against [ES2022](https://en.wikipedia.org/wiki/ES2022 "ECMAScript 2022") for [Node.js](https://nodejs.org "Node.js is a JavaScript runtime built on Chrome's V8 JavaScript engine") 12 || 14 || 16 || 18 || 20 || 21 with [Import](https://babeljs.io/docs/learn-es2015/#modules "ECMAScript Modules") for modules
|
135 | - `sortobject/edition-types/index.d.ts` is [TypeScript](https://www.typescriptlang.org/ "TypeScript is a typed superset of JavaScript that compiles to plain JavaScript.") compiled Types with [Import](https://babeljs.io/docs/learn-es2015/#modules "ECMAScript Modules") for modules
|
136 | - `sortobject/edition-deno/index.ts` is [TypeScript](https://www.typescriptlang.org/ "TypeScript is a typed superset of JavaScript that compiles to plain JavaScript.") source code made to be compatible with [Deno](https://deno.land "Deno is a secure runtime for JavaScript and TypeScript, it is an alternative to Node.js")
|
137 |
|
138 |
|
139 |
|
140 |
|
141 |
|
142 | ## History
|
143 |
|
144 | [Discover the release history by heading on over to the `HISTORY.md` file.](https://github.com/bevry/sortobject/blob/HEAD/HISTORY.md#files)
|
145 |
|
146 |
|
147 |
|
148 |
|
149 |
|
150 | ## Backers
|
151 |
|
152 | ### Code
|
153 |
|
154 | [Discover how to contribute via the `CONTRIBUTING.md` file.](https://github.com/bevry/sortobject/blob/HEAD/CONTRIBUTING.md#files)
|
155 |
|
156 | #### Authors
|
157 |
|
158 | - [Benjamin Lupton](https://balupton.com) — Accelerating collaborative wisdom.
|
159 |
|
160 | #### Maintainers
|
161 |
|
162 | - [Benjamin Lupton](https://balupton.com) — Accelerating collaborative wisdom.
|
163 |
|
164 | #### Contributors
|
165 |
|
166 | - [Benjamin Lupton](https://github.com/balupton) — [view contributions](https://github.com/bevry/sortobject/commits?author=balupton "View the GitHub contributions of Benjamin Lupton on repository bevry/sortobject")
|
167 | - [James Newell](https://jameslnewell.me)
|
168 | - [James Newell](https://github.com/jameslnewell) — [view contributions](https://github.com/bevry/sortobject/commits?author=jameslnewell "View the GitHub contributions of James Newell on repository bevry/sortobject")
|
169 | - [Serge Havas](https://github.com/Sinewyk) — [view contributions](https://github.com/bevry/sortobject/commits?author=Sinewyk "View the GitHub contributions of Serge Havas on repository bevry/sortobject")
|
170 |
|
171 | ### Finances
|
172 |
|
173 | <span class="badge-githubsponsors"><a href="https://github.com/sponsors/balupton" title="Donate to this project using GitHub Sponsors"><img src="https://img.shields.io/badge/github-donate-yellow.svg" alt="GitHub Sponsors donate button" /></a></span>
|
174 | <span class="badge-thanksdev"><a href="https://thanks.dev/u/gh/bevry" title="Donate to this project using ThanksDev"><img src="https://img.shields.io/badge/thanksdev-donate-yellow.svg" alt="ThanksDev donate button" /></a></span>
|
175 | <span class="badge-patreon"><a href="https://patreon.com/bevry" title="Donate to this project using Patreon"><img src="https://img.shields.io/badge/patreon-donate-yellow.svg" alt="Patreon donate button" /></a></span>
|
176 | <span class="badge-liberapay"><a href="https://liberapay.com/bevry" title="Donate to this project using Liberapay"><img src="https://img.shields.io/badge/liberapay-donate-yellow.svg" alt="Liberapay donate button" /></a></span>
|
177 | <span class="badge-buymeacoffee"><a href="https://buymeacoffee.com/balupton" title="Donate to this project using Buy Me A Coffee"><img src="https://img.shields.io/badge/buy%20me%20a%20coffee-donate-yellow.svg" alt="Buy Me A Coffee donate button" /></a></span>
|
178 | <span class="badge-opencollective"><a href="https://opencollective.com/bevry" title="Donate to this project using Open Collective"><img src="https://img.shields.io/badge/open%20collective-donate-yellow.svg" alt="Open Collective donate button" /></a></span>
|
179 | <span class="badge-crypto"><a href="https://bevry.me/crypto" title="Donate to this project using Cryptocurrency"><img src="https://img.shields.io/badge/crypto-donate-yellow.svg" alt="crypto donate button" /></a></span>
|
180 | <span class="badge-paypal"><a href="https://bevry.me/paypal" title="Donate to this project using Paypal"><img src="https://img.shields.io/badge/paypal-donate-yellow.svg" alt="PayPal donate button" /></a></span>
|
181 |
|
182 | #### Funders
|
183 |
|
184 | - [GoVests](https://govests.com.au)
|
185 |
|
186 | #### Sponsors
|
187 |
|
188 | - [Andrew Nesbitt](https://nesbitt.io) — Software engineer and researcher
|
189 | - [Balsa](https://balsa.com) — We're Balsa, and we're building tools for builders.
|
190 | - [Codecov](https://codecov.io) — Empower developers with tools to improve code quality and testing.
|
191 | - [Poonacha Medappa](https://poonachamedappa.com)
|
192 | - [Rob Morris](https://github.com/Rob-Morris)
|
193 | - [Sentry](https://sentry.io) — Real-time crash reporting for your web apps, mobile apps, and games.
|
194 | - [Syntax](https://syntax.fm) — Syntax Podcast
|
195 |
|
196 | #### Donors
|
197 |
|
198 | - [Andrew Nesbitt](https://nesbitt.io)
|
199 | - [Armen Mkrtchian](https://mogoni.dev)
|
200 | - [Balsa](https://balsa.com)
|
201 | - [Chad](https://opencollective.com/chad8)
|
202 | - [Codecov](https://codecov.io)
|
203 | - [dr.dimitru](https://veliovgroup.com)
|
204 | - [Elliott Ditman](https://elliottditman.com)
|
205 | - [entroniq](https://gitlab.com/entroniq)
|
206 | - [GitHub](https://github.com/about)
|
207 | - [GoVests](https://govests.com.au)
|
208 | - [Hunter Beast](https://cryptoquick.com)
|
209 | - [Jean-Luc Geering](https://github.com/jlgeering)
|
210 | - [Michael Duane Mooring](https://mdm.cc)
|
211 | - [Michael Harry Scepaniak](https://michaelscepaniak.com)
|
212 | - [Mohammed Shah](https://github.com/smashah)
|
213 | - [Mr. Henry](https://mrhenry.be)
|
214 | - [Nermal](https://arjunaditya.vercel.app)
|
215 | - [Pleo](https://pleo.io)
|
216 | - [Poonacha Medappa](https://poonachamedappa.com)
|
217 | - [Rob Morris](https://github.com/Rob-Morris)
|
218 | - [Robert de Forest](https://github.com/rdeforest)
|
219 | - [Sentry](https://sentry.io)
|
220 | - [ServieJS](https://github.com/serviejs)
|
221 | - [Skunk Team](https://skunk.team)
|
222 | - [Syntax](https://syntax.fm)
|
223 | - [WriterJohnBuck](https://github.com/WriterJohnBuck)
|
224 |
|
225 |
|
226 |
|
227 |
|
228 |
|
229 | ## License
|
230 |
|
231 | Unless stated otherwise all works are:
|
232 |
|
233 | - Copyright © [Benjamin Lupton](https://balupton.com)
|
234 |
|
235 | and licensed under:
|
236 |
|
237 | - [Artistic License 2.0](http://spdx.org/licenses/Artistic-2.0.html)
|
238 |
|
239 |
|