Removed dependency on fbjs (#1698)

This commit is contained in:
Gabriel Bull 2017-06-03 15:21:08 -04:00 committed by Adam Miskiewicz
parent 48b09bfdae
commit 77b04f342d
14 changed files with 147 additions and 13 deletions

View File

@ -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",

View File

@ -1,6 +1,6 @@
/* @flow */
import invariant from 'fbjs/lib/invariant';
import invariant from './utils/invariant';
import type { NavigationRoute, NavigationState } from './TypeDefinition';

View File

@ -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';

View File

@ -1,6 +1,6 @@
/* @flow */
import invariant from 'fbjs/lib/invariant';
import invariant from '../utils/invariant';
import getScreenForRouteName from './getScreenForRouteName';
import createConfigGetter from './createConfigGetter';

View File

@ -2,7 +2,7 @@
* @flow
*/
import invariant from 'fbjs/lib/invariant';
import invariant from '../utils/invariant';
import getScreenForRouteName from './getScreenForRouteName';
import addNavigationHelpers from '../addNavigationHelpers';

View File

@ -1,7 +1,7 @@
/*
* @flow
*/
import invariant from 'fbjs/lib/invariant';
import invariant from '../utils/invariant';
export default () =>
invariant(

View File

@ -1,6 +1,6 @@
/* @flow */
import invariant from 'fbjs/lib/invariant';
import invariant from '../utils/invariant';
import type {
NavigationComponent,

View File

@ -1,6 +1,6 @@
/** @flow */
import invariant from 'fbjs/lib/invariant';
import invariant from '../utils/invariant';
import type { NavigationRouteConfigMap } from '../TypeDefinition';

View File

@ -1,5 +1,5 @@
/* @flow */
import invariant from 'fbjs/lib/invariant';
import invariant from '../utils/invariant';
import type { NavigationRoute } from '../TypeDefinition';

60
src/utils/invariant.js Normal file
View File

@ -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
src/utils/shallowEqual.js Normal file
View File

@ -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;

View File

@ -2,7 +2,7 @@
import React from 'react';
import invariant from 'fbjs/lib/invariant';
import invariant from '../utils/invariant';
import AnimatedValueSubscription from './AnimatedValueSubscription';

View File

@ -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,

View File

@ -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';