[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