Skip to content

Commit

Permalink
Removed dependency on fbjs (react-navigation#1698)
Browse files Browse the repository at this point in the history
  • Loading branch information
gabrielbull authored and skevy committed Jun 3, 2017
1 parent 48b09bf commit 77b04f3
Show file tree
Hide file tree
Showing 14 changed files with 147 additions and 13 deletions.
1 change: 0 additions & 1 deletion package.json
Original file line number Diff line number Diff line change
Expand Up @@ -76,7 +76,6 @@
},
"dependencies": {
"clamp": "^1.0.1",
"fbjs": "^0.8.12",
"hoist-non-react-statics": "^1.2.0",
"path-to-regexp": "^1.7.0",
"prop-types": "^15.5.10",
Expand Down
2 changes: 1 addition & 1 deletion src/StateUtils.js
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
/* @flow */

import invariant from 'fbjs/lib/invariant';
import invariant from './utils/invariant';

import type { NavigationRoute, NavigationState } from './TypeDefinition';

Expand Down
2 changes: 1 addition & 1 deletion src/createNavigationContainer.js
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
/* @flow */

import React from 'react';
import invariant from 'fbjs/lib/invariant';
import invariant from './utils/invariant';
import { BackAndroid, Linking } from './PlatformHelpers';
import NavigationActions from './NavigationActions';
import addNavigationHelpers from './addNavigationHelpers';
Expand Down
2 changes: 1 addition & 1 deletion src/routers/TabRouter.js
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
/* @flow */

import invariant from 'fbjs/lib/invariant';
import invariant from '../utils/invariant';
import getScreenForRouteName from './getScreenForRouteName';
import createConfigGetter from './createConfigGetter';

Expand Down
2 changes: 1 addition & 1 deletion src/routers/createConfigGetter.js
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
* @flow
*/

import invariant from 'fbjs/lib/invariant';
import invariant from '../utils/invariant';

import getScreenForRouteName from './getScreenForRouteName';
import addNavigationHelpers from '../addNavigationHelpers';
Expand Down
2 changes: 1 addition & 1 deletion src/routers/getScreenConfigDeprecated.js
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
/*
* @flow
*/
import invariant from 'fbjs/lib/invariant';
import invariant from '../utils/invariant';

export default () =>
invariant(
Expand Down
2 changes: 1 addition & 1 deletion src/routers/getScreenForRouteName.js
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
/* @flow */

import invariant from 'fbjs/lib/invariant';
import invariant from '../utils/invariant';

import type {
NavigationComponent,
Expand Down
2 changes: 1 addition & 1 deletion src/routers/validateRouteConfigMap.js
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
/** @flow */

import invariant from 'fbjs/lib/invariant';
import invariant from '../utils/invariant';

import type { NavigationRouteConfigMap } from '../TypeDefinition';

Expand Down
2 changes: 1 addition & 1 deletion src/routers/validateScreenOptions.js
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
/* @flow */
import invariant from 'fbjs/lib/invariant';
import invariant from '../utils/invariant';

import type { NavigationRoute } from '../TypeDefinition';

Expand Down
60 changes: 60 additions & 0 deletions src/utils/invariant.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,60 @@
/**
* Copyright (c) 2013-present, Facebook, Inc.
* All rights reserved.
*
* This source code is licensed under the BSD-style license found in the
* LICENSE file in the root directory of this source tree. An additional grant
* of patent rights can be found in the PATENTS file in the same directory.
*
* @providesModule invariant
*/

'use strict';

/**
* Use invariant() to assert state which your program assumes to be true.
*
* Provide sprintf-style format (only %s is supported) and arguments
* to provide information about what broke and what you were
* expecting.
*
* The invariant message will be stripped in production, but the invariant
* will remain to ensure logic does not differ in production.
*/

var validateFormat = function(format) {};

if (__DEV__) {
validateFormat = function(format) {
if (format === undefined) {
throw new Error('invariant requires an error message argument');
}
};
}

function invariant(condition, format, a, b, c, d, e, f) {
validateFormat(format);

if (!condition) {
var error;
if (format === undefined) {
error = new Error(
'Minified exception occurred; use the non-minified dev environment for the full error message and additional helpful warnings.'
);
} else {
var args = [a, b, c, d, e, f];
var argIndex = 0;
error = new Error(
format.replace(/%s/g, function() {
return args[argIndex++];
})
);
error.name = 'Invariant Violation';
}

error.framesToPop = 1; // we don't care about invariant's own frame
throw error;
}
}

module.exports = invariant;
75 changes: 75 additions & 0 deletions src/utils/shallowEqual.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,75 @@
/**
* Copyright (c) 2013-present, Facebook, Inc.
* All rights reserved.
*
* This source code is licensed under the BSD-style license found in the
* LICENSE file in the root directory of this source tree. An additional grant
* of patent rights can be found in the PATENTS file in the same directory.
*
* @providesModule shallowEqual
* @typechecks
* @flow
*/

/*eslint-disable no-self-compare */

'use strict';

const hasOwnProperty = Object.prototype.hasOwnProperty;

/**
* inlined Object.is polyfill to avoid requiring consumers ship their own
* https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/is
*/
function is(x: mixed, y: mixed): boolean {
// SameValue algorithm
if (x === y) {
// Steps 1-5, 7-10
// Steps 6.b-6.e: +0 != -0
// Added the nonzero y check to make Flow happy, but it is redundant
return x !== 0 || y !== 0 || 1 / x === 1 / y;
} else {
// Step 6.a: NaN == NaN
return x !== x && y !== y;
}
}

/**
* Performs equality by iterating through keys on an object and returning false
* when any key has values which are not strictly equal between the arguments.
* Returns true when the values of all keys are strictly equal.
*/
function shallowEqual(objA: mixed, objB: mixed): boolean {
if (is(objA, objB)) {
return true;
}
if (
typeof objA !== 'object' ||
objA === null ||
typeof objB !== 'object' ||
objB === null
) {
return false;
}

const keysA = Object.keys(objA);
const keysB = Object.keys(objB);

if (keysA.length !== keysB.length) {
return false;
}

// Test for A's keys different from B.
for (let i = 0; i < keysA.length; i++) {
if (
!hasOwnProperty.call(objB, keysA[i]) ||
!is(objA[keysA[i]], objB[keysA[i]])
) {
return false;
}
}

return true;
}

module.exports = shallowEqual;
2 changes: 1 addition & 1 deletion src/views/PointerEventsContainer.js
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@

import React from 'react';

import invariant from 'fbjs/lib/invariant';
import invariant from '../utils/invariant';

import AnimatedValueSubscription from './AnimatedValueSubscription';

Expand Down
4 changes: 2 additions & 2 deletions src/views/ScenesReducer.js
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
/* @flow */

import invariant from 'fbjs/lib/invariant';
import shallowEqual from 'fbjs/lib/shallowEqual';
import invariant from '../utils/invariant';
import shallowEqual from '../utils/shallowEqual';

import type {
NavigationRoute,
Expand Down
2 changes: 1 addition & 1 deletion src/views/Transitioner.js
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ import React from 'react';

import { Animated, StyleSheet, View } from 'react-native';

import invariant from 'fbjs/lib/invariant';
import invariant from '../utils/invariant';

import NavigationScenesReducer from './ScenesReducer';
import TransitionConfigs from './TransitionConfigs';
Expand Down

0 comments on commit 77b04f3

Please sign in to comment.