mirror of
https://github.com/facebook/react-native.git
synced 2025-11-01 09:14:26 +00:00
Compare commits
38
Commits
@@ -157,7 +157,7 @@ js_defaults: &js_defaults
|
||||
android_defaults: &android_defaults
|
||||
<<: *defaults
|
||||
docker:
|
||||
- image: reactnativecommunity/react-native-android:2019-5-7
|
||||
- image: reactnativecommunity/react-native-android:2019-5-29
|
||||
resource_class: "large"
|
||||
environment:
|
||||
- TERM: "dumb"
|
||||
@@ -544,10 +544,9 @@ jobs:
|
||||
|
||||
# Keep configuring Android dependencies while AVD boots up
|
||||
|
||||
# Install Buck
|
||||
- restore-cache: *restore-buck-downloads-cache
|
||||
- run:
|
||||
name: Install BUCK
|
||||
name: Install Buck
|
||||
command: |
|
||||
buck --version
|
||||
# Install related tooling
|
||||
@@ -684,9 +683,6 @@ jobs:
|
||||
- restore-cache: *restore-gradle-downloads-cache
|
||||
- run: *download-dependencies-gradle
|
||||
|
||||
- restore-cache: *restore-yarn-cache
|
||||
- run: *yarn
|
||||
|
||||
- run:
|
||||
name: Authenticate with npm
|
||||
command: echo "//registry.npmjs.org/:_authToken=${CIRCLE_NPM_TOKEN}" > ~/.npmrc
|
||||
@@ -727,8 +723,12 @@ workflows:
|
||||
|
||||
releases:
|
||||
jobs:
|
||||
- checkout_code:
|
||||
filters: *filter-only-version-tags
|
||||
- publish_npm_package:
|
||||
filters: *filter-only-version-tags
|
||||
requires:
|
||||
- checkout_code
|
||||
|
||||
analysis:
|
||||
jobs:
|
||||
|
||||
@@ -25,6 +25,7 @@ const invariant = require('invariant');
|
||||
const processDecelerationRate = require('./processDecelerationRate');
|
||||
const requireNativeComponent = require('../../ReactNative/requireNativeComponent');
|
||||
const resolveAssetSource = require('../../Image/resolveAssetSource');
|
||||
const splitLayoutProps = require('../../StyleSheet/splitLayoutProps');
|
||||
|
||||
import type {
|
||||
PressEvent,
|
||||
@@ -1125,15 +1126,15 @@ class ScrollView extends React.Component<Props, State> {
|
||||
// On Android wrap the ScrollView with a AndroidSwipeRefreshLayout.
|
||||
// Since the ScrollView is wrapped add the style props to the
|
||||
// AndroidSwipeRefreshLayout and use flex: 1 for the ScrollView.
|
||||
// Note: we should only apply props.style on the wrapper
|
||||
// Note: we should split props.style on the inner and outer props
|
||||
// however, the ScrollView still needs the baseStyle to be scrollable
|
||||
|
||||
const {outer, inner} = splitLayoutProps(flattenStyle(props.style));
|
||||
return React.cloneElement(
|
||||
refreshControl,
|
||||
{style: props.style},
|
||||
{style: [baseStyle, outer]},
|
||||
<ScrollViewClass
|
||||
{...props}
|
||||
style={baseStyle}
|
||||
style={[baseStyle, inner]}
|
||||
// $FlowFixMe
|
||||
ref={this._setScrollViewRef}>
|
||||
{contentContainer}
|
||||
|
||||
@@ -1,17 +1,17 @@
|
||||
/**
|
||||
* @generated by scripts/bump-oss-version.js
|
||||
*
|
||||
* Copyright (c) Facebook, Inc. and its affiliates.
|
||||
*
|
||||
* This source code is licensed under the MIT license found in the
|
||||
* LICENSE file in the root directory of this source tree.
|
||||
*
|
||||
* @format
|
||||
* @generated by scripts/bump-oss-version.js
|
||||
* @flow
|
||||
*/
|
||||
|
||||
exports.version = {
|
||||
major: 0,
|
||||
minor: 0,
|
||||
minor: 60,
|
||||
patch: 0,
|
||||
prerelease: null,
|
||||
prerelease: 'rc.3',
|
||||
};
|
||||
|
||||
@@ -21,6 +21,10 @@ if (global.window === undefined) {
|
||||
global.window = global;
|
||||
}
|
||||
|
||||
if (global.self === undefined) {
|
||||
global.self = global;
|
||||
}
|
||||
|
||||
// Set up process
|
||||
global.process = global.process || {};
|
||||
global.process.env = global.process.env || {};
|
||||
|
||||
@@ -11,7 +11,7 @@
|
||||
|
||||
'use strict';
|
||||
|
||||
const whatwg = require('../vendor/core/whatwg-fetch');
|
||||
const whatwg = require('whatwg-fetch');
|
||||
|
||||
if (whatwg && whatwg.fetch) {
|
||||
module.exports = whatwg;
|
||||
|
||||
@@ -27,7 +27,7 @@ const DebugInstructions = Platform.select({
|
||||
),
|
||||
default: () => (
|
||||
<Text>
|
||||
Press <Text style={styles.highlight}>menu button</Text> or
|
||||
Press <Text style={styles.highlight}>menu button</Text> or{' '}
|
||||
<Text style={styles.highlight}>Shake</Text> your device to open the React
|
||||
Native debug menu.
|
||||
</Text>
|
||||
|
||||
@@ -0,0 +1,44 @@
|
||||
/**
|
||||
* Copyright (c) Facebook, Inc. and its affiliates.
|
||||
*
|
||||
* This source code is licensed under the MIT license found in the
|
||||
* LICENSE file in the root directory of this source tree.
|
||||
*
|
||||
* @format
|
||||
* @emails oncall+react_native
|
||||
*/
|
||||
|
||||
'use strict';
|
||||
|
||||
const splitLayoutProps = require('../splitLayoutProps');
|
||||
|
||||
test('splits style objects', () => {
|
||||
const style = {width: 10, margin: 20, padding: 30};
|
||||
const {outer, inner} = splitLayoutProps(style);
|
||||
expect(outer).toMatchInlineSnapshot(`
|
||||
Object {
|
||||
"margin": 20,
|
||||
"width": 10,
|
||||
}
|
||||
`);
|
||||
expect(inner).toMatchInlineSnapshot(`
|
||||
Object {
|
||||
"padding": 30,
|
||||
}
|
||||
`);
|
||||
});
|
||||
|
||||
test('does not copy values to both returned objects', () => {
|
||||
const style = {marginVertical: 5, paddingHorizontal: 10};
|
||||
const {outer, inner} = splitLayoutProps(style);
|
||||
expect(outer).toMatchInlineSnapshot(`
|
||||
Object {
|
||||
"marginVertical": 5,
|
||||
}
|
||||
`);
|
||||
expect(inner).toMatchInlineSnapshot(`
|
||||
Object {
|
||||
"paddingHorizontal": 10,
|
||||
}
|
||||
`);
|
||||
});
|
||||
@@ -0,0 +1,62 @@
|
||||
/**
|
||||
* Copyright (c) Facebook, Inc. and its affiliates.
|
||||
*
|
||||
* This source code is licensed under the MIT license found in the
|
||||
* LICENSE file in the root directory of this source tree.
|
||||
*
|
||||
* @format
|
||||
* @flow strict-local
|
||||
*/
|
||||
|
||||
'use strict';
|
||||
|
||||
import type {DangerouslyImpreciseStyle} from './StyleSheet';
|
||||
|
||||
const OUTER_PROPS = Object.assign(Object.create(null), {
|
||||
margin: true,
|
||||
marginHorizontal: true,
|
||||
marginVertical: true,
|
||||
marginBottom: true,
|
||||
marginTop: true,
|
||||
marginLeft: true,
|
||||
marginRight: true,
|
||||
flex: true,
|
||||
flexGrow: true,
|
||||
flexShrink: true,
|
||||
flexBasis: true,
|
||||
alignSelf: true,
|
||||
height: true,
|
||||
minHeight: true,
|
||||
maxHeight: true,
|
||||
width: true,
|
||||
minWidth: true,
|
||||
maxWidth: true,
|
||||
position: true,
|
||||
left: true,
|
||||
right: true,
|
||||
bottom: true,
|
||||
top: true,
|
||||
});
|
||||
|
||||
function splitLayoutProps(
|
||||
props: ?DangerouslyImpreciseStyle,
|
||||
): {
|
||||
outer: DangerouslyImpreciseStyle,
|
||||
inner: DangerouslyImpreciseStyle,
|
||||
} {
|
||||
const inner = {};
|
||||
const outer = {};
|
||||
if (props) {
|
||||
Object.keys(props).forEach(k => {
|
||||
const value: $ElementType<DangerouslyImpreciseStyle, typeof k> = props[k];
|
||||
if (OUTER_PROPS[k]) {
|
||||
outer[k] = value;
|
||||
} else {
|
||||
inner[k] = value;
|
||||
}
|
||||
});
|
||||
}
|
||||
return {outer, inner};
|
||||
}
|
||||
|
||||
module.exports = splitLayoutProps;
|
||||
@@ -7,6 +7,7 @@
|
||||
objects = {
|
||||
|
||||
/* Begin PBXBuildFile section */
|
||||
19461666225DC3B300E4E008 /* RCTTextRenderer.m in Sources */ = {isa = PBXBuildFile; fileRef = 19461664225DC3B300E4E008 /* RCTTextRenderer.m */; };
|
||||
5956B130200FEBAA008D9D16 /* RCTRawTextShadowView.m in Sources */ = {isa = PBXBuildFile; fileRef = 5956B0FD200FEBA9008D9D16 /* RCTRawTextShadowView.m */; };
|
||||
5956B131200FEBAA008D9D16 /* RCTRawTextViewManager.m in Sources */ = {isa = PBXBuildFile; fileRef = 5956B0FE200FEBA9008D9D16 /* RCTRawTextViewManager.m */; };
|
||||
5956B132200FEBAA008D9D16 /* RCTSinglelineTextInputView.m in Sources */ = {isa = PBXBuildFile; fileRef = 5956B101200FEBA9008D9D16 /* RCTSinglelineTextInputView.m */; };
|
||||
@@ -187,6 +188,8 @@
|
||||
/* End PBXCopyFilesBuildPhase section */
|
||||
|
||||
/* Begin PBXFileReference section */
|
||||
19461664225DC3B300E4E008 /* RCTTextRenderer.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = RCTTextRenderer.m; sourceTree = "<group>"; };
|
||||
19461665225DC3B300E4E008 /* RCTTextRenderer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RCTTextRenderer.h; sourceTree = "<group>"; };
|
||||
2D2A287B1D9B048500D4039D /* libRCTText-tvOS.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libRCTText-tvOS.a"; sourceTree = BUILT_PRODUCTS_DIR; };
|
||||
58B5119B1A9E6C1200147676 /* libRCTText.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = libRCTText.a; sourceTree = BUILT_PRODUCTS_DIR; };
|
||||
5956B0F9200FEBA9008D9D16 /* RCTConvert+Text.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "RCTConvert+Text.h"; sourceTree = "<group>"; };
|
||||
@@ -360,6 +363,8 @@
|
||||
children = (
|
||||
5956B129200FEBAA008D9D16 /* NSTextStorage+FontScaling.h */,
|
||||
5956B125200FEBAA008D9D16 /* NSTextStorage+FontScaling.m */,
|
||||
19461665225DC3B300E4E008 /* RCTTextRenderer.h */,
|
||||
19461664225DC3B300E4E008 /* RCTTextRenderer.m */,
|
||||
5956B126200FEBAA008D9D16 /* RCTTextShadowView.h */,
|
||||
5956B122200FEBAA008D9D16 /* RCTTextShadowView.m */,
|
||||
5956B123200FEBAA008D9D16 /* RCTTextView.h */,
|
||||
@@ -439,6 +444,7 @@
|
||||
developmentRegion = English;
|
||||
hasScannedForEncodings = 0;
|
||||
knownRegions = (
|
||||
English,
|
||||
en,
|
||||
);
|
||||
mainGroup = 58B511921A9E6C1200147676;
|
||||
@@ -504,6 +510,7 @@
|
||||
5956B142200FEBAA008D9D16 /* RCTTextViewManager.m in Sources */,
|
||||
5956B135200FEBAA008D9D16 /* RCTBaseTextInputView.m in Sources */,
|
||||
5956B144200FEBAA008D9D16 /* RCTVirtualTextViewManager.m in Sources */,
|
||||
19461666225DC3B300E4E008 /* RCTTextRenderer.m in Sources */,
|
||||
5C245F39205E216A00D936E9 /* RCTInputAccessoryShadowView.m in Sources */,
|
||||
5956B13B200FEBAA008D9D16 /* RCTMultilineTextInputViewManager.m in Sources */,
|
||||
5956B134200FEBAA008D9D16 /* RCTSinglelineTextInputViewManager.m in Sources */,
|
||||
|
||||
@@ -0,0 +1,23 @@
|
||||
/**
|
||||
* Copyright (c) Facebook, Inc. and its affiliates.
|
||||
*
|
||||
* This source code is licensed under the MIT license found in the
|
||||
* LICENSE file in the root directory of this source tree.
|
||||
*/
|
||||
|
||||
#import <UIKit/UIKit.h>
|
||||
|
||||
NS_ASSUME_NONNULL_BEGIN
|
||||
|
||||
/**
|
||||
* Used by text layers to render text. Note that UIKit crashes if this delegate is implemented
|
||||
* directly on a UIView subclass since it already implements it for the view's root
|
||||
* layer. This is why this is implemented in a separate class.
|
||||
*/
|
||||
@interface RCTTextRenderer : NSObject <CALayerDelegate>
|
||||
|
||||
- (void)setTextStorage:(NSTextStorage *)textStorage contentFrame:(CGRect)contentFrame;
|
||||
|
||||
@end
|
||||
|
||||
NS_ASSUME_NONNULL_END
|
||||
@@ -0,0 +1,56 @@
|
||||
/**
|
||||
* Copyright (c) Facebook, Inc. and its affiliates.
|
||||
*
|
||||
* This source code is licensed under the MIT license found in the
|
||||
* LICENSE file in the root directory of this source tree.
|
||||
*/
|
||||
|
||||
#import "RCTTextRenderer.h"
|
||||
|
||||
#import "RCTTextAttributes.h"
|
||||
|
||||
@implementation RCTTextRenderer
|
||||
{
|
||||
NSTextStorage *_Nullable _textStorage;
|
||||
CGRect _contentFrame;
|
||||
}
|
||||
|
||||
- (void)setTextStorage:(NSTextStorage *)textStorage
|
||||
contentFrame:(CGRect)contentFrame
|
||||
{
|
||||
_textStorage = textStorage;
|
||||
_contentFrame = contentFrame;
|
||||
}
|
||||
|
||||
- (void)drawLayer:(CALayer *)layer
|
||||
inContext:(CGContextRef)ctx;
|
||||
{
|
||||
if (!_textStorage) {
|
||||
return;
|
||||
}
|
||||
|
||||
CGRect boundingBox = CGContextGetClipBoundingBox(ctx);
|
||||
CGContextSaveGState(ctx);
|
||||
UIGraphicsPushContext(ctx);
|
||||
|
||||
NSLayoutManager *layoutManager = _textStorage.layoutManagers.firstObject;
|
||||
NSTextContainer *textContainer = layoutManager.textContainers.firstObject;
|
||||
|
||||
NSRange glyphRange =
|
||||
[layoutManager glyphRangeForBoundingRect:boundingBox
|
||||
inTextContainer:textContainer];
|
||||
|
||||
[layoutManager drawBackgroundForGlyphRange:glyphRange atPoint:_contentFrame.origin];
|
||||
[layoutManager drawGlyphsForGlyphRange:glyphRange atPoint:_contentFrame.origin];
|
||||
|
||||
UIGraphicsPopContext();
|
||||
CGContextRestoreGState(ctx);
|
||||
}
|
||||
|
||||
- (id<CAAction>)actionForLayer:(CALayer *)layer forKey:(NSString *)event
|
||||
{
|
||||
// Disable all implicit animations.
|
||||
return (id)[NSNull null];
|
||||
}
|
||||
|
||||
@end
|
||||
@@ -13,15 +13,36 @@
|
||||
#import <React/UIView+React.h>
|
||||
|
||||
#import "RCTTextShadowView.h"
|
||||
#import "RCTTextRenderer.h"
|
||||
|
||||
@interface RCTTextTiledLayer : CATiledLayer
|
||||
|
||||
@end
|
||||
|
||||
@implementation RCTTextTiledLayer
|
||||
|
||||
+ (CFTimeInterval)fadeDuration
|
||||
{
|
||||
return 0.05;
|
||||
}
|
||||
|
||||
@end
|
||||
|
||||
@implementation RCTTextView
|
||||
{
|
||||
CAShapeLayer *_highlightLayer;
|
||||
UILongPressGestureRecognizer *_longPressGestureRecognizer;
|
||||
|
||||
NSArray<UIView *> *_Nullable _descendantViews;
|
||||
NSTextStorage *_Nullable _textStorage;
|
||||
CGRect _contentFrame;
|
||||
RCTTextRenderer *_renderer;
|
||||
// For small amount of text avoid the overhead of CATiledLayer and
|
||||
// make render text synchronously. For large amount of text, use
|
||||
// CATiledLayer to chunk text rendering and avoid linear memory
|
||||
// usage.
|
||||
CALayer *_Nullable _syncLayer;
|
||||
RCTTextTiledLayer *_Nullable _asyncTiledLayer;
|
||||
CAShapeLayer *_highlightLayer;
|
||||
}
|
||||
|
||||
- (instancetype)initWithFrame:(CGRect)frame
|
||||
@@ -31,6 +52,7 @@
|
||||
self.accessibilityTraits |= UIAccessibilityTraitStaticText;
|
||||
self.opaque = NO;
|
||||
self.contentMode = UIViewContentModeRedraw;
|
||||
_renderer = [RCTTextRenderer new];
|
||||
}
|
||||
return self;
|
||||
}
|
||||
@@ -65,6 +87,7 @@
|
||||
// This disables the frame animation, without affecting opacity, etc.
|
||||
[UIView performWithoutAnimation:^{
|
||||
[super reactSetFrame:frame];
|
||||
[self configureLayer];
|
||||
}];
|
||||
}
|
||||
|
||||
@@ -91,55 +114,101 @@
|
||||
[self addSubview:view];
|
||||
}
|
||||
|
||||
[self setNeedsDisplay];
|
||||
[_renderer setTextStorage:textStorage contentFrame:contentFrame];
|
||||
[self configureLayer];
|
||||
[self setCurrentLayerNeedsDisplay];
|
||||
}
|
||||
|
||||
- (void)drawRect:(CGRect)rect
|
||||
- (void)configureLayer
|
||||
{
|
||||
if (!_textStorage) {
|
||||
return;
|
||||
}
|
||||
|
||||
CALayer *currentLayer;
|
||||
|
||||
CGSize screenSize = RCTScreenSize();
|
||||
CGFloat textViewTileSize = MAX(screenSize.width, screenSize.height) * 1.5;
|
||||
|
||||
if (self.frame.size.width > textViewTileSize || self.frame.size.height > textViewTileSize) {
|
||||
// Cleanup sync layer
|
||||
if (_syncLayer != nil) {
|
||||
_syncLayer.delegate = nil;
|
||||
[_syncLayer removeFromSuperlayer];
|
||||
_syncLayer = nil;
|
||||
}
|
||||
|
||||
if (_asyncTiledLayer == nil) {
|
||||
RCTTextTiledLayer *layer = [RCTTextTiledLayer layer];
|
||||
layer.delegate = _renderer;
|
||||
layer.contentsScale = RCTScreenScale();
|
||||
layer.tileSize = CGSizeMake(textViewTileSize, textViewTileSize);
|
||||
_asyncTiledLayer = layer;
|
||||
[self.layer addSublayer:layer];
|
||||
[layer setNeedsDisplay];
|
||||
}
|
||||
_asyncTiledLayer.frame = self.bounds;
|
||||
currentLayer = _asyncTiledLayer;
|
||||
} else {
|
||||
// Cleanup async tiled layer
|
||||
if (_asyncTiledLayer != nil) {
|
||||
_asyncTiledLayer.delegate = nil;
|
||||
[_asyncTiledLayer removeFromSuperlayer];
|
||||
_asyncTiledLayer = nil;
|
||||
}
|
||||
|
||||
if (_syncLayer == nil) {
|
||||
CALayer *layer = [CALayer layer];
|
||||
layer.delegate = _renderer;
|
||||
layer.contentsScale = RCTScreenScale();
|
||||
_syncLayer = layer;
|
||||
[self.layer addSublayer:layer];
|
||||
[layer setNeedsDisplay];
|
||||
}
|
||||
_syncLayer.frame = self.bounds;
|
||||
currentLayer = _syncLayer;
|
||||
}
|
||||
|
||||
NSLayoutManager *layoutManager = _textStorage.layoutManagers.firstObject;
|
||||
NSTextContainer *textContainer = layoutManager.textContainers.firstObject;
|
||||
|
||||
NSRange glyphRange = [layoutManager glyphRangeForTextContainer:textContainer];
|
||||
[layoutManager drawBackgroundForGlyphRange:glyphRange atPoint:_contentFrame.origin];
|
||||
[layoutManager drawGlyphsForGlyphRange:glyphRange atPoint:_contentFrame.origin];
|
||||
NSRange glyphRange =
|
||||
[layoutManager glyphRangeForTextContainer:textContainer];
|
||||
|
||||
__block UIBezierPath *highlightPath = nil;
|
||||
NSRange characterRange = [layoutManager characterRangeForGlyphRange:glyphRange
|
||||
actualGlyphRange:NULL];
|
||||
|
||||
[_textStorage enumerateAttribute:RCTTextAttributesIsHighlightedAttributeName
|
||||
inRange:characterRange
|
||||
options:0
|
||||
usingBlock:
|
||||
^(NSNumber *value, NSRange range, __unused BOOL *stop) {
|
||||
if (!value.boolValue) {
|
||||
return;
|
||||
}
|
||||
^(NSNumber *value, NSRange range, __unused BOOL *stop) {
|
||||
if (!value.boolValue) {
|
||||
return;
|
||||
}
|
||||
|
||||
[layoutManager enumerateEnclosingRectsForGlyphRange:range
|
||||
withinSelectedGlyphRange:range
|
||||
inTextContainer:textContainer
|
||||
usingBlock:
|
||||
^(CGRect enclosingRect, __unused BOOL *anotherStop) {
|
||||
UIBezierPath *path = [UIBezierPath bezierPathWithRoundedRect:CGRectInset(enclosingRect, -2, -2) cornerRadius:2];
|
||||
if (highlightPath) {
|
||||
[highlightPath appendPath:path];
|
||||
} else {
|
||||
highlightPath = path;
|
||||
}
|
||||
[layoutManager enumerateEnclosingRectsForGlyphRange:range
|
||||
withinSelectedGlyphRange:range
|
||||
inTextContainer:textContainer
|
||||
usingBlock:
|
||||
^(CGRect enclosingRect, __unused BOOL *anotherStop) {
|
||||
UIBezierPath *path = [UIBezierPath bezierPathWithRoundedRect:CGRectInset(enclosingRect, -2, -2) cornerRadius:2];
|
||||
if (highlightPath) {
|
||||
[highlightPath appendPath:path];
|
||||
} else {
|
||||
highlightPath = path;
|
||||
}
|
||||
}
|
||||
];
|
||||
}];
|
||||
}];
|
||||
|
||||
if (highlightPath) {
|
||||
if (!_highlightLayer) {
|
||||
_highlightLayer = [CAShapeLayer layer];
|
||||
_highlightLayer.fillColor = [UIColor colorWithWhite:0 alpha:0.25].CGColor;
|
||||
[self.layer addSublayer:_highlightLayer];
|
||||
}
|
||||
if (![currentLayer.sublayers containsObject:_highlightLayer]) {
|
||||
[currentLayer addSublayer:_highlightLayer];
|
||||
}
|
||||
_highlightLayer.position = _contentFrame.origin;
|
||||
_highlightLayer.path = highlightPath.CGPath;
|
||||
@@ -149,6 +218,15 @@
|
||||
}
|
||||
}
|
||||
|
||||
- (void)setCurrentLayerNeedsDisplay
|
||||
{
|
||||
if (_asyncTiledLayer != nil) {
|
||||
[_asyncTiledLayer setNeedsDisplay];
|
||||
} else if (_syncLayer != nil) {
|
||||
[_syncLayer setNeedsDisplay];
|
||||
}
|
||||
[_highlightLayer setNeedsDisplay];
|
||||
}
|
||||
|
||||
- (NSNumber *)reactTagAtPoint:(CGPoint)point
|
||||
{
|
||||
@@ -174,14 +252,18 @@
|
||||
{
|
||||
[super didMoveToWindow];
|
||||
|
||||
// When an `RCTText` instance moves offscreen (possibly due to parent clipping),
|
||||
// we unset the layer's contents until it comes onscreen again.
|
||||
if (!self.window) {
|
||||
self.layer.contents = nil;
|
||||
if (_highlightLayer) {
|
||||
[_highlightLayer removeFromSuperlayer];
|
||||
_highlightLayer = nil;
|
||||
}
|
||||
[_syncLayer removeFromSuperlayer];
|
||||
_syncLayer = nil;
|
||||
[_asyncTiledLayer removeFromSuperlayer];
|
||||
_asyncTiledLayer = nil;
|
||||
[_highlightLayer removeFromSuperlayer];
|
||||
_highlightLayer = nil;
|
||||
} else if (_textStorage) {
|
||||
[self setNeedsDisplay];
|
||||
[self configureLayer];
|
||||
[self setCurrentLayerNeedsDisplay];
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
-533
@@ -1,533 +0,0 @@
|
||||
/**
|
||||
* Copyright (c) Facebook, Inc. and its affiliates.
|
||||
*
|
||||
* This source code is licensed under the MIT license found in the
|
||||
* LICENSE file in the root directory of this source tree.
|
||||
*
|
||||
* @format
|
||||
*/
|
||||
|
||||
// Fork of https://github.com/github/fetch/blob/master/fetch.js that does not
|
||||
// use reponseType: 'blob' by default. RN already has specific native implementations
|
||||
// for different response types so there is no need to add the extra blob overhead.
|
||||
|
||||
// Copyright (c) 2014-2016 GitHub, Inc.
|
||||
//
|
||||
// Permission is hereby granted, free of charge, to any person obtaining
|
||||
// a copy of this software and associated documentation files (the
|
||||
// "Software"), to deal in the Software without restriction, including
|
||||
// without limitation the rights to use, copy, modify, merge, publish,
|
||||
// distribute, sublicense, and/or sell copies of the Software, and to
|
||||
// permit persons to whom the Software is furnished to do so, subject to
|
||||
// the following conditions:
|
||||
//
|
||||
// The above copyright notice and this permission notice shall be
|
||||
// included in all copies or substantial portions of the Software.
|
||||
//
|
||||
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
||||
// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
||||
// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
||||
// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
||||
// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
||||
// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
||||
// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
|
||||
(function(self) {
|
||||
'use strict';
|
||||
|
||||
if (self.fetch) {
|
||||
return;
|
||||
}
|
||||
|
||||
var support = {
|
||||
searchParams: 'URLSearchParams' in self,
|
||||
iterable: 'Symbol' in self && 'iterator' in Symbol,
|
||||
blob:
|
||||
'FileReader' in self &&
|
||||
'Blob' in self &&
|
||||
(function() {
|
||||
try {
|
||||
new Blob();
|
||||
return true;
|
||||
} catch (e) {
|
||||
return false;
|
||||
}
|
||||
})(),
|
||||
formData: 'FormData' in self,
|
||||
arrayBuffer: 'ArrayBuffer' in self,
|
||||
};
|
||||
|
||||
if (support.arrayBuffer) {
|
||||
var viewClasses = [
|
||||
'[object Int8Array]',
|
||||
'[object Uint8Array]',
|
||||
'[object Uint8ClampedArray]',
|
||||
'[object Int16Array]',
|
||||
'[object Uint16Array]',
|
||||
'[object Int32Array]',
|
||||
'[object Uint32Array]',
|
||||
'[object Float32Array]',
|
||||
'[object Float64Array]',
|
||||
];
|
||||
|
||||
var isDataView = function(obj) {
|
||||
return obj && DataView.prototype.isPrototypeOf(obj);
|
||||
};
|
||||
|
||||
var isArrayBufferView =
|
||||
ArrayBuffer.isView ||
|
||||
function(obj) {
|
||||
return (
|
||||
obj && viewClasses.indexOf(Object.prototype.toString.call(obj)) > -1
|
||||
);
|
||||
};
|
||||
}
|
||||
|
||||
function normalizeName(name) {
|
||||
if (typeof name !== 'string') {
|
||||
name = String(name);
|
||||
}
|
||||
if (/[^a-z0-9\-#$%&'*+.\^_`|~]/i.test(name)) {
|
||||
throw new TypeError('Invalid character in header field name');
|
||||
}
|
||||
return name.toLowerCase();
|
||||
}
|
||||
|
||||
function normalizeValue(value) {
|
||||
if (typeof value !== 'string') {
|
||||
value = String(value);
|
||||
}
|
||||
return value;
|
||||
}
|
||||
|
||||
// Build a destructive iterator for the value list
|
||||
function iteratorFor(items) {
|
||||
var iterator = {
|
||||
next: function() {
|
||||
var value = items.shift();
|
||||
return {done: value === undefined, value: value};
|
||||
},
|
||||
};
|
||||
|
||||
if (support.iterable) {
|
||||
iterator[Symbol.iterator] = function() {
|
||||
return iterator;
|
||||
};
|
||||
}
|
||||
|
||||
return iterator;
|
||||
}
|
||||
|
||||
function Headers(headers) {
|
||||
this.map = {};
|
||||
|
||||
if (headers instanceof Headers) {
|
||||
headers.forEach(function(value, name) {
|
||||
this.append(name, value);
|
||||
}, this);
|
||||
} else if (Array.isArray(headers)) {
|
||||
headers.forEach(function(header) {
|
||||
this.append(header[0], header[1]);
|
||||
}, this);
|
||||
} else if (headers) {
|
||||
Object.getOwnPropertyNames(headers).forEach(function(name) {
|
||||
this.append(name, headers[name]);
|
||||
}, this);
|
||||
}
|
||||
}
|
||||
|
||||
Headers.prototype.append = function(name, value) {
|
||||
name = normalizeName(name);
|
||||
value = normalizeValue(value);
|
||||
var oldValue = this.map[name];
|
||||
this.map[name] = oldValue ? oldValue + ',' + value : value;
|
||||
};
|
||||
|
||||
Headers.prototype['delete'] = function(name) {
|
||||
delete this.map[normalizeName(name)];
|
||||
};
|
||||
|
||||
Headers.prototype.get = function(name) {
|
||||
name = normalizeName(name);
|
||||
return this.has(name) ? this.map[name] : null;
|
||||
};
|
||||
|
||||
Headers.prototype.has = function(name) {
|
||||
return this.map.hasOwnProperty(normalizeName(name));
|
||||
};
|
||||
|
||||
Headers.prototype.set = function(name, value) {
|
||||
this.map[normalizeName(name)] = normalizeValue(value);
|
||||
};
|
||||
|
||||
Headers.prototype.forEach = function(callback, thisArg) {
|
||||
for (var name in this.map) {
|
||||
if (this.map.hasOwnProperty(name)) {
|
||||
callback.call(thisArg, this.map[name], name, this);
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
Headers.prototype.keys = function() {
|
||||
var items = [];
|
||||
this.forEach(function(value, name) {
|
||||
items.push(name);
|
||||
});
|
||||
return iteratorFor(items);
|
||||
};
|
||||
|
||||
Headers.prototype.values = function() {
|
||||
var items = [];
|
||||
this.forEach(function(value) {
|
||||
items.push(value);
|
||||
});
|
||||
return iteratorFor(items);
|
||||
};
|
||||
|
||||
Headers.prototype.entries = function() {
|
||||
var items = [];
|
||||
this.forEach(function(value, name) {
|
||||
items.push([name, value]);
|
||||
});
|
||||
return iteratorFor(items);
|
||||
};
|
||||
|
||||
if (support.iterable) {
|
||||
Headers.prototype[Symbol.iterator] = Headers.prototype.entries;
|
||||
}
|
||||
|
||||
function consumed(body) {
|
||||
if (body.bodyUsed) {
|
||||
return Promise.reject(new TypeError('Already read'));
|
||||
}
|
||||
body.bodyUsed = true;
|
||||
}
|
||||
|
||||
function fileReaderReady(reader) {
|
||||
return new Promise(function(resolve, reject) {
|
||||
reader.onload = function() {
|
||||
resolve(reader.result);
|
||||
};
|
||||
reader.onerror = function() {
|
||||
reject(reader.error);
|
||||
};
|
||||
});
|
||||
}
|
||||
|
||||
function readBlobAsArrayBuffer(blob) {
|
||||
var reader = new FileReader();
|
||||
var promise = fileReaderReady(reader);
|
||||
reader.readAsArrayBuffer(blob);
|
||||
return promise;
|
||||
}
|
||||
|
||||
function readBlobAsText(blob) {
|
||||
var reader = new FileReader();
|
||||
var promise = fileReaderReady(reader);
|
||||
reader.readAsText(blob);
|
||||
return promise;
|
||||
}
|
||||
|
||||
function readArrayBufferAsText(buf) {
|
||||
var view = new Uint8Array(buf);
|
||||
var chars = new Array(view.length);
|
||||
|
||||
for (var i = 0; i < view.length; i++) {
|
||||
chars[i] = String.fromCharCode(view[i]);
|
||||
}
|
||||
return chars.join('');
|
||||
}
|
||||
|
||||
function bufferClone(buf) {
|
||||
if (buf.slice) {
|
||||
return buf.slice(0);
|
||||
} else {
|
||||
var view = new Uint8Array(buf.byteLength);
|
||||
view.set(new Uint8Array(buf));
|
||||
return view.buffer;
|
||||
}
|
||||
}
|
||||
|
||||
function Body() {
|
||||
this.bodyUsed = false;
|
||||
|
||||
this._initBody = function(body) {
|
||||
this._bodyInit = body;
|
||||
if (!body) {
|
||||
this._bodyText = '';
|
||||
} else if (typeof body === 'string') {
|
||||
this._bodyText = body;
|
||||
} else if (support.blob && Blob.prototype.isPrototypeOf(body)) {
|
||||
this._bodyBlob = body;
|
||||
} else if (support.formData && FormData.prototype.isPrototypeOf(body)) {
|
||||
this._bodyFormData = body;
|
||||
} else if (
|
||||
support.searchParams &&
|
||||
URLSearchParams.prototype.isPrototypeOf(body)
|
||||
) {
|
||||
this._bodyText = body.toString();
|
||||
} else if (support.arrayBuffer && support.blob && isDataView(body)) {
|
||||
this._bodyArrayBuffer = bufferClone(body.buffer);
|
||||
// IE 10-11 can't handle a DataView body.
|
||||
this._bodyInit = new Blob([this._bodyArrayBuffer]);
|
||||
} else if (
|
||||
support.arrayBuffer &&
|
||||
(ArrayBuffer.prototype.isPrototypeOf(body) || isArrayBufferView(body))
|
||||
) {
|
||||
this._bodyArrayBuffer = bufferClone(body);
|
||||
} else {
|
||||
throw new Error('unsupported BodyInit type');
|
||||
}
|
||||
|
||||
if (!this.headers.get('content-type')) {
|
||||
if (typeof body === 'string') {
|
||||
this.headers.set('content-type', 'text/plain;charset=UTF-8');
|
||||
} else if (this._bodyBlob && this._bodyBlob.type) {
|
||||
this.headers.set('content-type', this._bodyBlob.type);
|
||||
} else if (
|
||||
support.searchParams &&
|
||||
URLSearchParams.prototype.isPrototypeOf(body)
|
||||
) {
|
||||
this.headers.set(
|
||||
'content-type',
|
||||
'application/x-www-form-urlencoded;charset=UTF-8',
|
||||
);
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
if (support.blob) {
|
||||
this.blob = function() {
|
||||
var rejected = consumed(this);
|
||||
if (rejected) {
|
||||
return rejected;
|
||||
}
|
||||
|
||||
if (this._bodyBlob) {
|
||||
return Promise.resolve(this._bodyBlob);
|
||||
} else if (this._bodyArrayBuffer) {
|
||||
return Promise.resolve(new Blob([this._bodyArrayBuffer]));
|
||||
} else if (this._bodyFormData) {
|
||||
throw new Error('could not read FormData body as blob');
|
||||
} else {
|
||||
return Promise.resolve(new Blob([this._bodyText]));
|
||||
}
|
||||
};
|
||||
|
||||
this.arrayBuffer = function() {
|
||||
if (this._bodyArrayBuffer) {
|
||||
return consumed(this) || Promise.resolve(this._bodyArrayBuffer);
|
||||
} else {
|
||||
return this.blob().then(readBlobAsArrayBuffer);
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
this.text = function() {
|
||||
var rejected = consumed(this);
|
||||
if (rejected) {
|
||||
return rejected;
|
||||
}
|
||||
|
||||
if (this._bodyBlob) {
|
||||
return readBlobAsText(this._bodyBlob);
|
||||
} else if (this._bodyArrayBuffer) {
|
||||
return Promise.resolve(readArrayBufferAsText(this._bodyArrayBuffer));
|
||||
} else if (this._bodyFormData) {
|
||||
throw new Error('could not read FormData body as text');
|
||||
} else {
|
||||
return Promise.resolve(this._bodyText);
|
||||
}
|
||||
};
|
||||
|
||||
if (support.formData) {
|
||||
this.formData = function() {
|
||||
return this.text().then(decode);
|
||||
};
|
||||
}
|
||||
|
||||
this.json = function() {
|
||||
return this.text().then(JSON.parse);
|
||||
};
|
||||
|
||||
return this;
|
||||
}
|
||||
|
||||
// HTTP methods whose capitalization should be normalized
|
||||
var methods = ['DELETE', 'GET', 'HEAD', 'OPTIONS', 'POST', 'PUT'];
|
||||
|
||||
function normalizeMethod(method) {
|
||||
var upcased = method.toUpperCase();
|
||||
return methods.indexOf(upcased) > -1 ? upcased : method;
|
||||
}
|
||||
|
||||
function Request(input, options) {
|
||||
options = options || {};
|
||||
var body = options.body;
|
||||
|
||||
if (input instanceof Request) {
|
||||
if (input.bodyUsed) {
|
||||
throw new TypeError('Already read');
|
||||
}
|
||||
this.url = input.url;
|
||||
this.credentials = input.credentials;
|
||||
if (!options.headers) {
|
||||
this.headers = new Headers(input.headers);
|
||||
}
|
||||
this.method = input.method;
|
||||
this.mode = input.mode;
|
||||
if (!body && input._bodyInit != null) {
|
||||
body = input._bodyInit;
|
||||
input.bodyUsed = true;
|
||||
}
|
||||
} else {
|
||||
this.url = String(input);
|
||||
}
|
||||
|
||||
this.credentials = options.credentials || this.credentials || 'omit';
|
||||
if (options.headers || !this.headers) {
|
||||
this.headers = new Headers(options.headers);
|
||||
}
|
||||
this.method = normalizeMethod(options.method || this.method || 'GET');
|
||||
this.mode = options.mode || this.mode || null;
|
||||
this.referrer = null;
|
||||
|
||||
if ((this.method === 'GET' || this.method === 'HEAD') && body) {
|
||||
throw new TypeError('Body not allowed for GET or HEAD requests');
|
||||
}
|
||||
this._initBody(body);
|
||||
}
|
||||
|
||||
Request.prototype.clone = function() {
|
||||
return new Request(this, {body: this._bodyInit});
|
||||
};
|
||||
|
||||
function decode(body) {
|
||||
var form = new FormData();
|
||||
body
|
||||
.trim()
|
||||
.split('&')
|
||||
.forEach(function(bytes) {
|
||||
if (bytes) {
|
||||
var split = bytes.split('=');
|
||||
var name = split.shift().replace(/\+/g, ' ');
|
||||
var value = split.join('=').replace(/\+/g, ' ');
|
||||
form.append(decodeURIComponent(name), decodeURIComponent(value));
|
||||
}
|
||||
});
|
||||
return form;
|
||||
}
|
||||
|
||||
function parseHeaders(rawHeaders) {
|
||||
var headers = new Headers();
|
||||
// Replace instances of \r\n and \n followed by at least one space or horizontal tab with a space
|
||||
// https://tools.ietf.org/html/rfc7230#section-3.2
|
||||
var preProcessedHeaders = rawHeaders.replace(/\r?\n[\t ]+/g, ' ');
|
||||
preProcessedHeaders.split(/\r?\n/).forEach(function(line) {
|
||||
var parts = line.split(':');
|
||||
var key = parts.shift().trim();
|
||||
if (key) {
|
||||
var value = parts.join(':').trim();
|
||||
headers.append(key, value);
|
||||
}
|
||||
});
|
||||
return headers;
|
||||
}
|
||||
|
||||
Body.call(Request.prototype);
|
||||
|
||||
function Response(bodyInit, options) {
|
||||
if (!options) {
|
||||
options = {};
|
||||
}
|
||||
|
||||
this.type = 'default';
|
||||
this.status = options.status === undefined ? 200 : options.status;
|
||||
this.ok = this.status >= 200 && this.status < 300;
|
||||
this.statusText = 'statusText' in options ? options.statusText : 'OK';
|
||||
this.headers = new Headers(options.headers);
|
||||
this.url = options.url || '';
|
||||
this._initBody(bodyInit);
|
||||
}
|
||||
|
||||
Body.call(Response.prototype);
|
||||
|
||||
Response.prototype.clone = function() {
|
||||
return new Response(this._bodyInit, {
|
||||
status: this.status,
|
||||
statusText: this.statusText,
|
||||
headers: new Headers(this.headers),
|
||||
url: this.url,
|
||||
});
|
||||
};
|
||||
|
||||
Response.error = function() {
|
||||
var response = new Response(null, {status: 0, statusText: ''});
|
||||
response.type = 'error';
|
||||
return response;
|
||||
};
|
||||
|
||||
var redirectStatuses = [301, 302, 303, 307, 308];
|
||||
|
||||
Response.redirect = function(url, status) {
|
||||
if (redirectStatuses.indexOf(status) === -1) {
|
||||
throw new RangeError('Invalid status code');
|
||||
}
|
||||
|
||||
return new Response(null, {status: status, headers: {location: url}});
|
||||
};
|
||||
|
||||
self.Headers = Headers;
|
||||
self.Request = Request;
|
||||
self.Response = Response;
|
||||
|
||||
self.fetch = function(input, init) {
|
||||
return new Promise(function(resolve, reject) {
|
||||
var request = new Request(input, init);
|
||||
var xhr = new XMLHttpRequest();
|
||||
|
||||
xhr.onload = function() {
|
||||
var options = {
|
||||
status: xhr.status,
|
||||
statusText: xhr.statusText,
|
||||
headers: parseHeaders(xhr.getAllResponseHeaders() || ''),
|
||||
};
|
||||
options.url =
|
||||
'responseURL' in xhr
|
||||
? xhr.responseURL
|
||||
: options.headers.get('X-Request-URL');
|
||||
var body = 'response' in xhr ? xhr.response : xhr.responseText;
|
||||
resolve(new Response(body, options));
|
||||
};
|
||||
|
||||
xhr.onerror = function() {
|
||||
reject(new TypeError('Network request failed'));
|
||||
};
|
||||
|
||||
xhr.ontimeout = function() {
|
||||
reject(new TypeError('Network request failed'));
|
||||
};
|
||||
|
||||
xhr.open(request.method, request.url, true);
|
||||
|
||||
if (request.credentials === 'include') {
|
||||
xhr.withCredentials = true;
|
||||
} else if (request.credentials === 'omit') {
|
||||
xhr.withCredentials = false;
|
||||
}
|
||||
|
||||
if ('responseType' in xhr && support.blob) {
|
||||
xhr.responseType = 'blob';
|
||||
}
|
||||
|
||||
request.headers.forEach(function(value, name) {
|
||||
xhr.setRequestHeader(name, value);
|
||||
});
|
||||
|
||||
xhr.send(
|
||||
typeof request._bodyInit === 'undefined' ? null : request._bodyInit,
|
||||
);
|
||||
});
|
||||
};
|
||||
self.fetch.polyfill = true;
|
||||
})(typeof self !== 'undefined' ? self : this);
|
||||
BIN
Binary file not shown.
|
Before Width: | Height: | Size: 315 KiB After Width: | Height: | Size: 315 KiB |
+1
-1
@@ -47,7 +47,7 @@ public class RNTesterApplication extends Application implements ReactApplication
|
||||
|
||||
@Override
|
||||
public void onCreate() {
|
||||
ReactFontManager.getInstance().addCustomFont(this, "Srisakdi", R.font.srisakdi);
|
||||
ReactFontManager.getInstance().addCustomFont(this, "Rubik", R.font.rubik);
|
||||
super.onCreate();
|
||||
}
|
||||
|
||||
|
||||
@@ -0,0 +1,8 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<font-family xmlns:app="http://schemas.android.com/apk/res-auto">
|
||||
<font app:fontStyle="normal" app:fontWeight="300" app:font="@font/rubik_light"/>
|
||||
<font app:fontStyle="normal" app:fontWeight="400" app:font="@font/rubik_regular"/>
|
||||
<font app:fontStyle="normal" app:fontWeight="500" app:font="@font/rubik_medium" />
|
||||
<font app:fontStyle="normal" app:fontWeight="700" app:font="@font/rubik_bold" />
|
||||
<font app:fontStyle="italic" app:fontWeight="500" app:font="@font/rubik_medium_italic" />
|
||||
</font-family>
|
||||
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
Binary file not shown.
Binary file not shown.
@@ -1,5 +0,0 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<font-family xmlns:app="http://schemas.android.com/apk/res-auto">
|
||||
<font app:fontStyle="normal" app:fontWeight="400" app:font="@font/srisakdi_regular"/>
|
||||
<font app:fontStyle="normal" app:fontWeight="700" app:font="@font/srisakdi_bold" />
|
||||
</font-family>
|
||||
Binary file not shown.
Binary file not shown.
@@ -183,13 +183,41 @@ class TextExample extends React.Component<{}> {
|
||||
<Text style={{fontFamily: 'notoserif', fontStyle: 'italic'}}>
|
||||
NotoSerif Italic (Missing Font file)
|
||||
</Text>
|
||||
<Text style={{fontFamily: 'Srisakdi'}}>Srisakdi Regular</Text>
|
||||
<Text
|
||||
style={{
|
||||
fontFamily: 'Srisakdi',
|
||||
fontWeight: 'bold',
|
||||
fontFamily: 'Rubik',
|
||||
fontWeight: 'normal',
|
||||
}}>
|
||||
Srisakdi Bold
|
||||
Rubik Regular
|
||||
</Text>
|
||||
<Text
|
||||
style={{
|
||||
fontFamily: 'Rubik',
|
||||
fontWeight: '300',
|
||||
}}>
|
||||
Rubik Light
|
||||
</Text>
|
||||
<Text
|
||||
style={{
|
||||
fontFamily: 'Rubik',
|
||||
fontWeight: '700',
|
||||
}}>
|
||||
Rubik Bold
|
||||
</Text>
|
||||
<Text
|
||||
style={{
|
||||
fontFamily: 'Rubik',
|
||||
fontWeight: '500',
|
||||
}}>
|
||||
Rubik Medium
|
||||
</Text>
|
||||
<Text
|
||||
style={{
|
||||
fontFamily: 'Rubik',
|
||||
fontStyle: 'italic',
|
||||
fontWeight: '500',
|
||||
}}>
|
||||
Rubik Medium Italic
|
||||
</Text>
|
||||
</View>
|
||||
</View>
|
||||
@@ -205,15 +233,15 @@ class TextExample extends React.Component<{}> {
|
||||
</RNTesterBlock>
|
||||
<RNTesterBlock title="Font Weight">
|
||||
<Text style={{fontWeight: 'bold'}}>Move fast and be bold</Text>
|
||||
<Text style={{fontWeight: 'normal'}}>Move fast and be bold</Text>
|
||||
<Text style={{fontWeight: 'normal'}}>Move fast and be normal</Text>
|
||||
</RNTesterBlock>
|
||||
<RNTesterBlock title="Font Style">
|
||||
<Text style={{fontStyle: 'italic'}}>Move fast and be bold</Text>
|
||||
<Text style={{fontStyle: 'normal'}}>Move fast and be bold</Text>
|
||||
<Text style={{fontStyle: 'italic'}}>Move fast and be italic</Text>
|
||||
<Text style={{fontStyle: 'normal'}}>Move fast and be normal</Text>
|
||||
</RNTesterBlock>
|
||||
<RNTesterBlock title="Font Style and Weight">
|
||||
<Text style={{fontStyle: 'italic', fontWeight: 'bold'}}>
|
||||
Move fast and be bold
|
||||
Move fast and be both bold and italic
|
||||
</Text>
|
||||
</RNTesterBlock>
|
||||
<RNTesterBlock title="Text Decoration">
|
||||
|
||||
@@ -453,6 +453,23 @@ class TextWithCapBaseBox extends React.Component<*, *> {
|
||||
}
|
||||
}
|
||||
|
||||
function LongTextExample() {
|
||||
const [collapsed, setCollapsed] = React.useState(true);
|
||||
return (
|
||||
<View>
|
||||
<Button
|
||||
onPress={() => setCollapsed(state => !state)}
|
||||
title="Toggle long text"
|
||||
/>
|
||||
<Text>
|
||||
{Array.from({length: collapsed ? 5 : 5000})
|
||||
.map((_, i) => i)
|
||||
.join('\n')}
|
||||
</Text>
|
||||
</View>
|
||||
);
|
||||
}
|
||||
|
||||
exports.title = '<Text>';
|
||||
exports.description = 'Base component for rendering styled text.';
|
||||
exports.displayName = 'TextExample';
|
||||
@@ -1125,4 +1142,10 @@ exports.examples = [
|
||||
);
|
||||
},
|
||||
},
|
||||
{
|
||||
title: 'Async rendering for long text',
|
||||
render: function() {
|
||||
return <LongTextExample />;
|
||||
},
|
||||
},
|
||||
];
|
||||
|
||||
@@ -91,6 +91,7 @@ static BOOL RCTParseSelectorPart(const char **input, NSMutableString *selector)
|
||||
static BOOL RCTParseUnused(const char **input)
|
||||
{
|
||||
return RCTReadString(input, "__attribute__((unused))") ||
|
||||
RCTReadString(input, "__attribute__((__unused__))") ||
|
||||
RCTReadString(input, "__unused");
|
||||
}
|
||||
|
||||
|
||||
@@ -21,9 +21,9 @@ static void __makeVersion()
|
||||
{
|
||||
__rnVersion = @{
|
||||
RCTVersionMajor: @(0),
|
||||
RCTVersionMinor: @(0),
|
||||
RCTVersionMinor: @(60),
|
||||
RCTVersionPatch: @(0),
|
||||
RCTVersionPrerelease: [NSNull null],
|
||||
RCTVersionPrerelease: @"rc.3",
|
||||
};
|
||||
}
|
||||
|
||||
|
||||
@@ -129,8 +129,6 @@ RCT_NOT_IMPLEMENTED(- (instancetype)initWithCoder:coder)
|
||||
[subview addGestureRecognizer:_menuButtonGestureRecognizer];
|
||||
}
|
||||
#endif
|
||||
subview.autoresizingMask = UIViewAutoresizingFlexibleHeight |
|
||||
UIViewAutoresizingFlexibleWidth;
|
||||
|
||||
[_modalViewController.view insertSubview:subview atIndex:0];
|
||||
_reactSubview = subview;
|
||||
|
||||
@@ -297,12 +297,12 @@
|
||||
return self;
|
||||
}
|
||||
|
||||
- (NSArray<NSString *> *)accessibilityActions
|
||||
- (NSArray<NSDictionary *> *)accessibilityActions
|
||||
{
|
||||
return objc_getAssociatedObject(self, _cmd);
|
||||
}
|
||||
|
||||
- (void)setAccessibilityActions:(NSArray<NSString *> *)accessibilityActions
|
||||
- (void)setAccessibilityActions:(NSArray<NSDictionary *> *)accessibilityActions
|
||||
{
|
||||
objc_setAssociatedObject(self, @selector(accessibilityActions), accessibilityActions, OBJC_ASSOCIATION_RETAIN_NONATOMIC);
|
||||
}
|
||||
|
||||
@@ -193,13 +193,23 @@ def findNdkBuildFullPath() {
|
||||
def ndkDir = android.hasProperty("plugin") ? android.plugin.ndkFolder :
|
||||
plugins.getPlugin("com.android.library").hasProperty("sdkHandler") ?
|
||||
plugins.getPlugin("com.android.library").sdkHandler.getNdkFolder() :
|
||||
android.ndkDirectory.absolutePath
|
||||
android.ndkDirectory ? android.ndkDirectory.absolutePath : null
|
||||
if (ndkDir) {
|
||||
return new File(ndkDir, getNdkBuildName()).getAbsolutePath()
|
||||
}
|
||||
return null
|
||||
}
|
||||
|
||||
def reactNativeDevServerPort() {
|
||||
def value = project.getProperties().get("reactNativeDevServerPort")
|
||||
return value != null ? value : "8081"
|
||||
}
|
||||
|
||||
def reactNativeInspectorProxyPort() {
|
||||
def value = project.getProperties().get("reactNativeInspectorProxyPort")
|
||||
return value != null ? value : reactNativeDevServerPort()
|
||||
}
|
||||
|
||||
def getNdkBuildFullPath() {
|
||||
def ndkBuildFullPath = findNdkBuildFullPath()
|
||||
if (ndkBuildFullPath == null) {
|
||||
@@ -284,6 +294,10 @@ android {
|
||||
|
||||
buildConfigField("boolean", "IS_INTERNAL_BUILD", "false")
|
||||
buildConfigField("int", "EXOPACKAGE_FLAGS", "0")
|
||||
|
||||
resValue "integer", "react_native_dev_server_port", reactNativeDevServerPort()
|
||||
resValue "integer", "react_native_inspector_proxy_port", reactNativeInspectorProxyPort()
|
||||
|
||||
testApplicationId("com.facebook.react.tests.gradle")
|
||||
testInstrumentationRunner("androidx.test.runner.AndroidJUnitRunner")
|
||||
}
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
VERSION_NAME=1000.0.0-master
|
||||
VERSION_NAME=0.60.0-rc.3
|
||||
GROUP=com.facebook.react
|
||||
|
||||
POM_NAME=ReactNative
|
||||
@@ -12,7 +12,7 @@ JUNIT_VERSION=4.12
|
||||
FEST_ASSERT_CORE_VERSION=2.0M10
|
||||
|
||||
ANDROID_SUPPORT_TEST_VERSION=1.0.2
|
||||
FRESCO_VERSION=1.13.0
|
||||
FRESCO_VERSION=2.0.0
|
||||
OKHTTP_VERSION=3.12.1
|
||||
SO_LOADER_VERSION=0.6.0
|
||||
|
||||
|
||||
@@ -72,7 +72,7 @@ public abstract class JSBundleLoader {
|
||||
delegate.loadScriptFromFile(cachedFileLocation, sourceURL, false);
|
||||
return sourceURL;
|
||||
} catch (Exception e) {
|
||||
throw DebugServerException.makeGeneric(e.getMessage(), e);
|
||||
throw DebugServerException.makeGeneric(sourceURL, e.getMessage(), e);
|
||||
}
|
||||
}
|
||||
};
|
||||
@@ -94,7 +94,7 @@ public abstract class JSBundleLoader {
|
||||
delegate.loadScriptFromDeltaBundle(sourceURL, nativeDeltaClient, false);
|
||||
return sourceURL;
|
||||
} catch (Exception e) {
|
||||
throw DebugServerException.makeGeneric(e.getMessage(), e);
|
||||
throw DebugServerException.makeGeneric(sourceURL, e.getMessage(), e);
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
@@ -11,6 +11,7 @@ import javax.annotation.Nullable;
|
||||
|
||||
import java.io.IOException;
|
||||
|
||||
import android.net.Uri;
|
||||
import android.text.TextUtils;
|
||||
|
||||
import com.facebook.common.logging.FLog;
|
||||
@@ -28,15 +29,19 @@ public class DebugServerException extends RuntimeException {
|
||||
"\u2022 Ensure that the packager server is running\n" +
|
||||
"\u2022 Ensure that your device/emulator is connected to your machine and has USB debugging enabled - run 'adb devices' to see a list of connected devices\n" +
|
||||
"\u2022 Ensure Airplane Mode is disabled\n" +
|
||||
"\u2022 If you're on a physical device connected to the same machine, run 'adb reverse tcp:8081 tcp:8081' to forward requests from your device\n" +
|
||||
"\u2022 If your device is on the same Wi-Fi network, set 'Debug server host & port for device' in 'Dev settings' to your machine's IP address and the port of the local dev server - e.g. 10.0.1.1:8081\n\n";
|
||||
"\u2022 If you're on a physical device connected to the same machine, run 'adb reverse tcp:<PORT> tcp:<PORT>' to forward requests from your device\n" +
|
||||
"\u2022 If your device is on the same Wi-Fi network, set 'Debug server host & port for device' in 'Dev settings' to your machine's IP address and the port of the local dev server - e.g. 10.0.1.1:<PORT>\n\n";
|
||||
|
||||
public static DebugServerException makeGeneric(String reason, Throwable t) {
|
||||
return makeGeneric(reason, "", t);
|
||||
public static DebugServerException makeGeneric(String url, String reason, Throwable t) {
|
||||
return makeGeneric(url, reason, "", t);
|
||||
}
|
||||
|
||||
public static DebugServerException makeGeneric(String reason, String extra, Throwable t) {
|
||||
return new DebugServerException(reason + GENERIC_ERROR_MESSAGE + extra, t);
|
||||
public static DebugServerException makeGeneric(String url, String reason, String extra, Throwable t) {
|
||||
Uri uri = Uri.parse(url);
|
||||
|
||||
String message = GENERIC_ERROR_MESSAGE.replace("<PORT>", String.valueOf(uri.getPort()));
|
||||
|
||||
return new DebugServerException(reason + message + extra, t);
|
||||
}
|
||||
|
||||
private DebugServerException(String description, String fileName, int lineNumber, int column) {
|
||||
@@ -56,7 +61,7 @@ public class DebugServerException extends RuntimeException {
|
||||
* @param str json string returned by the debug server
|
||||
* @return A DebugServerException or null if the string is not of proper form.
|
||||
*/
|
||||
@Nullable public static DebugServerException parse(String str) {
|
||||
@Nullable public static DebugServerException parse(String url, String str) {
|
||||
if (TextUtils.isEmpty(str)) {
|
||||
return null;
|
||||
}
|
||||
|
||||
@@ -142,10 +142,12 @@ public class BundleDownloader {
|
||||
}
|
||||
mDownloadBundleFromURLCall = null;
|
||||
|
||||
String url = call.request().url().toString();
|
||||
|
||||
callback.onFailure(
|
||||
DebugServerException.makeGeneric(
|
||||
DebugServerException.makeGeneric(url,
|
||||
"Could not connect to development server.",
|
||||
"URL: " + call.request().url().toString(),
|
||||
"URL: " + url,
|
||||
e));
|
||||
}
|
||||
|
||||
@@ -284,7 +286,7 @@ public class BundleDownloader {
|
||||
// Check for server errors. If the server error has the expected form, fail with more info.
|
||||
if (statusCode != 200) {
|
||||
String bodyString = body.readUtf8();
|
||||
DebugServerException debugServerException = DebugServerException.parse(bodyString);
|
||||
DebugServerException debugServerException = DebugServerException.parse(url, bodyString);
|
||||
if (debugServerException != null) {
|
||||
callback.onFailure(debugServerException);
|
||||
} else {
|
||||
|
||||
@@ -8,6 +8,7 @@
|
||||
package com.facebook.react.devsupport;
|
||||
|
||||
import android.content.Context;
|
||||
import android.content.res.Resources;
|
||||
import android.os.AsyncTask;
|
||||
import android.os.Handler;
|
||||
import android.os.Looper;
|
||||
@@ -261,7 +262,7 @@ public class DevServerHelper {
|
||||
|
||||
public boolean doSync() {
|
||||
try {
|
||||
String attachToNuclideUrl = getInspectorAttachUrl(title);
|
||||
String attachToNuclideUrl = getInspectorAttachUrl(context, title);
|
||||
OkHttpClient client = new OkHttpClient();
|
||||
Request request = new Request.Builder().url(attachToNuclideUrl).build();
|
||||
client.newCall(request).execute();
|
||||
@@ -367,11 +368,11 @@ public class DevServerHelper {
|
||||
mPackageName);
|
||||
}
|
||||
|
||||
private String getInspectorAttachUrl(String title) {
|
||||
private String getInspectorAttachUrl(Context context, String title) {
|
||||
return String.format(
|
||||
Locale.US,
|
||||
"http://%s/nuclide/attach-debugger-nuclide?title=%s&app=%s&device=%s",
|
||||
AndroidInfoHelpers.getServerHost(),
|
||||
AndroidInfoHelpers.getServerHost(context),
|
||||
title,
|
||||
mPackageName,
|
||||
AndroidInfoHelpers.getFriendlyDeviceName());
|
||||
|
||||
@@ -12,6 +12,7 @@ import android.content.ComponentName;
|
||||
import android.content.Intent;
|
||||
import android.content.pm.PackageManager;
|
||||
import android.net.Uri;
|
||||
import android.nfc.NfcAdapter;
|
||||
import android.provider.Settings;
|
||||
|
||||
import com.facebook.react.bridge.JSApplicationIllegalArgumentException;
|
||||
@@ -59,7 +60,7 @@ public class IntentModule extends ReactContextBaseJavaModule {
|
||||
String action = intent.getAction();
|
||||
Uri uri = intent.getData();
|
||||
|
||||
if (Intent.ACTION_VIEW.equals(action) && uri != null) {
|
||||
if (uri != null && (Intent.ACTION_VIEW.equals(action) || NfcAdapter.ACTION_NDEF_DISCOVERED.equals(action))) {
|
||||
initialURL = uri.toString();
|
||||
}
|
||||
}
|
||||
|
||||
+29
-8
@@ -8,12 +8,14 @@ package com.facebook.react.modules.systeminfo;
|
||||
import java.io.BufferedReader;
|
||||
import java.io.InputStreamReader;
|
||||
import java.nio.charset.Charset;
|
||||
import java.nio.charset.StandardCharsets;
|
||||
import java.util.Locale;
|
||||
|
||||
import android.content.Context;
|
||||
import android.content.res.Resources;
|
||||
import android.os.Build;
|
||||
|
||||
import com.facebook.common.logging.FLog;
|
||||
import com.facebook.react.R;
|
||||
|
||||
public class AndroidInfoHelpers {
|
||||
|
||||
@@ -23,9 +25,6 @@ public class AndroidInfoHelpers {
|
||||
|
||||
public static final String METRO_HOST_PROP_NAME = "metro.host";
|
||||
|
||||
private static final int DEBUG_SERVER_HOST_PORT = 8081;
|
||||
private static final int INSPECTOR_PROXY_PORT = 8081;
|
||||
|
||||
private static final String TAG = AndroidInfoHelpers.class.getSimpleName();
|
||||
|
||||
private static boolean isRunningOnGenymotion() {
|
||||
@@ -36,12 +35,24 @@ public class AndroidInfoHelpers {
|
||||
return Build.FINGERPRINT.contains("generic");
|
||||
}
|
||||
|
||||
public static String getServerHost() {
|
||||
return getServerIpAddress(DEBUG_SERVER_HOST_PORT);
|
||||
public static String getServerHost(Integer port) {
|
||||
return getServerIpAddress(port);
|
||||
}
|
||||
|
||||
public static String getInspectorProxyHost() {
|
||||
return getServerIpAddress(INSPECTOR_PROXY_PORT);
|
||||
public static String getServerHost(Context context) {
|
||||
return getServerIpAddress(getDevServerPort(context));
|
||||
}
|
||||
|
||||
public static String getAdbReverseTcpCommand(Integer port) {
|
||||
return "adb reverse tcp:" + port + " tcp:" + port;
|
||||
}
|
||||
|
||||
public static String getAdbReverseTcpCommand(Context context) {
|
||||
return getAdbReverseTcpCommand(getDevServerPort(context));
|
||||
}
|
||||
|
||||
public static String getInspectorProxyHost(Context context) {
|
||||
return getServerIpAddress(getInspectorProxyPort(context));
|
||||
}
|
||||
|
||||
// WARNING(festevezga): This RN helper method has been copied to another FB-only target. Any changes should be applied to both.
|
||||
@@ -54,6 +65,16 @@ public class AndroidInfoHelpers {
|
||||
}
|
||||
}
|
||||
|
||||
private static Integer getDevServerPort(Context context) {
|
||||
Resources resources = context.getResources();
|
||||
return resources.getInteger(R.integer.react_native_dev_server_port);
|
||||
}
|
||||
|
||||
private static Integer getInspectorProxyPort(Context context) {
|
||||
Resources resources = context.getResources();
|
||||
return resources.getInteger(R.integer.react_native_dev_server_port);
|
||||
}
|
||||
|
||||
private static String getServerIpAddress(int port) {
|
||||
// Since genymotion runs in vbox it use different hostname to refer to adb host.
|
||||
// We detect whether app runs on genymotion and replace js bundle server hostname accordingly
|
||||
|
||||
+13
-4
@@ -9,10 +9,13 @@ package com.facebook.react.modules.systeminfo;
|
||||
|
||||
import android.annotation.SuppressLint;
|
||||
import android.app.UiModeManager;
|
||||
import android.content.Context;
|
||||
import android.content.res.Configuration;
|
||||
import android.content.res.Resources;
|
||||
import android.os.Build;
|
||||
import android.provider.Settings.Secure;
|
||||
|
||||
import com.facebook.react.R;
|
||||
import com.facebook.react.bridge.ReactApplicationContext;
|
||||
import com.facebook.react.bridge.ReactContextBaseJavaModule;
|
||||
import com.facebook.react.common.build.ReactBuildConfig;
|
||||
@@ -35,9 +38,7 @@ public class AndroidInfoModule extends ReactContextBaseJavaModule {
|
||||
public static final String NAME = "PlatformConstants";
|
||||
private static final String IS_TESTING = "IS_TESTING";
|
||||
|
||||
public AndroidInfoModule(ReactApplicationContext reactContext) {
|
||||
super(reactContext);
|
||||
}
|
||||
public AndroidInfoModule(ReactApplicationContext reactContext) { super(reactContext); }
|
||||
|
||||
/**
|
||||
* See: https://developer.android.com/reference/android/app/UiModeManager.html#getCurrentModeType()
|
||||
@@ -74,7 +75,7 @@ public class AndroidInfoModule extends ReactContextBaseJavaModule {
|
||||
constants.put("Fingerprint", Build.FINGERPRINT);
|
||||
constants.put("Model", Build.MODEL);
|
||||
if (ReactBuildConfig.DEBUG) {
|
||||
constants.put("ServerHost", AndroidInfoHelpers.getServerHost());
|
||||
constants.put("ServerHost", getServerHost());
|
||||
}
|
||||
constants.put("isTesting", "true".equals(System.getProperty(IS_TESTING))
|
||||
|| isRunningScreenshotTest());
|
||||
@@ -96,4 +97,12 @@ public class AndroidInfoModule extends ReactContextBaseJavaModule {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
private String getServerHost() {
|
||||
Resources resources = getReactApplicationContext().getApplicationContext().getResources();
|
||||
|
||||
Integer devServerPort = resources.getInteger(R.integer.react_native_dev_server_port);
|
||||
|
||||
return AndroidInfoHelpers.getServerHost(devServerPort);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -14,6 +14,7 @@ rn_android_library(
|
||||
react_native_target("java/com/facebook/react/bridge:bridge"),
|
||||
react_native_target("java/com/facebook/react/common:common"),
|
||||
react_native_target("java/com/facebook/react/module/annotations:annotations"),
|
||||
react_native_target("res:systeminfo"),
|
||||
],
|
||||
exported_deps = [
|
||||
":systeminfo-moduleless",
|
||||
@@ -29,8 +30,10 @@ rn_android_library(
|
||||
"PUBLIC",
|
||||
],
|
||||
deps = [
|
||||
react_native_target("java/com/facebook/react/common:common"),
|
||||
react_native_dep("libraries/fbcore/src/main/java/com/facebook/common/logging:logging"),
|
||||
react_native_dep("third-party/java/infer-annotations:infer-annotations"),
|
||||
react_native_dep("third-party/java/jsr-305:jsr-305"),
|
||||
react_native_target("res:systeminfo"),
|
||||
],
|
||||
)
|
||||
|
||||
+2
-2
@@ -16,7 +16,7 @@ import java.util.Map;
|
||||
public class ReactNativeVersion {
|
||||
public static final Map<String, Object> VERSION = MapBuilder.<String, Object>of(
|
||||
"major", 0,
|
||||
"minor", 0,
|
||||
"minor", 60,
|
||||
"patch", 0,
|
||||
"prerelease", null);
|
||||
"prerelease", "rc.3");
|
||||
}
|
||||
|
||||
+7
-5
@@ -7,13 +7,13 @@
|
||||
|
||||
package com.facebook.react.packagerconnection;
|
||||
|
||||
import javax.annotation.Nullable;
|
||||
|
||||
import android.content.Context;
|
||||
import android.content.SharedPreferences;
|
||||
import android.preference.PreferenceManager;
|
||||
import android.text.TextUtils;
|
||||
|
||||
import javax.annotation.Nullable;
|
||||
|
||||
import com.facebook.common.logging.FLog;
|
||||
import com.facebook.infer.annotation.Assertions;
|
||||
import com.facebook.react.modules.systeminfo.AndroidInfoHelpers;
|
||||
@@ -24,10 +24,12 @@ public class PackagerConnectionSettings {
|
||||
|
||||
private final SharedPreferences mPreferences;
|
||||
private final String mPackageName;
|
||||
private final Context mAppContext;
|
||||
|
||||
public PackagerConnectionSettings(Context applicationContext) {
|
||||
mPreferences = PreferenceManager.getDefaultSharedPreferences(applicationContext);
|
||||
mPackageName = applicationContext.getPackageName();
|
||||
mAppContext = applicationContext;
|
||||
}
|
||||
|
||||
public String getDebugServerHost() {
|
||||
@@ -39,12 +41,12 @@ public class PackagerConnectionSettings {
|
||||
return Assertions.assertNotNull(hostFromSettings);
|
||||
}
|
||||
|
||||
String host = AndroidInfoHelpers.getServerHost();
|
||||
String host = AndroidInfoHelpers.getServerHost(mAppContext);
|
||||
|
||||
if (host.equals(AndroidInfoHelpers.DEVICE_LOCALHOST)) {
|
||||
FLog.w(
|
||||
TAG,
|
||||
"You seem to be running on device. Run 'adb reverse tcp:8081 tcp:8081' " +
|
||||
"You seem to be running on device. Run '" + AndroidInfoHelpers.getAdbReverseTcpCommand(mAppContext) + "' " +
|
||||
"to forward the debug server's port to the device.");
|
||||
}
|
||||
|
||||
@@ -52,7 +54,7 @@ public class PackagerConnectionSettings {
|
||||
}
|
||||
|
||||
public String getInspectorServerHost() {
|
||||
return AndroidInfoHelpers.getInspectorProxyHost();
|
||||
return AndroidInfoHelpers.getInspectorProxyHost(mAppContext);
|
||||
}
|
||||
|
||||
public @Nullable String getPackageName() {
|
||||
|
||||
@@ -104,7 +104,7 @@ public class CustomStyleSpan extends MetricAffectingSpan implements ReactSpan {
|
||||
}
|
||||
|
||||
if (family != null) {
|
||||
typeface = ReactFontManager.getInstance().getTypeface(family, want, assetManager);
|
||||
typeface = ReactFontManager.getInstance().getTypeface(family, want, weight, assetManager);
|
||||
} else if (typeface != null) {
|
||||
// TODO(t9055065): Fix custom fonts getting applied to text children with different style
|
||||
typeface = Typeface.create(typeface, want);
|
||||
|
||||
+9
-11
@@ -309,7 +309,7 @@ public abstract class ReactBaseTextShadowNode extends LayoutShadowNode {
|
||||
&& fontWeightString.charAt(0) <= '9'
|
||||
&& fontWeightString.charAt(0) >= '1'
|
||||
? 100 * (fontWeightString.charAt(0) - '0')
|
||||
: -1;
|
||||
: UNSET;
|
||||
}
|
||||
|
||||
protected TextAttributes mTextAttributes;
|
||||
@@ -459,8 +459,8 @@ public abstract class ReactBaseTextShadowNode extends LayoutShadowNode {
|
||||
markUpdated();
|
||||
}
|
||||
|
||||
@ReactProp(name = ViewProps.BACKGROUND_COLOR)
|
||||
public void setBackgroundColor(Integer color) {
|
||||
@ReactProp(name = ViewProps.BACKGROUND_COLOR, customType = "Color")
|
||||
public void setBackgroundColor(@Nullable Integer color) {
|
||||
// Background color needs to be handled here for virtual nodes so it can be incorporated into
|
||||
// the span. However, it doesn't need to be applied to non-virtual nodes because non-virtual
|
||||
// nodes get mapped to native views and native views get their background colors get set via
|
||||
@@ -487,14 +487,12 @@ public abstract class ReactBaseTextShadowNode extends LayoutShadowNode {
|
||||
@ReactProp(name = ViewProps.FONT_WEIGHT)
|
||||
public void setFontWeight(@Nullable String fontWeightString) {
|
||||
int fontWeightNumeric =
|
||||
fontWeightString != null ? parseNumericFontWeight(fontWeightString) : -1;
|
||||
int fontWeight = UNSET;
|
||||
if (fontWeightNumeric >= 500 || "bold".equals(fontWeightString)) {
|
||||
fontWeight = Typeface.BOLD;
|
||||
} else if ("normal".equals(fontWeightString)
|
||||
|| (fontWeightNumeric != -1 && fontWeightNumeric < 500)) {
|
||||
fontWeight = Typeface.NORMAL;
|
||||
}
|
||||
fontWeightString != null ? parseNumericFontWeight(fontWeightString) : UNSET;
|
||||
int fontWeight = fontWeightNumeric != UNSET ? fontWeightNumeric : Typeface.NORMAL;
|
||||
|
||||
if (fontWeight == 700 || "bold".equals(fontWeightString)) fontWeight = Typeface.BOLD;
|
||||
else if (fontWeight == 400 || "normal".equals(fontWeightString)) fontWeight = Typeface.NORMAL;
|
||||
|
||||
if (fontWeight != mFontWeight) {
|
||||
mFontWeight = fontWeight;
|
||||
markUpdated();
|
||||
|
||||
@@ -13,6 +13,7 @@ import java.util.Map;
|
||||
import android.content.Context;
|
||||
import android.content.res.AssetManager;
|
||||
import android.graphics.Typeface;
|
||||
import android.os.Build;
|
||||
import android.util.SparseArray;
|
||||
|
||||
import androidx.annotation.NonNull;
|
||||
@@ -54,23 +55,32 @@ public class ReactFontManager {
|
||||
return sReactFontManagerInstance;
|
||||
}
|
||||
|
||||
public @Nullable Typeface getTypeface(
|
||||
String fontFamilyName,
|
||||
int style,
|
||||
AssetManager assetManager) {
|
||||
return getTypeface(fontFamilyName, style, 0, assetManager);
|
||||
}
|
||||
|
||||
public @Nullable Typeface getTypeface(
|
||||
String fontFamilyName,
|
||||
int style,
|
||||
int weight,
|
||||
AssetManager assetManager) {
|
||||
if(mCustomTypefaceCache.containsKey(fontFamilyName)) {
|
||||
Typeface typeface = mCustomTypefaceCache.get(fontFamilyName);
|
||||
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.P && weight >= 100 && weight <= 1000) {
|
||||
return Typeface.create(typeface, weight, (style & Typeface.ITALIC) != 0);
|
||||
}
|
||||
return Typeface.create(typeface, style);
|
||||
}
|
||||
|
||||
FontFamily fontFamily = mFontCache.get(fontFamilyName);
|
||||
if (fontFamily == null) {
|
||||
fontFamily = new FontFamily();
|
||||
mFontCache.put(fontFamilyName, fontFamily);
|
||||
}
|
||||
|
||||
if(mCustomTypefaceCache.containsKey(fontFamilyName)) {
|
||||
return Typeface.create(
|
||||
mCustomTypefaceCache.get(fontFamilyName),
|
||||
style
|
||||
);
|
||||
}
|
||||
|
||||
Typeface typeface = fontFamily.getTypeface(style);
|
||||
if (typeface == null) {
|
||||
typeface = createTypeface(fontFamilyName, style, assetManager);
|
||||
|
||||
@@ -115,6 +115,9 @@ public class ReactTextShadowNode extends ReactBaseTextShadowNode {
|
||||
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
|
||||
builder.setJustificationMode(mJustificationMode);
|
||||
}
|
||||
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.P) {
|
||||
builder.setUseLineSpacingFromFallbacks(true);
|
||||
}
|
||||
layout = builder.build();
|
||||
}
|
||||
|
||||
@@ -139,14 +142,18 @@ public class ReactTextShadowNode extends ReactBaseTextShadowNode {
|
||||
new StaticLayout(
|
||||
text, textPaint, (int) width, alignment, 1.f, 0.f, mIncludeFontPadding);
|
||||
} else {
|
||||
layout =
|
||||
StaticLayout.Builder builder =
|
||||
StaticLayout.Builder.obtain(text, 0, text.length(), textPaint, (int) width)
|
||||
.setAlignment(alignment)
|
||||
.setLineSpacing(0.f, 1.f)
|
||||
.setIncludePad(mIncludeFontPadding)
|
||||
.setBreakStrategy(mTextBreakStrategy)
|
||||
.setHyphenationFrequency(Layout.HYPHENATION_FREQUENCY_NORMAL)
|
||||
.build();
|
||||
.setHyphenationFrequency(Layout.HYPHENATION_FREQUENCY_NORMAL);
|
||||
|
||||
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.P) {
|
||||
builder.setUseLineSpacingFromFallbacks(true);
|
||||
}
|
||||
layout = builder.build();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -199,6 +199,8 @@ void CatalystInstanceImpl::jniLoadScriptFromAssets(
|
||||
sourceURL,
|
||||
loadSynchronously);
|
||||
return;
|
||||
} else if (Instance::isIndexedRAMBundle(&script)) {
|
||||
instance_->loadRAMBundleFromString(std::move(script), sourceURL);
|
||||
} else {
|
||||
instance_->loadScriptFromString(std::move(script), sourceURL, loadSynchronously);
|
||||
}
|
||||
|
||||
@@ -9,8 +9,8 @@ rn_android_prebuilt_aar(
|
||||
|
||||
fb_native.remote_file(
|
||||
name = "fresco-binary-aar",
|
||||
sha1 = "0369d4ac5a48cbd748854ea9043c88b807940fb3",
|
||||
url = "mvn:com.facebook.fresco:fresco:aar:1.13.0",
|
||||
sha1 = "d473020b37b7cdd3171154942b55021a55a9d990",
|
||||
url = "mvn:com.facebook.fresco:fresco:aar:2.0.0",
|
||||
)
|
||||
|
||||
rn_android_prebuilt_aar(
|
||||
@@ -21,8 +21,8 @@ rn_android_prebuilt_aar(
|
||||
|
||||
fb_native.remote_file(
|
||||
name = "drawee-binary-aar",
|
||||
sha1 = "b846ceec4b708b630693fedb79c85aabd1dbdeed",
|
||||
url = "mvn:com.facebook.fresco:drawee:aar:1.13.0",
|
||||
sha1 = "a85bfaeb87a9c8d1521c70edf6ded91ff9999475",
|
||||
url = "mvn:com.facebook.fresco:drawee:aar:2.0.0",
|
||||
)
|
||||
|
||||
rn_android_library(
|
||||
@@ -44,8 +44,8 @@ rn_android_prebuilt_aar(
|
||||
|
||||
fb_native.remote_file(
|
||||
name = "imagepipeline-base-aar",
|
||||
sha1 = "3c4b6613a59825951d3c2b3a5accdbdfd667d9cb",
|
||||
url = "mvn:com.facebook.fresco:imagepipeline-base:aar:1.13.0",
|
||||
sha1 = "d27635390665d433f987177c548d25d0473eadbe",
|
||||
url = "mvn:com.facebook.fresco:imagepipeline-base:aar:2.0.0",
|
||||
)
|
||||
|
||||
rn_android_prebuilt_aar(
|
||||
@@ -56,8 +56,8 @@ rn_android_prebuilt_aar(
|
||||
|
||||
fb_native.remote_file(
|
||||
name = "imagepipeline-aar",
|
||||
sha1 = "405fa064f139b495e0e857661a5706cfb22eafdf",
|
||||
url = "mvn:com.facebook.fresco:imagepipeline:aar:1.13.0",
|
||||
sha1 = "7bc59327fb4895c465cbfeede700daf349ea56da",
|
||||
url = "mvn:com.facebook.fresco:imagepipeline:aar:2.0.0",
|
||||
)
|
||||
|
||||
rn_android_prebuilt_aar(
|
||||
@@ -69,7 +69,7 @@ rn_android_prebuilt_aar(
|
||||
remote_file(
|
||||
name = "nativeimagefilters-aar",
|
||||
sha1 = "f49525db580abc4d2fb0a74fac771fc6c69f2adb",
|
||||
url = "mvn:com.facebook.fresco:nativeimagefilters:aar:1.13.0",
|
||||
url = "mvn:com.facebook.fresco:nativeimagefilters:aar:2.0.0",
|
||||
)
|
||||
|
||||
rn_prebuilt_jar(
|
||||
@@ -92,8 +92,8 @@ rn_android_prebuilt_aar(
|
||||
|
||||
fb_native.remote_file(
|
||||
name = "fbcore-aar",
|
||||
sha1 = "f8dd8ba9d7ea60dc54b5fba4ed5f6feacc5e596f",
|
||||
url = "mvn:com.facebook.fresco:fbcore:aar:1.13.0",
|
||||
sha1 = "8de91f71e8aa84a4d9be4dd88d1a0ac51600ad60",
|
||||
url = "mvn:com.facebook.fresco:fbcore:aar:2.0.0",
|
||||
)
|
||||
|
||||
rn_android_prebuilt_aar(
|
||||
@@ -105,5 +105,5 @@ rn_android_prebuilt_aar(
|
||||
fb_native.remote_file(
|
||||
name = "imagepipeline-okhttp3-binary-aar",
|
||||
sha1 = "bc1212ca66cd09678b416894ea8bd04102d26c5f",
|
||||
url = "mvn:com.facebook.fresco:imagepipeline-okhttp3:aar:1.13.0",
|
||||
url = "mvn:com.facebook.fresco:imagepipeline-okhttp3:aar:2.0.0",
|
||||
)
|
||||
|
||||
@@ -36,4 +36,13 @@ rn_android_resource(
|
||||
],
|
||||
)
|
||||
|
||||
rn_android_resource(
|
||||
name = "systeminfo",
|
||||
package = "com.facebook.react",
|
||||
res = "systeminfo",
|
||||
visibility = [
|
||||
"PUBLIC",
|
||||
],
|
||||
)
|
||||
|
||||
# New resource directories must be added to react-native-github/ReactAndroid/build.gradle
|
||||
|
||||
@@ -0,0 +1,5 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources>
|
||||
<integer name="react_native_dev_server_port">8081</integer>
|
||||
<integer name="react_native_inspector_proxy_port">@integer/react_native_dev_server_port</integer>
|
||||
</resources>
|
||||
@@ -108,6 +108,24 @@ bool Instance::isIndexedRAMBundle(const char *sourcePath) {
|
||||
return parseTypeFromHeader(header) == ScriptTag::RAMBundle;
|
||||
}
|
||||
|
||||
bool Instance::isIndexedRAMBundle(std::unique_ptr<const JSBigString>* script) {
|
||||
BundleHeader header;
|
||||
strncpy(reinterpret_cast<char *>(&header), script->get()->c_str(), sizeof(header));
|
||||
|
||||
return parseTypeFromHeader(header) == ScriptTag::RAMBundle;
|
||||
}
|
||||
|
||||
void Instance::loadRAMBundleFromString(std::unique_ptr<const JSBigString> script, const std::string& sourceURL) {
|
||||
auto bundle = folly::make_unique<JSIndexedRAMBundle>(std::move(script));
|
||||
auto startupScript = bundle->getStartupCode();
|
||||
auto registry = RAMBundleRegistry::singleBundleRegistry(std::move(bundle));
|
||||
loadRAMBundle(
|
||||
std::move(registry),
|
||||
std::move(startupScript),
|
||||
sourceURL,
|
||||
true);
|
||||
}
|
||||
|
||||
void Instance::loadRAMBundleFromFile(const std::string& sourcePath,
|
||||
const std::string& sourceURL,
|
||||
bool loadSynchronously) {
|
||||
|
||||
@@ -47,6 +47,8 @@ public:
|
||||
void loadScriptFromString(std::unique_ptr<const JSBigString> string,
|
||||
std::string sourceURL, bool loadSynchronously);
|
||||
static bool isIndexedRAMBundle(const char *sourcePath);
|
||||
static bool isIndexedRAMBundle(std::unique_ptr<const JSBigString>* string);
|
||||
void loadRAMBundleFromString(std::unique_ptr<const JSBigString> script, const std::string& sourceURL);
|
||||
void loadRAMBundleFromFile(const std::string& sourcePath,
|
||||
const std::string& sourceURL,
|
||||
bool loadSynchronously);
|
||||
|
||||
@@ -6,7 +6,8 @@
|
||||
#include "JSIndexedRAMBundle.h"
|
||||
|
||||
#include <glog/logging.h>
|
||||
|
||||
#include <fstream>
|
||||
#include <sstream>
|
||||
#include <folly/Memory.h>
|
||||
|
||||
namespace facebook {
|
||||
@@ -18,14 +19,30 @@ std::function<std::unique_ptr<JSModulesUnbundle>(std::string)> JSIndexedRAMBundl
|
||||
};
|
||||
}
|
||||
|
||||
JSIndexedRAMBundle::JSIndexedRAMBundle(const char *sourcePath) :
|
||||
m_bundle (sourcePath, std::ios_base::in) {
|
||||
JSIndexedRAMBundle::JSIndexedRAMBundle(const char *sourcePath) {
|
||||
m_bundle = std::make_unique<std::ifstream>(sourcePath, std::ifstream::binary);
|
||||
if (!m_bundle) {
|
||||
throw std::ios_base::failure(
|
||||
folly::to<std::string>("Bundle ", sourcePath,
|
||||
"cannot be opened: ", m_bundle.rdstate()));
|
||||
"cannot be opened: ", m_bundle->rdstate()));
|
||||
}
|
||||
init();
|
||||
}
|
||||
|
||||
JSIndexedRAMBundle::JSIndexedRAMBundle(std::unique_ptr<const JSBigString> script) {
|
||||
// tmpStream is needed because m_bundle is std::istream type
|
||||
// which has no member 'write'
|
||||
std::unique_ptr<std::stringstream> tmpStream = std::make_unique<std::stringstream>();
|
||||
tmpStream->write(script->c_str(), script->size());
|
||||
m_bundle = std::move(tmpStream);
|
||||
if (!m_bundle) {
|
||||
throw std::ios_base::failure(
|
||||
folly::to<std::string>("Bundle from string cannot be opened: ", m_bundle->rdstate()));
|
||||
}
|
||||
init();
|
||||
}
|
||||
|
||||
void JSIndexedRAMBundle::init() {
|
||||
// read in magic header, number of entries, and length of the startup section
|
||||
uint32_t header[3];
|
||||
static_assert(
|
||||
@@ -78,12 +95,12 @@ std::string JSIndexedRAMBundle::getModuleCode(const uint32_t id) const {
|
||||
}
|
||||
|
||||
void JSIndexedRAMBundle::readBundle(char *buffer, const std::streamsize bytes) const {
|
||||
if (!m_bundle.read(buffer, bytes)) {
|
||||
if (m_bundle.rdstate() & std::ios::eofbit) {
|
||||
if (!m_bundle->read(buffer, bytes)) {
|
||||
if (m_bundle->rdstate() & std::ios::eofbit) {
|
||||
throw std::ios_base::failure("Unexpected end of RAM Bundle file");
|
||||
}
|
||||
throw std::ios_base::failure(
|
||||
folly::to<std::string>("Error reading RAM Bundle: ", m_bundle.rdstate()));
|
||||
folly::to<std::string>("Error reading RAM Bundle: ", m_bundle->rdstate()));
|
||||
}
|
||||
}
|
||||
|
||||
@@ -92,9 +109,9 @@ void JSIndexedRAMBundle::readBundle(
|
||||
const std::streamsize bytes,
|
||||
const std::ifstream::pos_type position) const {
|
||||
|
||||
if (!m_bundle.seekg(position)) {
|
||||
if (!m_bundle->seekg(position)) {
|
||||
throw std::ios_base::failure(
|
||||
folly::to<std::string>("Error reading RAM Bundle: ", m_bundle.rdstate()));
|
||||
folly::to<std::string>("Error reading RAM Bundle: ", m_bundle->rdstate()));
|
||||
}
|
||||
readBundle(buffer, bytes);
|
||||
}
|
||||
|
||||
@@ -5,7 +5,7 @@
|
||||
|
||||
#pragma once
|
||||
|
||||
#include <fstream>
|
||||
#include <istream>
|
||||
#include <memory>
|
||||
|
||||
#include <cxxreact/JSBigString.h>
|
||||
@@ -24,6 +24,7 @@ public:
|
||||
|
||||
// Throws std::runtime_error on failure.
|
||||
JSIndexedRAMBundle(const char *sourceURL);
|
||||
JSIndexedRAMBundle(std::unique_ptr<const JSBigString> script);
|
||||
|
||||
// Throws std::runtime_error on failure.
|
||||
std::unique_ptr<const JSBigString> getStartupCode();
|
||||
@@ -51,14 +52,15 @@ private:
|
||||
}
|
||||
};
|
||||
|
||||
void init();
|
||||
std::string getModuleCode(const uint32_t id) const;
|
||||
void readBundle(char *buffer, const std::streamsize bytes) const;
|
||||
void readBundle(
|
||||
char *buffer, const
|
||||
std::streamsize bytes,
|
||||
const std::ifstream::pos_type position) const;
|
||||
const std::istream::pos_type position) const;
|
||||
|
||||
mutable std::ifstream m_bundle;
|
||||
mutable std::unique_ptr<std::istream> m_bundle;
|
||||
ModuleTable m_table;
|
||||
size_t m_baseOffset;
|
||||
std::unique_ptr<JSBigBufferString> m_startupCode;
|
||||
|
||||
+1
-1
@@ -10,7 +10,7 @@ buildscript {
|
||||
jcenter()
|
||||
}
|
||||
dependencies {
|
||||
classpath("com.android.tools.build:gradle:3.4.0")
|
||||
classpath("com.android.tools.build:gradle:3.4.1")
|
||||
classpath("de.undercouch:gradle-download-task:3.4.3")
|
||||
|
||||
// NOTE: Do not place your application dependencies here; they belong
|
||||
|
||||
+9
-8
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "react-native",
|
||||
"version": "1000.0.0",
|
||||
"version": "0.60.0-rc.3",
|
||||
"bin": "./cli.js",
|
||||
"description": "A framework for building native apps using React",
|
||||
"license": "MIT",
|
||||
@@ -79,9 +79,9 @@
|
||||
},
|
||||
"dependencies": {
|
||||
"@babel/runtime": "^7.0.0",
|
||||
"@react-native-community/cli": "2.0.0-alpha.20",
|
||||
"@react-native-community/cli-platform-android": "2.0.0-alpha.20",
|
||||
"@react-native-community/cli-platform-ios": "2.0.0-alpha.20",
|
||||
"@react-native-community/cli": "2.0.0-rc.3",
|
||||
"@react-native-community/cli-platform-android": "2.0.0-rc.3",
|
||||
"@react-native-community/cli-platform-ios": "2.0.0-rc.3",
|
||||
"abort-controller": "^3.0.0",
|
||||
"art": "^0.10.0",
|
||||
"base64-js": "^1.1.2",
|
||||
@@ -92,7 +92,7 @@
|
||||
"fbjs": "^1.0.0",
|
||||
"fbjs-scripts": "^1.1.0",
|
||||
"invariant": "^2.2.4",
|
||||
"jsc-android": "^241213.1.0",
|
||||
"jsc-android": "245459.0.0",
|
||||
"metro-babel-register": "0.54.1",
|
||||
"metro-react-native-babel-transformer": "0.54.1",
|
||||
"nullthrows": "^1.1.0",
|
||||
@@ -101,7 +101,9 @@
|
||||
"prop-types": "^15.7.2",
|
||||
"react-devtools-core": "^3.6.0",
|
||||
"regenerator-runtime": "^0.13.2",
|
||||
"stacktrace-parser": "^0.1.3"
|
||||
"scheduler": "0.14.0",
|
||||
"stacktrace-parser": "^0.1.3",
|
||||
"whatwg-fetch": "^3.0.0"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@babel/core": "^7.0.0",
|
||||
@@ -134,7 +136,6 @@
|
||||
"prettier": "1.17.0",
|
||||
"react": "16.8.6",
|
||||
"react-test-renderer": "16.8.6",
|
||||
"scheduler": "0.14.0",
|
||||
"shelljs": "^0.7.8",
|
||||
"ws": "^6.1.4",
|
||||
"yargs": "^9.0.0"
|
||||
@@ -158,4 +159,4 @@
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
+16
-27
@@ -15,6 +15,22 @@ def reactRoot = file(config.root ?: "../../")
|
||||
def inputExcludes = config.inputExcludes ?: ["android/**", "ios/**"]
|
||||
def bundleConfig = config.bundleConfig ? "${reactRoot}/${config.bundleConfig}" : null ;
|
||||
|
||||
def reactNativeDevServerPort() {
|
||||
def value = project.getProperties().get("reactNativeDevServerPort")
|
||||
return value != null ? value : "8081"
|
||||
}
|
||||
|
||||
def reactNativeInspectorProxyPort() {
|
||||
def value = project.getProperties().get("reactNativeInspectorProxyPort")
|
||||
return value != null ? value : reactNativeDevServerPort()
|
||||
}
|
||||
|
||||
android {
|
||||
buildTypes.all {
|
||||
resValue "integer", "react_native_dev_server_port", reactNativeDevServerPort()
|
||||
resValue "integer", "react_native_inspector_proxy_port", reactNativeInspectorProxyPort()
|
||||
}
|
||||
}
|
||||
|
||||
afterEvaluate {
|
||||
def isAndroidLibrary = plugins.hasPlugin("com.android.library")
|
||||
@@ -48,33 +64,6 @@ afterEvaluate {
|
||||
resourcesDir.mkdirs()
|
||||
}
|
||||
|
||||
|
||||
// If there are flavors, remember the current flavor for use in the resource path we move from
|
||||
def flavorPathSegment = ""
|
||||
android.productFlavors.all { flavor ->
|
||||
if (targetName.toLowerCase().contains(flavor.name)) {
|
||||
flavorPathSegment = flavor.name + "/"
|
||||
}
|
||||
}
|
||||
|
||||
// Address issue #22234 by moving generated resources into build dir so they are in one spot, not duplicated
|
||||
doLast {
|
||||
def moveFunc = { resSuffix ->
|
||||
File originalDir = file("$buildDir/generated/res/react/${flavorPathSegment}release/${resSuffix}")
|
||||
if (originalDir.exists()) {
|
||||
File destDir = file("$buildDir/../src/main/res/${resSuffix}")
|
||||
ant.move(file: originalDir, tofile: destDir);
|
||||
}
|
||||
}
|
||||
moveFunc.curry("drawable-ldpi").call()
|
||||
moveFunc.curry("drawable-mdpi").call()
|
||||
moveFunc.curry("drawable-hdpi").call()
|
||||
moveFunc.curry("drawable-xhdpi").call()
|
||||
moveFunc.curry("drawable-xxhdpi").call()
|
||||
moveFunc.curry("drawable-xxxhdpi").call()
|
||||
moveFunc.curry("raw").call()
|
||||
}
|
||||
|
||||
// Set up inputs and outputs so gradle can cache the result
|
||||
inputs.files fileTree(dir: reactRoot, excludes: inputExcludes)
|
||||
outputs.dir(jsBundleDir)
|
||||
|
||||
@@ -13,7 +13,7 @@ buildscript {
|
||||
jcenter()
|
||||
}
|
||||
dependencies {
|
||||
classpath("com.android.tools.build:gradle:3.4.0")
|
||||
classpath("com.android.tools.build:gradle:3.4.1")
|
||||
|
||||
// NOTE: Do not place your application dependencies here; they belong
|
||||
// in the individual module build.gradle files
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
platform :ios, '9.0'
|
||||
require_relative '../node_modules/@react-native-community/cli-platform-ios/native_modules'
|
||||
|
||||
target 'HelloWorld' do
|
||||
# Pods for HelloWorld
|
||||
@@ -32,6 +33,7 @@ target 'HelloWorld' do
|
||||
# Pods for testing
|
||||
end
|
||||
|
||||
use_native_modules!
|
||||
end
|
||||
|
||||
target 'HelloWorld-tvOS' do
|
||||
|
||||
@@ -7,8 +7,8 @@
|
||||
"test": "jest"
|
||||
},
|
||||
"dependencies": {
|
||||
"react": "16.8.1",
|
||||
"react-native": "1000.0.0"
|
||||
"react": "16.8.6",
|
||||
"react-native": "0.60.0-rc.3"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@babel/core": "^7.3.3",
|
||||
@@ -16,8 +16,8 @@
|
||||
"@react-native-community/eslint-config": "^0.0.3",
|
||||
"babel-jest": "^24.1.0",
|
||||
"jest": "^24.1.0",
|
||||
"metro-react-native-babel-preset": "^0.51.1",
|
||||
"react-test-renderer": "16.8.1"
|
||||
"metro-react-native-babel-preset": "^0.54.1",
|
||||
"react-test-renderer": "16.8.6"
|
||||
},
|
||||
"jest": {
|
||||
"preset": "react-native"
|
||||
|
||||
@@ -909,16 +909,6 @@
|
||||
dependencies:
|
||||
"@hapi/hoek" "6.x.x"
|
||||
|
||||
"@jest/console@^24.3.0":
|
||||
version "24.3.0"
|
||||
resolved "https://registry.yarnpkg.com/@jest/console/-/console-24.3.0.tgz#7bd920d250988ba0bf1352c4493a48e1cb97671e"
|
||||
integrity sha512-NaCty/OOei6rSDcbPdMiCbYCI0KGFGPgGO6B09lwWt5QTxnkuhKYET9El5u5z1GAcSxkQmSMtM63e24YabCWqA==
|
||||
dependencies:
|
||||
"@jest/source-map" "^24.3.0"
|
||||
"@types/node" "*"
|
||||
chalk "^2.0.1"
|
||||
slash "^2.0.0"
|
||||
|
||||
"@jest/console@^24.7.1":
|
||||
version "24.7.1"
|
||||
resolved "https://registry.yarnpkg.com/@jest/console/-/console-24.7.1.tgz#32a9e42535a97aedfe037e725bd67e954b459545"
|
||||
@@ -971,16 +961,6 @@
|
||||
"@jest/types" "^24.7.0"
|
||||
jest-mock "^24.7.0"
|
||||
|
||||
"@jest/fake-timers@^24.5.0":
|
||||
version "24.5.0"
|
||||
resolved "https://registry.yarnpkg.com/@jest/fake-timers/-/fake-timers-24.5.0.tgz#4a29678b91fd0876144a58f8d46e6c62de0266f0"
|
||||
integrity sha512-i59KVt3QBz9d+4Qr4QxsKgsIg+NjfuCjSOWj3RQhjF5JNy+eVJDhANQ4WzulzNCHd72srMAykwtRn5NYDGVraw==
|
||||
dependencies:
|
||||
"@jest/types" "^24.5.0"
|
||||
"@types/node" "*"
|
||||
jest-message-util "^24.5.0"
|
||||
jest-mock "^24.5.0"
|
||||
|
||||
"@jest/fake-timers@^24.7.1":
|
||||
version "24.7.1"
|
||||
resolved "https://registry.yarnpkg.com/@jest/fake-timers/-/fake-timers-24.7.1.tgz#56e5d09bdec09ee81050eaff2794b26c71d19db2"
|
||||
@@ -990,6 +970,15 @@
|
||||
jest-message-util "^24.7.1"
|
||||
jest-mock "^24.7.0"
|
||||
|
||||
"@jest/fake-timers@^24.8.0":
|
||||
version "24.8.0"
|
||||
resolved "https://registry.yarnpkg.com/@jest/fake-timers/-/fake-timers-24.8.0.tgz#2e5b80a4f78f284bcb4bd5714b8e10dd36a8d3d1"
|
||||
integrity sha512-2M4d5MufVXwi6VzZhJ9f5S/wU4ud2ck0kxPof1Iz3zWx6Y+V2eJrES9jEktB6O3o/oEyk+il/uNu9PvASjWXQw==
|
||||
dependencies:
|
||||
"@jest/types" "^24.8.0"
|
||||
jest-message-util "^24.8.0"
|
||||
jest-mock "^24.8.0"
|
||||
|
||||
"@jest/reporters@^24.7.1":
|
||||
version "24.7.1"
|
||||
resolved "https://registry.yarnpkg.com/@jest/reporters/-/reporters-24.7.1.tgz#38ac0b096cd691bbbe3051ddc25988d42e37773a"
|
||||
@@ -1025,15 +1014,6 @@
|
||||
graceful-fs "^4.1.15"
|
||||
source-map "^0.6.0"
|
||||
|
||||
"@jest/test-result@^24.5.0":
|
||||
version "24.5.0"
|
||||
resolved "https://registry.yarnpkg.com/@jest/test-result/-/test-result-24.5.0.tgz#ab66fb7741a04af3363443084e72ea84861a53f2"
|
||||
integrity sha512-u66j2vBfa8Bli1+o3rCaVnVYa9O8CAFZeqiqLVhnarXtreSXG33YQ6vNYBogT7+nYiFNOohTU21BKiHlgmxD5A==
|
||||
dependencies:
|
||||
"@jest/console" "^24.3.0"
|
||||
"@jest/types" "^24.5.0"
|
||||
"@types/istanbul-lib-coverage" "^1.1.0"
|
||||
|
||||
"@jest/test-result@^24.7.1":
|
||||
version "24.7.1"
|
||||
resolved "https://registry.yarnpkg.com/@jest/test-result/-/test-result-24.7.1.tgz#19eacdb29a114300aed24db651e5d975f08b6bbe"
|
||||
@@ -1043,6 +1023,15 @@
|
||||
"@jest/types" "^24.7.0"
|
||||
"@types/istanbul-lib-coverage" "^2.0.0"
|
||||
|
||||
"@jest/test-result@^24.8.0":
|
||||
version "24.8.0"
|
||||
resolved "https://registry.yarnpkg.com/@jest/test-result/-/test-result-24.8.0.tgz#7675d0aaf9d2484caa65e048d9b467d160f8e9d3"
|
||||
integrity sha512-+YdLlxwizlfqkFDh7Mc7ONPQAhA4YylU1s529vVM1rsf67vGZH/2GGm5uO8QzPeVyaVMobCQ7FTxl38QrKRlng==
|
||||
dependencies:
|
||||
"@jest/console" "^24.7.1"
|
||||
"@jest/types" "^24.8.0"
|
||||
"@types/istanbul-lib-coverage" "^2.0.0"
|
||||
|
||||
"@jest/test-sequencer@^24.7.1":
|
||||
version "24.7.1"
|
||||
resolved "https://registry.yarnpkg.com/@jest/test-sequencer/-/test-sequencer-24.7.1.tgz#9c18e428e1ad945fa74f6233a9d35745ca0e63e0"
|
||||
@@ -1074,14 +1063,6 @@
|
||||
source-map "^0.6.1"
|
||||
write-file-atomic "2.4.1"
|
||||
|
||||
"@jest/types@^24.5.0":
|
||||
version "24.5.0"
|
||||
resolved "https://registry.yarnpkg.com/@jest/types/-/types-24.5.0.tgz#feee214a4d0167b0ca447284e95a57aa10b3ee95"
|
||||
integrity sha512-kN7RFzNMf2R8UDadPOl6ReyI+MT8xfqRuAnuVL+i4gwjv/zubdDK+EDeLHYwq1j0CSSR2W/MmgaRlMZJzXdmVA==
|
||||
dependencies:
|
||||
"@types/istanbul-lib-coverage" "^1.1.0"
|
||||
"@types/yargs" "^12.0.9"
|
||||
|
||||
"@jest/types@^24.7.0":
|
||||
version "24.7.0"
|
||||
resolved "https://registry.yarnpkg.com/@jest/types/-/types-24.7.0.tgz#c4ec8d1828cdf23234d9b4ee31f5482a3f04f48b"
|
||||
@@ -1090,44 +1071,53 @@
|
||||
"@types/istanbul-lib-coverage" "^2.0.0"
|
||||
"@types/yargs" "^12.0.9"
|
||||
|
||||
"@react-native-community/cli-platform-android@2.0.0-alpha.20", "@react-native-community/cli-platform-android@^2.0.0-alpha.20":
|
||||
version "2.0.0-alpha.20"
|
||||
resolved "https://registry.yarnpkg.com/@react-native-community/cli-platform-android/-/cli-platform-android-2.0.0-alpha.20.tgz#a3b5aceae38bd3c930f0801b721d44551fe98dc2"
|
||||
integrity sha512-Z1eWiK4/oZlKvZTPYnORW6uAZ4rgBFMvswldwdy6r9CnjLTZsgw3aGN6r5TUNSCwbZy4p2l5J1pTELl2Ors24g==
|
||||
"@jest/types@^24.8.0":
|
||||
version "24.8.0"
|
||||
resolved "https://registry.yarnpkg.com/@jest/types/-/types-24.8.0.tgz#f31e25948c58f0abd8c845ae26fcea1491dea7ad"
|
||||
integrity sha512-g17UxVr2YfBtaMUxn9u/4+siG1ptg9IGYAYwvpwn61nBg779RXnjE/m7CxYcIzEt0AbHZZAHSEZNhkE2WxURVg==
|
||||
dependencies:
|
||||
"@react-native-community/cli-tools" "^2.0.0-alpha.20"
|
||||
"@types/istanbul-lib-coverage" "^2.0.0"
|
||||
"@types/istanbul-reports" "^1.1.1"
|
||||
"@types/yargs" "^12.0.9"
|
||||
|
||||
"@react-native-community/cli-platform-android@2.0.0-rc.2", "@react-native-community/cli-platform-android@^2.0.0-rc.2":
|
||||
version "2.0.0-rc.2"
|
||||
resolved "https://registry.yarnpkg.com/@react-native-community/cli-platform-android/-/cli-platform-android-2.0.0-rc.2.tgz#78eba602aaccde906dbe8d0c48f2497900be3b3f"
|
||||
integrity sha512-pZQ3W8vYqSP2hNTfhhZ2/VU2+7WVXB0dBTPU1wrNtWjxxzCYwpx6l3YM2Bjffwx5yGUJ/FpIrhKXGXZzXdAH9A==
|
||||
dependencies:
|
||||
"@react-native-community/cli-tools" "^2.0.0-rc.2"
|
||||
logkitty "^0.4.0"
|
||||
node-fetch "^2.2.0"
|
||||
slash "^2.0.0"
|
||||
xmldoc "^0.4.0"
|
||||
|
||||
"@react-native-community/cli-platform-ios@2.0.0-alpha.20", "@react-native-community/cli-platform-ios@^2.0.0-alpha.20":
|
||||
version "2.0.0-alpha.20"
|
||||
resolved "https://registry.yarnpkg.com/@react-native-community/cli-platform-ios/-/cli-platform-ios-2.0.0-alpha.20.tgz#66eda705b0522b44818806910bbf2b7d47d41b56"
|
||||
integrity sha512-ZDvx2YU/1cFp5/ADbPUwnlvs5D0RIeEZK4Ddskd2Sx7KIq5jLnQbXW+JDOqie5wQgQQ+eCmebCHnCFBWIGXdMQ==
|
||||
"@react-native-community/cli-platform-ios@2.0.0-rc.2", "@react-native-community/cli-platform-ios@^2.0.0-rc.2":
|
||||
version "2.0.0-rc.2"
|
||||
resolved "https://registry.yarnpkg.com/@react-native-community/cli-platform-ios/-/cli-platform-ios-2.0.0-rc.2.tgz#3c73982363b5a07a5159da9ef04c6f3e45551467"
|
||||
integrity sha512-4ruii2d0ISM0IpzX8o9C/uRdw4UnUDiWDLkLzEObpNjDpOjS3jl+lFJ+S4hW6U/bldl6ahj7CJeMmXiAsTrZWQ==
|
||||
dependencies:
|
||||
"@react-native-community/cli-tools" "^2.0.0-alpha.20"
|
||||
"@react-native-community/cli-tools" "^2.0.0-rc.2"
|
||||
chalk "^1.1.1"
|
||||
xcode "^2.0.0"
|
||||
|
||||
"@react-native-community/cli-tools@^2.0.0-alpha.20":
|
||||
version "2.0.0-alpha.20"
|
||||
resolved "https://registry.yarnpkg.com/@react-native-community/cli-tools/-/cli-tools-2.0.0-alpha.20.tgz#7762205a701ffabe6aa0b08d9202dd3d101297d7"
|
||||
integrity sha512-G2VcBUuG/WmtbgHA4wTPkYqhuRhzE9EH8+4/WnCQmxSi7bfIYAzyVxgpBLCGzFv4liPmtoVuhcsapVeAMOdSlQ==
|
||||
"@react-native-community/cli-tools@^2.0.0-rc.2":
|
||||
version "2.0.0-rc.2"
|
||||
resolved "https://registry.yarnpkg.com/@react-native-community/cli-tools/-/cli-tools-2.0.0-rc.2.tgz#4308b24de4fe0b4699c2cea687e938e7a8c62c86"
|
||||
integrity sha512-B0l9k43MkLgrnZs+Z7EZ9Xmb4YYi51Ifj/pabM8EklZJPnLzjWdfvuY64NJBQf4prOg2cTXqh8s9iO/jrsgU3Q==
|
||||
dependencies:
|
||||
chalk "^1.1.1"
|
||||
lodash "^4.17.5"
|
||||
mime "^1.3.4"
|
||||
mime "^2.4.1"
|
||||
node-fetch "^2.5.0"
|
||||
|
||||
"@react-native-community/cli@2.0.0-alpha.20":
|
||||
version "2.0.0-alpha.20"
|
||||
resolved "https://registry.yarnpkg.com/@react-native-community/cli/-/cli-2.0.0-alpha.20.tgz#611fe4ad483755ae10d3f7f915e1ed527f4a9bf8"
|
||||
integrity sha512-H71a8gYhhI/7F6UzN3vrzQMtl9dmV/iDf55QeRqWEIU1i+SOpXXk5cmcL7hFY4FBUAkjn4o7GAd089RstGIOeA==
|
||||
"@react-native-community/cli@2.0.0-rc.2":
|
||||
version "2.0.0-rc.2"
|
||||
resolved "https://registry.yarnpkg.com/@react-native-community/cli/-/cli-2.0.0-rc.2.tgz#8bb3c07a58056b0af5474782bedc457184b42595"
|
||||
integrity sha512-G0NrMfJ6bcXfJKLijQmxuTV4S22pXfp8c5XI7L1i+b5Vu34IvR6xvKVPT9leYEEI/bg/ZuyguDZuVecycJb63A==
|
||||
dependencies:
|
||||
"@hapi/joi" "^15.0.3"
|
||||
"@react-native-community/cli-platform-android" "^2.0.0-alpha.20"
|
||||
"@react-native-community/cli-platform-ios" "^2.0.0-alpha.20"
|
||||
"@react-native-community/cli-tools" "^2.0.0-alpha.20"
|
||||
"@react-native-community/cli-platform-android" "^2.0.0-rc.2"
|
||||
"@react-native-community/cli-platform-ios" "^2.0.0-rc.2"
|
||||
"@react-native-community/cli-tools" "^2.0.0-rc.2"
|
||||
chalk "^1.1.1"
|
||||
command-exists "^1.2.8"
|
||||
commander "^2.19.0"
|
||||
@@ -1143,14 +1133,13 @@
|
||||
graceful-fs "^4.1.3"
|
||||
inquirer "^3.0.6"
|
||||
lodash "^4.17.5"
|
||||
metro "^0.53.1"
|
||||
metro-config "^0.53.1"
|
||||
metro-core "^0.53.1"
|
||||
metro-react-native-babel-transformer "^0.53.1"
|
||||
metro "^0.54.1"
|
||||
metro-config "^0.54.1"
|
||||
metro-core "^0.54.1"
|
||||
metro-react-native-babel-transformer "^0.54.1"
|
||||
minimist "^1.2.0"
|
||||
mkdirp "^0.5.1"
|
||||
morgan "^1.9.0"
|
||||
node-fetch "^2.2.0"
|
||||
node-notifier "^5.2.1"
|
||||
open "^6.2.0"
|
||||
ora "^3.4.0"
|
||||
@@ -1197,20 +1186,30 @@
|
||||
dependencies:
|
||||
"@babel/types" "^7.3.0"
|
||||
|
||||
"@types/istanbul-lib-coverage@^1.1.0":
|
||||
version "1.1.0"
|
||||
resolved "https://registry.yarnpkg.com/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-1.1.0.tgz#2cc2ca41051498382b43157c8227fea60363f94a"
|
||||
integrity sha512-ohkhb9LehJy+PA40rDtGAji61NCgdtKLAlFoYp4cnuuQEswwdK3vz9SOIkkyc3wrk8dzjphQApNs56yyXLStaQ==
|
||||
"@types/istanbul-lib-coverage@*":
|
||||
version "2.0.1"
|
||||
resolved "https://registry.yarnpkg.com/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.1.tgz#42995b446db9a48a11a07ec083499a860e9138ff"
|
||||
integrity sha512-hRJD2ahnnpLgsj6KWMYSrmXkM3rm2Dl1qkx6IOFD5FnuNPXJIG5L0dhgKXCYTRMGzU4n0wImQ/xfmRc4POUFlg==
|
||||
|
||||
"@types/istanbul-lib-coverage@^2.0.0":
|
||||
version "2.0.0"
|
||||
resolved "https://registry.yarnpkg.com/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.0.tgz#1eb8c033e98cf4e1a4cedcaf8bcafe8cb7591e85"
|
||||
integrity sha512-eAtOAFZefEnfJiRFQBGw1eYqa5GTLCZ1y86N0XSI/D6EB+E8z6VPV/UL7Gi5UEclFqoQk+6NRqEDsfmDLXn8sg==
|
||||
|
||||
"@types/node@*":
|
||||
version "11.11.2"
|
||||
resolved "https://registry.yarnpkg.com/@types/node/-/node-11.11.2.tgz#873d2c3f3824212cc16130074699e1bcb38c0231"
|
||||
integrity sha512-iEaHiDNkHv4Jrm9O5T37OYEUwjJesiyt6ZlhLFK0sbo4CLD0jyCOB4Pc2F9iD3MbW2397SLNxZKdDGntGaBjQQ==
|
||||
"@types/istanbul-lib-report@*":
|
||||
version "1.1.1"
|
||||
resolved "https://registry.yarnpkg.com/@types/istanbul-lib-report/-/istanbul-lib-report-1.1.1.tgz#e5471e7fa33c61358dd38426189c037a58433b8c"
|
||||
integrity sha512-3BUTyMzbZa2DtDI2BkERNC6jJw2Mr2Y0oGI7mRxYNBPxppbtEK1F66u3bKwU2g+wxwWI7PAoRpJnOY1grJqzHg==
|
||||
dependencies:
|
||||
"@types/istanbul-lib-coverage" "*"
|
||||
|
||||
"@types/istanbul-reports@^1.1.1":
|
||||
version "1.1.1"
|
||||
resolved "https://registry.yarnpkg.com/@types/istanbul-reports/-/istanbul-reports-1.1.1.tgz#7a8cbf6a406f36c8add871625b278eaf0b0d255a"
|
||||
integrity sha512-UpYjBi8xefVChsCoBpKShdxTllC9pwISirfoZsUa2AAdQg/Jd2KQGtSbw+ya7GPo7x/wAPlH6JBhKhAsXUEZNA==
|
||||
dependencies:
|
||||
"@types/istanbul-lib-coverage" "*"
|
||||
"@types/istanbul-lib-report" "*"
|
||||
|
||||
"@types/stack-utils@^1.0.1":
|
||||
version "1.0.1"
|
||||
@@ -2894,13 +2893,6 @@ exception-formatter@^1.0.4:
|
||||
dependencies:
|
||||
colors "^1.0.3"
|
||||
|
||||
exec-sh@^0.2.0:
|
||||
version "0.2.2"
|
||||
resolved "https://registry.yarnpkg.com/exec-sh/-/exec-sh-0.2.2.tgz#2a5e7ffcbd7d0ba2755bdecb16e5a427dfbdec36"
|
||||
integrity sha512-FIUCJz1RbuS0FKTdaAafAByGS0CPvU3R0MeHxgtl+djzCc//F8HakL8GzmVNZanasTbTAY/3DRFA0KpVqj/eAw==
|
||||
dependencies:
|
||||
merge "^1.2.0"
|
||||
|
||||
exec-sh@^0.3.2:
|
||||
version "0.3.2"
|
||||
resolved "https://registry.yarnpkg.com/exec-sh/-/exec-sh-0.3.2.tgz#6738de2eb7c8e671d0366aea0b0db8c6f7d7391b"
|
||||
@@ -3286,14 +3278,6 @@ fs.realpath@^1.0.0:
|
||||
resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f"
|
||||
integrity sha1-FQStJSMVjKpA20onh8sBQRmU6k8=
|
||||
|
||||
fsevents@^1.2.3:
|
||||
version "1.2.4"
|
||||
resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-1.2.4.tgz#f41dcb1af2582af3692da36fc55cbd8e1041c426"
|
||||
integrity sha512-z8H8/diyk76B7q5wg+Ud0+CqzcAF3mBBI/bA5ne5zrRUUIvNkJY//D3BqyH571KuAC4Nr7Rw7CjWX4r0y9DvNg==
|
||||
dependencies:
|
||||
nan "^2.9.2"
|
||||
node-pre-gyp "^0.10.0"
|
||||
|
||||
fsevents@^1.2.7:
|
||||
version "1.2.7"
|
||||
resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-1.2.7.tgz#4851b664a3783e52003b3c66eb0eee1074933aa4"
|
||||
@@ -4079,32 +4063,18 @@ jest-get-type@^24.3.0:
|
||||
resolved "https://registry.yarnpkg.com/jest-get-type/-/jest-get-type-24.3.0.tgz#582cfd1a4f91b5cdad1d43d2932f816d543c65da"
|
||||
integrity sha512-HYF6pry72YUlVcvUx3sEpMRwXEWGEPlJ0bSPVnB3b3n++j4phUEoSPcS6GC0pPJ9rpyPSe4cb5muFo6D39cXow==
|
||||
|
||||
jest-haste-map@24.0.0:
|
||||
version "24.0.0"
|
||||
resolved "https://registry.yarnpkg.com/jest-haste-map/-/jest-haste-map-24.0.0.tgz#e9ef51b2c9257384b4d6beb83bd48c65b37b5e6e"
|
||||
integrity sha512-CcViJyUo41IQqttLxXVdI41YErkzBKbE6cS6dRAploCeutePYfUimWd3C9rQEWhX0YBOQzvNsC0O9nYxK2nnxQ==
|
||||
dependencies:
|
||||
fb-watchman "^2.0.0"
|
||||
graceful-fs "^4.1.15"
|
||||
invariant "^2.2.4"
|
||||
jest-serializer "^24.0.0"
|
||||
jest-util "^24.0.0"
|
||||
jest-worker "^24.0.0"
|
||||
micromatch "^3.1.10"
|
||||
sane "^3.0.0"
|
||||
|
||||
jest-haste-map@^24.7.1:
|
||||
version "24.7.1"
|
||||
resolved "https://registry.yarnpkg.com/jest-haste-map/-/jest-haste-map-24.7.1.tgz#772e215cd84080d4bbcb759cfb668ad649a21471"
|
||||
integrity sha512-g0tWkzjpHD2qa03mTKhlydbmmYiA2KdcJe762SbfFo/7NIMgBWAA0XqQlApPwkWOF7Cxoi/gUqL0i6DIoLpMBw==
|
||||
version "24.8.1"
|
||||
resolved "https://registry.yarnpkg.com/jest-haste-map/-/jest-haste-map-24.8.1.tgz#f39cc1d2b1d907e014165b4bd5a957afcb992982"
|
||||
integrity sha512-SwaxMGVdAZk3ernAx2Uv2sorA7jm3Kx+lR0grp6rMmnY06Kn/urtKx1LPN2mGTea4fCT38impYT28FfcLUhX0g==
|
||||
dependencies:
|
||||
"@jest/types" "^24.7.0"
|
||||
"@jest/types" "^24.8.0"
|
||||
anymatch "^2.0.0"
|
||||
fb-watchman "^2.0.0"
|
||||
graceful-fs "^4.1.15"
|
||||
invariant "^2.2.4"
|
||||
jest-serializer "^24.4.0"
|
||||
jest-util "^24.7.1"
|
||||
jest-util "^24.8.0"
|
||||
jest-worker "^24.6.0"
|
||||
micromatch "^3.1.10"
|
||||
sane "^4.0.3"
|
||||
@@ -4161,20 +4131,6 @@ jest-matcher-utils@^24.7.0:
|
||||
jest-get-type "^24.3.0"
|
||||
pretty-format "^24.7.0"
|
||||
|
||||
jest-message-util@^24.5.0:
|
||||
version "24.5.0"
|
||||
resolved "https://registry.yarnpkg.com/jest-message-util/-/jest-message-util-24.5.0.tgz#181420a65a7ef2e8b5c2f8e14882c453c6d41d07"
|
||||
integrity sha512-6ZYgdOojowCGiV0D8WdgctZEAe+EcFU+KrVds+0ZjvpZurUW2/oKJGltJ6FWY2joZwYXN5VL36GPV6pNVRqRnQ==
|
||||
dependencies:
|
||||
"@babel/code-frame" "^7.0.0"
|
||||
"@jest/test-result" "^24.5.0"
|
||||
"@jest/types" "^24.5.0"
|
||||
"@types/stack-utils" "^1.0.1"
|
||||
chalk "^2.0.1"
|
||||
micromatch "^3.1.10"
|
||||
slash "^2.0.0"
|
||||
stack-utils "^1.0.1"
|
||||
|
||||
jest-message-util@^24.7.1:
|
||||
version "24.7.1"
|
||||
resolved "https://registry.yarnpkg.com/jest-message-util/-/jest-message-util-24.7.1.tgz#f1dc3a6c195647096a99d0f1dadbc447ae547018"
|
||||
@@ -4189,12 +4145,19 @@ jest-message-util@^24.7.1:
|
||||
slash "^2.0.0"
|
||||
stack-utils "^1.0.1"
|
||||
|
||||
jest-mock@^24.5.0:
|
||||
version "24.5.0"
|
||||
resolved "https://registry.yarnpkg.com/jest-mock/-/jest-mock-24.5.0.tgz#976912c99a93f2a1c67497a9414aa4d9da4c7b76"
|
||||
integrity sha512-ZnAtkWrKf48eERgAOiUxVoFavVBziO2pAi2MfZ1+bGXVkDfxWLxU0//oJBkgwbsv6OAmuLBz4XFFqvCFMqnGUw==
|
||||
jest-message-util@^24.8.0:
|
||||
version "24.8.0"
|
||||
resolved "https://registry.yarnpkg.com/jest-message-util/-/jest-message-util-24.8.0.tgz#0d6891e72a4beacc0292b638685df42e28d6218b"
|
||||
integrity sha512-p2k71rf/b6ns8btdB0uVdljWo9h0ovpnEe05ZKWceQGfXYr4KkzgKo3PBi8wdnd9OtNh46VpNIJynUn/3MKm1g==
|
||||
dependencies:
|
||||
"@jest/types" "^24.5.0"
|
||||
"@babel/code-frame" "^7.0.0"
|
||||
"@jest/test-result" "^24.8.0"
|
||||
"@jest/types" "^24.8.0"
|
||||
"@types/stack-utils" "^1.0.1"
|
||||
chalk "^2.0.1"
|
||||
micromatch "^3.1.10"
|
||||
slash "^2.0.0"
|
||||
stack-utils "^1.0.1"
|
||||
|
||||
jest-mock@^24.7.0:
|
||||
version "24.7.0"
|
||||
@@ -4203,6 +4166,13 @@ jest-mock@^24.7.0:
|
||||
dependencies:
|
||||
"@jest/types" "^24.7.0"
|
||||
|
||||
jest-mock@^24.8.0:
|
||||
version "24.8.0"
|
||||
resolved "https://registry.yarnpkg.com/jest-mock/-/jest-mock-24.8.0.tgz#2f9d14d37699e863f1febf4e4d5a33b7fdbbde56"
|
||||
integrity sha512-6kWugwjGjJw+ZkK4mDa0Df3sDlUTsV47MSrT0nGQ0RBWJbpODDQ8MHDVtGtUYBne3IwZUhtB7elxHspU79WH3A==
|
||||
dependencies:
|
||||
"@jest/types" "^24.8.0"
|
||||
|
||||
jest-pnp-resolver@^1.2.1:
|
||||
version "1.2.1"
|
||||
resolved "https://registry.yarnpkg.com/jest-pnp-resolver/-/jest-pnp-resolver-1.2.1.tgz#ecdae604c077a7fbc70defb6d517c3c1c898923a"
|
||||
@@ -4287,12 +4257,7 @@ jest-runtime@^24.7.1:
|
||||
strip-bom "^3.0.0"
|
||||
yargs "^12.0.2"
|
||||
|
||||
jest-serializer@24.0.0:
|
||||
version "24.0.0"
|
||||
resolved "https://registry.yarnpkg.com/jest-serializer/-/jest-serializer-24.0.0.tgz#522c44a332cdd194d8c0531eb06a1ee5afb4256b"
|
||||
integrity sha512-9FKxQyrFgHtx3ozU+1a8v938ILBE7S8Ko3uiAVjT8Yfi2o91j/fj81jacCQZ/Ihjiff/VsUCXVgQ+iF1XdImOw==
|
||||
|
||||
jest-serializer@^24.0.0, jest-serializer@^24.4.0:
|
||||
jest-serializer@^24.4.0:
|
||||
version "24.4.0"
|
||||
resolved "https://registry.yarnpkg.com/jest-serializer/-/jest-serializer-24.4.0.tgz#f70c5918c8ea9235ccb1276d232e459080588db3"
|
||||
integrity sha512-k//0DtglVstc1fv+GY/VHDIjrtNjdYvYjMlbLUed4kxrE92sIUewOi5Hj3vrpB8CXfkJntRPDRjCrCvUhBdL8Q==
|
||||
@@ -4315,25 +4280,6 @@ jest-snapshot@^24.7.1:
|
||||
pretty-format "^24.7.0"
|
||||
semver "^5.5.0"
|
||||
|
||||
jest-util@^24.0.0:
|
||||
version "24.5.0"
|
||||
resolved "https://registry.yarnpkg.com/jest-util/-/jest-util-24.5.0.tgz#9d9cb06d9dcccc8e7cc76df91b1635025d7baa84"
|
||||
integrity sha512-Xy8JsD0jvBz85K7VsTIQDuY44s+hYJyppAhcsHsOsGisVtdhar6fajf2UOf2mEVEgh15ZSdA0zkCuheN8cbr1Q==
|
||||
dependencies:
|
||||
"@jest/console" "^24.3.0"
|
||||
"@jest/fake-timers" "^24.5.0"
|
||||
"@jest/source-map" "^24.3.0"
|
||||
"@jest/test-result" "^24.5.0"
|
||||
"@jest/types" "^24.5.0"
|
||||
"@types/node" "*"
|
||||
callsites "^3.0.0"
|
||||
chalk "^2.0.1"
|
||||
graceful-fs "^4.1.15"
|
||||
is-ci "^2.0.0"
|
||||
mkdirp "^0.5.1"
|
||||
slash "^2.0.0"
|
||||
source-map "^0.6.0"
|
||||
|
||||
jest-util@^24.7.1:
|
||||
version "24.7.1"
|
||||
resolved "https://registry.yarnpkg.com/jest-util/-/jest-util-24.7.1.tgz#b4043df57b32a23be27c75a2763d8faf242038ff"
|
||||
@@ -4352,6 +4298,24 @@ jest-util@^24.7.1:
|
||||
slash "^2.0.0"
|
||||
source-map "^0.6.0"
|
||||
|
||||
jest-util@^24.8.0:
|
||||
version "24.8.0"
|
||||
resolved "https://registry.yarnpkg.com/jest-util/-/jest-util-24.8.0.tgz#41f0e945da11df44cc76d64ffb915d0716f46cd1"
|
||||
integrity sha512-DYZeE+XyAnbNt0BG1OQqKy/4GVLPtzwGx5tsnDrFcax36rVE3lTA5fbvgmbVPUZf9w77AJ8otqR4VBbfFJkUZA==
|
||||
dependencies:
|
||||
"@jest/console" "^24.7.1"
|
||||
"@jest/fake-timers" "^24.8.0"
|
||||
"@jest/source-map" "^24.3.0"
|
||||
"@jest/test-result" "^24.8.0"
|
||||
"@jest/types" "^24.8.0"
|
||||
callsites "^3.0.0"
|
||||
chalk "^2.0.1"
|
||||
graceful-fs "^4.1.15"
|
||||
is-ci "^2.0.0"
|
||||
mkdirp "^0.5.1"
|
||||
slash "^2.0.0"
|
||||
source-map "^0.6.0"
|
||||
|
||||
jest-validate@^24.0.0:
|
||||
version "24.0.0"
|
||||
resolved "https://registry.yarnpkg.com/jest-validate/-/jest-validate-24.0.0.tgz#aa8571a46983a6538328fef20406b4a496b6c020"
|
||||
@@ -4388,23 +4352,6 @@ jest-watcher@^24.7.1:
|
||||
jest-util "^24.7.1"
|
||||
string-length "^2.0.0"
|
||||
|
||||
jest-worker@24.0.0:
|
||||
version "24.0.0"
|
||||
resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-24.0.0.tgz#3d3483b077bf04f412f47654a27bba7e947f8b6d"
|
||||
integrity sha512-s64/OThpfQvoCeHG963MiEZOAAxu8kHsaL/rCMF7lpdzo7vgF0CtPml9hfguOMgykgH/eOm4jFP4ibfHLruytg==
|
||||
dependencies:
|
||||
merge-stream "^1.0.1"
|
||||
supports-color "^6.1.0"
|
||||
|
||||
jest-worker@^24.0.0:
|
||||
version "24.4.0"
|
||||
resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-24.4.0.tgz#fbc452b0120bb5c2a70cdc88fa132b48eeb11dd0"
|
||||
integrity sha512-BH9X/klG9vxwoO99ZBUbZFfV8qO0XNZ5SIiCyYK2zOuJBl6YJVAeNIQjcoOVNu4HGEHeYEKsUWws8kSlSbZ9YQ==
|
||||
dependencies:
|
||||
"@types/node" "*"
|
||||
merge-stream "^1.0.1"
|
||||
supports-color "^6.1.0"
|
||||
|
||||
jest-worker@^24.6.0:
|
||||
version "24.6.0"
|
||||
resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-24.6.0.tgz#7f81ceae34b7cde0c9827a6980c35b7cdc0161b3"
|
||||
@@ -4841,29 +4788,6 @@ merge-stream@^1.0.1:
|
||||
dependencies:
|
||||
readable-stream "^2.0.1"
|
||||
|
||||
merge@^1.2.0:
|
||||
version "1.2.0"
|
||||
resolved "https://registry.yarnpkg.com/merge/-/merge-1.2.0.tgz#7531e39d4949c281a66b8c5a6e0265e8b05894da"
|
||||
integrity sha1-dTHjnUlJwoGma4xabgJl6LBYlNo=
|
||||
|
||||
metro-babel-register@0.53.1:
|
||||
version "0.53.1"
|
||||
resolved "https://registry.yarnpkg.com/metro-babel-register/-/metro-babel-register-0.53.1.tgz#41c73313ff882d28d8f7df072d2c7a6b7b314ac8"
|
||||
integrity sha512-kDu7mktGCVdpa2islDzmNXZ0sGQjUvIEcQkmO9pt4b4d8QVecEHyHSZB9jvWnE2w9lADzvnERmZLHS2iDDYOyw==
|
||||
dependencies:
|
||||
"@babel/core" "^7.0.0"
|
||||
"@babel/plugin-proposal-class-properties" "^7.0.0"
|
||||
"@babel/plugin-proposal-nullish-coalescing-operator" "^7.0.0"
|
||||
"@babel/plugin-proposal-object-rest-spread" "^7.0.0"
|
||||
"@babel/plugin-proposal-optional-catch-binding" "^7.0.0"
|
||||
"@babel/plugin-proposal-optional-chaining" "^7.0.0"
|
||||
"@babel/plugin-transform-async-to-generator" "^7.0.0"
|
||||
"@babel/plugin-transform-flow-strip-types" "^7.0.0"
|
||||
"@babel/plugin-transform-modules-commonjs" "^7.0.0"
|
||||
"@babel/register" "^7.0.0"
|
||||
core-js "^2.2.2"
|
||||
escape-string-regexp "^1.0.5"
|
||||
|
||||
metro-babel-register@0.54.1:
|
||||
version "0.54.1"
|
||||
resolved "https://registry.yarnpkg.com/metro-babel-register/-/metro-babel-register-0.54.1.tgz#7d2bfe444b1ccef8de99aedc7d9330891d806076"
|
||||
@@ -4882,13 +4806,6 @@ metro-babel-register@0.54.1:
|
||||
core-js "^2.2.2"
|
||||
escape-string-regexp "^1.0.5"
|
||||
|
||||
metro-babel-transformer@0.53.1:
|
||||
version "0.53.1"
|
||||
resolved "https://registry.yarnpkg.com/metro-babel-transformer/-/metro-babel-transformer-0.53.1.tgz#a076fd77a9a7aef8004706edf537dcd1fec4a79e"
|
||||
integrity sha512-cgZj9KK/SLxsO/rAmrlnZpaBlLhxuWxGrQkkiWxV/OjfbW8nvodozfZ3Euxvh4Ytf0e8qgTFG3JpQf8EGSDp7w==
|
||||
dependencies:
|
||||
"@babel/core" "^7.0.0"
|
||||
|
||||
metro-babel-transformer@0.54.1:
|
||||
version "0.54.1"
|
||||
resolved "https://registry.yarnpkg.com/metro-babel-transformer/-/metro-babel-transformer-0.54.1.tgz#371ffa2d1118b22cc9e40b3c3ea6738c49dae9dc"
|
||||
@@ -4896,13 +4813,6 @@ metro-babel-transformer@0.54.1:
|
||||
dependencies:
|
||||
"@babel/core" "^7.0.0"
|
||||
|
||||
metro-babel7-plugin-react-transform@0.53.1:
|
||||
version "0.53.1"
|
||||
resolved "https://registry.yarnpkg.com/metro-babel7-plugin-react-transform/-/metro-babel7-plugin-react-transform-0.53.1.tgz#9ad31e5c84f5003333a6a3cf79f2d093cd3b2ddc"
|
||||
integrity sha512-98lEpTu7mox/7QurxVuLnbjrGDdayjpS2Z1T4vkLcP+mBxzloKJuTRnmtyWC8cNlx9qjimHGDlqtNY78rQ8rsA==
|
||||
dependencies:
|
||||
"@babel/helper-module-imports" "^7.0.0"
|
||||
|
||||
metro-babel7-plugin-react-transform@0.54.1:
|
||||
version "0.54.1"
|
||||
resolved "https://registry.yarnpkg.com/metro-babel7-plugin-react-transform/-/metro-babel7-plugin-react-transform-0.54.1.tgz#5335b810284789724886dc483d5bde9c149a1996"
|
||||
@@ -4910,97 +4820,56 @@ metro-babel7-plugin-react-transform@0.54.1:
|
||||
dependencies:
|
||||
"@babel/helper-module-imports" "^7.0.0"
|
||||
|
||||
metro-cache@0.53.1:
|
||||
version "0.53.1"
|
||||
resolved "https://registry.yarnpkg.com/metro-cache/-/metro-cache-0.53.1.tgz#38d73c441771bdd2437a55d50943e346e1897108"
|
||||
integrity sha512-27Cbo32nabef/P+y5s3cpaIUWa7Hpql2xD0HqQD8AbCfSG4xraEoBOLCmvB6wusvDAnQAcuglLq9AUbTvcSebA==
|
||||
metro-cache@0.54.1:
|
||||
version "0.54.1"
|
||||
resolved "https://registry.yarnpkg.com/metro-cache/-/metro-cache-0.54.1.tgz#2e9017cbd11106837b8c385c9eb8c8175469a8c1"
|
||||
integrity sha512-RxCFoNcANHXZYi4MIQNnqh68gUnC3bMpzCFJY5pBoqqdrkkn8ibYglBweA0/DW7hx1OZTJWelwS1Dp8xxmE2CA==
|
||||
dependencies:
|
||||
jest-serializer "24.0.0"
|
||||
metro-core "0.53.1"
|
||||
jest-serializer "^24.4.0"
|
||||
metro-core "0.54.1"
|
||||
mkdirp "^0.5.1"
|
||||
rimraf "^2.5.4"
|
||||
|
||||
metro-config@0.53.1, metro-config@^0.53.1:
|
||||
version "0.53.1"
|
||||
resolved "https://registry.yarnpkg.com/metro-config/-/metro-config-0.53.1.tgz#a522beec446187b010c0e68273015818d1c6dfb9"
|
||||
integrity sha512-3hRweWmrGs8NOjQXLsg/FHAEWqCnfNKLXM4BcI8RXQFvrQQRqhoXCuhcTfM9lSfNkefJiRp+4wW6cHXgo/TP6w==
|
||||
metro-config@0.54.1, metro-config@^0.54.1:
|
||||
version "0.54.1"
|
||||
resolved "https://registry.yarnpkg.com/metro-config/-/metro-config-0.54.1.tgz#808b4e17625d9f4e9afa34232778fdf8e63cc8dd"
|
||||
integrity sha512-FpxrA+63rGkPGvGI653dvuSreJzU+eOTILItVnnhmqwn2SAK5V00N/qGTOIJe2YIuWEFXwCzw9lXmANrXbwuGg==
|
||||
dependencies:
|
||||
cosmiconfig "^5.0.5"
|
||||
metro "0.53.1"
|
||||
metro-cache "0.53.1"
|
||||
metro-core "0.53.1"
|
||||
pretty-format "24.0.0-alpha.6"
|
||||
jest-validate "^24.7.0"
|
||||
metro "0.54.1"
|
||||
metro-cache "0.54.1"
|
||||
metro-core "0.54.1"
|
||||
pretty-format "^24.7.0"
|
||||
|
||||
metro-core@0.53.1, metro-core@^0.53.1:
|
||||
version "0.53.1"
|
||||
resolved "https://registry.yarnpkg.com/metro-core/-/metro-core-0.53.1.tgz#350211c6327ccf307270199bb1c04012ec2d7d96"
|
||||
integrity sha512-bBK0GMZWsZrdBGi+jh/87g0VvItT2jez6aj+vRw8AcBataT81SZ5WsSAw3CtbivBXXR7x3oK49T6ZZ+D79VZAw==
|
||||
metro-core@0.54.1, metro-core@^0.54.1:
|
||||
version "0.54.1"
|
||||
resolved "https://registry.yarnpkg.com/metro-core/-/metro-core-0.54.1.tgz#17f6ecc167918da8819d4af5726349e55714954b"
|
||||
integrity sha512-8oz3Ck7QFBzW9dG9tKFhrXHKPu2Ajx3R7eatf61Gl6Jf/tF7PNouv3wHxPsJW3oXDFiwKLszd89+OgleTGkB5g==
|
||||
dependencies:
|
||||
jest-haste-map "24.0.0"
|
||||
jest-haste-map "^24.7.1"
|
||||
lodash.throttle "^4.1.1"
|
||||
metro-resolver "0.53.1"
|
||||
metro-resolver "0.54.1"
|
||||
wordwrap "^1.0.0"
|
||||
|
||||
metro-inspector-proxy@0.53.1:
|
||||
version "0.53.1"
|
||||
resolved "https://registry.yarnpkg.com/metro-inspector-proxy/-/metro-inspector-proxy-0.53.1.tgz#cff4b9fa8b9e5598c034469bd30ef07093f75b28"
|
||||
integrity sha512-4q5WIFFmpjtKbY2vze3tNI3hPUFrvv1iwTrpz3DMdQ+NYZO6aEwCxtgZAt8N4HC3xZMdECL+DDKKAJu+4jsiEA==
|
||||
metro-inspector-proxy@0.54.1:
|
||||
version "0.54.1"
|
||||
resolved "https://registry.yarnpkg.com/metro-inspector-proxy/-/metro-inspector-proxy-0.54.1.tgz#0ef48ee3feb11c6da47aa100151a9bf2a7c358ee"
|
||||
integrity sha512-sf6kNu7PgFW6U+hU7YGZfbAUKAPVvCJhY8YVu/A1RMKH9nNULrCo+jlWh0gWgmFfWRQiAPCElevROg+5somk8A==
|
||||
dependencies:
|
||||
chalk "^2.4.1"
|
||||
connect "^3.6.5"
|
||||
debug "^2.2.0"
|
||||
rxjs "^5.4.3"
|
||||
ws "^1.1.5"
|
||||
yargs "^9.0.0"
|
||||
|
||||
metro-minify-uglify@0.53.1:
|
||||
version "0.53.1"
|
||||
resolved "https://registry.yarnpkg.com/metro-minify-uglify/-/metro-minify-uglify-0.53.1.tgz#145b6e37c09e3ff8fb1bbd3221e5a3fded044904"
|
||||
integrity sha512-uTdsoACy0WP51qDNrKcLILcpZOMLGyi2B9j3pu9zVRts7hlfVQGxBg4v3uDZ+L7zJ7TKR15p4iMXFmTAkRBpdA==
|
||||
metro-minify-uglify@0.54.1:
|
||||
version "0.54.1"
|
||||
resolved "https://registry.yarnpkg.com/metro-minify-uglify/-/metro-minify-uglify-0.54.1.tgz#54ed1cb349245ce82dba8cc662bbf69fbca142c3"
|
||||
integrity sha512-z+pOPna/8IxD4OhjW6Xo1mV2EszgqqQHqBm1FdmtdF6IpWkQp33qpDBNEi9NGZTOr7pp2bvcxZnvNJdC2lrK9Q==
|
||||
dependencies:
|
||||
uglify-es "^3.1.9"
|
||||
|
||||
metro-react-native-babel-preset@0.53.1:
|
||||
version "0.53.1"
|
||||
resolved "https://registry.yarnpkg.com/metro-react-native-babel-preset/-/metro-react-native-babel-preset-0.53.1.tgz#6cd9e41a1b9a6e210e71ef2adf114219b4eaf2ec"
|
||||
integrity sha512-Uf8EGL8kIPhDkoSdAAysNPxPQclUS2R1QC4cwnc8bkk2f6yqGn+1CorfiY9AaqlLEth5mKQqdtRYFDTFfB9QyA==
|
||||
dependencies:
|
||||
"@babel/plugin-proposal-class-properties" "^7.0.0"
|
||||
"@babel/plugin-proposal-export-default-from" "^7.0.0"
|
||||
"@babel/plugin-proposal-nullish-coalescing-operator" "^7.0.0"
|
||||
"@babel/plugin-proposal-object-rest-spread" "^7.0.0"
|
||||
"@babel/plugin-proposal-optional-catch-binding" "^7.0.0"
|
||||
"@babel/plugin-proposal-optional-chaining" "^7.0.0"
|
||||
"@babel/plugin-syntax-dynamic-import" "^7.0.0"
|
||||
"@babel/plugin-syntax-export-default-from" "^7.0.0"
|
||||
"@babel/plugin-syntax-flow" "^7.2.0"
|
||||
"@babel/plugin-transform-arrow-functions" "^7.0.0"
|
||||
"@babel/plugin-transform-block-scoping" "^7.0.0"
|
||||
"@babel/plugin-transform-classes" "^7.0.0"
|
||||
"@babel/plugin-transform-computed-properties" "^7.0.0"
|
||||
"@babel/plugin-transform-destructuring" "^7.0.0"
|
||||
"@babel/plugin-transform-exponentiation-operator" "^7.0.0"
|
||||
"@babel/plugin-transform-flow-strip-types" "^7.0.0"
|
||||
"@babel/plugin-transform-for-of" "^7.0.0"
|
||||
"@babel/plugin-transform-function-name" "^7.0.0"
|
||||
"@babel/plugin-transform-literals" "^7.0.0"
|
||||
"@babel/plugin-transform-modules-commonjs" "^7.0.0"
|
||||
"@babel/plugin-transform-object-assign" "^7.0.0"
|
||||
"@babel/plugin-transform-parameters" "^7.0.0"
|
||||
"@babel/plugin-transform-react-display-name" "^7.0.0"
|
||||
"@babel/plugin-transform-react-jsx" "^7.0.0"
|
||||
"@babel/plugin-transform-react-jsx-source" "^7.0.0"
|
||||
"@babel/plugin-transform-regenerator" "^7.0.0"
|
||||
"@babel/plugin-transform-runtime" "^7.0.0"
|
||||
"@babel/plugin-transform-shorthand-properties" "^7.0.0"
|
||||
"@babel/plugin-transform-spread" "^7.0.0"
|
||||
"@babel/plugin-transform-sticky-regex" "^7.0.0"
|
||||
"@babel/plugin-transform-template-literals" "^7.0.0"
|
||||
"@babel/plugin-transform-typescript" "^7.0.0"
|
||||
"@babel/plugin-transform-unicode-regex" "^7.0.0"
|
||||
"@babel/template" "^7.0.0"
|
||||
metro-babel7-plugin-react-transform "0.53.1"
|
||||
react-transform-hmr "^1.0.4"
|
||||
|
||||
metro-react-native-babel-preset@0.54.1:
|
||||
version "0.54.1"
|
||||
resolved "https://registry.yarnpkg.com/metro-react-native-babel-preset/-/metro-react-native-babel-preset-0.54.1.tgz#b8f03865c381841d7f8912e7ba46804ea3a928b8"
|
||||
@@ -5043,7 +4912,7 @@ metro-react-native-babel-preset@0.54.1:
|
||||
metro-babel7-plugin-react-transform "0.54.1"
|
||||
react-transform-hmr "^1.0.4"
|
||||
|
||||
metro-react-native-babel-transformer@0.54.1:
|
||||
metro-react-native-babel-transformer@0.54.1, metro-react-native-babel-transformer@^0.54.1:
|
||||
version "0.54.1"
|
||||
resolved "https://registry.yarnpkg.com/metro-react-native-babel-transformer/-/metro-react-native-babel-transformer-0.54.1.tgz#45b56db004421134e10e739f69e8de50775fef17"
|
||||
integrity sha512-ECw7xG91t8dk/PHdiyoC5SP1s9OQzfmJzG5m0YOZaKtHMe534qTDbncxaKfTI3CP99yti2maXFBRVj+xyvph/g==
|
||||
@@ -5053,34 +4922,26 @@ metro-react-native-babel-transformer@0.54.1:
|
||||
metro-babel-transformer "0.54.1"
|
||||
metro-react-native-babel-preset "0.54.1"
|
||||
|
||||
metro-react-native-babel-transformer@^0.53.1:
|
||||
version "0.53.1"
|
||||
resolved "https://registry.yarnpkg.com/metro-react-native-babel-transformer/-/metro-react-native-babel-transformer-0.53.1.tgz#addf31b3a9b5fc512b9ff6967d923dcfcda56394"
|
||||
integrity sha512-UB64jN/akuTdDmoQlw+yLBifJhQzJr7QPP3cwitwM5XD4d9M+12pZreeFn66oMakTy4pNx4jkaYEJ5rLyh/b0Q==
|
||||
dependencies:
|
||||
"@babel/core" "^7.0.0"
|
||||
babel-preset-fbjs "^3.1.2"
|
||||
metro-babel-transformer "0.53.1"
|
||||
metro-react-native-babel-preset "0.53.1"
|
||||
|
||||
metro-resolver@0.53.1:
|
||||
version "0.53.1"
|
||||
resolved "https://registry.yarnpkg.com/metro-resolver/-/metro-resolver-0.53.1.tgz#e21df30c0b9913c7cbeeda9c28d8ffe0ae58cd53"
|
||||
integrity sha512-UOL2AY3HF3kyuwO+SXceA7MvVbxGZTwRmWOcRl2mYMZ66osSygFgR0WoYFAlxoW83c1ZDYXMIg78ob8bs0lSAg==
|
||||
metro-resolver@0.54.1:
|
||||
version "0.54.1"
|
||||
resolved "https://registry.yarnpkg.com/metro-resolver/-/metro-resolver-0.54.1.tgz#0295b38624b678b88b16bf11d47288845132b087"
|
||||
integrity sha512-Byv1LIawYAASy9CFRwzrncYnqaFGLe8vpw178EtzStqP05Hu6hXSqkNTrfoXa+3V9bPFGCrVzFx2NY3gFp2btg==
|
||||
dependencies:
|
||||
absolute-path "^0.0.0"
|
||||
|
||||
metro-source-map@0.53.1:
|
||||
version "0.53.1"
|
||||
resolved "https://registry.yarnpkg.com/metro-source-map/-/metro-source-map-0.53.1.tgz#61d915720eb90722d55252f3bd014ba0ce8fabfd"
|
||||
integrity sha512-mZ8NJMq5lKE9+0gfhpYFVqK3z4wng6xCzOMXoROjkOsO/exbHGK4oSfOzEnVl6oCRBTGMfaeB32ZeECwZ9O0jw==
|
||||
metro-source-map@0.54.1:
|
||||
version "0.54.1"
|
||||
resolved "https://registry.yarnpkg.com/metro-source-map/-/metro-source-map-0.54.1.tgz#e17bad53c11978197d3c05c9168d799c2e04dcc5"
|
||||
integrity sha512-E9iSYMSUSq5qYi1R2hTQtxH4Mxjzfgr/jaSmQIWi7h3fG2P1qOZNNSzeaeUeTK+s2N/ksVlkcL5kMikol8CDrQ==
|
||||
dependencies:
|
||||
"@babel/traverse" "^7.0.0"
|
||||
"@babel/types" "^7.0.0"
|
||||
source-map "^0.5.6"
|
||||
|
||||
metro@0.53.1, metro@^0.53.1:
|
||||
version "0.53.1"
|
||||
resolved "https://registry.yarnpkg.com/metro/-/metro-0.53.1.tgz#23fb558eb22e8de8d84fa3f456adfdedec435021"
|
||||
integrity sha512-Q2iVHfUu5NO2o0dZukBkWrW5s2LiResQuK5KalomNsOHLguOYI5r1nR5QdznZ05GI96iR0fgNvFWfPMyIhtKvw==
|
||||
metro@0.54.1, metro@^0.54.1:
|
||||
version "0.54.1"
|
||||
resolved "https://registry.yarnpkg.com/metro/-/metro-0.54.1.tgz#a629be00abee5a450a25a8f71c24745f70cc9b44"
|
||||
integrity sha512-6ODPT4mEo4FCpbExRNnQAcZmf1VeNvYOTMj2Na03FjGqhNODHhI2U/wF/Ul5gqTyJ2dVdkXeyvKW3gl/LrnJRg==
|
||||
dependencies:
|
||||
"@babel/core" "^7.0.0"
|
||||
"@babel/generator" "^7.0.0"
|
||||
@@ -5104,21 +4965,21 @@ metro@0.53.1, metro@^0.53.1:
|
||||
graceful-fs "^4.1.3"
|
||||
image-size "^0.6.0"
|
||||
invariant "^2.2.4"
|
||||
jest-haste-map "24.0.0"
|
||||
jest-worker "24.0.0"
|
||||
jest-haste-map "^24.7.1"
|
||||
jest-worker "^24.6.0"
|
||||
json-stable-stringify "^1.0.1"
|
||||
lodash.throttle "^4.1.1"
|
||||
merge-stream "^1.0.1"
|
||||
metro-babel-register "0.53.1"
|
||||
metro-babel-transformer "0.53.1"
|
||||
metro-cache "0.53.1"
|
||||
metro-config "0.53.1"
|
||||
metro-core "0.53.1"
|
||||
metro-inspector-proxy "0.53.1"
|
||||
metro-minify-uglify "0.53.1"
|
||||
metro-react-native-babel-preset "0.53.1"
|
||||
metro-resolver "0.53.1"
|
||||
metro-source-map "0.53.1"
|
||||
metro-babel-register "0.54.1"
|
||||
metro-babel-transformer "0.54.1"
|
||||
metro-cache "0.54.1"
|
||||
metro-config "0.54.1"
|
||||
metro-core "0.54.1"
|
||||
metro-inspector-proxy "0.54.1"
|
||||
metro-minify-uglify "0.54.1"
|
||||
metro-react-native-babel-preset "0.54.1"
|
||||
metro-resolver "0.54.1"
|
||||
metro-source-map "0.54.1"
|
||||
mime-types "2.1.11"
|
||||
mkdirp "^0.5.1"
|
||||
node-fetch "^2.2.0"
|
||||
@@ -5179,11 +5040,16 @@ mime-types@^2.1.12, mime-types@~2.1.18, mime-types@~2.1.19:
|
||||
dependencies:
|
||||
mime-db "~1.36.0"
|
||||
|
||||
mime@1.4.1, mime@^1.3.4:
|
||||
mime@1.4.1:
|
||||
version "1.4.1"
|
||||
resolved "https://registry.yarnpkg.com/mime/-/mime-1.4.1.tgz#121f9ebc49e3766f311a76e1fa1c8003c4b03aa6"
|
||||
integrity sha512-KI1+qOZu5DcW6wayYHSzR/tXKCDC5Om4s1z2QJjDULzLcmf3DvzS7oluY4HCTrc+9FiKmWUgeNLg7W3uIQvxtQ==
|
||||
|
||||
mime@^2.4.1:
|
||||
version "2.4.3"
|
||||
resolved "https://registry.yarnpkg.com/mime/-/mime-2.4.3.tgz#229687331e86f68924e6cb59e1cdd937f18275fe"
|
||||
integrity sha512-QgrPRJfE+riq5TPZMcHZOtm8c6K/yYrMbKIoRfapfiGLxS8OTeIfRhUGW5LU7MlRa52KOAGCfUNruqLrIBvWZw==
|
||||
|
||||
mimic-fn@^1.0.0:
|
||||
version "1.2.0"
|
||||
resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-1.2.0.tgz#820c86a39334640e99516928bd03fca88057d022"
|
||||
@@ -5364,6 +5230,11 @@ node-fetch@^2.2.0:
|
||||
resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.2.0.tgz#4ee79bde909262f9775f731e3656d0db55ced5b5"
|
||||
integrity sha512-OayFWziIxiHY8bCUyLX6sTpDH8Jsbp4FfYd1j1f7vZyfgkcOnAyM4oQR16f8a0s7Gl/viMGRey8eScYk4V4EZA==
|
||||
|
||||
node-fetch@^2.5.0:
|
||||
version "2.6.0"
|
||||
resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.6.0.tgz#e633456386d4aa55863f676a7ab0daa8fdecb0fd"
|
||||
integrity sha512-8dG4H5ujfvFiqDmVu9fQ5bOHUC15JMjMY/Zumv26oOvvVJjM67KF8koCWIabKQ1GJIa9r2mMZscBq/TbdOcmNA==
|
||||
|
||||
node-int64@^0.4.0:
|
||||
version "0.4.0"
|
||||
resolved "https://registry.yarnpkg.com/node-int64/-/node-int64-0.4.0.tgz#87a9065cdb355d3182d8f94ce11188b825c68a3b"
|
||||
@@ -5887,14 +5758,6 @@ prettier@1.17.0:
|
||||
resolved "https://registry.yarnpkg.com/prettier/-/prettier-1.17.0.tgz#53b303676eed22cc14a9f0cec09b477b3026c008"
|
||||
integrity sha512-sXe5lSt2WQlCbydGETgfm1YBShgOX4HxQkFPvbxkcwgDvGDeqVau8h+12+lmSVlP3rHPz0oavfddSZg/q+Szjw==
|
||||
|
||||
pretty-format@24.0.0-alpha.6:
|
||||
version "24.0.0-alpha.6"
|
||||
resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-24.0.0-alpha.6.tgz#25ad2fa46b342d6278bf241c5d2114d4376fbac1"
|
||||
integrity sha512-zG2m6YJeuzwBFqb5EIdmwYVf30sap+iMRuYNPytOccEXZMAJbPIFGKVJ/U0WjQegmnQbRo9CI7j6j3HtDaifiA==
|
||||
dependencies:
|
||||
ansi-regex "^4.0.0"
|
||||
ansi-styles "^3.2.0"
|
||||
|
||||
pretty-format@^24.0.0:
|
||||
version "24.0.0"
|
||||
resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-24.0.0.tgz#cb6599fd73ac088e37ed682f61291e4678f48591"
|
||||
@@ -6447,23 +6310,6 @@ safe-regex@^1.1.0:
|
||||
resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a"
|
||||
integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==
|
||||
|
||||
sane@^3.0.0:
|
||||
version "3.1.0"
|
||||
resolved "https://registry.yarnpkg.com/sane/-/sane-3.1.0.tgz#995193b7dc1445ef1fe41ddfca2faf9f111854c6"
|
||||
integrity sha512-G5GClRRxT1cELXfdAq7UKtUsv8q/ZC5k8lQGmjEm4HcAl3HzBy68iglyNCmw4+0tiXPCBZntslHlRhbnsSws+Q==
|
||||
dependencies:
|
||||
anymatch "^2.0.0"
|
||||
capture-exit "^1.2.0"
|
||||
exec-sh "^0.2.0"
|
||||
execa "^1.0.0"
|
||||
fb-watchman "^2.0.0"
|
||||
micromatch "^3.1.4"
|
||||
minimist "^1.1.1"
|
||||
walker "~1.0.5"
|
||||
watch "~0.18.0"
|
||||
optionalDependencies:
|
||||
fsevents "^1.2.3"
|
||||
|
||||
sane@^4.0.3:
|
||||
version "4.0.3"
|
||||
resolved "https://registry.yarnpkg.com/sane/-/sane-4.0.3.tgz#e878c3f19e25cc57fbb734602f48f8a97818b181"
|
||||
@@ -7315,14 +7161,6 @@ walker@^1.0.7, walker@~1.0.5:
|
||||
dependencies:
|
||||
makeerror "1.0.x"
|
||||
|
||||
watch@~0.18.0:
|
||||
version "0.18.0"
|
||||
resolved "https://registry.yarnpkg.com/watch/-/watch-0.18.0.tgz#28095476c6df7c90c963138990c0a5423eb4b986"
|
||||
integrity sha1-KAlUdsbffJDJYxOJkMClQj60uYY=
|
||||
dependencies:
|
||||
exec-sh "^0.2.0"
|
||||
minimist "^1.2.0"
|
||||
|
||||
wcwidth@^1.0.1:
|
||||
version "1.0.1"
|
||||
resolved "https://registry.yarnpkg.com/wcwidth/-/wcwidth-1.0.1.tgz#f0b0dcf915bc5ff1528afadb2c0e17b532da2fe8"
|
||||
@@ -7342,7 +7180,7 @@ whatwg-encoding@^1.0.1, whatwg-encoding@^1.0.3:
|
||||
dependencies:
|
||||
iconv-lite "0.4.24"
|
||||
|
||||
whatwg-fetch@>=0.10.0:
|
||||
whatwg-fetch@>=0.10.0, whatwg-fetch@^3.0.0:
|
||||
version "3.0.0"
|
||||
resolved "https://registry.yarnpkg.com/whatwg-fetch/-/whatwg-fetch-3.0.0.tgz#fc804e458cc460009b1a2b966bc8817d2578aefb"
|
||||
integrity sha512-9GSJUgz1D4MfyKU7KRqwOjXCXTqWdFNvEr7eUBYchQiVc744mqK/MzXPNR2WsPkmkOa4ywfg8C2n8h+13Bey1Q==
|
||||
|
||||
Reference in New Issue
Block a user