Comparing version 0.5.10 to 1.0.0
@@ -0,5 +1,6 @@ | ||
export function clone<T>(target: T): T; | ||
export function compare(el1: unknown, el2: unknown): boolean; | ||
export function is_object(obj: unknown): boolean; | ||
export function is_object_literal(obj: unknown): boolean; | ||
export function compare(el1: unknown, el2: unknown): boolean; | ||
export function clone<T>(target: T): T; | ||
@@ -44,4 +45,4 @@ type Merge<T extends object[]> = T extends [ | ||
: U[K] extends object | ||
? MergeObjects<T[K], U[K]> | ||
: T[K] | ||
? MergeObjects<T[K], U[K]> | ||
: T[K] | ||
: U[K] | ||
@@ -58,6 +59,2 @@ : K extends keyof T | ||
export function snake_case_str( | ||
source: string, | ||
): string; | ||
type SnakeCase<S extends string> = S extends `${infer T}${infer U}` | ||
@@ -79,1 +76,3 @@ ? `${T extends Uppercase<T> ? "_" : ""}${Lowercase<T>}${SnakeCase<U>}` | ||
): SnakeCaseKeys<T>; | ||
export function snake_case_str(source: string): string; |
@@ -11,4 +11,37 @@ function _typeof(o) { | ||
function merge() { | ||
return mutate.apply(void 0, [{}].concat(Array.prototype.slice.call(arguments))); | ||
function compare(el1, el2) { | ||
if (is_object_literal(el1)) { | ||
if (!is_object_literal(el2)) { | ||
return false; | ||
} | ||
var keys1 = Object.keys(el1).sort(); | ||
var keys2 = Object.keys(el2).sort(); | ||
if (keys1.length !== keys2.length) { | ||
return false; | ||
} | ||
for (var i = 0; i < keys1.length; i++) { | ||
var key = keys1[i]; | ||
if (key !== keys2[i]) { | ||
return false; | ||
} | ||
if (!compare(el1[key], el2[key])) { | ||
return false; | ||
} | ||
} | ||
} else if (Array.isArray(el1)) { | ||
if (!Array.isArray(el2)) { | ||
return false; | ||
} | ||
if (el1.length !== el2.length) { | ||
return false; | ||
} | ||
for (var _i = 0; _i < el1.length; _i++) { | ||
if (!compare(el1[_i], el2[_i])) { | ||
return false; | ||
} | ||
} | ||
} else if (el1 !== el2) { | ||
return false; | ||
} | ||
return true; | ||
} | ||
@@ -26,2 +59,21 @@ function clone(target) { | ||
} | ||
function is_object(obj) { | ||
return obj && _typeof(obj) === "object" && !Array.isArray(obj); | ||
} | ||
function is_object_literal(obj) { | ||
var test = obj; | ||
if (_typeof(obj) !== "object" || obj === null) { | ||
return false; | ||
} else { | ||
if (Object.getPrototypeOf(test) === null) { | ||
return true; | ||
} | ||
while (Object.getPrototypeOf(test = Object.getPrototypeOf(test)) !== null) { | ||
} | ||
return Object.getPrototypeOf(obj) === test; | ||
} | ||
} | ||
function merge() { | ||
return mutate.apply(void 0, [{}].concat(Array.prototype.slice.call(arguments))); | ||
} | ||
function mutate() { | ||
@@ -35,4 +87,4 @@ var target = arguments[0]; | ||
} | ||
for (var _i = 0, _Object$keys = Object.keys(source); _i < _Object$keys.length; _i++) { | ||
var name = _Object$keys[_i]; | ||
for (var _i2 = 0, _Object$keys = Object.keys(source); _i2 < _Object$keys.length; _i2++) { | ||
var name = _Object$keys[_i2]; | ||
if (/__proto__|prototype/.test(name)) { | ||
@@ -64,4 +116,4 @@ // See | ||
var u = typeof convert === "number" && convert > 0 ? convert - 1 : convert; | ||
for (var _i2 = 0, _Object$keys2 = Object.keys(source); _i2 < _Object$keys2.length; _i2++) { | ||
var name = _Object$keys2[_i2]; | ||
for (var _i3 = 0, _Object$keys2 = Object.keys(source); _i3 < _Object$keys2.length; _i3++) { | ||
var name = _Object$keys2[_i3]; | ||
var src = source[name]; | ||
@@ -78,58 +130,6 @@ if (convert) { | ||
} | ||
function compare(el1, el2) { | ||
if (is_object_literal(el1)) { | ||
if (!is_object_literal(el2)) { | ||
return false; | ||
} | ||
var keys1 = Object.keys(el1).sort(); | ||
var keys2 = Object.keys(el2).sort(); | ||
if (keys1.length !== keys2.length) { | ||
return false; | ||
} | ||
for (var i = 0; i < keys1.length; i++) { | ||
var key = keys1[i]; | ||
if (key !== keys2[i]) { | ||
return false; | ||
} | ||
if (!compare(el1[key], el2[key])) { | ||
return false; | ||
} | ||
} | ||
} else if (Array.isArray(el1)) { | ||
if (!Array.isArray(el2)) { | ||
return false; | ||
} | ||
if (el1.length !== el2.length) { | ||
return false; | ||
} | ||
for (var _i3 = 0; _i3 < el1.length; _i3++) { | ||
if (!compare(el1[_i3], el2[_i3])) { | ||
return false; | ||
} | ||
} | ||
} else if (el1 !== el2) { | ||
return false; | ||
} | ||
return true; | ||
} | ||
function snake_case_str(str) { | ||
return str.replace(/([a-z\d])([A-Z]+)/g, "$1_$2").replace(/[-\s]+/g, "_").toLowerCase(); | ||
} | ||
function is_object(obj) { | ||
return obj && _typeof(obj) === "object" && !Array.isArray(obj); | ||
} | ||
function is_object_literal(obj) { | ||
var test = obj; | ||
if (_typeof(obj) !== "object" || obj === null) { | ||
return false; | ||
} else { | ||
if (Object.getPrototypeOf(test) === null) { | ||
return true; | ||
} | ||
while (Object.getPrototypeOf(test = Object.getPrototypeOf(test)) !== null) { | ||
} | ||
return Object.getPrototypeOf(obj) === test; | ||
} | ||
} | ||
export { clone, compare, is_object, is_object_literal, merge, mutate, snake_case, snake_case_str }; |
@@ -17,4 +17,37 @@ (function (global, factory) { | ||
function merge() { | ||
return mutate.apply(void 0, [{}].concat(Array.prototype.slice.call(arguments))); | ||
function compare(el1, el2) { | ||
if (is_object_literal(el1)) { | ||
if (!is_object_literal(el2)) { | ||
return false; | ||
} | ||
var keys1 = Object.keys(el1).sort(); | ||
var keys2 = Object.keys(el2).sort(); | ||
if (keys1.length !== keys2.length) { | ||
return false; | ||
} | ||
for (var i = 0; i < keys1.length; i++) { | ||
var key = keys1[i]; | ||
if (key !== keys2[i]) { | ||
return false; | ||
} | ||
if (!compare(el1[key], el2[key])) { | ||
return false; | ||
} | ||
} | ||
} else if (Array.isArray(el1)) { | ||
if (!Array.isArray(el2)) { | ||
return false; | ||
} | ||
if (el1.length !== el2.length) { | ||
return false; | ||
} | ||
for (var _i = 0; _i < el1.length; _i++) { | ||
if (!compare(el1[_i], el2[_i])) { | ||
return false; | ||
} | ||
} | ||
} else if (el1 !== el2) { | ||
return false; | ||
} | ||
return true; | ||
} | ||
@@ -32,2 +65,21 @@ function clone(target) { | ||
} | ||
function is_object(obj) { | ||
return obj && _typeof(obj) === "object" && !Array.isArray(obj); | ||
} | ||
function is_object_literal(obj) { | ||
var test = obj; | ||
if (_typeof(obj) !== "object" || obj === null) { | ||
return false; | ||
} else { | ||
if (Object.getPrototypeOf(test) === null) { | ||
return true; | ||
} | ||
while (Object.getPrototypeOf(test = Object.getPrototypeOf(test)) !== null) { | ||
} | ||
return Object.getPrototypeOf(obj) === test; | ||
} | ||
} | ||
function merge() { | ||
return mutate.apply(void 0, [{}].concat(Array.prototype.slice.call(arguments))); | ||
} | ||
function mutate() { | ||
@@ -41,4 +93,4 @@ var target = arguments[0]; | ||
} | ||
for (var _i = 0, _Object$keys = Object.keys(source); _i < _Object$keys.length; _i++) { | ||
var name = _Object$keys[_i]; | ||
for (var _i2 = 0, _Object$keys = Object.keys(source); _i2 < _Object$keys.length; _i2++) { | ||
var name = _Object$keys[_i2]; | ||
if (/__proto__|prototype/.test(name)) { | ||
@@ -70,4 +122,4 @@ // See | ||
var u = typeof convert === "number" && convert > 0 ? convert - 1 : convert; | ||
for (var _i2 = 0, _Object$keys2 = Object.keys(source); _i2 < _Object$keys2.length; _i2++) { | ||
var name = _Object$keys2[_i2]; | ||
for (var _i3 = 0, _Object$keys2 = Object.keys(source); _i3 < _Object$keys2.length; _i3++) { | ||
var name = _Object$keys2[_i3]; | ||
var src = source[name]; | ||
@@ -84,57 +136,5 @@ if (convert) { | ||
} | ||
function compare(el1, el2) { | ||
if (is_object_literal(el1)) { | ||
if (!is_object_literal(el2)) { | ||
return false; | ||
} | ||
var keys1 = Object.keys(el1).sort(); | ||
var keys2 = Object.keys(el2).sort(); | ||
if (keys1.length !== keys2.length) { | ||
return false; | ||
} | ||
for (var i = 0; i < keys1.length; i++) { | ||
var key = keys1[i]; | ||
if (key !== keys2[i]) { | ||
return false; | ||
} | ||
if (!compare(el1[key], el2[key])) { | ||
return false; | ||
} | ||
} | ||
} else if (Array.isArray(el1)) { | ||
if (!Array.isArray(el2)) { | ||
return false; | ||
} | ||
if (el1.length !== el2.length) { | ||
return false; | ||
} | ||
for (var _i3 = 0; _i3 < el1.length; _i3++) { | ||
if (!compare(el1[_i3], el2[_i3])) { | ||
return false; | ||
} | ||
} | ||
} else if (el1 !== el2) { | ||
return false; | ||
} | ||
return true; | ||
} | ||
function snake_case_str(str) { | ||
return str.replace(/([a-z\d])([A-Z]+)/g, "$1_$2").replace(/[-\s]+/g, "_").toLowerCase(); | ||
} | ||
function is_object(obj) { | ||
return obj && _typeof(obj) === "object" && !Array.isArray(obj); | ||
} | ||
function is_object_literal(obj) { | ||
var test = obj; | ||
if (_typeof(obj) !== "object" || obj === null) { | ||
return false; | ||
} else { | ||
if (Object.getPrototypeOf(test) === null) { | ||
return true; | ||
} | ||
while (Object.getPrototypeOf(test = Object.getPrototypeOf(test)) !== null) { | ||
} | ||
return Object.getPrototypeOf(obj) === test; | ||
} | ||
} | ||
@@ -141,0 +141,0 @@ exports.clone = clone; |
@@ -0,5 +1,6 @@ | ||
export function clone<T>(target: T): T; | ||
export function compare(el1: unknown, el2: unknown): boolean; | ||
export function is_object(obj: unknown): boolean; | ||
export function is_object_literal(obj: unknown): boolean; | ||
export function compare(el1: unknown, el2: unknown): boolean; | ||
export function clone<T>(target: T): T; | ||
@@ -44,4 +45,4 @@ type Merge<T extends object[]> = T extends [ | ||
: U[K] extends object | ||
? MergeObjects<T[K], U[K]> | ||
: T[K] | ||
? MergeObjects<T[K], U[K]> | ||
: T[K] | ||
: U[K] | ||
@@ -58,6 +59,2 @@ : K extends keyof T | ||
export function snake_case_str( | ||
source: string, | ||
): string; | ||
type SnakeCase<S extends string> = S extends `${infer T}${infer U}` | ||
@@ -79,1 +76,3 @@ ? `${T extends Uppercase<T> ? "_" : ""}${Lowercase<T>}${SnakeCase<U>}` | ||
): SnakeCaseKeys<T>; | ||
export function snake_case_str(source: string): string; |
120
lib/index.js
@@ -1,3 +0,36 @@ | ||
export function merge() { | ||
return mutate({}, ...arguments); | ||
export function compare(el1, el2) { | ||
if (is_object_literal(el1)) { | ||
if (!is_object_literal(el2)) { | ||
return false; | ||
} | ||
const keys1 = Object.keys(el1).sort(); | ||
const keys2 = Object.keys(el2).sort(); | ||
if (keys1.length !== keys2.length) { | ||
return false; | ||
} | ||
for (let i = 0; i < keys1.length; i++) { | ||
const key = keys1[i]; | ||
if (key !== keys2[i]) { | ||
return false; | ||
} | ||
if (!compare(el1[key], el2[key])) { | ||
return false; | ||
} | ||
} | ||
} else if (Array.isArray(el1)) { | ||
if (!Array.isArray(el2)) { | ||
return false; | ||
} | ||
if (el1.length !== el2.length) { | ||
return false; | ||
} | ||
for (let i = 0; i < el1.length; i++) { | ||
if (!compare(el1[i], el2[i])) { | ||
return false; | ||
} | ||
} | ||
} else if (el1 !== el2) { | ||
return false; | ||
} | ||
return true; | ||
} | ||
@@ -15,2 +48,27 @@ | ||
export function is_object(obj) { | ||
return obj && typeof obj === "object" && !Array.isArray(obj); | ||
} | ||
export function is_object_literal(obj) { | ||
let test = obj; | ||
if (typeof obj !== "object" || obj === null) { | ||
return false; | ||
} else { | ||
if (Object.getPrototypeOf(test) === null) { | ||
return true; | ||
} | ||
while ( | ||
Object.getPrototypeOf((test = Object.getPrototypeOf(test))) !== null | ||
) { | ||
true; | ||
} | ||
return Object.getPrototypeOf(obj) === test; | ||
} | ||
} | ||
export function merge() { | ||
return mutate({}, ...arguments); | ||
} | ||
export function mutate() { | ||
@@ -63,39 +121,2 @@ let target = arguments[0]; | ||
export function compare(el1, el2) { | ||
if (is_object_literal(el1)) { | ||
if (!is_object_literal(el2)) { | ||
return false; | ||
} | ||
const keys1 = Object.keys(el1).sort(); | ||
const keys2 = Object.keys(el2).sort(); | ||
if (keys1.length !== keys2.length) { | ||
return false; | ||
} | ||
for (let i = 0; i < keys1.length; i++) { | ||
const key = keys1[i]; | ||
if (key !== keys2[i]) { | ||
return false; | ||
} | ||
if (!compare(el1[key], el2[key])) { | ||
return false; | ||
} | ||
} | ||
} else if (Array.isArray(el1)) { | ||
if (!Array.isArray(el2)) { | ||
return false; | ||
} | ||
if (el1.length !== el2.length) { | ||
return false; | ||
} | ||
for (let i = 0; i < el1.length; i++) { | ||
if (!compare(el1[i], el2[i])) { | ||
return false; | ||
} | ||
} | ||
} else if (el1 !== el2) { | ||
return false; | ||
} | ||
return true; | ||
} | ||
export function snake_case_str(str) { | ||
@@ -107,22 +128,1 @@ return str | ||
} | ||
export function is_object(obj) { | ||
return obj && typeof obj === "object" && !Array.isArray(obj); | ||
} | ||
export function is_object_literal(obj) { | ||
let test = obj; | ||
if (typeof obj !== "object" || obj === null) { | ||
return false; | ||
} else { | ||
if (Object.getPrototypeOf(test) === null) { | ||
return true; | ||
} | ||
while ( | ||
Object.getPrototypeOf((test = Object.getPrototypeOf(test))) !== null | ||
) { | ||
true; | ||
} | ||
return Object.getPrototypeOf(obj) === test; | ||
} | ||
} |
{ | ||
"name": "mixme", | ||
"description": "A library for recursively merging JavaScript objects", | ||
"version": "0.5.10", | ||
"version": "1.0.0", | ||
"author": "David Worms <david@adaltas.com> (https://www.adaltas.com)", | ||
@@ -6,0 +6,0 @@ "contributors": [ |
@@ -15,24 +15,16 @@ | ||
### Function `merge(...data)` | ||
The API is minimalist. The most popular functions are `merge`, `mutate` and `is_object_literal`. | ||
The API is minimalist, pass as many literal objects as you wish, they will all be merged. This function is immutable, the source objects won't be altered. | ||
### Function `compare(item_1, item_2)` | ||
Compare two items and return true if their values match. | ||
```js | ||
import { merge } from "mixme" | ||
import { compare } from "mixme" | ||
const target = merge({a: "1"}, {b: "2"}); | ||
// target is {a: "1", b: "2"} | ||
``` | ||
compare([{a: 1}], [{a: 1}]) | ||
// Return true | ||
### Function `mutate(...data)` | ||
Use the `mutate` function to enrich an object. The first argument will be mutated: | ||
```js | ||
import { mutate } from "mixme" | ||
const source = {a: "1"}; | ||
const target = mutate(source, {b: "2"}); | ||
target.c = "3"; | ||
// source and target are both {a: "1", b: "2", c: "3"} | ||
compare({a: 1}, {a: 2}) | ||
// Return false | ||
``` | ||
@@ -68,13 +60,27 @@ | ||
### Function `snake_case_str(str)` | ||
### Function `merge(...data)` | ||
Convert a camel case string to snake case, used internally by `snake_case`. | ||
The API is minimalist, | ||
Merge all literal object provided as arguments. This function is immutable, the source objects won't be altered. | ||
```js | ||
import { snake_case_str } from "mixme" | ||
import { merge } from "mixme" | ||
snake_case("myValue") | ||
// Return "my_value" | ||
const target = merge({a: "1"}, {b: "2"}); | ||
// target is {a: "1", b: "2"} | ||
``` | ||
### Function `mutate(...data)` | ||
Use the `mutate` function to enrich an object. The first argument will be mutated: | ||
```js | ||
import { mutate } from "mixme" | ||
const source = {a: "1"}; | ||
const target = mutate(source, {b: "2"}); | ||
target.c = "3"; | ||
// source and target are both {a: "1", b: "2", c: "3"} | ||
``` | ||
### Function `snake_case(object)` | ||
@@ -91,14 +97,11 @@ | ||
### Function `compare(item_1, item_2)` | ||
### Function `snake_case_str(str)` | ||
Compare two items and return true if their values match. | ||
Convert a camel case string to snake case, used internally by `snake_case`. | ||
```js | ||
import { compare } from "mixme" | ||
import { snake_case_str } from "mixme" | ||
compare([{a: 1}], [{a: 1}]) | ||
// Return true | ||
compare({a: 1}, {a: 2}) | ||
// Return false | ||
snake_case("myValue") | ||
// Return "my_value" | ||
``` | ||
@@ -105,0 +108,0 @@ |
Sorry, the diff of this file is not supported yet
Sorry, the diff of this file is not supported yet
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
No v1
QualityPackage is not semver >=1. This means it is not stable and does not support ^ ranges.
Found 1 instance in 1 package
29537
0
164
652