New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Bug/Feature: Support ES6 constructs #36
Comments
@chrisbolin -- I've got the start of a branch with initial failing regression tests at https://github.com/FormidableLabs/react-fast-compare/compare/feature/es6-datatypes I'll be back from parental leave in a week and may be able to div in. I think our work is something like:
|
Yeah, i'd like to also put a PR into |
As an update for this, there is now es6 supported upstream (see https://github.com/epoberezkin/fast-deep-equal/blob/master/src/index.jst#L20-L65), but they went a weird route and implemented it by templating the ultimate source file and macro-ing/building out es5 and es6 versions. I think we might be able to just feature detect |
thanks for the heads up, @ryan-roemer! I'll check that out |
@ryan-roemer what do you think of this plan
This plan has a few benefits...
|
I think that generally all sounds good, except I was thinking of making failures more permissive for these constructs... Not sure what React or Victory or Formik (out biggest users) support, but we might want to track them. And all I'm thinking of for permissive is taking something like: if (a instanceof Map) {
// STUFF
} and making it: if (typeof Map === "function" && a instanceof Map) {
// STUFF
} for all of For: if (a.constructor.BYTES_PER_ELEMENT && (
a instanceof Int8Array ||
a instanceof Uint8Array ||
a instanceof Uint8ClampedArray ||
a instanceof Int16Array ||
a instanceof Uint16Array ||
a instanceof Int32Array ||
a instanceof Uint32Array ||
a instanceof Float32Array ||
a instanceof Float64Array ||
a instanceof BigInt64Array ||
a instanceof BigUint64Array
)) {
// STUFF
} I think we can just leave that as-is as the check for |
- Update library to include ES.next support for `Map`, `Set`, `ArrayBuffer`. Part of #36 - Update to `fast-deep-equal@3.1.1` with modified support for ES.next data types. - Upgrade lots of `devDependenices` - Use `fast-deep-equal` tests directly in our correctness tests. - Update CI to modern Node.js versions. - **Note**: There's a bug / limitation of `Set` comparisons whereby objects are compared by reference not value. Tracked at #50 . In our `yarn benchmark`, `lodash.isEqual` gets test differences because it correctly handles those.
Oh, haha, Should we now close this one as complete @chrisbolin ? |
good call. |
But the fact still stands that it would be very hard (or impossible) to implement, based on the very design of the Weak objects:
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/WeakSet |
Sets always evaluate to
true
, I suspect the behavior is similarly wrong for ES6 Map, WeakMap, and WeakSet:The text was updated successfully, but these errors were encountered: