pax_global_header00006660000000000000000000000064127651146450014525gustar00rootroot0000000000000052 comment=87105deb13d4f4151b2abd1a78d27a5216e3e79d sorted-object-2.0.1/000077500000000000000000000000001276511464500142715ustar00rootroot00000000000000sorted-object-2.0.1/.editorconfig000066400000000000000000000002231276511464500167430ustar00rootroot00000000000000root = true [*] end_of_line = lf insert_final_newline = true trim_trailing_whitespace = true charset = utf-8 indent_style = space indent_size = 4 sorted-object-2.0.1/.eslintrc.json000066400000000000000000000127211276511464500170700ustar00rootroot00000000000000{ "root": true, "env": { "node": true, "es6": false }, "parserOptions": { "ecmaVersion": 5 }, "rules": { // Possible errors "comma-dangle": [2, "never"], "no-cond-assign": [2, "except-parens"], "no-console": 2, "no-constant-condition": 2, "no-control-regex": 2, "no-debugger": 2, "no-dupe-args": 2, "no-dupe-keys": 2, "no-duplicate-case": 2, "no-empty": 2, "no-empty-character-class": 2, "no-ex-assign": 2, "no-extra-boolean-cast": 2, "no-extra-parens": 0, // https://github.com/eslint/eslint/issues/3065 "no-extra-semi": 2, "no-func-assign": 2, "no-inner-declarations": 0, "no-invalid-regexp": 2, "no-irregular-whitespace": 2, "no-negated-in-lhs": 2, "no-obj-calls": 2, "no-regex-spaces": 2, "no-sparse-arrays": 2, "no-unexpected-multiline": 2, "no-unreachable": 2, "use-isnan": 2, "valid-jsdoc": 0, "valid-typeof": 2, // Best practices "accessor-pairs": 2, "array-callback-return": 2, "block-scoped-var": 0, "complexity": 0, "consistent-return": 2, "curly": [2, "all"], "default-case": 0, "dot-location": [2, "property"], "dot-notation": 2, "eqeqeq": 2, "guard-for-in": 0, "no-alert": 2, "no-caller": 2, "no-case-declarations": 2, "no-div-regex": 0, "no-else-return": 2, "no-empty-pattern": 2, "no-eq-null": 2, "no-eval": 2, "no-extend-native": 2, "no-extra-bind": 2, "no-extra-label": 2, "no-fallthrough": 2, "no-floating-decimal": 2, "no-implicit-coercion": 2, "no-implicit-globals": 2, "no-implied-eval": 0, "no-invalid-this": 2, "no-iterator": 2, "no-labels": [2, { "allowLoop": true }], "no-lone-blocks": 2, "no-loop-func": 0, "no-magic-numbers": 2, "no-multi-spaces": 2, "no-multi-str": 2, "no-native-reassign": 2, "no-new": 2, "no-new-func": 2, "no-new-wrappers": 2, "no-octal": 2, "no-octal-escape": 2, "no-param-reassign": 0, "no-process-env": 2, "no-proto": 2, "no-redeclare": 2, "no-return-assign": [2, "always"], "no-script-url": 2, "no-self-assign": 2, "no-self-compare": 2, "no-sequences": 2, "no-throw-literal": 2, "no-unmodified-loop-condition": 2, "no-unused-expressions": 2, "no-unused-labels": 2, "no-useless-call": 2, "no-useless-concat": 2, "no-void": 2, "no-warning-comments": 0, "no-with": 2, "radix": [2, "as-needed"], "vars-on-top": 0, "wrap-iife": [2, "outside"], "yoda": [2, "never"], // Strict Mode "strict": [2, "global"], // Variables "init-declarations": 0, "no-catch-shadow": 2, "no-delete-var": 2, "no-label-var": 2, "no-shadow": 2, "no-shadow-restricted-names": 2, "no-undef": 2, "no-undef-init": 2, "no-undefined": 0, "no-unused-vars": 2, "no-use-before-define": [2, "nofunc"], // Node.js and CommonJS "callback-return": 0, "global-require": 2, "handle-callback-err": 2, "no-mixed-requires": [2, true], "no-new-require": 2, "no-path-concat": 2, "no-process-exit": 2, "no-restricted-imports": 0, "no-restricted-modules": 0, "no-sync": 0, // Stylistic Issues "array-bracket-spacing": [2, "never"], "block-spacing": [2, "always"], "brace-style": [2, "1tbs", { "allowSingleLine": false }], "camelcase": [2, { "properties": "always" }], "comma-spacing": [2, { "before": false, "after": true }], "comma-style": [2, "last"], "computed-property-spacing": [2, "never"], "consistent-this": 0, "eol-last": 2, "func-names": 0, "func-style": [2, "declaration"], "id-blacklist": 0, "id-length": 0, "id-match": 0, "indent": [2, 4, { "SwitchCase": 1 }], "jsx-quotes": 0, "key-spacing": [2, { "beforeColon": false, "afterColon": true, "mode": "strict" }], "keyword-spacing": [2, { "before": true, "after": true }], "linebreak-style": [2, "unix"], "lines-around-comment": 0, "max-depth": 0, "max-len": [2, 120], "max-nested-callbacks": 0, "max-params": 0, "max-statements": 0, "new-cap": 2, "new-parens": 2, "newline-after-var": 0, "newline-per-chained-call": 0, "no-array-constructor": 2, "no-bitwise": 0, "no-continue": 0, "no-inline-comments": 0, "no-lonely-if": 2, "no-mixed-spaces-and-tabs": 2, "no-multiple-empty-lines": 2, "no-negated-condition": 0, "no-nested-ternary": 2, "no-new-object": 2, "no-plusplus": 0, "no-restricted-syntax": 0, "no-spaced-func": 2, "no-ternary": 0, "no-trailing-spaces": 2, "no-underscore-dangle": 2, "no-unneeded-ternary": 2, "no-whitespace-before-property": 2, "object-curly-spacing": [2, "always"], "one-var": [2, "never"], "one-var-declaration-per-line": [2, "initializations"], "operator-assignment": [2, "always"], "operator-linebreak": [2, "after"], "padded-blocks": [2, "never"], "quote-props": [2, "as-needed"], "quotes": [2, "double"], "require-jsdoc": 0, "semi": [2, "always"], "semi-spacing": 2, "sort-imports": 0, "sort-vars": 0, "space-before-blocks": [2, "always"], "space-before-function-paren": [2, { "anonymous": "always", "named": "never" }], "space-in-parens": [2, "never"], "space-infix-ops": 2, "space-unary-ops": [2, { "words": true, "nonwords": false }], "spaced-comment": [2, "always", { "markers": ["///"] }], "wrap-regex": 0 } } sorted-object-2.0.1/.gitignore000066400000000000000000000000361276511464500162600ustar00rootroot00000000000000/node_modules/ /npm-debug.log sorted-object-2.0.1/.travis.yml000066400000000000000000000001111276511464500163730ustar00rootroot00000000000000language: node_js node_js: - stable script: npm run lint && npm test sorted-object-2.0.1/LICENSE.txt000066400000000000000000000035351276511464500161220ustar00rootroot00000000000000Dual licensed under WTFPL and MIT: --- Copyright © 2014–2016 Domenic Denicola This work is free. You can redistribute it and/or modify it under the terms of the Do What The Fuck You Want To Public License, Version 2, as published by Sam Hocevar. See below for more details. DO WHAT THE FUCK YOU WANT TO PUBLIC LICENSE Version 2, December 2004 Copyright (C) 2004 Sam Hocevar Everyone is permitted to copy and distribute verbatim or modified copies of this license document, and changing it is allowed as long as the name is changed. DO WHAT THE FUCK YOU WANT TO PUBLIC LICENSE TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION 0. You just DO WHAT THE FUCK YOU WANT TO. --- The MIT License (MIT) Copyright © 2014–2016 Domenic Denicola Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. sorted-object-2.0.1/README.md000066400000000000000000000017741276511464500155610ustar00rootroot00000000000000# Get a Version of an Object with Sorted Keys Although objects in JavaScript are theoretically unsorted, in practice most engines use insertion order—at least, ignoring numeric keys. This manifests itself most prominently when dealing with an object's JSON serialization. So, for example, you might be trying to serialize some object to a JSON file. But every time you write it, it ends up being output in a different order, depending on how you created it in the first place! This makes for some ugly diffs. **sorted-object** gives you the answer. Just use this package to create a version of your object with its keys sorted before serializing, and you'll get a consistent order every time. ```js var sortedObject = require("sorted-object"); var objectToSerialize = generateStuffNondeterministically(); // Before: fs.writeFileSync("dest.json", JSON.stringify(objectToSerialize)); // After: var sortedVersion = sortedObject(objectToSerialize); fs.writeFileSync("dest.json", JSON.stringify(sortedVersion)); ``` sorted-object-2.0.1/lib/000077500000000000000000000000001276511464500150375ustar00rootroot00000000000000sorted-object-2.0.1/lib/sorted-object.js000066400000000000000000000003011276511464500201330ustar00rootroot00000000000000"use strict"; module.exports = function (input) { var output = {}; Object.keys(input).sort().forEach(function (key) { output[key] = input[key]; }); return output; }; sorted-object-2.0.1/package.json000066400000000000000000000010251276511464500165550ustar00rootroot00000000000000{ "name": "sorted-object", "description": "Returns a copy of an object with its keys sorted", "keywords": [ "sort", "keys", "object" ], "version": "2.0.1", "author": "Domenic Denicola (https://domenic.me/)", "license": "(WTFPL OR MIT)", "repository": "domenic/sorted-object", "main": "lib/sorted-object.js", "files": [ "lib/" ], "scripts": { "test": "tape test/tests.js", "lint": "eslint ." }, "devDependencies": { "eslint": "^2.4.0", "tape": "^4.5.1" } } sorted-object-2.0.1/test/000077500000000000000000000000001276511464500152505ustar00rootroot00000000000000sorted-object-2.0.1/test/tests.js000066400000000000000000000022411276511464500167470ustar00rootroot00000000000000"use strict"; var test = require("tape"); var sortedObject = require(".."); test("does not return the same object", function (t) { var input = {}; t.notEqual(sortedObject(input), input); t.end(); }); test("works for empty objects", function (t) { t.deepEqual(sortedObject({}), {}); t.end(); }); test("returns an object with Object.prototype as its prototype", function (t) { t.equal(Object.getPrototypeOf(sortedObject({})), Object.prototype); t.end(); }); test("does not disturb already-sorted object", function (t) { var input = { a: 1, b: 2, c: 3 }; var output = sortedObject(input); var desired = { a: 1, b: 2, c: 3 }; t.deepEqual(output, desired); t.end(); }); test("sorts out-of-order object", function (t) { var input = { c: 3, b: 2, a: 1 }; var output = sortedObject(input); var desired = { a: 1, b: 2, c: 3 }; t.deepEqual(output, desired); t.end(); }); test("sorts case-sensitively", function (t) { var input = { hello: 3, Hi: 2, HELLO: 1, hi: 4 }; var output = sortedObject(input); var desired = { HELLO: 1, Hi: 2, hello: 3, hi: 4 }; t.deepEqual(output, desired); t.end(); });