diff --git a/packages/is-shallow-equal/.eslintrc.json b/packages/is-shallow-equal/.eslintrc.json
deleted file mode 100644
index 2e49bacccbbdbd..00000000000000
--- a/packages/is-shallow-equal/.eslintrc.json
+++ /dev/null
@@ -1,22 +0,0 @@
-{
- "root": true,
- "extends": [
- "plugin:@wordpress/eslint-plugin/es5"
- ],
- "env": {
- "node": true
- },
- "settings": {
- "jsdoc": {
- "mode": "typescript"
- }
- },
- "overrides": [
- {
- "files": [ "@(test|benchmark)/*.js" ],
- "extends": [
- "plugin:@wordpress/eslint-plugin/recommended"
- ]
- }
- ]
-}
diff --git a/packages/is-shallow-equal/CHANGELOG.md b/packages/is-shallow-equal/CHANGELOG.md
index 0501783db3f36e..bdd95fb63468e7 100644
--- a/packages/is-shallow-equal/CHANGELOG.md
+++ b/packages/is-shallow-equal/CHANGELOG.md
@@ -2,6 +2,10 @@
## Unreleased
+### Breaking Change
+
+- Re-write using ES Modules causing CJS default import to change from `require('@wordpress/is-shallow-equal)` to `require('@wordpress/is-shallow-equal).default`. ([#26833](https://github.com/WordPress/gutenberg/pull/26833))
+
## 2.0.0 (2020-04-15)
### Breaking Change
diff --git a/packages/is-shallow-equal/README.md b/packages/is-shallow-equal/README.md
index 04421cfa1408f2..95837e95a5c72a 100644
--- a/packages/is-shallow-equal/README.md
+++ b/packages/is-shallow-equal/README.md
@@ -122,10 +122,10 @@ The following results were produced under Node v10.15.3 (LTS) on a MacBook Pro (
You can run the benchmarks yourselves by cloning the repository, installing dependencies, and running the `benchmark/index.js` script:
```
-git clone https://github.com/WordPress/packages.git
-cd packages/packages/is-shallow-equal
+git clone https://github.com/WordPress/gutenberg.git
npm install
-node benchmark
+npm run build:packages
+node ./packages/is-shallow-equal/benchmark
```

diff --git a/packages/is-shallow-equal/benchmark/index.js b/packages/is-shallow-equal/benchmark/index.js
index ca86ac7b4db6f6..3564146321c501 100644
--- a/packages/is-shallow-equal/benchmark/index.js
+++ b/packages/is-shallow-equal/benchmark/index.js
@@ -43,7 +43,7 @@ Promise.all( [
require( '..' ).isShallowEqualObjects,
require( '..' ).isShallowEqualArrays,
],
- [ '@wordpress/is-shallow-equal', require( '..' ) ],
+ [ '@wordpress/is-shallow-equal', require( '..' ).default ],
[ 'shallowequal', shallowequal ],
[
'shallow-equal (type specific)',
diff --git a/packages/is-shallow-equal/package.json b/packages/is-shallow-equal/package.json
index d1cd9c45e52703..515b9bbe0ad482 100644
--- a/packages/is-shallow-equal/package.json
+++ b/packages/is-shallow-equal/package.json
@@ -21,11 +21,15 @@
"url": "https://github.com/WordPress/gutenberg/issues"
},
"files": [
- "lib",
+ "build",
+ "build-module",
"build-types",
+ "src",
"*.md"
],
- "main": "lib/index.js",
+ "main": "build/index.js",
+ "module": "build-module/index.js",
+ "react-native": "src/index",
"types": "build-types",
"sideEffects": false,
"dependencies": {
diff --git a/packages/is-shallow-equal/lib/arrays.js b/packages/is-shallow-equal/src/arrays.js
similarity index 73%
rename from packages/is-shallow-equal/lib/arrays.js
rename to packages/is-shallow-equal/src/arrays.js
index 6937373a985467..88adc7617e3bb3 100644
--- a/packages/is-shallow-equal/lib/arrays.js
+++ b/packages/is-shallow-equal/src/arrays.js
@@ -1,5 +1,3 @@
-'use strict';
-
/**
* Returns true if the two arrays are shallow equal, or false otherwise.
*
@@ -8,9 +6,7 @@
*
* @return {boolean} Whether the two arrays are shallow equal.
*/
-function isShallowEqualArrays( a, b ) {
- var i;
-
+export default function isShallowEqualArrays( a, b ) {
if ( a === b ) {
return true;
}
@@ -19,7 +15,7 @@ function isShallowEqualArrays( a, b ) {
return false;
}
- for ( i = 0; i < a.length; i++ ) {
+ for ( let i = 0, len = a.length; i < len; i++ ) {
if ( a[ i ] !== b[ i ] ) {
return false;
}
@@ -27,5 +23,3 @@ function isShallowEqualArrays( a, b ) {
return true;
}
-
-module.exports = isShallowEqualArrays;
diff --git a/packages/is-shallow-equal/lib/index.js b/packages/is-shallow-equal/src/index.js
similarity index 58%
rename from packages/is-shallow-equal/lib/index.js
rename to packages/is-shallow-equal/src/index.js
index 3469656d020376..fddd62a022a3de 100644
--- a/packages/is-shallow-equal/lib/index.js
+++ b/packages/is-shallow-equal/src/index.js
@@ -1,12 +1,11 @@
-'use strict';
-
/**
- * Internal dependencies;
+ * Internal dependencies
*/
-var isShallowEqualObjects = require( './objects' );
-var isShallowEqualArrays = require( './arrays' );
+import isShallowEqualObjects from './objects';
+import isShallowEqualArrays from './arrays';
-var isArray = Array.isArray;
+export { default as isShallowEqualObjects } from './objects';
+export { default as isShallowEqualArrays } from './arrays';
/**
* @typedef {Record} ComparableObject
@@ -21,18 +20,14 @@ var isArray = Array.isArray;
*
* @return {boolean} Whether the two values are shallow equal.
*/
-function isShallowEqual( a, b ) {
+export default function isShallowEqual( a, b ) {
if ( a && b ) {
if ( a.constructor === Object && b.constructor === Object ) {
return isShallowEqualObjects( a, b );
- } else if ( isArray( a ) && isArray( b ) ) {
+ } else if ( Array.isArray( a ) && Array.isArray( b ) ) {
return isShallowEqualArrays( a, b );
}
}
return a === b;
}
-
-module.exports = isShallowEqual;
-module.exports.isShallowEqualObjects = isShallowEqualObjects;
-module.exports.isShallowEqualArrays = isShallowEqualArrays;
diff --git a/packages/is-shallow-equal/lib/objects.js b/packages/is-shallow-equal/src/objects.js
similarity index 77%
rename from packages/is-shallow-equal/lib/objects.js
rename to packages/is-shallow-equal/src/objects.js
index 2c7583aba9ce1d..e2dc6867c7d51b 100644
--- a/packages/is-shallow-equal/lib/objects.js
+++ b/packages/is-shallow-equal/src/objects.js
@@ -1,7 +1,3 @@
-'use strict';
-
-var keys = Object.keys;
-
/**
* Returns true if the two objects are shallow equal, or false otherwise.
*
@@ -10,25 +6,23 @@ var keys = Object.keys;
*
* @return {boolean} Whether the two objects are shallow equal.
*/
-function isShallowEqualObjects( a, b ) {
- var aKeys, bKeys, i, key, aValue;
-
+export default function isShallowEqualObjects( a, b ) {
if ( a === b ) {
return true;
}
- aKeys = keys( a );
- bKeys = keys( b );
+ const aKeys = Object.keys( a );
+ const bKeys = Object.keys( b );
if ( aKeys.length !== bKeys.length ) {
return false;
}
- i = 0;
+ let i = 0;
while ( i < aKeys.length ) {
- key = aKeys[ i ];
- aValue = a[ key ];
+ const key = aKeys[ i ];
+ const aValue = a[ key ];
if (
// In iterating only the keys of the first object after verifying
@@ -47,5 +41,3 @@ function isShallowEqualObjects( a, b ) {
return true;
}
-
-module.exports = isShallowEqualObjects;
diff --git a/packages/is-shallow-equal/test/index.js b/packages/is-shallow-equal/test/index.js
index 66bf538552c645..ea99282111946f 100644
--- a/packages/is-shallow-equal/test/index.js
+++ b/packages/is-shallow-equal/test/index.js
@@ -4,7 +4,7 @@
import isShallowEqual, {
isShallowEqualArrays,
isShallowEqualObjects,
-} from '..';
+} from '../src';
describe( 'isShallowEqual', () => {
it( 'returns false if of different types', () => {
diff --git a/packages/is-shallow-equal/tsconfig.json b/packages/is-shallow-equal/tsconfig.json
index 426ab13d0aa8f6..3c2c31f506f132 100644
--- a/packages/is-shallow-equal/tsconfig.json
+++ b/packages/is-shallow-equal/tsconfig.json
@@ -1,8 +1,8 @@
{
"extends": "../../tsconfig.base.json",
"compilerOptions": {
- "rootDir": "lib",
+ "rootDir": "src",
"declarationDir": "build-types"
},
- "include": [ "lib/**/*" ]
+ "include": [ "src/**/*" ]
}