npm package: @momsfriendlydevco/sort-keys
Description: Deep object normalization + prettification
Author: Matt Carter
Latest version: 1.1.0

@MomsFriendlyDevCo/Sort-Keys
============================
Deeply sort object keys based on first/middle/last key orders.

```javascript
import sortKeys from '@momsfriendlydevco/sort-keys';

sortKeys({
    foo: '1',
    bar: '2',
    id: '123',
    comment: 'Stuff',
}, {
    first: ['id'],
    last: ['comment'],
}); //= {id: '123', bar: '2', foo: '1', comment: 'Stuff'}
```


API
===

sortKeys(val, options)
----------------------
Syncronously shallow-clone an input value (from `val`), sorting objecy keys by criteria.
Returns a syncronous shallow clone of the input.

Options are:

| Option                   | Type                      | Default | Description                                                                                                                                                                                                                                                                                                          |
|--------------------------|---------------------------|---------|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| `first`                  | `Array` / `Set`           |         | Collection of keys to sort first, in the order specified                                                                                                                                                                                                                                                             |
| `last`                   | `Array` / `Set`           |         | Collection of keys to sort last, in the order specified                                                                                                                                                                                                                                                              |
| `keys`                   | `Object<String,Function>` |  `{}`   | Key priority lookup. Each entry should have the key as the key and the value as a two digit string prefix to use for sorting. If the lookup os a function it will be called as `(key:String,val:*)` and expected to return a two character prefix. Numeric values are converted into two digit strings automatically |
| `defaultOrder='50'`      | `String`                  | `'50'`  | Default sort order applied to items not matching any other criteria or `options.key` lookup                                                                                                                                                                                                                          |
| `defaultOrderFirst='10'` | `String`                  | `'10'`  | Default sort order applied to simple Arrays/Sets within `options.first`                                                                                                                                                                                                                                              |
| `defaultOrderLast='90'`  | `String`                  | `'90'`  | Default sort order applied to simple Arrays/Sets within `options.last`                                                                                                                                                                                                                                               |


hash(val, options)
------------------
Asyncronously (due to limitations with the native `crypto` output) hash an incoming object.
Returns a Async computed `String` hash of the input.

Options are:

| Option                | Type                                                  | Default     | Description                                                 |
|-----------------------|-------------------------------------------------------|-------------|-------------------------------------------------------------|
| `algorithm='SHA-256'` | `'SHA-1'` / `'SHA-256'` / `'SHA-384'` / `'SHA-512'`   | `'SHA-256'` | The algorithm to use, effects output string size and format |
| `encoding='base64'`   | `'hex'` / `'base64'` / `'base64Url'` / `'uint8array'` | `'base64'`  | Encoding standard for the output function                   |
| `trimBase64=true`     | `Boolean`                                             | `true`      | Trim Base64 encoded output, removing padding suffixes       |