mirror of
https://github.com/react/react-native-devtools-frontend.git
synced 2026-09-28 21:24:26 +08:00
Since we have the major version jump, we needed to update quite
a few things to make this work:
1. rollup4 ships with native binaries. We can't check them into
our node_modules for all platforms. Luckily they also ship a
a wasm version. This requires us to adjust the 'binary' path
to `node_modules/@rollup/wasm-node/dist/bin/rollup` instead.
2. rollup4 is more strict when it comes to ES modules vs
CommonJS. We adjust this by renaming the rollup config files.
3. Some plugins got deprecated so we had to replace them with
the newer versions (source maps and terser).
Bug: None
Change-Id: If13d590c8185db6ad85b3992d0a869111909dc8c
Reviewed-on: https://chromium-review.googlesource.com/c/devtools/devtools-frontend/+/5999255
Commit-Queue: Simon Zünd <szuend@chromium.org>
Reviewed-by: Alex Rudenko <alexrudenko@chromium.org>
SMOB 🧪
A zero dependency library to safe merge objects and arrays with customizable behavior.
Table of Contents
Installation
npm install smob --save
Usage
import { merge } from "smob";
const output = merge(...sources);
The following merge options are set by default:
- array:
trueMerge object array properties. - arrayDistinct:
falseRemove duplicates, when merging array elements. - arrayPriority:
left(options.priority) The source aka leftmost array has by default the highest priority. - clone:
falseDeep clone input sources. - inPlace:
falseMerge sources in place. - priority:
leftThe source aka leftmost object has by default the highest priority.
The merge behaviour can be changed by creating a custom merger.
Arguments
- sources
(any[] | Record<string, any>)[]: The source arrays/objects.
import { merge } from 'smob';
merge({ a: 1 }, { b: 2 }, { c: 3 });
// { a: 1, b: 2, c: 3 }
merge(['foo'], ['bar']);
// ['foo', 'bar']
Merger
A custom merger can simply be created by using the createMerger method.
Array
import { createMerger } from 'smob';
const merge = createMerger({ array: false });
merge({ a: [1,2,3] }, { a: [4,5,6] });
// { a: [1,2,3] }
ArrayDistinct
import { createMerger } from 'smob';
const merge = createMerger({ arrayDistinct: true });
merge({ a: [1,2,3] }, { a: [3,4,5] });
// { a: [1,2,3,4,5] }
Priority
import { createMerger } from 'smob';
const merge = createMerger({ priority: 'right' });
merge({ a: 1 }, { a: 2 }, { a: 3 })
// { a: 3 }
Strategy
import { createMerger } from 'smob';
const merge = createMerger({
strategy: (target, key, value) => {
if (
typeof target[key] === 'number' &&
typeof value === 'number'
) {
target[key] += value;
return target;
}
}
});
merge({ a: 1 }, { a: 2 }, { a: 3 });
// { a: 6 }
A returned value indicates that the strategy has been applied.
Utils
distinctArray
import { distinctArray } from 'smob';
distnctArray(['foo', 'bar', 'foo']);
// ['foo', 'bar']
The function also removes non-primitive elements that are identical by value or reference.
Objects
import { distinctArray } from 'smob';
distinctArray([{ foo: 'bar' }, { foo: 'bar' }]);
// [{ foo: 'bar' }]
Arrays
import { distinctArray } from 'smob';
distinctArray([['foo', 'bar'], ['foo', 'bar']]);
// [['foo', 'bar']]
isEqual
Checks if two (non-primitive) elements are identical by value or reference.
import { isEqual } from 'smob';
isEqual({foo: 'bar'}, {foo: 'bar'});
// true
isEqual(['foo', 'bar'], ['foo', 'bar']);
// true
License
Made with 💚
Published under MIT License.