[Pkg-javascript-commits] [node-sorted-object] 01/04: Import Upstream version 2.0.1

Paolo Greppi paolog-guest at moszumanska.debian.org
Fri Dec 23 10:31:33 UTC 2016


This is an automated email from the git hooks/post-receive script.

paolog-guest pushed a commit to branch master
in repository node-sorted-object.

commit 5a1ea06a80bffd83b7038a56a815c7aec620efe5
Author: Paolo Greppi <paolo.greppi at libpf.com>
Date:   Fri Dec 23 09:59:50 2016 +0000

    Import Upstream version 2.0.1
---
 .editorconfig        |   9 +++
 .eslintrc.json       | 203 +++++++++++++++++++++++++++++++++++++++++++++++++++
 .gitignore           |   2 +
 .travis.yml          |   5 ++
 LICENSE.txt          |  47 ++++++++++++
 README.md            |  20 +++++
 lib/sorted-object.js |  11 +++
 package.json         |  25 +++++++
 test/tests.js        |  48 ++++++++++++
 9 files changed, 370 insertions(+)

diff --git a/.editorconfig b/.editorconfig
new file mode 100644
index 0000000..911234f
--- /dev/null
+++ b/.editorconfig
@@ -0,0 +1,9 @@
+root = true
+
+[*]
+end_of_line = lf
+insert_final_newline = true
+trim_trailing_whitespace = true
+charset = utf-8
+indent_style = space
+indent_size = 4
diff --git a/.eslintrc.json b/.eslintrc.json
new file mode 100644
index 0000000..c0589db
--- /dev/null
+++ b/.eslintrc.json
@@ -0,0 +1,203 @@
+{
+  "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
+  }
+}
diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000..0c0aa04
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1,2 @@
+/node_modules/
+/npm-debug.log
diff --git a/.travis.yml b/.travis.yml
new file mode 100644
index 0000000..1927f34
--- /dev/null
+++ b/.travis.yml
@@ -0,0 +1,5 @@
+language: node_js
+node_js:
+  - stable
+script:
+  npm run lint && npm test
diff --git a/LICENSE.txt b/LICENSE.txt
new file mode 100644
index 0000000..2edd064
--- /dev/null
+++ b/LICENSE.txt
@@ -0,0 +1,47 @@
+Dual licensed under WTFPL and MIT:
+
+---
+
+Copyright © 2014–2016 Domenic Denicola <d at domenic.me>
+
+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 <sam at hocevar.net>
+
+ 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 <d at domenic.me>
+
+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.
diff --git a/README.md b/README.md
new file mode 100644
index 0000000..d3f12a2
--- /dev/null
+++ b/README.md
@@ -0,0 +1,20 @@
+# 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));
+```
diff --git a/lib/sorted-object.js b/lib/sorted-object.js
new file mode 100644
index 0000000..1b3fe81
--- /dev/null
+++ b/lib/sorted-object.js
@@ -0,0 +1,11 @@
+"use strict";
+
+module.exports = function (input) {
+    var output = {};
+
+    Object.keys(input).sort().forEach(function (key) {
+        output[key] = input[key];
+    });
+
+    return output;
+};
diff --git a/package.json b/package.json
new file mode 100644
index 0000000..2e81f36
--- /dev/null
+++ b/package.json
@@ -0,0 +1,25 @@
+{
+  "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 <d at domenic.me> (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"
+  }
+}
diff --git a/test/tests.js b/test/tests.js
new file mode 100644
index 0000000..8458308
--- /dev/null
+++ b/test/tests.js
@@ -0,0 +1,48 @@
+"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();
+});

-- 
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/pkg-javascript/node-sorted-object.git



More information about the Pkg-javascript-commits mailing list