Skip to content

Commit

Permalink
feat: rewrite in TS, start using named exports
Browse files Browse the repository at this point in the history
BREAKING CHANGE: previously: "import noNewKeys from ..." - now "import { noNewKeys } from ..."
  • Loading branch information
revelt committed Jan 7, 2021
1 parent 63faf16 commit 589c048
Show file tree
Hide file tree
Showing 17 changed files with 482 additions and 394 deletions.
3 changes: 2 additions & 1 deletion packages/object-no-new-keys/.npmignore
@@ -1,4 +1,4 @@
# .... generated using www.npmjs.com/package/lect ....
# generated using codsen.com/os/lect
#
#
# __ ______ ______ ______
Expand All @@ -23,3 +23,4 @@ test
.prettierignore
rollup.config.js
testStats.md
tsconfig.json
6 changes: 3 additions & 3 deletions packages/object-no-new-keys/README.md
Expand Up @@ -34,10 +34,10 @@ npm i object-no-new-keys

```js
import { strict as assert } from "assert";
import nnk from "object-no-new-keys";
import { noNewKeys } from "object-no-new-keys";

assert.deepEqual(
nnk(
noNewKeys(
{
a: {
b: "b",
Expand All @@ -63,6 +63,6 @@ Please [visit codsen.com](https://codsen.com/os/object-no-new-keys/) for a full

MIT License

Copyright (c) 2010-2020 Roy Revelt and other contributors
Copyright (c) 2010-2021 Roy Revelt and other contributors

<img src="https://codsen.com/images/png-codsen-ok.png" width="98" alt="ok" align="center"> <img src="https://codsen.com/images/png-codsen-1.png" width="148" alt="codsen" align="center"> <img src="https://codsen.com/images/png-codsen-star-small.png" width="32" alt="star" align="center">
2 changes: 1 addition & 1 deletion packages/object-no-new-keys/coverage/coverage-summary.json
@@ -1 +1 @@
{"total":{"lines":{"total":35,"covered":34,"skipped":0,"pct":97.14},"statements":{"total":37,"covered":36,"skipped":0,"pct":97.3},"functions":{"total":6,"covered":6,"skipped":0,"pct":100},"branches":{"total":43,"covered":42,"skipped":0,"pct":97.67}}}
{"total":{"lines":{"total":30,"covered":30,"skipped":0,"pct":100},"statements":{"total":34,"covered":34,"skipped":0,"pct":100},"functions":{"total":6,"covered":6,"skipped":0,"pct":100},"branches":{"total":39,"covered":39,"skipped":0,"pct":100}}}
123 changes: 40 additions & 83 deletions packages/object-no-new-keys/dist/object-no-new-keys.cjs.js
Expand Up @@ -9,140 +9,97 @@

'use strict';

function _typeof(obj) {
"@babel/helpers - typeof";

if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") {
_typeof = function (obj) {
return typeof obj;
};
} else {
_typeof = function (obj) {
return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj;
};
}

return _typeof(obj);
}

function _defineProperty(obj, key, value) {
if (key in obj) {
Object.defineProperty(obj, key, {
value: value,
enumerable: true,
configurable: true,
writable: true
});
} else {
obj[key] = value;
}

return obj;
}

function ownKeys(object, enumerableOnly) {
var keys = Object.keys(object);
Object.defineProperty(exports, '__esModule', { value: true });

if (Object.getOwnPropertySymbols) {
var symbols = Object.getOwnPropertySymbols(object);
if (enumerableOnly) symbols = symbols.filter(function (sym) {
return Object.getOwnPropertyDescriptor(object, sym).enumerable;
});
keys.push.apply(keys, symbols);
}
var _objectSpread = require('@babel/runtime/helpers/objectSpread2');

return keys;
}
function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }

function _objectSpread2(target) {
for (var i = 1; i < arguments.length; i++) {
var source = arguments[i] != null ? arguments[i] : {};

if (i % 2) {
ownKeys(Object(source), true).forEach(function (key) {
_defineProperty(target, key, source[key]);
});
} else if (Object.getOwnPropertyDescriptors) {
Object.defineProperties(target, Object.getOwnPropertyDescriptors(source));
} else {
ownKeys(Object(source)).forEach(function (key) {
Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key));
});
}
}
var _objectSpread__default = /*#__PURE__*/_interopDefaultLegacy(_objectSpread);

return target;
}
var version = "2.10.0";

function isObj(something) {
return something && _typeof(something) === "object" && !Array.isArray(something);
return something && typeof something === "object" && !Array.isArray(something);
}
function objectNoNewKeys(inputOuter, referenceOuter, originalOptsOuter) {

function noNewKeys(inputOuter, referenceOuter, originalOptsOuter) {
if (originalOptsOuter && !isObj(originalOptsOuter)) {
throw new TypeError("object-no-new-keys/objectNoNewKeys(): [THROW_ID_02] opts should be a plain object. It was given as ".concat(JSON.stringify(originalOptsOuter, null, 4), " (type ").concat(_typeof(originalOptsOuter), ")"));
throw new TypeError("object-no-new-keys/noNewKeys(): [THROW_ID_02] opts should be a plain object. It was given as " + JSON.stringify(originalOptsOuter, null, 4) + " (type " + typeof originalOptsOuter + ")");
}

var defaults = {
mode: 2
};
var optsOuter = _objectSpread2(_objectSpread2({}, defaults), originalOptsOuter);

var optsOuter = _objectSpread__default['default'](_objectSpread__default['default']({}, defaults), originalOptsOuter);

if (typeof optsOuter.mode === "string" && ["1", "2"].includes(optsOuter.mode)) {
if (optsOuter.mode === "1") {
optsOuter.mode = 1;
} else {
optsOuter.mode = 2;
}
optsOuter.mode = +optsOuter.mode;
} else if (![1, 2].includes(optsOuter.mode)) {
throw new TypeError("object-no-new-keys/objectNoNewKeys(): [THROW_ID_01] opts.mode should be \"1\" or \"2\" (string or number).");
}

function objectNoNewKeysInternal(input, reference, opts, innerVar) {
var temp;
if (innerVar === undefined) {
innerVar = {
path: "",
res: []
};
}

if (isObj(input)) {
if (isObj(reference)) {
// input and reference both are objects.
// match the keys and record any unique-ones.
// then traverse recursively.
Object.keys(input).forEach(function (key) {
if (!Object.prototype.hasOwnProperty.call(reference, key)) {
temp = innerVar.path.length > 0 ? "".concat(innerVar.path, ".").concat(key) : key;
temp = innerVar.path.length > 0 ? innerVar.path + "." + key : key;
innerVar.res.push(temp);
} else if (isObj(input[key]) || Array.isArray(input[key])) {
temp = {
path: innerVar.path.length > 0 ? "".concat(innerVar.path, ".").concat(key) : key,
path: innerVar.path.length > 0 ? innerVar.path + "." + key : key,
res: innerVar.res
};
innerVar.res = objectNoNewKeysInternal(input[key], reference[key], opts, temp).res;
}
});
} else {
// input is object, but reference is not.
// record all the keys of the input, but don't traverse deeper
innerVar.res = innerVar.res.concat(Object.keys(input).map(function (key) {
return innerVar.path.length > 0 ? "".concat(innerVar.path, ".").concat(key) : key;
return innerVar.path.length > 0 ? innerVar.path + "." + key : key;
}));
}
} else if (Array.isArray(input)) {
if (Array.isArray(reference)) {
// both input and reference are arrays.
// traverse each
for (var i = 0, len = input.length; i < len; i++) {
temp = {
path: "".concat(innerVar.path.length > 0 ? innerVar.path : "", "[").concat(i, "]"),
path: (innerVar.path.length > 0 ? innerVar.path : "") + "[" + i + "]",
res: innerVar.res
};

if (opts.mode === 2) {
innerVar.res = objectNoNewKeysInternal(input[i], reference[0], opts, temp).res;
} else {
innerVar.res = objectNoNewKeysInternal(input[i], reference[i], opts, temp).res;
}
}
} else {
innerVar.res = innerVar.res.concat(input.map(function (el, i) {
return "".concat(innerVar.path.length > 0 ? innerVar.path : "", "[").concat(i, "]");
// mismatch
// traverse all elements of the input and put their locations to innerVar.res
innerVar.res = innerVar.res.concat(input.map(function (_el, i) {
return (innerVar.path.length > 0 ? innerVar.path : "") + "[" + i + "]";
}));
}
}

return innerVar;
}
return objectNoNewKeysInternal(inputOuter, referenceOuter, optsOuter).res;

return objectNoNewKeysInternal(inputOuter, referenceOuter, optsOuter, {
path: "",
res: []
}).res;
}

module.exports = objectNoNewKeys;
exports.noNewKeys = noNewKeys;
exports.version = version;

0 comments on commit 589c048

Please sign in to comment.